Wiktionary
thwiktionary
https://th.wiktionary.org/wiki/%E0%B8%A7%E0%B8%B4%E0%B8%81%E0%B8%B4%E0%B8%9E%E0%B8%88%E0%B8%99%E0%B8%B2%E0%B8%99%E0%B8%B8%E0%B8%81%E0%B8%A3%E0%B8%A1:%E0%B8%AB%E0%B8%99%E0%B9%89%E0%B8%B2%E0%B8%AB%E0%B8%A5%E0%B8%B1%E0%B8%81
MediaWiki 1.47.0-wmf.11
case-sensitive
สื่อ
พิเศษ
พูดคุย
ผู้ใช้
คุยกับผู้ใช้
วิกิพจนานุกรม
คุยเรื่องวิกิพจนานุกรม
ไฟล์
คุยเรื่องไฟล์
มีเดียวิกิ
คุยเรื่องมีเดียวิกิ
แม่แบบ
คุยเรื่องแม่แบบ
วิธีใช้
คุยเรื่องวิธีใช้
หมวดหมู่
คุยเรื่องหมวดหมู่
ภาคผนวก
คุยเรื่องภาคผนวก
ดัชนี
คุยเรื่องดัชนี
สัมผัส
คุยเรื่องสัมผัส
อรรถาภิธาน
คุยเรื่องอรรถาภิธาน
TimedText
TimedText talk
มอดูล
คุยเรื่องมอดูล
Event
Event talk
หิ่งห้อย
0
3585
5729375
4755093
2026-07-20T07:36:58Z
Alifshinobi
397
/* รากศัพท์ */
5729375
wikitext
text/x-wiki
== ภาษาไทย ==
[[ไฟล์:Lampyris noctiluca.jpg|thumb|250px|[1] หิ่งห้อย]]
{{วิกิพีเดีย}}
=== รากศัพท์ ===
ร่วมเชื้อสายกับ{{cog|lo|ຫິ່ງຫ້ອຍ}}, {{cog|khb|ᦠᦲᧂᧈᦠᦾᧉ}}, {{cog|shn|ႁိင်ႇႁွႆႈ}}, {{cog|za|hing hoij}} (หิงห้อย), {{cog|zzj|yieng hoij}} (เหยียงห้อย-Daxin)
=== การออกเสียง ===
{{th-pron|หิ่ง-ฮ็่อย}}
=== คำนาม ===
{{th-noun|ตัว}}
# [[แมลงปีกแข็ง]]ในวงศ์ {{species|Lampyridae}} อันดับ {{species|Coleoptera}} มีแสงเรือง ๆ ที่ก้น
==== คำพ้องความ ====
{{col4|th
|ทิ้งถ่วง
}}
{{topics|th|แมลง}}
0ykilizajghmg7ah1jpazp6vn5foetl
ก่ง
0
4081
5729413
5689727
2026-07-20T08:53:17Z
Heavenchris
5375
/* รากศัพท์ */
5729413
wikitext
text/x-wiki
{{also/auto}}
== ภาษาไทย ==
=== รากศัพท์ ===
, {{cog|zzj|goengq||ค่อม งอ โค้ง}}, {{cog|za|goengq||ค่อม งอ โค้ง}}
{{bor+|th|mkh-pro|*koŋ||โค้ง; งอ}}; ร่วมเชื้อสายกับ {{cog|th|ก้งโค้ง}}, {{m|th|โกง}}, {{m|th|โก่ง}}, {{m|th|โก้งโค้ง}}, {{m|th|โค้ง}}
=== การออกเสียง ===
{{th-pron}}
=== คำกริยา ===
{{th-verb}}
# [[ทำให้]][[งอ]][[เป็น]][[รูป]][[โค้ง]], ทำให้โค้ง
#: #: {{ux|th|ก่ง[[ศร]]}}
#: #: {{ux|th|ก่งคอ}}
==== คำพ้องความ ====
* {{l|th|โก่ง}}
==== คำแปลภาษาอื่น ====
{{trans-top|ทำให้โค้ง}}
* อังกฤษ: {{t+|en|bend}}
{{trans-bottom}}
=== คำคุณศัพท์ ===
{{th-adj}}
# [[เป็น]][[รูป]][[โค้ง]]
==== คำพ้องความ ====
* {{l|th|โก่ง}}
==== คำแปลภาษาอื่น ====
{{trans-top|เป็นรูปโค้ง}}
* อังกฤษ: {{t+|en|curved}}, {{t+|en|arched}}
{{trans-bottom}}
== ภาษาคำเมือง ==
=== คำกริยา ===
{{nod-verb}}
# {{alternative spelling of|nod|ᨠᩫ᩠᩵ᨦ||ทำให้โค้ง}}
=== คำคุณศัพท์ ===
{{nod-adj}}
# {{alternative spelling of|nod|ᨠᩫ᩠᩵ᨦ||โค้ง}}
gw4yvet3ipn0yxz1f8f9oj16dac64u2
5729414
5729413
2026-07-20T08:53:43Z
Heavenchris
5375
5729414
wikitext
text/x-wiki
{{also/auto}}
== ภาษาไทย ==
=== รากศัพท์ ===
{{cog|zzj|goengq||ค่อม งอ โค้ง}}, {{cog|za|goengq||ค่อม งอ โค้ง}},
{{bor+|th|mkh-pro|*koŋ||โค้ง; งอ}}; ร่วมเชื้อสายกับ {{cog|th|ก้งโค้ง}}, {{m|th|โกง}}, {{m|th|โก่ง}}, {{m|th|โก้งโค้ง}}, {{m|th|โค้ง}}
=== การออกเสียง ===
{{th-pron}}
=== คำกริยา ===
{{th-verb}}
# [[ทำให้]][[งอ]][[เป็น]][[รูป]][[โค้ง]], ทำให้โค้ง
#: #: {{ux|th|ก่ง[[ศร]]}}
#: #: {{ux|th|ก่งคอ}}
==== คำพ้องความ ====
* {{l|th|โก่ง}}
==== คำแปลภาษาอื่น ====
{{trans-top|ทำให้โค้ง}}
* อังกฤษ: {{t+|en|bend}}
{{trans-bottom}}
=== คำคุณศัพท์ ===
{{th-adj}}
# [[เป็น]][[รูป]][[โค้ง]]
==== คำพ้องความ ====
* {{l|th|โก่ง}}
==== คำแปลภาษาอื่น ====
{{trans-top|เป็นรูปโค้ง}}
* อังกฤษ: {{t+|en|curved}}, {{t+|en|arched}}
{{trans-bottom}}
== ภาษาคำเมือง ==
=== คำกริยา ===
{{nod-verb}}
# {{alternative spelling of|nod|ᨠᩫ᩠᩵ᨦ||ทำให้โค้ง}}
=== คำคุณศัพท์ ===
{{nod-adj}}
# {{alternative spelling of|nod|ᨠᩫ᩠᩵ᨦ||โค้ง}}
sbyzhyrqwrfqwb0s94a47h63uvc6h2j
5729415
5729414
2026-07-20T08:54:13Z
Heavenchris
5375
5729415
wikitext
text/x-wiki
{{also/auto}}
== ภาษาไทย ==
=== รากศัพท์ ===
{{cog|zzj|goengq||ค่อม งอ โค้ง}}, {{cog|za|goengq||ค่อม งอ โค้ง}},{{bor+|th|mkh-pro|*koŋ||โค้ง; งอ}}; ร่วมเชื้อสายกับ {{cog|th|ก้งโค้ง}}, {{m|th|โกง}}, {{m|th|โก่ง}}, {{m|th|โก้งโค้ง}}, {{m|th|โค้ง}}
=== การออกเสียง ===
{{th-pron}}
=== คำกริยา ===
{{th-verb}}
# [[ทำให้]][[งอ]][[เป็น]][[รูป]][[โค้ง]], ทำให้โค้ง
#: #: {{ux|th|ก่ง[[ศร]]}}
#: #: {{ux|th|ก่งคอ}}
==== คำพ้องความ ====
* {{l|th|โก่ง}}
==== คำแปลภาษาอื่น ====
{{trans-top|ทำให้โค้ง}}
* อังกฤษ: {{t+|en|bend}}
{{trans-bottom}}
=== คำคุณศัพท์ ===
{{th-adj}}
# [[เป็น]][[รูป]][[โค้ง]]
==== คำพ้องความ ====
* {{l|th|โก่ง}}
==== คำแปลภาษาอื่น ====
{{trans-top|เป็นรูปโค้ง}}
* อังกฤษ: {{t+|en|curved}}, {{t+|en|arched}}
{{trans-bottom}}
== ภาษาคำเมือง ==
=== คำกริยา ===
{{nod-verb}}
# {{alternative spelling of|nod|ᨠᩫ᩠᩵ᨦ||ทำให้โค้ง}}
=== คำคุณศัพท์ ===
{{nod-adj}}
# {{alternative spelling of|nod|ᨠᩫ᩠᩵ᨦ||โค้ง}}
6jo4w04aoptn5kv2g0tru9z459x4egf
ก้วย
0
8797
5729046
1879524
2026-07-19T23:28:04Z
Alifshinobi
397
/* ภาษาคำเมือง */
5729046
wikitext
text/x-wiki
{{also/auto}}
== ภาษาคำเมือง ==
=== การออกเสียง ===
* {{IPA|nod|/koːj˦˦ʔ/|a=เชียงใหม่}}
=== คำนาม ===
{{nod-noun}}
# {{altform|nod|ᨠᩖ᩠ᩅ᩠᩶ᨿ|t=[[กล้วย]]}}
== ภาษาญ้อ ==
=== คำนาม ===
{{nyw-noun}}
# [[กล้วย]]
== ภาษาอีสาน ==
=== คำนาม ===
{{tts-noun}}
# [[กล้วย]]
sas07mg0u4mrp9g6x79drzaobdiqc0g
กก
0
10497
5729411
5689726
2026-07-20T08:47:32Z
Heavenchris
5375
5729411
wikitext
text/x-wiki
{{also/auto}}
== ภาษาไทย ==
{{วิกิพีเดีย}}
=== การออกเสียง ===
{{th-pron}}
=== รากศัพท์ 1 ===
==== คำนาม ====
{{th-noun}}
# [[เรียก]][[คำ]][[หรือ]][[พยางค์]][[ที่]][[มี]][[ตัว]] [[ก]] [[ข]] [[ค]] [[ฆ]] [[สะกด]][[ว่า]] [[แม่กก]] หรือ [[มาตรากก]]
=== รากศัพท์ 2 ===
ร่วมเชื้อสายกับ{{cog|lo|ກົກ}}, {{cog|blt|ꪶꪀꪀ}}, {{cog|zzj|goek}}, {{cog|za|goek}}
==== คำนาม ====
{{th-noun}}
# [[โคน]]
#: {{ux|th|กกไม้}}
# [[ต้น]]
#: {{ux|th|กกขา}}
# [[ลำต้น]]
#: {{ux|th|กกเสา}}
===== ลูกคำ =====
{{col2|th|กกหู|กกเสา}}
=== รากศัพท์ 3 ===
==== คำนาม ====
{{th-noun}}
# [[ชื่อ]][[ไม้ล้มลุก]][[ใน]][[วงศ์]] Cyperaceae [[เกิด]]ในที่[[ชุ่ม]][[แฉะ]] [[ชนิด]]ลำต้น[[กลม]] [[ใช้]][[ทอ]]หรือ[[สาน]][[เสื่อ]] เรียกว่า [[กกกลม]] หรือ [[กกเสื่อ]] '' (Cyperus corymbosus'' Rottb., ''C. tegetiformis'' Roxb.) ที่ลำต้น[[เป็น]][[สามเหลี่ยม]] [[เช่น]] [[กกลังกา]] (''C. alternifolius'' L.) [[กกสามเหลี่ยม]] [''Schoenoplectus grossus'' (L.f.) Palla] [[กกขนาก]] หรือ [[กกกระหนาก]] (''C. difformis'' L.)
=== รากศัพท์ 4 ===
==== คำกริยา ====
{{th-verb}}
# [[แนบ]][[ไว้]][[กับ]][[อก]] [[โดย]][[ปรกติ]]เป็น[[อิริยาบถ]][[นอน]]
#: {{ux|th|กกกอด}}
#: {{ux|th|กกไข่}}
#: {{ux|th|กกลูก}}
# {{lb|th|โดยปริยาย}} [[เก็บ]][[นิ่ง]]ไว้[[นาน]][[เกิน]][[ควร]]
#: {{ux|th|เอาเรื่องไปกกไว้}}
=== รากศัพท์ 5 ===
==== คำนาม ====
{{th-noun}}
# [[ซอก]][[ด้าน]]ในหรือซอกด้าน[[หลัง]][[ของ]][[บาน]][[ประตู]]หรือ[[หน้าต่าง]], [[ถ้า]]เป็นด้านหลังของ[[แผ่นบาน]]ประตู เรียกว่า กกประตู, ถ้าเป็นด้านหลังของ[[แผ่น]]บานหน้าต่าง เรียกว่า กกหน้าต่าง
=== รากศัพท์ 6 ===
==== คำนาม ====
{{th-noun}}
# [[กะวะ]], ชื่อ[[นกเงือก]]ชนิด ''Buceros bicornis''
=== คำสลับอักษร ===
{{th-anagram}}
{{topics|th|พืช|นก}}
== ภาษาคำเมือง ==
=== การออกเสียง ===
* {{IPA|nod|/kok˨˦/|a=เชียงใหม่}}
=== คำกริยา ===
{{nod-verb}}
# {{alternative spelling of|nod|ᨠᩫ᩠ᨠ|t=[[ตัด]], [[บั่น]]}}
#: {{ux|nod|'''กก'''กิ่ง|ตัดกิ่ง|inline=1}}
#: {{ux|nod|'''กก'''ยอด|ตัดยอด|inline=1}}
== ภาษาญ้อ ==
=== คำคุณศัพท์ ===
{{nyw-adj}}
# ต้น, [[แรก]]
== ภาษาอูรักลาโวยจ ==
=== รูปแบบอื่น ===
* {{alt|urk|โกก}}
=== การออกเสียง ===
* {{IPA|urk|/kok̚/}}
=== คำนาม ===
{{head|urk|คำนาม}}
# [[กระดูกงู]][[เรือ]]
rblsszyy9ut9q5h7fot3w4ct2hnqtg4
กง
0
10692
5729412
2188713
2026-07-20T08:50:47Z
Heavenchris
5375
/* รากศัพท์ 4 */
5729412
wikitext
text/x-wiki
{{also/auto}}
== ภาษาไทย ==
=== การออกเสียง ===
{{th-pron}}
=== รากศัพท์ 1 ===
==== คำนาม ====
{{th-noun}}
# [[เรียก]][[คำ]][[หรือ]][[พยางค์]][[ที่]][[มี]][[ตัว]] [[ง]] [[สะกด]] [[ว่า]] [[มาตรากง]]หรือ[[แม่กง]]
=== รากศัพท์ 2 ===
เทียบ{{cog|khb|ᦷᦂᧂ||ขอบเขตที่ล้อม}}, {{cog|nod|ᨠᩫ᩠ᨦ||อาณาเขต}}
==== คำนาม ====
{{th-noun}}
# [[วง]], [[ส่วน]][[รอบ]][[ของ]][[ล้อ]][[เกวียน]]หรือล้อ[[รถม้า]][[เป็นต้น]] {{cls|th|กง|วง}}
# เรียก[[สิ่ง]]ที่มี[[ลักษณะ]][[คล้ายคลึง]][[เช่น]][[นั้น]], [[บาง]][[ที]][[ก็]][[ใช้]][[เข้า]][[คู่]][[กับ]]คำ วง ว่า เป็นวงเป็นกง
#: {{ux|th|ขนมกง}}
# [[ไร่]][[ล้มลุก]]ที่[[ถาง]][[ป่า]][[เป็น]][[หย่อม]] ๆ [[ตาม]][[เนื้อที่]][[และ]][[กั้น]]เป็น[[ขอบเขต]][[ไว้]] {{cls|th|กง}}
===== ลูกคำ =====
{{col2|th|กงจักร|กงพัด|กงเกวียน|กงเกวียนกำเกวียน|กงเวียน}}
==== คำกริยา ====
{{th-verb|-}}
# {{lb|th|กลอน}} [[แวดล้อม]]
#: {{ux|th|ม้ากันม้ากง}}
==== คำวิสามานยนาม ====
{{th-proper noun}}
# {{ตำบล|กงไกรลาศ|สุโขทัย}}
=== รากศัพท์ 3 ===
เทียบ{{cog|ms|lengkung}}
==== คำนาม ====
{{th-noun}}
# [[ไม้]][[รูป]][[โค้ง]]ที่[[ตั้ง]]เป็น[[โครง]][[เรือ]]
# [[เสลี่ยง]]ที่มี[[พนัก]]โค้ง[[เหมือน]]กงเรือ เรียกว่า เสลี่ยงกง
===== ลูกคำ =====
{{col2|th|กงข้าง|กงค้าง|กงวาน}}
=== รากศัพท์ 4 ===
เทียบ{{cog|och|-}} {{och-l|弓|คันธนู}}, {{cog|aho|𑜀𑜨𑜂𑜫||ไม้กงดีดฝ้าย; คันกระสุน}}, {{cog|nod|ᨠᩫ᩠ᨦ||คันธนู; คันกระสุน}}, {{cog|zzj|goeng||ดีดฝ้าย}}, {{cog|za|goeng||ดีดฝ้าย}}
==== คำนาม ====
{{th-noun|คัน}}
# ไม้[[สำหรับ]][[ดีด]][[ฝ้าย]] มีรูปเหมือน[[คัน]][[ธนู]] เรียกว่า [[ไม้กง]] หรือ ไม้กงดีดฝ้าย
=== รากศัพท์ 5 ===
==== คำนาม ====
{{th-noun}}
# [[ปลา]][[มังกง]] (ประถม ก กา ในจินดามณี)
===== คำพ้องความ =====
* {{l|th|มังกง}}, {{l|th|แขยงหนู}}
{{topics|th|ปลา}}
=== รากศัพท์ 6 ===
==== คำนาม ====
{{th-noun}}
# [[จงโคร่ง]] {{gloss|ชื่อสัตว์สะเทินน้ำสะเทินบกชนิด ''Bufo asper'' Gravenhorst}}
===== คำพ้องความ =====
* {{l|th|กระทาทอง}}, {{l|th|กระหอง}}, {{l|th|จงโคร่ง}}, {{l|th|โจงโคร่ง}}
{{topics|th|สัตว์สะเทินน้ำสะเทินบก}}
=== รากศัพท์ 7 ===
==== คำคุณศัพท์ ====
{{th-adj|-}}
# {{lb|th|ถิ่น}} [[ตรง]]
==== คำบุพบท ====
{{th-prep}}
# {{lb|th|ถิ่น}} [[ตรง]]
=== รากศัพท์ 8 ===
==== คำนาม ====
{{th-noun}}
# [[ปลา]][[มังกง]] (ประถม ก กา ในจินดามณี)
=== รากศัพท์ 9 ===
{{bor+|th|nan-tws|公||คำยกย่องชายที่นับถือ|tr=กง/กัง}}
==== คำนาม ====
{{th-noun}}
# {{lb|th|ปาก}} [[คำ]][[เรียก]][[ชาย]][[ชรา]][[ชาว]][[จีน]]
===== คำพ้องความ =====
* {{sense|ชายชรา}} {{l|th|แปะ}}, {{l|th|แป๊ะ}}
== ภาษากฺ๋อง ==
=== การออกเสียง ===
* {{IPA|ugo|/koŋ/}}
=== คำนาม ===
{{ugo-noun}}
# [[ตะกร้า]]
rgjiwxglbzfzdsxbjz90qewsl0i2t2i
กรอบ
0
10796
5729417
5686290
2026-07-20T09:06:47Z
Heavenchris
5375
5729417
wikitext
text/x-wiki
{{also/auto}}
== ภาษาไทย ==
=== การออกเสียง ===
{{th-pron|กฺรอบ}}
=== รากศัพท์ 1 ===
เป็นไปได้ว่าเกี่ยวข้องกับ {{m|th|ขอบ}},{{cog|zzj|gop}},เช่น gop ndoeng(กอบ ด้ง) แปลว่า กรอบกระด้ง
==== คำนาม ====
{{th-noun}}
# [[สิ่ง]][[ที่]][[ประกอบ]][[ตาม]][[ริม]][[วัตถุ]][[มี]][[รูปภาพ]][[เป็นต้น]]
#: {{ux|th|กรอบรูป}}
#: {{ux|th|กรอบตัวอย่าง}}
# {{lb|th|โดยปริยาย}} [[ขอบเขต]][[กำหนด]]
#: {{ux|th|ทำงานอยู่ในกรอบ}}
===== ลูกคำ =====
{{col2|th|กรอบหน้า|กรอบเช็ดหน้า}}
==== คำคุณศัพท์ ====
{{th-adj|-}}
# {{lb|th|ปาก}} [[แทบ]][[ดำรง]][[ตน]][[ไป]][[ไม่]][[รอด]], [[จน]]มาก
#: {{ux|th|จนกรอบ}}
===== คำสืบทอด =====
* {{desc|lo|ກອບ|bor=1}}
=== รากศัพท์ 2 ===
ร่วมเชื้อสายกับ{{cog|shn|ၶွပ်ႈ}}
==== คำคุณศัพท์ ====
{{th-adj}}
# [[แตก]][[หัก]][[เป็น]][[ชิ้น]][[เล็ก]]ชิ้น[[น้อย]][[ได้]][[ง่าย]], [[เปราะ]]
#: {{ux|th|ทอดกรอบ}}
===== ลูกคำ =====
{{col2|th|กรอบเกรียบ|กรอบเค็ม|กรอบแกรบ}}
aqdi0dc0p8up7c859s88at2cpdj0qw8
วัน
0
10978
5729351
5724776
2026-07-20T07:28:10Z
Alifshinobi
397
/* รากศัพท์ 2 */
5729351
wikitext
text/x-wiki
{{also/auto}}
== ภาษาไทย ==
=== รูปแบบอื่น ===
* {{alt|th|วนน||เลิกใช้}}
=== การออกเสียง ===
{{th-pron}}
=== รากศัพท์ 1 ===
{{inh+|th|tai-swe-pro|*ŋwanᴬ²}}, จาก{{inh|th|tai-pro|*ŋwanᴬ}}; ร่วมเชื้อสายกับ{{cog|nod|ᩅᩢ᩠ᨶ}}, {{cog|lo|ວັນ}}, {{cog|khb|ᦞᧃ}}, {{cog|shn|ဝၼ်း}}, {{cog|kht|ဝꩫ်း}}, {{cog|tdd|ᥝᥢᥰ}}, {{cog|blt|ꪫꪽ}}, {{cog|aho|𑜈𑜃𑜫,𑜚𑜃𑜫}}, {{cog|za|ngoenz}}, {{cog|pcc|nguanz}}, {{cog|zzj|vaenz}}; เทียบ{{cog|swi|vanl}}, {{cog|qfa-onb-pro|*vɨnᴬ²}}, {{cog|qfa-lic-pro|*hŋwən||วัน; กลางวัน; เที่ยงวัน; ดวงอาทิตย์}}
==== คำนาม ====
{{th-noun}}
# [[ระยะ]][[เวลา]] 24 [[ชั่วโมง]] [[ตั้งแต่]][[ย่ำรุ่ง]][[ถึง]]ย่ำรุ่ง [[หรือ]]ตั้งแต่[[เที่ยงคืน]]ถึงเที่ยงคืน {{cls|th|วัน}}
#: {{ux|th|วันเฉลิมพระชนมพรรษาหยุดราชการ 1 วัน}}
# ระยะเวลา 12 ชั่วโมง ตั้งแต่ย่ำรุ่งถึง[[ย่ำค่ำ]] [[เรียก]][[ว่า]] [[กลางวัน]], [[มัก]]เรียก[[สั้น]] ๆ ว่า วัน, [[ตรงข้าม]][[กับ]] [[คืน]] {{cls|th|วัน}}
#: {{ux|th|เขาไปสัมมนาที่พัทยา 2 วัน 1 คืน}}
# [[ช่วง]]เวลากลางวัน {{cls|th|วัน}}
#: {{ux|th|เช้าขึ้นมาก็รีบไปทำงานทุกวัน}}
# {{lb|th|กฎ}} เวลา[[ทำการ]][[ตาม]][[ที่]][[ได้]][[กำหนด]][[ขึ้น]][[โดย]][[กฎหมาย]] [[คำสั่ง]][[ศาล]] หรือ[[ระเบียบ]][[ข้อบังคับ]] หรือเวลาทำการตาม[[ปรกติ]][[ของ]][[กิจการ]][[นั้น]][[แล้วแต่]][[กรณี]] (ใช้ในทาง[[คดีความ]] ในทาง[[ราชการ]] หรือทาง[[ธุรกิจ]][[การค้า]] และการ[[อุตสาหกรรม]])
===== คำพ้องความ =====
* (1) {{l|th|ทิน}}
===== คำแปลภาษาอื่น =====
{{trans-top|ระยะเวลา 24 ชั่วโมง}}
* โยรูบา: {{t|yo|ọjọ́}}
* ไทใหญ่: {{t+|shn|ဝၼ်း}}
* ฝรั่งเศส: {{t+|fr|jour|m|tr=ฌูร์}}
* เยอรมัน: {{t+|de|Tag|m}}
* ลาว: {{t+|lo|ມື້}}
* อังกฤษ: {{t+|en|day|tr=เดย์}}
{{trans-bottom}}
===== ดูเพิ่ม =====
* {{รายชื่อ:หน่วยเวลา/th}}
* {{l|th|วัน ๆ}}
=== รากศัพท์ 2 ===
ร่วมเชื้อสายกับ{{cog|lo|ແມງວັນ}}, {{cog|khb|ᦶᦙᧂᦞᧃ}}
==== คำนาม ====
{{th-noun}}
# {{lang|th|([[แมลง]]~, [[แมง]]~)}} [[ชื่อ]][[แมลง]][[หลาย]][[ชนิด]] หลาย[[สกุล]] หลาย[[วงศ์]] [[ใน]][[อันดับ]] Diptera [[มี]][[ปีก]] 1 [[คู่]] [[ลักษณะ]][[บาง]][[ใส]] มี[[อวัยวะ]][[เป็น]][[ติ่ง]][[แทน]]ปีกคู่ที่ 2 [[ช่วย]]ใน[[การทรงตัว]] [[ปาก]]เป็นชนิด[[ซับ]][[ดูด]] [[หนวด]]มี 3 [[ปล้อง]] ปล้อง[[ปลาย]][[ใหญ่]][[สุด]][[และ]]มี[[ขน]] 1 [[เส้น]] ที่[[พบ]][[ทั่วไป]] [[เช่น]] แมลงวัน[[บ้าน]] (''Musca domestica'' Linn.) ในวงศ์ Muscidae [[ลำตัว]][[ยาว]][[ประมาณ]] 6 [[มิลลิเมตร]] [[สี]][[น้ำตาล]][[ดำ]] [[กิน]][[อาหาร]][[หลากหลาย]] {{cls|th|ตัว}}
#: {{syn|th|มักขิกา|มักขิกาชาติ|รุย|ละลัด}}
=== รากศัพท์ 3 ===
{{bor+|th|pi|วน||ป่าไม้}}
==== คำนาม ====
{{th-noun}}
# {{lb|th|แบบ|กลอน}} [[ป่าไม้]], [[ดง]]
#: {{ux|th|อัมพวัน|ป่ามะม่วง}}
{{topics|th|เวลา}}
igp6gkwtcs9lcvannl4xxg9y6xk0r7c
5729362
5729351
2026-07-20T07:34:03Z
Alifshinobi
397
5729362
wikitext
text/x-wiki
{{also/auto}}
== ภาษาไทย ==
=== รูปแบบอื่น ===
* {{alt|th|วนน||เลิกใช้}}
=== การออกเสียง ===
{{th-pron}}
=== รากศัพท์ 1 ===
{{inh+|th|tai-swe-pro|*ŋwanᴬ²}}, จาก{{inh|th|tai-pro|*ŋwanᴬ}}; ร่วมเชื้อสายกับ{{cog|nod|ᩅᩢ᩠ᨶ}}, {{cog|lo|ວັນ}}, {{cog|khb|ᦞᧃ}}, {{cog|shn|ဝၼ်း}}, {{cog|kht|ဝꩫ်း}}, {{cog|tdd|ᥝᥢᥰ}}, {{cog|blt|ꪫꪽ}}, {{cog|aho|𑜈𑜃𑜫,𑜚𑜃𑜫}}, {{cog|za|ngoenz}}, {{cog|pcc|nguanz}}, {{cog|zzj|vaenz}}; เทียบ{{cog|swi|vanl}}, {{cog|qfa-onb-pro|*vɨnᴬ²}}, {{cog|qfa-lic-pro|*hŋwən||วัน; กลางวัน; เที่ยงวัน; ดวงอาทิตย์}}
==== คำนาม ====
{{th-noun}}
# [[ระยะ]][[เวลา]] 24 [[ชั่วโมง]] [[ตั้งแต่]][[ย่ำรุ่ง]][[ถึง]]ย่ำรุ่ง [[หรือ]]ตั้งแต่[[เที่ยงคืน]]ถึงเที่ยงคืน {{cls|th|วัน}}
#: {{ux|th|วันเฉลิมพระชนมพรรษาหยุดราชการ 1 วัน}}
# ระยะเวลา 12 ชั่วโมง ตั้งแต่ย่ำรุ่งถึง[[ย่ำค่ำ]] [[เรียก]][[ว่า]] [[กลางวัน]], [[มัก]]เรียก[[สั้น]] ๆ ว่า วัน, [[ตรงข้าม]][[กับ]] [[คืน]] {{cls|th|วัน}}
#: {{ux|th|เขาไปสัมมนาที่พัทยา 2 วัน 1 คืน}}
# [[ช่วง]]เวลากลางวัน {{cls|th|วัน}}
#: {{ux|th|เช้าขึ้นมาก็รีบไปทำงานทุกวัน}}
# {{lb|th|กฎ}} เวลา[[ทำการ]][[ตาม]][[ที่]][[ได้]][[กำหนด]][[ขึ้น]][[โดย]][[กฎหมาย]] [[คำสั่ง]][[ศาล]] หรือ[[ระเบียบ]][[ข้อบังคับ]] หรือเวลาทำการตาม[[ปรกติ]][[ของ]][[กิจการ]][[นั้น]][[แล้วแต่]][[กรณี]] (ใช้ในทาง[[คดีความ]] ในทาง[[ราชการ]] หรือทาง[[ธุรกิจ]][[การค้า]] และการ[[อุตสาหกรรม]])
===== คำพ้องความ =====
* (1) {{l|th|ทิน}}
===== คำแปลภาษาอื่น =====
{{trans-top|ระยะเวลา 24 ชั่วโมง}}
* โยรูบา: {{t|yo|ọjọ́}}
* ไทใหญ่: {{t+|shn|ဝၼ်း}}
* ฝรั่งเศส: {{t+|fr|jour|m|tr=ฌูร์}}
* เยอรมัน: {{t+|de|Tag|m}}
* ลาว: {{t+|lo|ມື້}}
* อังกฤษ: {{t+|en|day|tr=เดย์}}
{{trans-bottom}}
===== ดูเพิ่ม =====
* {{รายชื่อ:หน่วยเวลา/th}}
* {{l|th|วัน ๆ}}
=== รากศัพท์ 2 ===
ร่วมเชื้อสายกับ{{cog|lo|ແມງວັນ}}, {{cog|khb|ᦶᦙᧂᦞᧃ}}
==== คำนาม ====
{{th-noun}}
# {{lang|th|([[แมลง]]~, [[แมง]]~)}} [[ชื่อ]][[แมลง]][[หลาย]][[ชนิด]] หลาย[[สกุล]] หลาย[[วงศ์]] [[ใน]][[อันดับ]] Diptera [[มี]][[ปีก]] 1 [[คู่]] [[ลักษณะ]][[บาง]][[ใส]] มี[[อวัยวะ]][[เป็น]][[ติ่ง]][[แทน]]ปีกคู่ที่ 2 [[ช่วย]]ใน[[การทรงตัว]] [[ปาก]]เป็นชนิด[[ซับ]][[ดูด]] [[หนวด]]มี 3 [[ปล้อง]] ปล้อง[[ปลาย]][[ใหญ่]][[สุด]][[และ]]มี[[ขน]] 1 [[เส้น]] ที่[[พบ]][[ทั่วไป]] [[เช่น]] แมลงวัน[[บ้าน]] (''Musca domestica'' Linn.) ในวงศ์ Muscidae [[ลำตัว]][[ยาว]][[ประมาณ]] 6 [[มิลลิเมตร]] [[สี]][[น้ำตาล]][[ดำ]] [[กิน]][[อาหาร]][[หลากหลาย]] {{cls|th|ตัว}}
#: {{syn|th|มักขิกา|มักขิกาชาติ|รุย|ละลัด}}
===== คำแปลภาษาอื่น =====
{{trans-top|แมลงในอันดับ Diptera}}
* คำเมือง: {{t+|nod|ᨾᩖᩯᨦᨦᩫ᩠ᨶ}}
* ไทใหญ่: {{t+|shn|မႅင်းမူၼ်း}}
* ลาว: {{t+|lo|ແມງວັນ}}
* อังกฤษ: {{t+|en|fly|tr=ฟลาย}}
{{trans-bottom}}
=== รากศัพท์ 3 ===
{{bor+|th|pi|วน||ป่าไม้}}
==== คำนาม ====
{{th-noun}}
# {{lb|th|แบบ|กลอน}} [[ป่าไม้]], [[ดง]]
#: {{ux|th|อัมพวัน|ป่ามะม่วง}}
{{topics|th|เวลา}}
6r8akdslhha7h441j2xfdyeloldt9y8
กลิ่น
0
16082
5729424
5673965
2026-07-20T09:25:21Z
Heavenchris
5375
5729424
wikitext
text/x-wiki
{{also/auto}}
== ภาษาไทย ==
=== การออกเสียง ===
{{th-pron|กฺลิ่น}}
=== รากศัพท์ 1 ===
ร่วมเชื้อสายกับ{{cog|nod|ᨠᩖᩥ᩵ᩁ}}, {{cog|kkh|ᨠᩥ᩠᩵ᨶ}}, {{cog|lo|ກິ່ນ}}, {{cog|khb|ᦂᦲᧃᧈ}}, {{cog|zzj|ginq}}(กิ่น)
==== คำนาม ====
{{th-noun}}
# [[สิ่ง]][[ที่]][[รู้]][[ได้]][[ด้วย]][[จมูก]] [[คือ]] [[เหม็น]] [[หอม]] [[และ]][[อื่น]] ๆ
# [[บาง]][[ที]][[ใช้]][[หมายความ]][[ว่า]] เหม็น
#: {{ux|th|แกงหม้อนี้เริ่มมี'''กลิ่น'''}}
# {{lb|th|โดยปริยาย}} [[ลักษณะ]][[ไม่]][[น่า]][[ไว้วางใจ]]
#: {{ux|th|เรื่องนี้ชักมี'''กลิ่น'''}}
#: {{ux|th|การประมูลครั้งนี้เริ่มส่ง'''กลิ่น'''}}
===== ลูกคำ =====
{{col4|th|กลิ่นตุ ๆ|กลิ่นอาย|ชื่นกลิ่น|ชูกลิ่น|ซ่อนกลิ่น|ได้กลิ่น|ปากไม่สิ้นกลิ่นน้ำนม|ผิดกลิ่น|ผิดสีผิดกลิ่น|พู่กลิ่น|ส่งกลิ่น|กลิ่นตัว|ยาดับกลิ่น}}
===== คำสืบทอด =====
* {{desc|km|ក្លិន|bor=1}}
=== รากศัพท์ 2 ===
==== คำนาม ====
{{th-noun}}
# [[ชื่อ]][[พวง]][[ดอกไม้]][[ร้อย]][[มี]][[รูป]][[แบน]][[ประกอบ]]ด้วย[[อุบะ]], [[ถ้า]][[ทำ]][[ให้]][[ผูก]][[แขวน]][[คว่ำ]][[ลง]][[มา]] [[เรียก]]ว่า กลิ่นคว่ำ, ถ้าทำให้ผูกแขวน[[ตะแคง]] เรียกว่า กลิ่นตะแคง
1e3krc28x5tqjefec9hfrmvnfvf685n
5729427
5729424
2026-07-20T09:26:09Z
Heavenchris
5375
5729427
wikitext
text/x-wiki
{{also/auto}}
== ภาษาไทย ==
=== การออกเสียง ===
{{th-pron|กฺลิ่น}}
=== รากศัพท์ 1 ===
ร่วมเชื้อสายกับ{{cog|nod|ᨠᩖᩥ᩵ᩁ}}, {{cog|kkh|ᨠᩥ᩠᩵ᨶ}}, {{cog|lo|ກິ່ນ}}, {{cog|khb|ᦂᦲᧃᧈ}}, {{cog|zzj|ginq}}(กิ่น-เมืองตงซิง)
==== คำนาม ====
{{th-noun}}
# [[สิ่ง]][[ที่]][[รู้]][[ได้]][[ด้วย]][[จมูก]] [[คือ]] [[เหม็น]] [[หอม]] [[และ]][[อื่น]] ๆ
# [[บาง]][[ที]][[ใช้]][[หมายความ]][[ว่า]] เหม็น
#: {{ux|th|แกงหม้อนี้เริ่มมี'''กลิ่น'''}}
# {{lb|th|โดยปริยาย}} [[ลักษณะ]][[ไม่]][[น่า]][[ไว้วางใจ]]
#: {{ux|th|เรื่องนี้ชักมี'''กลิ่น'''}}
#: {{ux|th|การประมูลครั้งนี้เริ่มส่ง'''กลิ่น'''}}
===== ลูกคำ =====
{{col4|th|กลิ่นตุ ๆ|กลิ่นอาย|ชื่นกลิ่น|ชูกลิ่น|ซ่อนกลิ่น|ได้กลิ่น|ปากไม่สิ้นกลิ่นน้ำนม|ผิดกลิ่น|ผิดสีผิดกลิ่น|พู่กลิ่น|ส่งกลิ่น|กลิ่นตัว|ยาดับกลิ่น}}
===== คำสืบทอด =====
* {{desc|km|ក្លិន|bor=1}}
=== รากศัพท์ 2 ===
==== คำนาม ====
{{th-noun}}
# [[ชื่อ]][[พวง]][[ดอกไม้]][[ร้อย]][[มี]][[รูป]][[แบน]][[ประกอบ]]ด้วย[[อุบะ]], [[ถ้า]][[ทำ]][[ให้]][[ผูก]][[แขวน]][[คว่ำ]][[ลง]][[มา]] [[เรียก]]ว่า กลิ่นคว่ำ, ถ้าทำให้ผูกแขวน[[ตะแคง]] เรียกว่า กลิ่นตะแคง
jozobxdvmu5w6v7uhlkvimkv6ea3wm9
ผึ้ง
0
16866
5729037
5726597
2026-07-19T22:59:33Z
Alifshinobi
397
/* คำแปลภาษาอื่น */
5729037
wikitext
text/x-wiki
{{also/auto}}
== ภาษาไทย ==
{{wp}}
[[ไฟล์:Bombus hypnorum male - side (aka).jpg|thumb|ผึ้ง]]
=== รากศัพท์ ===
{{bor+|th|ltc|-}} {{ltc-l|蜂|id=2}}; ร่วมเชื้อสายกับ{{cog|tts|เผิ้ง}}, {{cog|lo|ເຜິ້ງ,ເຜີ້ງ}}, {{cog|nod|ᨹᩮᩥ᩠᩶ᨦ}}, {{cog|kkh|ᨹᩨ᩠᩶ᨦ}}, {{cog|khb|ᦕᦹᧂᧉ}}, {{cog|blt|ꪹꪠꪷ꫁ꪉ}}, {{cog|shn|ၽိုင်ႈ}}, {{cog|tdd|ᥚᥪᥒᥲ}}, {{cog|aho|𑜇𑜢𑜤𑜂𑜫}}, {{cog|zzj|paengj|tr=ผั้ง}} (Jingxi)
=== การออกเสียง ===
{{th-pron|พึ่ง}}
=== คำนาม ===
{{th-noun|ตัว}}
# ชื่อ[[แมลง]]หลายชนิดใน[[วงศ์]] {{species|Apidae}} [[มี]][[ปีก]]บางใส 2 คู่ ปีกคู่หลังเล็กกว่าปีกคู่หน้า ปากใช้ทั้งกัดอาหารและดูดกินของเหลวได้ ท้องปล้องแรกที่ติดกับอกเล็กมาก ปล้องที่ 2 มีขนาดไล่เลี่ยกัน ปล้องที่เหลือมีขนาดไล่เลี่ยกับอก ยกเว้นปล้องสุดท้ายที่มีขนาดเล็กกว่ามี[[ขน]][[ปกคลุม]]ตาม[[ลำตัว]] รวมตัว[[อยู่]][[เป็น]][[ฝูง]] [[แบ่ง]]ชั้น[[วรรณะ]] เก็บ[[เกสร]]และ[[น้ำ]][[หวาน]][[ดอกไม้]]มาทำ[[น้ำผึ้ง]]
==== คำพ้องความ ====
{{col|th|ขมุม|ภมร|ภมรี|ภระมร|ภระมรี|ภุมระ|ภุมรา|ภุมริน|ภุมรี|ภุมเรศ|มธุกร|มธุกรี|มธุการี|มธุปะ|มธุพรต|มธุลีห์|มธุมักขิกา}}
==== คำแปลภาษาอื่น ====
{{trans-top|ชื่อแมลงหลายชนิดในวงศ์ ''Apidae''}}
* กรีก: {{t+|el|μέλισσα|f}}
* เกาหลี: {{t+|ko|벌}}, {{t+|ko|밀봉(蜜蜂)}}
* เขมร: {{t+|km|ឃ្មុំ}}
* เขมรเหนือ: {{t|kxm|คมุม}}
* คำตี้: {{t|kht|ၸိုင်ႛ}}
* คำเมือง: {{t|nod|ᨹᩮᩥ᩠᩶ᨦ}}
* จีน:
*: กวางตุ้ง: {{t|yue|蜜蜂}}
*: ดุงกาน: {{t|dng|мифыр}}, {{t|dng|фыр}}, {{t|dng|мифынзы}}
*: หมิ่นตะวันออก: {{t|cdo|蜜蜂}}
*: กั้น: {{t|gan|蜜蜂}}
*: แคะ: {{t|hak|蜂仔|tr=phûng-é}}, {{t|hak|糖蜂仔|tr=thòng-phûng-é / thòng-fûng-é}}
*: หมิ่นใต้: {{t+|nan-hbl|蜂|tr=phang}}
*: จิ้น: {{t|cjy|蜜蜂}}
*: จีนกลาง: {{t+|cmn|蜜蜂}}, {{t+|cmn|蠟蜂}}
*: หมิ่นเหนือ: {{t|mnp|糖蜂}}
*: อู๋: {{t|wuu|蜜蜂}}
*: เซียง: {{t|hsn|蜜蜂子}}
* เจียเม่า: {{t|jio|tej¹}}
* ชอง: {{t|cog|มะง่าม}}, {{t|cog|ง่าม}}
* เช็ก: {{t+|cs|včela|f}}
* เซอร์โบ-โครเอเชีย:
*: ซีริลลิก: {{t|sh|пчѐла|f}}
*: ละติน: {{t+|sh|pčèla|f}}
* ญัฮกุร: {{t|cbn|ชาย}}
* ญี่ปุ่น: {{t+|ja|蜂|tr=はち, hachi}}, {{t+|ja|花蜂|tr=はなばち, hanabachi}}
* ดัตช์: {{t+|nl|bij|f}}, {{t+|nl|honingbij|f}}, {{t+|nl|imme|f}}
* เดนมาร์ก: {{t+|da|bi|c}}
* ตากาล็อก: {{t+|tl|bubuyog}}, {{t|tl|pukyot}}
* ทมิฬ: {{t+|ta|தேனீ}}
* ไทดำ: {{t|blt|ꪹꪠꪷ꫁ꪉ}}
* ไทลื้อ: {{t|khb|ᦕᦹᧂᧉ}}
* ไทใหญ่: {{t+|shn|ၽိုင်ႈ}}
* นอร์เวย์: {{t+|no|bie|m|f}}
* บัลแกเรีย: {{t+|bg|пчела́|f}}
* บาสก์: {{t+|eu|erle}}
* ปาเลา: {{t|pau|chelakngikl}}, {{t|pau|chelatngikl}}, {{t|pau|hats}}
* โปรตุเกส: {{t+|pt|abelha|f}}
* โปแลนด์: {{t+|pl|pszczoła|f}}
* ฝรั่งเศส: {{t+|fr|abeille|f}}
* พม่า: {{t+|my|ပျား}}
* ฟรียูลี: {{t|fur|âf|f}}, {{t|fur|âv|f}}
* มอญ: {{t|mnw|သာဲ}}
* มาซิโดเนีย: {{t+|mk|пчела|f}}
* มาเลเซีย: {{t+|ms|lebah}}, {{t|ms|tawon}}
* ไมยา: {{t|sks|kakape}}
* เยอรมัน: {{t+|de|Biene|f}}
* รัสเซีย: {{t+|ru|пчела́|f}}
* ลาว: {{t+|lo|ເຜິ້ງ}}, {{t|lo|ຜຶ້ງ}}
* เลอเวือะ:
*: ตะวันตก: {{t|lcp|แฮ}}
*: ตะวันออก: {{t|lwl|แฮ}}
* เวียดนาม: {{t+|vi|ong}}
* สเปน: {{t+|es|abeja|f}}
* สวาฮีลี: {{t+|sw|nyuki|c9|c10}}
* สวีเดน: {{t+|sv|bi|n}}
* แสก: {{t|skb|โหร่ย}}
* อังกฤษ: {{t+|en|bee}}
* อิตาลี: {{t+|it|ape|f}}, {{t+|it|pecchia|f}}
* อินโดนีเซีย: {{t+|id|lebah}}, {{t+|id|tawon}}
* อีสาน: {{t|tts|เผิ้ง}}
* อุตซิตา: {{t+|oc|abelha|f}}
* อูรักลาโวยจ: {{t|urk|มาทู}}
* เอสเปรันโต: {{t+|eo|abelo}}
* ฮินดี: {{t+|hi|मधुमक्खी|f}}
* ฮีบรู: {{t+|he|דְּבוֹרָה|f}}
{{trans-bottom}}
pvtj9gefn5p9ovr596jhx4nsgifnzf9
ขด
0
17490
5729055
1880441
2026-07-20T01:24:13Z
Alifshinobi
397
/* ภาษาคำเมือง */
5729055
wikitext
text/x-wiki
{{also/auto}}
== ภาษาไทย ==
=== รากศัพท์ ===
ร่วมเชื้อสายกับ{{cog|lo|ຂົດ}}, {{cog|shn|ၶူတ်း}}, {{cog|za|gyoet}}, {{cog|zzj|koet}}
=== การออกเสียง ===
{{th-pron}}
=== คำกริยา ===
{{th-verb}}
# [[ม้วน]][[ตัว]][[ให้]][[เป็น]][[วง]] ๆ
#: {{ux|th|งูเห่าขดตัวอยู่ใต้กองไม้}}
# [[ทำให้]]เป็น[[วง]] ๆ
#: {{ux|th|เอาลวดมาขด}}
# ทำให้[[งอ]]
#: {{ux|th|นอนขด}}
#: {{ux|th|ขดให้เป็นลวดลาย}}
# [[งอ]]
=== คำนาม ===
{{th-noun}}
# [[สิ่ง]][[ที่]][[เป็น]][[วง]] ๆ
=== ลักษณนาม ===
{{th-cls}}
# เรียก[[สิ่งของ]][[ที่]][[เป็น]][[วง]] ๆ
#: {{ux|th|เชือก 3 ขด}}
== ภาษาคำเมือง ==
=== การออกเสียง ===
* {{IPA|nod|/xot˨˦/|a=เชียงใหม่}}
=== คำกริยา ===
{{nod-verb}}
# {{lb|nod|อกรรม}} {{altform|nod|ᨡᩫ᩠ᨯ|t=[[ขยด]], [[เขยิบ]], [[กระเถิบ]]}}
tbyb248nw0s1zz1khm9qwgshth36aa1
ฮด
0
17918
5729200
1884701
2026-07-20T03:34:45Z
Alifshinobi
397
5729200
wikitext
text/x-wiki
{{also/auto}}
== ภาษาคำเมือง ==
=== การออกเสียง ===
* {{IPA|nod|/hot˨˦/|a=เชียงใหม่}}
=== คำกริยา ===
{{nod-verb}}
# {{lb|nod|สกรรม}} {{altform|nod|ᩉᩫ᩠ᨯ|t=[[รด]], รด[[น้ำ]][[ให้]]}}
=== คำนาม ===
{{nod-noun}}
# {{altform|nod|ᩉᩫ᩠ᨯ|t=[[พิธี]]รดน้ำ[[เนื่องใน]][[การแต่งตั้ง]][[พระ]]}}
kcmednc9a3u5s1rxmv4e0qqmgomffx4
หม้อห้อม
0
18743
5729104
1510128
2026-07-20T02:09:42Z
Alifshinobi
397
5729104
wikitext
text/x-wiki
== ภาษาไทย ==
{{wp}}
=== การออกเสียง ===
{{th-pron|ม่อ-ห้อม}}
=== คำนาม ===
{{th-noun}}
# [[เสื้อ]][[คอกลม]] แขนสั้น[[ผ่าอก]]ตลอด มักย้อมสีน้ำเงินเข้มหรือดำ
== ภาษาคำเมือง ==
=== รูปแบบอื่น ===
* [[ม่อห้อม]]
* [[ม่อฮ่อม]]
=== การออกเสียง ===
* {{IPA|nod|/mɔː˦˦ʔ.hɔːm˦˦ʔ/|a=เชียงใหม่}}
* {{คำอ่านไทย|หม้อ-ห้อม (เสียงโทพิเศษทั้งสองพยางค์)}}
=== คำนาม ===
{{nod-noun}}
# {{altform|nod|ᩉ᩠ᨾᩬᩴ᩶ᩉᩬ᩶ᨾ|t=เสื้อคอกลม แขนสั้นผ่าอกตลอด มัก[[ย้อม]]สี[[น้ำเงิน]]เข้มหรือ[[ดำ]]}}
eyhme983j1q3vcwvh2vywm5yj2hlw1f
โกน
0
19960
5729028
5624995
2026-07-19T20:30:35Z
Alifshinobi
397
5729028
wikitext
text/x-wiki
{{also/auto}}
== ภาษาไทย ==
=== การออกเสียง ===
{{th-pron}}
=== รากศัพท์ 1 ===
เทียบ{{cog|xhm|កោរ}}, {{m|xhm|កោ||โกน, ถาก}}; ร่วมเชื้อสายกับ{{cog|lo|ໂກນ}}<!--SEAlang Lao mentioned Pali but no such word.-->
==== คำกริยา ====
{{th-verb}}
# {{lb|th|สกรรม}} [[ขูด]]ผมหรือขนด้วย[[คม]]มีด
#: {{ux|th|'''โกน'''ผม}}
===== คำแปลภาษาอื่น =====
{{trans-top|ขูดผมหรือขนด้วยคมมีด}}
* เขิน: {{t+|kkh|ᨡᩪᨯ}}, {{t+|kkh|ᨳᩣ}}
* จีน:
*: จีนกลาง: {{t+|cmn|剃|tr=tì}}, {{t+|cmn|刮|tr=guā}}
* ไทลื้อ: {{t+|khb|ᦃᦳᧆᧈ}}
* ไทใหญ่: {{t+|shn|ထႃ}}
* ลาว: {{t+|lo|ແຖ}}
* อังกฤษ: {{t+|en|shave|tr=เฌฝ}}
{{trans-bottom}}
==== คำนาม ====
{{th-noun}}
# {{lb|th|พุทธ}} ชื่อวันที่[[พระสงฆ์]]ในเมืองไทย[[ปลงผม]] ตรงกับวัน[[ขึ้น]] 14 [[ค่ำ]] หรือ [[แรม]] 14 ค่ำ ถ้าเป็น[[เดือนขาด]]ก็เป็นแรม 13 ค่ำ, คู่กับ [[วันพระ]]
# {{lb|th|พุทธ|ปาก}} ชื่อวันก่อนวันพระวันหนึ่งได้แก่วันขึ้น 7 ค่ำ ขึ้น 14 ค่ำ แรม 7 ค่ำ และแรม 14 ค่ำ ถ้าเป็นเดือนขาดก็แรม 13 ค่ำ
==== คำพ้องความ ====
* (1, 2) [[วันโกน]]
=== รากศัพท์ 2 ===
{{bor+|th|okz-pre|កោន៑}}, {{m|okz|កោន្ន៑}}, {{m|okz|កុន៑}}, {{m|okz|ក្វន៑||ลูก}}; เทียบ{{cog|km|កូន}}, {{cog|mnw|ကောန်}}, {{cog|vi|con}}; {{doublet|th|กูน}}
==== คำนาม ====
{{th-noun}}
# {{lb|th|กลอน}} [[ลูก]]
== ภาษาเขมรเหนือ ==
=== รากศัพท์ ===
เทียบ{{cog|km|កូន}}
=== การออกเสียง ===
* {{IPA|kxm|/koːn/}}
=== คำนาม ===
{{kxm-noun}}
# [[ลูก]] (ของคนหรือสัตว์)
# [[ต้น]][[อ่อน]]
# [[สิ่งของ]][[ที่]][[เล็ก]][[กว่า]][[ใน]][[ประเภท]][[เดียว]][[กัน]]
== ภาษาอีสาน ==
=== รากศัพท์ 1 ===
ร่วมเชื้อสายกับ{{cog|lo|ໂກນ}}, {{cog|nod|ᨠᩰᩫ᩠ᨶ}}, {{cog|kkh|ᨠ᩠ᩅᩁ}} (ในคำว่า {{m|kkh|ᨠ᩠ᩅᩁᨹᩨ᩠᩶ᨦ}}), {{cog|khb|ᦷᦂᧃ}}; อาจเกี่ยวข้องกับ{{cog|th|กลวง}}
==== คำนาม ====
{{tts-noun}}
# [[โพรง]]
=== รากศัพท์ 2 ===
==== คำกริยา ====
{{tts-verb}}
# [[กรน]]
tcgcr8edhlu2umwof9w1nrm1h31aa3m
แก้
0
20023
5729018
5723781
2026-07-19T16:46:56Z
Alifshinobi
397
5729018
wikitext
text/x-wiki
{{also/auto}}
== ภาษาไทย ==
=== การออกเสียง ===
{{th-pron}}
=== รากศัพท์ 1 ===
{{inh+|th|tai-pro|*keːꟲ}}, จาก{{der|th|ltc|-}} {{ltc-l|解|id=2}}; ร่วมเชื้อสายกับ{{cog|lo|ແກ້}}, {{cog|nod|ᨠᩯ᩶}}, {{cog|khb|ᦶᦂᧉ}}, {{cog|blt|ꪵꪀ꫁}}, {{cog|shn|ၵႄႈ}}, {{cog|aho|𑜀𑜦𑜧}}, {{cog|zzj|gej}}
==== คำกริยา ====
{{th-verb}}
# ทำให้[[คลาย]]จากลักษณะที่[[แน่น]]ที่[[ติดขัด]]หรือที่เป็น[[เงื่อน]]เป็น[[ปม]]อยู่
#: {{ux|th|แก้ปม}}
#: {{ux|th|แก้เงื่อน}}
# ทำให้[[หลุด]]ให้[[พ้น]]ไป
#: {{ux|th|แก้คดี}}
# ทำให้[[ดี]][[ขึ้น]], ทำให้[[ใช้]][[การ]]ได้, ทำส่วนที่[[เสีย]]ให้[[คืน]]ดีอย่าง[[เดิม]], [[ดัดแปลง]]ให้ดีขึ้น, [[แก้ไข]] ก็ว่า
#: {{ux|th|แก้นาฬิกา}}
#: {{ux|th|แก้เครื่องจักร}}
# ทำให้[[หาย]]
#: {{ux|th|แก้เก้อแก้ขวย}}
#: {{ux|th|แก้จน}}
#: {{ux|th|แก้โรค}}
# [[เฉลย]], [[อธิบาย]]ให้[[เข้าใจ]]
#: {{ux|th|แก้ปัญหา}}
#: {{ux|th|แก้กระทู้}}
# [[ร้อง]][[เพลง]]หรือ[[ลำตัด]]เป็นต้น[[โต้ตอบ]]กัน
# เอา[[กลับ]]คืนมาให้ได้
#: {{ux|th|ไปตีแก้เอาเมืองคืน}}
===== ลูกคำ =====
{{col4|th
|แก้เกี้ยว
|แก้ขวย
|แก้เขิน
|แก้ขัด
|แก้ไข
|แก้เคล็ด
|แก้แค้น
|แก้เชิง
|แก้ตก
|แก้ตัว
|แก้ต่าง
|แก้ที
|แก้โทษ
|แก้บน
|แก้บาป
|แก้ผ้า
|แก้เผ็ด
|แก้ฝัน
|แก้ฟ้อง
|แก้มือ
|แก้ลำ
|แก้หน้า
}}
===== คำแปลภาษาอื่น =====
{{trans-top| (5)}}
* อังกฤษ: to {{t+|en|solve|tr=ซอล์ฟว์}}
{{trans-bottom}}
=== รากศัพท์ 2 ===
==== คำนาม ====
{{th-noun}}
# [[ชื่อ]][[เบี้ย]]ตัวโต ๆ สำหรับ[[ขัด]][[ผ้านุ่ง]]ให้[[ผิว]]เป็น[[มัน]]
#: {{ux|th|ผ้าลายเรียกว่า เบี้ยอี'''แก้''' หรือ เบี้ย'''แก้'''ใหญ่}}
===== ลูกคำ =====
{{col4|th
|เบี้ยแก้
|เบี้ยแก้ใหญ่
|เบี้ยอีแก้
}}
icwjkns7r0s0riv0c7eth1lcxypsezc
5729019
5729018
2026-07-19T16:49:30Z
Alifshinobi
397
/* คำแปลภาษาอื่น */
5729019
wikitext
text/x-wiki
{{also/auto}}
== ภาษาไทย ==
=== การออกเสียง ===
{{th-pron}}
=== รากศัพท์ 1 ===
{{inh+|th|tai-pro|*keːꟲ}}, จาก{{der|th|ltc|-}} {{ltc-l|解|id=2}}; ร่วมเชื้อสายกับ{{cog|lo|ແກ້}}, {{cog|nod|ᨠᩯ᩶}}, {{cog|khb|ᦶᦂᧉ}}, {{cog|blt|ꪵꪀ꫁}}, {{cog|shn|ၵႄႈ}}, {{cog|aho|𑜀𑜦𑜧}}, {{cog|zzj|gej}}
==== คำกริยา ====
{{th-verb}}
# ทำให้[[คลาย]]จากลักษณะที่[[แน่น]]ที่[[ติดขัด]]หรือที่เป็น[[เงื่อน]]เป็น[[ปม]]อยู่
#: {{ux|th|แก้ปม}}
#: {{ux|th|แก้เงื่อน}}
# ทำให้[[หลุด]]ให้[[พ้น]]ไป
#: {{ux|th|แก้คดี}}
# ทำให้[[ดี]][[ขึ้น]], ทำให้[[ใช้]][[การ]]ได้, ทำส่วนที่[[เสีย]]ให้[[คืน]]ดีอย่าง[[เดิม]], [[ดัดแปลง]]ให้ดีขึ้น, [[แก้ไข]] ก็ว่า
#: {{ux|th|แก้นาฬิกา}}
#: {{ux|th|แก้เครื่องจักร}}
# ทำให้[[หาย]]
#: {{ux|th|แก้เก้อแก้ขวย}}
#: {{ux|th|แก้จน}}
#: {{ux|th|แก้โรค}}
# [[เฉลย]], [[อธิบาย]]ให้[[เข้าใจ]]
#: {{ux|th|แก้ปัญหา}}
#: {{ux|th|แก้กระทู้}}
# [[ร้อง]][[เพลง]]หรือ[[ลำตัด]]เป็นต้น[[โต้ตอบ]]กัน
# เอา[[กลับ]]คืนมาให้ได้
#: {{ux|th|ไปตีแก้เอาเมืองคืน}}
===== ลูกคำ =====
{{col4|th
|แก้เกี้ยว
|แก้ขวย
|แก้เขิน
|แก้ขัด
|แก้ไข
|แก้เคล็ด
|แก้แค้น
|แก้เชิง
|แก้ตก
|แก้ตัว
|แก้ต่าง
|แก้ที
|แก้โทษ
|แก้บน
|แก้บาป
|แก้ผ้า
|แก้เผ็ด
|แก้ฝัน
|แก้ฟ้อง
|แก้มือ
|แก้ลำ
|แก้หน้า
}}
===== คำแปลภาษาอื่น =====
{{trans-top|อธิบายให้เข้าใจ}}
* อังกฤษ: to {{t+|en|solve|tr=ซอล์ฟว์}}
{{trans-bottom}}
=== รากศัพท์ 2 ===
==== คำนาม ====
{{th-noun}}
# [[ชื่อ]][[เบี้ย]]ตัวโต ๆ สำหรับ[[ขัด]][[ผ้านุ่ง]]ให้[[ผิว]]เป็น[[มัน]]
#: {{ux|th|ผ้าลายเรียกว่า เบี้ยอี'''แก้''' หรือ เบี้ย'''แก้'''ใหญ่}}
===== ลูกคำ =====
{{col4|th
|เบี้ยแก้
|เบี้ยแก้ใหญ่
|เบี้ยอีแก้
}}
jfhxtql44rbncr3wlzqdh7pegz4hxd3
หญุ้ง
0
22102
5729174
1884200
2026-07-20T03:06:13Z
Alifshinobi
397
/* ภาษาคำเมือง */
5729174
wikitext
text/x-wiki
{{also/auto}}
== ภาษาคำเมือง ==
=== การออกเสียง ===
* {{IPA|nod|/ɲuŋ˦˦ʔ/|a=เชียงใหม่}}
=== คำกริยา ===
{{nod-verb}}
# {{lb|nod|อกรรม}} {{pronunciation spelling of|nod|ᩉ᩠ᨿᩩ᩶ᨦ|t=[[ยุ่ง]]}}
== ภาษาอีสาน ==
=== คำกริยา ===
{{tts-verb}}
# [[ยุ่ง]]
hk27k2gbpzg7i58egpv2jxvmrr7gw7n
บวก
0
23027
5729039
1882430
2026-07-19T23:16:54Z
Alifshinobi
397
/* ภาษาคำเมือง */
5729039
wikitext
text/x-wiki
{{also/auto}}
== ภาษาไทย ==
{{wp}}
=== การออกเสียง ===
{{th-pron}}
=== รากศัพท์ 1 ===
{{bor+|th|okz|បូក}}; ร่วมเชื้อสายกับ{{cog|km|បូក}}, {{cog|lo|ບວກ}}
==== คำกริยา ====
{{th-verb}}
# [[เอา]][[จำนวน]][[หนึ่ง]][[รวม]][[เข้า]][[กับ]][[อีก]]จำนวนหนึ่ง[[หรือ]][[หลาย]]จำนวน[[ให้]][[เป็น]]จำนวน[[เพิ่ม]][[ขึ้น]]จำนวน[[เดียว]][[กัน]]
# [[เพิ่มเติม]]เข้า[[ไป]]
==== คำคุณศัพท์ ====
{{th-adj|-}}
# [[ที่]]เป็นไป[[ใน]][[ทาง]][[สนับสนุน]] ทาง[[ดี]] หรือ[[เชิง]][[สร้างสรรค์]]
#: {{ux|th|มองในทางบวก}}
# {{lb|th|คณิต}} [[เรียก]]จำนวน[[เลข]]ที่[[มี]][[ค่า]][[มาก]][[กว่า]][[ศูนย์]] [[ว่า]] จำนวนบวก
==== คำนาม ====
{{th-noun}}
# เรียก[[เครื่องหมาย]][[คณิตศาสตร์]][[รูป]][[ดัง]][[นี้]] [[+]] ว่า เครื่องหมายบวก
=== รากศัพท์ 2 ===
==== คำกริยา ====
{{th-verb}}
# {{lb|th|ปาก|สแลง}} [[ปะทะ]]กัน
#: {{ux|th|รถกระบะบวกรถบรรทุก}}
#: {{ux|th|หนุ่มเมาแล้วขับ คุมรถไม่อยู่บวกเสาไฟฟ้า เจ็บสาหัส}}
# {{lb|th|ปาก|สแลง}} [[ชก]]
#: {{ux|th|เปิดฉากยกแรก ทั้งคู่บวกหมัดชุดแลกกันทันที}}
#: {{ux|th|ขุนศึก ภ.สวนทอง บวกหมัดจน ช้างศึก เกียรติทรงฤทธิ์ หลับเพียงยก 2 เท่านั้น}}
=== รากศัพท์ 3 ===
==== คำกริยา ====
{{th-verb|-}}
# {{lb|th|โบ}} [[โบก]]
== ภาษาคำเมือง ==
=== การออกเสียง ===
* {{IPA|nod|/buak˨˩/|a=เชียงใหม่}}
=== คำนาม ===
{{nod-noun}}
# {{altform|nod|ᨷ᩠ᩅᨠ|t=[[แอ่ง]][[น้ำ]]; [[ปลัก]]}}
== ภาษาอีสาน ==
=== คำนาม ===
{{tts-noun}}
# [[ปลัก]]
4sfrkgii3rn9erh4cojh8sh03nz6k1q
เออะ
0
23446
5729059
1390645
2026-07-20T01:35:42Z
Alifshinobi
397
/* ภาษาคำเมือง */
5729059
wikitext
text/x-wiki
== ภาษาคำเมือง ==
=== การออกเสียง ===
* {{IPA|nod|/ʔɤʔ˨˦/|a=เชียงใหม่}}
=== คำกริยา ===
{{nod-verb|tl=1}}
# {{lb|nod|อกรรม}} {{altform|nod|ᩋᩮᩬᩥᩡ|t=[[เรอ]]}}
pcuww4vjylodkx9hkc61bo6pxl6ttws
อี่รุย
0
23449
5729324
1386600
2026-07-20T05:54:17Z
Alifshinobi
397
/* ภาษาคำเมือง */
5729324
wikitext
text/x-wiki
== ภาษาคำเมือง ==
=== การออกเสียง ===
* {{IPA|nod|/ʔiː˨˩.huj˧˧/|a=เชียงใหม่}}
=== คำนาม ===
{{nod-noun|ตัว|tl=1}}
# {{altform|nod|ᩋᩦ᩵ᩁᩩ᩠ᨿ|t=[[ชะนี]]}}
#: {{syn|nod|อี่วุย|อี่ฮุย}}
moqawu1c50qj6at4vbs35ignez56tuw
5729325
5729324
2026-07-20T05:58:50Z
Alifshinobi
397
5729325
wikitext
text/x-wiki
== ภาษาคำเมือง ==
=== การออกเสียง ===
* {{IPA|nod|/ʔiː˨˩.huj˧˧/|a=เชียงใหม่}}
=== คำนาม ===
{{nod-noun|ตัว|tl=1}}
# {{altform|nod|ᩋᩦ᩵ᩁᩩ᩠ᨿ|t=[[ชะนี]]}}
#: {{syn|nod|นางณี|อี่วุย|อี่ฮุย}}
s6iasbwwd3z1dn1fqf2etfb4tq8jhrl
อี่ค่าง
0
23450
5729051
1386593
2026-07-19T23:37:28Z
Alifshinobi
397
/* ภาษาคำเมือง */
5729051
wikitext
text/x-wiki
#เปลี่ยนทาง [[ค่าง]]
938l38t9xilr3ypsb91g6e8lr5l4ve8
โอ่ย
0
23456
5729204
1885884
2026-07-20T03:38:25Z
Alifshinobi
397
/* ภาษาคำเมือง */
5729204
wikitext
text/x-wiki
{{also/auto}}
== ภาษาคำเมือง ==
=== การออกเสียง ===
* {{IPA|nod|/ʔoːj˨˩/|a=เชียงใหม่}}
=== คำกริยา ===
{{nod-verb}}
# {{lb|nod|อกรรม}} {{pronunciation spelling of|nod|ᩋ᩠ᩅ᩠᩵ᨿ|t=[[ใช้]][[เงิน]][[อย่าง]][[สุรุ่ยสุร่าย]]}}
9yp01towo432k8agnuahl6mqmfsxmms
อุ๊ย
0
23463
5729299
5719862
2026-07-20T05:33:11Z
Alifshinobi
397
/* ภาษาคำเมือง */
5729299
wikitext
text/x-wiki
{{also/auto}}
== ภาษาไทย ==
=== การออกเสียง ===
{{th-pron}}
=== คำอุทาน ===
{{th-interj}}
# คำที่เปล่งออกมาแสดงอาการ[[ตกใจ]] มักเป็นเสียงผู้หญิง
== ภาษาคำเมือง ==
=== การออกเสียง ===
* {{IPA|nod|/ʔuj˦˥/|a=เชียงใหม่}}
* {{คำอ่านไทย|อุ๊ย, อุ้ย}}
=== คำนาม ===
{{nod-noun}}
# {{pronunciation spelling of|nod|ᩋᩩ᩠᩶ᨿ|t=[[ปู่]][[ย่า]][[ตา]][[ยาย]]}}
#: {{syn|nod|ตุ๊ย|ป้ออุ๊ย|แม่อุ๊ย}}
==== ลูกคำ ====
{{col4|nod
|อุ๊ยหม่อน
}}
{{topics|nod|ครอบครัว}}
ln6culnab8310aolaukxzc31m8o0t4c
เบียน
0
23475
5729197
1553071
2026-07-20T03:28:54Z
Alifshinobi
397
/* ภาษาคำเมือง */
5729197
wikitext
text/x-wiki
== ภาษาไทย ==
=== รูปแบบอื่น ===
* {{alt|th|เบียฬ||เลิกใช้}}
=== การออกเสียง ===
{{th-pron}}
=== คำกริยา ===
{{th-verb}}
# [[รบกวน]], [[ทำ]][[ให้]][[เดือดร้อน]], [[มัก]][[ใช้]][[เข้า]][[คู่]][[กับ]][[คำ]] [[เบียด]] [[เป็น]] [[เบียดเบียน]]
# {{lb|th|โหร}} [[เปลี่ยนแปลง]]
#: {{ux|th|ดาวพระศุกร์ถูกราหูเบียน}}
=== คำนาม ===
{{th-noun}}
# [[เรียก]][[สัตว์]][[หรือ]][[พืช]][[ที่]][[อาศัย]][[อยู่]][[ภาย]][[นอก]][[หรือ]][[ภาย]][[ใน]][[สัตว์]][[หรือ]][[พืช]][[อื่น]][[โดย]][[แย่ง]][[กิน]][[อาหาร]][[ว่า]] [[ตัวเบียน]]
== ภาษาคำเมือง ==
=== การออกเสียง ===
* {{IPA|nod|/bian˧˧/|a=เชียงใหม่}}
=== คำนาม ===
{{nod-noun}}
# {{altform|nod|ᨷ᩠ᨿᩁ|t=[[ฝา]][[กระบุง]]}}
obixsvg2jigl0cwe90v4mrqogx8ig05
จั๋กขุ๋
0
23484
5729207
5719847
2026-07-20T03:43:48Z
Alifshinobi
397
Alifshinobi ย้ายหน้า [[จักหุ]] ไปยัง [[จั๋กขุ๋]]: สะกดผิด
5719847
wikitext
text/x-wiki
== ภาษาคำเมือง ==
=== การออกเสียง ===
* {{IPA|nod|/tɕǎk.hǔʔ/}}
=== คำนาม ===
{{nod-noun}}
# [[ตั๊กแตน]][[ตัว]][[ใหญ่]]
{{topics|nod|แมลง}}
lt290aaaco7628i49t9npxk798eimpb
5729211
5729207
2026-07-20T03:46:42Z
Alifshinobi
397
5729211
wikitext
text/x-wiki
== ภาษาคำเมือง ==
=== การออกเสียง ===
* {{IPA|nod|/t͡ɕak˨˦.xuʔ˨˦/|a=เชียงใหม่}}
=== คำนาม ===
{{nod-noun}}
# {{pronunciation spelling of|nod|ᨧᩢ᩠ᨠᨡᩩ|t=[[ตั๊กแตน]][[สีเขียว]][[ชนิด]][[หนึ่ง]]}}
# {{pronunciation spelling of|nod|ᨧᨠ᩠ᨡᩩ|t=[[จักขุ]] [ตา], ดวงตา}}
{{topics|nod|แมลง}}
4v5mwzl8hgo1ouxd8lns94rktzhx8b3
โจก
0
23495
5729108
1952246
2026-07-20T02:15:05Z
Alifshinobi
397
/* ภาษาคำเมือง */
5729108
wikitext
text/x-wiki
{{also/auto}}
== ภาษาคำเมือง ==
=== การออกเสียง ===
* {{IPA|nod|/t͡ɕoːk˨˩/|a=เชียงใหม่}}
=== คำกริยา ===
{{nod-verb}}
# {{lb|nod|สกรรม}} {{altform|nod|ᨧᩰᩫ᩠ᨠ|t=[[เท]][[น้ำ]]}}
mml3g3b34dlqnrz9g25k4bf94loam1w
ชืน
0
23497
5729321
1881537
2026-07-20T05:47:25Z
Alifshinobi
397
Alifshinobi ย้ายหน้า [[ชึน]] ไปยัง [[ชืน]]: น่าจะสะกดผิด
1881537
wikitext
text/x-wiki
{{also/auto}}
== ภาษาคำเมือง ==
=== การออกเสียง ===
* {{IPA|nod|/tɕɯn/}}
=== คำนาม ===
{{nod-noun}}
# [[ตะกั่ว]]
r3j3ps98kqms0g99ffd2vepnjulpxmi
5729323
5729321
2026-07-20T05:48:31Z
Alifshinobi
397
5729323
wikitext
text/x-wiki
{{also/auto}}
== ภาษาคำเมือง ==
=== การออกเสียง ===
* {{IPA|nod|/t͡ɕɯːn˧˧/|a=เชียงใหม่}}
=== คำนาม ===
{{nod-noun|tl=1}}
# {{altform|nod|ᨩᩨ᩠ᨶ|t=[[ตะกั่ว]]}}
ayw10cf0mgv5upz8isvv5w6u8j8smof
ถ่ายหุ่น
0
23505
5729319
1372401
2026-07-20T05:44:02Z
Alifshinobi
397
/* ภาษาคำเมือง */
5729319
wikitext
text/x-wiki
== ภาษาคำเมือง ==
=== การออกเสียง ===
* {{IPA|nod|/tʰaːj˨˩.hun˨˩/|a=เชียงใหม่}}
=== คำกริยา ===
{{nod-verb}}
# {{lb|nod|อกรรม}} [[ถ่ายรูป]]
b0co5xplzi7stt7xeu02gcvhq360iyz
5729320
5729319
2026-07-20T05:44:42Z
Alifshinobi
397
5729320
wikitext
text/x-wiki
== ภาษาคำเมือง ==
=== การออกเสียง ===
* {{IPA|nod|/tʰaːj˨˩.hun˨˩/|a=เชียงใหม่}}
=== คำกริยา ===
{{nod-verb}}
# {{lb|nod|อกรรม}} {{altform|nod|ᨳ᩵ᩣ᩠ᨿᩉᩩ᩵ᩁ|t=[[ถ่ายรูป]]}}
8wrx3qtq6i1yanov49cfzcco708pg3q
ผีเสื้อ
0
24142
5729348
5627965
2026-07-20T07:20:51Z
Alifshinobi
397
/* คำแปลภาษาอื่น */
5729348
wikitext
text/x-wiki
== ภาษาไทย ==
{{wp}}
[[File:Prioneris philonome 3.jpg|thumb|ผีเสื้อขอบปีกเลื่อยจุดแดง]]
=== รากศัพท์ ===
แผลงมาจาก{{com|th|ผี|เชื้อ}}
=== การออกเสียง ===
{{th-pron|ผี-เสื้อ}}
=== คำนาม ===
{{th-noun|ตัว}}
# ชื่อ[[แมลง]]จำพวกหนึ่ง มี[[ปีก]]เป็นแผ่นบาง 2 คู่
# ชื่อ[[ปลา]][[ทะเล]]จำพวกหนึ่ง อาศัยอยู่ตามแนว[[หินปะการัง]]
==== ลูกคำ ====
{{col4|th
|ผีเสื้อกลางคืน
}}
==== คำแปลภาษาอื่น ====
{{trans-top|ชื่อแมลง}}
* กะเหรี่ยง:
*: ปะโอ: {{t|blk|လိုႏ}}
*: สะกอ: {{t|ksw|စီးကပ့ၤ}}
* เกาหลี: {{t+|ko|나비}}, {{t|ko|호접(胡蝶)}}
* กฺ๋อง: {{t|ugo|ลาบู้}}
* เขมร: {{t+|km|មេអំបៅ}}
* คำเมือง: {{t|nod|ᨠᨷᩮᩬᩥ᩶}}, {{t|nod|ᨠᩣᩴᨷᩮᩬᩥ᩶}}
* จอร์เจีย: {{t+|ka|პეპელა}}
* จีน:
*: กวางตุ้ง: {{t|yue|蝴蝶|tr=wu4 dip6-2}}
*: ดุงกาน: {{t|dng|хўте}}
*: หมิ่นตะวันออก: {{t|cdo|蝴蝶|tr=hù-diĕk}}
*: กั้น: {{t|gan|蝴蝶|tr=fu4 tiet}}
*: แคะ: {{t|hak|揚蝶仔|tr=yòng-ya̍k-é, yòng-ya̍p-é}}
*: หมิ่นใต้: {{t+|nan-hbl|蝶仔|tr=ia̍h-á}}, {{t+|nan-hbl|蝴蝶|tr=ô͘-tia̍p}}, {{t+|nan-hbl|尾蝶|tr=bóe-ia̍h, bé-ia̍h}}, {{t|nan-hbl|尾蝶仔|tr=bóe-ia̍h-á, bé-ia̍h-á}}, {{t|nan-hbl|蝶婆|tr=ia̍h-pô}}
*: จิ้น: {{t|cjy|蝴蝶|tr=hu1 dieh5}}
*: จีนกลาง: {{t+|cmn|蝴蝶|tr=húdié}}
*: อู๋: {{t|wuu|蝴蝶}}
*: เซียง: {{t|hsn|蝴蝶|tr=fu2 tie6}}
* ญี่ปุ่น: {{t+|ja|胡蝶|tr=kochō}}, {{t+|ja|蝶々|tr=chōchō}}, {{t+|ja|蝶|tr=chō}}, {{t+|ja|チョウ|tr=chō}}, {{t+|ja|蝶|tr=kawahirako}}
* ดัตช์: {{t+|nl|vlinder|m}}
* ตองงา: {{t|to|pepe}}
* ตากาล็อก: {{t|tl|paruparo}}, {{t|tl|mariposa}}
* ไทดำ: {{t|blt|ꪀꪱꪚꪹꪚ꫁}}
* ไทลื้อ: {{t+|khb|ᦂᦱᧇᦵᦢᦲᧉ}}
* ไทใหญ่: {{t+|shn|ၵၢပ်ႇမိူဝ်ႈ}}
* นาวัตล์:
*: คลาสสิก: {{t|nci|papalotl}}
* บีซู: {{t|bzi|ตอลอ}}
* ปัญจาบ: {{t|pa|ਤਿਤਲੀ|f}}
* เปอร์เซีย: {{t|fa|پَرْوانِه}}, {{t|fa|پِرْپِروک}}
* โปรตุเกส: {{t+|pt|borboleta|f}}, {{t+|pt|panapaná|m}}
* โปแลนด์: {{t+|pl|motyl|m}}
* ฝรั่งเศส: {{t+|fr|papillon|m}}
* พม่า: {{t+|my|လိပ်ပြာ}}
* มาร์แชลล์: {{t|mh|babbūb}}
* มาเลเซีย: {{t|ms|kupu-kupu}}, {{t|ms|rama-rama}}, {{t|ms|kulimambang}}
* เยอรมัน: {{t+|de|Schmetterling|m}}, {{t+|de|Falter|m}}, {{t+|de|Tagfalter|m}}
* รัสเซีย: {{t+|ru|ба́бочка|f}}, {{t+|ru|мотылёк|m}}, {{t+|ru|моты́ль|m}}
* ลาว: {{t+|lo|ແມງກະເບື້ອ}}
* เลอเวือะตะวันออก: {{t|lwl|บุ̱งบ̱ัง}}
* เวียดนาม: {{t+|vi|bươm bướm}}, {{t+|vi|bướm}}
* สเปน: {{t+|es|mariposa|f}}
* สวีเดน: {{t+|sv|fjäril|c}}, {{t+|sv|dagfjäril|c}}
* อังกฤษ: {{t+|en|butterfly|tr=บัตเทอร์ฟลาย}}
* อิตาลี: {{t+|it|farfalla|f}}
* อินโดนีเซีย: {{t+|id|kupu-kupu}}, {{t|id|rama-rama}}
* เอสเปรันโต: {{t+|eo|papilio}}
* ไอซ์แลนด์: {{t+|is|fiðrildi|n}}
* ฮินดี: {{t+|hi|तितली|f}}
{{trans-bottom}}
{{topics|th|แมลง}}
8pmew9f53n5vg2lz82amgt5u0tj7v3s
แฅ่
0
25324
5729111
1391042
2026-07-20T02:18:27Z
Alifshinobi
397
5729111
wikitext
text/x-wiki
== ภาษาคำเมือง ==
=== การออกเสียง ===
* {{IPA|nod|/xɛː˦˨/|a=เชียงใหม่}}
=== คำนาม ===
{{nod-noun}}
# {{altform|nod|ᨤᩯ᩵|t=[[ไต้]]}}
ox45ogqcgn4sqss3xxe86amcwp77xi7
5729112
5729111
2026-07-20T02:18:37Z
Alifshinobi
397
/* ภาษาคำเมือง */
5729112
wikitext
text/x-wiki
== ภาษาคำเมือง ==
=== การออกเสียง ===
* {{IPA|nod|/xɛː˦˨/|a=เชียงใหม่}}
=== คำนาม ===
{{nod-noun|tl=1}}
# {{altform|nod|ᨤᩯ᩵|t=[[ไต้]]}}
5ga1i83af3of1cxp2ypccta2adsfw68
ล้ำ
0
25327
5729047
1883665
2026-07-19T23:28:31Z
Alifshinobi
397
/* ภาษาคำเมือง */
5729047
wikitext
text/x-wiki
{{also/auto}}
== ภาษาไทย ==
=== รากศัพท์ ===
เปรียบ {{cog|vi|lắm||มาก}}
=== การออกเสียง ===
{{th-pron}}
=== คำกริยา ===
{{th-verb}}
# [[ล่วง]][[เข้า]][[ไป]][[เกิน]][[เขต]][[ที่]][[กำหนด]]
#: {{ux|th|ล้ำเขตแดน}}
#: {{ux|th|ล้ำแดนข้าศึก}}
=== คำวิเศษณ์ ===
{{th-adj}}
# [[ยิ่ง]], [[ล้น]]
#: {{ux|th|สูงล้ำ}}
#: {{ux|th|ปัญญาล้ำ}}
== ภาษาคำเมือง ==
=== การออกเสียง ===
* {{IPA|nod|/lam˦˥/|a=เชียงใหม่}}
=== คำกริยา ===
{{nod-verb}}
# {{lb|nod|สกรรม}} {{altform|nod|ᩃ᩶ᩣᩴ|t=[[ล่วง]][[เข้า]][[ไป]]}}
03io3ljnm9gqf1mrf2jwo802vql9e56
ห้วย
0
26174
5729068
1884391
2026-07-20T01:53:05Z
Heavenchris
5375
5729068
wikitext
text/x-wiki
{{also/auto}}
== ภาษาไทย ==
=== รากศัพท์ ===
{{inh+|th|tai-pro|*qrwɤjꟲ||ธารน้ำจากภูเขา}}; ร่วมเชื้อสายกับ{{cog|lo|ຫ້ວຍ}}, {{cog|khb|ᦠᦽᧉ}}, {{cog|shn|ႁူၺ်ႈ}}, {{cog|aho|𑜍𑜤𑜐𑜫}}, {{cog|skb|รี̂}}, {{cog|zzj|kuij(เมืองหนิงหมิง)}} หรือ {{m|za|huij}}, {{cog|swi|kui3}}; เทียบ{{cog|ltc|-}} {{ltc-l|海}}
=== การออกเสียง ===
{{th-pron|ฮ่วย}}
=== คำนาม ===
{{th-noun}}
# [[แอ่ง]][[น้ำ]][[ลึก]][[กว้าง]][[มี]][[ทาง]]น้ำ[[ไหล]][[จาก]][[ภูเขา]][[มา]][[ขัง]][[อยู่]][[ตลอด]][[ปี]] [[หรือ]][[แห้ง]][[บ้าง]][[เป็น]][[บาง]][[คราว]]
# [[ธาร]]น้ำจากภูเขา
==== คำแปลภาษาอื่น ====
{{trans-top|แอ่งน้ำ}}
{{trans-bottom}}
izy6g3icgm8t152pu9xwgfashai1xql
5729105
5729068
2026-07-20T02:11:53Z
Alifshinobi
397
/* รากศัพท์ */
5729105
wikitext
text/x-wiki
{{also/auto}}
== ภาษาไทย ==
=== รากศัพท์ ===
{{inh+|th|tai-pro|*qrwɤjꟲ||ธารน้ำจากภูเขา}}; ร่วมเชื้อสายกับ{{cog|lo|ຫ້ວຍ}}, {{cog|nod|ᩉ᩠᩶ᩅ᩠ᨿ}}, {{cog|khb|ᦠᦽᧉ}}, {{cog|blt|ꪬ꫁ꪺꪥ}}, {{cog|twh|ꪬꪺꪥꫂ}}, {{cog|shn|ႁူၺ်ႈ}}, {{cog|aho|𑜍𑜤𑜐𑜫}}, {{cog|skb|รี̂}}, {{cog|zzj|kuij}} (เมืองหนิงหมิง) หรือ {{m|za|huij}}, {{cog|swi|kui3}}; เทียบ{{cog|ltc|-}} {{ltc-l|海}}
=== การออกเสียง ===
{{th-pron|ฮ่วย}}
=== คำนาม ===
{{th-noun}}
# [[แอ่ง]][[น้ำ]][[ลึก]][[กว้าง]][[มี]][[ทาง]]น้ำ[[ไหล]][[จาก]][[ภูเขา]][[มา]][[ขัง]][[อยู่]][[ตลอด]][[ปี]] [[หรือ]][[แห้ง]][[บ้าง]][[เป็น]][[บาง]][[คราว]]
# [[ธาร]]น้ำจากภูเขา
==== คำแปลภาษาอื่น ====
{{trans-top|แอ่งน้ำ}}
{{trans-bottom}}
kza3d9zlpmw9n4rxeuyju9gq9rktr2n
5729106
5729105
2026-07-20T02:12:11Z
Alifshinobi
397
/* รากศัพท์ */
5729106
wikitext
text/x-wiki
{{also/auto}}
== ภาษาไทย ==
=== รากศัพท์ ===
{{inh+|th|tai-pro|*qrwɤjꟲ||ธารน้ำจากภูเขา}}; ร่วมเชื้อสายกับ{{cog|lo|ຫ້ວຍ}}, {{cog|nod|ᩉ᩠ᩅ᩠᩶ᨿ}}, {{cog|khb|ᦠᦽᧉ}}, {{cog|blt|ꪬ꫁ꪺꪥ}}, {{cog|twh|ꪬꪺꪥꫂ}}, {{cog|shn|ႁူၺ်ႈ}}, {{cog|aho|𑜍𑜤𑜐𑜫}}, {{cog|skb|รี̂}}, {{cog|zzj|kuij}} (เมืองหนิงหมิง) หรือ {{m|za|huij}}, {{cog|swi|kui3}}; เทียบ{{cog|ltc|-}} {{ltc-l|海}}
=== การออกเสียง ===
{{th-pron|ฮ่วย}}
=== คำนาม ===
{{th-noun}}
# [[แอ่ง]][[น้ำ]][[ลึก]][[กว้าง]][[มี]][[ทาง]]น้ำ[[ไหล]][[จาก]][[ภูเขา]][[มา]][[ขัง]][[อยู่]][[ตลอด]][[ปี]] [[หรือ]][[แห้ง]][[บ้าง]][[เป็น]][[บาง]][[คราว]]
# [[ธาร]]น้ำจากภูเขา
==== คำแปลภาษาอื่น ====
{{trans-top|แอ่งน้ำ}}
{{trans-bottom}}
9pcs3vsymfcmb0vpclavaskei7krxv1
กลีบ
0
27112
5729431
5725502
2026-07-20T09:26:42Z
Heavenchris
5375
5729431
wikitext
text/x-wiki
{{also/auto}}
== ภาษาไทย ==
=== รากศัพท์ ===
ร่วมเชื้อสายกับ{{cog|lo|ກີບ}}, {{cog|nod|ᨠᩖᩦᨷ}}, {{cog|za|gip|tr=กีบ|t=กลีบดอกไม้}}; เป็นไปได้ว่าเกี่ยวข้องกับ {{m|th|จีบ}}
=== การออกเสียง ===
{{th-pron|กฺลีบ}}
=== คำนาม ===
{{th-noun}}
# ส่วนของ[[ดอกไม้]]ที่เรียง[[ซ้อน]]กันเป็นชั้น ๆ รอบ[[เกสร]]
# ใช้เรียกของอื่น ๆ ที่มีลักษณะเช่นนั้น
==== คำเกี่ยวข้อง ====
* [[กลีบเดียวกระเทียมโทน]]
==== คำสืบทอด ====
* {{desc|kxm|กลีบ||bor=1}}
== ภาษาเขมรเหนือ ==
=== รากศัพท์ ===
{{bor+|kxm|th|กลีบ}}
=== การออกเสียง ===
* {{IPA|kxm|/kliːp/}}
=== คำนาม ===
{{kxm-noun}}
# [[กลีบ]] (ของดอกไม้)
jmtpm0fng38oe3c6szlr48zck8ttlxm
เกงเคง
0
28748
5729025
5719865
2026-07-19T20:17:55Z
Alifshinobi
397
/* ภาษาคำเมือง */
5729025
wikitext
text/x-wiki
== ภาษาคำเมือง ==
=== การออกเสียง ===
* {{IPA|nod|/keŋ˨˦.xeŋ˧˧/|a=เชียงใหม่}}
* {{คำอ่านไทย|เก๋งเค็ง}}
=== คำนาม ===
{{nod-noun|tl=1}}
# {{altform|nod|ᨠᩮ᩠ᨦᨤᩮ᩠ᨦ,ᨠᩮ᩠ᨦᨣᩕᩮ᩠ᨦ|t=ต้น[[กระเจี๊ยบเปรี้ยว]]}}
#: {{syn|nod|เกงเขง}}
{{topics|nod|พืช}}
q2b4pb0w9mtol1xgwmxsopxwrkhqsr5
เก็ด
0
28754
5729038
5719867
2026-07-19T23:12:36Z
Alifshinobi
397
/* ภาษาคำเมือง */
5729038
wikitext
text/x-wiki
{{also/auto}}
== ภาษาคำเมือง ==
=== การออกเสียง ===
* {{IPA|nod|/ket˨˦/|a=เชียงใหม่}}
=== คำนาม ===
{{nod-noun}}
# {{altform|nod|ᨠᩮᩢ᩠ᨯ|t=ชื่อไม้ต้นหลายชนิดใน[[สกุล]] ''Dalbergia'' [[วงศ์]] Leguminosae เช่น เก็ดดำ เก็ดแดง เนื้อไม้ใช้ทำ[[เครื่องเรือน]]ได้}}
{{topics|nod|พืช}}
ovr15v03bqsjk3u26etx5ye63ru73tq
คด
0
29330
5729245
2188833
2026-07-20T04:07:24Z
Alifshinobi
397
/* รากศัพท์ 1 */
5729245
wikitext
text/x-wiki
{{also/auto}}
== ภาษาไทย ==
=== การออกเสียง ===
{{th-pron}}
=== รากศัพท์ 1 ===
ร่วมเชื้อสายกับ{{cog|lo|ຄົດ}}, {{cog|nod|ᨣᩫ᩠ᨯ}}, {{cog|kkh|ᨣᩫ᩠ᨯ}}, {{cog|khb|ᦷᦅᧆ}}, {{cog|blt|ꪶꪁꪒ}}, {{cog|twh|ꪁꪺꪒ}}, {{cog|shn|ၵူတ်ႉ}}, {{cog|zzj|koet|tr=คด|t=ไม่ตรง, คด}}
==== คำคุณศัพท์ ====
{{th-adj}}
# ลักษณะที่ไม่[[ตรง]]ตลอด
# ไม่[[ซื่อ]]
==== คำนาม ====
{{th-noun}}
# สิ่งปลูกสร้างซึ่งมี[[สัณฐาน]][[หักมุม]]เป็น[[ข้อศอก]]
#: {{ux|th|วิหารคด}}
==== ลูกคำ ====
* [[คดกริช]]
* [[คดโกง]]
* [[คดเคี้ยว]]
* [[คดงอ]]
* [[คดซ่าง]], [[คดสร้าง]]
* [[คดในข้องอในกระดูก]]
=== รากศัพท์ 2 ===
ร่วมเชื้อสายกับ{{cog|lo|ຄົດ}}, {{cog|nod|ᨤᩫ᩠ᨯ}}, {{cog|shn|ၶူတ်ႉ}}
==== คำกริยา ====
{{th-verb}}
# {{lb|th|สกรรม}} ตัก[[ข้าวสุก]]ออกจาก[[หม้อ]]
=== รากศัพท์ 3 ===
{{rfe|th}}
==== คำนาม ====
{{th-noun}}
# วัตถุแข็งคล้ายหินที่มีในสัตว์หรือต้นไม้ นับถือกันว่าเป็น[[เครื่องราง]]
gm3kjn2opf8y57821mhoufbo5ld1v2l
ป้ออุ๊ย
0
29777
5729306
5719852
2026-07-20T05:37:40Z
Alifshinobi
397
/* ภาษาคำเมือง */
5729306
wikitext
text/x-wiki
{{also/auto}}
== ภาษาคำเมือง ==
=== รากศัพท์ ===
{{com|nod|ป้อ|อุ๊ย|t1=พ่อ|t2=ปู่ย่าตายาย}}
=== การออกเสียง ===
* {{IPA|nod|/pɔː˦˨.ʔuj˦˥/|a=เชียงใหม่}}
* {{คำอ่านไทย|ป้อ-อุ๊ย}}
=== คำนาม ===
{{nod-noun}}
# {{pronunciation spelling of|nod|ᨻᩬᩴ᩵ᩋᩩ᩠᩶ᨿ|t=[[ปู่]], [[ตา]]}}
#: {{syn|nod|อุ๊ย}}
#: {{ant|nod|แม่อุ๊ย}}
{{topics|nod|ครอบครัว}}
icv7d5jocds1wwnhxbvuh50wij9mub8
แม่อุ๊ย
0
29778
5729311
5719870
2026-07-20T05:38:25Z
Alifshinobi
397
/* ภาษาคำเมือง */
5729311
wikitext
text/x-wiki
{{also/auto}}
== ภาษาคำเมือง ==
=== รากศัพท์ ===
{{com|nod|แม่|อุ๊ย|t1=แม่|t2=ปูย่าตายาย}}
=== การออกเสียง ===
* {{IPA|nod|/mɛː˦˨.ʔuj˦˥/|a=เชียงใหม่}}
=== คำนาม ===
{{nod-noun}}
# {{pronunciation spelling of|nod|ᨾᩯ᩵ᩋᩩ᩠᩶ᨿ|t=[[ย่า]], [[ยาย]]}}
#: {{syn|nod|อุ๊ย}}
#: {{ant|nod|ป้ออุ๊ย}}
{{topics|nod|ครอบครัว}}
tw0h5d35no22ag0c0aynbdep1cf4y69
แขวด
0
29785
5729053
1390973
2026-07-20T01:22:43Z
Alifshinobi
397
5729053
wikitext
text/x-wiki
== ภาษาคำเมือง ==
=== การออกเสียง ===
* {{IPA|nod|/xwɛːt˨˩/|a=เชียงใหม่}}
* คำอ่านภาษาไทย : แขฺวด
=== คำกริยา ===
{{nod-verb}}
# {{lb|nod|สกรรม}} {{altform|nod|ᨡ᩠ᩅᩯᨯ|t=[[กำหนด]], ทำ[[เครื่องหมาย]]}}
mbkzo32uj7lqye3qlxot0o2lx6340n8
ญวา
0
29788
5729196
1371699
2026-07-20T03:17:29Z
Alifshinobi
397
/* ภาษาคำเมือง */
5729196
wikitext
text/x-wiki
== ภาษาคำเมือง ==
=== การออกเสียง ===
* {{IPA|nod|/ɲwaː˧˧/|a=เชียงใหม่}}
* {{คำอ่านไทย|อยวา|ญฺวา}}
=== คำคุณศัพท์ ===
{{nod-adj}}
# {{pronunciation spelling of|nod|ᨿ᩠ᩅᩣ|t=[[ซึม]]}}
94k2w2mtgnoxspnokndz8lnvr8ve83u
เกียว
0
29805
5729040
1884860
2026-07-19T23:20:30Z
Alifshinobi
397
/* ภาษาคำเมือง */
5729040
wikitext
text/x-wiki
{{also/auto}}
== ภาษาคำเมือง ==
=== การออกเสียง ===
* {{IPA|nod|/kiaw˧˧/}}
=== คำนาม ===
{{nod-noun}}
# {{altform|nod|ᨣ᩠ᨿᩅ|t=[[เคียว]]}}
#: {{syn|nod|เคียว}}
p92pcxh1qns54q9pgfh5zolt2op6kai
ข่าม
0
29807
5729054
1880841
2026-07-20T01:23:07Z
Alifshinobi
397
5729054
wikitext
text/x-wiki
{{also/auto}}
== ภาษาคำเมือง ==
=== การออกเสียง ===
* {{IPA|nod|/xaːm˨˩/|a=เชียงใหม่}}
* {{คำอ่านไทย|ข่าม}}
=== คำคุณศัพท์ ===
{{nod-adj}}
# {{altform|nod|ᨡ᩵ᩣ᩠ᨾ|t=[[ขลัง]]}}
3o5ofh5410vsqhcym3xzddpvoqrawp3
ກະເບື້ອ
0
30122
5729347
5721868
2026-07-20T07:19:50Z
Alifshinobi
397
/* รากศัพท์ */
5729347
wikitext
text/x-wiki
== ภาษาลาว ==
=== รากศัพท์ ===
น่าจะแผลงมาจาก {{m|lo|ກາບເບື້ອ}}; ร่วมเชื้อสายกับ{{cog|tts|กะเบื้อ}}, {{cog|nod|ᨠᩣᩴᨷᩮᩬᩥ᩶,ᨠᨷᩮᩬᩥ᩶}}, {{cog|khb|ᦂᦱᧇᦵᦢᦲᧉ}}, {{cog|shn|ၵၢပ်ႇမိူဝ်ႈ,ၵၢပ်ႇဝိူဝ်ႈ}}
===การออกเสียง===
{{lo-pron|ກະ-ເບື້ອ}}
=== คำนาม ===
{{lo-noun|ໂຕ}}
# {{lang|lo|([[ແມງ]]~)}} [[ผีเสื้อ]] {{gl|ชื่อแมลง}}
==== คำพ้องความ ====
{{col4|lo|title=ผีเสื้อ
|ກະບີ້
|ກາບເບື້ອ
}}
=== อ้างอิง ===
{{รายการอ้างอิง}}
* ''SEAlang library Lao lexicography''. SEAlang Projects. http://sealang.net/lao/dictionary.htm
{{topics|lo|แมลง}}
li5e616fy99ocrkz02ubenlteplm423
ທະນີ
0
30139
5729332
1916028
2026-07-20T06:11:56Z
Alifshinobi
397
/* คำนาม */
5729332
wikitext
text/x-wiki
{{also/auto}}
== ภาษาลาว ==
=== รากศัพท์ ===
ร่วมเชื้อสายกับ{{cog|th|ชะนี}}
=== การออกเสียง ===
{{lo-pron|ທະ-ນີ}}
=== คำนาม ===
{{lo-noun|ໂຕ}}
# [[ชะนี]]
#: {{syn|lo|ຊະນີ|ນາງນີ}}
{{topics|lo|สัตว์เลี้ยงลูกด้วยน้ำนม}}
a07xjg06prytte98py0on5hokasel03
ຫ້ວຍ
0
30336
5729107
1901171
2026-07-20T02:12:23Z
Alifshinobi
397
/* รากศัพท์ */
5729107
wikitext
text/x-wiki
{{also/auto}}
== ภาษาลาว ==
=== รูปแบบอื่น ===
{{lo-alt}}
=== รากศัพท์ ===
{{inh+|lo|tai-pro|*qrwɤjꟲ||ธารน้ำจากภูเขา}}; ร่วมเชื้อสายกับ{{cog|th|ห้วย}}, {{cog|nod|ᩉ᩠ᩅ᩠᩶ᨿ}}, {{cog|khb|ᦠᦽᧉ}}, {{cog|blt|ꪬ꫁ꪺꪥ}}, {{cog|twh|ꪬꪺꪥꫂ}}, {{cog|shn|ႁူၺ်ႈ}}, {{cog|aho|𑜍𑜤𑜐𑜫}}, {{cog|skb|รี̂}}, {{cog|zzj|khui}} [หนิงหมิง] หรือ {{m|zzj|hui}} [หลงโจว]
=== การออกเสียง ===
{{lo-pron}}
=== คำนาม ===
{{lo-noun}}
# [[ห้วย]]
==== ดูเพิ่ม ====
{{col4|lo
|ແມ່ນ້ຳ
|ຮ່ອງ
}}
4u9tvq1f4aurjgnbfhwwbyziyxtij5k
ຂົດ
0
30498
5729056
1887251
2026-07-20T01:24:46Z
Alifshinobi
397
5729056
wikitext
text/x-wiki
{{also/auto}}
== ภาษาลาว ==
=== การออกเสียง ===
{{lo-pron}}
=== รากศัพท์ 1 ===
{{rfe|lo}}
==== คำกริยา ====
{{lo-verb}}
# {{lb|lo|อกรรม|สกรรม}} [[ขด]]
=== รากศัพท์ 2 ===
{{rfe|lo}}
==== คำคุณศัพท์ ====
{{lo-adj}}
# [[คด]]
=== รากศัพท์ 3 ===
{{rfe|lo}}
==== คำกริยา ====
{{lo-verb}}
# {{lb|lo|อกรรม|สกรรม}} [[ย้าย]]
dh01yn6onqipg8ygnevy58ff1hsjbtl
โก๋น
0
32217
5729026
2757759
2026-07-19T20:20:35Z
Alifshinobi
397
/* ภาษาคำเมือง */
5729026
wikitext
text/x-wiki
{{also/auto}}
== ภาษาคำเมือง ==
=== การออกเสียง ===
* {{IPA|nod|/koːn˨˦/|a=เชียงใหม่}}
=== คำนาม ===
{{nod-noun}}
# {{altform|nod|ᨠᩰᩫ᩠ᨶ|t=[[โพรง]][[ไม้]], [[รู]]ที่อยู่ตาม[[ลำต้น]]ไม้}}
=== คำคุณศัพท์ ===
{{nod-adj|-}}
# {{altform|nod|ᨠᩰᩫ᩠ᨶ|t=[ [[ผึ้ง]] ] ที่[[ทำ]][[รัง]]ในโพรงไม้}}
==== ลูกคำ ====
{{col4|nod
|ผึ้งโก๋น
}}
== ภาษาอีสาน ==
=== คำนาม ===
{{tts-noun}}
# [[โพรงไม้]], [[รู]]ที่อยู่ตาม[[ลำต้น]]ไม้
=== คำคุณศัพท์ ===
{{tts-adj|-}}
# ([[ผึ้ง]]) ที่[[ทำรัง]]ในโพรงไม้
==== คำเกี่ยวข้อง ====
* [[ผึ้งโก๋น]]
jx77eujs5o6pwaene9k8in0iel1k3gd
5729029
5729026
2026-07-19T20:33:05Z
Alifshinobi
397
/* ภาษาอีสาน */
5729029
wikitext
text/x-wiki
{{also/auto}}
== ภาษาคำเมือง ==
=== การออกเสียง ===
* {{IPA|nod|/koːn˨˦/|a=เชียงใหม่}}
=== คำนาม ===
{{nod-noun}}
# {{altform|nod|ᨠᩰᩫ᩠ᨶ|t=[[โพรง]][[ไม้]], [[รู]]ที่อยู่ตาม[[ลำต้น]]ไม้}}
=== คำคุณศัพท์ ===
{{nod-adj|-}}
# {{altform|nod|ᨠᩰᩫ᩠ᨶ|t=[ [[ผึ้ง]] ] ที่[[ทำ]][[รัง]]ในโพรงไม้}}
==== ลูกคำ ====
{{col4|nod
|ผึ้งโก๋น
}}
== ภาษาอีสาน ==
=== คำนาม ===
{{tts-noun}}
# {{altform|tts|โกน|t=[[โพรง]][[ไม้]], [[รู]]ที่อยู่ตาม[[ลำต้น]]ไม้}}
=== คำคุณศัพท์ ===
{{tts-adj|-}}
# {{altform|tts|โกน|t=[ [[ผึ้ง]] ] ที่[[ทำ]][[รัง]]ในโพรงไม้}}
==== ลูกคำ ====
{{col4|tts
|ผึ้งโก๋น
}}
ntxfzpucyqwrmfb8ee2vzgee38pyzt4
ผึ้งโก๋น
0
32218
5729030
1952484
2026-07-19T20:35:21Z
Alifshinobi
397
/* ภาษาคำเมือง */
5729030
wikitext
text/x-wiki
== ภาษาคำเมือง ==
=== การออกเสียง ===
* {{IPA|nod|/pʰɯŋ˦˦ʔ.koːn˨˦/|a=เชียงใหม่}}
* {{คำอ่านไทย|ผึ้ง (โทพิเศษ)-โก๋น}}
=== คำนาม ===
{{nod-noun|head=[[ผึ้ง]][[โก๋น]]}}
# {{synonym of|nod|เผิ้งโก๋น|t=[[ผึ้ง]]ที่[[ทำ]][[รัง]]ใน[[โพรง]][[ไม้]]}}
== ภาษาอีสาน ==
=== คำนาม ===
{{tts-noun|head=[[ผึ้ง]][[โก๋น]]}}
# [[ผึ้ง]]ที่[[ทำรัง]]ใน[[โพรงไม้]]
fydsgj61ogdwq8cu57tk33ugzofatdc
ป้ำ
0
33466
5729173
1882553
2026-07-20T03:03:31Z
Alifshinobi
397
/* ภาษาคำเมือง */
5729173
wikitext
text/x-wiki
{{also/auto}}
== ภาษาไทย ==
=== การออกเสียง ===
{{th-pron}}
=== คำวิเศษณ์ ===
{{th-adj}}
# [[กล้าได้กล้าเสีย]] [[ใน]][[คำ]][[ว่า]] [[ใจป้ำ]]
== ภาษาคำเมือง ==
=== การออกเสียง ===
* {{IPA|nod|/pam˦˦ʔ/|a=เชียงใหม่}}
=== คำกริยา ===
{{nod-verb}}
# {{lb|nod|สกรรม}} {{pronunciation spelling of|nod|ᨸᩖ᩶ᩣᩴ|t=[[โค่น]] [ [[ทำ]][[ให้]][[ล้ม]] ]}}
4x5w2d2mlojji3wradnldfrtxbfxgox
ไหล่
0
34870
5729020
5729008
2026-07-19T16:51:07Z
Alifshinobi
397
/* รากศัพท์ */
5729020
wikitext
text/x-wiki
{{also/auto}}
== ภาษาไทย ==
=== รากศัพท์ ===
{{unknown|th}}; ร่วมเชื้อสายกับ{{cog|lo|ໄຫຼ່}}, {{cog|nod|ᩉᩖᩯ᩵}}
=== การออกเสียง ===
{{th-pron|ไหฺล่}}
=== คำนาม ===
{{th-noun}}
# [[ส่วน]][[ของ]][[บ่า]][[ตอน]][[ที่]][[ติด]][[กับ]][[ต้น]][[แขน]]
==== ลูกคำ ====
{{col4|th|กระทบไหล่|เคียงบ่าเคียงไหล่|ตีไหล่|เทียมบ่าเทียมไหล่|ผาลาเพียงไหล่|เพียงไหล่|เสมอบ่าเสมอไหล่|ห่อไหล่|หัวไหล่|ไหล่เขา|ไหล่ถนน|ไหล่ทาง|ไหล่ทวีป|ไหล่รวบ|ไหล่ลู่|ไหล่ห่อ|อกผายไหล่ผึ่ง}}
nd1ha9ijpsqthhhtrqtgqqj47q99z0z
หมอย
0
36079
5729101
3430909
2026-07-20T02:07:19Z
Alifshinobi
397
/* ภาษาคำเมือง */
5729101
wikitext
text/x-wiki
== ภาษาไทย ==
=== รูปแบบอื่น ===
* {{alt|th|หม็อย}}
=== รากศัพท์ ===
{{inh+|th|tai-pro|*ʰmwuːjᴬ}}; ร่วมเชื้อสายกับ{{cog|lo|ໝອຍ}}, {{cog|shn|မွႆ}}, {{cog|aio|မွႝ}}, {{cog|phk|မွႝ}}, {{cog|aho|𑜉𑜨𑜩}}, {{cog|za|moi}}
=== การออกเสียง ===
{{th-pron|หฺมอย|หฺม็อย}}
=== คำนาม ===
{{th-noun}}
# {{lb|th|vulgar}} [[ขน]][[ที่]][[ของลับ]]
# [[เรียก]][[สิ่ง]]ที่[[มี]][[ลักษณะ]][[เป็น]][[เส้น]]เป็น[[ฝอย]]ที่[[ปลาย]][[ฝัก]][[ข้าวโพด]][[ว่า]] หมอยข้าวโพด
== ภาษาคำเมือง ==
=== การออกเสียง ===
* {{IPA|nod|/mɔːj˨˦/|a=เชียงใหม่}}
=== คำนาม ===
{{nod-noun|tl=1}}
# {{altform|nod|ᩉ᩠ᨾᩬ᩠ᨿ|t=[[ขน]][[ที่]][[ช่อง]][[ลับ]]}}
#: {{ux|nod|'''หมอย'''[[คาง]]|'''ขน'''คาง (หมายถึง เครา)}}
#: {{ux|nod|'''หมอย'''[[ปาก]]|'''ขน'''ปาก (หมายถึง หนวด)}}
#: {{ux|nod|'''หมอย'''[[แร้]]|'''ขน'''รักแร้}}
koafnjmt1slekv2hu97uquo6dct99tu
5729102
5729101
2026-07-20T02:07:56Z
Alifshinobi
397
/* รากศัพท์ */
5729102
wikitext
text/x-wiki
== ภาษาไทย ==
=== รูปแบบอื่น ===
* {{alt|th|หม็อย}}
=== รากศัพท์ ===
{{inh+|th|tai-pro|*ʰmwuːjᴬ}}; ร่วมเชื้อสายกับ{{cog|lo|ໝອຍ}}, {{cog|nod|ᩉ᩠ᨾᩬ᩠ᨿ}}, {{cog|shn|မွႆ}}, {{cog|aio|မွႝ}}, {{cog|phk|မွႝ}}, {{cog|aho|𑜉𑜨𑜩}}, {{cog|za|moi}}
=== การออกเสียง ===
{{th-pron|หฺมอย|หฺม็อย}}
=== คำนาม ===
{{th-noun}}
# {{lb|th|vulgar}} [[ขน]][[ที่]][[ของลับ]]
# [[เรียก]][[สิ่ง]]ที่[[มี]][[ลักษณะ]][[เป็น]][[เส้น]]เป็น[[ฝอย]]ที่[[ปลาย]][[ฝัก]][[ข้าวโพด]][[ว่า]] หมอยข้าวโพด
== ภาษาคำเมือง ==
=== การออกเสียง ===
* {{IPA|nod|/mɔːj˨˦/|a=เชียงใหม่}}
=== คำนาม ===
{{nod-noun|tl=1}}
# {{altform|nod|ᩉ᩠ᨾᩬ᩠ᨿ|t=[[ขน]][[ที่]][[ช่อง]][[ลับ]]}}
#: {{ux|nod|'''หมอย'''[[คาง]]|'''ขน'''คาง (หมายถึง เครา)}}
#: {{ux|nod|'''หมอย'''[[ปาก]]|'''ขน'''ปาก (หมายถึง หนวด)}}
#: {{ux|nod|'''หมอย'''[[แร้]]|'''ขน'''รักแร้}}
c5hud1z6l8lwsd0lx85z322bhcrqa1q
มอดูล:languages/data/3/s
828
36368
5729119
5726530
2026-07-20T02:24:08Z
Octahedron80
267
5729119
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["saa"] = {
"Saba",
3914885,
"cdc-est",
"Latn",
}
m["sab"] = {
"Buglere",
3368506,
"cba",
"Latn",
}
m["sac"] = {
"Fox",
12714767,
"alg-sfk",
"Latn",
}
m["sad"] = {
"Sandawe",
34016,
"qfa-iso",
"Latn",
}
m["sae"] = {
"Sabanê",
3460478,
"sai-nmk",
"Latn",
}
m["saf"] = {
"Safaliba",
36432,
"nic-mre",
"Latn",
}
m["sah"] = {
"ซาคา",
34299,
"trk-nsb",
"Cyrl",
translit = "sah-translit",
override_translit = true,
}
m["saj"] = {
"Sahu",
7399757,
"paa-nha",
"Latn",
}
m["sak"] = {
"Sake",
36425,
"bnt-kel",
"Latn",
}
m["sam"] = {
"Samaritan Aramaic",
56612,
"sem-arw",
"Samr",
translit = "Samr-translit",
-- Samr strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["sao"] = {
"Sause",
4409155,
"paa-tkw",
"Latn",
}
m["saq"] = {
"Samburu",
56536,
"sdv-lma",
}
m["sar"] = {
"Saraveca",
3450556,
"awd",
"Latn",
}
m["sas"] = {
"Sasak",
1294047,
"poz-bss",
"Latn, Bali, Java",
}
m["sat"] = {
"สันถาลี",
33965,
"mun",
"Olck",
translit = "Olck-translit",
override_translit = true,
}
m["sau"] = {
"Saleman",
7404262,
"poz-cet",
}
m["sav"] = {
"Saafi-Saafi",
36308,
"alv-cng",
"Arab, Latn",
}
m["saw"] = {
"Sawi",
677064,
"ngf-gaw",
"Latn",
}
m["sax"] = {
"Sa",
3460352,
"poz-vnn",
"Latn",
}
m["say"] = {
"Saya",
3914431,
"cdc-wst",
"Latn",
}
m["saz"] = {
"Saurashtra",
13292,
"inc-wes",
"Saur, Latn, Taml, Deva",
translit = {
Taml = "Taml-translit",
Deva = "Deva-translit",
},
ancestors = "inc-ogu",
}
m["sba"] = {
"Ngambay",
2372207,
"csu-sar",
"Latn",
}
m["sbb"] = {
"Simbo",
3484101,
"poz-ocw",
}
m["sbc"] = {
"Gele'",
3194847,
"poz-aay",
"Latn",
}
m["sbd"] = {
"Southern Samo",
33122730,
"dmn-sam",
"Latn",
}
m["sbe"] = {
"Saliba (New Guinea)",
3469737,
"poz-ocw",
}
m["sbf"] = {
"Shabo",
36342,
"ssa",
"Latn",
}
m["sbg"] = {
"Seget",
7446237,
"paa-wbh",
"Latn",
}
m["sbh"] = {
"Sori-Harengan",
36515,
"poz-aay",
"Latn",
}
m["sbi"] = {
"Seti",
7456682,
"paa-tor",
"Latn",
}
m["sbj"] = {
"Surbakhal",
759995,
}
m["sbk"] = {
"Safwa",
4121160,
"bnt-mby",
"Latn",
}
m["sbl"] = {
"Botolan Sambal",
4095195,
"phi",
"Latn",
}
m["sbm"] = {
"Sagala",
11732610,
"bnt-ruv",
"Latn",
}
m["sbn"] = {
"Sindhi Bhil",
25559289,
"inc-snd",
"Arab, Deva, Sind, Guru",
translit = {
Deva = "Deva-translit",
Sind = "Sind-translit",
Guru = "Guru-translit",
},
ancestors = "sd",
}
m["sbo"] = {
"Sabüm",
7396535,
"mkh-asl",
}
m["sbp"] = {
"Sangu (Tanzania)",
7418149,
"bnt-bki",
"Latn",
}
m["sbq"] = {
"Sileibi",
7514337,
"ngf-nso",
"Latn",
}
m["sbr"] = {
"Sembakung Murut",
7449148,
"poz-san",
}
m["sbs"] = {
"Subiya",
6442073,
"bnt-bot",
"Latn",
}
m["sbt"] = {
"Kimki",
6410160,
"paa-pau",
}
m["sbu"] = {
"Stod Bhoti",
15622700,
"sit-las",
}
m["sbv"] = {
"Sabine",
65455885,
"itc-sbl",
"Latn",
display_text = s["itc-Latn-displaytext"],
strip_diacritics = s["itc-Latn-stripdiacritics"],
sort_key = s["itc-Latn-sortkey"],
}
m["sbw"] = {
"Simba",
36430,
"bnt-tso",
"Latn",
}
m["sbx"] = {
"Seberuang",
12473470,
"poz-mly",
}
m["sby"] = {
"Soli",
7557754,
"bnt-bot",
"Latn",
}
m["sbz"] = {
"Sara Kaba",
25559318,
"csu-kab",
"Latn",
}
m["scb"] = {
"Chut",
2967709,
"mkh-vie",
"Latn",
}
m["sce"] = {
"ตงเซียง",
32947,
"xgn-shr",
"Arab, Latn",
}
m["scf"] = {
"San Miguel Creole French",
12953094,
"crp",
"Latn",
ancestors = "gcf",
sort_key = s["roa-oil-sortkey"],
}
m["scg"] = {
"Sanggau",
12473466,
"day",
}
m["sch"] = {
"Sakachep",
37054,
"tbq-kuk",
}
m["sci"] = {
"Sri Lankan Creole Malay",
1089151,
"crp",
"Latn",
ancestors = "ms",
}
m["sck"] = {
"Sadri",
765922,
"inc-bih",
"Deva, Kthi",
translit = {
Deva = "Deva-translit",
Kthi = "Kthi-translit",
},
}
m["scl"] = {
"Shina",
1353320,
"inc-shn",
"ur-Arab, Deva",
translit = {
Deva = "Deva-translit",
},
}
m["scn"] = {
"ซิซิลี",
33973,
"roa-itr",
"Latn",
}
m["sco"] = {
"สกอต",
14549,
"gmw-ang",
"Latn",
ancestors = "gmw-msc",
}
m["scp"] = {
"Yolmo",
22662107,
"sit-kyk",
"Deva",
translit = {
Deva = "Deva-translit",
},
}
m["scq"] = {
"สะโอจ",
6583617,
"mkh-pea",
}
m["scs"] = {
"North Slavey",
20628,
"den",
"Latn",
}
m["scu"] = {
"Shumcho",
22077739,
"sit-kin",
}
m["scv"] = {
"Sheni",
11015820,
"nic-jer",
"Latn",
ancestors = "zir",
}
m["scw"] = {
"Sha",
3438816,
"cdc-wst",
"Latn",
}
m["scx"] = {
"Sicel",
36667,
"itc",
"Polyt",
-- Polyt translit, display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["scz"] = {
"Shetland",
3069598,
"qfa-mix",
"Latn",
ancestors = "nrn, gmw-msc",
standard_chars = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZzØøÖüÜü0123456789" .. c.punc,
}
m["sda"] = {
"Toraja-Sa'dan",
36673,
"poz-ssw",
"Latn",
}
m["sdb"] = {
"Shabak",
3289596,
"ira-zgr",
ancestors = "hac",
}
m["sdc"] = {
"ซัสซารี",
845441,
"roa-itr",
"Latn",
}
m["sde"] = {
"Surubu",
3913336,
"nic-kau",
"Latn",
}
m["sdf"] = {
"Sarli",
7424256,
"ira-zgr",
ancestors = "hac",
}
m["sdg"] = {
"Savi",
3474654,
"inc-dng",
}
m["sdh"] = {
"Southern Kurdish",
1496597,
"ku",
"ku-Arab",
translit = "sdh-translit",
strip_diacritics = {remove_diacritics = c.kasra .. c.sukun},
}
m["sdj"] = {
"Suundi",
7650407,
"bnt-kng",
"Latn",
}
m["sdk"] = {
"Sos Kundi",
7563811,
"paa-ndu",
"Latn",
}
m["sdl"] = {
"Saudi Arabian Sign Language",
3504160,
"sgn",
}
m["sdm"] = {
"Semandang",
7449012,
"day",
}
m["sdn"] = {
"Gallurese",
612220,
"roa-itr",
"Latn",
ancestors = "co",
}
m["sdo"] = {
"Bukar-Sadung Bidayuh",
2927799,
"day",
"Latn",
}
m["sdp"] = {
"Sherdukpen",
7494785,
"sit-khm",
}
m["sdr"] = {
"Oraon Sadri",
12953860,
"inc-bih",
}
m["sds"] = {
"เบอร์เบอร์แบบตูนีเซีย",
5329732,
"ber",
}
m["sdu"] = {
"Sarudu",
7424700,
"poz-cet",
}
m["sdx"] = {
"Sibu Melanau",
18642842,
"poz-bnn",
}
m["sea"] = {
"เซอไม",
3135426,
"mkh-asl",
"Latn",
}
-- seb is a duplicate code of spp
m["sec"] = {
"Sechelt",
7442898,
"sal",
"Latn",
}
m["sed"] = {
"Sedang",
56448,
"mkh-nbn",
"Latn",
}
m["see"] = {
"Seneca",
1185133,
"iro-nor",
"Latn",
}
m["sef"] = {
"Cebaara Senoufo",
10975121,
"alv-snr",
"Latn",
}
m["seg"] = {
"Segeju",
17584599,
"bnt-mij",
"Latn",
}
m["seh"] = {
"Sena",
2964008,
"bnt-sna",
"Latn",
}
m["sei"] = {
"Seri",
36583,
"qfa-iso",
"Latn",
}
m["sej"] = {
"Sene",
7450252,
"ngf-huo",
"Latn",
}
m["sek"] = {
"Sekani",
28562,
"ath-nor",
"Latn",
}
m["sen"] = {
"Nanerigé Sénoufo",
36002,
"alv-sma",
}
m["seo"] = {
"Suarmin",
7630513,
"qfa-dis", -- Papuan; isolate or unclassified in Glottolog; Sepik language in Foley (2018)
"Latn",
}
m["sep"] = {
"Sìcìté Sénoufo",
56787,
"alv-sma",
}
m["seq"] = {
"Senara Sénoufo",
35210,
"alv-snr",
}
m["ser"] = {
"Serrano",
3479942,
"azc-tak",
"Latn",
}
m["ses"] = {
"Koyraboro Senni",
35655,
"son",
"Latn",
}
m["set"] = {
"Sentani",
3441672,
"paa-sen",
"Latn",
}
m["seu"] = {
"Serui-Laut",
7455503,
"poz-hce",
"Latn",
}
m["sev"] = {
"Nyarafolo Senoufo",
36306,
"alv-snr",
}
m["sew"] = {
"Sewa Bay",
7458126,
"poz-ocw",
}
m["sey"] = {
"Secoya",
3477218,
"sai-tuc",
"Latn",
}
m["sez"] = {
"Senthang Chin",
7451223,
"tbq-kuk",
}
m["sfb"] = {
"French Belgian Sign Language",
3217332,
"sgn",
}
m["sfe"] = {
"Eastern Subanun",
63311321,
"phi",
"Latn",
}
m["sfm"] = {
"Small Flowery Miao",
7542773,
"hmn",
}
m["sfs"] = {
"South African Sign Language",
3322093,
"sgn",
}
m["sfw"] = {
"Sehwi",
36593,
"alv-ctn",
"Latn",
}
m["sga"] = {
"ไอริชเก่า",
35308,
"cel-gae",
"Latn, Ogam",
strip_diacritics = {remove_diacritics = c.dotabove .. c.diaer .. "·"},
sort_key = "sga-sortkey",
standard_chars = "AaÁáBbCcDdEeÉéFfGgHhIiÍíLlMmNnOoÓóPpRrSsTtUuÚú0123456789ᚁᚂᚃᚄᚅᚆᚇᚈᚉᚊᚋᚌᚍᚎᚏᚐᚑᚒᚓᚔ" .. c.punc,
}
m["sgb"] = {
"Mag-Anchi Ayta",
4356243,
"phi",
"Latn",
}
m["sgc"] = {
"Kipsigis",
56339,
"sdv-nma",
}
m["sgd"] = {
"ซูรีเกาโนน",
34140,
"phi",
"Latn",
}
m["sge"] = {
"Segai",
7446180,
}
m["sgg"] = {
"Swiss-German Sign Language",
35150,
"sgn",
}
m["sgh"] = {
"Shughni",
34053,
"ira-shr",
"Latn, Cyrl",
translit = "sgh-translit",
override_translit = true,
}
m["sgi"] = {
"Suga",
36475,
"nic-mmb",
"Latn",
}
m["sgk"] = {
"Sangkong",
2945610,
"tbq-bis",
}
m["sgm"] = {
"Singa",
7522797,
"bnt-lok",
"Latn",
}
m["sgp"] = {
"Singpho",
7524158,
"sit-jnp",
"Latn",
}
m["sgr"] = {
"Sangisari",
3394363,
"ira-kms",
"Arab",
}
m["sgs"] = {
"Samogitian",
213434,
"bat-eas",
"Latn",
wikimedia_codes = "bat-smg",
ancestors = "olt",
display_text = "lt-common",
strip_diacritics = "lt-common",
sort_key = "lt-common",
}
m["sgt"] = {
"Brokpake",
56603,
"sit-tib",
"Tibt",
override_translit = true,
-- Tibt translit, display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["sgu"] = {
"Salas",
7403694,
"poz-cma",
}
m["sgw"] = {
"Sebat Bet Gurage",
2707343,
"sem-eth",
"Ethi",
}
m["sgx"] = {
"Sierra Leone Sign Language",
7511448,
"sgn",
}
m["sgy"] = {
"Sanglechi",
3472220,
"ira-sgi",
}
m["sgz"] = {
"Sursurunga",
36511,
"poz-ocw",
"Latn",
}
m["sha"] = {
"Shall-Zwall",
3915355,
"nic-beo",
}
m["shb"] = {
"Ninam",
3436586,
"sai-ynm",
"Latn",
}
m["shc"] = {
"Sonde",
7560881,
"bnt-pen",
"Latn",
}
m["shd"] = {
"Kundal Shahi",
6444265,
"inc-shn",
"Arab",
}
m["she"] = {
"Sheko",
3183355,
"omv-diz",
}
m["shg"] = {
"Shua",
3501092,
"khi-kal",
"Latn",
}
m["shh"] = {
"Shoshone",
33811,
"azc-num",
"Latn",
}
m["shi"] = {
"Tashelhit",
34152,
"ber",
"Latn, Arab, Tfng, Hebr",
ancestors = "shi-med",
translit = {
Tfng = "Tfng-translit",
},
strip_diacritics = {
Arab = "ar-stripdiacritics",
},
-- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["shj"] = {
"Shatt",
56344,
"sdv-daj",
}
m["shk"] = {
"Shilluk",
36486,
"sdv-lon",
"Latn",
}
m["shl"] = {
"Shendu",
22074616,
"tbq-kuk",
}
m["shm"] = {
"Shahrudi",
7462280,
"xme-ttc",
"fa-Arab, Latn",
ancestors = "xme-ttc-cen",
}
m["shn"] = {
"ไทใหญ่",
56482,
"tai-swe",
"Mymr",
translit = "shn-translit",
sort_key = {
from = {"[ၢႃ]", "ဵ", "ႅ", "ႇ", "ႈ", "း", "ႉ", "ႊ"},
to = {"ာ", "ေ", "ႄ", "႒", "႓", "႔", "႕", "႖"}
},
}
m["sho"] = {
"Shanga",
3913931,
"dmn-bbu",
"Latn",
}
m["shp"] = {
"Shipibo-Conibo",
2671988,
"sai-pan",
"Latn",
}
m["shq"] = {
"Sala",
10961665,
"bnt-bot",
"Latn",
}
m["shr"] = {
"Shi",
3481999,
"bnt-shh",
"Latn",
}
m["shs"] = {
"Shuswap",
3482685,
"sal",
"Latn",
}
m["sht"] = {
"Shasta",
56396,
"nai-shs",
"Latn",
}
m["shu"] = {
"Chadian Arabic",
56497,
"sem-arb",
"Arab",
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["shv"] = {
"Shehri",
33445,
"sem-sar",
"Arab, Latn",
}
m["shw"] = {
"Shwai",
36527,
"alv-hei",
}
m["shx"] = {
"She",
2605689,
"hmn",
}
m["shy"] = {
"Tachawit",
33274,
"ber",
"Tfng, Arab, Latn",
translit = "Tfng-translit",
}
m["shz"] = {
"Syenara Senoufo",
36316,
"alv-snr",
}
m["sia"] = {
"Akkala Sami",
35241,
"smi",
"Cyrl, Latn",
translit = "sia-translit",
display_text = {
from = {"'"},
to = {"ˈ"}
},
strip_diacritics = {remove_diacritics = "'ˈ"},
}
m["sib"] = {
"Sebop",
7442799,
"poz-swa",
"Latn",
}
m["sid"] = {
"ซีดามา",
33786,
"cus-hec",
"Latn, Ethi",
}
m["sie"] = {
"Simaa",
7517329,
"bnt-kav",
"Latn",
}
m["sif"] = {
"Siamou",
36252,
}
m["sig"] = {
"Paasaal",
36426,
"nic-sis",
"Latn",
}
m["sih"] = {
"Sîshëë",
8072753,
"poz-cln",
"Latn",
}
m["sii"] = {
"Shom Peng",
1039346,
"aav",
}
m["sij"] = {
"Numbami",
3346277,
"poz-ocw",
"Latn",
}
m["sik"] = {
"Sikiana",
3443734,
"sai-prk",
"Latn",
}
m["sil"] = {
"Tumulung Sisaala",
25383006,
"nic-sis",
"Latn",
}
m["sim"] = {
"Seim",
7446815,
"paa-spk",
"Latn",
}
m["sip"] = {
"สิกขิม",
35285,
"sit-tib",
"Tibt",
ancestors = "xct",
override_translit = true,
-- Tibt translit, display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["siq"] = {
"Sonia",
7561770,
"ngf-bos",
"Latn",
}
m["sir"] = {
"Siri",
3438729,
"cdc-wst",
"Latn",
}
m["sis"] = {
"Siuslaw",
2315424,
}
m["siu"] = {
"Sinagen",
7521655,
"paa-tor",
"Latn",
}
m["siv"] = {
"Sumariup",
7636966,
"paa-spk",
"Latn",
}
m["siw"] = {
"Siwai",
7532519,
"paa-sbo",
"Latn",
}
m["six"] = {
"Sumau",
7637021,
"ngf-pek",
"Latn",
}
m["siy"] = {
"Sivandi",
13269,
"xme",
"fa-Arab, Latn",
ancestors = "xme-mid",
}
m["siz"] = {
"Siwi",
36814,
"ber",
"Tfng, Arab, Latn",
}
m["sja"] = {
"Epena",
3055682,
"sai-chc",
"Latn",
}
m["sjb"] = {
"Sajau Basap",
4684353,
"poz-bnn",
}
m["sjc"] = {
"Shaojiang Min",
3431451,
"zhx-inm",
"Hants",
generate_forms = "zh-generateforms",
sort_key = "Hani-sortkey",
}
m["sjd"] = {
"ซามีแบบกิลดิน",
33656,
"smi",
"Cyrl",
translit = "sjd-translit",
display_text = {
from = {"'"},
to = {"ˈ"}
},
strip_diacritics = {remove_diacritics = "'ˈ"},
}
m["sje"] = {
"ซามีแบบปีเต",
56314,
"smi",
"Latn",
display_text = {
from = {"'"},
to = {"ˈ"}
},
strip_diacritics = {remove_diacritics = c.macron .. "'ˈ"},
sort_key = "sje-sortkey",
}
m["sjg"] = {
"Assangori",
3502255,
"sdv-tmn",
}
m["sjk"] = {
"Kemi Sami",
35871,
"smi",
"Latn",
display_text = {
from = {"'"},
to = {"ˈ"}
},
strip_diacritics = {remove_diacritics = "'ˈ"},
}
m["sjl"] = {
"Miji",
6845470,
"sit-hrs",
}
m["sjm"] = {
"Mapun",
3287253,
"poz-sbj",
"Latn",
}
m["sjn"] = {
"ซินดาริน",
56437,
"art",
"Latn, Teng",
type = "appendix-constructed",
}
m["sjo"] = {
"Xibe",
13223,
"tuw-jrc",
"sjo-Mong",
ancestors = "mnc",
}
m["sjp"] = {
"Surjapuri",
7645351,
"inc-krd",
"Deva, as-Beng, Kthi",
translit = {
Deva = "Deva-translit",
["as-Beng"] = "Beng-translit",
Kthi = "Kthi-translit",
},
}
m["sjr"] = {
"Siar-Lak",
3482907,
"poz-ocw",
}
m["sjs"] = {
"Senhaja de Srair",
56744,
"ber",
"Latn, Tfng, Arab",
strip_diacritics = {
Arab = "ar-stripdiacritics",
},
translit = {
Tfng = "Tfng-translit",
}
}
m["sjt"] = {
"Ter Sami",
36656,
"smi",
"Cyrl, Latn",
display_text = {
from = {"'"},
to = {"ˈ"}
},
strip_diacritics = {remove_diacritics = "'ˈ"},
translit = "sjt-translit",
}
m["sju"] = {
"Ume Sami",
56415,
"smi",
"Latn",
strip_diacritics = {remove_diacritics = c.macron .. "'ˈ"},
display_text = {
from = {"'"},
to = {"ˈ"}
},
sort_key = "sju-sortkey",
}
m["sjw"] = {
"Shawnee",
2669206,
"alg",
"Latn",
}
m["ska"] = {
"Skagit",
25559652,
"sal",
"Latn",
}
m["skb"] = {
"แสก",
36437,
"tai-nor",
"Thai",
--sort_key = "Thai-sortkey",
}
m["skc"] = {
"Ma Manda",
6720783,
"ngf-fin",
"Latn",
}
m["skd"] = {
"Southern Sierra Miwok",
3492334,
"nai-utn",
"Latn",
}
m["ske"] = {
"Ske",
7534244,
"poz-vnn",
"Latn",
}
m["skf"] = {
"Mekéns",
3304806,
"tup",
"Latn",
}
m["skh"] = {
"Sikule",
3121081,
"poz-nws",
}
m["ski"] = {
"Sika",
33960,
"poz-cet",
"Latn",
}
m["skj"] = { -- compare 'ths'
"Seke",
30226846,
"sit-tam",
}
m["skk"] = {
"Sok",
12953887,
"mkh-ban",
}
m["skm"] = {
"Sakam",
6448517,
"ngf-fin",
"Latn",
}
m["skn"] = {
"Kolibugan Subanon",
18755617,
"phi",
"Latn",
}
m["sko"] = {
"Seko Tengah",
15613270,
"poz",
}
m["skp"] = {
"Sekapan",
7447132,
"poz-bnn",
}
m["skq"] = {
"Sininkere",
3914896,
"dmn-man",
"Latn",
}
m["skr"] = {
"Saraiki",
33902,
"inc-pan",
"pa-Arab, Mult, Deva",
ancestors = "lah",
strip_diacritics = {remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.nunghunna},
translit = {
["pa-Arab"] = "pa-Arab-translit",
Deva = "Deva-translit",
Mult = "Mult-translit",
},
}
m["sks"] = {
"ไมยา",
12952760,
"ngf-kau",
"Latn",
}
m["skt"] = {
"Sakata",
36691,
"bnt-bnm",
"Latn",
}
m["sku"] = {
"Sakao",
3298421,
"poz-vnn",
"Latn",
}
m["skv"] = {
"Skou",
3915200,
"paa-msk",
"Latn",
}
m["skw"] = {
"Skepi Creole Dutch",
2522153,
"crp",
"Latn",
ancestors = "nl",
}
m["skx"] = {
"Seko Padang",
15613282,
"poz-ssw",
"Latn",
}
m["sky"] = {
"ซีกายานา",
7439242,
"poz-pnp",
"Latn",
}
m["skz"] = {
"Sekar",
7447136,
"poz-cet",
}
m["slc"] = {
"Saliba (Colombia)",
3441097,
nil,
"Latn",
}
m["sld"] = {
"Sisaala",
11020264,
"nic-sis",
"Latn",
}
m["sle"] = {
"Sholaga",
7500203,
"dra-kan",
"Knda",
-- Knda translit in [[Module:scripts/data]]
}
m["slf"] = {
"Swiss-Italian Sign Language",
12953479,
"sgn",
}
m["slg"] = {
"Selungai Murut",
7448844,
"poz-san",
}
m["slh"] = {
"Southern Puget Sound Salish",
12642471,
"sal",
"Latn",
}
-- "sli" "Silesian German" IS SUBSUMED INTO "gmw-ecg" "East Central German"
m["slj"] = {
"Salumá",
7406296,
"sai-prk",
"Latn",
}
m["sll"] = {
"Salt-Yui",
7405785,
"ngf-chw",
"Latn",
}
m["slm"] = {
"ซามาแบบปางูตารัน",
3362086,
"poz-sbj",
"Latn",
}
m["sln"] = {
"Salinan",
1568938,
"qfa-iso",
"Latn",
}
m["slp"] = {
"Lamaholot",
6480777,
"poz-cet",
"Latn",
}
m["slr"] = {
"ซาลาร์",
33963,
"trk-ogz",
"Arab, Latn",
ancestors = "trk-eog",
}
m["sls"] = {
"Singapore Sign Language",
7512563,
"sgn",
}
m["slt"] = {
"Sila",
7514021,
"tbq-sil",
}
m["slu"] = {
"Selaru",
7447500,
"poz-cet",
"Latn",
}
m["slw"] = {
"Sialum",
7506694,
"ngf-huo",
"Latn",
}
m["slx"] = {
"Salampasu",
7403607,
"bnt-lun",
"Latn",
}
m["sly"] = {
"Selayar",
7447520,
"poz-ssw",
}
m["slz"] = {
"Ma'ya",
2291492,
"poz-hce",
"Latn",
}
m["sma"] = {
"ซามีใต้",
13293,
"smi",
"Latn",
display_text = {
from = {"'"},
to = {"ˈ"}
},
strip_diacritics = {remove_diacritics = "'ˈ"},
sort_key = "sma-sortkey",
}
m["smb"] = {
"Simbari",
7517427,
"ngf-ang",
"Latn",
}
m["smc"] = {
"Som",
7559081,
"ngf-fin",
"Latn",
}
m["smd"] = {
"Sama",
6407456,
"bnt-kmb",
"Latn",
}
m["smf"] = {
"Auwe",
3502072,
"paa-brd",
"Latn",
ancestors = "dnd",
}
m["smg"] = {
"Simbali",
56692,
"paa-bng",
"Latn",
}
m["smh"] = {
"Samei",
7409269,
"tbq-axi",
}
m["smj"] = {
"ซามีแบบลูเล",
56322,
"smi",
"Latn",
display_text = {
from = {"'"},
to = {"ˈ"}
},
strip_diacritics = {remove_diacritics = c.macron .. "'ˈ"},
sort_key = "smj-sortkey",
}
m["smk"] = {
"โบลีเนา",
2669235,
"phi",
"Latn, Tglg",
}
m["sml"] = {
"ซามาตอนกลาง",
3470593,
"poz-sbj",
"Latn",
}
m["smm"] = {
"Musasa",
6940122,
"inc-eas",
ancestors = "bh",
}
m["smn"] = {
"ซามีแบบอีนารี",
33462,
"smi",
"Latn",
display_text = {
from = {"'"},
to = {"ˈ"}
},
strip_diacritics = {remove_diacritics = c.dotbelow .. "'ˈ"},
sort_key = "smn-sortkey",
}
m["smp"] = {
"Samaritan Hebrew",
56502,
"sem-can",
"Samr",
translit = "Samr-translit",
-- Samr strip_diacritics, sort_key in [[Module:scripts/data]]
ancestors = "hbo",
}
m["smq"] = {
"Samo",
7409884,
"ngf-est",
"Latn",
}
m["smr"] = {
"Simeulue",
2992833,
"poz-nws",
"Latn",
}
m["sms"] = {
"Skolt Sami",
13271,
"smi",
"Latn",
display_text = {
from = {"'"},
to = {"ˈ"}
},
strip_diacritics = {remove_diacritics = c.dotbelow .. "'ˈ"},
sort_key = "sms-sortkey",
}
m["smt"] = {
"Simte",
7521268,
"tbq-kuk",
}
m["smu"] = {
"สมราย",
6583612,
"mkh-pea",
}
m["smv"] = {
"Samvedi",
6345632,
"inc-sou",
}
m["smw"] = {
"Sumbawa",
3182585,
"poz-bss",
"Latn",
}
m["smx"] = {
"Samba",
11120157,
"bnt-pen",
"Latn",
}
m["smy"] = {
"Semnani",
14531212,
"xme",
"fa-Arab, Latn",
}
m["smz"] = {
"Simeku",
7517534,
"paa-sbo",
"Latn",
}
m["snb"] = {
"Sebuyau",
7442836,
"poz-mly",
"Latn",
}
m["snc"] = {
"Sinaugoro",
4170719,
"poz-ocw",
"Latn",
}
m["sne"] = {
"Bau Bidayuh",
2891938,
"day",
"Latn",
}
m["snf"] = {
"Noon",
36304,
"alv-cng",
"Latn",
}
m["sng"] = {
"Sanga (Congo)",
3438316,
"bnt-lub",
"Latn",
}
m["sni"] = {
"Sensi",
7451029,
"sai-pan",
"Latn",
}
m["snj"] = {
"Riverain Sango",
25559751,
"crp",
"Latn",
ancestors = "ngb",
}
m["snk"] = {
"Soninke",
36660,
"dmn-snb",
"Latn",
}
m["snl"] = {
"Sangil",
3472206,
"phi",
"Latn",
}
m["snm"] = {
"Southern Ma'di",
15637273,
"csu-mma",
}
m["snn"] = {
"Siona",
3485116,
"sai-tuc",
"Latn",
}
m["sno"] = {
"Snohomish",
25559662,
"sal",
"Latn",
}
m["snp"] = {
"Siane",
7506812,
"ngf-kag",
"Latn",
}
m["snq"] = {
"Sangu (Gabon)",
36609,
"bnt-sir",
"Latn",
}
m["snr"] = {
"Sihan",
7513400,
"ngf-gum",
"Latn",
}
m["sns"] = {
"Nahavaq",
2160435,
"poz-vnc",
"Latn",
}
m["snu"] = {
"Senggi",
7929052,
"paa-brd",
"Latn",
}
m["snv"] = {
"Sa'ban",
3474891,
"poz-swa",
"Latn",
}
m["snw"] = {
"Selee",
36272,
"alv-ntg",
"Latn",
}
m["snx"] = {
"Sam",
7408387,
"ngf-min",
"Latn",
}
m["sny"] = {
"Saniyo-Hiyewe",
7418302,
"paa-spk",
"Latn",
}
m["snz"] = {
"Kou",
7525035, -- also 4803639
"ngf-eva",
"Latn",
}
m["soa"] = {
"โซ่ง",
7709159,
"tai-swe",
"Tavt, Thai",
--translit = "Tavt-translit",
sort_key = {
from = {"([ꪵꪶꪹꪻꪼ])([ꪀ-ꪯ])", "([เแโใไ])([ก-ฮ])"},
to = {"%2%1", "%2%1"}
},
}
m["sob"] = {
"Sobei",
3121035,
"poz-ocw",
"Latn",
}
m["soc"] = {
"Soko",
7555138,
"bnt-ske",
"Latn",
}
m["sod"] = {
"Songoora",
7561296,
"bnt-lgb",
"Latn",
}
m["soe"] = {
"Songomeno",
5713543,
"bnt-bsh",
"Latn",
}
m["sog"] = {
"Sogdian",
205979,
"ira-sgc",
"Sogd, Mani, Syrc, Sogo",
translit = {
Sogd = "Sogd-translit",
-- Mani translit in [[Module:scripts/data]]
Sogo = "Sogo-translit",
},
}
m["soh"] = {
"Aka (Sudan)",
3450949,
"sdv-eje",
"Latn",
}
m["soi"] = {
"Sonha",
12953890,
"inc-eas",
}
m["sok"] = {
"Sokoro",
3441303,
"cdc-est",
"Latn",
}
m["sol"] = {
"Solos",
3489591,
"poz-ocw",
}
m["soo"] = {
"Nsong",
12953148,
"bnt-bdz",
"Latn",
}
m["sop"] = {
"Songe",
3130911,
"bnt-lbn",
"Latn",
}
m["soq"] = {
"Kanasi",
11732656,
"ngf-dag",
"Latn",
}
m["sor"] = {
"Somrai",
3123566,
"cdc-est",
"Latn",
}
m["sos"] = {
"Seenku",
36274,
"dmn-smg",
}
m["sou"] = {
"ปักษ์ใต้",
56508,
"tai-swe",
"Thai",
--sort_key = "Thai-sortkey",
}
m["sov"] = {
"Sonsorolese",
13281,
"poz-mic",
"Latn",
}
m["sow"] = {
"Sowanda",
7571845,
"paa-brd",
"Latn",
}
m["sox"] = {
"Swo",
36604,
"bnt-mka",
"Latn",
}
m["soy"] = {
"Miyobe",
35913,
"alv-sav",
"Latn",
}
m["soz"] = {
"Temi",
13278,
"bnt-kka",
"Latn",
}
m["spb"] = {
"Sepa (Indonesia)",
18603687,
"poz-cma",
"Latn",
}
m["spc"] = {
"Sapé",
2888158,
nil,
"Latn",
}
m["spd"] = {
"Saep",
7398312,
"ngf-yag",
"Latn",
}
m["spe"] = {
"Sepa (New Guinea)",
7451725,
"poz-ocw",
"Latn",
}
m["spg"] = {
"Sian",
7506806,
"poz-bnn",
}
m["spi"] = {
"Saponi",
3915418,
"paa-lkp",
"Latn",
}
m["spk"] = {
"Sengo",
7450584,
"paa-ndu",
"Latn",
}
m["spl"] = {
"Selepet",
7447917,
"ngf-huo",
"Latn",
}
m["spm"] = {
"Sepen",
4701931,
"paa-ram",
"Latn",
}
m["spn"] = {
"Sanapaná",
3033556,
"sai-mas",
"Latn",
}
m["spo"] = {
"Spokane",
3493704,
"sal",
}
m["spp"] = {
"Supyire",
56284,
"alv-sma",
"Latn",
}
m["spr"] = {
"Saparua",
7420921,
"poz-cma",
"Latn",
}
m["sps"] = {
"Saposa",
3473187,
"poz-ocw",
}
m["spt"] = {
"Spiti Bhoti",
22080879,
"sit-las",
}
m["spu"] = {
"Sapuan",
7421168,
"mkh-ban",
}
m["spv"] = {
"Sambalpuri",
6433240,
"inc-eas",
"Orya",
translit = "or-translit",
ancestors = "or",
}
m["spx"] = {
"South Picene",
36688,
"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["spy"] = {
"Sabaot",
7395896,
"sdv-kln",
}
m["sqa"] = {
"Shama-Sambuga",
3914392,
"nic-kmk",
"Latn",
}
m["sqh"] = {
"Shau",
3913925,
"nic-jer",
"Latn",
}
m["sqk"] = {
"Albanian Sign Language",
4709168,
"sgn",
}
m["sqm"] = {
"Suma",
11008431,
"gba-wes",
}
m["sqn"] = {
"Susquehannock",
3505736,
"iro-nor",
}
m["sqo"] = {
"Sorkhei",
3491964,
"ira-kms",
}
m["sqq"] = {
"Sou",
16979751,
"mkh-ban",
}
m["sqr"] = {
"Siculo-Arabic",
1069489,
"sem-arb",
"Arab",
}
m["sqs"] = {
"Sri Lankan Sign Language",
3915466,
"sgn",
}
m["sqt"] = {
"Soqotri",
13283,
"sem-sar",
"Arab, Latn",
}
m["squ"] = {
"Squamish",
2484579,
"sal",
"Latn",
}
m["sra"] = {
"Saruga",
7424699,
"ngf-han",
"Latn",
}
m["srb"] = {
"Sora",
13284,
"mun",
"Sora, Latn, Orya",
}
m["sre"] = {
"Sara",
33957,
"day",
}
m["srf"] = {
"Nafi",
6958174,
"poz-ocw",
}
m["srg"] = {
"Sulod",
7636489,
"phi",
}
m["srh"] = {
"Sarikoli",
33873,
"ira-shr",
"Latn, ug-Arab, Cyrl",
}
m["sri"] = {
"Siriano",
3485264,
"sai-tuc",
"Latn",
}
m["srk"] = {
"Serudung Murut",
7455497,
"poz-san",
}
m["srl"] = {
"Isirawa",
4203802,
"paa-tkw",
}
m["srm"] = {
"ซารามักกา",
33779,
"crp",
"Latn",
ancestors = "en, pt",
}
m["srn"] = {
"Sranan Tongo",
33989,
"crp",
"Latn",
ancestors = "en",
}
m["srq"] = {
"Sirionó",
3027953,
"tup-gua",
"Latn",
}
m["srr"] = {
"Serer",
36284,
"alv-fwo",
"Latn",
}
m["srs"] = {
"Tsuut'ina",
20825,
"ath-nor",
"Latn",
}
m["srt"] = {
"Sauri",
7427547,
"paa-egb",
"Latn",
}
m["sru"] = {
"Suruí",
7646993,
"tup",
"Latn",
}
m["srv"] = {
"Waray Sorsogon",
18755610,
"phi",
"Latn",
}
m["srw"] = {
"Serua",
14916905,
"poz-cet",
}
m["srx"] = {
"Sirmauri",
7530505,
"him",
}
m["sry"] = {
"Sera",
7452602,
"poz-ocw",
"Latn",
}
m["srz"] = {
"Shahmirzadi",
12953126,
"ira-msh",
"fa-Arab",
}
m["ssb"] = {
"Southern Sama",
3470594,
"poz-sbj",
"Latn",
}
m["ssc"] = {
"Suba-Simbiti",
7630687,
"bnt-lok",
"Latn",
}
m["ssd"] = {
"Siroi",
10771067,
"ngf-rai",
"Latn",
}
m["sse"] = {
"Balangingi",
2880535,
"poz-sbj",
"Latn",
}
m["ssf"] = {
"Thao",
676492,
"map",
"Latn",
}
m["ssg"] = {
"Seimat",
3182581,
"poz-aay",
"Latn",
}
m["ssh"] = {
"Shihhi Arabic",
56571,
"sem-arb",
"Arab",
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["ssi"] = {
"Sansi",
3309366,
"inc-nwe",
}
m["ssj"] = {
"Sausi",
7427605,
"ngf-eva",
"Latn",
}
m["ssk"] = {
"Sunam",
11002210,
"sit-kin",
}
m["ssl"] = {
"Western Sisaala",
11154776,
"nic-sis",
"Latn",
}
m["ssm"] = {
"Semnam",
7449713,
"mkh-asl",
"Latn",
}
m["sso"] = {
"Sissano",
7530937,
"poz-ocw",
"Latn",
}
m["ssp"] = {
"Spanish Sign Language",
3100814,
"sgn",
}
m["ssq"] = {
"So'a",
7572120,
"poz-cet",
"Latn",
}
m["ssr"] = {
"Swiss-French Sign Language",
12953483,
"sgn",
}
m["sss"] = {
"Sô",
3082037,
"mkh-kat",
}
m["sst"] = {
"Sinasina",
7521813,
"ngf-chw",
"Latn",
}
m["ssu"] = {
"Susuami",
7649752,
"ngf-ang",
"Latn",
}
m["ssv"] = {
"Shark Bay",
7489783,
"poz-vnn",
"Latn",
}
m["ssx"] = {
"Samberigi",
7409020,
"ngf-eng",
"Latn",
}
m["ssy"] = {
"ซาโฮ",
36353,
"cus-eas",
"Latn, Ethi, Arab",
}
m["ssz"] = {
"Sengseng",
7450601,
"poz-ocw",
"Latn",
}
m["stb"] = {
"Northern Subanen",
12953892,
"phi",
"Latn",
}
m["std"] = {
"Sentinelese",
568377,
"qfa-unc", -- presumed Ongan
}
m["ste"] = {
"Liana-Seti",
6539924,
"poz-cma",
}
m["stf"] = {
"Seta",
7456326,
"paa-tor",
"Latn",
}
m["stg"] = {
"Trieng",
22694648,
"mkh-ban",
}
m["sth"] = {
"Shelta",
36705,
"qfa-mix",
"Latn",
ancestors = "ga, en",
}
m["sti"] = {
"Bulo Stieng",
15771431,
"mkh-ban",
"Khmr, Latn",
}
m["stj"] = {
"Matya Samo",
10974879,
"dmn-sam",
"Latn",
}
m["stk"] = {
"Arammba",
3502094,
"paa-yam",
"Latn",
}
m["stm"] = {
"Setaman",
7456333,
"ngf-okk",
"Latn",
}
m["stn"] = {
"Owa",
1324132,
"poz-sls",
"Latn",
}
m["sto"] = {
"Stoney",
3033570,
"sio-dkt",
"Latn",
}
m["stp"] = {
"Southeastern Tepehuan",
12953917,
"azc-pim",
"Latn",
}
m["stq"] = {
"ฟรีเชียแบบซาเทอร์ลันท์",
27154,
"gmw-fri",
"Latn",
}
m["str"] = {
"Saanich",
36444,
"sal",
"Latn",
}
m["sts"] = {
"Shumashti",
33777,
"inc-kun",
"Arab",
}
m["stt"] = {
"Budeh Stieng",
12953891,
"mkh-ban",
}
m["stu"] = {
"Samtao",
25559550,
"mkh-pal",
}
m["stv"] = {
"Silt'e",
33880,
"sem-eth",
"Ethi",
}
m["stw"] = {
"Satawalese",
28477,
"poz-mic",
"Latn",
}
m["sty"] = {
"Siberian Tatar",
4418344,
"trk-kno",
"Cyrl",
}
m["sua"] = {
"Sulka",
7636341,
"qfa-iso", -- Papuan; isolate in Glottolog and Palmer (2018)
"Latn",
}
m["sub"] = {
"Suku",
12953160,
"bnt-yak",
"Latn",
}
m["suc"] = {
"Western Subanon",
16113894,
"phi",
"Latn",
}
m["sue"] = {
"Suena",
7634386,
"paa-bin",
"Latn",
}
m["sug"] = {
"Suganga",
7634706,
"ngf-okk",
"Latn",
}
m["sui"] = {
"Suki",
2089984,
"ngf-gsu",
"Latn",
}
m["suk"] = {
"Sukuma",
2638144,
"bnt-tkm",
"Latn",
}
-- suo (Bouni, Papua New Guinea, called Bouni-Bobe in Glottolog): not yet accepted; in the Sko/Skou family
m["suq"] = {
"Suri",
5364172,
"sdv",
}
m["sur"] = {
"Mwaghavul",
3440486,
"cdc-wst",
"Latn",
}
m["sus"] = {
"Susu",
33990,
"dmn-sya",
"Latn",
}
m["sut"] = {
"Subtiaba",
3915405,
"omq",
"Latn",
}
m["suv"] = {
"Puroik",
56408,
"sit-khb",
"Beng, Deva, Latn",
ancestors = "sit-khp-pro",
}
m["suw"] = {
"Sumbwa",
7637055,
"bnt-glb",
"Latn",
}
m["sux"] = {
"ซูเมอร์",
36790,
"qfa-iso",
"Xsux, Latn",
}
m["suy"] = {
"Suyá",
3505859,
"sai-nje",
"Latn",
}
m["suz"] = {
"Sunwar",
56549,
"sit-kiw",
"Deva, Sunu",
translit = {
Deva = "Deva-translit",
},
}
m["sva"] = {
"Svan",
34067,
"ccs",
"Geor, Cyrl",
translit = {
Geor = "sva-translit",
},
override_translit = true,
}
m["svb"] = {
"Ulau-Suain",
7878769,
"poz-ocw",
"Latn",
}
m["svc"] = {
"Vincentian Creole English",
3501785,
"crp",
"Latn",
ancestors = "en",
}
m["sve"] = {
"Serili",
7454834,
"poz-tim",
}
m["svk"] = {
"Slovakian Sign Language",
7541557,
"sgn",
}
m["svm"] = {
"Slavomolisano",
36254,
"zls",
"Latn",
ancestors = "sh",
}
m["svs"] = {
"Savosavo",
3130296,
"qfa-dis", -- Papuan; isolate in Glottolog; in the tentative Central Solomons family by Ross (2005) and Pedrós
-- (2015)
"Latn",
}
m["svx"] = {
"Skalvian",
3486125,
"bat-wes",
"Latn",
}
m["swb"] = {
"Maore Comorian",
34075,
"bnt-com",
"Latn",
sort_key = "bnt-com-sortkey",
}
m["swf"] = {
"Sere",
7453056,
"nic-ser",
"Latn",
}
m["swg"] = {
"Swabian",
327274,
"gmw-hgm",
"Latn",
ancestors = "gsw",
}
m["swi"] = {
"สุ่ย",
3112388,
"qfa-kms",
"Latn, Shui, Hani",
sort_key = {Hani = "Hani-sortkey"},
}
m["swj"] = {
"Sira",
36599,
"bnt-sir",
"Latn",
}
m["swl"] = {
"Swedish Sign Language",
36558,
"sgn",
}
m["swm"] = {
"Samosa",
7410037,
"ngf-nwh",
"Latn",
}
m["swn"] = {
"Sokna",
2988323,
"ber",
}
m["swo"] = {
"Shanenawa",
61974839,
"sai-pan",
"Latn",
}
m["swp"] = {
"Suau",
3502368,
"poz-ocw",
}
m["swq"] = {
"Sharwa",
56791,
"cdc-cbm",
"Latn",
}
m["swr"] = {
"Saweru",
3474649,
"paa-yaw",
"Latn",
}
m["sws"] = {
"Seluwasan",
7448845,
"poz-cet",
}
m["swt"] = {
"Sawila",
7428639,
"paa-tap",
"Latn",
}
m["swu"] = {
"Suwawa",
7650588,
"phi",
}
m["sww"] = {
"Sowa",
7571843,
"poz-vnn",
"Latn",
}
m["swx"] = {
"Suruahá",
3114402,
"auf",
}
m["swy"] = {
"Sarua",
56261,
"cdc-est",
"Latn",
}
m["sxb"] = {
"Suba",
33916,
"bnt-lok",
"Latn",
}
m["sxc"] = {
"Sicanian",
36335,
"qfa-unc", -- extinct, lack of data; only names deciphered
"Polyt",
}
m["sxe"] = {
"Sighu",
36431,
"bnt-kel",
"Latn",
}
m["sxg"] = {
"Shixing",
56337,
"sit-nax",
"Latn",
}
m["sxk"] = {
"Southern Kalapuya",
3192122,
"nai-klp",
}
m["sxl"] = {
"Selonian",
36491,
"bat-eas",
"Latn",
}
m["sxm"] = {
"ซำเร",
6583615,
"mkh-pea",
}
m["sxn"] = {
"Sangir",
25714758,
"phi",
"Latn",
}
m["sxo"] = {
"Sorothaptic",
2762254,
}
m["sxr"] = {
"Saaroa",
716599,
"map",
"Latn",
}
m["sxs"] = {
"Sasaru",
3913384,
"alv-yek",
"Latn",
}
-- "sxu" "Upper Saxon" IS SUBSUMED INTO "gmw-ecg" "East Central German"
m["sxw"] = {
"Saxwe Gbe",
7428892,
"alv-pph",
"Latn",
}
m["sya"] = {
"Siang",
3482903,
}
m["syb"] = {
"Central Subanen",
12953893,
"phi",
"Latn",
}
m["syc"] = {
"ซีรีแอกคลาสสิก",
33538,
"sem-are",
"Syrc",
strip_diacritics = {remove_diacritics = c.macron .. c.diaer .. c.macronbelow .. u(0x0730) .. "-" .. u(0x0748)},
}
m["syi"] = {
"Seki",
36547,
"bnt-kel",
"Latn",
}
m["syk"] = {
"Sukur",
56292,
"cdc-cbm",
"Latn",
}
m["syl"] = {
"สิเลฏ",
2044560,
"inc-bas",
"Sylo, Beng",
ancestors = "inc-obn",
translit = "syl-translit",
}
m["sym"] = {
"Maya Samo",
10950421,
"dmn-sam",
"Latn",
}
m["syn"] = {
"Senaya",
33914,
"sem-nna",
}
m["syo"] = {
"Suoy",
7641864,
"mkh-pea",
}
m["sys"] = {
"Sinyar",
56840,
"csu",
"Latn",
}
m["syw"] = {
"Kagate",
12952538,
"sit-kyk",
"Deva",
translit = {
Deva = "Deva-translit",
},
}
m["syx"] = {
"Osamayi",
7408415,
"bnt-kel",
"Latn",
}
m["syy"] = {
"Al-Sayyid Bedouin Sign Language",
2915457,
"sgn",
}
m["sza"] = {
"Semelai",
3111827,
"mkh-asl",
"Latn",
}
m["szb"] = {
"Ngalum",
11732516,
"ngf-okk",
"Latn",
}
m["szc"] = {
"Semaq Beri",
7449119,
"mkh-asl",
}
m["szd"] = {
"Seru",
7455488,
"poz-bnn",
"Latn",
}
m["sze"] = {
"Seze",
373683,
"omv-mao",
"Latn",
}
m["szg"] = {
"Sengele",
7450555,
"bnt-mon",
"Latn",
}
m["szl"] = {
"ไซลีเซีย",
30319,
"zlw-lch",
"Latn",
ancestors = "zlw-opl",
}
m["szn"] = {
"Sula",
3503403,
"poz-cma",
"Latn",
}
m["szp"] = {
"Suabo",
7630429,
"ngf-sbh",
"Latn",
}
m["szv"] = {
"Isubu",
35431,
"bnt-saw",
"Latn",
}
m["szw"] = {
"Sawai",
3447258,
"poz-hce",
"Latn",
}
m["szy"] = {
"ซากีซายา",
718269,
"map",
"Latn",
}
return require("Module:languages").finalizeData(m, "language")
6701cu074x8y4hxqtbxjyuvwt3jyy0y
5729125
5729119
2026-07-20T02:32:09Z
Octahedron80
267
5729125
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["saa"] = {
"Saba",
3914885,
"cdc-est",
"Latn",
}
m["sab"] = {
"Buglere",
3368506,
"cba",
"Latn",
}
m["sac"] = {
"Fox",
12714767,
"alg-sfk",
"Latn",
}
m["sad"] = {
"Sandawe",
34016,
"qfa-iso",
"Latn",
}
m["sae"] = {
"Sabanê",
3460478,
"sai-nmk",
"Latn",
}
m["saf"] = {
"Safaliba",
36432,
"nic-mre",
"Latn",
}
m["sah"] = {
"ซาคา",
34299,
"trk-nsb",
"Cyrl",
translit = "sah-translit",
override_translit = true,
}
m["saj"] = {
"Sahu",
7399757,
"paa-nha",
"Latn",
}
m["sak"] = {
"Sake",
36425,
"bnt-kel",
"Latn",
}
m["sam"] = {
"Samaritan Aramaic",
56612,
"sem-arw",
"Samr",
translit = "Samr-translit",
-- Samr strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["sao"] = {
"Sause",
4409155,
"paa-tkw",
"Latn",
}
m["saq"] = {
"Samburu",
56536,
"sdv-lma",
}
m["sar"] = {
"Saraveca",
3450556,
"awd",
"Latn",
}
m["sas"] = {
"Sasak",
1294047,
"poz-bss",
"Latn, Bali, Java",
}
m["sat"] = {
"สันถาลี",
33965,
"mun",
"Olck",
translit = "Olck-translit",
override_translit = true,
}
m["sau"] = {
"Saleman",
7404262,
"poz-cet",
}
m["sav"] = {
"Saafi-Saafi",
36308,
"alv-cng",
"Arab, Latn",
}
m["saw"] = {
"Sawi",
677064,
"ngf-gaw",
"Latn",
}
m["sax"] = {
"Sa",
3460352,
"poz-vnn",
"Latn",
}
m["say"] = {
"Saya",
3914431,
"cdc-wst",
"Latn",
}
m["saz"] = {
"Saurashtra",
13292,
"inc-wes",
"Saur, Latn, Taml, Deva",
translit = {
Taml = "Taml-translit",
Deva = "Deva-translit",
},
ancestors = "inc-ogu",
}
m["sba"] = {
"Ngambay",
2372207,
"csu-sar",
"Latn",
}
m["sbb"] = {
"Simbo",
3484101,
"poz-ocw",
}
m["sbc"] = {
"Gele'",
3194847,
"poz-aay",
"Latn",
}
m["sbd"] = {
"Southern Samo",
33122730,
"dmn-sam",
"Latn",
}
m["sbe"] = {
"Saliba (New Guinea)",
3469737,
"poz-ocw",
}
m["sbf"] = {
"Shabo",
36342,
"ssa",
"Latn",
}
m["sbg"] = {
"Seget",
7446237,
"paa-wbh",
"Latn",
}
m["sbh"] = {
"Sori-Harengan",
36515,
"poz-aay",
"Latn",
}
m["sbi"] = {
"Seti",
7456682,
"paa-tor",
"Latn",
}
m["sbj"] = {
"Surbakhal",
759995,
}
m["sbk"] = {
"Safwa",
4121160,
"bnt-mby",
"Latn",
}
m["sbl"] = {
"Botolan Sambal",
4095195,
"phi",
"Latn",
}
m["sbm"] = {
"Sagala",
11732610,
"bnt-ruv",
"Latn",
}
m["sbn"] = {
"Sindhi Bhil",
25559289,
"inc-snd",
"Arab, Deva, Sind, Guru",
translit = {
Deva = "Deva-translit",
Sind = "Sind-translit",
Guru = "Guru-translit",
},
ancestors = "sd",
}
m["sbo"] = {
"Sabüm",
7396535,
"mkh-asl",
}
m["sbp"] = {
"Sangu (Tanzania)",
7418149,
"bnt-bki",
"Latn",
}
m["sbq"] = {
"Sileibi",
7514337,
"ngf-nso",
"Latn",
}
m["sbr"] = {
"Sembakung Murut",
7449148,
"poz-san",
}
m["sbs"] = {
"Subiya",
6442073,
"bnt-bot",
"Latn",
}
m["sbt"] = {
"Kimki",
6410160,
"paa-pau",
}
m["sbu"] = {
"Stod Bhoti",
15622700,
"sit-las",
}
m["sbv"] = {
"Sabine",
65455885,
"itc-sbl",
"Latn",
display_text = s["itc-Latn-displaytext"],
strip_diacritics = s["itc-Latn-stripdiacritics"],
sort_key = s["itc-Latn-sortkey"],
}
m["sbw"] = {
"Simba",
36430,
"bnt-tso",
"Latn",
}
m["sbx"] = {
"Seberuang",
12473470,
"poz-mly",
}
m["sby"] = {
"Soli",
7557754,
"bnt-bot",
"Latn",
}
m["sbz"] = {
"Sara Kaba",
25559318,
"csu-kab",
"Latn",
}
m["scb"] = {
"Chut",
2967709,
"mkh-vie",
"Latn",
}
m["sce"] = {
"ตงเซียง",
32947,
"xgn-shr",
"Arab, Latn",
}
m["scf"] = {
"San Miguel Creole French",
12953094,
"crp",
"Latn",
ancestors = "gcf",
sort_key = s["roa-oil-sortkey"],
}
m["scg"] = {
"Sanggau",
12473466,
"day",
}
m["sch"] = {
"Sakachep",
37054,
"tbq-kuk",
}
m["sci"] = {
"Sri Lankan Creole Malay",
1089151,
"crp",
"Latn",
ancestors = "ms",
}
m["sck"] = {
"Sadri",
765922,
"inc-bih",
"Deva, Kthi",
translit = {
Deva = "Deva-translit",
Kthi = "Kthi-translit",
},
}
m["scl"] = {
"Shina",
1353320,
"inc-shn",
"ur-Arab, Deva",
translit = {
Deva = "Deva-translit",
},
}
m["scn"] = {
"ซิซิลี",
33973,
"roa-itr",
"Latn",
}
m["sco"] = {
"สกอต",
14549,
"gmw-ang",
"Latn",
ancestors = "gmw-msc",
}
m["scp"] = {
"Yolmo",
22662107,
"sit-kyk",
"Deva",
translit = {
Deva = "Deva-translit",
},
}
m["scq"] = {
"สะโอจ",
6583617,
"mkh-pea",
}
m["scs"] = {
"North Slavey",
20628,
"den",
"Latn",
}
m["scu"] = {
"Shumcho",
22077739,
"sit-kin",
}
m["scv"] = {
"Sheni",
11015820,
"nic-jer",
"Latn",
ancestors = "zir",
}
m["scw"] = {
"Sha",
3438816,
"cdc-wst",
"Latn",
}
m["scx"] = {
"Sicel",
36667,
"itc",
"Polyt",
-- Polyt translit, display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["scz"] = {
"Shetland",
3069598,
"qfa-mix",
"Latn",
ancestors = "nrn, gmw-msc",
standard_chars = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZzØøÖüÜü0123456789" .. c.punc,
}
m["sda"] = {
"Toraja-Sa'dan",
36673,
"poz-ssw",
"Latn",
}
m["sdb"] = {
"Shabak",
3289596,
"ira-zgr",
ancestors = "hac",
}
m["sdc"] = {
"ซัสซารี",
845441,
"roa-itr",
"Latn",
}
m["sde"] = {
"Surubu",
3913336,
"nic-kau",
"Latn",
}
m["sdf"] = {
"Sarli",
7424256,
"ira-zgr",
ancestors = "hac",
}
m["sdg"] = {
"Savi",
3474654,
"inc-dng",
}
m["sdh"] = {
"Southern Kurdish",
1496597,
"ku",
"ku-Arab",
translit = "sdh-translit",
strip_diacritics = {remove_diacritics = c.kasra .. c.sukun},
}
m["sdj"] = {
"Suundi",
7650407,
"bnt-kng",
"Latn",
}
m["sdk"] = {
"Sos Kundi",
7563811,
"paa-ndu",
"Latn",
}
m["sdl"] = {
"Saudi Arabian Sign Language",
3504160,
"sgn",
}
m["sdm"] = {
"Semandang",
7449012,
"day",
}
m["sdn"] = {
"Gallurese",
612220,
"roa-itr",
"Latn",
ancestors = "co",
}
m["sdo"] = {
"Bukar-Sadung Bidayuh",
2927799,
"day",
"Latn",
}
m["sdp"] = {
"Sherdukpen",
7494785,
"sit-khm",
}
m["sdr"] = {
"Oraon Sadri",
12953860,
"inc-bih",
}
m["sds"] = {
"เบอร์เบอร์แบบตูนีเซีย",
5329732,
"ber",
}
m["sdu"] = {
"Sarudu",
7424700,
"poz-cet",
}
m["sdx"] = {
"Sibu Melanau",
18642842,
"poz-bnn",
}
m["sea"] = {
"เซอไม",
3135426,
"mkh-asl",
"Latn",
}
-- seb is a duplicate code of spp
m["sec"] = {
"Sechelt",
7442898,
"sal",
"Latn",
}
m["sed"] = {
"Sedang",
56448,
"mkh-nbn",
"Latn",
}
m["see"] = {
"Seneca",
1185133,
"iro-nor",
"Latn",
}
m["sef"] = {
"Cebaara Senoufo",
10975121,
"alv-snr",
"Latn",
}
m["seg"] = {
"Segeju",
17584599,
"bnt-mij",
"Latn",
}
m["seh"] = {
"Sena",
2964008,
"bnt-sna",
"Latn",
}
m["sei"] = {
"Seri",
36583,
"qfa-iso",
"Latn",
}
m["sej"] = {
"Sene",
7450252,
"ngf-huo",
"Latn",
}
m["sek"] = {
"Sekani",
28562,
"ath-nor",
"Latn",
}
m["sen"] = {
"Nanerigé Sénoufo",
36002,
"alv-sma",
}
m["seo"] = {
"Suarmin",
7630513,
"qfa-dis", -- Papuan; isolate or unclassified in Glottolog; Sepik language in Foley (2018)
"Latn",
}
m["sep"] = {
"Sìcìté Sénoufo",
56787,
"alv-sma",
}
m["seq"] = {
"Senara Sénoufo",
35210,
"alv-snr",
}
m["ser"] = {
"Serrano",
3479942,
"azc-tak",
"Latn",
}
m["ses"] = {
"Koyraboro Senni",
35655,
"son",
"Latn",
}
m["set"] = {
"Sentani",
3441672,
"paa-sen",
"Latn",
}
m["seu"] = {
"Serui-Laut",
7455503,
"poz-hce",
"Latn",
}
m["sev"] = {
"Nyarafolo Senoufo",
36306,
"alv-snr",
}
m["sew"] = {
"Sewa Bay",
7458126,
"poz-ocw",
}
m["sey"] = {
"Secoya",
3477218,
"sai-tuc",
"Latn",
}
m["sez"] = {
"Senthang Chin",
7451223,
"tbq-kuk",
}
m["sfb"] = {
"French Belgian Sign Language",
3217332,
"sgn",
}
m["sfe"] = {
"Eastern Subanun",
63311321,
"phi",
"Latn",
}
m["sfm"] = {
"Small Flowery Miao",
7542773,
"hmn",
}
m["sfs"] = {
"South African Sign Language",
3322093,
"sgn",
}
m["sfw"] = {
"Sehwi",
36593,
"alv-ctn",
"Latn",
}
m["sga"] = {
"ไอริชเก่า",
35308,
"cel-gae",
"Latn, Ogam",
strip_diacritics = {remove_diacritics = c.dotabove .. c.diaer .. "·"},
sort_key = "sga-sortkey",
standard_chars = "AaÁáBbCcDdEeÉéFfGgHhIiÍíLlMmNnOoÓóPpRrSsTtUuÚú0123456789ᚁᚂᚃᚄᚅᚆᚇᚈᚉᚊᚋᚌᚍᚎᚏᚐᚑᚒᚓᚔ" .. c.punc,
}
m["sgb"] = {
"Mag-Anchi Ayta",
4356243,
"phi",
"Latn",
}
m["sgc"] = {
"Kipsigis",
56339,
"sdv-nma",
}
m["sgd"] = {
"ซูรีเกาโนน",
34140,
"phi",
"Latn",
}
m["sge"] = {
"Segai",
7446180,
}
m["sgg"] = {
"Swiss-German Sign Language",
35150,
"sgn",
}
m["sgh"] = {
"Shughni",
34053,
"ira-shr",
"Latn, Cyrl",
translit = "sgh-translit",
override_translit = true,
}
m["sgi"] = {
"Suga",
36475,
"nic-mmb",
"Latn",
}
m["sgk"] = {
"Sangkong",
2945610,
"tbq-bis",
}
m["sgm"] = {
"Singa",
7522797,
"bnt-lok",
"Latn",
}
m["sgp"] = {
"Singpho",
7524158,
"sit-jnp",
"Latn",
}
m["sgr"] = {
"Sangisari",
3394363,
"ira-kms",
"Arab",
}
m["sgs"] = {
"Samogitian",
213434,
"bat-eas",
"Latn",
wikimedia_codes = "bat-smg",
ancestors = "olt",
display_text = "lt-common",
strip_diacritics = "lt-common",
sort_key = "lt-common",
}
m["sgt"] = {
"Brokpake",
56603,
"sit-tib",
"Tibt",
override_translit = true,
-- Tibt translit, display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["sgu"] = {
"Salas",
7403694,
"poz-cma",
}
m["sgw"] = {
"Sebat Bet Gurage",
2707343,
"sem-eth",
"Ethi",
}
m["sgx"] = {
"Sierra Leone Sign Language",
7511448,
"sgn",
}
m["sgy"] = {
"Sanglechi",
3472220,
"ira-sgi",
}
m["sgz"] = {
"Sursurunga",
36511,
"poz-ocw",
"Latn",
}
m["sha"] = {
"Shall-Zwall",
3915355,
"nic-beo",
}
m["shb"] = {
"Ninam",
3436586,
"sai-ynm",
"Latn",
}
m["shc"] = {
"Sonde",
7560881,
"bnt-pen",
"Latn",
}
m["shd"] = {
"Kundal Shahi",
6444265,
"inc-shn",
"Arab",
}
m["she"] = {
"Sheko",
3183355,
"omv-diz",
}
m["shg"] = {
"Shua",
3501092,
"khi-kal",
"Latn",
}
m["shh"] = {
"Shoshone",
33811,
"azc-num",
"Latn",
}
m["shi"] = {
"Tashelhit",
34152,
"ber",
"Latn, Arab, Tfng, Hebr",
ancestors = "shi-med",
translit = {
Tfng = "Tfng-translit",
},
strip_diacritics = {
Arab = "ar-stripdiacritics",
},
-- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["shj"] = {
"Shatt",
56344,
"sdv-daj",
}
m["shk"] = {
"Shilluk",
36486,
"sdv-lon",
"Latn",
}
m["shl"] = {
"Shendu",
22074616,
"tbq-kuk",
}
m["shm"] = {
"Shahrudi",
7462280,
"xme-ttc",
"fa-Arab, Latn",
ancestors = "xme-ttc-cen",
}
m["shn"] = {
"ไทใหญ่",
56482,
"tai-swe",
"Mymr",
translit = "shn-translit",
sort_key = {
from = {"[ၢႃ]", "ဵ", "ႅ", "ႇ", "ႈ", "း", "ႉ", "ႊ"},
to = {"ာ", "ေ", "ႄ", "႒", "႓", "႔", "႕", "႖"}
},
}
m["sho"] = {
"Shanga",
3913931,
"dmn-bbu",
"Latn",
}
m["shp"] = {
"Shipibo-Conibo",
2671988,
"sai-pan",
"Latn",
}
m["shq"] = {
"Sala",
10961665,
"bnt-bot",
"Latn",
}
m["shr"] = {
"Shi",
3481999,
"bnt-shh",
"Latn",
}
m["shs"] = {
"Shuswap",
3482685,
"sal",
"Latn",
}
m["sht"] = {
"Shasta",
56396,
"nai-shs",
"Latn",
}
m["shu"] = {
"Chadian Arabic",
56497,
"sem-arb",
"Arab",
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["shv"] = {
"Shehri",
33445,
"sem-sar",
"Arab, Latn",
}
m["shw"] = {
"Shwai",
36527,
"alv-hei",
}
m["shx"] = {
"She",
2605689,
"hmn",
}
m["shy"] = {
"Tachawit",
33274,
"ber",
"Tfng, Arab, Latn",
translit = "Tfng-translit",
}
m["shz"] = {
"Syenara Senoufo",
36316,
"alv-snr",
}
m["sia"] = {
"Akkala Sami",
35241,
"smi",
"Cyrl, Latn",
translit = "sia-translit",
display_text = {
from = {"'"},
to = {"ˈ"}
},
strip_diacritics = {remove_diacritics = "'ˈ"},
}
m["sib"] = {
"Sebop",
7442799,
"poz-swa",
"Latn",
}
m["sid"] = {
"ซีดามา",
33786,
"cus-hec",
"Latn, Ethi",
}
m["sie"] = {
"Simaa",
7517329,
"bnt-kav",
"Latn",
}
m["sif"] = {
"Siamou",
36252,
}
m["sig"] = {
"Paasaal",
36426,
"nic-sis",
"Latn",
}
m["sih"] = {
"Sîshëë",
8072753,
"poz-cln",
"Latn",
}
m["sii"] = {
"Shom Peng",
1039346,
"aav",
}
m["sij"] = {
"Numbami",
3346277,
"poz-ocw",
"Latn",
}
m["sik"] = {
"Sikiana",
3443734,
"sai-prk",
"Latn",
}
m["sil"] = {
"Tumulung Sisaala",
25383006,
"nic-sis",
"Latn",
}
m["sim"] = {
"Seim",
7446815,
"paa-spk",
"Latn",
}
m["sip"] = {
"สิกขิม",
35285,
"sit-tib",
"Tibt",
ancestors = "xct",
override_translit = true,
-- Tibt translit, display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["siq"] = {
"Sonia",
7561770,
"ngf-bos",
"Latn",
}
m["sir"] = {
"Siri",
3438729,
"cdc-wst",
"Latn",
}
m["sis"] = {
"Siuslaw",
2315424,
}
m["siu"] = {
"Sinagen",
7521655,
"paa-tor",
"Latn",
}
m["siv"] = {
"Sumariup",
7636966,
"paa-spk",
"Latn",
}
m["siw"] = {
"Siwai",
7532519,
"paa-sbo",
"Latn",
}
m["six"] = {
"Sumau",
7637021,
"ngf-pek",
"Latn",
}
m["siy"] = {
"Sivandi",
13269,
"xme",
"fa-Arab, Latn",
ancestors = "xme-mid",
}
m["siz"] = {
"Siwi",
36814,
"ber",
"Tfng, Arab, Latn",
}
m["sja"] = {
"Epena",
3055682,
"sai-chc",
"Latn",
}
m["sjb"] = {
"Sajau Basap",
4684353,
"poz-bnn",
}
m["sjc"] = {
"Shaojiang Min",
3431451,
"zhx-inm",
"Hants",
generate_forms = "zh-generateforms",
sort_key = "Hani-sortkey",
}
m["sjd"] = {
"ซามีแบบกิลดิน",
33656,
"smi",
"Cyrl",
translit = "sjd-translit",
display_text = {
from = {"'"},
to = {"ˈ"}
},
strip_diacritics = {remove_diacritics = "'ˈ"},
}
m["sje"] = {
"ซามีแบบปีเต",
56314,
"smi",
"Latn",
display_text = {
from = {"'"},
to = {"ˈ"}
},
strip_diacritics = {remove_diacritics = c.macron .. "'ˈ"},
sort_key = "sje-sortkey",
}
m["sjg"] = {
"Assangori",
3502255,
"sdv-tmn",
}
m["sjk"] = {
"Kemi Sami",
35871,
"smi",
"Latn",
display_text = {
from = {"'"},
to = {"ˈ"}
},
strip_diacritics = {remove_diacritics = "'ˈ"},
}
m["sjl"] = {
"Miji",
6845470,
"sit-hrs",
}
m["sjm"] = {
"Mapun",
3287253,
"poz-sbj",
"Latn",
}
m["sjn"] = {
"ซินดาริน",
56437,
"art",
"Latn, Teng",
type = "appendix-constructed",
}
m["sjo"] = {
"Xibe",
13223,
"tuw-jrc",
"sjo-Mong",
ancestors = "mnc",
}
m["sjp"] = {
"Surjapuri",
7645351,
"inc-krd",
"Deva, as-Beng, Kthi",
translit = {
Deva = "Deva-translit",
["as-Beng"] = "Beng-translit",
Kthi = "Kthi-translit",
},
}
m["sjr"] = {
"Siar-Lak",
3482907,
"poz-ocw",
}
m["sjs"] = {
"Senhaja de Srair",
56744,
"ber",
"Latn, Tfng, Arab",
strip_diacritics = {
Arab = "ar-stripdiacritics",
},
translit = {
Tfng = "Tfng-translit",
}
}
m["sjt"] = {
"Ter Sami",
36656,
"smi",
"Cyrl, Latn",
display_text = {
from = {"'"},
to = {"ˈ"}
},
strip_diacritics = {remove_diacritics = "'ˈ"},
translit = "sjt-translit",
}
m["sju"] = {
"Ume Sami",
56415,
"smi",
"Latn",
strip_diacritics = {remove_diacritics = c.macron .. "'ˈ"},
display_text = {
from = {"'"},
to = {"ˈ"}
},
sort_key = "sju-sortkey",
}
m["sjw"] = {
"Shawnee",
2669206,
"alg",
"Latn",
}
m["ska"] = {
"Skagit",
25559652,
"sal",
"Latn",
}
m["skb"] = {
"แสก",
36437,
"tai-nor",
"Thai",
--sort_key = "Thai-sortkey",
}
m["skc"] = {
"Ma Manda",
6720783,
"ngf-fin",
"Latn",
}
m["skd"] = {
"Southern Sierra Miwok",
3492334,
"nai-utn",
"Latn",
}
m["ske"] = {
"Ske",
7534244,
"poz-vnn",
"Latn",
}
m["skf"] = {
"Mekéns",
3304806,
"tup",
"Latn",
}
m["skh"] = {
"Sikule",
3121081,
"poz-nws",
}
m["ski"] = {
"Sika",
33960,
"poz-cet",
"Latn",
}
m["skj"] = { -- compare 'ths'
"Seke",
30226846,
"sit-tam",
}
m["skk"] = {
"Sok",
12953887,
"mkh-ban",
}
m["skm"] = {
"Sakam",
6448517,
"ngf-fin",
"Latn",
}
m["skn"] = {
"Kolibugan Subanon",
18755617,
"phi",
"Latn",
}
m["sko"] = {
"Seko Tengah",
15613270,
"poz",
}
m["skp"] = {
"Sekapan",
7447132,
"poz-bnn",
}
m["skq"] = {
"Sininkere",
3914896,
"dmn-man",
"Latn",
}
m["skr"] = {
"Saraiki",
33902,
"inc-pan",
"pa-Arab, Mult, Deva",
ancestors = "lah",
strip_diacritics = {remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.nunghunna},
translit = {
["pa-Arab"] = "pa-Arab-translit",
Deva = "Deva-translit",
Mult = "Mult-translit",
},
}
m["sks"] = {
"ไมยา",
12952760,
"ngf-kau",
"Latn",
}
m["skt"] = {
"Sakata",
36691,
"bnt-bnm",
"Latn",
}
m["sku"] = {
"Sakao",
3298421,
"poz-vnn",
"Latn",
}
m["skv"] = {
"Skou",
3915200,
"paa-msk",
"Latn",
}
m["skw"] = {
"Skepi Creole Dutch",
2522153,
"crp",
"Latn",
ancestors = "nl",
}
m["skx"] = {
"Seko Padang",
15613282,
"poz-ssw",
"Latn",
}
m["sky"] = {
"ซีกายานา",
7439242,
"poz-pnp",
"Latn",
}
m["skz"] = {
"Sekar",
7447136,
"poz-cet",
}
m["slc"] = {
"Saliba (Colombia)",
3441097,
nil,
"Latn",
}
m["sld"] = {
"Sisaala",
11020264,
"nic-sis",
"Latn",
}
m["sle"] = {
"Sholaga",
7500203,
"dra-kan",
"Knda",
-- Knda translit in [[Module:scripts/data]]
}
m["slf"] = {
"Swiss-Italian Sign Language",
12953479,
"sgn",
}
m["slg"] = {
"Selungai Murut",
7448844,
"poz-san",
}
m["slh"] = {
"Southern Puget Sound Salish",
12642471,
"sal",
"Latn",
}
-- "sli" "Silesian German" IS SUBSUMED INTO "gmw-ecg" "East Central German"
m["slj"] = {
"Salumá",
7406296,
"sai-prk",
"Latn",
}
m["sll"] = {
"Salt-Yui",
7405785,
"ngf-chw",
"Latn",
}
m["slm"] = {
"ซามาแบบปางูตารัน",
3362086,
"poz-sbj",
"Latn",
}
m["sln"] = {
"Salinan",
1568938,
"qfa-iso",
"Latn",
}
m["slp"] = {
"Lamaholot",
6480777,
"poz-cet",
"Latn",
}
m["slr"] = {
"ซาลาร์",
33963,
"trk-ogz",
"Arab, Latn",
ancestors = "trk-eog",
}
m["sls"] = {
"Singapore Sign Language",
7512563,
"sgn",
}
m["slt"] = {
"Sila",
7514021,
"tbq-sil",
}
m["slu"] = {
"Selaru",
7447500,
"poz-cet",
"Latn",
}
m["slw"] = {
"Sialum",
7506694,
"ngf-huo",
"Latn",
}
m["slx"] = {
"Salampasu",
7403607,
"bnt-lun",
"Latn",
}
m["sly"] = {
"Selayar",
7447520,
"poz-ssw",
}
m["slz"] = {
"Ma'ya",
2291492,
"poz-hce",
"Latn",
}
m["sma"] = {
"ซามีใต้",
13293,
"smi",
"Latn",
display_text = {
from = {"'"},
to = {"ˈ"}
},
strip_diacritics = {remove_diacritics = "'ˈ"},
sort_key = "sma-sortkey",
}
m["smb"] = {
"Simbari",
7517427,
"ngf-ang",
"Latn",
}
m["smc"] = {
"Som",
7559081,
"ngf-fin",
"Latn",
}
m["smd"] = {
"Sama",
6407456,
"bnt-kmb",
"Latn",
}
m["smf"] = {
"Auwe",
3502072,
"paa-brd",
"Latn",
ancestors = "dnd",
}
m["smg"] = {
"Simbali",
56692,
"paa-bng",
"Latn",
}
m["smh"] = {
"Samei",
7409269,
"tbq-axi",
}
m["smj"] = {
"ซามีแบบลูเล",
56322,
"smi",
"Latn",
display_text = {
from = {"'"},
to = {"ˈ"}
},
strip_diacritics = {remove_diacritics = c.macron .. "'ˈ"},
sort_key = "smj-sortkey",
}
m["smk"] = {
"โบลีเนา",
2669235,
"phi",
"Latn, Tglg",
}
m["sml"] = {
"ซามาตอนกลาง",
3470593,
"poz-sbj",
"Latn",
}
m["smm"] = {
"Musasa",
6940122,
"inc-eas",
ancestors = "bh",
}
m["smn"] = {
"ซามีแบบอีนารี",
33462,
"smi",
"Latn",
display_text = {
from = {"'"},
to = {"ˈ"}
},
strip_diacritics = {remove_diacritics = c.dotbelow .. "'ˈ"},
sort_key = "smn-sortkey",
}
m["smp"] = {
"Samaritan Hebrew",
56502,
"sem-can",
"Samr",
translit = "Samr-translit",
-- Samr strip_diacritics, sort_key in [[Module:scripts/data]]
ancestors = "hbo",
}
m["smq"] = {
"Samo",
7409884,
"ngf-est",
"Latn",
}
m["smr"] = {
"Simeulue",
2992833,
"poz-nws",
"Latn",
}
m["sms"] = {
"Skolt Sami",
13271,
"smi",
"Latn",
display_text = {
from = {"'"},
to = {"ˈ"}
},
strip_diacritics = {remove_diacritics = c.dotbelow .. "'ˈ"},
sort_key = "sms-sortkey",
}
m["smt"] = {
"Simte",
7521268,
"tbq-kuk",
}
m["smu"] = {
"สมราย",
6583612,
"mkh-pea",
}
m["smv"] = {
"Samvedi",
6345632,
"inc-sou",
}
m["smw"] = {
"Sumbawa",
3182585,
"poz-bss",
"Latn",
}
m["smx"] = {
"Samba",
11120157,
"bnt-pen",
"Latn",
}
m["smy"] = {
"Semnani",
14531212,
"xme",
"fa-Arab, Latn",
}
m["smz"] = {
"Simeku",
7517534,
"paa-sbo",
"Latn",
}
m["snb"] = {
"Sebuyau",
7442836,
"poz-mly",
"Latn",
}
m["snc"] = {
"Sinaugoro",
4170719,
"poz-ocw",
"Latn",
}
m["sne"] = {
"Bau Bidayuh",
2891938,
"day",
"Latn",
}
m["snf"] = {
"Noon",
36304,
"alv-cng",
"Latn",
}
m["sng"] = {
"Sanga (Congo)",
3438316,
"bnt-lub",
"Latn",
}
m["sni"] = {
"Sensi",
7451029,
"sai-pan",
"Latn",
}
m["snj"] = {
"Riverain Sango",
25559751,
"crp",
"Latn",
ancestors = "ngb",
}
m["snk"] = {
"Soninke",
36660,
"dmn-snb",
"Latn",
}
m["snl"] = {
"Sangil",
3472206,
"phi",
"Latn",
}
m["snm"] = {
"Southern Ma'di",
15637273,
"csu-mma",
}
m["snn"] = {
"Siona",
3485116,
"sai-tuc",
"Latn",
}
m["sno"] = {
"Snohomish",
25559662,
"sal",
"Latn",
}
m["snp"] = {
"Siane",
7506812,
"ngf-kag",
"Latn",
}
m["snq"] = {
"Sangu (Gabon)",
36609,
"bnt-sir",
"Latn",
}
m["snr"] = {
"Sihan",
7513400,
"ngf-gum",
"Latn",
}
m["sns"] = {
"Nahavaq",
2160435,
"poz-vnc",
"Latn",
}
m["snu"] = {
"Senggi",
7929052,
"paa-brd",
"Latn",
}
m["snv"] = {
"Sa'ban",
3474891,
"poz-swa",
"Latn",
}
m["snw"] = {
"Selee",
36272,
"alv-ntg",
"Latn",
}
m["snx"] = {
"Sam",
7408387,
"ngf-min",
"Latn",
}
m["sny"] = {
"Saniyo-Hiyewe",
7418302,
"paa-spk",
"Latn",
}
m["snz"] = {
"Kou",
7525035, -- also 4803639
"ngf-eva",
"Latn",
}
m["soa"] = {
"โซ่ง",
7709159,
"tai-swe",
"Tavt, Thai",
--translit = "Tavt-translit",
sort_key = {
from = {"([ꪵꪶꪹꪻꪼ])([ꪀ-ꪯ])", "([เแโใไ])([ก-ฮ])"},
to = {"%2%1", "%2%1"}
},
}
m["sob"] = {
"Sobei",
3121035,
"poz-ocw",
"Latn",
}
m["soc"] = {
"Soko",
7555138,
"bnt-ske",
"Latn",
}
m["sod"] = {
"Songoora",
7561296,
"bnt-lgb",
"Latn",
}
m["soe"] = {
"Songomeno",
5713543,
"bnt-bsh",
"Latn",
}
m["sog"] = {
"Sogdian",
205979,
"ira-sgc",
"Sogd, Mani, Syrc, Sogo",
translit = {
Sogd = "Sogd-translit",
-- Mani translit in [[Module:scripts/data]]
Sogo = "Sogo-translit",
},
}
m["soh"] = {
"Aka (Sudan)",
3450949,
"sdv-eje",
"Latn",
}
m["soi"] = {
"Sonha",
12953890,
"inc-eas",
}
m["sok"] = {
"Sokoro",
3441303,
"cdc-est",
"Latn",
}
m["sol"] = {
"Solos",
3489591,
"poz-ocw",
}
m["soo"] = {
"Nsong",
12953148,
"bnt-bdz",
"Latn",
}
m["sop"] = {
"Songe",
3130911,
"bnt-lbn",
"Latn",
}
m["soq"] = {
"Kanasi",
11732656,
"ngf-dag",
"Latn",
}
m["sor"] = {
"Somrai",
3123566,
"cdc-est",
"Latn",
}
m["sos"] = {
"Seenku",
36274,
"dmn-smg",
}
m["sou"] = {
"ปักษ์ใต้",
56508,
"tai-swe",
"Thai",
--sort_key = "Thai-sortkey",
}
m["sov"] = {
"Sonsorolese",
13281,
"poz-mic",
"Latn",
}
m["sow"] = {
"Sowanda",
7571845,
"paa-brd",
"Latn",
}
m["sox"] = {
"Swo",
36604,
"bnt-mka",
"Latn",
}
m["soy"] = {
"Miyobe",
35913,
"alv-sav",
"Latn",
}
m["soz"] = {
"Temi",
13278,
"bnt-kka",
"Latn",
}
m["spb"] = {
"Sepa (Indonesia)",
18603687,
"poz-cma",
"Latn",
}
m["spc"] = {
"Sapé",
2888158,
nil,
"Latn",
}
m["spd"] = {
"Saep",
7398312,
"ngf-yag",
"Latn",
}
m["spe"] = {
"Sepa (New Guinea)",
7451725,
"poz-ocw",
"Latn",
}
m["spg"] = {
"Sian",
7506806,
"poz-bnn",
}
m["spi"] = {
"Saponi",
3915418,
"paa-lkp",
"Latn",
}
m["spk"] = {
"Sengo",
7450584,
"paa-ndu",
"Latn",
}
m["spl"] = {
"Selepet",
7447917,
"ngf-huo",
"Latn",
}
m["spm"] = {
"Sepen",
4701931,
"paa-ram",
"Latn",
}
m["spn"] = {
"Sanapaná",
3033556,
"sai-mas",
"Latn",
}
m["spo"] = {
"Spokane",
3493704,
"sal",
}
m["spp"] = {
"Supyire",
56284,
"alv-sma",
"Latn",
}
m["spr"] = {
"Saparua",
7420921,
"poz-cma",
"Latn",
}
m["sps"] = {
"Saposa",
3473187,
"poz-ocw",
}
m["spt"] = {
"Spiti Bhoti",
22080879,
"sit-las",
}
m["spu"] = {
"Sapuan",
7421168,
"mkh-ban",
}
m["spv"] = {
"Sambalpuri",
6433240,
"inc-eas",
"Orya",
translit = "or-translit",
ancestors = "or",
}
m["spx"] = {
"South Picene",
36688,
"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["spy"] = {
"Sabaot",
7395896,
"sdv-kln",
}
m["sqa"] = {
"Shama-Sambuga",
3914392,
"nic-kmk",
"Latn",
}
m["sqh"] = {
"Shau",
3913925,
"nic-jer",
"Latn",
}
m["sqk"] = {
"Albanian Sign Language",
4709168,
"sgn",
}
m["sqm"] = {
"Suma",
11008431,
"gba-wes",
}
m["sqn"] = {
"Susquehannock",
3505736,
"iro-nor",
}
m["sqo"] = {
"Sorkhei",
3491964,
"ira-kms",
}
m["sqq"] = {
"Sou",
16979751,
"mkh-ban",
}
m["sqr"] = {
"Siculo-Arabic",
1069489,
"sem-arb",
"Arab",
}
m["sqs"] = {
"Sri Lankan Sign Language",
3915466,
"sgn",
}
m["sqt"] = {
"Soqotri",
13283,
"sem-sar",
"Arab, Latn",
}
m["squ"] = {
"Squamish",
2484579,
"sal",
"Latn",
}
m["sra"] = {
"Saruga",
7424699,
"ngf-han",
"Latn",
}
m["srb"] = {
"Sora",
13284,
"mun",
"Sora, Latn, Orya",
}
m["sre"] = {
"Sara",
33957,
"day",
}
m["srf"] = {
"Nafi",
6958174,
"poz-ocw",
}
m["srg"] = {
"Sulod",
7636489,
"phi",
}
m["srh"] = {
"Sarikoli",
33873,
"ira-shr",
"Latn, ug-Arab, Cyrl",
}
m["sri"] = {
"Siriano",
3485264,
"sai-tuc",
"Latn",
}
m["srk"] = {
"Serudung Murut",
7455497,
"poz-san",
}
m["srl"] = {
"Isirawa",
4203802,
"paa-tkw",
}
m["srm"] = {
"ซารามักกา",
33779,
"crp",
"Latn",
ancestors = "en, pt",
}
m["srn"] = {
"ซรานันโตโง",
33989,
"crp",
"Latn",
ancestors = "en",
}
m["srq"] = {
"Sirionó",
3027953,
"tup-gua",
"Latn",
}
m["srr"] = {
"Serer",
36284,
"alv-fwo",
"Latn",
}
m["srs"] = {
"Tsuut'ina",
20825,
"ath-nor",
"Latn",
}
m["srt"] = {
"Sauri",
7427547,
"paa-egb",
"Latn",
}
m["sru"] = {
"Suruí",
7646993,
"tup",
"Latn",
}
m["srv"] = {
"Waray Sorsogon",
18755610,
"phi",
"Latn",
}
m["srw"] = {
"Serua",
14916905,
"poz-cet",
}
m["srx"] = {
"Sirmauri",
7530505,
"him",
}
m["sry"] = {
"Sera",
7452602,
"poz-ocw",
"Latn",
}
m["srz"] = {
"Shahmirzadi",
12953126,
"ira-msh",
"fa-Arab",
}
m["ssb"] = {
"Southern Sama",
3470594,
"poz-sbj",
"Latn",
}
m["ssc"] = {
"Suba-Simbiti",
7630687,
"bnt-lok",
"Latn",
}
m["ssd"] = {
"Siroi",
10771067,
"ngf-rai",
"Latn",
}
m["sse"] = {
"Balangingi",
2880535,
"poz-sbj",
"Latn",
}
m["ssf"] = {
"Thao",
676492,
"map",
"Latn",
}
m["ssg"] = {
"Seimat",
3182581,
"poz-aay",
"Latn",
}
m["ssh"] = {
"Shihhi Arabic",
56571,
"sem-arb",
"Arab",
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["ssi"] = {
"Sansi",
3309366,
"inc-nwe",
}
m["ssj"] = {
"Sausi",
7427605,
"ngf-eva",
"Latn",
}
m["ssk"] = {
"Sunam",
11002210,
"sit-kin",
}
m["ssl"] = {
"Western Sisaala",
11154776,
"nic-sis",
"Latn",
}
m["ssm"] = {
"Semnam",
7449713,
"mkh-asl",
"Latn",
}
m["sso"] = {
"Sissano",
7530937,
"poz-ocw",
"Latn",
}
m["ssp"] = {
"Spanish Sign Language",
3100814,
"sgn",
}
m["ssq"] = {
"So'a",
7572120,
"poz-cet",
"Latn",
}
m["ssr"] = {
"Swiss-French Sign Language",
12953483,
"sgn",
}
m["sss"] = {
"Sô",
3082037,
"mkh-kat",
}
m["sst"] = {
"Sinasina",
7521813,
"ngf-chw",
"Latn",
}
m["ssu"] = {
"Susuami",
7649752,
"ngf-ang",
"Latn",
}
m["ssv"] = {
"Shark Bay",
7489783,
"poz-vnn",
"Latn",
}
m["ssx"] = {
"Samberigi",
7409020,
"ngf-eng",
"Latn",
}
m["ssy"] = {
"ซาโฮ",
36353,
"cus-eas",
"Latn, Ethi, Arab",
}
m["ssz"] = {
"Sengseng",
7450601,
"poz-ocw",
"Latn",
}
m["stb"] = {
"Northern Subanen",
12953892,
"phi",
"Latn",
}
m["std"] = {
"Sentinelese",
568377,
"qfa-unc", -- presumed Ongan
}
m["ste"] = {
"Liana-Seti",
6539924,
"poz-cma",
}
m["stf"] = {
"Seta",
7456326,
"paa-tor",
"Latn",
}
m["stg"] = {
"Trieng",
22694648,
"mkh-ban",
}
m["sth"] = {
"Shelta",
36705,
"qfa-mix",
"Latn",
ancestors = "ga, en",
}
m["sti"] = {
"Bulo Stieng",
15771431,
"mkh-ban",
"Khmr, Latn",
}
m["stj"] = {
"Matya Samo",
10974879,
"dmn-sam",
"Latn",
}
m["stk"] = {
"Arammba",
3502094,
"paa-yam",
"Latn",
}
m["stm"] = {
"Setaman",
7456333,
"ngf-okk",
"Latn",
}
m["stn"] = {
"Owa",
1324132,
"poz-sls",
"Latn",
}
m["sto"] = {
"Stoney",
3033570,
"sio-dkt",
"Latn",
}
m["stp"] = {
"Southeastern Tepehuan",
12953917,
"azc-pim",
"Latn",
}
m["stq"] = {
"ฟรีเชียแบบซาเทอร์ลันท์",
27154,
"gmw-fri",
"Latn",
}
m["str"] = {
"Saanich",
36444,
"sal",
"Latn",
}
m["sts"] = {
"Shumashti",
33777,
"inc-kun",
"Arab",
}
m["stt"] = {
"Budeh Stieng",
12953891,
"mkh-ban",
}
m["stu"] = {
"Samtao",
25559550,
"mkh-pal",
}
m["stv"] = {
"Silt'e",
33880,
"sem-eth",
"Ethi",
}
m["stw"] = {
"Satawalese",
28477,
"poz-mic",
"Latn",
}
m["sty"] = {
"Siberian Tatar",
4418344,
"trk-kno",
"Cyrl",
}
m["sua"] = {
"Sulka",
7636341,
"qfa-iso", -- Papuan; isolate in Glottolog and Palmer (2018)
"Latn",
}
m["sub"] = {
"Suku",
12953160,
"bnt-yak",
"Latn",
}
m["suc"] = {
"Western Subanon",
16113894,
"phi",
"Latn",
}
m["sue"] = {
"Suena",
7634386,
"paa-bin",
"Latn",
}
m["sug"] = {
"Suganga",
7634706,
"ngf-okk",
"Latn",
}
m["sui"] = {
"Suki",
2089984,
"ngf-gsu",
"Latn",
}
m["suk"] = {
"Sukuma",
2638144,
"bnt-tkm",
"Latn",
}
-- suo (Bouni, Papua New Guinea, called Bouni-Bobe in Glottolog): not yet accepted; in the Sko/Skou family
m["suq"] = {
"Suri",
5364172,
"sdv",
}
m["sur"] = {
"Mwaghavul",
3440486,
"cdc-wst",
"Latn",
}
m["sus"] = {
"Susu",
33990,
"dmn-sya",
"Latn",
}
m["sut"] = {
"Subtiaba",
3915405,
"omq",
"Latn",
}
m["suv"] = {
"Puroik",
56408,
"sit-khb",
"Beng, Deva, Latn",
ancestors = "sit-khp-pro",
}
m["suw"] = {
"Sumbwa",
7637055,
"bnt-glb",
"Latn",
}
m["sux"] = {
"ซูเมอร์",
36790,
"qfa-iso",
"Xsux, Latn",
}
m["suy"] = {
"Suyá",
3505859,
"sai-nje",
"Latn",
}
m["suz"] = {
"Sunwar",
56549,
"sit-kiw",
"Deva, Sunu",
translit = {
Deva = "Deva-translit",
},
}
m["sva"] = {
"Svan",
34067,
"ccs",
"Geor, Cyrl",
translit = {
Geor = "sva-translit",
},
override_translit = true,
}
m["svb"] = {
"Ulau-Suain",
7878769,
"poz-ocw",
"Latn",
}
m["svc"] = {
"Vincentian Creole English",
3501785,
"crp",
"Latn",
ancestors = "en",
}
m["sve"] = {
"Serili",
7454834,
"poz-tim",
}
m["svk"] = {
"Slovakian Sign Language",
7541557,
"sgn",
}
m["svm"] = {
"Slavomolisano",
36254,
"zls",
"Latn",
ancestors = "sh",
}
m["svs"] = {
"Savosavo",
3130296,
"qfa-dis", -- Papuan; isolate in Glottolog; in the tentative Central Solomons family by Ross (2005) and Pedrós
-- (2015)
"Latn",
}
m["svx"] = {
"Skalvian",
3486125,
"bat-wes",
"Latn",
}
m["swb"] = {
"Maore Comorian",
34075,
"bnt-com",
"Latn",
sort_key = "bnt-com-sortkey",
}
m["swf"] = {
"Sere",
7453056,
"nic-ser",
"Latn",
}
m["swg"] = {
"Swabian",
327274,
"gmw-hgm",
"Latn",
ancestors = "gsw",
}
m["swi"] = {
"สุ่ย",
3112388,
"qfa-kms",
"Latn, Shui, Hani",
sort_key = {Hani = "Hani-sortkey"},
}
m["swj"] = {
"Sira",
36599,
"bnt-sir",
"Latn",
}
m["swl"] = {
"Swedish Sign Language",
36558,
"sgn",
}
m["swm"] = {
"Samosa",
7410037,
"ngf-nwh",
"Latn",
}
m["swn"] = {
"Sokna",
2988323,
"ber",
}
m["swo"] = {
"Shanenawa",
61974839,
"sai-pan",
"Latn",
}
m["swp"] = {
"Suau",
3502368,
"poz-ocw",
}
m["swq"] = {
"Sharwa",
56791,
"cdc-cbm",
"Latn",
}
m["swr"] = {
"Saweru",
3474649,
"paa-yaw",
"Latn",
}
m["sws"] = {
"Seluwasan",
7448845,
"poz-cet",
}
m["swt"] = {
"Sawila",
7428639,
"paa-tap",
"Latn",
}
m["swu"] = {
"Suwawa",
7650588,
"phi",
}
m["sww"] = {
"Sowa",
7571843,
"poz-vnn",
"Latn",
}
m["swx"] = {
"Suruahá",
3114402,
"auf",
}
m["swy"] = {
"Sarua",
56261,
"cdc-est",
"Latn",
}
m["sxb"] = {
"Suba",
33916,
"bnt-lok",
"Latn",
}
m["sxc"] = {
"Sicanian",
36335,
"qfa-unc", -- extinct, lack of data; only names deciphered
"Polyt",
}
m["sxe"] = {
"Sighu",
36431,
"bnt-kel",
"Latn",
}
m["sxg"] = {
"Shixing",
56337,
"sit-nax",
"Latn",
}
m["sxk"] = {
"Southern Kalapuya",
3192122,
"nai-klp",
}
m["sxl"] = {
"Selonian",
36491,
"bat-eas",
"Latn",
}
m["sxm"] = {
"ซำเร",
6583615,
"mkh-pea",
}
m["sxn"] = {
"Sangir",
25714758,
"phi",
"Latn",
}
m["sxo"] = {
"Sorothaptic",
2762254,
}
m["sxr"] = {
"Saaroa",
716599,
"map",
"Latn",
}
m["sxs"] = {
"Sasaru",
3913384,
"alv-yek",
"Latn",
}
-- "sxu" "Upper Saxon" IS SUBSUMED INTO "gmw-ecg" "East Central German"
m["sxw"] = {
"Saxwe Gbe",
7428892,
"alv-pph",
"Latn",
}
m["sya"] = {
"Siang",
3482903,
}
m["syb"] = {
"Central Subanen",
12953893,
"phi",
"Latn",
}
m["syc"] = {
"ซีรีแอกคลาสสิก",
33538,
"sem-are",
"Syrc",
strip_diacritics = {remove_diacritics = c.macron .. c.diaer .. c.macronbelow .. u(0x0730) .. "-" .. u(0x0748)},
}
m["syi"] = {
"Seki",
36547,
"bnt-kel",
"Latn",
}
m["syk"] = {
"Sukur",
56292,
"cdc-cbm",
"Latn",
}
m["syl"] = {
"สิเลฏ",
2044560,
"inc-bas",
"Sylo, Beng",
ancestors = "inc-obn",
translit = "syl-translit",
}
m["sym"] = {
"Maya Samo",
10950421,
"dmn-sam",
"Latn",
}
m["syn"] = {
"Senaya",
33914,
"sem-nna",
}
m["syo"] = {
"Suoy",
7641864,
"mkh-pea",
}
m["sys"] = {
"Sinyar",
56840,
"csu",
"Latn",
}
m["syw"] = {
"Kagate",
12952538,
"sit-kyk",
"Deva",
translit = {
Deva = "Deva-translit",
},
}
m["syx"] = {
"Osamayi",
7408415,
"bnt-kel",
"Latn",
}
m["syy"] = {
"Al-Sayyid Bedouin Sign Language",
2915457,
"sgn",
}
m["sza"] = {
"Semelai",
3111827,
"mkh-asl",
"Latn",
}
m["szb"] = {
"Ngalum",
11732516,
"ngf-okk",
"Latn",
}
m["szc"] = {
"Semaq Beri",
7449119,
"mkh-asl",
}
m["szd"] = {
"Seru",
7455488,
"poz-bnn",
"Latn",
}
m["sze"] = {
"Seze",
373683,
"omv-mao",
"Latn",
}
m["szg"] = {
"Sengele",
7450555,
"bnt-mon",
"Latn",
}
m["szl"] = {
"ไซลีเซีย",
30319,
"zlw-lch",
"Latn",
ancestors = "zlw-opl",
}
m["szn"] = {
"Sula",
3503403,
"poz-cma",
"Latn",
}
m["szp"] = {
"Suabo",
7630429,
"ngf-sbh",
"Latn",
}
m["szv"] = {
"Isubu",
35431,
"bnt-saw",
"Latn",
}
m["szw"] = {
"Sawai",
3447258,
"poz-hce",
"Latn",
}
m["szy"] = {
"ซากีซายา",
718269,
"map",
"Latn",
}
return require("Module:languages").finalizeData(m, "language")
25hl2rk6tvl5quawq4i6ccrbvlqi3ap
มอดูล:languages/data/3/r
828
36369
5729382
5726940
2026-07-20T07:42:05Z
Octahedron80
267
5729382
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",
translit = {
Deva = "Deva-translit",
},
}
m["rac"] = {
"Rasawa",
56443,
"paa-lkp",
"Latn",
}
m["rad"] = {
"ระแด",
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"] = {
"ราปานูอี",
36746,
"poz-pep",
"Latn",
}
m["raq"] = {
"Saam",
7395644,
"sit-kic",
}
m["rar"] = {
"ราโรโตงา",
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",
translit = {
Deva = "Deva-translit",
},
}
m["rav"] = {
"Sampang",
3449115,
"sit-kic",
}
m["raw"] = {
"เรอหวั่ง",
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"] = {
"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",
}
m["rer"] = {
"Rer Bare",
12953857,
"qfa-unc", -- extinct, might not exist
}
m["res"] = {
"Reshe",
36258,
"nic-knj",
}
m["ret"] = {
"Retta",
7317113,
"paa-tap",
"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"] = {
"โรมัญญา",
1641543,
"roa-emr",
"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"] = {
"โรฮีนจา",
3241177,
"inc-bas",
"Rohg, Arab, Mymr, Latn, Beng",
ancestors = "inc-obn",
translit = {
Rohg = "Rohg-translit",
},
}
m["rhp"] = {
"Yahang",
8046792,
"paa-tor",
"Latn",
}
m["ria"] = {
"Reang",
12953063,
"tbq-bdg",
}
m["rif"] = {
"ริฟ",
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"] = {
"ราชพังสี",
12640969,
"inc-krd",
"Deva",
translit = {
Deva = "Deva-translit",
},
}
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"] = {
"ยะไข่",
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-pau",
}
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-ram",
"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",
}
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",
}
m["roe"] = {
"Ronji",
3441763,
"poz-ocw",
}
m["rof"] = {
"Rombo",
33330,
"bnt-chg",
"Latn",
}
m["rog"] = {
"Northern Roglai",
3439680,
"cmc",
"Latn",
}
m["rol"] = {
"Romblomanon",
13202,
"phi",
"Latn",
}
m["rom"] = {
"โรมานี",
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,
}
m["rou"] = {
"Runga",
56793,
}
m["row"] = {
"Dela-Oenale",
5253046,
"poz-tim",
}
m["rpn"] = {
"Repanbitip",
7313900,
"poz-vnc",
"Latn",
}
m["rpt"] = {
"Rapting",
7294362,
"ngf-han",
"Latn",
}
m["rri"] = {
"Ririo",
2404190,
"poz-ocw",
}
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"] = {
"มือรัสเซีย",
13210,
"sgn",
}
m["rsk"] = {
"รูซินแบบพันโนเนีย",
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"] = {
"รูซินแบบคาร์พาเทีย",
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"] = {
"อิสโตร-โรมาเนีย",
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-msk",
"Latn",
}
m["rwk"] = {
"Rwa",
7985624,
"bnt-chg",
}
m["rwm"] = {
"Amba",
788423,
"bnt-kbi",
"Latn",
}
m["rwo"] = {
"Rawa",
11732598,
"ngf-fin",
"Latn",
}
m["rxd"] = {
"Ngardi",
7022063,
}
m["rxw"] = {
"Karuwali",
6881575,
}
m["ryn"] = {
"อามามิโอชิมะเหนือ",
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"] = {
"ยาเอยามะ",
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"] = {
"โอกินาวะ",
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")
t0iq7kvl53o4plzy8hmq8je8yppla33
มอดูล:languages/data/2
828
36387
5729128
5720751
2026-07-20T02:35:21Z
Octahedron80
267
5729128
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["tg-stripdiacritics"] = {remove_diacritics = c.grave .. c.acute}
s["tk-stripdiacritics"] = {remove_diacritics = c.macron}
local m = {}
m["aa"] = {
"อาฟาร์",
27811,
"cus-eas",
"Latn, Ethi",
strip_diacritics = {
Latn = {remove_diacritics = c.acute},
},
}
m["ab"] = {
"อับคาเซีย",
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"] = {
"อเวสตะ",
29572,
"ira-cen",
"Avst, Gujr",
translit = {
Avst = "Avst-translit"
},
}
m["af"] = {
"อาฟรีกานส์",
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"] = {
"อาคัน",
28026,
"alv-ctn",
"Latn",
}
m["am"] = {
"อัมฮารา",
28244,
"sem-eth",
"Ethi",
translit = "Ethi-translit",
}
m["an"] = {
"อารากอน",
8765,
"roa-nar",
"Latn",
}
m["ar"] = {
"อาหรับ",
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"] = {
"อัสสัม",
29401,
"inc-bas",
"as-Beng",
ancestors = "inc-mas",
translit = "Beng-translit",
}
m["av"] = {
"อะวาร์",
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"] = {
"ไอย์มารา",
4627,
"sai-aym",
"Latn",
}
m["az"] = {
"อาเซอร์ไบจาน",
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"] = {
"แบชเคียร์",
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"] = {
"เบลารุส",
9091,
"zle",
"Cyrl, Latn",
ancestors = "zle-mbe",
translit = {
Cyrl = "be-translit-Thai",
},
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"] = {
"บัลแกเรีย",
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"] = {
"พิหาร",
135305,
"inc-eas",
"Deva",
translit = "Deva-translit",
}
m["bi"] = {
"บิสลามา",
35452,
"crp",
"Latn",
ancestors = "en",
}
m["bm"] = {
"บัมบารา",
33243,
"dmn-emn",
"Latn, Nkoo",
sort_key = {
Latn = {
from = {"ɛ", "ɲ", "ŋ", "ɔ"},
to = {"e" .. p[1], "n" .. p[1], "n" .. p[2], "o" .. p[1]}
},
},
}
m["bn"] = {
"เบงกอล",
9610,
"inc-bas",
"Beng, Newa",
ancestors = "inc-mbn",
translit = {
Beng = "Beng-translit"
},
}
m["bo"] = {
"ทิเบต",
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"] = {
"เบรอตง",
12107,
"cel-brs",
"Latn",
ancestors = "xbm",
sort_key = {
from = {"ch", "c['ʼ’]h"},
to = {"c" .. p[1], "c" .. p[2]}
},
}
m["ca"] = {
"กาตาลา",
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"] = {
"เชเชน",
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"] = {
"ชามอร์โร",
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"] = {
"คอร์ซิกา",
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"] = {
"ครี",
33390,
"alg",
"Latn, Cans",
translit = {
Cans = "cr-translit"
},
}
m["cs"] = {
"เช็ก",
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"] = {
"สลาวอนิกคริสตจักรเก่า",
35499,
"zls",
"Cyrs, Glag, Zname",
translit = {
Cyrs = "Cyrs-translit",
Glag = "Glag-translit"
},
-- Cyrs strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["cv"] = {
"ชูวัช",
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"] = {
"เวลส์",
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"] = {
"เดนมาร์ก",
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"] = {
"เยอรมัน",
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"] = {
"มัลดีฟส์",
32656,
"inc-ins",
"Thaa, Diak",
translit = {
Thaa = "Thaa-translit",
Diak = "Diak-translit",
},
override_translit = true,
}
m["dz"] = {
"ซองคา",
33081,
"sit-tib",
"Tibt",
ancestors = "xct",
override_translit = true,
-- Tibt translit, display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["ee"] = {
"เอเว",
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"] = {
"กรีก",
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"] = {
"อังกฤษ",
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"] = {
"เอสเปรันโต",
143,
"art",
"Latn",
--translit = "eo-translit", -- already handled in Module:headword & Module:links
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"] = {
"สเปน",
1321,
"roa-cas",
"Latn, Brai",
ancestors = "es-ear",
--translit = "es-translit", -- already handled in Module:headword & Module:links
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"] = {
"เอสโตเนีย",
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"] = {
"บาสก์",
8752,
"euq",
"Latn",
sort_key = {
from = {"ç", "ñ"},
to = {"c" .. p[1], "n" .. p[1]}
},
standard_chars = "AaBbDdEeFfGgHhIiJjKkLlMmNnÑñOoPpRrSsTtUuXxZz" .. c.punc,
}
m["fa"] = {
"เปอร์เซีย",
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"] = {
"ฟูลา",
33454,
"alv-fwo",
"Latn, Adlm",
}
m["fi"] = {
"ฟินแลนด์",
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"] = {
"ฟีจี",
33295,
"poz-pcc",
"Latn",
}
m["fo"] = {
"แฟโร",
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"] = {
"ฝรั่งเศส",
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"] = {
"ฟรีเชียตะวันตก",
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"] = {
"ไอริช",
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"] = {
"แกลิกแบบสกอตแลนด์",
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"] = {
"กาลิเซีย",
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"] = {
"คุชราต",
5137,
"inc-wes",
"Arab, Gujr",
ancestors = "inc-mgu",
translit = {
Gujr = "Gujr-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"] = {
"แมงซ์",
12175,
"cel-gae",
"Latn",
ancestors = "mga",
sort_key = {remove_diacritics = c.cedilla .. "-"},
standard_chars = "AaBbCcÇçDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwYy" .. c.punc,
}
m["ha"] = {
"เฮาซา",
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"] = {
"ฮีบรู",
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"] = {
"ฮินดี",
1568,
"inc-hnd",
"Deva, Kthi, Newa",
translit = {
Deva = "Deva-translit",
Kthi = "Kthi-translit",
Newa = "Newa-translit",
},
standard_chars = {
Deva = "अआइईउऊएऐओऔकखगघङचछजझञटठडढणतथदधनपफबभमयरलवशषसहत्रज्ञक्षक़ख़ग़ज़झ़ड़ढ़फ़काखागाघाङाचाछाजाझाञाटाठाडाढाणाताथादाधानापाफाबाभामायारालावाशाषासाहात्राज्ञाक्षाक़ाख़ाग़ाज़ाझ़ाड़ाढ़ाफ़ाकिखिगिघिङिचिछिजिझिञिटिठिडिढिणितिथिदिधिनिपिफिबिभिमियिरिलिविशिषिसिहित्रिज्ञिक्षिक़िख़िग़िज़िझ़िड़िढ़िफ़िकीखीगीघीङीचीछीजीझीञीटीठीडीढीणीतीथीदीधीनीपीफीबीभीमीयीरीलीवीशीषीसीहीत्रीज्ञीक्षीक़ीख़ीग़ीज़ीझ़ीड़ीढ़ीफ़ीकुखुगुघुङुचुछुजुझुञुटुठुडुढुणुतुथुदुधुनुपुफुबुभुमुयुरुलुवुशुषुसुहुत्रुज्ञुक्षुक़ुख़ुग़ुज़ुझ़ुड़ुढ़ुफ़ुकूखूगूघूङूचूछूजूझूञूटूठूडूढूणूतूथूदूधूनूपूफूबूभूमूयूरूलूवूशूषूसूहूत्रूज्ञूक्षूक़ूख़ूग़ूज़ूझ़ूड़ूढ़ूफ़ूकेखेगेघेङेचेछेजेझेञेटेठेडेढेणेतेथेदेधेनेपेफेबेभेमेयेरेलेवेशेषेसेहेत्रेज्ञेक्षेक़ेख़ेग़ेज़ेझ़ेड़ेढ़ेफ़ेकैखैगैघैङैचैछैजैझैञैटैठैडैढैणैतैथैदैधैनैपैफैबैभैमैयैरैलैवैशैषैसैहैत्रैज्ञैक्षैक़ैख़ैग़ैज़ैझ़ैड़ैढ़ैफ़ैकोखोगोघोङोचोछोजोझोञोटोठोडोढोणोतोथोदोधोनोपोफोबोभोमोयोरोलोवोशोषोसोहोत्रोज्ञोक्षोक़ोख़ोग़ोज़ोझ़ोड़ोढ़ोफ़ोकौखौगौघौङौचौछौजौझौञौटौठौडौढौणौतौथौदौधौनौपौफौबौभौमौयौरौलौवौशौषौसौहौत्रौज्ञौक्षौक़ौख़ौग़ौज़ौझ़ौड़ौढ़ौफ़ौक्ख्ग्घ्ङ्च्छ्ज्झ्ञ्ट्ठ्ड्ढ्ण्त्थ्द्ध्न्प्फ्ब्भ्म्य्र्ल्व्श्ष्स्ह्त्र्ज्ञ्क्ष्क़्ख़्ग़्ज़्झ़्ड़्ढ़्फ़्।॥०१२३४५६७८९॰",
c.punc
},
}
m["ho"] = {
"ฮีรีโมตู",
33617,
"crp",
"Latn",
ancestors = "meu",
}
m["ht"] = {
"ครีโอลเฮติ",
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"] = {
"ฮังการี",
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"] = {
"อาร์มีเนีย",
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"] = {
"เฮเรโร",
33315,
"bnt-swb",
"Latn",
}
m["ia"] = {
"อินเทอร์ลิงกวา",
35934,
"art",
"Latn",
}
m["id"] = {
"อินโดนีเซีย",
9240,
"poz-mly",
"Latn",
ancestors = "ms",
standard_chars = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz" .. c.punc,
}
m["ie"] = {
"อินเทร์ลิงเกว",
35850,
"art",
"Latn",
type = "appendix-constructed",
strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ},
}
m["ig"] = {
"อิกโบ",
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"] = {
"นอซู",
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"] = {
"อีโด",
35224,
"art",
"Latn",
}
m["is"] = {
"ไอซ์แลนด์",
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"] = {
"อิตาลี",
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"] = {
"อินุกติตุต",
29921,
"esx-inu",
"Cans, Latn",
translit = {
Cans = "cr-translit"
},
override_translit = true,
}
m["ja"] = {
"ญี่ปุ่น",
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"] = {
"ชวา",
33549,
"poz",
"Latn, Java, Arab",
ancestors = "kaw",
translit = {
Java = "Java-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"] = {
"จอร์เจีย",
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"] = {
"คองโก",
33702,
"bnt-kng",
"Latn",
}
m["ki"] = {
"เกโกโย",
33587,
"bnt-kka",
"Latn",
}
m["kj"] = {
"Kwanyama",
1405077,
"bnt-ova",
"Latn",
}
m["kk"] = {
"คาซัค",
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"] = {
"กรีนแลนด์",
25355,
"esx-inu",
"Latn",
sort_key = {
from = {"æ", "ø", "å"},
to = {"z" .. p[1], "z" .. p[2], "z" .. p[3]}
}
}
m["km"] = {
"เขมร",
9205,
"mkh-kmr",
"Khmr",
ancestors = "xhm",
translit = "Khmr-translit",
}
m["kn"] = {
"กันนฑะ",
33673,
"dra-kan",
"Knda, Tutg",
ancestors = "dra-mkn",
-- Knda translit in [[Module:scripts/data]]
}
m["ko"] = {
"เกาหลี",
9176,
"qfa-kor",
"Kore, Brai",
ancestors = "ko-ear",
translit = {
Kore = "ko-translit",
},
-- Kore strip_diacritics in [[Module:scripts/data]]
}
m["kr"] = {
"กานูรี",
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"] = {
"แคชเมียร์",
33552,
"inc-kas",
"ks-Arab, Deva, Shrd, Latn",
translit = {
["ks-Arab"] = "ks-Arab-translit",
Deva = "Deva-translit",
-- Shrd translit in [[Module:scripts/data]]
},
}
-- "kv" is treated as "koi", "kpv", see [[WT:LT]]
m["kw"] = {
"คอร์นวอลล์",
25289,
"cel-brs",
"Latn",
ancestors = "cnx",
sort_key = {
from = {"ch"},
to = {"c" .. p[1]}
},
}
m["ky"] = {
"คีร์กีซ",
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"] = {
"ละติน",
397,
"itc-laf",
"Latn, Ital",
ancestors = "itc-ola",
--translit = "la-translit", -- already handled in Module:headword & Module:links
-- 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"] = {
"ลักเซมเบิร์ก",
9051,
"gmw-hgm",
"Latn, Brai",
ancestors = "gmw-cfr",
sort_key = {
Latn = {
from = {"ä", "ë", "é"},
to = {"z" .. p[1], "z" .. p[2], "z" .. p[3]}
},
},
}
m["lg"] = {
"ลูกันดา",
33368,
"bnt-nyg",
"Latn",
strip_diacritics = {remove_diacritics = c.acute .. c.circ},
sort_key = {
from = {"ŋ"},
to = {"n" .. p[1]}
},
}
m["li"] = {
"ลิมเบิร์ก",
102172,
"gmw-frk",
"Latn",
ancestors = "dum",
}
m["ln"] = {
"ลิงกาลา",
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"] = {
"ลาว",
9211,
"tai-swe",
"Laoo", -- also Tai Noi/Lao Buhan script
translit = "Laoo-translit",
--sort_key = "Laoo-sortkey",
standard_chars = "0-9ກຂຄງຈຊຍດຕຖທນບປຜຝພຟມຢຣລວສຫອຮຯ-ໝ" .. c.punc,
}
m["lt"] = {
"ลิทัวเนีย",
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"] = {
"ลัตเวีย",
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"] = {
"มาลากาซี",
7930,
"poz-bre",
"Latn, Arab",
}
m["mh"] = {
"มาร์แชลล์",
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"] = {
"มาวรี",
36451,
"poz-pep",
"Latn",
sort_key = {
remove_diacritics = c.macron,
from = {"ng", "wh"},
to = {"n" .. p[1], "w" .. p[1]}
},
}
m["mk"] = {
"มาซิโดเนีย",
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"] = {
"มลยาฬัม",
36236,
"dra-mal",
"Mlym",
override_translit = true,
-- Mlym translit in [[Module:scripts/data]]
}
m["mn"] = {
"มองโกเลีย",
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"] = {
"มราฐี",
1571,
"inc-sou",
"Deva, Modi",
ancestors = "omr",
translit = {
Deva = "Deva-translit",
Modi = "Modi-translit",
},
strip_diacritics = {
Deva = {
from = {"च़", "ज़", "झ़"},
to = {"च", "ज", "झ"}
},
},
}
m["ms"] = {
"มาเลเซีย",
9237,
"poz-mly",
"Latn, ms-Arab",
ancestors = "ms-cla",
standard_chars = {
Latn = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz",
c.punc
},
}
m["mt"] = {
"มอลตา",
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"] = {
"พม่า",
9228,
"tbq-brm",
"Mymr",
ancestors = "obr",
translit = "my-translit",
override_translit = true,
sort_key = {
from = {"ျ", "ြ", "ွ", "ှ", "ဿ"},
to = {"္ယ", "္ရ", "္ဝ", "္ဟ", "သ္သ"}
},
}
m["na"] = {
"นาอูรู",
13307,
"poz-mic",
"Latn",
}
m["nb"] = {
"นอร์เวย์แบบบุ๊กมอล",
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"] = {
"เนปาล",
33823,
"inc-pah",
"Deva, Newa",
translit = {
Deva = "Deva-translit",
Newa = "Newa-translit",
},
}
m["ng"] = {
"Ndonga",
33900,
"bnt-ova",
"Latn",
}
m["nl"] = {
"ดัตช์",
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"] = {
"นอร์เวย์แบบนือนอสก์",
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"] = {
"นอร์เวย์",
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"] = {
"นาวาโฮ",
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"] = {
"เจวา",
33273,
"bnt-nys",
"Latn",
strip_diacritics = {remove_diacritics = c.acute .. c.circ},
sort_key = {
from = {"ng'"},
to = {"ng"}
},
}
m["oc"] = {
"อุตซิตา",
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"] = {
"โอจิบเว",
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"] = {
"ออโรโม",
33864,
"cus-eas",
"Latn, Ethi",
}
m["or"] = {
"โอริยา",
33810,
"inc-eas",
"Orya",
ancestors = "inc-mor",
translit = "Orya-translit",
}
m["os"] = {
"ออสซีเซีย",
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"] = {
"ปัญจาบ",
58635,
"inc-pan",
"Guru, pa-Arab",
ancestors = "inc-opa",
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"] = {
"บาลี",
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 = "Deva-translit",
Beng = "Beng-translit",
Sinh = "Sinh-translit",
Mymr = "Mymr-translit",
--Thai = "pi-translit",
Lana = "Lana-translit",
Laoo = "Laoo-translit",
Khmr = "Khmr-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"] = {
"โปแลนด์",
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"] = {
"ปาทาน",
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"] = {
"โปรตุเกส",
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"] = {
"เกชัว",
5218,
"qwe",
"Latn",
}
m["rm"] = {
"โรมานช์",
13199,
"roa-rhe",
"Latn",
sort_key = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.diaer .. c.small_e},
}
m["ro"] = {
"โรมาเนีย",
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"] = {
"รัสเซีย",
7737,
"zle",
"Cyrl, Brai",
ancestors = "zle-mru",
translit = {
Cyrl = "ru-translit-Thai"
},
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"] = {
"รวันดา-รุนดี",
3217514,
"bnt-glb",
"Latn",
strip_diacritics = {remove_diacritics = c.acute .. c.circ .. c.macron .. c.caron},
}
m["sa"] = {
"สันสกฤต",
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 = "Beng-translit",
["as-Beng"] = "Beng-translit",
-- Brah translit in [[Module:scripts/data]]
Deva = "Deva-translit",
Gujr = "Gujr-translit",
Guru = "Guru-translit",
Java = "Java-translit",
Kthi = "Kthi-translit",
Khmr = "Khmr-translit",
Knda = "Knda-translit",
Lana = "Lana-translit",
Laoo = "Laoo-translit",
Mlym = "Mlym-translit",
Modi = "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 = "Mymr-translit",
Orya = "Orya-translit",
-- Shrd translit in [[Module:scripts/data]]
-- Sidd translit in [[Module:scripts/data]]
Sinh = "Sinh-translit",
--Thai = "pi-translit",
Taml = "Taml-translit",
Telu = "Telu-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 = {
Thai = {
from = {"ึ", u(0xF700), u(0xF70F)}, -- FIXME: Not clear what's going on with the PUA characters here.
to = {"ิํ", "ฐ", "ญ"}
},
Mymr = {
remove_diacritics = c.VS01,
},
Deva = {
remove_diacritics = c.udatta .. c.anudatta,
},
},
sort_key = {
Latn = {
from = {"ā", "ī", "ū", "ḍ", "ḷ", "ḹ", "m[" .. c.dotabove .. c.dotbelow .. "]", "ṅ", "ñ", "ṇ", "ṛ", "ṝ", "ś", "ṣ", "ṭ"},
to = {"a~", "i~", "u~", "d~", "l~", "l~~", "m~", "n~", "n~~", "n~~~", "r~", "r~~", "s~", "s~~", "t~"},
},
--Thai = "Thai-sortkey",
--Laoo = "Laoo-sortkey",
Lana = { -- Tai Tham
from = {"ᩔ", "ᩕ", "ᩖ", "ᩘ", "([ᨭ-ᨱ])ᩛ", "([ᨷ-ᨾ])ᩛ", "ᩤ"},
to = {"ᩈ᩠ᩈ", "᩠ᩁ", "᩠ᩃ", "ᨦ᩠", "%1᩠ᨮ", "%1᩠ᨻ", "ᩣ"},
},
Mymr = {
remove_diacritics = c.VS01,
},
-- 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"] = {
"ซาร์ดิเนีย",
33976,
"roa-sou",
"Latn",
}
m["sd"] = {
"สินธ์",
33997,
"inc-snd",
"sd-Arab, Deva, Sind, Khoj",
translit = {
Deva = "Deva-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"] = {
"ซามีเหนือ",
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"] = {
"ซังโก",
33954,
"crp",
"Latn",
ancestors = "ngb",
}
m["sh"] = {
"เซอร์โบ-โครเอเชีย",
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"] = {
"สิงหล",
13267,
"inc-ins",
"Sinh",
translit = "Sinh-translit",
override_translit = true,
}
m["sk"] = {
"สโลวัก",
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"] = {
"สโลวีเนีย",
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"] = {
"ซามัว",
34011,
"poz-pnp",
"Latn",
}
m["sn"] = {
"โชนา",
34004,
"bnt-sho",
"Latn",
strip_diacritics = {remove_diacritics = c.acute},
}
m["so"] = {
"โซมาลี",
13275,
"cus-som",
"Latn, Arab, Osma",
strip_diacritics = {
Latn = {remove_diacritics = c.grave .. c.acute .. c.circ}
},
}
m["sq"] = {
"แอลเบเนีย",
8748,
"sqj",
"Latn, Grek, ota-Arab, Elba, Todr, Vith",
translit = {
Elba = "Elba-translit",
},
-- Grek display_text, sort_key in [[Module:scripts/data]]
strip_diacritics = {
Latn = {
remove_diacritics = c.acute .. c.circ,
from = {'^[ie] (%w)', '^të (%w)'}, to = {'%1', '%1'},
},
Grek = { -- Diacritic removal from Grek-stripdiacritics excluded.
from = m_langdata.chars_substitutions["Grek-stripdiacritics"].from,
to = m_langdata.chars_substitutions["Grek-stripdiacritics"].to,
},
},
sort_key = {
Latn = {
remove_diacritics = c.acute .. c.circ .. 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"] = {
"สวาซี",
34014,
"bnt-ngu",
"Latn",
strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.caron},
}
m["st"] = {
"ซูทู",
34340,
"bnt-sts",
"Latn",
strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.caron},
}
m["su"] = {
"ซุนดา",
34002,
"poz-msa",
"Latn, Sund, Arab",
ancestors = "osn",
translit = {
Sund = "Sund-translit"
},
}
m["sv"] = {
"สวีเดน",
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 = {"o", "ae", "oe", "ss", "z" .. p[1], "ä", "ö"}
},
standard_chars = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpRrSsTtUuVvXxYyÅåÄäÖö" .. c.punc,
}
m["sw"] = {
"สวาฮีลี",
7838,
"bnt-swh",
"Latn, Arab",
sort_key = {
Latn = {
from = {"ng'"},
to = {"ng" .. p[1]}
},
},
}
m["ta"] = {
"ทมิฬ",
5885,
"dra-tam",
"Taml",
ancestors = "ta-mid",
translit = "Taml-translit",
override_translit = true,
}
m["te"] = {
"เตลูกู",
8097,
"dra-tel",
"Telu",
translit = "Telu-translit",
override_translit = true,
}
m["tg"] = {
"ทาจิก",
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"] = {
"ไทย",
9217,
"tai-swe",
"Thai, Khomt, Brai",
--translit = {
-- Thai = "th-translit"
--},
--sort_key = {
-- Thai = "Thai-sortkey"
--},
}
m["ti"] = {
"ทือกรึญญา",
34124,
"sem-eth",
"Ethi",
translit = "Ethi-translit",
}
m["tk"] = {
"เติร์กเมน",
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"] = {
"ตากาล็อก",
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"] = {
"สวานา",
34137,
"bnt-sts",
"Latn",
}
m["to"] = {
"ตองงา",
34094,
"poz-ton",
"Latn",
strip_diacritics = {remove_diacritics = c.acute},
sort_key = {remove_diacritics = c.macron},
}
m["tr"] = {
"ตุรกี",
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"] = {
"ตาตาร์",
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"] = {
"ตาฮีตี",
34128,
"poz-pep",
"Latn",
}
m["ug"] = {
"อุยกูร์",
13263,
"trk-kar",
"ug-Arab, Latn, Cyrl",
ancestors = "chg",
translit = {
["ug-Arab"] = "ug-translit-Thai",
--Cyrl = "ug-translit",
},
override_translit = true,
}
m["uk"] = {
"ยูเครน",
8798,
"zle",
"Cyrl",
ancestors = "zle-muk",
translit = "uk-translit-Thai",
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"] = {
"อูรดู",
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"] = {
"อุซเบก",
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"] = {
"เวนดา",
32704,
"bnt-bso",
"Latn",
}
m["vi"] = {
"เวียดนาม",
9199,
"mkh-vie",
"Latn, Hani",
ancestors = "mkh-mvi",
--translit = {Latn = "vi-translit"}, -- already handled in Module:headword & Module:links
sort_key = {
Latn = "vi-sortkey",
Hani = "Hani-sortkey",
},
}
m["vo"] = {
"โวลาปุก",
36986,
"art",
"Latn",
}
m["wa"] = {
"วัลลูน",
34219,
"roa-oil",
"Latn",
sort_key = s["roa-oil-sortkey"],
}
m["wo"] = {
"โวลอฟ",
34257,
"alv-fwo",
"Latn, Arab, Gara",
}
m["xh"] = {
"โคซา",
13218,
"bnt-ngu",
"Latn",
strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.caron},
}
m["yi"] = {
"ยิดดิช",
8641,
"gmw-hgm",
"Hebr, Latn",
ancestors = "gmh",
translit = {
Hebr = "yi-translit",
},
-- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["yo"] = {
"โยรูบา",
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"] = {
"จ้วง",
13216,
"tai",
"Latn, Hani",
sort_key = {
Latn = "za-sortkey",
Hani = "Hani-sortkey",
},
}
m["zh"] = {
"จีน",
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"] = {
"ซูลู",
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")
mixb844lka848jxv6u8klvpt8l8ictc
เคียว
0
36840
5729041
5723907
2026-07-19T23:21:40Z
Alifshinobi
397
/* ภาษาคำเมือง */
5729041
wikitext
text/x-wiki
{{also/auto}}
== ภาษาไทย ==
[[ไฟล์:20.Falz.JPG|thumb|เคียว (เครื่องมือ)]]
=== การออกเสียง ===
{{th-pron}}
=== รากศัพท์ 1 ===
ร่วมเชื้อสายกับ{{cog|lo|ຄຽວ,ກ່ຽວ}}, {{cog|nod|ᨤ᩠ᨿᩅ}}, {{cog|khb|ᦵᦆᧁ}}, {{cog|blt|ꪀꪸ꪿ꪫ}}, {{cog|tdd|ᥑᥥᥝᥰ}}
==== คำนาม ====
{{th-noun}}
# [[เครื่องมือ]][[เกี่ยว]][[ข้าว]][[และ]][[หญ้า]][[เป็นต้น]] [[ทำ]][[ด้วย]][[เหล็ก]] [[รูปโค้ง]] [[มี]][[คม]]
=== รากศัพท์ 2 ===
==== คำกริยา ====
{{th-verb}}
# [[รีบ]][[ไป]], [[รีบ]][[มา]], [[เครียว]] [[หรือ]] [[เขียว]] [[ก็]][[ใช้]]
== ภาษาคำเมือง ==
=== คำนาม ===
{{nod-noun}}
# {{altform|nod|ᨤ᩠ᨿᩅ}}
=== คำกริยา ===
{{nod-verb}}
# {{lb|nod|สกรรม}} {{altform|nod|ᨤ᩠ᨿᩅ|t=[[รังแก]], [[เย้า]], [[กวน]]}}
41pomg1ky67r94uplyfbf1ayqjz2ifd
5729042
5729041
2026-07-19T23:22:28Z
Alifshinobi
397
/* ภาษาคำเมือง */
5729042
wikitext
text/x-wiki
{{also/auto}}
== ภาษาไทย ==
[[ไฟล์:20.Falz.JPG|thumb|เคียว (เครื่องมือ)]]
=== การออกเสียง ===
{{th-pron}}
=== รากศัพท์ 1 ===
ร่วมเชื้อสายกับ{{cog|lo|ຄຽວ,ກ່ຽວ}}, {{cog|nod|ᨤ᩠ᨿᩅ}}, {{cog|khb|ᦵᦆᧁ}}, {{cog|blt|ꪀꪸ꪿ꪫ}}, {{cog|tdd|ᥑᥥᥝᥰ}}
==== คำนาม ====
{{th-noun}}
# [[เครื่องมือ]][[เกี่ยว]][[ข้าว]][[และ]][[หญ้า]][[เป็นต้น]] [[ทำ]][[ด้วย]][[เหล็ก]] [[รูปโค้ง]] [[มี]][[คม]]
=== รากศัพท์ 2 ===
==== คำกริยา ====
{{th-verb}}
# [[รีบ]][[ไป]], [[รีบ]][[มา]], [[เครียว]] [[หรือ]] [[เขียว]] [[ก็]][[ใช้]]
== ภาษาคำเมือง ==
=== การออกเสียง ===
* {{IPA|nod|/xeːw˧˧/|a=เชียงใหม่}}
=== คำนาม ===
{{nod-noun}}
# {{altform|nod|ᨤ᩠ᨿᩅ}}
=== คำกริยา ===
{{nod-verb}}
# {{lb|nod|สกรรม}} {{altform|nod|ᨤ᩠ᨿᩅ|t=[[รังแก]], [[เย้า]], [[กวน]]}}
14ko8oi8qozjaabebukvyuctlq3ag3r
บิ่น
0
37065
5729049
1882458
2026-07-19T23:34:28Z
Alifshinobi
397
/* ภาษาคำเมือง */
5729049
wikitext
text/x-wiki
{{also/auto}}
== ภาษาไทย ==
=== การออกเสียง ===
{{th-pron}}
=== คำกริยา ===
{{th-verb}}
# [[แตก]][[ลิ]][[ไป]][[เล็กน้อย]] ([[ที่]][[คม]] [[ที่]][[แง่]] [[หรือ]][[ที่]][[ยอด]])
#: {{ux|th|มีดบิ่น}}
#: {{ux|th|ชามปากบิ่น}}
=== คำคุณศัพท์ ===
{{th-adj}}
# [[บ้า]][[อย่าง]][[หุนหันพลันแล่น]], [[บ้าบิ่น]] [[ก็]][[ว่า]]
== ภาษาคำเมือง ==
=== การออกเสียง ===
* {{IPA|nod|/bin˨˩/|a=เชียงใหม่}}
=== คำกริยา ===
{{nod-verb}}
# {{lb|nod|สกรรม}} {{altform|nod|ᨷᩥ᩠᩵ᨶ|t=[[หัน]]}}
ptf1yzty2b1f2cqr2y33heu6pqpom7g
ᨲᩩ᩠᩶ᨿ
0
37691
5729044
3325431
2026-07-19T23:23:59Z
Alifshinobi
397
/* ภาษาคำเมือง */
5729044
wikitext
text/x-wiki
{{also/auto}}
== ภาษาคำเมือง ==
=== รูปแบบอื่น ===
{{nod-alt|~=ตุ้ย}}
=== การออกเสียง ===
* {{IPA|nod|/tuj˦˦ʔ/|a=เชียงใหม่}}
=== คำคุณศัพท์ ===
{{nod-adj}}
# [[อ้วน]], [[สมบูรณ์]]
0q0jz6broxlq92ww38u5jq3prc0unvj
โค่น
0
38017
5729416
5686283
2026-07-20T08:58:02Z
Heavenchris
5375
5729416
wikitext
text/x-wiki
{{also/auto}}
== ภาษาไทย ==
=== การออกเสียง ===
{{th-pron}}
=== รากศัพท์ ===
{{cog|zzj|kunh}}, {{cog|za|goenh}}
=== คำกริยา ===
{{th-verb}}
# {{lb|th|สกรรม|อกรรม}} [[ล้ม]][[หรือ]][[ทำ]][[ให้]]ล้ม[[ลง]]
#: {{ux|th|ต้นไม้โค่น}}
#: {{ux|th|โค่นต้นไม้}}
# {{lb|th|อกรรม}} [[ทลาย]]ลง
#: {{ux|th|ยอดปรางค์โค่น}}
# {{lb|th|สกรรม|โดยปริยาย}} ทำให้[[หมด]][[ไป]]หรือ[[สิ้น]]ไป
#: {{ux|th|โค่นอำนาจ}}
== ภาษาคำเมือง ==
=== การออกเสียง ===
* {{IPA|nod|/koːn˦˨/|a=เชียงใหม่}}
=== คำกริยา ===
{{nod-verb|tl=1}}
# {{lb|nod|อกรรม|สกรรม}} {{alternative form of|nod|ᨣᩰᩫ᩠᩵ᨶ}}
iqtdd4q6gjh9rl8gn5oqcm542vbb0t5
ဢီႇဝုၺ်း
0
40219
5729329
1416377
2026-07-20T06:06:48Z
Alifshinobi
397
/* ภาษาไทใหญ่ */
5729329
wikitext
text/x-wiki
== ภาษาไทใหญ่ ==
=== รากศัพท์ ===
ร่วมเชื้อสายกับ{{cog|nod|ᩋᩦ᩵ᩅᩩ᩠ᨿ}}
=== การออกเสียง ===
{{shn-pron|ဢီႇ-ဝုၺ်း}}
=== คำนาม ===
{{shn-noun|တူဝ်}}
# [[ชะนี]]
4gaoxf7a89q4274ntdlhw7p1doveyr2
มอดูล:es-headword
828
40573
5729254
5724478
2026-07-20T04:14:39Z
Octahedron80
267
5729254
Scribunto
text/plain
local export = {}
local pos_functions = {}
local force_cat = false -- for testing; if true, categories appear in non-mainspace pages
local rfind = mw.ustring.find
local rmatch = mw.ustring.match
local require_when_needed = require("Module:utilities/require when needed")
local m_table = require("Module:table")
local com = require("Module:es-common")
local en_utilities_module = "Module:en-utilities"
local es_verb_module = "Module:es-verb"
local headword_module = "Module:headword"
local headword_utilities_module = "Module:headword utilities"
local inflection_utilities_module = "Module:inflection utilities"
local romut_module = "Module:romance utilities"
local m_en_utilities = require_when_needed(en_utilities_module)
local m_headword_utilities = require_when_needed(headword_utilities_module)
local m_string_utilities = require_when_needed("Module:string utilities")
local glossary_link = require_when_needed(headword_utilities_module, "glossary_link")
local lang = require("Module:languages").getByCode("es")
local langname = --[[lang:getCanonicalName()]] lang:getCategoryName()
local insert = table.insert
local remove = table.remove
local rsub = com.rsub
local sort = table.sort
local ulower = mw.ustring.lower
local usub = mw.ustring.sub
local uupper = mw.ustring.upper
local function track(page)
require("Module:debug").track("es-headword/" .. page)
return true
end
local list_param = {list = true, disallow_holes = true}
local boolean_param = {type = "boolean"}
-- The main entry point.
-- This is the only function that can be invoked from a template.
function export.show(frame)
local poscat = frame.args[1]
or error("Part of speech has not been specified. Please pass parameter 1 to the module invocation.")
-- หมวดหมู่เป็นภาษาไทย
local poscat_th = require("Module:th-utilities").th_pos(poscat)
local parargs = frame:getParent().args
local params = {
["head"] = list_param,
["id"] = true,
["splithyph"] = boolean_param,
["nolink"] = boolean_param,
["nolinkhead"] = {alias_of = "nolink"},
["json"] = boolean_param,
["pagename"] = true, -- for testing
}
if pos_functions[poscat_th] then
for key, val in pairs(pos_functions[poscat_th].params) do
params[key] = val
end
end
local args = require("Module:parameters").process(parargs, params)
local pagename = args.pagename or mw.loadData("Module:headword/data").pagename
local user_specified_heads = args.head
local heads = user_specified_heads
if args.nolink then
if #heads == 0 then
heads = {pagename}
end
else
local romut = require(romut_module)
local auto_linked_head = romut.add_links_to_multiword_term(pagename, args.splithyph)
if #heads == 0 then
heads = {auto_linked_head}
else
for i, head in ipairs(heads) do
if head:find("^~") then
head = romut.apply_link_modifiers(auto_linked_head, usub(head, 2))
heads[i] = head
end
end
end
end
local data = {
lang = lang,
pos_category = pos_functions[poscat_th] and pos_functions[poscat_th].pos_category or poscat_th,
categories = {},
heads = heads,
user_specified_heads = user_specified_heads,
no_redundant_head_cat = #user_specified_heads == 0,
genders = {},
inflections = {},
pagename = pagename,
id = args.id,
force_cat_output = force_cat,
checkredlinks = pos_functions[poscat_th] and pos_functions[poscat_th].redlink_pos or true,
}
if pagename:find("^%-") and poscat_th ~= "รูปปัจจัย" then
data.is_suffix = true
data.pos_category = "ปัจจัย"
data.checkredlinks = true
local singular_poscat = --[[m_en_utilities.singularize(poscat)]] poscat_th
insert(data.categories, "ปัจจัยสร้าง" .. singular_poscat .. langname)
insert(data.inflections, {label = "ปัจจัยสร้าง" .. singular_poscat})
end
local pagename_lower = ulower(pagename)
for _, ch in ipairs{"jh", "kh", "ph", "qü", "sh", "th", "tl", "ts", "tz", "wh", "zh", "ze", "zi"} do
if pagename_lower:find(ch) then
insert(data.categories, "ศัพท์" .. langname .. "ที่สะกดด้วย " .. uupper(ch))
end
end
if pos_functions[poscat_th] then
pos_functions[poscat_th].func(args, data, frame, is_suffix)
end
if args.json then
return require("Module:JSON").toJSON(data)
end
return require(headword_module).full_headword(data)
end
-----------------------------------------------------------------------------------------
-- Utility functions --
-----------------------------------------------------------------------------------------
local function replace_hash_with_lemma(term, lemma)
-- If there is a % sign in the lemma, we have to replace it with %% so it doesn't get interpreted as a capture
-- replace expression.
lemma = m_string_utilities.replacement_escape(lemma)
return (term:gsub("#", lemma)) -- discard second retval
end
-- Parse and insert an inflection not requiring additional processing into `data.inflections`. The raw arguments come
-- from `args[field]`, which is parsed for inline modifiers. `label` is the label that the inflections are given;
-- `accel` is the accelerator form, or nil.
local function parse_and_insert_inflection(data, args, field, label, accel)
m_headword_utilities.parse_and_insert_inflection {
headdata = data,
forms = args[field],
paramname = field,
splitchar = ",",
label = label,
accel = accel and {form = accel} or nil,
}
end
-- Insert default plurals generated when a given plural had the value of + and default plurals were fetched as a result.
-- `plobj` is the parsed object whose `term` field is "+". `defpls` is the list of default plurals. `dest` is the list
-- into which the plurals are inserted (which inherit their qualifiers and labels from `plobj`).
local function insert_defpls(defpls, plobj, dest)
if not defpls then
-- Happens e.g. with [[S.A.]] where the default plural algorithm returns nothing.
return
end
if #defpls == 1 then
plobj.term = defpls[1]
insert(dest, plobj)
else
for _, defpl in ipairs(defpls) do
local newplobj = m_table.shallowCopy(plobj)
newplobj.term = defpl
insert(dest, newplobj)
end
end
end
-----------------------------------------------------------------------------------------
-- Adjectives --
-----------------------------------------------------------------------------------------
local function do_adjective(args, data, is_superlative)
local feminines = {}
local masculine_plurals = {}
local feminine_plurals = {}
-- Use "participle" not "past participle" for categories such as 'invariable participles'
local category_plpos = data.checkredlinks
if category_plpos == true then
category_plpos = data.pos_category
end
local category_pos = --[[m_en_utilities.singularize(category_plpos)]] category_plpos
if args.sp then
local romut = require(romut_module)
if not romut.allowed_special_indicators[args.sp] then
local indicators = {}
for indic, _ in pairs(romut.allowed_special_indicators) do
insert(indicators, "'" .. indic .. "'")
end
sort(indicators)
error("Special inflection indicator beginning can only be " ..
mw.text.listToText(indicators) .. ": " .. args.sp)
end
end
local lemma = data.pagename
local function fetch_inflections(field)
local retval = m_headword_utilities.parse_term_list_with_modifiers {
paramname = field,
forms = args[field],
splitchar = ",",
}
if not retval[1] then
return {{term = "+"}}
end
return retval
end
local function insert_inflection(terms, label, accel)
m_headword_utilities.insert_inflection {
headdata = data,
terms = terms,
label = label,
accel = accel and {form = accel} or nil,
}
end
if args.inv then
-- invariable adjective
insert(data.inflections, {label = glossary_link("ผันรูปไม่ได้")})
insert(data.categories, category_plpos .. "ผันรูปไม่ได้" .. langname)
if args.sp or args.f[1] or args.pl[1] or args.mpl[1] or args.fpl[1] then
error("Can't specify inflections with an invariable " .. category_pos)
end
elseif args.fonly then
-- feminine-only
if args.f[1] then
error("Can't specify explicit feminines with feminine-only " .. category_pos)
end
if args.pl[1] then
error("Can't specify explicit plurals with feminine-only " .. category_pos .. ", use fpl=")
end
if args.mpl[1] then
error("Can't specify explicit masculine plurals with feminine-only " .. category_pos)
end
local argsfpl = fetch_inflections("fpl")
for _, fpl in ipairs(argsfpl) do
if fpl.term == "+" then
-- Generate default feminine plural.
local defpls = com.make_plural(lemma, "f", args.sp)
if not defpls then
error("Unable to generate default plural of '" .. lemma .. "'")
end
insert_defpls(defpls, fpl, feminine_plurals)
else
fpl.term = replace_hash_with_lemma(fpl.term, lemma)
insert(feminine_plurals, fpl)
end
end
insert(data.inflections, {label = "เพศหญิงเท่านั้น"})
insert_inflection(feminine_plurals, "เพศหญิงพหูพจน์", "f|p")
else
-- Gather feminines.
for _, f in ipairs(fetch_inflections("f")) do
if f.term == "+" then
-- Generate default feminine.
f.term = com.make_feminine(lemma, args.sp)
else
f.term = replace_hash_with_lemma(f.term, lemma)
end
insert(feminines, f)
end
local fem_like_lemma = #feminines == 1 and feminines[1].term == lemma and
not m_headword_utilities.termobj_has_qualifiers_or_labels(feminines[1])
if fem_like_lemma then
insert(data.categories, langname .. " epicene " .. category_plpos)
end
local mpl_field = "mpl"
local fpl_field = "fpl"
if args.pl[1] then
if args.mpl[1] or args.fpl[1] then
error("Can't specify both pl= and mpl=/fpl=")
end
mpl_field = "pl"
fpl_field = "pl"
end
local argsmpl = fetch_inflections(mpl_field)
local argsfpl = fetch_inflections(fpl_field)
for _, mpl in ipairs(argsmpl) do
if mpl.term == "+" then
-- Generate default masculine plural.
local defpls = com.make_plural(lemma, "m", args.sp)
if not defpls then
error("Unable to generate default plural of '" .. lemma .. "'")
end
insert_defpls(defpls, mpl, masculine_plurals)
else
mpl.term = replace_hash_with_lemma(mpl.term, lemma)
insert(masculine_plurals, mpl)
end
end
for _, fpl in ipairs(argsfpl) do
if fpl.term == "+" then
for _, f in ipairs(feminines) do
-- Generate default feminine plural; f is a table.
local defpls = com.make_plural(f.term, "f", args.sp)
if not defpls then
error("Unable to generate default plural of '" .. f.term .. "'")
end
for _, defpl in ipairs(defpls) do
local fplobj = m_table.shallowCopy(fpl)
fplobj.term = defpl
m_headword_utilities.combine_termobj_qualifiers_labels(fplobj, f)
insert(feminine_plurals, fplobj)
end
end
else
fpl.term = replace_hash_with_lemma(fpl.term, lemma)
insert(feminine_plurals, fpl)
end
end
parse_and_insert_inflection(data, args, "mapoc", "เพศชายเอกพจน์ก่อนคำนาม")
local fem_pl_like_masc_pl = masculine_plurals[1] and feminine_plurals[1] and
m_table.deepEquals(masculine_plurals, feminine_plurals)
local masc_pl_like_lemma = #masculine_plurals == 1 and masculine_plurals[1].term == lemma and
not m_headword_utilities.termobj_has_qualifiers_or_labels(masculine_plurals[1])
if fem_like_lemma and fem_pl_like_masc_pl and masc_pl_like_lemma then
-- actually invariable
insert(data.inflections, {label = glossary_link("ผันรูปไม่ได้")})
insert(data.categories, category_plpos .. "ผันรูปไม่ได้" .. langname)
else
-- Make sure there are feminines given and not same as lemma.
if not fem_like_lemma then
insert_inflection(feminines, "เพศหญิง", "f|s")
elseif args.gneut then
data.genders = {"gneut"}
else
data.genders = {"mf"}
end
if fem_pl_like_masc_pl then
if args.gneut then
insert_inflection(masculine_plurals, "พหูพจน์", "p")
else
insert_inflection(masculine_plurals, "เพศชายและเพศหญิงพหูพจน์", "p")
end
else
insert_inflection(masculine_plurals, "เพศชายพหูพจน์", "m|p")
insert_inflection(feminine_plurals, "เพศหญิงพหูพจน์", "f|p")
end
end
end
parse_and_insert_inflection(data, args, "comp", "ขั้นกว่า")
parse_and_insert_inflection(data, args, "sup", "ขั้นสุด")
parse_and_insert_inflection(data, args, "dim", "ตัวบอกความเล็ก")
parse_and_insert_inflection(data, args, "aug", "ตัวบอกความใหญ่")
if args.irreg and is_superlative then
insert(data.categories, category_plpos .. "ขั้นสุดไม่ปรกติ" .. langname)
end
end
local function get_adjective_params(adjtype)
local params = {
["inv"] = boolean_param, --invariable
["sp"] = true, -- special indicator: "first", "first-last", etc.
}
local function ins_infl(field)
params[field] = list_param --feminine form(s)
end
ins_infl("f") -- feminine form(s)
ins_infl("pl") -- plural override(s)
ins_infl("mpl") -- masculine plural override(s)
ins_infl("fpl") -- feminine plural override(s)
if adjtype == "base" then
ins_infl("mapoc") --masculine apocopated (before a noun)
ins_infl("comp") --comparative(s)
ins_infl("sup") --superlative(s)
ins_infl("dim") --diminutive(s)
ins_infl("aug") --augmentative(s)
params["fonly"] = boolean_param -- feminine only
params["gneut"] = boolean_param -- gender-neutral adjective e.g. [[latine]]
params["hascomp"] = true -- has comparative
end
if adjtype == "sup" then
params["irreg"] = boolean_param
end
return params
end
pos_functions["คำคุณศัพท์"] = {
params = get_adjective_params("base"),
func = do_adjective,
}
pos_functions["รูปกริยาขยายอดีตกาล"] = {
params = get_adjective_params("part"),
func = do_adjective,
redlink_pos = "รูปกริยาขยาย",
}
pos_functions["ตัวกำหนด"] = {
params = get_adjective_params("det"),
func = do_adjective,
}
pos_functions["คำสรรพนาม"] = {
params = get_adjective_params("pron"),
func = do_adjective,
}
pos_functions["คำคุณศัพท์ขั้นกว่า"] = {
params = get_adjective_params("comp"),
func = do_adjective,
pos_category = "คำคุณศัพท์",
}
pos_functions["คำคุณศัพท์ขั้นสุด"] = {
params = get_adjective_params("sup"),
func = function(args, data)
do_adjective(args, data, true)
end,
pos_category = "คำคุณศัพท์",
}
-----------------------------------------------------------------------------------------
-- Adverbs --
-----------------------------------------------------------------------------------------
pos_functions["คำกริยาวิเศษณ์"] = {
params = {
["sup"] = list_param, --superlative(s)
},
func = function(args, data)
parse_and_insert_inflection(data, args, "sup", "ขั้นสุด")
end,
}
-----------------------------------------------------------------------------------------
-- Numerals --
-----------------------------------------------------------------------------------------
pos_functions["เลขเชิงการนับ"] = {
params = {
["f"] = list_param, --feminine(s)
["mapoc"] = list_param, --masculine apocopated form(s)
},
func = function(args, data)
insert(data.categories, 1, "เลขเชิงการนับ" .. langname)
if args.f[1] then
insert(data.genders, "m")
parse_and_insert_inflection(data, args, "f", "เพศหญิง")
end
parse_and_insert_inflection(data, args, "mapoc", "เพศชายก่อนคำนาม")
end,
pos_category = "เลข",
}
-----------------------------------------------------------------------------------------
-- Nouns --
-----------------------------------------------------------------------------------------
local allowed_genders = m_table.listToSet(
{"m", "f", "mf", "mfbysense", "mfequiv", "gneut", "n", "m-p", "f-p", "mf-p", "mfbysense-p", "mfequiv-p", "gneut-p", "n-p", "?", "?-p"}
)
local function validate_genders(genders)
for _, g in ipairs(genders) do
if type(g) == "table" then
g = g.spec
end
if not allowed_genders[g] then
error("Unrecognized gender: " .. g)
end
end
end
-- Display additional inflection information for a noun
local function do_noun(args, data, is_proper)
local is_plurale_tantum = false
local has_singular = false
local category_plpos = data.checkredlinks
if category_plpos == true then
category_plpos = data.pos_category
end
local category_pos = --[[m_en_utilities.singularize(category_plpos)]] category_plpos
validate_genders(args[1])
data.genders = args[1]
local saw_m = false
local saw_f = false
local saw_gneut = false
local gender_for_irreg_ending, gender_for_make_plural
-- Check for specific genders and pluralia tantum.
for _, g in ipairs(args[1]) do
if type(g) == "table" then
g = g.spec
end
if g:find("-p$") then
is_plurale_tantum = true
else
has_singular = true
if g == "m" or g == "mf" or g == "mfbysense" then
saw_m = true
end
if g == "f" or g == "mf" or g == "mfbysense" then
saw_f = true
end
if g == "gneut" then
saw_gneut = true
end
end
end
if saw_m and saw_f then
gender_for_irreg_ending = "mf"
elseif saw_f then
gender_for_irreg_ending = "f"
else
gender_for_irreg_ending = "m"
end
gender_for_make_plural = saw_gneut and "gneut" or gender_for_irreg_ending
local lemma = data.pagename
local plurals = {}
if is_plurale_tantum and not has_singular then
if args[2][1] then
error("Can't specify plurals of plurale tantum " .. category_pos)
end
insert(data.inflections, {label = glossary_link("พหูพจน์เท่านั้น")})
else
plurals = m_headword_utilities.parse_term_list_with_modifiers {
paramname = {2, "pl"},
forms = args[2],
splitchar = ",",
}
-- Check for special plural signals
local mode = nil
local pl1 = plurals[1]
if pl1 and #pl1.term == 1 then
mode = pl1.term
if mode == "?" or mode == "!" or mode == "-" or mode == "~" then
pl1.term = nil
if next(pl1) then
error(("Can't specify inline modifiers with plural code '%s'"):format(mode))
end
remove(plurals, 1) -- Remove the mode parameter
elseif mode ~= "+" and mode ~= "#" then
error(("Unexpected plural code '%s'"):format(mode))
end
end
if mode == "?" then
-- Plural is unknown
insert(data.categories, langname .. " " .. category_plpos .. " with unknown or uncertain plurals")
elseif mode == "!" then
-- Plural is not attested
insert(data.inflections, {label = "plural not attested"})
insert(data.categories, langname .. " " .. category_plpos .. " with unattested plurals")
if plurals[1] then
error("Can't specify any plurals along with unattested plural code '!'")
end
elseif mode == "-" then
-- Uncountable noun; may occasionally have a plural
insert(data.categories, category_plpos .. "นับไม่ได้" .. langname)
-- If plural forms were given explicitly, then show "usually"
if plurals[1] then
insert(data.inflections, {label = "โดยปกติ" .. glossary_link("นับไม่ได้")})
insert(data.categories, category_plpos .. "นับได้" .. langname)
else
insert(data.inflections, {label = glossary_link("นับไม่ได้")})
end
else
-- Countable or mixed countable/uncountable
if not plurals[1] and not is_proper then
plurals[1] = {term = "+"}
end
if mode == "~" then
-- Mixed countable/uncountable noun, always has a plural
insert(data.inflections, {label = glossary_link("นับได้") .. "และ" .. glossary_link("นับไม่ได้")})
insert(data.categories, category_plpos .. "นับไม่ได้" .. langname)
insert(data.categories, category_plpos .. "นับได้" .. langname)
elseif plurals[1] then
-- Countable nouns
insert(data.categories, category_plpos .. "นับได้" .. langname)
else
-- Uncountable nouns
insert(data.categories, category_plpos .. "นับไม่ได้" .. langname)
end
end
-- Gather plurals, handling requests for default plurals.
local has_default_or_hash = false
for _, pl in ipairs(plurals) do
if pl.term:find("^%+") or pl.term:find("#") then
has_default_or_hash = true
break
end
end
if has_default_or_hash then
local newpls = {}
for _, pl in ipairs(plurals) do
if pl.term == "+" then
local default_pls = com.make_plural(lemma, gender_for_make_plural)
insert_defpls(default_pls, pl, newpls)
elseif pl.term:find("^%+") then
pl.term = require(romut_module).get_special_indicator(pl.term)
local default_pls = com.make_plural(lemma, gender_for_make_plural, pl.term)
insert_defpls(default_pls, pl, newpls)
else
pl.term = replace_hash_with_lemma(pl.term, lemma)
insert(newpls, pl)
end
end
plurals = newpls
end
end
if #plurals > 1 then
insert(data.categories, langname .. " " .. category_plpos .. " with multiple plurals")
end
-- Gather masculines/feminines. For each one, generate the corresponding plural(s). `field` is the name of the
-- field containing the masculine or feminine forms (normally "m" or "f"); `gender` is "m" or "f" for the gender
-- of the forms; `inflect` is a function of one or two arguments to generate the default masculine or feminine from
-- the lemma (the arguments are the lemma and optionally a "special" flag to indicate how to handle multiword
-- lemmas, and the function is normally make_feminine or make_masculine from [[Module:es-common]]); and
-- `default_plurals` is a list into which the corresponding default plurals of the gathered or generated masculine
-- or feminine forms are stored. Note that there may be more default plurals than masculines or feminines, because
-- some terms have multiple possible plurals.
local function handle_mf(field, gender, inflect, default_plurals)
local mfs = m_headword_utilities.parse_term_list_with_modifiers {
paramname = field,
forms = args[field],
splitchar = ",",
frob = function(term)
if term == "+" then
-- Generate default masculine/feminine.
term = inflect(lemma)
else
term = replace_hash_with_lemma(term, lemma)
end
local special = require(romut_module).get_special_indicator(term)
if special then
term = inflect(lemma, special)
end
return term
end
}
for _, mf in ipairs(mfs) do
local mfpls = com.make_plural(mf.term, gender, special)
if mfpls then
for _, mfpl in ipairs(mfpls) do
local plobj = m_table.shallowCopy(mf)
plobj.term = mfpl
-- Add an accelerator for each masculine/feminine plural whose lemma
-- is the corresponding singular, so that the accelerated entry
-- that is generated has a definition that looks like
-- # {{plural of|es|MFSING}}
plobj.accel = {form = "p", lemma = mf.term}
insert(default_plurals, plobj)
end
end
end
return mfs
end
local feminine_plurals = {}
local feminines = handle_mf("f", "f", com.make_feminine, feminine_plurals)
local masculine_plurals = {}
local masculines = handle_mf("m", "m", com.make_masculine, masculine_plurals)
local function handle_mf_plural(mfplfield, gender, default_plurals, singulars)
local mfpl = m_headword_utilities.parse_term_list_with_modifiers {
paramname = mfplfield,
forms = args[mfplfield],
splitchar = ",",
}
local new_mfpls = {}
local saw_plus
for i, mfpl in ipairs(mfpl) do
local accel
if #mfpl == #singulars then
-- If same number of overriding masculine/feminine plurals as singulars,
-- assume each plural goes with the corresponding singular
-- and use each corresponding singular as the lemma in the accelerator.
-- The generated entry will have # {{plural of|es|SINGULAR}} as the
-- definition.
accel = {form = "p", lemma = singulars[i].term}
else
accel = nil
end
if mfpl.term == "+" then
-- We should never see + twice. If we do, it will lead to problems since we overwrite the values of
-- default_plurals the first time around.
if saw_plus then
error(("Saw + twice when handling %s="):format(mfplfield))
end
saw_plus = true
for _, defpl in ipairs(default_plurals) do
-- defpl is already a table and has an accel field
m_headword_utilities.combine_termobj_qualifiers_labels(defpl, mfpl)
insert(new_mfpls, defpl)
end
elseif mfpl.term:find("^%+") then
mfpl.term = require(romut_module).get_special_indicator(mfpl.term)
for _, mf in ipairs(singulars) do
local default_mfpls = com.make_plural(mf.term, gender, mfpl.term)
for _, defp in ipairs(default_mfpls) do
local mfplobj = m_table.shallowCopy(mfpl)
mfplobj.term = defp
mfplobj.accel = accel
m_headword_utilities.combine_termobj_qualifiers_labels(mfplobj, mf)
insert(new_mfpls, mfplobj)
end
end
else
mfpl.accel = accel
mfpl.term = replace_hash_with_lemma(mfpl.term, lemma)
insert(new_mfpls, mfpl)
end
end
return new_mfpls
end
if args.fpl[1] then
-- Override any existing feminine plurals.
feminine_plurals = handle_mf_plural("fpl", "f", feminine_plurals, feminines)
end
if args.mpl[1] then
-- Override any existing masculine plurals.
masculine_plurals = handle_mf_plural("mpl", "m", masculine_plurals, masculines)
end
local function parse_and_insert_noun_inflection(field, label, accel)
parse_and_insert_inflection(data, args, field, label, accel)
end
local function insert_noun_inflection(terms, label, accel)
m_headword_utilities.insert_inflection {
headdata = data,
terms = terms,
label = label,
accel = accel and {form = accel} or nil,
}
end
insert_noun_inflection(plurals, "พหูพจน์", "p")
insert_noun_inflection(feminines, "เพศหญิง", "f")
insert_noun_inflection(feminine_plurals, "เพศหญิงพหูพจน์")
insert_noun_inflection(masculines, "เพศชาย")
insert_noun_inflection(masculine_plurals, "เพศชายพหูพจน์")
parse_and_insert_noun_inflection("dim", "ตัวบอกความเล็ก")
parse_and_insert_noun_inflection("aug", "ตัวบอกความใหญ่")
parse_and_insert_noun_inflection("pej", "pejorative")
parse_and_insert_noun_inflection("dem", "คำประชานาม")
parse_and_insert_noun_inflection("fdem", "คำประชานามเพศหญิง")
-- Maybe add category 'Spanish nouns with irregular gender' (or similar)
local irreg_gender_lemma = rsub(lemma, " .*", "") -- only look at first word
if (rfind(irreg_gender_lemma, "o$") and (gender_for_irreg_ending == "f" or gender_for_irreg_ending == "mf")) or
(irreg_gender_lemma:find("a$") and (gender_for_irreg_ending == "m" or gender_for_irreg_ending == "mf")) then
insert(data.categories, "คำนาม" .. langname .. "ที่มีเพศไม่ปรกติ")
end
end
local function get_noun_params(is_proper)
return {
[1] = {list = "g", disallow_holes = true, required = not is_proper, default = "?", type = "genders",
flatten = true}, -- gender(s)
[2] = {list = "pl", disallow_holes = true}, --plural override(s)
["f"] = list_param, --feminine form(s)
["m"] = list_param, --masculine form(s)
["fpl"] = list_param, --feminine plural override(s)
["mpl"] = list_param, --masculine plural override(s)
["dim"] = list_param, --diminutive(s)
["aug"] = list_param, --diminutive(s)
["pej"] = list_param, --pejorative(s)
["dem"] = list_param, --demonym(s)
["fdem"] = list_param, --female demonym(s)
}
end
pos_functions["คำนาม"] = {
params = get_noun_params(),
func = do_noun,
}
pos_functions["คำวิสามานยนาม"] = {
params = get_noun_params("is proper"),
func = function(args, data)
do_noun(args, data, "is proper")
end,
}
-----------------------------------------------------------------------------------------
-- Verbs --
-----------------------------------------------------------------------------------------
pos_functions["คำกริยา"] = {
params = {
[1] = {},
["pres"] = list_param, --present
["pres_qual"] = {list = "pres\1_qual", allow_holes = true},
["pret"] = list_param, --preterite
["pret_qual"] = {list = "pret\1_qual", allow_holes = true},
["part"] = list_param, --participle
["part_qual"] = {list = "part\1_qual", allow_holes = true},
["pagename"] = {}, -- for testing
["noautolinktext"] = boolean_param,
["noautolinkverb"] = boolean_param,
["attn"] = boolean_param,
},
func = function(args, data)
local preses, prets, parts
if args.attn then
insert(data.categories, "Requests for attention concerning " .. langname)
return
end
local es_verb = require(es_verb_module)
local alternant_multiword_spec = es_verb.do_generate_forms(args, "es-verb", data.heads[1])
local specforms = alternant_multiword_spec.forms
local function slot_exists(slot)
return specforms[slot] and specforms[slot][1]
end
local function do_finite(slot_tense, label_tense)
-- Use pres_3s if it exists and pres_1s doesn't exist (e.g. impersonal verbs); similarly for pres_3p (only3p verbs);
-- but fall back to pres_1s if neither pres_1s nor pres_3s nor pres_3p exist (e.g. [[empedernir]]).
local has_1s = slot_exists(slot_tense .. "_1s")
local has_3s = slot_exists(slot_tense .. "_3s")
local has_3p = slot_exists(slot_tense .. "_3p")
if has_1s or (not has_3s and not has_3p) then
return {
slot = slot_tense .. "_1s",
label = ("บุรุษที่หนึ่งเอกพจน์%s"):format(label_tense),
}
elseif has_3s then
return {
slot = slot_tense .. "_3s",
label = ("บุรุษที่สามเอกพจน์%s"):format(label_tense),
}
else
return {
slot = slot_tense .. "_3p",
label = ("บุรุษที่สามพหูพจน์%s"):format(label_tense),
}
end
end
preses = do_finite("pres", "ปัจจุบันกาล")
prets = do_finite("pret", "อดีตกาลสิ้นสุด")
parts = {
slot = "pp_ms",
label = "รูปกริยาขยายอดีตกาล",
}
if args.pres[1] or args.pret[1] or args.part[1] then
track("verb-old-multiarg")
end
local function strip_brackets(qualifiers)
if not qualifiers then
return nil
end
local stripped_qualifiers = {}
for _, qualifier in ipairs(qualifiers) do
local stripped_qualifier = qualifier:match("^%[(.*)%]$")
if not stripped_qualifier then
error("Internal error: Qualifier should be surrounded by brackets at this stage: " .. qualifier)
end
insert(stripped_qualifiers, stripped_qualifier)
end
return stripped_qualifiers
end
local function do_verb_form(args, qualifiers, slot_desc, skip_if_empty)
local forms
local to_insert
if #args == 0 then
forms = specforms[slot_desc.slot]
if not forms or #forms == 0 then
if skip_if_empty then
return
end
forms = {{form = "-"}}
end
elseif #args == 1 and args[1] == "-" then
forms = {{form = "-"}}
else
forms = {}
for i, arg in ipairs(args) do
local qual = qualifiers[i]
if qual then
-- FIXME: It's annoying we have to add brackets and strip them out later. The inflection
-- code adds all footnotes with brackets around them; we should change this.
qual = {"[" .. qual .. "]"}
end
local form = arg
if not args.noautolinkverb then
-- [[Module:inflection utilities]] already loaded by [[Module:es-verb]]
form = require(inflection_utilities_module).add_links(form)
end
insert(forms, {form = form, footnotes = qual})
end
end
if forms[1].form == "-" then
to_insert = {label = "ไม่มี" .. slot_desc.label}
else
local into_table = {label = slot_desc.label}
for _, form in ipairs(forms) do
local qualifiers = strip_brackets(form.footnotes)
-- Strip redundant brackets surrounding entire form. These may get generated e.g.
-- if we use the angle bracket notation with a single word.
local stripped_form = rmatch(form.form, "^%[%[([^%[%]]*)%]%]$") or form.form
-- Don't include accelerators if brackets remain in form, as the result will be wrong.
-- FIXME: For now, don't include accelerators. We should use {{es-verb form of}} instead.
-- local this_accel = not stripped_form:find("%[%[") and accel or nil
local this_accel = nil
insert(into_table, {term = stripped_form, q = qualifiers, accel = this_accel})
end
to_insert = into_table
end
insert(data.inflections, to_insert)
end
local skip_pres_if_empty
if alternant_multiword_spec.no_pres1_and_sub then
insert(data.inflections, {label = "ไม่มีบุรุษที่หนึ่งเอกพจน์ปัจจุบันกาล"})
insert(data.inflections, {label = "no present subjunctive"})
end
if alternant_multiword_spec.no_pres_stressed then
insert(data.inflections, {label = "no stressed present indicative or subjunctive"})
skip_pres_if_empty = true
end
if alternant_multiword_spec.only3s then
insert(data.inflections, {label = glossary_link("อบุรุษ")})
elseif alternant_multiword_spec.only3sp then
insert(data.inflections, {label = "บุรุษที่สามเท่านั้น"})
elseif alternant_multiword_spec.only3p then
insert(data.inflections, {label = "บุรุษที่สามพหูพจน์เท่านั้น"})
end
do_verb_form(args.pres, args.pres_qual, preses, skip_pres_if_empty)
do_verb_form(args.pret, args.pret_qual, prets)
do_verb_form(args.part, args.part_qual, parts)
-- Add categories.
for _, cat in ipairs(alternant_multiword_spec.categories) do
insert(data.categories, cat)
end
-- If the user didn't explicitly specify head=, or specified exactly one head (not 2+) and we were able to
-- incorporate any links in that head into the 1= specification, use the infinitive generated by
-- [[Module:es-verb]] in place of the user-specified or auto-generated head. This was copied from
-- [[Module:it-headword]], where doing this gets accents marked on the verb(s). We don't have accents marked on
-- the verb but by doing this we do get any footnotes on the infinitive propagated here. Don't do this if the
-- user gave multiple heads or gave a head with a multiword-linked verbal expression such as Italian
-- '[[dare esca]] [[al]] [[fuoco]]' (FIXME: give Spanish equivalent).
if #data.user_specified_heads == 0 or (
#data.user_specified_heads == 1 and alternant_multiword_spec.incorporated_headword_head_into_lemma
) then
data.heads = {}
for _, lemma_obj in ipairs(alternant_multiword_spec.forms.infinitive_linked) do
local quals, refs = require(inflection_utilities_module).
convert_footnotes_to_qualifiers_and_references(lemma_obj.footnotes)
insert(data.heads, {term = lemma_obj.form, q = quals, refs = refs})
end
end
end
}
-----------------------------------------------------------------------------------------
-- Phrases --
-----------------------------------------------------------------------------------------
pos_functions["วลี"] = {
params = {
["g"] = {list = true, disallow_holes = true, type = "genders", flatten = true},
["m"] = list_param,
["f"] = list_param,
},
func = function(args, data)
validate_genders(args.g)
data.genders = args.g
parse_and_insert_inflection(data, args, "m", "เพศชาย")
parse_and_insert_inflection(data, args, "f", "เพศหญิง")
end,
}
-----------------------------------------------------------------------------------------
-- Suffix forms --
-----------------------------------------------------------------------------------------
pos_functions["รูปปัจจัย"] = {
params = {
[1] = {required = true, list = true, disallow_holes = true},
["g"] = {list = true, disallow_holes = true, type = "genders", flatten = true},
},
func = function(args, data)
validate_genders(args.g)
data.genders = args.g
local suffix_type = {}
for _, typ in ipairs(args[1]) do
insert(suffix_type, "ปัจจัยสร้าง" .. typ)
end
insert(data.inflections, {label = "รูปผันของ " .. require("Module:table").serialCommaJoin(suffix_type, {conj = "หรือ"})})
end,
}
return export
gq1k0eeaavj9bz3urnfi36gzu0m3d37
รด
0
44038
5729202
5721496
2026-07-20T03:35:38Z
Alifshinobi
397
/* รากศัพท์ */
5729202
wikitext
text/x-wiki
{{also/auto}}
== ภาษาไทย ==
=== รากศัพท์ ===
ร่วมเชื้อสายกับ{{cog|tts|หด}}, {{cog|lo|ຫົດ,ຮົດ}}, {{cog|nod|ᩉᩫ᩠ᨯ}}, {{cog|khb|ᦷᦠᧆ}}, {{cog|shn|ႁူတ်း}}
=== การออกเสียง ===
{{th-pron}}
=== คำกริยา ===
{{th-verb}}
# [[เท]] [[ราด]] [[สาด]] [[ฉีด]] [[หรือ]][[โปรย]][[น้ำ]][[หรือ]][[ของเหลว]][[ไป]][[ยัง]][[สิ่งใดสิ่งหนึ่ง]][[เพื่อ]][[ให้]][[เปียก]][[หรือ]][[ให้]][[เปียก]][[ชุ่ม]]
#: {{ux|th|รดน้ำต้นไม้}}
#: {{ux|th|เอาน้ำรดตัว}}
# [[โดย]][[ปริยาย]][[หมาย]][[ถึง]][[อาการ]][[ที่]][[คล้ายคลึง]][[เช่น]][[นั้น]]
#: {{ux|th|เยี่ยวรดที่นอน}}
#: {{ux|th|นกขี้รดหลังคา}}
1fp69laaqz01co5cpx6g0mb294cr0on
ညီမ
0
46790
5729176
5719763
2026-07-20T03:11:03Z
~2026-32817-27
19068
5729176
wikitext
text/x-wiki
{{also/auto}}
== ภาษาพม่า ==
=== รากศัพท์ ===
{{suffix|my|ညီ|-မ}}
=== การออกเสียง ===
{{my-IPA}}
=== คำนาม ===
{{my-noun}}
# [[น้องสาว]]
{{topics|my|ครอบครัว}}
m0lr8wrno7jpc15y3ni679iq7ahzflp
ຫົດ
0
49402
5729201
1889913
2026-07-20T03:35:17Z
Alifshinobi
397
/* รากศัพท์ 1 */
5729201
wikitext
text/x-wiki
{{also/auto}}
== ภาษาลาว ==
=== การออกเสียง ===
{{lo-pron}}
=== รากศัพท์ 1 ===
ร่วมเชื้อสายกับ{{cog|th|รด}}, {{cog|tts|หด}}, {{cog|nod|ᩉᩫ᩠ᨯ}}, {{cog|khb|ᦷᦠᧆ}}, {{cog|shn|ႁူတ်း}}
==== รูปแบบอื่น ====
* {{l|lo|ຮົດ}}
==== คำกริยา ====
{{lo-verb}}
# {{lb|lo|สกรรม}} [[รด]]
=== รากศัพท์ 2 ===
{{inh+|lo|tai-pro|*ʰrotᴰ}}; ร่วมเชื้อสายกับ{{cog|th|หด}}, {{cog|shn|ႁူတ်း}} หรือ {{m|shn|ႁွတ်း}}
==== คำกริยา ====
{{lo-verb}}
# {{lb|lo|อกรรม}} [[หด]]
kyr1wqo5g9hivpc1zjxvyistutzkg63
มอดูล:form of/data/1
828
51425
5729203
5552183
2026-07-20T03:38:21Z
Octahedron80
267
5729203
Scribunto
text/plain
--[=[
This module lists the more common recognized inflection tags, along with their shortcut aliases, the corresponding
glossary entry or page describing the tag, and the corresponding wikidata entry. The less common tags are in
[[Module:form of/data/2]]. We divide the tags this way to save memory space. Be careful adding more tags to this module;
add them to the other module unless you're sure they are common.
TAGS is a table where keys are the canonical form of an inflection tag and the corresponding values are tables
describing the tags, consisting of the following keys:
- 1: Type of the tag ("person", "number", "gender", "case", "animacy", "tense-aspect", "mood", "voice-valence",
etc.).
- 2: Anchor or page describing the inflection tag, with the following values:
* nil: No link.
* APPENDIX: Anchor in [[Appendix:Glossary]] whose name is the same as the tag
* WIKT: Page in the English Wiktionary whose name is the same as the tag.
* WP: Page in the English Wikipedia whose name is the same as the tag.
* A string: If prefixed by 'w:' the specified page in the English Wikipedia. If prefixed by 'wikt:', the
specified page in the English Wiktionary. Otherwise, an anchor in [[Appendix:Glossary]].
NOTE: GLOSSARY ANCHORS ARE PREFERRED. Other types of entries should be migrated to the glossary, with links to
Wikipedia and/or Wiktionary entries as appropriate.
- 3: List of shortcuts (i.e. aliases for the inflection tag) or a single shortcut string, or nil.
- 4: Numeric value of Wikidata identifier (see wikidata.org) for the concept most closely describing this tag.
(The actual Wikidata identifier is a string formed by prefixing the number with Q.)
- display: If specified, consists of text to display in the definition line, in lieu of the canonical form of the
inflection tag. If there is a glossary entry, the displayed text forms the right side of the two-part
glossary link.
- no_space_on_left: If specified, don't display a space to the left of the tag. Used for punctuation.
- no_space_on_right: If specified, don't display a space to the right of the tag. Used for punctuation.
SHORTCUTS is a table mapping shortcut aliases to canonical inflection tag names. Shortcuts are of one of three types:
(1) A simple alias of a tag. These do not need to be entered explicitly into the table; code at the end of the module
automatically fills in these entries based on the information in TAGS.
(2) An alias to a multipart tag. For example, the alias "mf" maps to the multipart tag "m//f", which will in turn be
expanded into the canonical multipart tag {"masculine", "feminine"}, which will display as (approximately)
"[[Appendix:Glossary#gender|masculine]] and [[Appendix:Glossary#gender|feminine]]". The number of such aliases
should be liminted, and should cover only the most common combinations.
Normally, multipart tags are displayed using serialCommaJoin() in [[Module:table]] to appropriately join the display
form of the individual tags using commas and/or "and". However, some multipart tags are displayed specially; see
DISPLAY_HANDLERS below. Note that aliases to multipart tags can themselves contain simple aliases in them.
(3) An alias to a list of multiple tags (which may themselves be simple or multipart aliases). Specifying the alias is
exactly equivalent to specifying the tags in the list in order, one after another. An example is "1s", which maps to
the list {"1", "s"}. The number of such aliases should be limited, and should cover only the most common
combinations.
NOTE: In some cases below, multiple tags point to the same wikidata, because Wikipedia considers them synonyms. Examples
are indirect case vs. objective case vs. oblique case, and inferential mood vs. renarrative mood. We do this because
(a) we want to allow users to choose their own terminology; (b) we want to be able to use the terminology most common
for the language in question; (c) terms considered synonyms may or may not actually be synonyms, as different languages
may use the terms differently. For example, although the Wikipedia page on [[w:inferential mood]] claims that
inferential and renarrative moods are the same, the page on [[w:Bulgarian_verbs#Evidentials]] claims that Bulgarian has
both, and that they are not the same.
]=]
local m_form_of_data = require("Module:form of/data")
local APPENDIX = m_form_of_data.APPENDIX
local WP = m_form_of_data.WP
local WIKT = m_form_of_data.WIKT
local tags = {}
local shortcuts = {}
----------------------- Person -----------------------
tags["บุรุษที่หนึ่ง"] = {
"person",
APPENDIX,
{"1", "first-person", "first person"},
21714344,
}
tags["บุรุษที่สอง"] = {
"person",
APPENDIX,
{"2", "second-person", "second person"},
51929049,
}
tags["บุรุษที่สาม"] = {
"person",
APPENDIX,
{"3", "third-person", "third person"},
51929074,
}
tags["อบุรุษ"] = {
"person",
APPENDIX,
{"impers", "impersonal"},
}
shortcuts["12"] = "1//2"
shortcuts["13"] = "1//3"
shortcuts["23"] = "2//3"
shortcuts["123"] = "1//2//3"
----------------------- Number -----------------------
tags["เอกพจน์"] = {
"number",
APPENDIX,
{"s", "sg", "singular", "singular number"},
110786,
}
tags["ทวิพจน์"] = {
"number",
APPENDIX,
{"d", "du", "dual", "dual number"},
110022,
}
tags["พหูพจน์"] = {
"number",
APPENDIX,
{"p", "pl", "plural", "plural number"},
146786,
}
tags["single-possession"] = {
"number",
"เอกพจน์",
"spos",
110786, -- Singular
}
tags["multiple-possession"] = {
"number",
"พหูพจน์",
"mpos",
146786, -- Plural
}
shortcuts["1s"] = {"1", "s"}
shortcuts["2s"] = {"2", "s"}
shortcuts["3s"] = {"3", "s"}
shortcuts["1d"] = {"1", "d"}
shortcuts["2d"] = {"2", "d"}
shortcuts["3d"] = {"3", "d"}
shortcuts["1p"] = {"1", "p"}
shortcuts["2p"] = {"2", "p"}
shortcuts["3p"] = {"3", "p"}
----------------------- Gender -----------------------
tags["เพศชาย"] = {
"gender",
"เพศ",
{"m", "masculine"},
499327,
}
-- This is useful e.g. in Swedish.
tags["natural masculine"] = {
"gender",
"เพศ",
"natm",
}
tags["เพศหญิง"] = {
"gender",
"เพศ",
{"f", "feminine"},
1775415,
}
tags["เพศกลาง"] = {
"gender",
"เพศ",
{"n", "neuter"},
1775461,
}
tags["เพศรวม"] = {
"gender",
"เพศ",
{"c", "common"},
1305037,
}
tags["nonvirile"] = {
"gender",
APPENDIX,
"nv",
}
shortcuts["mf"] = "m//f"
shortcuts["mn"] = "m//n"
shortcuts["fn"] = "f//n"
shortcuts["mfn"] = "m//f//n"
----------------------- Animacy -----------------------
-- (may be useful sometimes for [[Module:object usage]].)
tags["มีชีวิต"] = {
"animacy",
APPENDIX,
{"an", "animate"},
51927507,
}
tags["ไม่มีชีวิต"] = {
"animacy",
APPENDIX,
{"in", "inan", "inanimate"},
51927539,
}
tags["บุคคล"] = {
"animacy",
nil,
{"pr", "pers", "personal"},
63302102,
}
----------------------- Tense/aspect -----------------------
tags["ปัจจุบันกาล"] = {
"tense-aspect",
APPENDIX,
{"pres", "present", "present tense"},
192613,
}
tags["อดีตกาล"] = {
"tense-aspect",
APPENDIX,
{"past", "past tense"},
1994301,
}
tags["อนาคตกาล"] = {
"tense-aspect",
APPENDIX,
{"fut", "futr", "future", "future tense"},
501405,
}
tags["future perfect"] = {
"tense-aspect",
APPENDIX,
{"futp", "fperf"},
1234617,
}
tags["ไม่ใช่อดีตกาล"] = {
"tense-aspect",
APPENDIX,
{"npast", "non-past", "non-past tense"},
16916993,
}
tags["progressive"] = {
"tense-aspect",
APPENDIX,
"prog",
56653945,
}
tags["อดีตกาลสิ้นสุด"] = {
"tense-aspect",
APPENDIX,
{"สิ้นสุด", "pret", "preterite"},
442485,
}
tags["สมบูรณ์"] = {
"tense-aspect",
APPENDIX,
{"perf", "perfect"},
625420,
}
tags["ไม่สมบูรณ์"] = {
"tense-aspect",
APPENDIX,
{"impf", "imperf", "imperfect"},
}
tags["อภิสมบูรณ์"] = {
"tense-aspect",
APPENDIX,
{"plup", "pluperf", "pluperfect"},
623742,
}
tags["aorist"] = {
"tense-aspect",
"aorist tense",
{"aor", "aori"},
216497,
}
tags["past historic"] = {
"tense-aspect",
nil,
"phis",
442485, -- Preterite
}
tags["imperfective"] = {
"tense-aspect",
APPENDIX,
{"impfv", "imperfv"},
371427,
}
tags["perfective"] = {
"tense-aspect",
APPENDIX,
{"pfv", "perfv"},
1424306,
}
-- เปลี่ยนลำดับตามคำแปลไทย
shortcuts["spast"] = {"past", "simple"}
shortcuts["simple past"] = {"past", "simple"}
shortcuts["spres"] = {"present", "simple"}
shortcuts["simple present"] = {"present", "simple"}
----------------------- Mood -----------------------
tags["มาลาสั่ง"] = {
"mood",
APPENDIX,
{"imp", "impr", "impv", "imperative", "imperative mood"},
22716,
}
tags["มาลาบอกเล่า"] = {
"mood",
APPENDIX,
{"ind", "indc", "indic", "indicative", "indicative mood"},
682111,
}
tags["มาลาสมมุติ"] = {
"mood",
APPENDIX,
{"sub", "subj", "subjunctive", "subjunctive mood"},
473746,
}
tags["มาลาเงื่อนไข"] = {
"mood",
APPENDIX,
{"cond", "conditional", "conditional mood"},
625581,
}
tags["modal"] = {
"mood",
"w:modality (linguistics)",
"mod",
1243600,
}
tags["optative"] = {
"mood",
"optative mood",
{"opta", "opt"},
527205,
}
tags["มาลาขอร้อง"] = {
"mood",
APPENDIX,
{"juss", "jussive", "jussive mood"},
462367,
}
tags["hortative"] = {
"mood",
WP,
"hort",
5906629,
}
----------------------- Voice/valence -----------------------
-- This tag type combines what is normally called "voice" (active, passive, middle, mediopassive) with other tags that
-- aren't normally called voice but are similar in that they control the valence/valency (number and structure of the
-- arguments of a verb).
tags["กรรตุวาจก"] = {
"voice-valence",
APPENDIX,
{"act", "actv", "active", "active voice"},
1317831,
}
tags["มัธยวาจก"] = {
"voice-valence",
APPENDIX,
{"mid", "midl", "middle", "middle voice"},
}
tags["กรรมวาจก"] = {
"voice-valence",
APPENDIX,
{"pass", "pasv", "passive", "passive voice"},
1194697,
}
tags["มัธยกรรมวาจก"] = {
"voice-valence",
APPENDIX,
{"mp", "mpass", "mpasv", "mpsv", "mediopassive", "mediopassive voice"},
1601545,
}
tags["สะท้อน"] = {
"voice-valence",
"คำกริยาสะท้อน",
{"refl", "reflexive", "reflexive verb"},
13475484, -- for "reflexive verb"
}
tags["สกรรม"] = {
"voice-valence",
"คำสกรรมกริยา",
{"tr", "vt", "transitive", "transitive verb"},
1774805, -- for "transitive verb"
}
tags["อกรรม"] = {
"voice-valence",
"คำอกรรมกริยา",
{"intr", "vi", "intransitive", "intransitive verb"},
1166153, -- for "intransitive verb"
}
tags["ทวิกรรม"] = {
"voice-valence",
"คำทวิกรรมกริยา",
{"ditr", "ditransitive", "ditransitive verb"},
2328313, -- for "ditransitive verb"
}
tags["ก่อเหตุ"] = {
"voice-valence",
"คำกริยาก่อเหตุ",
{"caus", "causative", "causative verb"},
56677011, -- for "causative verb"
}
----------------------- Non-finite -----------------------
tags["รูปกริยากลาง"] = {
"non-finite",
APPENDIX,
{"inf", "infinitive"},
179230,
}
-- A form found in Portuguese and Galician, as well as in Hungarian. This is probably unnecessary and can be replaced
-- with the regular "infinitive" tag. A personal infinitive is not a separate infinitive from the plain infinitive, just
-- an inflection of the infinitive.
tags["personal infinitive"] = {
"non-finite",
"w:Portuguese verb conjugation",
"pinf",
}
tags["รูปกริยาขยาย"] = {
"non-finite",
APPENDIX,
{"part", "ptcp", "participle", "พาร์ทิซิเพิล"},
814722,
}
tags["คำกริยานาม"] = {
"non-finite",
APPENDIX,
{"vnoun", "verbal noun"},
1350145,
}
tags["รูปกริยาเป็นนาม"] = {
"non-finite",
APPENDIX,
{"ger", "gerund"},
1923028,
}
tags["supine"] = {
"non-finite",
APPENDIX,
"sup",
548470,
}
tags["transgressive"] = {
"non-finite",
APPENDIX,
nil,
904896,
}
----------------------- Case -----------------------
tags["อปาทานการก"] = {
"case",
APPENDIX,
{"abl", "ablative", "ablative case"},
156986,
}
tags["กรรมการก"] = {
"case",
APPENDIX,
{"acc", "accusative", "accusative case"},
146078,
}
tags["สัมปทานการก"] = {
"case",
APPENDIX,
{"dat", "dative", "dative case"},
145599,
}
tags["สัมพันธการก"] = {
"case",
APPENDIX,
{"gen", "genitive", "genitive case"},
146233,
}
tags["กรณการก"] = {
"case",
APPENDIX,
{"ins", "instrumental", "instrumental case"},
192997,
}
tags["อธิกรณการก"] = {
"case",
APPENDIX,
{"loc", "locative", "locative case"},
202142,
}
tags["กรรตุการก"] = {
"case",
APPENDIX,
{"nom", "nominative", "nominative case"},
131105,
}
tags["prepositional"] = {
"case",
"prepositional case",
{"pre", "prep"},
2114906,
}
tags["สัมโพธนการก"] = {
"case",
APPENDIX,
{"voc", "vocative", "vocative case"},
185077,
}
----------------------- State -----------------------
tags["construct"] = {
"state",
"construct state",
{"cons", "construct state"},
1641446,
display = "construct state",
}
tags["ชี้เฉพาะ"] = {
"state",
APPENDIX,
{"def", "defn", "definite", "definite state"},
53997851,
}
tags["ไม่ชี้เฉพาะ"] = {
"state",
APPENDIX,
{"indef", "indf", "indefinite", "indefinite state"},
53997857,
}
tags["possessive"] = {
"state",
WP,
"poss",
2105891,
}
tags["แข็ง"] = {
"state",
"ไม่ชี้เฉพาะ",
{"str", "strong"},
53997857, -- Indefinite
}
tags["อ่อน"] = {
"state",
"ชี้เฉพาะ",
{"wk", "weak"},
53997851, -- Definite
}
tags["ผสม"] = {
"state",
APPENDIX,
{"mix", "mixed"},
63302161,
}
tags["คุณลักษณะ"] = {
"state",
APPENDIX,
{"attr", "attributive"},
}
tags["ภาคแสดง"] = {
"state",
APPENDIX,
{"pred", "predicative"},
}
----------------------- Degrees of comparison -----------------------
tags["positive degree"] = {
"comparison",
"positive",
{"posd", "positive"},
3482678, -- Doesn't exist in English; only in Czech, Estonian, Finnish and various Nordic languages.
}
tags["ขั้นกว่า"] = {
"comparison",
APPENDIX,
{"comd", "comparative", "comparative degree"},
14169499,
}
tags["ขั้นสุด"] = {
"comparison",
APPENDIX,
{"supd", "superlative", "superlative degree"},
1817208,
}
----------------------- Register -----------------------
----------------------- Deixis -----------------------
----------------------- Clusivity -----------------------
----------------------- Inflectional class -----------------------
tags["pronominal"] = {
"class",
WIKT,
"pron",
12721180, -- for "pronominal attribute", existing only in the Romanian Wikipedia
}
----------------------- Attitude -----------------------
-- This is a vague tag type grouping augmentative, diminutive and pejorative, which generally indicate the speaker's
-- attitude towards the object in question (as well as often indicating size).
tags["ตัวบอกความใหญ่"] = {
"attitude",
APPENDIX,
{"aug", "augmentative"},
1358239,
}
tags["ตัวบอกความเล็ก"] = {
"attitude",
APPENDIX,
{"dim", "diminutive"},
108709,
}
tags["pejorative"] = {
"attitude",
APPENDIX,
"pej",
545779,
}
----------------------- Sound changes -----------------------
tags["contracted"] = {
"sound change",
nil,
"contr",
126473,
}
tags["uncontracted"] = {
"sound change",
nil,
"uncontr",
}
----------------------- Misc grammar -----------------------
shortcuts["past-cl"] = {"past", "-", "tense", "clause"}
shortcuts["pres-cl"] = {"pres", "-", "tense", "clause"}
shortcuts["fut-cl"] = {"fut", "-", "tense", "clause"}
shortcuts["ind-cl"] = {"ind", "clause"}
shortcuts["sub-cl"] = {"sub", "clause"}
shortcuts["past-sub-cl"] = {"past", "sub", "clause"}
shortcuts["pres-sub-cl"] = {"pres", "sub", "clause"}
shortcuts["fut-sub-cl"] = {"fut", "sub", "clause"}
shortcuts["cond-cl"] = {"cond", "clause"}
shortcuts["cond-past-cl"] = {"cond", "past", "clause"}
tags["สามัญ"] = {
"grammar",
nil,
{"sim", "simple"},
}
tags["สั้น"] = {
"grammar",
nil,
{"short"},
}
tags["ยาว"] = {
"grammar",
nil,
{"long"},
}
tags["form"] = {
"grammar",
}
tags["เชิงคุณศัพท์"] = {
"grammar",
WIKT,
{"adj", "adjectival"},
}
tags["เชิงกริยาวิเศษณ์"] = {
"grammar",
APPENDIX,
{"adv", "adverbial"},
}
tags["ปฏิเสธ"] = {
"grammar",
"w:affirmation and negation",
{"neg", "negative"},
63302088,
}
tags["nominalized"] = {
"grammar",
nil,
"nomz",
4683152, -- entry for "nominalized adjective"
}
tags["nominalization"] = {
"grammar",
nil,
"nomzn",
1500667,
}
tags["รากศัพท์"] = {
"grammar",
nil,
{"root", "ราก", "ธาตุ"},
111029,
}
tags["ต้นเค้าศัพท์"] = {
"grammar",
nil,
"stem",
210523,
}
tags["ไม่อิสระ"] = {
"grammar",
nil,
{"dep", "dependent"},
1122094, -- entry for "dependent clause"
}
tags["อิสระ"] = {
"grammar",
nil,
{"indep", "independent"},
1419215, -- entry for "independent clause"
}
tags["ประธาน"] = {
"grammar",
APPENDIX,
{"sbj", "subject"}, -- sub and subj used for subjunctive
164573,
}
tags["กรรม"] = {
"grammar",
APPENDIX,
{"obj", "object"},
175026,
}
tags["กรรมตรง"] = {
"grammar",
APPENDIX,
{"dirobj", "direct object"},
2990574,
}
tags["กรรมรอง"] = {
"grammar",
APPENDIX,
{"indirobj", "indirect object"},
1094061,
}
tags["กาล"] = {
"grammar",
APPENDIX,
"tense",
177691,
}
tags["อนุประโยค"] = {
"grammar",
APPENDIX,
"clause",
117364,
}
tags["วลี"] = {
"grammar",
APPENDIX,
"phrase",
187931,
}
----------------------- Other tags -----------------------
-- This consists of non-content words like "and" as well as punctuation characters. If the punctuation characters appear
-- by themselves as tags, we special-case the handling of surrounding spaces so the output looks correct.
tags["และ"] = {
"other",
nil,
{"and"},
}
-- HACK! "in" is a shortcut for "inanimate" so create "!in" to display "in". We should generalize this like for labels.
tags["!in"] = {
"other",
display = "ใน",
}
tags[","] = {
"other",
no_space_on_left = true,
}
tags[":"] = {
"other",
no_space_on_left = true,
}
tags["/"] = {
"other",
no_space_on_left = true,
no_space_on_right = true,
}
tags["("] = {
"other",
no_space_on_right = true,
}
tags[")"] = {
"other",
no_space_on_left = true,
}
tags["["] = {
"other",
no_space_on_right = true,
}
tags["]"] = {
"other",
no_space_on_left = true,
}
tags["-"] = { -- regular hyphen-minus
"other",
no_space_on_left = true,
no_space_on_right = true,
}
----------------------- Create the shortcuts list -----------------------
m_form_of_data.finalize(tags, shortcuts)
return {tags = tags, shortcuts = shortcuts}
lnm507eh7mim6qr67vks6jkta2jzb95
แพบ
0
134898
5729252
1389334
2026-07-20T04:14:00Z
Alifshinobi
397
Alifshinobi ย้ายหน้า [[เภบ]] ไปยัง [[แพบ]]: สะกดผิด
1389334
wikitext
text/x-wiki
== ภาษาคำเมือง ==
=== คำคุณศัพท์ ===
{{nod-adj}}
# [[แบน]]
0dnz9q8krfplt0vloavxpqjp9iminay
5729255
5729252
2026-07-20T04:15:37Z
Alifshinobi
397
5729255
wikitext
text/x-wiki
== ภาษาคำเมือง ==
=== การออกเสียง ===
* {{IPA|nod|/pɛːp˦˨/|a=เชียงใหม่}}
=== คำคุณศัพท์ ===
{{nod-adj|tl=1}}
# {{altform|nod|ᨻᩯ᩠ᨷ|t=[[แบน]]}}
1f8d2y7h8we4bnt22a49r4wq7wxywul
หญ้าม
0
134912
5729078
1384722
2026-07-20T01:59:57Z
Alifshinobi
397
5729078
wikitext
text/x-wiki
== ภาษาคำเมือง ==
=== การออกเสียง ===
* {{IPA|nod|/ɲaːm˦˦ʔ/|a=เชียงใหม่}}
=== คำกริยา ===
{{nod-verb}}
# {{lb|nod|อกรรม}} {{pronunciation spelling of|nod|ᩉ᩠ᨿ᩶ᩣ᩠ᨾ|t=[[ย่าม]][[ใจ]], [[เหิม]]; [[คุ้น]]; [[ติดใจ]]; [[ต้องการ]][[ดัง]][[เดิม]][[อีก]]}}
8hdbjgbhs5of0qe9m4q0csg7q2sdbri
ข้อง
0
134928
5729160
5724101
2026-07-20T02:49:55Z
Alifshinobi
397
/* ภาษาคำเมือง */
5729160
wikitext
text/x-wiki
{{also/auto}}
== ภาษาไทย ==
=== การออกเสียง ===
{{th-pron|ค็่อง}}
=== รากศัพท์ 1 ===
ร่วมเชื้อสายกับ{{cog|lo|ຂ້ອງ}}, {{cog|twh|ꪌꪮꪉꫂ}}, {{cog|shn|ၶွင်ႈ}}, {{cog|za|giengh}}, {{cog|zzj|hweng}}
==== คำนาม ====
{{th-noun}}
# [[เครื่อง]][[จัก]][[สาน]][[สำหรับ]][[ใส่]][[ปลา]] [[ปู]] [[เป็นต้น]] [[รูป]][[คล้าย]][[ตะกร้า]][[ปาก]][[แคบ]][[อย่าง]][[คอ]][[หม้อ]][[ดิน]] [[ก้น]][[สี่เหลี่ยมจัตุรัส]] [[มี]][[ขนาด]][[ต่าง ๆ]]
=== รากศัพท์ 2 ===
ร่วมเชื้อสายกับ{{cog|lo|ຂ້ອງ}}, {{cog|shn|ၶွင်ႈ}}
==== คำกริยา ====
{{th-verb|~}}
# [[ติด]][[อยู่]]
== ภาษาคำเมือง ==
=== การออกเสียง ===
* {{IPA|nod|/xɔŋ˦˦ʔ/|a=เชียงใหม่}}
=== คำกริยา ===
{{nod-verb}}
# {{lb|nod|สกรรม}} {{altform|nod|ᨡᩬ᩶ᨦ|t=[[สะดุด]], [[เกี่ยว]], [[ข้อง#ภาษาไทย|ข้อง]] [ [[ติด]][[อยู่]] ]}}
nygi004hwvc79tbaef83i4kpqc1s8wc
5729161
5729160
2026-07-20T02:50:17Z
Alifshinobi
397
/* รากศัพท์ 2 */
5729161
wikitext
text/x-wiki
{{also/auto}}
== ภาษาไทย ==
=== การออกเสียง ===
{{th-pron|ค็่อง}}
=== รากศัพท์ 1 ===
ร่วมเชื้อสายกับ{{cog|lo|ຂ້ອງ}}, {{cog|twh|ꪌꪮꪉꫂ}}, {{cog|shn|ၶွင်ႈ}}, {{cog|za|giengh}}, {{cog|zzj|hweng}}
==== คำนาม ====
{{th-noun}}
# [[เครื่อง]][[จัก]][[สาน]][[สำหรับ]][[ใส่]][[ปลา]] [[ปู]] [[เป็นต้น]] [[รูป]][[คล้าย]][[ตะกร้า]][[ปาก]][[แคบ]][[อย่าง]][[คอ]][[หม้อ]][[ดิน]] [[ก้น]][[สี่เหลี่ยมจัตุรัส]] [[มี]][[ขนาด]][[ต่าง ๆ]]
=== รากศัพท์ 2 ===
ร่วมเชื้อสายกับ{{cog|lo|ຂ້ອງ}}, {{cog|nod|ᨡᩬ᩶ᨦ}}, {{cog|shn|ၶွင်ႈ}}
==== คำกริยา ====
{{th-verb|~}}
# [[ติด]][[อยู่]]
== ภาษาคำเมือง ==
=== การออกเสียง ===
* {{IPA|nod|/xɔŋ˦˦ʔ/|a=เชียงใหม่}}
=== คำกริยา ===
{{nod-verb}}
# {{lb|nod|สกรรม}} {{altform|nod|ᨡᩬ᩶ᨦ|t=[[สะดุด]], [[เกี่ยว]], [[ข้อง#ภาษาไทย|ข้อง]] [ [[ติด]][[อยู่]] ]}}
6o9nxqh4ttl4hz0wc2hk53g00dxhf4h
ก๊ดเลี้ยว
0
134930
5729221
1369895
2026-07-20T04:01:11Z
Alifshinobi
397
/* ภาษาคำเมือง */
5729221
wikitext
text/x-wiki
== ภาษาคำเมือง ==
=== การออกเสียง ===
* {{IPA|nod|/kot˦˥.leːw˦˥/|a=เชียงใหม่}}
=== คำคุณศัพท์ ===
{{nod-adj}}
# {{pronunciation spelling of|nod|ᨣᩫ᩠ᨯᩃ᩠ᨿ᩶ᩅ|t=ไม่[[ซื่อสัตย์]]}}
dk6s4r0okel1ntt76x64orjitsjtr43
ซ้อย
0
134935
5729109
1881671
2026-07-20T02:16:54Z
Alifshinobi
397
/* ภาษาคำเมือง */
5729109
wikitext
text/x-wiki
{{also/auto}}
== ภาษาคำเมือง ==
=== การออกเสียง ===
* {{IPA|nod|/sɔːj˦˥/|a=เชียงใหม่}}
=== คำกริยา ===
{{nod-verb}}
# {{lb|nod|สกรรม}} {{altform|nod|ᨪᩬ᩠᩶ᨿ|t=[[เสียบ]][[ร้อย]][[เป็น]][[พวง]]}}
kcmqmyuyzwlepviii3tl5ap5wxgy23c
แซ่ม
0
134937
5729260
1885568
2026-07-20T04:23:39Z
Alifshinobi
397
/* ภาษาคำเมือง */
5729260
wikitext
text/x-wiki
{{also/auto}}
== ภาษาคำเมือง ==
=== การออกเสียง ===
* {{IPA|nod|/sɛm˦˨/|a=เชียงใหม่}}
=== คำกริยา ===
{{nod-verb}}
# {{lb|nod|อกรรม}} {{altform|nod|ᨪᩯ᩠᩵ᨾ|t=[[บ่น]]}}
javpo65fqrp18wpm8tby5l3nw2vtj5n
ᨪᩯ᩠᩵ᨾ
0
134970
5729261
1426517
2026-07-20T04:24:40Z
Alifshinobi
397
/* ภาษาคำเมือง */
5729261
wikitext
text/x-wiki
== ภาษาคำเมือง ==
=== รูปแบบอื่น ===
{{nod-alt|~=แซ่ม}}
=== การออกเสียง ===
* {{IPA|nod|/sɛm˦˨/|a=เชียงใหม่}}
=== คำกริยา ===
{{nod-verb}}
# {{lb|nod|อกรรม}} [[บ่น]]
#: {{syn|nod|ᨧᩫ᩠᩵ᨾ|ᩈ᩶ᩣ᩠ᨾ}}
9hljyidoqyo0nu9n9vxtkpikekg42db
5729262
5729261
2026-07-20T04:25:50Z
Alifshinobi
397
/* ภาษาคำเมือง */
5729262
wikitext
text/x-wiki
== ภาษาคำเมือง ==
=== รูปแบบอื่น ===
{{nod-alt|~=แซ่ม}}
=== รากศัพท์ ===
ร่วมเชื้อสายกับ{{cog|khb|ᦶᦌᧄᧈ}}
=== การออกเสียง ===
* {{IPA|nod|/sɛm˦˨/|a=เชียงใหม่}}
=== คำกริยา ===
{{nod-verb}}
# {{lb|nod|อกรรม}} [[บ่น]]
#: {{syn|nod|ᨧᩫ᩠᩵ᨾ|ᩈ᩶ᩣ᩠ᨾ}}
crp78a45xh6nl7iab1bmhu4mc7ye2gm
ล่าย
0
135031
5729165
1883690
2026-07-20T02:54:52Z
Alifshinobi
397
/* ภาษาคำเมือง */
5729165
wikitext
text/x-wiki
{{also/auto}}
== ภาษาคำเมือง ==
=== การออกเสียง ===
* {{IPA|nod|/laːj˦˨/|a=เชียงใหม่}}
=== คำกริยา ===
{{nod-verb}}
# {{lb|nod|สกรรม}} {{altform|nod|ᩃ᩵ᩣ᩠ᨿ|t=[[หลอกลวง]]; [[พราง]], [[อำ]]}}
#: {{syn|nod|จุ๋}}
q1xotzgm057uuhd1nz58v88tp2uel4f
ผาน
0
135036
5729050
1882814
2026-07-19T23:36:25Z
Alifshinobi
397
/* ภาษาคำเมือง */
5729050
wikitext
text/x-wiki
{{also/auto}}
== ภาษาคำเมือง ==
=== การออกเสียง ===
* {{IPA|nod|/pʰaːn˨˦/|a=เชียงใหม่}}
=== คำคุณศัพท์ ===
{{nod-adj}}
# {{altform|nod|ᨹᩖᩣ᩠ᨶ|t=[[เดือดร้อน]], [[ทุกข์]][[ร้อน]], [[ทุกข์]];[[ลำเค็ญ]], [[ยากจน]]}}
#: {{syn|nod|ตุ๊ก}}
q1whiadog3zccl66esralye0mfzezb0
โหม้ง
0
135040
5729169
1884283
2026-07-20T02:59:49Z
Alifshinobi
397
Alifshinobi ย้ายหน้า [[หม้ง]] ไปยัง [[โหม้ง]]: สะกดผิด
1884283
wikitext
text/x-wiki
{{also/auto}}
== ภาษาคำเมือง ==
=== คำนาม ===
{{nod-noun}}
# [[หลุม]][[ใหญ่]]
dgyr9vw98n53reausqs8p5upm4uzujh
5729171
5729169
2026-07-20T03:01:28Z
Alifshinobi
397
5729171
wikitext
text/x-wiki
== ภาษาคำเมือง ==
=== การออกเสียง ===
* {{IPA|nod|/moːŋ˦˦ʔ/|a=เชียงใหม่}}
=== คำนาม ===
{{nod-noun}}
# {{altform|nod|ᩉ᩠ᨾᩰᩫ᩶ᨦ|t=[[หลุม]][[ใหญ่]][[ขนาด]][[พอ]][[ที่]][[ควาย]][[จะ]][[นอน]][[ได้]]}}
go8lvqmjlh2dunvcia4cfqv9wiwcob4
ปิ๊ก
0
135053
5729192
5627249
2026-07-20T03:14:13Z
Alifshinobi
397
/* คำกริยา */
5729192
wikitext
text/x-wiki
{{also/auto}}
== ภาษาไทย ==
[[ไฟล์:Pick (ギター用のピック) (6920851017).jpg|thumb|ปิ๊ก]]
=== รากศัพท์ ===
{{bor+|th|en|guitar pick|guitar '''pick'''}}
=== การออกเสียง ===
{{th-pron}}
=== คำนาม ===
{{th-noun}}
# [[ชิ้น]][[พลาสติก]][[หรือ]][[โลหะ]][[ขนาด]][[เล็ก]] [[มี]][[ปลาย]][[ค่อนข้าง]][[แหลม]] [[สำหรับ]][[ดีด]][[สาย]][[กีตาร์]]
== ภาษาคำเมือง ==
=== การออกเสียง ===
* {{IPA|nod|/pik˦˥/|a=เชียงใหม่}}
=== คำกริยา ===
{{nod-verb}}
# {{lb|nod|อกรรม}} {{pronunciation spelling of|nod|ᨻᩖᩥᨠ,ᨻᩥ᩠ᨠ}}
2dmkzboisrz6x8wki2uzcw8ydzw8dwb
ป้อก
0
135054
5729186
1882698
2026-07-20T03:13:15Z
Alifshinobi
397
5729186
wikitext
text/x-wiki
{{also/auto}}
== ภาษาคำเมือง ==
=== การออกเสียง ===
* {{IPA|nod|/pɔːk˦˨/|a=เชียงใหม่}}
=== คำกริยา ===
{{nod-verb}}
# {{lb|nod|อกรรม}} {{pronunciation spelling of|nod|ᨻᩬᨠ|t=[[กลับ]]}}
#: {{syn|nod|ปิ๊ก}}
5vsf0lkx0z3msg8pjf56vhmc8irb5i2
ตุ้ย
0
135063
5729043
1881930
2026-07-19T23:23:35Z
Alifshinobi
397
/* ภาษาคำเมือง */
5729043
wikitext
text/x-wiki
{{also/auto}}
== ภาษาคำเมือง ==
=== การออกเสียง ===
* {{IPA|nod|/tuj˦˦ʔ/|a=เชียงใหม่}}
=== คำคุณศัพท์ ===
{{nod-adj}}
# {{altform|nod|ᨲᩩ᩠᩶ᨿ|t=[[อ้วน]]}}
mzpi2bvlpiuaxivyobajjbvop62sdpa
พ่อง
0
135729
5729175
2021151
2026-07-20T03:10:57Z
Alifshinobi
397
/* ภาษาคำเมือง */
5729175
wikitext
text/x-wiki
{{also/auto}}
== ภาษาไทย ==
=== รากศัพท์ ===
{{blend|th|พ่อ|มึง}}
=== การออกเสียง ===
{{th-pron|พ็่อง}}
=== คำอุทาน ===
{{th-interj}}
# {{lb|th|สแลง|หยาบคาย}} {{n-g|ใช้แสดงความโกรธ ไม่พอใจ หรือไม่เห็นชอบด้วย}}
== ภาษาคำเมือง ==
=== การออกเสียง ===
* {{IPA|nod|/pʰɔŋ˦˨/|a=เชียงใหม่}}
=== คำกริยาวิเศษณ์ ===
{{nod-adv|-}}
# {{pronunciation spelling of|nod|ᨻᩕᩬ᩵ᨦ|t=[[บ้าง]]}}
j31fxtoied8omqo3z2itgii2wdd8klw
ตึ๊ด
0
135733
5729058
1881905
2026-07-20T01:32:36Z
Alifshinobi
397
/* ภาษาคำเมือง */
5729058
wikitext
text/x-wiki
{{also/auto}}
== ภาษาคำเมือง ==
=== การออกเสียง ===
* {{IPA|nod|/tɯt˦˥/|a=เชียงใหม่}}
=== คำกริยา ===
{{nod-verb}}
# {{lb|nod|สกรรม}} {{pronunciation spelling of|nod|ᨴᩧ᩠ᨯ|t=[[กระชาก]], [[ฉุด]], [[ดึง]]}}
2qta9kh9myk1d2mqln2n15vlrm3lvaf
ปอ
0
141058
5729349
5674120
2026-07-20T07:24:16Z
Alifshinobi
397
/* คำแปลภาษาอื่น */
5729349
wikitext
text/x-wiki
{{also/auto}}
== ภาษาไทย ==
{{wp}}
{{wp|แมลงปอ}}
[[File:Jute - Kolkata 2003-10-31 00538.JPG|thumb|เส้นใยปอ]]
[[File:Crocothemis servilia mariannae.jpg|thumb|แมลงปอ (''Crocothemis servilia'')]]
=== การออกเสียง ===
{{th-pron}}
=== รากศัพท์ 1 ===
==== คำนาม ====
{{th-noun}}
# [[เส้น]][[ใย]][[ที่]][[ทำ]][[จาก]][[เปลือก]][[ไม้]][[บาง]][[ชนิด]]
#: {{ux|th|ปอแก้ว}}
#: {{ux|th|ปอกระเจา}}
=== รากศัพท์ 2 ===
==== คำนาม ====
{{th-noun}}
# [[ชื่อ]][[ไม้ล้มลุก]] [[ไม้พุ่ม]] [[และ]][[ไม้ต้น]] [[หลาย]][[ชนิด]] [[หลาย]][[สกุล]] [[และ]][[หลาย]][[วงศ์]][[ที่]][[เปลือก]][[ใช้]][[ทำ]]ปอ เช่น ปอกระเจา (<em>Corchorus capsularis</em> L. และ <em>C. olitorius</em> L.) ในวงศ์ Tiliaceae, ปอกระสา [<em>Broussonetia papyrifera </em>(L.) Vent.] ในวงศ์ Moraceae, ปอแก้ว (<em>Hibiscuscannabinus</em> L.) ในวงศ์ Malvaceae, ปอสำโรง (<em>Sterculia foetida</em> L.) ในวงศ์ Sterculiaceae
=== รากศัพท์ 3 ===
==== คำนาม ====
{{th-noun|ตัว}}
# {{lang|th|([[แมลง]]~)}} ชื่อ[[แมลง]]อันดับย่อย Anisoptera ในอันดับ Odonata หัวและอกสั้นป้อม ส่วนท้องแคบยาว หนวดสั้นเล็กมองคล้ายขน ตา[[โต]][[ใหญ่]] 2 ข้างอยู่ชิดกัน ปีก 2 คู่บางใส เส้นลายปีกเป็นร่างแห โคนปีกคู่หลังแผ่กว้างปีกคู่หลังใหญ่กว่าปีกคู่หน้า มีสีแตกต่างกันตามชนิดเมื่อเกาะปีกกางขนานกับพื้น ตัวอ่อนอยู่ในน้ำกินสัตว์น้ำขนาดเล็ก เช่น ชนิด {{species|Crocothemis servilia}} (Drury) ในวงศ์ Libellulidae, แมลงปอ ก็เรียก
==== คำแปลภาษาอื่น ====
{{trans-top|ชื่อแมลงอันดับย่อย Anisoptera}}
* เกาหลี: {{t+|ko|잠자리}}
* กฺ๋อง: {{t|ugo|คองโด่นีวง}}
* เขมร: {{t+|km|កន្ទុំរុយ}}
* คำเมือง: {{t|nod|ᨠᨷᩦ᩶}}, {{t|nod|ᨠᩣᩴᨷᩦ᩶}}
* จีน:
*: กวางตุ้ง: {{t|yue|蜻蜓|tr=cing1 ting4}}
*: แคะ: {{t|hak|揚尾仔|tr=yòng-mî-é}}
*: หมิ่นใต้: {{t+|nan-hbl|田嬰|tr=chhân-eⁿ, chhân-iⁿ, chhân-ni, chhân-ne, iân-mi}}
*: จีนกลาง: {{t+|cmn|蜻蜓|tr=qīngtíng}}, {{t+|cmn|丁丁貓兒|tr=díngdíngmáor}} {{q|ตะวันตกเฉียงใต้}}
* ญี่ปุ่น: {{t+|ja|蜻蛉|tr=とんぼ, tonbo}}, {{t+|ja|トンボ|tr=tonbo}}
* ตองงา: {{t|to|kisikisi}}
* ตากาล็อก: {{t|tl|tutubi}}
* ไทลื้อ: {{t+|khb|ᦀᦲᦰᦢᦲᧉ}}
* ไทใหญ่: {{t+|shn|မႅင်းမီႈ}}
* โปรตุเกส: {{t+|pt|libélula|f}}, {{t+|pt|lavadeira|f}}
* ฝรั่งเศส: {{t+|fr|libellule|f}}
* พม่า: {{t+|my|ပုစဉ်း}}
* มาเลเซีย: {{t|ms|capung}}, {{t|ms|pepatung}}
* เยอรมัน: {{t+|de|Libelle|f}}; {{t|de|Wasserjungfer|f}} {{q|โบราณ}}
* ละติน: {{t+|la|lībellula|f}}
* ลาว: {{t|lo|ປໍ}}, {{t|lo|ແມງປໍ}}
* เวียดนาม: {{t+|vi|chuồn chuồn}}
* สเปน: {{t+|es|libélula|f}}, {{t+|es|aguacil|m}} {{q|อาร์เจนตินา|อุรุกวัย}}, {{t|es|pipilacha|f}} {{q|นิการากัว}}
* อังกฤษ: {{t+|en|dragonfly}}
* อาหม: {{t|aho|𑜐𑜩}}
* อิตาลี: {{t+|it|libellula|f}}
* อินโดนีเซีย: {{t+|id|capung}}
* เอสเปรันโต: {{t+|eo|libelo}}
* ฮีบรู: {{t+|he|שַׁפִּירִית|f}}
{{trans-bottom}}
=== รากศัพท์ 4 ===
อาจเกี่ยวข้องกับรากศัพท์ 1, 2 หรือ 3
==== คำวิสามานยนาม ====
{{th-proper noun}}
# {{ตำบล|เวียงแก่น|เชียงราย}}
9l7pqncge6iuq5i7inlozifl08dpw4x
หนาว
0
142303
5729065
2693539
2026-07-20T01:50:39Z
Heavenchris
5375
/* รากศัพท์ */
5729065
wikitext
text/x-wiki
{{also/auto}}
== ภาษาไทย ==
=== รากศัพท์ ===
ร่วมเชื้อสายกับ{{cog|tts|หนาว}}, {{cog|lo|ໜາວ}}, {{cog|nod|ᩉ᩠ᨶᩣ᩠ᩅ}}, {{cog|kkh|ᩉ᩠ᨶᩣ᩠ᩅ}}, {{cog|khb|ᦐᦱᧁ}}, {{cog|blt|ꪘꪱꪫ}}, {{cog|twh|ꪘꪱꪫ}}, {{cog|tyr|ꪘꪱꪫ}}, {{cog|shn|ၼၢဝ်}}, {{cog|tdd|ᥘᥣᥝᥴ}} หรือ {{m|tdd|ᥢᥣᥝᥴ}}, {{cog|aho|𑜃𑜧}} หรือ {{m|aho|𑜓𑜧}}, {{cog|swi|n̥o1}}
=== การออกเสียง ===
{{th-pron|หฺนาว}}
=== คำคุณศัพท์ ===
{{th-adj}}
# [[เย็น]][[จัด]], [[อาการ]][[ที่]][[รู้สึก]][[เย็น]][[จัด]]
=== คำนาม ===
{{th-noun}}
# {{lb|th|ปาก}} {{synonym of|th|ฤดูหนาว}}
o7xmddu20g0cdrte3g3favaxcr0rntt
มอดูล:gl-headword
828
146302
5729296
4740643
2026-07-20T05:31:16Z
Octahedron80
267
5729296
Scribunto
text/plain
-- This module contains code for Galician headword templates.
-- Templates covered are:
-- * {{gl-noun}}, {{gl-reinteg-noun}}, {{gl-proper noun}};
-- * {{gl-verb}}, {{gl-reinteg-verb}};
-- * {{gl-adj}}, {{gl-reinteg-adj}}, {{gl-adj-comp}}, {{gl-adj-sup}};
-- * {{gl-det}};
-- * {{gl-pron-adj}};
-- * {{gl-contr-adj}};
-- * {{gl-pp}};
-- * {{gl-cardinal}};
-- * {{gl-adv}}.
-- See [[Module:gl-verb]] and [[Module:gl-reinteg-verb]] for Galician conjugation templates.
local export = {}
local pos_functions = {}
local force_cat = false -- for testing; if true, categories appear in non-mainspace pages
local m_links = require("Module:links")
local m_table = require("Module:table")
local com_module = "Module:gl-common"
local reinteg_com_module = "Module:gl-reinteg-common"
local romut_module = "Module:romance utilities"
local gl_verb_module = "Module:gl-verb"
local gl_reinteg_verb_module = "Module:gl-reinteg-verb"
local lang = require("Module:languages").getByCode("gl")
local langname = --[[lang:getCanonicalName()]] lang:getCategoryName()
local rfind = mw.ustring.find
local rmatch = mw.ustring.match
local rsplit = mw.text.split
local usub = mw.ustring.sub
-- When followed by a hyphen in a hyphenated compound, the hyphen will be included with the prefix when linked.
local include_hyphen_prefixes = m_table.listToSet {
"ab",
"afro",
"anarco",
"anglo",
"ântero",
"anti",
"auto",
"contra",
"ex",
"franco",
"hiper",
"infra",
"inter",
"intra",
"macro",
"micro",
"neo",
"pan",
"pós",
"pré",
"pró",
"proto",
"sobre",
"sub",
"super",
"vice",
}
local function track(page)
require("Module:debug/track")("gl-headword/" .. page)
return true
end
local function glossary_link(entry, text)
text = text or entry
return "[[ภาคผนวก:อภิธานศัพท์#" .. entry .. "|" .. text .. "]]"
end
local function check_all_missing(forms, plpos, tracking_categories)
for _, form in ipairs(forms) do
if type(form) == "table" then
form = form.term
end
if form then
local title = mw.title.new(form)
if title and not title.exists then
table.insert(tracking_categories, langname .. " " .. plpos .. " with red links in their headword lines")
end
end
end
end
local function do_headword(parargs, poscat_th, is_reinteg)
local params = {
["head"] = {list = true},
["id"] = {},
["splithyph"] = {type = "boolean"},
["nolinkhead"] = {type = "boolean"},
["json"] = {type = "boolean"},
["pagename"] = {}, -- for testing
["reinteg"] = {}, -- processed in show()
}
if pos_functions[poscat_th] then
for key, val in pairs(pos_functions[poscat_th].params) do
params[key] = val
end
end
local args = require("Module:parameters").process(parargs, params)
local pagename = args.pagename or mw.loadData("Module:headword/data").pagename
local user_specified_heads = args.head
local heads = user_specified_heads
if args.nolinkhead then
if #heads == 0 then
heads = {pagename}
end
else
local romut = require(romut_module)
local auto_linked_head = romut.add_links_to_multiword_term(pagename, args.splithyph, nil,
include_hyphen_prefixes)
if #heads == 0 then
heads = {auto_linked_head}
else
for i, head in ipairs(heads) do
if head:find("^~") then
head = romut.apply_link_modifiers(auto_linked_head, usub(head, 2))
heads[i] = head
end
end
end
end
local data = {
lang = lang,
pos_category = poscat_th,
categories = {},
heads = heads,
user_specified_heads = user_specified_heads,
no_redundant_head_cat = #user_specified_heads == 0,
genders = {},
inflections = {},
pagename = pagename,
id = args.id,
force_cat_output = force_cat,
is_reinteg = is_reinteg,
}
local is_suffix = false
if pagename:find("^%-") and poscat_th ~= "รูปปัจจัย" then
is_suffix = true
data.pos_category = "suffixes"
local singular_poscat = --[[require("Module:string utilities").singularize(poscat)]] poscat_th
table.insert(data.categories, "ปัจจัยสร้าง" .. singular_poscat .. langname)
table.insert(data.inflections, {label = "ปัจจัยสร้าง" .. singular_poscat})
end
local tracking_categories = {}
if pos_functions[poscat_th] then
pos_functions[poscat_th].func(args, data, tracking_categories, is_suffix)
end
if is_reinteg then
table.insert(data.inflections, {label = "บรรทัดฐาน[[ภาคผนวก:คตินิยมบูรณาการใหม่|นักบูรณาการใหม่]]"})
end
if args.json then
return require("Module:JSON").toJSON(data)
end
return require("Module:headword").full_headword(data)
.. (#tracking_categories > 0 and require("Module:utilities").format_categories(tracking_categories, lang, nil, nil, force_cat) or "")
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[1] or error("Part of speech has not been specified. Please pass parameter 1 to the module invocation.")
-- หมวดหมู่เป็นภาษาไทย
local poscat_th = require("Module:th-utilities").th_pos(poscat)
local is_reinteg = frame.args.reinteg and require("Module:yesno")(frame.args.reinteg, false) or false
local parargs = frame:getParent().args
local also_reinteg = parargs.reinteg and require("Module:yesno")(parargs.reinteg, false) or false
if is_reinteg and also_reinteg then
error("Can't specify reinteg= when using a reintegrationist-specific template")
end
local parts = {}
if also_reinteg or not is_reinteg then
table.insert(parts, do_headword(parargs, poscat_th, false))
end
if also_reinteg or is_reinteg then
table.insert(parts, do_headword(parargs, poscat_th, true))
end
return table.concat(parts, "<br />")
end
local function fetch_qualifiers(qual, existing)
if not qual then
return existing
end
if not existing then
return {qual}
end
local retval = {}
for _, e in ipairs(existing) do
table.insert(retval, e)
end
table.insert(retval, qual)
return retval
end
local function process_terms_with_qualifiers(terms, quals)
local infls = {}
for i, term in ipairs(terms) do
table.insert(infls, {term = term, q = fetch_qualifiers(quals[i])})
end
return infls
end
local function replace_hash_with_lemma(term, lemma)
-- If there is a % sign in the lemma, we have to replace it with %% so it doesn't get interpreted as a capture replace
-- expression.
lemma = lemma:gsub("%%", "%%%%")
-- Assign to a variable to discard second return value.
term = term:gsub("#", lemma)
return term
end
-----------------------------------------------------------------------------------------
-- Nouns --
-----------------------------------------------------------------------------------------
local allowed_genders = m_table.listToSet(
{"m", "f", "mf", "mfbysense", "m-p", "f-p", "mf-p", "mfbysense-p", "?", "?-p", "n", "n-p"}
)
local function process_genders(data, genders, g_qual)
for i, g in ipairs(genders) do
if not allowed_genders[g] then
error("Unrecognized gender: " .. g)
end
if g_qual[i] then
table.insert(data.genders, {spec = g, qualifiers = {g_qual[i]}})
else
table.insert(data.genders, g)
end
end
end
local function do_noun(args, data, tracking_categories, pos, is_suffix, is_proper)
local com = require(data.is_reinteg and reinteg_com_module or com_module)
local is_plurale_tantum = false
local has_singular = false
if is_suffix then
pos = "ปัจจัย"
end
local plpos = --[[require("Module:string utilities").pluralize(pos)]] pos
data.genders = {}
local saw_m = false
local saw_f = false
local gender_for_default_plural
process_genders(data, args[1], args.g_qual)
-- Check for specific genders and pluralia tantum.
for i, g in ipairs(args[1]) do
if g:find("-p$") then
is_plurale_tantum = true
else
has_singular = true
if g == "m" or g == "mf" or g == "mfbysense" then
saw_m = true
end
if g == "f" or g == "mf" or g == "mfbysense" then
saw_f = true
end
end
end
if saw_m and saw_f then
gender_for_default_plural = "m"
elseif saw_f then
gender_for_default_plural = "f"
else
gender_for_default_plural = "m"
end
local lemma = m_links.remove_links(data.heads[1]) -- should always be specified
local function insert_inflection(list, term, accel, qualifiers, no_inv)
local infl = {q = qualifiers, accel = accel}
--if term == lemma and not no_inv then
-- infl.label = glossary_link("ผันรูปไม่ได้")
--else
infl.term = term
--end
infl.term_for_further_inflection = term
table.insert(list, infl)
end
-- Plural
local plurals = {}
local args_mpl = args.mpl
local args_fpl = args.fpl
local args_pl = args[2]
if is_plurale_tantum and not has_singular then
if #args_pl > 0 then
error("Can't specify plurals of plurale tantum " .. pos)
end
table.insert(data.inflections, {label = glossary_link("พหูพจน์เท่านั้น")})
else
if is_plurale_tantum then
-- both singular and plural
table.insert(data.inflections, {label = "บางครั้ง" .. glossary_link("พหูพจน์เท่านั้น") .. ", in variation"})
end
-- If no plurals, use the default plural if not a proper noun.
if #args_pl == 0 and not is_proper then
args_pl = {"+"}
end
-- If only ~ given (countable and uncountable), add the default plural after it.
if #args_pl == 1 and args_pl[1] == "~" then
args_pl = {"~", "+"}
end
-- Gather plurals, handling requests for default plurals
for i, pl in ipairs(args_pl) do
local function insert_pl(term)
local quals = fetch_qualifiers(args.pl_qual[i])
if term == lemma and i == 1 and #args_pl == 1 then
table.insert(data.inflections, {label = glossary_link("ผันรูปไม่ได้"), q = quals})
table.insert(data.categories, plpos .. "ผันรูปไม่ได้" .. langname)
else
insert_inflection(plurals, term, nil, quals)
end
table.insert(data.categories, plpos .. "นับได้" .. langname)
end
local function make_plural_and_insert(form, special)
local pl = com.make_plural(lemma, special)
if pl then
insert_pl(pl)
end
end
if pl == "+" then
make_plural_and_insert(lemma)
elseif pl:find("^%+") then
pl = require(romut_module).get_special_indicator(pl)
make_plural_and_insert(lemma, pl)
elseif pl == "?" or pl == "!" then
if i > 1 or #args_pl > 1 then
error("Can't specify ? or ! with other plurals")
end
if pl == "?" then
-- Plural is unknown
-- Better not to display anything
-- table.insert(data.inflections, {label = "plural unknown or uncertain"})
table.insert(data.categories, langname .. " " .. plpos .. " with unknown or uncertain plurals")
else
-- Plural is not attested
table.insert(data.inflections, {label = "plural not attested"})
table.insert(data.categories, langname .. " " .. plpos .. " with unattested plurals")
end
elseif pl == "-" then
if i > 1 then
error("Plural specifier - must be first")
end
-- Uncountable noun; may occasionally have a plural
table.insert(data.categories, plpos .. "นับไม่ได้" .. langname)
-- If plural forms were given explicitly, then show "usually"
if #args_pl > 1 then
table.insert(data.inflections, {label = "โดยปกติ" .. glossary_link("นับไม่ได้")})
table.insert(data.categories, plpos .. "นับได้" .. langname)
else
table.insert(data.inflections, {label = glossary_link("นับไม่ได้")})
end
elseif pl == "~" then
if i > 1 then
error("Plural specifier ~ must be first")
end
-- Countable and uncountable noun; will have a plural
table.insert(data.categories, plpos .. "นับได้" .. langname)
table.insert(data.categories, plpos .. "นับไม่ได้" .. langname)
table.insert(data.inflections, {label = glossary_link("นับได้") .. "และ" .. glossary_link("นับไม่ได้")})
else
insert_pl(replace_hash_with_lemma(pl, lemma))
end
end
end
if #plurals > 1 then
table.insert(data.categories, langname .. " " .. plpos .. " with multiple plurals")
end
-- Gather masculines/feminines. For each one, generate the corresponding plural(s).
local function handle_mf(mfs, qualifiers, inflect, default_plurals)
local retval = {}
for i, mf in ipairs(mfs) do
local function insert_infl(list, term, accel, existing_qualifiers)
insert_inflection(list, term, accel, fetch_qualifiers(qualifiers[i], existing_qualifiers), "no inv")
end
if mf == "+" then
-- Generate default feminine.
mf = inflect(lemma)
else
mf = replace_hash_with_lemma(mf, lemma)
end
local special = require(romut_module).get_special_indicator(mf)
if special then
mf = inflect(lemma, special)
end
insert_infl(retval, mf)
local mfpl = com.make_plural(mf, special)
if mfpl then
-- Add an accelerator for each masculine/feminine plural whose lemma
-- is the corresponding singular, so that the accelerated entry
-- that is generated has a definition that looks like
-- # {{plural of|gl|MFSING}}
insert_infl(default_plurals, mfpl, {form = "p", lemma = mf})
end
end
return retval
end
local feminine_plurals = {}
local feminines = handle_mf(args.f, args.f_qual, function(term, special)
return com.make_feminine(term, "is noun", special) end, feminine_plurals)
local masculine_plurals = {}
local masculines = handle_mf(args.m, args.m_qual, com.make_masculine, masculine_plurals)
local function handle_mf_plural(mfpl, qualifiers, default_plurals, singulars)
local new_mfpls = {}
for i, mfpl in ipairs(mfpl) do
local function insert_infl(term, accel, existing_qualifiers, no_inv)
insert_inflection(new_mfpls, term, accel, fetch_qualifiers(qualifiers[i], existing_qualifiers), no_inv)
end
local accel
if #mfpl == #singulars then
-- If same number of overriding masculine/feminine plurals as singulars,
-- assume each plural goes with the corresponding singular
-- and use each corresponding singular as the lemma in the accelerator.
-- The generated entry will have # {{plural of|gl|SINGULAR}} as the
-- definition.
accel = {form = "p", lemma = singulars[i].term}
else
accel = nil
end
if mfpl == "+" then
if #default_plurals > 0 then
for _, defpl in ipairs(default_plurals) do
-- defpl is a table
-- don't use "invariable" because the plural is not with respect to the lemma but
-- with respect to the masc/fem singular
insert_infl(defpl.term_for_further_inflection, defpl.accel, defpl.q, "no inv")
end
else
-- mf is a table
local default_mfpl = com.make_plural(lemma)
if default_mfpl then
insert_infl(default_mfpl, accel)
end
end
elseif mfpl:find("^%+") then
mfpl = require(romut_module).get_special_indicator(mfpl)
if #singulars > 0 then
for _, mf in ipairs(singulars) do
-- mf is a table
local default_mfpl = com.make_plural(mf.term_for_further_inflection, mfpl)
if default_mfpl then
-- don't use "invariable" because the plural is not with respect to the lemma but
-- with respect to the masc/fem singular
insert_infl(default_mfpl, accel, mf.q, "no inv")
end
end
else
local default_mfpl = com.make_plural(lemma, mfpl)
if default_mfpl then
insert_infl(default_mfpl, accel)
end
end
else
mfpl = replace_hash_with_lemma(mfpl, lemma)
-- don't use "invariable" if masc/fem singular present because the plural is not with respect to
-- the lemma but with respect to the masc/fem singular
insert_infl(mfpl, accel, nil, #singulars > 0)
end
end
return new_mfpls
end
if #args_fpl > 0 then
-- Override feminine plurals.
feminine_plurals = handle_mf_plural(args_fpl, args.fpl_qual, feminine_plurals, feminines)
end
if #args_mpl > 0 then
-- Override masculine plurals.
masculine_plurals = handle_mf_plural(args_mpl, args.mpl_qual, masculine_plurals, masculines)
end
check_all_missing(plurals, plpos, tracking_categories)
check_all_missing(feminines, plpos, tracking_categories)
check_all_missing(feminine_plurals, plpos, tracking_categories)
check_all_missing(masculines, plpos, tracking_categories)
check_all_missing(masculine_plurals, plpos, tracking_categories)
local function redundant_plural(pl)
for _, p in ipairs(plurals) do
if p.term_for_further_inflection == pl.term_for_further_inflection then
return true
end
end
return false
end
for _, mpl in ipairs(masculine_plurals) do
if redundant_plural(mpl) then
track("noun-redundant-mpl")
end
end
for _, fpl in ipairs(feminine_plurals) do
if redundant_plural(fpl) then
track("noun-redundant-fpl")
end
end
if #plurals > 0 then
plurals.label = "พหูพจน์"
plurals.accel = {form = "p"}
table.insert(data.inflections, plurals)
end
if #masculines > 0 then
masculines.label = "เพศชาย"
table.insert(data.inflections, masculines)
end
if #masculine_plurals > 0 then
masculine_plurals.label = "เพศชายพหูพจน์"
table.insert(data.inflections, masculine_plurals)
end
if #feminines > 0 then
feminines.label = "เพศหญิง"
feminines.accel = {form = "f"}
table.insert(data.inflections, feminines)
end
if #feminine_plurals > 0 then
feminine_plurals.label = "เพศหญิงพหูพจน์"
table.insert(data.inflections, feminine_plurals)
end
-- Maybe add category 'Galician nouns with irregular gender' (or similar)
local irreg_gender_lemma = com.rsub(lemma, " .*", "") -- only look at first word
if (rfind(irreg_gender_lemma, "[^ã]o$") and (gender_for_default_plural == "f" or gender_for_default_plural == "mf"
or gender_for_default_plural == "mfbysense")) or
(irreg_gender_lemma:find("a$") and (gender_for_default_plural == "m" or gender_for_default_plural == "mf"
or gender_for_default_plural == "mfbysense")) then
table.insert(data.categories, langname .. " " .. plpos .. " with irregular gender")
end
end
local function get_noun_params()
return {
[1] = {list = "g", required = true, default = "?"},
[2] = {list = "pl"},
["g_qual"] = {list = "g\1_qual", allow_holes = true},
["pl_qual"] = {list = "pl\1_qual", allow_holes = true},
["m"] = {list = true},
["m_qual"] = {list = "m\1_qual", allow_holes = true},
["f"] = {list = true},
["f_qual"] = {list = "f\1_qual", allow_holes = true},
["mpl"] = {list = true},
["mpl_qual"] = {list = "mpl\1_qual", allow_holes = true},
["fpl"] = {list = true},
["fpl_qual"] = {list = "fpl\1_qual", allow_holes = true},
}
end
pos_functions["คำนาม"] = {
params = get_noun_params(),
func = function(args, data, tracking_categories, is_suffix)
do_noun(args, data, tracking_categories, "คำนาม", is_suffix)
end,
}
pos_functions["คำวิสามานยนาม"] = {
params = get_noun_params(),
func = function(args, data, tracking_categories, is_suffix)
do_noun(args, data, tracking_categories, "คำวิสามานยนาม", is_suffix, "is proper noun")
end,
}
-----------------------------------------------------------------------------------------
-- Pronouns --
-----------------------------------------------------------------------------------------
local function do_pronoun(args, data, tracking_categories, pos, is_suffix)
if is_suffix then
pos = "ปัจจัย"
end
local plpos = --[[require("Module:string utilities").pluralize(pos)]] pos
if not is_suffix then
data.pos_category = plpos
end
local lemma = m_links.remove_links(data.heads[1]) -- should always be specified
data.genders = {}
for i, g in ipairs(args[1]) do
if g ~= "n" and g ~= "n-p" and not allowed_genders[g] then
error("Unrecognized gender: " .. g)
end
if args.g_qual[i] then
table.insert(data.genders, {spec = g, qualifiers = {args.g_qual[i]}})
else
table.insert(data.genders, g)
end
end
local function do_inflection(forms, quals, label)
if #forms > 0 then
local terms = process_terms_with_qualifiers(forms, quals)
check_all_missing(terms, plpos, tracking_categories)
terms.label = label
table.insert(data.inflections, terms)
end
end
do_inflection(args.m, args.m_qual, "เพศชาย")
do_inflection(args.f, args.f_qual, "เพศหญิง")
do_inflection(args.sg, args.sg_qual, "เอกพจน์")
do_inflection(args.pl, args.pl_qual, "พหูพจน์")
do_inflection(args.mpl, args.mpl_qual, "เพศชายพหูพจน์")
do_inflection(args.fpl, args.fpl_qual, "เพศหญิงพหูพจน์")
do_inflection(args.n, args.n_qual, "เพศกลาง")
end
local function get_pronoun_params()
local params = {
[1] = {list = "g"}, --gender(s)
["g_qual"] = {list = "g\1_qual", allow_holes = true},
["m"] = {list = true}, --masculine form(s)
["m_qual"] = {list = "m\1_qual", allow_holes = true},
["f"] = {list = true}, --feminine form(s)
["f_qual"] = {list = "f\1_qual", allow_holes = true},
["sg"] = {list = true}, --singular form(s)
["sg_qual"] = {list = "sg\1_qual", allow_holes = true},
["pl"] = {list = true}, --plural form(s)
["pl_qual"] = {list = "pl\1_qual", allow_holes = true},
["mpl"] = {list = true}, --masculine plural form(s)
["mpl_qual"] = {list = "mpl\1_qual", allow_holes = true},
["fpl"] = {list = true}, --feminine plural form(s)
["fpl_qual"] = {list = "fpl\1_qual", allow_holes = true},
["n"] = {list = true}, --neuter form(s)
["n_qual"] = {list = "n\1_qual", allow_holes = true},
}
return params
end
pos_functions["คำสรรพนาม"] = {
params = get_pronoun_params(),
func = function(args, data, tracking_categories, is_suffix)
do_pronoun(args, data, tracking_categories, "คำสรรพนาม", is_suffix)
end,
}
-----------------------------------------------------------------------------------------
-- Adjectives --
-----------------------------------------------------------------------------------------
local function insert_ancillary_inflection(data, forms, quals, label, plpos, tracking_categories)
if forms and #forms > 0 then
local terms = process_terms_with_qualifiers(forms, quals)
check_all_missing(terms, plpos, tracking_categories)
terms.label = label
table.insert(data.inflections, terms)
end
end
-- Handle comparatives and superlatives for adjectives and adverbs, including user-specified comparatives and
-- superlatives, default-requested comparatives/superlatives using '+', autogenerated comparatives/superlatives,
-- and hascomp=. Code is the same for adjectives and adverbs.
local function handle_adj_adv_comp(args, data, plpos, is_adv, tracking_categories)
local com = require(data.is_reinteg and reinteg_com_module or com_module)
local lemma = m_links.remove_links(data.heads[1]) -- should always be specified
local stem
if is_adv then
stem = com.rsub(lemma, "mente$", "")
else
stem = lemma
end
local function make_absolute_superlative(special)
if is_adv then
return com.make_adverbial_absolute_superlative(stem, special)
else
return com.make_absolute_superlative(stem, special)
end
end
-- Maybe autogenerate default comparative/superlative.
if args.comp and args.sup then-- comp= and sup= were given as options to the user
-- If no comp, but a non-default sup given, then add the default comparative/superlative.
-- This is useful when an absolute superlative is given.
local saw_sup_plus = false
if #args.comp == 0 and #args.sup > 0 then
for i, supval in ipairs(args.sup) do
if supval == "+" then
saw_sup_plus = true
end
end
if not saw_sup_plus then
args.comp = {"+"}
table.insert(args.sup, 1, "+")
end
end
-- If comp=+, use default comparative 'mais ...', and set a default superlative if unspecified.
local saw_comp_plus = false
for i, compval in ipairs(args.comp) do
if compval == "+" then
saw_comp_plus = true
args.comp[i] = "[[mais]] [[" .. lemma .. "]]"
end
end
if saw_comp_plus and #args.sup == 0 then
args.sup = {"+"}
end
-- If sup=+ (possibly from comp=+), use default superlative 'o mais ...'. Also handle absolute superlatives.
for i, supval in ipairs(args.sup) do
if supval == "+" then
args.sup[i] = "[[o]] [[mais]] [[" .. lemma .. "]]"
elseif supval == "+abs" then
args.sup[i] = make_absolute_superlative()
elseif rfind(supval, "^%+abs:") then
local sp = rmatch(supval, "^%+abs:(.*)$")
args.sup[i] = make_absolute_superlative(sp)
end
end
end
if args.hascomp then
if args.hascomp == "both" then
table.insert(data.inflections, {label = "บางครั้ง" .. glossary_link("เปรียบเทียบได้")})
table.insert(data.categories, plpos .. "เปรียบเทียบได้" .. langname)
table.insert(data.categories, plpos .. "เปรียบเทียบไม่ได้" .. langname)
else
local hascomp = require("Module:yesno")(args.hascomp)
if hascomp == true then
table.insert(data.inflections, {label = glossary_link("เปรียบเทียบได้")})
table.insert(data.categories, plpos .. "เปรียบเทียบได้" .. langname)
elseif hascomp == false then
table.insert(data.inflections, {label = glossary_link("เปรียบเทียบไม่ได้")})
table.insert(data.categories, plpos .. "เปรียบเทียบไม่ได้" .. langname)
else
error("Unrecognized value for hascomp=: " .. args.hascomp)
end
end
elseif args.comp and #args.comp > 0 or args.sup and #args.sup > 0 then
table.insert(data.inflections, {label = glossary_link("เปรียบเทียบได้")})
table.insert(data.categories, plpos .. "เปรียบเทียบได้" .. langname)
end
insert_ancillary_inflection(data, args.comp, args.comp_qual, "ขั้นกว่า", plpos, tracking_categories)
insert_ancillary_inflection(data, args.sup, args.sup_qual, "ขั้นสุด", plpos, tracking_categories)
end
local function do_adjective(args, data, tracking_categories, pos, is_suffix, is_superlative)
local com = require(data.is_reinteg and reinteg_com_module or com_module)
local feminines = {}
local masculine_plurals = {}
local feminine_plurals = {}
if is_suffix then
pos = "ปัจจัย"
end
local plpos = --[[require("Module:string utilities").pluralize(pos)]] pos
if not is_suffix then
data.pos_category = plpos
end
if args.sp then
local romut = require(romut_module)
if not romut.allowed_special_indicators[args.sp] then
local indicators = {}
for indic, _ in pairs(romut.allowed_special_indicators) do
table.insert(indicators, "'" .. indic .. "'")
end
table.sort(indicators)
error("Special inflection indicator beginning can only be " ..
m_table.serialCommaJoin(indicators, {dontTag = true}) .. ": " .. args.sp)
end
end
local lemma = m_links.remove_links(data.heads[1]) -- should always be specified
local function insert_inflection(forms, label, accel)
if #forms > 0 then
if forms[1].term == "-" then
table.insert(data.inflections, {label = "ไม่มี" .. label})
else
forms.label = label
forms.accel = {form = accel}
table.insert(data.inflections, forms)
end
end
end
if args.short then
table.insert(data.inflections, {label = "[[ภาคผนวก:คำกริยาภาษากาลิเซีย#รูปกริยาขยาย|รูปกริยาขยายสั้น]]"})
end
if args.inv then
-- invariable adjective
table.insert(data.inflections, {label = glossary_link("ผันรูปไม่ได้")})
table.insert(data.categories, plpos .. "ผันรูปไม่ได้" .. langname)
if args.sp or #args.f > 0 or #args.pl > 0 or #args.mpl > 0 or #args.fpl > 0 then
error("Can't specify inflections with an invariable " .. pos)
end
elseif args.fonly then
-- feminine-only
if #args.f > 0 then
error("Can't specify explicit feminines with feminine-only " .. pos)
end
if #args.pl > 0 then
error("Can't specify explicit plurals with feminine-only " .. pos .. ", use fpl=")
end
if #args.mpl > 0 then
error("Can't specify explicit masculine plurals with feminine-only " .. pos)
end
local argsfpl = args.fpl
if #argsfpl == 0 then
argsfpl = {"+"}
end
for i, fpl in ipairs(argsfpl) do
if fpl == "+" then
local defpl = com.make_plural(lemma, args.sp)
if not defpl then
error("Unable to generate default plural of '" .. lemma .. "'")
end
fpl = defpl
else
fpl = replace_hash_with_lemma(fpl, lemma)
end
table.insert(feminine_plurals, {term = fpl, q = fetch_qualifiers(args.fpl_qual[i])})
end
check_all_missing(feminine_plurals, plpos, tracking_categories)
table.insert(data.inflections, {label = "เพศหญิงเท่านั้น"})
insert_inflection(feminine_plurals, "เพศหญิงพหูพจน์", "f|p")
else
-- Gather feminines.
local argsf = args.f
if #argsf == 0 then
argsf = {"+"}
end
for i, f in ipairs(argsf) do
if f == "+" then
-- Generate default feminine.
f = com.make_feminine(lemma, false, args.sp)
else
f = replace_hash_with_lemma(f, lemma)
end
table.insert(feminines, {term = f, q = fetch_qualifiers(args.f_qual[i])})
end
local argsmpl = args.mpl
local argsfpl = args.fpl
if #args.pl > 0 then
if #argsmpl > 0 or #argsfpl > 0 or args.mpl_qual.maxindex > 0 or args.fpl_qual.maxindex > 0 then
error("Can't specify both pl= and mpl=/fpl=")
end
argsmpl = args.pl
args.mpl_qual = args.pl_qual
argsfpl = args.pl
args.fpl_qual = args.pl_qual
end
if #argsmpl == 0 then
argsmpl = {"+"}
end
if #argsfpl == 0 then
argsfpl = {"+"}
end
for i, mpl in ipairs(argsmpl) do
if mpl == "+" then
-- Generate default masculine plural.
local defpl = com.make_plural(lemma, args.sp)
if not defpl then
error("Unable to generate default plural of '" .. lemma .. "'")
end
mpl = defpl
else
mpl = replace_hash_with_lemma(mpl, lemma)
end
table.insert(masculine_plurals, {term = mpl, q = fetch_qualifiers(args.mpl_qual[i])})
end
for i, fpl in ipairs(argsfpl) do
if fpl == "+" then
for _, f in ipairs(feminines) do
-- Generate default feminine plural; f is a table.
local defpl = com.make_plural(f.term, args.sp)
if not defpl then
error("Unable to generate default plural of '" .. f.term .. "'")
end
table.insert(feminine_plurals, {term = defpl, q = fetch_qualifiers(args.fpl_qual[i], f.q)})
end
else
fpl = replace_hash_with_lemma(fpl, lemma)
table.insert(feminine_plurals, {term = fpl, q = fetch_qualifiers(args.fpl_qual[i])})
end
end
check_all_missing(feminines, plpos, tracking_categories)
check_all_missing(masculine_plurals, plpos, tracking_categories)
check_all_missing(feminine_plurals, plpos, tracking_categories)
local fem_like_lemma = #feminines == 1 and feminines[1].term == lemma and not feminines[1].q
local fem_pl_like_masc_pl = #masculine_plurals > 0 and #feminine_plurals > 0 and
m_table.deepEquals(masculine_plurals, feminine_plurals)
local masc_pl_like_lemma = #masculine_plurals == 1 and masculine_plurals[1].term == lemma and
not masculine_plurals[1].q
if fem_like_lemma and fem_pl_like_masc_pl and masc_pl_like_lemma then
-- actually invariable
table.insert(data.inflections, {label = glossary_link("ผันรูปไม่ได้")})
table.insert(data.categories, plpos .. "ผันรูปไม่ได้" .. langname)
else
-- Make sure there are feminines given and not same as lemma.
if not fem_like_lemma then
insert_inflection(feminines, "เพศหญิง", "f|s")
end
if fem_pl_like_masc_pl then
insert_inflection(masculine_plurals, "พหูพจน์", "p")
data.genders = {"mf"}
else
insert_inflection(masculine_plurals, "เพศชายพหูพจน์", "m|p")
insert_inflection(feminine_plurals, "เพศหญิงพหูพจน์", "f|p")
end
end
end
insert_ancillary_inflection(data, args.n, args.n_qual, "เพศกลาง", plpos, tracking_categories)
handle_adj_adv_comp(args, data, plpos, false, tracking_categories)
-- Handle requests for default diminutive.
if args.dim then
for i, dim in ipairs(args.dim) do
if dim == "+" then
args.dim[i] = com.make_diminutive(lemma)
elseif dim:find("^%+") then
dim = require(romut_module).get_special_indicator(dim)
args.dim[i] = com.make_diminutive(lemma, dim)
end
end
end
-- Handle requests for default augmentative.
if args.aug then
for i, aug in ipairs(args.aug) do
if aug == "+" then
args.aug[i] = com.make_augmentative(lemma)
elseif aug:find("^%+") then
aug = require(romut_module).get_special_indicator(aug)
args.aug[i] = com.make_augmentative(lemma, aug)
end
end
end
insert_ancillary_inflection(data, args.dim, args.dim_qual, "ตัวบอกความเล็ก", plpos, tracking_categories)
insert_ancillary_inflection(data, args.aug, args.aug_qual, "ตัวบอกความใหญ่", plpos, tracking_categories)
if args.irreg and is_superlative then
table.insert(data.categories, langname .. " irregular superlative " .. plpos)
end
end
local function get_adjective_params(adjtype)
local params = {
["inv"] = {type = "boolean"}, --invariable
["sp"] = {}, -- special indicator: "first", "first-last", etc.
["f"] = {list = true}, --feminine form(s)
["f_qual"] = {list = "f\1_qual", allow_holes = true},
["pl"] = {list = true}, --plural override(s)
["pl_qual"] = {list = "pl\1_qual", allow_holes = true},
["mpl"] = {list = true}, --masculine plural override(s)
["mpl_qual"] = {list = "mpl\1_qual", allow_holes = true},
["fpl"] = {list = true}, --feminine plural override(s)
["fpl_qual"] = {list = "fpl\1_qual", allow_holes = true},
}
if adjtype == "base" then
params["comp"] = {list = true} --comparative(s)
params["comp_qual"] = {list = "comp\1_qual", allow_holes = true}
params["sup"] = {list = true} --superlative(s)
params["sup_qual"] = {list = "sup\1_qual", allow_holes = true}
params["dim"] = {list = true} --diminutive(s)
params["dim_qual"] = {list = "dim\1_qual", allow_holes = true}
params["aug"] = {list = true} --augmentative(s)
params["aug_qual"] = {list = "aug\1_qual", allow_holes = true}
params["fonly"] = {type = "boolean"} -- feminine only
params["hascomp"] = {} -- has comparative
end
if adjtype == "part" then
params["short"] = {type = "boolean"} -- short participle
end
if adjtype == "sup" then
params["irreg"] = {type = "boolean"}
end
if adjtype == "pron" or adjtype == "contr" then
params["n"] = {list = true} --neuter form(s)
params["n_qual"] = {list = "n\1_qual", allow_holes = true}
end
return params
end
pos_functions["คำคุณศัพท์"] = {
params = get_adjective_params("base"),
func = function(args, data, tracking_categories, is_suffix)
do_adjective(args, data, tracking_categories, "คำคุณศัพท์", is_suffix)
end,
}
pos_functions["คำคุณศัพท์ขั้นกว่า"] = {
params = get_adjective_params("comp"),
func = function(args, data, tracking_categories, is_suffix)
do_adjective(args, data, tracking_categories, "คำคุณศัพท์", is_suffix)
end,
}
pos_functions["คำคุณศัพท์ขั้นสุด"] = {
params = get_adjective_params("sup"),
func = function(args, data, tracking_categories, is_suffix)
do_adjective(args, data, tracking_categories, "คำคุณศัพท์", is_suffix, "is superlative")
end,
}
pos_functions["รูปกริยาขยายอดีตกาล"] = {
params = get_adjective_params("part"),
func = function(args, data, tracking_categories, is_suffix)
do_adjective(args, data, tracking_categories, "รูปกริยาขยาย", is_suffix)
data.pos_category = "รูปกริยาขยายอดีตกาล"
end,
}
pos_functions["ตัวกำหนด"] = {
params = get_adjective_params("det"),
func = function(args, data, tracking_categories, is_suffix)
do_adjective(args, data, tracking_categories, "ตัวกำหนด", is_suffix)
end,
}
pos_functions["คำสรรพนามคล้ายคุณศัพท์"] = {
params = get_adjective_params("pron"),
func = function(args, data, tracking_categories, is_suffix)
do_adjective(args, data, tracking_categories, "คำสรรพนาม", is_suffix)
end,
}
pos_functions["adjective-like contractions"] = {
params = get_adjective_params("contr"),
func = function(args, data, tracking_categories, is_suffix)
do_adjective(args, data, tracking_categories, "contraction", is_suffix)
end,
}
-----------------------------------------------------------------------------------------
-- Adverbs --
-----------------------------------------------------------------------------------------
local function do_adverb(args, data, tracking_categories, pos, is_suffix)
if is_suffix then
pos = "ปัจจัย"
end
local plpos = --[[require("Module:string utilities").pluralize(pos)]] pos
if not is_suffix then
data.pos_category = plpos
end
handle_adj_adv_comp(args, data, plpos, "is adv", tracking_categories)
end
local function get_adverb_params(advtype)
local params = {}
if advtype == "base" then
params["comp"] = {list = true} --comparative(s)
params["comp_qual"] = {list = "comp\1_qual", allow_holes = true}
params["sup"] = {list = true} --superlative(s)
params["sup_qual"] = {list = "sup\1_qual", allow_holes = true}
params["hascomp"] = {} -- has comparative
end
return params
end
pos_functions["คำกริยาวิเศษณ์"] = {
params = get_adverb_params("base"),
func = function(args, data, tracking_categories, is_suffix)
do_adverb(args, data, tracking_categories, "คำกริยาวิเศษณ์", is_suffix)
end,
}
pos_functions["คำกริยาวิเศษณ์ขั้นกว่า"] = {
params = get_adverb_params("comp"),
func = function(args, data, tracking_categories, is_suffix)
do_adverb(args, data, tracking_categories, "คำกริยาวิเศษณ์", is_suffix)
end,
}
pos_functions["คำกริยาวิเศษณ์ขั้นสุด"] = {
params = get_adverb_params("sup"),
func = function(args, data, tracking_categories, is_suffix)
do_adverb(args, data, tracking_categories, "คำกริยาวิเศษณ์", is_suffix)
end,
}
-----------------------------------------------------------------------------------------
-- Verbs --
-----------------------------------------------------------------------------------------
pos_functions["คำกริยา"] = {
params = {
[1] = {},
["pres"] = {list = true}, --present
["pres_qual"] = {list = "pres\1_qual", allow_holes = true},
["pres3s"] = {list = true}, --third-singular present
["pres3s_qual"] = {list = "pres3s\1_qual", allow_holes = true},
["pret"] = {list = true}, --preterite
["pret_qual"] = {list = "pret\1_qual", allow_holes = true},
["part"] = {list = true}, --participle
["part_qual"] = {list = "part\1_qual", allow_holes = true},
["short_part"] = {list = true}, --short participle
["short_part_qual"] = {list = "short_part\1_qual", allow_holes = true},
["noautolinktext"] = {type = "boolean"},
["noautolinkverb"] = {type = "boolean"},
["attn"] = {type = "boolean"},
},
func = function(args, data, tracking_categories)
local preses, preses_3s, prets, parts, short_parts
if args.attn then
table.insert(tracking_categories, "Requests for attention concerning " .. langname)
return
end
local gl_verb = require(data.is_reinteg and gl_reinteg_verb_module or gl_verb_module)
local alternant_multiword_spec = gl_verb.do_generate_forms(args,
data.is_reinteg and "gl-reinteg-verb" or "gl-verb", data.heads[1])
local specforms = alternant_multiword_spec.forms
local function slot_exists(slot)
return specforms[slot] and #specforms[slot] > 0
end
local function do_finite(slot_tense, label_tense)
-- Use pres_3s if it exists and pres_1s doesn't exist (e.g. impersonal verbs); similarly for pres_3p (only3p verbs);
-- but fall back to pres_1s if neither pres_1s nor pres_3s nor pres_3p exist (e.g. [[empedernir]]).
local has_1s = slot_exists(slot_tense .. "_1s")
local has_3s = slot_exists(slot_tense .. "_3s")
local has_3p = slot_exists(slot_tense .. "_3p")
if has_1s or (not has_3s and not has_3p) then
return {
slot = slot_tense .. "_1s",
label = ("บุรุษที่หนึ่งเอกพจน์%s"):format(label_tense),
}, true
elseif has_3s then
return {
slot = slot_tense .. "_3s",
label = ("บุรุษที่สามเอกพจน์%s"):format(label_tense),
}, false
else
return {
slot = slot_tense .. "_3p",
label = ("บุรุษที่สามพหูพจน์%s"):format(label_tense),
}, false
end
end
local did_pres_1s
preses, did_pres_1s = do_finite("pres", "ปัจจุบันกาล")
preses_3s = {
slot = "pres_3s",
label = "บุรุษที่สามเอกพจน์ปัจจุบันกาล",
}
prets = do_finite("pret", "อดีตกาลสิ้นสุด")
parts = {
slot = "pp_ms",
label = "รูปกริยาขยายอดีตกาล",
}
short_parts = {
slot = "short_pp_ms",
label = "รูปกริยาขยายอดีตกาลสั้น",
}
if #args.pres > 0 or #args.pres3s > 0 or #args.pret > 0 or #args.part > 0 or #args.short_part > 0 then
track("verb-old-multiarg")
end
local function strip_brackets(qualifiers)
if not qualifiers then
return nil
end
local stripped_qualifiers = {}
for _, qualifier in ipairs(qualifiers) do
local stripped_qualifier = qualifier:match("^%[(.*)%]$")
if not stripped_qualifier then
error("Internal error: Qualifier should be surrounded by brackets at this stage: " .. qualifier)
end
table.insert(stripped_qualifiers, stripped_qualifier)
end
return stripped_qualifiers
end
local function do_verb_form(args, qualifiers, slot_desc, skip_if_empty)
local forms
local to_insert
if #args == 0 then
forms = specforms[slot_desc.slot]
if not forms or #forms == 0 then
if skip_if_empty then
return
end
forms = {{form = "-"}}
end
elseif #args == 1 and args[1] == "-" then
forms = {{form = "-"}}
else
forms = {}
for i, arg in ipairs(args) do
local qual = qualifiers[i]
if qual then
-- FIXME: It's annoying we have to add brackets and strip them out later. The inflection
-- code adds all footnotes with brackets around them; we should change this.
qual = {"[" .. qual .. "]"}
end
local form = arg
if not args.noautolinkverb then
form = com.add_links(form)
end
table.insert(forms, {form = form, footnotes = qual})
end
end
if forms[1].form == "-" then
to_insert = {label = "no " .. slot_desc.label}
else
local into_table = {label = slot_desc.label}
for _, form in ipairs(forms) do
local qualifiers = strip_brackets(form.footnotes)
-- Strip redundant brackets surrounding entire form. These may get generated e.g.
-- if we use the angle bracket notation with a single word.
local stripped_form = rmatch(form.form, "^%[%[([^%[%]]*)%]%]$") or form.form
-- The reintegrationist code uses variant codes to track "Portuguese-ending" vs. "Galician-ending"
-- forms and "less common" forms. Remove them now.
if data.is_reinteg then
stripped_form = gl_verb.remove_variant_codes(stripped_form)
end
-- Don't include accelerators if brackets remain in form, as the result will be wrong.
-- FIXME: For now, don't include accelerators. We should use the new {{gl-verb form of}} once implemented.
-- local this_accel = not stripped_form:find("%[%[") and accel or nil
local this_accel = nil
table.insert(into_table, {term = stripped_form, q = qualifiers, accel = this_accel})
end
to_insert = into_table
end
table.insert(data.inflections, to_insert)
end
local skip_pres_if_empty
if alternant_multiword_spec.no_pres1_and_sub then
table.insert(data.inflections, {label = "ไม่มีบุรุษที่หนึ่งเอกพจน์ปัจจุบันกาล"})
table.insert(data.inflections, {label = "ไม่มีมาลาสมมุติปัจจุบันกาล"})
end
if alternant_multiword_spec.no_pres_stressed then
table.insert(data.inflections, {label = "ไม่มีมาลาสั่งหรือมาลาสมมุติปัจจุบันกาลเน้นหนัก"})
skip_pres_if_empty = true
end
if alternant_multiword_spec.only3s then
table.insert(data.inflections, {label = glossary_link("อบุรุษ")})
elseif alternant_multiword_spec.only3sp then
table.insert(data.inflections, {label = "บุรุษที่สามเท่านั้น"})
elseif alternant_multiword_spec.only3p then
table.insert(data.inflections, {label = "บุรุษที่สามพหูพจน์เท่านั้น"})
end
local has_vowel_alt
if alternant_multiword_spec.vowel_alt then
for _, vowel_alt in ipairs(alternant_multiword_spec.vowel_alt) do
if vowel_alt ~= "+" and vowel_alt ~= "í" and vowel_alt ~= "ú" then
has_vowel_alt = true
break
end
end
end
local function expand_footnotes_and_references(footnotes)
if not footnotes then
return nil
end
return require("Module:inflection utilities").fetch_headword_qualifiers_and_references(footnotes)
end
do_verb_form(args.pres, args.pres_qual, preses, skip_pres_if_empty)
-- We want to include both the pres_1s and pres_3s if there is a vowel alternation in the present singular. But we
-- don't want to redundantly include the pres_3s if we already included it.
if did_pres_1s and has_vowel_alt then
do_verb_form(args.pres3s, args.pres3s_qual, preses_3s, skip_pres_if_empty)
end
do_verb_form(args.pret, args.pret_qual, prets)
do_verb_form(args.part, args.part_qual, parts)
do_verb_form(args.short_part, args.short_part_qual, short_parts, "skip if empty")
-- Add categories.
for _, cat in ipairs(alternant_multiword_spec.categories) do
table.insert(data.categories, cat)
end
-- If the user didn't explicitly specify head=, or specified exactly one head (not 2+) and we were able to
-- incorporate any links in that head into the 1= specification, use the infinitive generated by
-- [[Module:gl-verb]]/[[Module:gl-reinteg-verb]] in place of the user-specified or auto-generated head. This was
-- copied from [[Module:it-headword]], where doing this gets accents marked on the verb(s). We don't have
-- accents marked on the verb but by doing this we do get any footnotes on the infinitive propagated here. Don't
-- do this if the user gave multiple heads or gave a head with a multiword-linked verbal expression such as
-- Italian '[[dare esca]] [[al]] [[fuoco]]' (FIXME: give Galician equivalent).
if #data.user_specified_heads == 0 or (
#data.user_specified_heads == 1 and alternant_multiword_spec.incorporated_headword_head_into_lemma
) then
data.heads = {}
for _, lemma_obj in ipairs(alternant_multiword_spec.forms.infinitive_linked) do
local quals, refs = expand_footnotes_and_references(lemma_obj.footnotes)
table.insert(data.heads, {term = lemma_obj.form, q = quals, refs = refs})
end
end
end
}
-----------------------------------------------------------------------------------------
-- Suffix forms --
-----------------------------------------------------------------------------------------
pos_functions["รูปปัจจัย"] = {
params = {
[1] = {required = true, list = true},
["g"] = {list = true},
["g_qual"] = {list = "g\1_qual", allow_holes = true},
},
func = function(args, data, is_suffix)
data.genders = {}
process_genders(data, args.g, args.g_qual)
local suffix_type = {}
for _, typ in ipairs(args[1]) do
table.insert(suffix_type, "ปัจจัยสร้าง" .. typ)
end
table.insert(data.inflections, {label = "รูปผันของ " .. m_table.serialCommaJoin(suffix_type, {conj = "หรือ"})})
end,
}
return export
9jyk5lkjsnnj6l3w6qd0imovv67336h
ค่าง
0
146867
5729052
2188856
2026-07-19T23:38:49Z
Alifshinobi
397
5729052
wikitext
text/x-wiki
{{also/auto}}
== ภาษาไทย ==
=== รากศัพท์ ===
ร่วมเชื้อสายกับ{{cog|lo|ຄ່າງ}}, {{cog|nod|ᨣ᩵ᩤ᩠ᨦ}}, {{cog|kkh|ᨣ᩵ᩤ᩠ᨦ}}, {{cog|khb|ᦅᦱᧂᧈ}}, {{cog|shn|ၵၢင်ႈ}}, {{cog|za|gangh|tr=ก่าง}}, {{cog|zzj|kangh|tr=ค่าง}}
=== การออกเสียง ===
{{th-pron}}
=== คำนาม ===
[[ไฟล์:Portrait of a Douc.jpg|thumb|150px|ค่างห้าสี]]
{{th-noun|ตัว}}
# ชื่อ[[สัตว์เลี้ยงลูกด้วยน้ำนม]][[ใน]][[วงศ์]][[ลิงโลกเก่า]] ([[Cercopithecidae]]) [[ลักษณะ]][[คล้าย]][[ลิง]] [[ขน]][[สี]][[เทา]][[หรือ]][[ดำ]] [[ลำตัว]] [[แขน]] [[ขา]] [[และ]][[หาง]][[ยาว]][[กว่า]]ลิง[[ทั่ว]] ๆ [[ไป]] [[กิน]][[ใบไม้]]และ[[ผลไม้]]
==== ลูกคำ ====
{{col4|th
|ค่างดำ
|ค่างแว่นถิ่นใต้
|ค่างหงอก
|ค่างเทา
|ค่างแว่นถิ่นเหนือ
|ค่างสามสี
|ค่างสี่สี
|ค่างห้าสี
}}
{{topics|th|สัตว์เลี้ยงลูกด้วยน้ำนม}}
== ภาษาคำเมือง ==
=== การออกเสียง ===
* {{IPA|nod|/kaːŋ˦˨/|a=เชียงใหม่}}
=== คำนาม ===
{{nod-noun|ตัว|tl=1}}
# {{lang|nod|([[อี่]]~)}} {{altform|nod|ᨣ᩵ᩤ᩠ᨦ|t=[[ค่าง#ภาษาไทย|ค่าง]]}}
leyfhwd2nuhnicjdhdc3wzviupvergp
เป้า
0
148183
5729060
4818439
2026-07-20T01:38:10Z
Alifshinobi
397
/* ภาษาคำเมือง */
5729060
wikitext
text/x-wiki
{{also/auto}}
== ภาษาไทย ==
=== รากศัพท์ ===
ร่วมเชื้อสายกับ{{cog|lo|ເປົ້າ}}, {{cog|khb|ᦔᧁᧉ}}
=== การออกเสียง ===
{{th-pron}}
=== รากศัพท์ 1 ===
==== คำนาม ====
{{th-noun}}
# [[สิ่ง]][[ที่]][[กำหนด]][[ไว้]][[เป็น]][[จุดหมาย]]
#: {{ux|th|นักยิงปืนยิงถูกตรง'''เป้า'''ทุกนัด}}
#: {{ux|th|เอาต้นไม้เป็น'''เป้า'''}}
# {{lb|th|โดยปริยาย}} ที่[[เพ่งเล็ง]]
#: {{ux|th|เป็น'''เป้า'''สายตา}}
==== คำเกี่ยวข้อง ====
{{rel-top|สิ่งมุ่งหมาย}}
* [[เป้านิ่ง]]
* [[เป้าบิน]]
* [[เป้าประสงค์]]
{{rel-mid}}
* [[เป้าสายตา]]
* [[เป้าหมาย]]
* [[ยิงเป้า]]
{{rel-bottom}}
=== รากศัพท์ 2 ===
==== คำนาม ====
{{th-noun}}
# [[ชิ้น]][[ผ้า]]ที่[[เย็บ]][[แทรก]][[ตะเข็บ]][[ตรง]][[รักแร้]][[เสื้อ]][[หรือ]][[รอยต่อ]][[ขา]][[กางเกง]]ผ้าหรือกางเกง[[แพร]][[เพื่อ]][[ให้]][[เคลื่อนไหว]][[ได้]][[สะดวก]]
# [[ส่วน]][[ของ]]เสื้อที่[[อยู่]][[ใต้]]รักแร้หรือส่วนของกางเกงที่อยู่ใต้[[หว่างขา]]
== ภาษาคำเมือง ==
=== การออกเสียง ===
* {{IPA|nod|/paw˦˦ʔ/|a=เชียงใหม่}}
=== คำนาม ===
{{nod-noun|ตั๋ว}}
# {{pronunciation spelling of|nod|ᨸᩖᩮᩢ᩶ᩣ|t=[[นก]][[เปล้า]]}}
pqw4hougvncb1ykbic67t0has108du2
ข๋บ
0
163926
5729045
1880724
2026-07-19T23:27:41Z
Alifshinobi
397
/* ภาษาคำเมือง */
5729045
wikitext
text/x-wiki
{{also/auto}}
== ภาษาคำเมือง ==
=== การออกเสียง ===
* {{IPA|nod|/xop˨˦/|a=เชียงใหม่}}
=== คำกริยา ===
{{nod-verb}}
# {{lb|nod|สกรรม}} {{altform|nod|ᨡᩫ᩠ᨷ|t=[[กัด]]}}
6cl7f43vp1yzsfduuuptbis4e38ilfw
ᨶᩣ᩠ᨦᨱᩦ
0
164659
5729328
1426896
2026-07-20T06:05:59Z
Alifshinobi
397
/* ภาษาคำเมือง */
5729328
wikitext
text/x-wiki
== ภาษาคำเมือง ==
=== รูปแบบอื่น ===
{{nod-alt|c=ᨶᩣ᩠ᨦᨶᩦ|l=นางณี|s=นางนี}}
=== รากศัพท์ ===
ร่วมเชื้อสายกับ{{cog|lo|ນາງນີ}}, {{cog|khb|ᦓᦱᧂᦓᦲ}}
=== การออกเสียง ===
* {{IPA|nod|/naːŋ˧˧.niː˧˧/|a=เชียงใหม่}}
=== คำนาม ===
{{nod-noun|ᨲ᩠ᩅᩫ}}
# [[ชะนี]]
#: {{syn|nod|ᩅᩩ᩠ᨿ}}
2hdnw6lrhx94ixuvzndolnqf87hyglz
5729331
5729328
2026-07-20T06:09:15Z
Alifshinobi
397
/* รากศัพท์ */
5729331
wikitext
text/x-wiki
== ภาษาคำเมือง ==
=== รูปแบบอื่น ===
{{nod-alt|c=ᨶᩣ᩠ᨦᨶᩦ|l=นางณี|s=นางนี}}
=== รากศัพท์ ===
ร่วมเชื้อสายกับ{{cog|lo|ນາງນີ}}, {{cog|kkh|ᨶᩣ᩠ᨦᨱᩦ}}, {{cog|khb|ᦓᦱᧂᦓᦲ}}
=== การออกเสียง ===
* {{IPA|nod|/naːŋ˧˧.niː˧˧/|a=เชียงใหม่}}
=== คำนาม ===
{{nod-noun|ᨲ᩠ᩅᩫ}}
# [[ชะนี]]
#: {{syn|nod|ᩅᩩ᩠ᨿ}}
dunpkw6lnsp01om7ud1zgtz7m3r341d
ᩅᩩ᩠ᨿ
0
164669
5729327
3325776
2026-07-20T06:05:03Z
Alifshinobi
397
5729327
wikitext
text/x-wiki
{{also/auto}}
== ภาษาคำเมือง ==
=== รากศัพท์ ===
ร่วมเชื้อสายกับ{{cog|shn|ဢီႇဝုၺ်း}}
=== การออกเสียง ===
* {{IPA|nod|/wuj˧˧/|a=เชียงใหม่}}
=== คำนาม ===
{{nod-noun|ᨲ᩠ᩅᩫ}}
# {{lang|nod|([[ᩋᩦ᩵]]~)}} [[ชะนี]]
#: {{syn|nod|ᨶᩣ᩠ᨦᨱᩦ|ᩋᩦ᩵ᩁᩩ᩠ᨿ|ᩋᩦ᩵ᩌᩩ᩠ᨿ}}
trpbfvjv5eg4nm5nb5976kxhvge4p6w
5729335
5729327
2026-07-20T06:20:38Z
Alifshinobi
397
5729335
wikitext
text/x-wiki
{{also/auto}}
== ภาษาคำเมือง ==
=== รากศัพท์ ===
ร่วมเชื้อสายกับ{{cog|shn|ဢီႇဝုၺ်း}}
=== การออกเสียง ===
* {{IPA|nod|/wuj˧˧/|a=เชียงใหม่}}
=== คำนาม ===
{{nod-noun|ᨲ᩠ᩅᩫ}}
# {{lang|nod|([[ᩋᩦ᩵]]~)}} [[ชะนี]]
==== คำพ้องความ ====
{{col4|nod
|ᨶᩣ᩠ᨦᨱᩦ
|ᩋᩦ᩵ᨠᩩᨯ
|ᩋᩦ᩵ᩁᩩ᩠ᨿ
|ᩋᩦ᩵ᩌᩩ᩠ᨿ
}}
pwpn489d8jut9o3qf026i3ulmjf1k7b
จ้าด
0
164682
5729024
1371142
2026-07-19T20:12:14Z
Alifshinobi
397
5729024
wikitext
text/x-wiki
==ภาษาคำเมือง==
=== การออกเสียง ===
* {{IPA|nod|/t͡ɕaːt˦˨/|a=เชียงใหม่}}
=== รากศัพท์ 1 ===
====คำกริยาวิเศษณ์====
{{nod-adv|-}}
# {{altform|nod|ᨩᩣ᩠ᨯ|t=[[มาก]], [[เยอะ]] [[มัก]][[ใช้]][[คู่]][[กับ]] [[นัก]] เป็น จ้าด[[นัก]]; [[มาก]] ๆ, [[สุด ๆ]]}}
=== รากศัพท์ 2 ===
====คำนาม====
{{nod-noun}}
# {{altform|nod|ᨩᩣ᩠ᨲ|t=[[ชาติ]]}}
f7ihwe1bow7g25xoaow6mpnydgqsle8
ໂກນ
0
165727
5729027
1890969
2026-07-19T20:28:41Z
Alifshinobi
397
/* ภาษาลาว */
5729027
wikitext
text/x-wiki
{{also/auto}}
== ภาษาลาว ==
=== รากศัพท์ ===
ร่วมเชื้อสายกับ{{cog|tts|โกน}}, {{cog|nod|ᨠᩰᩫ᩠ᨶ}}, {{cog|kkh|ᨠ᩠ᩅᩁ}} (ในคำว่า {{m|kkh|ᨠ᩠ᩅᩁᨹᩨ᩠᩶ᨦ}}), {{cog|khb|ᦷᦂᧃ}}; อาจเกี่ยวข้องกับ{{cog|th|กลวง}}
=== การออกเสียง ===
{{lo-pron}}
=== คำนาม ===
{{lo-noun}}
# [[โพรง]]
#: {{ux|lo|[[ຍືດ]][[ຄໍ]][[ສ່ອງ]][[ຕາມ]]'''ໂກນ'''[[ເສົາ]]|ยืดคอส่องตาม'''โพรง'''เสา}}
hwz6hgcurgz2lx0gz99xabskd6id5ai
dormir
0
172697
5729386
5688275
2026-07-20T07:50:49Z
Octahedron80
267
/* การผันรูป */
5729386
wikitext
text/x-wiki
{{minitoc}}
== ภาษากาตาลา ==
=== รากศัพท์ ===
{{inh+|ca|la|dormiō|dormīre}}, จาก{{inh|ca|itc-pro|*dormiō}}, จาก{{der|ca|ine-pro|*drem-|t=วิ่ง; นอนหลับ}}; เทียบ{{cog|oc|dormir}}, {{cog|fr|dormir}}, {{cog|es|dormir}}
=== การออกเสียง ===
* {{ca-IPA}}
* {{audio|ca|LL-Q7026 (cat)-Unjoanqualsevol-dormir.wav}}
* {{rhymes|ca|i(ɾ)|s=2}}
=== คำกริยา ===
{{ca-verb|pres_1_sg=dormo}}
# {{lb|ca|อกรรม}} [[นอน]][[หลับ]]
==== การผันรูป ====
{{ca-conj}}
==== ลูกคำ ====
{{col4|ca|adormir|condormir|dorment|dormida|dormidor|dormidora|dormilec|dormilega|dormiment|dormisquejar|dormitar}}
==== คำเกี่ยวข้อง ====
{{rel3|ca|dormició|dormitiu|dormitori}}
=== อ่านเพิ่ม ===
* {{R:ca:IEC2}}
* {{R:ca:GDLC}}
* {{R:ca:DNV}}
* {{R:ca:DCVB}}
{{C|ca|การนอนหลับ}}
== ภาษาโปรตุเกส ==
=== รูปแบบอื่น ===
* {{alt|pt|dromir||dialectal}}
* {{alt|pt|drumir|drumi|dromi|dormi|durmi||eye dialect}}
* {{alt|pt|durmir||obsolete or eye dialect}}
=== รากศัพท์ ===
จาก{{inh|pt|roa-opt|dormir}}, {{m|roa-opt|durmir}}, จาก{{inh|pt|la|dormiō|dormīre|t=นอนหลับ}}, จาก{{inh|pt|itc-pro|*dormiō}}, จาก{{der|pt|ine-pro|*drem-|t=วิ่ง; นอนหลับ}}
=== การออกเสียง ===
{{pt-IPA|do^rmir}}<!-- FIXME, is 'durmir' colloquial? -->
* {{hyph|pt|dor|mir}}
=== คำกริยา ===
{{pt-verb}}
# {{senseid|pt|to sleep}} {{lb|pt|อกรรม}} [[นอน]][[หลับ]]
#: {{ux|pt|O gato '''está dormindo'''.|The cat '''is sleeping'''.}}
# {{senseid|pt|to fall asleep}} {{lb|pt|อกรรม}} [[หลับ]]
#: {{ux|pt|Demorou horas até que eu '''dormisse'''.|Hours passed before I '''fell asleep'''.}}
# {{senseid|pt|to have a type of sleep}} {{lb|pt|สกรรม}} นอนหลับ[[บาง]][[ประเภท]]
#: {{ux|pt|'''Dormir''' uma soneca.|'''To have''' a nap.}}
# {{senseid|pt|to be inactive}} {{lb|pt|figurative|อกรรม}} [[นิ่ง]], [[เงียบ]], [[ไม่]][[เคลื่อนไหว]]
#: {{ux|pt|A célula dos terroristas está '''dormindo'''.|The terrorist cell '''is asleep'''.}}
# {{senseid|pt|to have sex with}} {{indtr|pt|com|.euphemistic}} {{lb|pt|[[dormir com]]}} [[มี]][[เพศสัมพันธ์]]
#: {{ux|pt|Peguei-a '''dormindo''' com um rapaz.|I caught her '''sleeping''' with a boy.}}
# {{senseid|pt|to be constantly with}} {{indtr|pt|com|.figurative}} {{lb|pt|[[dormir com]]}} [[คง]][[อยู่]], ไม่[[เปลี่ยนแปลง]]
#: {{ux|pt|A memória da guerra '''dorme''' com o veterano.|The memory of the war '''sleeps''' with the veteran.}}
# {{senseid|pt|to be dead}} {{lb|pt|กลอน|อกรรม}} [[ตาย]] (แล้ว)
#: {{ux|pt|Todos meus heróis '''dormem'''.|All my heroes '''are dead'''.}}
# {{senseid|pt|to lose blood circulation}} {{lb|pt|ปาก|อกรรม}} (แขนขา) [[ชา]][[เพราะ]]ไม่[[มี]][[เลือด]][[ไป]][[หล่อเลี้ยง]]
#: {{ux|pt|Acordei no meio da noite e meu braço tinha '''dormido'''.|I woke up in the middle of the night and my arm had '''fallen asleep'''.}}
# {{senseid|pt|not to notice a problem}} {{lb|pt|Brazil|สแลง|อกรรม}} ไม่[[ได้]][[สังเกต]][[หรือ]][[สนใจ]] (ปัญหา)
#: {{ux|pt|O controlador '''dormiu''' e os aviões bateram.|The controller '''didn’t pay attention''' and the aeroplanes collided.}}
==== การผันรูป ====
{{pt-conj|<u-o>}}
==== คำเกี่ยวข้อง ====
* {{l|pt|dormitório}}
==== คำสืบทอด ====
* {{desc|pov|durmi}}
* {{desc|kea|durmi}}
* {{desc|pap|drumi}}
== ภาษาฝรั่งเศส ==
=== รากศัพท์ ===
{{inh+|fr|frm|dormir}}, จาก{{inh|fr|fro|dormir}}, จาก{{inh|fr|la|dormiō|dormīre|t=นอนหลับ}}, จาก{{inh|fr|itc-pro|*dormiō}}, จาก{{der|fr|ine-pro|*drem-|t=วิ่ง; นอนหลับ}}
=== การออกเสียง ===
* {{fr-IPA}}
* {{audio|fr|Fr-dormir.ogg}}
* {{rhymes|fr|iʁ}}
=== คำกริยา ===
{{fr-verb}}
# {{lb|fr|อกรรม}} [[นอน]][[หลับ]]
#: {{uxi|fr|Vous devriez essayer de dormir.|You should try to sleep.}}
#: {{uxi|fr|Je dormais quand vous avez appelé.|I was sleeping when you called.}}
==== การผันรูป ====
{{fr-conj-auto}}
==== ลูกคำ ====
{{col4|fr|à dormir debout|qui dort dîne|dormir à poings fermés|dormir comme un bébé|dormir comme un bienheureux|dormir comme un loir|dormir comme une pierre|dormir comme une souche|dormir du sommeil du juste|dormir sur ses deux oreilles|endormir|il ne faut pas réveiller le chat qui dort|ne dormir que d'un œil}}
==== คำเกี่ยวข้อง ====
* {{l|fr|dortoir}}
==== คำสืบทอด ====
* {{desc|bzj|doado|bor=1}}
=== ดูเพิ่ม ===
* {{l|fr|coucher|se coucher}}
* {{l|fr|sommeil}}
=== อ่านเพิ่ม ===
* {{R:fr:TLFi}}
== ภาษาฝรั่งเศสกลาง ==
=== รากศัพท์ ===
จาก{{inh|frm|fro|dormir}}, จาก{{inh|frm|la|dormio|dormiō, dormīre}}
=== คำกริยา ===
{{head|frm|คำกริยา}}
# {{lb|frm|อกรรม}} [[นอน]][[หลับ]]
==== คำสืบทอด ====
* {{desc|fr|dormir}}
== ภาษาฝรั่งเศสเก่า ==
=== รากศัพท์ ===
จาก{{inh|fro|la|dormīre}}, present active infinitive of {{m|la|dormiō}}
=== คำกริยา ===
{{head|fro|คำกริยา}}
# {{lb|fro|อกรรม}} [[นอน]][[หลับ]]
==== การผันรูป ====
{{fro-conj-iii}}
==== คำสืบทอด ====
* {{desctree|frm|dormir}}
* {{desc|nrf|dormi}}
* {{desc|wa|doirmi}}
== ภาษาลาดิน ==
=== รูปแบบอื่น ===
* {{alter|lld|dormí}}
=== รากศัพท์ ===
จาก{{inh|lld|la|dormio|dormīre}}
=== คำกริยา ===
{{head|lld|คำกริยา}}
# {{lb|lld|อกรรม}} [[นอน]][[หลับ]]
==== การผันรูป ====
{{lld-conj-IV|dorm|ester}}
== ภาษาเวเนโต ==
=== รากศัพท์ ===
จาก{{inh|vec|la|dormīre}}, present active infinitive of {{m|la|dormiō|t=ฉันนอนหลับ}}; เทียบ{{cog|it|dormire}}
=== คำกริยา ===
{{head|vec|คำกริยา}}
# {{lb|vec|อกรรม}} [[นอน]][[หลับ]]
#: {{syn|vec|momir|polegiar}}
==== การผันรูป ====
{{vec-conj-auto}}
==== คำเกี่ยวข้อง ====
{{rel3|vec|indormesar|indormesarse|indormia}}
== ภาษาสเปน ==
=== รากศัพท์ ===
{{inh+|es|osp|dormir}}, จาก{{inh|es|la|dormio|dormīre, dormiō}}, จาก{{inh|es|itc-pro|*dormiō|t=นอนหลับ}}, จาก{{der|es|ine-pro|*drem-|t=วิ่ง; นอนหลับ}}
=== การออกเสียง ===
{{es-pr|+<audio:LL-Q1321 (spa)-Rodelar-dormir.wav>}}
=== คำกริยา ===
{{es-verb|dorm|ir|pres=duermo}}
# {{lb|es|อกรรม}} [[นอน]][[หลับ]]
#: {{ux|es|'''Duermo''' muy bien todas las noches.|I '''sleep''' very well every night.}}
# {{lb|es|reflexive}} หลับ
#: {{ux|es|¿En qué piensas mientras '''te duermes'''?|What do you think of while you '''fall asleep'''?}}
# {{lb|es|reflexive}} นอน[[ตื่น]][[สาย]]
#: {{ux|es|¿Qué hora es? ¡'''Me he dormido!'''|What time is it? '''I've overslept'''!}}
# {{lb|es|euphemistic}} [[ตาย]]
#: {{ux|es|Y así la reina '''durmió''' para siempre.|And so '''rested''' the queen for forever.}}
# {{lb|es|transitive}} [[ทำ]][[ให้]]หลับ, [[กล่อม]]ให้หลับ
#: {{ux|es|Los '''durmió''' a todos usando un hechizo.|He '''put''' them all '''to sleep''' by using a spell.}}
# {{lb|es|euphemistic|แพทย์}} [[วางยา]][[สลบ]]
#: {{ux|es|Solo un médico puede '''dormir''' a un paciente.|Only a doctor can '''anesthetize''' a patient.}}
# {{lb|es|euphemistic|แพทย์}} [[กระทำ]][[การุณยฆาต]]
#: {{ux|es|Ayer por la tarde '''durmieron''' a mi gato.|Yesterday evening my cat was '''put to sleep'''.}}
==== การผันรูป ====
{{es-conj|<ue-u>}}
{{es-conj|dormirse<ue-u>}}
==== ลูกคำ ====
{{col-auto|es|bolsa de dormir|camarón que se duerme se lo lleva la corriente|casa de dormir|dormido|dormilón|dormir a pierna suelta|dormir como un ceporro|dormir como un lirón|dormir como una marmota|dormir a pata ancha
| dormir como una piedra
| dormir en Dios
| dormir en santa paz|dormir la mona|dormirla|dormirse en los laureles|durmiente|duermevela|echarse a dormir|saco de dormir|despertar a quien duerme|dormir como un leño}}
==== คำเกี่ยวข้อง ====
{{col-auto|es|adormecer|dormición|dormidero|dormidor|dormitorio|dormirse|dormitar|dormitivo}}
=== อ่านเพิ่ม ===
* {{R:es:DRAE}}
{{C|es|การนอนหลับ}}
== ภาษาอัสตูเรียส ==
=== รูปแบบอื่น ===
* {{alter|ast|adormir}}
=== รากศัพท์ ===
จาก{{inh|ast|la|dormīre}}, present active infinitive of {{m|la|dormiō}}
=== การออกเสียง ===
{{ast-IPA}}
* {{rhyme|ast|iɾ|s=2}}
* {{hyph|ast|dor|mir}}
=== คำกริยา ===
{{ast-verb-ir|dorm}}
# {{lb|ast|อกรรม}} [[นอน]][[หลับ]]
==== การผันรูป ====
{{ast-conj-ir|dorm}}
== ภาษาอินเทอร์ลิงกวา ==
=== คำกริยา ===
{{ia-verb|ir}}
# {{lb|ia|อกรรม}} [[นอน]][[หลับ]]
==== การผันรูป ====
{{ia-conj|dorm|ir|intr=yes}}
== ภาษาอุตซิตา ==
=== รูปแบบอื่น ===
* {{alter|oc|dourmir||Mistralian spelling}}
=== รากศัพท์ ===
จาก{{inh|oc|pro|dormir}}, จาก{{inh|oc|la|dormīre}}, present active infinitive of {{m|la|dormiō}}
=== การออกเสียง ===
* {{audio|oc|LL-Q942602-Davidgrosclaude-dormir.wav|a=Languedocien}}
=== คำกริยา ===
{{oc-verb|dorm|ir}}
# {{lb|oc|อกรรม}} [[นอน]][[หลับ]]
==== การผันรูป ====
{{oc-conj-ir|dorm}}
== ภาษาอุตซิตาเก่า ==
=== รากศัพท์ ===
จาก{{inh|pro|la|dormīre}}, present active infinitive of {{m|la|dormiō}}; ร่วมเชื้อสายในกลุ่ม [[Gallo-Romance]] กับ{{cog|fro|dormir}}
=== คำกริยา ===
{{head|pro|คำกริยา}}
# [[นอน]][[หลับ]]
==== คำสืบทอด ====
* {{desc|oc|dormir}}
*: {{desc|oc-auv|dromir}}
*: {{desc|oc-gas|dromir}}, {{l|oc|dròmer}}
*: {{desc|oc-lim|durmir}}
*: {{desc|oc-viv|durmir}}
=== อ้างอิง ===
* {{R:FEW|3|140|title=dormīre}}
gx17kqyi2c4pu0hrqbc1nyk36yl2upd
5729436
5729386
2026-07-20T09:37:38Z
Octahedron80
267
/* คำกริยา */
5729436
wikitext
text/x-wiki
{{minitoc}}
== ภาษากาตาลา ==
=== รากศัพท์ ===
{{inh+|ca|la|dormiō|dormīre}}, จาก{{inh|ca|itc-pro|*dormiō}}, จาก{{der|ca|ine-pro|*drem-|t=วิ่ง; นอนหลับ}}; เทียบ{{cog|oc|dormir}}, {{cog|fr|dormir}}, {{cog|es|dormir}}
=== การออกเสียง ===
* {{ca-IPA}}
* {{audio|ca|LL-Q7026 (cat)-Unjoanqualsevol-dormir.wav}}
* {{rhymes|ca|i(ɾ)|s=2}}
=== คำกริยา ===
{{ca-verb|pres_1_sg=dormo}}
# {{lb|ca|อกรรม}} [[นอน]][[หลับ]]
==== การผันรูป ====
{{ca-conj}}
==== ลูกคำ ====
{{col4|ca|adormir|condormir|dorment|dormida|dormidor|dormidora|dormilec|dormilega|dormiment|dormisquejar|dormitar}}
==== คำเกี่ยวข้อง ====
{{rel3|ca|dormició|dormitiu|dormitori}}
=== อ่านเพิ่ม ===
* {{R:ca:IEC2}}
* {{R:ca:GDLC}}
* {{R:ca:DNV}}
* {{R:ca:DCVB}}
{{C|ca|การนอนหลับ}}
== ภาษาโปรตุเกส ==
=== รูปแบบอื่น ===
* {{alt|pt|dromir||dialectal}}
* {{alt|pt|drumir|drumi|dromi|dormi|durmi||eye dialect}}
* {{alt|pt|durmir||obsolete or eye dialect}}
=== รากศัพท์ ===
จาก{{inh|pt|roa-opt|dormir}}, {{m|roa-opt|durmir}}, จาก{{inh|pt|la|dormiō|dormīre|t=นอนหลับ}}, จาก{{inh|pt|itc-pro|*dormiō}}, จาก{{der|pt|ine-pro|*drem-|t=วิ่ง; นอนหลับ}}
=== การออกเสียง ===
{{pt-IPA|do^rmir}}<!-- FIXME, is 'durmir' colloquial? -->
* {{hyph|pt|dor|mir}}
=== คำกริยา ===
{{pt-verb}}
# {{senseid|pt|to sleep}} {{lb|pt|อกรรม}} [[นอน]][[หลับ]]
#: {{ux|pt|O gato '''está dormindo'''.|The cat '''is sleeping'''.}}
# {{senseid|pt|to fall asleep}} {{lb|pt|อกรรม}} [[หลับ]]
#: {{ux|pt|Demorou horas até que eu '''dormisse'''.|Hours passed before I '''fell asleep'''.}}
# {{senseid|pt|to have a type of sleep}} {{lb|pt|สกรรม}} นอนหลับ[[บาง]][[ประเภท]]
#: {{ux|pt|'''Dormir''' uma soneca.|'''To have''' a nap.}}
# {{senseid|pt|to be inactive}} {{lb|pt|figurative|อกรรม}} [[นิ่ง]], [[เงียบ]], [[ไม่]][[เคลื่อนไหว]]
#: {{ux|pt|A célula dos terroristas está '''dormindo'''.|The terrorist cell '''is asleep'''.}}
# {{senseid|pt|to have sex with}} {{indtr|pt|com|.euphemistic}} {{lb|pt|[[dormir com]]}} [[มี]][[เพศสัมพันธ์]]
#: {{ux|pt|Peguei-a '''dormindo''' com um rapaz.|I caught her '''sleeping''' with a boy.}}
# {{senseid|pt|to be constantly with}} {{indtr|pt|com|.figurative}} {{lb|pt|[[dormir com]]}} [[คง]][[อยู่]], ไม่[[เปลี่ยนแปลง]]
#: {{ux|pt|A memória da guerra '''dorme''' com o veterano.|The memory of the war '''sleeps''' with the veteran.}}
# {{senseid|pt|to be dead}} {{lb|pt|กลอน|อกรรม}} [[ตาย]] (แล้ว)
#: {{ux|pt|Todos meus heróis '''dormem'''.|All my heroes '''are dead'''.}}
# {{senseid|pt|to lose blood circulation}} {{lb|pt|ปาก|อกรรม}} (แขนขา) [[ชา]][[เพราะ]]ไม่[[มี]][[เลือด]][[ไป]][[หล่อเลี้ยง]]
#: {{ux|pt|Acordei no meio da noite e meu braço tinha '''dormido'''.|I woke up in the middle of the night and my arm had '''fallen asleep'''.}}
# {{senseid|pt|not to notice a problem}} {{lb|pt|Brazil|สแลง|อกรรม}} ไม่[[ได้]][[สังเกต]][[หรือ]][[สนใจ]] (ปัญหา)
#: {{ux|pt|O controlador '''dormiu''' e os aviões bateram.|The controller '''didn’t pay attention''' and the aeroplanes collided.}}
==== การผันรูป ====
{{pt-conj|<u-o>}}
==== คำเกี่ยวข้อง ====
* {{l|pt|dormitório}}
==== คำสืบทอด ====
* {{desc|pov|durmi}}
* {{desc|kea|durmi}}
* {{desc|pap|drumi}}
== ภาษาฝรั่งเศส ==
=== รากศัพท์ ===
{{inh+|fr|frm|dormir}}, จาก{{inh|fr|fro|dormir}}, จาก{{inh|fr|la|dormiō|dormīre|t=นอนหลับ}}, จาก{{inh|fr|itc-pro|*dormiō}}, จาก{{der|fr|ine-pro|*drem-|t=วิ่ง; นอนหลับ}}
=== การออกเสียง ===
* {{fr-IPA}}
* {{audio|fr|Fr-dormir.ogg}}
* {{rhymes|fr|iʁ}}
=== คำกริยา ===
{{fr-verb}}
# {{lb|fr|อกรรม}} [[นอน]][[หลับ]]
#: {{uxi|fr|Vous devriez essayer de dormir.|You should try to sleep.}}
#: {{uxi|fr|Je dormais quand vous avez appelé.|I was sleeping when you called.}}
==== การผันรูป ====
{{fr-conj-auto}}
==== ลูกคำ ====
{{col4|fr|à dormir debout|qui dort dîne|dormir à poings fermés|dormir comme un bébé|dormir comme un bienheureux|dormir comme un loir|dormir comme une pierre|dormir comme une souche|dormir du sommeil du juste|dormir sur ses deux oreilles|endormir|il ne faut pas réveiller le chat qui dort|ne dormir que d'un œil}}
==== คำเกี่ยวข้อง ====
* {{l|fr|dortoir}}
==== คำสืบทอด ====
* {{desc|bzj|doado|bor=1}}
=== ดูเพิ่ม ===
* {{l|fr|coucher|se coucher}}
* {{l|fr|sommeil}}
=== อ่านเพิ่ม ===
* {{R:fr:TLFi}}
== ภาษาฝรั่งเศสกลาง ==
=== รากศัพท์ ===
จาก{{inh|frm|fro|dormir}}, จาก{{inh|frm|la|dormio|dormiō, dormīre}}
=== คำกริยา ===
{{head|frm|คำกริยา}}
# {{lb|frm|อกรรม}} [[นอน]][[หลับ]]
==== คำสืบทอด ====
* {{desc|fr|dormir}}
== ภาษาฝรั่งเศสเก่า ==
=== รากศัพท์ ===
จาก{{inh|fro|la|dormīre}}, present active infinitive of {{m|la|dormiō}}
=== คำกริยา ===
{{head|fro|คำกริยา}}
# {{lb|fro|อกรรม}} [[นอน]][[หลับ]]
==== การผันรูป ====
{{fro-conj-iii}}
==== คำสืบทอด ====
* {{desctree|frm|dormir}}
* {{desc|nrf|dormi}}
* {{desc|wa|doirmi}}
== ภาษาลาดิน ==
=== รูปแบบอื่น ===
* {{alter|lld|dormí}}
=== รากศัพท์ ===
จาก{{inh|lld|la|dormio|dormīre}}
=== คำกริยา ===
{{head|lld|คำกริยา}}
# {{lb|lld|อกรรม}} [[นอน]][[หลับ]]
==== การผันรูป ====
{{lld-conj-IV|dorm|ester}}
== ภาษาเวเนโต ==
=== รากศัพท์ ===
จาก{{inh|vec|la|dormīre}}, present active infinitive of {{m|la|dormiō|t=ฉันนอนหลับ}}; เทียบ{{cog|it|dormire}}
=== คำกริยา ===
{{head|vec|คำกริยา}}
# {{lb|vec|อกรรม}} [[นอน]][[หลับ]]
#: {{syn|vec|momir|polegiar}}
==== การผันรูป ====
{{vec-conj-auto}}
==== คำเกี่ยวข้อง ====
{{rel3|vec|indormesar|indormesarse|indormia}}
== ภาษาสเปน ==
=== รากศัพท์ ===
{{inh+|es|osp|dormir}}, จาก{{inh|es|la|dormio|dormīre, dormiō}}, จาก{{inh|es|itc-pro|*dormiō|t=นอนหลับ}}, จาก{{der|es|ine-pro|*drem-|t=วิ่ง; นอนหลับ}}
=== การออกเสียง ===
{{es-pr|+<audio:LL-Q1321 (spa)-Rodelar-dormir.wav>}}
=== คำกริยา ===
{{es-verb|<ue-u>}}
# {{lb|es|อกรรม}} [[นอน]][[หลับ]]
#: {{ux|es|'''Duermo''' muy bien todas las noches.|I '''sleep''' very well every night.}}
# {{lb|es|reflexive}} หลับ
#: {{ux|es|¿En qué piensas mientras '''te duermes'''?|What do you think of while you '''fall asleep'''?}}
# {{lb|es|reflexive}} นอน[[ตื่น]][[สาย]]
#: {{ux|es|¿Qué hora es? ¡'''Me he dormido!'''|What time is it? '''I've overslept'''!}}
# {{lb|es|euphemistic}} [[ตาย]]
#: {{ux|es|Y así la reina '''durmió''' para siempre.|And so '''rested''' the queen for forever.}}
# {{lb|es|transitive}} [[ทำ]][[ให้]]หลับ, [[กล่อม]]ให้หลับ
#: {{ux|es|Los '''durmió''' a todos usando un hechizo.|He '''put''' them all '''to sleep''' by using a spell.}}
# {{lb|es|euphemistic|แพทย์}} [[วางยา]][[สลบ]]
#: {{ux|es|Solo un médico puede '''dormir''' a un paciente.|Only a doctor can '''anesthetize''' a patient.}}
# {{lb|es|euphemistic|แพทย์}} [[กระทำ]][[การุณยฆาต]]
#: {{ux|es|Ayer por la tarde '''durmieron''' a mi gato.|Yesterday evening my cat was '''put to sleep'''.}}
==== การผันรูป ====
{{es-conj|<ue-u>}}
{{es-conj|dormirse<ue-u>}}
==== ลูกคำ ====
{{col-auto|es|bolsa de dormir|camarón que se duerme se lo lleva la corriente|casa de dormir|dormido|dormilón|dormir a pierna suelta|dormir como un ceporro|dormir como un lirón|dormir como una marmota|dormir a pata ancha
| dormir como una piedra
| dormir en Dios
| dormir en santa paz|dormir la mona|dormirla|dormirse en los laureles|durmiente|duermevela|echarse a dormir|saco de dormir|despertar a quien duerme|dormir como un leño}}
==== คำเกี่ยวข้อง ====
{{col-auto|es|adormecer|dormición|dormidero|dormidor|dormitorio|dormirse|dormitar|dormitivo}}
=== อ่านเพิ่ม ===
* {{R:es:DRAE}}
{{C|es|การนอนหลับ}}
== ภาษาอัสตูเรียส ==
=== รูปแบบอื่น ===
* {{alter|ast|adormir}}
=== รากศัพท์ ===
จาก{{inh|ast|la|dormīre}}, present active infinitive of {{m|la|dormiō}}
=== การออกเสียง ===
{{ast-IPA}}
* {{rhyme|ast|iɾ|s=2}}
* {{hyph|ast|dor|mir}}
=== คำกริยา ===
{{ast-verb-ir|dorm}}
# {{lb|ast|อกรรม}} [[นอน]][[หลับ]]
==== การผันรูป ====
{{ast-conj-ir|dorm}}
== ภาษาอินเทอร์ลิงกวา ==
=== คำกริยา ===
{{ia-verb|ir}}
# {{lb|ia|อกรรม}} [[นอน]][[หลับ]]
==== การผันรูป ====
{{ia-conj|dorm|ir|intr=yes}}
== ภาษาอุตซิตา ==
=== รูปแบบอื่น ===
* {{alter|oc|dourmir||Mistralian spelling}}
=== รากศัพท์ ===
จาก{{inh|oc|pro|dormir}}, จาก{{inh|oc|la|dormīre}}, present active infinitive of {{m|la|dormiō}}
=== การออกเสียง ===
* {{audio|oc|LL-Q942602-Davidgrosclaude-dormir.wav|a=Languedocien}}
=== คำกริยา ===
{{oc-verb|dorm|ir}}
# {{lb|oc|อกรรม}} [[นอน]][[หลับ]]
==== การผันรูป ====
{{oc-conj-ir|dorm}}
== ภาษาอุตซิตาเก่า ==
=== รากศัพท์ ===
จาก{{inh|pro|la|dormīre}}, present active infinitive of {{m|la|dormiō}}; ร่วมเชื้อสายในกลุ่ม [[Gallo-Romance]] กับ{{cog|fro|dormir}}
=== คำกริยา ===
{{head|pro|คำกริยา}}
# [[นอน]][[หลับ]]
==== คำสืบทอด ====
* {{desc|oc|dormir}}
*: {{desc|oc-auv|dromir}}
*: {{desc|oc-gas|dromir}}, {{l|oc|dròmer}}
*: {{desc|oc-lim|durmir}}
*: {{desc|oc-viv|durmir}}
=== อ้างอิง ===
* {{R:FEW|3|140|title=dormīre}}
h2eve6z55g461e9amhu5pvnfre0sfa4
5729442
5729436
2026-07-20T09:39:28Z
Octahedron80
267
5729442
wikitext
text/x-wiki
{{minitoc}}
== ภาษากาตาลา ==
=== รากศัพท์ ===
{{inh+|ca|la|dormiō|dormīre}}, จาก{{inh|ca|itc-pro|*dormiō}}, จาก{{der|ca|ine-pro|*drem-|t=วิ่ง; นอนหลับ}}; เทียบ{{cog|oc|dormir}}, {{cog|fr|dormir}}, {{cog|es|dormir}}
=== การออกเสียง ===
* {{ca-IPA}}
* {{audio|ca|LL-Q7026 (cat)-Unjoanqualsevol-dormir.wav}}
* {{rhymes|ca|i(ɾ)|s=2}}
=== คำกริยา ===
{{ca-verb|pres_1_sg=dormo}}
# {{lb|ca|อกรรม}} [[นอนหลับ]]
==== การผันรูป ====
{{ca-conj}}
==== ลูกคำ ====
{{col4|ca|adormir|condormir|dorment|dormida|dormidor|dormidora|dormilec|dormilega|dormiment|dormisquejar|dormitar}}
==== คำเกี่ยวข้อง ====
{{rel3|ca|dormició|dormitiu|dormitori}}
=== อ่านเพิ่ม ===
* {{R:ca:IEC2}}
* {{R:ca:GDLC}}
* {{R:ca:DNV}}
* {{R:ca:DCVB}}
{{C|ca|การนอนหลับ}}
== ภาษาโปรตุเกส ==
=== รูปแบบอื่น ===
* {{alt|pt|dromir||dialectal}}
* {{alt|pt|drumir|drumi|dromi|dormi|durmi||eye dialect}}
* {{alt|pt|durmir||obsolete or eye dialect}}
=== รากศัพท์ ===
จาก{{inh|pt|roa-opt|dormir}}, {{m|roa-opt|durmir}}, จาก{{inh|pt|la|dormiō|dormīre|t=นอนหลับ}}, จาก{{inh|pt|itc-pro|*dormiō}}, จาก{{der|pt|ine-pro|*drem-|t=วิ่ง; นอนหลับ}}
=== การออกเสียง ===
{{pt-IPA|do^rmir}}<!-- FIXME, is 'durmir' colloquial? -->
* {{hyph|pt|dor|mir}}
=== คำกริยา ===
{{pt-verb}}
# {{senseid|pt|to sleep}} {{lb|pt|อกรรม}} [[นอนหลับ]]
#: {{ux|pt|O gato '''está dormindo'''.|The cat '''is sleeping'''.}}
# {{senseid|pt|to fall asleep}} {{lb|pt|อกรรม}} [[หลับ]]
#: {{ux|pt|Demorou horas até que eu '''dormisse'''.|Hours passed before I '''fell asleep'''.}}
# {{senseid|pt|to have a type of sleep}} {{lb|pt|สกรรม}} นอนหลับ[[บาง]][[ประเภท]]
#: {{ux|pt|'''Dormir''' uma soneca.|'''To have''' a nap.}}
# {{senseid|pt|to be inactive}} {{lb|pt|figurative|อกรรม}} [[นิ่ง]], [[เงียบ]], [[ไม่]][[เคลื่อนไหว]]
#: {{ux|pt|A célula dos terroristas está '''dormindo'''.|The terrorist cell '''is asleep'''.}}
# {{senseid|pt|to have sex with}} {{indtr|pt|com|.euphemistic}} {{lb|pt|[[dormir com]]}} [[มี]][[เพศสัมพันธ์]]
#: {{ux|pt|Peguei-a '''dormindo''' com um rapaz.|I caught her '''sleeping''' with a boy.}}
# {{senseid|pt|to be constantly with}} {{indtr|pt|com|.figurative}} {{lb|pt|[[dormir com]]}} [[คง]][[อยู่]], ไม่[[เปลี่ยนแปลง]]
#: {{ux|pt|A memória da guerra '''dorme''' com o veterano.|The memory of the war '''sleeps''' with the veteran.}}
# {{senseid|pt|to be dead}} {{lb|pt|กลอน|อกรรม}} [[ตาย]] (แล้ว)
#: {{ux|pt|Todos meus heróis '''dormem'''.|All my heroes '''are dead'''.}}
# {{senseid|pt|to lose blood circulation}} {{lb|pt|ปาก|อกรรม}} (แขนขา) [[ชา]][[เพราะ]]ไม่[[มี]][[เลือด]][[ไป]][[หล่อเลี้ยง]]
#: {{ux|pt|Acordei no meio da noite e meu braço tinha '''dormido'''.|I woke up in the middle of the night and my arm had '''fallen asleep'''.}}
# {{senseid|pt|not to notice a problem}} {{lb|pt|Brazil|สแลง|อกรรม}} ไม่[[ได้]][[สังเกต]][[หรือ]][[สนใจ]] (ปัญหา)
#: {{ux|pt|O controlador '''dormiu''' e os aviões bateram.|The controller '''didn’t pay attention''' and the aeroplanes collided.}}
==== การผันรูป ====
{{pt-conj|<u-o>}}
==== คำเกี่ยวข้อง ====
* {{l|pt|dormitório}}
==== คำสืบทอด ====
* {{desc|pov|durmi}}
* {{desc|kea|durmi}}
* {{desc|pap|drumi}}
== ภาษาฝรั่งเศส ==
=== รากศัพท์ ===
{{inh+|fr|frm|dormir}}, จาก{{inh|fr|fro|dormir}}, จาก{{inh|fr|la|dormiō|dormīre|t=นอนหลับ}}, จาก{{inh|fr|itc-pro|*dormiō}}, จาก{{der|fr|ine-pro|*drem-|t=วิ่ง; นอนหลับ}}
=== การออกเสียง ===
* {{fr-IPA}}
* {{audio|fr|Fr-dormir.ogg}}
* {{rhymes|fr|iʁ}}
=== คำกริยา ===
{{fr-verb}}
# {{lb|fr|อกรรม}} [[นอนหลับ]]
#: {{uxi|fr|Vous devriez essayer de dormir.|You should try to sleep.}}
#: {{uxi|fr|Je dormais quand vous avez appelé.|I was sleeping when you called.}}
==== การผันรูป ====
{{fr-conj-auto}}
==== ลูกคำ ====
{{col4|fr|à dormir debout|qui dort dîne|dormir à poings fermés|dormir comme un bébé|dormir comme un bienheureux|dormir comme un loir|dormir comme une pierre|dormir comme une souche|dormir du sommeil du juste|dormir sur ses deux oreilles|endormir|il ne faut pas réveiller le chat qui dort|ne dormir que d'un œil}}
==== คำเกี่ยวข้อง ====
* {{l|fr|dortoir}}
==== คำสืบทอด ====
* {{desc|bzj|doado|bor=1}}
=== ดูเพิ่ม ===
* {{l|fr|coucher|se coucher}}
* {{l|fr|sommeil}}
=== อ่านเพิ่ม ===
* {{R:fr:TLFi}}
== ภาษาฝรั่งเศสกลาง ==
=== รากศัพท์ ===
จาก{{inh|frm|fro|dormir}}, จาก{{inh|frm|la|dormio|dormiō, dormīre}}
=== คำกริยา ===
{{head|frm|คำกริยา}}
# {{lb|frm|อกรรม}} [[นอนหลับ]]
==== คำสืบทอด ====
* {{desc|fr|dormir}}
== ภาษาฝรั่งเศสเก่า ==
=== รากศัพท์ ===
จาก{{inh|fro|la|dormīre}}, present active infinitive of {{m|la|dormiō}}
=== คำกริยา ===
{{head|fro|คำกริยา}}
# {{lb|fro|อกรรม}} [[นอนหลับ]]
==== การผันรูป ====
{{fro-conj-iii}}
==== คำสืบทอด ====
* {{desctree|frm|dormir}}
* {{desc|nrf|dormi}}
* {{desc|wa|doirmi}}
== ภาษาลาดิน ==
=== รูปแบบอื่น ===
* {{alter|lld|dormí}}
=== รากศัพท์ ===
จาก{{inh|lld|la|dormio|dormīre}}
=== คำกริยา ===
{{head|lld|คำกริยา}}
# {{lb|lld|อกรรม}} [[นอนหลับ]]
==== การผันรูป ====
{{lld-conj-IV|dorm|ester}}
== ภาษาเวเนโต ==
=== รากศัพท์ ===
จาก{{inh|vec|la|dormīre}}, present active infinitive of {{m|la|dormiō|t=ฉันนอนหลับ}}; เทียบ{{cog|it|dormire}}
=== คำกริยา ===
{{head|vec|คำกริยา}}
# {{lb|vec|อกรรม}} [[นอนหลับ]]
#: {{syn|vec|momir|polegiar}}
==== การผันรูป ====
{{vec-conj-auto}}
==== คำเกี่ยวข้อง ====
{{rel3|vec|indormesar|indormesarse|indormia}}
== ภาษาสเปน ==
=== รากศัพท์ ===
{{inh+|es|osp|dormir}}, จาก{{inh|es|la|dormio|dormīre, dormiō}}, จาก{{inh|es|itc-pro|*dormiō|t=นอนหลับ}}, จาก{{der|es|ine-pro|*drem-|t=วิ่ง; นอนหลับ}}
=== การออกเสียง ===
{{es-pr|+<audio:LL-Q1321 (spa)-Rodelar-dormir.wav>}}
=== คำกริยา ===
{{es-verb|<ue-u>}}
# {{lb|es|อกรรม}} [[นอนหลับ]]
#: {{ux|es|'''Duermo''' muy bien todas las noches.|I '''sleep''' very well every night.}}
# {{lb|es|reflexive}} หลับ
#: {{ux|es|¿En qué piensas mientras '''te duermes'''?|What do you think of while you '''fall asleep'''?}}
# {{lb|es|reflexive}} นอน[[ตื่น]][[สาย]]
#: {{ux|es|¿Qué hora es? ¡'''Me he dormido!'''|What time is it? '''I've overslept'''!}}
# {{lb|es|euphemistic}} [[ตาย]]
#: {{ux|es|Y así la reina '''durmió''' para siempre.|And so '''rested''' the queen for forever.}}
# {{lb|es|transitive}} [[ทำ]][[ให้]]หลับ, [[กล่อม]]ให้หลับ
#: {{ux|es|Los '''durmió''' a todos usando un hechizo.|He '''put''' them all '''to sleep''' by using a spell.}}
# {{lb|es|euphemistic|แพทย์}} [[วางยา]][[สลบ]]
#: {{ux|es|Solo un médico puede '''dormir''' a un paciente.|Only a doctor can '''anesthetize''' a patient.}}
# {{lb|es|euphemistic|แพทย์}} [[กระทำ]][[การุณยฆาต]]
#: {{ux|es|Ayer por la tarde '''durmieron''' a mi gato.|Yesterday evening my cat was '''put to sleep'''.}}
==== การผันรูป ====
{{es-conj|<ue-u>}}
{{es-conj|dormirse<ue-u>}}
==== ลูกคำ ====
{{col-auto|es|bolsa de dormir|camarón que se duerme se lo lleva la corriente|casa de dormir|dormido|dormilón|dormir a pierna suelta|dormir como un ceporro|dormir como un lirón|dormir como una marmota|dormir a pata ancha
| dormir como una piedra
| dormir en Dios
| dormir en santa paz|dormir la mona|dormirla|dormirse en los laureles|durmiente|duermevela|echarse a dormir|saco de dormir|despertar a quien duerme|dormir como un leño}}
==== คำเกี่ยวข้อง ====
{{col-auto|es|adormecer|dormición|dormidero|dormidor|dormitorio|dormirse|dormitar|dormitivo}}
=== อ่านเพิ่ม ===
* {{R:es:DRAE}}
{{C|es|การนอนหลับ}}
== ภาษาอัสตูเรียส ==
=== รูปแบบอื่น ===
* {{alter|ast|adormir}}
=== รากศัพท์ ===
จาก{{inh|ast|la|dormīre}}, present active infinitive of {{m|la|dormiō}}
=== การออกเสียง ===
{{ast-IPA}}
* {{rhyme|ast|iɾ|s=2}}
* {{hyph|ast|dor|mir}}
=== คำกริยา ===
{{ast-verb-ir|dorm}}
# {{lb|ast|อกรรม}} [[นอนหลับ]]
==== การผันรูป ====
{{ast-conj-ir|dorm}}
== ภาษาอินเทอร์ลิงกวา ==
=== คำกริยา ===
{{ia-verb|ir}}
# {{lb|ia|อกรรม}} [[นอนหลับ]]
==== การผันรูป ====
{{ia-conj|dorm|ir|intr=yes}}
== ภาษาอุตซิตา ==
=== รูปแบบอื่น ===
* {{alter|oc|dourmir||Mistralian spelling}}
=== รากศัพท์ ===
จาก{{inh|oc|pro|dormir}}, จาก{{inh|oc|la|dormīre}}, present active infinitive of {{m|la|dormiō}}
=== การออกเสียง ===
* {{audio|oc|LL-Q942602-Davidgrosclaude-dormir.wav|a=Languedocien}}
=== คำกริยา ===
{{oc-verb|dorm|ir}}
# {{lb|oc|อกรรม}} [[นอนหลับ]]
==== การผันรูป ====
{{oc-conj-ir|dorm}}
== ภาษาอุตซิตาเก่า ==
=== รากศัพท์ ===
จาก{{inh|pro|la|dormīre}}, present active infinitive of {{m|la|dormiō}}; ร่วมเชื้อสายในกลุ่ม [[Gallo-Romance]] กับ{{cog|fro|dormir}}
=== คำกริยา ===
{{head|pro|คำกริยา}}
# [[นอนหลับ]]
==== คำสืบทอด ====
* {{desc|oc|dormir}}
*: {{desc|oc-auv|dromir}}
*: {{desc|oc-gas|dromir}}, {{l|oc|dròmer}}
*: {{desc|oc-lim|durmir}}
*: {{desc|oc-viv|durmir}}
=== อ้างอิง ===
* {{R:FEW|3|140|title=dormīre}}
33u34i5fl5eqf2bs9581j5rf4ec8gxd
5729443
5729442
2026-07-20T09:39:57Z
Octahedron80
267
/* คำกริยา */
5729443
wikitext
text/x-wiki
{{minitoc}}
== ภาษากาตาลา ==
=== รากศัพท์ ===
{{inh+|ca|la|dormiō|dormīre}}, จาก{{inh|ca|itc-pro|*dormiō}}, จาก{{der|ca|ine-pro|*drem-|t=วิ่ง; นอนหลับ}}; เทียบ{{cog|oc|dormir}}, {{cog|fr|dormir}}, {{cog|es|dormir}}
=== การออกเสียง ===
* {{ca-IPA}}
* {{audio|ca|LL-Q7026 (cat)-Unjoanqualsevol-dormir.wav}}
* {{rhymes|ca|i(ɾ)|s=2}}
=== คำกริยา ===
{{ca-verb|pres_1_sg=dormo}}
# {{lb|ca|อกรรม}} [[นอนหลับ]]
==== การผันรูป ====
{{ca-conj}}
==== ลูกคำ ====
{{col4|ca|adormir|condormir|dorment|dormida|dormidor|dormidora|dormilec|dormilega|dormiment|dormisquejar|dormitar}}
==== คำเกี่ยวข้อง ====
{{rel3|ca|dormició|dormitiu|dormitori}}
=== อ่านเพิ่ม ===
* {{R:ca:IEC2}}
* {{R:ca:GDLC}}
* {{R:ca:DNV}}
* {{R:ca:DCVB}}
{{C|ca|การนอนหลับ}}
== ภาษาโปรตุเกส ==
=== รูปแบบอื่น ===
* {{alt|pt|dromir||dialectal}}
* {{alt|pt|drumir|drumi|dromi|dormi|durmi||eye dialect}}
* {{alt|pt|durmir||obsolete or eye dialect}}
=== รากศัพท์ ===
จาก{{inh|pt|roa-opt|dormir}}, {{m|roa-opt|durmir}}, จาก{{inh|pt|la|dormiō|dormīre|t=นอนหลับ}}, จาก{{inh|pt|itc-pro|*dormiō}}, จาก{{der|pt|ine-pro|*drem-|t=วิ่ง; นอนหลับ}}
=== การออกเสียง ===
{{pt-IPA|do^rmir}}<!-- FIXME, is 'durmir' colloquial? -->
* {{hyph|pt|dor|mir}}
=== คำกริยา ===
{{pt-verb}}
# {{senseid|pt|to sleep}} {{lb|pt|อกรรม}} [[นอนหลับ]]
#: {{ux|pt|O gato '''está dormindo'''.|The cat '''is sleeping'''.}}
# {{senseid|pt|to fall asleep}} {{lb|pt|อกรรม}} [[ผล็อย]][[หลับ]]
#: {{ux|pt|Demorou horas até que eu '''dormisse'''.|Hours passed before I '''fell asleep'''.}}
# {{senseid|pt|to have a type of sleep}} {{lb|pt|สกรรม}} นอนหลับ[[บาง]][[ประเภท]]
#: {{ux|pt|'''Dormir''' uma soneca.|'''To have''' a nap.}}
# {{senseid|pt|to be inactive}} {{lb|pt|figurative|อกรรม}} [[นิ่ง]], [[เงียบ]], [[ไม่]][[เคลื่อนไหว]]
#: {{ux|pt|A célula dos terroristas está '''dormindo'''.|The terrorist cell '''is asleep'''.}}
# {{senseid|pt|to have sex with}} {{indtr|pt|com|.euphemistic}} {{lb|pt|[[dormir com]]}} [[มี]][[เพศสัมพันธ์]]
#: {{ux|pt|Peguei-a '''dormindo''' com um rapaz.|I caught her '''sleeping''' with a boy.}}
# {{senseid|pt|to be constantly with}} {{indtr|pt|com|.figurative}} {{lb|pt|[[dormir com]]}} [[คง]][[อยู่]], ไม่[[เปลี่ยนแปลง]]
#: {{ux|pt|A memória da guerra '''dorme''' com o veterano.|The memory of the war '''sleeps''' with the veteran.}}
# {{senseid|pt|to be dead}} {{lb|pt|กลอน|อกรรม}} [[ตาย]] (แล้ว)
#: {{ux|pt|Todos meus heróis '''dormem'''.|All my heroes '''are dead'''.}}
# {{senseid|pt|to lose blood circulation}} {{lb|pt|ปาก|อกรรม}} (แขนขา) [[ชา]][[เพราะ]]ไม่[[มี]][[เลือด]][[ไป]][[หล่อเลี้ยง]]
#: {{ux|pt|Acordei no meio da noite e meu braço tinha '''dormido'''.|I woke up in the middle of the night and my arm had '''fallen asleep'''.}}
# {{senseid|pt|not to notice a problem}} {{lb|pt|Brazil|สแลง|อกรรม}} ไม่[[ได้]][[สังเกต]][[หรือ]][[สนใจ]] (ปัญหา)
#: {{ux|pt|O controlador '''dormiu''' e os aviões bateram.|The controller '''didn’t pay attention''' and the aeroplanes collided.}}
==== การผันรูป ====
{{pt-conj|<u-o>}}
==== คำเกี่ยวข้อง ====
* {{l|pt|dormitório}}
==== คำสืบทอด ====
* {{desc|pov|durmi}}
* {{desc|kea|durmi}}
* {{desc|pap|drumi}}
== ภาษาฝรั่งเศส ==
=== รากศัพท์ ===
{{inh+|fr|frm|dormir}}, จาก{{inh|fr|fro|dormir}}, จาก{{inh|fr|la|dormiō|dormīre|t=นอนหลับ}}, จาก{{inh|fr|itc-pro|*dormiō}}, จาก{{der|fr|ine-pro|*drem-|t=วิ่ง; นอนหลับ}}
=== การออกเสียง ===
* {{fr-IPA}}
* {{audio|fr|Fr-dormir.ogg}}
* {{rhymes|fr|iʁ}}
=== คำกริยา ===
{{fr-verb}}
# {{lb|fr|อกรรม}} [[นอนหลับ]]
#: {{uxi|fr|Vous devriez essayer de dormir.|You should try to sleep.}}
#: {{uxi|fr|Je dormais quand vous avez appelé.|I was sleeping when you called.}}
==== การผันรูป ====
{{fr-conj-auto}}
==== ลูกคำ ====
{{col4|fr|à dormir debout|qui dort dîne|dormir à poings fermés|dormir comme un bébé|dormir comme un bienheureux|dormir comme un loir|dormir comme une pierre|dormir comme une souche|dormir du sommeil du juste|dormir sur ses deux oreilles|endormir|il ne faut pas réveiller le chat qui dort|ne dormir que d'un œil}}
==== คำเกี่ยวข้อง ====
* {{l|fr|dortoir}}
==== คำสืบทอด ====
* {{desc|bzj|doado|bor=1}}
=== ดูเพิ่ม ===
* {{l|fr|coucher|se coucher}}
* {{l|fr|sommeil}}
=== อ่านเพิ่ม ===
* {{R:fr:TLFi}}
== ภาษาฝรั่งเศสกลาง ==
=== รากศัพท์ ===
จาก{{inh|frm|fro|dormir}}, จาก{{inh|frm|la|dormio|dormiō, dormīre}}
=== คำกริยา ===
{{head|frm|คำกริยา}}
# {{lb|frm|อกรรม}} [[นอนหลับ]]
==== คำสืบทอด ====
* {{desc|fr|dormir}}
== ภาษาฝรั่งเศสเก่า ==
=== รากศัพท์ ===
จาก{{inh|fro|la|dormīre}}, present active infinitive of {{m|la|dormiō}}
=== คำกริยา ===
{{head|fro|คำกริยา}}
# {{lb|fro|อกรรม}} [[นอนหลับ]]
==== การผันรูป ====
{{fro-conj-iii}}
==== คำสืบทอด ====
* {{desctree|frm|dormir}}
* {{desc|nrf|dormi}}
* {{desc|wa|doirmi}}
== ภาษาลาดิน ==
=== รูปแบบอื่น ===
* {{alter|lld|dormí}}
=== รากศัพท์ ===
จาก{{inh|lld|la|dormio|dormīre}}
=== คำกริยา ===
{{head|lld|คำกริยา}}
# {{lb|lld|อกรรม}} [[นอนหลับ]]
==== การผันรูป ====
{{lld-conj-IV|dorm|ester}}
== ภาษาเวเนโต ==
=== รากศัพท์ ===
จาก{{inh|vec|la|dormīre}}, present active infinitive of {{m|la|dormiō|t=ฉันนอนหลับ}}; เทียบ{{cog|it|dormire}}
=== คำกริยา ===
{{head|vec|คำกริยา}}
# {{lb|vec|อกรรม}} [[นอนหลับ]]
#: {{syn|vec|momir|polegiar}}
==== การผันรูป ====
{{vec-conj-auto}}
==== คำเกี่ยวข้อง ====
{{rel3|vec|indormesar|indormesarse|indormia}}
== ภาษาสเปน ==
=== รากศัพท์ ===
{{inh+|es|osp|dormir}}, จาก{{inh|es|la|dormio|dormīre, dormiō}}, จาก{{inh|es|itc-pro|*dormiō|t=นอนหลับ}}, จาก{{der|es|ine-pro|*drem-|t=วิ่ง; นอนหลับ}}
=== การออกเสียง ===
{{es-pr|+<audio:LL-Q1321 (spa)-Rodelar-dormir.wav>}}
=== คำกริยา ===
{{es-verb|<ue-u>}}
# {{lb|es|อกรรม}} [[นอนหลับ]]
#: {{ux|es|'''Duermo''' muy bien todas las noches.|I '''sleep''' very well every night.}}
# {{lb|es|reflexive}} หลับ
#: {{ux|es|¿En qué piensas mientras '''te duermes'''?|What do you think of while you '''fall asleep'''?}}
# {{lb|es|reflexive}} นอน[[ตื่น]][[สาย]]
#: {{ux|es|¿Qué hora es? ¡'''Me he dormido!'''|What time is it? '''I've overslept'''!}}
# {{lb|es|euphemistic}} [[ตาย]]
#: {{ux|es|Y así la reina '''durmió''' para siempre.|And so '''rested''' the queen for forever.}}
# {{lb|es|transitive}} [[ทำ]][[ให้]]หลับ, [[กล่อม]]ให้หลับ
#: {{ux|es|Los '''durmió''' a todos usando un hechizo.|He '''put''' them all '''to sleep''' by using a spell.}}
# {{lb|es|euphemistic|แพทย์}} [[วางยา]][[สลบ]]
#: {{ux|es|Solo un médico puede '''dormir''' a un paciente.|Only a doctor can '''anesthetize''' a patient.}}
# {{lb|es|euphemistic|แพทย์}} [[กระทำ]][[การุณยฆาต]]
#: {{ux|es|Ayer por la tarde '''durmieron''' a mi gato.|Yesterday evening my cat was '''put to sleep'''.}}
==== การผันรูป ====
{{es-conj|<ue-u>}}
{{es-conj|dormirse<ue-u>}}
==== ลูกคำ ====
{{col-auto|es|bolsa de dormir|camarón que se duerme se lo lleva la corriente|casa de dormir|dormido|dormilón|dormir a pierna suelta|dormir como un ceporro|dormir como un lirón|dormir como una marmota|dormir a pata ancha
| dormir como una piedra
| dormir en Dios
| dormir en santa paz|dormir la mona|dormirla|dormirse en los laureles|durmiente|duermevela|echarse a dormir|saco de dormir|despertar a quien duerme|dormir como un leño}}
==== คำเกี่ยวข้อง ====
{{col-auto|es|adormecer|dormición|dormidero|dormidor|dormitorio|dormirse|dormitar|dormitivo}}
=== อ่านเพิ่ม ===
* {{R:es:DRAE}}
{{C|es|การนอนหลับ}}
== ภาษาอัสตูเรียส ==
=== รูปแบบอื่น ===
* {{alter|ast|adormir}}
=== รากศัพท์ ===
จาก{{inh|ast|la|dormīre}}, present active infinitive of {{m|la|dormiō}}
=== การออกเสียง ===
{{ast-IPA}}
* {{rhyme|ast|iɾ|s=2}}
* {{hyph|ast|dor|mir}}
=== คำกริยา ===
{{ast-verb-ir|dorm}}
# {{lb|ast|อกรรม}} [[นอนหลับ]]
==== การผันรูป ====
{{ast-conj-ir|dorm}}
== ภาษาอินเทอร์ลิงกวา ==
=== คำกริยา ===
{{ia-verb|ir}}
# {{lb|ia|อกรรม}} [[นอนหลับ]]
==== การผันรูป ====
{{ia-conj|dorm|ir|intr=yes}}
== ภาษาอุตซิตา ==
=== รูปแบบอื่น ===
* {{alter|oc|dourmir||Mistralian spelling}}
=== รากศัพท์ ===
จาก{{inh|oc|pro|dormir}}, จาก{{inh|oc|la|dormīre}}, present active infinitive of {{m|la|dormiō}}
=== การออกเสียง ===
* {{audio|oc|LL-Q942602-Davidgrosclaude-dormir.wav|a=Languedocien}}
=== คำกริยา ===
{{oc-verb|dorm|ir}}
# {{lb|oc|อกรรม}} [[นอนหลับ]]
==== การผันรูป ====
{{oc-conj-ir|dorm}}
== ภาษาอุตซิตาเก่า ==
=== รากศัพท์ ===
จาก{{inh|pro|la|dormīre}}, present active infinitive of {{m|la|dormiō}}; ร่วมเชื้อสายในกลุ่ม [[Gallo-Romance]] กับ{{cog|fro|dormir}}
=== คำกริยา ===
{{head|pro|คำกริยา}}
# [[นอนหลับ]]
==== คำสืบทอด ====
* {{desc|oc|dormir}}
*: {{desc|oc-auv|dromir}}
*: {{desc|oc-gas|dromir}}, {{l|oc|dròmer}}
*: {{desc|oc-lim|durmir}}
*: {{desc|oc-viv|durmir}}
=== อ้างอิง ===
* {{R:FEW|3|140|title=dormīre}}
l2uw9vvuchshfraeu326pp6vw5ysoz2
มอดูล:languages/code to canonical name
828
174988
5729122
5727410
2026-07-20T02:25:04Z
Octahedron80
267
5729122
Scribunto
text/plain
return {
["aa"] = "อาฟาร์",
["aaa"] = "Ghotuo",
["aab"] = "Alumu-Tesu",
["aac"] = "Ari",
["aad"] = "Amal",
["aaf"] = "Aranadan",
["aag"] = "Ambrak",
["aah"] = "Abu'",
["aai"] = "Arifama-Miniafia",
["aak"] = "Ankave",
["aal"] = "Afade",
["aan"] = "Anambé",
["aap"] = "Arára (Pará)",
["aaq"] = "Penobscot",
["aas"] = "Aasax",
["aau"] = "Abau",
["aav-khs-pro"] = "คาเซียนดั้งเดิม",
["aav-nic-pro"] = "นิโคบารีสดั้งเดิม",
["aav-pkl-pro"] = "ปนัร-คาซี-ลึงงัมดั้งเดิม",
["aav-pro"] = "ออสโตรเอเชียติกดั้งเดิม",
["aaw"] = "Solong",
["aax"] = "Mandobo Atas",
["aaz"] = "Amarasi",
["ab"] = "อับคาเซีย",
["aba"] = "อาเบ",
["abb"] = "Bankon",
["abc"] = "Ambala Ayta",
["abd"] = "Camarines Norte Agta",
["abe"] = "Abenaki",
["abf"] = "Abai Sungai",
["abg"] = "Abaga",
["abh"] = "อาหรับแบบทาจิกิสถาน",
["abi"] = "Abidji",
["abj"] = "Aka-Bea",
["abl"] = "Abung",
["abm"] = "Abanyom",
["abn"] = "Abua",
["abo"] = "Abon",
["abp"] = "Abenlen Ayta",
["abq"] = "อาบาซา",
["abs"] = "Ambonese Malay",
["abt"] = "Ambulas",
["abu"] = "Abure",
["abv"] = "อาหรับแบบบาห์เรน",
["abw"] = "Pal",
["abx"] = "Inabaknon",
["aby"] = "Aneme Wake",
["abz"] = "Abui",
["aca"] = "Achagua",
["acb"] = "Áncá",
["acd"] = "Gikyode",
["ace"] = "อาเจะฮ์",
["ach"] = "Acholi",
["aci"] = "Aka-Cari",
["ack"] = "Aka-Kora",
["acl"] = "Akar-Bale",
["acm"] = "อาหรับแบบอิรัก",
["acn"] = "Achang",
["acp"] = "Eastern Acipa",
["acr"] = "Achi",
["acs"] = "Acroá",
["acu"] = "Achuar",
["acv"] = "Achumawi",
["acw"] = "อาหรับแบบฮิญาซ",
["acx"] = "อาหรับแบบโอมาน",
["acy"] = "อาหรับแบบไซปรัส",
["acz"] = "Acheron",
["ada"] = "Adangme",
["adb"] = "Atauran",
["add"] = "Dzodinka",
["ade"] = "Adele",
["adf"] = "Dhofari Arabic",
["adg"] = "Andegerebinha",
["adh"] = "Adhola",
["adi"] = "Adi",
["adj"] = "Adioukrou",
["adl"] = "Galo",
["adn"] = "Adang",
["ado"] = "Abu",
["adp"] = "Adap",
["adq"] = "Adangbe",
["adr"] = "Adonara",
["ads"] = "Adamorobe Sign Language",
["adt"] = "Adnyamathanha",
["adu"] = "Aduge",
["adw"] = "Amondawa",
["ady"] = "อะดีเกยา",
["adz"] = "Adzera",
["ae"] = "อเวสตะ",
["aea"] = "Areba",
["aeb"] = "อาหรับแบบตูนิเซีย",
["aed"] = "Argentine Sign Language",
["aee"] = "Northeast Pashayi",
["aek"] = "Haeke",
["ael"] = "Ambele",
["aem"] = "Arem",
["aen"] = "Armenian Sign Language",
["aeq"] = "Aer",
["aer"] = "Eastern Arrernte",
["aes"] = "Alsea",
["aeu"] = "Akeu",
["aew"] = "Ambakich",
["aey"] = "Amele",
["aez"] = "Aeka",
["af"] = "อาฟรีกานส์",
["afa-pro"] = "แอฟโฟรเอเชียติกดั้งเดิม",
["afb"] = "Gulf Arabic",
["afd"] = "Andai",
["afe"] = "Putukwam",
["afg"] = "Afghan Sign Language",
["afh"] = "Afrihili",
["afi"] = "Akrukay",
["afk"] = "Nanubae",
["afn"] = "Defaka",
["afo"] = "Eloyi",
["afp"] = "Tapei",
["afs"] = "Afro-Seminole Creole",
["aft"] = "Afitti",
["afu"] = "Awutu",
["afz"] = "Obokuitai",
["aga"] = "Aguano",
["agb"] = "Legbo",
["agc"] = "Agatu",
["agd"] = "Agarabi",
["age"] = "Angal",
["agf"] = "Arguni",
["agg"] = "Angor",
["agh"] = "Ngelima",
["agi"] = "Agariya",
["agj"] = "Argobba",
["agk"] = "Isarog Agta",
["agl"] = "Fembe",
["agm"] = "Angaataha",
["agn"] = "อากูตายา",
["ago"] = "Tainae",
["agq"] = "Aghem",
["agr"] = "Aguaruna",
["ags"] = "Esimbi",
["agt"] = "Central Cagayan Agta",
["agu"] = "Aguacateca",
["agv"] = "Remontado Agta",
["agw"] = "Kahua",
["agx"] = "Aghul",
["agy"] = "Southern Alta",
["agz"] = "Mount Iriga Agta",
["aha"] = "Ahanta",
["ahb"] = "Axamb",
["ahg"] = "Qimant",
["ahh"] = "Aghu",
["ahi"] = "Tiagba",
["ahk"] = "อาข่า",
["ahl"] = "Igo",
["ahm"] = "Mobu",
["ahn"] = "Àhàn",
["aho"] = "อาหม",
["ahp"] = "Apro",
["ahr"] = "Ahirani",
["ahs"] = "Ashe",
["aht"] = "Ahtna",
["aia"] = "Arosi",
["aib"] = "Äynu",
["aic"] = "Ainbai",
["aid"] = "Alngith",
["aie"] = "Amara",
["aif"] = "Agi",
["aig"] = "Antigua and Barbuda Creole English",
["aih"] = "Ai-Cham",
["aii"] = "อารามายาใหม่แบบอัสซีเรีย",
["aij"] = "Lishanid Noshan",
["aik"] = "Ake",
["ail"] = "Aimele",
["aim"] = "Aimol",
["ain"] = "ไอนุ",
["aio"] = "อ่ายตน",
["aip"] = "Burumakok",
["air"] = "Airoran",
["ait"] = "Arikem",
["aiw"] = "Aari",
["aix"] = "Aighon",
["aiy"] = "Ali",
["aja"] = "Aja",
["ajg"] = "Adja",
["aji"] = "Ajië",
["ajn"] = "Andajin",
["ajp"] = "อาหรับแบบลิแวนต์ใต้",
["ajw"] = "Ajawa",
["ajz"] = "Amri Karbi",
["ak"] = "อาคัน",
["akb"] = "Angkola Batak",
["akc"] = "Mpur",
["akd"] = "Ukpet-Ehom",
["ake"] = "Akawaio",
["akf"] = "Akpa",
["akg"] = "Anakalangu",
["akh"] = "Angal Heneng",
["aki"] = "Aiome",
["akj"] = "Jeru",
["akk"] = "แอกแคด",
["akl"] = "อักลัน",
["akm"] = "Aka-Bo",
["ako"] = "Akurio",
["akp"] = "Siwu",
["akq"] = "Ak",
["akr"] = "Araki",
["aks"] = "Akaselem",
["akt"] = "Akolet",
["aku"] = "Akum",
["akv"] = "Akhvakh",
["akw"] = "Akwa",
["akx"] = "Aka-Kede",
["aky"] = "Aka-Kol",
["akz"] = "แอละแบมา",
["ala"] = "Alago",
["alc"] = "Kawésqar",
["ald"] = "Alladian",
["ale"] = "Aleut",
["alf"] = "Alege",
["alg-aga"] = "Agawam",
["alg-pro"] = "แอลกองเคียนดั้งเดิม",
["alh"] = "Alawa",
["ali"] = "Amaimon",
["alj"] = "Alangan",
["alk"] = "Alak",
["all"] = "Allar",
["alm"] = "Amblong",
["alo"] = "Larike-Wakasihu",
["alp"] = "Alune",
["alq"] = "Algonquin",
["alr"] = "Alutor",
["alt"] = "อัลไตใต้",
["alu"] = "'Are'are",
["alv-ama"] = "Amasi",
["alv-bgu"] = "Baïnounk Gubëeher",
["alv-bua-pro"] = "Proto-Bua",
["alv-cng-pro"] = "Proto-Cangin",
["alv-edk-pro"] = "Proto-Edekiri",
["alv-edo-pro"] = "Proto-Edoid",
["alv-fli-pro"] = "Proto-Fali",
["alv-gbe-pro"] = "กเบดั้งเดิม",
["alv-gng-pro"] = "Proto-Guang",
["alv-gtm-pro"] = "Proto-Central Togo",
["alv-gwa"] = "Gwara",
["alv-hei-pro"] = "Proto-Heiban",
["alv-ido-pro"] = "Proto-Idomoid",
["alv-igb-pro"] = "Proto-Igboid",
["alv-kwa-pro"] = "Proto-Kwa",
["alv-mum-pro"] = "Proto-Mumuye",
["alv-nup-pro"] = "Proto-Nupoid",
["alv-pro"] = "แอตแลนติก-คองโกดั้งเดิม",
["alv-von-pro"] = "วอลตา-ไนเจอร์ดั้งเดิม",
["alv-yor-pro"] = "โยรูบาดั้งเดิม",
["alv-yrd-pro"] = "โยรูบอยด์ดั้งเดิม",
["alw"] = "Alaba",
["alx"] = "Amol",
["aly"] = "Alyawarr",
["alz"] = "Alur",
["am"] = "อัมฮารา",
["ama"] = "Amanayé",
["amb"] = "Ambo",
["amc"] = "Amahuaca",
["ame"] = "Yanesha'",
["amf"] = "Hamer-Banna",
["amg"] = "Amurdag",
["ami"] = "Amis",
["amj"] = "Amdang",
["amk"] = "Ambai",
["aml"] = "War-Jaintia",
["amm"] = "Ama",
["amn"] = "Amanab",
["amo"] = "Amo",
["amp"] = "Alamblak",
["amq"] = "Amahai",
["amr"] = "Amarakaeri",
["ams"] = "อามามิโอชิมะใต้",
["amt"] = "Amto",
["amu"] = "Guerrero Amuzgo",
["amv"] = "Ambelau",
["amw"] = "Western Neo-Aramaic",
["amx"] = "Anmatyerre",
["amy"] = "Ami",
["amz"] = "Atampaya",
["an"] = "อารากอน",
["ana"] = "Andaqui",
["anb"] = "Andoa",
["anc"] = "Ngas",
["and"] = "Ansus",
["ane"] = "คังรังชือ",
["anf"] = "Animere",
["ang"] = "อังกฤษเก่า",
["anh"] = "Nend",
["ani"] = "Andi",
["anj"] = "Anor",
["ank"] = "Goemai",
["anl"] = "Anu",
["anm"] = "Anāl",
["ann"] = "Obolo",
["ano"] = "Andoque",
["anp"] = "Angika",
["anq"] = "Jarawa",
["anr"] = "Andh",
["ans"] = "Anserma",
["ant"] = "Antakarinya",
["anu"] = "Anuak",
["anv"] = "Denya",
["anw"] = "Anaang",
["anx"] = "Andra-Hus",
["any"] = "Anyi",
["anz"] = "Anem",
["aoa"] = "Angolar",
["aob"] = "Abom",
["aoc"] = "Pemon",
["aod"] = "Andarum",
["aoe"] = "Angal Enen",
["aof"] = "Bragat",
["aog"] = "Angoram",
["aoi"] = "Anindilyakwa",
["aoj"] = "Mufian",
["aok"] = "Arhö",
["aol"] = "Alorese",
["aom"] = "Ömie",
["aon"] = "Bumbita Arapesh",
["aor"] = "Aore",
["aos"] = "Taikat",
["aot"] = "อะตง",
["aou"] = "A'ou",
["aox"] = "Atorada",
["aoz"] = "Uab Meto",
["apa-pro"] = "Proto-Apachean",
["apb"] = "Sa'a",
["apc"] = "North Levantine Arabic",
["apd"] = "อาหรับแบบซูดาน",
["ape"] = "Bukiyip",
["apf"] = "Pahanan Agta",
["apg"] = "Ampanang",
["aph"] = "Athpare",
["api"] = "Apiaká",
["apj"] = "Jicarilla",
["apk"] = "Plains Apache",
["apl"] = "Lipan",
["apm"] = "Chiricahua",
["apn"] = "Apinayé",
["apo"] = "Ambul",
["app"] = "Apma",
["apq"] = "A-Pucikwar",
["apr"] = "Arop-Lokep",
["aps"] = "Arop-Sissano",
["apt"] = "Apatani",
["apu"] = "Apurinã",
["apv"] = "Alapmunte",
["apw"] = "อะแพชีตะวันตก",
["apx"] = "Aputai",
["apy"] = "Apalaí",
["apz"] = "Safeyoka",
["aqc"] = "Archi",
["aqd"] = "Ampari Dogon",
["aqg"] = "Arigidi",
["aql-pro"] = "แอลจิกดั้งเดิม",
["aqm"] = "Atohwaim",
["aqn"] = "Northern Alta",
["aqp"] = "Atakapa",
["aqr"] = "Arhâ",
["aqt"] = "Angaité",
["aqz"] = "Akuntsu",
["ar"] = "อาหรับ",
["arc"] = "อารามายา",
["ard"] = "Arabana",
["are"] = "Western Arrernte",
["arh"] = "Arhuaco",
["ari"] = "Arikara",
["arj"] = "Arapaso",
["ark"] = "Arikapú",
["arl"] = "Arabela",
["arn"] = "Mapudungun",
["aro"] = "Araona",
["arp"] = "Arapaho",
["arq"] = "อาหรับแบบแอลจีเรีย",
["arr"] = "Arara-Karo",
["ars"] = "Najdi Arabic",
["art-adu"] = "Adûni",
["art-bel"] = "Belter Creole",
["art-blk"] = "Bolak",
["art-bsp"] = "แบล็กสปีช",
["art-com"] = "Communicationssprache",
["art-dtk"] = "Dothraki",
["art-elo"] = "Eloi",
["art-gld"] = "Goa'uld",
["art-lap"] = "Lapine",
["art-man"] = "Mandalorian",
["art-mun"] = "Mundolinco",
["art-nav"] = "Naʼvi",
["art-vlh"] = "High Valyrian",
["aru"] = "Arua",
["arv"] = "Arbore",
["arw"] = "โลโกโน",
["arx"] = "Aruá",
["ary"] = "อาหรับแบบโมร็อกโก",
["arz"] = "อาหรับแบบอียิปต์",
["as"] = "อัสสัม",
["asa"] = "Pare",
["asb"] = "Assiniboine",
["asc"] = "Casuarina Coast Asmat",
["ase"] = "มืออเมริกัน",
["asf"] = "Auslan",
["asg"] = "Cishingini",
["ash"] = "Abishira",
["asi"] = "Buruwai",
["asj"] = "Nsari",
["ask"] = "Ashkun",
["asl"] = "Asilulu",
["asn"] = "Xingú Asuriní",
["aso"] = "Dano",
["asp"] = "Algerian Sign Language",
["asq"] = "Austrian Sign Language",
["asr"] = "Asuri",
["ass"] = "Ipulo",
["ast"] = "อัสตูเรียส",
["asu"] = "Tocantins Asurini",
["asv"] = "Asoa",
["asw"] = "Australian Aboriginal Sign Language",
["asx"] = "Muratayak",
["asy"] = "Yaosakor Asmat",
["asz"] = "As",
["ata"] = "Pele-Ata",
["atb"] = "Zaiwa",
["atc"] = "Atsahuaca",
["atd"] = "Ata Manobo",
["ate"] = "Atemble",
["atg"] = "Okpela",
["ath-nic"] = "Nicola",
["ath-pro"] = "Proto-Athabaskan",
["ati"] = "Attié",
["atj"] = "Atikamekw",
["atk"] = "Ati",
["atl"] = "Mount Iraya Agta",
["atm"] = "Ata",
["ato"] = "Atong (Cameroon)",
["atp"] = "Pudtol Atta",
["atq"] = "Aralle-Tabulahan",
["atr"] = "Waimiri-Atroari",
["ats"] = "Gros Ventre",
["att"] = "Pamplona Atta",
["atu"] = "Reel",
["atv"] = "อัลไตเหนือ",
["atw"] = "Atsugewi",
["atx"] = "Arutani",
["aty"] = "อาเนตยูม",
["atz"] = "Arta",
["aua"] = "Asumboa",
["aub"] = "Alugu",
["auc"] = "Huaorani",
["aud"] = "Anuta",
["auf-pro"] = "Proto-Arawa",
["aug"] = "Aguna",
["auh"] = "Aushi",
["aui"] = "Anuki",
["auj"] = "Awjila",
["auk"] = "Heyo",
["aul"] = "Aulua",
["aum"] = "Asu",
["aun"] = "Molmo One",
["auo"] = "Auyokawa",
["aup"] = "Makayam",
["auq"] = "Anus",
["aur"] = "Aruek",
["aus-alu"] = "Alungul",
["aus-and"] = "Andjingith",
["aus-ang"] = "Angkula",
["aus-arn-pro"] = "Proto-Arnhem",
["aus-bra"] = "Barranbinya",
["aus-brm"] = "Barunggam",
["aus-cww-pro"] = "Proto-Central New South Wales",
["aus-dal-pro"] = "Proto-Daly",
["aus-guw"] = "Guwar",
["aus-lsw"] = "Little Swanport",
["aus-mbi"] = "Mbiywom",
["aus-ngk"] = "Ngkoth",
["aus-nyu-pro"] = "Proto-Nyulnyulan",
["aus-pam-pro"] = "Proto-Pama-Nyungan",
["aus-tul"] = "Tulua",
["aus-uwi"] = "Uwinymil",
["aus-wdj-pro"] = "Proto-Iwaidjan",
["aus-won"] = "Wong-gie",
["aus-wul"] = "Wulguru",
["aus-ynk"] = "Yangkaal",
["aut"] = "Austral",
["auu"] = "Auye",
["auw"] = "Awyi",
["aux"] = "Aurá",
["auy"] = "Auyana",
["auz"] = "อาหรับแบบอุซเบกิสถาน",
["av"] = "อะวาร์",
["avb"] = "Avau",
["avd"] = "Alviri-Vidari",
["avi"] = "Avikam",
["avk"] = "โคทาวา",
["avm"] = "Angkamuthi",
["avn"] = "Avatime",
["avo"] = "Agavotaguerra",
["avs"] = "Aushiri",
["avt"] = "Au",
["avu"] = "Avokaya",
["avv"] = "Avá-Canoeiro",
["awa"] = "อวัธ",
["awb"] = "Awa (New Guinea)",
["awc"] = "Cicipu",
["awd-ama"] = "Amarizana",
["awd-amc-pro"] = "Proto-Amuesha-Chamicuro",
["awd-ana"] = "Anauyá",
["awd-apo"] = "Apolista",
["awd-cab"] = "Cabre",
["awd-gnu"] = "Guinau",
["awd-kar"] = "Cariay",
["awd-kaw"] = "Kawishana",
["awd-kmp-pro"] = "Proto-Kampa",
["awd-kus"] = "Kustenau",
["awd-man"] = "Manao",
["awd-mar"] = "Marawan",
["awd-mpr"] = "Maipure",
["awd-mrt"] = "Mariaté",
["awd-nwk-pro"] = "Proto-Nawiki",
["awd-pai"] = "Paikoneka",
["awd-pas"] = "Pasé",
["awd-pro"] = "Proto-Arawak",
["awd-prw-pro"] = "Proto-Paresi-Waura",
["awd-she"] = "Shebayo",
["awd-taa-pro"] = "Proto-Ta-Arawak",
["awd-wai"] = "Wainumá",
["awd-yum"] = "Yumana",
["awe"] = "Awetí",
["awg"] = "Anguthimri",
["awh"] = "Awbono",
["awi"] = "Aekyom",
["awk"] = "Awabakal",
["awm"] = "Arawum",
["awn"] = "Awngi",
["awo"] = "Awak",
["awr"] = "Awera",
["aws"] = "South Awyu",
["awt"] = "Araweté",
["awu"] = "Central Awyu",
["awv"] = "Jair Awyu",
["aww"] = "Awun",
["awx"] = "Awara",
["awy"] = "Edera Awyu",
["axb"] = "Abipón",
["axe"] = "Ayerrerenge",
["axg"] = "Arára (Mato Grosso)",
["axk"] = "Aka (Central Africa)",
["axl"] = "Lower Southern Aranda",
["axm"] = "อาร์มีเนียกลาง",
["axx"] = "Xârâgurè",
["ay"] = "ไอย์มารา",
["aya"] = "Awar",
["ayb"] = "Ayizo",
["ayd"] = "Ayabadhu",
["aye"] = "Ayere",
["ayg"] = "Nyanga (Togo)",
["ayi"] = "Leyigha",
["ayk"] = "Akuku",
["ayl"] = "อาหรับแบบลิเบีย",
["ayn"] = "อาหรับแบบเยเมน",
["ayo"] = "Ayoreo",
["ayp"] = "อาหรับแบบเมโสโปเตเมียเหนือ",
["ayq"] = "Ayi",
["ays"] = "Sorsogon Ayta",
["ayt"] = "Bataan Ayta",
["ayu"] = "Ayu",
["ayy"] = "Tayabas Ayta",
["ayz"] = "Maybrat",
["az"] = "อาเซอร์ไบจาน",
["aza"] = "Azha",
["azc-caz"] = "Cazcan",
["azc-cup-pro"] = "Proto-Cupan",
["azc-ktn"] = "Kitanemuk",
["azc-nah-pro"] = "นาวันดั้งเดิม",
["azc-num-pro"] = "Proto-Numic",
["azc-pro"] = "ยูโต-แอซเทกันดั้งเดิม",
["azc-tak-pro"] = "Proto-Takic",
["azc-tat"] = "Tataviam",
["azd"] = "Eastern Durango Nahuatl",
["azg"] = "San Pedro Amuzgos Amuzgo",
["azm"] = "Ipalapa Amuzgo",
["azn"] = "Western Durango Nahuatl",
["azo"] = "Awing",
["azt"] = "Faire Atta",
["azz"] = "Highland Puebla Nahuatl",
["ba"] = "แบชเคียร์",
["baa"] = "Babatana",
["bab"] = "Bainouk-Gunyuño",
["bac"] = "Baduy",
["bae"] = "Baré",
["baf"] = "Nubaca",
["bag"] = "Tuki",
["bah"] = "Bahamian Creole",
["baj"] = "Barakai",
["bal"] = "บาโลจ",
["ban"] = "บาหลี",
["bao"] = "Waimaha",
["bap"] = "Bantawa",
["bar"] = "บาวาเรีย",
["bas"] = "Basaa",
["bau"] = "Badanchi",
["bav"] = "Babungo",
["baw"] = "Bambili-Bambui",
["bax"] = "Bamum",
["bay"] = "Batuley",
["bba"] = "Baatonum",
["bbb"] = "Barai",
["bbc"] = "Toba Batak",
["bbd"] = "Bau",
["bbe"] = "Bangba",
["bbf"] = "Baibai",
["bbg"] = "Barama",
["bbh"] = "Bugan",
["bbi"] = "Barombi",
["bbj"] = "Ghomala'",
["bbk"] = "Babanki",
["bbl"] = "บัตส์",
["bbm"] = "Babango",
["bbn"] = "Uneapa",
["bbo"] = "Konabéré",
["bbp"] = "West Central Banda",
["bbq"] = "Bamali",
["bbr"] = "Girawa",
["bbs"] = "Bakpinka",
["bbt"] = "Mburku",
["bbu"] = "Bakulung",
["bbv"] = "Karnai",
["bbw"] = "Baba",
["bbx"] = "Bubia",
["bby"] = "Befang",
["bca"] = "Central Bai",
["bcb"] = "Bainouk-Samik",
["bcd"] = "North Babar",
["bce"] = "Bamenyam",
["bcf"] = "Bamu",
["bcg"] = "Baga Pokur",
["bch"] = "Bariai",
["bci"] = "Baoule",
["bcj"] = "Bardi",
["bck"] = "Bunaba",
["bcl"] = "บีโคลตอนกลาง",
["bcm"] = "Banoni",
["bcn"] = "Bibaali",
["bco"] = "Kaluli",
["bcp"] = "Bali",
["bcq"] = "Bench",
["bcr"] = "Babine-Witsuwit'en",
["bcs"] = "Kohumono",
["bct"] = "Bendi",
["bcu"] = "Biliau",
["bcv"] = "Shoo-Minda-Nye",
["bcw"] = "Bana",
["bcy"] = "Bacama",
["bcz"] = "Bainouk-Gunyaamolo",
["bda"] = "Bayot",
["bdb"] = "Basap",
["bdc"] = "Emberá-Baudó",
["bdd"] = "Bunama",
["bde"] = "Bade",
["bdf"] = "Biage",
["bdg"] = "Bonggi",
["bdh"] = "Tara Baka",
["bdi"] = "Burun",
["bdj"] = "Bai (South Sudan)",
["bdk"] = "Budukh",
["bdl"] = "บาเจาแบบอินโดนีเซีย",
["bdm"] = "Buduma",
["bdn"] = "Baldemu",
["bdo"] = "Morom",
["bdp"] = "Bende",
["bdq"] = "บะห์นัร",
["bdr"] = "บาเจาแบบเวสต์โคสต์",
["bds"] = "Burunge",
["bdt"] = "Bokoto",
["bdu"] = "Oroko",
["bdv"] = "Bodo Parja",
["bdw"] = "Baham",
["bdx"] = "Budong-Budong",
["bdy"] = "Bandjalang",
["bdz"] = "Badeshi",
["be"] = "เบลารุส",
["bea"] = "Beaver",
["beb"] = "Bebele",
["bec"] = "Iceve-Maci",
["bed"] = "Bedoanas",
["bee"] = "Byangsi",
["bef"] = "Benabena",
["beg"] = "Belait",
["beh"] = "Biali",
["bei"] = "Bekati'",
["bej"] = "Beja",
["bek"] = "Bebeli",
["bem"] = "Bemba",
["beo"] = "Beami",
["bep"] = "Besoa",
["beq"] = "Beembe",
["ber-fog"] = "Fogaha",
["ber-pro"] = "เบอร์เบอร์ดั้งเดิม",
["ber-zuw"] = "Zuwara",
["bes"] = "Besme",
["bet"] = "Guiberoua Bété",
["beu"] = "บลาการ์",
["bev"] = "Daloa Bété",
["bew"] = "เบอตาวี",
["bex"] = "Jur Modo",
["bey"] = "Akuwagel",
["bez"] = "Kibena",
["bfa"] = "Bari",
["bfb"] = "Pauri Bareli",
["bfc"] = "Panyi Bai",
["bfd"] = "Bafut",
["bfe"] = "Betaf",
["bff"] = "Bofi",
["bfg"] = "Busang Kayan",
["bfh"] = "Blafe",
["bfi"] = "British Sign Language",
["bfj"] = "Bafanji",
["bfk"] = "Ban Khor Sign Language",
["bfl"] = "Banda-Ndélé",
["bfm"] = "Mmen",
["bfn"] = "Bunak",
["bfo"] = "Malba Birifor",
["bfp"] = "Beba",
["bfq"] = "พทคะ",
["bfr"] = "Bazigar",
["bfs"] = "Southern Bai",
["bft"] = "บัลติ",
["bfu"] = "Gahri",
["bfw"] = "Bondo",
["bfx"] = "Bantayanon",
["bfy"] = "Bagheli",
["bfz"] = "Mahasu Pahari",
["bg"] = "บัลแกเรีย",
["bga"] = "Gwamhi-Wuri",
["bgb"] = "Bobongko",
["bgc"] = "หริยาณวี",
["bgd"] = "Rathwi Bareli",
["bge"] = "Bauria",
["bgf"] = "Bangandu",
["bgg"] = "Bugun",
["bgi"] = "Giangan",
["bgj"] = "Bangolan",
["bgk"] = "Bit",
["bgl"] = "Bo",
["bgo"] = "Baga Koga",
["bgq"] = "Bagri",
["bgr"] = "Bawm Chin",
["bgs"] = "Tagabawa",
["bgt"] = "Bughotu",
["bgu"] = "Mbongno",
["bgv"] = "Warkay-Bipim",
["bgw"] = "Bhatri",
["bgx"] = "Balkan Gagauz Turkish",
["bgy"] = "Benggoi",
["bgz"] = "Banggai",
["bh"] = "พิหาร",
["bha"] = "Bharia",
["bhb"] = "Bhili",
["bhc"] = "Biga",
["bhd"] = "Bhadrawahi",
["bhe"] = "Bhaya",
["bhf"] = "Odiai",
["bhg"] = "Binandere",
["bhh"] = "Bukhari",
["bhi"] = "Bhilali",
["bhj"] = "Bahing",
["bhl"] = "Bimin",
["bhm"] = "Bathari",
["bhn"] = "Bohtan Neo-Aramaic",
["bho"] = "โภชปุระ",
["bhp"] = "Bima",
["bhq"] = "Tukang Besi South",
["bhs"] = "Buwal",
["bht"] = "Bhattiyali",
["bhu"] = "Bhunjia",
["bhv"] = "Bahau",
["bhw"] = "Biak",
["bhx"] = "Bhalay",
["bhy"] = "Bhele",
["bhz"] = "Bada",
["bi"] = "บิสลามา",
["bia"] = "Badimaya",
["bib"] = "Bissa",
["bic"] = "Bikaru",
["bid"] = "Bidiyo",
["bie"] = "Bepour",
["bif"] = "Biafada",
["big"] = "Biangai",
["bij"] = "Kwanka",
["bil"] = "Bile",
["bim"] = "Bimoba",
["bin"] = "Edo",
["bio"] = "Nai",
["bip"] = "Bila",
["biq"] = "Bipi",
["bir"] = "Bisorio",
["bit"] = "Berinomo",
["biu"] = "Biete",
["biv"] = "Southern Birifor",
["biw"] = "Kol (Cameroon)",
["bix"] = "Bijori",
["biy"] = "Birhor",
["biz"] = "Baloi",
["bja"] = "Budza",
["bjb"] = "Barngarla",
["bjc"] = "Bariji",
["bje"] = "Biao-Jiao Mien",
["bjf"] = "Barzani Jewish Neo-Aramaic",
["bjg"] = "Bidyogo",
["bjh"] = "Bahinemo",
["bji"] = "Burji",
["bjj"] = "Kannauji",
["bjk"] = "Barok",
["bjl"] = "Bulu (New Guinea)",
["bjm"] = "Bajelani",
["bjn"] = "บันจาร์",
["bjo"] = "Mid-Southern Banda",
["bjp"] = "Fanamaket",
["bjr"] = "Binumarien",
["bjs"] = "Bajan",
["bjt"] = "Balanta-Ganja",
["bju"] = "Busuu",
["bjv"] = "Bedjond",
["bjw"] = "Bakwé",
["bjx"] = "Banao Itneg",
["bjy"] = "Bayali",
["bjz"] = "Baruga",
["bka"] = "Kyak",
["bkc"] = "Baka",
["bkd"] = "บีนูกิด",
["bkf"] = "Beeke",
["bkg"] = "Buraka",
["bkh"] = "Bakoko",
["bki"] = "Baki",
["bkj"] = "Pande",
["bkk"] = "Brokskat",
["bkl"] = "Berik",
["bkm"] = "Kom (Cameroon)",
["bkn"] = "Bukitan",
["bko"] = "Kwa'",
["bkp"] = "Iboko",
["bkq"] = "Bakairí",
["bkr"] = "Bakumpai",
["bks"] = "Masbate Sorsogon",
["bkt"] = "Boloki",
["bku"] = "Buhid",
["bkv"] = "Bekwarra",
["bkw"] = "Bekwel",
["bkx"] = "Baikeno",
["bky"] = "Bokyi",
["bkz"] = "Bungku",
["bla"] = "Blackfoot",
["blb"] = "Bilua",
["blc"] = "Bella Coola",
["bld"] = "Bolango",
["ble"] = "Balanta-Kentohe",
["blf"] = "Buol",
["blg"] = "Balau",
["blh"] = "Kuwaa",
["bli"] = "Bolia",
["blj"] = "Bulungan",
["blk"] = "กะเหรี่ยงปะโอ",
["bll"] = "Biloxi",
["blm"] = "Beli",
["bln"] = "Southern Catanduanes Bicolano",
["blo"] = "Anii",
["blp"] = "Blablanga",
["blq"] = "Baluan-Pam",
["blr"] = "Blang",
["bls"] = "Balaesang",
["blt"] = "ไทดำ",
["blv"] = "Kibala",
["blw"] = "Balangao",
["blx"] = "Mag-Indi Ayta",
["bly"] = "Notre",
["blz"] = "Balantak",
["bm"] = "บัมบารา",
["bma"] = "Lame",
["bmb"] = "Bembe",
["bmc"] = "Biem",
["bmd"] = "Baga Manduri",
["bme"] = "Limassa",
["bmf"] = "Bom",
["bmg"] = "Bamwe",
["bmh"] = "Kein",
["bmi"] = "Bagirmi",
["bmj"] = "Bote-Majhi",
["bmk"] = "Ghayavi",
["bml"] = "Bomboli",
["bmn"] = "Bina",
["bmo"] = "Bambalang",
["bmp"] = "Bulgebi",
["bmq"] = "Bomu",
["bmr"] = "Muinane",
["bmt"] = "Biao Mon",
["bmu"] = "Somba-Siawari",
["bmv"] = "Bum",
["bmw"] = "Bomwali",
["bmx"] = "Baimak",
["bmz"] = "Baramu",
["bn"] = "เบงกอล",
["bna"] = "Bonerate",
["bnb"] = "Bookan",
["bnd"] = "Banda",
["bne"] = "Bintauna",
["bnf"] = "Masiwang",
["bng"] = "Benga",
["bni"] = "Bangi",
["bnj"] = "Eastern Tawbuid",
["bnk"] = "Bierebo",
["bnl"] = "Boon",
["bnm"] = "Batanga",
["bnn"] = "Bunun",
["bno"] = "อาซี",
["bnp"] = "Bola",
["bnq"] = "Bantik",
["bnr"] = "Butmas-Tur",
["bns"] = "Bundeli",
["bnt-bal"] = "Balong",
["bnt-bon"] = "Boma Nkuu",
["bnt-boy"] = "Boma Yumu",
["bnt-bwa"] = "Bwala",
["bnt-cmw"] = "Chimwiini",
["bnt-ind"] = "Indanga",
["bnt-lal"] = "Lala (South Africa)",
["bnt-mpi"] = "Mpiin",
["bnt-mpu"] = "Mpuono",
["bnt-ngu-pro"] = "งูนีดั้งเดิม",
["bnt-phu"] = "Phuthi",
["bnt-pro"] = "แบนทูดั้งเดิม",
["bnt-sab-pro"] = "Proto-Sabaki",
["bnt-sbo"] = "South Boma",
["bnt-sts-pro"] = "Proto-Sotho-Tswana",
["bnu"] = "Bentong",
["bnv"] = "Beneraf",
["bnw"] = "Bisis",
["bnx"] = "Bangubangu",
["bny"] = "Bintulu",
["bnz"] = "Beezen",
["bo"] = "ทิเบต",
["boa"] = "Bora",
["bob"] = "Aweer",
["boe"] = "Mundabli",
["bof"] = "Bolon",
["bog"] = "Bamako Sign Language",
["boh"] = "North Boma",
["boi"] = "Barbareño",
["boj"] = "Anjam",
["bok"] = "Bonjo",
["bol"] = "โบล",
["bom"] = "Berom",
["bon"] = "Bine",
["boo"] = "Tiemacèwè Bozo",
["bop"] = "Bonkiman",
["boq"] = "Bogaya",
["bor"] = "Borôro",
["bot"] = "Bongo",
["bou"] = "Bondei",
["bov"] = "Tuwuli",
["bow"] = "Rema",
["box"] = "Buamu",
["boy"] = "Bodo (Central Africa)",
["boz"] = "Tiéyaxo Bozo",
["bpa"] = "Daakaka",
["bpd"] = "Banda-Banda",
["bpg"] = "Bonggo",
["bph"] = "Botlikh",
["bpi"] = "Bagupi",
["bpj"] = "Binji",
["bpk"] = "Orowe",
["bpl"] = "Broome Pearling Lugger Pidgin",
["bpm"] = "Biyom",
["bpn"] = "Dzao Min",
["bpo"] = "Anasi",
["bpp"] = "Kaure",
["bpq"] = "Banda Malay",
["bpr"] = "Koronadal Blaan",
["bps"] = "Sarangani Blaan",
["bpt"] = "Barrow Point",
["bpu"] = "Bongu",
["bpv"] = "Bian Marind",
["bpx"] = "Palya Bareli",
["bpy"] = "Bishnupriya Manipuri",
["bpz"] = "Bilba",
["bqa"] = "Tchumbuli",
["bqb"] = "Bagusa",
["bqc"] = "Boko",
["bqd"] = "Bung",
["bqf"] = "Baga Kaloum",
["bqg"] = "Bago-Kusuntu",
["bqh"] = "Baima",
["bqi"] = "Bakhtiari",
["bqj"] = "Bandial",
["bqk"] = "Banda-Mbrès",
["bql"] = "Bilakura",
["bqm"] = "Wumboko",
["bqn"] = "Bulgarian Sign Language",
["bqo"] = "Balo",
["bqp"] = "Busa",
["bqq"] = "Biritai",
["bqr"] = "Burusu",
["bqs"] = "Bosngun",
["bqt"] = "Bamukumbit",
["bqu"] = "Boguru",
["bqv"] = "Begbere-Ejar",
["bqw"] = "Buru (Nigeria)",
["bqx"] = "Baangi",
["bqy"] = "Bengkala Sign Language",
["bqz"] = "Bakaka",
["br"] = "เบรอตง",
["bra"] = "พรัช",
["brb"] = "Lave",
["brc"] = "Berbice Creole Dutch",
["brd"] = "Baraamu",
["brf"] = "Bera",
["brg"] = "Baure",
["brh"] = "บราฮุอี",
["bri"] = "Mokpwe",
["brj"] = "Bieria",
["brk"] = "Birgid",
["brl"] = "Birwa",
["brm"] = "Barambu",
["brn"] = "Boruca",
["bro"] = "Brokkat",
["brp"] = "Barapasi",
["brq"] = "Breri",
["brr"] = "Birao",
["brs"] = "Baras",
["brt"] = "Bitare",
["bru"] = "บรูตะวันออก",
["brv"] = "บรูตะวันตก",
["brw"] = "Bellari",
["brx"] = "โบโด",
["bry"] = "Burui",
["brz"] = "Bilbil",
["bsa"] = "Abinomn",
["bsb"] = "Brunei Bisaya",
["bsc"] = "Bassari",
["bse"] = "Wushi",
["bsf"] = "Bauchi",
["bsg"] = "Bashkardi",
["bsh"] = "Kamkata-viri",
["bsi"] = "Bassossi",
["bsj"] = "Bangwinji",
["bsk"] = "Burushaski",
["bsl"] = "Basa-Gumna",
["bsm"] = "Busami",
["bsn"] = "Barasana",
["bso"] = "Buso",
["bsp"] = "Baga Sitemu",
["bsq"] = "Bassa",
["bsr"] = "Bassa-Kontagora",
["bss"] = "Akoose",
["bst"] = "Basketo",
["bsu"] = "Bahonsuai",
["bsv"] = "Baga Sobané",
["bsw"] = "Baiso",
["bsx"] = "Yangkam",
["bsy"] = "Sabah Bisaya",
["bta"] = "Bata",
["btc"] = "Bati (Cameroon)",
["btd"] = "Dairi Batak",
["bte"] = "Gamo-Ningi",
["btf"] = "Birgit",
["btg"] = "Gagnoa Bété",
["bth"] = "Biatah Bidayuh",
["bti"] = "Burate",
["btj"] = "Bacanese Malay",
["btk-pro"] = "Proto-Batak",
["btm"] = "Mandailing Batak",
["btn"] = "Ratagnon",
["bto"] = "Iriga Bicolano",
["btp"] = "Budibud",
["btq"] = "Batek",
["btr"] = "Baetora",
["bts"] = "Simalungun Batak",
["btt"] = "Bete-Bendi",
["btu"] = "Batu",
["btv"] = "Bateri",
["btw"] = "Butuanon",
["btx"] = "Karo Batak",
["bty"] = "Bobot",
["btz"] = "Alas-Kluet Batak",
["bua"] = "บูร์ยัต",
["bub"] = "Bua",
["bud"] = "Ntcham",
["bue"] = "Beothuk",
["buf"] = "Bushoong",
["bug"] = "บูกิส",
["buh"] = "Younuo Bunu",
["bui"] = "Bongili",
["buj"] = "Basa-Gurmana",
["buk"] = "Bukawa",
["bum"] = "Bulu (Cameroon)",
["bun"] = "Sherbro",
["buo"] = "Terei",
["bup"] = "Busoa",
["buq"] = "Brem",
["bus"] = "Bokobaru",
["but"] = "Bungain",
["buu"] = "Budu",
["buv"] = "Bun",
["buw"] = "Bubi",
["bux"] = "Boghom",
["buy"] = "Mmani",
["bva"] = "Barein",
["bvb"] = "Bube",
["bvc"] = "Baelelea",
["bvd"] = "Baeggu",
["bve"] = "Berau Malay",
["bvf"] = "Boor",
["bvg"] = "Bonkeng",
["bvh"] = "Bure",
["bvi"] = "Belanda Viri",
["bvj"] = "Baan",
["bvk"] = "Bukat",
["bvl"] = "Bolivian Sign Language",
["bvm"] = "Bamunka",
["bvn"] = "Buna",
["bvo"] = "Bolgo",
["bvp"] = "Bumang",
["bvq"] = "Birri",
["bvr"] = "Burarra",
["bvt"] = "Bati (Indonesia)",
["bvu"] = "Bukit Malay",
["bvv"] = "Baniva",
["bvw"] = "Boga",
["bvx"] = "Babole",
["bvy"] = "Baybayanon",
["bvz"] = "Bauzi",
["bwa"] = "Bwatoo",
["bwb"] = "Namosi-Naitasiri-Serua",
["bwc"] = "Bwile",
["bwd"] = "Bwaidoka",
["bwe"] = "Bwe Karen",
["bwf"] = "Boselewa",
["bwg"] = "Barwe",
["bwh"] = "Bishuo",
["bwi"] = "Baniwa",
["bwj"] = "Láá Láá Bwamu",
["bwk"] = "Bauwaki",
["bwl"] = "Bwela",
["bwm"] = "Biwat",
["bwn"] = "Wunai Bunu",
["bwo"] = "Shinasha",
["bwp"] = "Mandobo Bawah",
["bwq"] = "Southern Bobo",
["bwr"] = "Bura",
["bws"] = "Bomboma",
["bwt"] = "Bafaw",
["bwu"] = "Buli (Ghana)",
["bww"] = "Bwa",
["bwx"] = "Bu-Nao Bunu",
["bwy"] = "Cwi Bwamu",
["bwz"] = "Bwisi",
["bxa"] = "Bauro",
["bxb"] = "Belanda Bor",
["bxc"] = "Molengue",
["bxd"] = "Pela",
["bxe"] = "Ongota",
["bxf"] = "Bilur",
["bxg"] = "Bangala",
["bxh"] = "Buhutu",
["bxi"] = "Pirlatapa",
["bxj"] = "Bayungu",
["bxk"] = "Bukusu",
["bxl"] = "Jalkunan",
["bxn"] = "Burduna",
["bxo"] = "Barikanchi",
["bxp"] = "Bebil",
["bxq"] = "Beele",
["bxs"] = "Busam",
["bxv"] = "Berakou",
["bxw"] = "Banka",
["bxz"] = "Binahari",
["bya"] = "Palawan Batak",
["byb"] = "Bikya",
["byc"] = "Ubaghara",
["byd"] = "Benyadu'",
["bye"] = "Pouye",
["byf"] = "Bete",
["byg"] = "Baygo",
["byh"] = "Bujhyal",
["byi"] = "Buyu",
["byj"] = "Binawa",
["byk"] = "Biao",
["byl"] = "Bayono",
["bym"] = "Bidyara",
["byn"] = "Blin",
["byo"] = "Biyo",
["byp"] = "Bumaji",
["byq"] = "Basay",
["byr"] = "Baruya",
["bys"] = "Burak",
["byt"] = "Berti",
["byv"] = "Medumba",
["byw"] = "Belhariya",
["byx"] = "Qaqet",
["byz"] = "Banaro",
["bza"] = "Bandi",
["bzb"] = "Andio",
["bzd"] = "Bribri",
["bze"] = "Jenaama Bozo",
["bzf"] = "Boikin",
["bzg"] = "Babuza",
["bzh"] = "Mapos Buang",
["bzi"] = "บีซู",
["bzj"] = "Belizean Creole",
["bzk"] = "Nicaraguan Creole",
["bzl"] = "Boano (Sulawesi)",
["bzm"] = "Bolondo",
["bzn"] = "Boano (Maluku)",
["bzo"] = "Bozaba",
["bzp"] = "Kemberano",
["bzq"] = "Buli (Indonesia)",
["bzr"] = "Biri",
["bzs"] = "Brazilian Sign Language",
["bzu"] = "Burmeso",
["bzv"] = "Bebe",
["bzw"] = "Basa",
["bzx"] = "Hainyaxo Bozo",
["bzy"] = "Obanliku",
["bzz"] = "Evant",
["ca"] = "กาตาลา",
["caa"] = "Ch'orti'",
["cab"] = "Garifuna",
["cac"] = "Chuj",
["cad"] = "Caddo",
["cae"] = "Laalaa",
["caf"] = "Southern Carrier",
["cag"] = "Nivaclé",
["cah"] = "Cahuarano",
["caj"] = "Chané",
["cak"] = "Kaqchikel",
["cal"] = "Carolinian",
["cam"] = "Cèmuhî",
["can"] = "Chambri",
["cao"] = "Chácobo",
["cap"] = "Chipaya",
["caq"] = "คาร์นิโคบาร์",
["car"] = "Kari'na",
["cas"] = "Tsimané",
["cau-abz-pro"] = "Proto-Abkhaz-Abaza",
["cau-and-pro"] = "Proto-Andian",
["cau-ava-pro"] = "Proto-Avaro-Andian",
["cau-cir-pro"] = "Proto-Circassian",
["cau-drg-pro"] = "Proto-Dargwa",
["cau-lzg-pro"] = "Proto-Lezghian",
["cau-nec-pro"] = "คอเคเซียนตะวันออกเฉียงเหนือดั้งเดิม",
["cau-nkh-pro"] = "นัคดั้งเดิม",
["cau-nwc-pro"] = "คอเคเซียนตะวันตกเฉียงเหนือดั้งเดิม",
["cau-tsz-pro"] = "Proto-Tsezian",
["cav"] = "Cavineña",
["caw"] = "Kallawaya",
["cax"] = "Chiquitano",
["cay"] = "Cayuga",
["caz"] = "Canichana",
["cba-ata"] = "Atanques",
["cba-cat"] = "Catío Chibcha",
["cba-dor"] = "Dorasque",
["cba-dui"] = "Duit",
["cba-hue"] = "Huetar",
["cba-nut"] = "Nutabe",
["cba-pro"] = "Proto-Chibchan",
["cbb"] = "Cabiyarí",
["cbc"] = "Carapana",
["cbd"] = "Carijona",
["cbg"] = "Chimila",
["cbi"] = "Chachi",
["cbj"] = "Ede Cabe",
["cbk"] = "ชาบากาโน",
["cbl"] = "Bualkhaw Chin",
["cbn"] = "ญัฮกุร",
["cbo"] = "Izora",
["cbq"] = "Tsucuba",
["cbr"] = "Cashibo-Cacataibo",
["cbs"] = "Cashinahua",
["cbt"] = "Chayahuita",
["cbu"] = "Candoshi-Shapra",
["cbv"] = "Cacua",
["cbw"] = "Kinabalian",
["cby"] = "Carabayo",
["cca"] = "Cauca",
["ccc"] = "Chamicuro",
["ccd"] = "Cafundó",
["cce"] = "Chopi",
["ccg"] = "Chamba Daka",
["cch"] = "Atsam",
["ccj"] = "Kasanga",
["ccl"] = "Cutchi-Swahili",
["ccm"] = "Malaccan Creole Malay",
["cco"] = "Comaltepec Chinantec",
["ccp"] = "จักมา",
["ccr"] = "Cacaopera",
["ccs-gzn-pro"] = "จอร์เจียน-แซนดั้งเดิม",
["ccs-pro"] = "คาร์ทเวเลียนดั้งเดิม",
["cda"] = "Choni",
["cdc-cbm-pro"] = "ชาดิกตอนกลางดั้งเดิม",
["cdc-mas-pro"] = "Proto-Masa",
["cdc-pro"] = "ชาดิกดั้งเดิม",
["cdd-pro"] = "Proto-Caddoan",
["cde"] = "Chenchu",
["cdf"] = "Chiru",
["cdh"] = "Chambeali",
["cdi"] = "Chodri",
["cdj"] = "Churahi",
["cdm"] = "Chepang",
["cdn"] = "Chaudangsi",
["cdo"] = "หมิ่นตะวันออก",
["cdr"] = "Cinda-Regi-Tiyal",
["cds"] = "Chadian Sign Language",
["cdy"] = "Chadong",
["cdz"] = "Koda",
["ce"] = "เชเชน",
["cea"] = "Lower Chehalis",
["ceb"] = "เซบัวโน",
["ceg"] = "Chamacoco",
["cel-bry-pro"] = "บริทอนิกดั้งเดิม",
["cel-gal"] = "Gallaecian",
["cel-gau"] = "กอล",
["cel-pro"] = "เคลติกดั้งเดิม",
["cen"] = "Cen",
["cet"] = "Centúúm",
["cfa"] = "Dijim-Bwilim",
["cfd"] = "Cara",
["cfg"] = "Como Karim",
["cfm"] = "Falam Chin",
["cga"] = "Changriwa",
["cgc"] = "Kagayanen",
["cgg"] = "Rukiga",
["cgk"] = "Chocangaca",
["ch"] = "ชามอร์โร",
["chb"] = "Chibcha",
["chc"] = "Catawba",
["chd"] = "Highland Oaxaca Chontal",
["chf"] = "Chontal Maya",
["chg"] = "ชากาทาย",
["chh"] = "Chinook",
["chi-pro"] = "Proto-Chimakuan",
["chj"] = "Ojitlán Chinantec",
["chk"] = "Chuukese",
["chl"] = "Cahuilla",
["chm-pro"] = "Proto-Mari",
["chn"] = "Chinook Jargon",
["cho"] = "Choctaw",
["chp"] = "Chipewyan",
["chq"] = "Quiotepec Chinantec",
["chr"] = "เชโรกี",
["cht"] = "Cholón",
["chw"] = "Chuabo",
["chx"] = "Chantyal",
["chy"] = "เชเยนน์",
["chz"] = "Ozumacín Chinantec",
["cia"] = "Cia-Cia",
["cib"] = "Ci Gbe",
["cic"] = "Chickasaw",
["cid"] = "Chimariko",
["cie"] = "Cineni",
["cih"] = "Chinali",
["cik"] = "Chitkuli Kinnauri",
["cim"] = "คิมบรี",
["cin"] = "Cinta Larga",
["cip"] = "Chiapanec",
["cir"] = "Tinrin",
["ciy"] = "Chaima",
["cja"] = "จามตะวันตก",
["cje"] = "Chru",
["cjh"] = "Upper Chehalis",
["cji"] = "Chamalal",
["cjk"] = "Chokwe",
["cjm"] = "จามตะวันออก",
["cjn"] = "Chenapian",
["cjo"] = "Ashéninka Pajonal",
["cjp"] = "Cabécar",
["cjs"] = "โชร์",
["cjv"] = "Chuave",
["cjy"] = "จิ้น",
["ckb"] = "เคิร์ดตอนกลาง",
["ckh"] = "Chak",
["ckl"] = "Cibak",
["ckn"] = "Kaang Chin",
["cko"] = "Anufo",
["ckq"] = "Kajakse",
["ckr"] = "Kairak",
["cks"] = "Tayo",
["ckt"] = "ชุกชี",
["cku"] = "Koasati",
["ckv"] = "กบาลัน",
["ckx"] = "Caka",
["cky"] = "Cakfem-Mushere",
["ckz"] = "Kaqchikel-K'iche' Mixed Language",
["cla"] = "Ron",
["clc"] = "Chilcotin",
["cld"] = "Chaldean Neo-Aramaic",
["cle"] = "Lealao Chinantec",
["clh"] = "Chilisso",
["cli"] = "Chakali",
["clj"] = "Laitu Chin",
["clk"] = "Idu",
["cll"] = "Chala",
["clm"] = "Klallam",
["clo"] = "Lowland Oaxaca Chontal",
["clt"] = "Lutuv",
["clu"] = "Caluyanun",
["clw"] = "Chulym",
["cly"] = "Eastern Highland Chatino",
["cma"] = "หมะ",
["cmc-pro"] = "จามิกดั้งเดิม",
["cme"] = "Cerma",
["cmg"] = "มองโกเลียคลาสสิก",
["cmi"] = "Emberá-Chamí",
["cml"] = "Campalagian",
["cmm"] = "Michigamea",
["cmn"] = "จีนกลาง",
["cmo"] = "มนองตอนกลาง",
["cmr"] = "Mro Chin",
["cms"] = "Messapic",
["cmt"] = "Camtho",
["cna"] = "Changthang",
["cnb"] = "Chinbon Chin",
["cnc"] = "Cốông",
["cng"] = "Northern Qiang",
["cnh"] = "Lai",
["cni"] = "Asháninka",
["cnk"] = "Khumi Chin",
["cnl"] = "Lalana Chinantec",
["cno"] = "Con",
["cnp"] = "ผิงเหนือ",
["cns"] = "Central Asmat",
["cnt"] = "Tepetotutla Chinantec",
["cnu"] = "Chenoua",
["cnw"] = "Ngawn Chin",
["cnx"] = "Middle Cornish",
["co"] = "คอร์ซิกา",
["coa"] = "Cocos Islands Malay",
["cob"] = "Chicomuceltec",
["coc"] = "Cocopa",
["cod"] = "Cocama",
["coe"] = "Koreguaje",
["cof"] = "Tsafiki",
["cog"] = "ชอง",
["coh"] = "Chichonyi-Chidzihana-Chikauma",
["coj"] = "Cochimi",
["cok"] = "Santa Teresa Cora",
["col"] = "Columbia-Wenatchi",
["com"] = "Comanche",
["con"] = "Cofán",
["coo"] = "Comox",
["cop"] = "คอปติก",
["coq"] = "Coquille",
["cot"] = "Caquinte",
["cou"] = "Wamey",
["cov"] = "เฉ่าเหมียว",
["cow"] = "Cowlitz",
["cox"] = "Nanti",
["coy"] = "Coyaima",
["coz"] = "Chochotec",
["cpa"] = "Palantla Chinantec",
["cpb"] = "Ucayali-Yurúa Ashéninka",
["cpc"] = "Ajyíninka Apurucayali",
["cpg"] = "Cappadocian Greek",
["cpi"] = "Chinese Pidgin English",
["cpn"] = "Cherepon",
["cpo"] = "Kpee",
["cps"] = "Capiznon",
["cpu"] = "Pichis Ashéninka",
["cpx"] = "ผูเซียน",
["cpy"] = "South Ucayali Ashéninka",
["cqd"] = "Chuanqiandian Cluster Miao",
["cr"] = "ครี",
["cra"] = "Chara",
["crb"] = "Kalinago",
["crc"] = "Lonwolwol",
["crd"] = "Coeur d'Alene",
["crf"] = "Caramanta",
["crg"] = "Michif",
["crh"] = "ตาตาร์แบบไครเมีย",
["cri"] = "Sãotomense",
["crj"] = "Southern East Cree",
["crk"] = "Plains Cree",
["crl"] = "Northern East Cree",
["crm"] = "Moose Cree",
["crn"] = "Cora",
["cro"] = "Crow",
["crp-bip"] = "Basque-Icelandic Pidgin",
["crp-gep"] = "West Greenlandic Pidgin",
["crp-kia"] = "Kiautschou German Pidgin",
["crp-mar"] = "Maroon Spirit Language",
["crp-mpp"] = "Macau Pidgin Portuguese",
["crp-rsn"] = "Russenorsk",
["crp-slb"] = "Solombala English",
["crp-spp"] = "Samoan Plantation Pidgin",
["crp-tpr"] = "Taimyr Pidgin Russian",
["crq"] = "Iyo'wujwa Chorote",
["crr"] = "Carolina Algonquian",
["crs"] = "Seychellois Creole",
["crt"] = "Iyojwa'ja Chorote",
["crv"] = "Chaura",
["crw"] = "Chrau",
["crx"] = "Carrier",
["cry"] = "Cori",
["crz"] = "Cruzeño",
["cs"] = "เช็ก",
["csa"] = "Chiltepec Chinantec",
["csb"] = "คาชุบ",
["csc"] = "Catalan Sign Language",
["csd"] = "Chiangmai Sign Language",
["cse"] = "Czech Sign Language",
["csf"] = "Cuban Sign Language",
["csg"] = "Chilean Sign Language",
["csh"] = "Asho Chin",
["csi"] = "Coast Miwok",
["csj"] = "Songlai Chin",
["csk"] = "Jola-Kasa",
["csl"] = "Chinese Sign Language",
["csm"] = "Central Sierra Miwok",
["csn"] = "Colombian Sign Language",
["cso"] = "Sochiapam Chinantec",
["csp"] = "ผิงใต้",
["csq"] = "Croatian Sign Language",
["csr"] = "Costa Rican Sign Language",
["css"] = "Southern Ohlone",
["cst"] = "Northern Ohlone",
["csu-bba-pro"] = "Proto-Bongo-Bagirmi",
["csu-maa-pro"] = "Proto-Mangbetu",
["csu-pro"] = "Proto-Central Sudanic",
["csu-sar-pro"] = "Proto-Sara",
["csv"] = "Sumtu Chin",
["csw"] = "Swampy Cree",
["csx"] = "Cambodian Sign Language",
["csy"] = "Siyin Chin",
["csz"] = "Coos",
["cta"] = "Tataltepec Chatino",
["ctc"] = "Chetco-Tolowa",
["ctd"] = "Tedim Chin",
["cte"] = "Tepinapa Chinantec",
["ctg"] = "Chittagonian",
["cth"] = "Thaiphum Chin",
["ctl"] = "Tlacoatzintepec Chinantec",
["ctm"] = "Chitimacha",
["ctn"] = "Chhintange",
["cto"] = "Emberá-Catío",
["ctp"] = "Western Highland Chatino",
["cts"] = "Northern Catanduanes Bicolano",
["ctt"] = "Wayanad Chetti",
["ctu"] = "Chol",
["ctz"] = "Zacatepec Chatino",
["cu"] = "สลาวอนิกคริสตจักรเก่า",
["cua"] = "Cua",
["cub"] = "Cubeo",
["cuc"] = "Usila Chinantec",
["cug"] = "Cung",
["cuh"] = "Chuka",
["cui"] = "Cuiba",
["cuj"] = "Mashco Piro",
["cuk"] = "Kuna",
["cul"] = "Culina",
["cuo"] = "Cumanagoto",
["cup"] = "Cupeño",
["cuq"] = "จุน",
["cur"] = "Chhulung",
["cus-ash"] = "Ashraaf",
["cus-hec-pro"] = "Proto-Highland East Cushitic",
["cus-pro"] = "Proto-Cushitic",
["cus-som-pro"] = "โซมาลอยด์ดั้งเดิม",
["cus-sou-pro"] = "Proto-South Cushitic",
["cut"] = "Teutila Cuicatec",
["cuu"] = "Tai Ya",
["cuv"] = "Cuvok",
["cuw"] = "Chukwa",
["cux"] = "Tepeuxila Cuicatec",
["cuy"] = "Cuitlatec",
["cv"] = "ชูวัช",
["cvg"] = "Chug",
["cvn"] = "Valle Nacional Chinantec",
["cwa"] = "Kabwa",
["cwb"] = "Maindo",
["cwd"] = "Woods Cree",
["cwe"] = "Kwere",
["cwg"] = "Chewong",
["cwt"] = "Kuwaataay",
["cy"] = "เวลส์",
["cya"] = "Nopala Chatino",
["cyb"] = "Cayubaba",
["cyo"] = "Cuyunon",
["czh"] = "Huizhou",
["czk"] = "Knaanic",
["czn"] = "Zenzontepec Chatino",
["czo"] = "หมิ่นตอนกลาง",
["czt"] = "Zotung Chin",
["da"] = "เดนมาร์ก",
["daa"] = "Dangaléat",
["dac"] = "Dambi",
["dad"] = "Marik",
["dae"] = "Duupa",
["dag"] = "Dagbani",
["dah"] = "Gwahatike",
["dai"] = "Day",
["daj"] = "Dar Fur Daju",
["dak"] = "ดาโคตา",
["dal"] = "Dahalo",
["dam"] = "Damakawa",
["dao"] = "Daai Chin",
["daq"] = "Dandami Maria",
["dar"] = "Dargwa",
["das"] = "Daho-Doo",
["dau"] = "Dar Sila Daju",
["dav"] = "Taita",
["daw"] = "Davawenyo",
["dax"] = "Dayi",
["daz"] = "Dao",
["dba"] = "Bangime",
["dbb"] = "Deno",
["dbd"] = "Dadiya",
["dbe"] = "Dabe",
["dbf"] = "Edopi",
["dbg"] = "Dogul Dom",
["dbi"] = "Doka",
["dbj"] = "อีดาอัน",
["dbl"] = "Dyirbal",
["dbm"] = "Duguri",
["dbn"] = "Duriankere",
["dbo"] = "Dulbu",
["dbp"] = "Duwai",
["dbq"] = "Daba",
["dbr"] = "Dabarre",
["dbt"] = "Ben Tey",
["dbu"] = "Bondum Dom Dogon",
["dbv"] = "Dungu",
["dbw"] = "Bankan Tey Dogon",
["dby"] = "Dibiyaso",
["dcc"] = "Deccani",
["dcr"] = "เนเกอร์ฮอลันดส์",
["dda"] = "Dadi Dadi",
["ddd"] = "Dongotono",
["dde"] = "Doondo",
["ddg"] = "Fataluku",
["ddi"] = "Diodio",
["ddj"] = "Jaru",
["ddn"] = "Dendi",
["ddo"] = "Tsez",
["ddr"] = "Dhudhuroa",
["dds"] = "Donno So Dogon",
["ddw"] = "Dawera-Daweloor",
["de"] = "เยอรมัน",
["dec"] = "Dagik",
["ded"] = "Dedua",
["dee"] = "Dewoin",
["def"] = "Dezfuli",
["deg"] = "Degema",
["deh"] = "Dehwari",
["dei"] = "Demisa",
["dem"] = "Dem",
["dep"] = "Pidgin Delaware",
["der"] = "Deori",
["des"] = "Desano",
["dev"] = "Domung",
["dez"] = "Dengese",
["dga"] = "Southern Dagaare",
["dgb"] = "Bunoge",
["dgc"] = "Casiguran Dumagat Agta",
["dgd"] = "Dagaari Dioula",
["dge"] = "Degenan",
["dgg"] = "Doga",
["dgh"] = "Dghwede",
["dgi"] = "Northern Dagara",
["dgk"] = "Dagba",
["dgn"] = "Dagoman",
["dgo"] = "Hindi Dogri",
["dgr"] = "Dogrib",
["dgs"] = "Dogoso",
["dgt"] = "Ntra'ngith",
["dgw"] = "Daungwurrung",
["dgx"] = "Doghoro",
["dgz"] = "Daga",
["dhd"] = "Dhundhari",
["dhg"] = "Dhangu",
["dhi"] = "Dhimal",
["dhl"] = "Dhalandji",
["dhm"] = "Zemba",
["dhn"] = "Dhanki",
["dho"] = "Dhodia",
["dhr"] = "Tharrgari",
["dhs"] = "Dhaiso",
["dhu"] = "Dhurga",
["dhv"] = "Drehu",
["dhw"] = "Danuwar",
["dhx"] = "Dhungaloo",
["dia"] = "Dia",
["dib"] = "South Central Dinka",
["dic"] = "Lakota Dida",
["did"] = "Didinga",
["dif"] = "Dieri",
["dig"] = "Digo",
["dii"] = "Dimbong",
["dij"] = "Dai",
["dik"] = "Southwestern Dinka",
["dil"] = "Dilling",
["dim"] = "Dime",
["din"] = "Dinka",
["dio"] = "Dibo",
["dip"] = "Northeastern Dinka",
["dir"] = "Dirim",
["dis"] = "Dimasa",
["diu"] = "Gciriku",
["diw"] = "Northwestern Dinka",
["dix"] = "Dixon Reef",
["diy"] = "Diuwe",
["diz"] = "Ding",
["dja"] = "Djadjawurrung",
["djb"] = "Djinba",
["djc"] = "Dar Daju Daju",
["djd"] = "Jaminjung",
["dje"] = "Zarma",
["djf"] = "Djangun",
["dji"] = "Djinang",
["djj"] = "Ndjébbana",
["djk"] = "Aukan",
["djl"] = "Djiwarli",
["djm"] = "Jamsay",
["djn"] = "Djauan",
["djo"] = "Jangkang",
["djr"] = "Djambarrpuyngu",
["dju"] = "Kapriman",
["djw"] = "Djawi",
["dka"] = "Dakpa",
["dkk"] = "Dakka",
["dkr"] = "Kuijau",
["dks"] = "Southeastern Dinka",
["dkx"] = "Mazagway",
["dlg"] = "Dolgan",
["dlk"] = "Dahalik",
["dlm"] = "แดลเมเชีย",
["dln"] = "Darlong",
["dma"] = "Duma",
["dmb"] = "Mombo Dogon",
["dmc"] = "Gavak",
["dmd"] = "Madhi Madhi",
["dme"] = "Dugwor",
["dmf"] = "Medefaidrin",
["dmg"] = "กีนาบาตางันตอนบน",
["dmk"] = "Domaaki",
["dml"] = "Dameli",
["dmm"] = "Dama (Nigeria)",
["dmn-dam"] = "Dama (Sierra Leone)",
["dmn-mdw-pro"] = "Proto-Western Mande",
["dmn-pro"] = "Proto-Mande",
["dmo"] = "Kemezung",
["dmr"] = "East Damar",
["dms"] = "Dampelas",
["dmu"] = "Dubu",
["dmv"] = "Dumpas",
["dmw"] = "Mudburra",
["dmx"] = "Dema",
["dmy"] = "Demta",
["dna"] = "Upper Grand Valley Dani",
["dnd"] = "Daonda",
["dne"] = "Ndendeule",
["dng"] = "ดุงกาน",
["dni"] = "Lower Grand Valley Dani",
["dnj"] = "Dan",
["dnk"] = "Dengka",
["dnn"] = "Dzuun",
["dno"] = "Ndrulo",
["dnr"] = "Danaru",
["dnt"] = "Mid Grand Valley Dani",
["dnu"] = "Danau",
["dnv"] = "Danu",
["dnw"] = "Western Dani",
["dny"] = "Dení",
["doa"] = "Dom",
["dob"] = "Dobu",
["doc"] = "ต้งเหนือ",
["doe"] = "Doe",
["dof"] = "Domu",
["doh"] = "Dong",
["doi"] = "Dogri",
["dok"] = "Dondo",
["dol"] = "Doso",
["don"] = "Doura",
["doo"] = "Dongo",
["dop"] = "Lukpa",
["doq"] = "Dominican Sign Language",
["dor"] = "Dori'o",
["dos"] = "Dogosé",
["dot"] = "Dass",
["dov"] = "Toka-Leya",
["dow"] = "Doyayo",
["dox"] = "Bussa",
["doy"] = "Dompo",
["doz"] = "Dorze",
["dpp"] = "Papar",
["dra-bry"] = "Beary",
["dra-cen-pro"] = "ดราวิเดียนตอนกลางดั้งเดิม",
["dra-mkn"] = "Middle Kannada",
["dra-nor-pro"] = "ดราวิเดียนเหนือดั้งเดิม",
["dra-okn"] = "Old Kannada",
["dra-ote"] = "Old Telugu",
["dra-pro"] = "ดราวิเดียนดั้งเดิม",
["dra-sdo-pro"] = "ดราวิเดียนใต้ที่หนึ่งดั้งเดิม",
["dra-sdt-pro"] = "ดราวิเดียนใต้ที่สองดั้งเดิม",
["dra-sou-pro"] = "ดราวิเดียนใต้ดั้งเดิม",
["drb"] = "Dair",
["drc"] = "Minderico",
["drd"] = "Darmiya",
["drg"] = "Rungus",
["dri"] = "Lela",
["drl"] = "Baagandji",
["drn"] = "West Damar",
["dro"] = "Daro-Matu Melanau",
["drq"] = "Dura",
["drs"] = "Gedeo",
["dru"] = "Rukai",
["dru-pro"] = "Proto-Rukai",
["dry"] = "Darai",
["dsb"] = "ซอร์เบียตอนล่าง",
["dse"] = "Dutch Sign Language",
["dsh"] = "Daasanach",
["dsi"] = "Disa",
["dsl"] = "Danish Sign Language",
["dsn"] = "Dusner",
["dso"] = "Desiya",
["dsq"] = "Tadaksahak",
["dta"] = "Daur",
["dtb"] = "Labuk-Kinabatangan Kadazan",
["dtd"] = "Ditidaht",
["dth"] = "Adithinngithigh",
["dti"] = "Ana Tinga Dogon",
["dtk"] = "Tene Kan Dogon",
["dtm"] = "Tomo Kan Dogon",
["dto"] = "Tommo So",
["dtp"] = "ดูซุนตอนกลาง",
["dtr"] = "Lotud",
["dts"] = "Toro So Dogon",
["dtt"] = "Toro Tegu Dogon",
["dtu"] = "Tebul Ure Dogon",
["dty"] = "Doteli",
["dua"] = "Duala",
["dub"] = "Dubli",
["duc"] = "Duna",
["due"] = "Umiray Dumaget Agta",
["duf"] = "Dumbea",
["dug"] = "Chiduruma",
["duh"] = "Dungra Bhil",
["dui"] = "Dumun",
["duk"] = "Uyajitaya",
["dul"] = "Alabat Island Agta",
["dum"] = "ดัตช์กลาง",
["dun"] = "Dusun Deyah",
["duo"] = "Dupaningan Agta",
["dup"] = "Duano",
["duq"] = "Dusun Malang",
["dur"] = "Dii",
["dus"] = "Dumi",
["duu"] = "Drung",
["duv"] = "Duvle",
["duw"] = "Dusun Witu",
["dux"] = "Duun",
["duy"] = "Dicamay Agta",
["duz"] = "Duli",
["dv"] = "มัลดีฟส์",
["dva"] = "Duau",
["dwa"] = "Diri",
["dwr"] = "เดาโร",
["dwu"] = "Dhuwal",
["dww"] = "Dawawa",
["dwy"] = "Dhuwaya",
["dwz"] = "Dewas Rai",
["dya"] = "Dyan",
["dyb"] = "Dyaberdyaber",
["dyd"] = "Dyugun",
["dyg"] = "Villa Viciosa Agta",
["dyi"] = "Djimini",
["dym"] = "Yanda Dogon",
["dyn"] = "Dyangadi",
["dyo"] = "Jola-Fonyi",
["dyu"] = "Dyula",
["dyy"] = "Dyaabugay",
["dz"] = "ซองคา",
["dza"] = "Tunzu",
["dzg"] = "Dazaga",
["dzl"] = "Dzala",
["dzn"] = "Dzando",
["ebg"] = "Ebughu",
["ebk"] = "Eastern Bontoc",
["ebr"] = "Ebrié",
["ebu"] = "Embu",
["ecr"] = "Eteocretan",
["ecs"] = "Ecuadorian Sign Language",
["ecy"] = "Eteocypriot",
["ee"] = "เอเว",
["eee"] = "E",
["efa"] = "Efai",
["efe"] = "Efe",
["efi"] = "Efik",
["ega"] = "Ega",
["egl"] = "เอมีเลีย",
["ego"] = "Eggon",
["egx-dem"] = "Demotic Egyptian",
["egy"] = "อียิปต์",
["ehu"] = "Ehueun",
["eip"] = "Eipomek",
["eit"] = "Eitiep",
["eiv"] = "Askopan",
["eja"] = "Ejamat",
["eka"] = "Ekajuk",
["eke"] = "Ekit",
["ekg"] = "Ekari",
["eki"] = "Eki",
["ekl"] = "Kolhe",
["ekm"] = "Elip",
["eko"] = "Koti",
["ekp"] = "Ekpeye",
["ekr"] = "Yace",
["eky"] = "กะยาตะวันออก",
["el"] = "กรีก",
["ele"] = "Elepi",
["elh"] = "El Hugeirat",
["eli"] = "Nding",
["elk"] = "Elkei",
["elm"] = "Eleme",
["elo"] = "El Molo",
["elu"] = "Elu",
["elx"] = "Elamite",
["ema"] = "Emai",
["emb"] = "Embaloh",
["eme"] = "Emerillon",
["emg"] = "Eastern Meohang",
["emi"] = "Mussau-Emira",
["emk"] = "Eastern Maninkakan",
["emm"] = "Mamulique",
["emn"] = "Eman",
["emp"] = "Northern Emberá",
["ems"] = "อาลูตีก",
["emu"] = "Eastern Muria",
["emw"] = "Emplawas",
["emx"] = "Erromintxela",
["emy"] = "Epigraphic Mayan",
["en"] = "อังกฤษ",
["ena"] = "Apali",
["enb"] = "Markweeta",
["enc"] = "En",
["end"] = "Ende",
["enf"] = "Forest Enets",
["enh"] = "Tundra Enets",
["enl"] = "Enlhet",
["enm"] = "อังกฤษกลาง",
["enn"] = "Engenni",
["eno"] = "Enggano",
["enq"] = "Enga",
["enr"] = "Emem",
["enu"] = "Enu",
["env"] = "Enwan",
["enw"] = "Enwang",
["enx"] = "Enxet",
["eo"] = "เอสเปรันโต",
["eot"] = "Eotile",
["epi"] = "Epie",
["era"] = "Eravallan",
["erg"] = "Sie",
["erh"] = "Eruwa",
["eri"] = "Ogea",
["erk"] = "South Efate",
["ero-gsz"] = "Geshiza",
["ero-nya"] = "Nyagrong Minyag",
["ero-tau"] = "Stau",
["err"] = "Erre",
["ers"] = "Ersu",
["ert"] = "Eritai",
["erw"] = "Erokwanas",
["es"] = "สเปน",
["ese"] = "Ese Ejja",
["esh"] = "เอชเตฮาร์ด",
["esl"] = "Egyptian Sign Language",
["esm"] = "Esuma",
["esn"] = "Salvadoran Sign Language",
["eso"] = "Estonian Sign Language",
["esq"] = "Esselen",
["ess"] = "Central Siberian Yupik",
["esu"] = "ยุปปิก",
["esx-esk-pro"] = "เอสกิโมดั้งเดิม",
["esx-ink"] = "Inuktun",
["esx-inq"] = "Inuinnaqtun",
["esx-inu-pro"] = "อินุอิตดั้งเดิม",
["esx-pro"] = "Proto-Eskimo-Aleut",
["esx-tut"] = "Tunumiisut",
["esy"] = "Eskayan",
["et"] = "เอสโตเนีย",
["etb"] = "Etebi",
["etc"] = "Etchemin",
["eth"] = "Ethiopian Sign Language",
["etn"] = "Eton (Vanuatu)",
["eto"] = "Eton (Cameroon)",
["etr"] = "Edolo",
["ets"] = "Yekhee",
["ett"] = "อีทรัสคัน",
["etu"] = "Ejagham",
["etx"] = "Eten",
["etz"] = "Semimi",
["eu"] = "บาสก์",
["euq-pro"] = "บาสก์ดั้งเดิม",
["eve"] = "เอเว็น",
["evh"] = "Uvbie",
["evn"] = "เอเวนค์",
["ewo"] = "Ewondo",
["ext"] = "เอซเตรมาดูรา",
["eya"] = "Eyak",
["eyo"] = "Keiyo",
["eza"] = "Ezaa",
["eze"] = "Uzekwe",
["fa"] = "เปอร์เซีย",
["faa"] = "Fasu",
["fab"] = "Annobonese",
["fad"] = "Wagi",
["faf"] = "Fagani",
["fag"] = "Finongan",
["fah"] = "Baissa Fali",
["fai"] = "Faiwol",
["faj"] = "Faita",
["fak"] = "Fang (Beboid)",
["fal"] = "South Fali",
["fam"] = "Fam",
["fan"] = "Fang (Bantu)",
["fap"] = "Palor",
["far"] = "Fataleka",
["fau"] = "Fayu",
["fax"] = "ฟาลา",
["fay"] = "Southwestern Fars",
["faz"] = "Northwestern Fars",
["fbl"] = "West Albay Bikol",
["fcs"] = "Quebec Sign Language",
["fer"] = "Feroge",
["ff"] = "ฟูลา",
["ffi"] = "Foia Foia",
["fgr"] = "Fongoro",
["fi"] = "ฟินแลนด์",
["fia"] = "Nobiin",
["fie"] = "Fyer",
["fip"] = "Fipa",
["fir"] = "Firan",
["fit"] = "Meänkieli",
["fiw"] = "Fiwaga",
["fj"] = "ฟีจี",
["fkk"] = "Kirya-Konzel",
["fkv"] = "Kven",
["fla"] = "Montana Salish",
["flh"] = "Foau",
["fli"] = "Fali",
["fll"] = "North Fali",
["fln"] = "Flinders Island",
["flr"] = "Fuliiru",
["fly"] = "Tsotsitaal",
["fmp"] = "Fe'fe'",
["fmu"] = "Far Western Muria",
["fng"] = "Fanagalo",
["fni"] = "Fania",
["fo"] = "แฟโร",
["fod"] = "Foodo",
["foi"] = "Foi",
["fom"] = "Foma",
["fon"] = "Fon",
["for"] = "Fore",
["fos"] = "Siraya",
["fpe"] = "Pichinglis",
["fqs"] = "Fas",
["fr"] = "ฝรั่งเศส",
["frd"] = "Fordata",
["frm"] = "ฝรั่งเศสกลาง",
["fro"] = "ฝรั่งเศสเก่า",
["frp"] = "ฟร็องโก-พรอว็องส์",
["frq"] = "Forak",
["frr"] = "ฟรีเชียเหนือ",
["frt"] = "Fortsenal",
["fse"] = "Finnish Sign Language",
["fsl"] = "French Sign Language",
["fss"] = "Finnish-Swedish Sign Language",
["fud"] = "East Futuna",
["fuj"] = "Ko",
["fum"] = "Fum",
["fun"] = "Fulniô",
["fur"] = "ฟรียูลี",
["fut"] = "Futuna-Aniwa",
["fuu"] = "Furu",
["fuy"] = "Fuyug",
["fvr"] = "Fur",
["fwa"] = "Fwâi",
["fwe"] = "Fwe",
["fy"] = "ฟรีเชียตะวันตก",
["ga"] = "ไอริช",
["gaa"] = "Ga",
["gab"] = "Gabri",
["gac"] = "Mixed Great Andamanese",
["gad"] = "Gaddang",
["gae"] = "Warekena",
["gaf"] = "Gende",
["gag"] = "กากาอุซ",
["gah"] = "Alekano",
["gai"] = "Borei",
["gaj"] = "Gadsup",
["gak"] = "Gamkonora",
["gal"] = "Galoli",
["gam"] = "Kandawo",
["gan"] = "กั้น",
["gao"] = "Gants",
["gap"] = "Gal",
["gaq"] = "Gata'",
["gar"] = "Galeya",
["gas"] = "Adiwasi Garasia",
["gat"] = "Kenati",
["gau"] = "Kondekor",
["gaw"] = "Nobonob",
["gay"] = "Gayo",
["gba-pro"] = "Proto-Gbaya",
["gbb"] = "Kaytetye",
["gbd"] = "Karadjeri",
["gbe"] = "Niksek",
["gbf"] = "Gaikundi",
["gbg"] = "Gbanziri",
["gbh"] = "Defi Gbe",
["gbi"] = "Galela",
["gbj"] = "Bodo Gadaba",
["gbk"] = "Gaddi",
["gbl"] = "Gamit",
["gbm"] = "Garhwali",
["gbn"] = "Mo'da",
["gbo"] = "Northern Grebo",
["gbp"] = "Gbaya-Bossangoa",
["gbq"] = "Gbaya-Bozoum",
["gbr"] = "Gbagyi",
["gbs"] = "Gbesi Gbe",
["gbu"] = "Gagadu",
["gbv"] = "Gbanu",
["gbw"] = "Gabi",
["gbx"] = "Eastern Xwla Gbe",
["gby"] = "Gbari",
["gcc"] = "Mali",
["gcd"] = "Ganggalida",
["gce"] = "Galice",
["gcf"] = "Antillean Creole",
["gcl"] = "Grenadian Creole English",
["gcn"] = "Gaina",
["gcr"] = "Guianese Creole",
["gct"] = "Colonia Tovar German",
["gd"] = "แกลิกแบบสกอตแลนด์",
["gdb"] = "Ollari",
["gdc"] = "Gugu Badhun",
["gdd"] = "Gedaged",
["gde"] = "Gude",
["gdf"] = "Guduf-Gava",
["gdg"] = "Ga'dang",
["gdh"] = "Gadjerawang",
["gdi"] = "Gundi",
["gdj"] = "Kurtjar",
["gdk"] = "Gadang",
["gdl"] = "Dirasha",
["gdm"] = "Laal",
["gdn"] = "Umanakaina",
["gdo"] = "Godoberi",
["gdq"] = "Mehri",
["gdr"] = "Wipi",
["gds"] = "Ghandruk Sign Language",
["gdt"] = "Kungardutyi",
["gdu"] = "Gudu",
["gdx"] = "Godwari",
["gea"] = "Geruma",
["geb"] = "Kire",
["gec"] = "Gboloo Grebo",
["ged"] = "Gade",
["geg"] = "Gengle",
["geh"] = "Hutterisch",
["gei"] = "Gebe",
["gej"] = "Gen",
["gek"] = "Gerka",
["gel"] = "Fakkanci",
["gem-pro"] = "เจอร์แมนิกดั้งเดิม",
["geq"] = "Geme",
["ges"] = "Geser-Gorom",
["gev"] = "Viya",
["gew"] = "Gera",
["gex"] = "Garre",
["gey"] = "Enya",
["gez"] = "กืออึซ",
["gfk"] = "Patpatar",
["gft"] = "Gafat",
["gga"] = "Gao",
["ggb"] = "Gbii",
["ggd"] = "Gugadj",
["gge"] = "Guragone",
["ggg"] = "Gurgula",
["ggk"] = "Kungarakany",
["ggl"] = "Ganglau",
["ggn"] = "Eastern Gurung",
["ggt"] = "Gitua",
["ggu"] = "Gban",
["ggw"] = "Gogodala",
["gha"] = "Ghadames",
["ghc"] = "แกลิกคลาสสิก",
["ghe"] = "Southern Ghale",
["ghh"] = "Northern Ghale",
["ghk"] = "Geko Karen",
["ghl"] = "Ghulfan",
["ghn"] = "Ghanongga",
["gho"] = "Ghomara",
["ghr"] = "Ghera",
["ghs"] = "Guhu-Samane",
["ght"] = "Kutang Ghale",
["gia"] = "Kitja",
["gib"] = "Gibanawa",
["gid"] = "Gidar",
["gie"] = "Guébie",
["gig"] = "Goaria",
["gih"] = "Githabul",
["gii"] = "Girirra",
["gil"] = "กิลเบิร์ต",
["gim"] = "Gimi (Papuan)",
["gin"] = "Hinukh",
["gip"] = "Gimi (Austronesian)",
["giq"] = "Green Gelao",
["gir"] = "Red Gelao",
["gis"] = "North Giziga",
["git"] = "Gitxsan",
["giu"] = "Mulao",
["giw"] = "White Gelao",
["gix"] = "Gilima",
["giy"] = "Giyug",
["giz"] = "South Giziga",
["gji"] = "Geji",
["gjk"] = "Kachi Koli",
["gjm"] = "Gunditjmara",
["gjn"] = "Gonja",
["gjr"] = "Gurindji Kriol",
["gju"] = "Gojri",
["gka"] = "Guya",
["gkd"] = "Magɨ",
["gke"] = "Ndai",
["gkn"] = "Gokana",
["gko"] = "Kok-Nar",
["gkp"] = "Guinea Kpelle",
["gl"] = "กาลิเซีย",
["glc"] = "Bon Gula",
["gld"] = "Nanai",
["glh"] = "Northwest Pashayi",
["glj"] = "Kulaal",
["glk"] = "Gilaki",
["glo"] = "Galambu",
["glr"] = "Glaro-Twabo",
["glu"] = "Gula",
["glw"] = "Glavda",
["gly"] = "Gule",
["gma"] = "Gambera",
["gmb"] = "Gula'alaa",
["gmd"] = "Mághdì",
["gme-bur"] = "Burgundian",
["gme-cgo"] = "กอทแบบไครเมีย",
["gmg"] = "Magiyi",
["gmh"] = "เยอรมันสูงกลาง",
["gml"] = "เยอรมันต่ำกลาง",
["gmm"] = "Gbaya-Mbodomo",
["gmn"] = "Gimnime",
["gmq-gut"] = "Gutnish",
["gmq-jmk"] = "Jamtish",
["gmq-mno"] = "นอร์เวย์กลาง",
["gmq-oda"] = "เดนมาร์กเก่า",
["gmq-ogt"] = "Old Gutnish",
["gmq-osw"] = "สวีเดนเก่า",
["gmq-pro"] = "นอร์สดั้งเดิม",
["gmq-scy"] = "Scanian",
["gmr"] = "Mirning",
["gmu"] = "Gumalu",
["gmv"] = "กาโม",
["gmw-bgh"] = "Bergish",
["gmw-cfr"] = "ฟรังโกเนียตอนกลาง",
["gmw-ecg"] = "เยอรมันตอนกลางตะวันออก",
["gmw-fin"] = "Fingallian",
["gmw-gts"] = "Gottscheerish",
["gmw-jdt"] = "Jersey Dutch",
["gmw-msc"] = "Middle Scots",
["gmw-pro"] = "เจอร์แมนิกตะวันตกดั้งเดิม",
["gmw-rfr"] = "ฟรังโกเนียแบบไรน์",
["gmw-stm"] = "Sathmar Swabian",
["gmw-tsx"] = "Transylvanian Saxon",
["gmw-vog"] = "เยอรมันแบบว็อลกา",
["gmw-zps"] = "เยอรมันแบบซิพเซอร์",
["gmx"] = "Magoma",
["gmy"] = "กรีกแบบไมซีนี",
["gmz"] = "Mgbo",
["gn-cls"] = "กัวรานีคลาสสิก",
["gna"] = "Kaansa",
["gnb"] = "Gangte",
["gnc"] = "Guanche",
["gnd"] = "Zulgo-Gemzek",
["gne"] = "Ganang",
["gng"] = "Ngangam",
["gnh"] = "Lere",
["gni"] = "กูนียันดี",
["gnj"] = "Ngen of Djonkro",
["gnk"] = "ǁGana",
["gnl"] = "Gangulu",
["gnm"] = "Ginuman",
["gnn"] = "Gumatj",
["gnq"] = "Gana",
["gnr"] = "Gureng Gureng",
["gnt"] = "Guntai",
["gnu"] = "Gnau",
["gnw"] = "Western Bolivian Guarani",
["gnz"] = "Ganzi",
["goa"] = "Guro",
["gob"] = "Playero",
["goc"] = "Gorakor",
["god"] = "Godié",
["goe"] = "Gongduk",
["gof"] = "โกฟา",
["gog"] = "Gogo",
["goh"] = "เยอรมันสูงเก่า",
["goi"] = "Gobasi",
["goj"] = "Gowlan",
["gol"] = "Gola",
["gon"] = "โคณฑี",
["goo"] = "Gone Dau",
["gop"] = "Yeretuar",
["goq"] = "Gorap",
["gor"] = "Gorontalo",
["got"] = "กอท",
["gou"] = "Gavar",
["gov"] = "Goo",
["gow"] = "Gorwaa",
["gox"] = "Gobu",
["goy"] = "Goundo",
["goz"] = "Gozarkhani",
["gpa"] = "Gupa-Abawa",
["gpn"] = "Taiap",
["gqa"] = "Ga'anda",
["gqi"] = "Guiqiong",
["gqn"] = "Kinikinao",
["gqr"] = "Gor",
["gqu"] = "Qau",
["gra"] = "Rajput Garasia",
["grc"] = "กรีกโบราณ",
["grd"] = "Guruntum",
["grg"] = "Madi",
["grh"] = "Gbiri-Niragu",
["gri"] = "Ghari",
["grj"] = "Southern Grebo",
["grk-cal"] = "Calabrian Greek",
["grk-ita"] = "Italiot Greek",
["grk-mar"] = "Mariupol Greek",
["grk-pro"] = "เฮลเลนิกดั้งเดิม",
["grm"] = "Kota Marudu Talantang",
["gro"] = "Groma",
["grq"] = "Gorovu",
["grs"] = "Gresi",
["grt"] = "กาโร",
["gru"] = "Kistane",
["grv"] = "Central Grebo",
["grw"] = "Gweda",
["grx"] = "Guriaso",
["gry"] = "Barclayville Grebo",
["grz"] = "Guramalum",
["gse"] = "Ghanaian Sign Language",
["gsg"] = "German Sign Language",
["gsl"] = "Gusilay",
["gsm"] = "Guatemalan Sign Language",
["gsn"] = "Gusan",
["gso"] = "Southwest Gbaya",
["gsp"] = "Wasembo",
["gss"] = "Greek Sign Language",
["gsw"] = "เยอรมันแบบอลามันเนีย",
["gta"] = "Guató",
["gtu"] = "Aghu Tharrnggala",
["gu"] = "คุชราต",
["gua"] = "Shiki",
["gub"] = "Guajajára",
["guc"] = "Wayuu",
["gud"] = "Yocoboué Dida",
["gue"] = "Gurindji",
["guf"] = "Gupapuyngu",
["gug"] = "กัวรานีแบบปารากวัย",
["guh"] = "Guahibo",
["gui"] = "Eastern Bolivian Guarani",
["guk"] = "Gumuz",
["gul"] = "Gullah",
["gum"] = "Guambiano",
["gun"] = "Mbya Guarani",
["guo"] = "Guayabero",
["gup"] = "Gunwinggu",
["guq"] = "Aché",
["gur"] = "ฟราฟรา",
["gus"] = "Guinean Sign Language",
["gut"] = "Maléku Jaíka",
["guu"] = "Yanomamö",
["guv"] = "Gey",
["guw"] = "Gun",
["gux"] = "Gourmanchéma",
["guz"] = "Gusii",
["gv"] = "แมงซ์",
["gva"] = "Kaskihá",
["gvc"] = "Guanano",
["gve"] = "Duwet",
["gvf"] = "Golin",
["gvj"] = "Guajá",
["gvl"] = "Gulay",
["gvm"] = "Gurmana",
["gvn"] = "Kuku-Yalanji",
["gvo"] = "Gavião do Jiparaná",
["gvp"] = "Pará Gavião",
["gvr"] = "Western Gurung",
["gvs"] = "Gumawana",
["gvy"] = "Guyani",
["gwa"] = "Mbato",
["gwb"] = "Gwa",
["gwc"] = "Kalami",
["gwd"] = "Gawwada",
["gwe"] = "Gweno",
["gwf"] = "Gowro",
["gwg"] = "Moo",
["gwi"] = "Gwich'in",
["gwj"] = "Gcwi",
["gwm"] = "Awngthim",
["gwn"] = "Gwandara",
["gwr"] = "Gwere",
["gwt"] = "Gawar-Bati",
["gwu"] = "Guwamu",
["gww"] = "Kwini",
["gwx"] = "Gua",
["gxx"] = "Wè Southern",
["gya"] = "Northwest Gbaya",
["gyb"] = "Garus",
["gyd"] = "Kayardild",
["gye"] = "Gyem",
["gyf"] = "Gungabula",
["gyg"] = "Gbayi",
["gyi"] = "Gyele",
["gyl"] = "Gayil",
["gym"] = "Ngäbere",
["gyn"] = "Guyanese Creole English",
["gyo"] = "Gyalsumdo",
["gyr"] = "Guarayu",
["gyy"] = "Gunya",
["gza"] = "Ganza",
["gzn"] = "Gane",
["ha"] = "เฮาซา",
["haa"] = "Hän",
["hab"] = "Hanoi Sign Language",
["hac"] = "Gurani",
["had"] = "Hatam",
["haf"] = "Haiphong Sign Language",
["hag"] = "Hanga",
["hah"] = "Hahon",
["hai"] = "Haida",
["haj"] = "ฮาชอง",
["hak"] = "แคะ",
["hal"] = "Halang",
["ham"] = "Hewa",
["hao"] = "Hakö",
["hap"] = "Hupla",
["har"] = "Harari",
["has"] = "Haisla",
["hav"] = "Havu",
["haw"] = "ฮาวาย",
["hax"] = "Southern Haida",
["hay"] = "Haya",
["hba"] = "Hamba",
["hbb"] = "Huba",
["hbn"] = "Heiban",
["hbu"] = "Habu",
["hca"] = "Andaman Creole Hindi",
["hch"] = "Huichol",
["hdn"] = "Northern Haida",
["hds"] = "Honduras Sign Language",
["hdy"] = "Hadiyya",
["he"] = "ฮีบรู",
["hea"] = "Northern Qiandong Miao",
["hed"] = "Herdé",
["heg"] = "Helong",
["heh"] = "Hehe",
["hei"] = "Heiltsuk",
["hem"] = "Hemba",
["hgm"] = "Haiǁom",
["hgw"] = "Haigwai",
["hhi"] = "Hoia Hoia",
["hhr"] = "Kerak",
["hhy"] = "Hoyahoya",
["hi"] = "ฮินดี",
["hia"] = "Lamang",
["hib"] = "Hibito",
["hid"] = "Hidatsa",
["hif"] = "ฮินดีแบบฟีจี",
["hig"] = "Kamwe",
["hih"] = "Pamosu",
["hii"] = "Hinduri",
["hij"] = "Hijuk",
["hik"] = "Seit-Kaitetu",
["hil"] = "ฮีลีไกโนน",
["hio"] = "Tshwa",
["hir"] = "Himarimã",
["hit"] = "Hittite",
["hiw"] = "Hiw",
["hix"] = "Hixkaryana",
["hji"] = "Haji",
["hka"] = "Kahe",
["hke"] = "Hunde",
["hkh"] = "Pogali",
["hkk"] = "Hunjara-Kaina Ke",
["hkn"] = "Mel-Khaonh",
["hks"] = "Hong Kong Sign Language",
["hla"] = "Halia",
["hlb"] = "Halbi",
["hld"] = "Halang Doan",
["hle"] = "Hlersu",
["hlt"] = "Nga La",
["hma"] = "Southern Mashan Hmong",
["hmb"] = "Humburi Senni",
["hmc"] = "Central Huishui Hmong",
["hmd"] = "A-Hmao",
["hme"] = "Eastern Huishui Hmong",
["hmf"] = "Hmong Don",
["hmg"] = "Southwestern Guiyang Hmong",
["hmh"] = "Southwestern Huishui Hmong",
["hmi"] = "Northern Huishui Hmong",
["hmj"] = "Ge",
["hmk"] = "Yemaek",
["hml"] = "Luopohe Hmong",
["hmm"] = "Central Mashan Hmong",
["hmn-pro"] = "ม้งดั้งเดิม",
["hmp"] = "Northern Mashan Hmong",
["hmq"] = "Eastern Qiandong Miao",
["hmr"] = "Hmar",
["hms"] = "Southern Qiandong Miao",
["hmt"] = "Hamtai",
["hmu"] = "Hamap",
["hmv"] = "Hmong Dô",
["hmw"] = "Western Mashan Hmong",
["hmx-mie-pro"] = "เมี่ยนดั้งเดิม",
["hmx-pro"] = "ม้ง-เมี่ยนดั้งเดิม",
["hmy"] = "Southern Guiyang Hmong",
["hmz"] = "Hmong Shua",
["hna"] = "Mina",
["hnd"] = "Southern Hindko",
["hne"] = "Chhattisgarhi",
["hnh"] = "ǁAni",
["hni"] = "Hani",
["hnj"] = "ม้งเขียว",
["hnm"] = "ไหหลำ",
["hnn"] = "ฮานูโนโอ",
["hno"] = "Northern Hindko",
["hns"] = "ฮินดูสตานีแบบแคริบเบียน",
["hnu"] = "Hung",
["ho"] = "ฮีรีโมตู",
["hoa"] = "Hoava",
["hob"] = "Austronesian Mari",
["hoc"] = "Ho",
["hod"] = "Holma",
["hoe"] = "Horom",
["hoh"] = "Hobyót",
["hoi"] = "Holikachuk",
["hoj"] = "Hadoti",
["hol"] = "Holu",
["hom"] = "Homa",
["hoo"] = "Holoholo",
["hop"] = "Hopi",
["hor"] = "Horo",
["hos"] = "Ho Chi Minh City Sign Language",
["hot"] = "Hote",
["hov"] = "Hovongan",
["how"] = "Honi",
["hoy"] = "Holiya",
["hoz"] = "Hozo",
["hpo"] = "Hpon",
["hps"] = "Hawai'i Pidgin Sign Language",
["hra"] = "Hrangkhol",
["hrc"] = "Niwer Mil",
["hre"] = "Hrê",
["hrk"] = "Haruku",
["hrm"] = "Horned Miao",
["hro"] = "Haroi",
["hrp"] = "Nhirrpi",
["hrt"] = "Hértevin",
["hru"] = "Hruso",
["hrw"] = "Warwar Feni",
["hrx"] = "ฮุนสริก",
["hrz"] = "Harzani",
["hsb"] = "ซอร์เบียตอนบน",
["hsh"] = "Hungarian Sign Language",
["hsl"] = "Hausa Sign Language",
["hsn"] = "เซียง",
["hss"] = "Harsusi",
["ht"] = "ครีโอลเฮติ",
["hti"] = "Hoti",
["hto"] = "Minica Huitoto",
["hts"] = "Hadza",
["htu"] = "Hitu",
["hu"] = "ฮังการี",
["hub"] = "Huambisa",
["huc"] = "ǂHoan",
["hud"] = "Huaulu",
["huf"] = "Humene",
["hug"] = "Huachipaeri",
["huh"] = "Huilliche",
["hui"] = "Huli",
["huj"] = "Northern Guiyang Hmong",
["huk"] = "Hulung",
["hul"] = "Hula",
["hum"] = "Hungana",
["huo"] = "Hu",
["hup"] = "Hupa",
["huq"] = "Tsat",
["hur"] = "Halkomelem",
["hus"] = "Wastek",
["huu"] = "Murui Huitoto",
["huv"] = "Huave",
["huw"] = "Hukumina",
["hux"] = "Nüpode Huitoto",
["huy"] = "Hulaulá",
["huz"] = "Hunzib",
["hvc"] = "Haitian Vodoun Culture Language",
["hvk"] = "Haveke",
["hvn"] = "Sabu",
["hwa"] = "Wané",
["hwc"] = "Hawaiian Creole",
["hwo"] = "Hwana",
["hy"] = "อาร์มีเนีย",
["hya"] = "Hya",
["hyx-pro"] = "อาร์มีเนียนดั้งเดิม",
["hz"] = "เฮเรโร",
["ia"] = "อินเทอร์ลิงกวา",
["iai"] = "Iaai",
["ian"] = "Iatmul",
["iar"] = "Purari",
["iba"] = "อีบัน",
["ibb"] = "Ibibio",
["ibd"] = "Iwaidja",
["ibe"] = "Akpes",
["ibg"] = "Ibanag",
["ibh"] = "Bih",
["ibl"] = "Ibaloi",
["ibm"] = "Agoi",
["ibn"] = "Ibino",
["ibr"] = "Ibuoro",
["ibu"] = "Ibu",
["iby"] = "Ibani",
["ica"] = "Ede Ica",
["ich"] = "Etkywan",
["icl"] = "Icelandic Sign Language",
["icr"] = "Islander Creole English",
["id"] = "อินโดนีเซีย",
["ida"] = "Idakho-Isukha-Tiriki",
["idb"] = "Indo-Portuguese",
["idc"] = "Idon",
["idd"] = "Ede Idaca",
["ide"] = "Idere",
["idi"] = "Idi",
["idr"] = "Indri",
["ids"] = "Idesa",
["idt"] = "Idaté",
["idu"] = "Idoma",
["ie"] = "อินเทร์ลิงเกว",
["ifa"] = "Amganad Ifugao",
["ifb"] = "Batad Ifugao",
["ife"] = "Ifè",
["iff"] = "Ifo",
["ifk"] = "Tuwali Ifugao",
["ifm"] = "Teke-Fuumu",
["ifu"] = "Mayoyao Ifugao",
["ify"] = "Keley-I Kallahan",
["ig"] = "อิกโบ",
["igb"] = "Ebira",
["ige"] = "Igede",
["igg"] = "Igana",
["igl"] = "Igala",
["igm"] = "Kanggape",
["ign"] = "Ignaciano",
["igo"] = "Isebe",
["igs"] = "Glosa",
["igw"] = "Igwe",
["ihb"] = "Pidgin Iha",
["ihi"] = "Ihievbe",
["ihp"] = "Iha",
["ii"] = "นอซู",
["iir-nur-pro"] = "Proto-Nuristani",
["iir-pro"] = "อินโด-อิเรเนียนดั้งเดิม",
["ijc"] = "Izon",
["ije"] = "Biseni",
["ijj"] = "Ede Ije",
["ijn"] = "Kalabari",
["ijo-pro"] = "Proto-Ijoid",
["ijs"] = "Southeast Ijo",
["ik"] = "Inupiaq",
["ike"] = "Eastern Canadian Inuktitut",
["iki"] = "Iko",
["ikk"] = "Ika",
["ikl"] = "Ikulu",
["iko"] = "Olulumo-Ikom",
["ikp"] = "Ikpeshi",
["ikr"] = "Ikaranggal",
["iks"] = "Inuit Sign Language",
["ikt"] = "Inuvialuktun",
["ikv"] = "Iku-Gora-Ankwa",
["ikw"] = "Ikwere",
["ikx"] = "Ik",
["ikz"] = "Ikizu",
["ila"] = "Ile Ape",
["ilb"] = "Ila",
["ilg"] = "Ilgar",
["ili"] = "Ili Turki",
["ilk"] = "Ilongot",
["ill"] = "อีรานุน",
["ilo"] = "อีโลกาโน",
["ils"] = "International Sign",
["ilu"] = "Ili'uun",
["ilv"] = "Ilue",
["ima"] = "Mala Malasar",
["imi"] = "Anamgura",
["iml"] = "Miluk",
["imn"] = "Imonda",
["imo"] = "Imbongu",
["imr"] = "Imroing",
["ims"] = "Marsian",
["imy"] = "Milyan",
["inb"] = "Inga",
["inc-apa"] = "Apabhramsa",
["inc-ash"] = "ปรากฤตแบบอโศก",
["inc-dng-pro"] = "Proto-Dangari",
["inc-kam"] = "กามรูป",
["inc-kho"] = "Kholosi",
["inc-krd-pro"] = "Proto-Kamta",
["inc-mas"] = "อัสสัมกลาง",
["inc-mbn"] = "เบงกอลกลาง",
["inc-mgu"] = "คุชราตกลาง",
["inc-mor"] = "โอริยากลาง",
["inc-oas"] = "อัสสัมช่วงต้น",
["inc-oaw"] = "Old Awadhi",
["inc-obn"] = "เบงกอลเก่า",
["inc-ogu"] = "คุชราตเก่า",
["inc-ohi"] = "ฮินดีเก่า",
["inc-oor"] = "โอริยาเก่า",
["inc-opa"] = "ปัญจาบเก่า",
["inc-pro"] = "อินโด-อารยันดั้งเดิม",
["ine-ana-pro"] = "อานาโตเลียนดั้งเดิม",
["ine-bsl-pro"] = "บอลโต-สลาวิกดั้งเดิม",
["ine-kal"] = "Kalašma",
["ine-pae"] = "Paeonian",
["ine-pro"] = "อินโด-ยูโรเปียนดั้งเดิม",
["ine-toc-pro"] = "โทแคเรียนดั้งเดิม",
["ing"] = "Deg Xinag",
["inh"] = "อิงกุช",
["inj"] = "Jungle Inga",
["inl"] = "มืออินโดนีเซีย",
["inm"] = "Minaean",
["inn"] = "Isinai",
["ino"] = "Inoke-Yate",
["inp"] = "Iñapari",
["ins"] = "มืออินเดีย",
["int"] = "Intha",
["inz"] = "Ineseño",
["io"] = "อีโด",
["ior"] = "Inor",
["iou"] = "Tuma-Irumu",
["iow"] = "Chiwere",
["ipi"] = "Ipili",
["ipo"] = "Ipiko",
["iqu"] = "Iquito",
["iqw"] = "Ikwo",
["ira-kms-pro"] = "Proto-Komisenian",
["ira-mny-pro"] = "Proto-Munji-Yidgha",
["ira-mpr-pro"] = "Proto-Medo-Parthian",
["ira-pat-pro"] = "ปาทานดั้งเดิม",
["ira-pro"] = "อิเรเนียนดั้งเดิม",
["ira-sgc-pro"] = "ซอกดิกดั้งเดิม",
["ira-sgi-pro"] = "Proto-Sanglechi-Ishkashimi",
["ira-shr-pro"] = "Proto-Shughni-Roshani",
["ira-shy-pro"] = "Proto-Shughni-Yazghulami",
["ira-sym-pro"] = "Proto-Shughni-Yazghulami-Munji",
["ira-wnj"] = "Vanji",
["ira-zgr-pro"] = "Proto-Zaza-Gorani",
["ire"] = "Iresim",
["irh"] = "Irarutu",
["iri"] = "Rigwe",
["irk"] = "Iraqw",
["irn"] = "Irantxe",
["iro-ere"] = "Erie",
["iro-min"] = "Mingo",
["iro-nor-pro"] = "Proto-North Iroquoian",
["iro-pro"] = "Proto-Iroquoian",
["irr"] = "Ir",
["iru"] = "Irula",
["irx"] = "Kamberau",
["iry"] = "Iraya",
["is"] = "ไอซ์แลนด์",
["isa"] = "Isabi",
["isc"] = "Isconahua",
["isd"] = "Isnag",
["ise"] = "Italian Sign Language",
["isg"] = "Irish Sign Language",
["ish"] = "Esan",
["isi"] = "Nkem-Nkum",
["isk"] = "Ishkashimi",
["ism"] = "Masimasi",
["isn"] = "Isanzu",
["iso"] = "Isoko",
["isr"] = "Israeli Sign Language",
["ist"] = "อิสเตรีย",
["isu"] = "Isu",
["isv"] = "Interslavic",
["it"] = "อิตาลี",
["itb"] = "Binongan Itneg",
["itc-pro"] = "อิตาลิกดั้งเดิม",
["itc-psa"] = "Pre-Samnite",
["itd"] = "Southern Tidung",
["ite"] = "Itene",
["iti"] = "Inlaod Itneg",
["itk"] = "Judeo-Italian",
["itl"] = "Itelmen",
["itm"] = "Itu Mbon Uzo",
["ito"] = "Itonama",
["itr"] = "Iteri",
["its"] = "Itsekiri",
["itt"] = "Maeng Itneg",
["itv"] = "Itawit",
["itw"] = "Ito",
["itx"] = "Itik",
["ity"] = "Moyadan Itneg",
["itz"] = "Itza'",
["iu"] = "อินุกติตุต",
["ium"] = "อิ้วเมี่ยน",
["ivb"] = "Ibatan",
["ivv"] = "Ivatan",
["iwk"] = "I-Wak",
["iwm"] = "Iwam",
["iwo"] = "Iwur",
["iws"] = "Sepik Iwam",
["ixc"] = "Ixcatec",
["ixl"] = "Ixil",
["iya"] = "Iyayu",
["iyo"] = "Mesaka",
["iyx"] = "Yaa",
["izh"] = "อิงเกรีย",
["izi"] = "Izi-Ezaa-Ikwo-Mgbo",
["izr"] = "Izere",
["izz"] = "Izi",
["ja"] = "ญี่ปุ่น",
["jaa"] = "Jamamadí",
["jab"] = "Hyam",
["jac"] = "Jakaltek",
["jad"] = "Jahanka",
["jae"] = "Jabem",
["jaf"] = "Jara",
["jah"] = "Jah Hut",
["jaj"] = "Zazao",
["jal"] = "Yalahatan",
["jam"] = "ครีโอลจาเมกา",
["jan"] = "Janday",
["jao"] = "Yanyuwa",
["jaq"] = "Yaqay",
["jas"] = "ชวาแบบนิวแคลิโดเนีย",
["jat"] = "Jakati",
["jau"] = "Yaur",
["jax"] = "Jambi Malay",
["jay"] = "Yan-nhangu",
["jaz"] = "Jawe",
["jbj"] = "Arandai",
["jbk"] = "Barikewa",
["jbn"] = "Nefusa",
["jbo"] = "โลจบาน",
["jbr"] = "Jofotek-Bromnya",
["jbt"] = "Jabutí",
["jbu"] = "Jukun Takum",
["jbw"] = "Yawijibaya",
["jcs"] = "Jamaican Country Sign Language",
["jct"] = "Krymchak",
["jda"] = "Jad",
["jdg"] = "Jadgali",
["jdt"] = "Judeo-Tat",
["jeb"] = "Jebero",
["jee"] = "Jerung",
["jeg"] = "Jeng",
["jeh"] = "Jeh",
["jei"] = "Yei",
["jek"] = "Jeri Kuo",
["jel"] = "Yelmek",
["jen"] = "Dza",
["jer"] = "Jere",
["jet"] = "Manem",
["jeu"] = "Jonkor Bourmataguil",
["jgb"] = "Ngbee",
["jgk"] = "Gwak",
["jgo"] = "Ngomba",
["jhi"] = "Jehai",
["jhs"] = "Jhankot Sign Language",
["jia"] = "Jina",
["jib"] = "Jibu",
["jic"] = "Tol",
["jid"] = "Bu",
["jie"] = "Jilbe",
["jig"] = "Jingulu",
["jih"] = "Shangzhai",
["jii"] = "Jiiddu",
["jil"] = "Jilim",
["jim"] = "Jimjimen",
["jio"] = "เจียเม่า",
["jiq"] = "Khroskyabs",
["jit"] = "Jita",
["jiu"] = "Youle Jino",
["jiv"] = "Shuar",
["jiy"] = "Buyuan Jino",
["jje"] = "เชจู",
["jjr"] = "Zhár",
["jka"] = "Kaera",
["jko"] = "Kubo",
["jkp"] = "Paku Karen",
["jkr"] = "Koro (India)",
["jku"] = "Labir",
["jle"] = "Ngile",
["jls"] = "Jamaican Sign Language",
["jma"] = "Dima",
["jmb"] = "Zumbun",
["jmc"] = "Machame",
["jmd"] = "Yamdena",
["jmi"] = "Jimi",
["jml"] = "Jumli",
["jmn"] = "Makuri Naga",
["jmr"] = "Kamara",
["jmw"] = "Mouwase",
["jmx"] = "Western Juxtlahuaca Mixtec",
["jna"] = "Jangshung",
["jnd"] = "Jandavra",
["jng"] = "Yangman",
["jni"] = "Janji",
["jnj"] = "Yemsa",
["jnl"] = "Rawat",
["jns"] = "Jaunsari",
["job"] = "Joba",
["jod"] = "Wojenaka",
["jor"] = "Jorá",
["jos"] = "Jordanian Sign Language",
["jow"] = "Jowulu",
["jpr"] = "Judeo-Persian",
["jpx-hcj"] = "Hachijō",
["jpx-pro"] = "แจพอนิกดั้งเดิม",
["jpx-ryu-pro"] = "Proto-Ryukyuan",
["jqr"] = "Jaqaru",
["jra"] = "Jarai",
["jrr"] = "Jiru",
["jru"] = "Japrería",
["jsl"] = "Japanese Sign Language",
["jua"] = "Júma",
["jub"] = "Wannu",
["juc"] = "จูร์เชน",
["jud"] = "Worodougou",
["juh"] = "Hone",
["jui"] = "Ngadjuri",
["juk"] = "Wapan",
["jul"] = "Jirel",
["jum"] = "Jumjum",
["jun"] = "Juang",
["juo"] = "Jiba",
["jup"] = "Hupdë",
["jur"] = "Jurúna",
["jus"] = "Jumla Sign Language",
["jut"] = "Jutish",
["juu"] = "Ju",
["juw"] = "Wãpha",
["juy"] = "Juray",
["jv"] = "ชวา",
["jvd"] = "Javindo",
["jvn"] = "ชวาแบบแคริบเบียน",
["jwi"] = "Jwira-Pepesa",
["jyy"] = "Jaya",
["ka"] = "จอร์เจีย",
["kaa"] = "การากัลปัก",
["kab"] = "กะไบล์",
["kac"] = "จิ่งเผาะ",
["kad"] = "Kadara",
["kae"] = "Ketangalan",
["kaf"] = "Katso",
["kag"] = "Kajaman",
["kah"] = "Fer",
["kai"] = "Karekare",
["kaj"] = "Jju",
["kak"] = "Kayapa Kallahan",
["kam"] = "Kamba",
["kao"] = "Kassonke",
["kap"] = "Bezhta",
["kaq"] = "Capanahua",
["kar-pro"] = "กะเหรี่ยงดั้งเดิม",
["kaw"] = "ชวาเก่า",
["kax"] = "Kao",
["kay"] = "Kamayurá",
["kba"] = "Kalarko",
["kbb"] = "Kaxuyana",
["kbc"] = "Kadiwéu",
["kbd"] = "คาบาร์เดีย",
["kbe"] = "Kanju",
["kbh"] = "Camsá",
["kbi"] = "Kaptiau",
["kbj"] = "Kari",
["kbk"] = "Grass Koiari",
["kbm"] = "Iwal",
["kbn"] = "Kare (Central Africa)",
["kbo"] = "Keliko",
["kbp"] = "Kabiyé",
["kbq"] = "Kamano",
["kbr"] = "Kafa",
["kbs"] = "Kande",
["kbt"] = "Gabadi",
["kbu"] = "Kabutra",
["kbv"] = "Kamberataro",
["kbw"] = "Kaiep",
["kbx"] = "Ap Ma",
["kbz"] = "Duhwa",
["kca-eas"] = "Eastern Khanty",
["kca-nor"] = "Northern Khanty",
["kca-pro"] = "Proto-Khanty",
["kca-sou"] = "Southern Khanty",
["kcb"] = "Kawacha",
["kcc"] = "Lubila",
["kcd"] = "Ngkâlmpw Kanum",
["kce"] = "Kaivi",
["kcf"] = "Ukaan",
["kcg"] = "Tyap",
["kch"] = "Vono",
["kci"] = "Kamantan",
["kcj"] = "Kobiana",
["kck"] = "Kalanga",
["kcl"] = "Kala",
["kcm"] = "Tar Gula",
["kcn"] = "Nubi",
["kco"] = "Kinalakna",
["kcp"] = "Kanga",
["kcq"] = "Kamo",
["kcr"] = "Katla",
["kcs"] = "Koenoem",
["kct"] = "Kaian",
["kcu"] = "Kikami",
["kcv"] = "Kete",
["kcw"] = "Kabwari",
["kcx"] = "Kachama-Ganjule",
["kcy"] = "Korandje",
["kcz"] = "Konongo",
["kda"] = "Worimi",
["kdc"] = "Kutu",
["kdd"] = "Yankunytjatjara",
["kde"] = "Makonde",
["kdf"] = "Mamusi",
["kdg"] = "Seba",
["kdh"] = "Tem",
["kdi"] = "Kumam",
["kdj"] = "Karamojong",
["kdk"] = "Numèè",
["kdl"] = "Tsikimba",
["kdm"] = "Kagoma",
["kdn"] = "Kunda",
["kdp"] = "Kaningdon-Nindem",
["kdq"] = "Koch",
["kdr"] = "Karaim",
["kdt"] = "กูย",
["kdu"] = "Kadaru",
["kdv"] = "Kado",
["kdw"] = "Koneraw",
["kdx"] = "Kam",
["kdy"] = "Keder",
["kdz"] = "Kwaja",
["kea"] = "ครีโอลกาบูเวร์ดี",
["keb"] = "Kélé",
["kec"] = "Keiga",
["ked"] = "Kerewe",
["kee"] = "Eastern Keres",
["kef"] = "Kpessi",
["keg"] = "Tese",
["keh"] = "Keak",
["kei"] = "Kei",
["kej"] = "Kadar",
["kek"] = "Q'eqchi",
["kel"] = "Kela-Yela",
["kem"] = "Kemak",
["ken"] = "Kenyang",
["keo"] = "Kakwa",
["kep"] = "Kaikadi",
["keq"] = "Kamar",
["ker"] = "Kera",
["kes"] = "Kugbo",
["ket"] = "Ket",
["keu"] = "Akebu",
["kev"] = "Kanikkaran",
["kew"] = "Kewa",
["kex"] = "Kukna",
["key"] = "Kupia",
["kez"] = "Kukele",
["kfa"] = "Kodava",
["kfb"] = "Kolami",
["kfc"] = "Konda-Dora",
["kfd"] = "Korra Koraga",
["kfe"] = "Kota (India)",
["kff"] = "Koya",
["kfg"] = "Kudiya",
["kfh"] = "Kurichiya",
["kfi"] = "Kannada Kurumba",
["kfj"] = "Kemiehua",
["kfk"] = "Kinnauri",
["kfl"] = "Kung",
["kfn"] = "Kuk",
["kfo"] = "Koro (West Africa)",
["kfp"] = "Korwa",
["kfq"] = "Korku",
["kfr"] = "กัจฉ์",
["kfs"] = "Bilaspuri",
["kft"] = "Kanjari",
["kfu"] = "Katkari",
["kfv"] = "Kurmukar",
["kfw"] = "Kharam Naga",
["kfx"] = "Kullu Pahari",
["kfy"] = "Kumaoni",
["kfz"] = "Koromfé",
["kg"] = "คองโก",
["kga"] = "Koyaga",
["kgb"] = "Kawe",
["kgd"] = "Kataang",
["kge"] = "Komering",
["kgf"] = "Kube",
["kgg"] = "Kusunda",
["kgi"] = "Selangor Sign Language",
["kgj"] = "Gamale Kham",
["kgk"] = "Kaiwá",
["kgl"] = "Kunggari",
["kgn"] = "Karingani",
["kgo"] = "Krongo",
["kgp"] = "Kaingang",
["kgq"] = "Kamoro",
["kgr"] = "Abun",
["kgs"] = "Kumbainggar",
["kgt"] = "Somyev",
["kgu"] = "Kobol",
["kgv"] = "Karas",
["kgw"] = "Karon Dori",
["kgx"] = "Kamaru",
["kgy"] = "Kyerung",
["kha"] = "คาซี",
["khb"] = "ไทลื้อ",
["khc"] = "Tukang Besi North",
["khd"] = "Bädi Kanum",
["khe"] = "Korowai",
["khf"] = "Khuen",
["khh"] = "Kehu",
["khi-kho-pro"] = "Proto-Khoe",
["khi-kun"] = "ǃKung",
["khj"] = "Kuturmi",
["khl"] = "Lusi",
["khn"] = "Khandeshi",
["kho"] = "โคตาน",
["khp"] = "Kapauri",
["khq"] = "Koyra Chiini",
["khr"] = "Kharia",
["khs"] = "Kasua",
["kht"] = "คำตี้",
["khu"] = "Nkhumbi",
["khv"] = "Khvarshi",
["khw"] = "Khowar",
["khx"] = "Kanu",
["khy"] = "Ekele",
["khz"] = "Keapara",
["ki"] = "เกโกโย",
["kia"] = "Kim",
["kib"] = "Koalib",
["kic"] = "Kickapoo",
["kid"] = "Koshin",
["kie"] = "Kibet",
["kif"] = "Eastern Parbate Kham",
["kig"] = "Kimaama",
["kih"] = "Kilmeri",
["kii"] = "Kitsai",
["kij"] = "Kilivila",
["kil"] = "Kariya",
["kim"] = "โตฟา",
["kio"] = "Kiowa",
["kip"] = "Sheshi Kham",
["kiq"] = "Kosadle",
["kis"] = "Kis",
["kit"] = "Agob",
["kiv"] = "Kimbu",
["kiw"] = "Northeast Kiwai",
["kix"] = "Khiamniungan Naga",
["kiy"] = "Kirikiri",
["kiz"] = "Kisi",
["kj"] = "Kwanyama",
["kja"] = "Mlap",
["kjb"] = "Q'anjob'al",
["kjc"] = "Coastal Konjo",
["kjd"] = "Southern Kiwai",
["kje"] = "Kisar",
["kjg"] = "ขมุ",
["kjh"] = "คาคัส",
["kji"] = "Zabana",
["kjj"] = "Khinalug",
["kjk"] = "Highland Konjo",
["kjl"] = "Western Parbate Kham",
["kjm"] = "Kháng",
["kjn"] = "Kunjen",
["kjo"] = "Harijan Kinnauri",
["kjp"] = "กะเหรี่ยงโปตะวันออก",
["kjq"] = "Western Keres",
["kjr"] = "Kurudu",
["kjs"] = "East Kewa",
["kjt"] = "กะเหรี่ยงโปแพร่",
["kju"] = "Kashaya",
["kjx"] = "Ramopa",
["kjy"] = "Erave",
["kjz"] = "Bumthangkha",
["kk"] = "คาซัค",
["kka"] = "Kakanda",
["kkb"] = "Kwerisa",
["kkc"] = "Odoodee",
["kkd"] = "Kinuku",
["kke"] = "Kakabe",
["kkf"] = "Kalaktang Monpa",
["kkg"] = "Mabaka Valley Kalinga",
["kkh"] = "เขิน",
["kki"] = "Kagulu",
["kkj"] = "Kako",
["kkk"] = "Kokota",
["kkl"] = "Kosarek Yale",
["kkm"] = "Kiong",
["kkn"] = "Kon Keu",
["kko"] = "Karko",
["kkp"] = "Koko-Bera",
["kkq"] = "Kaiku",
["kkr"] = "Kir-Balar",
["kks"] = "Kirfi",
["kkt"] = "Koi",
["kku"] = "Tumi",
["kkv"] = "Kangean",
["kkw"] = "Teke-Kukuya",
["kkx"] = "Kohin",
["kky"] = "Guugu Yimidhirr",
["kkz"] = "Kaska",
["kl"] = "กรีนแลนด์",
["kla"] = "Klamath-Modoc",
["klb"] = "Kiliwa",
["klc"] = "Kolbila",
["kld"] = "Gamilaraay",
["kle"] = "Kulung",
["klf"] = "Kendeje",
["klg"] = "กาลากันแบบตากาเกาลู",
["klh"] = "Weliki",
["kli"] = "Kalumpang",
["klj"] = "แฆแลจ",
["klk"] = "Kono (Nigeria)",
["kll"] = "กาลากันแบบกากัน",
["klm"] = "Kolom",
["kln"] = "Kalenjin",
["klo"] = "Kapya",
["klp"] = "Kamasa",
["klq"] = "Rumu",
["klr"] = "Khaling",
["kls"] = "Kalasha",
["klt"] = "Nukna",
["klu"] = "Klao",
["klv"] = "Maskelynes",
["klw"] = "ลินดู",
["klx"] = "Koluwawa",
["kly"] = "Kalao",
["klz"] = "Kabola",
["km"] = "เขมร",
["kma"] = "Konni",
["kmb"] = "Kimbundu",
["kmc"] = "ต้งใต้",
["kmd"] = "Madukayang Kalinga",
["kme"] = "Bakole",
["kmf"] = "Kare (New Guinea)",
["kmg"] = "Kâte",
["kmh"] = "Kalam",
["kmi"] = "Kami",
["kmj"] = "Kumarbhag Paharia",
["kmk"] = "Limos Kalinga",
["kml"] = "Tanudan Kalinga",
["kmm"] = "Kom (India)",
["kmn"] = "Awtuw",
["kmo"] = "Kwoma",
["kmp"] = "Gimme",
["kmq"] = "Kwama",
["kmr"] = "เคิร์ดเหนือ",
["kms"] = "Kamasau",
["kmt"] = "Kemtuik",
["kmu"] = "Kanite",
["kmv"] = "Karipúna Creole French",
["kmw"] = "Kumu",
["kmx"] = "Waboda",
["kmy"] = "Koma",
["kmz"] = "Khorasani Turkish",
["kn"] = "กันนฑะ",
["kna"] = "Kanakuru",
["knb"] = "Lubuagan Kalinga",
["knd"] = "Konda",
["kne"] = "กันกานาอือ",
["knf"] = "Mankanya",
["kni"] = "Kanufi",
["knj"] = "Akatek",
["knk"] = "Kuranko",
["knl"] = "Keninjal",
["knm"] = "Kanamari",
["kno"] = "Kono (Sierra Leone)",
["knp"] = "Kwanja",
["knq"] = "Kintaq",
["knr"] = "Kaningra",
["kns"] = "Kensiu",
["knt"] = "Katukina",
["knu"] = "Kono (Guinea)",
["knv"] = "Tabo",
["knx"] = "Kendayan",
["kny"] = "Kanyok",
["knz"] = "Kalamsé",
["ko"] = "เกาหลี",
["ko-ear"] = "เกาหลีใหม่ช่วงต้น",
["koa"] = "Konomala",
["koc"] = "Kpati",
["kod"] = "Kodi",
["koe"] = "Kacipo-Balesi",
["kof"] = "Kubi",
["kog"] = "Cogui",
["koh"] = "Koyo",
["koi"] = "Komi-Permyak",
["kok"] = "กงกัณ",
["kol"] = "Kol (New Guinea)",
["koo"] = "Konzo",
["kop"] = "Waube",
["koq"] = "Kota (Gabon)",
["kos"] = "Kosraean",
["kot"] = "Lagwan",
["kou"] = "Koke",
["kov"] = "Kudu-Camo",
["kow"] = "Kugama",
["koy"] = "Koyukon",
["koz"] = "Korak",
["kpa"] = "Kutto",
["kpb"] = "Mullu Kurumba",
["kpc"] = "Curripaco",
["kpd"] = "Koba",
["kpe"] = "Kpelle",
["kpf"] = "Komba",
["kpg"] = "Kapingamarangi",
["kph"] = "Kplang",
["kpi"] = "Kofei",
["kpj"] = "Karajá",
["kpk"] = "Kpan",
["kpl"] = "Kpala",
["kpm"] = "เกอฮอ",
["kpn"] = "Kepkiriwát",
["kpo"] = "Ikposo",
["kpq"] = "Korupun-Sela",
["kpr"] = "Korafe-Yegha",
["kps"] = "Tehit",
["kpt"] = "Karata",
["kpu"] = "Kafoa",
["kpv"] = "Komi-Zyrian",
["kpw"] = "Kobon",
["kpx"] = "Mountain Koiari",
["kpy"] = "Koryak",
["kpz"] = "Kupsabiny",
["kqa"] = "Mum",
["kqb"] = "Kovai",
["kqc"] = "Doromu-Koki",
["kqd"] = "Koy Sanjaq Surat",
["kqe"] = "กาลากัน",
["kqf"] = "Kakabai",
["kqg"] = "Khe",
["kqh"] = "Kisankasa",
["kqi"] = "Koitabu",
["kqj"] = "Koromira",
["kqk"] = "Kotafon Gbe",
["kql"] = "Kyenele",
["kqm"] = "Khisa",
["kqn"] = "Kaonde",
["kqo"] = "Eastern Krahn",
["kqp"] = "Kimré",
["kqq"] = "Krenak",
["kqr"] = "Kimaragang",
["kqs"] = "Northern Kissi",
["kqt"] = "Klias River Kadazan",
["kqu"] = "Seroa",
["kqv"] = "Okolod",
["kqw"] = "Kandas",
["kqx"] = "Mser",
["kqy"] = "Koorete",
["kqz"] = "Korana",
["kr"] = "กานูรี",
["kra"] = "Kumhali",
["krb"] = "Karkin",
["krc"] = "Karachay-Balkar",
["krd"] = "Kairui-Midiki",
["kre"] = "Panará",
["krf"] = "Koro (Vanuatu)",
["krh"] = "Kurama",
["kri"] = "Krio",
["krj"] = "Kinaray-a",
["krk"] = "Kerek",
["krl"] = "คาเรเลีย",
["krm"] = "Krim",
["krn"] = "Sapo",
["kro-pro"] = "Proto-Kru",
["krp"] = "Korop",
["krr"] = "Kru'ng",
["krs"] = "Kresh",
["kru"] = "กุรุข",
["krv"] = "Kavet",
["krw"] = "Western Krahn",
["krx"] = "Karon",
["kry"] = "Kryts",
["krz"] = "Sota Kanum",
["ks"] = "แคชเมียร์",
["ksa"] = "Shuwa-Zamani",
["ksb"] = "Shambala",
["ksc"] = "Southern Kalinga",
["ksd"] = "Tolai",
["kse"] = "Kuni",
["ksf"] = "Bafia",
["ksg"] = "Kusaghe",
["ksi"] = "Krisa",
["ksj"] = "Uare",
["ksk"] = "Kansa",
["ksl"] = "Kumalu",
["ksm"] = "Kumba",
["ksn"] = "Kasiguranin",
["kso"] = "Kofa",
["ksp"] = "Kaba",
["ksq"] = "Kwaami",
["ksr"] = "Borong",
["kss"] = "Southern Kissi",
["kst"] = "Winyé",
["ksu"] = "Khamyang",
["ksv"] = "Kusu",
["ksw"] = "กะเหรี่ยงสะกอ",
["ksx"] = "Kedang",
["ksy"] = "Kharia Thar",
["ksz"] = "Kodaku",
["kta"] = "Katua",
["ktb"] = "Kambaata",
["ktc"] = "Kholok",
["ktd"] = "Kokata",
["ktf"] = "Kwami",
["ktg"] = "Kalkatungu",
["kth"] = "Karanga",
["kti"] = "North Muyu",
["ktj"] = "Plapo Krumen",
["ktk"] = "Kaniet",
["ktl"] = "Koroshi",
["ktm"] = "Kurti",
["ktn"] = "Karitiâna",
["kto"] = "Kuot",
["ktp"] = "Kaduo",
["ktq"] = "Katabaga",
["ktr"] = "Kota Marudu Tinagas",
["kts"] = "South Muyu",
["ktt"] = "Ketum",
["ktu"] = "Kituba",
["ktv"] = "กะตูตะวันออก",
["ktw"] = "Kato",
["ktx"] = "Kaxararí",
["kty"] = "Kango",
["ktz"] = "Juǀ'hoan",
["ku-pro"] = "เคอร์ดิชดั้งเดิม",
["kub"] = "Kutep",
["kuc"] = "Kwinsu",
["kud"] = "Auhelawa",
["kue"] = "Kuman",
["kuf"] = "กะตูตะวันตก",
["kug"] = "Kupa",
["kuh"] = "Kushi",
["kui"] = "Kuikúro",
["kuj"] = "Kuria",
["kuk"] = "Kepo'",
["kul"] = "Kulere",
["kum"] = "คูมุก",
["kun"] = "Kunama",
["kuo"] = "Kumukio",
["kup"] = "Kunimaipa",
["kuq"] = "Karipuna",
["kus"] = "Kusaal",
["kut"] = "Ktunaxa",
["kuu"] = "Upper Kuskokwim",
["kuv"] = "Kur",
["kuw"] = "Kpagua",
["kux"] = "Kukatja",
["kuy"] = "Kuuku-Ya'u",
["kuz"] = "Kunza",
["kva"] = "Bagvalal",
["kvb"] = "Kubu",
["kvc"] = "Kove",
["kvd"] = "Kui (Indonesia)",
["kve"] = "Kalabakan",
["kvf"] = "Kabalai",
["kvg"] = "Kuni-Boazi",
["kvh"] = "Komodo",
["kvi"] = "Kwang",
["kvj"] = "Psikye",
["kvk"] = "Korean Sign Language",
["kvl"] = "Brek Karen",
["kvm"] = "Kendem",
["kvn"] = "Border Kuna",
["kvo"] = "Dobel",
["kvp"] = "Kompane",
["kvq"] = "Geba Karen",
["kvr"] = "Kerinci",
["kvt"] = "Lahta Karen",
["kvu"] = "Yinbaw Karen",
["kvv"] = "Kola",
["kvw"] = "Wersing",
["kvx"] = "Parkari Koli",
["kvy"] = "Yintale Karen",
["kvz"] = "Tsakwambo",
["kw"] = "คอร์นวอลล์",
["kwa"] = "Dâw",
["kwb"] = "Baa",
["kwc"] = "Likwala",
["kwd"] = "Kwaio",
["kwe"] = "Kwerba",
["kwf"] = "Kwara'ae",
["kwg"] = "Sara Kaba Deme",
["kwh"] = "Kowiai",
["kwi"] = "Awa-Cuaiquer",
["kwj"] = "Kwanga",
["kwk"] = "Kwak'wala",
["kwl"] = "Kofyar",
["kwm"] = "Kwambi",
["kwn"] = "Kwangali",
["kwo"] = "Kwomtari",
["kwp"] = "Kodia",
["kwq"] = "Kwak",
["kwr"] = "Kwer",
["kws"] = "Kwese",
["kwt"] = "Kwesten",
["kwu"] = "Kwakum",
["kwv"] = "Sara Kaba Náà",
["kww"] = "Kwinti",
["kwx"] = "Khirwar",
["kwz"] = "Kwadi",
["kxa"] = "Kairiru",
["kxb"] = "Krobu",
["kxc"] = "Konso",
["kxd"] = "มลายูแบบบรูไน",
["kxe"] = "Kakihum",
["kxf"] = "Manumanaw Karen",
["kxh"] = "Karo",
["kxi"] = "Keningau Murut",
["kxj"] = "Kulfa",
["kxk"] = "Zayein Karen",
["kxl"] = "Nepali Kurux",
["kxm"] = "เขมรเหนือ",
["kxn"] = "Kanowit",
["kxo"] = "Kanoé",
["kxp"] = "Wadiyara Koli",
["kxq"] = "Smärky Kanum",
["kxr"] = "Manus Koro",
["kxs"] = "Kangjia",
["kxt"] = "Koiwat",
["kxu"] = "Kui (India)",
["kxv"] = "Kuvi",
["kxw"] = "Konai",
["kxx"] = "Likuba",
["kxy"] = "Kayong",
["kxz"] = "Kerewo",
["ky"] = "คีร์กีซ",
["kya"] = "Kwaya",
["kyb"] = "Butbut Kalinga",
["kyc"] = "Kyaka",
["kyd"] = "Karey",
["kye"] = "Krache",
["kyf"] = "Kouya",
["kyg"] = "Keyagana",
["kyh"] = "Karok",
["kyi"] = "Kiput",
["kyj"] = "กาเรา",
["kyk"] = "Kamayo",
["kyl"] = "Kalapuya",
["kym"] = "Kpatili",
["kyn"] = "Karolanos",
["kyo"] = "Kelon",
["kyp"] = "Kang",
["kyq"] = "Kenga",
["kyr"] = "Kuruáya",
["kys"] = "Baram Kayan",
["kyt"] = "Kayagar",
["kyu"] = "กะยาตะวันตก",
["kyv"] = "Kayort",
["kyw"] = "Kudmali",
["kyx"] = "Rapoisi",
["kyy"] = "Kambaira",
["kyz"] = "Kayabí",
["kza"] = "Western Karaboro",
["kzb"] = "Kaibobo",
["kzc"] = "Bondoukou Kulango",
["kzd"] = "Kadai",
["kzf"] = "Da'a Kaili",
["kzg"] = "Kikai",
["kzh"] = "Dongolawi",
["kzi"] = "Kelabit",
["kzj"] = "กาดาซันชายฝั่ง",
["kzk"] = "Kazukuru",
["kzl"] = "Kayeli",
["kzm"] = "Kais",
["kzn"] = "Kokola",
["kzo"] = "Kaningi",
["kzp"] = "Kaidipang",
["kzq"] = "Kaike",
["kzr"] = "Karang",
["kzs"] = "Sugut Dusun",
["kzt"] = "Tambunan Dusun",
["kzu"] = "Kayupulau",
["kzv"] = "Komyandaret",
["kzw"] = "Kariri",
["kzx"] = "Kamarian",
["kzy"] = "Kango-Sua",
["kzz"] = "Kalabra",
["la"] = "ละติน",
["laa"] = "Lapuyan Subanun",
["lab"] = "Linear A",
["lac"] = "Lacandon",
["lad"] = "ลาดิโน",
["lae"] = "Pattani",
["laf"] = "Lafofa",
["lag"] = "Langi",
["lah"] = "Lahnda",
["lai"] = "Lambya",
["laj"] = "Lango (Uganda)",
["lak"] = "Laka",
["lam"] = "Lamba",
["lan"] = "Laru",
["lap"] = "Kabba-Laka",
["laq"] = "Qabiao",
["lar"] = "Larteh",
["las"] = "Gur Lama",
["lau"] = "Laba",
["law"] = "Lauje",
["lax"] = "Tiwa",
["lay"] = "Lama Bai",
["laz"] = "Aribwatsa",
["lb"] = "ลักเซมเบิร์ก",
["lbb"] = "Label",
["lbc"] = "ลักเกีย",
["lbe"] = "ลัก",
["lbf"] = "Tinani",
["lbg"] = "Laopang",
["lbi"] = "La'bi",
["lbj"] = "ลาดัก",
["lbk"] = "Central Bontoc",
["lbl"] = "Libon Bikol",
["lbm"] = "Lodhi",
["lbn"] = "Lamet",
["lbo"] = "Laven",
["lbq"] = "Wampar",
["lbr"] = "Northern Lorung",
["lbs"] = "Libyan Sign Language",
["lbt"] = "Lachi",
["lbu"] = "Labu",
["lbv"] = "Lavatbura-Lamusong",
["lbw"] = "Tolaki",
["lbx"] = "Lawangan",
["lby"] = "Lamu-Lamu",
["lbz"] = "Lardil",
["lcc"] = "Legenyem",
["lcd"] = "Lola",
["lce"] = "Loncong",
["lcf"] = "Lubu",
["lch"] = "Luchazi",
["lcl"] = "Lisela",
["lcm"] = "Tungag",
["lcp"] = "เลอเวือะตะวันตก",
["lcq"] = "Luhu",
["lcs"] = "Lisabata-Nuniali",
["lda"] = "Kla",
["ldb"] = "Idun",
["ldd"] = "Luri (Nigeria)",
["ldg"] = "Lenyima",
["ldh"] = "Lamja-Dengsa-Tola",
["ldj"] = "Lemoro",
["ldk"] = "Leelau",
["ldl"] = "Kaan",
["ldm"] = "Landoma",
["ldn"] = "Láadan",
["ldo"] = "Loo",
["ldp"] = "Tso",
["ldq"] = "Lufu",
["lea"] = "Lega-Shabunda",
["leb"] = "Lala-Bisa",
["lec"] = "Leco",
["led"] = "Lendu",
["lee"] = "Lyélé",
["lef"] = "Lelemi",
["leh"] = "Lenje",
["lei"] = "Lemio",
["lej"] = "Lengola",
["lek"] = "Leipon",
["lel"] = "Lele (Congo)",
["lem"] = "Nomaande",
["len"] = "Honduran Lenca",
["leo"] = "Mengisa",
["lep"] = "Lepcha",
["leq"] = "Lembena",
["ler"] = "Lenkau",
["les"] = "Lese",
["let"] = "Lesing-Gelimi",
["leu"] = "Kara (New Guinea)",
["lev"] = "Lamma",
["lew"] = "Ledo Kaili",
["lex"] = "Luang",
["ley"] = "Lemolang",
["lez"] = "เลซกี",
["lfa"] = "Lefa",
["lfn"] = "Lingua Franca Nova",
["lg"] = "ลูกันดา",
["lga"] = "Lungga",
["lgb"] = "Laghu",
["lgg"] = "Lugbara",
["lgh"] = "Laghuu",
["lgi"] = "Lengilu",
["lgk"] = "Neverver",
["lgl"] = "Wala",
["lgm"] = "Lega-Mwenga",
["lgn"] = "Opuuo",
["lgq"] = "Logba",
["lgr"] = "Lengo",
["lgs"] = "Guinea-Bissau Sign Language",
["lgt"] = "Pahi",
["lgu"] = "Longgu",
["lgz"] = "Ligenza",
["lha"] = "Laha (Vietnam)",
["lhh"] = "Laha (Indonesia)",
["lhi"] = "Lahu Shi",
["lhl"] = "Lahul Lohar",
["lhn"] = "Lahanan",
["lhp"] = "Lhokpu",
["lhs"] = "Mlahsö",
["lht"] = "Lo-Toga",
["lhu"] = "Lahu",
["li"] = "ลิมเบิร์ก",
["lia"] = "West-Central Limba",
["lib"] = "Likum",
["lic"] = "ไหล",
["lid"] = "Nyindrou",
["lie"] = "Likila",
["lif"] = "ลิมบู",
["lig"] = "Ligbi",
["lih"] = "Lihir",
["lii"] = "Lingkhim",
["lij"] = "ลีกูเรีย",
["lik"] = "Lika",
["lil"] = "Lillooet",
["lio"] = "Liki",
["lip"] = "Sekpele",
["liq"] = "Libido",
["lir"] = "Liberian Kreyol",
["lis"] = "ลีสู่",
["liu"] = "Logorik",
["liv"] = "ลีโวเนีย",
["liw"] = "Col",
["lix"] = "Liabuku",
["liy"] = "Banda-Bambari",
["liz"] = "Libinza",
["lja"] = "Golpa",
["lje"] = "Rampi",
["lji"] = "Laiyolo",
["ljl"] = "Li'o",
["ljp"] = "Lampung Api",
["ljw"] = "Yirandali",
["ljx"] = "Yuru",
["lka"] = "Lakalei",
["lkb"] = "Kabras",
["lkc"] = "Kucong",
["lkd"] = "Lakondê",
["lke"] = "Kenyi",
["lkh"] = "Lakha",
["lki"] = "Laki",
["lkj"] = "Remun",
["lkl"] = "Laeko-Libuat",
["lkm"] = "Kalaamaya",
["lkn"] = "Lakon",
["lko"] = "Khayo",
["lkr"] = "Päri",
["lks"] = "Kisa",
["lkt"] = "ลาโคตา",
["lku"] = "Kungkari",
["lky"] = "Lokoya",
["lla"] = "Lala-Roba",
["llb"] = "Lolo",
["llc"] = "Lele (Guinea)",
["lld"] = "ลาดิน",
["lle"] = "Lele (New Guinea)",
["llf"] = "Hermit",
["llg"] = "Lole",
["llh"] = "Lamu",
["lli"] = "Teke-Laali",
["llj"] = "Ladji-Ladji",
["llk"] = "Lelak",
["lll"] = "Lilau",
["llm"] = "Lasalimu",
["lln"] = "Lele (Chad)",
["llo"] = "Khlor",
["llp"] = "North Efate",
["llq"] = "Lolak",
["lls"] = "Lithuanian Sign Language",
["llu"] = "Lau",
["llx"] = "Lauan",
["lma"] = "East Limba",
["lmb"] = "Merei",
["lmc"] = "Limilngan",
["lmd"] = "Lumun",
["lme"] = "Pévé",
["lmf"] = "South Lembata",
["lmg"] = "Lamogai",
["lmh"] = "Lambichhong",
["lmi"] = "Lombi",
["lmj"] = "West Lembata",
["lmk"] = "Lamkang",
["lml"] = "Raga",
["lmn"] = "Lambadi",
["lmo"] = "ลอมบาร์ด",
["lmp"] = "Limbum",
["lmq"] = "Lamatuka",
["lmr"] = "Lamalera",
["lmu"] = "Lamenu",
["lmv"] = "Lomaiviti",
["lmw"] = "Lake Miwok",
["lmx"] = "Laimbue",
["lmy"] = "ลัมโบยา",
["lmz"] = "Lumbee",
["ln"] = "ลิงกาลา",
["lna"] = "Langbashe",
["lnb"] = "Mbalanhu",
["lnd"] = "Lun Bawang",
["lnh"] = "Lanoh",
["lni"] = "Daantanai'",
["lnj"] = "Linngithigh",
["lnl"] = "South Central Banda",
["lnm"] = "Langam",
["lnn"] = "Lorediakarkar",
["lno"] = "Lango (Sudan)",
["lns"] = "Lamnso'",
["lnu"] = "Longuda",
["lnw"] = "Lanima",
["lo"] = "ลาว",
["loa"] = "Loloda",
["lob"] = "Lobi",
["loc"] = "Inonhan",
["lod"] = "เบอราวัน",
["loe"] = "Saluan",
["lof"] = "Logol",
["log"] = "Logo",
["loh"] = "Narim",
["loi"] = "Lomakka",
["loj"] = "Lou",
["lok"] = "Loko",
["lol"] = "Mongo",
["lom"] = "Loma",
["lon"] = "Malawi Lomwe",
["loo"] = "Lombo",
["lop"] = "Lopa",
["loq"] = "Lobala",
["lor"] = "Téén",
["los"] = "Loniu",
["lot"] = "Lotuko",
["lou"] = "ครีโอลลุยเซียนา",
["lov"] = "Lopi",
["low"] = "Tampias Lobu",
["lox"] = "Loun",
["loz"] = "Lozi",
["lpa"] = "Lelepa",
["lpe"] = "Lepki",
["lpn"] = "Long Phuri Naga",
["lpo"] = "Lipo",
["lpx"] = "Lopit",
["lra"] = "Rara Bakati'",
["lrc"] = "Northern Luri",
["lre"] = "Laurentian",
["lrg"] = "Laragia",
["lri"] = "Marachi",
["lrk"] = "Loarki",
["lrl"] = "Larestani",
["lrm"] = "Marama",
["lrn"] = "Lorang",
["lro"] = "Laro",
["lrr"] = "Southern Lorung",
["lrt"] = "Larantuka Malay",
["lrv"] = "Larëvat",
["lrz"] = "Lemerig",
["lsa"] = "Lasgerdi",
["lsd"] = "Lishana Deni",
["lse"] = "Lusengo",
["lsh"] = "Lish",
["lsi"] = "Lashi",
["lsl"] = "Latvian Sign Language",
["lsm"] = "Saamia",
["lsn"] = "Tibetan Sign Language",
["lso"] = "Laos Sign Language",
["lsp"] = "Panamanian Sign Language",
["lsr"] = "Aruop",
["lss"] = "Lasi",
["lst"] = "Trinidad and Tobago Sign Language",
["lsv"] = "Sivia Sign Language",
["lsy"] = "Mauritian Sign Language",
["lt"] = "ลิทัวเนีย",
["ltc"] = "จีนยุคกลาง",
["ltg"] = "ลัตเกล",
["lti"] = "Leti",
["ltn"] = "Latundê",
["lto"] = "Olutsotso",
["lts"] = "Lutachoni",
["ltu"] = "Latu",
["lu"] = "Luba-Katanga",
["lua"] = "Luba-Kasai",
["luc"] = "Aringa",
["lud"] = "Ludian",
["lue"] = "Luvale",
["luf"] = "Laua",
["luh"] = "หล่อยแอว๋",
["lui"] = "Luiseño",
["luj"] = "Luna",
["luk"] = "Lunanakha",
["lul"] = "Olu'bo",
["lum"] = "Luimbi",
["lun"] = "Lunda",
["luo"] = "Luo",
["lup"] = "Lumbu",
["luq"] = "Lucumí",
["lur"] = "Laura",
["lus"] = "มีโซ",
["lut"] = "Lushootseed",
["luu"] = "Lumba-Yakkha",
["luv"] = "Luwati",
["luy"] = "Luhya",
["luz"] = "Southern Luri",
["lv"] = "ลัตเวีย",
["lva"] = "Maku'a",
["lvi"] = "Lawi",
["lvk"] = "Lavukaleve",
["lvl"] = "Lwel",
["lvu"] = "Levuka",
["lwa"] = "Lwalu",
["lwe"] = "Lewo Eleng",
["lwg"] = "Wanga",
["lwh"] = "White Lachi",
["lwl"] = "เลอเวือะตะวันออก",
["lwm"] = "Laomian",
["lwo"] = "Luwo",
["lws"] = "Malawian Sign Language",
["lwt"] = "Lewotobi",
["lwu"] = "Lawu",
["lww"] = "Lewo",
["lya"] = "Layakha",
["lyg"] = "ลึงงัม",
["lyn"] = "Luyana",
["lzh"] = "จีนวรรณกรรม",
["lzl"] = "Litzlitz",
["lzn"] = "Leinong Naga",
["lzz"] = "ลัซ",
["maa"] = "San Jerónimo Tecóatl Mazatec",
["mab"] = "Yutanduchi Mixtec",
["mad"] = "Madurese",
["mae"] = "Bo-Rukul",
["maf"] = "Mafa",
["mag"] = "มคหะ",
["mai"] = "ไมถิลี",
["maj"] = "Jalapa de Díaz Mazatec",
["mak"] = "มากัซซาร์",
["mam"] = "Mam",
["man"] = "Mandingo",
["map-ata-pro"] = "Proto-Atayalic",
["map-bms"] = "Banyumasan",
["map-pro"] = "ออสโตรนีเซียนดั้งเดิม",
["maq"] = "Chiquihuitlán Mazatec",
["mas"] = "มาไซ",
["mat"] = "Matlatzinca",
["mau"] = "Huautla Mazatec",
["mav"] = "Sateré-Mawé",
["maw"] = "Mampruli",
["max"] = "มลายูแบบโมลุกกะเหนือ",
["maz"] = "Central Mazahua",
["mba"] = "Higaonon",
["mbb"] = "Western Bukidnon Manobo",
["mbc"] = "Macushi",
["mbd"] = "Dibabawon Manobo",
["mbe"] = "Molale",
["mbf"] = "Baba Malay",
["mbh"] = "Mangseng",
["mbi"] = "Ilianen Manobo",
["mbj"] = "Nadëb",
["mbk"] = "Malol",
["mbl"] = "Maxakalí",
["mbm"] = "Ombamba",
["mbn"] = "Macaguán",
["mbo"] = "Mbo (Cameroon)",
["mbp"] = "Wiwa",
["mbq"] = "Maisin",
["mbr"] = "Nukak Makú",
["mbs"] = "Sarangani Manobo",
["mbt"] = "Matigsalug Manobo",
["mbu"] = "Mbula-Bwazza",
["mbv"] = "Mbulungish",
["mbw"] = "Maring",
["mbx"] = "Sepik Mari",
["mby"] = "Memoni",
["mbz"] = "Amoltepec Mixtec",
["mca"] = "Maca",
["mcb"] = "Machiguenga",
["mcc"] = "Bitur",
["mcd"] = "Sharanahua",
["mce"] = "Itundujia Mixtec",
["mcf"] = "Matsés",
["mcg"] = "Mapoyo",
["mch"] = "Ye'kwana",
["mci"] = "Mese",
["mcj"] = "Mvanip",
["mck"] = "Mbunda",
["mcl"] = "Macaguaje",
["mcm"] = "Kristang",
["mcn"] = "Masana",
["mco"] = "Coatlán Mixe",
["mcp"] = "Makaa",
["mcq"] = "Ese",
["mcr"] = "Menya",
["mcs"] = "Mambai",
["mcu"] = "Cameroon Mambila",
["mcw"] = "Mawa",
["mcx"] = "Mpiemo",
["mcy"] = "South Watut",
["mcz"] = "Mawan",
["mda"] = "Mada (Nigeria)",
["mdb"] = "Morigi",
["mdc"] = "Male",
["mdd"] = "Mbum",
["mde"] = "Bura Mabang",
["mdf"] = "มอกชา",
["mdg"] = "Massalat",
["mdh"] = "มากินดาเนา",
["mdi"] = "Mamvu",
["mdj"] = "Mangbetu",
["mdk"] = "Mangbutu",
["mdl"] = "Maltese Sign Language",
["mdm"] = "Mayogo",
["mdn"] = "Mbati",
["mdp"] = "Mbala",
["mdq"] = "Mbole",
["mdr"] = "Mandar",
["mds"] = "Maria",
["mdt"] = "Mbere",
["mdu"] = "Mboko",
["mdv"] = "Santa Lucía Monteverde Mixtec",
["mdw"] = "Mbosi",
["mdx"] = "Dizin",
["mdy"] = "Maale",
["mdz"] = "Suruí Do Pará",
["mea"] = "Menka",
["meb"] = "Ikobi-Mena",
["mec"] = "Mara",
["med"] = "Melpa",
["mee"] = "Mengen",
["mef"] = "Megam",
["meh"] = "Southwestern Tlaxiaco Mixtec",
["mei"] = "Midob",
["mej"] = "Meyah",
["mek"] = "Mekeo",
["mel"] = "Central Melanau",
["mem"] = "Mangala",
["men"] = "Mende",
["meo"] = "มลายูแบบเกอดะฮ์",
["mep"] = "Miriwung",
["meq"] = "Merey",
["mer"] = "Meru",
["mes"] = "Masmaje",
["met"] = "Mato",
["meu"] = "Motu",
["mev"] = "Mano",
["mew"] = "Maaka",
["mey"] = "Hassaniya Arabic",
["mez"] = "Menominee",
["mfa"] = "มลายูแบบปัตตานี",
["mfb"] = "Bangka",
["mfc"] = "Mba",
["mfd"] = "Mendankwe-Nkwen",
["mfe"] = "ครีโอลมอริเชียส",
["mff"] = "Naki",
["mfg"] = "Mixifore",
["mfh"] = "Matal",
["mfi"] = "Wandala",
["mfj"] = "Mefele",
["mfk"] = "North Mofu",
["mfl"] = "Putai",
["mfm"] = "Marghi South",
["mfn"] = "Cross River Mbembe",
["mfo"] = "Mbe",
["mfp"] = "Makassar Malay",
["mfq"] = "Moba",
["mfr"] = "Marrithiyel",
["mfs"] = "Mexican Sign Language",
["mft"] = "Mokerang",
["mfu"] = "Mbwela",
["mfv"] = "Mandjak",
["mfw"] = "Mulaha",
["mfx"] = "Melo",
["mfy"] = "Mayo",
["mfz"] = "Mabaan",
["mg"] = "มาลากาซี",
["mga"] = "ไอริชกลาง",
["mgb"] = "Mararit",
["mgc"] = "Morokodo",
["mgd"] = "Moru",
["mge"] = "Mango",
["mgf"] = "Maklew",
["mgg"] = "Mpongmpong",
["mgh"] = "Makhuwa-Meetto",
["mgi"] = "Jili",
["mgj"] = "Abureni",
["mgk"] = "Mawes",
["mgl"] = "Maleu-Kilenge",
["mgm"] = "Mambae",
["mgn"] = "Mbangi",
["mgo"] = "Meta'",
["mgp"] = "Eastern Magar",
["mgq"] = "Malila",
["mgr"] = "Mambwe-Lungu",
["mgs"] = "Manda (Tanzania)",
["mgt"] = "Mongol",
["mgu"] = "Mailu",
["mgv"] = "Matengo",
["mgw"] = "Matumbi",
["mgy"] = "Mbunga",
["mgz"] = "Mbugwe",
["mh"] = "มาร์แชลล์",
["mha"] = "Manda (India)",
["mhb"] = "Mahongwe",
["mhc"] = "Mocho",
["mhd"] = "Mbugu",
["mhe"] = "Besisi",
["mhf"] = "Mamaa",
["mhg"] = "Marrgu",
["mhi"] = "Ma'di",
["mhj"] = "Mogholi",
["mhk"] = "Mungaka",
["mhl"] = "Mauwake",
["mhm"] = "Makhuwa-Moniga",
["mhn"] = "โมเชโน",
["mho"] = "Mashi",
["mhp"] = "Balinese Malay",
["mhq"] = "Mandan",
["mhr"] = "Eastern Mari",
["mhs"] = "Buru (Indonesia)",
["mht"] = "Mandahuaca",
["mhu"] = "Taraon",
["mhw"] = "Mbukushu",
["mhx"] = "Lhao Vo",
["mhy"] = "Ma'anyan",
["mhz"] = "Mor (Austronesian)",
["mi"] = "มาวรี",
["mia"] = "Miami",
["mib"] = "Atatláhuca Mixtec",
["mic"] = "Mi'kmaq",
["mid"] = "Mandaic",
["mie"] = "Ocotepec Mixtec",
["mif"] = "Mofu-Gudur",
["mig"] = "San Miguel el Grande Mixtec",
["mih"] = "Chayuco Mixtec",
["mii"] = "Chigmecatitlán Mixtec",
["mij"] = "Mungbam",
["mik"] = "Mikasuki",
["mil"] = "Peñoles Mixtec",
["mim"] = "Alacatlatzala Mixtec",
["min"] = "มีนังกาเบา",
["mio"] = "Pinotepa Nacional Mixtec",
["mip"] = "Apasco-Apoala Mixtec",
["miq"] = "Miskito",
["mir"] = "Isthmus Mixe",
["mis-hkl"] = "Kelantan Peranakan Hokkien",
["mis-idn"] = "Idiom Neutral",
["mis-isa"] = "Isaurian",
["mis-jie"] = "Jie",
["mis-jzh"] = "Jizhao",
["mis-kas"] = "Kassite",
["mis-mmd"] = "Mimi of Decorse",
["mis-mmn"] = "Mimi of Nachtigal",
["mis-phi"] = "Philistine",
["mis-rou"] = "Rouran",
["mis-tdl"] = "Turdulian",
["mis-tdt"] = "Turdetanian",
["mis-tnw"] = "Tangwang",
["mis-tuh"] = "Tuyuhun",
["mis-tuo"] = "Tuoba",
["mis-wuh"] = "Wuhuan",
["mis-xbi"] = "Xianbei",
["mis-xnu"] = "Xiongnu",
["mit"] = "Southern Puebla Mixtec",
["miu"] = "Cacaloxtepec Mixtec",
["miw"] = "Akoye",
["mix"] = "Mixtepec Mixtec",
["miy"] = "Ayutla Mixtec",
["miz"] = "Coatzospan Mixtec",
["mjb"] = "Makalero",
["mjc"] = "San Juan Colorado Mixtec",
["mjd"] = "Northwest Maidu",
["mje"] = "Muskum",
["mjg-mgl"] = "Mongghul",
["mjg-mgr"] = "Mangghuer",
["mji"] = "Kim Mun",
["mjj"] = "Mawak",
["mjk"] = "Matukar",
["mjl"] = "Mandeali",
["mjm"] = "Medebur",
["mjn"] = "Mebu",
["mjo"] = "Malankuravan",
["mjp"] = "Malapandaram",
["mjq"] = "Malaryan",
["mjr"] = "Malavedan",
["mjs"] = "Miship",
["mjt"] = "Sawriya Paharia",
["mju"] = "Manna-Dora",
["mjv"] = "Mannan",
["mjw"] = "Karbi",
["mjx"] = "Mahali",
["mjy"] = "Mahican",
["mjz"] = "Majhi",
["mk"] = "มาซิโดเนีย",
["mka"] = "Mbre",
["mkb"] = "Mal Paharia",
["mkc"] = "Siliput",
["mke"] = "Mawchi",
["mkf"] = "Miya",
["mkg"] = "Mak (China)",
["mkh-asl-pro"] = "Proto-Aslian",
["mkh-ban-pro"] = "Proto-Bahnaric",
["mkh-kat-pro"] = "Proto-Katuic",
["mkh-khm-pro"] = "ขมุอิกดั้งเดิม",
["mkh-kmr-pro"] = "เขมรดั้งเดิม",
["mkh-mmn"] = "มอญกลาง",
["mkh-mnc-pro"] = "มอญดั้งเดิม",
["mkh-mvi"] = "เวียดนามกลาง",
["mkh-pal-pro"] = "ปะหล่องดั้งเดิม",
["mkh-pea-pro"] = "แพริกดั้งเดิม",
["mkh-pkn-pro"] = "Proto-Pakanic",
["mkh-pro"] = "มอญ-เขมรดั้งเดิม",
["mkh-vie-pro"] = "เวียตติกดั้งเดิม",
["mki"] = "Dhatki",
["mkj"] = "โมกิล",
["mkk"] = "Byep",
["mkl"] = "Mokole",
["mkm"] = "Moklen",
["mkn"] = "Kupang Malay",
["mko"] = "Mingang Doso",
["mkp"] = "Moikodi",
["mkq"] = "Bay Miwok",
["mkr"] = "Malas",
["mks"] = "Silacayoapan Mixtec",
["mkt"] = "Vamale",
["mku"] = "Konyanka Maninka",
["mkv"] = "Mav̋ea",
["mkx"] = "Cinamiguin Manobo",
["mky"] = "Taba",
["mkz"] = "Makasae",
["ml"] = "มลยาฬัม",
["mla"] = "Tamambo",
["mlb"] = "Mbule",
["mlc"] = "Caolan",
["mle"] = "Manambu",
["mlf"] = "มัล",
["mlh"] = "Mape",
["mli"] = "Malimpung",
["mlj"] = "Miltu",
["mlk"] = "Ilwana",
["mll"] = "Malua Bay",
["mlm"] = "Mulam",
["mln"] = "Malango",
["mlo"] = "Mlomp",
["mlp"] = "Bargam",
["mlq"] = "Western Maninkakan",
["mlr"] = "Vame",
["mls"] = "Masalit",
["mlu"] = "To'abaita",
["mlv"] = "Mwotlap",
["mlw"] = "Moloko",
["mlx"] = "Malfaxal",
["mlz"] = "Malaynon",
["mma"] = "Mama",
["mmb"] = "Momina",
["mmc"] = "Michoacán Mazahua",
["mmd"] = "Maonan",
["mme"] = "Tirax",
["mmf"] = "Mundat",
["mmg"] = "North Ambrym",
["mmh"] = "Mehináku",
["mmi"] = "Musar",
["mmj"] = "Majhwar",
["mmk"] = "Mukha-Dora",
["mml"] = "Man Met",
["mmm"] = "Maii",
["mmn"] = "Mamanwa",
["mmo"] = "Mangga Buang",
["mmp"] = "Musan",
["mmq"] = "Aisi",
["mmr"] = "Western Xiangxi Miao",
["mmt"] = "Malalamai",
["mmu"] = "Mmaala",
["mmv"] = "Miriti",
["mmw"] = "Emae",
["mmx"] = "Madak",
["mmy"] = "Migaama",
["mmz"] = "Mabaale",
["mn"] = "มองโกเลีย",
["mna"] = "Mbula",
["mnb"] = "Muna",
["mnc"] = "แมนจู",
["mnd"] = "Mondé",
["mne"] = "Naba",
["mnf"] = "Mundani",
["mng"] = "Eastern Mnong",
["mnh"] = "Mono (Congo)",
["mni"] = "มณีปุระ",
["mnj"] = "Munji",
["mnk"] = "Mandinka",
["mnl"] = "Tiale",
["mnm"] = "Mapena",
["mnn"] = "มนองใต้",
["mnp"] = "หมิ่นเหนือ",
["mnq"] = "Minriq",
["mnr"] = "Mono (California)",
["mns-cen"] = "Central Mansi",
["mns-nor"] = "Northern Mansi",
["mns-pro"] = "Proto-Mansi",
["mns-sou"] = "Southern Mansi",
["mnt"] = "Maykulan",
["mnu"] = "Mer",
["mnv"] = "Rennellese",
["mnw"] = "มอญ",
["mnw-tha"] = "มอญแบบไทย",
["mnx"] = "Manikion",
["mny"] = "Manyawa",
["mnz"] = "Moni",
["moa"] = "Mwan",
["moc"] = "Mocoví",
["mod"] = "Mobilian",
["moe"] = "มงตาแญ",
["mog"] = "Mongondow",
["moh"] = "Mohawk",
["moi"] = "Mboi",
["moj"] = "Monzombo",
["mok"] = "Morori",
["mom"] = "Monimbo",
["moo"] = "Monom",
["mop"] = "Mopan Maya",
["moq"] = "Mor (Papuan)",
["mor"] = "Moro",
["mos"] = "Moore",
["mot"] = "Barí",
["mou"] = "Mogum",
["mov"] = "Mojave",
["mow"] = "Moi (Congo)",
["mox"] = "Molima",
["moy"] = "Shekkacho",
["moz"] = "Mukulu",
["mpa"] = "Mpoto",
["mpb"] = "Mullukmulluk",
["mpc"] = "Mangarayi",
["mpd"] = "Machinere",
["mpe"] = "Majang",
["mpg"] = "Marba",
["mph"] = "Maung",
["mpi"] = "Mpade",
["mpj"] = "Martu Wangka",
["mpk"] = "Mbara (Chad)",
["mpl"] = "Middle Watut",
["mpm"] = "Yosondúa Mixtec",
["mpn"] = "Mindiri",
["mpo"] = "Miu",
["mpp"] = "Migabac",
["mpq"] = "Matís",
["mpr"] = "Vangunu",
["mps"] = "Dadibi",
["mpt"] = "Mian",
["mpu"] = "Makuráp",
["mpv"] = "Mungkip",
["mpw"] = "Mapidian",
["mpx"] = "Misima-Paneati",
["mpy"] = "Mapia",
["mpz"] = "Mpi",
["mqa"] = "Maba",
["mqb"] = "Mbuko",
["mqc"] = "Mangole",
["mqe"] = "Matepi",
["mqf"] = "Momuna",
["mqg"] = "Kota Bangun Kutai Malay",
["mqh"] = "Tlazoyaltepec Mixtec",
["mqi"] = "Mariri",
["mqj"] = "Mamasa",
["mqk"] = "Rajah Kabunsuwan Manobo",
["mql"] = "Mbelime",
["mqm"] = "South Marquesan",
["mqn"] = "Moronene",
["mqo"] = "Modole",
["mqp"] = "Manipa",
["mqq"] = "Minokok",
["mqr"] = "Mander",
["mqs"] = "West Makian",
["mqt"] = "Mok",
["mqu"] = "Mandari",
["mqv"] = "Mosimo",
["mqw"] = "Murupi",
["mqx"] = "Mamuju",
["mqy"] = "Manggarai",
["mqz"] = "Malasanga",
["mr"] = "มราฐี",
["mra"] = "Mlabri",
["mrb"] = "Sungwadia",
["mrc"] = "Maricopa",
["mrd"] = "Western Magar",
["mre"] = "Martha's Vineyard Sign Language",
["mrf"] = "Elseng",
["mrg"] = "Mising",
["mrh"] = "Mara Chin",
["mrj"] = "Western Mari",
["mrk"] = "Hmwaveke",
["mrl"] = "Mortlockese",
["mrm"] = "Mwerlap",
["mrn"] = "Cheke Holo",
["mro"] = "Mru",
["mrp"] = "Morouas",
["mrq"] = "North Marquesan",
["mrr"] = "Hill Maria",
["mrs"] = "Maragus",
["mrt"] = "Margi",
["mru"] = "Mono (Cameroon)",
["mrv"] = "Mangarevan",
["mrw"] = "มาราเนา",
["mrx"] = "Dineor",
["mry"] = "Karaga Mandaya",
["mrz"] = "Marind",
["ms"] = "มาเลเซีย",
["msb"] = "มัสบาเต",
["msc"] = "Sankaran Maninka",
["msd"] = "Yucatec Maya Sign Language",
["mse"] = "Musey",
["msf"] = "Mekwei",
["msg"] = "Moraid",
["msi"] = "Sabah Malay",
["msj"] = "Ma",
["msk"] = "Mansaka",
["msl"] = "Molof",
["msm"] = "Agusan Manobo",
["msn"] = "Vurës",
["mso"] = "Mombum",
["msp"] = "Maritsauá",
["msq"] = "Caac",
["msr"] = "Mongolian Sign Language",
["mss"] = "West Masela",
["msu"] = "Musom",
["msv"] = "Maslam",
["msw"] = "Mansoanka",
["msx"] = "Moresada",
["msy"] = "Aruamu",
["msz"] = "Momare",
["mt"] = "มอลตา",
["mta"] = "Cotabato Manobo",
["mtb"] = "Anyin Morofo",
["mtc"] = "Munit",
["mtd"] = "Mualang",
["mte"] = "Alu",
["mtf"] = "Murik (New Guinea)",
["mtg"] = "Una",
["mth"] = "Munggui",
["mti"] = "Maiwa (New Guinea)",
["mtj"] = "Moskona",
["mtk"] = "Mbe'",
["mtl"] = "Montol",
["mtm"] = "Mator",
["mtn"] = "Matagalpa",
["mto"] = "Totontepec Mixe",
["mtp"] = "Wichí Lhamtés Nocten",
["mtq"] = "เหมื่อง",
["mtr"] = "เมวาร์",
["mts"] = "Yora",
["mtt"] = "Mota",
["mtu"] = "Tututepec Mixtec",
["mtv"] = "Asaro'o",
["mtw"] = "Magahat",
["mtx"] = "Tidaá Mixtec",
["mty"] = "Nabi",
["mua"] = "Mundang",
["mub"] = "Mubi",
["muc"] = "Mbu'",
["mud"] = "Mednyj Aleut",
["mue"] = "Media Lengua",
["mug"] = "Musgu",
["muh"] = "Mündü",
["mui"] = "มูซี",
["muj"] = "Mabire",
["mul"] = "ร่วม",
["mum"] = "Maiwala",
["mun-pro"] = "มุนดาดั้งเดิม",
["muo"] = "Nyong",
["mup"] = "Malvi",
["muq"] = "Eastern Xiangxi Miao",
["mur"] = "Murle",
["mus"] = "Creek",
["mut"] = "Western Muria",
["muu"] = "Yaaku",
["muv"] = "Muthuvan",
["mux"] = "Bo-Ung",
["muy"] = "Muyang",
["muz"] = "Mursi",
["mva"] = "Manam",
["mvb"] = "Mattole",
["mvd"] = "Mamboru",
["mvg"] = "Yucuañe Mixtec",
["mvh"] = "Mire",
["mvi"] = "มิยาโกะ",
["mvk"] = "Mekmek",
["mvl"] = "Mbara (Australia)",
["mvm"] = "Muya",
["mvn"] = "Minaveha",
["mvo"] = "Marovo",
["mvp"] = "Duri",
["mvq"] = "Moere",
["mvr"] = "Marau",
["mvs"] = "Massep",
["mvt"] = "Mpotovoro",
["mvu"] = "Marfa",
["mvv"] = "Tagal Murut",
["mvw"] = "Machinga",
["mvx"] = "Meoswar",
["mvy"] = "Indus Kohistani",
["mvz"] = "Mesqan",
["mwa"] = "Mwatebu",
["mwb"] = "Juwal",
["mwc"] = "Are",
["mwe"] = "Mwera",
["mwf"] = "Murrinh-Patha",
["mwg"] = "Aiklep",
["mwh"] = "Mouk-Aria",
["mwi"] = "Labo",
["mwk"] = "Kita Maninkakan",
["mwl"] = "มีรังดา",
["mwm"] = "Sar",
["mwn"] = "Nyamwanga",
["mwo"] = "Sungwadaga",
["mwp"] = "Kala Lagaw Ya",
["mwq"] = "Mün Chin",
["mwr"] = "มาร์วาร์",
["mws"] = "Mwimbi-Muthambi",
["mwt"] = "Moken",
["mwu"] = "Mittu",
["mwv"] = "Mentawai",
["mww"] = "ม้งขาว",
["mwz"] = "Moingi",
["mxa"] = "Northwest Oaxaca Mixtec",
["mxb"] = "Tezoatlán Mixtec",
["mxd"] = "Modang",
["mxe"] = "Mele-Fila",
["mxf"] = "Malgbe",
["mxg"] = "Mbangala",
["mxh"] = "Mvuba",
["mxi"] = "Mozarabic",
["mxj"] = "Miju",
["mxk"] = "Monumbo",
["mxl"] = "Maxi Gbe",
["mxm"] = "Meramera",
["mxn"] = "Moi (Indonesia)",
["mxo"] = "Mbowe",
["mxp"] = "Tlahuitoltepec Mixe",
["mxq"] = "Juquila Mixe",
["mxr"] = "Murik (Malaysia)",
["mxs"] = "Huitepec Mixtec",
["mxt"] = "Jamiltepec Mixtec",
["mxu"] = "Mada (Cameroon)",
["mxv"] = "Metlatónoc Mixtec",
["mxw"] = "Namo",
["mxx"] = "Mahou",
["mxy"] = "Southeastern Nochixtlán Mixtec",
["mxz"] = "Central Masela",
["my"] = "พม่า",
["myb"] = "Mbay",
["myc"] = "Mayeka",
["mye"] = "Myene",
["myf"] = "Bambassi",
["myg"] = "Manta",
["myh"] = "Makah",
["myj"] = "Mangayat",
["myk"] = "Mamara Senoufo",
["myl"] = "Moma",
["mym"] = "Me'en",
["myn-chl"] = "Ch'olti'",
["myn-pro"] = "มายันดั้งเดิม",
["myo"] = "Anfillo",
["myp"] = "Pirahã",
["myr"] = "Muniche",
["mys"] = "Mesmes",
["myu"] = "Mundurukú",
["myv"] = "เอร์เซีย",
["myw"] = "Muyuw",
["myx"] = "Masaba",
["myy"] = "Macuna",
["myz"] = "Classical Mandaic",
["mza"] = "Santa María Zacatepec Mixtec",
["mzb"] = "Northern Saharan Berber",
["mzc"] = "Madagascar Sign Language",
["mzd"] = "Malimba",
["mze"] = "Morawa",
["mzg"] = "Monastic Sign Language",
["mzh"] = "Wichí Lhamtés Güisnay",
["mzi"] = "Ixcatlán Mazatec",
["mzj"] = "Manya",
["mzk"] = "Nigeria Mambila",
["mzl"] = "Mazatlán Mixe",
["mzm"] = "Mumuye",
["mzn"] = "มอแซนแดรอน",
["mzo"] = "Matipuhy",
["mzp"] = "Movima",
["mzq"] = "Mori Atas",
["mzr"] = "Marúbo",
["mzs"] = "ครีโอลมาเก๊า",
["mzt"] = "Mintil",
["mzu"] = "Inapang",
["mzv"] = "Manza",
["mzw"] = "Deg",
["mzx"] = "Mawayana",
["mzy"] = "Mozambican Sign Language",
["mzz"] = "Maiadomu",
["na"] = "นาอูรู",
["naa"] = "Namla",
["nab"] = "Nambikwara",
["nac"] = "Narak",
["nae"] = "Naka'ela",
["naf"] = "Nabak",
["nag"] = "Naga Pidgin",
["nah"] = "นาวัตล์",
["nai-ala"] = "Alazapa",
["nai-bay"] = "Bayogoula",
["nai-cal"] = "Calusa",
["nai-chi"] = "Chiquimulilla",
["nai-chu-pro"] = "Proto-Chumash",
["nai-cig"] = "Ciguayo",
["nai-ckn-pro"] = "Proto-Chinookan",
["nai-guz"] = "Guazacapán",
["nai-hit"] = "Hitchiti",
["nai-ipa"] = "Ipai",
["nai-jtp"] = "Jutiapa",
["nai-jum"] = "Jumaytepeque",
["nai-kat"] = "Kathlamet",
["nai-klp-pro"] = "Proto-Kalapuyan",
["nai-knm"] = "Konomihu",
["nai-kum"] = "Kumeyaay",
["nai-mac"] = "Macoris",
["nai-mdu-pro"] = "Proto-Maidun",
["nai-miz-pro"] = "Proto-Mixe-Zoque",
["nai-mus-pro"] = "Proto-Muskogean",
["nai-nao"] = "Naolan",
["nai-nrs"] = "New River Shasta",
["nai-okw"] = "Okwanuchu",
["nai-per"] = "Pericú",
["nai-pic"] = "Picuris",
["nai-plp-pro"] = "Proto-Plateau Penutian",
["nai-pom-pro"] = "Proto-Pomo",
["nai-qng"] = "Quinigua",
["nai-sca-pro"] = "Proto-Siouan-Catawban",
["nai-sin"] = "Sinacantán",
["nai-sln"] = "Salvadoran Lenca",
["nai-spt"] = "Sahaptin",
["nai-tap"] = "Tapachultec",
["nai-taw"] = "Tawasa",
["nai-teq"] = "Tequistlatec",
["nai-tip"] = "Tipai",
["nai-tot-pro"] = "Proto-Totozoquean",
["nai-tsi-pro"] = "Proto-Tsimshianic",
["nai-utn-pro"] = "Proto-Utian",
["nai-wai"] = "Waikuri",
["nai-wji"] = "Western Jicaque",
["nai-yup"] = "Yupiltepeque",
["naj"] = "Nalu",
["nak"] = "Nakanai",
["nal"] = "Nalik",
["nam"] = "Ngan'gityemerri",
["nan"] = "หมิ่นใต้",
["nan-dat"] = "Datian Min",
["nan-hbl"] = "ฮกเกี้ยน",
["nan-hlh"] = "Hailufeng Min",
["nan-lnx"] = "Longyan Min",
["nan-tws"] = "แต้จิ๋ว",
["nan-zhe"] = "Zhenan Min",
["nan-zsh"] = "Sanxiang Min",
["nao"] = "Naaba",
["nap"] = "นาโปลี",
["naq"] = "Khoekhoe",
["nar"] = "Iguta",
["nas"] = "Nasioi",
["nat"] = "Hungworo",
["naw"] = "Nawuri",
["nax"] = "Nakwi",
["nay"] = "Ngarrindjeri",
["naz"] = "Coatepec Nahuatl",
["nb"] = "นอร์เวย์แบบบุ๊กมอล",
["nba"] = "Nyemba",
["nbb"] = "Ndoe",
["nbc"] = "Chang",
["nbd"] = "Ngbinda",
["nbe"] = "Konyak Naga",
["nbg"] = "Nagarchal",
["nbh"] = "Ngamo",
["nbi"] = "Mao Naga",
["nbj"] = "Ngarinman",
["nbk"] = "Nake",
["nbm"] = "Ngbaka Ma'bo",
["nbn"] = "Kuri",
["nbo"] = "Nkukoli",
["nbp"] = "Nnam",
["nbq"] = "Nggem",
["nbr"] = "Numana",
["nbs"] = "Namibian Sign Language",
["nbt"] = "Na",
["nbu"] = "Rongmei Naga",
["nbv"] = "Ngamambo",
["nbw"] = "Southern Ngbandi",
["nby"] = "Ningera",
["nca"] = "Iyo",
["ncb"] = "นิโคบาร์กลาง",
["ncc"] = "Ponam",
["ncd"] = "Nachering",
["nce"] = "Yale",
["ncf"] = "Notsi",
["ncg"] = "Nisga'a",
["nch"] = "Central Huasteca Nahuatl",
["nci"] = "นาวัตล์คลาสสิก",
["ncj"] = "Northern Puebla Nahuatl",
["nck"] = "Nakara",
["ncl"] = "Michoacán Nahuatl",
["ncm"] = "Nambo",
["ncn"] = "Nauna",
["nco"] = "Sibe",
["ncr"] = "Ncane",
["ncs"] = "Nicaraguan Sign Language",
["nct"] = "Chothe Naga",
["ncu"] = "Chumburung",
["ncx"] = "Central Puebla Nahuatl",
["ncz"] = "Natchez",
["nd"] = "Northern Ndebele",
["nda"] = "Ndasa",
["ndb"] = "Kenswei Nsei",
["ndc"] = "Ndau",
["ndd"] = "Nde-Nsele-Nta",
["ndf"] = "Nadruvian",
["ndg"] = "Ndengereko",
["ndh"] = "Ndali",
["ndi"] = "Chamba Leko",
["ndj"] = "Ndamba",
["ndk"] = "Ndaka",
["ndl"] = "Ndolo",
["ndm"] = "Ndam",
["ndn"] = "Ngundi",
["ndp"] = "Ndo",
["ndq"] = "Ndombe",
["ndr"] = "Ndoola",
["nds"] = "เยอรมันต่ำ",
["nds-de"] = "เยอรมันต่ำแบบเยอรมนี",
["nds-nl"] = "Dutch Low Saxon",
["ndt"] = "Ndunga",
["ndu"] = "Dugun",
["ndv"] = "Ndut",
["ndw"] = "Ndobo",
["ndx"] = "Nduga",
["ndy"] = "Lutos",
["ndz"] = "Ndogo",
["ne"] = "เนปาล",
["nea"] = "Eastern Ngad'a",
["neb"] = "Toura",
["nec"] = "Nedebang",
["ned"] = "Nde-Gbite",
["nee"] = "Kumak",
["nef"] = "Nefamese",
["neg"] = "Negidal",
["neh"] = "Nyenkha",
["nej"] = "Neko",
["nek"] = "Neku",
["nem"] = "Nemi",
["nen"] = "Nengone",
["neo"] = "Ná-Meo",
["neq"] = "North Central Mixe",
["ner"] = "Yahadian",
["nes"] = "Bhoti Kinnauri",
["net"] = "Nete",
["neu"] = "Neo",
["nev"] = "Nyaheun",
["new"] = "เนวาร์",
["nex"] = "Neme",
["ney"] = "Neyo",
["nez"] = "Nez Perce",
["nfa"] = "Dhao",
["nfd"] = "Ahwai",
["nfl"] = "Äiwoo",
["nfr"] = "Nafaanra",
["nfu"] = "Mfumte",
["ng"] = "Ndonga",
["nga"] = "Ngbaka",
["ngb"] = "Northern Ngbandi",
["ngc"] = "Ngombe (Congo)",
["ngd"] = "Ngando (Central African Republic)",
["nge"] = "Ngemba",
["ngf-pro"] = "Proto-Trans-New Guinea",
["ngg"] = "Ngbaka Manza",
["ngh"] = "Nǀuu",
["ngi"] = "Ngizim",
["ngj"] = "Ngie",
["ngk"] = "Ngalkbun",
["ngl"] = "Lomwe",
["ngm"] = "Ngatik Men's Creole",
["ngn"] = "Ngwo",
["ngo"] = "Ngoni",
["ngp"] = "Ngulu",
["ngq"] = "Ngoreme",
["ngr"] = "Nagu",
["ngs"] = "Gvoko",
["ngt"] = "Ngeq",
["ngu"] = "Guerrero Nahuatl",
["ngv"] = "Nagumi",
["ngw"] = "Ngwaba",
["ngx"] = "Nggwahyi",
["ngy"] = "Tibea",
["ngz"] = "Ngungwel",
["nha"] = "Nhanda",
["nhb"] = "Beng",
["nhc"] = "Tabasco Nahuatl",
["nhd"] = "Chiripá",
["nhe"] = "Eastern Huasteca Nahuatl",
["nhf"] = "Nhuwala",
["nhg"] = "Tetelcingo Nahuatl",
["nhh"] = "Nahari",
["nhi"] = "Zacatlán-Ahuacatlán-Tepetzintla Nahuatl",
["nhk"] = "Cosoleacaque Nahuatl",
["nhm"] = "Morelos Nahuatl",
["nhn"] = "นาวัตล์ตอนกลาง",
["nho"] = "Takuu",
["nhp"] = "Pajapan Nahuatl",
["nhq"] = "Huaxcaleca Nahuatl",
["nhr"] = "Naro",
["nht"] = "Ometepec Nahuatl",
["nhu"] = "Noone",
["nhv"] = "Temascaltepec Nahuatl",
["nhw"] = "Western Huasteca Nahuatl",
["nhx"] = "Mecayapan Nahuatl",
["nhy"] = "Northern Oaxaca Nahuatl",
["nhz"] = "Santa María La Alta Nahuatl",
["nia"] = "Nias",
["nib"] = "Nakame",
["nic-bco-pro"] = "เบนูเอ-คองโกดั้งเดิม",
["nic-bod-pro"] = "แบนทอยด์ดั้งเดิม",
["nic-eov-pro"] = "Proto-Eastern Oti-Volta",
["nic-gns-pro"] = "Proto-Gurunsi",
["nic-grf-pro"] = "Proto-Grassfields",
["nic-gur-pro"] = "กูร์ดั้งเดิม",
["nic-jkn-pro"] = "Proto-Jukunoid",
["nic-lcr-pro"] = "Proto-Lower Cross River",
["nic-ogo-pro"] = "Proto-Ogoni",
["nic-ovo-pro"] = "Proto-Oti-Volta",
["nic-plt-pro"] = "Proto-Plateau",
["nic-pro"] = "ไนเจอร์-คองโกดั้งเดิม",
["nic-ubg-pro"] = "Proto-Ubangian",
["nic-ucr-pro"] = "Proto-Upper Cross River",
["nic-vco-pro"] = "วอลตา-คองโกดั้งเดิม",
["nid"] = "Ngandi",
["nie"] = "Niellim",
["nif"] = "Nek",
["nig"] = "Ngalakan",
["nih"] = "Nyiha",
["nii"] = "Nii",
["nij"] = "Ngaju",
["nik"] = "Southern Nicobarese",
["nil"] = "Nila",
["nim"] = "Nilamba",
["nin"] = "Ninzo",
["nio"] = "Nganasan",
["niq"] = "Nandi",
["nir"] = "Nimboran",
["nis"] = "Nimi",
["nit"] = "Southeastern Kolami",
["niu"] = "นีวเว",
["niv"] = "Nivkh",
["niw"] = "Nimo",
["nix"] = "Hema",
["niy"] = "Ngiti",
["niz"] = "Ningil",
["nja"] = "Nzanyi",
["njb"] = "Nocte",
["njh"] = "Lotha Naga",
["nji"] = "Gudanji",
["njj"] = "Njen",
["njl"] = "Njalgulgule",
["njm"] = "Angami",
["njn"] = "Liangmai Naga",
["njo"] = "Ao",
["njr"] = "Njerep",
["njs"] = "Nisa",
["njt"] = "Ndyuka-Trio Pidgin",
["nju"] = "Ngadjunmaya",
["njx"] = "Kunyi",
["njy"] = "Njyem",
["njz"] = "Nyishi",
["nka"] = "Nkoya",
["nkb"] = "Khoibu Naga",
["nkc"] = "Nkongho",
["nkd"] = "Koireng",
["nke"] = "Duke",
["nkf"] = "Inpui Naga",
["nkg"] = "Nekgini",
["nkh"] = "Khezha Naga",
["nki"] = "Thangal Naga",
["nkj"] = "Nakai",
["nkk"] = "Nokuku",
["nkm"] = "Namat",
["nkn"] = "Nkangala",
["nko"] = "Nkonya",
["nkp"] = "Niuatoputapu",
["nkq"] = "Nkami",
["nkr"] = "Nukuoro",
["nks"] = "North Asmat",
["nkt"] = "Nyika",
["nku"] = "Bouna Kulango",
["nkw"] = "Nkutu",
["nkx"] = "Nkoroo",
["nkz"] = "Nkari",
["nl"] = "ดัตช์",
["nla"] = "Ngombale",
["nlc"] = "Nalca",
["nle"] = "East Nyala",
["nlg"] = "Gela",
["nli"] = "Grangali",
["nlj"] = "Nyali",
["nlk"] = "Ninia Yali",
["nll"] = "Nihali",
["nlm"] = "Mankiyali",
["nlo"] = "Ngul",
["nlq"] = "Lao Naga",
["nlu"] = "Nchumbulu",
["nlv"] = "Orizaba Nahuatl",
["nlw"] = "Walangama",
["nlx"] = "Nahali",
["nly"] = "Nyamal",
["nlz"] = "Nalögo",
["nma"] = "Maram Naga",
["nmb"] = "Big Nambas",
["nmc"] = "Ngam",
["nmd"] = "Ndumu",
["nme"] = "Mzieme Naga",
["nmf"] = "Tangkhul Naga",
["nmg"] = "Kwasio",
["nmh"] = "Monsang Naga",
["nmi"] = "Nyam",
["nmj"] = "Ngombe (Central African Republic)",
["nmk"] = "Namakura",
["nml"] = "Ndemli",
["nmm"] = "Manangba",
["nmn"] = "ǃXóõ",
["nmo"] = "Moyon Naga",
["nmp"] = "Nimanbur",
["nmq"] = "Nambya",
["nmr"] = "Nimbari",
["nms"] = "Letemboi",
["nmt"] = "Namonuito",
["nmu"] = "Northeast Maidu",
["nmv"] = "Ngamini",
["nmw"] = "Nimoa",
["nmy"] = "Namuyi",
["nmz"] = "Nawdm",
["nn"] = "นอร์เวย์แบบนือนอสก์",
["nna"] = "Nyangumarta",
["nnb"] = "Nande",
["nnc"] = "Nancere",
["nnd"] = "West Ambae",
["nne"] = "Ngandyera",
["nnf"] = "Ngaing",
["nng"] = "Maring Naga",
["nnh"] = "Ngiemboon",
["nni"] = "North Nuaulu",
["nnj"] = "Nyangatom",
["nnk"] = "Nankina",
["nnl"] = "Northern Rengma Naga",
["nnm"] = "Namia",
["nnn"] = "Ngete",
["nnp"] = "Wancho",
["nnq"] = "Ngindo",
["nnr"] = "Narungga",
["nnt"] = "Nanticoke",
["nnu"] = "Dwang",
["nnv"] = "Nukunu",
["nnw"] = "Southern Nuni",
["nnx"] = "Ngong",
["nny"] = "Nyangga",
["nnz"] = "Nda'nda'",
["no"] = "นอร์เวย์",
["noa"] = "Woun Meu",
["noc"] = "Nuk",
["nod"] = "คำเมือง",
["noe"] = "Nimadi",
["nof"] = "Nomane",
["nog"] = "Nogai",
["noh"] = "Nomu",
["noi"] = "Noiri",
["noj"] = "Nonuya",
["nok"] = "Nooksack",
["nol"] = "Nomlaki",
["nom"] = "Nocamán",
["non"] = "นอร์สเก่า",
["nop"] = "Numanggang",
["noq"] = "Ngongo",
["nos"] = "Eastern Nisu",
["not"] = "Nomatsiguenga",
["nou"] = "Ewage-Notu",
["nov"] = "โนเวียล",
["now"] = "Nyambo",
["noy"] = "Noy",
["noz"] = "Nayi",
["npa"] = "Nar Phu",
["npb"] = "Nupbikha",
["npg"] = "Ponyo",
["nph"] = "Phom",
["npl"] = "Southeastern Puebla Nahuatl",
["npn"] = "Mondropolon",
["npo"] = "Pochuri Naga",
["nps"] = "Nipsan",
["npu"] = "Puimei Naga",
["npy"] = "Napu",
["nqg"] = "Ede Nago",
["nqk"] = "Kura Ede Nago",
["nql"] = "Ngendelengo",
["nqm"] = "Ndom",
["nqn"] = "Nen",
["nqo"] = "N'Ko",
["nqq"] = "Kyan-Karyaw Naga",
["nqy"] = "Akyaung Ari",
["nr"] = "Southern Ndebele",
["nra"] = "Ngom",
["nrb"] = "Nara",
["nrc"] = "Noric",
["nre"] = "Southern Rengma Naga",
["nrf"] = "นอร์มัน",
["nrg"] = "Narango",
["nri"] = "Chokri Naga",
["nrk"] = "Ngarla",
["nrl"] = "Ngarluma",
["nrm"] = "Narom",
["nrn"] = "Norn",
["nrp"] = "North Picene",
["nrr"] = "Norra",
["nrt"] = "Northern Kalapuya",
["nru"] = "Narua",
["nrx"] = "Ngurmbur",
["nrz"] = "Lala (New Guinea)",
["nsa"] = "Sangtam Naga",
["nsb"] = "Lower Nossob",
["nsc"] = "Nshi",
["nsd"] = "Southern Nisu",
["nse"] = "Nsenga",
["nsg"] = "Ngasa",
["nsh"] = "Ngoshie",
["nsi"] = "Nigerian Sign Language",
["nsk"] = "Naskapi",
["nsl"] = "Norwegian Sign Language",
["nsm"] = "Sema",
["nsn"] = "Nehan",
["nso"] = "ซูทูเหนือ",
["nsp"] = "มือเนปาล",
["nsq"] = "Northern Sierra Miwok",
["nsr"] = "Maritime Sign Language",
["nss"] = "Nali",
["nst"] = "Tangsa",
["nsu"] = "Sierra Negra Nahuatl",
["nsv"] = "Southwestern Nisu",
["nsw"] = "Navut",
["nsx"] = "Nsongo",
["nsy"] = "Nasal",
["nsz"] = "Nisenan",
["ntd"] = "Northern Tidung",
["ntg"] = "Ngantangarra",
["nti"] = "Natioro",
["ntj"] = "Ngaanyatjarra",
["ntk"] = "Ikoma",
["ntm"] = "Nateni",
["nto"] = "Ntomba",
["ntp"] = "Northern Tepehuan",
["ntr"] = "Delo",
["nts"] = "Natagaimas",
["ntu"] = "Natügu",
["ntw"] = "Nottoway",
["ntx"] = "Somra",
["nty"] = "Mantsi",
["nua"] = "Yuanga",
["nub-har"] = "Haraza",
["nub-pro"] = "นูเบียนดั้งเดิม",
["nuc"] = "Nukuini",
["nud"] = "Ngala",
["nue"] = "Ngundu",
["nuf"] = "Nusu",
["nug"] = "Nungali",
["nuh"] = "Ndunda",
["nui"] = "Ngumbi",
["nuj"] = "Nyole (Uganda)",
["nuk"] = "Nootka",
["nul"] = "Nusa Laut",
["num"] = "Niuafo'ou",
["nun"] = "Anong",
["nuo"] = "หง่วน",
["nup"] = "Nupe",
["nuq"] = "Nukumanu",
["nur"] = "Nuguria",
["nus"] = "Nuer",
["nut"] = "นุง",
["nuu"] = "Ngbundu",
["nuv"] = "Northern Nuni",
["nuw"] = "Nguluwan",
["nux"] = "Mehek",
["nuy"] = "Nunggubuyu",
["nuz"] = "Tlamacazapa Nahuatl",
["nv"] = "นาวาโฮ",
["nvh"] = "Nasarian",
["nvm"] = "Namiae",
["nvo"] = "Nyokon",
["nwa"] = "Nawathinehena",
["nwb"] = "Nyabwa",
["nwc"] = "เนวาร์คลาสสิก",
["nwe"] = "Ngwe",
["nwi"] = "Southwest Tanna",
["nwm"] = "Nyamusa-Molo",
["nwo"] = "Nauo",
["nwr"] = "Nawaru",
["nwx"] = "เนวาร์กลาง",
["nwy"] = "Nottoway-Meherrin",
["nxa"] = "Nauete",
["nxd"] = "Ngando (Congo)",
["nxe"] = "Nage",
["nxg"] = "Ngadha",
["nxi"] = "Nindi",
["nxl"] = "South Nuaulu",
["nxm"] = "Numidian",
["nxn"] = "Ngawun",
["nxo"] = "Ndambomo",
["nxq"] = "Naxi",
["nxr"] = "Ninggerum",
["nxx"] = "Nafri",
["ny"] = "เจวา",
["nyb"] = "Nyangbo",
["nyc"] = "Nyanga-li",
["nyd"] = "Nyole (Kenya)",
["nye"] = "Nyengo",
["nyf"] = "Giryama",
["nyg"] = "Nyindu",
["nyh"] = "Nyigina",
["nyi"] = "Nyimang",
["nyj"] = "Nyanga (Congo)",
["nyk"] = "Nyaneka",
["nyl"] = "Nyeu",
["nym"] = "Nyamwezi",
["nyn"] = "Nyankole",
["nyo"] = "Nyoro",
["nyp"] = "Nyang'i",
["nys"] = "Nyunga",
["nyt"] = "Nyawaygi",
["nyu"] = "Nyungwe",
["nyv"] = "Nyulnyul",
["nyw"] = "ญ้อ",
["nyx"] = "Nganyaywana",
["nyy"] = "Nyakyusa",
["nza"] = "Tigon Mbembe",
["nzb"] = "Njebi",
["nzd"] = "Nzadi",
["nzi"] = "Nzima",
["nzk"] = "Nzakara",
["nzm"] = "Zeme Naga",
["nzs"] = "New Zealand Sign Language",
["nzu"] = "Central Teke",
["nzy"] = "Nzakambay",
["nzz"] = "Nanga Dama Dogon",
["oaa"] = "Orok",
["oac"] = "Oroch",
["oak"] = "Noakhali",
["oav"] = "อะวาร์เก่า",
["obi"] = "Obispeño",
["obk"] = "Southern Bontoc",
["obl"] = "Oblo",
["obm"] = "โมอับ",
["obo"] = "Obo Manobo",
["obr"] = "พม่าเก่า",
["obt"] = "เบรอตงเก่า",
["obu"] = "Obulom",
["oc"] = "อุตซิตา",
["oca"] = "Ocaina",
["och"] = "จีนเก่า",
["oco"] = "คอร์นวอลล์เก่า",
["ocu"] = "Tlahuica",
["oda"] = "Odut",
["odk"] = "Od",
["odt"] = "ดัตช์เก่า",
["odu"] = "Odual",
["ofo"] = "Ofo",
["ofs"] = "ฟรีเชียเก่า",
["ofu"] = "Efutop",
["ogb"] = "Ogbia",
["ogc"] = "Ogbah",
["oge"] = "จอร์เจียเก่า",
["ogg"] = "Ogbogolo",
["ogo"] = "Khana",
["ogu"] = "Ogbronuagum",
["ohu"] = "ฮังการีเก่า",
["oia"] = "Oirata",
["oin"] = "Inebu One",
["oj"] = "โอจิบเว",
["ojb"] = "Northwestern Ojibwa",
["ojc"] = "Central Ojibwa",
["ojg"] = "Eastern Ojibwa",
["ojp"] = "ญี่ปุ่นเก่า",
["ojs"] = "Severn Ojibwa",
["ojv"] = "Ontong Java",
["ojw"] = "Western Ojibwa",
["oka"] = "Okanagan",
["okb"] = "Okobo",
["okd"] = "Okodia",
["oke"] = "Okpe (Southwestern Edo)",
["okg"] = "Kok-Paponk",
["okh"] = "Koresh-e Rostam",
["oki"] = "Okiek",
["okj"] = "Oko-Juwoi",
["okk"] = "Kwamtim One",
["okl"] = "Old Kentish Sign Language",
["okm"] = "เกาหลีกลาง",
["okn"] = "โอกิโนเอราบุ",
["oko"] = "เกาหลีเก่า",
["okr"] = "Kirike",
["oks"] = "Oko-Eni-Osayen",
["oku"] = "Oku",
["okv"] = "Orokaiva",
["okx"] = "Okpe (Northwestern Edo)",
["okz"] = "เขมรเก่า",
["old"] = "Mochi",
["ole"] = "Olekha",
["olm"] = "Oloma",
["olo"] = "ลิววี",
["olr"] = "Olrat",
["olt"] = "ลิทัวเนียเก่า",
["olu"] = "Kuvale",
["om"] = "ออโรโม",
["oma"] = "Omaha-Ponca",
["omb"] = "Omba",
["omc"] = "Mochica",
["omg"] = "Omagua",
["omi"] = "Omi",
["omk"] = "Omok",
["oml"] = "Ombo",
["omn"] = "ไมนอส",
["omo"] = "Utarmbung",
["omp"] = "มณีปุระเก่า",
["omq-cha-pro"] = "Proto-Chatino",
["omq-maz-pro"] = "Proto-Mazatec",
["omq-mix-pro"] = "Proto-Mixtecan",
["omq-mxt-pro"] = "Proto-Mixtec",
["omq-otp-pro"] = "Proto-Oto-Pamean",
["omq-pro"] = "Proto-Oto-Manguean",
["omq-sjq"] = "San Juan Quiahije Chatino",
["omq-tel"] = "Teposcolula Mixtec",
["omq-teo"] = "Teojomulco Chatino",
["omq-tri-pro"] = "Proto-Triqui",
["omq-zap-pro"] = "Proto-Zapotecan",
["omq-zpc-pro"] = "Proto-Zapotec",
["omr"] = "มราฐีเก่า",
["omt"] = "Omotik",
["omu"] = "Omurano",
["omv-aro-pro"] = "Proto-Aroid",
["omv-diz-pro"] = "Proto-Dizoid",
["omv-pro"] = "Proto-Omotic",
["omw"] = "South Tairora",
["omx"] = "มอญเก่า",
["ona"] = "Selk'nam",
["onb"] = "เบ",
["one"] = "Oneida",
["ong"] = "Olo",
["oni"] = "Onin",
["onj"] = "Onjob",
["onk"] = "Kabore One",
["onn"] = "Onobasulu",
["ono"] = "Onondaga",
["onp"] = "Sartang",
["onr"] = "Northern One",
["ons"] = "Ono",
["ont"] = "Ontenu",
["onu"] = "Unua",
["onw"] = "นิวเบียเก่า",
["onx"] = "Pidgin Onin",
["ood"] = "O'odham",
["oog"] = "Ong",
["oon"] = "Önge",
["oor"] = "Oorlams",
["opa"] = "Okpamheri",
["opk"] = "Kopkaka",
["opm"] = "Oksapmin",
["opo"] = "Opao",
["opt"] = "Opata",
["opy"] = "Ofayé",
["or"] = "โอริยา",
["ora"] = "Oroha",
["ore"] = "Orejón",
["org"] = "Oring",
["orh"] = "Oroqen",
["oro"] = "Orokolo",
["orr"] = "Oruma",
["ort"] = "Adivasi Odia",
["oru"] = "Ormuri",
["orv"] = "สลาวิกตะวันออกเก่า",
["orw"] = "Oro Win",
["orx"] = "Oro",
["orz"] = "Ormu",
["os"] = "ออสซีเซีย",
["osa"] = "Osage",
["osc"] = "Oscan",
["osi"] = "โอซิง",
["osn"] = "Old Sundanese",
["oso"] = "Ososo",
["osp"] = "สเปนเก่า",
["ost"] = "Osatu",
["osu"] = "Southern One",
["osx"] = "แซกซันเก่า",
["ota"] = "ตุรกีแบบออตโตมัน",
["otb"] = "ทิเบตเก่า",
["otd"] = "Ot Danum",
["ote"] = "Mezquital Otomi",
["oti"] = "Oti",
["otk"] = "เตอร์กิกเก่า",
["otl"] = "Tilapa Otomi",
["otm"] = "Eastern Highland Otomi",
["otn"] = "Tenango Otomi",
["oto-otm-pro"] = "Proto-Otomi",
["oto-pro"] = "Proto-Otomian",
["otq"] = "Querétaro Otomi",
["otr"] = "Otoro",
["ots"] = "Estado de México Otomi",
["ott"] = "Temoaya Otomi",
["otu"] = "Otuke",
["otw"] = "Ottawa",
["otx"] = "Texcatepec Otomi",
["oty"] = "ทมิฬเก่า",
["otz"] = "Ixtenco Otomi",
["oub"] = "Glio-Oubi",
["oue"] = "Oune",
["oui"] = "อุยกูร์เก่า",
["oum"] = "Ouma",
["ovd"] = "แอลฟ์ดาเลิน",
["owi"] = "Owiniga",
["owl"] = "เวลส์เก่า",
["oyb"] = "Oy",
["oyd"] = "Oyda",
["oym"] = "Wayampi",
["oyy"] = "Oya'oya",
["ozm"] = "Koonzime",
["pa"] = "ปัญจาบ",
["paa-bin-pro"] = "Proto-Binanderean",
["paa-kom"] = "Kómnzo",
["paa-kwn"] = "Kuwani",
["paa-nha-pro"] = "Proto-North Halmahera",
["paa-nun"] = "Nungon",
["pab"] = "Pareci",
["pac"] = "ปาโกะห์",
["pad"] = "Paumarí",
["pae"] = "Pagibete",
["paf"] = "Paranawát",
["pag"] = "Pangasinan",
["pah"] = "Tenharim",
["pai"] = "Pe",
["pak"] = "Parakanã",
["pal"] = "เปอร์เซียกลาง",
["pam"] = "กาปัมปางัน",
["pao"] = "Northern Paiute",
["pap"] = "ปาเปียเมนตู",
["paq"] = "Parya",
["par"] = "Panamint",
["pas"] = "Papasena",
["pau"] = "ปาเลา",
["pav"] = "Wari'",
["paw"] = "Pawnee",
["pax"] = "Pankararé",
["pay"] = "Pech",
["paz"] = "Pankararú",
["pbb"] = "Páez",
["pbc"] = "Patamona",
["pbe"] = "Mezontla Popoloca",
["pbf"] = "Coyotepec Popoloca",
["pbg"] = "Paraujano",
["pbh"] = "Panare",
["pbi"] = "Podoko",
["pbl"] = "Mak (Nigeria)",
["pbm"] = "Puebla Mazatec",
["pbn"] = "Kpasam",
["pbo"] = "Papel",
["pbp"] = "Badyara",
["pbr"] = "Pangwa",
["pbs"] = "Central Pame",
["pbv"] = "ปนัร",
["pby"] = "Pyu (New Guinea)",
["pca"] = "Santa Inés Ahuatempan Popoloca",
["pcb"] = "ปอร์",
["pcc"] = "ปู้อี",
["pcd"] = "ปีการ์",
["pce"] = "Ruching Palaung",
["pcf"] = "Paliyan",
["pcg"] = "Paniya",
["pch"] = "Pardhan",
["pci"] = "Duruwa",
["pcj"] = "Parenga",
["pck"] = "Paite",
["pcl"] = "Pardhi",
["pcm"] = "Nigerian Pidgin",
["pcn"] = "Piti",
["pcp"] = "Pacahuara",
["pcw"] = "Pyapun",
["pda"] = "Anam",
["pdc"] = "เยอรมันแบบเพนซิลเวเนีย",
["pdi"] = "Pa Di",
["pdn"] = "Fedan",
["pdo"] = "Padoe",
["pdt"] = "เพลาท์ดิทช์",
["pdu"] = "กะยัน",
["pea"] = "Peranakan Indonesian",
["peb"] = "Eastern Pomo",
["ped"] = "Mala (New Guinea)",
["pee"] = "Taje",
["pef"] = "Northeastern Pomo",
["peg"] = "Pengo",
["peh"] = "Bonan",
["pei"] = "Chichimeca-Jonaz",
["pej"] = "Northern Pomo",
["pek"] = "Penchal",
["pel"] = "Pekal",
["pem"] = "Phende",
["peo"] = "เปอร์เซียเก่า",
["pep"] = "Kunja",
["peq"] = "Southern Pomo",
["pev"] = "Pémono",
["pex"] = "Petats",
["pey"] = "Petjo",
["pez"] = "Eastern Penan",
["pfa"] = "Pááfang",
["pfe"] = "Peere",
["pga"] = "Juba Arabic",
["pgd"] = "คานธาระ",
["pgg"] = "ปังควาฬฺ",
["pgi"] = "Pagi",
["pgk"] = "Rerep",
["pgl"] = "Primitive Irish",
["pgn"] = "Paelignian",
["pgs"] = "Pangseng",
["pgu"] = "Pagu",
["pgz"] = "Papua New Guinean Sign Language",
["pha"] = "Pa-Hng",
["phd"] = "Phudagi",
["phg"] = "Phuong",
["phh"] = "Phukha",
["phi-din"] = "Dinapigue Agta",
["phi-kal-pro"] = "คาลาเมียนดั้งเดิม",
["phi-nag"] = "Nagtipunan Agta",
["phi-pro"] = "ฟิลิปปินส์ดั้งเดิม",
["phk"] = "พ่าเก",
["phl"] = "Palula",
["phm"] = "Phimbi",
["phn"] = "ฟินิเชีย",
["pho"] = "ผู้น้อย",
["phq"] = "Phana'",
["phr"] = "Pahari-Potwari",
["pht"] = "ผู้ไท",
["phu"] = "พวน",
["phv"] = "Pahlavani",
["phw"] = "Phangduwali",
["pi"] = "บาลี",
["pia"] = "Pima Bajo",
["pib"] = "Yine",
["pic"] = "Pinji",
["pid"] = "Piaroa",
["pie"] = "Piro",
["pif"] = "Pingelapese",
["pig"] = "Pisabo",
["pih"] = "Pitcairn-Norfolk",
["pii"] = "Pini",
["pij"] = "Pijao",
["pil"] = "Yom",
["pim"] = "Powhatan",
["pin"] = "Piame",
["pio"] = "Piapoco",
["pip"] = "Pero",
["pir"] = "Piratapuyo",
["pis"] = "Pijin",
["pit"] = "Pitta-Pitta",
["piu"] = "Pintupi-Luritja",
["piv"] = "Pileni",
["piw"] = "Pimbwe",
["pix"] = "Piu",
["piy"] = "Piya-Kwonci",
["piz"] = "Pije",
["pjt"] = "Pitjantjatjara",
["pkb"] = "Kipfokomo",
["pkc"] = "แพ็กเจ",
["pkg"] = "Pak-Tong",
["pkh"] = "Pankhu",
["pkn"] = "Pakanha",
["pko"] = "Pökoot",
["pkp"] = "ปูกาปูกา",
["pkr"] = "Attapady Kurumba",
["pks"] = "Pakistan Sign Language",
["pkt"] = "Maleng",
["pku"] = "Paku",
["pl"] = "โปแลนด์",
["pla"] = "Miani",
["plb"] = "Polonombauk",
["plc"] = "ปาลาวาโนตอนกลาง",
["ple"] = "Palu'e",
["plg"] = "Pilagá",
["plh"] = "Paulohi",
["plj"] = "Polci",
["plk"] = "Kohistani Shina",
["pll"] = "Shwe Palaung",
["pln"] = "Palenquero",
["plo"] = "Oluta Popoluca",
["plq"] = "Palaic",
["plr"] = "Palaka Senoufo",
["pls"] = "San Marcos Tlalcoyalco Popoloca",
["plu"] = "Palikur",
["plv"] = "ปาลาวาโนตะวันตกเฉียงใต้",
["plw"] = "ปาลาวาโนแบบบรูกส์พอยต์",
["ply"] = "Bolyu",
["plz"] = "Paluan",
["pma"] = "Paamese",
["pmb"] = "Pambia",
["pmd"] = "Pallanganmiddang",
["pme"] = "Pwaamèi",
["pmf"] = "Pamona",
["pmi"] = "Northern Pumi",
["pmj"] = "Southern Pumi",
["pmk"] = "Pamlico",
["pml"] = "Sabir",
["pmm"] = "Pol",
["pmn"] = "Pam",
["pmo"] = "Pom",
["pmq"] = "Northern Pame",
["pmr"] = "Paynamar",
["pms"] = "ปีเยมอนเต",
["pmt"] = "Tuamotuan",
["pmu"] = "Mirpur Panjabi",
["pmw"] = "Plains Miwok",
["pmx"] = "Poumei Naga",
["pmy"] = "Papuan Malay",
["pmz"] = "Southern Pame",
["pna"] = "Punan Bah-Biau",
["pnc"] = "Pannei",
["pnd"] = "Mpinda",
["pne"] = "Western Penan",
["png"] = "Pongu",
["pnh"] = "Penrhyn",
["pni"] = "Aoheng",
["pnj"] = "Pinjarup",
["pnk"] = "Paunaka",
["pnl"] = "Paleni",
["pnm"] = "Punan Batu",
["pnn"] = "Pinai-Hagahai",
["pno"] = "Panobo",
["pnp"] = "Pancana",
["pnq"] = "Pana (West Africa)",
["pnr"] = "Panim",
["pns"] = "Ponosakan",
["pnt"] = "Pontic Greek",
["pnu"] = "Jiongnai Bunu",
["pnv"] = "Pinigura",
["pnw"] = "Panyjima",
["pnx"] = "Phong-Kniang",
["pny"] = "Pinyin",
["pnz"] = "Pana (Central Africa)",
["poc"] = "Poqomam",
["poe"] = "San Juan Atzingo Popoloca",
["pof"] = "Poke",
["pog"] = "Potiguára",
["poh"] = "Poqomchi'",
["poi"] = "Highland Popoluca",
["pok"] = "Pokangá",
["pom"] = "Southeastern Pomo",
["pon"] = "Pohnpeian",
["poo"] = "Central Pomo",
["pop"] = "Pwapwâ",
["poq"] = "Texistepec Popoluca",
["pos"] = "Sayula Popoluca",
["pot"] = "Potawatomi",
["pov"] = "ครีโอลกินี-บิสเซา",
["pow"] = "San Felipe Otlaltepec Popoloca",
["pox"] = "Polabian",
["poy"] = "Pogolo",
["poz-abi"] = "Abai",
["poz-bal"] = "Baliledo",
["poz-btk-pro"] = "Proto-Bungku-Tolaki",
["poz-cet-pro"] = "มาลาโย-พอลินีเชียนตอนกลาง-ตะวันออกดั้งเดิม",
["poz-hce-pro"] = "Proto-Halmahera-Cenderawasih",
["poz-lgx-pro"] = "ลัมปุงกิกดั้งเดิม",
["poz-mcm-pro"] = "มาลาโย-จามิกดั้งเดิม",
["poz-mic-pro"] = "ไมโครนีเซียนดั้งเดิม",
["poz-mly-pro"] = "มาเลย์อิกดั้งเดิม",
["poz-msa-pro"] = "มาลาโย-ซุมบาวันดั้งเดิม",
["poz-oce-pro"] = "โอเชียนิกดั้งเดิม",
["poz-pep-pro"] = "พอลินีเชียนตะวันออกดั้งเดิม",
["poz-pnp-pro"] = "นิวเคลียร์พอลินีเชียนดั้งเดิม",
["poz-pol-pro"] = "พอลินีเชียนดั้งเดิม",
["poz-pro"] = "มาลาโย-พอลินีเชียนดั้งเดิม",
["poz-sml"] = "Sarawak Malay",
["poz-ssw-pro"] = "ซูลาเวซีใต้ดั้งเดิม",
["poz-swa-pro"] = "ซาราวักเหนือดั้งเดิม",
["poz-ter"] = "มลายูแบบตรังกานู",
["ppa"] = "Pao",
["ppe"] = "Papi",
["ppi"] = "Paipai",
["ppk"] = "Uma",
["ppl"] = "ปีปิล",
["ppm"] = "Papuma",
["ppn"] = "Papapana",
["ppo"] = "Folopa",
["ppq"] = "Pei",
["pps"] = "San Luís Temalacayuca Popoloca",
["ppt"] = "Pa",
["ppu"] = "Papora",
["pqa"] = "Pa'a",
["pqe-pro"] = "มาลาโย-พอลินีเชียนตะวันออกดั้งเดิม",
["pqm"] = "Malecite-Passamaquoddy",
["pra"] = "ปรากฤต",
["pra-niy"] = "Niya Prakrit",
["prc"] = "Parachi",
["pre"] = "Principense",
["prf"] = "Paranan",
["prg"] = "Old Prussian",
["prh"] = "Porohanon",
["pri"] = "Paicî",
["prk"] = "Parauk",
["prl"] = "Peruvian Sign Language",
["prm"] = "Kibiri",
["prn"] = "Prasuni",
["pro"] = "อุตซิตาเก่า",
["prq"] = "Ashéninka Perené",
["prr"] = "Puri",
["prt"] = "Phai",
["pru"] = "Puragi",
["prw"] = "Parawen",
["prx"] = "Purik",
["prz"] = "Providencia Sign Language",
["ps"] = "ปาทาน",
["psa"] = "Asue Awyu",
["psc"] = "Persian Sign Language",
["psd"] = "Plains Indian Sign Language",
["pse"] = "มลายูตอนกลาง",
["psg"] = "Penang Sign Language",
["psh"] = "Southwest Pashayi",
["psi"] = "Southeast Pashayi",
["psl"] = "Puerto Rican Sign Language",
["psm"] = "Pauserna",
["psn"] = "Panasuan",
["pso"] = "Polish Sign Language",
["psp"] = "Philippine Sign Language",
["psq"] = "Pasi",
["psr"] = "Portuguese Sign Language",
["pss"] = "Kaulong",
["psw"] = "Port Sandwich",
["psy"] = "Piscataway",
["pt"] = "โปรตุเกส",
["pta"] = "Pai Tavytera",
["pth"] = "Pataxó Hã-Ha-Hãe",
["pti"] = "Pintiini",
["ptn"] = "Patani",
["pto"] = "Zo'é",
["ptp"] = "Patep",
["ptq"] = "Pattapu",
["ptr"] = "Piamatsina",
["ptt"] = "Enrekang",
["ptu"] = "Bambam",
["ptv"] = "Port Vato",
["ptw"] = "Pentlatch",
["pty"] = "Pathiya",
["pua"] = "Purepecha",
["pub"] = "Purum",
["puc"] = "Punan Merap",
["pud"] = "Punan Aput",
["pue"] = "Puelche",
["puf"] = "Punan Merah",
["pug"] = "Phuie",
["pui"] = "Puinave",
["puj"] = "Punan Tubu",
["pum"] = "Puma",
["puo"] = "Puoc",
["pup"] = "Pulabu",
["puq"] = "Puquina",
["pur"] = "Puruborá",
["put"] = "Putoh",
["puu"] = "Punu",
["puw"] = "Puluwat",
["pux"] = "Puare",
["puy"] = "Purisimeño",
["pwa"] = "Pawaia",
["pwb"] = "Panawa",
["pwg"] = "Gapapaiwa",
["pwi"] = "Patwin",
["pwm"] = "Molbog",
["pwn"] = "ไปวัน",
["pwo"] = "กะเหรี่ยงโปตะวันตก",
["pwr"] = "Powari",
["pww"] = "กะเหรี่ยงโปเหนือ",
["pxm"] = "Quetzaltepec Mixe",
["pye"] = "Pye Krumen",
["pym"] = "Fyam",
["pyn"] = "Poyanáwa",
["pys"] = "Paraguayan Sign Language",
["pyu"] = "Puyuma",
["pyx"] = "ปยู",
["pyy"] = "Pyen",
["pzh"] = "Pazeh",
["pzn"] = "Para Naga",
["qfa-adm-pro"] = "เกรตอันดามันนีสดั้งเดิม",
["qfa-bet-pro"] = "เบ-ไทดั้งเดิม",
["qfa-cka-pro"] = "Proto-Chukotko-Kamchatkan",
["qfa-hur-pro"] = "Proto-Hurro-Urartian",
["qfa-kad-pro"] = "Proto-Kadu",
["qfa-kms-pro"] = "Proto-Kam-Sui",
["qfa-kor-pro"] = "เกาหลีดั้งเดิม",
["qfa-kra-pro"] = "ขร้าดั้งเดิม",
["qfa-lic-pro"] = "ไหลดั้งเดิม",
["qfa-onb-pro"] = "เบดั้งเดิม",
["qfa-ong-pro"] = "Proto-Ongan",
["qfa-tak-pro"] = "ขร้า-ไทดั้งเดิม",
["qfa-yen-pro"] = "Proto-Yeniseian",
["qfa-yuk-pro"] = "Proto-Yukaghir",
["qu"] = "เกชัว",
["qua"] = "Quapaw",
["quc"] = "K'iche'",
["qui"] = "Quileute",
["qum"] = "Sipakapense",
["qun"] = "Quinault",
["quq"] = "Quinqui",
["quv"] = "Sacapulteco",
["qvy"] = "Queyu",
["qwc"] = "เกชัวคลาสสิก",
["qwe-kch"] = "Kichwa",
["qwe-pro"] = "เกชวนดั้งเดิม",
["qwm"] = "คูมาน",
["qwt"] = "Kwalhioqua-Tlatskanai",
["qxs"] = "Southern Qiang",
["qya"] = "เควนยา",
["qyp"] = "Quiripi",
["raa"] = "Dungmali",
["rab"] = "Chamling",
["rac"] = "Rasawa",
["rad"] = "ระแด",
["raf"] = "Western Meohang",
["rag"] = "Logooli",
["rah"] = "Rabha",
["rai"] = "Ramoaaina",
["rak"] = "Tulu-Bohuai",
["ral"] = "Ralte",
["ram"] = "Canela",
["ran"] = "Riantana",
["rao"] = "Rao",
["rap"] = "ราปานูอี",
["raq"] = "Saam",
["rar"] = "ราโรโตงา",
["ras"] = "Tegali",
["rat"] = "Razajerdi",
["rau"] = "Raute",
["rav"] = "Sampang",
["raw"] = "เรอหวั่ง",
["rax"] = "Rang",
["ray"] = "Rapa",
["raz"] = "Rahambuu",
["rbb"] = "Rumai Palaung",
["rbk"] = "Northern Bontoc",
["rbl"] = "Miraya Bikol",
["rcf"] = "Réunion Creole French",
["rdb"] = "Rudbari",
["rea"] = "Rerau",
["reb"] = "Rembong",
["ree"] = "Rejang Kayan",
["reg"] = "Kara (Tanzania)",
["rei"] = "Reli",
["rej"] = "Rejang",
["rel"] = "Rendille",
["rem"] = "Remo",
["ren"] = "Rengao",
["rer"] = "Rer Bare",
["res"] = "Reshe",
["ret"] = "Retta",
["rey"] = "Reyesano",
["rga"] = "Roria",
["rge"] = "Romano-Greek",
["rgk"] = "Rangkas",
["rgn"] = "โรมัญญา",
["rgr"] = "Resígaro",
["rgs"] = "Southern Roglai",
["rgu"] = "Ringgou",
["rhg"] = "โรฮีนจา",
["rhp"] = "Yahang",
["ria"] = "Reang",
["rif"] = "ริฟ",
["ril"] = "Riang",
["rim"] = "Nyaturu",
["rin"] = "Nungu",
["rir"] = "Ribun",
["rit"] = "Ritarungo",
["riu"] = "Riung",
["rjg"] = "Rajong",
["rji"] = "Raji",
["rjs"] = "ราชพังสี",
["rka"] = "Kraol",
["rkb"] = "Rikbaktsa",
["rkh"] = "Rakahanga-Manihiki",
["rki"] = "ยะไข่",
["rkm"] = "Marka",
["rkt"] = "Kamta",
["rkw"] = "Arakwal",
["rm"] = "โรมานช์",
["rma"] = "Rama",
["rmb"] = "Rembarunga",
["rmc"] = "Carpathian Romani",
["rmd"] = "Traveller Danish",
["rme"] = "Angloromani",
["rmf"] = "Kalo Finnish Romani",
["rmg"] = "Traveller Norwegian",
["rmh"] = "Murkim",
["rmi"] = "Lomavren",
["rmk"] = "Romkun",
["rml"] = "Baltic Romani",
["rmm"] = "Roma",
["rmn"] = "Balkan Romani",
["rmo"] = "Sinte Romani",
["rmp"] = "Rempi",
["rmq"] = "Caló",
["rms"] = "Romanian Sign Language",
["rmt"] = "Domari",
["rmu"] = "Tavringer Romani",
["rmv"] = "Romanova",
["rmw"] = "Welsh Romani",
["rmx"] = "Romam",
["rmy"] = "Vlax Romani",
["rmz"] = "Marma",
["rnd"] = "Ruwund",
["rng"] = "Ronga",
["rnl"] = "Ranglong",
["rnn"] = "Roon",
["rnp"] = "Rongpo",
["rnw"] = "Rungwa",
["ro"] = "โรมาเนีย",
["roa-ang"] = "Angevin",
["roa-bbn"] = "บูร์บอแน-แบรีชง",
["roa-brg"] = "Bourguignon",
["roa-can"] = "Cantabrian",
["roa-cha"] = "Champenois",
["roa-fcm"] = "Franc-Comtois",
["roa-gal"] = "Gallo",
["roa-gib"] = "Gallo-Italic of Basilicata",
["roa-gis"] = "Gallo-Italic of Sicily",
["roa-leo"] = "เลออน",
["roa-lor"] = "Lorrain",
["roa-oca"] = "กาตาลาเก่า",
["roa-ole"] = "เลออนเก่า",
["roa-ona"] = "Old Navarro-Aragonese",
["roa-opt"] = "กาลิเซีย-โปรตุเกสเก่า",
["roa-orl"] = "Orléanais",
["roa-poi"] = "Poitevin-Saintongeais",
["roa-tar"] = "Tarantino",
["rob"] = "Tae'",
["roc"] = "Cacgia Roglai",
["rod"] = "Rogo",
["roe"] = "Ronji",
["rof"] = "Rombo",
["rog"] = "Northern Roglai",
["rol"] = "Romblomanon",
["rom"] = "โรมานี",
["roo"] = "Rotokas",
["rop"] = "Australian Kriol",
["ror"] = "Rongga",
["rou"] = "Runga",
["row"] = "Dela-Oenale",
["rpn"] = "Repanbitip",
["rpt"] = "Rapting",
["rri"] = "Ririo",
["rro"] = "Roro",
["rrt"] = "Arritinngithigh",
["rsb"] = "Romano-Serbian",
["rsk"] = "รูซินแบบพันโนเนีย",
["rsl"] = "มือรัสเซีย",
["rsm"] = "Miriwoong Sign Language",
["rsn"] = "Rwandan Sign Language",
["rtc"] = "Rungtu",
["rth"] = "Ratahan",
["rtm"] = "Rotuman",
["rtw"] = "Rathawi",
["ru"] = "รัสเซีย",
["rub"] = "Gungu",
["ruc"] = "Ruuli",
["rue"] = "รูซินแบบคาร์พาเทีย",
["ruf"] = "Luguru",
["rug"] = "Roviana",
["ruh"] = "Ruga",
["rui"] = "Rufiji",
["ruk"] = "Che",
["ruo"] = "Istro-Romanian",
["rup"] = "Aromanian",
["ruq"] = "Megleno-Romanian",
["rut"] = "Rutul",
["ruu"] = "Lanas Lobu",
["ruy"] = "Mala (Nigeria)",
["ruz"] = "Ruma",
["rw"] = "รวันดา-รุนดี",
["rwa"] = "Rawo",
["rwk"] = "Rwa",
["rwm"] = "Amba",
["rwo"] = "Rawa",
["rxd"] = "Ngardi",
["rxw"] = "Karuwali",
["ryn"] = "อามามิโอชิมะเหนือ",
["rys"] = "ยาเอยามะ",
["ryu"] = "โอกินาวะ",
["rzh"] = "Razihi",
["sa"] = "สันสกฤต",
["saa"] = "Saba",
["sab"] = "Buglere",
["sac"] = "Fox",
["sad"] = "Sandawe",
["sae"] = "Sabanê",
["saf"] = "Safaliba",
["sah"] = "ซาคา",
["sai-all"] = "Allentiac",
["sai-and"] = "Andoquero",
["sai-ayo"] = "Ayomán",
["sai-bae"] = "Baenan",
["sai-bag"] = "Bagua",
["sai-bet"] = "Betoi",
["sai-bor-pro"] = "Proto-Boran",
["sai-cac"] = "Cacán",
["sai-caq"] = "Caranqui",
["sai-car-pro"] = "Proto-Cariban",
["sai-cat"] = "Catacao",
["sai-cer-pro"] = "Proto-Cerrado",
["sai-chi"] = "Chirino",
["sai-chn"] = "Chaná",
["sai-chp"] = "Chapacura",
["sai-chr"] = "Charrua",
["sai-chu"] = "Churuya",
["sai-cje-pro"] = "Proto-Central Jê",
["sai-cmg"] = "Comechingon",
["sai-cno"] = "Chono",
["sai-cnr"] = "Cañari",
["sai-coe"] = "Coeruna",
["sai-col"] = "Colán",
["sai-cop"] = "Copallén",
["sai-crd"] = "Coroado Puri",
["sai-ctq"] = "Catuquinaru",
["sai-cul"] = "Culli",
["sai-cva"] = "Cueva",
["sai-esm"] = "Esmeralda",
["sai-ewa"] = "Ewarhuyana",
["sai-gam"] = "Gamela",
["sai-gay"] = "Gayón",
["sai-gmo"] = "Guamo",
["sai-gua"] = "Guachí",
["sai-gue"] = "Güenoa",
["sai-hau"] = "Haush",
["sai-jee-pro"] = "Proto-Jê",
["sai-jko"] = "Jeikó",
["sai-jrj"] = "Jirajara",
["sai-kat"] = "Katembri",
["sai-mal"] = "Malalí",
["sai-mar"] = "Maratino",
["sai-mat"] = "Matanawi",
["sai-mcn"] = "Mocana",
["sai-men"] = "Menien",
["sai-mil"] = "Millcayac",
["sai-mlb"] = "Malibu",
["sai-msk"] = "Masakará",
["sai-muc"] = "Mucuchí",
["sai-mue"] = "Muellama",
["sai-muz"] = "Muzo",
["sai-mys"] = "Maynas",
["sai-nat"] = "Natú",
["sai-nje-pro"] = "Proto-Northern Jê",
["sai-opo"] = "Opón",
["sai-oto"] = "Otomaco",
["sai-pal"] = "Palta",
["sai-pam"] = "Pamigua",
["sai-par"] = "Paratió",
["sai-peb"] = "Peba",
["sai-pnz"] = "Panzaleo",
["sai-prh"] = "Puruhá",
["sai-ptg"] = "Patagón",
["sai-pur"] = "Purukotó",
["sai-pyg"] = "Payaguá",
["sai-pyk"] = "Pykobjê",
["sai-qmb"] = "Quimbaya",
["sai-qtm"] = "Quitemo",
["sai-rab"] = "Rabona",
["sai-ram"] = "Ramanos",
["sai-sac"] = "Sácata",
["sai-san"] = "Sanaviron",
["sai-sap"] = "Sapará",
["sai-sec"] = "Sechura",
["sai-sin"] = "Sinúfana",
["sai-sje-pro"] = "Proto-Southern Jê",
["sai-tab"] = "Tabancale",
["sai-tal"] = "Tallán",
["sai-tap"] = "Tapayuna",
["sai-tar-pro"] = "Proto-Taranoan",
["sai-teu"] = "Teushen",
["sai-tim"] = "Timote",
["sai-tpr"] = "Taparita",
["sai-trr"] = "Tarairiú",
["sai-wai"] = "Waitaká",
["sai-way"] = "Wayumara",
["sai-wit-pro"] = "Proto-Witotoan",
["sai-wnm"] = "Wanham",
["sai-xoc"] = "Xocó",
["sai-yao"] = "Yao (South America)",
["sai-yar"] = "Yarumá",
["sai-yri"] = "Yuri",
["sai-yup"] = "Yupua",
["sai-yur"] = "Yurumanguí",
["saj"] = "Sahu",
["sak"] = "Sake",
["sal-pro"] = "Proto-Salish",
["sam"] = "Samaritan Aramaic",
["sao"] = "Sause",
["saq"] = "Samburu",
["sar"] = "Saraveca",
["sas"] = "Sasak",
["sat"] = "สันถาลี",
["sau"] = "Saleman",
["sav"] = "Saafi-Saafi",
["saw"] = "Sawi",
["sax"] = "Sa",
["say"] = "Saya",
["saz"] = "Saurashtra",
["sba"] = "Ngambay",
["sbb"] = "Simbo",
["sbc"] = "Gele'",
["sbd"] = "Southern Samo",
["sbe"] = "Saliba (New Guinea)",
["sbf"] = "Shabo",
["sbg"] = "Seget",
["sbh"] = "Sori-Harengan",
["sbi"] = "Seti",
["sbj"] = "Surbakhal",
["sbk"] = "Safwa",
["sbl"] = "Botolan Sambal",
["sbm"] = "Sagala",
["sbn"] = "Sindhi Bhil",
["sbo"] = "Sabüm",
["sbp"] = "Sangu (Tanzania)",
["sbq"] = "Sileibi",
["sbr"] = "Sembakung Murut",
["sbs"] = "Subiya",
["sbt"] = "Kimki",
["sbu"] = "Stod Bhoti",
["sbv"] = "Sabine",
["sbw"] = "Simba",
["sbx"] = "Seberuang",
["sby"] = "Soli",
["sbz"] = "Sara Kaba",
["sc"] = "ซาร์ดิเนีย",
["scb"] = "Chut",
["sce"] = "ตงเซียง",
["scf"] = "San Miguel Creole French",
["scg"] = "Sanggau",
["sch"] = "Sakachep",
["sci"] = "Sri Lankan Creole Malay",
["sck"] = "Sadri",
["scl"] = "Shina",
["scn"] = "ซิซิลี",
["sco"] = "สกอต",
["scp"] = "Yolmo",
["scq"] = "สะโอจ",
["scs"] = "North Slavey",
["scu"] = "Shumcho",
["scv"] = "Sheni",
["scw"] = "Sha",
["scx"] = "Sicel",
["scz"] = "Shetland",
["sd"] = "สินธ์",
["sda"] = "Toraja-Sa'dan",
["sdb"] = "Shabak",
["sdc"] = "ซัสซารี",
["sde"] = "Surubu",
["sdf"] = "Sarli",
["sdg"] = "Savi",
["sdh"] = "Southern Kurdish",
["sdj"] = "Suundi",
["sdk"] = "Sos Kundi",
["sdl"] = "Saudi Arabian Sign Language",
["sdm"] = "Semandang",
["sdn"] = "Gallurese",
["sdo"] = "Bukar-Sadung Bidayuh",
["sdp"] = "Sherdukpen",
["sdr"] = "Oraon Sadri",
["sds"] = "เบอร์เบอร์แบบตูนีเซีย",
["sdu"] = "Sarudu",
["sdv-daj-pro"] = "Proto-Daju",
["sdv-eje-pro"] = "Proto-Eastern Jebel",
["sdv-nil-pro"] = "Proto-Nilotic",
["sdv-nyi-pro"] = "Proto-Nyima",
["sdv-tmn-pro"] = "Proto-Taman",
["sdx"] = "Sibu Melanau",
["se"] = "ซามีเหนือ",
["sea"] = "เซอไม",
["sec"] = "Sechelt",
["sed"] = "Sedang",
["see"] = "Seneca",
["sef"] = "Cebaara Senoufo",
["seg"] = "Segeju",
["seh"] = "Sena",
["sei"] = "Seri",
["sej"] = "Sene",
["sek"] = "Sekani",
["sel-nor"] = "Northern Selkup",
["sel-pro"] = "Proto-Selkup",
["sel-sou"] = "Southern Selkup",
["sem-amm"] = "อัมโมน",
["sem-amo"] = "Amorite",
["sem-cha"] = "Chaha",
["sem-dad"] = "Dadanitic",
["sem-dum"] = "Dumaitic",
["sem-has"] = "Hasaitic",
["sem-his"] = "Hismaic",
["sem-mhr"] = "Muher",
["sem-pro"] = "เซมิติกดั้งเดิม",
["sem-saf"] = "Safaitic",
["sem-sam"] = "Samalian",
["sem-srb"] = "อาหรับใต้เก่า",
["sem-tay"] = "Taymanitic",
["sem-tha"] = "Thamudic",
["sem-wes-pro"] = "เซมิติกตะวันตกดั้งเดิม",
["sen"] = "Nanerigé Sénoufo",
["seo"] = "Suarmin",
["sep"] = "Sìcìté Sénoufo",
["seq"] = "Senara Sénoufo",
["ser"] = "Serrano",
["ses"] = "Koyraboro Senni",
["set"] = "Sentani",
["seu"] = "Serui-Laut",
["sev"] = "Nyarafolo Senoufo",
["sew"] = "Sewa Bay",
["sey"] = "Secoya",
["sez"] = "Senthang Chin",
["sfb"] = "French Belgian Sign Language",
["sfe"] = "Eastern Subanun",
["sfm"] = "Small Flowery Miao",
["sfs"] = "South African Sign Language",
["sfw"] = "Sehwi",
["sg"] = "ซังโก",
["sga"] = "ไอริชเก่า",
["sgb"] = "Mag-Anchi Ayta",
["sgc"] = "Kipsigis",
["sgd"] = "ซูรีเกาโนน",
["sge"] = "Segai",
["sgg"] = "Swiss-German Sign Language",
["sgh"] = "Shughni",
["sgi"] = "Suga",
["sgk"] = "Sangkong",
["sgm"] = "Singa",
["sgp"] = "Singpho",
["sgr"] = "Sangisari",
["sgs"] = "Samogitian",
["sgt"] = "Brokpake",
["sgu"] = "Salas",
["sgw"] = "Sebat Bet Gurage",
["sgx"] = "Sierra Leone Sign Language",
["sgy"] = "Sanglechi",
["sgz"] = "Sursurunga",
["sh"] = "เซอร์โบ-โครเอเชีย",
["sha"] = "Shall-Zwall",
["shb"] = "Ninam",
["shc"] = "Sonde",
["shd"] = "Kundal Shahi",
["she"] = "Sheko",
["shg"] = "Shua",
["shh"] = "Shoshone",
["shi"] = "Tashelhit",
["shj"] = "Shatt",
["shk"] = "Shilluk",
["shl"] = "Shendu",
["shm"] = "Shahrudi",
["shn"] = "ไทใหญ่",
["sho"] = "Shanga",
["shp"] = "Shipibo-Conibo",
["shq"] = "Sala",
["shr"] = "Shi",
["shs"] = "Shuswap",
["sht"] = "Shasta",
["shu"] = "Chadian Arabic",
["shv"] = "Shehri",
["shw"] = "Shwai",
["shx"] = "She",
["shy"] = "Tachawit",
["shz"] = "Syenara Senoufo",
["si"] = "สิงหล",
["sia"] = "Akkala Sami",
["sib"] = "Sebop",
["sid"] = "ซีดามา",
["sie"] = "Simaa",
["sif"] = "Siamou",
["sig"] = "Paasaal",
["sih"] = "Sîshëë",
["sii"] = "Shom Peng",
["sij"] = "Numbami",
["sik"] = "Sikiana",
["sil"] = "Tumulung Sisaala",
["sim"] = "Seim",
["sio-pro"] = "Proto-Siouan",
["sip"] = "สิกขิม",
["siq"] = "Sonia",
["sir"] = "Siri",
["sis"] = "Siuslaw",
["sit-aao-pro"] = "Proto-Central Naga",
["sit-bai-pro"] = "Proto-Bai",
["sit-ban"] = "Bangru",
["sit-bdi-pro"] = "Proto-Bodish",
["sit-bok"] = "Bokar",
["sit-cai"] = "Caijia",
["sit-cha"] = "Chairel",
["sit-ers-pro"] = "Proto-Ersuic",
["sit-hrs-pro"] = "Proto-Hrusish",
["sit-jap"] = "Japhug",
["sit-kha-pro"] = "Proto-Kham",
["sit-khb-pro"] = "Proto-Kho-Bwa",
["sit-khp-pro"] = "Proto-Puroik",
["sit-khw-pro"] = "Proto-Western Kho-Bwa",
["sit-kon-pro"] = "Proto-Northern Naga",
["sit-liz"] = "Lizu",
["sit-lnj"] = "Longjia",
["sit-lrn"] = "Luren",
["sit-luu-pro"] = "ลูอิชดั้งเดิม",
["sit-nas-pro"] = "Proto-Naish",
["sit-prn"] = "Puiron",
["sit-pro"] = "ซีโน-ทิเบตันดั้งเดิม",
["sit-sit"] = "Situ",
["sit-tam-pro"] = "Proto-Tamangic",
["sit-tan-pro"] = "Proto-Tani",
["sit-tgm"] = "ตางัม",
["sit-tng-pro"] = "Proto-Tangkhulic",
["sit-tos"] = "Tosu",
["sit-tsh"] = "Tshobdun",
["sit-zbu"] = "Zbu",
["siu"] = "Sinagen",
["siv"] = "Sumariup",
["siw"] = "Siwai",
["six"] = "Sumau",
["siy"] = "Sivandi",
["siz"] = "Siwi",
["sja"] = "Epena",
["sjb"] = "Sajau Basap",
["sjc"] = "Shaojiang Min",
["sjd"] = "ซามีแบบกิลดิน",
["sje"] = "ซามีแบบปีเต",
["sjg"] = "Assangori",
["sjk"] = "Kemi Sami",
["sjl"] = "Miji",
["sjm"] = "Mapun",
["sjn"] = "ซินดาริน",
["sjo"] = "Xibe",
["sjp"] = "Surjapuri",
["sjr"] = "Siar-Lak",
["sjs"] = "Senhaja de Srair",
["sjt"] = "Ter Sami",
["sju"] = "Ume Sami",
["sjw"] = "Shawnee",
["sk"] = "สโลวัก",
["ska"] = "Skagit",
["skb"] = "แสก",
["skc"] = "Ma Manda",
["skd"] = "Southern Sierra Miwok",
["ske"] = "Ske",
["skf"] = "Mekéns",
["skh"] = "Sikule",
["ski"] = "Sika",
["skj"] = "Seke",
["skk"] = "Sok",
["skm"] = "Sakam",
["skn"] = "Kolibugan Subanon",
["sko"] = "Seko Tengah",
["skp"] = "Sekapan",
["skq"] = "Sininkere",
["skr"] = "Saraiki",
["sks"] = "ไมยา",
["skt"] = "Sakata",
["sku"] = "Sakao",
["skv"] = "Skou",
["skw"] = "Skepi Creole Dutch",
["skx"] = "Seko Padang",
["sky"] = "ซีกายานา",
["skz"] = "Sekar",
["sl"] = "สโลวีเนีย",
["sla-pro"] = "สลาวิกดั้งเดิม",
["slc"] = "Saliba (Colombia)",
["sld"] = "Sisaala",
["sle"] = "Sholaga",
["slf"] = "Swiss-Italian Sign Language",
["slg"] = "Selungai Murut",
["slh"] = "Southern Puget Sound Salish",
["slj"] = "Salumá",
["sll"] = "Salt-Yui",
["slm"] = "ซามาแบบปางูตารัน",
["sln"] = "Salinan",
["slp"] = "Lamaholot",
["slr"] = "ซาลาร์",
["sls"] = "Singapore Sign Language",
["slt"] = "Sila",
["slu"] = "Selaru",
["slw"] = "Sialum",
["slx"] = "Salampasu",
["sly"] = "Selayar",
["slz"] = "Ma'ya",
["sm"] = "ซามัว",
["sma"] = "ซามีใต้",
["smb"] = "Simbari",
["smc"] = "Som",
["smd"] = "Sama",
["smf"] = "Auwe",
["smg"] = "Simbali",
["smh"] = "Samei",
["smi-pro"] = "ซามิกดั้งเดิม",
["smj"] = "ซามีแบบลูเล",
["smk"] = "โบลีเนา",
["sml"] = "ซามาตอนกลาง",
["smm"] = "Musasa",
["smn"] = "ซามีแบบอีนารี",
["smp"] = "Samaritan Hebrew",
["smq"] = "Samo",
["smr"] = "Simeulue",
["sms"] = "Skolt Sami",
["smt"] = "Simte",
["smu"] = "สมราย",
["smv"] = "Samvedi",
["smw"] = "Sumbawa",
["smx"] = "Samba",
["smy"] = "Semnani",
["smz"] = "Simeku",
["sn"] = "โชนา",
["snb"] = "Sebuyau",
["snc"] = "Sinaugoro",
["sne"] = "Bau Bidayuh",
["snf"] = "Noon",
["sng"] = "Sanga (Congo)",
["sni"] = "Sensi",
["snj"] = "Riverain Sango",
["snk"] = "Soninke",
["snl"] = "Sangil",
["snm"] = "Southern Ma'di",
["snn"] = "Siona",
["sno"] = "Snohomish",
["snp"] = "Siane",
["snq"] = "Sangu (Gabon)",
["snr"] = "Sihan",
["sns"] = "Nahavaq",
["snu"] = "Senggi",
["snv"] = "Sa'ban",
["snw"] = "Selee",
["snx"] = "Sam",
["sny"] = "Saniyo-Hiyewe",
["snz"] = "Kou",
["so"] = "โซมาลี",
["soa"] = "โซ่ง",
["sob"] = "Sobei",
["soc"] = "Soko",
["sod"] = "Songoora",
["soe"] = "Songomeno",
["sog"] = "Sogdian",
["soh"] = "Aka (Sudan)",
["soi"] = "Sonha",
["sok"] = "Sokoro",
["sol"] = "Solos",
["son-pro"] = "Proto-Songhay",
["soo"] = "Nsong",
["sop"] = "Songe",
["soq"] = "Kanasi",
["sor"] = "Somrai",
["sos"] = "Seenku",
["sou"] = "ปักษ์ใต้",
["sov"] = "Sonsorolese",
["sow"] = "Sowanda",
["sox"] = "Swo",
["soy"] = "Miyobe",
["soz"] = "Temi",
["spb"] = "Sepa (Indonesia)",
["spc"] = "Sapé",
["spd"] = "Saep",
["spe"] = "Sepa (New Guinea)",
["spg"] = "Sian",
["spi"] = "Saponi",
["spk"] = "Sengo",
["spl"] = "Selepet",
["spm"] = "Sepen",
["spn"] = "Sanapaná",
["spo"] = "Spokane",
["spp"] = "Supyire",
["spr"] = "Saparua",
["sps"] = "Saposa",
["spt"] = "Spiti Bhoti",
["spu"] = "Sapuan",
["spv"] = "Sambalpuri",
["spx"] = "South Picene",
["spy"] = "Sabaot",
["sq"] = "แอลเบเนีย",
["sqa"] = "Shama-Sambuga",
["sqh"] = "Shau",
["sqj-pro"] = "แอลเบเนียนดั้งเดิม",
["sqk"] = "Albanian Sign Language",
["sqm"] = "Suma",
["sqn"] = "Susquehannock",
["sqo"] = "Sorkhei",
["sqq"] = "Sou",
["sqr"] = "Siculo-Arabic",
["sqs"] = "Sri Lankan Sign Language",
["sqt"] = "Soqotri",
["squ"] = "Squamish",
["sra"] = "Saruga",
["srb"] = "Sora",
["sre"] = "Sara",
["srf"] = "Nafi",
["srg"] = "Sulod",
["srh"] = "Sarikoli",
["sri"] = "Siriano",
["srk"] = "Serudung Murut",
["srl"] = "Isirawa",
["srm"] = "ซารามักกา",
["srn"] = "Sranan Tongo",
["srq"] = "Sirionó",
["srr"] = "Serer",
["srs"] = "Tsuut'ina",
["srt"] = "Sauri",
["sru"] = "Suruí",
["srv"] = "Waray Sorsogon",
["srw"] = "Serua",
["srx"] = "Sirmauri",
["sry"] = "Sera",
["srz"] = "Shahmirzadi",
["ss"] = "Swazi",
["ssa-klk-pro"] = "Proto-Kuliak",
["ssa-kom-pro"] = "Proto-Koman",
["ssa-pro"] = "Proto-Nilo-Saharan",
["ssb"] = "Southern Sama",
["ssc"] = "Suba-Simbiti",
["ssd"] = "Siroi",
["sse"] = "Balangingi",
["ssf"] = "Thao",
["ssg"] = "Seimat",
["ssh"] = "Shihhi Arabic",
["ssi"] = "Sansi",
["ssj"] = "Sausi",
["ssk"] = "Sunam",
["ssl"] = "Western Sisaala",
["ssm"] = "Semnam",
["sso"] = "Sissano",
["ssp"] = "Spanish Sign Language",
["ssq"] = "So'a",
["ssr"] = "Swiss-French Sign Language",
["sss"] = "Sô",
["sst"] = "Sinasina",
["ssu"] = "Susuami",
["ssv"] = "Shark Bay",
["ssx"] = "Samberigi",
["ssy"] = "ซาโฮ",
["ssz"] = "Sengseng",
["st"] = "ซูทู",
["stb"] = "Northern Subanen",
["std"] = "Sentinelese",
["ste"] = "Liana-Seti",
["stf"] = "Seta",
["stg"] = "Trieng",
["sth"] = "Shelta",
["sti"] = "Bulo Stieng",
["stj"] = "Matya Samo",
["stk"] = "Arammba",
["stm"] = "Setaman",
["stn"] = "Owa",
["sto"] = "Stoney",
["stp"] = "Southeastern Tepehuan",
["stq"] = "ฟรีเชียแบบซาเทอร์ลันท์",
["str"] = "Saanich",
["sts"] = "Shumashti",
["stt"] = "Budeh Stieng",
["stu"] = "Samtao",
["stv"] = "Silt'e",
["stw"] = "Satawalese",
["sty"] = "Siberian Tatar",
["su"] = "ซุนดา",
["sua"] = "Sulka",
["sub"] = "Suku",
["suc"] = "Western Subanon",
["sue"] = "Suena",
["sug"] = "Suganga",
["sui"] = "Suki",
["suk"] = "Sukuma",
["suq"] = "Suri",
["sur"] = "Mwaghavul",
["sus"] = "Susu",
["sut"] = "Subtiaba",
["suv"] = "Puroik",
["suw"] = "Sumbwa",
["sux"] = "ซูเมอร์",
["suy"] = "Suyá",
["suz"] = "Sunwar",
["sv"] = "สวีเดน",
["sva"] = "Svan",
["svb"] = "Ulau-Suain",
["svc"] = "Vincentian Creole English",
["sve"] = "Serili",
["svk"] = "Slovakian Sign Language",
["svm"] = "Slavomolisano",
["svs"] = "Savosavo",
["svx"] = "Skalvian",
["sw"] = "สวาฮีลี",
["swb"] = "Maore Comorian",
["swf"] = "Sere",
["swg"] = "Swabian",
["swi"] = "สุ่ย",
["swj"] = "Sira",
["swl"] = "Swedish Sign Language",
["swm"] = "Samosa",
["swn"] = "Sokna",
["swo"] = "Shanenawa",
["swp"] = "Suau",
["swq"] = "Sharwa",
["swr"] = "Saweru",
["sws"] = "Seluwasan",
["swt"] = "Sawila",
["swu"] = "Suwawa",
["sww"] = "Sowa",
["swx"] = "Suruahá",
["swy"] = "Sarua",
["sxb"] = "Suba",
["sxc"] = "Sicanian",
["sxe"] = "Sighu",
["sxg"] = "Shixing",
["sxk"] = "Southern Kalapuya",
["sxl"] = "Selonian",
["sxm"] = "ซำเร",
["sxn"] = "Sangir",
["sxo"] = "Sorothaptic",
["sxr"] = "Saaroa",
["sxs"] = "Sasaru",
["sxw"] = "Saxwe Gbe",
["sya"] = "Siang",
["syb"] = "Central Subanen",
["syc"] = "ซีรีแอกคลาสสิก",
["syd-pro"] = "Proto-Samoyedic",
["syi"] = "Seki",
["syk"] = "Sukur",
["syl"] = "สิเลฏ",
["sym"] = "Maya Samo",
["syn"] = "Senaya",
["syo"] = "Suoy",
["sys"] = "Sinyar",
["syw"] = "Kagate",
["syx"] = "Osamayi",
["syy"] = "Al-Sayyid Bedouin Sign Language",
["sza"] = "Semelai",
["szb"] = "Ngalum",
["szc"] = "Semaq Beri",
["szd"] = "Seru",
["sze"] = "Seze",
["szg"] = "Sengele",
["szl"] = "ไซลีเซีย",
["szn"] = "Sula",
["szp"] = "Suabo",
["szv"] = "Isubu",
["szw"] = "Sawai",
["szy"] = "ซากีซายา",
["ta"] = "ทมิฬ",
["taa"] = "Lower Tanana",
["tab"] = "ทาบาซารัน",
["tac"] = "Lowland Tarahumara",
["tad"] = "Tause",
["tae"] = "Tariana",
["taf"] = "Tapirapé",
["tag"] = "Tagoi",
["tai-pro"] = "ไทดั้งเดิม",
["tai-swe-pro"] = "ไทตะวันตกเฉียงใต้ดั้งเดิม",
["taj"] = "Eastern Tamang",
["tak"] = "Tala",
["tal"] = "Tal",
["tan"] = "Tangale",
["tao"] = "ยามี",
["tap"] = "Taabwa",
["tar"] = "Central Tarahumara",
["tas"] = "Tây Bồi",
["tau"] = "Upper Tanana",
["tav"] = "Tatuyo",
["taw"] = "Tai",
["tax"] = "Tamki",
["tay"] = "Atayal",
["taz"] = "Tocho",
["tba"] = "Aikanã",
["tbb"] = "Tapeba",
["tbc"] = "Takia",
["tbd"] = "Kaki Ae",
["tbe"] = "Tanimbili",
["tbf"] = "Mandara",
["tbg"] = "North Tairora",
["tbh"] = "Thurawal",
["tbi"] = "Gaam",
["tbj"] = "Tiang",
["tbk"] = "Calamian Tagbanwa",
["tbl"] = "ตโบลี",
["tbm"] = "Tagbu",
["tbn"] = "Barro Negro Tunebo",
["tbo"] = "Tawala",
["tbp"] = "Taworta",
["tbq-bdg-pro"] = "โบโด-กาโรดั้งเดิม",
["tbq-blg"] = "Bailang",
["tbq-brm-pro"] = "Proto-Burmish",
["tbq-gkh"] = "Gokhy",
["tbq-kuk-pro"] = "Proto-Kuki-Chin",
["tbq-lal-pro"] = "Proto-Lalo",
["tbq-laz"] = "Laze",
["tbq-lob-pro"] = "โลโล-เบอร์มีซดั้งเดิม",
["tbq-lol-pro"] = "โลโลอิชดั้งเดิม",
["tbq-mil"] = "Milang",
["tbq-mor"] = "Moran",
["tbq-ngo"] = "Ngochang",
["tbr"] = "Tumtum",
["tbs"] = "Tanguat",
["tbt"] = "Kitembo",
["tbu"] = "Tubar",
["tbv"] = "Tobo",
["tbw"] = "Aborlan Tagbanwa",
["tbx"] = "Kapin",
["tby"] = "Tabaru",
["tbz"] = "Ditammari",
["tca"] = "Ticuna",
["tcb"] = "Tanacross",
["tcc"] = "Datooga",
["tcd"] = "Tafi",
["tce"] = "Southern Tutchone",
["tcf"] = "Malinaltepec Tlapanec",
["tcg"] = "Tamagario",
["tch"] = "Turks and Caicos Creole English",
["tci"] = "Wára",
["tck"] = "Tchitchege",
["tcl"] = "Taman (Myanmar)",
["tcm"] = "Tanahmerah",
["tco"] = "Taungyo",
["tcp"] = "Tawr Chin",
["tcq"] = "Kaiy",
["tcs"] = "ครีโอลช่องแคบทอร์เรส",
["tct"] = "T'en",
["tcu"] = "Southeastern Tarahumara",
["tcw"] = "Tecpatlán Totonac",
["tcx"] = "โตทา",
["tcy"] = "ตูลู",
["tcz"] = "Thado Chin",
["tda"] = "Tagdal",
["tdb"] = "Panchpargania",
["tdc"] = "Emberá-Tadó",
["tdd"] = "ไทใต้คง",
["tde"] = "Tiranige Diga Dogon",
["tdf"] = "Talieng",
["tdg"] = "Western Tamang",
["tdh"] = "Thulung",
["tdi"] = "Tomadino",
["tdj"] = "Tajio",
["tdk"] = "Tambas",
["tdl"] = "Sur",
["tdm"] = "Taruma",
["tdn"] = "Tondano",
["tdo"] = "Teme",
["tdq"] = "Tita",
["tdr"] = "Todrah",
["tds"] = "Doutai",
["tdt"] = "Tetun Dili",
["tdu"] = "Tempasuk Dusun",
["tdv"] = "Toro",
["tdy"] = "Tadyawan",
["te"] = "เตลูกู",
["tea"] = "เตอเมียร์",
["teb"] = "Tetete",
["tec"] = "Terik",
["ted"] = "Tepo Krumen",
["tee"] = "Huehuetla Tepehua",
["tef"] = "Teressa",
["teg"] = "Teke-Tege",
["teh"] = "Tehuelche",
["tei"] = "Torricelli",
["tek"] = "Ibali Teke",
["tem"] = "Temne",
["ten"] = "Tama (Colombia)",
["teo"] = "Ateso",
["tep"] = "Tepecano",
["teq"] = "Temein",
["ter"] = "Tereno",
["tes"] = "Tengger",
["tet"] = "เตตุน",
["teu"] = "Soo",
["tev"] = "Teor",
["tew"] = "Tewa",
["tex"] = "Tennet",
["tey"] = "Tulishi",
["tez"] = "Tetserret",
["tfi"] = "Tofin Gbe",
["tfn"] = "Dena'ina",
["tfo"] = "Tefaro",
["tfr"] = "Teribe",
["tft"] = "เตอร์นาเต",
["tg"] = "ทาจิก",
["tga"] = "Sagalla",
["tgb"] = "Tobilung",
["tgc"] = "Tigak",
["tgd"] = "Ciwogai",
["tge"] = "Eastern Gorkha Tamang",
["tgf"] = "Chali",
["tgh"] = "Tobagonian Creole English",
["tgi"] = "Lawunuia",
["tgn"] = "ตันดากาโนน",
["tgo"] = "Sudest",
["tgp"] = "Tangoa",
["tgq"] = "Tring",
["tgr"] = "Tareng",
["tgs"] = "Nume",
["tgt"] = "Central Tagbanwa",
["tgu"] = "Tanggu",
["tgv"] = "Tingui-Boto",
["tgw"] = "Tagwana Senoufo",
["tgx"] = "Tagish",
["tgy"] = "Togoyo",
["th"] = "ไทย",
["thc"] = "Tai Hang Tong",
["thd"] = "Kuuk Thaayorre",
["the"] = "Chitwania Tharu",
["thf"] = "Thangmi",
["thh"] = "Northern Tarahumara",
["thi"] = "Tai Long",
["thk"] = "Tharaka",
["thl"] = "Dangaura Tharu",
["thm"] = "ทะวืง",
["thn"] = "Thachanadan",
["thp"] = "Thompson",
["thq"] = "Kochila Tharu",
["thr"] = "Rana Tharu",
["ths"] = "Thakali",
["tht"] = "Tahltan",
["thu"] = "Thuri",
["thy"] = "Tha",
["ti"] = "ทือกรึญญา",
["tic"] = "Tira",
["tif"] = "Tifal",
["tig"] = "ทือเกร",
["tih"] = "Timugon Murut",
["tii"] = "Tiene",
["tij"] = "Tilung",
["tik"] = "Tikar",
["til"] = "Tillamook",
["tim"] = "Timbe",
["tin"] = "Tindi",
["tio"] = "Teop",
["tip"] = "Trimuris",
["tiq"] = "Tiéfo",
["tis"] = "Masadiit Itneg",
["tit"] = "Tinigua",
["tiu"] = "Adasen",
["tiv"] = "Tiv",
["tiw"] = "Tiwi",
["tix"] = "Southern Tiwa",
["tiy"] = "ตีรูไร",
["tiz"] = "Tai Hongjin",
["tja"] = "Tajuasohn",
["tjg"] = "Tunjung",
["tji"] = "Northern Tujia",
["tjl"] = "ไทแหล่ง",
["tjm"] = "Timucua",
["tjn"] = "Tonjon",
["tjs"] = "Southern Tujia",
["tju"] = "Tjurruru",
["tjw"] = "Chaap Wuurong",
["tk"] = "เติร์กเมน",
["tka"] = "Truká",
["tkb"] = "Buksa",
["tkd"] = "Tukudede",
["tke"] = "Takwane",
["tkf"] = "Tukumanféd",
["tkl"] = "Tokelauan",
["tkm"] = "Takelma",
["tkn"] = "โทกูโนชิมะ",
["tkp"] = "Tikopia",
["tkq"] = "Tee",
["tkr"] = "Tsakhur",
["tks"] = "Ramandi",
["tkt"] = "Kathoriya Tharu",
["tku"] = "Upper Necaxa Totonac",
["tkv"] = "Mur Pano",
["tkw"] = "Teanu",
["tkx"] = "Tangko",
["tkz"] = "Takua",
["tl"] = "ตากาล็อก",
["tla"] = "Southwestern Tepehuan",
["tlb"] = "Tobelo",
["tlc"] = "Misantla Totonac",
["tld"] = "Talaud",
["tlf"] = "Telefol",
["tlg"] = "Tofanma",
["tlh"] = "Klingon",
["tli"] = "Tlingit",
["tlj"] = "Talinga-Bwisi",
["tlk"] = "Taloki",
["tll"] = "Tetela",
["tlm"] = "Tolomako",
["tln"] = "Talondo'",
["tlo"] = "Talodi",
["tlp"] = "Filomena Mata-Coahuitlán Totonac",
["tlq"] = "Tai Loi",
["tlr"] = "Talise",
["tls"] = "Tambotalo",
["tlt"] = "Teluti",
["tlu"] = "Tulehu",
["tlv"] = "Taliabu",
["tlx"] = "Khehek",
["tly"] = "Talysh",
["tma"] = "Tama (Chad)",
["tmb"] = "Avava",
["tmc"] = "Tumak",
["tmd"] = "Haruai",
["tme"] = "Tremembé",
["tmf"] = "Toba-Maskoy",
["tmg"] = "Ternateño",
["tmh"] = "Tuareg",
["tmi"] = "Tutuba",
["tmj"] = "Samarokena",
["tmk"] = "Northwestern Tamang",
["tml"] = "Tamnim Citak",
["tmm"] = "Tai Thanh",
["tmn"] = "Taman (Indonesia)",
["tmo"] = "Temoq",
["tmq"] = "Tumleo",
["tms"] = "Tima",
["tmt"] = "Tasmate",
["tmu"] = "Iau",
["tmv"] = "Motembo",
["tmy"] = "Tami",
["tmz"] = "Tamanaku",
["tn"] = "สวานา",
["tna"] = "Tacana",
["tnb"] = "Western Tunebo",
["tnc"] = "Tanimuca-Retuarã",
["tnd"] = "Angosturas Tunebo",
["tne"] = "Tinoc Kallahan",
["tng"] = "Tobanga",
["tnh"] = "Maiani",
["tni"] = "Tandia",
["tnk"] = "Kwamera",
["tnl"] = "Lenakel",
["tnm"] = "Tabla",
["tnn"] = "North Tanna",
["tno"] = "Toromono",
["tnp"] = "Whitesands",
["tnq"] = "ตาอีโน",
["tnr"] = "Bedik",
["tns"] = "Tenis",
["tnt"] = "Tontemboan",
["tnu"] = "Tay Khang",
["tnv"] = "Tanchangya",
["tnw"] = "Tonsawang",
["tnx"] = "Tanema",
["tny"] = "Tongwe",
["tnz"] = "Ten'edn",
["to"] = "ตองงา",
["tob"] = "Toba",
["toc"] = "Coyutla Totonac",
["tod"] = "Toma",
["tof"] = "Gizrra",
["tog"] = "Tonga (Malawi)",
["toh"] = "Tonga (Mozambique)",
["toi"] = "Tonga (Zambia)",
["toj"] = "Tojolabal",
["tok"] = "Toki Pona",
["tol"] = "Tolowa",
["tom"] = "Tombulu",
["too"] = "Xicotepec de Juárez Totonac",
["top"] = "Papantla Totonac",
["toq"] = "Toposa",
["tor"] = "Togbo-Vara Banda",
["tos"] = "Highland Totonac",
["tou"] = "Tho",
["tov"] = "Upper Taromi",
["tow"] = "Jemez",
["tox"] = "Tobian",
["toy"] = "Topoiyo",
["toz"] = "To",
["tpa"] = "Taupota",
["tpc"] = "Azoyú Me'phaa",
["tpe"] = "Tippera",
["tpf"] = "Tarpia",
["tpg"] = "Kula",
["tpi"] = "ตอกปีซิน",
["tpj"] = "Tapieté",
["tpk"] = "Tupinikin",
["tpl"] = "Tlacoapa Me'phaa",
["tpm"] = "Tampulma",
["tpn"] = "Tupinambá",
["tpo"] = "Tai Pao",
["tpp"] = "Pisaflores Tepehua",
["tpq"] = "Tukpa",
["tpr"] = "Tuparí",
["tpt"] = "Tlachichilco Tepehua",
["tpu"] = "Tampuan",
["tpv"] = "Tanapag",
["tpw"] = "ตูปีเก่า",
["tpx"] = "Acatepec Me'phaa",
["tpy"] = "Trumai",
["tpz"] = "Tinputz",
["tqb"] = "Tembé",
["tql"] = "Lehali",
["tqm"] = "Turumsa",
["tqn"] = "Tenino",
["tqo"] = "Toaripi",
["tqp"] = "Tomoip",
["tqq"] = "Tunni",
["tqr"] = "Torona",
["tqt"] = "Western Totonac",
["tqu"] = "Touo",
["tqw"] = "Tonkawa",
["tr"] = "ตุรกี",
["tra"] = "Tirahi",
["trb"] = "Terebu",
["trc"] = "Copala Triqui",
["trd"] = "Turi",
["tre"] = "East Tarangan",
["trf"] = "Trinidadian Creole English",
["trg"] = "Lishán Didán",
["trh"] = "Turaka",
["tri"] = "Trió",
["trj"] = "Toram",
["trk-dkh"] = "Dukhan",
["trk-eog"] = "Early Old Oghuz",
["trk-oat"] = "ตุรกีแบบอานาโตเลียเก่า",
["trk-pro"] = "เตอร์กิกดั้งเดิม",
["trl"] = "Traveller Scottish",
["trm"] = "Tregami",
["trn"] = "Trinitario",
["tro"] = "Tarao",
["trp"] = "กอกบอรอก",
["trq"] = "San Martín Itunyoso Triqui",
["trr"] = "Taushiro",
["trs"] = "Chicahuaxtla Triqui",
["trt"] = "Tunggare",
["tru"] = "Turoyo",
["trv"] = "Taroko",
["trw"] = "Torwali",
["trx"] = "Tringgus",
["try"] = "ตุรุง",
["trz"] = "Torá",
["ts"] = "Tsonga",
["tsa"] = "Tsaangi",
["tsb"] = "Tsamai",
["tsc"] = "Tswa",
["tsd"] = "Tsakonian",
["tse"] = "Tunisian Sign Language",
["tsf"] = "Southwestern Tamang",
["tsg"] = "ซูก",
["tsh"] = "Tsuvan",
["tsi"] = "Tsimshian",
["tsj"] = "Tshangla",
["tsl"] = "Ts'ün-Lao",
["tsm"] = "Turkish Sign Language",
["tsp"] = "Northern Toussian",
["tsq"] = "มือไทย",
["tsr"] = "Akei",
["tss"] = "Taiwan Sign Language",
["tsu"] = "โจว",
["tsv"] = "Tsogo",
["tsw"] = "Tsishingini",
["tsx"] = "Mubami",
["tsy"] = "Tebul Sign Language",
["tt"] = "ตาตาร์",
["tta"] = "Tutelo",
["ttb"] = "Gaa",
["ttc"] = "Tektiteko",
["ttd"] = "Tauade",
["tte"] = "Bwanabwana",
["ttf"] = "Tuotomb",
["ttg"] = "Tutong",
["tth"] = "Upper Ta'oih",
["tti"] = "Tobati",
["ttj"] = "Tooro",
["ttk"] = "Totoro",
["ttl"] = "Totela",
["ttm"] = "Northern Tutchone",
["ttn"] = "Towei",
["tto"] = "Lower Ta'oih",
["ttp"] = "Tombelala",
["ttr"] = "Tera",
["tts"] = "อีสาน",
["ttt"] = "Tat",
["ttu"] = "Torau",
["ttv"] = "Titan",
["ttw"] = "Long Wat",
["tty"] = "Sikaritai",
["ttz"] = "Tsum",
["tua"] = "Wiarumus",
["tub"] = "Tübatulabal",
["tuc"] = "Mutu",
["tud"] = "Tuxá",
["tue"] = "Tuyuca",
["tuf"] = "Central Tunebo",
["tug"] = "Tunia",
["tuh"] = "Taulil",
["tui"] = "Tupuri",
["tuj"] = "Tugutil",
["tul"] = "Tula",
["tum"] = "Tumbuka",
["tun"] = "Tunica",
["tuo"] = "Tucano",
["tup-gua-pro"] = "ตูปี-กัวรานีดั้งเดิม",
["tup-kab"] = "Kabishiana",
["tup-pro"] = "ตูเปียนดั้งเดิม",
["tuq"] = "Tedaga",
["tus"] = "Tuscarora",
["tuu"] = "Tututni",
["tuv"] = "Turkana",
["tuw-alk"] = "Alchuka",
["tuw-bal"] = "Bala",
["tuw-kkl"] = "Kyakala",
["tuw-kli"] = "Kili",
["tuw-pro"] = "Proto-Tungusic",
["tuw-sol"] = "Solon",
["tux"] = "Tuxináwa",
["tuy"] = "Tugen",
["tuz"] = "Turka",
["tva"] = "Vaghua",
["tvd"] = "Tsuvadi",
["tve"] = "Te'un",
["tvk"] = "Southeast Ambrym",
["tvl"] = "ตูวาลู",
["tvm"] = "Tela-Masbuar",
["tvn"] = "Tavoyan",
["tvo"] = "ตีโดเร",
["tvs"] = "Taveta",
["tvt"] = "Tutsa Naga",
["tvu"] = "Tunen",
["tvw"] = "Sedoa",
["tvx"] = "Taivoan",
["tvy"] = "Timor Pidgin",
["twa"] = "Twana",
["twb"] = "Western Tawbuid",
["twc"] = "Teshenawa",
["twe"] = "Teiwa",
["twf"] = "เทาส์",
["twg"] = "Tereweng",
["twh"] = "ไทขาว",
["twm"] = "Tawang Monpa",
["twn"] = "Twendi",
["two"] = "Tswapong",
["twp"] = "Ere",
["twq"] = "Tasawaq",
["twr"] = "Southwestern Tarahumara",
["twt"] = "Turiwára",
["twu"] = "Termanu",
["tww"] = "Tuwari",
["twy"] = "Tawoyan",
["txa"] = "Tombonuo",
["txb"] = "โทแคเรียนบี",
["txc"] = "Tsetsaut",
["txe"] = "Totoli",
["txg"] = "ตังกุต",
["txh"] = "Thracian",
["txi"] = "Ikpeng",
["txj"] = "Tarjumo",
["txm"] = "Tomini",
["txn"] = "West Tarangan",
["txo"] = "Toto",
["txq"] = "Tii",
["txr"] = "Tartessian",
["txs"] = "Tonsea",
["txt"] = "Citak",
["txu"] = "Kayapó",
["txx"] = "Tatana",
["ty"] = "ตาฮีตี",
["tya"] = "Tauya",
["tye"] = "Kyenga",
["tyh"] = "O'du",
["tyi"] = "Teke-Tsaayi",
["tyj"] = "ไทแมน",
["tyl"] = "Thu Lao",
["tyn"] = "Kombai",
["typ"] = "Kuku-Thaypan",
["tyr"] = "ไทแดง",
["tys"] = "ซาปา",
["tyt"] = "Tày Tac",
["tyu"] = "Kua",
["tyv"] = "ตูวา",
["tyx"] = "Teke-Tyee",
["tyz"] = "ตั่ย",
["tza"] = "Tanzanian Sign Language",
["tzh"] = "Tzeltal",
["tzj"] = "Tz'utujil",
["tzl"] = "Talossan",
["tzm"] = "Central Atlas Tamazight",
["tzn"] = "Tugun",
["tzo"] = "โซตซิล",
["tzx"] = "Tabriak",
["uam"] = "Uamué",
["uan"] = "Kuan",
["uar"] = "Tairuma",
["uba"] = "Ubang",
["ubi"] = "Ubi",
["ubl"] = "Buhi'non Bikol",
["ubr"] = "Ubir",
["ubu"] = "Umbu-Ungu",
["uby"] = "Ubykh",
["uda"] = "Uda",
["ude"] = "Udihe",
["udg"] = "Muduga",
["udi"] = "อูดี",
["udj"] = "Ujir",
["udl"] = "Uldeme",
["udm"] = "อุดมูร์ต",
["udu"] = "Uduk",
["ues"] = "Kioko",
["ufi"] = "Ufim",
["ug"] = "อุยกูร์",
["uga"] = "ยูการิต",
["ugb"] = "Kuku-Ugbanh",
["uge"] = "Ughele",
["ugn"] = "Ugandan Sign Language",
["ugo"] = "กฺ๋อง",
["ugy"] = "Uruguayan Sign Language",
["uha"] = "Uhami",
["uhn"] = "Damal",
["uis"] = "Uisai",
["uiv"] = "Iyive",
["uji"] = "Tanjijili",
["uk"] = "ยูเครน",
["uka"] = "Kaburi",
["ukg"] = "Ukuriguma",
["ukh"] = "Ukhwejo",
["ukk"] = "Muak Sa-aak",
["ukl"] = "Ukrainian Sign Language",
["ukp"] = "Ukpe-Bayobiri",
["ukq"] = "Ukwa",
["uks"] = "Kaapor Sign Language",
["uku"] = "Ukue",
["ukw"] = "Ukwuani-Aboh-Ndoni",
["uky"] = "Kuuk Yak",
["ula"] = "Fungwa",
["ulb"] = "Olukumi",
["ulc"] = "Ulch",
["ule"] = "Lule",
["ulf"] = "Afra",
["uli"] = "Ulithian",
["ulk"] = "Meriam",
["ull"] = "Ullatan",
["ulm"] = "Ulumanda'",
["uln"] = "อุนเซอร์ด็อยทช์",
["ulu"] = "Uma' Lung",
["ulw"] = "Ulwa",
["uma"] = "Umatilla",
["umb"] = "Umbundu",
["umc"] = "Marrucinian",
["umd"] = "Umbindhamu",
["umg"] = "Umbuygamu",
["umi"] = "Ukit",
["umm"] = "Umon",
["umn"] = "Makyan Naga",
["umo"] = "Umotína",
["ump"] = "Umpila",
["umr"] = "Umbugarla",
["ums"] = "Pendau",
["umu"] = "Munsee",
["una"] = "North Watut",
["und"] = "Undetermined",
["une"] = "Uneme",
["ung"] = "Ngarinyin",
["unk"] = "Enawené-Nawé",
["unm"] = "Unami",
["unn"] = "Kurnai",
["unr"] = "Mundari",
["unu"] = "Unubahe",
["unx"] = "Munda",
["unz"] = "Unde Kaili",
["uok"] = "Uokha",
["uon"] = "Kulon",
["upi"] = "Umeda",
["upv"] = "Northeast Malakula",
["ur"] = "อูรดู",
["ura"] = "Urarina",
["urb"] = "Urubú-Kaapor",
["urc"] = "Urningangg",
["ure"] = "Uru",
["urf"] = "Uradhi",
["urg"] = "Urigina",
["urh"] = "Urhobo",
["uri"] = "Urim",
["urj-fin-pro"] = "ฟินนิกดั้งเดิม",
["urj-koo"] = "Old Komi",
["urj-kuk"] = "Kukkuzi",
["urj-kya"] = "Komi-Yazva",
["urj-mdv-pro"] = "Proto-Mordvinic",
["urj-prm-pro"] = "เปอร์มิกดั้งเดิม",
["urj-pro"] = "ยูราลิกดั้งเดิม",
["urj-ugr-pro"] = "ยูกริกดั้งเดิม",
["urk"] = "อูรักลาโวยจ",
["url"] = "Urali",
["urm"] = "Urapmin",
["urn"] = "Uruangnirin",
["uro"] = "Ura (New Guinea)",
["urp"] = "Uru-Pa-In",
["urr"] = "Löyöp",
["urt"] = "Urat",
["uru"] = "Urumi",
["urv"] = "Uruava",
["urw"] = "Sop",
["urx"] = "Urimo",
["ury"] = "Orya",
["urz"] = "Uru-Eu-Wau-Wau",
["usa"] = "Usarufa",
["ush"] = "Ushojo",
["usi"] = "Usui",
["usk"] = "Usaghade",
["usp"] = "Uspanteco",
["uss"] = "Saare",
["usu"] = "Uya",
["uta"] = "Otank",
["ute"] = "Ute",
["uth"] = "Hun",
["utp"] = "Aba",
["utr"] = "Etulo",
["utu"] = "Utu",
["uum"] = "Urum",
["uun"] = "Kulon-Pazeh",
["uur"] = "Ura (Vanuatu)",
["uuu"] = "U",
["uve"] = "West Uvean",
["uvh"] = "Uri",
["uvl"] = "Lote",
["uwa"] = "Kuku-Uwanh",
["uya"] = "Doko-Uyanga",
["uz"] = "อุซเบก",
["vaa"] = "Vaagri Booli",
["vae"] = "Vale",
["vag"] = "Vagla",
["vah"] = "Varhadi",
["vai"] = "ไว",
["vaj"] = "Sekele",
["val"] = "Vehes",
["vam"] = "Vanimo",
["van"] = "Valman",
["vao"] = "Vao",
["vap"] = "Vaiphei",
["var"] = "Huarijio",
["vas"] = "Vasavi",
["vau"] = "Vanuma",
["vav"] = "Varli",
["vay"] = "Vayu",
["vbb"] = "Southeast Babar",
["vbk"] = "Southwestern Bontoc",
["ve"] = "เวนดา",
["vec"] = "เวเนโต",
["ved"] = "Veddah",
["vem"] = "Vemgo-Mabas",
["veo"] = "Ventureño",
["vep"] = "เวปส์",
["ver"] = "Mom Jango",
["vgr"] = "Vaghri",
["vgt"] = "Flemish Sign Language",
["vi"] = "เวียดนาม",
["vic"] = "Virgin Islands Creole",
["vid"] = "Vidunda",
["vif"] = "Vili",
["vig"] = "Viemo",
["vil"] = "Vilela",
["vis"] = "Vishavan",
["vit"] = "Viti",
["viv"] = "Iduna",
["vjk"] = "Bajjika",
["vka"] = "Kariyarra",
["vki"] = "Ija-Zuba",
["vkj"] = "Kujarge",
["vkk"] = "Kaur",
["vkl"] = "Kulisusu",
["vkm"] = "Kamakan",
["vko"] = "Kodeoha",
["vkp"] = "Korlai Creole Portuguese",
["vkt"] = "Tenggarong Kutai Malay",
["vku"] = "Kurrama",
["vlp"] = "Valpei",
["vls"] = "West Flemish",
["vma"] = "Martuthunira",
["vmb"] = "Mbabaram",
["vmc"] = "Juxtlahuaca Mixtec",
["vmd"] = "Mudu Koraga",
["vme"] = "East Masela",
["vmf"] = "ฟรังโกเนียตะวันออก",
["vmg"] = "Minigir",
["vmh"] = "Maraghei",
["vmi"] = "Miwa",
["vmj"] = "Ixtayutla Mixtec",
["vmk"] = "Makhuwa-Shirima",
["vml"] = "Malgana",
["vmm"] = "Mitlatongo Mixtec",
["vmp"] = "Soyaltepec Mazatec",
["vmq"] = "Soyaltepec Mixtec",
["vmr"] = "Marenje",
["vmu"] = "Muluridyi",
["vmv"] = "Valley Maidu",
["vmw"] = "Makhuwa",
["vmx"] = "Tamazola Mixtec",
["vmy"] = "Ayautla Mazatec",
["vmz"] = "Mazatlán Mazatec",
["vnk"] = "Lovono",
["vnm"] = "Neve'ei",
["vnp"] = "Vunapu",
["vo"] = "โวลาปุก",
["vor"] = "Voro",
["vot"] = "โวต",
["vra"] = "Vera'a",
["vro"] = "เวอโร",
["vrs"] = "Varisi",
["vrt"] = "Burmbar",
["vsi"] = "Moldova Sign Language",
["vsl"] = "Venezuelan Sign Language",
["vsv"] = "Valencian Sign Language",
["vto"] = "Vitou",
["vum"] = "Vumbu",
["vun"] = "Vunjo",
["vut"] = "Vute",
["vwa"] = "Awa (China)",
["wa"] = "วัลลูน",
["waa"] = "Walla Walla",
["wab"] = "Wab",
["wac"] = "Wasco-Wishram",
["wad"] = "Wandamen",
["waf"] = "Wakoná",
["wag"] = "Wa'ema",
["wah"] = "Watubela",
["waj"] = "Waffa",
["wal"] = "Wolaytta",
["wam"] = "Massachusett",
["wan"] = "Wan",
["wao"] = "Wappo",
["wap"] = "Wapishana",
["waq"] = "Wageman",
["war"] = "วาไร",
["was"] = "Washo",
["wat"] = "Kaninuwa",
["wau"] = "Wauja",
["wav"] = "Waka",
["waw"] = "Waiwai",
["wax"] = "Watam",
["way"] = "Wayana",
["waz"] = "Wampur",
["wba"] = "วาราโอ",
["wbb"] = "Wabo",
["wbe"] = "Waritai",
["wbf"] = "Wara",
["wbh"] = "Wanda",
["wbi"] = "Wanji",
["wbj"] = "Alagwa",
["wbk"] = "Waigali",
["wbl"] = "Wakhi",
["wbm"] = "Wa",
["wbp"] = "Warlpiri",
["wbq"] = "Waddar",
["wbr"] = "Wagdi",
["wbt"] = "Wanman",
["wbv"] = "Wajarri",
["wbw"] = "Woi",
["wca"] = "Yanomam",
["wci"] = "Waci Gbe",
["wdd"] = "Wandji",
["wdg"] = "Wadaginam",
["wdj"] = "Wadjiginy",
["wdt"] = "Wendat",
["wdu"] = "Wadjigu",
["wdy"] = "Wadjabangayi",
["wea"] = "Wewaw",
["wec"] = "Wè Western",
["wed"] = "Wedau",
["weh"] = "Weh",
["wei"] = "Kiunum",
["wem"] = "Weme Gbe",
["weo"] = "Wemale",
["wer"] = "Weri",
["wes"] = "Cameroon Pidgin",
["wet"] = "Perai",
["weu"] = "Welaung",
["wew"] = "Weyewa",
["wfg"] = "Yafi",
["wga"] = "Wagaya",
["wgb"] = "Wagawaga",
["wgg"] = "Wangganguru",
["wgi"] = "Wahgi",
["wgo"] = "Waigeo",
["wgu"] = "Wirangu",
["wgy"] = "Warrgamay",
["wha"] = "Manusela",
["whg"] = "North Wahgi",
["whk"] = "Wahau Kenyah",
["whu"] = "Wahau Kayan",
["wib"] = "Southern Toussian",
["wic"] = "Wichita",
["wie"] = "Wik-Epa",
["wif"] = "Wik-Keyangan",
["wig"] = "Wik-Ngathana",
["wih"] = "Wik-Me'anha",
["wii"] = "Minidien",
["wij"] = "Wik-Iiyanh",
["wik"] = "Wikalkan",
["wil"] = "Wilawila",
["wim"] = "Wik-Mungkan",
["win"] = "วินเนอเบโก",
["wir"] = "Wiraféd",
["wiu"] = "Wiru",
["wiv"] = "Muduapa",
["wiy"] = "Wiyot",
["wja"] = "Waja",
["wji"] = "Warji",
["wka"] = "Kw'adza",
["wkb"] = "Kumbaran",
["wkd"] = "Mo",
["wkl"] = "Kalanadi",
["wku"] = "Kunduvadi",
["wkw"] = "Wakawaka",
["wky"] = "Wangkayutyuru",
["wla"] = "Walio",
["wlc"] = "Mwali Comorian",
["wle"] = "Wolane",
["wlg"] = "Kunbarlang",
["wli"] = "Waioli",
["wlk"] = "Wailaki",
["wll"] = "Wali (Sudan)",
["wlm"] = "เวลส์กลาง",
["wlo"] = "Wolio",
["wlr"] = "Wailapa",
["wls"] = "Wallisian",
["wlu"] = "Wuliwuli",
["wlv"] = "Wichí Lhamtés Vejoz",
["wlw"] = "Walak",
["wlx"] = "Wali (Ghana)",
["wly"] = "Waling",
["wmb"] = "Wambaya",
["wmc"] = "Wamas",
["wmd"] = "Mamaindé",
["wme"] = "Wambule",
["wmh"] = "Waima'a",
["wmi"] = "Wamin",
["wmm"] = "Maiwa (Indonesia)",
["wmn"] = "Waamwang",
["wmo"] = "Wam",
["wms"] = "Wambon",
["wmt"] = "Walmajarri",
["wmw"] = "มวานี",
["wmx"] = "Womo",
["wnb"] = "Wanambre",
["wnc"] = "Wantoat",
["wnd"] = "Wandarang",
["wne"] = "Waneci",
["wng"] = "Wanggom",
["wni"] = "Ndzwani Comorian",
["wnk"] = "Wanukaka",
["wnm"] = "Wanggamala",
["wno"] = "Wano",
["wnp"] = "Wanap",
["wnu"] = "Usan",
["wnw"] = "Wintu",
["wny"] = "Wanyi",
["wo"] = "โวลอฟ",
["woa"] = "Tyaraity",
["wob"] = "Wobé",
["woc"] = "Wogeo",
["wod"] = "Wolani",
["woe"] = "Woleaian",
["wog"] = "Wogamusin",
["woi"] = "Kamang",
["wok"] = "Longto",
["wom"] = "Perema",
["won"] = "Wongo",
["woo"] = "Manombai",
["wor"] = "Woria",
["wos"] = "Hanga Hundi",
["wow"] = "Wawonii",
["woy"] = "Weyto",
["wpc"] = "Wirö",
["wra"] = "Warapu",
["wrb"] = "Warluwara",
["wrg"] = "Warungu",
["wrh"] = "Wiradjuri",
["wri"] = "Wariyangga",
["wrk"] = "Garawa",
["wrl"] = "Warlmanpa",
["wrm"] = "Warumungu",
["wrn"] = "Warnang",
["wro"] = "Worora",
["wrp"] = "Waropen",
["wrr"] = "Wardaman",
["wrs"] = "Waris",
["wru"] = "Waru",
["wrv"] = "Waruna",
["wrw"] = "Gugu Warra",
["wrx"] = "Wae Rana",
["wrz"] = "Warray",
["wsa"] = "Warembori",
["wsi"] = "Wusi",
["wsk"] = "Waskia",
["wsr"] = "Owenia",
["wsu"] = "Wasu",
["wsv"] = "Wotapuri-Katarqalai",
["wtf"] = "วาตีวา",
["wth"] = "Wathaurong",
["wti"] = "Berta",
["wtk"] = "Watakataui",
["wtm"] = "Mewati",
["wtw"] = "Wotu",
["wua"] = "Wikngenchera",
["wub"] = "Wunambal",
["wud"] = "Wudu",
["wuh"] = "Wutunhua",
["wul"] = "Silimo",
["wum"] = "Wumbvu",
["wun"] = "Bungu",
["wur"] = "Wurrugu",
["wut"] = "Wutung",
["wuu"] = "อู๋",
["wuv"] = "Wuvulu-Aua",
["wux"] = "Wulna",
["wuy"] = "Wauyai",
["wwa"] = "Waama",
["wwo"] = "Dorig",
["wwr"] = "Warrwa",
["www"] = "Wawa",
["wxa"] = "Waxiang",
["wxw"] = "Wardandi",
["wya"] = "Wyandot",
["wyb"] = "Ngiyambaa",
["wyi"] = "Woiwurrung",
["wym"] = "วีลามอวิตแซ",
["wyr"] = "Wayoró",
["wyy"] = "Western Fijian",
["xaa"] = "อาหรับแบบอันดะลุส",
["xab"] = "Sambe",
["xac"] = "Kachari",
["xad"] = "Adai",
["xae"] = "Aequian",
["xag"] = "Aghwan",
["xai"] = "Kaimbé",
["xaj"] = "Ararandewára",
["xak"] = "Maku",
["xal"] = "คัลมึค",
["xam"] = "ǀXam",
["xan"] = "Xamtanga",
["xao"] = "Khao",
["xap"] = "Apalachee",
["xaq"] = "Aquitanian",
["xar"] = "Karami",
["xas"] = "Kamassian",
["xat"] = "Katawixi",
["xau"] = "Kauwera",
["xav"] = "Xavante",
["xaw"] = "Kawaiisu",
["xay"] = "Kayan Mahakam",
["xbb"] = "Lower Burdekin",
["xbc"] = "แบกเตรีย",
["xbd"] = "Bindal",
["xbe"] = "Bigambal",
["xbg"] = "Bunganditj",
["xbi"] = "Kombio",
["xbj"] = "Birrpayi",
["xbm"] = "เบรอตงกลาง",
["xbn"] = "Kenaboi",
["xbo"] = "Bulgar",
["xbp"] = "Bibbulman",
["xbr"] = "กัมเบอรา",
["xbw"] = "Kambiwá",
["xby"] = "Butchulla",
["xcb"] = "Cumbric",
["xcc"] = "Camunic",
["xce"] = "Celtiberian",
["xch"] = "Chemakum",
["xcl"] = "อาร์มีเนียเก่า",
["xcm"] = "Comecrudo",
["xcn"] = "Cotoname",
["xco"] = "Khwarezmian",
["xcr"] = "Carian",
["xct"] = "ทิเบตคลาสสิก",
["xcu"] = "Curonian",
["xcv"] = "Chuvan",
["xcw"] = "Coahuilteco",
["xcy"] = "Cayuse",
["xda"] = "Darkinjung",
["xdc"] = "Dacian",
["xdk"] = "Dharug",
["xdm"] = "เอโดม",
["xdq"] = "Kaitag",
["xdy"] = "Malayic Dayak",
["xeb"] = "Eblaite",
["xed"] = "Hdi",
["xeg"] = "ǁXegwi",
["xel"] = "Kelo",
["xem"] = "Kembayan",
["xep"] = "Epi-Olmec",
["xer"] = "Xerénte",
["xes"] = "Kesawai",
["xet"] = "Xetá",
["xeu"] = "Keoru-Ahia",
["xfa"] = "ฟาลิสกุส",
["xga"] = "Galatian",
["xgb"] = "Gbin",
["xgd"] = "Gudang",
["xgf"] = "Gabrielino-Fernandeño",
["xgg"] = "Goreng",
["xgi"] = "Garingbal",
["xgl"] = "Galindian",
["xgm"] = "Darumbal",
["xgn-pro"] = "มองโกลิกดั้งเดิม",
["xgr"] = "Garza",
["xgu"] = "Unggumi",
["xgw"] = "Guwa",
["xh"] = "โคซา",
["xha"] = "Harami",
["xhc"] = "Hunnic",
["xhd"] = "Hadrami",
["xhe"] = "Khetrani",
["xhm"] = "เขมรกลาง",
["xhr"] = "Hernican",
["xht"] = "Hattic",
["xhu"] = "ฮูร์เรีย",
["xhv"] = "Khua",
["xib"] = "Iberian",
["xii"] = "Xiri",
["xil"] = "Illyrian",
["xin"] = "Xinca",
["xir"] = "Xiriâna",
["xis"] = "Kisan",
["xiv"] = "Harappan",
["xiy"] = "Xipaya",
["xjb"] = "Minjungbal",
["xka"] = "Kalkoti",
["xkb"] = "Manigri-Kambolé Ede Nago",
["xkc"] = "Khoini",
["xkd"] = "Mendalam Kayan",
["xke"] = "Kereho",
["xkf"] = "Khengkha",
["xkg"] = "Kagoro",
["xki"] = "Kenyan Sign Language",
["xkj"] = "Kajali",
["xkk"] = "Kaco'",
["xkl"] = "Bakung",
["xkn"] = "Kayan River Kayan",
["xko"] = "Kiorr",
["xkp"] = "Kabatei",
["xkq"] = "Koroni",
["xkr"] = "Xakriabá",
["xks"] = "Kumbewaha",
["xkt"] = "Kantosi",
["xku"] = "Kaamba",
["xkv"] = "Kgalagadi",
["xkw"] = "Kembra",
["xkx"] = "Karore",
["xky"] = "Uma' Lasan",
["xkz"] = "Kurtöp",
["xla"] = "Kamula",
["xlb"] = "Loup B",
["xlc"] = "Lycian",
["xld"] = "Lydian",
["xle"] = "Lemnian",
["xlg"] = "Ancient Ligurian",
["xli"] = "Liburnian",
["xln"] = "Alanic",
["xlo"] = "Loup A",
["xlp"] = "Lepontic",
["xls"] = "Lusitanian",
["xlu"] = "Luwian",
["xly"] = "Elymian",
["xmb"] = "Mbonga",
["xmc"] = "Makhuwa-Marrevone",
["xmd"] = "Mbudum",
["xme-ker"] = "Kermanic",
["xme-kls"] = "Kalasuri",
["xme-klt"] = "Kilit",
["xme-mid"] = "Middle Median",
["xme-old"] = "Old Median",
["xme-ott"] = "Old Tati",
["xme-taf"] = "Tafreshi",
["xme-ttc-pro"] = "Proto-Tatic",
["xmf"] = "มิงเกรเลีย",
["xmg"] = "Mengaka",
["xmh"] = "Kugu-Muminh",
["xmj"] = "Majera",
["xmk"] = "Ancient Macedonian",
["xml"] = "Malaysian Sign Language",
["xmm"] = "มลายูแบบมานาโด",
["xmo"] = "Morerebi",
["xmp"] = "Kuku-Mu'inh",
["xmq"] = "Kuku-Mangk",
["xmr"] = "Meroitic",
["xms"] = "Moroccan Sign Language",
["xmt"] = "Matbat",
["xmu"] = "Kamu",
["xmx"] = "Maden",
["xmy"] = "Mayaguduna",
["xmz"] = "Mori Bawah",
["xna"] = "Ancient North Arabian",
["xnb"] = "Kanakanabu",
["xnd-pro"] = "Proto-Na-Dene",
["xng"] = "มองโกเลียกลาง",
["xnh"] = "Kuanhua",
["xni"] = "Ngarigu",
["xnk"] = "Nganakarti",
["xnn"] = "กันกานาอือเหนือ",
["xnr"] = "Kangri",
["xns"] = "Kanashi",
["xnt"] = "Narragansett",
["xnu"] = "Nukunul",
["xny"] = "Nyiyaparli",
["xoc"] = "O'chi'chi'",
["xod"] = "Kokoda",
["xog"] = "Soga",
["xoi"] = "Kominimung",
["xok"] = "Xokleng",
["xom"] = "Komo",
["xon"] = "Konkomba",
["xoo"] = "Xukurú",
["xop"] = "Kopar",
["xor"] = "Korubo",
["xow"] = "Kowaki",
["xpa"] = "Pirriya",
["xpb"] = "Pyemmairre",
["xpc"] = "Pecheneg",
["xpd"] = "Paredarerme",
["xpe"] = "Liberia Kpelle",
["xpf"] = "Southeast Tasmanian",
["xpg"] = "Phrygian",
["xph"] = "Tyerrernotepanner",
["xpi"] = "Pictish",
["xpj"] = "Mpalitjanh",
["xpk"] = "Kulina",
["xpl"] = "Port Sorell",
["xpm"] = "Pumpokol",
["xpn"] = "Kapinawá",
["xpo"] = "Pochutec",
["xpp"] = "Puyo-Paekche",
["xpq"] = "Mohegan-Pequot",
["xpr"] = "พาร์เทีย",
["xps"] = "Pisidian",
["xpu"] = "Punic",
["xpv"] = "Tommeginne",
["xpw"] = "Peerapper",
["xpx"] = "Toogee",
["xpy"] = "Buyeo",
["xpz"] = "Bruny Island",
["xqa"] = "Karakhanid",
["xqt"] = "Qatabanian",
["xra"] = "Krahô",
["xrb"] = "Eastern Karaboro",
["xrd"] = "Gundungurra",
["xre"] = "Kreye",
["xrg"] = "Minang",
["xri"] = "Krikati-Timbira",
["xrm"] = "Armazic",
["xrn"] = "Arin",
["xrq"] = "Karranga",
["xrr"] = "Raetic",
["xrt"] = "Aranama-Tamique",
["xru"] = "Marriammu",
["xrw"] = "Karawa",
["xsa"] = "Sabaean",
["xsb"] = "ซัมบัล",
["xsc-pro"] = "Proto-Scythian",
["xsc-sak-pro"] = "Proto-Saka",
["xsc-sar-pro"] = "Proto-Sarmatian",
["xsc-skw-pro"] = "Proto-Saka-Wakhi",
["xsd"] = "Sidetic",
["xse"] = "Sempan",
["xsh"] = "Shamang",
["xsi"] = "Sio",
["xsj"] = "Subi",
["xsl"] = "South Slavey",
["xsm"] = "Kasem",
["xsn"] = "Sanga (Nigeria)",
["xso"] = "Solano",
["xsp"] = "Silopi",
["xsq"] = "Makhuwa-Saka",
["xsr"] = "เศรปา",
["xss"] = "Assan",
["xsu"] = "Sanumá",
["xsv"] = "ซูโดเวีย",
["xsy"] = "Saisiyat",
["xta"] = "Alcozauca Mixtec",
["xtb"] = "Chazumba Mixtec",
["xtc"] = "Kadugli",
["xtd"] = "Diuxi-Tilantongo Mixtec",
["xte"] = "Ketengban",
["xth"] = "Yitha Yitha",
["xti"] = "Sinicahua Mixtec",
["xtj"] = "San Juan Teita Mixtec",
["xtl"] = "Tijaltepec Mixtec",
["xtm"] = "Magdalena Peñasco Mixtec",
["xtn"] = "Northern Tlaxiaco Mixtec",
["xto"] = "โทแคเรียนเอ",
["xtp"] = "San Miguel Piedras Mixtec",
["xtq"] = "ตุมซุก",
["xtr"] = "Early Tripuri",
["xts"] = "Sindihui Mixtec",
["xtt"] = "Tacahua Mixtec",
["xtu"] = "Cuyamecalco Mixtec",
["xtv"] = "Thawa",
["xtw"] = "Tawandê",
["xty"] = "Yoloxochitl Mixtec",
["xua"] = "Alu Kurumba",
["xub"] = "Betta Kurumba",
["xud"] = "Umiida",
["xug"] = "คูนิงามิ",
["xuj"] = "Jennu Kurumba",
["xul"] = "Ngunawal",
["xum"] = "อุมเบรีย",
["xun"] = "Unggaranggu",
["xuo"] = "Kuo",
["xup"] = "Upper Umpqua",
["xur"] = "Urartian",
["xut"] = "Kuthant",
["xuu"] = "Khwe",
["xve"] = "Venetic",
["xvn"] = "วันดัล",
["xvo"] = "Volscian",
["xvs"] = "Vestinian",
["xwa"] = "Kwaza",
["xwc"] = "Woccon",
["xwd"] = "Wadi Wadi",
["xwe"] = "Xwela Gbe",
["xwg"] = "Kwegu",
["xwj"] = "Wajuk",
["xwk"] = "Wangkumara",
["xwl"] = "Western Xwla Gbe",
["xwo"] = "Written Oirat",
["xwr"] = "Kwerba Mamberamo",
["xww"] = "Wemba-Wemba",
["xxb"] = "Boro",
["xxk"] = "Ke'o",
["xxm"] = "Minkin",
["xxr"] = "Koropó",
["xxt"] = "Tambora",
["xya"] = "Yaygir",
["xyb"] = "Yandjibara",
["xyl"] = "Yalakalore",
["xyt"] = "Mayi-Thakurti",
["xyy"] = "Yorta Yorta",
["xzh"] = "Zhang-Zhung",
["xzm"] = "Semigallian",
["xzp"] = "Ancient Zapotec",
["yaa"] = "Yaminahua",
["yab"] = "Yuhup",
["yac"] = "Pass Valley Yali",
["yad"] = "Yagua",
["yae"] = "Pumé",
["yaf"] = "Yaka",
["yag"] = "ยามานา",
["yah"] = "Yazghulami",
["yai"] = "Yaghnobi",
["yaj"] = "Banda-Yangere",
["yak"] = "Yakima",
["yal"] = "Yalunka",
["yam"] = "Yamba",
["yan"] = "Mayangna",
["yao"] = "Yao",
["yap"] = "Yapese",
["yaq"] = "Yaqui",
["yar"] = "Yabarana",
["yas"] = "Gunu",
["yat"] = "Yambeta",
["yau"] = "Yuwana",
["yav"] = "Yangben",
["yaw"] = "Yawalapití",
["yay"] = "Agwagwune",
["yaz"] = "Lokaa",
["yba"] = "Yala",
["ybb"] = "Yemba",
["ybe"] = "Western Yugur",
["ybh"] = "Yakkha",
["ybi"] = "Yamphu",
["ybj"] = "Hasha",
["ybk"] = "Bokha",
["ybl"] = "Yukuben",
["ybm"] = "Yaben",
["ybn"] = "Yabaâna",
["ybo"] = "Yabong",
["ybx"] = "Yawiyo",
["yby"] = "Yaweyuha",
["ych"] = "Chesu",
["ycl"] = "Lolopo",
["ycn"] = "Yucuna",
["ycp"] = "Chepya",
["ycr"] = "Yilan Creole",
["yda"] = "Yanda",
["yde"] = "Yangum Dey",
["ydg"] = "Yidgha",
["ydk"] = "Yoidik",
["yea"] = "Ravula",
["yec"] = "Yenish",
["yee"] = "Yimas",
["yei"] = "Yeni",
["yej"] = "Yevanic",
["yen"] = "Yendang",
["yer"] = "Tarok",
["yes"] = "Yeskwa",
["yet"] = "Yetfa",
["yeu"] = "Yerukula",
["yev"] = "Yapunda",
["yey"] = "Yeyi",
["ygi"] = "Yiningayi",
["ygl"] = "Yangum Gel",
["ygm"] = "Yagomi",
["ygp"] = "Gepo",
["ygr"] = "Yagaria",
["ygs"] = "Yolngu Sign Language",
["ygu"] = "Yugul",
["ygw"] = "Yagwoia",
["yha"] = "Baha",
["yhl"] = "Hlepho Phowa",
["yi"] = "ยิดดิช",
["yia"] = "Yinggarda",
["yif"] = "Ache",
["yig"] = "Wusa",
["yii"] = "Yidiny",
["yij"] = "Yindjibarndi",
["yik"] = "Dongshanba Lalo",
["yil"] = "Yindjilandji",
["yim"] = "Yimchungru Naga",
["yin"] = "Yinchia",
["yip"] = "Pholo",
["yiq"] = "Micha",
["yir"] = "North Awyu",
["yis"] = "Yis",
["yit"] = "Eastern Lalu",
["yiu"] = "Lope",
["yiv"] = "Northern Nisu",
["yix"] = "Axi",
["yiy"] = "Yir-Yoront",
["yiz"] = "Azhe",
["yka"] = "ยากัน",
["ykg"] = "Northern Yukaghir",
["ykh"] = "Khamnigan Mongol",
["yki"] = "Yoke",
["ykk"] = "Yakaikeke",
["ykl"] = "Khlula",
["ykm"] = "Kap",
["ykn"] = "Kua-nsi",
["yko"] = "Yasa",
["ykr"] = "Yekora",
["ykt"] = "Kathu",
["yku"] = "Kuamasi",
["yky"] = "Yakoma",
["yla"] = "Yaul",
["ylb"] = "Yaleba",
["yle"] = "Yele",
["ylg"] = "Yelogu",
["yli"] = "Angguruk Yali",
["yll"] = "Yil",
["ylm"] = "Limi",
["yln"] = "Langnian Buyang",
["ylo"] = "Naruo",
["ylr"] = "Yalarnnga",
["ylu"] = "Aribwaung",
["yly"] = "Nyelâyu",
["ymb"] = "Yambes",
["ymc"] = "Southern Muji",
["ymd"] = "Muda",
["yme"] = "Yameo",
["ymg"] = "Yamongeri",
["ymh"] = "Mili",
["ymi"] = "Moji",
["ymk"] = "Makwe",
["yml"] = "Iamalele",
["ymm"] = "Maay",
["ymn"] = "Sunum",
["ymo"] = "Yangum Mon",
["ymp"] = "Yamap",
["ymq"] = "Qila Muji",
["ymr"] = "Malasar",
["yms"] = "Mysian",
["ymx"] = "Northern Muji",
["ymz"] = "Muzi",
["yna"] = "Aluo",
["ynb"] = "Yamben",
["ynd"] = "Yandruwandha",
["yne"] = "Lang'e",
["yng"] = "Yango",
["ynk"] = "Naukanski",
["ynl"] = "Yangulam",
["ynn"] = "Yana",
["yno"] = "ยอง",
["yns"] = "Yansi",
["ynu"] = "Yahuna",
["yo"] = "โยรูบา",
["yob"] = "Yoba",
["yog"] = "โยกัด",
["yoi"] = "โยนางูนิ",
["yok-bvy"] = "Buena Vista Yokuts",
["yok-dly"] = "Delta Yokuts",
["yok-gsy"] = "Gashowu Yokuts",
["yok-kry"] = "Kings River Yokuts",
["yok-nvy"] = "Northern Valley Yokuts",
["yok-ply"] = "Palewyami Yokuts",
["yok-svy"] = "Southern Valley Yokuts",
["yok-tky"] = "Tule-Kaweah Yokuts",
["yol"] = "ยอลอ",
["yom"] = "Yombe",
["yon"] = "Yongkom",
["yox"] = "โยรง",
["yoy"] = "Yoy",
["ypa"] = "Phala",
["ypb"] = "Labo Phowa",
["ypg"] = "Phola",
["yph"] = "Phupha",
["ypk-pro"] = "Proto-Yupik",
["ypm"] = "Phuma",
["ypn"] = "Ani Phowa",
["ypo"] = "Alo Phola",
["ypp"] = "Phupa",
["ypz"] = "Phuza",
["yra"] = "Yerakai",
["yrb"] = "Yareba",
["yre"] = "Yaouré",
["yri"] = "Yarí",
["yrk-for"] = "Forest Nenets",
["yrk-tun"] = "Tundra Nenets",
["yrl"] = "Nheengatu",
["yrn"] = "Yerong",
["yro"] = "Ỹaroamë",
["yrw"] = "Yarawata",
["yry"] = "Yarluyandi",
["ysc"] = "Jassic",
["ysd"] = "Samatao",
["ysg"] = "Sonaga",
["ysl"] = "Yugoslavian Sign Language",
["ysn"] = "Sani",
["yso"] = "Nisi",
["ysp"] = "Southern Lolopo",
["ysr"] = "Sirenik",
["yss"] = "Yessan-Mayo",
["ysy"] = "Sanie",
["yta"] = "Talu",
["ytl"] = "Toloza",
["ytp"] = "Thopho",
["ytw"] = "Yout Wam",
["yty"] = "Yatay",
["yua"] = "Yucatec Maya",
["yub"] = "Yugambal",
["yuc"] = "Yuchi",
["yue"] = "กวางตุ้ง",
["yuf"] = "Havasupai-Walapai-Yavapai",
["yug"] = "Yug",
["yui"] = "Yurutí",
["yuj"] = "Karkar-Yuri",
["yuk"] = "Yuki",
["yul"] = "Yulu",
["yum"] = "Yuma",
["yun"] = "Bena",
["yup"] = "Yukpa",
["yuq"] = "Yuqui",
["yur"] = "Yurok",
["yut"] = "Yopno",
["yuw"] = "Finisterre Yau",
["yux"] = "Southern Yukaghir",
["yuy"] = "East Yugur",
["yuz"] = "Yuracare",
["yva"] = "Yawa",
["yvt"] = "Yavitero",
["ywa"] = "Kalou",
["ywg"] = "Yinhawangka",
["ywl"] = "Western Lalu",
["ywn"] = "Yawanawa",
["ywq"] = "Nasu",
["ywr"] = "Yawuru",
["ywt"] = "Xishanba Lalo",
["ywu"] = "Wumeng",
["yww"] = "Yawarawarga",
["yxa"] = "Mayawali",
["yxg"] = "Yagara",
["yxl"] = "Yarli",
["yxm"] = "Yinwum",
["yxu"] = "Yuyu",
["yxy"] = "Yabula Yabula",
["yyu"] = "Torricelli Yau",
["yyz"] = "Ayizi",
["yzg"] = "E'ma Buyang",
["yzk"] = "Zokhuo",
["za"] = "จ้วง",
["zaa"] = "Sierra de Juárez Zapotec",
["zab"] = "San Juan Guelavía Zapotec",
["zac"] = "Ocotlán Zapotec",
["zad"] = "Cajonos Zapotec",
["zae"] = "Yareni Zapotec",
["zaf"] = "Ayoquesco Zapotec",
["zag"] = "Zaghawa",
["zah"] = "Zangwal",
["zai"] = "Isthmus Zapotec",
["zaj"] = "Zaramo",
["zak"] = "Zanaki",
["zal"] = "Zauzou",
["zam"] = "Central Mahuatlán Zapotec",
["zao"] = "Ozolotepec Zapotec",
["zap"] = "Zapotec",
["zaq"] = "Aloápam Zapotec",
["zar"] = "Rincón Zapotec",
["zas"] = "Santo Domingo Albarradas Zapotec",
["zat"] = "Tabaa Zapotec",
["zau"] = "ซันสการ์",
["zav"] = "Yatzachi Zapotec",
["zaw"] = "Mitla Zapotec",
["zax"] = "Xadani Zapotec",
["zay"] = "Zayse-Zergulla",
["zaz"] = "Zari",
["zbt"] = "Batui",
["zca"] = "Coatecas Altas Zapotec",
["zdj"] = "Ngazidja Comorian",
["zea"] = "Zealandic",
["zeg"] = "Zenag",
["zen"] = "Zenaga",
["zga"] = "Kinga",
["zgh"] = "Moroccan Amazigh",
["zgr"] = "Magori",
["zh"] = "จีน",
["zhb"] = "Zhaba",
["zhi"] = "Zhire",
["zhn"] = "จ้วงแบบหนง",
["zhw"] = "Zhoa",
["zhx-min-pro"] = "หมิ่นดั้งเดิม",
["zhx-sht"] = "Shaozhou Tuhua",
["zhx-sic"] = "เสฉวน",
["zhx-tai"] = "ห่อยซัน",
["zia"] = "Zia",
["zib"] = "Zimbabwe Sign Language",
["zik"] = "Zimakani",
["zil"] = "Zialo",
["zim"] = "Mesme",
["zin"] = "Zinza",
["zir"] = "Ziriya",
["ziw"] = "Zigula",
["ziz"] = "Zizilivakan",
["zka"] = "Kaimbulawa",
["zkb"] = "Koibal",
["zkd"] = "กะดู",
["zkg"] = "Goguryeo",
["zkh"] = "Khorezmian Turkic",
["zkk"] = "Karankawa",
["zko"] = "Kott",
["zkp"] = "São Paulo Kaingáng",
["zkr"] = "Zakhring",
["zkt"] = "คีตัน",
["zku"] = "Kaurna",
["zkv"] = "Krevinian",
["zkz"] = "Khazar",
["zle-ono"] = "Old Novgorodian",
["zle-ort"] = "รูซินเก่า",
["zls-chs"] = "Church Slavonic",
["zlw-ocs"] = "เช็กเก่า",
["zlw-opl"] = "โปแลนด์เก่า",
["zlw-osk"] = "สโลวักเก่า",
["zlw-slv"] = "สโลวินช์",
["zma"] = "Manda (Australia)",
["zmb"] = "Zimba",
["zmc"] = "Margany",
["zmd"] = "Maridan",
["zme"] = "Mangerr",
["zmf"] = "Mfinu",
["zmg"] = "Marti Ke",
["zmh"] = "Makolkol",
["zmi"] = "Negeri Sembilan Malay",
["zmj"] = "Maridjabin",
["zmk"] = "Mandandanyi",
["zml"] = "Madngele",
["zmm"] = "Marimanindji",
["zmn"] = "Mbangwe",
["zmo"] = "Molo",
["zmp"] = "Mbuun",
["zmq"] = "Mituku",
["zmr"] = "Maranungku",
["zms"] = "Mbesa",
["zmt"] = "Maringarr",
["zmu"] = "Muruwari",
["zmv"] = "Mbariman-Gudhinma",
["zmw"] = "Mbo (Congo)",
["zmx"] = "Bomitaba",
["zmy"] = "Mariyedi",
["zmz"] = "Mbandja",
["zna"] = "Zan Gula",
["zne"] = "Zande",
["zng"] = "Mang",
["znk"] = "Manangkari",
["zns"] = "Mangas",
["zoc"] = "Copainalá Zoque",
["zoh"] = "Chimalapa Zoque",
["zom"] = "Zou",
["zoo"] = "Asunción Mixtepec Zapotec",
["zoq"] = "Tabasco Zoque",
["zor"] = "Rayón Zoque",
["zos"] = "Francisco León Zoque",
["zpa"] = "Lachiguiri Zapotec",
["zpb"] = "Yautepec Zapotec",
["zpc"] = "Choapan Zapotec",
["zpd"] = "Southeastern Ixtlán Zapotec",
["zpe"] = "Petapa Zapotec",
["zpf"] = "San Pedro Quiatoni Zapotec",
["zpg"] = "Guevea de Humboldt Zapotec",
["zph"] = "Totomachapan Zapotec",
["zpi"] = "Santa María Quiegolani Zapotec",
["zpj"] = "Quiavicuzas Zapotec",
["zpk"] = "Tlacolulita Zapotec",
["zpl"] = "Lachixío Zapotec",
["zpm"] = "Mixtepec Zapotec",
["zpn"] = "Santa Inés Yatzechi Zapotec",
["zpo"] = "Amatlán Zapotec",
["zpp"] = "El Alto Zapotec",
["zpq"] = "Zoogocho Zapotec",
["zpr"] = "Santiago Xanica Zapotec",
["zps"] = "Coatlán Zapotec",
["zpt"] = "San Vicente Coatlán Zapotec",
["zpu"] = "Yalálag Zapotec",
["zpv"] = "Chichicapan Zapotec",
["zpw"] = "Zaniza Zapotec",
["zpx"] = "San Baltazar Loxicha Zapotec",
["zpy"] = "Mazaltepec Zapotec",
["zpz"] = "Texmelucan Zapotec",
["zra"] = "Gaya",
["zrg"] = "Mirgan",
["zrn"] = "Zirenkel",
["zro"] = "Záparo",
["zrs"] = "Mairasi",
["zsa"] = "Sarasira",
["zsk"] = "Kaskean",
["zsl"] = "Zambian Sign Language",
["zsr"] = "Southern Rincon Zapotec",
["zsu"] = "Sukurum",
["zte"] = "Elotepec Zapotec",
["ztg"] = "Xanaguía Zapotec",
["ztl"] = "Lapaguía-Guivini Zapotec",
["ztm"] = "San Agustín Mixtepec Zapotec",
["ztn"] = "Santa Catarina Albarradas Zapotec",
["ztp"] = "Loxicha Zapotec",
["ztq"] = "Quioquitani-Quierí Zapotec",
["zts"] = "Tilquiapan Zapotec",
["ztt"] = "Tejalapan Zapotec",
["ztu"] = "San Pablo Güilá Zapotec",
["ztx"] = "Zaachila Zapotec",
["zty"] = "Yatee Zapotec",
["zu"] = "ซูลู",
["zua"] = "Zeem",
["zuh"] = "Tokano",
["zum"] = "Kumzari",
["zun"] = "ซูนี",
["zuy"] = "Zumaya",
["zwa"] = "Zay",
["zyp"] = "Zyphe",
["zza"] = "ซาซา",
["zzj"] = "จ้วงแบบจั่วเจียง",
}
mwffst0vt4zfzbyp6v8en7kv2t3evaq
5729127
5729122
2026-07-20T02:32:11Z
Octahedron80
267
5729127
Scribunto
text/plain
return {
["aa"] = "อาฟาร์",
["aaa"] = "Ghotuo",
["aab"] = "Alumu-Tesu",
["aac"] = "Ari",
["aad"] = "Amal",
["aaf"] = "Aranadan",
["aag"] = "Ambrak",
["aah"] = "Abu'",
["aai"] = "Arifama-Miniafia",
["aak"] = "Ankave",
["aal"] = "Afade",
["aan"] = "Anambé",
["aap"] = "Arára (Pará)",
["aaq"] = "Penobscot",
["aas"] = "Aasax",
["aau"] = "Abau",
["aav-khs-pro"] = "คาเซียนดั้งเดิม",
["aav-nic-pro"] = "นิโคบารีสดั้งเดิม",
["aav-pkl-pro"] = "ปนัร-คาซี-ลึงงัมดั้งเดิม",
["aav-pro"] = "ออสโตรเอเชียติกดั้งเดิม",
["aaw"] = "Solong",
["aax"] = "Mandobo Atas",
["aaz"] = "Amarasi",
["ab"] = "อับคาเซีย",
["aba"] = "อาเบ",
["abb"] = "Bankon",
["abc"] = "Ambala Ayta",
["abd"] = "Camarines Norte Agta",
["abe"] = "Abenaki",
["abf"] = "Abai Sungai",
["abg"] = "Abaga",
["abh"] = "อาหรับแบบทาจิกิสถาน",
["abi"] = "Abidji",
["abj"] = "Aka-Bea",
["abl"] = "Abung",
["abm"] = "Abanyom",
["abn"] = "Abua",
["abo"] = "Abon",
["abp"] = "Abenlen Ayta",
["abq"] = "อาบาซา",
["abs"] = "Ambonese Malay",
["abt"] = "Ambulas",
["abu"] = "Abure",
["abv"] = "อาหรับแบบบาห์เรน",
["abw"] = "Pal",
["abx"] = "Inabaknon",
["aby"] = "Aneme Wake",
["abz"] = "Abui",
["aca"] = "Achagua",
["acb"] = "Áncá",
["acd"] = "Gikyode",
["ace"] = "อาเจะฮ์",
["ach"] = "Acholi",
["aci"] = "Aka-Cari",
["ack"] = "Aka-Kora",
["acl"] = "Akar-Bale",
["acm"] = "อาหรับแบบอิรัก",
["acn"] = "Achang",
["acp"] = "Eastern Acipa",
["acr"] = "Achi",
["acs"] = "Acroá",
["acu"] = "Achuar",
["acv"] = "Achumawi",
["acw"] = "อาหรับแบบฮิญาซ",
["acx"] = "อาหรับแบบโอมาน",
["acy"] = "อาหรับแบบไซปรัส",
["acz"] = "Acheron",
["ada"] = "Adangme",
["adb"] = "Atauran",
["add"] = "Dzodinka",
["ade"] = "Adele",
["adf"] = "Dhofari Arabic",
["adg"] = "Andegerebinha",
["adh"] = "Adhola",
["adi"] = "Adi",
["adj"] = "Adioukrou",
["adl"] = "Galo",
["adn"] = "Adang",
["ado"] = "Abu",
["adp"] = "Adap",
["adq"] = "Adangbe",
["adr"] = "Adonara",
["ads"] = "Adamorobe Sign Language",
["adt"] = "Adnyamathanha",
["adu"] = "Aduge",
["adw"] = "Amondawa",
["ady"] = "อะดีเกยา",
["adz"] = "Adzera",
["ae"] = "อเวสตะ",
["aea"] = "Areba",
["aeb"] = "อาหรับแบบตูนิเซีย",
["aed"] = "Argentine Sign Language",
["aee"] = "Northeast Pashayi",
["aek"] = "Haeke",
["ael"] = "Ambele",
["aem"] = "Arem",
["aen"] = "Armenian Sign Language",
["aeq"] = "Aer",
["aer"] = "Eastern Arrernte",
["aes"] = "Alsea",
["aeu"] = "Akeu",
["aew"] = "Ambakich",
["aey"] = "Amele",
["aez"] = "Aeka",
["af"] = "อาฟรีกานส์",
["afa-pro"] = "แอฟโฟรเอเชียติกดั้งเดิม",
["afb"] = "Gulf Arabic",
["afd"] = "Andai",
["afe"] = "Putukwam",
["afg"] = "Afghan Sign Language",
["afh"] = "Afrihili",
["afi"] = "Akrukay",
["afk"] = "Nanubae",
["afn"] = "Defaka",
["afo"] = "Eloyi",
["afp"] = "Tapei",
["afs"] = "Afro-Seminole Creole",
["aft"] = "Afitti",
["afu"] = "Awutu",
["afz"] = "Obokuitai",
["aga"] = "Aguano",
["agb"] = "Legbo",
["agc"] = "Agatu",
["agd"] = "Agarabi",
["age"] = "Angal",
["agf"] = "Arguni",
["agg"] = "Angor",
["agh"] = "Ngelima",
["agi"] = "Agariya",
["agj"] = "Argobba",
["agk"] = "Isarog Agta",
["agl"] = "Fembe",
["agm"] = "Angaataha",
["agn"] = "อากูตายา",
["ago"] = "Tainae",
["agq"] = "Aghem",
["agr"] = "Aguaruna",
["ags"] = "Esimbi",
["agt"] = "Central Cagayan Agta",
["agu"] = "Aguacateca",
["agv"] = "Remontado Agta",
["agw"] = "Kahua",
["agx"] = "Aghul",
["agy"] = "Southern Alta",
["agz"] = "Mount Iriga Agta",
["aha"] = "Ahanta",
["ahb"] = "Axamb",
["ahg"] = "Qimant",
["ahh"] = "Aghu",
["ahi"] = "Tiagba",
["ahk"] = "อาข่า",
["ahl"] = "Igo",
["ahm"] = "Mobu",
["ahn"] = "Àhàn",
["aho"] = "อาหม",
["ahp"] = "Apro",
["ahr"] = "Ahirani",
["ahs"] = "Ashe",
["aht"] = "Ahtna",
["aia"] = "Arosi",
["aib"] = "Äynu",
["aic"] = "Ainbai",
["aid"] = "Alngith",
["aie"] = "Amara",
["aif"] = "Agi",
["aig"] = "Antigua and Barbuda Creole English",
["aih"] = "Ai-Cham",
["aii"] = "อารามายาใหม่แบบอัสซีเรีย",
["aij"] = "Lishanid Noshan",
["aik"] = "Ake",
["ail"] = "Aimele",
["aim"] = "Aimol",
["ain"] = "ไอนุ",
["aio"] = "อ่ายตน",
["aip"] = "Burumakok",
["air"] = "Airoran",
["ait"] = "Arikem",
["aiw"] = "Aari",
["aix"] = "Aighon",
["aiy"] = "Ali",
["aja"] = "Aja",
["ajg"] = "Adja",
["aji"] = "Ajië",
["ajn"] = "Andajin",
["ajp"] = "อาหรับแบบลิแวนต์ใต้",
["ajw"] = "Ajawa",
["ajz"] = "Amri Karbi",
["ak"] = "อาคัน",
["akb"] = "Angkola Batak",
["akc"] = "Mpur",
["akd"] = "Ukpet-Ehom",
["ake"] = "Akawaio",
["akf"] = "Akpa",
["akg"] = "Anakalangu",
["akh"] = "Angal Heneng",
["aki"] = "Aiome",
["akj"] = "Jeru",
["akk"] = "แอกแคด",
["akl"] = "อักลัน",
["akm"] = "Aka-Bo",
["ako"] = "Akurio",
["akp"] = "Siwu",
["akq"] = "Ak",
["akr"] = "Araki",
["aks"] = "Akaselem",
["akt"] = "Akolet",
["aku"] = "Akum",
["akv"] = "Akhvakh",
["akw"] = "Akwa",
["akx"] = "Aka-Kede",
["aky"] = "Aka-Kol",
["akz"] = "แอละแบมา",
["ala"] = "Alago",
["alc"] = "Kawésqar",
["ald"] = "Alladian",
["ale"] = "Aleut",
["alf"] = "Alege",
["alg-aga"] = "Agawam",
["alg-pro"] = "แอลกองเคียนดั้งเดิม",
["alh"] = "Alawa",
["ali"] = "Amaimon",
["alj"] = "Alangan",
["alk"] = "Alak",
["all"] = "Allar",
["alm"] = "Amblong",
["alo"] = "Larike-Wakasihu",
["alp"] = "Alune",
["alq"] = "Algonquin",
["alr"] = "Alutor",
["alt"] = "อัลไตใต้",
["alu"] = "'Are'are",
["alv-ama"] = "Amasi",
["alv-bgu"] = "Baïnounk Gubëeher",
["alv-bua-pro"] = "Proto-Bua",
["alv-cng-pro"] = "Proto-Cangin",
["alv-edk-pro"] = "Proto-Edekiri",
["alv-edo-pro"] = "Proto-Edoid",
["alv-fli-pro"] = "Proto-Fali",
["alv-gbe-pro"] = "กเบดั้งเดิม",
["alv-gng-pro"] = "Proto-Guang",
["alv-gtm-pro"] = "Proto-Central Togo",
["alv-gwa"] = "Gwara",
["alv-hei-pro"] = "Proto-Heiban",
["alv-ido-pro"] = "Proto-Idomoid",
["alv-igb-pro"] = "Proto-Igboid",
["alv-kwa-pro"] = "Proto-Kwa",
["alv-mum-pro"] = "Proto-Mumuye",
["alv-nup-pro"] = "Proto-Nupoid",
["alv-pro"] = "แอตแลนติก-คองโกดั้งเดิม",
["alv-von-pro"] = "วอลตา-ไนเจอร์ดั้งเดิม",
["alv-yor-pro"] = "โยรูบาดั้งเดิม",
["alv-yrd-pro"] = "โยรูบอยด์ดั้งเดิม",
["alw"] = "Alaba",
["alx"] = "Amol",
["aly"] = "Alyawarr",
["alz"] = "Alur",
["am"] = "อัมฮารา",
["ama"] = "Amanayé",
["amb"] = "Ambo",
["amc"] = "Amahuaca",
["ame"] = "Yanesha'",
["amf"] = "Hamer-Banna",
["amg"] = "Amurdag",
["ami"] = "Amis",
["amj"] = "Amdang",
["amk"] = "Ambai",
["aml"] = "War-Jaintia",
["amm"] = "Ama",
["amn"] = "Amanab",
["amo"] = "Amo",
["amp"] = "Alamblak",
["amq"] = "Amahai",
["amr"] = "Amarakaeri",
["ams"] = "อามามิโอชิมะใต้",
["amt"] = "Amto",
["amu"] = "Guerrero Amuzgo",
["amv"] = "Ambelau",
["amw"] = "Western Neo-Aramaic",
["amx"] = "Anmatyerre",
["amy"] = "Ami",
["amz"] = "Atampaya",
["an"] = "อารากอน",
["ana"] = "Andaqui",
["anb"] = "Andoa",
["anc"] = "Ngas",
["and"] = "Ansus",
["ane"] = "คังรังชือ",
["anf"] = "Animere",
["ang"] = "อังกฤษเก่า",
["anh"] = "Nend",
["ani"] = "Andi",
["anj"] = "Anor",
["ank"] = "Goemai",
["anl"] = "Anu",
["anm"] = "Anāl",
["ann"] = "Obolo",
["ano"] = "Andoque",
["anp"] = "Angika",
["anq"] = "Jarawa",
["anr"] = "Andh",
["ans"] = "Anserma",
["ant"] = "Antakarinya",
["anu"] = "Anuak",
["anv"] = "Denya",
["anw"] = "Anaang",
["anx"] = "Andra-Hus",
["any"] = "Anyi",
["anz"] = "Anem",
["aoa"] = "Angolar",
["aob"] = "Abom",
["aoc"] = "Pemon",
["aod"] = "Andarum",
["aoe"] = "Angal Enen",
["aof"] = "Bragat",
["aog"] = "Angoram",
["aoi"] = "Anindilyakwa",
["aoj"] = "Mufian",
["aok"] = "Arhö",
["aol"] = "Alorese",
["aom"] = "Ömie",
["aon"] = "Bumbita Arapesh",
["aor"] = "Aore",
["aos"] = "Taikat",
["aot"] = "อะตง",
["aou"] = "A'ou",
["aox"] = "Atorada",
["aoz"] = "Uab Meto",
["apa-pro"] = "Proto-Apachean",
["apb"] = "Sa'a",
["apc"] = "North Levantine Arabic",
["apd"] = "อาหรับแบบซูดาน",
["ape"] = "Bukiyip",
["apf"] = "Pahanan Agta",
["apg"] = "Ampanang",
["aph"] = "Athpare",
["api"] = "Apiaká",
["apj"] = "Jicarilla",
["apk"] = "Plains Apache",
["apl"] = "Lipan",
["apm"] = "Chiricahua",
["apn"] = "Apinayé",
["apo"] = "Ambul",
["app"] = "Apma",
["apq"] = "A-Pucikwar",
["apr"] = "Arop-Lokep",
["aps"] = "Arop-Sissano",
["apt"] = "Apatani",
["apu"] = "Apurinã",
["apv"] = "Alapmunte",
["apw"] = "อะแพชีตะวันตก",
["apx"] = "Aputai",
["apy"] = "Apalaí",
["apz"] = "Safeyoka",
["aqc"] = "Archi",
["aqd"] = "Ampari Dogon",
["aqg"] = "Arigidi",
["aql-pro"] = "แอลจิกดั้งเดิม",
["aqm"] = "Atohwaim",
["aqn"] = "Northern Alta",
["aqp"] = "Atakapa",
["aqr"] = "Arhâ",
["aqt"] = "Angaité",
["aqz"] = "Akuntsu",
["ar"] = "อาหรับ",
["arc"] = "อารามายา",
["ard"] = "Arabana",
["are"] = "Western Arrernte",
["arh"] = "Arhuaco",
["ari"] = "Arikara",
["arj"] = "Arapaso",
["ark"] = "Arikapú",
["arl"] = "Arabela",
["arn"] = "Mapudungun",
["aro"] = "Araona",
["arp"] = "Arapaho",
["arq"] = "อาหรับแบบแอลจีเรีย",
["arr"] = "Arara-Karo",
["ars"] = "Najdi Arabic",
["art-adu"] = "Adûni",
["art-bel"] = "Belter Creole",
["art-blk"] = "Bolak",
["art-bsp"] = "แบล็กสปีช",
["art-com"] = "Communicationssprache",
["art-dtk"] = "Dothraki",
["art-elo"] = "Eloi",
["art-gld"] = "Goa'uld",
["art-lap"] = "Lapine",
["art-man"] = "Mandalorian",
["art-mun"] = "Mundolinco",
["art-nav"] = "Naʼvi",
["art-vlh"] = "High Valyrian",
["aru"] = "Arua",
["arv"] = "Arbore",
["arw"] = "โลโกโน",
["arx"] = "Aruá",
["ary"] = "อาหรับแบบโมร็อกโก",
["arz"] = "อาหรับแบบอียิปต์",
["as"] = "อัสสัม",
["asa"] = "Pare",
["asb"] = "Assiniboine",
["asc"] = "Casuarina Coast Asmat",
["ase"] = "มืออเมริกัน",
["asf"] = "Auslan",
["asg"] = "Cishingini",
["ash"] = "Abishira",
["asi"] = "Buruwai",
["asj"] = "Nsari",
["ask"] = "Ashkun",
["asl"] = "Asilulu",
["asn"] = "Xingú Asuriní",
["aso"] = "Dano",
["asp"] = "Algerian Sign Language",
["asq"] = "Austrian Sign Language",
["asr"] = "Asuri",
["ass"] = "Ipulo",
["ast"] = "อัสตูเรียส",
["asu"] = "Tocantins Asurini",
["asv"] = "Asoa",
["asw"] = "Australian Aboriginal Sign Language",
["asx"] = "Muratayak",
["asy"] = "Yaosakor Asmat",
["asz"] = "As",
["ata"] = "Pele-Ata",
["atb"] = "Zaiwa",
["atc"] = "Atsahuaca",
["atd"] = "Ata Manobo",
["ate"] = "Atemble",
["atg"] = "Okpela",
["ath-nic"] = "Nicola",
["ath-pro"] = "Proto-Athabaskan",
["ati"] = "Attié",
["atj"] = "Atikamekw",
["atk"] = "Ati",
["atl"] = "Mount Iraya Agta",
["atm"] = "Ata",
["ato"] = "Atong (Cameroon)",
["atp"] = "Pudtol Atta",
["atq"] = "Aralle-Tabulahan",
["atr"] = "Waimiri-Atroari",
["ats"] = "Gros Ventre",
["att"] = "Pamplona Atta",
["atu"] = "Reel",
["atv"] = "อัลไตเหนือ",
["atw"] = "Atsugewi",
["atx"] = "Arutani",
["aty"] = "อาเนตยูม",
["atz"] = "Arta",
["aua"] = "Asumboa",
["aub"] = "Alugu",
["auc"] = "Huaorani",
["aud"] = "Anuta",
["auf-pro"] = "Proto-Arawa",
["aug"] = "Aguna",
["auh"] = "Aushi",
["aui"] = "Anuki",
["auj"] = "Awjila",
["auk"] = "Heyo",
["aul"] = "Aulua",
["aum"] = "Asu",
["aun"] = "Molmo One",
["auo"] = "Auyokawa",
["aup"] = "Makayam",
["auq"] = "Anus",
["aur"] = "Aruek",
["aus-alu"] = "Alungul",
["aus-and"] = "Andjingith",
["aus-ang"] = "Angkula",
["aus-arn-pro"] = "Proto-Arnhem",
["aus-bra"] = "Barranbinya",
["aus-brm"] = "Barunggam",
["aus-cww-pro"] = "Proto-Central New South Wales",
["aus-dal-pro"] = "Proto-Daly",
["aus-guw"] = "Guwar",
["aus-lsw"] = "Little Swanport",
["aus-mbi"] = "Mbiywom",
["aus-ngk"] = "Ngkoth",
["aus-nyu-pro"] = "Proto-Nyulnyulan",
["aus-pam-pro"] = "Proto-Pama-Nyungan",
["aus-tul"] = "Tulua",
["aus-uwi"] = "Uwinymil",
["aus-wdj-pro"] = "Proto-Iwaidjan",
["aus-won"] = "Wong-gie",
["aus-wul"] = "Wulguru",
["aus-ynk"] = "Yangkaal",
["aut"] = "Austral",
["auu"] = "Auye",
["auw"] = "Awyi",
["aux"] = "Aurá",
["auy"] = "Auyana",
["auz"] = "อาหรับแบบอุซเบกิสถาน",
["av"] = "อะวาร์",
["avb"] = "Avau",
["avd"] = "Alviri-Vidari",
["avi"] = "Avikam",
["avk"] = "โคทาวา",
["avm"] = "Angkamuthi",
["avn"] = "Avatime",
["avo"] = "Agavotaguerra",
["avs"] = "Aushiri",
["avt"] = "Au",
["avu"] = "Avokaya",
["avv"] = "Avá-Canoeiro",
["awa"] = "อวัธ",
["awb"] = "Awa (New Guinea)",
["awc"] = "Cicipu",
["awd-ama"] = "Amarizana",
["awd-amc-pro"] = "Proto-Amuesha-Chamicuro",
["awd-ana"] = "Anauyá",
["awd-apo"] = "Apolista",
["awd-cab"] = "Cabre",
["awd-gnu"] = "Guinau",
["awd-kar"] = "Cariay",
["awd-kaw"] = "Kawishana",
["awd-kmp-pro"] = "Proto-Kampa",
["awd-kus"] = "Kustenau",
["awd-man"] = "Manao",
["awd-mar"] = "Marawan",
["awd-mpr"] = "Maipure",
["awd-mrt"] = "Mariaté",
["awd-nwk-pro"] = "Proto-Nawiki",
["awd-pai"] = "Paikoneka",
["awd-pas"] = "Pasé",
["awd-pro"] = "Proto-Arawak",
["awd-prw-pro"] = "Proto-Paresi-Waura",
["awd-she"] = "Shebayo",
["awd-taa-pro"] = "Proto-Ta-Arawak",
["awd-wai"] = "Wainumá",
["awd-yum"] = "Yumana",
["awe"] = "Awetí",
["awg"] = "Anguthimri",
["awh"] = "Awbono",
["awi"] = "Aekyom",
["awk"] = "Awabakal",
["awm"] = "Arawum",
["awn"] = "Awngi",
["awo"] = "Awak",
["awr"] = "Awera",
["aws"] = "South Awyu",
["awt"] = "Araweté",
["awu"] = "Central Awyu",
["awv"] = "Jair Awyu",
["aww"] = "Awun",
["awx"] = "Awara",
["awy"] = "Edera Awyu",
["axb"] = "Abipón",
["axe"] = "Ayerrerenge",
["axg"] = "Arára (Mato Grosso)",
["axk"] = "Aka (Central Africa)",
["axl"] = "Lower Southern Aranda",
["axm"] = "อาร์มีเนียกลาง",
["axx"] = "Xârâgurè",
["ay"] = "ไอย์มารา",
["aya"] = "Awar",
["ayb"] = "Ayizo",
["ayd"] = "Ayabadhu",
["aye"] = "Ayere",
["ayg"] = "Nyanga (Togo)",
["ayi"] = "Leyigha",
["ayk"] = "Akuku",
["ayl"] = "อาหรับแบบลิเบีย",
["ayn"] = "อาหรับแบบเยเมน",
["ayo"] = "Ayoreo",
["ayp"] = "อาหรับแบบเมโสโปเตเมียเหนือ",
["ayq"] = "Ayi",
["ays"] = "Sorsogon Ayta",
["ayt"] = "Bataan Ayta",
["ayu"] = "Ayu",
["ayy"] = "Tayabas Ayta",
["ayz"] = "Maybrat",
["az"] = "อาเซอร์ไบจาน",
["aza"] = "Azha",
["azc-caz"] = "Cazcan",
["azc-cup-pro"] = "Proto-Cupan",
["azc-ktn"] = "Kitanemuk",
["azc-nah-pro"] = "นาวันดั้งเดิม",
["azc-num-pro"] = "Proto-Numic",
["azc-pro"] = "ยูโต-แอซเทกันดั้งเดิม",
["azc-tak-pro"] = "Proto-Takic",
["azc-tat"] = "Tataviam",
["azd"] = "Eastern Durango Nahuatl",
["azg"] = "San Pedro Amuzgos Amuzgo",
["azm"] = "Ipalapa Amuzgo",
["azn"] = "Western Durango Nahuatl",
["azo"] = "Awing",
["azt"] = "Faire Atta",
["azz"] = "Highland Puebla Nahuatl",
["ba"] = "แบชเคียร์",
["baa"] = "Babatana",
["bab"] = "Bainouk-Gunyuño",
["bac"] = "Baduy",
["bae"] = "Baré",
["baf"] = "Nubaca",
["bag"] = "Tuki",
["bah"] = "Bahamian Creole",
["baj"] = "Barakai",
["bal"] = "บาโลจ",
["ban"] = "บาหลี",
["bao"] = "Waimaha",
["bap"] = "Bantawa",
["bar"] = "บาวาเรีย",
["bas"] = "Basaa",
["bau"] = "Badanchi",
["bav"] = "Babungo",
["baw"] = "Bambili-Bambui",
["bax"] = "Bamum",
["bay"] = "Batuley",
["bba"] = "Baatonum",
["bbb"] = "Barai",
["bbc"] = "Toba Batak",
["bbd"] = "Bau",
["bbe"] = "Bangba",
["bbf"] = "Baibai",
["bbg"] = "Barama",
["bbh"] = "Bugan",
["bbi"] = "Barombi",
["bbj"] = "Ghomala'",
["bbk"] = "Babanki",
["bbl"] = "บัตส์",
["bbm"] = "Babango",
["bbn"] = "Uneapa",
["bbo"] = "Konabéré",
["bbp"] = "West Central Banda",
["bbq"] = "Bamali",
["bbr"] = "Girawa",
["bbs"] = "Bakpinka",
["bbt"] = "Mburku",
["bbu"] = "Bakulung",
["bbv"] = "Karnai",
["bbw"] = "Baba",
["bbx"] = "Bubia",
["bby"] = "Befang",
["bca"] = "Central Bai",
["bcb"] = "Bainouk-Samik",
["bcd"] = "North Babar",
["bce"] = "Bamenyam",
["bcf"] = "Bamu",
["bcg"] = "Baga Pokur",
["bch"] = "Bariai",
["bci"] = "Baoule",
["bcj"] = "Bardi",
["bck"] = "Bunaba",
["bcl"] = "บีโคลตอนกลาง",
["bcm"] = "Banoni",
["bcn"] = "Bibaali",
["bco"] = "Kaluli",
["bcp"] = "Bali",
["bcq"] = "Bench",
["bcr"] = "Babine-Witsuwit'en",
["bcs"] = "Kohumono",
["bct"] = "Bendi",
["bcu"] = "Biliau",
["bcv"] = "Shoo-Minda-Nye",
["bcw"] = "Bana",
["bcy"] = "Bacama",
["bcz"] = "Bainouk-Gunyaamolo",
["bda"] = "Bayot",
["bdb"] = "Basap",
["bdc"] = "Emberá-Baudó",
["bdd"] = "Bunama",
["bde"] = "Bade",
["bdf"] = "Biage",
["bdg"] = "Bonggi",
["bdh"] = "Tara Baka",
["bdi"] = "Burun",
["bdj"] = "Bai (South Sudan)",
["bdk"] = "Budukh",
["bdl"] = "บาเจาแบบอินโดนีเซีย",
["bdm"] = "Buduma",
["bdn"] = "Baldemu",
["bdo"] = "Morom",
["bdp"] = "Bende",
["bdq"] = "บะห์นัร",
["bdr"] = "บาเจาแบบเวสต์โคสต์",
["bds"] = "Burunge",
["bdt"] = "Bokoto",
["bdu"] = "Oroko",
["bdv"] = "Bodo Parja",
["bdw"] = "Baham",
["bdx"] = "Budong-Budong",
["bdy"] = "Bandjalang",
["bdz"] = "Badeshi",
["be"] = "เบลารุส",
["bea"] = "Beaver",
["beb"] = "Bebele",
["bec"] = "Iceve-Maci",
["bed"] = "Bedoanas",
["bee"] = "Byangsi",
["bef"] = "Benabena",
["beg"] = "Belait",
["beh"] = "Biali",
["bei"] = "Bekati'",
["bej"] = "Beja",
["bek"] = "Bebeli",
["bem"] = "Bemba",
["beo"] = "Beami",
["bep"] = "Besoa",
["beq"] = "Beembe",
["ber-fog"] = "Fogaha",
["ber-pro"] = "เบอร์เบอร์ดั้งเดิม",
["ber-zuw"] = "Zuwara",
["bes"] = "Besme",
["bet"] = "Guiberoua Bété",
["beu"] = "บลาการ์",
["bev"] = "Daloa Bété",
["bew"] = "เบอตาวี",
["bex"] = "Jur Modo",
["bey"] = "Akuwagel",
["bez"] = "Kibena",
["bfa"] = "Bari",
["bfb"] = "Pauri Bareli",
["bfc"] = "Panyi Bai",
["bfd"] = "Bafut",
["bfe"] = "Betaf",
["bff"] = "Bofi",
["bfg"] = "Busang Kayan",
["bfh"] = "Blafe",
["bfi"] = "British Sign Language",
["bfj"] = "Bafanji",
["bfk"] = "Ban Khor Sign Language",
["bfl"] = "Banda-Ndélé",
["bfm"] = "Mmen",
["bfn"] = "Bunak",
["bfo"] = "Malba Birifor",
["bfp"] = "Beba",
["bfq"] = "พทคะ",
["bfr"] = "Bazigar",
["bfs"] = "Southern Bai",
["bft"] = "บัลติ",
["bfu"] = "Gahri",
["bfw"] = "Bondo",
["bfx"] = "Bantayanon",
["bfy"] = "Bagheli",
["bfz"] = "Mahasu Pahari",
["bg"] = "บัลแกเรีย",
["bga"] = "Gwamhi-Wuri",
["bgb"] = "Bobongko",
["bgc"] = "หริยาณวี",
["bgd"] = "Rathwi Bareli",
["bge"] = "Bauria",
["bgf"] = "Bangandu",
["bgg"] = "Bugun",
["bgi"] = "Giangan",
["bgj"] = "Bangolan",
["bgk"] = "Bit",
["bgl"] = "Bo",
["bgo"] = "Baga Koga",
["bgq"] = "Bagri",
["bgr"] = "Bawm Chin",
["bgs"] = "Tagabawa",
["bgt"] = "Bughotu",
["bgu"] = "Mbongno",
["bgv"] = "Warkay-Bipim",
["bgw"] = "Bhatri",
["bgx"] = "Balkan Gagauz Turkish",
["bgy"] = "Benggoi",
["bgz"] = "Banggai",
["bh"] = "พิหาร",
["bha"] = "Bharia",
["bhb"] = "Bhili",
["bhc"] = "Biga",
["bhd"] = "Bhadrawahi",
["bhe"] = "Bhaya",
["bhf"] = "Odiai",
["bhg"] = "Binandere",
["bhh"] = "Bukhari",
["bhi"] = "Bhilali",
["bhj"] = "Bahing",
["bhl"] = "Bimin",
["bhm"] = "Bathari",
["bhn"] = "Bohtan Neo-Aramaic",
["bho"] = "โภชปุระ",
["bhp"] = "Bima",
["bhq"] = "Tukang Besi South",
["bhs"] = "Buwal",
["bht"] = "Bhattiyali",
["bhu"] = "Bhunjia",
["bhv"] = "Bahau",
["bhw"] = "Biak",
["bhx"] = "Bhalay",
["bhy"] = "Bhele",
["bhz"] = "Bada",
["bi"] = "บิสลามา",
["bia"] = "Badimaya",
["bib"] = "Bissa",
["bic"] = "Bikaru",
["bid"] = "Bidiyo",
["bie"] = "Bepour",
["bif"] = "Biafada",
["big"] = "Biangai",
["bij"] = "Kwanka",
["bil"] = "Bile",
["bim"] = "Bimoba",
["bin"] = "Edo",
["bio"] = "Nai",
["bip"] = "Bila",
["biq"] = "Bipi",
["bir"] = "Bisorio",
["bit"] = "Berinomo",
["biu"] = "Biete",
["biv"] = "Southern Birifor",
["biw"] = "Kol (Cameroon)",
["bix"] = "Bijori",
["biy"] = "Birhor",
["biz"] = "Baloi",
["bja"] = "Budza",
["bjb"] = "Barngarla",
["bjc"] = "Bariji",
["bje"] = "Biao-Jiao Mien",
["bjf"] = "Barzani Jewish Neo-Aramaic",
["bjg"] = "Bidyogo",
["bjh"] = "Bahinemo",
["bji"] = "Burji",
["bjj"] = "Kannauji",
["bjk"] = "Barok",
["bjl"] = "Bulu (New Guinea)",
["bjm"] = "Bajelani",
["bjn"] = "บันจาร์",
["bjo"] = "Mid-Southern Banda",
["bjp"] = "Fanamaket",
["bjr"] = "Binumarien",
["bjs"] = "Bajan",
["bjt"] = "Balanta-Ganja",
["bju"] = "Busuu",
["bjv"] = "Bedjond",
["bjw"] = "Bakwé",
["bjx"] = "Banao Itneg",
["bjy"] = "Bayali",
["bjz"] = "Baruga",
["bka"] = "Kyak",
["bkc"] = "Baka",
["bkd"] = "บีนูกิด",
["bkf"] = "Beeke",
["bkg"] = "Buraka",
["bkh"] = "Bakoko",
["bki"] = "Baki",
["bkj"] = "Pande",
["bkk"] = "Brokskat",
["bkl"] = "Berik",
["bkm"] = "Kom (Cameroon)",
["bkn"] = "Bukitan",
["bko"] = "Kwa'",
["bkp"] = "Iboko",
["bkq"] = "Bakairí",
["bkr"] = "Bakumpai",
["bks"] = "Masbate Sorsogon",
["bkt"] = "Boloki",
["bku"] = "Buhid",
["bkv"] = "Bekwarra",
["bkw"] = "Bekwel",
["bkx"] = "Baikeno",
["bky"] = "Bokyi",
["bkz"] = "Bungku",
["bla"] = "Blackfoot",
["blb"] = "Bilua",
["blc"] = "Bella Coola",
["bld"] = "Bolango",
["ble"] = "Balanta-Kentohe",
["blf"] = "Buol",
["blg"] = "Balau",
["blh"] = "Kuwaa",
["bli"] = "Bolia",
["blj"] = "Bulungan",
["blk"] = "กะเหรี่ยงปะโอ",
["bll"] = "Biloxi",
["blm"] = "Beli",
["bln"] = "Southern Catanduanes Bicolano",
["blo"] = "Anii",
["blp"] = "Blablanga",
["blq"] = "Baluan-Pam",
["blr"] = "Blang",
["bls"] = "Balaesang",
["blt"] = "ไทดำ",
["blv"] = "Kibala",
["blw"] = "Balangao",
["blx"] = "Mag-Indi Ayta",
["bly"] = "Notre",
["blz"] = "Balantak",
["bm"] = "บัมบารา",
["bma"] = "Lame",
["bmb"] = "Bembe",
["bmc"] = "Biem",
["bmd"] = "Baga Manduri",
["bme"] = "Limassa",
["bmf"] = "Bom",
["bmg"] = "Bamwe",
["bmh"] = "Kein",
["bmi"] = "Bagirmi",
["bmj"] = "Bote-Majhi",
["bmk"] = "Ghayavi",
["bml"] = "Bomboli",
["bmn"] = "Bina",
["bmo"] = "Bambalang",
["bmp"] = "Bulgebi",
["bmq"] = "Bomu",
["bmr"] = "Muinane",
["bmt"] = "Biao Mon",
["bmu"] = "Somba-Siawari",
["bmv"] = "Bum",
["bmw"] = "Bomwali",
["bmx"] = "Baimak",
["bmz"] = "Baramu",
["bn"] = "เบงกอล",
["bna"] = "Bonerate",
["bnb"] = "Bookan",
["bnd"] = "Banda",
["bne"] = "Bintauna",
["bnf"] = "Masiwang",
["bng"] = "Benga",
["bni"] = "Bangi",
["bnj"] = "Eastern Tawbuid",
["bnk"] = "Bierebo",
["bnl"] = "Boon",
["bnm"] = "Batanga",
["bnn"] = "Bunun",
["bno"] = "อาซี",
["bnp"] = "Bola",
["bnq"] = "Bantik",
["bnr"] = "Butmas-Tur",
["bns"] = "Bundeli",
["bnt-bal"] = "Balong",
["bnt-bon"] = "Boma Nkuu",
["bnt-boy"] = "Boma Yumu",
["bnt-bwa"] = "Bwala",
["bnt-cmw"] = "Chimwiini",
["bnt-ind"] = "Indanga",
["bnt-lal"] = "Lala (South Africa)",
["bnt-mpi"] = "Mpiin",
["bnt-mpu"] = "Mpuono",
["bnt-ngu-pro"] = "งูนีดั้งเดิม",
["bnt-phu"] = "Phuthi",
["bnt-pro"] = "แบนทูดั้งเดิม",
["bnt-sab-pro"] = "Proto-Sabaki",
["bnt-sbo"] = "South Boma",
["bnt-sts-pro"] = "Proto-Sotho-Tswana",
["bnu"] = "Bentong",
["bnv"] = "Beneraf",
["bnw"] = "Bisis",
["bnx"] = "Bangubangu",
["bny"] = "Bintulu",
["bnz"] = "Beezen",
["bo"] = "ทิเบต",
["boa"] = "Bora",
["bob"] = "Aweer",
["boe"] = "Mundabli",
["bof"] = "Bolon",
["bog"] = "Bamako Sign Language",
["boh"] = "North Boma",
["boi"] = "Barbareño",
["boj"] = "Anjam",
["bok"] = "Bonjo",
["bol"] = "โบล",
["bom"] = "Berom",
["bon"] = "Bine",
["boo"] = "Tiemacèwè Bozo",
["bop"] = "Bonkiman",
["boq"] = "Bogaya",
["bor"] = "Borôro",
["bot"] = "Bongo",
["bou"] = "Bondei",
["bov"] = "Tuwuli",
["bow"] = "Rema",
["box"] = "Buamu",
["boy"] = "Bodo (Central Africa)",
["boz"] = "Tiéyaxo Bozo",
["bpa"] = "Daakaka",
["bpd"] = "Banda-Banda",
["bpg"] = "Bonggo",
["bph"] = "Botlikh",
["bpi"] = "Bagupi",
["bpj"] = "Binji",
["bpk"] = "Orowe",
["bpl"] = "Broome Pearling Lugger Pidgin",
["bpm"] = "Biyom",
["bpn"] = "Dzao Min",
["bpo"] = "Anasi",
["bpp"] = "Kaure",
["bpq"] = "Banda Malay",
["bpr"] = "Koronadal Blaan",
["bps"] = "Sarangani Blaan",
["bpt"] = "Barrow Point",
["bpu"] = "Bongu",
["bpv"] = "Bian Marind",
["bpx"] = "Palya Bareli",
["bpy"] = "Bishnupriya Manipuri",
["bpz"] = "Bilba",
["bqa"] = "Tchumbuli",
["bqb"] = "Bagusa",
["bqc"] = "Boko",
["bqd"] = "Bung",
["bqf"] = "Baga Kaloum",
["bqg"] = "Bago-Kusuntu",
["bqh"] = "Baima",
["bqi"] = "Bakhtiari",
["bqj"] = "Bandial",
["bqk"] = "Banda-Mbrès",
["bql"] = "Bilakura",
["bqm"] = "Wumboko",
["bqn"] = "Bulgarian Sign Language",
["bqo"] = "Balo",
["bqp"] = "Busa",
["bqq"] = "Biritai",
["bqr"] = "Burusu",
["bqs"] = "Bosngun",
["bqt"] = "Bamukumbit",
["bqu"] = "Boguru",
["bqv"] = "Begbere-Ejar",
["bqw"] = "Buru (Nigeria)",
["bqx"] = "Baangi",
["bqy"] = "Bengkala Sign Language",
["bqz"] = "Bakaka",
["br"] = "เบรอตง",
["bra"] = "พรัช",
["brb"] = "Lave",
["brc"] = "Berbice Creole Dutch",
["brd"] = "Baraamu",
["brf"] = "Bera",
["brg"] = "Baure",
["brh"] = "บราฮุอี",
["bri"] = "Mokpwe",
["brj"] = "Bieria",
["brk"] = "Birgid",
["brl"] = "Birwa",
["brm"] = "Barambu",
["brn"] = "Boruca",
["bro"] = "Brokkat",
["brp"] = "Barapasi",
["brq"] = "Breri",
["brr"] = "Birao",
["brs"] = "Baras",
["brt"] = "Bitare",
["bru"] = "บรูตะวันออก",
["brv"] = "บรูตะวันตก",
["brw"] = "Bellari",
["brx"] = "โบโด",
["bry"] = "Burui",
["brz"] = "Bilbil",
["bsa"] = "Abinomn",
["bsb"] = "Brunei Bisaya",
["bsc"] = "Bassari",
["bse"] = "Wushi",
["bsf"] = "Bauchi",
["bsg"] = "Bashkardi",
["bsh"] = "Kamkata-viri",
["bsi"] = "Bassossi",
["bsj"] = "Bangwinji",
["bsk"] = "Burushaski",
["bsl"] = "Basa-Gumna",
["bsm"] = "Busami",
["bsn"] = "Barasana",
["bso"] = "Buso",
["bsp"] = "Baga Sitemu",
["bsq"] = "Bassa",
["bsr"] = "Bassa-Kontagora",
["bss"] = "Akoose",
["bst"] = "Basketo",
["bsu"] = "Bahonsuai",
["bsv"] = "Baga Sobané",
["bsw"] = "Baiso",
["bsx"] = "Yangkam",
["bsy"] = "Sabah Bisaya",
["bta"] = "Bata",
["btc"] = "Bati (Cameroon)",
["btd"] = "Dairi Batak",
["bte"] = "Gamo-Ningi",
["btf"] = "Birgit",
["btg"] = "Gagnoa Bété",
["bth"] = "Biatah Bidayuh",
["bti"] = "Burate",
["btj"] = "Bacanese Malay",
["btk-pro"] = "Proto-Batak",
["btm"] = "Mandailing Batak",
["btn"] = "Ratagnon",
["bto"] = "Iriga Bicolano",
["btp"] = "Budibud",
["btq"] = "Batek",
["btr"] = "Baetora",
["bts"] = "Simalungun Batak",
["btt"] = "Bete-Bendi",
["btu"] = "Batu",
["btv"] = "Bateri",
["btw"] = "Butuanon",
["btx"] = "Karo Batak",
["bty"] = "Bobot",
["btz"] = "Alas-Kluet Batak",
["bua"] = "บูร์ยัต",
["bub"] = "Bua",
["bud"] = "Ntcham",
["bue"] = "Beothuk",
["buf"] = "Bushoong",
["bug"] = "บูกิส",
["buh"] = "Younuo Bunu",
["bui"] = "Bongili",
["buj"] = "Basa-Gurmana",
["buk"] = "Bukawa",
["bum"] = "Bulu (Cameroon)",
["bun"] = "Sherbro",
["buo"] = "Terei",
["bup"] = "Busoa",
["buq"] = "Brem",
["bus"] = "Bokobaru",
["but"] = "Bungain",
["buu"] = "Budu",
["buv"] = "Bun",
["buw"] = "Bubi",
["bux"] = "Boghom",
["buy"] = "Mmani",
["bva"] = "Barein",
["bvb"] = "Bube",
["bvc"] = "Baelelea",
["bvd"] = "Baeggu",
["bve"] = "Berau Malay",
["bvf"] = "Boor",
["bvg"] = "Bonkeng",
["bvh"] = "Bure",
["bvi"] = "Belanda Viri",
["bvj"] = "Baan",
["bvk"] = "Bukat",
["bvl"] = "Bolivian Sign Language",
["bvm"] = "Bamunka",
["bvn"] = "Buna",
["bvo"] = "Bolgo",
["bvp"] = "Bumang",
["bvq"] = "Birri",
["bvr"] = "Burarra",
["bvt"] = "Bati (Indonesia)",
["bvu"] = "Bukit Malay",
["bvv"] = "Baniva",
["bvw"] = "Boga",
["bvx"] = "Babole",
["bvy"] = "Baybayanon",
["bvz"] = "Bauzi",
["bwa"] = "Bwatoo",
["bwb"] = "Namosi-Naitasiri-Serua",
["bwc"] = "Bwile",
["bwd"] = "Bwaidoka",
["bwe"] = "Bwe Karen",
["bwf"] = "Boselewa",
["bwg"] = "Barwe",
["bwh"] = "Bishuo",
["bwi"] = "Baniwa",
["bwj"] = "Láá Láá Bwamu",
["bwk"] = "Bauwaki",
["bwl"] = "Bwela",
["bwm"] = "Biwat",
["bwn"] = "Wunai Bunu",
["bwo"] = "Shinasha",
["bwp"] = "Mandobo Bawah",
["bwq"] = "Southern Bobo",
["bwr"] = "Bura",
["bws"] = "Bomboma",
["bwt"] = "Bafaw",
["bwu"] = "Buli (Ghana)",
["bww"] = "Bwa",
["bwx"] = "Bu-Nao Bunu",
["bwy"] = "Cwi Bwamu",
["bwz"] = "Bwisi",
["bxa"] = "Bauro",
["bxb"] = "Belanda Bor",
["bxc"] = "Molengue",
["bxd"] = "Pela",
["bxe"] = "Ongota",
["bxf"] = "Bilur",
["bxg"] = "Bangala",
["bxh"] = "Buhutu",
["bxi"] = "Pirlatapa",
["bxj"] = "Bayungu",
["bxk"] = "Bukusu",
["bxl"] = "Jalkunan",
["bxn"] = "Burduna",
["bxo"] = "Barikanchi",
["bxp"] = "Bebil",
["bxq"] = "Beele",
["bxs"] = "Busam",
["bxv"] = "Berakou",
["bxw"] = "Banka",
["bxz"] = "Binahari",
["bya"] = "Palawan Batak",
["byb"] = "Bikya",
["byc"] = "Ubaghara",
["byd"] = "Benyadu'",
["bye"] = "Pouye",
["byf"] = "Bete",
["byg"] = "Baygo",
["byh"] = "Bujhyal",
["byi"] = "Buyu",
["byj"] = "Binawa",
["byk"] = "Biao",
["byl"] = "Bayono",
["bym"] = "Bidyara",
["byn"] = "Blin",
["byo"] = "Biyo",
["byp"] = "Bumaji",
["byq"] = "Basay",
["byr"] = "Baruya",
["bys"] = "Burak",
["byt"] = "Berti",
["byv"] = "Medumba",
["byw"] = "Belhariya",
["byx"] = "Qaqet",
["byz"] = "Banaro",
["bza"] = "Bandi",
["bzb"] = "Andio",
["bzd"] = "Bribri",
["bze"] = "Jenaama Bozo",
["bzf"] = "Boikin",
["bzg"] = "Babuza",
["bzh"] = "Mapos Buang",
["bzi"] = "บีซู",
["bzj"] = "Belizean Creole",
["bzk"] = "Nicaraguan Creole",
["bzl"] = "Boano (Sulawesi)",
["bzm"] = "Bolondo",
["bzn"] = "Boano (Maluku)",
["bzo"] = "Bozaba",
["bzp"] = "Kemberano",
["bzq"] = "Buli (Indonesia)",
["bzr"] = "Biri",
["bzs"] = "Brazilian Sign Language",
["bzu"] = "Burmeso",
["bzv"] = "Bebe",
["bzw"] = "Basa",
["bzx"] = "Hainyaxo Bozo",
["bzy"] = "Obanliku",
["bzz"] = "Evant",
["ca"] = "กาตาลา",
["caa"] = "Ch'orti'",
["cab"] = "Garifuna",
["cac"] = "Chuj",
["cad"] = "Caddo",
["cae"] = "Laalaa",
["caf"] = "Southern Carrier",
["cag"] = "Nivaclé",
["cah"] = "Cahuarano",
["caj"] = "Chané",
["cak"] = "Kaqchikel",
["cal"] = "Carolinian",
["cam"] = "Cèmuhî",
["can"] = "Chambri",
["cao"] = "Chácobo",
["cap"] = "Chipaya",
["caq"] = "คาร์นิโคบาร์",
["car"] = "Kari'na",
["cas"] = "Tsimané",
["cau-abz-pro"] = "Proto-Abkhaz-Abaza",
["cau-and-pro"] = "Proto-Andian",
["cau-ava-pro"] = "Proto-Avaro-Andian",
["cau-cir-pro"] = "Proto-Circassian",
["cau-drg-pro"] = "Proto-Dargwa",
["cau-lzg-pro"] = "Proto-Lezghian",
["cau-nec-pro"] = "คอเคเซียนตะวันออกเฉียงเหนือดั้งเดิม",
["cau-nkh-pro"] = "นัคดั้งเดิม",
["cau-nwc-pro"] = "คอเคเซียนตะวันตกเฉียงเหนือดั้งเดิม",
["cau-tsz-pro"] = "Proto-Tsezian",
["cav"] = "Cavineña",
["caw"] = "Kallawaya",
["cax"] = "Chiquitano",
["cay"] = "Cayuga",
["caz"] = "Canichana",
["cba-ata"] = "Atanques",
["cba-cat"] = "Catío Chibcha",
["cba-dor"] = "Dorasque",
["cba-dui"] = "Duit",
["cba-hue"] = "Huetar",
["cba-nut"] = "Nutabe",
["cba-pro"] = "Proto-Chibchan",
["cbb"] = "Cabiyarí",
["cbc"] = "Carapana",
["cbd"] = "Carijona",
["cbg"] = "Chimila",
["cbi"] = "Chachi",
["cbj"] = "Ede Cabe",
["cbk"] = "ชาบากาโน",
["cbl"] = "Bualkhaw Chin",
["cbn"] = "ญัฮกุร",
["cbo"] = "Izora",
["cbq"] = "Tsucuba",
["cbr"] = "Cashibo-Cacataibo",
["cbs"] = "Cashinahua",
["cbt"] = "Chayahuita",
["cbu"] = "Candoshi-Shapra",
["cbv"] = "Cacua",
["cbw"] = "Kinabalian",
["cby"] = "Carabayo",
["cca"] = "Cauca",
["ccc"] = "Chamicuro",
["ccd"] = "Cafundó",
["cce"] = "Chopi",
["ccg"] = "Chamba Daka",
["cch"] = "Atsam",
["ccj"] = "Kasanga",
["ccl"] = "Cutchi-Swahili",
["ccm"] = "Malaccan Creole Malay",
["cco"] = "Comaltepec Chinantec",
["ccp"] = "จักมา",
["ccr"] = "Cacaopera",
["ccs-gzn-pro"] = "จอร์เจียน-แซนดั้งเดิม",
["ccs-pro"] = "คาร์ทเวเลียนดั้งเดิม",
["cda"] = "Choni",
["cdc-cbm-pro"] = "ชาดิกตอนกลางดั้งเดิม",
["cdc-mas-pro"] = "Proto-Masa",
["cdc-pro"] = "ชาดิกดั้งเดิม",
["cdd-pro"] = "Proto-Caddoan",
["cde"] = "Chenchu",
["cdf"] = "Chiru",
["cdh"] = "Chambeali",
["cdi"] = "Chodri",
["cdj"] = "Churahi",
["cdm"] = "Chepang",
["cdn"] = "Chaudangsi",
["cdo"] = "หมิ่นตะวันออก",
["cdr"] = "Cinda-Regi-Tiyal",
["cds"] = "Chadian Sign Language",
["cdy"] = "Chadong",
["cdz"] = "Koda",
["ce"] = "เชเชน",
["cea"] = "Lower Chehalis",
["ceb"] = "เซบัวโน",
["ceg"] = "Chamacoco",
["cel-bry-pro"] = "บริทอนิกดั้งเดิม",
["cel-gal"] = "Gallaecian",
["cel-gau"] = "กอล",
["cel-pro"] = "เคลติกดั้งเดิม",
["cen"] = "Cen",
["cet"] = "Centúúm",
["cfa"] = "Dijim-Bwilim",
["cfd"] = "Cara",
["cfg"] = "Como Karim",
["cfm"] = "Falam Chin",
["cga"] = "Changriwa",
["cgc"] = "Kagayanen",
["cgg"] = "Rukiga",
["cgk"] = "Chocangaca",
["ch"] = "ชามอร์โร",
["chb"] = "Chibcha",
["chc"] = "Catawba",
["chd"] = "Highland Oaxaca Chontal",
["chf"] = "Chontal Maya",
["chg"] = "ชากาทาย",
["chh"] = "Chinook",
["chi-pro"] = "Proto-Chimakuan",
["chj"] = "Ojitlán Chinantec",
["chk"] = "Chuukese",
["chl"] = "Cahuilla",
["chm-pro"] = "Proto-Mari",
["chn"] = "Chinook Jargon",
["cho"] = "Choctaw",
["chp"] = "Chipewyan",
["chq"] = "Quiotepec Chinantec",
["chr"] = "เชโรกี",
["cht"] = "Cholón",
["chw"] = "Chuabo",
["chx"] = "Chantyal",
["chy"] = "เชเยนน์",
["chz"] = "Ozumacín Chinantec",
["cia"] = "Cia-Cia",
["cib"] = "Ci Gbe",
["cic"] = "Chickasaw",
["cid"] = "Chimariko",
["cie"] = "Cineni",
["cih"] = "Chinali",
["cik"] = "Chitkuli Kinnauri",
["cim"] = "คิมบรี",
["cin"] = "Cinta Larga",
["cip"] = "Chiapanec",
["cir"] = "Tinrin",
["ciy"] = "Chaima",
["cja"] = "จามตะวันตก",
["cje"] = "Chru",
["cjh"] = "Upper Chehalis",
["cji"] = "Chamalal",
["cjk"] = "Chokwe",
["cjm"] = "จามตะวันออก",
["cjn"] = "Chenapian",
["cjo"] = "Ashéninka Pajonal",
["cjp"] = "Cabécar",
["cjs"] = "โชร์",
["cjv"] = "Chuave",
["cjy"] = "จิ้น",
["ckb"] = "เคิร์ดตอนกลาง",
["ckh"] = "Chak",
["ckl"] = "Cibak",
["ckn"] = "Kaang Chin",
["cko"] = "Anufo",
["ckq"] = "Kajakse",
["ckr"] = "Kairak",
["cks"] = "Tayo",
["ckt"] = "ชุกชี",
["cku"] = "Koasati",
["ckv"] = "กบาลัน",
["ckx"] = "Caka",
["cky"] = "Cakfem-Mushere",
["ckz"] = "Kaqchikel-K'iche' Mixed Language",
["cla"] = "Ron",
["clc"] = "Chilcotin",
["cld"] = "Chaldean Neo-Aramaic",
["cle"] = "Lealao Chinantec",
["clh"] = "Chilisso",
["cli"] = "Chakali",
["clj"] = "Laitu Chin",
["clk"] = "Idu",
["cll"] = "Chala",
["clm"] = "Klallam",
["clo"] = "Lowland Oaxaca Chontal",
["clt"] = "Lutuv",
["clu"] = "Caluyanun",
["clw"] = "Chulym",
["cly"] = "Eastern Highland Chatino",
["cma"] = "หมะ",
["cmc-pro"] = "จามิกดั้งเดิม",
["cme"] = "Cerma",
["cmg"] = "มองโกเลียคลาสสิก",
["cmi"] = "Emberá-Chamí",
["cml"] = "Campalagian",
["cmm"] = "Michigamea",
["cmn"] = "จีนกลาง",
["cmo"] = "มนองตอนกลาง",
["cmr"] = "Mro Chin",
["cms"] = "Messapic",
["cmt"] = "Camtho",
["cna"] = "Changthang",
["cnb"] = "Chinbon Chin",
["cnc"] = "Cốông",
["cng"] = "Northern Qiang",
["cnh"] = "Lai",
["cni"] = "Asháninka",
["cnk"] = "Khumi Chin",
["cnl"] = "Lalana Chinantec",
["cno"] = "Con",
["cnp"] = "ผิงเหนือ",
["cns"] = "Central Asmat",
["cnt"] = "Tepetotutla Chinantec",
["cnu"] = "Chenoua",
["cnw"] = "Ngawn Chin",
["cnx"] = "Middle Cornish",
["co"] = "คอร์ซิกา",
["coa"] = "Cocos Islands Malay",
["cob"] = "Chicomuceltec",
["coc"] = "Cocopa",
["cod"] = "Cocama",
["coe"] = "Koreguaje",
["cof"] = "Tsafiki",
["cog"] = "ชอง",
["coh"] = "Chichonyi-Chidzihana-Chikauma",
["coj"] = "Cochimi",
["cok"] = "Santa Teresa Cora",
["col"] = "Columbia-Wenatchi",
["com"] = "Comanche",
["con"] = "Cofán",
["coo"] = "Comox",
["cop"] = "คอปติก",
["coq"] = "Coquille",
["cot"] = "Caquinte",
["cou"] = "Wamey",
["cov"] = "เฉ่าเหมียว",
["cow"] = "Cowlitz",
["cox"] = "Nanti",
["coy"] = "Coyaima",
["coz"] = "Chochotec",
["cpa"] = "Palantla Chinantec",
["cpb"] = "Ucayali-Yurúa Ashéninka",
["cpc"] = "Ajyíninka Apurucayali",
["cpg"] = "Cappadocian Greek",
["cpi"] = "Chinese Pidgin English",
["cpn"] = "Cherepon",
["cpo"] = "Kpee",
["cps"] = "Capiznon",
["cpu"] = "Pichis Ashéninka",
["cpx"] = "ผูเซียน",
["cpy"] = "South Ucayali Ashéninka",
["cqd"] = "Chuanqiandian Cluster Miao",
["cr"] = "ครี",
["cra"] = "Chara",
["crb"] = "Kalinago",
["crc"] = "Lonwolwol",
["crd"] = "Coeur d'Alene",
["crf"] = "Caramanta",
["crg"] = "Michif",
["crh"] = "ตาตาร์แบบไครเมีย",
["cri"] = "Sãotomense",
["crj"] = "Southern East Cree",
["crk"] = "Plains Cree",
["crl"] = "Northern East Cree",
["crm"] = "Moose Cree",
["crn"] = "Cora",
["cro"] = "Crow",
["crp-bip"] = "Basque-Icelandic Pidgin",
["crp-gep"] = "West Greenlandic Pidgin",
["crp-kia"] = "Kiautschou German Pidgin",
["crp-mar"] = "Maroon Spirit Language",
["crp-mpp"] = "Macau Pidgin Portuguese",
["crp-rsn"] = "Russenorsk",
["crp-slb"] = "Solombala English",
["crp-spp"] = "Samoan Plantation Pidgin",
["crp-tpr"] = "Taimyr Pidgin Russian",
["crq"] = "Iyo'wujwa Chorote",
["crr"] = "Carolina Algonquian",
["crs"] = "Seychellois Creole",
["crt"] = "Iyojwa'ja Chorote",
["crv"] = "Chaura",
["crw"] = "Chrau",
["crx"] = "Carrier",
["cry"] = "Cori",
["crz"] = "Cruzeño",
["cs"] = "เช็ก",
["csa"] = "Chiltepec Chinantec",
["csb"] = "คาชุบ",
["csc"] = "Catalan Sign Language",
["csd"] = "Chiangmai Sign Language",
["cse"] = "Czech Sign Language",
["csf"] = "Cuban Sign Language",
["csg"] = "Chilean Sign Language",
["csh"] = "Asho Chin",
["csi"] = "Coast Miwok",
["csj"] = "Songlai Chin",
["csk"] = "Jola-Kasa",
["csl"] = "Chinese Sign Language",
["csm"] = "Central Sierra Miwok",
["csn"] = "Colombian Sign Language",
["cso"] = "Sochiapam Chinantec",
["csp"] = "ผิงใต้",
["csq"] = "Croatian Sign Language",
["csr"] = "Costa Rican Sign Language",
["css"] = "Southern Ohlone",
["cst"] = "Northern Ohlone",
["csu-bba-pro"] = "Proto-Bongo-Bagirmi",
["csu-maa-pro"] = "Proto-Mangbetu",
["csu-pro"] = "Proto-Central Sudanic",
["csu-sar-pro"] = "Proto-Sara",
["csv"] = "Sumtu Chin",
["csw"] = "Swampy Cree",
["csx"] = "Cambodian Sign Language",
["csy"] = "Siyin Chin",
["csz"] = "Coos",
["cta"] = "Tataltepec Chatino",
["ctc"] = "Chetco-Tolowa",
["ctd"] = "Tedim Chin",
["cte"] = "Tepinapa Chinantec",
["ctg"] = "Chittagonian",
["cth"] = "Thaiphum Chin",
["ctl"] = "Tlacoatzintepec Chinantec",
["ctm"] = "Chitimacha",
["ctn"] = "Chhintange",
["cto"] = "Emberá-Catío",
["ctp"] = "Western Highland Chatino",
["cts"] = "Northern Catanduanes Bicolano",
["ctt"] = "Wayanad Chetti",
["ctu"] = "Chol",
["ctz"] = "Zacatepec Chatino",
["cu"] = "สลาวอนิกคริสตจักรเก่า",
["cua"] = "Cua",
["cub"] = "Cubeo",
["cuc"] = "Usila Chinantec",
["cug"] = "Cung",
["cuh"] = "Chuka",
["cui"] = "Cuiba",
["cuj"] = "Mashco Piro",
["cuk"] = "Kuna",
["cul"] = "Culina",
["cuo"] = "Cumanagoto",
["cup"] = "Cupeño",
["cuq"] = "จุน",
["cur"] = "Chhulung",
["cus-ash"] = "Ashraaf",
["cus-hec-pro"] = "Proto-Highland East Cushitic",
["cus-pro"] = "Proto-Cushitic",
["cus-som-pro"] = "โซมาลอยด์ดั้งเดิม",
["cus-sou-pro"] = "Proto-South Cushitic",
["cut"] = "Teutila Cuicatec",
["cuu"] = "Tai Ya",
["cuv"] = "Cuvok",
["cuw"] = "Chukwa",
["cux"] = "Tepeuxila Cuicatec",
["cuy"] = "Cuitlatec",
["cv"] = "ชูวัช",
["cvg"] = "Chug",
["cvn"] = "Valle Nacional Chinantec",
["cwa"] = "Kabwa",
["cwb"] = "Maindo",
["cwd"] = "Woods Cree",
["cwe"] = "Kwere",
["cwg"] = "Chewong",
["cwt"] = "Kuwaataay",
["cy"] = "เวลส์",
["cya"] = "Nopala Chatino",
["cyb"] = "Cayubaba",
["cyo"] = "Cuyunon",
["czh"] = "Huizhou",
["czk"] = "Knaanic",
["czn"] = "Zenzontepec Chatino",
["czo"] = "หมิ่นตอนกลาง",
["czt"] = "Zotung Chin",
["da"] = "เดนมาร์ก",
["daa"] = "Dangaléat",
["dac"] = "Dambi",
["dad"] = "Marik",
["dae"] = "Duupa",
["dag"] = "Dagbani",
["dah"] = "Gwahatike",
["dai"] = "Day",
["daj"] = "Dar Fur Daju",
["dak"] = "ดาโคตา",
["dal"] = "Dahalo",
["dam"] = "Damakawa",
["dao"] = "Daai Chin",
["daq"] = "Dandami Maria",
["dar"] = "Dargwa",
["das"] = "Daho-Doo",
["dau"] = "Dar Sila Daju",
["dav"] = "Taita",
["daw"] = "Davawenyo",
["dax"] = "Dayi",
["daz"] = "Dao",
["dba"] = "Bangime",
["dbb"] = "Deno",
["dbd"] = "Dadiya",
["dbe"] = "Dabe",
["dbf"] = "Edopi",
["dbg"] = "Dogul Dom",
["dbi"] = "Doka",
["dbj"] = "อีดาอัน",
["dbl"] = "Dyirbal",
["dbm"] = "Duguri",
["dbn"] = "Duriankere",
["dbo"] = "Dulbu",
["dbp"] = "Duwai",
["dbq"] = "Daba",
["dbr"] = "Dabarre",
["dbt"] = "Ben Tey",
["dbu"] = "Bondum Dom Dogon",
["dbv"] = "Dungu",
["dbw"] = "Bankan Tey Dogon",
["dby"] = "Dibiyaso",
["dcc"] = "Deccani",
["dcr"] = "เนเกอร์ฮอลันดส์",
["dda"] = "Dadi Dadi",
["ddd"] = "Dongotono",
["dde"] = "Doondo",
["ddg"] = "Fataluku",
["ddi"] = "Diodio",
["ddj"] = "Jaru",
["ddn"] = "Dendi",
["ddo"] = "Tsez",
["ddr"] = "Dhudhuroa",
["dds"] = "Donno So Dogon",
["ddw"] = "Dawera-Daweloor",
["de"] = "เยอรมัน",
["dec"] = "Dagik",
["ded"] = "Dedua",
["dee"] = "Dewoin",
["def"] = "Dezfuli",
["deg"] = "Degema",
["deh"] = "Dehwari",
["dei"] = "Demisa",
["dem"] = "Dem",
["dep"] = "Pidgin Delaware",
["der"] = "Deori",
["des"] = "Desano",
["dev"] = "Domung",
["dez"] = "Dengese",
["dga"] = "Southern Dagaare",
["dgb"] = "Bunoge",
["dgc"] = "Casiguran Dumagat Agta",
["dgd"] = "Dagaari Dioula",
["dge"] = "Degenan",
["dgg"] = "Doga",
["dgh"] = "Dghwede",
["dgi"] = "Northern Dagara",
["dgk"] = "Dagba",
["dgn"] = "Dagoman",
["dgo"] = "Hindi Dogri",
["dgr"] = "Dogrib",
["dgs"] = "Dogoso",
["dgt"] = "Ntra'ngith",
["dgw"] = "Daungwurrung",
["dgx"] = "Doghoro",
["dgz"] = "Daga",
["dhd"] = "Dhundhari",
["dhg"] = "Dhangu",
["dhi"] = "Dhimal",
["dhl"] = "Dhalandji",
["dhm"] = "Zemba",
["dhn"] = "Dhanki",
["dho"] = "Dhodia",
["dhr"] = "Tharrgari",
["dhs"] = "Dhaiso",
["dhu"] = "Dhurga",
["dhv"] = "Drehu",
["dhw"] = "Danuwar",
["dhx"] = "Dhungaloo",
["dia"] = "Dia",
["dib"] = "South Central Dinka",
["dic"] = "Lakota Dida",
["did"] = "Didinga",
["dif"] = "Dieri",
["dig"] = "Digo",
["dii"] = "Dimbong",
["dij"] = "Dai",
["dik"] = "Southwestern Dinka",
["dil"] = "Dilling",
["dim"] = "Dime",
["din"] = "Dinka",
["dio"] = "Dibo",
["dip"] = "Northeastern Dinka",
["dir"] = "Dirim",
["dis"] = "Dimasa",
["diu"] = "Gciriku",
["diw"] = "Northwestern Dinka",
["dix"] = "Dixon Reef",
["diy"] = "Diuwe",
["diz"] = "Ding",
["dja"] = "Djadjawurrung",
["djb"] = "Djinba",
["djc"] = "Dar Daju Daju",
["djd"] = "Jaminjung",
["dje"] = "Zarma",
["djf"] = "Djangun",
["dji"] = "Djinang",
["djj"] = "Ndjébbana",
["djk"] = "Aukan",
["djl"] = "Djiwarli",
["djm"] = "Jamsay",
["djn"] = "Djauan",
["djo"] = "Jangkang",
["djr"] = "Djambarrpuyngu",
["dju"] = "Kapriman",
["djw"] = "Djawi",
["dka"] = "Dakpa",
["dkk"] = "Dakka",
["dkr"] = "Kuijau",
["dks"] = "Southeastern Dinka",
["dkx"] = "Mazagway",
["dlg"] = "Dolgan",
["dlk"] = "Dahalik",
["dlm"] = "แดลเมเชีย",
["dln"] = "Darlong",
["dma"] = "Duma",
["dmb"] = "Mombo Dogon",
["dmc"] = "Gavak",
["dmd"] = "Madhi Madhi",
["dme"] = "Dugwor",
["dmf"] = "Medefaidrin",
["dmg"] = "กีนาบาตางันตอนบน",
["dmk"] = "Domaaki",
["dml"] = "Dameli",
["dmm"] = "Dama (Nigeria)",
["dmn-dam"] = "Dama (Sierra Leone)",
["dmn-mdw-pro"] = "Proto-Western Mande",
["dmn-pro"] = "Proto-Mande",
["dmo"] = "Kemezung",
["dmr"] = "East Damar",
["dms"] = "Dampelas",
["dmu"] = "Dubu",
["dmv"] = "Dumpas",
["dmw"] = "Mudburra",
["dmx"] = "Dema",
["dmy"] = "Demta",
["dna"] = "Upper Grand Valley Dani",
["dnd"] = "Daonda",
["dne"] = "Ndendeule",
["dng"] = "ดุงกาน",
["dni"] = "Lower Grand Valley Dani",
["dnj"] = "Dan",
["dnk"] = "Dengka",
["dnn"] = "Dzuun",
["dno"] = "Ndrulo",
["dnr"] = "Danaru",
["dnt"] = "Mid Grand Valley Dani",
["dnu"] = "Danau",
["dnv"] = "Danu",
["dnw"] = "Western Dani",
["dny"] = "Dení",
["doa"] = "Dom",
["dob"] = "Dobu",
["doc"] = "ต้งเหนือ",
["doe"] = "Doe",
["dof"] = "Domu",
["doh"] = "Dong",
["doi"] = "Dogri",
["dok"] = "Dondo",
["dol"] = "Doso",
["don"] = "Doura",
["doo"] = "Dongo",
["dop"] = "Lukpa",
["doq"] = "Dominican Sign Language",
["dor"] = "Dori'o",
["dos"] = "Dogosé",
["dot"] = "Dass",
["dov"] = "Toka-Leya",
["dow"] = "Doyayo",
["dox"] = "Bussa",
["doy"] = "Dompo",
["doz"] = "Dorze",
["dpp"] = "Papar",
["dra-bry"] = "Beary",
["dra-cen-pro"] = "ดราวิเดียนตอนกลางดั้งเดิม",
["dra-mkn"] = "Middle Kannada",
["dra-nor-pro"] = "ดราวิเดียนเหนือดั้งเดิม",
["dra-okn"] = "Old Kannada",
["dra-ote"] = "Old Telugu",
["dra-pro"] = "ดราวิเดียนดั้งเดิม",
["dra-sdo-pro"] = "ดราวิเดียนใต้ที่หนึ่งดั้งเดิม",
["dra-sdt-pro"] = "ดราวิเดียนใต้ที่สองดั้งเดิม",
["dra-sou-pro"] = "ดราวิเดียนใต้ดั้งเดิม",
["drb"] = "Dair",
["drc"] = "Minderico",
["drd"] = "Darmiya",
["drg"] = "Rungus",
["dri"] = "Lela",
["drl"] = "Baagandji",
["drn"] = "West Damar",
["dro"] = "Daro-Matu Melanau",
["drq"] = "Dura",
["drs"] = "Gedeo",
["dru"] = "Rukai",
["dru-pro"] = "Proto-Rukai",
["dry"] = "Darai",
["dsb"] = "ซอร์เบียตอนล่าง",
["dse"] = "Dutch Sign Language",
["dsh"] = "Daasanach",
["dsi"] = "Disa",
["dsl"] = "Danish Sign Language",
["dsn"] = "Dusner",
["dso"] = "Desiya",
["dsq"] = "Tadaksahak",
["dta"] = "Daur",
["dtb"] = "Labuk-Kinabatangan Kadazan",
["dtd"] = "Ditidaht",
["dth"] = "Adithinngithigh",
["dti"] = "Ana Tinga Dogon",
["dtk"] = "Tene Kan Dogon",
["dtm"] = "Tomo Kan Dogon",
["dto"] = "Tommo So",
["dtp"] = "ดูซุนตอนกลาง",
["dtr"] = "Lotud",
["dts"] = "Toro So Dogon",
["dtt"] = "Toro Tegu Dogon",
["dtu"] = "Tebul Ure Dogon",
["dty"] = "Doteli",
["dua"] = "Duala",
["dub"] = "Dubli",
["duc"] = "Duna",
["due"] = "Umiray Dumaget Agta",
["duf"] = "Dumbea",
["dug"] = "Chiduruma",
["duh"] = "Dungra Bhil",
["dui"] = "Dumun",
["duk"] = "Uyajitaya",
["dul"] = "Alabat Island Agta",
["dum"] = "ดัตช์กลาง",
["dun"] = "Dusun Deyah",
["duo"] = "Dupaningan Agta",
["dup"] = "Duano",
["duq"] = "Dusun Malang",
["dur"] = "Dii",
["dus"] = "Dumi",
["duu"] = "Drung",
["duv"] = "Duvle",
["duw"] = "Dusun Witu",
["dux"] = "Duun",
["duy"] = "Dicamay Agta",
["duz"] = "Duli",
["dv"] = "มัลดีฟส์",
["dva"] = "Duau",
["dwa"] = "Diri",
["dwr"] = "เดาโร",
["dwu"] = "Dhuwal",
["dww"] = "Dawawa",
["dwy"] = "Dhuwaya",
["dwz"] = "Dewas Rai",
["dya"] = "Dyan",
["dyb"] = "Dyaberdyaber",
["dyd"] = "Dyugun",
["dyg"] = "Villa Viciosa Agta",
["dyi"] = "Djimini",
["dym"] = "Yanda Dogon",
["dyn"] = "Dyangadi",
["dyo"] = "Jola-Fonyi",
["dyu"] = "Dyula",
["dyy"] = "Dyaabugay",
["dz"] = "ซองคา",
["dza"] = "Tunzu",
["dzg"] = "Dazaga",
["dzl"] = "Dzala",
["dzn"] = "Dzando",
["ebg"] = "Ebughu",
["ebk"] = "Eastern Bontoc",
["ebr"] = "Ebrié",
["ebu"] = "Embu",
["ecr"] = "Eteocretan",
["ecs"] = "Ecuadorian Sign Language",
["ecy"] = "Eteocypriot",
["ee"] = "เอเว",
["eee"] = "E",
["efa"] = "Efai",
["efe"] = "Efe",
["efi"] = "Efik",
["ega"] = "Ega",
["egl"] = "เอมีเลีย",
["ego"] = "Eggon",
["egx-dem"] = "Demotic Egyptian",
["egy"] = "อียิปต์",
["ehu"] = "Ehueun",
["eip"] = "Eipomek",
["eit"] = "Eitiep",
["eiv"] = "Askopan",
["eja"] = "Ejamat",
["eka"] = "Ekajuk",
["eke"] = "Ekit",
["ekg"] = "Ekari",
["eki"] = "Eki",
["ekl"] = "Kolhe",
["ekm"] = "Elip",
["eko"] = "Koti",
["ekp"] = "Ekpeye",
["ekr"] = "Yace",
["eky"] = "กะยาตะวันออก",
["el"] = "กรีก",
["ele"] = "Elepi",
["elh"] = "El Hugeirat",
["eli"] = "Nding",
["elk"] = "Elkei",
["elm"] = "Eleme",
["elo"] = "El Molo",
["elu"] = "Elu",
["elx"] = "Elamite",
["ema"] = "Emai",
["emb"] = "Embaloh",
["eme"] = "Emerillon",
["emg"] = "Eastern Meohang",
["emi"] = "Mussau-Emira",
["emk"] = "Eastern Maninkakan",
["emm"] = "Mamulique",
["emn"] = "Eman",
["emp"] = "Northern Emberá",
["ems"] = "อาลูตีก",
["emu"] = "Eastern Muria",
["emw"] = "Emplawas",
["emx"] = "Erromintxela",
["emy"] = "Epigraphic Mayan",
["en"] = "อังกฤษ",
["ena"] = "Apali",
["enb"] = "Markweeta",
["enc"] = "En",
["end"] = "Ende",
["enf"] = "Forest Enets",
["enh"] = "Tundra Enets",
["enl"] = "Enlhet",
["enm"] = "อังกฤษกลาง",
["enn"] = "Engenni",
["eno"] = "Enggano",
["enq"] = "Enga",
["enr"] = "Emem",
["enu"] = "Enu",
["env"] = "Enwan",
["enw"] = "Enwang",
["enx"] = "Enxet",
["eo"] = "เอสเปรันโต",
["eot"] = "Eotile",
["epi"] = "Epie",
["era"] = "Eravallan",
["erg"] = "Sie",
["erh"] = "Eruwa",
["eri"] = "Ogea",
["erk"] = "South Efate",
["ero-gsz"] = "Geshiza",
["ero-nya"] = "Nyagrong Minyag",
["ero-tau"] = "Stau",
["err"] = "Erre",
["ers"] = "Ersu",
["ert"] = "Eritai",
["erw"] = "Erokwanas",
["es"] = "สเปน",
["ese"] = "Ese Ejja",
["esh"] = "เอชเตฮาร์ด",
["esl"] = "Egyptian Sign Language",
["esm"] = "Esuma",
["esn"] = "Salvadoran Sign Language",
["eso"] = "Estonian Sign Language",
["esq"] = "Esselen",
["ess"] = "Central Siberian Yupik",
["esu"] = "ยุปปิก",
["esx-esk-pro"] = "เอสกิโมดั้งเดิม",
["esx-ink"] = "Inuktun",
["esx-inq"] = "Inuinnaqtun",
["esx-inu-pro"] = "อินุอิตดั้งเดิม",
["esx-pro"] = "Proto-Eskimo-Aleut",
["esx-tut"] = "Tunumiisut",
["esy"] = "Eskayan",
["et"] = "เอสโตเนีย",
["etb"] = "Etebi",
["etc"] = "Etchemin",
["eth"] = "Ethiopian Sign Language",
["etn"] = "Eton (Vanuatu)",
["eto"] = "Eton (Cameroon)",
["etr"] = "Edolo",
["ets"] = "Yekhee",
["ett"] = "อีทรัสคัน",
["etu"] = "Ejagham",
["etx"] = "Eten",
["etz"] = "Semimi",
["eu"] = "บาสก์",
["euq-pro"] = "บาสก์ดั้งเดิม",
["eve"] = "เอเว็น",
["evh"] = "Uvbie",
["evn"] = "เอเวนค์",
["ewo"] = "Ewondo",
["ext"] = "เอซเตรมาดูรา",
["eya"] = "Eyak",
["eyo"] = "Keiyo",
["eza"] = "Ezaa",
["eze"] = "Uzekwe",
["fa"] = "เปอร์เซีย",
["faa"] = "Fasu",
["fab"] = "Annobonese",
["fad"] = "Wagi",
["faf"] = "Fagani",
["fag"] = "Finongan",
["fah"] = "Baissa Fali",
["fai"] = "Faiwol",
["faj"] = "Faita",
["fak"] = "Fang (Beboid)",
["fal"] = "South Fali",
["fam"] = "Fam",
["fan"] = "Fang (Bantu)",
["fap"] = "Palor",
["far"] = "Fataleka",
["fau"] = "Fayu",
["fax"] = "ฟาลา",
["fay"] = "Southwestern Fars",
["faz"] = "Northwestern Fars",
["fbl"] = "West Albay Bikol",
["fcs"] = "Quebec Sign Language",
["fer"] = "Feroge",
["ff"] = "ฟูลา",
["ffi"] = "Foia Foia",
["fgr"] = "Fongoro",
["fi"] = "ฟินแลนด์",
["fia"] = "Nobiin",
["fie"] = "Fyer",
["fip"] = "Fipa",
["fir"] = "Firan",
["fit"] = "Meänkieli",
["fiw"] = "Fiwaga",
["fj"] = "ฟีจี",
["fkk"] = "Kirya-Konzel",
["fkv"] = "Kven",
["fla"] = "Montana Salish",
["flh"] = "Foau",
["fli"] = "Fali",
["fll"] = "North Fali",
["fln"] = "Flinders Island",
["flr"] = "Fuliiru",
["fly"] = "Tsotsitaal",
["fmp"] = "Fe'fe'",
["fmu"] = "Far Western Muria",
["fng"] = "Fanagalo",
["fni"] = "Fania",
["fo"] = "แฟโร",
["fod"] = "Foodo",
["foi"] = "Foi",
["fom"] = "Foma",
["fon"] = "Fon",
["for"] = "Fore",
["fos"] = "Siraya",
["fpe"] = "Pichinglis",
["fqs"] = "Fas",
["fr"] = "ฝรั่งเศส",
["frd"] = "Fordata",
["frm"] = "ฝรั่งเศสกลาง",
["fro"] = "ฝรั่งเศสเก่า",
["frp"] = "ฟร็องโก-พรอว็องส์",
["frq"] = "Forak",
["frr"] = "ฟรีเชียเหนือ",
["frt"] = "Fortsenal",
["fse"] = "Finnish Sign Language",
["fsl"] = "French Sign Language",
["fss"] = "Finnish-Swedish Sign Language",
["fud"] = "East Futuna",
["fuj"] = "Ko",
["fum"] = "Fum",
["fun"] = "Fulniô",
["fur"] = "ฟรียูลี",
["fut"] = "Futuna-Aniwa",
["fuu"] = "Furu",
["fuy"] = "Fuyug",
["fvr"] = "Fur",
["fwa"] = "Fwâi",
["fwe"] = "Fwe",
["fy"] = "ฟรีเชียตะวันตก",
["ga"] = "ไอริช",
["gaa"] = "Ga",
["gab"] = "Gabri",
["gac"] = "Mixed Great Andamanese",
["gad"] = "Gaddang",
["gae"] = "Warekena",
["gaf"] = "Gende",
["gag"] = "กากาอุซ",
["gah"] = "Alekano",
["gai"] = "Borei",
["gaj"] = "Gadsup",
["gak"] = "Gamkonora",
["gal"] = "Galoli",
["gam"] = "Kandawo",
["gan"] = "กั้น",
["gao"] = "Gants",
["gap"] = "Gal",
["gaq"] = "Gata'",
["gar"] = "Galeya",
["gas"] = "Adiwasi Garasia",
["gat"] = "Kenati",
["gau"] = "Kondekor",
["gaw"] = "Nobonob",
["gay"] = "Gayo",
["gba-pro"] = "Proto-Gbaya",
["gbb"] = "Kaytetye",
["gbd"] = "Karadjeri",
["gbe"] = "Niksek",
["gbf"] = "Gaikundi",
["gbg"] = "Gbanziri",
["gbh"] = "Defi Gbe",
["gbi"] = "Galela",
["gbj"] = "Bodo Gadaba",
["gbk"] = "Gaddi",
["gbl"] = "Gamit",
["gbm"] = "Garhwali",
["gbn"] = "Mo'da",
["gbo"] = "Northern Grebo",
["gbp"] = "Gbaya-Bossangoa",
["gbq"] = "Gbaya-Bozoum",
["gbr"] = "Gbagyi",
["gbs"] = "Gbesi Gbe",
["gbu"] = "Gagadu",
["gbv"] = "Gbanu",
["gbw"] = "Gabi",
["gbx"] = "Eastern Xwla Gbe",
["gby"] = "Gbari",
["gcc"] = "Mali",
["gcd"] = "Ganggalida",
["gce"] = "Galice",
["gcf"] = "Antillean Creole",
["gcl"] = "Grenadian Creole English",
["gcn"] = "Gaina",
["gcr"] = "Guianese Creole",
["gct"] = "Colonia Tovar German",
["gd"] = "แกลิกแบบสกอตแลนด์",
["gdb"] = "Ollari",
["gdc"] = "Gugu Badhun",
["gdd"] = "Gedaged",
["gde"] = "Gude",
["gdf"] = "Guduf-Gava",
["gdg"] = "Ga'dang",
["gdh"] = "Gadjerawang",
["gdi"] = "Gundi",
["gdj"] = "Kurtjar",
["gdk"] = "Gadang",
["gdl"] = "Dirasha",
["gdm"] = "Laal",
["gdn"] = "Umanakaina",
["gdo"] = "Godoberi",
["gdq"] = "Mehri",
["gdr"] = "Wipi",
["gds"] = "Ghandruk Sign Language",
["gdt"] = "Kungardutyi",
["gdu"] = "Gudu",
["gdx"] = "Godwari",
["gea"] = "Geruma",
["geb"] = "Kire",
["gec"] = "Gboloo Grebo",
["ged"] = "Gade",
["geg"] = "Gengle",
["geh"] = "Hutterisch",
["gei"] = "Gebe",
["gej"] = "Gen",
["gek"] = "Gerka",
["gel"] = "Fakkanci",
["gem-pro"] = "เจอร์แมนิกดั้งเดิม",
["geq"] = "Geme",
["ges"] = "Geser-Gorom",
["gev"] = "Viya",
["gew"] = "Gera",
["gex"] = "Garre",
["gey"] = "Enya",
["gez"] = "กืออึซ",
["gfk"] = "Patpatar",
["gft"] = "Gafat",
["gga"] = "Gao",
["ggb"] = "Gbii",
["ggd"] = "Gugadj",
["gge"] = "Guragone",
["ggg"] = "Gurgula",
["ggk"] = "Kungarakany",
["ggl"] = "Ganglau",
["ggn"] = "Eastern Gurung",
["ggt"] = "Gitua",
["ggu"] = "Gban",
["ggw"] = "Gogodala",
["gha"] = "Ghadames",
["ghc"] = "แกลิกคลาสสิก",
["ghe"] = "Southern Ghale",
["ghh"] = "Northern Ghale",
["ghk"] = "Geko Karen",
["ghl"] = "Ghulfan",
["ghn"] = "Ghanongga",
["gho"] = "Ghomara",
["ghr"] = "Ghera",
["ghs"] = "Guhu-Samane",
["ght"] = "Kutang Ghale",
["gia"] = "Kitja",
["gib"] = "Gibanawa",
["gid"] = "Gidar",
["gie"] = "Guébie",
["gig"] = "Goaria",
["gih"] = "Githabul",
["gii"] = "Girirra",
["gil"] = "กิลเบิร์ต",
["gim"] = "Gimi (Papuan)",
["gin"] = "Hinukh",
["gip"] = "Gimi (Austronesian)",
["giq"] = "Green Gelao",
["gir"] = "Red Gelao",
["gis"] = "North Giziga",
["git"] = "Gitxsan",
["giu"] = "Mulao",
["giw"] = "White Gelao",
["gix"] = "Gilima",
["giy"] = "Giyug",
["giz"] = "South Giziga",
["gji"] = "Geji",
["gjk"] = "Kachi Koli",
["gjm"] = "Gunditjmara",
["gjn"] = "Gonja",
["gjr"] = "Gurindji Kriol",
["gju"] = "Gojri",
["gka"] = "Guya",
["gkd"] = "Magɨ",
["gke"] = "Ndai",
["gkn"] = "Gokana",
["gko"] = "Kok-Nar",
["gkp"] = "Guinea Kpelle",
["gl"] = "กาลิเซีย",
["glc"] = "Bon Gula",
["gld"] = "Nanai",
["glh"] = "Northwest Pashayi",
["glj"] = "Kulaal",
["glk"] = "Gilaki",
["glo"] = "Galambu",
["glr"] = "Glaro-Twabo",
["glu"] = "Gula",
["glw"] = "Glavda",
["gly"] = "Gule",
["gma"] = "Gambera",
["gmb"] = "Gula'alaa",
["gmd"] = "Mághdì",
["gme-bur"] = "Burgundian",
["gme-cgo"] = "กอทแบบไครเมีย",
["gmg"] = "Magiyi",
["gmh"] = "เยอรมันสูงกลาง",
["gml"] = "เยอรมันต่ำกลาง",
["gmm"] = "Gbaya-Mbodomo",
["gmn"] = "Gimnime",
["gmq-gut"] = "Gutnish",
["gmq-jmk"] = "Jamtish",
["gmq-mno"] = "นอร์เวย์กลาง",
["gmq-oda"] = "เดนมาร์กเก่า",
["gmq-ogt"] = "Old Gutnish",
["gmq-osw"] = "สวีเดนเก่า",
["gmq-pro"] = "นอร์สดั้งเดิม",
["gmq-scy"] = "Scanian",
["gmr"] = "Mirning",
["gmu"] = "Gumalu",
["gmv"] = "กาโม",
["gmw-bgh"] = "Bergish",
["gmw-cfr"] = "ฟรังโกเนียตอนกลาง",
["gmw-ecg"] = "เยอรมันตอนกลางตะวันออก",
["gmw-fin"] = "Fingallian",
["gmw-gts"] = "Gottscheerish",
["gmw-jdt"] = "Jersey Dutch",
["gmw-msc"] = "Middle Scots",
["gmw-pro"] = "เจอร์แมนิกตะวันตกดั้งเดิม",
["gmw-rfr"] = "ฟรังโกเนียแบบไรน์",
["gmw-stm"] = "Sathmar Swabian",
["gmw-tsx"] = "Transylvanian Saxon",
["gmw-vog"] = "เยอรมันแบบว็อลกา",
["gmw-zps"] = "เยอรมันแบบซิพเซอร์",
["gmx"] = "Magoma",
["gmy"] = "กรีกแบบไมซีนี",
["gmz"] = "Mgbo",
["gn-cls"] = "กัวรานีคลาสสิก",
["gna"] = "Kaansa",
["gnb"] = "Gangte",
["gnc"] = "Guanche",
["gnd"] = "Zulgo-Gemzek",
["gne"] = "Ganang",
["gng"] = "Ngangam",
["gnh"] = "Lere",
["gni"] = "กูนียันดี",
["gnj"] = "Ngen of Djonkro",
["gnk"] = "ǁGana",
["gnl"] = "Gangulu",
["gnm"] = "Ginuman",
["gnn"] = "Gumatj",
["gnq"] = "Gana",
["gnr"] = "Gureng Gureng",
["gnt"] = "Guntai",
["gnu"] = "Gnau",
["gnw"] = "Western Bolivian Guarani",
["gnz"] = "Ganzi",
["goa"] = "Guro",
["gob"] = "Playero",
["goc"] = "Gorakor",
["god"] = "Godié",
["goe"] = "Gongduk",
["gof"] = "โกฟา",
["gog"] = "Gogo",
["goh"] = "เยอรมันสูงเก่า",
["goi"] = "Gobasi",
["goj"] = "Gowlan",
["gol"] = "Gola",
["gon"] = "โคณฑี",
["goo"] = "Gone Dau",
["gop"] = "Yeretuar",
["goq"] = "Gorap",
["gor"] = "Gorontalo",
["got"] = "กอท",
["gou"] = "Gavar",
["gov"] = "Goo",
["gow"] = "Gorwaa",
["gox"] = "Gobu",
["goy"] = "Goundo",
["goz"] = "Gozarkhani",
["gpa"] = "Gupa-Abawa",
["gpn"] = "Taiap",
["gqa"] = "Ga'anda",
["gqi"] = "Guiqiong",
["gqn"] = "Kinikinao",
["gqr"] = "Gor",
["gqu"] = "Qau",
["gra"] = "Rajput Garasia",
["grc"] = "กรีกโบราณ",
["grd"] = "Guruntum",
["grg"] = "Madi",
["grh"] = "Gbiri-Niragu",
["gri"] = "Ghari",
["grj"] = "Southern Grebo",
["grk-cal"] = "Calabrian Greek",
["grk-ita"] = "Italiot Greek",
["grk-mar"] = "Mariupol Greek",
["grk-pro"] = "เฮลเลนิกดั้งเดิม",
["grm"] = "Kota Marudu Talantang",
["gro"] = "Groma",
["grq"] = "Gorovu",
["grs"] = "Gresi",
["grt"] = "กาโร",
["gru"] = "Kistane",
["grv"] = "Central Grebo",
["grw"] = "Gweda",
["grx"] = "Guriaso",
["gry"] = "Barclayville Grebo",
["grz"] = "Guramalum",
["gse"] = "Ghanaian Sign Language",
["gsg"] = "German Sign Language",
["gsl"] = "Gusilay",
["gsm"] = "Guatemalan Sign Language",
["gsn"] = "Gusan",
["gso"] = "Southwest Gbaya",
["gsp"] = "Wasembo",
["gss"] = "Greek Sign Language",
["gsw"] = "เยอรมันแบบอลามันเนีย",
["gta"] = "Guató",
["gtu"] = "Aghu Tharrnggala",
["gu"] = "คุชราต",
["gua"] = "Shiki",
["gub"] = "Guajajára",
["guc"] = "Wayuu",
["gud"] = "Yocoboué Dida",
["gue"] = "Gurindji",
["guf"] = "Gupapuyngu",
["gug"] = "กัวรานีแบบปารากวัย",
["guh"] = "Guahibo",
["gui"] = "Eastern Bolivian Guarani",
["guk"] = "Gumuz",
["gul"] = "Gullah",
["gum"] = "Guambiano",
["gun"] = "Mbya Guarani",
["guo"] = "Guayabero",
["gup"] = "Gunwinggu",
["guq"] = "Aché",
["gur"] = "ฟราฟรา",
["gus"] = "Guinean Sign Language",
["gut"] = "Maléku Jaíka",
["guu"] = "Yanomamö",
["guv"] = "Gey",
["guw"] = "Gun",
["gux"] = "Gourmanchéma",
["guz"] = "Gusii",
["gv"] = "แมงซ์",
["gva"] = "Kaskihá",
["gvc"] = "Guanano",
["gve"] = "Duwet",
["gvf"] = "Golin",
["gvj"] = "Guajá",
["gvl"] = "Gulay",
["gvm"] = "Gurmana",
["gvn"] = "Kuku-Yalanji",
["gvo"] = "Gavião do Jiparaná",
["gvp"] = "Pará Gavião",
["gvr"] = "Western Gurung",
["gvs"] = "Gumawana",
["gvy"] = "Guyani",
["gwa"] = "Mbato",
["gwb"] = "Gwa",
["gwc"] = "Kalami",
["gwd"] = "Gawwada",
["gwe"] = "Gweno",
["gwf"] = "Gowro",
["gwg"] = "Moo",
["gwi"] = "Gwich'in",
["gwj"] = "Gcwi",
["gwm"] = "Awngthim",
["gwn"] = "Gwandara",
["gwr"] = "Gwere",
["gwt"] = "Gawar-Bati",
["gwu"] = "Guwamu",
["gww"] = "Kwini",
["gwx"] = "Gua",
["gxx"] = "Wè Southern",
["gya"] = "Northwest Gbaya",
["gyb"] = "Garus",
["gyd"] = "Kayardild",
["gye"] = "Gyem",
["gyf"] = "Gungabula",
["gyg"] = "Gbayi",
["gyi"] = "Gyele",
["gyl"] = "Gayil",
["gym"] = "Ngäbere",
["gyn"] = "Guyanese Creole English",
["gyo"] = "Gyalsumdo",
["gyr"] = "Guarayu",
["gyy"] = "Gunya",
["gza"] = "Ganza",
["gzn"] = "Gane",
["ha"] = "เฮาซา",
["haa"] = "Hän",
["hab"] = "Hanoi Sign Language",
["hac"] = "Gurani",
["had"] = "Hatam",
["haf"] = "Haiphong Sign Language",
["hag"] = "Hanga",
["hah"] = "Hahon",
["hai"] = "Haida",
["haj"] = "ฮาชอง",
["hak"] = "แคะ",
["hal"] = "Halang",
["ham"] = "Hewa",
["hao"] = "Hakö",
["hap"] = "Hupla",
["har"] = "Harari",
["has"] = "Haisla",
["hav"] = "Havu",
["haw"] = "ฮาวาย",
["hax"] = "Southern Haida",
["hay"] = "Haya",
["hba"] = "Hamba",
["hbb"] = "Huba",
["hbn"] = "Heiban",
["hbu"] = "Habu",
["hca"] = "Andaman Creole Hindi",
["hch"] = "Huichol",
["hdn"] = "Northern Haida",
["hds"] = "Honduras Sign Language",
["hdy"] = "Hadiyya",
["he"] = "ฮีบรู",
["hea"] = "Northern Qiandong Miao",
["hed"] = "Herdé",
["heg"] = "Helong",
["heh"] = "Hehe",
["hei"] = "Heiltsuk",
["hem"] = "Hemba",
["hgm"] = "Haiǁom",
["hgw"] = "Haigwai",
["hhi"] = "Hoia Hoia",
["hhr"] = "Kerak",
["hhy"] = "Hoyahoya",
["hi"] = "ฮินดี",
["hia"] = "Lamang",
["hib"] = "Hibito",
["hid"] = "Hidatsa",
["hif"] = "ฮินดีแบบฟีจี",
["hig"] = "Kamwe",
["hih"] = "Pamosu",
["hii"] = "Hinduri",
["hij"] = "Hijuk",
["hik"] = "Seit-Kaitetu",
["hil"] = "ฮีลีไกโนน",
["hio"] = "Tshwa",
["hir"] = "Himarimã",
["hit"] = "Hittite",
["hiw"] = "Hiw",
["hix"] = "Hixkaryana",
["hji"] = "Haji",
["hka"] = "Kahe",
["hke"] = "Hunde",
["hkh"] = "Pogali",
["hkk"] = "Hunjara-Kaina Ke",
["hkn"] = "Mel-Khaonh",
["hks"] = "Hong Kong Sign Language",
["hla"] = "Halia",
["hlb"] = "Halbi",
["hld"] = "Halang Doan",
["hle"] = "Hlersu",
["hlt"] = "Nga La",
["hma"] = "Southern Mashan Hmong",
["hmb"] = "Humburi Senni",
["hmc"] = "Central Huishui Hmong",
["hmd"] = "A-Hmao",
["hme"] = "Eastern Huishui Hmong",
["hmf"] = "Hmong Don",
["hmg"] = "Southwestern Guiyang Hmong",
["hmh"] = "Southwestern Huishui Hmong",
["hmi"] = "Northern Huishui Hmong",
["hmj"] = "Ge",
["hmk"] = "Yemaek",
["hml"] = "Luopohe Hmong",
["hmm"] = "Central Mashan Hmong",
["hmn-pro"] = "ม้งดั้งเดิม",
["hmp"] = "Northern Mashan Hmong",
["hmq"] = "Eastern Qiandong Miao",
["hmr"] = "Hmar",
["hms"] = "Southern Qiandong Miao",
["hmt"] = "Hamtai",
["hmu"] = "Hamap",
["hmv"] = "Hmong Dô",
["hmw"] = "Western Mashan Hmong",
["hmx-mie-pro"] = "เมี่ยนดั้งเดิม",
["hmx-pro"] = "ม้ง-เมี่ยนดั้งเดิม",
["hmy"] = "Southern Guiyang Hmong",
["hmz"] = "Hmong Shua",
["hna"] = "Mina",
["hnd"] = "Southern Hindko",
["hne"] = "Chhattisgarhi",
["hnh"] = "ǁAni",
["hni"] = "Hani",
["hnj"] = "ม้งเขียว",
["hnm"] = "ไหหลำ",
["hnn"] = "ฮานูโนโอ",
["hno"] = "Northern Hindko",
["hns"] = "ฮินดูสตานีแบบแคริบเบียน",
["hnu"] = "Hung",
["ho"] = "ฮีรีโมตู",
["hoa"] = "Hoava",
["hob"] = "Austronesian Mari",
["hoc"] = "Ho",
["hod"] = "Holma",
["hoe"] = "Horom",
["hoh"] = "Hobyót",
["hoi"] = "Holikachuk",
["hoj"] = "Hadoti",
["hol"] = "Holu",
["hom"] = "Homa",
["hoo"] = "Holoholo",
["hop"] = "Hopi",
["hor"] = "Horo",
["hos"] = "Ho Chi Minh City Sign Language",
["hot"] = "Hote",
["hov"] = "Hovongan",
["how"] = "Honi",
["hoy"] = "Holiya",
["hoz"] = "Hozo",
["hpo"] = "Hpon",
["hps"] = "Hawai'i Pidgin Sign Language",
["hra"] = "Hrangkhol",
["hrc"] = "Niwer Mil",
["hre"] = "Hrê",
["hrk"] = "Haruku",
["hrm"] = "Horned Miao",
["hro"] = "Haroi",
["hrp"] = "Nhirrpi",
["hrt"] = "Hértevin",
["hru"] = "Hruso",
["hrw"] = "Warwar Feni",
["hrx"] = "ฮุนสริก",
["hrz"] = "Harzani",
["hsb"] = "ซอร์เบียตอนบน",
["hsh"] = "Hungarian Sign Language",
["hsl"] = "Hausa Sign Language",
["hsn"] = "เซียง",
["hss"] = "Harsusi",
["ht"] = "ครีโอลเฮติ",
["hti"] = "Hoti",
["hto"] = "Minica Huitoto",
["hts"] = "Hadza",
["htu"] = "Hitu",
["hu"] = "ฮังการี",
["hub"] = "Huambisa",
["huc"] = "ǂHoan",
["hud"] = "Huaulu",
["huf"] = "Humene",
["hug"] = "Huachipaeri",
["huh"] = "Huilliche",
["hui"] = "Huli",
["huj"] = "Northern Guiyang Hmong",
["huk"] = "Hulung",
["hul"] = "Hula",
["hum"] = "Hungana",
["huo"] = "Hu",
["hup"] = "Hupa",
["huq"] = "Tsat",
["hur"] = "Halkomelem",
["hus"] = "Wastek",
["huu"] = "Murui Huitoto",
["huv"] = "Huave",
["huw"] = "Hukumina",
["hux"] = "Nüpode Huitoto",
["huy"] = "Hulaulá",
["huz"] = "Hunzib",
["hvc"] = "Haitian Vodoun Culture Language",
["hvk"] = "Haveke",
["hvn"] = "Sabu",
["hwa"] = "Wané",
["hwc"] = "Hawaiian Creole",
["hwo"] = "Hwana",
["hy"] = "อาร์มีเนีย",
["hya"] = "Hya",
["hyx-pro"] = "อาร์มีเนียนดั้งเดิม",
["hz"] = "เฮเรโร",
["ia"] = "อินเทอร์ลิงกวา",
["iai"] = "Iaai",
["ian"] = "Iatmul",
["iar"] = "Purari",
["iba"] = "อีบัน",
["ibb"] = "Ibibio",
["ibd"] = "Iwaidja",
["ibe"] = "Akpes",
["ibg"] = "Ibanag",
["ibh"] = "Bih",
["ibl"] = "Ibaloi",
["ibm"] = "Agoi",
["ibn"] = "Ibino",
["ibr"] = "Ibuoro",
["ibu"] = "Ibu",
["iby"] = "Ibani",
["ica"] = "Ede Ica",
["ich"] = "Etkywan",
["icl"] = "Icelandic Sign Language",
["icr"] = "Islander Creole English",
["id"] = "อินโดนีเซีย",
["ida"] = "Idakho-Isukha-Tiriki",
["idb"] = "Indo-Portuguese",
["idc"] = "Idon",
["idd"] = "Ede Idaca",
["ide"] = "Idere",
["idi"] = "Idi",
["idr"] = "Indri",
["ids"] = "Idesa",
["idt"] = "Idaté",
["idu"] = "Idoma",
["ie"] = "อินเทร์ลิงเกว",
["ifa"] = "Amganad Ifugao",
["ifb"] = "Batad Ifugao",
["ife"] = "Ifè",
["iff"] = "Ifo",
["ifk"] = "Tuwali Ifugao",
["ifm"] = "Teke-Fuumu",
["ifu"] = "Mayoyao Ifugao",
["ify"] = "Keley-I Kallahan",
["ig"] = "อิกโบ",
["igb"] = "Ebira",
["ige"] = "Igede",
["igg"] = "Igana",
["igl"] = "Igala",
["igm"] = "Kanggape",
["ign"] = "Ignaciano",
["igo"] = "Isebe",
["igs"] = "Glosa",
["igw"] = "Igwe",
["ihb"] = "Pidgin Iha",
["ihi"] = "Ihievbe",
["ihp"] = "Iha",
["ii"] = "นอซู",
["iir-nur-pro"] = "Proto-Nuristani",
["iir-pro"] = "อินโด-อิเรเนียนดั้งเดิม",
["ijc"] = "Izon",
["ije"] = "Biseni",
["ijj"] = "Ede Ije",
["ijn"] = "Kalabari",
["ijo-pro"] = "Proto-Ijoid",
["ijs"] = "Southeast Ijo",
["ik"] = "Inupiaq",
["ike"] = "Eastern Canadian Inuktitut",
["iki"] = "Iko",
["ikk"] = "Ika",
["ikl"] = "Ikulu",
["iko"] = "Olulumo-Ikom",
["ikp"] = "Ikpeshi",
["ikr"] = "Ikaranggal",
["iks"] = "Inuit Sign Language",
["ikt"] = "Inuvialuktun",
["ikv"] = "Iku-Gora-Ankwa",
["ikw"] = "Ikwere",
["ikx"] = "Ik",
["ikz"] = "Ikizu",
["ila"] = "Ile Ape",
["ilb"] = "Ila",
["ilg"] = "Ilgar",
["ili"] = "Ili Turki",
["ilk"] = "Ilongot",
["ill"] = "อีรานุน",
["ilo"] = "อีโลกาโน",
["ils"] = "International Sign",
["ilu"] = "Ili'uun",
["ilv"] = "Ilue",
["ima"] = "Mala Malasar",
["imi"] = "Anamgura",
["iml"] = "Miluk",
["imn"] = "Imonda",
["imo"] = "Imbongu",
["imr"] = "Imroing",
["ims"] = "Marsian",
["imy"] = "Milyan",
["inb"] = "Inga",
["inc-apa"] = "Apabhramsa",
["inc-ash"] = "ปรากฤตแบบอโศก",
["inc-dng-pro"] = "Proto-Dangari",
["inc-kam"] = "กามรูป",
["inc-kho"] = "Kholosi",
["inc-krd-pro"] = "Proto-Kamta",
["inc-mas"] = "อัสสัมกลาง",
["inc-mbn"] = "เบงกอลกลาง",
["inc-mgu"] = "คุชราตกลาง",
["inc-mor"] = "โอริยากลาง",
["inc-oas"] = "อัสสัมช่วงต้น",
["inc-oaw"] = "Old Awadhi",
["inc-obn"] = "เบงกอลเก่า",
["inc-ogu"] = "คุชราตเก่า",
["inc-ohi"] = "ฮินดีเก่า",
["inc-oor"] = "โอริยาเก่า",
["inc-opa"] = "ปัญจาบเก่า",
["inc-pro"] = "อินโด-อารยันดั้งเดิม",
["ine-ana-pro"] = "อานาโตเลียนดั้งเดิม",
["ine-bsl-pro"] = "บอลโต-สลาวิกดั้งเดิม",
["ine-kal"] = "Kalašma",
["ine-pae"] = "Paeonian",
["ine-pro"] = "อินโด-ยูโรเปียนดั้งเดิม",
["ine-toc-pro"] = "โทแคเรียนดั้งเดิม",
["ing"] = "Deg Xinag",
["inh"] = "อิงกุช",
["inj"] = "Jungle Inga",
["inl"] = "มืออินโดนีเซีย",
["inm"] = "Minaean",
["inn"] = "Isinai",
["ino"] = "Inoke-Yate",
["inp"] = "Iñapari",
["ins"] = "มืออินเดีย",
["int"] = "Intha",
["inz"] = "Ineseño",
["io"] = "อีโด",
["ior"] = "Inor",
["iou"] = "Tuma-Irumu",
["iow"] = "Chiwere",
["ipi"] = "Ipili",
["ipo"] = "Ipiko",
["iqu"] = "Iquito",
["iqw"] = "Ikwo",
["ira-kms-pro"] = "Proto-Komisenian",
["ira-mny-pro"] = "Proto-Munji-Yidgha",
["ira-mpr-pro"] = "Proto-Medo-Parthian",
["ira-pat-pro"] = "ปาทานดั้งเดิม",
["ira-pro"] = "อิเรเนียนดั้งเดิม",
["ira-sgc-pro"] = "ซอกดิกดั้งเดิม",
["ira-sgi-pro"] = "Proto-Sanglechi-Ishkashimi",
["ira-shr-pro"] = "Proto-Shughni-Roshani",
["ira-shy-pro"] = "Proto-Shughni-Yazghulami",
["ira-sym-pro"] = "Proto-Shughni-Yazghulami-Munji",
["ira-wnj"] = "Vanji",
["ira-zgr-pro"] = "Proto-Zaza-Gorani",
["ire"] = "Iresim",
["irh"] = "Irarutu",
["iri"] = "Rigwe",
["irk"] = "Iraqw",
["irn"] = "Irantxe",
["iro-ere"] = "Erie",
["iro-min"] = "Mingo",
["iro-nor-pro"] = "Proto-North Iroquoian",
["iro-pro"] = "Proto-Iroquoian",
["irr"] = "Ir",
["iru"] = "Irula",
["irx"] = "Kamberau",
["iry"] = "Iraya",
["is"] = "ไอซ์แลนด์",
["isa"] = "Isabi",
["isc"] = "Isconahua",
["isd"] = "Isnag",
["ise"] = "Italian Sign Language",
["isg"] = "Irish Sign Language",
["ish"] = "Esan",
["isi"] = "Nkem-Nkum",
["isk"] = "Ishkashimi",
["ism"] = "Masimasi",
["isn"] = "Isanzu",
["iso"] = "Isoko",
["isr"] = "Israeli Sign Language",
["ist"] = "อิสเตรีย",
["isu"] = "Isu",
["isv"] = "Interslavic",
["it"] = "อิตาลี",
["itb"] = "Binongan Itneg",
["itc-pro"] = "อิตาลิกดั้งเดิม",
["itc-psa"] = "Pre-Samnite",
["itd"] = "Southern Tidung",
["ite"] = "Itene",
["iti"] = "Inlaod Itneg",
["itk"] = "Judeo-Italian",
["itl"] = "Itelmen",
["itm"] = "Itu Mbon Uzo",
["ito"] = "Itonama",
["itr"] = "Iteri",
["its"] = "Itsekiri",
["itt"] = "Maeng Itneg",
["itv"] = "Itawit",
["itw"] = "Ito",
["itx"] = "Itik",
["ity"] = "Moyadan Itneg",
["itz"] = "Itza'",
["iu"] = "อินุกติตุต",
["ium"] = "อิ้วเมี่ยน",
["ivb"] = "Ibatan",
["ivv"] = "Ivatan",
["iwk"] = "I-Wak",
["iwm"] = "Iwam",
["iwo"] = "Iwur",
["iws"] = "Sepik Iwam",
["ixc"] = "Ixcatec",
["ixl"] = "Ixil",
["iya"] = "Iyayu",
["iyo"] = "Mesaka",
["iyx"] = "Yaa",
["izh"] = "อิงเกรีย",
["izi"] = "Izi-Ezaa-Ikwo-Mgbo",
["izr"] = "Izere",
["izz"] = "Izi",
["ja"] = "ญี่ปุ่น",
["jaa"] = "Jamamadí",
["jab"] = "Hyam",
["jac"] = "Jakaltek",
["jad"] = "Jahanka",
["jae"] = "Jabem",
["jaf"] = "Jara",
["jah"] = "Jah Hut",
["jaj"] = "Zazao",
["jal"] = "Yalahatan",
["jam"] = "ครีโอลจาเมกา",
["jan"] = "Janday",
["jao"] = "Yanyuwa",
["jaq"] = "Yaqay",
["jas"] = "ชวาแบบนิวแคลิโดเนีย",
["jat"] = "Jakati",
["jau"] = "Yaur",
["jax"] = "Jambi Malay",
["jay"] = "Yan-nhangu",
["jaz"] = "Jawe",
["jbj"] = "Arandai",
["jbk"] = "Barikewa",
["jbn"] = "Nefusa",
["jbo"] = "โลจบาน",
["jbr"] = "Jofotek-Bromnya",
["jbt"] = "Jabutí",
["jbu"] = "Jukun Takum",
["jbw"] = "Yawijibaya",
["jcs"] = "Jamaican Country Sign Language",
["jct"] = "Krymchak",
["jda"] = "Jad",
["jdg"] = "Jadgali",
["jdt"] = "Judeo-Tat",
["jeb"] = "Jebero",
["jee"] = "Jerung",
["jeg"] = "Jeng",
["jeh"] = "Jeh",
["jei"] = "Yei",
["jek"] = "Jeri Kuo",
["jel"] = "Yelmek",
["jen"] = "Dza",
["jer"] = "Jere",
["jet"] = "Manem",
["jeu"] = "Jonkor Bourmataguil",
["jgb"] = "Ngbee",
["jgk"] = "Gwak",
["jgo"] = "Ngomba",
["jhi"] = "Jehai",
["jhs"] = "Jhankot Sign Language",
["jia"] = "Jina",
["jib"] = "Jibu",
["jic"] = "Tol",
["jid"] = "Bu",
["jie"] = "Jilbe",
["jig"] = "Jingulu",
["jih"] = "Shangzhai",
["jii"] = "Jiiddu",
["jil"] = "Jilim",
["jim"] = "Jimjimen",
["jio"] = "เจียเม่า",
["jiq"] = "Khroskyabs",
["jit"] = "Jita",
["jiu"] = "Youle Jino",
["jiv"] = "Shuar",
["jiy"] = "Buyuan Jino",
["jje"] = "เชจู",
["jjr"] = "Zhár",
["jka"] = "Kaera",
["jko"] = "Kubo",
["jkp"] = "Paku Karen",
["jkr"] = "Koro (India)",
["jku"] = "Labir",
["jle"] = "Ngile",
["jls"] = "Jamaican Sign Language",
["jma"] = "Dima",
["jmb"] = "Zumbun",
["jmc"] = "Machame",
["jmd"] = "Yamdena",
["jmi"] = "Jimi",
["jml"] = "Jumli",
["jmn"] = "Makuri Naga",
["jmr"] = "Kamara",
["jmw"] = "Mouwase",
["jmx"] = "Western Juxtlahuaca Mixtec",
["jna"] = "Jangshung",
["jnd"] = "Jandavra",
["jng"] = "Yangman",
["jni"] = "Janji",
["jnj"] = "Yemsa",
["jnl"] = "Rawat",
["jns"] = "Jaunsari",
["job"] = "Joba",
["jod"] = "Wojenaka",
["jor"] = "Jorá",
["jos"] = "Jordanian Sign Language",
["jow"] = "Jowulu",
["jpr"] = "Judeo-Persian",
["jpx-hcj"] = "Hachijō",
["jpx-pro"] = "แจพอนิกดั้งเดิม",
["jpx-ryu-pro"] = "Proto-Ryukyuan",
["jqr"] = "Jaqaru",
["jra"] = "Jarai",
["jrr"] = "Jiru",
["jru"] = "Japrería",
["jsl"] = "Japanese Sign Language",
["jua"] = "Júma",
["jub"] = "Wannu",
["juc"] = "จูร์เชน",
["jud"] = "Worodougou",
["juh"] = "Hone",
["jui"] = "Ngadjuri",
["juk"] = "Wapan",
["jul"] = "Jirel",
["jum"] = "Jumjum",
["jun"] = "Juang",
["juo"] = "Jiba",
["jup"] = "Hupdë",
["jur"] = "Jurúna",
["jus"] = "Jumla Sign Language",
["jut"] = "Jutish",
["juu"] = "Ju",
["juw"] = "Wãpha",
["juy"] = "Juray",
["jv"] = "ชวา",
["jvd"] = "Javindo",
["jvn"] = "ชวาแบบแคริบเบียน",
["jwi"] = "Jwira-Pepesa",
["jyy"] = "Jaya",
["ka"] = "จอร์เจีย",
["kaa"] = "การากัลปัก",
["kab"] = "กะไบล์",
["kac"] = "จิ่งเผาะ",
["kad"] = "Kadara",
["kae"] = "Ketangalan",
["kaf"] = "Katso",
["kag"] = "Kajaman",
["kah"] = "Fer",
["kai"] = "Karekare",
["kaj"] = "Jju",
["kak"] = "Kayapa Kallahan",
["kam"] = "Kamba",
["kao"] = "Kassonke",
["kap"] = "Bezhta",
["kaq"] = "Capanahua",
["kar-pro"] = "กะเหรี่ยงดั้งเดิม",
["kaw"] = "ชวาเก่า",
["kax"] = "Kao",
["kay"] = "Kamayurá",
["kba"] = "Kalarko",
["kbb"] = "Kaxuyana",
["kbc"] = "Kadiwéu",
["kbd"] = "คาบาร์เดีย",
["kbe"] = "Kanju",
["kbh"] = "Camsá",
["kbi"] = "Kaptiau",
["kbj"] = "Kari",
["kbk"] = "Grass Koiari",
["kbm"] = "Iwal",
["kbn"] = "Kare (Central Africa)",
["kbo"] = "Keliko",
["kbp"] = "Kabiyé",
["kbq"] = "Kamano",
["kbr"] = "Kafa",
["kbs"] = "Kande",
["kbt"] = "Gabadi",
["kbu"] = "Kabutra",
["kbv"] = "Kamberataro",
["kbw"] = "Kaiep",
["kbx"] = "Ap Ma",
["kbz"] = "Duhwa",
["kca-eas"] = "Eastern Khanty",
["kca-nor"] = "Northern Khanty",
["kca-pro"] = "Proto-Khanty",
["kca-sou"] = "Southern Khanty",
["kcb"] = "Kawacha",
["kcc"] = "Lubila",
["kcd"] = "Ngkâlmpw Kanum",
["kce"] = "Kaivi",
["kcf"] = "Ukaan",
["kcg"] = "Tyap",
["kch"] = "Vono",
["kci"] = "Kamantan",
["kcj"] = "Kobiana",
["kck"] = "Kalanga",
["kcl"] = "Kala",
["kcm"] = "Tar Gula",
["kcn"] = "Nubi",
["kco"] = "Kinalakna",
["kcp"] = "Kanga",
["kcq"] = "Kamo",
["kcr"] = "Katla",
["kcs"] = "Koenoem",
["kct"] = "Kaian",
["kcu"] = "Kikami",
["kcv"] = "Kete",
["kcw"] = "Kabwari",
["kcx"] = "Kachama-Ganjule",
["kcy"] = "Korandje",
["kcz"] = "Konongo",
["kda"] = "Worimi",
["kdc"] = "Kutu",
["kdd"] = "Yankunytjatjara",
["kde"] = "Makonde",
["kdf"] = "Mamusi",
["kdg"] = "Seba",
["kdh"] = "Tem",
["kdi"] = "Kumam",
["kdj"] = "Karamojong",
["kdk"] = "Numèè",
["kdl"] = "Tsikimba",
["kdm"] = "Kagoma",
["kdn"] = "Kunda",
["kdp"] = "Kaningdon-Nindem",
["kdq"] = "Koch",
["kdr"] = "Karaim",
["kdt"] = "กูย",
["kdu"] = "Kadaru",
["kdv"] = "Kado",
["kdw"] = "Koneraw",
["kdx"] = "Kam",
["kdy"] = "Keder",
["kdz"] = "Kwaja",
["kea"] = "ครีโอลกาบูเวร์ดี",
["keb"] = "Kélé",
["kec"] = "Keiga",
["ked"] = "Kerewe",
["kee"] = "Eastern Keres",
["kef"] = "Kpessi",
["keg"] = "Tese",
["keh"] = "Keak",
["kei"] = "Kei",
["kej"] = "Kadar",
["kek"] = "Q'eqchi",
["kel"] = "Kela-Yela",
["kem"] = "Kemak",
["ken"] = "Kenyang",
["keo"] = "Kakwa",
["kep"] = "Kaikadi",
["keq"] = "Kamar",
["ker"] = "Kera",
["kes"] = "Kugbo",
["ket"] = "Ket",
["keu"] = "Akebu",
["kev"] = "Kanikkaran",
["kew"] = "Kewa",
["kex"] = "Kukna",
["key"] = "Kupia",
["kez"] = "Kukele",
["kfa"] = "Kodava",
["kfb"] = "Kolami",
["kfc"] = "Konda-Dora",
["kfd"] = "Korra Koraga",
["kfe"] = "Kota (India)",
["kff"] = "Koya",
["kfg"] = "Kudiya",
["kfh"] = "Kurichiya",
["kfi"] = "Kannada Kurumba",
["kfj"] = "Kemiehua",
["kfk"] = "Kinnauri",
["kfl"] = "Kung",
["kfn"] = "Kuk",
["kfo"] = "Koro (West Africa)",
["kfp"] = "Korwa",
["kfq"] = "Korku",
["kfr"] = "กัจฉ์",
["kfs"] = "Bilaspuri",
["kft"] = "Kanjari",
["kfu"] = "Katkari",
["kfv"] = "Kurmukar",
["kfw"] = "Kharam Naga",
["kfx"] = "Kullu Pahari",
["kfy"] = "Kumaoni",
["kfz"] = "Koromfé",
["kg"] = "คองโก",
["kga"] = "Koyaga",
["kgb"] = "Kawe",
["kgd"] = "Kataang",
["kge"] = "Komering",
["kgf"] = "Kube",
["kgg"] = "Kusunda",
["kgi"] = "Selangor Sign Language",
["kgj"] = "Gamale Kham",
["kgk"] = "Kaiwá",
["kgl"] = "Kunggari",
["kgn"] = "Karingani",
["kgo"] = "Krongo",
["kgp"] = "Kaingang",
["kgq"] = "Kamoro",
["kgr"] = "Abun",
["kgs"] = "Kumbainggar",
["kgt"] = "Somyev",
["kgu"] = "Kobol",
["kgv"] = "Karas",
["kgw"] = "Karon Dori",
["kgx"] = "Kamaru",
["kgy"] = "Kyerung",
["kha"] = "คาซี",
["khb"] = "ไทลื้อ",
["khc"] = "Tukang Besi North",
["khd"] = "Bädi Kanum",
["khe"] = "Korowai",
["khf"] = "Khuen",
["khh"] = "Kehu",
["khi-kho-pro"] = "Proto-Khoe",
["khi-kun"] = "ǃKung",
["khj"] = "Kuturmi",
["khl"] = "Lusi",
["khn"] = "Khandeshi",
["kho"] = "โคตาน",
["khp"] = "Kapauri",
["khq"] = "Koyra Chiini",
["khr"] = "Kharia",
["khs"] = "Kasua",
["kht"] = "คำตี้",
["khu"] = "Nkhumbi",
["khv"] = "Khvarshi",
["khw"] = "Khowar",
["khx"] = "Kanu",
["khy"] = "Ekele",
["khz"] = "Keapara",
["ki"] = "เกโกโย",
["kia"] = "Kim",
["kib"] = "Koalib",
["kic"] = "Kickapoo",
["kid"] = "Koshin",
["kie"] = "Kibet",
["kif"] = "Eastern Parbate Kham",
["kig"] = "Kimaama",
["kih"] = "Kilmeri",
["kii"] = "Kitsai",
["kij"] = "Kilivila",
["kil"] = "Kariya",
["kim"] = "โตฟา",
["kio"] = "Kiowa",
["kip"] = "Sheshi Kham",
["kiq"] = "Kosadle",
["kis"] = "Kis",
["kit"] = "Agob",
["kiv"] = "Kimbu",
["kiw"] = "Northeast Kiwai",
["kix"] = "Khiamniungan Naga",
["kiy"] = "Kirikiri",
["kiz"] = "Kisi",
["kj"] = "Kwanyama",
["kja"] = "Mlap",
["kjb"] = "Q'anjob'al",
["kjc"] = "Coastal Konjo",
["kjd"] = "Southern Kiwai",
["kje"] = "Kisar",
["kjg"] = "ขมุ",
["kjh"] = "คาคัส",
["kji"] = "Zabana",
["kjj"] = "Khinalug",
["kjk"] = "Highland Konjo",
["kjl"] = "Western Parbate Kham",
["kjm"] = "Kháng",
["kjn"] = "Kunjen",
["kjo"] = "Harijan Kinnauri",
["kjp"] = "กะเหรี่ยงโปตะวันออก",
["kjq"] = "Western Keres",
["kjr"] = "Kurudu",
["kjs"] = "East Kewa",
["kjt"] = "กะเหรี่ยงโปแพร่",
["kju"] = "Kashaya",
["kjx"] = "Ramopa",
["kjy"] = "Erave",
["kjz"] = "Bumthangkha",
["kk"] = "คาซัค",
["kka"] = "Kakanda",
["kkb"] = "Kwerisa",
["kkc"] = "Odoodee",
["kkd"] = "Kinuku",
["kke"] = "Kakabe",
["kkf"] = "Kalaktang Monpa",
["kkg"] = "Mabaka Valley Kalinga",
["kkh"] = "เขิน",
["kki"] = "Kagulu",
["kkj"] = "Kako",
["kkk"] = "Kokota",
["kkl"] = "Kosarek Yale",
["kkm"] = "Kiong",
["kkn"] = "Kon Keu",
["kko"] = "Karko",
["kkp"] = "Koko-Bera",
["kkq"] = "Kaiku",
["kkr"] = "Kir-Balar",
["kks"] = "Kirfi",
["kkt"] = "Koi",
["kku"] = "Tumi",
["kkv"] = "Kangean",
["kkw"] = "Teke-Kukuya",
["kkx"] = "Kohin",
["kky"] = "Guugu Yimidhirr",
["kkz"] = "Kaska",
["kl"] = "กรีนแลนด์",
["kla"] = "Klamath-Modoc",
["klb"] = "Kiliwa",
["klc"] = "Kolbila",
["kld"] = "Gamilaraay",
["kle"] = "Kulung",
["klf"] = "Kendeje",
["klg"] = "กาลากันแบบตากาเกาลู",
["klh"] = "Weliki",
["kli"] = "Kalumpang",
["klj"] = "แฆแลจ",
["klk"] = "Kono (Nigeria)",
["kll"] = "กาลากันแบบกากัน",
["klm"] = "Kolom",
["kln"] = "Kalenjin",
["klo"] = "Kapya",
["klp"] = "Kamasa",
["klq"] = "Rumu",
["klr"] = "Khaling",
["kls"] = "Kalasha",
["klt"] = "Nukna",
["klu"] = "Klao",
["klv"] = "Maskelynes",
["klw"] = "ลินดู",
["klx"] = "Koluwawa",
["kly"] = "Kalao",
["klz"] = "Kabola",
["km"] = "เขมร",
["kma"] = "Konni",
["kmb"] = "Kimbundu",
["kmc"] = "ต้งใต้",
["kmd"] = "Madukayang Kalinga",
["kme"] = "Bakole",
["kmf"] = "Kare (New Guinea)",
["kmg"] = "Kâte",
["kmh"] = "Kalam",
["kmi"] = "Kami",
["kmj"] = "Kumarbhag Paharia",
["kmk"] = "Limos Kalinga",
["kml"] = "Tanudan Kalinga",
["kmm"] = "Kom (India)",
["kmn"] = "Awtuw",
["kmo"] = "Kwoma",
["kmp"] = "Gimme",
["kmq"] = "Kwama",
["kmr"] = "เคิร์ดเหนือ",
["kms"] = "Kamasau",
["kmt"] = "Kemtuik",
["kmu"] = "Kanite",
["kmv"] = "Karipúna Creole French",
["kmw"] = "Kumu",
["kmx"] = "Waboda",
["kmy"] = "Koma",
["kmz"] = "Khorasani Turkish",
["kn"] = "กันนฑะ",
["kna"] = "Kanakuru",
["knb"] = "Lubuagan Kalinga",
["knd"] = "Konda",
["kne"] = "กันกานาอือ",
["knf"] = "Mankanya",
["kni"] = "Kanufi",
["knj"] = "Akatek",
["knk"] = "Kuranko",
["knl"] = "Keninjal",
["knm"] = "Kanamari",
["kno"] = "Kono (Sierra Leone)",
["knp"] = "Kwanja",
["knq"] = "Kintaq",
["knr"] = "Kaningra",
["kns"] = "Kensiu",
["knt"] = "Katukina",
["knu"] = "Kono (Guinea)",
["knv"] = "Tabo",
["knx"] = "Kendayan",
["kny"] = "Kanyok",
["knz"] = "Kalamsé",
["ko"] = "เกาหลี",
["ko-ear"] = "เกาหลีใหม่ช่วงต้น",
["koa"] = "Konomala",
["koc"] = "Kpati",
["kod"] = "Kodi",
["koe"] = "Kacipo-Balesi",
["kof"] = "Kubi",
["kog"] = "Cogui",
["koh"] = "Koyo",
["koi"] = "Komi-Permyak",
["kok"] = "กงกัณ",
["kol"] = "Kol (New Guinea)",
["koo"] = "Konzo",
["kop"] = "Waube",
["koq"] = "Kota (Gabon)",
["kos"] = "Kosraean",
["kot"] = "Lagwan",
["kou"] = "Koke",
["kov"] = "Kudu-Camo",
["kow"] = "Kugama",
["koy"] = "Koyukon",
["koz"] = "Korak",
["kpa"] = "Kutto",
["kpb"] = "Mullu Kurumba",
["kpc"] = "Curripaco",
["kpd"] = "Koba",
["kpe"] = "Kpelle",
["kpf"] = "Komba",
["kpg"] = "Kapingamarangi",
["kph"] = "Kplang",
["kpi"] = "Kofei",
["kpj"] = "Karajá",
["kpk"] = "Kpan",
["kpl"] = "Kpala",
["kpm"] = "เกอฮอ",
["kpn"] = "Kepkiriwát",
["kpo"] = "Ikposo",
["kpq"] = "Korupun-Sela",
["kpr"] = "Korafe-Yegha",
["kps"] = "Tehit",
["kpt"] = "Karata",
["kpu"] = "Kafoa",
["kpv"] = "Komi-Zyrian",
["kpw"] = "Kobon",
["kpx"] = "Mountain Koiari",
["kpy"] = "Koryak",
["kpz"] = "Kupsabiny",
["kqa"] = "Mum",
["kqb"] = "Kovai",
["kqc"] = "Doromu-Koki",
["kqd"] = "Koy Sanjaq Surat",
["kqe"] = "กาลากัน",
["kqf"] = "Kakabai",
["kqg"] = "Khe",
["kqh"] = "Kisankasa",
["kqi"] = "Koitabu",
["kqj"] = "Koromira",
["kqk"] = "Kotafon Gbe",
["kql"] = "Kyenele",
["kqm"] = "Khisa",
["kqn"] = "Kaonde",
["kqo"] = "Eastern Krahn",
["kqp"] = "Kimré",
["kqq"] = "Krenak",
["kqr"] = "Kimaragang",
["kqs"] = "Northern Kissi",
["kqt"] = "Klias River Kadazan",
["kqu"] = "Seroa",
["kqv"] = "Okolod",
["kqw"] = "Kandas",
["kqx"] = "Mser",
["kqy"] = "Koorete",
["kqz"] = "Korana",
["kr"] = "กานูรี",
["kra"] = "Kumhali",
["krb"] = "Karkin",
["krc"] = "Karachay-Balkar",
["krd"] = "Kairui-Midiki",
["kre"] = "Panará",
["krf"] = "Koro (Vanuatu)",
["krh"] = "Kurama",
["kri"] = "Krio",
["krj"] = "Kinaray-a",
["krk"] = "Kerek",
["krl"] = "คาเรเลีย",
["krm"] = "Krim",
["krn"] = "Sapo",
["kro-pro"] = "Proto-Kru",
["krp"] = "Korop",
["krr"] = "Kru'ng",
["krs"] = "Kresh",
["kru"] = "กุรุข",
["krv"] = "Kavet",
["krw"] = "Western Krahn",
["krx"] = "Karon",
["kry"] = "Kryts",
["krz"] = "Sota Kanum",
["ks"] = "แคชเมียร์",
["ksa"] = "Shuwa-Zamani",
["ksb"] = "Shambala",
["ksc"] = "Southern Kalinga",
["ksd"] = "Tolai",
["kse"] = "Kuni",
["ksf"] = "Bafia",
["ksg"] = "Kusaghe",
["ksi"] = "Krisa",
["ksj"] = "Uare",
["ksk"] = "Kansa",
["ksl"] = "Kumalu",
["ksm"] = "Kumba",
["ksn"] = "Kasiguranin",
["kso"] = "Kofa",
["ksp"] = "Kaba",
["ksq"] = "Kwaami",
["ksr"] = "Borong",
["kss"] = "Southern Kissi",
["kst"] = "Winyé",
["ksu"] = "Khamyang",
["ksv"] = "Kusu",
["ksw"] = "กะเหรี่ยงสะกอ",
["ksx"] = "Kedang",
["ksy"] = "Kharia Thar",
["ksz"] = "Kodaku",
["kta"] = "Katua",
["ktb"] = "Kambaata",
["ktc"] = "Kholok",
["ktd"] = "Kokata",
["ktf"] = "Kwami",
["ktg"] = "Kalkatungu",
["kth"] = "Karanga",
["kti"] = "North Muyu",
["ktj"] = "Plapo Krumen",
["ktk"] = "Kaniet",
["ktl"] = "Koroshi",
["ktm"] = "Kurti",
["ktn"] = "Karitiâna",
["kto"] = "Kuot",
["ktp"] = "Kaduo",
["ktq"] = "Katabaga",
["ktr"] = "Kota Marudu Tinagas",
["kts"] = "South Muyu",
["ktt"] = "Ketum",
["ktu"] = "Kituba",
["ktv"] = "กะตูตะวันออก",
["ktw"] = "Kato",
["ktx"] = "Kaxararí",
["kty"] = "Kango",
["ktz"] = "Juǀ'hoan",
["ku-pro"] = "เคอร์ดิชดั้งเดิม",
["kub"] = "Kutep",
["kuc"] = "Kwinsu",
["kud"] = "Auhelawa",
["kue"] = "Kuman",
["kuf"] = "กะตูตะวันตก",
["kug"] = "Kupa",
["kuh"] = "Kushi",
["kui"] = "Kuikúro",
["kuj"] = "Kuria",
["kuk"] = "Kepo'",
["kul"] = "Kulere",
["kum"] = "คูมุก",
["kun"] = "Kunama",
["kuo"] = "Kumukio",
["kup"] = "Kunimaipa",
["kuq"] = "Karipuna",
["kus"] = "Kusaal",
["kut"] = "Ktunaxa",
["kuu"] = "Upper Kuskokwim",
["kuv"] = "Kur",
["kuw"] = "Kpagua",
["kux"] = "Kukatja",
["kuy"] = "Kuuku-Ya'u",
["kuz"] = "Kunza",
["kva"] = "Bagvalal",
["kvb"] = "Kubu",
["kvc"] = "Kove",
["kvd"] = "Kui (Indonesia)",
["kve"] = "Kalabakan",
["kvf"] = "Kabalai",
["kvg"] = "Kuni-Boazi",
["kvh"] = "Komodo",
["kvi"] = "Kwang",
["kvj"] = "Psikye",
["kvk"] = "Korean Sign Language",
["kvl"] = "Brek Karen",
["kvm"] = "Kendem",
["kvn"] = "Border Kuna",
["kvo"] = "Dobel",
["kvp"] = "Kompane",
["kvq"] = "Geba Karen",
["kvr"] = "Kerinci",
["kvt"] = "Lahta Karen",
["kvu"] = "Yinbaw Karen",
["kvv"] = "Kola",
["kvw"] = "Wersing",
["kvx"] = "Parkari Koli",
["kvy"] = "Yintale Karen",
["kvz"] = "Tsakwambo",
["kw"] = "คอร์นวอลล์",
["kwa"] = "Dâw",
["kwb"] = "Baa",
["kwc"] = "Likwala",
["kwd"] = "Kwaio",
["kwe"] = "Kwerba",
["kwf"] = "Kwara'ae",
["kwg"] = "Sara Kaba Deme",
["kwh"] = "Kowiai",
["kwi"] = "Awa-Cuaiquer",
["kwj"] = "Kwanga",
["kwk"] = "Kwak'wala",
["kwl"] = "Kofyar",
["kwm"] = "Kwambi",
["kwn"] = "Kwangali",
["kwo"] = "Kwomtari",
["kwp"] = "Kodia",
["kwq"] = "Kwak",
["kwr"] = "Kwer",
["kws"] = "Kwese",
["kwt"] = "Kwesten",
["kwu"] = "Kwakum",
["kwv"] = "Sara Kaba Náà",
["kww"] = "Kwinti",
["kwx"] = "Khirwar",
["kwz"] = "Kwadi",
["kxa"] = "Kairiru",
["kxb"] = "Krobu",
["kxc"] = "Konso",
["kxd"] = "มลายูแบบบรูไน",
["kxe"] = "Kakihum",
["kxf"] = "Manumanaw Karen",
["kxh"] = "Karo",
["kxi"] = "Keningau Murut",
["kxj"] = "Kulfa",
["kxk"] = "Zayein Karen",
["kxl"] = "Nepali Kurux",
["kxm"] = "เขมรเหนือ",
["kxn"] = "Kanowit",
["kxo"] = "Kanoé",
["kxp"] = "Wadiyara Koli",
["kxq"] = "Smärky Kanum",
["kxr"] = "Manus Koro",
["kxs"] = "Kangjia",
["kxt"] = "Koiwat",
["kxu"] = "Kui (India)",
["kxv"] = "Kuvi",
["kxw"] = "Konai",
["kxx"] = "Likuba",
["kxy"] = "Kayong",
["kxz"] = "Kerewo",
["ky"] = "คีร์กีซ",
["kya"] = "Kwaya",
["kyb"] = "Butbut Kalinga",
["kyc"] = "Kyaka",
["kyd"] = "Karey",
["kye"] = "Krache",
["kyf"] = "Kouya",
["kyg"] = "Keyagana",
["kyh"] = "Karok",
["kyi"] = "Kiput",
["kyj"] = "กาเรา",
["kyk"] = "Kamayo",
["kyl"] = "Kalapuya",
["kym"] = "Kpatili",
["kyn"] = "Karolanos",
["kyo"] = "Kelon",
["kyp"] = "Kang",
["kyq"] = "Kenga",
["kyr"] = "Kuruáya",
["kys"] = "Baram Kayan",
["kyt"] = "Kayagar",
["kyu"] = "กะยาตะวันตก",
["kyv"] = "Kayort",
["kyw"] = "Kudmali",
["kyx"] = "Rapoisi",
["kyy"] = "Kambaira",
["kyz"] = "Kayabí",
["kza"] = "Western Karaboro",
["kzb"] = "Kaibobo",
["kzc"] = "Bondoukou Kulango",
["kzd"] = "Kadai",
["kzf"] = "Da'a Kaili",
["kzg"] = "Kikai",
["kzh"] = "Dongolawi",
["kzi"] = "Kelabit",
["kzj"] = "กาดาซันชายฝั่ง",
["kzk"] = "Kazukuru",
["kzl"] = "Kayeli",
["kzm"] = "Kais",
["kzn"] = "Kokola",
["kzo"] = "Kaningi",
["kzp"] = "Kaidipang",
["kzq"] = "Kaike",
["kzr"] = "Karang",
["kzs"] = "Sugut Dusun",
["kzt"] = "Tambunan Dusun",
["kzu"] = "Kayupulau",
["kzv"] = "Komyandaret",
["kzw"] = "Kariri",
["kzx"] = "Kamarian",
["kzy"] = "Kango-Sua",
["kzz"] = "Kalabra",
["la"] = "ละติน",
["laa"] = "Lapuyan Subanun",
["lab"] = "Linear A",
["lac"] = "Lacandon",
["lad"] = "ลาดิโน",
["lae"] = "Pattani",
["laf"] = "Lafofa",
["lag"] = "Langi",
["lah"] = "Lahnda",
["lai"] = "Lambya",
["laj"] = "Lango (Uganda)",
["lak"] = "Laka",
["lam"] = "Lamba",
["lan"] = "Laru",
["lap"] = "Kabba-Laka",
["laq"] = "Qabiao",
["lar"] = "Larteh",
["las"] = "Gur Lama",
["lau"] = "Laba",
["law"] = "Lauje",
["lax"] = "Tiwa",
["lay"] = "Lama Bai",
["laz"] = "Aribwatsa",
["lb"] = "ลักเซมเบิร์ก",
["lbb"] = "Label",
["lbc"] = "ลักเกีย",
["lbe"] = "ลัก",
["lbf"] = "Tinani",
["lbg"] = "Laopang",
["lbi"] = "La'bi",
["lbj"] = "ลาดัก",
["lbk"] = "Central Bontoc",
["lbl"] = "Libon Bikol",
["lbm"] = "Lodhi",
["lbn"] = "Lamet",
["lbo"] = "Laven",
["lbq"] = "Wampar",
["lbr"] = "Northern Lorung",
["lbs"] = "Libyan Sign Language",
["lbt"] = "Lachi",
["lbu"] = "Labu",
["lbv"] = "Lavatbura-Lamusong",
["lbw"] = "Tolaki",
["lbx"] = "Lawangan",
["lby"] = "Lamu-Lamu",
["lbz"] = "Lardil",
["lcc"] = "Legenyem",
["lcd"] = "Lola",
["lce"] = "Loncong",
["lcf"] = "Lubu",
["lch"] = "Luchazi",
["lcl"] = "Lisela",
["lcm"] = "Tungag",
["lcp"] = "เลอเวือะตะวันตก",
["lcq"] = "Luhu",
["lcs"] = "Lisabata-Nuniali",
["lda"] = "Kla",
["ldb"] = "Idun",
["ldd"] = "Luri (Nigeria)",
["ldg"] = "Lenyima",
["ldh"] = "Lamja-Dengsa-Tola",
["ldj"] = "Lemoro",
["ldk"] = "Leelau",
["ldl"] = "Kaan",
["ldm"] = "Landoma",
["ldn"] = "Láadan",
["ldo"] = "Loo",
["ldp"] = "Tso",
["ldq"] = "Lufu",
["lea"] = "Lega-Shabunda",
["leb"] = "Lala-Bisa",
["lec"] = "Leco",
["led"] = "Lendu",
["lee"] = "Lyélé",
["lef"] = "Lelemi",
["leh"] = "Lenje",
["lei"] = "Lemio",
["lej"] = "Lengola",
["lek"] = "Leipon",
["lel"] = "Lele (Congo)",
["lem"] = "Nomaande",
["len"] = "Honduran Lenca",
["leo"] = "Mengisa",
["lep"] = "Lepcha",
["leq"] = "Lembena",
["ler"] = "Lenkau",
["les"] = "Lese",
["let"] = "Lesing-Gelimi",
["leu"] = "Kara (New Guinea)",
["lev"] = "Lamma",
["lew"] = "Ledo Kaili",
["lex"] = "Luang",
["ley"] = "Lemolang",
["lez"] = "เลซกี",
["lfa"] = "Lefa",
["lfn"] = "Lingua Franca Nova",
["lg"] = "ลูกันดา",
["lga"] = "Lungga",
["lgb"] = "Laghu",
["lgg"] = "Lugbara",
["lgh"] = "Laghuu",
["lgi"] = "Lengilu",
["lgk"] = "Neverver",
["lgl"] = "Wala",
["lgm"] = "Lega-Mwenga",
["lgn"] = "Opuuo",
["lgq"] = "Logba",
["lgr"] = "Lengo",
["lgs"] = "Guinea-Bissau Sign Language",
["lgt"] = "Pahi",
["lgu"] = "Longgu",
["lgz"] = "Ligenza",
["lha"] = "Laha (Vietnam)",
["lhh"] = "Laha (Indonesia)",
["lhi"] = "Lahu Shi",
["lhl"] = "Lahul Lohar",
["lhn"] = "Lahanan",
["lhp"] = "Lhokpu",
["lhs"] = "Mlahsö",
["lht"] = "Lo-Toga",
["lhu"] = "Lahu",
["li"] = "ลิมเบิร์ก",
["lia"] = "West-Central Limba",
["lib"] = "Likum",
["lic"] = "ไหล",
["lid"] = "Nyindrou",
["lie"] = "Likila",
["lif"] = "ลิมบู",
["lig"] = "Ligbi",
["lih"] = "Lihir",
["lii"] = "Lingkhim",
["lij"] = "ลีกูเรีย",
["lik"] = "Lika",
["lil"] = "Lillooet",
["lio"] = "Liki",
["lip"] = "Sekpele",
["liq"] = "Libido",
["lir"] = "Liberian Kreyol",
["lis"] = "ลีสู่",
["liu"] = "Logorik",
["liv"] = "ลีโวเนีย",
["liw"] = "Col",
["lix"] = "Liabuku",
["liy"] = "Banda-Bambari",
["liz"] = "Libinza",
["lja"] = "Golpa",
["lje"] = "Rampi",
["lji"] = "Laiyolo",
["ljl"] = "Li'o",
["ljp"] = "Lampung Api",
["ljw"] = "Yirandali",
["ljx"] = "Yuru",
["lka"] = "Lakalei",
["lkb"] = "Kabras",
["lkc"] = "Kucong",
["lkd"] = "Lakondê",
["lke"] = "Kenyi",
["lkh"] = "Lakha",
["lki"] = "Laki",
["lkj"] = "Remun",
["lkl"] = "Laeko-Libuat",
["lkm"] = "Kalaamaya",
["lkn"] = "Lakon",
["lko"] = "Khayo",
["lkr"] = "Päri",
["lks"] = "Kisa",
["lkt"] = "ลาโคตา",
["lku"] = "Kungkari",
["lky"] = "Lokoya",
["lla"] = "Lala-Roba",
["llb"] = "Lolo",
["llc"] = "Lele (Guinea)",
["lld"] = "ลาดิน",
["lle"] = "Lele (New Guinea)",
["llf"] = "Hermit",
["llg"] = "Lole",
["llh"] = "Lamu",
["lli"] = "Teke-Laali",
["llj"] = "Ladji-Ladji",
["llk"] = "Lelak",
["lll"] = "Lilau",
["llm"] = "Lasalimu",
["lln"] = "Lele (Chad)",
["llo"] = "Khlor",
["llp"] = "North Efate",
["llq"] = "Lolak",
["lls"] = "Lithuanian Sign Language",
["llu"] = "Lau",
["llx"] = "Lauan",
["lma"] = "East Limba",
["lmb"] = "Merei",
["lmc"] = "Limilngan",
["lmd"] = "Lumun",
["lme"] = "Pévé",
["lmf"] = "South Lembata",
["lmg"] = "Lamogai",
["lmh"] = "Lambichhong",
["lmi"] = "Lombi",
["lmj"] = "West Lembata",
["lmk"] = "Lamkang",
["lml"] = "Raga",
["lmn"] = "Lambadi",
["lmo"] = "ลอมบาร์ด",
["lmp"] = "Limbum",
["lmq"] = "Lamatuka",
["lmr"] = "Lamalera",
["lmu"] = "Lamenu",
["lmv"] = "Lomaiviti",
["lmw"] = "Lake Miwok",
["lmx"] = "Laimbue",
["lmy"] = "ลัมโบยา",
["lmz"] = "Lumbee",
["ln"] = "ลิงกาลา",
["lna"] = "Langbashe",
["lnb"] = "Mbalanhu",
["lnd"] = "Lun Bawang",
["lnh"] = "Lanoh",
["lni"] = "Daantanai'",
["lnj"] = "Linngithigh",
["lnl"] = "South Central Banda",
["lnm"] = "Langam",
["lnn"] = "Lorediakarkar",
["lno"] = "Lango (Sudan)",
["lns"] = "Lamnso'",
["lnu"] = "Longuda",
["lnw"] = "Lanima",
["lo"] = "ลาว",
["loa"] = "Loloda",
["lob"] = "Lobi",
["loc"] = "Inonhan",
["lod"] = "เบอราวัน",
["loe"] = "Saluan",
["lof"] = "Logol",
["log"] = "Logo",
["loh"] = "Narim",
["loi"] = "Lomakka",
["loj"] = "Lou",
["lok"] = "Loko",
["lol"] = "Mongo",
["lom"] = "Loma",
["lon"] = "Malawi Lomwe",
["loo"] = "Lombo",
["lop"] = "Lopa",
["loq"] = "Lobala",
["lor"] = "Téén",
["los"] = "Loniu",
["lot"] = "Lotuko",
["lou"] = "ครีโอลลุยเซียนา",
["lov"] = "Lopi",
["low"] = "Tampias Lobu",
["lox"] = "Loun",
["loz"] = "Lozi",
["lpa"] = "Lelepa",
["lpe"] = "Lepki",
["lpn"] = "Long Phuri Naga",
["lpo"] = "Lipo",
["lpx"] = "Lopit",
["lra"] = "Rara Bakati'",
["lrc"] = "Northern Luri",
["lre"] = "Laurentian",
["lrg"] = "Laragia",
["lri"] = "Marachi",
["lrk"] = "Loarki",
["lrl"] = "Larestani",
["lrm"] = "Marama",
["lrn"] = "Lorang",
["lro"] = "Laro",
["lrr"] = "Southern Lorung",
["lrt"] = "Larantuka Malay",
["lrv"] = "Larëvat",
["lrz"] = "Lemerig",
["lsa"] = "Lasgerdi",
["lsd"] = "Lishana Deni",
["lse"] = "Lusengo",
["lsh"] = "Lish",
["lsi"] = "Lashi",
["lsl"] = "Latvian Sign Language",
["lsm"] = "Saamia",
["lsn"] = "Tibetan Sign Language",
["lso"] = "Laos Sign Language",
["lsp"] = "Panamanian Sign Language",
["lsr"] = "Aruop",
["lss"] = "Lasi",
["lst"] = "Trinidad and Tobago Sign Language",
["lsv"] = "Sivia Sign Language",
["lsy"] = "Mauritian Sign Language",
["lt"] = "ลิทัวเนีย",
["ltc"] = "จีนยุคกลาง",
["ltg"] = "ลัตเกล",
["lti"] = "Leti",
["ltn"] = "Latundê",
["lto"] = "Olutsotso",
["lts"] = "Lutachoni",
["ltu"] = "Latu",
["lu"] = "Luba-Katanga",
["lua"] = "Luba-Kasai",
["luc"] = "Aringa",
["lud"] = "Ludian",
["lue"] = "Luvale",
["luf"] = "Laua",
["luh"] = "หล่อยแอว๋",
["lui"] = "Luiseño",
["luj"] = "Luna",
["luk"] = "Lunanakha",
["lul"] = "Olu'bo",
["lum"] = "Luimbi",
["lun"] = "Lunda",
["luo"] = "Luo",
["lup"] = "Lumbu",
["luq"] = "Lucumí",
["lur"] = "Laura",
["lus"] = "มีโซ",
["lut"] = "Lushootseed",
["luu"] = "Lumba-Yakkha",
["luv"] = "Luwati",
["luy"] = "Luhya",
["luz"] = "Southern Luri",
["lv"] = "ลัตเวีย",
["lva"] = "Maku'a",
["lvi"] = "Lawi",
["lvk"] = "Lavukaleve",
["lvl"] = "Lwel",
["lvu"] = "Levuka",
["lwa"] = "Lwalu",
["lwe"] = "Lewo Eleng",
["lwg"] = "Wanga",
["lwh"] = "White Lachi",
["lwl"] = "เลอเวือะตะวันออก",
["lwm"] = "Laomian",
["lwo"] = "Luwo",
["lws"] = "Malawian Sign Language",
["lwt"] = "Lewotobi",
["lwu"] = "Lawu",
["lww"] = "Lewo",
["lya"] = "Layakha",
["lyg"] = "ลึงงัม",
["lyn"] = "Luyana",
["lzh"] = "จีนวรรณกรรม",
["lzl"] = "Litzlitz",
["lzn"] = "Leinong Naga",
["lzz"] = "ลัซ",
["maa"] = "San Jerónimo Tecóatl Mazatec",
["mab"] = "Yutanduchi Mixtec",
["mad"] = "Madurese",
["mae"] = "Bo-Rukul",
["maf"] = "Mafa",
["mag"] = "มคหะ",
["mai"] = "ไมถิลี",
["maj"] = "Jalapa de Díaz Mazatec",
["mak"] = "มากัซซาร์",
["mam"] = "Mam",
["man"] = "Mandingo",
["map-ata-pro"] = "Proto-Atayalic",
["map-bms"] = "Banyumasan",
["map-pro"] = "ออสโตรนีเซียนดั้งเดิม",
["maq"] = "Chiquihuitlán Mazatec",
["mas"] = "มาไซ",
["mat"] = "Matlatzinca",
["mau"] = "Huautla Mazatec",
["mav"] = "Sateré-Mawé",
["maw"] = "Mampruli",
["max"] = "มลายูแบบโมลุกกะเหนือ",
["maz"] = "Central Mazahua",
["mba"] = "Higaonon",
["mbb"] = "Western Bukidnon Manobo",
["mbc"] = "Macushi",
["mbd"] = "Dibabawon Manobo",
["mbe"] = "Molale",
["mbf"] = "Baba Malay",
["mbh"] = "Mangseng",
["mbi"] = "Ilianen Manobo",
["mbj"] = "Nadëb",
["mbk"] = "Malol",
["mbl"] = "Maxakalí",
["mbm"] = "Ombamba",
["mbn"] = "Macaguán",
["mbo"] = "Mbo (Cameroon)",
["mbp"] = "Wiwa",
["mbq"] = "Maisin",
["mbr"] = "Nukak Makú",
["mbs"] = "Sarangani Manobo",
["mbt"] = "Matigsalug Manobo",
["mbu"] = "Mbula-Bwazza",
["mbv"] = "Mbulungish",
["mbw"] = "Maring",
["mbx"] = "Sepik Mari",
["mby"] = "Memoni",
["mbz"] = "Amoltepec Mixtec",
["mca"] = "Maca",
["mcb"] = "Machiguenga",
["mcc"] = "Bitur",
["mcd"] = "Sharanahua",
["mce"] = "Itundujia Mixtec",
["mcf"] = "Matsés",
["mcg"] = "Mapoyo",
["mch"] = "Ye'kwana",
["mci"] = "Mese",
["mcj"] = "Mvanip",
["mck"] = "Mbunda",
["mcl"] = "Macaguaje",
["mcm"] = "Kristang",
["mcn"] = "Masana",
["mco"] = "Coatlán Mixe",
["mcp"] = "Makaa",
["mcq"] = "Ese",
["mcr"] = "Menya",
["mcs"] = "Mambai",
["mcu"] = "Cameroon Mambila",
["mcw"] = "Mawa",
["mcx"] = "Mpiemo",
["mcy"] = "South Watut",
["mcz"] = "Mawan",
["mda"] = "Mada (Nigeria)",
["mdb"] = "Morigi",
["mdc"] = "Male",
["mdd"] = "Mbum",
["mde"] = "Bura Mabang",
["mdf"] = "มอกชา",
["mdg"] = "Massalat",
["mdh"] = "มากินดาเนา",
["mdi"] = "Mamvu",
["mdj"] = "Mangbetu",
["mdk"] = "Mangbutu",
["mdl"] = "Maltese Sign Language",
["mdm"] = "Mayogo",
["mdn"] = "Mbati",
["mdp"] = "Mbala",
["mdq"] = "Mbole",
["mdr"] = "Mandar",
["mds"] = "Maria",
["mdt"] = "Mbere",
["mdu"] = "Mboko",
["mdv"] = "Santa Lucía Monteverde Mixtec",
["mdw"] = "Mbosi",
["mdx"] = "Dizin",
["mdy"] = "Maale",
["mdz"] = "Suruí Do Pará",
["mea"] = "Menka",
["meb"] = "Ikobi-Mena",
["mec"] = "Mara",
["med"] = "Melpa",
["mee"] = "Mengen",
["mef"] = "Megam",
["meh"] = "Southwestern Tlaxiaco Mixtec",
["mei"] = "Midob",
["mej"] = "Meyah",
["mek"] = "Mekeo",
["mel"] = "Central Melanau",
["mem"] = "Mangala",
["men"] = "Mende",
["meo"] = "มลายูแบบเกอดะฮ์",
["mep"] = "Miriwung",
["meq"] = "Merey",
["mer"] = "Meru",
["mes"] = "Masmaje",
["met"] = "Mato",
["meu"] = "Motu",
["mev"] = "Mano",
["mew"] = "Maaka",
["mey"] = "Hassaniya Arabic",
["mez"] = "Menominee",
["mfa"] = "มลายูแบบปัตตานี",
["mfb"] = "Bangka",
["mfc"] = "Mba",
["mfd"] = "Mendankwe-Nkwen",
["mfe"] = "ครีโอลมอริเชียส",
["mff"] = "Naki",
["mfg"] = "Mixifore",
["mfh"] = "Matal",
["mfi"] = "Wandala",
["mfj"] = "Mefele",
["mfk"] = "North Mofu",
["mfl"] = "Putai",
["mfm"] = "Marghi South",
["mfn"] = "Cross River Mbembe",
["mfo"] = "Mbe",
["mfp"] = "Makassar Malay",
["mfq"] = "Moba",
["mfr"] = "Marrithiyel",
["mfs"] = "Mexican Sign Language",
["mft"] = "Mokerang",
["mfu"] = "Mbwela",
["mfv"] = "Mandjak",
["mfw"] = "Mulaha",
["mfx"] = "Melo",
["mfy"] = "Mayo",
["mfz"] = "Mabaan",
["mg"] = "มาลากาซี",
["mga"] = "ไอริชกลาง",
["mgb"] = "Mararit",
["mgc"] = "Morokodo",
["mgd"] = "Moru",
["mge"] = "Mango",
["mgf"] = "Maklew",
["mgg"] = "Mpongmpong",
["mgh"] = "Makhuwa-Meetto",
["mgi"] = "Jili",
["mgj"] = "Abureni",
["mgk"] = "Mawes",
["mgl"] = "Maleu-Kilenge",
["mgm"] = "Mambae",
["mgn"] = "Mbangi",
["mgo"] = "Meta'",
["mgp"] = "Eastern Magar",
["mgq"] = "Malila",
["mgr"] = "Mambwe-Lungu",
["mgs"] = "Manda (Tanzania)",
["mgt"] = "Mongol",
["mgu"] = "Mailu",
["mgv"] = "Matengo",
["mgw"] = "Matumbi",
["mgy"] = "Mbunga",
["mgz"] = "Mbugwe",
["mh"] = "มาร์แชลล์",
["mha"] = "Manda (India)",
["mhb"] = "Mahongwe",
["mhc"] = "Mocho",
["mhd"] = "Mbugu",
["mhe"] = "Besisi",
["mhf"] = "Mamaa",
["mhg"] = "Marrgu",
["mhi"] = "Ma'di",
["mhj"] = "Mogholi",
["mhk"] = "Mungaka",
["mhl"] = "Mauwake",
["mhm"] = "Makhuwa-Moniga",
["mhn"] = "โมเชโน",
["mho"] = "Mashi",
["mhp"] = "Balinese Malay",
["mhq"] = "Mandan",
["mhr"] = "Eastern Mari",
["mhs"] = "Buru (Indonesia)",
["mht"] = "Mandahuaca",
["mhu"] = "Taraon",
["mhw"] = "Mbukushu",
["mhx"] = "Lhao Vo",
["mhy"] = "Ma'anyan",
["mhz"] = "Mor (Austronesian)",
["mi"] = "มาวรี",
["mia"] = "Miami",
["mib"] = "Atatláhuca Mixtec",
["mic"] = "Mi'kmaq",
["mid"] = "Mandaic",
["mie"] = "Ocotepec Mixtec",
["mif"] = "Mofu-Gudur",
["mig"] = "San Miguel el Grande Mixtec",
["mih"] = "Chayuco Mixtec",
["mii"] = "Chigmecatitlán Mixtec",
["mij"] = "Mungbam",
["mik"] = "Mikasuki",
["mil"] = "Peñoles Mixtec",
["mim"] = "Alacatlatzala Mixtec",
["min"] = "มีนังกาเบา",
["mio"] = "Pinotepa Nacional Mixtec",
["mip"] = "Apasco-Apoala Mixtec",
["miq"] = "Miskito",
["mir"] = "Isthmus Mixe",
["mis-hkl"] = "Kelantan Peranakan Hokkien",
["mis-idn"] = "Idiom Neutral",
["mis-isa"] = "Isaurian",
["mis-jie"] = "Jie",
["mis-jzh"] = "Jizhao",
["mis-kas"] = "Kassite",
["mis-mmd"] = "Mimi of Decorse",
["mis-mmn"] = "Mimi of Nachtigal",
["mis-phi"] = "Philistine",
["mis-rou"] = "Rouran",
["mis-tdl"] = "Turdulian",
["mis-tdt"] = "Turdetanian",
["mis-tnw"] = "Tangwang",
["mis-tuh"] = "Tuyuhun",
["mis-tuo"] = "Tuoba",
["mis-wuh"] = "Wuhuan",
["mis-xbi"] = "Xianbei",
["mis-xnu"] = "Xiongnu",
["mit"] = "Southern Puebla Mixtec",
["miu"] = "Cacaloxtepec Mixtec",
["miw"] = "Akoye",
["mix"] = "Mixtepec Mixtec",
["miy"] = "Ayutla Mixtec",
["miz"] = "Coatzospan Mixtec",
["mjb"] = "Makalero",
["mjc"] = "San Juan Colorado Mixtec",
["mjd"] = "Northwest Maidu",
["mje"] = "Muskum",
["mjg-mgl"] = "Mongghul",
["mjg-mgr"] = "Mangghuer",
["mji"] = "Kim Mun",
["mjj"] = "Mawak",
["mjk"] = "Matukar",
["mjl"] = "Mandeali",
["mjm"] = "Medebur",
["mjn"] = "Mebu",
["mjo"] = "Malankuravan",
["mjp"] = "Malapandaram",
["mjq"] = "Malaryan",
["mjr"] = "Malavedan",
["mjs"] = "Miship",
["mjt"] = "Sawriya Paharia",
["mju"] = "Manna-Dora",
["mjv"] = "Mannan",
["mjw"] = "Karbi",
["mjx"] = "Mahali",
["mjy"] = "Mahican",
["mjz"] = "Majhi",
["mk"] = "มาซิโดเนีย",
["mka"] = "Mbre",
["mkb"] = "Mal Paharia",
["mkc"] = "Siliput",
["mke"] = "Mawchi",
["mkf"] = "Miya",
["mkg"] = "Mak (China)",
["mkh-asl-pro"] = "Proto-Aslian",
["mkh-ban-pro"] = "Proto-Bahnaric",
["mkh-kat-pro"] = "Proto-Katuic",
["mkh-khm-pro"] = "ขมุอิกดั้งเดิม",
["mkh-kmr-pro"] = "เขมรดั้งเดิม",
["mkh-mmn"] = "มอญกลาง",
["mkh-mnc-pro"] = "มอญดั้งเดิม",
["mkh-mvi"] = "เวียดนามกลาง",
["mkh-pal-pro"] = "ปะหล่องดั้งเดิม",
["mkh-pea-pro"] = "แพริกดั้งเดิม",
["mkh-pkn-pro"] = "Proto-Pakanic",
["mkh-pro"] = "มอญ-เขมรดั้งเดิม",
["mkh-vie-pro"] = "เวียตติกดั้งเดิม",
["mki"] = "Dhatki",
["mkj"] = "โมกิล",
["mkk"] = "Byep",
["mkl"] = "Mokole",
["mkm"] = "Moklen",
["mkn"] = "Kupang Malay",
["mko"] = "Mingang Doso",
["mkp"] = "Moikodi",
["mkq"] = "Bay Miwok",
["mkr"] = "Malas",
["mks"] = "Silacayoapan Mixtec",
["mkt"] = "Vamale",
["mku"] = "Konyanka Maninka",
["mkv"] = "Mav̋ea",
["mkx"] = "Cinamiguin Manobo",
["mky"] = "Taba",
["mkz"] = "Makasae",
["ml"] = "มลยาฬัม",
["mla"] = "Tamambo",
["mlb"] = "Mbule",
["mlc"] = "Caolan",
["mle"] = "Manambu",
["mlf"] = "มัล",
["mlh"] = "Mape",
["mli"] = "Malimpung",
["mlj"] = "Miltu",
["mlk"] = "Ilwana",
["mll"] = "Malua Bay",
["mlm"] = "Mulam",
["mln"] = "Malango",
["mlo"] = "Mlomp",
["mlp"] = "Bargam",
["mlq"] = "Western Maninkakan",
["mlr"] = "Vame",
["mls"] = "Masalit",
["mlu"] = "To'abaita",
["mlv"] = "Mwotlap",
["mlw"] = "Moloko",
["mlx"] = "Malfaxal",
["mlz"] = "Malaynon",
["mma"] = "Mama",
["mmb"] = "Momina",
["mmc"] = "Michoacán Mazahua",
["mmd"] = "Maonan",
["mme"] = "Tirax",
["mmf"] = "Mundat",
["mmg"] = "North Ambrym",
["mmh"] = "Mehináku",
["mmi"] = "Musar",
["mmj"] = "Majhwar",
["mmk"] = "Mukha-Dora",
["mml"] = "Man Met",
["mmm"] = "Maii",
["mmn"] = "Mamanwa",
["mmo"] = "Mangga Buang",
["mmp"] = "Musan",
["mmq"] = "Aisi",
["mmr"] = "Western Xiangxi Miao",
["mmt"] = "Malalamai",
["mmu"] = "Mmaala",
["mmv"] = "Miriti",
["mmw"] = "Emae",
["mmx"] = "Madak",
["mmy"] = "Migaama",
["mmz"] = "Mabaale",
["mn"] = "มองโกเลีย",
["mna"] = "Mbula",
["mnb"] = "Muna",
["mnc"] = "แมนจู",
["mnd"] = "Mondé",
["mne"] = "Naba",
["mnf"] = "Mundani",
["mng"] = "Eastern Mnong",
["mnh"] = "Mono (Congo)",
["mni"] = "มณีปุระ",
["mnj"] = "Munji",
["mnk"] = "Mandinka",
["mnl"] = "Tiale",
["mnm"] = "Mapena",
["mnn"] = "มนองใต้",
["mnp"] = "หมิ่นเหนือ",
["mnq"] = "Minriq",
["mnr"] = "Mono (California)",
["mns-cen"] = "Central Mansi",
["mns-nor"] = "Northern Mansi",
["mns-pro"] = "Proto-Mansi",
["mns-sou"] = "Southern Mansi",
["mnt"] = "Maykulan",
["mnu"] = "Mer",
["mnv"] = "Rennellese",
["mnw"] = "มอญ",
["mnw-tha"] = "มอญแบบไทย",
["mnx"] = "Manikion",
["mny"] = "Manyawa",
["mnz"] = "Moni",
["moa"] = "Mwan",
["moc"] = "Mocoví",
["mod"] = "Mobilian",
["moe"] = "มงตาแญ",
["mog"] = "Mongondow",
["moh"] = "Mohawk",
["moi"] = "Mboi",
["moj"] = "Monzombo",
["mok"] = "Morori",
["mom"] = "Monimbo",
["moo"] = "Monom",
["mop"] = "Mopan Maya",
["moq"] = "Mor (Papuan)",
["mor"] = "Moro",
["mos"] = "Moore",
["mot"] = "Barí",
["mou"] = "Mogum",
["mov"] = "Mojave",
["mow"] = "Moi (Congo)",
["mox"] = "Molima",
["moy"] = "Shekkacho",
["moz"] = "Mukulu",
["mpa"] = "Mpoto",
["mpb"] = "Mullukmulluk",
["mpc"] = "Mangarayi",
["mpd"] = "Machinere",
["mpe"] = "Majang",
["mpg"] = "Marba",
["mph"] = "Maung",
["mpi"] = "Mpade",
["mpj"] = "Martu Wangka",
["mpk"] = "Mbara (Chad)",
["mpl"] = "Middle Watut",
["mpm"] = "Yosondúa Mixtec",
["mpn"] = "Mindiri",
["mpo"] = "Miu",
["mpp"] = "Migabac",
["mpq"] = "Matís",
["mpr"] = "Vangunu",
["mps"] = "Dadibi",
["mpt"] = "Mian",
["mpu"] = "Makuráp",
["mpv"] = "Mungkip",
["mpw"] = "Mapidian",
["mpx"] = "Misima-Paneati",
["mpy"] = "Mapia",
["mpz"] = "Mpi",
["mqa"] = "Maba",
["mqb"] = "Mbuko",
["mqc"] = "Mangole",
["mqe"] = "Matepi",
["mqf"] = "Momuna",
["mqg"] = "Kota Bangun Kutai Malay",
["mqh"] = "Tlazoyaltepec Mixtec",
["mqi"] = "Mariri",
["mqj"] = "Mamasa",
["mqk"] = "Rajah Kabunsuwan Manobo",
["mql"] = "Mbelime",
["mqm"] = "South Marquesan",
["mqn"] = "Moronene",
["mqo"] = "Modole",
["mqp"] = "Manipa",
["mqq"] = "Minokok",
["mqr"] = "Mander",
["mqs"] = "West Makian",
["mqt"] = "Mok",
["mqu"] = "Mandari",
["mqv"] = "Mosimo",
["mqw"] = "Murupi",
["mqx"] = "Mamuju",
["mqy"] = "Manggarai",
["mqz"] = "Malasanga",
["mr"] = "มราฐี",
["mra"] = "Mlabri",
["mrb"] = "Sungwadia",
["mrc"] = "Maricopa",
["mrd"] = "Western Magar",
["mre"] = "Martha's Vineyard Sign Language",
["mrf"] = "Elseng",
["mrg"] = "Mising",
["mrh"] = "Mara Chin",
["mrj"] = "Western Mari",
["mrk"] = "Hmwaveke",
["mrl"] = "Mortlockese",
["mrm"] = "Mwerlap",
["mrn"] = "Cheke Holo",
["mro"] = "Mru",
["mrp"] = "Morouas",
["mrq"] = "North Marquesan",
["mrr"] = "Hill Maria",
["mrs"] = "Maragus",
["mrt"] = "Margi",
["mru"] = "Mono (Cameroon)",
["mrv"] = "Mangarevan",
["mrw"] = "มาราเนา",
["mrx"] = "Dineor",
["mry"] = "Karaga Mandaya",
["mrz"] = "Marind",
["ms"] = "มาเลเซีย",
["msb"] = "มัสบาเต",
["msc"] = "Sankaran Maninka",
["msd"] = "Yucatec Maya Sign Language",
["mse"] = "Musey",
["msf"] = "Mekwei",
["msg"] = "Moraid",
["msi"] = "Sabah Malay",
["msj"] = "Ma",
["msk"] = "Mansaka",
["msl"] = "Molof",
["msm"] = "Agusan Manobo",
["msn"] = "Vurës",
["mso"] = "Mombum",
["msp"] = "Maritsauá",
["msq"] = "Caac",
["msr"] = "Mongolian Sign Language",
["mss"] = "West Masela",
["msu"] = "Musom",
["msv"] = "Maslam",
["msw"] = "Mansoanka",
["msx"] = "Moresada",
["msy"] = "Aruamu",
["msz"] = "Momare",
["mt"] = "มอลตา",
["mta"] = "Cotabato Manobo",
["mtb"] = "Anyin Morofo",
["mtc"] = "Munit",
["mtd"] = "Mualang",
["mte"] = "Alu",
["mtf"] = "Murik (New Guinea)",
["mtg"] = "Una",
["mth"] = "Munggui",
["mti"] = "Maiwa (New Guinea)",
["mtj"] = "Moskona",
["mtk"] = "Mbe'",
["mtl"] = "Montol",
["mtm"] = "Mator",
["mtn"] = "Matagalpa",
["mto"] = "Totontepec Mixe",
["mtp"] = "Wichí Lhamtés Nocten",
["mtq"] = "เหมื่อง",
["mtr"] = "เมวาร์",
["mts"] = "Yora",
["mtt"] = "Mota",
["mtu"] = "Tututepec Mixtec",
["mtv"] = "Asaro'o",
["mtw"] = "Magahat",
["mtx"] = "Tidaá Mixtec",
["mty"] = "Nabi",
["mua"] = "Mundang",
["mub"] = "Mubi",
["muc"] = "Mbu'",
["mud"] = "Mednyj Aleut",
["mue"] = "Media Lengua",
["mug"] = "Musgu",
["muh"] = "Mündü",
["mui"] = "มูซี",
["muj"] = "Mabire",
["mul"] = "ร่วม",
["mum"] = "Maiwala",
["mun-pro"] = "มุนดาดั้งเดิม",
["muo"] = "Nyong",
["mup"] = "Malvi",
["muq"] = "Eastern Xiangxi Miao",
["mur"] = "Murle",
["mus"] = "Creek",
["mut"] = "Western Muria",
["muu"] = "Yaaku",
["muv"] = "Muthuvan",
["mux"] = "Bo-Ung",
["muy"] = "Muyang",
["muz"] = "Mursi",
["mva"] = "Manam",
["mvb"] = "Mattole",
["mvd"] = "Mamboru",
["mvg"] = "Yucuañe Mixtec",
["mvh"] = "Mire",
["mvi"] = "มิยาโกะ",
["mvk"] = "Mekmek",
["mvl"] = "Mbara (Australia)",
["mvm"] = "Muya",
["mvn"] = "Minaveha",
["mvo"] = "Marovo",
["mvp"] = "Duri",
["mvq"] = "Moere",
["mvr"] = "Marau",
["mvs"] = "Massep",
["mvt"] = "Mpotovoro",
["mvu"] = "Marfa",
["mvv"] = "Tagal Murut",
["mvw"] = "Machinga",
["mvx"] = "Meoswar",
["mvy"] = "Indus Kohistani",
["mvz"] = "Mesqan",
["mwa"] = "Mwatebu",
["mwb"] = "Juwal",
["mwc"] = "Are",
["mwe"] = "Mwera",
["mwf"] = "Murrinh-Patha",
["mwg"] = "Aiklep",
["mwh"] = "Mouk-Aria",
["mwi"] = "Labo",
["mwk"] = "Kita Maninkakan",
["mwl"] = "มีรังดา",
["mwm"] = "Sar",
["mwn"] = "Nyamwanga",
["mwo"] = "Sungwadaga",
["mwp"] = "Kala Lagaw Ya",
["mwq"] = "Mün Chin",
["mwr"] = "มาร์วาร์",
["mws"] = "Mwimbi-Muthambi",
["mwt"] = "Moken",
["mwu"] = "Mittu",
["mwv"] = "Mentawai",
["mww"] = "ม้งขาว",
["mwz"] = "Moingi",
["mxa"] = "Northwest Oaxaca Mixtec",
["mxb"] = "Tezoatlán Mixtec",
["mxd"] = "Modang",
["mxe"] = "Mele-Fila",
["mxf"] = "Malgbe",
["mxg"] = "Mbangala",
["mxh"] = "Mvuba",
["mxi"] = "Mozarabic",
["mxj"] = "Miju",
["mxk"] = "Monumbo",
["mxl"] = "Maxi Gbe",
["mxm"] = "Meramera",
["mxn"] = "Moi (Indonesia)",
["mxo"] = "Mbowe",
["mxp"] = "Tlahuitoltepec Mixe",
["mxq"] = "Juquila Mixe",
["mxr"] = "Murik (Malaysia)",
["mxs"] = "Huitepec Mixtec",
["mxt"] = "Jamiltepec Mixtec",
["mxu"] = "Mada (Cameroon)",
["mxv"] = "Metlatónoc Mixtec",
["mxw"] = "Namo",
["mxx"] = "Mahou",
["mxy"] = "Southeastern Nochixtlán Mixtec",
["mxz"] = "Central Masela",
["my"] = "พม่า",
["myb"] = "Mbay",
["myc"] = "Mayeka",
["mye"] = "Myene",
["myf"] = "Bambassi",
["myg"] = "Manta",
["myh"] = "Makah",
["myj"] = "Mangayat",
["myk"] = "Mamara Senoufo",
["myl"] = "Moma",
["mym"] = "Me'en",
["myn-chl"] = "Ch'olti'",
["myn-pro"] = "มายันดั้งเดิม",
["myo"] = "Anfillo",
["myp"] = "Pirahã",
["myr"] = "Muniche",
["mys"] = "Mesmes",
["myu"] = "Mundurukú",
["myv"] = "เอร์เซีย",
["myw"] = "Muyuw",
["myx"] = "Masaba",
["myy"] = "Macuna",
["myz"] = "Classical Mandaic",
["mza"] = "Santa María Zacatepec Mixtec",
["mzb"] = "Northern Saharan Berber",
["mzc"] = "Madagascar Sign Language",
["mzd"] = "Malimba",
["mze"] = "Morawa",
["mzg"] = "Monastic Sign Language",
["mzh"] = "Wichí Lhamtés Güisnay",
["mzi"] = "Ixcatlán Mazatec",
["mzj"] = "Manya",
["mzk"] = "Nigeria Mambila",
["mzl"] = "Mazatlán Mixe",
["mzm"] = "Mumuye",
["mzn"] = "มอแซนแดรอน",
["mzo"] = "Matipuhy",
["mzp"] = "Movima",
["mzq"] = "Mori Atas",
["mzr"] = "Marúbo",
["mzs"] = "ครีโอลมาเก๊า",
["mzt"] = "Mintil",
["mzu"] = "Inapang",
["mzv"] = "Manza",
["mzw"] = "Deg",
["mzx"] = "Mawayana",
["mzy"] = "Mozambican Sign Language",
["mzz"] = "Maiadomu",
["na"] = "นาอูรู",
["naa"] = "Namla",
["nab"] = "Nambikwara",
["nac"] = "Narak",
["nae"] = "Naka'ela",
["naf"] = "Nabak",
["nag"] = "Naga Pidgin",
["nah"] = "นาวัตล์",
["nai-ala"] = "Alazapa",
["nai-bay"] = "Bayogoula",
["nai-cal"] = "Calusa",
["nai-chi"] = "Chiquimulilla",
["nai-chu-pro"] = "Proto-Chumash",
["nai-cig"] = "Ciguayo",
["nai-ckn-pro"] = "Proto-Chinookan",
["nai-guz"] = "Guazacapán",
["nai-hit"] = "Hitchiti",
["nai-ipa"] = "Ipai",
["nai-jtp"] = "Jutiapa",
["nai-jum"] = "Jumaytepeque",
["nai-kat"] = "Kathlamet",
["nai-klp-pro"] = "Proto-Kalapuyan",
["nai-knm"] = "Konomihu",
["nai-kum"] = "Kumeyaay",
["nai-mac"] = "Macoris",
["nai-mdu-pro"] = "Proto-Maidun",
["nai-miz-pro"] = "Proto-Mixe-Zoque",
["nai-mus-pro"] = "Proto-Muskogean",
["nai-nao"] = "Naolan",
["nai-nrs"] = "New River Shasta",
["nai-okw"] = "Okwanuchu",
["nai-per"] = "Pericú",
["nai-pic"] = "Picuris",
["nai-plp-pro"] = "Proto-Plateau Penutian",
["nai-pom-pro"] = "Proto-Pomo",
["nai-qng"] = "Quinigua",
["nai-sca-pro"] = "Proto-Siouan-Catawban",
["nai-sin"] = "Sinacantán",
["nai-sln"] = "Salvadoran Lenca",
["nai-spt"] = "Sahaptin",
["nai-tap"] = "Tapachultec",
["nai-taw"] = "Tawasa",
["nai-teq"] = "Tequistlatec",
["nai-tip"] = "Tipai",
["nai-tot-pro"] = "Proto-Totozoquean",
["nai-tsi-pro"] = "Proto-Tsimshianic",
["nai-utn-pro"] = "Proto-Utian",
["nai-wai"] = "Waikuri",
["nai-wji"] = "Western Jicaque",
["nai-yup"] = "Yupiltepeque",
["naj"] = "Nalu",
["nak"] = "Nakanai",
["nal"] = "Nalik",
["nam"] = "Ngan'gityemerri",
["nan"] = "หมิ่นใต้",
["nan-dat"] = "Datian Min",
["nan-hbl"] = "ฮกเกี้ยน",
["nan-hlh"] = "Hailufeng Min",
["nan-lnx"] = "Longyan Min",
["nan-tws"] = "แต้จิ๋ว",
["nan-zhe"] = "Zhenan Min",
["nan-zsh"] = "Sanxiang Min",
["nao"] = "Naaba",
["nap"] = "นาโปลี",
["naq"] = "Khoekhoe",
["nar"] = "Iguta",
["nas"] = "Nasioi",
["nat"] = "Hungworo",
["naw"] = "Nawuri",
["nax"] = "Nakwi",
["nay"] = "Ngarrindjeri",
["naz"] = "Coatepec Nahuatl",
["nb"] = "นอร์เวย์แบบบุ๊กมอล",
["nba"] = "Nyemba",
["nbb"] = "Ndoe",
["nbc"] = "Chang",
["nbd"] = "Ngbinda",
["nbe"] = "Konyak Naga",
["nbg"] = "Nagarchal",
["nbh"] = "Ngamo",
["nbi"] = "Mao Naga",
["nbj"] = "Ngarinman",
["nbk"] = "Nake",
["nbm"] = "Ngbaka Ma'bo",
["nbn"] = "Kuri",
["nbo"] = "Nkukoli",
["nbp"] = "Nnam",
["nbq"] = "Nggem",
["nbr"] = "Numana",
["nbs"] = "Namibian Sign Language",
["nbt"] = "Na",
["nbu"] = "Rongmei Naga",
["nbv"] = "Ngamambo",
["nbw"] = "Southern Ngbandi",
["nby"] = "Ningera",
["nca"] = "Iyo",
["ncb"] = "นิโคบาร์กลาง",
["ncc"] = "Ponam",
["ncd"] = "Nachering",
["nce"] = "Yale",
["ncf"] = "Notsi",
["ncg"] = "Nisga'a",
["nch"] = "Central Huasteca Nahuatl",
["nci"] = "นาวัตล์คลาสสิก",
["ncj"] = "Northern Puebla Nahuatl",
["nck"] = "Nakara",
["ncl"] = "Michoacán Nahuatl",
["ncm"] = "Nambo",
["ncn"] = "Nauna",
["nco"] = "Sibe",
["ncr"] = "Ncane",
["ncs"] = "Nicaraguan Sign Language",
["nct"] = "Chothe Naga",
["ncu"] = "Chumburung",
["ncx"] = "Central Puebla Nahuatl",
["ncz"] = "Natchez",
["nd"] = "Northern Ndebele",
["nda"] = "Ndasa",
["ndb"] = "Kenswei Nsei",
["ndc"] = "Ndau",
["ndd"] = "Nde-Nsele-Nta",
["ndf"] = "Nadruvian",
["ndg"] = "Ndengereko",
["ndh"] = "Ndali",
["ndi"] = "Chamba Leko",
["ndj"] = "Ndamba",
["ndk"] = "Ndaka",
["ndl"] = "Ndolo",
["ndm"] = "Ndam",
["ndn"] = "Ngundi",
["ndp"] = "Ndo",
["ndq"] = "Ndombe",
["ndr"] = "Ndoola",
["nds"] = "เยอรมันต่ำ",
["nds-de"] = "เยอรมันต่ำแบบเยอรมนี",
["nds-nl"] = "Dutch Low Saxon",
["ndt"] = "Ndunga",
["ndu"] = "Dugun",
["ndv"] = "Ndut",
["ndw"] = "Ndobo",
["ndx"] = "Nduga",
["ndy"] = "Lutos",
["ndz"] = "Ndogo",
["ne"] = "เนปาล",
["nea"] = "Eastern Ngad'a",
["neb"] = "Toura",
["nec"] = "Nedebang",
["ned"] = "Nde-Gbite",
["nee"] = "Kumak",
["nef"] = "Nefamese",
["neg"] = "Negidal",
["neh"] = "Nyenkha",
["nej"] = "Neko",
["nek"] = "Neku",
["nem"] = "Nemi",
["nen"] = "Nengone",
["neo"] = "Ná-Meo",
["neq"] = "North Central Mixe",
["ner"] = "Yahadian",
["nes"] = "Bhoti Kinnauri",
["net"] = "Nete",
["neu"] = "Neo",
["nev"] = "Nyaheun",
["new"] = "เนวาร์",
["nex"] = "Neme",
["ney"] = "Neyo",
["nez"] = "Nez Perce",
["nfa"] = "Dhao",
["nfd"] = "Ahwai",
["nfl"] = "Äiwoo",
["nfr"] = "Nafaanra",
["nfu"] = "Mfumte",
["ng"] = "Ndonga",
["nga"] = "Ngbaka",
["ngb"] = "Northern Ngbandi",
["ngc"] = "Ngombe (Congo)",
["ngd"] = "Ngando (Central African Republic)",
["nge"] = "Ngemba",
["ngf-pro"] = "Proto-Trans-New Guinea",
["ngg"] = "Ngbaka Manza",
["ngh"] = "Nǀuu",
["ngi"] = "Ngizim",
["ngj"] = "Ngie",
["ngk"] = "Ngalkbun",
["ngl"] = "Lomwe",
["ngm"] = "Ngatik Men's Creole",
["ngn"] = "Ngwo",
["ngo"] = "Ngoni",
["ngp"] = "Ngulu",
["ngq"] = "Ngoreme",
["ngr"] = "Nagu",
["ngs"] = "Gvoko",
["ngt"] = "Ngeq",
["ngu"] = "Guerrero Nahuatl",
["ngv"] = "Nagumi",
["ngw"] = "Ngwaba",
["ngx"] = "Nggwahyi",
["ngy"] = "Tibea",
["ngz"] = "Ngungwel",
["nha"] = "Nhanda",
["nhb"] = "Beng",
["nhc"] = "Tabasco Nahuatl",
["nhd"] = "Chiripá",
["nhe"] = "Eastern Huasteca Nahuatl",
["nhf"] = "Nhuwala",
["nhg"] = "Tetelcingo Nahuatl",
["nhh"] = "Nahari",
["nhi"] = "Zacatlán-Ahuacatlán-Tepetzintla Nahuatl",
["nhk"] = "Cosoleacaque Nahuatl",
["nhm"] = "Morelos Nahuatl",
["nhn"] = "นาวัตล์ตอนกลาง",
["nho"] = "Takuu",
["nhp"] = "Pajapan Nahuatl",
["nhq"] = "Huaxcaleca Nahuatl",
["nhr"] = "Naro",
["nht"] = "Ometepec Nahuatl",
["nhu"] = "Noone",
["nhv"] = "Temascaltepec Nahuatl",
["nhw"] = "Western Huasteca Nahuatl",
["nhx"] = "Mecayapan Nahuatl",
["nhy"] = "Northern Oaxaca Nahuatl",
["nhz"] = "Santa María La Alta Nahuatl",
["nia"] = "Nias",
["nib"] = "Nakame",
["nic-bco-pro"] = "เบนูเอ-คองโกดั้งเดิม",
["nic-bod-pro"] = "แบนทอยด์ดั้งเดิม",
["nic-eov-pro"] = "Proto-Eastern Oti-Volta",
["nic-gns-pro"] = "Proto-Gurunsi",
["nic-grf-pro"] = "Proto-Grassfields",
["nic-gur-pro"] = "กูร์ดั้งเดิม",
["nic-jkn-pro"] = "Proto-Jukunoid",
["nic-lcr-pro"] = "Proto-Lower Cross River",
["nic-ogo-pro"] = "Proto-Ogoni",
["nic-ovo-pro"] = "Proto-Oti-Volta",
["nic-plt-pro"] = "Proto-Plateau",
["nic-pro"] = "ไนเจอร์-คองโกดั้งเดิม",
["nic-ubg-pro"] = "Proto-Ubangian",
["nic-ucr-pro"] = "Proto-Upper Cross River",
["nic-vco-pro"] = "วอลตา-คองโกดั้งเดิม",
["nid"] = "Ngandi",
["nie"] = "Niellim",
["nif"] = "Nek",
["nig"] = "Ngalakan",
["nih"] = "Nyiha",
["nii"] = "Nii",
["nij"] = "Ngaju",
["nik"] = "Southern Nicobarese",
["nil"] = "Nila",
["nim"] = "Nilamba",
["nin"] = "Ninzo",
["nio"] = "Nganasan",
["niq"] = "Nandi",
["nir"] = "Nimboran",
["nis"] = "Nimi",
["nit"] = "Southeastern Kolami",
["niu"] = "นีวเว",
["niv"] = "Nivkh",
["niw"] = "Nimo",
["nix"] = "Hema",
["niy"] = "Ngiti",
["niz"] = "Ningil",
["nja"] = "Nzanyi",
["njb"] = "Nocte",
["njh"] = "Lotha Naga",
["nji"] = "Gudanji",
["njj"] = "Njen",
["njl"] = "Njalgulgule",
["njm"] = "Angami",
["njn"] = "Liangmai Naga",
["njo"] = "Ao",
["njr"] = "Njerep",
["njs"] = "Nisa",
["njt"] = "Ndyuka-Trio Pidgin",
["nju"] = "Ngadjunmaya",
["njx"] = "Kunyi",
["njy"] = "Njyem",
["njz"] = "Nyishi",
["nka"] = "Nkoya",
["nkb"] = "Khoibu Naga",
["nkc"] = "Nkongho",
["nkd"] = "Koireng",
["nke"] = "Duke",
["nkf"] = "Inpui Naga",
["nkg"] = "Nekgini",
["nkh"] = "Khezha Naga",
["nki"] = "Thangal Naga",
["nkj"] = "Nakai",
["nkk"] = "Nokuku",
["nkm"] = "Namat",
["nkn"] = "Nkangala",
["nko"] = "Nkonya",
["nkp"] = "Niuatoputapu",
["nkq"] = "Nkami",
["nkr"] = "Nukuoro",
["nks"] = "North Asmat",
["nkt"] = "Nyika",
["nku"] = "Bouna Kulango",
["nkw"] = "Nkutu",
["nkx"] = "Nkoroo",
["nkz"] = "Nkari",
["nl"] = "ดัตช์",
["nla"] = "Ngombale",
["nlc"] = "Nalca",
["nle"] = "East Nyala",
["nlg"] = "Gela",
["nli"] = "Grangali",
["nlj"] = "Nyali",
["nlk"] = "Ninia Yali",
["nll"] = "Nihali",
["nlm"] = "Mankiyali",
["nlo"] = "Ngul",
["nlq"] = "Lao Naga",
["nlu"] = "Nchumbulu",
["nlv"] = "Orizaba Nahuatl",
["nlw"] = "Walangama",
["nlx"] = "Nahali",
["nly"] = "Nyamal",
["nlz"] = "Nalögo",
["nma"] = "Maram Naga",
["nmb"] = "Big Nambas",
["nmc"] = "Ngam",
["nmd"] = "Ndumu",
["nme"] = "Mzieme Naga",
["nmf"] = "Tangkhul Naga",
["nmg"] = "Kwasio",
["nmh"] = "Monsang Naga",
["nmi"] = "Nyam",
["nmj"] = "Ngombe (Central African Republic)",
["nmk"] = "Namakura",
["nml"] = "Ndemli",
["nmm"] = "Manangba",
["nmn"] = "ǃXóõ",
["nmo"] = "Moyon Naga",
["nmp"] = "Nimanbur",
["nmq"] = "Nambya",
["nmr"] = "Nimbari",
["nms"] = "Letemboi",
["nmt"] = "Namonuito",
["nmu"] = "Northeast Maidu",
["nmv"] = "Ngamini",
["nmw"] = "Nimoa",
["nmy"] = "Namuyi",
["nmz"] = "Nawdm",
["nn"] = "นอร์เวย์แบบนือนอสก์",
["nna"] = "Nyangumarta",
["nnb"] = "Nande",
["nnc"] = "Nancere",
["nnd"] = "West Ambae",
["nne"] = "Ngandyera",
["nnf"] = "Ngaing",
["nng"] = "Maring Naga",
["nnh"] = "Ngiemboon",
["nni"] = "North Nuaulu",
["nnj"] = "Nyangatom",
["nnk"] = "Nankina",
["nnl"] = "Northern Rengma Naga",
["nnm"] = "Namia",
["nnn"] = "Ngete",
["nnp"] = "Wancho",
["nnq"] = "Ngindo",
["nnr"] = "Narungga",
["nnt"] = "Nanticoke",
["nnu"] = "Dwang",
["nnv"] = "Nukunu",
["nnw"] = "Southern Nuni",
["nnx"] = "Ngong",
["nny"] = "Nyangga",
["nnz"] = "Nda'nda'",
["no"] = "นอร์เวย์",
["noa"] = "Woun Meu",
["noc"] = "Nuk",
["nod"] = "คำเมือง",
["noe"] = "Nimadi",
["nof"] = "Nomane",
["nog"] = "Nogai",
["noh"] = "Nomu",
["noi"] = "Noiri",
["noj"] = "Nonuya",
["nok"] = "Nooksack",
["nol"] = "Nomlaki",
["nom"] = "Nocamán",
["non"] = "นอร์สเก่า",
["nop"] = "Numanggang",
["noq"] = "Ngongo",
["nos"] = "Eastern Nisu",
["not"] = "Nomatsiguenga",
["nou"] = "Ewage-Notu",
["nov"] = "โนเวียล",
["now"] = "Nyambo",
["noy"] = "Noy",
["noz"] = "Nayi",
["npa"] = "Nar Phu",
["npb"] = "Nupbikha",
["npg"] = "Ponyo",
["nph"] = "Phom",
["npl"] = "Southeastern Puebla Nahuatl",
["npn"] = "Mondropolon",
["npo"] = "Pochuri Naga",
["nps"] = "Nipsan",
["npu"] = "Puimei Naga",
["npy"] = "Napu",
["nqg"] = "Ede Nago",
["nqk"] = "Kura Ede Nago",
["nql"] = "Ngendelengo",
["nqm"] = "Ndom",
["nqn"] = "Nen",
["nqo"] = "N'Ko",
["nqq"] = "Kyan-Karyaw Naga",
["nqy"] = "Akyaung Ari",
["nr"] = "Southern Ndebele",
["nra"] = "Ngom",
["nrb"] = "Nara",
["nrc"] = "Noric",
["nre"] = "Southern Rengma Naga",
["nrf"] = "นอร์มัน",
["nrg"] = "Narango",
["nri"] = "Chokri Naga",
["nrk"] = "Ngarla",
["nrl"] = "Ngarluma",
["nrm"] = "Narom",
["nrn"] = "Norn",
["nrp"] = "North Picene",
["nrr"] = "Norra",
["nrt"] = "Northern Kalapuya",
["nru"] = "Narua",
["nrx"] = "Ngurmbur",
["nrz"] = "Lala (New Guinea)",
["nsa"] = "Sangtam Naga",
["nsb"] = "Lower Nossob",
["nsc"] = "Nshi",
["nsd"] = "Southern Nisu",
["nse"] = "Nsenga",
["nsg"] = "Ngasa",
["nsh"] = "Ngoshie",
["nsi"] = "Nigerian Sign Language",
["nsk"] = "Naskapi",
["nsl"] = "Norwegian Sign Language",
["nsm"] = "Sema",
["nsn"] = "Nehan",
["nso"] = "ซูทูเหนือ",
["nsp"] = "มือเนปาล",
["nsq"] = "Northern Sierra Miwok",
["nsr"] = "Maritime Sign Language",
["nss"] = "Nali",
["nst"] = "Tangsa",
["nsu"] = "Sierra Negra Nahuatl",
["nsv"] = "Southwestern Nisu",
["nsw"] = "Navut",
["nsx"] = "Nsongo",
["nsy"] = "Nasal",
["nsz"] = "Nisenan",
["ntd"] = "Northern Tidung",
["ntg"] = "Ngantangarra",
["nti"] = "Natioro",
["ntj"] = "Ngaanyatjarra",
["ntk"] = "Ikoma",
["ntm"] = "Nateni",
["nto"] = "Ntomba",
["ntp"] = "Northern Tepehuan",
["ntr"] = "Delo",
["nts"] = "Natagaimas",
["ntu"] = "Natügu",
["ntw"] = "Nottoway",
["ntx"] = "Somra",
["nty"] = "Mantsi",
["nua"] = "Yuanga",
["nub-har"] = "Haraza",
["nub-pro"] = "นูเบียนดั้งเดิม",
["nuc"] = "Nukuini",
["nud"] = "Ngala",
["nue"] = "Ngundu",
["nuf"] = "Nusu",
["nug"] = "Nungali",
["nuh"] = "Ndunda",
["nui"] = "Ngumbi",
["nuj"] = "Nyole (Uganda)",
["nuk"] = "Nootka",
["nul"] = "Nusa Laut",
["num"] = "Niuafo'ou",
["nun"] = "Anong",
["nuo"] = "หง่วน",
["nup"] = "Nupe",
["nuq"] = "Nukumanu",
["nur"] = "Nuguria",
["nus"] = "Nuer",
["nut"] = "นุง",
["nuu"] = "Ngbundu",
["nuv"] = "Northern Nuni",
["nuw"] = "Nguluwan",
["nux"] = "Mehek",
["nuy"] = "Nunggubuyu",
["nuz"] = "Tlamacazapa Nahuatl",
["nv"] = "นาวาโฮ",
["nvh"] = "Nasarian",
["nvm"] = "Namiae",
["nvo"] = "Nyokon",
["nwa"] = "Nawathinehena",
["nwb"] = "Nyabwa",
["nwc"] = "เนวาร์คลาสสิก",
["nwe"] = "Ngwe",
["nwi"] = "Southwest Tanna",
["nwm"] = "Nyamusa-Molo",
["nwo"] = "Nauo",
["nwr"] = "Nawaru",
["nwx"] = "เนวาร์กลาง",
["nwy"] = "Nottoway-Meherrin",
["nxa"] = "Nauete",
["nxd"] = "Ngando (Congo)",
["nxe"] = "Nage",
["nxg"] = "Ngadha",
["nxi"] = "Nindi",
["nxl"] = "South Nuaulu",
["nxm"] = "Numidian",
["nxn"] = "Ngawun",
["nxo"] = "Ndambomo",
["nxq"] = "Naxi",
["nxr"] = "Ninggerum",
["nxx"] = "Nafri",
["ny"] = "เจวา",
["nyb"] = "Nyangbo",
["nyc"] = "Nyanga-li",
["nyd"] = "Nyole (Kenya)",
["nye"] = "Nyengo",
["nyf"] = "Giryama",
["nyg"] = "Nyindu",
["nyh"] = "Nyigina",
["nyi"] = "Nyimang",
["nyj"] = "Nyanga (Congo)",
["nyk"] = "Nyaneka",
["nyl"] = "Nyeu",
["nym"] = "Nyamwezi",
["nyn"] = "Nyankole",
["nyo"] = "Nyoro",
["nyp"] = "Nyang'i",
["nys"] = "Nyunga",
["nyt"] = "Nyawaygi",
["nyu"] = "Nyungwe",
["nyv"] = "Nyulnyul",
["nyw"] = "ญ้อ",
["nyx"] = "Nganyaywana",
["nyy"] = "Nyakyusa",
["nza"] = "Tigon Mbembe",
["nzb"] = "Njebi",
["nzd"] = "Nzadi",
["nzi"] = "Nzima",
["nzk"] = "Nzakara",
["nzm"] = "Zeme Naga",
["nzs"] = "New Zealand Sign Language",
["nzu"] = "Central Teke",
["nzy"] = "Nzakambay",
["nzz"] = "Nanga Dama Dogon",
["oaa"] = "Orok",
["oac"] = "Oroch",
["oak"] = "Noakhali",
["oav"] = "อะวาร์เก่า",
["obi"] = "Obispeño",
["obk"] = "Southern Bontoc",
["obl"] = "Oblo",
["obm"] = "โมอับ",
["obo"] = "Obo Manobo",
["obr"] = "พม่าเก่า",
["obt"] = "เบรอตงเก่า",
["obu"] = "Obulom",
["oc"] = "อุตซิตา",
["oca"] = "Ocaina",
["och"] = "จีนเก่า",
["oco"] = "คอร์นวอลล์เก่า",
["ocu"] = "Tlahuica",
["oda"] = "Odut",
["odk"] = "Od",
["odt"] = "ดัตช์เก่า",
["odu"] = "Odual",
["ofo"] = "Ofo",
["ofs"] = "ฟรีเชียเก่า",
["ofu"] = "Efutop",
["ogb"] = "Ogbia",
["ogc"] = "Ogbah",
["oge"] = "จอร์เจียเก่า",
["ogg"] = "Ogbogolo",
["ogo"] = "Khana",
["ogu"] = "Ogbronuagum",
["ohu"] = "ฮังการีเก่า",
["oia"] = "Oirata",
["oin"] = "Inebu One",
["oj"] = "โอจิบเว",
["ojb"] = "Northwestern Ojibwa",
["ojc"] = "Central Ojibwa",
["ojg"] = "Eastern Ojibwa",
["ojp"] = "ญี่ปุ่นเก่า",
["ojs"] = "Severn Ojibwa",
["ojv"] = "Ontong Java",
["ojw"] = "Western Ojibwa",
["oka"] = "Okanagan",
["okb"] = "Okobo",
["okd"] = "Okodia",
["oke"] = "Okpe (Southwestern Edo)",
["okg"] = "Kok-Paponk",
["okh"] = "Koresh-e Rostam",
["oki"] = "Okiek",
["okj"] = "Oko-Juwoi",
["okk"] = "Kwamtim One",
["okl"] = "Old Kentish Sign Language",
["okm"] = "เกาหลีกลาง",
["okn"] = "โอกิโนเอราบุ",
["oko"] = "เกาหลีเก่า",
["okr"] = "Kirike",
["oks"] = "Oko-Eni-Osayen",
["oku"] = "Oku",
["okv"] = "Orokaiva",
["okx"] = "Okpe (Northwestern Edo)",
["okz"] = "เขมรเก่า",
["old"] = "Mochi",
["ole"] = "Olekha",
["olm"] = "Oloma",
["olo"] = "ลิววี",
["olr"] = "Olrat",
["olt"] = "ลิทัวเนียเก่า",
["olu"] = "Kuvale",
["om"] = "ออโรโม",
["oma"] = "Omaha-Ponca",
["omb"] = "Omba",
["omc"] = "Mochica",
["omg"] = "Omagua",
["omi"] = "Omi",
["omk"] = "Omok",
["oml"] = "Ombo",
["omn"] = "ไมนอส",
["omo"] = "Utarmbung",
["omp"] = "มณีปุระเก่า",
["omq-cha-pro"] = "Proto-Chatino",
["omq-maz-pro"] = "Proto-Mazatec",
["omq-mix-pro"] = "Proto-Mixtecan",
["omq-mxt-pro"] = "Proto-Mixtec",
["omq-otp-pro"] = "Proto-Oto-Pamean",
["omq-pro"] = "Proto-Oto-Manguean",
["omq-sjq"] = "San Juan Quiahije Chatino",
["omq-tel"] = "Teposcolula Mixtec",
["omq-teo"] = "Teojomulco Chatino",
["omq-tri-pro"] = "Proto-Triqui",
["omq-zap-pro"] = "Proto-Zapotecan",
["omq-zpc-pro"] = "Proto-Zapotec",
["omr"] = "มราฐีเก่า",
["omt"] = "Omotik",
["omu"] = "Omurano",
["omv-aro-pro"] = "Proto-Aroid",
["omv-diz-pro"] = "Proto-Dizoid",
["omv-pro"] = "Proto-Omotic",
["omw"] = "South Tairora",
["omx"] = "มอญเก่า",
["ona"] = "Selk'nam",
["onb"] = "เบ",
["one"] = "Oneida",
["ong"] = "Olo",
["oni"] = "Onin",
["onj"] = "Onjob",
["onk"] = "Kabore One",
["onn"] = "Onobasulu",
["ono"] = "Onondaga",
["onp"] = "Sartang",
["onr"] = "Northern One",
["ons"] = "Ono",
["ont"] = "Ontenu",
["onu"] = "Unua",
["onw"] = "นิวเบียเก่า",
["onx"] = "Pidgin Onin",
["ood"] = "O'odham",
["oog"] = "Ong",
["oon"] = "Önge",
["oor"] = "Oorlams",
["opa"] = "Okpamheri",
["opk"] = "Kopkaka",
["opm"] = "Oksapmin",
["opo"] = "Opao",
["opt"] = "Opata",
["opy"] = "Ofayé",
["or"] = "โอริยา",
["ora"] = "Oroha",
["ore"] = "Orejón",
["org"] = "Oring",
["orh"] = "Oroqen",
["oro"] = "Orokolo",
["orr"] = "Oruma",
["ort"] = "Adivasi Odia",
["oru"] = "Ormuri",
["orv"] = "สลาวิกตะวันออกเก่า",
["orw"] = "Oro Win",
["orx"] = "Oro",
["orz"] = "Ormu",
["os"] = "ออสซีเซีย",
["osa"] = "Osage",
["osc"] = "Oscan",
["osi"] = "โอซิง",
["osn"] = "Old Sundanese",
["oso"] = "Ososo",
["osp"] = "สเปนเก่า",
["ost"] = "Osatu",
["osu"] = "Southern One",
["osx"] = "แซกซันเก่า",
["ota"] = "ตุรกีแบบออตโตมัน",
["otb"] = "ทิเบตเก่า",
["otd"] = "Ot Danum",
["ote"] = "Mezquital Otomi",
["oti"] = "Oti",
["otk"] = "เตอร์กิกเก่า",
["otl"] = "Tilapa Otomi",
["otm"] = "Eastern Highland Otomi",
["otn"] = "Tenango Otomi",
["oto-otm-pro"] = "Proto-Otomi",
["oto-pro"] = "Proto-Otomian",
["otq"] = "Querétaro Otomi",
["otr"] = "Otoro",
["ots"] = "Estado de México Otomi",
["ott"] = "Temoaya Otomi",
["otu"] = "Otuke",
["otw"] = "Ottawa",
["otx"] = "Texcatepec Otomi",
["oty"] = "ทมิฬเก่า",
["otz"] = "Ixtenco Otomi",
["oub"] = "Glio-Oubi",
["oue"] = "Oune",
["oui"] = "อุยกูร์เก่า",
["oum"] = "Ouma",
["ovd"] = "แอลฟ์ดาเลิน",
["owi"] = "Owiniga",
["owl"] = "เวลส์เก่า",
["oyb"] = "Oy",
["oyd"] = "Oyda",
["oym"] = "Wayampi",
["oyy"] = "Oya'oya",
["ozm"] = "Koonzime",
["pa"] = "ปัญจาบ",
["paa-bin-pro"] = "Proto-Binanderean",
["paa-kom"] = "Kómnzo",
["paa-kwn"] = "Kuwani",
["paa-nha-pro"] = "Proto-North Halmahera",
["paa-nun"] = "Nungon",
["pab"] = "Pareci",
["pac"] = "ปาโกะห์",
["pad"] = "Paumarí",
["pae"] = "Pagibete",
["paf"] = "Paranawát",
["pag"] = "Pangasinan",
["pah"] = "Tenharim",
["pai"] = "Pe",
["pak"] = "Parakanã",
["pal"] = "เปอร์เซียกลาง",
["pam"] = "กาปัมปางัน",
["pao"] = "Northern Paiute",
["pap"] = "ปาเปียเมนตู",
["paq"] = "Parya",
["par"] = "Panamint",
["pas"] = "Papasena",
["pau"] = "ปาเลา",
["pav"] = "Wari'",
["paw"] = "Pawnee",
["pax"] = "Pankararé",
["pay"] = "Pech",
["paz"] = "Pankararú",
["pbb"] = "Páez",
["pbc"] = "Patamona",
["pbe"] = "Mezontla Popoloca",
["pbf"] = "Coyotepec Popoloca",
["pbg"] = "Paraujano",
["pbh"] = "Panare",
["pbi"] = "Podoko",
["pbl"] = "Mak (Nigeria)",
["pbm"] = "Puebla Mazatec",
["pbn"] = "Kpasam",
["pbo"] = "Papel",
["pbp"] = "Badyara",
["pbr"] = "Pangwa",
["pbs"] = "Central Pame",
["pbv"] = "ปนัร",
["pby"] = "Pyu (New Guinea)",
["pca"] = "Santa Inés Ahuatempan Popoloca",
["pcb"] = "ปอร์",
["pcc"] = "ปู้อี",
["pcd"] = "ปีการ์",
["pce"] = "Ruching Palaung",
["pcf"] = "Paliyan",
["pcg"] = "Paniya",
["pch"] = "Pardhan",
["pci"] = "Duruwa",
["pcj"] = "Parenga",
["pck"] = "Paite",
["pcl"] = "Pardhi",
["pcm"] = "Nigerian Pidgin",
["pcn"] = "Piti",
["pcp"] = "Pacahuara",
["pcw"] = "Pyapun",
["pda"] = "Anam",
["pdc"] = "เยอรมันแบบเพนซิลเวเนีย",
["pdi"] = "Pa Di",
["pdn"] = "Fedan",
["pdo"] = "Padoe",
["pdt"] = "เพลาท์ดิทช์",
["pdu"] = "กะยัน",
["pea"] = "Peranakan Indonesian",
["peb"] = "Eastern Pomo",
["ped"] = "Mala (New Guinea)",
["pee"] = "Taje",
["pef"] = "Northeastern Pomo",
["peg"] = "Pengo",
["peh"] = "Bonan",
["pei"] = "Chichimeca-Jonaz",
["pej"] = "Northern Pomo",
["pek"] = "Penchal",
["pel"] = "Pekal",
["pem"] = "Phende",
["peo"] = "เปอร์เซียเก่า",
["pep"] = "Kunja",
["peq"] = "Southern Pomo",
["pev"] = "Pémono",
["pex"] = "Petats",
["pey"] = "Petjo",
["pez"] = "Eastern Penan",
["pfa"] = "Pááfang",
["pfe"] = "Peere",
["pga"] = "Juba Arabic",
["pgd"] = "คานธาระ",
["pgg"] = "ปังควาฬฺ",
["pgi"] = "Pagi",
["pgk"] = "Rerep",
["pgl"] = "Primitive Irish",
["pgn"] = "Paelignian",
["pgs"] = "Pangseng",
["pgu"] = "Pagu",
["pgz"] = "Papua New Guinean Sign Language",
["pha"] = "Pa-Hng",
["phd"] = "Phudagi",
["phg"] = "Phuong",
["phh"] = "Phukha",
["phi-din"] = "Dinapigue Agta",
["phi-kal-pro"] = "คาลาเมียนดั้งเดิม",
["phi-nag"] = "Nagtipunan Agta",
["phi-pro"] = "ฟิลิปปินส์ดั้งเดิม",
["phk"] = "พ่าเก",
["phl"] = "Palula",
["phm"] = "Phimbi",
["phn"] = "ฟินิเชีย",
["pho"] = "ผู้น้อย",
["phq"] = "Phana'",
["phr"] = "Pahari-Potwari",
["pht"] = "ผู้ไท",
["phu"] = "พวน",
["phv"] = "Pahlavani",
["phw"] = "Phangduwali",
["pi"] = "บาลี",
["pia"] = "Pima Bajo",
["pib"] = "Yine",
["pic"] = "Pinji",
["pid"] = "Piaroa",
["pie"] = "Piro",
["pif"] = "Pingelapese",
["pig"] = "Pisabo",
["pih"] = "Pitcairn-Norfolk",
["pii"] = "Pini",
["pij"] = "Pijao",
["pil"] = "Yom",
["pim"] = "Powhatan",
["pin"] = "Piame",
["pio"] = "Piapoco",
["pip"] = "Pero",
["pir"] = "Piratapuyo",
["pis"] = "Pijin",
["pit"] = "Pitta-Pitta",
["piu"] = "Pintupi-Luritja",
["piv"] = "Pileni",
["piw"] = "Pimbwe",
["pix"] = "Piu",
["piy"] = "Piya-Kwonci",
["piz"] = "Pije",
["pjt"] = "Pitjantjatjara",
["pkb"] = "Kipfokomo",
["pkc"] = "แพ็กเจ",
["pkg"] = "Pak-Tong",
["pkh"] = "Pankhu",
["pkn"] = "Pakanha",
["pko"] = "Pökoot",
["pkp"] = "ปูกาปูกา",
["pkr"] = "Attapady Kurumba",
["pks"] = "Pakistan Sign Language",
["pkt"] = "Maleng",
["pku"] = "Paku",
["pl"] = "โปแลนด์",
["pla"] = "Miani",
["plb"] = "Polonombauk",
["plc"] = "ปาลาวาโนตอนกลาง",
["ple"] = "Palu'e",
["plg"] = "Pilagá",
["plh"] = "Paulohi",
["plj"] = "Polci",
["plk"] = "Kohistani Shina",
["pll"] = "Shwe Palaung",
["pln"] = "Palenquero",
["plo"] = "Oluta Popoluca",
["plq"] = "Palaic",
["plr"] = "Palaka Senoufo",
["pls"] = "San Marcos Tlalcoyalco Popoloca",
["plu"] = "Palikur",
["plv"] = "ปาลาวาโนตะวันตกเฉียงใต้",
["plw"] = "ปาลาวาโนแบบบรูกส์พอยต์",
["ply"] = "Bolyu",
["plz"] = "Paluan",
["pma"] = "Paamese",
["pmb"] = "Pambia",
["pmd"] = "Pallanganmiddang",
["pme"] = "Pwaamèi",
["pmf"] = "Pamona",
["pmi"] = "Northern Pumi",
["pmj"] = "Southern Pumi",
["pmk"] = "Pamlico",
["pml"] = "Sabir",
["pmm"] = "Pol",
["pmn"] = "Pam",
["pmo"] = "Pom",
["pmq"] = "Northern Pame",
["pmr"] = "Paynamar",
["pms"] = "ปีเยมอนเต",
["pmt"] = "Tuamotuan",
["pmu"] = "Mirpur Panjabi",
["pmw"] = "Plains Miwok",
["pmx"] = "Poumei Naga",
["pmy"] = "Papuan Malay",
["pmz"] = "Southern Pame",
["pna"] = "Punan Bah-Biau",
["pnc"] = "Pannei",
["pnd"] = "Mpinda",
["pne"] = "Western Penan",
["png"] = "Pongu",
["pnh"] = "Penrhyn",
["pni"] = "Aoheng",
["pnj"] = "Pinjarup",
["pnk"] = "Paunaka",
["pnl"] = "Paleni",
["pnm"] = "Punan Batu",
["pnn"] = "Pinai-Hagahai",
["pno"] = "Panobo",
["pnp"] = "Pancana",
["pnq"] = "Pana (West Africa)",
["pnr"] = "Panim",
["pns"] = "Ponosakan",
["pnt"] = "Pontic Greek",
["pnu"] = "Jiongnai Bunu",
["pnv"] = "Pinigura",
["pnw"] = "Panyjima",
["pnx"] = "Phong-Kniang",
["pny"] = "Pinyin",
["pnz"] = "Pana (Central Africa)",
["poc"] = "Poqomam",
["poe"] = "San Juan Atzingo Popoloca",
["pof"] = "Poke",
["pog"] = "Potiguára",
["poh"] = "Poqomchi'",
["poi"] = "Highland Popoluca",
["pok"] = "Pokangá",
["pom"] = "Southeastern Pomo",
["pon"] = "Pohnpeian",
["poo"] = "Central Pomo",
["pop"] = "Pwapwâ",
["poq"] = "Texistepec Popoluca",
["pos"] = "Sayula Popoluca",
["pot"] = "Potawatomi",
["pov"] = "ครีโอลกินี-บิสเซา",
["pow"] = "San Felipe Otlaltepec Popoloca",
["pox"] = "Polabian",
["poy"] = "Pogolo",
["poz-abi"] = "Abai",
["poz-bal"] = "Baliledo",
["poz-btk-pro"] = "Proto-Bungku-Tolaki",
["poz-cet-pro"] = "มาลาโย-พอลินีเชียนตอนกลาง-ตะวันออกดั้งเดิม",
["poz-hce-pro"] = "Proto-Halmahera-Cenderawasih",
["poz-lgx-pro"] = "ลัมปุงกิกดั้งเดิม",
["poz-mcm-pro"] = "มาลาโย-จามิกดั้งเดิม",
["poz-mic-pro"] = "ไมโครนีเซียนดั้งเดิม",
["poz-mly-pro"] = "มาเลย์อิกดั้งเดิม",
["poz-msa-pro"] = "มาลาโย-ซุมบาวันดั้งเดิม",
["poz-oce-pro"] = "โอเชียนิกดั้งเดิม",
["poz-pep-pro"] = "พอลินีเชียนตะวันออกดั้งเดิม",
["poz-pnp-pro"] = "นิวเคลียร์พอลินีเชียนดั้งเดิม",
["poz-pol-pro"] = "พอลินีเชียนดั้งเดิม",
["poz-pro"] = "มาลาโย-พอลินีเชียนดั้งเดิม",
["poz-sml"] = "Sarawak Malay",
["poz-ssw-pro"] = "ซูลาเวซีใต้ดั้งเดิม",
["poz-swa-pro"] = "ซาราวักเหนือดั้งเดิม",
["poz-ter"] = "มลายูแบบตรังกานู",
["ppa"] = "Pao",
["ppe"] = "Papi",
["ppi"] = "Paipai",
["ppk"] = "Uma",
["ppl"] = "ปีปิล",
["ppm"] = "Papuma",
["ppn"] = "Papapana",
["ppo"] = "Folopa",
["ppq"] = "Pei",
["pps"] = "San Luís Temalacayuca Popoloca",
["ppt"] = "Pa",
["ppu"] = "Papora",
["pqa"] = "Pa'a",
["pqe-pro"] = "มาลาโย-พอลินีเชียนตะวันออกดั้งเดิม",
["pqm"] = "Malecite-Passamaquoddy",
["pra"] = "ปรากฤต",
["pra-niy"] = "Niya Prakrit",
["prc"] = "Parachi",
["pre"] = "Principense",
["prf"] = "Paranan",
["prg"] = "Old Prussian",
["prh"] = "Porohanon",
["pri"] = "Paicî",
["prk"] = "Parauk",
["prl"] = "Peruvian Sign Language",
["prm"] = "Kibiri",
["prn"] = "Prasuni",
["pro"] = "อุตซิตาเก่า",
["prq"] = "Ashéninka Perené",
["prr"] = "Puri",
["prt"] = "Phai",
["pru"] = "Puragi",
["prw"] = "Parawen",
["prx"] = "Purik",
["prz"] = "Providencia Sign Language",
["ps"] = "ปาทาน",
["psa"] = "Asue Awyu",
["psc"] = "Persian Sign Language",
["psd"] = "Plains Indian Sign Language",
["pse"] = "มลายูตอนกลาง",
["psg"] = "Penang Sign Language",
["psh"] = "Southwest Pashayi",
["psi"] = "Southeast Pashayi",
["psl"] = "Puerto Rican Sign Language",
["psm"] = "Pauserna",
["psn"] = "Panasuan",
["pso"] = "Polish Sign Language",
["psp"] = "Philippine Sign Language",
["psq"] = "Pasi",
["psr"] = "Portuguese Sign Language",
["pss"] = "Kaulong",
["psw"] = "Port Sandwich",
["psy"] = "Piscataway",
["pt"] = "โปรตุเกส",
["pta"] = "Pai Tavytera",
["pth"] = "Pataxó Hã-Ha-Hãe",
["pti"] = "Pintiini",
["ptn"] = "Patani",
["pto"] = "Zo'é",
["ptp"] = "Patep",
["ptq"] = "Pattapu",
["ptr"] = "Piamatsina",
["ptt"] = "Enrekang",
["ptu"] = "Bambam",
["ptv"] = "Port Vato",
["ptw"] = "Pentlatch",
["pty"] = "Pathiya",
["pua"] = "Purepecha",
["pub"] = "Purum",
["puc"] = "Punan Merap",
["pud"] = "Punan Aput",
["pue"] = "Puelche",
["puf"] = "Punan Merah",
["pug"] = "Phuie",
["pui"] = "Puinave",
["puj"] = "Punan Tubu",
["pum"] = "Puma",
["puo"] = "Puoc",
["pup"] = "Pulabu",
["puq"] = "Puquina",
["pur"] = "Puruborá",
["put"] = "Putoh",
["puu"] = "Punu",
["puw"] = "Puluwat",
["pux"] = "Puare",
["puy"] = "Purisimeño",
["pwa"] = "Pawaia",
["pwb"] = "Panawa",
["pwg"] = "Gapapaiwa",
["pwi"] = "Patwin",
["pwm"] = "Molbog",
["pwn"] = "ไปวัน",
["pwo"] = "กะเหรี่ยงโปตะวันตก",
["pwr"] = "Powari",
["pww"] = "กะเหรี่ยงโปเหนือ",
["pxm"] = "Quetzaltepec Mixe",
["pye"] = "Pye Krumen",
["pym"] = "Fyam",
["pyn"] = "Poyanáwa",
["pys"] = "Paraguayan Sign Language",
["pyu"] = "Puyuma",
["pyx"] = "ปยู",
["pyy"] = "Pyen",
["pzh"] = "Pazeh",
["pzn"] = "Para Naga",
["qfa-adm-pro"] = "เกรตอันดามันนีสดั้งเดิม",
["qfa-bet-pro"] = "เบ-ไทดั้งเดิม",
["qfa-cka-pro"] = "Proto-Chukotko-Kamchatkan",
["qfa-hur-pro"] = "Proto-Hurro-Urartian",
["qfa-kad-pro"] = "Proto-Kadu",
["qfa-kms-pro"] = "Proto-Kam-Sui",
["qfa-kor-pro"] = "เกาหลีดั้งเดิม",
["qfa-kra-pro"] = "ขร้าดั้งเดิม",
["qfa-lic-pro"] = "ไหลดั้งเดิม",
["qfa-onb-pro"] = "เบดั้งเดิม",
["qfa-ong-pro"] = "Proto-Ongan",
["qfa-tak-pro"] = "ขร้า-ไทดั้งเดิม",
["qfa-yen-pro"] = "Proto-Yeniseian",
["qfa-yuk-pro"] = "Proto-Yukaghir",
["qu"] = "เกชัว",
["qua"] = "Quapaw",
["quc"] = "K'iche'",
["qui"] = "Quileute",
["qum"] = "Sipakapense",
["qun"] = "Quinault",
["quq"] = "Quinqui",
["quv"] = "Sacapulteco",
["qvy"] = "Queyu",
["qwc"] = "เกชัวคลาสสิก",
["qwe-kch"] = "Kichwa",
["qwe-pro"] = "เกชวนดั้งเดิม",
["qwm"] = "คูมาน",
["qwt"] = "Kwalhioqua-Tlatskanai",
["qxs"] = "Southern Qiang",
["qya"] = "เควนยา",
["qyp"] = "Quiripi",
["raa"] = "Dungmali",
["rab"] = "Chamling",
["rac"] = "Rasawa",
["rad"] = "ระแด",
["raf"] = "Western Meohang",
["rag"] = "Logooli",
["rah"] = "Rabha",
["rai"] = "Ramoaaina",
["rak"] = "Tulu-Bohuai",
["ral"] = "Ralte",
["ram"] = "Canela",
["ran"] = "Riantana",
["rao"] = "Rao",
["rap"] = "ราปานูอี",
["raq"] = "Saam",
["rar"] = "ราโรโตงา",
["ras"] = "Tegali",
["rat"] = "Razajerdi",
["rau"] = "Raute",
["rav"] = "Sampang",
["raw"] = "เรอหวั่ง",
["rax"] = "Rang",
["ray"] = "Rapa",
["raz"] = "Rahambuu",
["rbb"] = "Rumai Palaung",
["rbk"] = "Northern Bontoc",
["rbl"] = "Miraya Bikol",
["rcf"] = "Réunion Creole French",
["rdb"] = "Rudbari",
["rea"] = "Rerau",
["reb"] = "Rembong",
["ree"] = "Rejang Kayan",
["reg"] = "Kara (Tanzania)",
["rei"] = "Reli",
["rej"] = "Rejang",
["rel"] = "Rendille",
["rem"] = "Remo",
["ren"] = "Rengao",
["rer"] = "Rer Bare",
["res"] = "Reshe",
["ret"] = "Retta",
["rey"] = "Reyesano",
["rga"] = "Roria",
["rge"] = "Romano-Greek",
["rgk"] = "Rangkas",
["rgn"] = "โรมัญญา",
["rgr"] = "Resígaro",
["rgs"] = "Southern Roglai",
["rgu"] = "Ringgou",
["rhg"] = "โรฮีนจา",
["rhp"] = "Yahang",
["ria"] = "Reang",
["rif"] = "ริฟ",
["ril"] = "Riang",
["rim"] = "Nyaturu",
["rin"] = "Nungu",
["rir"] = "Ribun",
["rit"] = "Ritarungo",
["riu"] = "Riung",
["rjg"] = "Rajong",
["rji"] = "Raji",
["rjs"] = "ราชพังสี",
["rka"] = "Kraol",
["rkb"] = "Rikbaktsa",
["rkh"] = "Rakahanga-Manihiki",
["rki"] = "ยะไข่",
["rkm"] = "Marka",
["rkt"] = "Kamta",
["rkw"] = "Arakwal",
["rm"] = "โรมานช์",
["rma"] = "Rama",
["rmb"] = "Rembarunga",
["rmc"] = "Carpathian Romani",
["rmd"] = "Traveller Danish",
["rme"] = "Angloromani",
["rmf"] = "Kalo Finnish Romani",
["rmg"] = "Traveller Norwegian",
["rmh"] = "Murkim",
["rmi"] = "Lomavren",
["rmk"] = "Romkun",
["rml"] = "Baltic Romani",
["rmm"] = "Roma",
["rmn"] = "Balkan Romani",
["rmo"] = "Sinte Romani",
["rmp"] = "Rempi",
["rmq"] = "Caló",
["rms"] = "Romanian Sign Language",
["rmt"] = "Domari",
["rmu"] = "Tavringer Romani",
["rmv"] = "Romanova",
["rmw"] = "Welsh Romani",
["rmx"] = "Romam",
["rmy"] = "Vlax Romani",
["rmz"] = "Marma",
["rnd"] = "Ruwund",
["rng"] = "Ronga",
["rnl"] = "Ranglong",
["rnn"] = "Roon",
["rnp"] = "Rongpo",
["rnw"] = "Rungwa",
["ro"] = "โรมาเนีย",
["roa-ang"] = "Angevin",
["roa-bbn"] = "บูร์บอแน-แบรีชง",
["roa-brg"] = "Bourguignon",
["roa-can"] = "Cantabrian",
["roa-cha"] = "Champenois",
["roa-fcm"] = "Franc-Comtois",
["roa-gal"] = "Gallo",
["roa-gib"] = "Gallo-Italic of Basilicata",
["roa-gis"] = "Gallo-Italic of Sicily",
["roa-leo"] = "เลออน",
["roa-lor"] = "Lorrain",
["roa-oca"] = "กาตาลาเก่า",
["roa-ole"] = "เลออนเก่า",
["roa-ona"] = "Old Navarro-Aragonese",
["roa-opt"] = "กาลิเซีย-โปรตุเกสเก่า",
["roa-orl"] = "Orléanais",
["roa-poi"] = "Poitevin-Saintongeais",
["roa-tar"] = "Tarantino",
["rob"] = "Tae'",
["roc"] = "Cacgia Roglai",
["rod"] = "Rogo",
["roe"] = "Ronji",
["rof"] = "Rombo",
["rog"] = "Northern Roglai",
["rol"] = "Romblomanon",
["rom"] = "โรมานี",
["roo"] = "Rotokas",
["rop"] = "Australian Kriol",
["ror"] = "Rongga",
["rou"] = "Runga",
["row"] = "Dela-Oenale",
["rpn"] = "Repanbitip",
["rpt"] = "Rapting",
["rri"] = "Ririo",
["rro"] = "Roro",
["rrt"] = "Arritinngithigh",
["rsb"] = "Romano-Serbian",
["rsk"] = "รูซินแบบพันโนเนีย",
["rsl"] = "มือรัสเซีย",
["rsm"] = "Miriwoong Sign Language",
["rsn"] = "Rwandan Sign Language",
["rtc"] = "Rungtu",
["rth"] = "Ratahan",
["rtm"] = "Rotuman",
["rtw"] = "Rathawi",
["ru"] = "รัสเซีย",
["rub"] = "Gungu",
["ruc"] = "Ruuli",
["rue"] = "รูซินแบบคาร์พาเทีย",
["ruf"] = "Luguru",
["rug"] = "Roviana",
["ruh"] = "Ruga",
["rui"] = "Rufiji",
["ruk"] = "Che",
["ruo"] = "Istro-Romanian",
["rup"] = "Aromanian",
["ruq"] = "Megleno-Romanian",
["rut"] = "Rutul",
["ruu"] = "Lanas Lobu",
["ruy"] = "Mala (Nigeria)",
["ruz"] = "Ruma",
["rw"] = "รวันดา-รุนดี",
["rwa"] = "Rawo",
["rwk"] = "Rwa",
["rwm"] = "Amba",
["rwo"] = "Rawa",
["rxd"] = "Ngardi",
["rxw"] = "Karuwali",
["ryn"] = "อามามิโอชิมะเหนือ",
["rys"] = "ยาเอยามะ",
["ryu"] = "โอกินาวะ",
["rzh"] = "Razihi",
["sa"] = "สันสกฤต",
["saa"] = "Saba",
["sab"] = "Buglere",
["sac"] = "Fox",
["sad"] = "Sandawe",
["sae"] = "Sabanê",
["saf"] = "Safaliba",
["sah"] = "ซาคา",
["sai-all"] = "Allentiac",
["sai-and"] = "Andoquero",
["sai-ayo"] = "Ayomán",
["sai-bae"] = "Baenan",
["sai-bag"] = "Bagua",
["sai-bet"] = "Betoi",
["sai-bor-pro"] = "Proto-Boran",
["sai-cac"] = "Cacán",
["sai-caq"] = "Caranqui",
["sai-car-pro"] = "Proto-Cariban",
["sai-cat"] = "Catacao",
["sai-cer-pro"] = "Proto-Cerrado",
["sai-chi"] = "Chirino",
["sai-chn"] = "Chaná",
["sai-chp"] = "Chapacura",
["sai-chr"] = "Charrua",
["sai-chu"] = "Churuya",
["sai-cje-pro"] = "Proto-Central Jê",
["sai-cmg"] = "Comechingon",
["sai-cno"] = "Chono",
["sai-cnr"] = "Cañari",
["sai-coe"] = "Coeruna",
["sai-col"] = "Colán",
["sai-cop"] = "Copallén",
["sai-crd"] = "Coroado Puri",
["sai-ctq"] = "Catuquinaru",
["sai-cul"] = "Culli",
["sai-cva"] = "Cueva",
["sai-esm"] = "Esmeralda",
["sai-ewa"] = "Ewarhuyana",
["sai-gam"] = "Gamela",
["sai-gay"] = "Gayón",
["sai-gmo"] = "Guamo",
["sai-gua"] = "Guachí",
["sai-gue"] = "Güenoa",
["sai-hau"] = "Haush",
["sai-jee-pro"] = "Proto-Jê",
["sai-jko"] = "Jeikó",
["sai-jrj"] = "Jirajara",
["sai-kat"] = "Katembri",
["sai-mal"] = "Malalí",
["sai-mar"] = "Maratino",
["sai-mat"] = "Matanawi",
["sai-mcn"] = "Mocana",
["sai-men"] = "Menien",
["sai-mil"] = "Millcayac",
["sai-mlb"] = "Malibu",
["sai-msk"] = "Masakará",
["sai-muc"] = "Mucuchí",
["sai-mue"] = "Muellama",
["sai-muz"] = "Muzo",
["sai-mys"] = "Maynas",
["sai-nat"] = "Natú",
["sai-nje-pro"] = "Proto-Northern Jê",
["sai-opo"] = "Opón",
["sai-oto"] = "Otomaco",
["sai-pal"] = "Palta",
["sai-pam"] = "Pamigua",
["sai-par"] = "Paratió",
["sai-peb"] = "Peba",
["sai-pnz"] = "Panzaleo",
["sai-prh"] = "Puruhá",
["sai-ptg"] = "Patagón",
["sai-pur"] = "Purukotó",
["sai-pyg"] = "Payaguá",
["sai-pyk"] = "Pykobjê",
["sai-qmb"] = "Quimbaya",
["sai-qtm"] = "Quitemo",
["sai-rab"] = "Rabona",
["sai-ram"] = "Ramanos",
["sai-sac"] = "Sácata",
["sai-san"] = "Sanaviron",
["sai-sap"] = "Sapará",
["sai-sec"] = "Sechura",
["sai-sin"] = "Sinúfana",
["sai-sje-pro"] = "Proto-Southern Jê",
["sai-tab"] = "Tabancale",
["sai-tal"] = "Tallán",
["sai-tap"] = "Tapayuna",
["sai-tar-pro"] = "Proto-Taranoan",
["sai-teu"] = "Teushen",
["sai-tim"] = "Timote",
["sai-tpr"] = "Taparita",
["sai-trr"] = "Tarairiú",
["sai-wai"] = "Waitaká",
["sai-way"] = "Wayumara",
["sai-wit-pro"] = "Proto-Witotoan",
["sai-wnm"] = "Wanham",
["sai-xoc"] = "Xocó",
["sai-yao"] = "Yao (South America)",
["sai-yar"] = "Yarumá",
["sai-yri"] = "Yuri",
["sai-yup"] = "Yupua",
["sai-yur"] = "Yurumanguí",
["saj"] = "Sahu",
["sak"] = "Sake",
["sal-pro"] = "Proto-Salish",
["sam"] = "Samaritan Aramaic",
["sao"] = "Sause",
["saq"] = "Samburu",
["sar"] = "Saraveca",
["sas"] = "Sasak",
["sat"] = "สันถาลี",
["sau"] = "Saleman",
["sav"] = "Saafi-Saafi",
["saw"] = "Sawi",
["sax"] = "Sa",
["say"] = "Saya",
["saz"] = "Saurashtra",
["sba"] = "Ngambay",
["sbb"] = "Simbo",
["sbc"] = "Gele'",
["sbd"] = "Southern Samo",
["sbe"] = "Saliba (New Guinea)",
["sbf"] = "Shabo",
["sbg"] = "Seget",
["sbh"] = "Sori-Harengan",
["sbi"] = "Seti",
["sbj"] = "Surbakhal",
["sbk"] = "Safwa",
["sbl"] = "Botolan Sambal",
["sbm"] = "Sagala",
["sbn"] = "Sindhi Bhil",
["sbo"] = "Sabüm",
["sbp"] = "Sangu (Tanzania)",
["sbq"] = "Sileibi",
["sbr"] = "Sembakung Murut",
["sbs"] = "Subiya",
["sbt"] = "Kimki",
["sbu"] = "Stod Bhoti",
["sbv"] = "Sabine",
["sbw"] = "Simba",
["sbx"] = "Seberuang",
["sby"] = "Soli",
["sbz"] = "Sara Kaba",
["sc"] = "ซาร์ดิเนีย",
["scb"] = "Chut",
["sce"] = "ตงเซียง",
["scf"] = "San Miguel Creole French",
["scg"] = "Sanggau",
["sch"] = "Sakachep",
["sci"] = "Sri Lankan Creole Malay",
["sck"] = "Sadri",
["scl"] = "Shina",
["scn"] = "ซิซิลี",
["sco"] = "สกอต",
["scp"] = "Yolmo",
["scq"] = "สะโอจ",
["scs"] = "North Slavey",
["scu"] = "Shumcho",
["scv"] = "Sheni",
["scw"] = "Sha",
["scx"] = "Sicel",
["scz"] = "Shetland",
["sd"] = "สินธ์",
["sda"] = "Toraja-Sa'dan",
["sdb"] = "Shabak",
["sdc"] = "ซัสซารี",
["sde"] = "Surubu",
["sdf"] = "Sarli",
["sdg"] = "Savi",
["sdh"] = "Southern Kurdish",
["sdj"] = "Suundi",
["sdk"] = "Sos Kundi",
["sdl"] = "Saudi Arabian Sign Language",
["sdm"] = "Semandang",
["sdn"] = "Gallurese",
["sdo"] = "Bukar-Sadung Bidayuh",
["sdp"] = "Sherdukpen",
["sdr"] = "Oraon Sadri",
["sds"] = "เบอร์เบอร์แบบตูนีเซีย",
["sdu"] = "Sarudu",
["sdv-daj-pro"] = "Proto-Daju",
["sdv-eje-pro"] = "Proto-Eastern Jebel",
["sdv-nil-pro"] = "Proto-Nilotic",
["sdv-nyi-pro"] = "Proto-Nyima",
["sdv-tmn-pro"] = "Proto-Taman",
["sdx"] = "Sibu Melanau",
["se"] = "ซามีเหนือ",
["sea"] = "เซอไม",
["sec"] = "Sechelt",
["sed"] = "Sedang",
["see"] = "Seneca",
["sef"] = "Cebaara Senoufo",
["seg"] = "Segeju",
["seh"] = "Sena",
["sei"] = "Seri",
["sej"] = "Sene",
["sek"] = "Sekani",
["sel-nor"] = "Northern Selkup",
["sel-pro"] = "Proto-Selkup",
["sel-sou"] = "Southern Selkup",
["sem-amm"] = "อัมโมน",
["sem-amo"] = "Amorite",
["sem-cha"] = "Chaha",
["sem-dad"] = "Dadanitic",
["sem-dum"] = "Dumaitic",
["sem-has"] = "Hasaitic",
["sem-his"] = "Hismaic",
["sem-mhr"] = "Muher",
["sem-pro"] = "เซมิติกดั้งเดิม",
["sem-saf"] = "Safaitic",
["sem-sam"] = "Samalian",
["sem-srb"] = "อาหรับใต้เก่า",
["sem-tay"] = "Taymanitic",
["sem-tha"] = "Thamudic",
["sem-wes-pro"] = "เซมิติกตะวันตกดั้งเดิม",
["sen"] = "Nanerigé Sénoufo",
["seo"] = "Suarmin",
["sep"] = "Sìcìté Sénoufo",
["seq"] = "Senara Sénoufo",
["ser"] = "Serrano",
["ses"] = "Koyraboro Senni",
["set"] = "Sentani",
["seu"] = "Serui-Laut",
["sev"] = "Nyarafolo Senoufo",
["sew"] = "Sewa Bay",
["sey"] = "Secoya",
["sez"] = "Senthang Chin",
["sfb"] = "French Belgian Sign Language",
["sfe"] = "Eastern Subanun",
["sfm"] = "Small Flowery Miao",
["sfs"] = "South African Sign Language",
["sfw"] = "Sehwi",
["sg"] = "ซังโก",
["sga"] = "ไอริชเก่า",
["sgb"] = "Mag-Anchi Ayta",
["sgc"] = "Kipsigis",
["sgd"] = "ซูรีเกาโนน",
["sge"] = "Segai",
["sgg"] = "Swiss-German Sign Language",
["sgh"] = "Shughni",
["sgi"] = "Suga",
["sgk"] = "Sangkong",
["sgm"] = "Singa",
["sgp"] = "Singpho",
["sgr"] = "Sangisari",
["sgs"] = "Samogitian",
["sgt"] = "Brokpake",
["sgu"] = "Salas",
["sgw"] = "Sebat Bet Gurage",
["sgx"] = "Sierra Leone Sign Language",
["sgy"] = "Sanglechi",
["sgz"] = "Sursurunga",
["sh"] = "เซอร์โบ-โครเอเชีย",
["sha"] = "Shall-Zwall",
["shb"] = "Ninam",
["shc"] = "Sonde",
["shd"] = "Kundal Shahi",
["she"] = "Sheko",
["shg"] = "Shua",
["shh"] = "Shoshone",
["shi"] = "Tashelhit",
["shj"] = "Shatt",
["shk"] = "Shilluk",
["shl"] = "Shendu",
["shm"] = "Shahrudi",
["shn"] = "ไทใหญ่",
["sho"] = "Shanga",
["shp"] = "Shipibo-Conibo",
["shq"] = "Sala",
["shr"] = "Shi",
["shs"] = "Shuswap",
["sht"] = "Shasta",
["shu"] = "Chadian Arabic",
["shv"] = "Shehri",
["shw"] = "Shwai",
["shx"] = "She",
["shy"] = "Tachawit",
["shz"] = "Syenara Senoufo",
["si"] = "สิงหล",
["sia"] = "Akkala Sami",
["sib"] = "Sebop",
["sid"] = "ซีดามา",
["sie"] = "Simaa",
["sif"] = "Siamou",
["sig"] = "Paasaal",
["sih"] = "Sîshëë",
["sii"] = "Shom Peng",
["sij"] = "Numbami",
["sik"] = "Sikiana",
["sil"] = "Tumulung Sisaala",
["sim"] = "Seim",
["sio-pro"] = "Proto-Siouan",
["sip"] = "สิกขิม",
["siq"] = "Sonia",
["sir"] = "Siri",
["sis"] = "Siuslaw",
["sit-aao-pro"] = "Proto-Central Naga",
["sit-bai-pro"] = "Proto-Bai",
["sit-ban"] = "Bangru",
["sit-bdi-pro"] = "Proto-Bodish",
["sit-bok"] = "Bokar",
["sit-cai"] = "Caijia",
["sit-cha"] = "Chairel",
["sit-ers-pro"] = "Proto-Ersuic",
["sit-hrs-pro"] = "Proto-Hrusish",
["sit-jap"] = "Japhug",
["sit-kha-pro"] = "Proto-Kham",
["sit-khb-pro"] = "Proto-Kho-Bwa",
["sit-khp-pro"] = "Proto-Puroik",
["sit-khw-pro"] = "Proto-Western Kho-Bwa",
["sit-kon-pro"] = "Proto-Northern Naga",
["sit-liz"] = "Lizu",
["sit-lnj"] = "Longjia",
["sit-lrn"] = "Luren",
["sit-luu-pro"] = "ลูอิชดั้งเดิม",
["sit-nas-pro"] = "Proto-Naish",
["sit-prn"] = "Puiron",
["sit-pro"] = "ซีโน-ทิเบตันดั้งเดิม",
["sit-sit"] = "Situ",
["sit-tam-pro"] = "Proto-Tamangic",
["sit-tan-pro"] = "Proto-Tani",
["sit-tgm"] = "ตางัม",
["sit-tng-pro"] = "Proto-Tangkhulic",
["sit-tos"] = "Tosu",
["sit-tsh"] = "Tshobdun",
["sit-zbu"] = "Zbu",
["siu"] = "Sinagen",
["siv"] = "Sumariup",
["siw"] = "Siwai",
["six"] = "Sumau",
["siy"] = "Sivandi",
["siz"] = "Siwi",
["sja"] = "Epena",
["sjb"] = "Sajau Basap",
["sjc"] = "Shaojiang Min",
["sjd"] = "ซามีแบบกิลดิน",
["sje"] = "ซามีแบบปีเต",
["sjg"] = "Assangori",
["sjk"] = "Kemi Sami",
["sjl"] = "Miji",
["sjm"] = "Mapun",
["sjn"] = "ซินดาริน",
["sjo"] = "Xibe",
["sjp"] = "Surjapuri",
["sjr"] = "Siar-Lak",
["sjs"] = "Senhaja de Srair",
["sjt"] = "Ter Sami",
["sju"] = "Ume Sami",
["sjw"] = "Shawnee",
["sk"] = "สโลวัก",
["ska"] = "Skagit",
["skb"] = "แสก",
["skc"] = "Ma Manda",
["skd"] = "Southern Sierra Miwok",
["ske"] = "Ske",
["skf"] = "Mekéns",
["skh"] = "Sikule",
["ski"] = "Sika",
["skj"] = "Seke",
["skk"] = "Sok",
["skm"] = "Sakam",
["skn"] = "Kolibugan Subanon",
["sko"] = "Seko Tengah",
["skp"] = "Sekapan",
["skq"] = "Sininkere",
["skr"] = "Saraiki",
["sks"] = "ไมยา",
["skt"] = "Sakata",
["sku"] = "Sakao",
["skv"] = "Skou",
["skw"] = "Skepi Creole Dutch",
["skx"] = "Seko Padang",
["sky"] = "ซีกายานา",
["skz"] = "Sekar",
["sl"] = "สโลวีเนีย",
["sla-pro"] = "สลาวิกดั้งเดิม",
["slc"] = "Saliba (Colombia)",
["sld"] = "Sisaala",
["sle"] = "Sholaga",
["slf"] = "Swiss-Italian Sign Language",
["slg"] = "Selungai Murut",
["slh"] = "Southern Puget Sound Salish",
["slj"] = "Salumá",
["sll"] = "Salt-Yui",
["slm"] = "ซามาแบบปางูตารัน",
["sln"] = "Salinan",
["slp"] = "Lamaholot",
["slr"] = "ซาลาร์",
["sls"] = "Singapore Sign Language",
["slt"] = "Sila",
["slu"] = "Selaru",
["slw"] = "Sialum",
["slx"] = "Salampasu",
["sly"] = "Selayar",
["slz"] = "Ma'ya",
["sm"] = "ซามัว",
["sma"] = "ซามีใต้",
["smb"] = "Simbari",
["smc"] = "Som",
["smd"] = "Sama",
["smf"] = "Auwe",
["smg"] = "Simbali",
["smh"] = "Samei",
["smi-pro"] = "ซามิกดั้งเดิม",
["smj"] = "ซามีแบบลูเล",
["smk"] = "โบลีเนา",
["sml"] = "ซามาตอนกลาง",
["smm"] = "Musasa",
["smn"] = "ซามีแบบอีนารี",
["smp"] = "Samaritan Hebrew",
["smq"] = "Samo",
["smr"] = "Simeulue",
["sms"] = "Skolt Sami",
["smt"] = "Simte",
["smu"] = "สมราย",
["smv"] = "Samvedi",
["smw"] = "Sumbawa",
["smx"] = "Samba",
["smy"] = "Semnani",
["smz"] = "Simeku",
["sn"] = "โชนา",
["snb"] = "Sebuyau",
["snc"] = "Sinaugoro",
["sne"] = "Bau Bidayuh",
["snf"] = "Noon",
["sng"] = "Sanga (Congo)",
["sni"] = "Sensi",
["snj"] = "Riverain Sango",
["snk"] = "Soninke",
["snl"] = "Sangil",
["snm"] = "Southern Ma'di",
["snn"] = "Siona",
["sno"] = "Snohomish",
["snp"] = "Siane",
["snq"] = "Sangu (Gabon)",
["snr"] = "Sihan",
["sns"] = "Nahavaq",
["snu"] = "Senggi",
["snv"] = "Sa'ban",
["snw"] = "Selee",
["snx"] = "Sam",
["sny"] = "Saniyo-Hiyewe",
["snz"] = "Kou",
["so"] = "โซมาลี",
["soa"] = "โซ่ง",
["sob"] = "Sobei",
["soc"] = "Soko",
["sod"] = "Songoora",
["soe"] = "Songomeno",
["sog"] = "Sogdian",
["soh"] = "Aka (Sudan)",
["soi"] = "Sonha",
["sok"] = "Sokoro",
["sol"] = "Solos",
["son-pro"] = "Proto-Songhay",
["soo"] = "Nsong",
["sop"] = "Songe",
["soq"] = "Kanasi",
["sor"] = "Somrai",
["sos"] = "Seenku",
["sou"] = "ปักษ์ใต้",
["sov"] = "Sonsorolese",
["sow"] = "Sowanda",
["sox"] = "Swo",
["soy"] = "Miyobe",
["soz"] = "Temi",
["spb"] = "Sepa (Indonesia)",
["spc"] = "Sapé",
["spd"] = "Saep",
["spe"] = "Sepa (New Guinea)",
["spg"] = "Sian",
["spi"] = "Saponi",
["spk"] = "Sengo",
["spl"] = "Selepet",
["spm"] = "Sepen",
["spn"] = "Sanapaná",
["spo"] = "Spokane",
["spp"] = "Supyire",
["spr"] = "Saparua",
["sps"] = "Saposa",
["spt"] = "Spiti Bhoti",
["spu"] = "Sapuan",
["spv"] = "Sambalpuri",
["spx"] = "South Picene",
["spy"] = "Sabaot",
["sq"] = "แอลเบเนีย",
["sqa"] = "Shama-Sambuga",
["sqh"] = "Shau",
["sqj-pro"] = "แอลเบเนียนดั้งเดิม",
["sqk"] = "Albanian Sign Language",
["sqm"] = "Suma",
["sqn"] = "Susquehannock",
["sqo"] = "Sorkhei",
["sqq"] = "Sou",
["sqr"] = "Siculo-Arabic",
["sqs"] = "Sri Lankan Sign Language",
["sqt"] = "Soqotri",
["squ"] = "Squamish",
["sra"] = "Saruga",
["srb"] = "Sora",
["sre"] = "Sara",
["srf"] = "Nafi",
["srg"] = "Sulod",
["srh"] = "Sarikoli",
["sri"] = "Siriano",
["srk"] = "Serudung Murut",
["srl"] = "Isirawa",
["srm"] = "ซารามักกา",
["srn"] = "ซรานันโตโง",
["srq"] = "Sirionó",
["srr"] = "Serer",
["srs"] = "Tsuut'ina",
["srt"] = "Sauri",
["sru"] = "Suruí",
["srv"] = "Waray Sorsogon",
["srw"] = "Serua",
["srx"] = "Sirmauri",
["sry"] = "Sera",
["srz"] = "Shahmirzadi",
["ss"] = "Swazi",
["ssa-klk-pro"] = "Proto-Kuliak",
["ssa-kom-pro"] = "Proto-Koman",
["ssa-pro"] = "Proto-Nilo-Saharan",
["ssb"] = "Southern Sama",
["ssc"] = "Suba-Simbiti",
["ssd"] = "Siroi",
["sse"] = "Balangingi",
["ssf"] = "Thao",
["ssg"] = "Seimat",
["ssh"] = "Shihhi Arabic",
["ssi"] = "Sansi",
["ssj"] = "Sausi",
["ssk"] = "Sunam",
["ssl"] = "Western Sisaala",
["ssm"] = "Semnam",
["sso"] = "Sissano",
["ssp"] = "Spanish Sign Language",
["ssq"] = "So'a",
["ssr"] = "Swiss-French Sign Language",
["sss"] = "Sô",
["sst"] = "Sinasina",
["ssu"] = "Susuami",
["ssv"] = "Shark Bay",
["ssx"] = "Samberigi",
["ssy"] = "ซาโฮ",
["ssz"] = "Sengseng",
["st"] = "ซูทู",
["stb"] = "Northern Subanen",
["std"] = "Sentinelese",
["ste"] = "Liana-Seti",
["stf"] = "Seta",
["stg"] = "Trieng",
["sth"] = "Shelta",
["sti"] = "Bulo Stieng",
["stj"] = "Matya Samo",
["stk"] = "Arammba",
["stm"] = "Setaman",
["stn"] = "Owa",
["sto"] = "Stoney",
["stp"] = "Southeastern Tepehuan",
["stq"] = "ฟรีเชียแบบซาเทอร์ลันท์",
["str"] = "Saanich",
["sts"] = "Shumashti",
["stt"] = "Budeh Stieng",
["stu"] = "Samtao",
["stv"] = "Silt'e",
["stw"] = "Satawalese",
["sty"] = "Siberian Tatar",
["su"] = "ซุนดา",
["sua"] = "Sulka",
["sub"] = "Suku",
["suc"] = "Western Subanon",
["sue"] = "Suena",
["sug"] = "Suganga",
["sui"] = "Suki",
["suk"] = "Sukuma",
["suq"] = "Suri",
["sur"] = "Mwaghavul",
["sus"] = "Susu",
["sut"] = "Subtiaba",
["suv"] = "Puroik",
["suw"] = "Sumbwa",
["sux"] = "ซูเมอร์",
["suy"] = "Suyá",
["suz"] = "Sunwar",
["sv"] = "สวีเดน",
["sva"] = "Svan",
["svb"] = "Ulau-Suain",
["svc"] = "Vincentian Creole English",
["sve"] = "Serili",
["svk"] = "Slovakian Sign Language",
["svm"] = "Slavomolisano",
["svs"] = "Savosavo",
["svx"] = "Skalvian",
["sw"] = "สวาฮีลี",
["swb"] = "Maore Comorian",
["swf"] = "Sere",
["swg"] = "Swabian",
["swi"] = "สุ่ย",
["swj"] = "Sira",
["swl"] = "Swedish Sign Language",
["swm"] = "Samosa",
["swn"] = "Sokna",
["swo"] = "Shanenawa",
["swp"] = "Suau",
["swq"] = "Sharwa",
["swr"] = "Saweru",
["sws"] = "Seluwasan",
["swt"] = "Sawila",
["swu"] = "Suwawa",
["sww"] = "Sowa",
["swx"] = "Suruahá",
["swy"] = "Sarua",
["sxb"] = "Suba",
["sxc"] = "Sicanian",
["sxe"] = "Sighu",
["sxg"] = "Shixing",
["sxk"] = "Southern Kalapuya",
["sxl"] = "Selonian",
["sxm"] = "ซำเร",
["sxn"] = "Sangir",
["sxo"] = "Sorothaptic",
["sxr"] = "Saaroa",
["sxs"] = "Sasaru",
["sxw"] = "Saxwe Gbe",
["sya"] = "Siang",
["syb"] = "Central Subanen",
["syc"] = "ซีรีแอกคลาสสิก",
["syd-pro"] = "Proto-Samoyedic",
["syi"] = "Seki",
["syk"] = "Sukur",
["syl"] = "สิเลฏ",
["sym"] = "Maya Samo",
["syn"] = "Senaya",
["syo"] = "Suoy",
["sys"] = "Sinyar",
["syw"] = "Kagate",
["syx"] = "Osamayi",
["syy"] = "Al-Sayyid Bedouin Sign Language",
["sza"] = "Semelai",
["szb"] = "Ngalum",
["szc"] = "Semaq Beri",
["szd"] = "Seru",
["sze"] = "Seze",
["szg"] = "Sengele",
["szl"] = "ไซลีเซีย",
["szn"] = "Sula",
["szp"] = "Suabo",
["szv"] = "Isubu",
["szw"] = "Sawai",
["szy"] = "ซากีซายา",
["ta"] = "ทมิฬ",
["taa"] = "Lower Tanana",
["tab"] = "ทาบาซารัน",
["tac"] = "Lowland Tarahumara",
["tad"] = "Tause",
["tae"] = "Tariana",
["taf"] = "Tapirapé",
["tag"] = "Tagoi",
["tai-pro"] = "ไทดั้งเดิม",
["tai-swe-pro"] = "ไทตะวันตกเฉียงใต้ดั้งเดิม",
["taj"] = "Eastern Tamang",
["tak"] = "Tala",
["tal"] = "Tal",
["tan"] = "Tangale",
["tao"] = "ยามี",
["tap"] = "Taabwa",
["tar"] = "Central Tarahumara",
["tas"] = "Tây Bồi",
["tau"] = "Upper Tanana",
["tav"] = "Tatuyo",
["taw"] = "Tai",
["tax"] = "Tamki",
["tay"] = "Atayal",
["taz"] = "Tocho",
["tba"] = "Aikanã",
["tbb"] = "Tapeba",
["tbc"] = "Takia",
["tbd"] = "Kaki Ae",
["tbe"] = "Tanimbili",
["tbf"] = "Mandara",
["tbg"] = "North Tairora",
["tbh"] = "Thurawal",
["tbi"] = "Gaam",
["tbj"] = "Tiang",
["tbk"] = "Calamian Tagbanwa",
["tbl"] = "ตโบลี",
["tbm"] = "Tagbu",
["tbn"] = "Barro Negro Tunebo",
["tbo"] = "Tawala",
["tbp"] = "Taworta",
["tbq-bdg-pro"] = "โบโด-กาโรดั้งเดิม",
["tbq-blg"] = "Bailang",
["tbq-brm-pro"] = "Proto-Burmish",
["tbq-gkh"] = "Gokhy",
["tbq-kuk-pro"] = "Proto-Kuki-Chin",
["tbq-lal-pro"] = "Proto-Lalo",
["tbq-laz"] = "Laze",
["tbq-lob-pro"] = "โลโล-เบอร์มีซดั้งเดิม",
["tbq-lol-pro"] = "โลโลอิชดั้งเดิม",
["tbq-mil"] = "Milang",
["tbq-mor"] = "Moran",
["tbq-ngo"] = "Ngochang",
["tbr"] = "Tumtum",
["tbs"] = "Tanguat",
["tbt"] = "Kitembo",
["tbu"] = "Tubar",
["tbv"] = "Tobo",
["tbw"] = "Aborlan Tagbanwa",
["tbx"] = "Kapin",
["tby"] = "Tabaru",
["tbz"] = "Ditammari",
["tca"] = "Ticuna",
["tcb"] = "Tanacross",
["tcc"] = "Datooga",
["tcd"] = "Tafi",
["tce"] = "Southern Tutchone",
["tcf"] = "Malinaltepec Tlapanec",
["tcg"] = "Tamagario",
["tch"] = "Turks and Caicos Creole English",
["tci"] = "Wára",
["tck"] = "Tchitchege",
["tcl"] = "Taman (Myanmar)",
["tcm"] = "Tanahmerah",
["tco"] = "Taungyo",
["tcp"] = "Tawr Chin",
["tcq"] = "Kaiy",
["tcs"] = "ครีโอลช่องแคบทอร์เรส",
["tct"] = "T'en",
["tcu"] = "Southeastern Tarahumara",
["tcw"] = "Tecpatlán Totonac",
["tcx"] = "โตทา",
["tcy"] = "ตูลู",
["tcz"] = "Thado Chin",
["tda"] = "Tagdal",
["tdb"] = "Panchpargania",
["tdc"] = "Emberá-Tadó",
["tdd"] = "ไทใต้คง",
["tde"] = "Tiranige Diga Dogon",
["tdf"] = "Talieng",
["tdg"] = "Western Tamang",
["tdh"] = "Thulung",
["tdi"] = "Tomadino",
["tdj"] = "Tajio",
["tdk"] = "Tambas",
["tdl"] = "Sur",
["tdm"] = "Taruma",
["tdn"] = "Tondano",
["tdo"] = "Teme",
["tdq"] = "Tita",
["tdr"] = "Todrah",
["tds"] = "Doutai",
["tdt"] = "Tetun Dili",
["tdu"] = "Tempasuk Dusun",
["tdv"] = "Toro",
["tdy"] = "Tadyawan",
["te"] = "เตลูกู",
["tea"] = "เตอเมียร์",
["teb"] = "Tetete",
["tec"] = "Terik",
["ted"] = "Tepo Krumen",
["tee"] = "Huehuetla Tepehua",
["tef"] = "Teressa",
["teg"] = "Teke-Tege",
["teh"] = "Tehuelche",
["tei"] = "Torricelli",
["tek"] = "Ibali Teke",
["tem"] = "Temne",
["ten"] = "Tama (Colombia)",
["teo"] = "Ateso",
["tep"] = "Tepecano",
["teq"] = "Temein",
["ter"] = "Tereno",
["tes"] = "Tengger",
["tet"] = "เตตุน",
["teu"] = "Soo",
["tev"] = "Teor",
["tew"] = "Tewa",
["tex"] = "Tennet",
["tey"] = "Tulishi",
["tez"] = "Tetserret",
["tfi"] = "Tofin Gbe",
["tfn"] = "Dena'ina",
["tfo"] = "Tefaro",
["tfr"] = "Teribe",
["tft"] = "เตอร์นาเต",
["tg"] = "ทาจิก",
["tga"] = "Sagalla",
["tgb"] = "Tobilung",
["tgc"] = "Tigak",
["tgd"] = "Ciwogai",
["tge"] = "Eastern Gorkha Tamang",
["tgf"] = "Chali",
["tgh"] = "Tobagonian Creole English",
["tgi"] = "Lawunuia",
["tgn"] = "ตันดากาโนน",
["tgo"] = "Sudest",
["tgp"] = "Tangoa",
["tgq"] = "Tring",
["tgr"] = "Tareng",
["tgs"] = "Nume",
["tgt"] = "Central Tagbanwa",
["tgu"] = "Tanggu",
["tgv"] = "Tingui-Boto",
["tgw"] = "Tagwana Senoufo",
["tgx"] = "Tagish",
["tgy"] = "Togoyo",
["th"] = "ไทย",
["thc"] = "Tai Hang Tong",
["thd"] = "Kuuk Thaayorre",
["the"] = "Chitwania Tharu",
["thf"] = "Thangmi",
["thh"] = "Northern Tarahumara",
["thi"] = "Tai Long",
["thk"] = "Tharaka",
["thl"] = "Dangaura Tharu",
["thm"] = "ทะวืง",
["thn"] = "Thachanadan",
["thp"] = "Thompson",
["thq"] = "Kochila Tharu",
["thr"] = "Rana Tharu",
["ths"] = "Thakali",
["tht"] = "Tahltan",
["thu"] = "Thuri",
["thy"] = "Tha",
["ti"] = "ทือกรึญญา",
["tic"] = "Tira",
["tif"] = "Tifal",
["tig"] = "ทือเกร",
["tih"] = "Timugon Murut",
["tii"] = "Tiene",
["tij"] = "Tilung",
["tik"] = "Tikar",
["til"] = "Tillamook",
["tim"] = "Timbe",
["tin"] = "Tindi",
["tio"] = "Teop",
["tip"] = "Trimuris",
["tiq"] = "Tiéfo",
["tis"] = "Masadiit Itneg",
["tit"] = "Tinigua",
["tiu"] = "Adasen",
["tiv"] = "Tiv",
["tiw"] = "Tiwi",
["tix"] = "Southern Tiwa",
["tiy"] = "ตีรูไร",
["tiz"] = "Tai Hongjin",
["tja"] = "Tajuasohn",
["tjg"] = "Tunjung",
["tji"] = "Northern Tujia",
["tjl"] = "ไทแหล่ง",
["tjm"] = "Timucua",
["tjn"] = "Tonjon",
["tjs"] = "Southern Tujia",
["tju"] = "Tjurruru",
["tjw"] = "Chaap Wuurong",
["tk"] = "เติร์กเมน",
["tka"] = "Truká",
["tkb"] = "Buksa",
["tkd"] = "Tukudede",
["tke"] = "Takwane",
["tkf"] = "Tukumanféd",
["tkl"] = "Tokelauan",
["tkm"] = "Takelma",
["tkn"] = "โทกูโนชิมะ",
["tkp"] = "Tikopia",
["tkq"] = "Tee",
["tkr"] = "Tsakhur",
["tks"] = "Ramandi",
["tkt"] = "Kathoriya Tharu",
["tku"] = "Upper Necaxa Totonac",
["tkv"] = "Mur Pano",
["tkw"] = "Teanu",
["tkx"] = "Tangko",
["tkz"] = "Takua",
["tl"] = "ตากาล็อก",
["tla"] = "Southwestern Tepehuan",
["tlb"] = "Tobelo",
["tlc"] = "Misantla Totonac",
["tld"] = "Talaud",
["tlf"] = "Telefol",
["tlg"] = "Tofanma",
["tlh"] = "Klingon",
["tli"] = "Tlingit",
["tlj"] = "Talinga-Bwisi",
["tlk"] = "Taloki",
["tll"] = "Tetela",
["tlm"] = "Tolomako",
["tln"] = "Talondo'",
["tlo"] = "Talodi",
["tlp"] = "Filomena Mata-Coahuitlán Totonac",
["tlq"] = "Tai Loi",
["tlr"] = "Talise",
["tls"] = "Tambotalo",
["tlt"] = "Teluti",
["tlu"] = "Tulehu",
["tlv"] = "Taliabu",
["tlx"] = "Khehek",
["tly"] = "Talysh",
["tma"] = "Tama (Chad)",
["tmb"] = "Avava",
["tmc"] = "Tumak",
["tmd"] = "Haruai",
["tme"] = "Tremembé",
["tmf"] = "Toba-Maskoy",
["tmg"] = "Ternateño",
["tmh"] = "Tuareg",
["tmi"] = "Tutuba",
["tmj"] = "Samarokena",
["tmk"] = "Northwestern Tamang",
["tml"] = "Tamnim Citak",
["tmm"] = "Tai Thanh",
["tmn"] = "Taman (Indonesia)",
["tmo"] = "Temoq",
["tmq"] = "Tumleo",
["tms"] = "Tima",
["tmt"] = "Tasmate",
["tmu"] = "Iau",
["tmv"] = "Motembo",
["tmy"] = "Tami",
["tmz"] = "Tamanaku",
["tn"] = "สวานา",
["tna"] = "Tacana",
["tnb"] = "Western Tunebo",
["tnc"] = "Tanimuca-Retuarã",
["tnd"] = "Angosturas Tunebo",
["tne"] = "Tinoc Kallahan",
["tng"] = "Tobanga",
["tnh"] = "Maiani",
["tni"] = "Tandia",
["tnk"] = "Kwamera",
["tnl"] = "Lenakel",
["tnm"] = "Tabla",
["tnn"] = "North Tanna",
["tno"] = "Toromono",
["tnp"] = "Whitesands",
["tnq"] = "ตาอีโน",
["tnr"] = "Bedik",
["tns"] = "Tenis",
["tnt"] = "Tontemboan",
["tnu"] = "Tay Khang",
["tnv"] = "Tanchangya",
["tnw"] = "Tonsawang",
["tnx"] = "Tanema",
["tny"] = "Tongwe",
["tnz"] = "Ten'edn",
["to"] = "ตองงา",
["tob"] = "Toba",
["toc"] = "Coyutla Totonac",
["tod"] = "Toma",
["tof"] = "Gizrra",
["tog"] = "Tonga (Malawi)",
["toh"] = "Tonga (Mozambique)",
["toi"] = "Tonga (Zambia)",
["toj"] = "Tojolabal",
["tok"] = "Toki Pona",
["tol"] = "Tolowa",
["tom"] = "Tombulu",
["too"] = "Xicotepec de Juárez Totonac",
["top"] = "Papantla Totonac",
["toq"] = "Toposa",
["tor"] = "Togbo-Vara Banda",
["tos"] = "Highland Totonac",
["tou"] = "Tho",
["tov"] = "Upper Taromi",
["tow"] = "Jemez",
["tox"] = "Tobian",
["toy"] = "Topoiyo",
["toz"] = "To",
["tpa"] = "Taupota",
["tpc"] = "Azoyú Me'phaa",
["tpe"] = "Tippera",
["tpf"] = "Tarpia",
["tpg"] = "Kula",
["tpi"] = "ตอกปีซิน",
["tpj"] = "Tapieté",
["tpk"] = "Tupinikin",
["tpl"] = "Tlacoapa Me'phaa",
["tpm"] = "Tampulma",
["tpn"] = "Tupinambá",
["tpo"] = "Tai Pao",
["tpp"] = "Pisaflores Tepehua",
["tpq"] = "Tukpa",
["tpr"] = "Tuparí",
["tpt"] = "Tlachichilco Tepehua",
["tpu"] = "Tampuan",
["tpv"] = "Tanapag",
["tpw"] = "ตูปีเก่า",
["tpx"] = "Acatepec Me'phaa",
["tpy"] = "Trumai",
["tpz"] = "Tinputz",
["tqb"] = "Tembé",
["tql"] = "Lehali",
["tqm"] = "Turumsa",
["tqn"] = "Tenino",
["tqo"] = "Toaripi",
["tqp"] = "Tomoip",
["tqq"] = "Tunni",
["tqr"] = "Torona",
["tqt"] = "Western Totonac",
["tqu"] = "Touo",
["tqw"] = "Tonkawa",
["tr"] = "ตุรกี",
["tra"] = "Tirahi",
["trb"] = "Terebu",
["trc"] = "Copala Triqui",
["trd"] = "Turi",
["tre"] = "East Tarangan",
["trf"] = "Trinidadian Creole English",
["trg"] = "Lishán Didán",
["trh"] = "Turaka",
["tri"] = "Trió",
["trj"] = "Toram",
["trk-dkh"] = "Dukhan",
["trk-eog"] = "Early Old Oghuz",
["trk-oat"] = "ตุรกีแบบอานาโตเลียเก่า",
["trk-pro"] = "เตอร์กิกดั้งเดิม",
["trl"] = "Traveller Scottish",
["trm"] = "Tregami",
["trn"] = "Trinitario",
["tro"] = "Tarao",
["trp"] = "กอกบอรอก",
["trq"] = "San Martín Itunyoso Triqui",
["trr"] = "Taushiro",
["trs"] = "Chicahuaxtla Triqui",
["trt"] = "Tunggare",
["tru"] = "Turoyo",
["trv"] = "Taroko",
["trw"] = "Torwali",
["trx"] = "Tringgus",
["try"] = "ตุรุง",
["trz"] = "Torá",
["ts"] = "Tsonga",
["tsa"] = "Tsaangi",
["tsb"] = "Tsamai",
["tsc"] = "Tswa",
["tsd"] = "Tsakonian",
["tse"] = "Tunisian Sign Language",
["tsf"] = "Southwestern Tamang",
["tsg"] = "ซูก",
["tsh"] = "Tsuvan",
["tsi"] = "Tsimshian",
["tsj"] = "Tshangla",
["tsl"] = "Ts'ün-Lao",
["tsm"] = "Turkish Sign Language",
["tsp"] = "Northern Toussian",
["tsq"] = "มือไทย",
["tsr"] = "Akei",
["tss"] = "Taiwan Sign Language",
["tsu"] = "โจว",
["tsv"] = "Tsogo",
["tsw"] = "Tsishingini",
["tsx"] = "Mubami",
["tsy"] = "Tebul Sign Language",
["tt"] = "ตาตาร์",
["tta"] = "Tutelo",
["ttb"] = "Gaa",
["ttc"] = "Tektiteko",
["ttd"] = "Tauade",
["tte"] = "Bwanabwana",
["ttf"] = "Tuotomb",
["ttg"] = "Tutong",
["tth"] = "Upper Ta'oih",
["tti"] = "Tobati",
["ttj"] = "Tooro",
["ttk"] = "Totoro",
["ttl"] = "Totela",
["ttm"] = "Northern Tutchone",
["ttn"] = "Towei",
["tto"] = "Lower Ta'oih",
["ttp"] = "Tombelala",
["ttr"] = "Tera",
["tts"] = "อีสาน",
["ttt"] = "Tat",
["ttu"] = "Torau",
["ttv"] = "Titan",
["ttw"] = "Long Wat",
["tty"] = "Sikaritai",
["ttz"] = "Tsum",
["tua"] = "Wiarumus",
["tub"] = "Tübatulabal",
["tuc"] = "Mutu",
["tud"] = "Tuxá",
["tue"] = "Tuyuca",
["tuf"] = "Central Tunebo",
["tug"] = "Tunia",
["tuh"] = "Taulil",
["tui"] = "Tupuri",
["tuj"] = "Tugutil",
["tul"] = "Tula",
["tum"] = "Tumbuka",
["tun"] = "Tunica",
["tuo"] = "Tucano",
["tup-gua-pro"] = "ตูปี-กัวรานีดั้งเดิม",
["tup-kab"] = "Kabishiana",
["tup-pro"] = "ตูเปียนดั้งเดิม",
["tuq"] = "Tedaga",
["tus"] = "Tuscarora",
["tuu"] = "Tututni",
["tuv"] = "Turkana",
["tuw-alk"] = "Alchuka",
["tuw-bal"] = "Bala",
["tuw-kkl"] = "Kyakala",
["tuw-kli"] = "Kili",
["tuw-pro"] = "Proto-Tungusic",
["tuw-sol"] = "Solon",
["tux"] = "Tuxináwa",
["tuy"] = "Tugen",
["tuz"] = "Turka",
["tva"] = "Vaghua",
["tvd"] = "Tsuvadi",
["tve"] = "Te'un",
["tvk"] = "Southeast Ambrym",
["tvl"] = "ตูวาลู",
["tvm"] = "Tela-Masbuar",
["tvn"] = "Tavoyan",
["tvo"] = "ตีโดเร",
["tvs"] = "Taveta",
["tvt"] = "Tutsa Naga",
["tvu"] = "Tunen",
["tvw"] = "Sedoa",
["tvx"] = "Taivoan",
["tvy"] = "Timor Pidgin",
["twa"] = "Twana",
["twb"] = "Western Tawbuid",
["twc"] = "Teshenawa",
["twe"] = "Teiwa",
["twf"] = "เทาส์",
["twg"] = "Tereweng",
["twh"] = "ไทขาว",
["twm"] = "Tawang Monpa",
["twn"] = "Twendi",
["two"] = "Tswapong",
["twp"] = "Ere",
["twq"] = "Tasawaq",
["twr"] = "Southwestern Tarahumara",
["twt"] = "Turiwára",
["twu"] = "Termanu",
["tww"] = "Tuwari",
["twy"] = "Tawoyan",
["txa"] = "Tombonuo",
["txb"] = "โทแคเรียนบี",
["txc"] = "Tsetsaut",
["txe"] = "Totoli",
["txg"] = "ตังกุต",
["txh"] = "Thracian",
["txi"] = "Ikpeng",
["txj"] = "Tarjumo",
["txm"] = "Tomini",
["txn"] = "West Tarangan",
["txo"] = "Toto",
["txq"] = "Tii",
["txr"] = "Tartessian",
["txs"] = "Tonsea",
["txt"] = "Citak",
["txu"] = "Kayapó",
["txx"] = "Tatana",
["ty"] = "ตาฮีตี",
["tya"] = "Tauya",
["tye"] = "Kyenga",
["tyh"] = "O'du",
["tyi"] = "Teke-Tsaayi",
["tyj"] = "ไทแมน",
["tyl"] = "Thu Lao",
["tyn"] = "Kombai",
["typ"] = "Kuku-Thaypan",
["tyr"] = "ไทแดง",
["tys"] = "ซาปา",
["tyt"] = "Tày Tac",
["tyu"] = "Kua",
["tyv"] = "ตูวา",
["tyx"] = "Teke-Tyee",
["tyz"] = "ตั่ย",
["tza"] = "Tanzanian Sign Language",
["tzh"] = "Tzeltal",
["tzj"] = "Tz'utujil",
["tzl"] = "Talossan",
["tzm"] = "Central Atlas Tamazight",
["tzn"] = "Tugun",
["tzo"] = "โซตซิล",
["tzx"] = "Tabriak",
["uam"] = "Uamué",
["uan"] = "Kuan",
["uar"] = "Tairuma",
["uba"] = "Ubang",
["ubi"] = "Ubi",
["ubl"] = "Buhi'non Bikol",
["ubr"] = "Ubir",
["ubu"] = "Umbu-Ungu",
["uby"] = "Ubykh",
["uda"] = "Uda",
["ude"] = "Udihe",
["udg"] = "Muduga",
["udi"] = "อูดี",
["udj"] = "Ujir",
["udl"] = "Uldeme",
["udm"] = "อุดมูร์ต",
["udu"] = "Uduk",
["ues"] = "Kioko",
["ufi"] = "Ufim",
["ug"] = "อุยกูร์",
["uga"] = "ยูการิต",
["ugb"] = "Kuku-Ugbanh",
["uge"] = "Ughele",
["ugn"] = "Ugandan Sign Language",
["ugo"] = "กฺ๋อง",
["ugy"] = "Uruguayan Sign Language",
["uha"] = "Uhami",
["uhn"] = "Damal",
["uis"] = "Uisai",
["uiv"] = "Iyive",
["uji"] = "Tanjijili",
["uk"] = "ยูเครน",
["uka"] = "Kaburi",
["ukg"] = "Ukuriguma",
["ukh"] = "Ukhwejo",
["ukk"] = "Muak Sa-aak",
["ukl"] = "Ukrainian Sign Language",
["ukp"] = "Ukpe-Bayobiri",
["ukq"] = "Ukwa",
["uks"] = "Kaapor Sign Language",
["uku"] = "Ukue",
["ukw"] = "Ukwuani-Aboh-Ndoni",
["uky"] = "Kuuk Yak",
["ula"] = "Fungwa",
["ulb"] = "Olukumi",
["ulc"] = "Ulch",
["ule"] = "Lule",
["ulf"] = "Afra",
["uli"] = "Ulithian",
["ulk"] = "Meriam",
["ull"] = "Ullatan",
["ulm"] = "Ulumanda'",
["uln"] = "อุนเซอร์ด็อยทช์",
["ulu"] = "Uma' Lung",
["ulw"] = "Ulwa",
["uma"] = "Umatilla",
["umb"] = "Umbundu",
["umc"] = "Marrucinian",
["umd"] = "Umbindhamu",
["umg"] = "Umbuygamu",
["umi"] = "Ukit",
["umm"] = "Umon",
["umn"] = "Makyan Naga",
["umo"] = "Umotína",
["ump"] = "Umpila",
["umr"] = "Umbugarla",
["ums"] = "Pendau",
["umu"] = "Munsee",
["una"] = "North Watut",
["und"] = "Undetermined",
["une"] = "Uneme",
["ung"] = "Ngarinyin",
["unk"] = "Enawené-Nawé",
["unm"] = "Unami",
["unn"] = "Kurnai",
["unr"] = "Mundari",
["unu"] = "Unubahe",
["unx"] = "Munda",
["unz"] = "Unde Kaili",
["uok"] = "Uokha",
["uon"] = "Kulon",
["upi"] = "Umeda",
["upv"] = "Northeast Malakula",
["ur"] = "อูรดู",
["ura"] = "Urarina",
["urb"] = "Urubú-Kaapor",
["urc"] = "Urningangg",
["ure"] = "Uru",
["urf"] = "Uradhi",
["urg"] = "Urigina",
["urh"] = "Urhobo",
["uri"] = "Urim",
["urj-fin-pro"] = "ฟินนิกดั้งเดิม",
["urj-koo"] = "Old Komi",
["urj-kuk"] = "Kukkuzi",
["urj-kya"] = "Komi-Yazva",
["urj-mdv-pro"] = "Proto-Mordvinic",
["urj-prm-pro"] = "เปอร์มิกดั้งเดิม",
["urj-pro"] = "ยูราลิกดั้งเดิม",
["urj-ugr-pro"] = "ยูกริกดั้งเดิม",
["urk"] = "อูรักลาโวยจ",
["url"] = "Urali",
["urm"] = "Urapmin",
["urn"] = "Uruangnirin",
["uro"] = "Ura (New Guinea)",
["urp"] = "Uru-Pa-In",
["urr"] = "Löyöp",
["urt"] = "Urat",
["uru"] = "Urumi",
["urv"] = "Uruava",
["urw"] = "Sop",
["urx"] = "Urimo",
["ury"] = "Orya",
["urz"] = "Uru-Eu-Wau-Wau",
["usa"] = "Usarufa",
["ush"] = "Ushojo",
["usi"] = "Usui",
["usk"] = "Usaghade",
["usp"] = "Uspanteco",
["uss"] = "Saare",
["usu"] = "Uya",
["uta"] = "Otank",
["ute"] = "Ute",
["uth"] = "Hun",
["utp"] = "Aba",
["utr"] = "Etulo",
["utu"] = "Utu",
["uum"] = "Urum",
["uun"] = "Kulon-Pazeh",
["uur"] = "Ura (Vanuatu)",
["uuu"] = "U",
["uve"] = "West Uvean",
["uvh"] = "Uri",
["uvl"] = "Lote",
["uwa"] = "Kuku-Uwanh",
["uya"] = "Doko-Uyanga",
["uz"] = "อุซเบก",
["vaa"] = "Vaagri Booli",
["vae"] = "Vale",
["vag"] = "Vagla",
["vah"] = "Varhadi",
["vai"] = "ไว",
["vaj"] = "Sekele",
["val"] = "Vehes",
["vam"] = "Vanimo",
["van"] = "Valman",
["vao"] = "Vao",
["vap"] = "Vaiphei",
["var"] = "Huarijio",
["vas"] = "Vasavi",
["vau"] = "Vanuma",
["vav"] = "Varli",
["vay"] = "Vayu",
["vbb"] = "Southeast Babar",
["vbk"] = "Southwestern Bontoc",
["ve"] = "เวนดา",
["vec"] = "เวเนโต",
["ved"] = "Veddah",
["vem"] = "Vemgo-Mabas",
["veo"] = "Ventureño",
["vep"] = "เวปส์",
["ver"] = "Mom Jango",
["vgr"] = "Vaghri",
["vgt"] = "Flemish Sign Language",
["vi"] = "เวียดนาม",
["vic"] = "Virgin Islands Creole",
["vid"] = "Vidunda",
["vif"] = "Vili",
["vig"] = "Viemo",
["vil"] = "Vilela",
["vis"] = "Vishavan",
["vit"] = "Viti",
["viv"] = "Iduna",
["vjk"] = "Bajjika",
["vka"] = "Kariyarra",
["vki"] = "Ija-Zuba",
["vkj"] = "Kujarge",
["vkk"] = "Kaur",
["vkl"] = "Kulisusu",
["vkm"] = "Kamakan",
["vko"] = "Kodeoha",
["vkp"] = "Korlai Creole Portuguese",
["vkt"] = "Tenggarong Kutai Malay",
["vku"] = "Kurrama",
["vlp"] = "Valpei",
["vls"] = "West Flemish",
["vma"] = "Martuthunira",
["vmb"] = "Mbabaram",
["vmc"] = "Juxtlahuaca Mixtec",
["vmd"] = "Mudu Koraga",
["vme"] = "East Masela",
["vmf"] = "ฟรังโกเนียตะวันออก",
["vmg"] = "Minigir",
["vmh"] = "Maraghei",
["vmi"] = "Miwa",
["vmj"] = "Ixtayutla Mixtec",
["vmk"] = "Makhuwa-Shirima",
["vml"] = "Malgana",
["vmm"] = "Mitlatongo Mixtec",
["vmp"] = "Soyaltepec Mazatec",
["vmq"] = "Soyaltepec Mixtec",
["vmr"] = "Marenje",
["vmu"] = "Muluridyi",
["vmv"] = "Valley Maidu",
["vmw"] = "Makhuwa",
["vmx"] = "Tamazola Mixtec",
["vmy"] = "Ayautla Mazatec",
["vmz"] = "Mazatlán Mazatec",
["vnk"] = "Lovono",
["vnm"] = "Neve'ei",
["vnp"] = "Vunapu",
["vo"] = "โวลาปุก",
["vor"] = "Voro",
["vot"] = "โวต",
["vra"] = "Vera'a",
["vro"] = "เวอโร",
["vrs"] = "Varisi",
["vrt"] = "Burmbar",
["vsi"] = "Moldova Sign Language",
["vsl"] = "Venezuelan Sign Language",
["vsv"] = "Valencian Sign Language",
["vto"] = "Vitou",
["vum"] = "Vumbu",
["vun"] = "Vunjo",
["vut"] = "Vute",
["vwa"] = "Awa (China)",
["wa"] = "วัลลูน",
["waa"] = "Walla Walla",
["wab"] = "Wab",
["wac"] = "Wasco-Wishram",
["wad"] = "Wandamen",
["waf"] = "Wakoná",
["wag"] = "Wa'ema",
["wah"] = "Watubela",
["waj"] = "Waffa",
["wal"] = "Wolaytta",
["wam"] = "Massachusett",
["wan"] = "Wan",
["wao"] = "Wappo",
["wap"] = "Wapishana",
["waq"] = "Wageman",
["war"] = "วาไร",
["was"] = "Washo",
["wat"] = "Kaninuwa",
["wau"] = "Wauja",
["wav"] = "Waka",
["waw"] = "Waiwai",
["wax"] = "Watam",
["way"] = "Wayana",
["waz"] = "Wampur",
["wba"] = "วาราโอ",
["wbb"] = "Wabo",
["wbe"] = "Waritai",
["wbf"] = "Wara",
["wbh"] = "Wanda",
["wbi"] = "Wanji",
["wbj"] = "Alagwa",
["wbk"] = "Waigali",
["wbl"] = "Wakhi",
["wbm"] = "Wa",
["wbp"] = "Warlpiri",
["wbq"] = "Waddar",
["wbr"] = "Wagdi",
["wbt"] = "Wanman",
["wbv"] = "Wajarri",
["wbw"] = "Woi",
["wca"] = "Yanomam",
["wci"] = "Waci Gbe",
["wdd"] = "Wandji",
["wdg"] = "Wadaginam",
["wdj"] = "Wadjiginy",
["wdt"] = "Wendat",
["wdu"] = "Wadjigu",
["wdy"] = "Wadjabangayi",
["wea"] = "Wewaw",
["wec"] = "Wè Western",
["wed"] = "Wedau",
["weh"] = "Weh",
["wei"] = "Kiunum",
["wem"] = "Weme Gbe",
["weo"] = "Wemale",
["wer"] = "Weri",
["wes"] = "Cameroon Pidgin",
["wet"] = "Perai",
["weu"] = "Welaung",
["wew"] = "Weyewa",
["wfg"] = "Yafi",
["wga"] = "Wagaya",
["wgb"] = "Wagawaga",
["wgg"] = "Wangganguru",
["wgi"] = "Wahgi",
["wgo"] = "Waigeo",
["wgu"] = "Wirangu",
["wgy"] = "Warrgamay",
["wha"] = "Manusela",
["whg"] = "North Wahgi",
["whk"] = "Wahau Kenyah",
["whu"] = "Wahau Kayan",
["wib"] = "Southern Toussian",
["wic"] = "Wichita",
["wie"] = "Wik-Epa",
["wif"] = "Wik-Keyangan",
["wig"] = "Wik-Ngathana",
["wih"] = "Wik-Me'anha",
["wii"] = "Minidien",
["wij"] = "Wik-Iiyanh",
["wik"] = "Wikalkan",
["wil"] = "Wilawila",
["wim"] = "Wik-Mungkan",
["win"] = "วินเนอเบโก",
["wir"] = "Wiraféd",
["wiu"] = "Wiru",
["wiv"] = "Muduapa",
["wiy"] = "Wiyot",
["wja"] = "Waja",
["wji"] = "Warji",
["wka"] = "Kw'adza",
["wkb"] = "Kumbaran",
["wkd"] = "Mo",
["wkl"] = "Kalanadi",
["wku"] = "Kunduvadi",
["wkw"] = "Wakawaka",
["wky"] = "Wangkayutyuru",
["wla"] = "Walio",
["wlc"] = "Mwali Comorian",
["wle"] = "Wolane",
["wlg"] = "Kunbarlang",
["wli"] = "Waioli",
["wlk"] = "Wailaki",
["wll"] = "Wali (Sudan)",
["wlm"] = "เวลส์กลาง",
["wlo"] = "Wolio",
["wlr"] = "Wailapa",
["wls"] = "Wallisian",
["wlu"] = "Wuliwuli",
["wlv"] = "Wichí Lhamtés Vejoz",
["wlw"] = "Walak",
["wlx"] = "Wali (Ghana)",
["wly"] = "Waling",
["wmb"] = "Wambaya",
["wmc"] = "Wamas",
["wmd"] = "Mamaindé",
["wme"] = "Wambule",
["wmh"] = "Waima'a",
["wmi"] = "Wamin",
["wmm"] = "Maiwa (Indonesia)",
["wmn"] = "Waamwang",
["wmo"] = "Wam",
["wms"] = "Wambon",
["wmt"] = "Walmajarri",
["wmw"] = "มวานี",
["wmx"] = "Womo",
["wnb"] = "Wanambre",
["wnc"] = "Wantoat",
["wnd"] = "Wandarang",
["wne"] = "Waneci",
["wng"] = "Wanggom",
["wni"] = "Ndzwani Comorian",
["wnk"] = "Wanukaka",
["wnm"] = "Wanggamala",
["wno"] = "Wano",
["wnp"] = "Wanap",
["wnu"] = "Usan",
["wnw"] = "Wintu",
["wny"] = "Wanyi",
["wo"] = "โวลอฟ",
["woa"] = "Tyaraity",
["wob"] = "Wobé",
["woc"] = "Wogeo",
["wod"] = "Wolani",
["woe"] = "Woleaian",
["wog"] = "Wogamusin",
["woi"] = "Kamang",
["wok"] = "Longto",
["wom"] = "Perema",
["won"] = "Wongo",
["woo"] = "Manombai",
["wor"] = "Woria",
["wos"] = "Hanga Hundi",
["wow"] = "Wawonii",
["woy"] = "Weyto",
["wpc"] = "Wirö",
["wra"] = "Warapu",
["wrb"] = "Warluwara",
["wrg"] = "Warungu",
["wrh"] = "Wiradjuri",
["wri"] = "Wariyangga",
["wrk"] = "Garawa",
["wrl"] = "Warlmanpa",
["wrm"] = "Warumungu",
["wrn"] = "Warnang",
["wro"] = "Worora",
["wrp"] = "Waropen",
["wrr"] = "Wardaman",
["wrs"] = "Waris",
["wru"] = "Waru",
["wrv"] = "Waruna",
["wrw"] = "Gugu Warra",
["wrx"] = "Wae Rana",
["wrz"] = "Warray",
["wsa"] = "Warembori",
["wsi"] = "Wusi",
["wsk"] = "Waskia",
["wsr"] = "Owenia",
["wsu"] = "Wasu",
["wsv"] = "Wotapuri-Katarqalai",
["wtf"] = "วาตีวา",
["wth"] = "Wathaurong",
["wti"] = "Berta",
["wtk"] = "Watakataui",
["wtm"] = "Mewati",
["wtw"] = "Wotu",
["wua"] = "Wikngenchera",
["wub"] = "Wunambal",
["wud"] = "Wudu",
["wuh"] = "Wutunhua",
["wul"] = "Silimo",
["wum"] = "Wumbvu",
["wun"] = "Bungu",
["wur"] = "Wurrugu",
["wut"] = "Wutung",
["wuu"] = "อู๋",
["wuv"] = "Wuvulu-Aua",
["wux"] = "Wulna",
["wuy"] = "Wauyai",
["wwa"] = "Waama",
["wwo"] = "Dorig",
["wwr"] = "Warrwa",
["www"] = "Wawa",
["wxa"] = "Waxiang",
["wxw"] = "Wardandi",
["wya"] = "Wyandot",
["wyb"] = "Ngiyambaa",
["wyi"] = "Woiwurrung",
["wym"] = "วีลามอวิตแซ",
["wyr"] = "Wayoró",
["wyy"] = "Western Fijian",
["xaa"] = "อาหรับแบบอันดะลุส",
["xab"] = "Sambe",
["xac"] = "Kachari",
["xad"] = "Adai",
["xae"] = "Aequian",
["xag"] = "Aghwan",
["xai"] = "Kaimbé",
["xaj"] = "Ararandewára",
["xak"] = "Maku",
["xal"] = "คัลมึค",
["xam"] = "ǀXam",
["xan"] = "Xamtanga",
["xao"] = "Khao",
["xap"] = "Apalachee",
["xaq"] = "Aquitanian",
["xar"] = "Karami",
["xas"] = "Kamassian",
["xat"] = "Katawixi",
["xau"] = "Kauwera",
["xav"] = "Xavante",
["xaw"] = "Kawaiisu",
["xay"] = "Kayan Mahakam",
["xbb"] = "Lower Burdekin",
["xbc"] = "แบกเตรีย",
["xbd"] = "Bindal",
["xbe"] = "Bigambal",
["xbg"] = "Bunganditj",
["xbi"] = "Kombio",
["xbj"] = "Birrpayi",
["xbm"] = "เบรอตงกลาง",
["xbn"] = "Kenaboi",
["xbo"] = "Bulgar",
["xbp"] = "Bibbulman",
["xbr"] = "กัมเบอรา",
["xbw"] = "Kambiwá",
["xby"] = "Butchulla",
["xcb"] = "Cumbric",
["xcc"] = "Camunic",
["xce"] = "Celtiberian",
["xch"] = "Chemakum",
["xcl"] = "อาร์มีเนียเก่า",
["xcm"] = "Comecrudo",
["xcn"] = "Cotoname",
["xco"] = "Khwarezmian",
["xcr"] = "Carian",
["xct"] = "ทิเบตคลาสสิก",
["xcu"] = "Curonian",
["xcv"] = "Chuvan",
["xcw"] = "Coahuilteco",
["xcy"] = "Cayuse",
["xda"] = "Darkinjung",
["xdc"] = "Dacian",
["xdk"] = "Dharug",
["xdm"] = "เอโดม",
["xdq"] = "Kaitag",
["xdy"] = "Malayic Dayak",
["xeb"] = "Eblaite",
["xed"] = "Hdi",
["xeg"] = "ǁXegwi",
["xel"] = "Kelo",
["xem"] = "Kembayan",
["xep"] = "Epi-Olmec",
["xer"] = "Xerénte",
["xes"] = "Kesawai",
["xet"] = "Xetá",
["xeu"] = "Keoru-Ahia",
["xfa"] = "ฟาลิสกุส",
["xga"] = "Galatian",
["xgb"] = "Gbin",
["xgd"] = "Gudang",
["xgf"] = "Gabrielino-Fernandeño",
["xgg"] = "Goreng",
["xgi"] = "Garingbal",
["xgl"] = "Galindian",
["xgm"] = "Darumbal",
["xgn-pro"] = "มองโกลิกดั้งเดิม",
["xgr"] = "Garza",
["xgu"] = "Unggumi",
["xgw"] = "Guwa",
["xh"] = "โคซา",
["xha"] = "Harami",
["xhc"] = "Hunnic",
["xhd"] = "Hadrami",
["xhe"] = "Khetrani",
["xhm"] = "เขมรกลาง",
["xhr"] = "Hernican",
["xht"] = "Hattic",
["xhu"] = "ฮูร์เรีย",
["xhv"] = "Khua",
["xib"] = "Iberian",
["xii"] = "Xiri",
["xil"] = "Illyrian",
["xin"] = "Xinca",
["xir"] = "Xiriâna",
["xis"] = "Kisan",
["xiv"] = "Harappan",
["xiy"] = "Xipaya",
["xjb"] = "Minjungbal",
["xka"] = "Kalkoti",
["xkb"] = "Manigri-Kambolé Ede Nago",
["xkc"] = "Khoini",
["xkd"] = "Mendalam Kayan",
["xke"] = "Kereho",
["xkf"] = "Khengkha",
["xkg"] = "Kagoro",
["xki"] = "Kenyan Sign Language",
["xkj"] = "Kajali",
["xkk"] = "Kaco'",
["xkl"] = "Bakung",
["xkn"] = "Kayan River Kayan",
["xko"] = "Kiorr",
["xkp"] = "Kabatei",
["xkq"] = "Koroni",
["xkr"] = "Xakriabá",
["xks"] = "Kumbewaha",
["xkt"] = "Kantosi",
["xku"] = "Kaamba",
["xkv"] = "Kgalagadi",
["xkw"] = "Kembra",
["xkx"] = "Karore",
["xky"] = "Uma' Lasan",
["xkz"] = "Kurtöp",
["xla"] = "Kamula",
["xlb"] = "Loup B",
["xlc"] = "Lycian",
["xld"] = "Lydian",
["xle"] = "Lemnian",
["xlg"] = "Ancient Ligurian",
["xli"] = "Liburnian",
["xln"] = "Alanic",
["xlo"] = "Loup A",
["xlp"] = "Lepontic",
["xls"] = "Lusitanian",
["xlu"] = "Luwian",
["xly"] = "Elymian",
["xmb"] = "Mbonga",
["xmc"] = "Makhuwa-Marrevone",
["xmd"] = "Mbudum",
["xme-ker"] = "Kermanic",
["xme-kls"] = "Kalasuri",
["xme-klt"] = "Kilit",
["xme-mid"] = "Middle Median",
["xme-old"] = "Old Median",
["xme-ott"] = "Old Tati",
["xme-taf"] = "Tafreshi",
["xme-ttc-pro"] = "Proto-Tatic",
["xmf"] = "มิงเกรเลีย",
["xmg"] = "Mengaka",
["xmh"] = "Kugu-Muminh",
["xmj"] = "Majera",
["xmk"] = "Ancient Macedonian",
["xml"] = "Malaysian Sign Language",
["xmm"] = "มลายูแบบมานาโด",
["xmo"] = "Morerebi",
["xmp"] = "Kuku-Mu'inh",
["xmq"] = "Kuku-Mangk",
["xmr"] = "Meroitic",
["xms"] = "Moroccan Sign Language",
["xmt"] = "Matbat",
["xmu"] = "Kamu",
["xmx"] = "Maden",
["xmy"] = "Mayaguduna",
["xmz"] = "Mori Bawah",
["xna"] = "Ancient North Arabian",
["xnb"] = "Kanakanabu",
["xnd-pro"] = "Proto-Na-Dene",
["xng"] = "มองโกเลียกลาง",
["xnh"] = "Kuanhua",
["xni"] = "Ngarigu",
["xnk"] = "Nganakarti",
["xnn"] = "กันกานาอือเหนือ",
["xnr"] = "Kangri",
["xns"] = "Kanashi",
["xnt"] = "Narragansett",
["xnu"] = "Nukunul",
["xny"] = "Nyiyaparli",
["xoc"] = "O'chi'chi'",
["xod"] = "Kokoda",
["xog"] = "Soga",
["xoi"] = "Kominimung",
["xok"] = "Xokleng",
["xom"] = "Komo",
["xon"] = "Konkomba",
["xoo"] = "Xukurú",
["xop"] = "Kopar",
["xor"] = "Korubo",
["xow"] = "Kowaki",
["xpa"] = "Pirriya",
["xpb"] = "Pyemmairre",
["xpc"] = "Pecheneg",
["xpd"] = "Paredarerme",
["xpe"] = "Liberia Kpelle",
["xpf"] = "Southeast Tasmanian",
["xpg"] = "Phrygian",
["xph"] = "Tyerrernotepanner",
["xpi"] = "Pictish",
["xpj"] = "Mpalitjanh",
["xpk"] = "Kulina",
["xpl"] = "Port Sorell",
["xpm"] = "Pumpokol",
["xpn"] = "Kapinawá",
["xpo"] = "Pochutec",
["xpp"] = "Puyo-Paekche",
["xpq"] = "Mohegan-Pequot",
["xpr"] = "พาร์เทีย",
["xps"] = "Pisidian",
["xpu"] = "Punic",
["xpv"] = "Tommeginne",
["xpw"] = "Peerapper",
["xpx"] = "Toogee",
["xpy"] = "Buyeo",
["xpz"] = "Bruny Island",
["xqa"] = "Karakhanid",
["xqt"] = "Qatabanian",
["xra"] = "Krahô",
["xrb"] = "Eastern Karaboro",
["xrd"] = "Gundungurra",
["xre"] = "Kreye",
["xrg"] = "Minang",
["xri"] = "Krikati-Timbira",
["xrm"] = "Armazic",
["xrn"] = "Arin",
["xrq"] = "Karranga",
["xrr"] = "Raetic",
["xrt"] = "Aranama-Tamique",
["xru"] = "Marriammu",
["xrw"] = "Karawa",
["xsa"] = "Sabaean",
["xsb"] = "ซัมบัล",
["xsc-pro"] = "Proto-Scythian",
["xsc-sak-pro"] = "Proto-Saka",
["xsc-sar-pro"] = "Proto-Sarmatian",
["xsc-skw-pro"] = "Proto-Saka-Wakhi",
["xsd"] = "Sidetic",
["xse"] = "Sempan",
["xsh"] = "Shamang",
["xsi"] = "Sio",
["xsj"] = "Subi",
["xsl"] = "South Slavey",
["xsm"] = "Kasem",
["xsn"] = "Sanga (Nigeria)",
["xso"] = "Solano",
["xsp"] = "Silopi",
["xsq"] = "Makhuwa-Saka",
["xsr"] = "เศรปา",
["xss"] = "Assan",
["xsu"] = "Sanumá",
["xsv"] = "ซูโดเวีย",
["xsy"] = "Saisiyat",
["xta"] = "Alcozauca Mixtec",
["xtb"] = "Chazumba Mixtec",
["xtc"] = "Kadugli",
["xtd"] = "Diuxi-Tilantongo Mixtec",
["xte"] = "Ketengban",
["xth"] = "Yitha Yitha",
["xti"] = "Sinicahua Mixtec",
["xtj"] = "San Juan Teita Mixtec",
["xtl"] = "Tijaltepec Mixtec",
["xtm"] = "Magdalena Peñasco Mixtec",
["xtn"] = "Northern Tlaxiaco Mixtec",
["xto"] = "โทแคเรียนเอ",
["xtp"] = "San Miguel Piedras Mixtec",
["xtq"] = "ตุมซุก",
["xtr"] = "Early Tripuri",
["xts"] = "Sindihui Mixtec",
["xtt"] = "Tacahua Mixtec",
["xtu"] = "Cuyamecalco Mixtec",
["xtv"] = "Thawa",
["xtw"] = "Tawandê",
["xty"] = "Yoloxochitl Mixtec",
["xua"] = "Alu Kurumba",
["xub"] = "Betta Kurumba",
["xud"] = "Umiida",
["xug"] = "คูนิงามิ",
["xuj"] = "Jennu Kurumba",
["xul"] = "Ngunawal",
["xum"] = "อุมเบรีย",
["xun"] = "Unggaranggu",
["xuo"] = "Kuo",
["xup"] = "Upper Umpqua",
["xur"] = "Urartian",
["xut"] = "Kuthant",
["xuu"] = "Khwe",
["xve"] = "Venetic",
["xvn"] = "วันดัล",
["xvo"] = "Volscian",
["xvs"] = "Vestinian",
["xwa"] = "Kwaza",
["xwc"] = "Woccon",
["xwd"] = "Wadi Wadi",
["xwe"] = "Xwela Gbe",
["xwg"] = "Kwegu",
["xwj"] = "Wajuk",
["xwk"] = "Wangkumara",
["xwl"] = "Western Xwla Gbe",
["xwo"] = "Written Oirat",
["xwr"] = "Kwerba Mamberamo",
["xww"] = "Wemba-Wemba",
["xxb"] = "Boro",
["xxk"] = "Ke'o",
["xxm"] = "Minkin",
["xxr"] = "Koropó",
["xxt"] = "Tambora",
["xya"] = "Yaygir",
["xyb"] = "Yandjibara",
["xyl"] = "Yalakalore",
["xyt"] = "Mayi-Thakurti",
["xyy"] = "Yorta Yorta",
["xzh"] = "Zhang-Zhung",
["xzm"] = "Semigallian",
["xzp"] = "Ancient Zapotec",
["yaa"] = "Yaminahua",
["yab"] = "Yuhup",
["yac"] = "Pass Valley Yali",
["yad"] = "Yagua",
["yae"] = "Pumé",
["yaf"] = "Yaka",
["yag"] = "ยามานา",
["yah"] = "Yazghulami",
["yai"] = "Yaghnobi",
["yaj"] = "Banda-Yangere",
["yak"] = "Yakima",
["yal"] = "Yalunka",
["yam"] = "Yamba",
["yan"] = "Mayangna",
["yao"] = "Yao",
["yap"] = "Yapese",
["yaq"] = "Yaqui",
["yar"] = "Yabarana",
["yas"] = "Gunu",
["yat"] = "Yambeta",
["yau"] = "Yuwana",
["yav"] = "Yangben",
["yaw"] = "Yawalapití",
["yay"] = "Agwagwune",
["yaz"] = "Lokaa",
["yba"] = "Yala",
["ybb"] = "Yemba",
["ybe"] = "Western Yugur",
["ybh"] = "Yakkha",
["ybi"] = "Yamphu",
["ybj"] = "Hasha",
["ybk"] = "Bokha",
["ybl"] = "Yukuben",
["ybm"] = "Yaben",
["ybn"] = "Yabaâna",
["ybo"] = "Yabong",
["ybx"] = "Yawiyo",
["yby"] = "Yaweyuha",
["ych"] = "Chesu",
["ycl"] = "Lolopo",
["ycn"] = "Yucuna",
["ycp"] = "Chepya",
["ycr"] = "Yilan Creole",
["yda"] = "Yanda",
["yde"] = "Yangum Dey",
["ydg"] = "Yidgha",
["ydk"] = "Yoidik",
["yea"] = "Ravula",
["yec"] = "Yenish",
["yee"] = "Yimas",
["yei"] = "Yeni",
["yej"] = "Yevanic",
["yen"] = "Yendang",
["yer"] = "Tarok",
["yes"] = "Yeskwa",
["yet"] = "Yetfa",
["yeu"] = "Yerukula",
["yev"] = "Yapunda",
["yey"] = "Yeyi",
["ygi"] = "Yiningayi",
["ygl"] = "Yangum Gel",
["ygm"] = "Yagomi",
["ygp"] = "Gepo",
["ygr"] = "Yagaria",
["ygs"] = "Yolngu Sign Language",
["ygu"] = "Yugul",
["ygw"] = "Yagwoia",
["yha"] = "Baha",
["yhl"] = "Hlepho Phowa",
["yi"] = "ยิดดิช",
["yia"] = "Yinggarda",
["yif"] = "Ache",
["yig"] = "Wusa",
["yii"] = "Yidiny",
["yij"] = "Yindjibarndi",
["yik"] = "Dongshanba Lalo",
["yil"] = "Yindjilandji",
["yim"] = "Yimchungru Naga",
["yin"] = "Yinchia",
["yip"] = "Pholo",
["yiq"] = "Micha",
["yir"] = "North Awyu",
["yis"] = "Yis",
["yit"] = "Eastern Lalu",
["yiu"] = "Lope",
["yiv"] = "Northern Nisu",
["yix"] = "Axi",
["yiy"] = "Yir-Yoront",
["yiz"] = "Azhe",
["yka"] = "ยากัน",
["ykg"] = "Northern Yukaghir",
["ykh"] = "Khamnigan Mongol",
["yki"] = "Yoke",
["ykk"] = "Yakaikeke",
["ykl"] = "Khlula",
["ykm"] = "Kap",
["ykn"] = "Kua-nsi",
["yko"] = "Yasa",
["ykr"] = "Yekora",
["ykt"] = "Kathu",
["yku"] = "Kuamasi",
["yky"] = "Yakoma",
["yla"] = "Yaul",
["ylb"] = "Yaleba",
["yle"] = "Yele",
["ylg"] = "Yelogu",
["yli"] = "Angguruk Yali",
["yll"] = "Yil",
["ylm"] = "Limi",
["yln"] = "Langnian Buyang",
["ylo"] = "Naruo",
["ylr"] = "Yalarnnga",
["ylu"] = "Aribwaung",
["yly"] = "Nyelâyu",
["ymb"] = "Yambes",
["ymc"] = "Southern Muji",
["ymd"] = "Muda",
["yme"] = "Yameo",
["ymg"] = "Yamongeri",
["ymh"] = "Mili",
["ymi"] = "Moji",
["ymk"] = "Makwe",
["yml"] = "Iamalele",
["ymm"] = "Maay",
["ymn"] = "Sunum",
["ymo"] = "Yangum Mon",
["ymp"] = "Yamap",
["ymq"] = "Qila Muji",
["ymr"] = "Malasar",
["yms"] = "Mysian",
["ymx"] = "Northern Muji",
["ymz"] = "Muzi",
["yna"] = "Aluo",
["ynb"] = "Yamben",
["ynd"] = "Yandruwandha",
["yne"] = "Lang'e",
["yng"] = "Yango",
["ynk"] = "Naukanski",
["ynl"] = "Yangulam",
["ynn"] = "Yana",
["yno"] = "ยอง",
["yns"] = "Yansi",
["ynu"] = "Yahuna",
["yo"] = "โยรูบา",
["yob"] = "Yoba",
["yog"] = "โยกัด",
["yoi"] = "โยนางูนิ",
["yok-bvy"] = "Buena Vista Yokuts",
["yok-dly"] = "Delta Yokuts",
["yok-gsy"] = "Gashowu Yokuts",
["yok-kry"] = "Kings River Yokuts",
["yok-nvy"] = "Northern Valley Yokuts",
["yok-ply"] = "Palewyami Yokuts",
["yok-svy"] = "Southern Valley Yokuts",
["yok-tky"] = "Tule-Kaweah Yokuts",
["yol"] = "ยอลอ",
["yom"] = "Yombe",
["yon"] = "Yongkom",
["yox"] = "โยรง",
["yoy"] = "Yoy",
["ypa"] = "Phala",
["ypb"] = "Labo Phowa",
["ypg"] = "Phola",
["yph"] = "Phupha",
["ypk-pro"] = "Proto-Yupik",
["ypm"] = "Phuma",
["ypn"] = "Ani Phowa",
["ypo"] = "Alo Phola",
["ypp"] = "Phupa",
["ypz"] = "Phuza",
["yra"] = "Yerakai",
["yrb"] = "Yareba",
["yre"] = "Yaouré",
["yri"] = "Yarí",
["yrk-for"] = "Forest Nenets",
["yrk-tun"] = "Tundra Nenets",
["yrl"] = "Nheengatu",
["yrn"] = "Yerong",
["yro"] = "Ỹaroamë",
["yrw"] = "Yarawata",
["yry"] = "Yarluyandi",
["ysc"] = "Jassic",
["ysd"] = "Samatao",
["ysg"] = "Sonaga",
["ysl"] = "Yugoslavian Sign Language",
["ysn"] = "Sani",
["yso"] = "Nisi",
["ysp"] = "Southern Lolopo",
["ysr"] = "Sirenik",
["yss"] = "Yessan-Mayo",
["ysy"] = "Sanie",
["yta"] = "Talu",
["ytl"] = "Toloza",
["ytp"] = "Thopho",
["ytw"] = "Yout Wam",
["yty"] = "Yatay",
["yua"] = "Yucatec Maya",
["yub"] = "Yugambal",
["yuc"] = "Yuchi",
["yue"] = "กวางตุ้ง",
["yuf"] = "Havasupai-Walapai-Yavapai",
["yug"] = "Yug",
["yui"] = "Yurutí",
["yuj"] = "Karkar-Yuri",
["yuk"] = "Yuki",
["yul"] = "Yulu",
["yum"] = "Yuma",
["yun"] = "Bena",
["yup"] = "Yukpa",
["yuq"] = "Yuqui",
["yur"] = "Yurok",
["yut"] = "Yopno",
["yuw"] = "Finisterre Yau",
["yux"] = "Southern Yukaghir",
["yuy"] = "East Yugur",
["yuz"] = "Yuracare",
["yva"] = "Yawa",
["yvt"] = "Yavitero",
["ywa"] = "Kalou",
["ywg"] = "Yinhawangka",
["ywl"] = "Western Lalu",
["ywn"] = "Yawanawa",
["ywq"] = "Nasu",
["ywr"] = "Yawuru",
["ywt"] = "Xishanba Lalo",
["ywu"] = "Wumeng",
["yww"] = "Yawarawarga",
["yxa"] = "Mayawali",
["yxg"] = "Yagara",
["yxl"] = "Yarli",
["yxm"] = "Yinwum",
["yxu"] = "Yuyu",
["yxy"] = "Yabula Yabula",
["yyu"] = "Torricelli Yau",
["yyz"] = "Ayizi",
["yzg"] = "E'ma Buyang",
["yzk"] = "Zokhuo",
["za"] = "จ้วง",
["zaa"] = "Sierra de Juárez Zapotec",
["zab"] = "San Juan Guelavía Zapotec",
["zac"] = "Ocotlán Zapotec",
["zad"] = "Cajonos Zapotec",
["zae"] = "Yareni Zapotec",
["zaf"] = "Ayoquesco Zapotec",
["zag"] = "Zaghawa",
["zah"] = "Zangwal",
["zai"] = "Isthmus Zapotec",
["zaj"] = "Zaramo",
["zak"] = "Zanaki",
["zal"] = "Zauzou",
["zam"] = "Central Mahuatlán Zapotec",
["zao"] = "Ozolotepec Zapotec",
["zap"] = "Zapotec",
["zaq"] = "Aloápam Zapotec",
["zar"] = "Rincón Zapotec",
["zas"] = "Santo Domingo Albarradas Zapotec",
["zat"] = "Tabaa Zapotec",
["zau"] = "ซันสการ์",
["zav"] = "Yatzachi Zapotec",
["zaw"] = "Mitla Zapotec",
["zax"] = "Xadani Zapotec",
["zay"] = "Zayse-Zergulla",
["zaz"] = "Zari",
["zbt"] = "Batui",
["zca"] = "Coatecas Altas Zapotec",
["zdj"] = "Ngazidja Comorian",
["zea"] = "Zealandic",
["zeg"] = "Zenag",
["zen"] = "Zenaga",
["zga"] = "Kinga",
["zgh"] = "Moroccan Amazigh",
["zgr"] = "Magori",
["zh"] = "จีน",
["zhb"] = "Zhaba",
["zhi"] = "Zhire",
["zhn"] = "จ้วงแบบหนง",
["zhw"] = "Zhoa",
["zhx-min-pro"] = "หมิ่นดั้งเดิม",
["zhx-sht"] = "Shaozhou Tuhua",
["zhx-sic"] = "เสฉวน",
["zhx-tai"] = "ห่อยซัน",
["zia"] = "Zia",
["zib"] = "Zimbabwe Sign Language",
["zik"] = "Zimakani",
["zil"] = "Zialo",
["zim"] = "Mesme",
["zin"] = "Zinza",
["zir"] = "Ziriya",
["ziw"] = "Zigula",
["ziz"] = "Zizilivakan",
["zka"] = "Kaimbulawa",
["zkb"] = "Koibal",
["zkd"] = "กะดู",
["zkg"] = "Goguryeo",
["zkh"] = "Khorezmian Turkic",
["zkk"] = "Karankawa",
["zko"] = "Kott",
["zkp"] = "São Paulo Kaingáng",
["zkr"] = "Zakhring",
["zkt"] = "คีตัน",
["zku"] = "Kaurna",
["zkv"] = "Krevinian",
["zkz"] = "Khazar",
["zle-ono"] = "Old Novgorodian",
["zle-ort"] = "รูซินเก่า",
["zls-chs"] = "Church Slavonic",
["zlw-ocs"] = "เช็กเก่า",
["zlw-opl"] = "โปแลนด์เก่า",
["zlw-osk"] = "สโลวักเก่า",
["zlw-slv"] = "สโลวินช์",
["zma"] = "Manda (Australia)",
["zmb"] = "Zimba",
["zmc"] = "Margany",
["zmd"] = "Maridan",
["zme"] = "Mangerr",
["zmf"] = "Mfinu",
["zmg"] = "Marti Ke",
["zmh"] = "Makolkol",
["zmi"] = "Negeri Sembilan Malay",
["zmj"] = "Maridjabin",
["zmk"] = "Mandandanyi",
["zml"] = "Madngele",
["zmm"] = "Marimanindji",
["zmn"] = "Mbangwe",
["zmo"] = "Molo",
["zmp"] = "Mbuun",
["zmq"] = "Mituku",
["zmr"] = "Maranungku",
["zms"] = "Mbesa",
["zmt"] = "Maringarr",
["zmu"] = "Muruwari",
["zmv"] = "Mbariman-Gudhinma",
["zmw"] = "Mbo (Congo)",
["zmx"] = "Bomitaba",
["zmy"] = "Mariyedi",
["zmz"] = "Mbandja",
["zna"] = "Zan Gula",
["zne"] = "Zande",
["zng"] = "Mang",
["znk"] = "Manangkari",
["zns"] = "Mangas",
["zoc"] = "Copainalá Zoque",
["zoh"] = "Chimalapa Zoque",
["zom"] = "Zou",
["zoo"] = "Asunción Mixtepec Zapotec",
["zoq"] = "Tabasco Zoque",
["zor"] = "Rayón Zoque",
["zos"] = "Francisco León Zoque",
["zpa"] = "Lachiguiri Zapotec",
["zpb"] = "Yautepec Zapotec",
["zpc"] = "Choapan Zapotec",
["zpd"] = "Southeastern Ixtlán Zapotec",
["zpe"] = "Petapa Zapotec",
["zpf"] = "San Pedro Quiatoni Zapotec",
["zpg"] = "Guevea de Humboldt Zapotec",
["zph"] = "Totomachapan Zapotec",
["zpi"] = "Santa María Quiegolani Zapotec",
["zpj"] = "Quiavicuzas Zapotec",
["zpk"] = "Tlacolulita Zapotec",
["zpl"] = "Lachixío Zapotec",
["zpm"] = "Mixtepec Zapotec",
["zpn"] = "Santa Inés Yatzechi Zapotec",
["zpo"] = "Amatlán Zapotec",
["zpp"] = "El Alto Zapotec",
["zpq"] = "Zoogocho Zapotec",
["zpr"] = "Santiago Xanica Zapotec",
["zps"] = "Coatlán Zapotec",
["zpt"] = "San Vicente Coatlán Zapotec",
["zpu"] = "Yalálag Zapotec",
["zpv"] = "Chichicapan Zapotec",
["zpw"] = "Zaniza Zapotec",
["zpx"] = "San Baltazar Loxicha Zapotec",
["zpy"] = "Mazaltepec Zapotec",
["zpz"] = "Texmelucan Zapotec",
["zra"] = "Gaya",
["zrg"] = "Mirgan",
["zrn"] = "Zirenkel",
["zro"] = "Záparo",
["zrs"] = "Mairasi",
["zsa"] = "Sarasira",
["zsk"] = "Kaskean",
["zsl"] = "Zambian Sign Language",
["zsr"] = "Southern Rincon Zapotec",
["zsu"] = "Sukurum",
["zte"] = "Elotepec Zapotec",
["ztg"] = "Xanaguía Zapotec",
["ztl"] = "Lapaguía-Guivini Zapotec",
["ztm"] = "San Agustín Mixtepec Zapotec",
["ztn"] = "Santa Catarina Albarradas Zapotec",
["ztp"] = "Loxicha Zapotec",
["ztq"] = "Quioquitani-Quierí Zapotec",
["zts"] = "Tilquiapan Zapotec",
["ztt"] = "Tejalapan Zapotec",
["ztu"] = "San Pablo Güilá Zapotec",
["ztx"] = "Zaachila Zapotec",
["zty"] = "Yatee Zapotec",
["zu"] = "ซูลู",
["zua"] = "Zeem",
["zuh"] = "Tokano",
["zum"] = "Kumzari",
["zun"] = "ซูนี",
["zuy"] = "Zumaya",
["zwa"] = "Zay",
["zyp"] = "Zyphe",
["zza"] = "ซาซา",
["zzj"] = "จ้วงแบบจั่วเจียง",
}
c0my8ejmwunclgakdfie2vuvui90x4t
5729131
5729127
2026-07-20T02:36:20Z
Octahedron80
267
5729131
Scribunto
text/plain
return {
["aa"] = "อาฟาร์",
["aaa"] = "Ghotuo",
["aab"] = "Alumu-Tesu",
["aac"] = "Ari",
["aad"] = "Amal",
["aaf"] = "Aranadan",
["aag"] = "Ambrak",
["aah"] = "Abu'",
["aai"] = "Arifama-Miniafia",
["aak"] = "Ankave",
["aal"] = "Afade",
["aan"] = "Anambé",
["aap"] = "Arára (Pará)",
["aaq"] = "Penobscot",
["aas"] = "Aasax",
["aau"] = "Abau",
["aav-khs-pro"] = "คาเซียนดั้งเดิม",
["aav-nic-pro"] = "นิโคบารีสดั้งเดิม",
["aav-pkl-pro"] = "ปนัร-คาซี-ลึงงัมดั้งเดิม",
["aav-pro"] = "ออสโตรเอเชียติกดั้งเดิม",
["aaw"] = "Solong",
["aax"] = "Mandobo Atas",
["aaz"] = "Amarasi",
["ab"] = "อับคาเซีย",
["aba"] = "อาเบ",
["abb"] = "Bankon",
["abc"] = "Ambala Ayta",
["abd"] = "Camarines Norte Agta",
["abe"] = "Abenaki",
["abf"] = "Abai Sungai",
["abg"] = "Abaga",
["abh"] = "อาหรับแบบทาจิกิสถาน",
["abi"] = "Abidji",
["abj"] = "Aka-Bea",
["abl"] = "Abung",
["abm"] = "Abanyom",
["abn"] = "Abua",
["abo"] = "Abon",
["abp"] = "Abenlen Ayta",
["abq"] = "อาบาซา",
["abs"] = "Ambonese Malay",
["abt"] = "Ambulas",
["abu"] = "Abure",
["abv"] = "อาหรับแบบบาห์เรน",
["abw"] = "Pal",
["abx"] = "Inabaknon",
["aby"] = "Aneme Wake",
["abz"] = "Abui",
["aca"] = "Achagua",
["acb"] = "Áncá",
["acd"] = "Gikyode",
["ace"] = "อาเจะฮ์",
["ach"] = "Acholi",
["aci"] = "Aka-Cari",
["ack"] = "Aka-Kora",
["acl"] = "Akar-Bale",
["acm"] = "อาหรับแบบอิรัก",
["acn"] = "Achang",
["acp"] = "Eastern Acipa",
["acr"] = "Achi",
["acs"] = "Acroá",
["acu"] = "Achuar",
["acv"] = "Achumawi",
["acw"] = "อาหรับแบบฮิญาซ",
["acx"] = "อาหรับแบบโอมาน",
["acy"] = "อาหรับแบบไซปรัส",
["acz"] = "Acheron",
["ada"] = "Adangme",
["adb"] = "Atauran",
["add"] = "Dzodinka",
["ade"] = "Adele",
["adf"] = "Dhofari Arabic",
["adg"] = "Andegerebinha",
["adh"] = "Adhola",
["adi"] = "Adi",
["adj"] = "Adioukrou",
["adl"] = "Galo",
["adn"] = "Adang",
["ado"] = "Abu",
["adp"] = "Adap",
["adq"] = "Adangbe",
["adr"] = "Adonara",
["ads"] = "Adamorobe Sign Language",
["adt"] = "Adnyamathanha",
["adu"] = "Aduge",
["adw"] = "Amondawa",
["ady"] = "อะดีเกยา",
["adz"] = "Adzera",
["ae"] = "อเวสตะ",
["aea"] = "Areba",
["aeb"] = "อาหรับแบบตูนิเซีย",
["aed"] = "Argentine Sign Language",
["aee"] = "Northeast Pashayi",
["aek"] = "Haeke",
["ael"] = "Ambele",
["aem"] = "Arem",
["aen"] = "Armenian Sign Language",
["aeq"] = "Aer",
["aer"] = "Eastern Arrernte",
["aes"] = "Alsea",
["aeu"] = "Akeu",
["aew"] = "Ambakich",
["aey"] = "Amele",
["aez"] = "Aeka",
["af"] = "อาฟรีกานส์",
["afa-pro"] = "แอฟโฟรเอเชียติกดั้งเดิม",
["afb"] = "Gulf Arabic",
["afd"] = "Andai",
["afe"] = "Putukwam",
["afg"] = "Afghan Sign Language",
["afh"] = "Afrihili",
["afi"] = "Akrukay",
["afk"] = "Nanubae",
["afn"] = "Defaka",
["afo"] = "Eloyi",
["afp"] = "Tapei",
["afs"] = "Afro-Seminole Creole",
["aft"] = "Afitti",
["afu"] = "Awutu",
["afz"] = "Obokuitai",
["aga"] = "Aguano",
["agb"] = "Legbo",
["agc"] = "Agatu",
["agd"] = "Agarabi",
["age"] = "Angal",
["agf"] = "Arguni",
["agg"] = "Angor",
["agh"] = "Ngelima",
["agi"] = "Agariya",
["agj"] = "Argobba",
["agk"] = "Isarog Agta",
["agl"] = "Fembe",
["agm"] = "Angaataha",
["agn"] = "อากูตายา",
["ago"] = "Tainae",
["agq"] = "Aghem",
["agr"] = "Aguaruna",
["ags"] = "Esimbi",
["agt"] = "Central Cagayan Agta",
["agu"] = "Aguacateca",
["agv"] = "Remontado Agta",
["agw"] = "Kahua",
["agx"] = "Aghul",
["agy"] = "Southern Alta",
["agz"] = "Mount Iriga Agta",
["aha"] = "Ahanta",
["ahb"] = "Axamb",
["ahg"] = "Qimant",
["ahh"] = "Aghu",
["ahi"] = "Tiagba",
["ahk"] = "อาข่า",
["ahl"] = "Igo",
["ahm"] = "Mobu",
["ahn"] = "Àhàn",
["aho"] = "อาหม",
["ahp"] = "Apro",
["ahr"] = "Ahirani",
["ahs"] = "Ashe",
["aht"] = "Ahtna",
["aia"] = "Arosi",
["aib"] = "Äynu",
["aic"] = "Ainbai",
["aid"] = "Alngith",
["aie"] = "Amara",
["aif"] = "Agi",
["aig"] = "Antigua and Barbuda Creole English",
["aih"] = "Ai-Cham",
["aii"] = "อารามายาใหม่แบบอัสซีเรีย",
["aij"] = "Lishanid Noshan",
["aik"] = "Ake",
["ail"] = "Aimele",
["aim"] = "Aimol",
["ain"] = "ไอนุ",
["aio"] = "อ่ายตน",
["aip"] = "Burumakok",
["air"] = "Airoran",
["ait"] = "Arikem",
["aiw"] = "Aari",
["aix"] = "Aighon",
["aiy"] = "Ali",
["aja"] = "Aja",
["ajg"] = "Adja",
["aji"] = "Ajië",
["ajn"] = "Andajin",
["ajp"] = "อาหรับแบบลิแวนต์ใต้",
["ajw"] = "Ajawa",
["ajz"] = "Amri Karbi",
["ak"] = "อาคัน",
["akb"] = "Angkola Batak",
["akc"] = "Mpur",
["akd"] = "Ukpet-Ehom",
["ake"] = "Akawaio",
["akf"] = "Akpa",
["akg"] = "Anakalangu",
["akh"] = "Angal Heneng",
["aki"] = "Aiome",
["akj"] = "Jeru",
["akk"] = "แอกแคด",
["akl"] = "อักลัน",
["akm"] = "Aka-Bo",
["ako"] = "Akurio",
["akp"] = "Siwu",
["akq"] = "Ak",
["akr"] = "Araki",
["aks"] = "Akaselem",
["akt"] = "Akolet",
["aku"] = "Akum",
["akv"] = "Akhvakh",
["akw"] = "Akwa",
["akx"] = "Aka-Kede",
["aky"] = "Aka-Kol",
["akz"] = "แอละแบมา",
["ala"] = "Alago",
["alc"] = "Kawésqar",
["ald"] = "Alladian",
["ale"] = "Aleut",
["alf"] = "Alege",
["alg-aga"] = "Agawam",
["alg-pro"] = "แอลกองเคียนดั้งเดิม",
["alh"] = "Alawa",
["ali"] = "Amaimon",
["alj"] = "Alangan",
["alk"] = "Alak",
["all"] = "Allar",
["alm"] = "Amblong",
["alo"] = "Larike-Wakasihu",
["alp"] = "Alune",
["alq"] = "Algonquin",
["alr"] = "Alutor",
["alt"] = "อัลไตใต้",
["alu"] = "'Are'are",
["alv-ama"] = "Amasi",
["alv-bgu"] = "Baïnounk Gubëeher",
["alv-bua-pro"] = "Proto-Bua",
["alv-cng-pro"] = "Proto-Cangin",
["alv-edk-pro"] = "Proto-Edekiri",
["alv-edo-pro"] = "Proto-Edoid",
["alv-fli-pro"] = "Proto-Fali",
["alv-gbe-pro"] = "กเบดั้งเดิม",
["alv-gng-pro"] = "Proto-Guang",
["alv-gtm-pro"] = "Proto-Central Togo",
["alv-gwa"] = "Gwara",
["alv-hei-pro"] = "Proto-Heiban",
["alv-ido-pro"] = "Proto-Idomoid",
["alv-igb-pro"] = "Proto-Igboid",
["alv-kwa-pro"] = "Proto-Kwa",
["alv-mum-pro"] = "Proto-Mumuye",
["alv-nup-pro"] = "Proto-Nupoid",
["alv-pro"] = "แอตแลนติก-คองโกดั้งเดิม",
["alv-von-pro"] = "วอลตา-ไนเจอร์ดั้งเดิม",
["alv-yor-pro"] = "โยรูบาดั้งเดิม",
["alv-yrd-pro"] = "โยรูบอยด์ดั้งเดิม",
["alw"] = "Alaba",
["alx"] = "Amol",
["aly"] = "Alyawarr",
["alz"] = "Alur",
["am"] = "อัมฮารา",
["ama"] = "Amanayé",
["amb"] = "Ambo",
["amc"] = "Amahuaca",
["ame"] = "Yanesha'",
["amf"] = "Hamer-Banna",
["amg"] = "Amurdag",
["ami"] = "Amis",
["amj"] = "Amdang",
["amk"] = "Ambai",
["aml"] = "War-Jaintia",
["amm"] = "Ama",
["amn"] = "Amanab",
["amo"] = "Amo",
["amp"] = "Alamblak",
["amq"] = "Amahai",
["amr"] = "Amarakaeri",
["ams"] = "อามามิโอชิมะใต้",
["amt"] = "Amto",
["amu"] = "Guerrero Amuzgo",
["amv"] = "Ambelau",
["amw"] = "Western Neo-Aramaic",
["amx"] = "Anmatyerre",
["amy"] = "Ami",
["amz"] = "Atampaya",
["an"] = "อารากอน",
["ana"] = "Andaqui",
["anb"] = "Andoa",
["anc"] = "Ngas",
["and"] = "Ansus",
["ane"] = "คังรังชือ",
["anf"] = "Animere",
["ang"] = "อังกฤษเก่า",
["anh"] = "Nend",
["ani"] = "Andi",
["anj"] = "Anor",
["ank"] = "Goemai",
["anl"] = "Anu",
["anm"] = "Anāl",
["ann"] = "Obolo",
["ano"] = "Andoque",
["anp"] = "Angika",
["anq"] = "Jarawa",
["anr"] = "Andh",
["ans"] = "Anserma",
["ant"] = "Antakarinya",
["anu"] = "Anuak",
["anv"] = "Denya",
["anw"] = "Anaang",
["anx"] = "Andra-Hus",
["any"] = "Anyi",
["anz"] = "Anem",
["aoa"] = "Angolar",
["aob"] = "Abom",
["aoc"] = "Pemon",
["aod"] = "Andarum",
["aoe"] = "Angal Enen",
["aof"] = "Bragat",
["aog"] = "Angoram",
["aoi"] = "Anindilyakwa",
["aoj"] = "Mufian",
["aok"] = "Arhö",
["aol"] = "Alorese",
["aom"] = "Ömie",
["aon"] = "Bumbita Arapesh",
["aor"] = "Aore",
["aos"] = "Taikat",
["aot"] = "อะตง",
["aou"] = "A'ou",
["aox"] = "Atorada",
["aoz"] = "Uab Meto",
["apa-pro"] = "Proto-Apachean",
["apb"] = "Sa'a",
["apc"] = "North Levantine Arabic",
["apd"] = "อาหรับแบบซูดาน",
["ape"] = "Bukiyip",
["apf"] = "Pahanan Agta",
["apg"] = "Ampanang",
["aph"] = "Athpare",
["api"] = "Apiaká",
["apj"] = "Jicarilla",
["apk"] = "Plains Apache",
["apl"] = "Lipan",
["apm"] = "Chiricahua",
["apn"] = "Apinayé",
["apo"] = "Ambul",
["app"] = "Apma",
["apq"] = "A-Pucikwar",
["apr"] = "Arop-Lokep",
["aps"] = "Arop-Sissano",
["apt"] = "Apatani",
["apu"] = "Apurinã",
["apv"] = "Alapmunte",
["apw"] = "อะแพชีตะวันตก",
["apx"] = "Aputai",
["apy"] = "Apalaí",
["apz"] = "Safeyoka",
["aqc"] = "Archi",
["aqd"] = "Ampari Dogon",
["aqg"] = "Arigidi",
["aql-pro"] = "แอลจิกดั้งเดิม",
["aqm"] = "Atohwaim",
["aqn"] = "Northern Alta",
["aqp"] = "Atakapa",
["aqr"] = "Arhâ",
["aqt"] = "Angaité",
["aqz"] = "Akuntsu",
["ar"] = "อาหรับ",
["arc"] = "อารามายา",
["ard"] = "Arabana",
["are"] = "Western Arrernte",
["arh"] = "Arhuaco",
["ari"] = "Arikara",
["arj"] = "Arapaso",
["ark"] = "Arikapú",
["arl"] = "Arabela",
["arn"] = "Mapudungun",
["aro"] = "Araona",
["arp"] = "Arapaho",
["arq"] = "อาหรับแบบแอลจีเรีย",
["arr"] = "Arara-Karo",
["ars"] = "Najdi Arabic",
["art-adu"] = "Adûni",
["art-bel"] = "Belter Creole",
["art-blk"] = "Bolak",
["art-bsp"] = "แบล็กสปีช",
["art-com"] = "Communicationssprache",
["art-dtk"] = "Dothraki",
["art-elo"] = "Eloi",
["art-gld"] = "Goa'uld",
["art-lap"] = "Lapine",
["art-man"] = "Mandalorian",
["art-mun"] = "Mundolinco",
["art-nav"] = "Naʼvi",
["art-vlh"] = "High Valyrian",
["aru"] = "Arua",
["arv"] = "Arbore",
["arw"] = "โลโกโน",
["arx"] = "Aruá",
["ary"] = "อาหรับแบบโมร็อกโก",
["arz"] = "อาหรับแบบอียิปต์",
["as"] = "อัสสัม",
["asa"] = "Pare",
["asb"] = "Assiniboine",
["asc"] = "Casuarina Coast Asmat",
["ase"] = "มืออเมริกัน",
["asf"] = "Auslan",
["asg"] = "Cishingini",
["ash"] = "Abishira",
["asi"] = "Buruwai",
["asj"] = "Nsari",
["ask"] = "Ashkun",
["asl"] = "Asilulu",
["asn"] = "Xingú Asuriní",
["aso"] = "Dano",
["asp"] = "Algerian Sign Language",
["asq"] = "Austrian Sign Language",
["asr"] = "Asuri",
["ass"] = "Ipulo",
["ast"] = "อัสตูเรียส",
["asu"] = "Tocantins Asurini",
["asv"] = "Asoa",
["asw"] = "Australian Aboriginal Sign Language",
["asx"] = "Muratayak",
["asy"] = "Yaosakor Asmat",
["asz"] = "As",
["ata"] = "Pele-Ata",
["atb"] = "Zaiwa",
["atc"] = "Atsahuaca",
["atd"] = "Ata Manobo",
["ate"] = "Atemble",
["atg"] = "Okpela",
["ath-nic"] = "Nicola",
["ath-pro"] = "Proto-Athabaskan",
["ati"] = "Attié",
["atj"] = "Atikamekw",
["atk"] = "Ati",
["atl"] = "Mount Iraya Agta",
["atm"] = "Ata",
["ato"] = "Atong (Cameroon)",
["atp"] = "Pudtol Atta",
["atq"] = "Aralle-Tabulahan",
["atr"] = "Waimiri-Atroari",
["ats"] = "Gros Ventre",
["att"] = "Pamplona Atta",
["atu"] = "Reel",
["atv"] = "อัลไตเหนือ",
["atw"] = "Atsugewi",
["atx"] = "Arutani",
["aty"] = "อาเนตยูม",
["atz"] = "Arta",
["aua"] = "Asumboa",
["aub"] = "Alugu",
["auc"] = "Huaorani",
["aud"] = "Anuta",
["auf-pro"] = "Proto-Arawa",
["aug"] = "Aguna",
["auh"] = "Aushi",
["aui"] = "Anuki",
["auj"] = "Awjila",
["auk"] = "Heyo",
["aul"] = "Aulua",
["aum"] = "Asu",
["aun"] = "Molmo One",
["auo"] = "Auyokawa",
["aup"] = "Makayam",
["auq"] = "Anus",
["aur"] = "Aruek",
["aus-alu"] = "Alungul",
["aus-and"] = "Andjingith",
["aus-ang"] = "Angkula",
["aus-arn-pro"] = "Proto-Arnhem",
["aus-bra"] = "Barranbinya",
["aus-brm"] = "Barunggam",
["aus-cww-pro"] = "Proto-Central New South Wales",
["aus-dal-pro"] = "Proto-Daly",
["aus-guw"] = "Guwar",
["aus-lsw"] = "Little Swanport",
["aus-mbi"] = "Mbiywom",
["aus-ngk"] = "Ngkoth",
["aus-nyu-pro"] = "Proto-Nyulnyulan",
["aus-pam-pro"] = "Proto-Pama-Nyungan",
["aus-tul"] = "Tulua",
["aus-uwi"] = "Uwinymil",
["aus-wdj-pro"] = "Proto-Iwaidjan",
["aus-won"] = "Wong-gie",
["aus-wul"] = "Wulguru",
["aus-ynk"] = "Yangkaal",
["aut"] = "Austral",
["auu"] = "Auye",
["auw"] = "Awyi",
["aux"] = "Aurá",
["auy"] = "Auyana",
["auz"] = "อาหรับแบบอุซเบกิสถาน",
["av"] = "อะวาร์",
["avb"] = "Avau",
["avd"] = "Alviri-Vidari",
["avi"] = "Avikam",
["avk"] = "โคทาวา",
["avm"] = "Angkamuthi",
["avn"] = "Avatime",
["avo"] = "Agavotaguerra",
["avs"] = "Aushiri",
["avt"] = "Au",
["avu"] = "Avokaya",
["avv"] = "Avá-Canoeiro",
["awa"] = "อวัธ",
["awb"] = "Awa (New Guinea)",
["awc"] = "Cicipu",
["awd-ama"] = "Amarizana",
["awd-amc-pro"] = "Proto-Amuesha-Chamicuro",
["awd-ana"] = "Anauyá",
["awd-apo"] = "Apolista",
["awd-cab"] = "Cabre",
["awd-gnu"] = "Guinau",
["awd-kar"] = "Cariay",
["awd-kaw"] = "Kawishana",
["awd-kmp-pro"] = "Proto-Kampa",
["awd-kus"] = "Kustenau",
["awd-man"] = "Manao",
["awd-mar"] = "Marawan",
["awd-mpr"] = "Maipure",
["awd-mrt"] = "Mariaté",
["awd-nwk-pro"] = "Proto-Nawiki",
["awd-pai"] = "Paikoneka",
["awd-pas"] = "Pasé",
["awd-pro"] = "Proto-Arawak",
["awd-prw-pro"] = "Proto-Paresi-Waura",
["awd-she"] = "Shebayo",
["awd-taa-pro"] = "Proto-Ta-Arawak",
["awd-wai"] = "Wainumá",
["awd-yum"] = "Yumana",
["awe"] = "Awetí",
["awg"] = "Anguthimri",
["awh"] = "Awbono",
["awi"] = "Aekyom",
["awk"] = "Awabakal",
["awm"] = "Arawum",
["awn"] = "Awngi",
["awo"] = "Awak",
["awr"] = "Awera",
["aws"] = "South Awyu",
["awt"] = "Araweté",
["awu"] = "Central Awyu",
["awv"] = "Jair Awyu",
["aww"] = "Awun",
["awx"] = "Awara",
["awy"] = "Edera Awyu",
["axb"] = "Abipón",
["axe"] = "Ayerrerenge",
["axg"] = "Arára (Mato Grosso)",
["axk"] = "Aka (Central Africa)",
["axl"] = "Lower Southern Aranda",
["axm"] = "อาร์มีเนียกลาง",
["axx"] = "Xârâgurè",
["ay"] = "ไอย์มารา",
["aya"] = "Awar",
["ayb"] = "Ayizo",
["ayd"] = "Ayabadhu",
["aye"] = "Ayere",
["ayg"] = "Nyanga (Togo)",
["ayi"] = "Leyigha",
["ayk"] = "Akuku",
["ayl"] = "อาหรับแบบลิเบีย",
["ayn"] = "อาหรับแบบเยเมน",
["ayo"] = "Ayoreo",
["ayp"] = "อาหรับแบบเมโสโปเตเมียเหนือ",
["ayq"] = "Ayi",
["ays"] = "Sorsogon Ayta",
["ayt"] = "Bataan Ayta",
["ayu"] = "Ayu",
["ayy"] = "Tayabas Ayta",
["ayz"] = "Maybrat",
["az"] = "อาเซอร์ไบจาน",
["aza"] = "Azha",
["azc-caz"] = "Cazcan",
["azc-cup-pro"] = "Proto-Cupan",
["azc-ktn"] = "Kitanemuk",
["azc-nah-pro"] = "นาวันดั้งเดิม",
["azc-num-pro"] = "Proto-Numic",
["azc-pro"] = "ยูโต-แอซเทกันดั้งเดิม",
["azc-tak-pro"] = "Proto-Takic",
["azc-tat"] = "Tataviam",
["azd"] = "Eastern Durango Nahuatl",
["azg"] = "San Pedro Amuzgos Amuzgo",
["azm"] = "Ipalapa Amuzgo",
["azn"] = "Western Durango Nahuatl",
["azo"] = "Awing",
["azt"] = "Faire Atta",
["azz"] = "Highland Puebla Nahuatl",
["ba"] = "แบชเคียร์",
["baa"] = "Babatana",
["bab"] = "Bainouk-Gunyuño",
["bac"] = "Baduy",
["bae"] = "Baré",
["baf"] = "Nubaca",
["bag"] = "Tuki",
["bah"] = "Bahamian Creole",
["baj"] = "Barakai",
["bal"] = "บาโลจ",
["ban"] = "บาหลี",
["bao"] = "Waimaha",
["bap"] = "Bantawa",
["bar"] = "บาวาเรีย",
["bas"] = "Basaa",
["bau"] = "Badanchi",
["bav"] = "Babungo",
["baw"] = "Bambili-Bambui",
["bax"] = "Bamum",
["bay"] = "Batuley",
["bba"] = "Baatonum",
["bbb"] = "Barai",
["bbc"] = "Toba Batak",
["bbd"] = "Bau",
["bbe"] = "Bangba",
["bbf"] = "Baibai",
["bbg"] = "Barama",
["bbh"] = "Bugan",
["bbi"] = "Barombi",
["bbj"] = "Ghomala'",
["bbk"] = "Babanki",
["bbl"] = "บัตส์",
["bbm"] = "Babango",
["bbn"] = "Uneapa",
["bbo"] = "Konabéré",
["bbp"] = "West Central Banda",
["bbq"] = "Bamali",
["bbr"] = "Girawa",
["bbs"] = "Bakpinka",
["bbt"] = "Mburku",
["bbu"] = "Bakulung",
["bbv"] = "Karnai",
["bbw"] = "Baba",
["bbx"] = "Bubia",
["bby"] = "Befang",
["bca"] = "Central Bai",
["bcb"] = "Bainouk-Samik",
["bcd"] = "North Babar",
["bce"] = "Bamenyam",
["bcf"] = "Bamu",
["bcg"] = "Baga Pokur",
["bch"] = "Bariai",
["bci"] = "Baoule",
["bcj"] = "Bardi",
["bck"] = "Bunaba",
["bcl"] = "บีโคลตอนกลาง",
["bcm"] = "Banoni",
["bcn"] = "Bibaali",
["bco"] = "Kaluli",
["bcp"] = "Bali",
["bcq"] = "Bench",
["bcr"] = "Babine-Witsuwit'en",
["bcs"] = "Kohumono",
["bct"] = "Bendi",
["bcu"] = "Biliau",
["bcv"] = "Shoo-Minda-Nye",
["bcw"] = "Bana",
["bcy"] = "Bacama",
["bcz"] = "Bainouk-Gunyaamolo",
["bda"] = "Bayot",
["bdb"] = "Basap",
["bdc"] = "Emberá-Baudó",
["bdd"] = "Bunama",
["bde"] = "Bade",
["bdf"] = "Biage",
["bdg"] = "Bonggi",
["bdh"] = "Tara Baka",
["bdi"] = "Burun",
["bdj"] = "Bai (South Sudan)",
["bdk"] = "Budukh",
["bdl"] = "บาเจาแบบอินโดนีเซีย",
["bdm"] = "Buduma",
["bdn"] = "Baldemu",
["bdo"] = "Morom",
["bdp"] = "Bende",
["bdq"] = "บะห์นัร",
["bdr"] = "บาเจาแบบเวสต์โคสต์",
["bds"] = "Burunge",
["bdt"] = "Bokoto",
["bdu"] = "Oroko",
["bdv"] = "Bodo Parja",
["bdw"] = "Baham",
["bdx"] = "Budong-Budong",
["bdy"] = "Bandjalang",
["bdz"] = "Badeshi",
["be"] = "เบลารุส",
["bea"] = "Beaver",
["beb"] = "Bebele",
["bec"] = "Iceve-Maci",
["bed"] = "Bedoanas",
["bee"] = "Byangsi",
["bef"] = "Benabena",
["beg"] = "Belait",
["beh"] = "Biali",
["bei"] = "Bekati'",
["bej"] = "Beja",
["bek"] = "Bebeli",
["bem"] = "Bemba",
["beo"] = "Beami",
["bep"] = "Besoa",
["beq"] = "Beembe",
["ber-fog"] = "Fogaha",
["ber-pro"] = "เบอร์เบอร์ดั้งเดิม",
["ber-zuw"] = "Zuwara",
["bes"] = "Besme",
["bet"] = "Guiberoua Bété",
["beu"] = "บลาการ์",
["bev"] = "Daloa Bété",
["bew"] = "เบอตาวี",
["bex"] = "Jur Modo",
["bey"] = "Akuwagel",
["bez"] = "Kibena",
["bfa"] = "Bari",
["bfb"] = "Pauri Bareli",
["bfc"] = "Panyi Bai",
["bfd"] = "Bafut",
["bfe"] = "Betaf",
["bff"] = "Bofi",
["bfg"] = "Busang Kayan",
["bfh"] = "Blafe",
["bfi"] = "British Sign Language",
["bfj"] = "Bafanji",
["bfk"] = "Ban Khor Sign Language",
["bfl"] = "Banda-Ndélé",
["bfm"] = "Mmen",
["bfn"] = "Bunak",
["bfo"] = "Malba Birifor",
["bfp"] = "Beba",
["bfq"] = "พทคะ",
["bfr"] = "Bazigar",
["bfs"] = "Southern Bai",
["bft"] = "บัลติ",
["bfu"] = "Gahri",
["bfw"] = "Bondo",
["bfx"] = "Bantayanon",
["bfy"] = "Bagheli",
["bfz"] = "Mahasu Pahari",
["bg"] = "บัลแกเรีย",
["bga"] = "Gwamhi-Wuri",
["bgb"] = "Bobongko",
["bgc"] = "หริยาณวี",
["bgd"] = "Rathwi Bareli",
["bge"] = "Bauria",
["bgf"] = "Bangandu",
["bgg"] = "Bugun",
["bgi"] = "Giangan",
["bgj"] = "Bangolan",
["bgk"] = "Bit",
["bgl"] = "Bo",
["bgo"] = "Baga Koga",
["bgq"] = "Bagri",
["bgr"] = "Bawm Chin",
["bgs"] = "Tagabawa",
["bgt"] = "Bughotu",
["bgu"] = "Mbongno",
["bgv"] = "Warkay-Bipim",
["bgw"] = "Bhatri",
["bgx"] = "Balkan Gagauz Turkish",
["bgy"] = "Benggoi",
["bgz"] = "Banggai",
["bh"] = "พิหาร",
["bha"] = "Bharia",
["bhb"] = "Bhili",
["bhc"] = "Biga",
["bhd"] = "Bhadrawahi",
["bhe"] = "Bhaya",
["bhf"] = "Odiai",
["bhg"] = "Binandere",
["bhh"] = "Bukhari",
["bhi"] = "Bhilali",
["bhj"] = "Bahing",
["bhl"] = "Bimin",
["bhm"] = "Bathari",
["bhn"] = "Bohtan Neo-Aramaic",
["bho"] = "โภชปุระ",
["bhp"] = "Bima",
["bhq"] = "Tukang Besi South",
["bhs"] = "Buwal",
["bht"] = "Bhattiyali",
["bhu"] = "Bhunjia",
["bhv"] = "Bahau",
["bhw"] = "Biak",
["bhx"] = "Bhalay",
["bhy"] = "Bhele",
["bhz"] = "Bada",
["bi"] = "บิสลามา",
["bia"] = "Badimaya",
["bib"] = "Bissa",
["bic"] = "Bikaru",
["bid"] = "Bidiyo",
["bie"] = "Bepour",
["bif"] = "Biafada",
["big"] = "Biangai",
["bij"] = "Kwanka",
["bil"] = "Bile",
["bim"] = "Bimoba",
["bin"] = "Edo",
["bio"] = "Nai",
["bip"] = "Bila",
["biq"] = "Bipi",
["bir"] = "Bisorio",
["bit"] = "Berinomo",
["biu"] = "Biete",
["biv"] = "Southern Birifor",
["biw"] = "Kol (Cameroon)",
["bix"] = "Bijori",
["biy"] = "Birhor",
["biz"] = "Baloi",
["bja"] = "Budza",
["bjb"] = "Barngarla",
["bjc"] = "Bariji",
["bje"] = "Biao-Jiao Mien",
["bjf"] = "Barzani Jewish Neo-Aramaic",
["bjg"] = "Bidyogo",
["bjh"] = "Bahinemo",
["bji"] = "Burji",
["bjj"] = "Kannauji",
["bjk"] = "Barok",
["bjl"] = "Bulu (New Guinea)",
["bjm"] = "Bajelani",
["bjn"] = "บันจาร์",
["bjo"] = "Mid-Southern Banda",
["bjp"] = "Fanamaket",
["bjr"] = "Binumarien",
["bjs"] = "Bajan",
["bjt"] = "Balanta-Ganja",
["bju"] = "Busuu",
["bjv"] = "Bedjond",
["bjw"] = "Bakwé",
["bjx"] = "Banao Itneg",
["bjy"] = "Bayali",
["bjz"] = "Baruga",
["bka"] = "Kyak",
["bkc"] = "Baka",
["bkd"] = "บีนูกิด",
["bkf"] = "Beeke",
["bkg"] = "Buraka",
["bkh"] = "Bakoko",
["bki"] = "Baki",
["bkj"] = "Pande",
["bkk"] = "Brokskat",
["bkl"] = "Berik",
["bkm"] = "Kom (Cameroon)",
["bkn"] = "Bukitan",
["bko"] = "Kwa'",
["bkp"] = "Iboko",
["bkq"] = "Bakairí",
["bkr"] = "Bakumpai",
["bks"] = "Masbate Sorsogon",
["bkt"] = "Boloki",
["bku"] = "Buhid",
["bkv"] = "Bekwarra",
["bkw"] = "Bekwel",
["bkx"] = "Baikeno",
["bky"] = "Bokyi",
["bkz"] = "Bungku",
["bla"] = "Blackfoot",
["blb"] = "Bilua",
["blc"] = "Bella Coola",
["bld"] = "Bolango",
["ble"] = "Balanta-Kentohe",
["blf"] = "Buol",
["blg"] = "Balau",
["blh"] = "Kuwaa",
["bli"] = "Bolia",
["blj"] = "Bulungan",
["blk"] = "กะเหรี่ยงปะโอ",
["bll"] = "Biloxi",
["blm"] = "Beli",
["bln"] = "Southern Catanduanes Bicolano",
["blo"] = "Anii",
["blp"] = "Blablanga",
["blq"] = "Baluan-Pam",
["blr"] = "Blang",
["bls"] = "Balaesang",
["blt"] = "ไทดำ",
["blv"] = "Kibala",
["blw"] = "Balangao",
["blx"] = "Mag-Indi Ayta",
["bly"] = "Notre",
["blz"] = "Balantak",
["bm"] = "บัมบารา",
["bma"] = "Lame",
["bmb"] = "Bembe",
["bmc"] = "Biem",
["bmd"] = "Baga Manduri",
["bme"] = "Limassa",
["bmf"] = "Bom",
["bmg"] = "Bamwe",
["bmh"] = "Kein",
["bmi"] = "Bagirmi",
["bmj"] = "Bote-Majhi",
["bmk"] = "Ghayavi",
["bml"] = "Bomboli",
["bmn"] = "Bina",
["bmo"] = "Bambalang",
["bmp"] = "Bulgebi",
["bmq"] = "Bomu",
["bmr"] = "Muinane",
["bmt"] = "Biao Mon",
["bmu"] = "Somba-Siawari",
["bmv"] = "Bum",
["bmw"] = "Bomwali",
["bmx"] = "Baimak",
["bmz"] = "Baramu",
["bn"] = "เบงกอล",
["bna"] = "Bonerate",
["bnb"] = "Bookan",
["bnd"] = "Banda",
["bne"] = "Bintauna",
["bnf"] = "Masiwang",
["bng"] = "Benga",
["bni"] = "Bangi",
["bnj"] = "Eastern Tawbuid",
["bnk"] = "Bierebo",
["bnl"] = "Boon",
["bnm"] = "Batanga",
["bnn"] = "Bunun",
["bno"] = "อาซี",
["bnp"] = "Bola",
["bnq"] = "Bantik",
["bnr"] = "Butmas-Tur",
["bns"] = "Bundeli",
["bnt-bal"] = "Balong",
["bnt-bon"] = "Boma Nkuu",
["bnt-boy"] = "Boma Yumu",
["bnt-bwa"] = "Bwala",
["bnt-cmw"] = "Chimwiini",
["bnt-ind"] = "Indanga",
["bnt-lal"] = "Lala (South Africa)",
["bnt-mpi"] = "Mpiin",
["bnt-mpu"] = "Mpuono",
["bnt-ngu-pro"] = "งูนีดั้งเดิม",
["bnt-phu"] = "Phuthi",
["bnt-pro"] = "แบนทูดั้งเดิม",
["bnt-sab-pro"] = "Proto-Sabaki",
["bnt-sbo"] = "South Boma",
["bnt-sts-pro"] = "Proto-Sotho-Tswana",
["bnu"] = "Bentong",
["bnv"] = "Beneraf",
["bnw"] = "Bisis",
["bnx"] = "Bangubangu",
["bny"] = "Bintulu",
["bnz"] = "Beezen",
["bo"] = "ทิเบต",
["boa"] = "Bora",
["bob"] = "Aweer",
["boe"] = "Mundabli",
["bof"] = "Bolon",
["bog"] = "Bamako Sign Language",
["boh"] = "North Boma",
["boi"] = "Barbareño",
["boj"] = "Anjam",
["bok"] = "Bonjo",
["bol"] = "โบล",
["bom"] = "Berom",
["bon"] = "Bine",
["boo"] = "Tiemacèwè Bozo",
["bop"] = "Bonkiman",
["boq"] = "Bogaya",
["bor"] = "Borôro",
["bot"] = "Bongo",
["bou"] = "Bondei",
["bov"] = "Tuwuli",
["bow"] = "Rema",
["box"] = "Buamu",
["boy"] = "Bodo (Central Africa)",
["boz"] = "Tiéyaxo Bozo",
["bpa"] = "Daakaka",
["bpd"] = "Banda-Banda",
["bpg"] = "Bonggo",
["bph"] = "Botlikh",
["bpi"] = "Bagupi",
["bpj"] = "Binji",
["bpk"] = "Orowe",
["bpl"] = "Broome Pearling Lugger Pidgin",
["bpm"] = "Biyom",
["bpn"] = "Dzao Min",
["bpo"] = "Anasi",
["bpp"] = "Kaure",
["bpq"] = "Banda Malay",
["bpr"] = "Koronadal Blaan",
["bps"] = "Sarangani Blaan",
["bpt"] = "Barrow Point",
["bpu"] = "Bongu",
["bpv"] = "Bian Marind",
["bpx"] = "Palya Bareli",
["bpy"] = "Bishnupriya Manipuri",
["bpz"] = "Bilba",
["bqa"] = "Tchumbuli",
["bqb"] = "Bagusa",
["bqc"] = "Boko",
["bqd"] = "Bung",
["bqf"] = "Baga Kaloum",
["bqg"] = "Bago-Kusuntu",
["bqh"] = "Baima",
["bqi"] = "Bakhtiari",
["bqj"] = "Bandial",
["bqk"] = "Banda-Mbrès",
["bql"] = "Bilakura",
["bqm"] = "Wumboko",
["bqn"] = "Bulgarian Sign Language",
["bqo"] = "Balo",
["bqp"] = "Busa",
["bqq"] = "Biritai",
["bqr"] = "Burusu",
["bqs"] = "Bosngun",
["bqt"] = "Bamukumbit",
["bqu"] = "Boguru",
["bqv"] = "Begbere-Ejar",
["bqw"] = "Buru (Nigeria)",
["bqx"] = "Baangi",
["bqy"] = "Bengkala Sign Language",
["bqz"] = "Bakaka",
["br"] = "เบรอตง",
["bra"] = "พรัช",
["brb"] = "Lave",
["brc"] = "Berbice Creole Dutch",
["brd"] = "Baraamu",
["brf"] = "Bera",
["brg"] = "Baure",
["brh"] = "บราฮุอี",
["bri"] = "Mokpwe",
["brj"] = "Bieria",
["brk"] = "Birgid",
["brl"] = "Birwa",
["brm"] = "Barambu",
["brn"] = "Boruca",
["bro"] = "Brokkat",
["brp"] = "Barapasi",
["brq"] = "Breri",
["brr"] = "Birao",
["brs"] = "Baras",
["brt"] = "Bitare",
["bru"] = "บรูตะวันออก",
["brv"] = "บรูตะวันตก",
["brw"] = "Bellari",
["brx"] = "โบโด",
["bry"] = "Burui",
["brz"] = "Bilbil",
["bsa"] = "Abinomn",
["bsb"] = "Brunei Bisaya",
["bsc"] = "Bassari",
["bse"] = "Wushi",
["bsf"] = "Bauchi",
["bsg"] = "Bashkardi",
["bsh"] = "Kamkata-viri",
["bsi"] = "Bassossi",
["bsj"] = "Bangwinji",
["bsk"] = "Burushaski",
["bsl"] = "Basa-Gumna",
["bsm"] = "Busami",
["bsn"] = "Barasana",
["bso"] = "Buso",
["bsp"] = "Baga Sitemu",
["bsq"] = "Bassa",
["bsr"] = "Bassa-Kontagora",
["bss"] = "Akoose",
["bst"] = "Basketo",
["bsu"] = "Bahonsuai",
["bsv"] = "Baga Sobané",
["bsw"] = "Baiso",
["bsx"] = "Yangkam",
["bsy"] = "Sabah Bisaya",
["bta"] = "Bata",
["btc"] = "Bati (Cameroon)",
["btd"] = "Dairi Batak",
["bte"] = "Gamo-Ningi",
["btf"] = "Birgit",
["btg"] = "Gagnoa Bété",
["bth"] = "Biatah Bidayuh",
["bti"] = "Burate",
["btj"] = "Bacanese Malay",
["btk-pro"] = "Proto-Batak",
["btm"] = "Mandailing Batak",
["btn"] = "Ratagnon",
["bto"] = "Iriga Bicolano",
["btp"] = "Budibud",
["btq"] = "Batek",
["btr"] = "Baetora",
["bts"] = "Simalungun Batak",
["btt"] = "Bete-Bendi",
["btu"] = "Batu",
["btv"] = "Bateri",
["btw"] = "Butuanon",
["btx"] = "Karo Batak",
["bty"] = "Bobot",
["btz"] = "Alas-Kluet Batak",
["bua"] = "บูร์ยัต",
["bub"] = "Bua",
["bud"] = "Ntcham",
["bue"] = "Beothuk",
["buf"] = "Bushoong",
["bug"] = "บูกิส",
["buh"] = "Younuo Bunu",
["bui"] = "Bongili",
["buj"] = "Basa-Gurmana",
["buk"] = "Bukawa",
["bum"] = "Bulu (Cameroon)",
["bun"] = "Sherbro",
["buo"] = "Terei",
["bup"] = "Busoa",
["buq"] = "Brem",
["bus"] = "Bokobaru",
["but"] = "Bungain",
["buu"] = "Budu",
["buv"] = "Bun",
["buw"] = "Bubi",
["bux"] = "Boghom",
["buy"] = "Mmani",
["bva"] = "Barein",
["bvb"] = "Bube",
["bvc"] = "Baelelea",
["bvd"] = "Baeggu",
["bve"] = "Berau Malay",
["bvf"] = "Boor",
["bvg"] = "Bonkeng",
["bvh"] = "Bure",
["bvi"] = "Belanda Viri",
["bvj"] = "Baan",
["bvk"] = "Bukat",
["bvl"] = "Bolivian Sign Language",
["bvm"] = "Bamunka",
["bvn"] = "Buna",
["bvo"] = "Bolgo",
["bvp"] = "Bumang",
["bvq"] = "Birri",
["bvr"] = "Burarra",
["bvt"] = "Bati (Indonesia)",
["bvu"] = "Bukit Malay",
["bvv"] = "Baniva",
["bvw"] = "Boga",
["bvx"] = "Babole",
["bvy"] = "Baybayanon",
["bvz"] = "Bauzi",
["bwa"] = "Bwatoo",
["bwb"] = "Namosi-Naitasiri-Serua",
["bwc"] = "Bwile",
["bwd"] = "Bwaidoka",
["bwe"] = "Bwe Karen",
["bwf"] = "Boselewa",
["bwg"] = "Barwe",
["bwh"] = "Bishuo",
["bwi"] = "Baniwa",
["bwj"] = "Láá Láá Bwamu",
["bwk"] = "Bauwaki",
["bwl"] = "Bwela",
["bwm"] = "Biwat",
["bwn"] = "Wunai Bunu",
["bwo"] = "Shinasha",
["bwp"] = "Mandobo Bawah",
["bwq"] = "Southern Bobo",
["bwr"] = "Bura",
["bws"] = "Bomboma",
["bwt"] = "Bafaw",
["bwu"] = "Buli (Ghana)",
["bww"] = "Bwa",
["bwx"] = "Bu-Nao Bunu",
["bwy"] = "Cwi Bwamu",
["bwz"] = "Bwisi",
["bxa"] = "Bauro",
["bxb"] = "Belanda Bor",
["bxc"] = "Molengue",
["bxd"] = "Pela",
["bxe"] = "Ongota",
["bxf"] = "Bilur",
["bxg"] = "Bangala",
["bxh"] = "Buhutu",
["bxi"] = "Pirlatapa",
["bxj"] = "Bayungu",
["bxk"] = "Bukusu",
["bxl"] = "Jalkunan",
["bxn"] = "Burduna",
["bxo"] = "Barikanchi",
["bxp"] = "Bebil",
["bxq"] = "Beele",
["bxs"] = "Busam",
["bxv"] = "Berakou",
["bxw"] = "Banka",
["bxz"] = "Binahari",
["bya"] = "Palawan Batak",
["byb"] = "Bikya",
["byc"] = "Ubaghara",
["byd"] = "Benyadu'",
["bye"] = "Pouye",
["byf"] = "Bete",
["byg"] = "Baygo",
["byh"] = "Bujhyal",
["byi"] = "Buyu",
["byj"] = "Binawa",
["byk"] = "Biao",
["byl"] = "Bayono",
["bym"] = "Bidyara",
["byn"] = "Blin",
["byo"] = "Biyo",
["byp"] = "Bumaji",
["byq"] = "Basay",
["byr"] = "Baruya",
["bys"] = "Burak",
["byt"] = "Berti",
["byv"] = "Medumba",
["byw"] = "Belhariya",
["byx"] = "Qaqet",
["byz"] = "Banaro",
["bza"] = "Bandi",
["bzb"] = "Andio",
["bzd"] = "Bribri",
["bze"] = "Jenaama Bozo",
["bzf"] = "Boikin",
["bzg"] = "Babuza",
["bzh"] = "Mapos Buang",
["bzi"] = "บีซู",
["bzj"] = "Belizean Creole",
["bzk"] = "Nicaraguan Creole",
["bzl"] = "Boano (Sulawesi)",
["bzm"] = "Bolondo",
["bzn"] = "Boano (Maluku)",
["bzo"] = "Bozaba",
["bzp"] = "Kemberano",
["bzq"] = "Buli (Indonesia)",
["bzr"] = "Biri",
["bzs"] = "Brazilian Sign Language",
["bzu"] = "Burmeso",
["bzv"] = "Bebe",
["bzw"] = "Basa",
["bzx"] = "Hainyaxo Bozo",
["bzy"] = "Obanliku",
["bzz"] = "Evant",
["ca"] = "กาตาลา",
["caa"] = "Ch'orti'",
["cab"] = "Garifuna",
["cac"] = "Chuj",
["cad"] = "Caddo",
["cae"] = "Laalaa",
["caf"] = "Southern Carrier",
["cag"] = "Nivaclé",
["cah"] = "Cahuarano",
["caj"] = "Chané",
["cak"] = "Kaqchikel",
["cal"] = "Carolinian",
["cam"] = "Cèmuhî",
["can"] = "Chambri",
["cao"] = "Chácobo",
["cap"] = "Chipaya",
["caq"] = "คาร์นิโคบาร์",
["car"] = "Kari'na",
["cas"] = "Tsimané",
["cau-abz-pro"] = "Proto-Abkhaz-Abaza",
["cau-and-pro"] = "Proto-Andian",
["cau-ava-pro"] = "Proto-Avaro-Andian",
["cau-cir-pro"] = "Proto-Circassian",
["cau-drg-pro"] = "Proto-Dargwa",
["cau-lzg-pro"] = "Proto-Lezghian",
["cau-nec-pro"] = "คอเคเซียนตะวันออกเฉียงเหนือดั้งเดิม",
["cau-nkh-pro"] = "นัคดั้งเดิม",
["cau-nwc-pro"] = "คอเคเซียนตะวันตกเฉียงเหนือดั้งเดิม",
["cau-tsz-pro"] = "Proto-Tsezian",
["cav"] = "Cavineña",
["caw"] = "Kallawaya",
["cax"] = "Chiquitano",
["cay"] = "Cayuga",
["caz"] = "Canichana",
["cba-ata"] = "Atanques",
["cba-cat"] = "Catío Chibcha",
["cba-dor"] = "Dorasque",
["cba-dui"] = "Duit",
["cba-hue"] = "Huetar",
["cba-nut"] = "Nutabe",
["cba-pro"] = "Proto-Chibchan",
["cbb"] = "Cabiyarí",
["cbc"] = "Carapana",
["cbd"] = "Carijona",
["cbg"] = "Chimila",
["cbi"] = "Chachi",
["cbj"] = "Ede Cabe",
["cbk"] = "ชาบากาโน",
["cbl"] = "Bualkhaw Chin",
["cbn"] = "ญัฮกุร",
["cbo"] = "Izora",
["cbq"] = "Tsucuba",
["cbr"] = "Cashibo-Cacataibo",
["cbs"] = "Cashinahua",
["cbt"] = "Chayahuita",
["cbu"] = "Candoshi-Shapra",
["cbv"] = "Cacua",
["cbw"] = "Kinabalian",
["cby"] = "Carabayo",
["cca"] = "Cauca",
["ccc"] = "Chamicuro",
["ccd"] = "Cafundó",
["cce"] = "Chopi",
["ccg"] = "Chamba Daka",
["cch"] = "Atsam",
["ccj"] = "Kasanga",
["ccl"] = "Cutchi-Swahili",
["ccm"] = "Malaccan Creole Malay",
["cco"] = "Comaltepec Chinantec",
["ccp"] = "จักมา",
["ccr"] = "Cacaopera",
["ccs-gzn-pro"] = "จอร์เจียน-แซนดั้งเดิม",
["ccs-pro"] = "คาร์ทเวเลียนดั้งเดิม",
["cda"] = "Choni",
["cdc-cbm-pro"] = "ชาดิกตอนกลางดั้งเดิม",
["cdc-mas-pro"] = "Proto-Masa",
["cdc-pro"] = "ชาดิกดั้งเดิม",
["cdd-pro"] = "Proto-Caddoan",
["cde"] = "Chenchu",
["cdf"] = "Chiru",
["cdh"] = "Chambeali",
["cdi"] = "Chodri",
["cdj"] = "Churahi",
["cdm"] = "Chepang",
["cdn"] = "Chaudangsi",
["cdo"] = "หมิ่นตะวันออก",
["cdr"] = "Cinda-Regi-Tiyal",
["cds"] = "Chadian Sign Language",
["cdy"] = "Chadong",
["cdz"] = "Koda",
["ce"] = "เชเชน",
["cea"] = "Lower Chehalis",
["ceb"] = "เซบัวโน",
["ceg"] = "Chamacoco",
["cel-bry-pro"] = "บริทอนิกดั้งเดิม",
["cel-gal"] = "Gallaecian",
["cel-gau"] = "กอล",
["cel-pro"] = "เคลติกดั้งเดิม",
["cen"] = "Cen",
["cet"] = "Centúúm",
["cfa"] = "Dijim-Bwilim",
["cfd"] = "Cara",
["cfg"] = "Como Karim",
["cfm"] = "Falam Chin",
["cga"] = "Changriwa",
["cgc"] = "Kagayanen",
["cgg"] = "Rukiga",
["cgk"] = "Chocangaca",
["ch"] = "ชามอร์โร",
["chb"] = "Chibcha",
["chc"] = "Catawba",
["chd"] = "Highland Oaxaca Chontal",
["chf"] = "Chontal Maya",
["chg"] = "ชากาทาย",
["chh"] = "Chinook",
["chi-pro"] = "Proto-Chimakuan",
["chj"] = "Ojitlán Chinantec",
["chk"] = "Chuukese",
["chl"] = "Cahuilla",
["chm-pro"] = "Proto-Mari",
["chn"] = "Chinook Jargon",
["cho"] = "Choctaw",
["chp"] = "Chipewyan",
["chq"] = "Quiotepec Chinantec",
["chr"] = "เชโรกี",
["cht"] = "Cholón",
["chw"] = "Chuabo",
["chx"] = "Chantyal",
["chy"] = "เชเยนน์",
["chz"] = "Ozumacín Chinantec",
["cia"] = "Cia-Cia",
["cib"] = "Ci Gbe",
["cic"] = "Chickasaw",
["cid"] = "Chimariko",
["cie"] = "Cineni",
["cih"] = "Chinali",
["cik"] = "Chitkuli Kinnauri",
["cim"] = "คิมบรี",
["cin"] = "Cinta Larga",
["cip"] = "Chiapanec",
["cir"] = "Tinrin",
["ciy"] = "Chaima",
["cja"] = "จามตะวันตก",
["cje"] = "Chru",
["cjh"] = "Upper Chehalis",
["cji"] = "Chamalal",
["cjk"] = "Chokwe",
["cjm"] = "จามตะวันออก",
["cjn"] = "Chenapian",
["cjo"] = "Ashéninka Pajonal",
["cjp"] = "Cabécar",
["cjs"] = "โชร์",
["cjv"] = "Chuave",
["cjy"] = "จิ้น",
["ckb"] = "เคิร์ดตอนกลาง",
["ckh"] = "Chak",
["ckl"] = "Cibak",
["ckn"] = "Kaang Chin",
["cko"] = "Anufo",
["ckq"] = "Kajakse",
["ckr"] = "Kairak",
["cks"] = "Tayo",
["ckt"] = "ชุกชี",
["cku"] = "Koasati",
["ckv"] = "กบาลัน",
["ckx"] = "Caka",
["cky"] = "Cakfem-Mushere",
["ckz"] = "Kaqchikel-K'iche' Mixed Language",
["cla"] = "Ron",
["clc"] = "Chilcotin",
["cld"] = "Chaldean Neo-Aramaic",
["cle"] = "Lealao Chinantec",
["clh"] = "Chilisso",
["cli"] = "Chakali",
["clj"] = "Laitu Chin",
["clk"] = "Idu",
["cll"] = "Chala",
["clm"] = "Klallam",
["clo"] = "Lowland Oaxaca Chontal",
["clt"] = "Lutuv",
["clu"] = "Caluyanun",
["clw"] = "Chulym",
["cly"] = "Eastern Highland Chatino",
["cma"] = "หมะ",
["cmc-pro"] = "จามิกดั้งเดิม",
["cme"] = "Cerma",
["cmg"] = "มองโกเลียคลาสสิก",
["cmi"] = "Emberá-Chamí",
["cml"] = "Campalagian",
["cmm"] = "Michigamea",
["cmn"] = "จีนกลาง",
["cmo"] = "มนองตอนกลาง",
["cmr"] = "Mro Chin",
["cms"] = "Messapic",
["cmt"] = "Camtho",
["cna"] = "Changthang",
["cnb"] = "Chinbon Chin",
["cnc"] = "Cốông",
["cng"] = "Northern Qiang",
["cnh"] = "Lai",
["cni"] = "Asháninka",
["cnk"] = "Khumi Chin",
["cnl"] = "Lalana Chinantec",
["cno"] = "Con",
["cnp"] = "ผิงเหนือ",
["cns"] = "Central Asmat",
["cnt"] = "Tepetotutla Chinantec",
["cnu"] = "Chenoua",
["cnw"] = "Ngawn Chin",
["cnx"] = "Middle Cornish",
["co"] = "คอร์ซิกา",
["coa"] = "Cocos Islands Malay",
["cob"] = "Chicomuceltec",
["coc"] = "Cocopa",
["cod"] = "Cocama",
["coe"] = "Koreguaje",
["cof"] = "Tsafiki",
["cog"] = "ชอง",
["coh"] = "Chichonyi-Chidzihana-Chikauma",
["coj"] = "Cochimi",
["cok"] = "Santa Teresa Cora",
["col"] = "Columbia-Wenatchi",
["com"] = "Comanche",
["con"] = "Cofán",
["coo"] = "Comox",
["cop"] = "คอปติก",
["coq"] = "Coquille",
["cot"] = "Caquinte",
["cou"] = "Wamey",
["cov"] = "เฉ่าเหมียว",
["cow"] = "Cowlitz",
["cox"] = "Nanti",
["coy"] = "Coyaima",
["coz"] = "Chochotec",
["cpa"] = "Palantla Chinantec",
["cpb"] = "Ucayali-Yurúa Ashéninka",
["cpc"] = "Ajyíninka Apurucayali",
["cpg"] = "Cappadocian Greek",
["cpi"] = "Chinese Pidgin English",
["cpn"] = "Cherepon",
["cpo"] = "Kpee",
["cps"] = "Capiznon",
["cpu"] = "Pichis Ashéninka",
["cpx"] = "ผูเซียน",
["cpy"] = "South Ucayali Ashéninka",
["cqd"] = "Chuanqiandian Cluster Miao",
["cr"] = "ครี",
["cra"] = "Chara",
["crb"] = "Kalinago",
["crc"] = "Lonwolwol",
["crd"] = "Coeur d'Alene",
["crf"] = "Caramanta",
["crg"] = "Michif",
["crh"] = "ตาตาร์แบบไครเมีย",
["cri"] = "Sãotomense",
["crj"] = "Southern East Cree",
["crk"] = "Plains Cree",
["crl"] = "Northern East Cree",
["crm"] = "Moose Cree",
["crn"] = "Cora",
["cro"] = "Crow",
["crp-bip"] = "Basque-Icelandic Pidgin",
["crp-gep"] = "West Greenlandic Pidgin",
["crp-kia"] = "Kiautschou German Pidgin",
["crp-mar"] = "Maroon Spirit Language",
["crp-mpp"] = "Macau Pidgin Portuguese",
["crp-rsn"] = "Russenorsk",
["crp-slb"] = "Solombala English",
["crp-spp"] = "Samoan Plantation Pidgin",
["crp-tpr"] = "Taimyr Pidgin Russian",
["crq"] = "Iyo'wujwa Chorote",
["crr"] = "Carolina Algonquian",
["crs"] = "Seychellois Creole",
["crt"] = "Iyojwa'ja Chorote",
["crv"] = "Chaura",
["crw"] = "Chrau",
["crx"] = "Carrier",
["cry"] = "Cori",
["crz"] = "Cruzeño",
["cs"] = "เช็ก",
["csa"] = "Chiltepec Chinantec",
["csb"] = "คาชุบ",
["csc"] = "Catalan Sign Language",
["csd"] = "Chiangmai Sign Language",
["cse"] = "Czech Sign Language",
["csf"] = "Cuban Sign Language",
["csg"] = "Chilean Sign Language",
["csh"] = "Asho Chin",
["csi"] = "Coast Miwok",
["csj"] = "Songlai Chin",
["csk"] = "Jola-Kasa",
["csl"] = "Chinese Sign Language",
["csm"] = "Central Sierra Miwok",
["csn"] = "Colombian Sign Language",
["cso"] = "Sochiapam Chinantec",
["csp"] = "ผิงใต้",
["csq"] = "Croatian Sign Language",
["csr"] = "Costa Rican Sign Language",
["css"] = "Southern Ohlone",
["cst"] = "Northern Ohlone",
["csu-bba-pro"] = "Proto-Bongo-Bagirmi",
["csu-maa-pro"] = "Proto-Mangbetu",
["csu-pro"] = "Proto-Central Sudanic",
["csu-sar-pro"] = "Proto-Sara",
["csv"] = "Sumtu Chin",
["csw"] = "Swampy Cree",
["csx"] = "Cambodian Sign Language",
["csy"] = "Siyin Chin",
["csz"] = "Coos",
["cta"] = "Tataltepec Chatino",
["ctc"] = "Chetco-Tolowa",
["ctd"] = "Tedim Chin",
["cte"] = "Tepinapa Chinantec",
["ctg"] = "Chittagonian",
["cth"] = "Thaiphum Chin",
["ctl"] = "Tlacoatzintepec Chinantec",
["ctm"] = "Chitimacha",
["ctn"] = "Chhintange",
["cto"] = "Emberá-Catío",
["ctp"] = "Western Highland Chatino",
["cts"] = "Northern Catanduanes Bicolano",
["ctt"] = "Wayanad Chetti",
["ctu"] = "Chol",
["ctz"] = "Zacatepec Chatino",
["cu"] = "สลาวอนิกคริสตจักรเก่า",
["cua"] = "Cua",
["cub"] = "Cubeo",
["cuc"] = "Usila Chinantec",
["cug"] = "Cung",
["cuh"] = "Chuka",
["cui"] = "Cuiba",
["cuj"] = "Mashco Piro",
["cuk"] = "Kuna",
["cul"] = "Culina",
["cuo"] = "Cumanagoto",
["cup"] = "Cupeño",
["cuq"] = "จุน",
["cur"] = "Chhulung",
["cus-ash"] = "Ashraaf",
["cus-hec-pro"] = "Proto-Highland East Cushitic",
["cus-pro"] = "Proto-Cushitic",
["cus-som-pro"] = "โซมาลอยด์ดั้งเดิม",
["cus-sou-pro"] = "Proto-South Cushitic",
["cut"] = "Teutila Cuicatec",
["cuu"] = "Tai Ya",
["cuv"] = "Cuvok",
["cuw"] = "Chukwa",
["cux"] = "Tepeuxila Cuicatec",
["cuy"] = "Cuitlatec",
["cv"] = "ชูวัช",
["cvg"] = "Chug",
["cvn"] = "Valle Nacional Chinantec",
["cwa"] = "Kabwa",
["cwb"] = "Maindo",
["cwd"] = "Woods Cree",
["cwe"] = "Kwere",
["cwg"] = "Chewong",
["cwt"] = "Kuwaataay",
["cy"] = "เวลส์",
["cya"] = "Nopala Chatino",
["cyb"] = "Cayubaba",
["cyo"] = "Cuyunon",
["czh"] = "Huizhou",
["czk"] = "Knaanic",
["czn"] = "Zenzontepec Chatino",
["czo"] = "หมิ่นตอนกลาง",
["czt"] = "Zotung Chin",
["da"] = "เดนมาร์ก",
["daa"] = "Dangaléat",
["dac"] = "Dambi",
["dad"] = "Marik",
["dae"] = "Duupa",
["dag"] = "Dagbani",
["dah"] = "Gwahatike",
["dai"] = "Day",
["daj"] = "Dar Fur Daju",
["dak"] = "ดาโคตา",
["dal"] = "Dahalo",
["dam"] = "Damakawa",
["dao"] = "Daai Chin",
["daq"] = "Dandami Maria",
["dar"] = "Dargwa",
["das"] = "Daho-Doo",
["dau"] = "Dar Sila Daju",
["dav"] = "Taita",
["daw"] = "Davawenyo",
["dax"] = "Dayi",
["daz"] = "Dao",
["dba"] = "Bangime",
["dbb"] = "Deno",
["dbd"] = "Dadiya",
["dbe"] = "Dabe",
["dbf"] = "Edopi",
["dbg"] = "Dogul Dom",
["dbi"] = "Doka",
["dbj"] = "อีดาอัน",
["dbl"] = "Dyirbal",
["dbm"] = "Duguri",
["dbn"] = "Duriankere",
["dbo"] = "Dulbu",
["dbp"] = "Duwai",
["dbq"] = "Daba",
["dbr"] = "Dabarre",
["dbt"] = "Ben Tey",
["dbu"] = "Bondum Dom Dogon",
["dbv"] = "Dungu",
["dbw"] = "Bankan Tey Dogon",
["dby"] = "Dibiyaso",
["dcc"] = "Deccani",
["dcr"] = "เนเกอร์ฮอลันดส์",
["dda"] = "Dadi Dadi",
["ddd"] = "Dongotono",
["dde"] = "Doondo",
["ddg"] = "Fataluku",
["ddi"] = "Diodio",
["ddj"] = "Jaru",
["ddn"] = "Dendi",
["ddo"] = "Tsez",
["ddr"] = "Dhudhuroa",
["dds"] = "Donno So Dogon",
["ddw"] = "Dawera-Daweloor",
["de"] = "เยอรมัน",
["dec"] = "Dagik",
["ded"] = "Dedua",
["dee"] = "Dewoin",
["def"] = "Dezfuli",
["deg"] = "Degema",
["deh"] = "Dehwari",
["dei"] = "Demisa",
["dem"] = "Dem",
["dep"] = "Pidgin Delaware",
["der"] = "Deori",
["des"] = "Desano",
["dev"] = "Domung",
["dez"] = "Dengese",
["dga"] = "Southern Dagaare",
["dgb"] = "Bunoge",
["dgc"] = "Casiguran Dumagat Agta",
["dgd"] = "Dagaari Dioula",
["dge"] = "Degenan",
["dgg"] = "Doga",
["dgh"] = "Dghwede",
["dgi"] = "Northern Dagara",
["dgk"] = "Dagba",
["dgn"] = "Dagoman",
["dgo"] = "Hindi Dogri",
["dgr"] = "Dogrib",
["dgs"] = "Dogoso",
["dgt"] = "Ntra'ngith",
["dgw"] = "Daungwurrung",
["dgx"] = "Doghoro",
["dgz"] = "Daga",
["dhd"] = "Dhundhari",
["dhg"] = "Dhangu",
["dhi"] = "Dhimal",
["dhl"] = "Dhalandji",
["dhm"] = "Zemba",
["dhn"] = "Dhanki",
["dho"] = "Dhodia",
["dhr"] = "Tharrgari",
["dhs"] = "Dhaiso",
["dhu"] = "Dhurga",
["dhv"] = "Drehu",
["dhw"] = "Danuwar",
["dhx"] = "Dhungaloo",
["dia"] = "Dia",
["dib"] = "South Central Dinka",
["dic"] = "Lakota Dida",
["did"] = "Didinga",
["dif"] = "Dieri",
["dig"] = "Digo",
["dii"] = "Dimbong",
["dij"] = "Dai",
["dik"] = "Southwestern Dinka",
["dil"] = "Dilling",
["dim"] = "Dime",
["din"] = "Dinka",
["dio"] = "Dibo",
["dip"] = "Northeastern Dinka",
["dir"] = "Dirim",
["dis"] = "Dimasa",
["diu"] = "Gciriku",
["diw"] = "Northwestern Dinka",
["dix"] = "Dixon Reef",
["diy"] = "Diuwe",
["diz"] = "Ding",
["dja"] = "Djadjawurrung",
["djb"] = "Djinba",
["djc"] = "Dar Daju Daju",
["djd"] = "Jaminjung",
["dje"] = "Zarma",
["djf"] = "Djangun",
["dji"] = "Djinang",
["djj"] = "Ndjébbana",
["djk"] = "Aukan",
["djl"] = "Djiwarli",
["djm"] = "Jamsay",
["djn"] = "Djauan",
["djo"] = "Jangkang",
["djr"] = "Djambarrpuyngu",
["dju"] = "Kapriman",
["djw"] = "Djawi",
["dka"] = "Dakpa",
["dkk"] = "Dakka",
["dkr"] = "Kuijau",
["dks"] = "Southeastern Dinka",
["dkx"] = "Mazagway",
["dlg"] = "Dolgan",
["dlk"] = "Dahalik",
["dlm"] = "แดลเมเชีย",
["dln"] = "Darlong",
["dma"] = "Duma",
["dmb"] = "Mombo Dogon",
["dmc"] = "Gavak",
["dmd"] = "Madhi Madhi",
["dme"] = "Dugwor",
["dmf"] = "Medefaidrin",
["dmg"] = "กีนาบาตางันตอนบน",
["dmk"] = "Domaaki",
["dml"] = "Dameli",
["dmm"] = "Dama (Nigeria)",
["dmn-dam"] = "Dama (Sierra Leone)",
["dmn-mdw-pro"] = "Proto-Western Mande",
["dmn-pro"] = "Proto-Mande",
["dmo"] = "Kemezung",
["dmr"] = "East Damar",
["dms"] = "Dampelas",
["dmu"] = "Dubu",
["dmv"] = "Dumpas",
["dmw"] = "Mudburra",
["dmx"] = "Dema",
["dmy"] = "Demta",
["dna"] = "Upper Grand Valley Dani",
["dnd"] = "Daonda",
["dne"] = "Ndendeule",
["dng"] = "ดุงกาน",
["dni"] = "Lower Grand Valley Dani",
["dnj"] = "Dan",
["dnk"] = "Dengka",
["dnn"] = "Dzuun",
["dno"] = "Ndrulo",
["dnr"] = "Danaru",
["dnt"] = "Mid Grand Valley Dani",
["dnu"] = "Danau",
["dnv"] = "Danu",
["dnw"] = "Western Dani",
["dny"] = "Dení",
["doa"] = "Dom",
["dob"] = "Dobu",
["doc"] = "ต้งเหนือ",
["doe"] = "Doe",
["dof"] = "Domu",
["doh"] = "Dong",
["doi"] = "Dogri",
["dok"] = "Dondo",
["dol"] = "Doso",
["don"] = "Doura",
["doo"] = "Dongo",
["dop"] = "Lukpa",
["doq"] = "Dominican Sign Language",
["dor"] = "Dori'o",
["dos"] = "Dogosé",
["dot"] = "Dass",
["dov"] = "Toka-Leya",
["dow"] = "Doyayo",
["dox"] = "Bussa",
["doy"] = "Dompo",
["doz"] = "Dorze",
["dpp"] = "Papar",
["dra-bry"] = "Beary",
["dra-cen-pro"] = "ดราวิเดียนตอนกลางดั้งเดิม",
["dra-mkn"] = "Middle Kannada",
["dra-nor-pro"] = "ดราวิเดียนเหนือดั้งเดิม",
["dra-okn"] = "Old Kannada",
["dra-ote"] = "Old Telugu",
["dra-pro"] = "ดราวิเดียนดั้งเดิม",
["dra-sdo-pro"] = "ดราวิเดียนใต้ที่หนึ่งดั้งเดิม",
["dra-sdt-pro"] = "ดราวิเดียนใต้ที่สองดั้งเดิม",
["dra-sou-pro"] = "ดราวิเดียนใต้ดั้งเดิม",
["drb"] = "Dair",
["drc"] = "Minderico",
["drd"] = "Darmiya",
["drg"] = "Rungus",
["dri"] = "Lela",
["drl"] = "Baagandji",
["drn"] = "West Damar",
["dro"] = "Daro-Matu Melanau",
["drq"] = "Dura",
["drs"] = "Gedeo",
["dru"] = "Rukai",
["dru-pro"] = "Proto-Rukai",
["dry"] = "Darai",
["dsb"] = "ซอร์เบียตอนล่าง",
["dse"] = "Dutch Sign Language",
["dsh"] = "Daasanach",
["dsi"] = "Disa",
["dsl"] = "Danish Sign Language",
["dsn"] = "Dusner",
["dso"] = "Desiya",
["dsq"] = "Tadaksahak",
["dta"] = "Daur",
["dtb"] = "Labuk-Kinabatangan Kadazan",
["dtd"] = "Ditidaht",
["dth"] = "Adithinngithigh",
["dti"] = "Ana Tinga Dogon",
["dtk"] = "Tene Kan Dogon",
["dtm"] = "Tomo Kan Dogon",
["dto"] = "Tommo So",
["dtp"] = "ดูซุนตอนกลาง",
["dtr"] = "Lotud",
["dts"] = "Toro So Dogon",
["dtt"] = "Toro Tegu Dogon",
["dtu"] = "Tebul Ure Dogon",
["dty"] = "Doteli",
["dua"] = "Duala",
["dub"] = "Dubli",
["duc"] = "Duna",
["due"] = "Umiray Dumaget Agta",
["duf"] = "Dumbea",
["dug"] = "Chiduruma",
["duh"] = "Dungra Bhil",
["dui"] = "Dumun",
["duk"] = "Uyajitaya",
["dul"] = "Alabat Island Agta",
["dum"] = "ดัตช์กลาง",
["dun"] = "Dusun Deyah",
["duo"] = "Dupaningan Agta",
["dup"] = "Duano",
["duq"] = "Dusun Malang",
["dur"] = "Dii",
["dus"] = "Dumi",
["duu"] = "Drung",
["duv"] = "Duvle",
["duw"] = "Dusun Witu",
["dux"] = "Duun",
["duy"] = "Dicamay Agta",
["duz"] = "Duli",
["dv"] = "มัลดีฟส์",
["dva"] = "Duau",
["dwa"] = "Diri",
["dwr"] = "เดาโร",
["dwu"] = "Dhuwal",
["dww"] = "Dawawa",
["dwy"] = "Dhuwaya",
["dwz"] = "Dewas Rai",
["dya"] = "Dyan",
["dyb"] = "Dyaberdyaber",
["dyd"] = "Dyugun",
["dyg"] = "Villa Viciosa Agta",
["dyi"] = "Djimini",
["dym"] = "Yanda Dogon",
["dyn"] = "Dyangadi",
["dyo"] = "Jola-Fonyi",
["dyu"] = "Dyula",
["dyy"] = "Dyaabugay",
["dz"] = "ซองคา",
["dza"] = "Tunzu",
["dzg"] = "Dazaga",
["dzl"] = "Dzala",
["dzn"] = "Dzando",
["ebg"] = "Ebughu",
["ebk"] = "Eastern Bontoc",
["ebr"] = "Ebrié",
["ebu"] = "Embu",
["ecr"] = "Eteocretan",
["ecs"] = "Ecuadorian Sign Language",
["ecy"] = "Eteocypriot",
["ee"] = "เอเว",
["eee"] = "E",
["efa"] = "Efai",
["efe"] = "Efe",
["efi"] = "Efik",
["ega"] = "Ega",
["egl"] = "เอมีเลีย",
["ego"] = "Eggon",
["egx-dem"] = "Demotic Egyptian",
["egy"] = "อียิปต์",
["ehu"] = "Ehueun",
["eip"] = "Eipomek",
["eit"] = "Eitiep",
["eiv"] = "Askopan",
["eja"] = "Ejamat",
["eka"] = "Ekajuk",
["eke"] = "Ekit",
["ekg"] = "Ekari",
["eki"] = "Eki",
["ekl"] = "Kolhe",
["ekm"] = "Elip",
["eko"] = "Koti",
["ekp"] = "Ekpeye",
["ekr"] = "Yace",
["eky"] = "กะยาตะวันออก",
["el"] = "กรีก",
["ele"] = "Elepi",
["elh"] = "El Hugeirat",
["eli"] = "Nding",
["elk"] = "Elkei",
["elm"] = "Eleme",
["elo"] = "El Molo",
["elu"] = "Elu",
["elx"] = "Elamite",
["ema"] = "Emai",
["emb"] = "Embaloh",
["eme"] = "Emerillon",
["emg"] = "Eastern Meohang",
["emi"] = "Mussau-Emira",
["emk"] = "Eastern Maninkakan",
["emm"] = "Mamulique",
["emn"] = "Eman",
["emp"] = "Northern Emberá",
["ems"] = "อาลูตีก",
["emu"] = "Eastern Muria",
["emw"] = "Emplawas",
["emx"] = "Erromintxela",
["emy"] = "Epigraphic Mayan",
["en"] = "อังกฤษ",
["ena"] = "Apali",
["enb"] = "Markweeta",
["enc"] = "En",
["end"] = "Ende",
["enf"] = "Forest Enets",
["enh"] = "Tundra Enets",
["enl"] = "Enlhet",
["enm"] = "อังกฤษกลาง",
["enn"] = "Engenni",
["eno"] = "Enggano",
["enq"] = "Enga",
["enr"] = "Emem",
["enu"] = "Enu",
["env"] = "Enwan",
["enw"] = "Enwang",
["enx"] = "Enxet",
["eo"] = "เอสเปรันโต",
["eot"] = "Eotile",
["epi"] = "Epie",
["era"] = "Eravallan",
["erg"] = "Sie",
["erh"] = "Eruwa",
["eri"] = "Ogea",
["erk"] = "South Efate",
["ero-gsz"] = "Geshiza",
["ero-nya"] = "Nyagrong Minyag",
["ero-tau"] = "Stau",
["err"] = "Erre",
["ers"] = "Ersu",
["ert"] = "Eritai",
["erw"] = "Erokwanas",
["es"] = "สเปน",
["ese"] = "Ese Ejja",
["esh"] = "เอชเตฮาร์ด",
["esl"] = "Egyptian Sign Language",
["esm"] = "Esuma",
["esn"] = "Salvadoran Sign Language",
["eso"] = "Estonian Sign Language",
["esq"] = "Esselen",
["ess"] = "Central Siberian Yupik",
["esu"] = "ยุปปิก",
["esx-esk-pro"] = "เอสกิโมดั้งเดิม",
["esx-ink"] = "Inuktun",
["esx-inq"] = "Inuinnaqtun",
["esx-inu-pro"] = "อินุอิตดั้งเดิม",
["esx-pro"] = "Proto-Eskimo-Aleut",
["esx-tut"] = "Tunumiisut",
["esy"] = "Eskayan",
["et"] = "เอสโตเนีย",
["etb"] = "Etebi",
["etc"] = "Etchemin",
["eth"] = "Ethiopian Sign Language",
["etn"] = "Eton (Vanuatu)",
["eto"] = "Eton (Cameroon)",
["etr"] = "Edolo",
["ets"] = "Yekhee",
["ett"] = "อีทรัสคัน",
["etu"] = "Ejagham",
["etx"] = "Eten",
["etz"] = "Semimi",
["eu"] = "บาสก์",
["euq-pro"] = "บาสก์ดั้งเดิม",
["eve"] = "เอเว็น",
["evh"] = "Uvbie",
["evn"] = "เอเวนค์",
["ewo"] = "Ewondo",
["ext"] = "เอซเตรมาดูรา",
["eya"] = "Eyak",
["eyo"] = "Keiyo",
["eza"] = "Ezaa",
["eze"] = "Uzekwe",
["fa"] = "เปอร์เซีย",
["faa"] = "Fasu",
["fab"] = "Annobonese",
["fad"] = "Wagi",
["faf"] = "Fagani",
["fag"] = "Finongan",
["fah"] = "Baissa Fali",
["fai"] = "Faiwol",
["faj"] = "Faita",
["fak"] = "Fang (Beboid)",
["fal"] = "South Fali",
["fam"] = "Fam",
["fan"] = "Fang (Bantu)",
["fap"] = "Palor",
["far"] = "Fataleka",
["fau"] = "Fayu",
["fax"] = "ฟาลา",
["fay"] = "Southwestern Fars",
["faz"] = "Northwestern Fars",
["fbl"] = "West Albay Bikol",
["fcs"] = "Quebec Sign Language",
["fer"] = "Feroge",
["ff"] = "ฟูลา",
["ffi"] = "Foia Foia",
["fgr"] = "Fongoro",
["fi"] = "ฟินแลนด์",
["fia"] = "Nobiin",
["fie"] = "Fyer",
["fip"] = "Fipa",
["fir"] = "Firan",
["fit"] = "Meänkieli",
["fiw"] = "Fiwaga",
["fj"] = "ฟีจี",
["fkk"] = "Kirya-Konzel",
["fkv"] = "Kven",
["fla"] = "Montana Salish",
["flh"] = "Foau",
["fli"] = "Fali",
["fll"] = "North Fali",
["fln"] = "Flinders Island",
["flr"] = "Fuliiru",
["fly"] = "Tsotsitaal",
["fmp"] = "Fe'fe'",
["fmu"] = "Far Western Muria",
["fng"] = "Fanagalo",
["fni"] = "Fania",
["fo"] = "แฟโร",
["fod"] = "Foodo",
["foi"] = "Foi",
["fom"] = "Foma",
["fon"] = "Fon",
["for"] = "Fore",
["fos"] = "Siraya",
["fpe"] = "Pichinglis",
["fqs"] = "Fas",
["fr"] = "ฝรั่งเศส",
["frd"] = "Fordata",
["frm"] = "ฝรั่งเศสกลาง",
["fro"] = "ฝรั่งเศสเก่า",
["frp"] = "ฟร็องโก-พรอว็องส์",
["frq"] = "Forak",
["frr"] = "ฟรีเชียเหนือ",
["frt"] = "Fortsenal",
["fse"] = "Finnish Sign Language",
["fsl"] = "French Sign Language",
["fss"] = "Finnish-Swedish Sign Language",
["fud"] = "East Futuna",
["fuj"] = "Ko",
["fum"] = "Fum",
["fun"] = "Fulniô",
["fur"] = "ฟรียูลี",
["fut"] = "Futuna-Aniwa",
["fuu"] = "Furu",
["fuy"] = "Fuyug",
["fvr"] = "Fur",
["fwa"] = "Fwâi",
["fwe"] = "Fwe",
["fy"] = "ฟรีเชียตะวันตก",
["ga"] = "ไอริช",
["gaa"] = "Ga",
["gab"] = "Gabri",
["gac"] = "Mixed Great Andamanese",
["gad"] = "Gaddang",
["gae"] = "Warekena",
["gaf"] = "Gende",
["gag"] = "กากาอุซ",
["gah"] = "Alekano",
["gai"] = "Borei",
["gaj"] = "Gadsup",
["gak"] = "Gamkonora",
["gal"] = "Galoli",
["gam"] = "Kandawo",
["gan"] = "กั้น",
["gao"] = "Gants",
["gap"] = "Gal",
["gaq"] = "Gata'",
["gar"] = "Galeya",
["gas"] = "Adiwasi Garasia",
["gat"] = "Kenati",
["gau"] = "Kondekor",
["gaw"] = "Nobonob",
["gay"] = "Gayo",
["gba-pro"] = "Proto-Gbaya",
["gbb"] = "Kaytetye",
["gbd"] = "Karadjeri",
["gbe"] = "Niksek",
["gbf"] = "Gaikundi",
["gbg"] = "Gbanziri",
["gbh"] = "Defi Gbe",
["gbi"] = "Galela",
["gbj"] = "Bodo Gadaba",
["gbk"] = "Gaddi",
["gbl"] = "Gamit",
["gbm"] = "Garhwali",
["gbn"] = "Mo'da",
["gbo"] = "Northern Grebo",
["gbp"] = "Gbaya-Bossangoa",
["gbq"] = "Gbaya-Bozoum",
["gbr"] = "Gbagyi",
["gbs"] = "Gbesi Gbe",
["gbu"] = "Gagadu",
["gbv"] = "Gbanu",
["gbw"] = "Gabi",
["gbx"] = "Eastern Xwla Gbe",
["gby"] = "Gbari",
["gcc"] = "Mali",
["gcd"] = "Ganggalida",
["gce"] = "Galice",
["gcf"] = "Antillean Creole",
["gcl"] = "Grenadian Creole English",
["gcn"] = "Gaina",
["gcr"] = "Guianese Creole",
["gct"] = "Colonia Tovar German",
["gd"] = "แกลิกแบบสกอตแลนด์",
["gdb"] = "Ollari",
["gdc"] = "Gugu Badhun",
["gdd"] = "Gedaged",
["gde"] = "Gude",
["gdf"] = "Guduf-Gava",
["gdg"] = "Ga'dang",
["gdh"] = "Gadjerawang",
["gdi"] = "Gundi",
["gdj"] = "Kurtjar",
["gdk"] = "Gadang",
["gdl"] = "Dirasha",
["gdm"] = "Laal",
["gdn"] = "Umanakaina",
["gdo"] = "Godoberi",
["gdq"] = "Mehri",
["gdr"] = "Wipi",
["gds"] = "Ghandruk Sign Language",
["gdt"] = "Kungardutyi",
["gdu"] = "Gudu",
["gdx"] = "Godwari",
["gea"] = "Geruma",
["geb"] = "Kire",
["gec"] = "Gboloo Grebo",
["ged"] = "Gade",
["geg"] = "Gengle",
["geh"] = "Hutterisch",
["gei"] = "Gebe",
["gej"] = "Gen",
["gek"] = "Gerka",
["gel"] = "Fakkanci",
["gem-pro"] = "เจอร์แมนิกดั้งเดิม",
["geq"] = "Geme",
["ges"] = "Geser-Gorom",
["gev"] = "Viya",
["gew"] = "Gera",
["gex"] = "Garre",
["gey"] = "Enya",
["gez"] = "กืออึซ",
["gfk"] = "Patpatar",
["gft"] = "Gafat",
["gga"] = "Gao",
["ggb"] = "Gbii",
["ggd"] = "Gugadj",
["gge"] = "Guragone",
["ggg"] = "Gurgula",
["ggk"] = "Kungarakany",
["ggl"] = "Ganglau",
["ggn"] = "Eastern Gurung",
["ggt"] = "Gitua",
["ggu"] = "Gban",
["ggw"] = "Gogodala",
["gha"] = "Ghadames",
["ghc"] = "แกลิกคลาสสิก",
["ghe"] = "Southern Ghale",
["ghh"] = "Northern Ghale",
["ghk"] = "Geko Karen",
["ghl"] = "Ghulfan",
["ghn"] = "Ghanongga",
["gho"] = "Ghomara",
["ghr"] = "Ghera",
["ghs"] = "Guhu-Samane",
["ght"] = "Kutang Ghale",
["gia"] = "Kitja",
["gib"] = "Gibanawa",
["gid"] = "Gidar",
["gie"] = "Guébie",
["gig"] = "Goaria",
["gih"] = "Githabul",
["gii"] = "Girirra",
["gil"] = "กิลเบิร์ต",
["gim"] = "Gimi (Papuan)",
["gin"] = "Hinukh",
["gip"] = "Gimi (Austronesian)",
["giq"] = "Green Gelao",
["gir"] = "Red Gelao",
["gis"] = "North Giziga",
["git"] = "Gitxsan",
["giu"] = "Mulao",
["giw"] = "White Gelao",
["gix"] = "Gilima",
["giy"] = "Giyug",
["giz"] = "South Giziga",
["gji"] = "Geji",
["gjk"] = "Kachi Koli",
["gjm"] = "Gunditjmara",
["gjn"] = "Gonja",
["gjr"] = "Gurindji Kriol",
["gju"] = "Gojri",
["gka"] = "Guya",
["gkd"] = "Magɨ",
["gke"] = "Ndai",
["gkn"] = "Gokana",
["gko"] = "Kok-Nar",
["gkp"] = "Guinea Kpelle",
["gl"] = "กาลิเซีย",
["glc"] = "Bon Gula",
["gld"] = "Nanai",
["glh"] = "Northwest Pashayi",
["glj"] = "Kulaal",
["glk"] = "Gilaki",
["glo"] = "Galambu",
["glr"] = "Glaro-Twabo",
["glu"] = "Gula",
["glw"] = "Glavda",
["gly"] = "Gule",
["gma"] = "Gambera",
["gmb"] = "Gula'alaa",
["gmd"] = "Mághdì",
["gme-bur"] = "Burgundian",
["gme-cgo"] = "กอทแบบไครเมีย",
["gmg"] = "Magiyi",
["gmh"] = "เยอรมันสูงกลาง",
["gml"] = "เยอรมันต่ำกลาง",
["gmm"] = "Gbaya-Mbodomo",
["gmn"] = "Gimnime",
["gmq-gut"] = "Gutnish",
["gmq-jmk"] = "Jamtish",
["gmq-mno"] = "นอร์เวย์กลาง",
["gmq-oda"] = "เดนมาร์กเก่า",
["gmq-ogt"] = "Old Gutnish",
["gmq-osw"] = "สวีเดนเก่า",
["gmq-pro"] = "นอร์สดั้งเดิม",
["gmq-scy"] = "Scanian",
["gmr"] = "Mirning",
["gmu"] = "Gumalu",
["gmv"] = "กาโม",
["gmw-bgh"] = "Bergish",
["gmw-cfr"] = "ฟรังโกเนียตอนกลาง",
["gmw-ecg"] = "เยอรมันตอนกลางตะวันออก",
["gmw-fin"] = "Fingallian",
["gmw-gts"] = "Gottscheerish",
["gmw-jdt"] = "Jersey Dutch",
["gmw-msc"] = "Middle Scots",
["gmw-pro"] = "เจอร์แมนิกตะวันตกดั้งเดิม",
["gmw-rfr"] = "ฟรังโกเนียแบบไรน์",
["gmw-stm"] = "Sathmar Swabian",
["gmw-tsx"] = "Transylvanian Saxon",
["gmw-vog"] = "เยอรมันแบบว็อลกา",
["gmw-zps"] = "เยอรมันแบบซิพเซอร์",
["gmx"] = "Magoma",
["gmy"] = "กรีกแบบไมซีนี",
["gmz"] = "Mgbo",
["gn-cls"] = "กัวรานีคลาสสิก",
["gna"] = "Kaansa",
["gnb"] = "Gangte",
["gnc"] = "Guanche",
["gnd"] = "Zulgo-Gemzek",
["gne"] = "Ganang",
["gng"] = "Ngangam",
["gnh"] = "Lere",
["gni"] = "กูนียันดี",
["gnj"] = "Ngen of Djonkro",
["gnk"] = "ǁGana",
["gnl"] = "Gangulu",
["gnm"] = "Ginuman",
["gnn"] = "Gumatj",
["gnq"] = "Gana",
["gnr"] = "Gureng Gureng",
["gnt"] = "Guntai",
["gnu"] = "Gnau",
["gnw"] = "Western Bolivian Guarani",
["gnz"] = "Ganzi",
["goa"] = "Guro",
["gob"] = "Playero",
["goc"] = "Gorakor",
["god"] = "Godié",
["goe"] = "Gongduk",
["gof"] = "โกฟา",
["gog"] = "Gogo",
["goh"] = "เยอรมันสูงเก่า",
["goi"] = "Gobasi",
["goj"] = "Gowlan",
["gol"] = "Gola",
["gon"] = "โคณฑี",
["goo"] = "Gone Dau",
["gop"] = "Yeretuar",
["goq"] = "Gorap",
["gor"] = "Gorontalo",
["got"] = "กอท",
["gou"] = "Gavar",
["gov"] = "Goo",
["gow"] = "Gorwaa",
["gox"] = "Gobu",
["goy"] = "Goundo",
["goz"] = "Gozarkhani",
["gpa"] = "Gupa-Abawa",
["gpn"] = "Taiap",
["gqa"] = "Ga'anda",
["gqi"] = "Guiqiong",
["gqn"] = "Kinikinao",
["gqr"] = "Gor",
["gqu"] = "Qau",
["gra"] = "Rajput Garasia",
["grc"] = "กรีกโบราณ",
["grd"] = "Guruntum",
["grg"] = "Madi",
["grh"] = "Gbiri-Niragu",
["gri"] = "Ghari",
["grj"] = "Southern Grebo",
["grk-cal"] = "Calabrian Greek",
["grk-ita"] = "Italiot Greek",
["grk-mar"] = "Mariupol Greek",
["grk-pro"] = "เฮลเลนิกดั้งเดิม",
["grm"] = "Kota Marudu Talantang",
["gro"] = "Groma",
["grq"] = "Gorovu",
["grs"] = "Gresi",
["grt"] = "กาโร",
["gru"] = "Kistane",
["grv"] = "Central Grebo",
["grw"] = "Gweda",
["grx"] = "Guriaso",
["gry"] = "Barclayville Grebo",
["grz"] = "Guramalum",
["gse"] = "Ghanaian Sign Language",
["gsg"] = "German Sign Language",
["gsl"] = "Gusilay",
["gsm"] = "Guatemalan Sign Language",
["gsn"] = "Gusan",
["gso"] = "Southwest Gbaya",
["gsp"] = "Wasembo",
["gss"] = "Greek Sign Language",
["gsw"] = "เยอรมันแบบอลามันเนีย",
["gta"] = "Guató",
["gtu"] = "Aghu Tharrnggala",
["gu"] = "คุชราต",
["gua"] = "Shiki",
["gub"] = "Guajajára",
["guc"] = "Wayuu",
["gud"] = "Yocoboué Dida",
["gue"] = "Gurindji",
["guf"] = "Gupapuyngu",
["gug"] = "กัวรานีแบบปารากวัย",
["guh"] = "Guahibo",
["gui"] = "Eastern Bolivian Guarani",
["guk"] = "Gumuz",
["gul"] = "Gullah",
["gum"] = "Guambiano",
["gun"] = "Mbya Guarani",
["guo"] = "Guayabero",
["gup"] = "Gunwinggu",
["guq"] = "Aché",
["gur"] = "ฟราฟรา",
["gus"] = "Guinean Sign Language",
["gut"] = "Maléku Jaíka",
["guu"] = "Yanomamö",
["guv"] = "Gey",
["guw"] = "Gun",
["gux"] = "Gourmanchéma",
["guz"] = "Gusii",
["gv"] = "แมงซ์",
["gva"] = "Kaskihá",
["gvc"] = "Guanano",
["gve"] = "Duwet",
["gvf"] = "Golin",
["gvj"] = "Guajá",
["gvl"] = "Gulay",
["gvm"] = "Gurmana",
["gvn"] = "Kuku-Yalanji",
["gvo"] = "Gavião do Jiparaná",
["gvp"] = "Pará Gavião",
["gvr"] = "Western Gurung",
["gvs"] = "Gumawana",
["gvy"] = "Guyani",
["gwa"] = "Mbato",
["gwb"] = "Gwa",
["gwc"] = "Kalami",
["gwd"] = "Gawwada",
["gwe"] = "Gweno",
["gwf"] = "Gowro",
["gwg"] = "Moo",
["gwi"] = "Gwich'in",
["gwj"] = "Gcwi",
["gwm"] = "Awngthim",
["gwn"] = "Gwandara",
["gwr"] = "Gwere",
["gwt"] = "Gawar-Bati",
["gwu"] = "Guwamu",
["gww"] = "Kwini",
["gwx"] = "Gua",
["gxx"] = "Wè Southern",
["gya"] = "Northwest Gbaya",
["gyb"] = "Garus",
["gyd"] = "Kayardild",
["gye"] = "Gyem",
["gyf"] = "Gungabula",
["gyg"] = "Gbayi",
["gyi"] = "Gyele",
["gyl"] = "Gayil",
["gym"] = "Ngäbere",
["gyn"] = "Guyanese Creole English",
["gyo"] = "Gyalsumdo",
["gyr"] = "Guarayu",
["gyy"] = "Gunya",
["gza"] = "Ganza",
["gzn"] = "Gane",
["ha"] = "เฮาซา",
["haa"] = "Hän",
["hab"] = "Hanoi Sign Language",
["hac"] = "Gurani",
["had"] = "Hatam",
["haf"] = "Haiphong Sign Language",
["hag"] = "Hanga",
["hah"] = "Hahon",
["hai"] = "Haida",
["haj"] = "ฮาชอง",
["hak"] = "แคะ",
["hal"] = "Halang",
["ham"] = "Hewa",
["hao"] = "Hakö",
["hap"] = "Hupla",
["har"] = "Harari",
["has"] = "Haisla",
["hav"] = "Havu",
["haw"] = "ฮาวาย",
["hax"] = "Southern Haida",
["hay"] = "Haya",
["hba"] = "Hamba",
["hbb"] = "Huba",
["hbn"] = "Heiban",
["hbu"] = "Habu",
["hca"] = "Andaman Creole Hindi",
["hch"] = "Huichol",
["hdn"] = "Northern Haida",
["hds"] = "Honduras Sign Language",
["hdy"] = "Hadiyya",
["he"] = "ฮีบรู",
["hea"] = "Northern Qiandong Miao",
["hed"] = "Herdé",
["heg"] = "Helong",
["heh"] = "Hehe",
["hei"] = "Heiltsuk",
["hem"] = "Hemba",
["hgm"] = "Haiǁom",
["hgw"] = "Haigwai",
["hhi"] = "Hoia Hoia",
["hhr"] = "Kerak",
["hhy"] = "Hoyahoya",
["hi"] = "ฮินดี",
["hia"] = "Lamang",
["hib"] = "Hibito",
["hid"] = "Hidatsa",
["hif"] = "ฮินดีแบบฟีจี",
["hig"] = "Kamwe",
["hih"] = "Pamosu",
["hii"] = "Hinduri",
["hij"] = "Hijuk",
["hik"] = "Seit-Kaitetu",
["hil"] = "ฮีลีไกโนน",
["hio"] = "Tshwa",
["hir"] = "Himarimã",
["hit"] = "Hittite",
["hiw"] = "Hiw",
["hix"] = "Hixkaryana",
["hji"] = "Haji",
["hka"] = "Kahe",
["hke"] = "Hunde",
["hkh"] = "Pogali",
["hkk"] = "Hunjara-Kaina Ke",
["hkn"] = "Mel-Khaonh",
["hks"] = "Hong Kong Sign Language",
["hla"] = "Halia",
["hlb"] = "Halbi",
["hld"] = "Halang Doan",
["hle"] = "Hlersu",
["hlt"] = "Nga La",
["hma"] = "Southern Mashan Hmong",
["hmb"] = "Humburi Senni",
["hmc"] = "Central Huishui Hmong",
["hmd"] = "A-Hmao",
["hme"] = "Eastern Huishui Hmong",
["hmf"] = "Hmong Don",
["hmg"] = "Southwestern Guiyang Hmong",
["hmh"] = "Southwestern Huishui Hmong",
["hmi"] = "Northern Huishui Hmong",
["hmj"] = "Ge",
["hmk"] = "Yemaek",
["hml"] = "Luopohe Hmong",
["hmm"] = "Central Mashan Hmong",
["hmn-pro"] = "ม้งดั้งเดิม",
["hmp"] = "Northern Mashan Hmong",
["hmq"] = "Eastern Qiandong Miao",
["hmr"] = "Hmar",
["hms"] = "Southern Qiandong Miao",
["hmt"] = "Hamtai",
["hmu"] = "Hamap",
["hmv"] = "Hmong Dô",
["hmw"] = "Western Mashan Hmong",
["hmx-mie-pro"] = "เมี่ยนดั้งเดิม",
["hmx-pro"] = "ม้ง-เมี่ยนดั้งเดิม",
["hmy"] = "Southern Guiyang Hmong",
["hmz"] = "Hmong Shua",
["hna"] = "Mina",
["hnd"] = "Southern Hindko",
["hne"] = "Chhattisgarhi",
["hnh"] = "ǁAni",
["hni"] = "Hani",
["hnj"] = "ม้งเขียว",
["hnm"] = "ไหหลำ",
["hnn"] = "ฮานูโนโอ",
["hno"] = "Northern Hindko",
["hns"] = "ฮินดูสตานีแบบแคริบเบียน",
["hnu"] = "Hung",
["ho"] = "ฮีรีโมตู",
["hoa"] = "Hoava",
["hob"] = "Austronesian Mari",
["hoc"] = "Ho",
["hod"] = "Holma",
["hoe"] = "Horom",
["hoh"] = "Hobyót",
["hoi"] = "Holikachuk",
["hoj"] = "Hadoti",
["hol"] = "Holu",
["hom"] = "Homa",
["hoo"] = "Holoholo",
["hop"] = "Hopi",
["hor"] = "Horo",
["hos"] = "Ho Chi Minh City Sign Language",
["hot"] = "Hote",
["hov"] = "Hovongan",
["how"] = "Honi",
["hoy"] = "Holiya",
["hoz"] = "Hozo",
["hpo"] = "Hpon",
["hps"] = "Hawai'i Pidgin Sign Language",
["hra"] = "Hrangkhol",
["hrc"] = "Niwer Mil",
["hre"] = "Hrê",
["hrk"] = "Haruku",
["hrm"] = "Horned Miao",
["hro"] = "Haroi",
["hrp"] = "Nhirrpi",
["hrt"] = "Hértevin",
["hru"] = "Hruso",
["hrw"] = "Warwar Feni",
["hrx"] = "ฮุนสริก",
["hrz"] = "Harzani",
["hsb"] = "ซอร์เบียตอนบน",
["hsh"] = "Hungarian Sign Language",
["hsl"] = "Hausa Sign Language",
["hsn"] = "เซียง",
["hss"] = "Harsusi",
["ht"] = "ครีโอลเฮติ",
["hti"] = "Hoti",
["hto"] = "Minica Huitoto",
["hts"] = "Hadza",
["htu"] = "Hitu",
["hu"] = "ฮังการี",
["hub"] = "Huambisa",
["huc"] = "ǂHoan",
["hud"] = "Huaulu",
["huf"] = "Humene",
["hug"] = "Huachipaeri",
["huh"] = "Huilliche",
["hui"] = "Huli",
["huj"] = "Northern Guiyang Hmong",
["huk"] = "Hulung",
["hul"] = "Hula",
["hum"] = "Hungana",
["huo"] = "Hu",
["hup"] = "Hupa",
["huq"] = "Tsat",
["hur"] = "Halkomelem",
["hus"] = "Wastek",
["huu"] = "Murui Huitoto",
["huv"] = "Huave",
["huw"] = "Hukumina",
["hux"] = "Nüpode Huitoto",
["huy"] = "Hulaulá",
["huz"] = "Hunzib",
["hvc"] = "Haitian Vodoun Culture Language",
["hvk"] = "Haveke",
["hvn"] = "Sabu",
["hwa"] = "Wané",
["hwc"] = "Hawaiian Creole",
["hwo"] = "Hwana",
["hy"] = "อาร์มีเนีย",
["hya"] = "Hya",
["hyx-pro"] = "อาร์มีเนียนดั้งเดิม",
["hz"] = "เฮเรโร",
["ia"] = "อินเทอร์ลิงกวา",
["iai"] = "Iaai",
["ian"] = "Iatmul",
["iar"] = "Purari",
["iba"] = "อีบัน",
["ibb"] = "Ibibio",
["ibd"] = "Iwaidja",
["ibe"] = "Akpes",
["ibg"] = "Ibanag",
["ibh"] = "Bih",
["ibl"] = "Ibaloi",
["ibm"] = "Agoi",
["ibn"] = "Ibino",
["ibr"] = "Ibuoro",
["ibu"] = "Ibu",
["iby"] = "Ibani",
["ica"] = "Ede Ica",
["ich"] = "Etkywan",
["icl"] = "Icelandic Sign Language",
["icr"] = "Islander Creole English",
["id"] = "อินโดนีเซีย",
["ida"] = "Idakho-Isukha-Tiriki",
["idb"] = "Indo-Portuguese",
["idc"] = "Idon",
["idd"] = "Ede Idaca",
["ide"] = "Idere",
["idi"] = "Idi",
["idr"] = "Indri",
["ids"] = "Idesa",
["idt"] = "Idaté",
["idu"] = "Idoma",
["ie"] = "อินเทร์ลิงเกว",
["ifa"] = "Amganad Ifugao",
["ifb"] = "Batad Ifugao",
["ife"] = "Ifè",
["iff"] = "Ifo",
["ifk"] = "Tuwali Ifugao",
["ifm"] = "Teke-Fuumu",
["ifu"] = "Mayoyao Ifugao",
["ify"] = "Keley-I Kallahan",
["ig"] = "อิกโบ",
["igb"] = "Ebira",
["ige"] = "Igede",
["igg"] = "Igana",
["igl"] = "Igala",
["igm"] = "Kanggape",
["ign"] = "Ignaciano",
["igo"] = "Isebe",
["igs"] = "Glosa",
["igw"] = "Igwe",
["ihb"] = "Pidgin Iha",
["ihi"] = "Ihievbe",
["ihp"] = "Iha",
["ii"] = "นอซู",
["iir-nur-pro"] = "Proto-Nuristani",
["iir-pro"] = "อินโด-อิเรเนียนดั้งเดิม",
["ijc"] = "Izon",
["ije"] = "Biseni",
["ijj"] = "Ede Ije",
["ijn"] = "Kalabari",
["ijo-pro"] = "Proto-Ijoid",
["ijs"] = "Southeast Ijo",
["ik"] = "Inupiaq",
["ike"] = "Eastern Canadian Inuktitut",
["iki"] = "Iko",
["ikk"] = "Ika",
["ikl"] = "Ikulu",
["iko"] = "Olulumo-Ikom",
["ikp"] = "Ikpeshi",
["ikr"] = "Ikaranggal",
["iks"] = "Inuit Sign Language",
["ikt"] = "Inuvialuktun",
["ikv"] = "Iku-Gora-Ankwa",
["ikw"] = "Ikwere",
["ikx"] = "Ik",
["ikz"] = "Ikizu",
["ila"] = "Ile Ape",
["ilb"] = "Ila",
["ilg"] = "Ilgar",
["ili"] = "Ili Turki",
["ilk"] = "Ilongot",
["ill"] = "อีรานุน",
["ilo"] = "อีโลกาโน",
["ils"] = "International Sign",
["ilu"] = "Ili'uun",
["ilv"] = "Ilue",
["ima"] = "Mala Malasar",
["imi"] = "Anamgura",
["iml"] = "Miluk",
["imn"] = "Imonda",
["imo"] = "Imbongu",
["imr"] = "Imroing",
["ims"] = "Marsian",
["imy"] = "Milyan",
["inb"] = "Inga",
["inc-apa"] = "Apabhramsa",
["inc-ash"] = "ปรากฤตแบบอโศก",
["inc-dng-pro"] = "Proto-Dangari",
["inc-kam"] = "กามรูป",
["inc-kho"] = "Kholosi",
["inc-krd-pro"] = "Proto-Kamta",
["inc-mas"] = "อัสสัมกลาง",
["inc-mbn"] = "เบงกอลกลาง",
["inc-mgu"] = "คุชราตกลาง",
["inc-mor"] = "โอริยากลาง",
["inc-oas"] = "อัสสัมช่วงต้น",
["inc-oaw"] = "Old Awadhi",
["inc-obn"] = "เบงกอลเก่า",
["inc-ogu"] = "คุชราตเก่า",
["inc-ohi"] = "ฮินดีเก่า",
["inc-oor"] = "โอริยาเก่า",
["inc-opa"] = "ปัญจาบเก่า",
["inc-pro"] = "อินโด-อารยันดั้งเดิม",
["ine-ana-pro"] = "อานาโตเลียนดั้งเดิม",
["ine-bsl-pro"] = "บอลโต-สลาวิกดั้งเดิม",
["ine-kal"] = "Kalašma",
["ine-pae"] = "Paeonian",
["ine-pro"] = "อินโด-ยูโรเปียนดั้งเดิม",
["ine-toc-pro"] = "โทแคเรียนดั้งเดิม",
["ing"] = "Deg Xinag",
["inh"] = "อิงกุช",
["inj"] = "Jungle Inga",
["inl"] = "มืออินโดนีเซีย",
["inm"] = "Minaean",
["inn"] = "Isinai",
["ino"] = "Inoke-Yate",
["inp"] = "Iñapari",
["ins"] = "มืออินเดีย",
["int"] = "Intha",
["inz"] = "Ineseño",
["io"] = "อีโด",
["ior"] = "Inor",
["iou"] = "Tuma-Irumu",
["iow"] = "Chiwere",
["ipi"] = "Ipili",
["ipo"] = "Ipiko",
["iqu"] = "Iquito",
["iqw"] = "Ikwo",
["ira-kms-pro"] = "Proto-Komisenian",
["ira-mny-pro"] = "Proto-Munji-Yidgha",
["ira-mpr-pro"] = "Proto-Medo-Parthian",
["ira-pat-pro"] = "ปาทานดั้งเดิม",
["ira-pro"] = "อิเรเนียนดั้งเดิม",
["ira-sgc-pro"] = "ซอกดิกดั้งเดิม",
["ira-sgi-pro"] = "Proto-Sanglechi-Ishkashimi",
["ira-shr-pro"] = "Proto-Shughni-Roshani",
["ira-shy-pro"] = "Proto-Shughni-Yazghulami",
["ira-sym-pro"] = "Proto-Shughni-Yazghulami-Munji",
["ira-wnj"] = "Vanji",
["ira-zgr-pro"] = "Proto-Zaza-Gorani",
["ire"] = "Iresim",
["irh"] = "Irarutu",
["iri"] = "Rigwe",
["irk"] = "Iraqw",
["irn"] = "Irantxe",
["iro-ere"] = "Erie",
["iro-min"] = "Mingo",
["iro-nor-pro"] = "Proto-North Iroquoian",
["iro-pro"] = "Proto-Iroquoian",
["irr"] = "Ir",
["iru"] = "Irula",
["irx"] = "Kamberau",
["iry"] = "Iraya",
["is"] = "ไอซ์แลนด์",
["isa"] = "Isabi",
["isc"] = "Isconahua",
["isd"] = "Isnag",
["ise"] = "Italian Sign Language",
["isg"] = "Irish Sign Language",
["ish"] = "Esan",
["isi"] = "Nkem-Nkum",
["isk"] = "Ishkashimi",
["ism"] = "Masimasi",
["isn"] = "Isanzu",
["iso"] = "Isoko",
["isr"] = "Israeli Sign Language",
["ist"] = "อิสเตรีย",
["isu"] = "Isu",
["isv"] = "Interslavic",
["it"] = "อิตาลี",
["itb"] = "Binongan Itneg",
["itc-pro"] = "อิตาลิกดั้งเดิม",
["itc-psa"] = "Pre-Samnite",
["itd"] = "Southern Tidung",
["ite"] = "Itene",
["iti"] = "Inlaod Itneg",
["itk"] = "Judeo-Italian",
["itl"] = "Itelmen",
["itm"] = "Itu Mbon Uzo",
["ito"] = "Itonama",
["itr"] = "Iteri",
["its"] = "Itsekiri",
["itt"] = "Maeng Itneg",
["itv"] = "Itawit",
["itw"] = "Ito",
["itx"] = "Itik",
["ity"] = "Moyadan Itneg",
["itz"] = "Itza'",
["iu"] = "อินุกติตุต",
["ium"] = "อิ้วเมี่ยน",
["ivb"] = "Ibatan",
["ivv"] = "Ivatan",
["iwk"] = "I-Wak",
["iwm"] = "Iwam",
["iwo"] = "Iwur",
["iws"] = "Sepik Iwam",
["ixc"] = "Ixcatec",
["ixl"] = "Ixil",
["iya"] = "Iyayu",
["iyo"] = "Mesaka",
["iyx"] = "Yaa",
["izh"] = "อิงเกรีย",
["izi"] = "Izi-Ezaa-Ikwo-Mgbo",
["izr"] = "Izere",
["izz"] = "Izi",
["ja"] = "ญี่ปุ่น",
["jaa"] = "Jamamadí",
["jab"] = "Hyam",
["jac"] = "Jakaltek",
["jad"] = "Jahanka",
["jae"] = "Jabem",
["jaf"] = "Jara",
["jah"] = "Jah Hut",
["jaj"] = "Zazao",
["jal"] = "Yalahatan",
["jam"] = "ครีโอลจาเมกา",
["jan"] = "Janday",
["jao"] = "Yanyuwa",
["jaq"] = "Yaqay",
["jas"] = "ชวาแบบนิวแคลิโดเนีย",
["jat"] = "Jakati",
["jau"] = "Yaur",
["jax"] = "Jambi Malay",
["jay"] = "Yan-nhangu",
["jaz"] = "Jawe",
["jbj"] = "Arandai",
["jbk"] = "Barikewa",
["jbn"] = "Nefusa",
["jbo"] = "โลจบาน",
["jbr"] = "Jofotek-Bromnya",
["jbt"] = "Jabutí",
["jbu"] = "Jukun Takum",
["jbw"] = "Yawijibaya",
["jcs"] = "Jamaican Country Sign Language",
["jct"] = "Krymchak",
["jda"] = "Jad",
["jdg"] = "Jadgali",
["jdt"] = "Judeo-Tat",
["jeb"] = "Jebero",
["jee"] = "Jerung",
["jeg"] = "Jeng",
["jeh"] = "Jeh",
["jei"] = "Yei",
["jek"] = "Jeri Kuo",
["jel"] = "Yelmek",
["jen"] = "Dza",
["jer"] = "Jere",
["jet"] = "Manem",
["jeu"] = "Jonkor Bourmataguil",
["jgb"] = "Ngbee",
["jgk"] = "Gwak",
["jgo"] = "Ngomba",
["jhi"] = "Jehai",
["jhs"] = "Jhankot Sign Language",
["jia"] = "Jina",
["jib"] = "Jibu",
["jic"] = "Tol",
["jid"] = "Bu",
["jie"] = "Jilbe",
["jig"] = "Jingulu",
["jih"] = "Shangzhai",
["jii"] = "Jiiddu",
["jil"] = "Jilim",
["jim"] = "Jimjimen",
["jio"] = "เจียเม่า",
["jiq"] = "Khroskyabs",
["jit"] = "Jita",
["jiu"] = "Youle Jino",
["jiv"] = "Shuar",
["jiy"] = "Buyuan Jino",
["jje"] = "เชจู",
["jjr"] = "Zhár",
["jka"] = "Kaera",
["jko"] = "Kubo",
["jkp"] = "Paku Karen",
["jkr"] = "Koro (India)",
["jku"] = "Labir",
["jle"] = "Ngile",
["jls"] = "Jamaican Sign Language",
["jma"] = "Dima",
["jmb"] = "Zumbun",
["jmc"] = "Machame",
["jmd"] = "Yamdena",
["jmi"] = "Jimi",
["jml"] = "Jumli",
["jmn"] = "Makuri Naga",
["jmr"] = "Kamara",
["jmw"] = "Mouwase",
["jmx"] = "Western Juxtlahuaca Mixtec",
["jna"] = "Jangshung",
["jnd"] = "Jandavra",
["jng"] = "Yangman",
["jni"] = "Janji",
["jnj"] = "Yemsa",
["jnl"] = "Rawat",
["jns"] = "Jaunsari",
["job"] = "Joba",
["jod"] = "Wojenaka",
["jor"] = "Jorá",
["jos"] = "Jordanian Sign Language",
["jow"] = "Jowulu",
["jpr"] = "Judeo-Persian",
["jpx-hcj"] = "Hachijō",
["jpx-pro"] = "แจพอนิกดั้งเดิม",
["jpx-ryu-pro"] = "Proto-Ryukyuan",
["jqr"] = "Jaqaru",
["jra"] = "Jarai",
["jrr"] = "Jiru",
["jru"] = "Japrería",
["jsl"] = "Japanese Sign Language",
["jua"] = "Júma",
["jub"] = "Wannu",
["juc"] = "จูร์เชน",
["jud"] = "Worodougou",
["juh"] = "Hone",
["jui"] = "Ngadjuri",
["juk"] = "Wapan",
["jul"] = "Jirel",
["jum"] = "Jumjum",
["jun"] = "Juang",
["juo"] = "Jiba",
["jup"] = "Hupdë",
["jur"] = "Jurúna",
["jus"] = "Jumla Sign Language",
["jut"] = "Jutish",
["juu"] = "Ju",
["juw"] = "Wãpha",
["juy"] = "Juray",
["jv"] = "ชวา",
["jvd"] = "Javindo",
["jvn"] = "ชวาแบบแคริบเบียน",
["jwi"] = "Jwira-Pepesa",
["jyy"] = "Jaya",
["ka"] = "จอร์เจีย",
["kaa"] = "การากัลปัก",
["kab"] = "กะไบล์",
["kac"] = "จิ่งเผาะ",
["kad"] = "Kadara",
["kae"] = "Ketangalan",
["kaf"] = "Katso",
["kag"] = "Kajaman",
["kah"] = "Fer",
["kai"] = "Karekare",
["kaj"] = "Jju",
["kak"] = "Kayapa Kallahan",
["kam"] = "Kamba",
["kao"] = "Kassonke",
["kap"] = "Bezhta",
["kaq"] = "Capanahua",
["kar-pro"] = "กะเหรี่ยงดั้งเดิม",
["kaw"] = "ชวาเก่า",
["kax"] = "Kao",
["kay"] = "Kamayurá",
["kba"] = "Kalarko",
["kbb"] = "Kaxuyana",
["kbc"] = "Kadiwéu",
["kbd"] = "คาบาร์เดีย",
["kbe"] = "Kanju",
["kbh"] = "Camsá",
["kbi"] = "Kaptiau",
["kbj"] = "Kari",
["kbk"] = "Grass Koiari",
["kbm"] = "Iwal",
["kbn"] = "Kare (Central Africa)",
["kbo"] = "Keliko",
["kbp"] = "Kabiyé",
["kbq"] = "Kamano",
["kbr"] = "Kafa",
["kbs"] = "Kande",
["kbt"] = "Gabadi",
["kbu"] = "Kabutra",
["kbv"] = "Kamberataro",
["kbw"] = "Kaiep",
["kbx"] = "Ap Ma",
["kbz"] = "Duhwa",
["kca-eas"] = "Eastern Khanty",
["kca-nor"] = "Northern Khanty",
["kca-pro"] = "Proto-Khanty",
["kca-sou"] = "Southern Khanty",
["kcb"] = "Kawacha",
["kcc"] = "Lubila",
["kcd"] = "Ngkâlmpw Kanum",
["kce"] = "Kaivi",
["kcf"] = "Ukaan",
["kcg"] = "Tyap",
["kch"] = "Vono",
["kci"] = "Kamantan",
["kcj"] = "Kobiana",
["kck"] = "Kalanga",
["kcl"] = "Kala",
["kcm"] = "Tar Gula",
["kcn"] = "Nubi",
["kco"] = "Kinalakna",
["kcp"] = "Kanga",
["kcq"] = "Kamo",
["kcr"] = "Katla",
["kcs"] = "Koenoem",
["kct"] = "Kaian",
["kcu"] = "Kikami",
["kcv"] = "Kete",
["kcw"] = "Kabwari",
["kcx"] = "Kachama-Ganjule",
["kcy"] = "Korandje",
["kcz"] = "Konongo",
["kda"] = "Worimi",
["kdc"] = "Kutu",
["kdd"] = "Yankunytjatjara",
["kde"] = "Makonde",
["kdf"] = "Mamusi",
["kdg"] = "Seba",
["kdh"] = "Tem",
["kdi"] = "Kumam",
["kdj"] = "Karamojong",
["kdk"] = "Numèè",
["kdl"] = "Tsikimba",
["kdm"] = "Kagoma",
["kdn"] = "Kunda",
["kdp"] = "Kaningdon-Nindem",
["kdq"] = "Koch",
["kdr"] = "Karaim",
["kdt"] = "กูย",
["kdu"] = "Kadaru",
["kdv"] = "Kado",
["kdw"] = "Koneraw",
["kdx"] = "Kam",
["kdy"] = "Keder",
["kdz"] = "Kwaja",
["kea"] = "ครีโอลกาบูเวร์ดี",
["keb"] = "Kélé",
["kec"] = "Keiga",
["ked"] = "Kerewe",
["kee"] = "Eastern Keres",
["kef"] = "Kpessi",
["keg"] = "Tese",
["keh"] = "Keak",
["kei"] = "Kei",
["kej"] = "Kadar",
["kek"] = "Q'eqchi",
["kel"] = "Kela-Yela",
["kem"] = "Kemak",
["ken"] = "Kenyang",
["keo"] = "Kakwa",
["kep"] = "Kaikadi",
["keq"] = "Kamar",
["ker"] = "Kera",
["kes"] = "Kugbo",
["ket"] = "Ket",
["keu"] = "Akebu",
["kev"] = "Kanikkaran",
["kew"] = "Kewa",
["kex"] = "Kukna",
["key"] = "Kupia",
["kez"] = "Kukele",
["kfa"] = "Kodava",
["kfb"] = "Kolami",
["kfc"] = "Konda-Dora",
["kfd"] = "Korra Koraga",
["kfe"] = "Kota (India)",
["kff"] = "Koya",
["kfg"] = "Kudiya",
["kfh"] = "Kurichiya",
["kfi"] = "Kannada Kurumba",
["kfj"] = "Kemiehua",
["kfk"] = "Kinnauri",
["kfl"] = "Kung",
["kfn"] = "Kuk",
["kfo"] = "Koro (West Africa)",
["kfp"] = "Korwa",
["kfq"] = "Korku",
["kfr"] = "กัจฉ์",
["kfs"] = "Bilaspuri",
["kft"] = "Kanjari",
["kfu"] = "Katkari",
["kfv"] = "Kurmukar",
["kfw"] = "Kharam Naga",
["kfx"] = "Kullu Pahari",
["kfy"] = "Kumaoni",
["kfz"] = "Koromfé",
["kg"] = "คองโก",
["kga"] = "Koyaga",
["kgb"] = "Kawe",
["kgd"] = "Kataang",
["kge"] = "Komering",
["kgf"] = "Kube",
["kgg"] = "Kusunda",
["kgi"] = "Selangor Sign Language",
["kgj"] = "Gamale Kham",
["kgk"] = "Kaiwá",
["kgl"] = "Kunggari",
["kgn"] = "Karingani",
["kgo"] = "Krongo",
["kgp"] = "Kaingang",
["kgq"] = "Kamoro",
["kgr"] = "Abun",
["kgs"] = "Kumbainggar",
["kgt"] = "Somyev",
["kgu"] = "Kobol",
["kgv"] = "Karas",
["kgw"] = "Karon Dori",
["kgx"] = "Kamaru",
["kgy"] = "Kyerung",
["kha"] = "คาซี",
["khb"] = "ไทลื้อ",
["khc"] = "Tukang Besi North",
["khd"] = "Bädi Kanum",
["khe"] = "Korowai",
["khf"] = "Khuen",
["khh"] = "Kehu",
["khi-kho-pro"] = "Proto-Khoe",
["khi-kun"] = "ǃKung",
["khj"] = "Kuturmi",
["khl"] = "Lusi",
["khn"] = "Khandeshi",
["kho"] = "โคตาน",
["khp"] = "Kapauri",
["khq"] = "Koyra Chiini",
["khr"] = "Kharia",
["khs"] = "Kasua",
["kht"] = "คำตี้",
["khu"] = "Nkhumbi",
["khv"] = "Khvarshi",
["khw"] = "Khowar",
["khx"] = "Kanu",
["khy"] = "Ekele",
["khz"] = "Keapara",
["ki"] = "เกโกโย",
["kia"] = "Kim",
["kib"] = "Koalib",
["kic"] = "Kickapoo",
["kid"] = "Koshin",
["kie"] = "Kibet",
["kif"] = "Eastern Parbate Kham",
["kig"] = "Kimaama",
["kih"] = "Kilmeri",
["kii"] = "Kitsai",
["kij"] = "Kilivila",
["kil"] = "Kariya",
["kim"] = "โตฟา",
["kio"] = "Kiowa",
["kip"] = "Sheshi Kham",
["kiq"] = "Kosadle",
["kis"] = "Kis",
["kit"] = "Agob",
["kiv"] = "Kimbu",
["kiw"] = "Northeast Kiwai",
["kix"] = "Khiamniungan Naga",
["kiy"] = "Kirikiri",
["kiz"] = "Kisi",
["kj"] = "Kwanyama",
["kja"] = "Mlap",
["kjb"] = "Q'anjob'al",
["kjc"] = "Coastal Konjo",
["kjd"] = "Southern Kiwai",
["kje"] = "Kisar",
["kjg"] = "ขมุ",
["kjh"] = "คาคัส",
["kji"] = "Zabana",
["kjj"] = "Khinalug",
["kjk"] = "Highland Konjo",
["kjl"] = "Western Parbate Kham",
["kjm"] = "Kháng",
["kjn"] = "Kunjen",
["kjo"] = "Harijan Kinnauri",
["kjp"] = "กะเหรี่ยงโปตะวันออก",
["kjq"] = "Western Keres",
["kjr"] = "Kurudu",
["kjs"] = "East Kewa",
["kjt"] = "กะเหรี่ยงโปแพร่",
["kju"] = "Kashaya",
["kjx"] = "Ramopa",
["kjy"] = "Erave",
["kjz"] = "Bumthangkha",
["kk"] = "คาซัค",
["kka"] = "Kakanda",
["kkb"] = "Kwerisa",
["kkc"] = "Odoodee",
["kkd"] = "Kinuku",
["kke"] = "Kakabe",
["kkf"] = "Kalaktang Monpa",
["kkg"] = "Mabaka Valley Kalinga",
["kkh"] = "เขิน",
["kki"] = "Kagulu",
["kkj"] = "Kako",
["kkk"] = "Kokota",
["kkl"] = "Kosarek Yale",
["kkm"] = "Kiong",
["kkn"] = "Kon Keu",
["kko"] = "Karko",
["kkp"] = "Koko-Bera",
["kkq"] = "Kaiku",
["kkr"] = "Kir-Balar",
["kks"] = "Kirfi",
["kkt"] = "Koi",
["kku"] = "Tumi",
["kkv"] = "Kangean",
["kkw"] = "Teke-Kukuya",
["kkx"] = "Kohin",
["kky"] = "Guugu Yimidhirr",
["kkz"] = "Kaska",
["kl"] = "กรีนแลนด์",
["kla"] = "Klamath-Modoc",
["klb"] = "Kiliwa",
["klc"] = "Kolbila",
["kld"] = "Gamilaraay",
["kle"] = "Kulung",
["klf"] = "Kendeje",
["klg"] = "กาลากันแบบตากาเกาลู",
["klh"] = "Weliki",
["kli"] = "Kalumpang",
["klj"] = "แฆแลจ",
["klk"] = "Kono (Nigeria)",
["kll"] = "กาลากันแบบกากัน",
["klm"] = "Kolom",
["kln"] = "Kalenjin",
["klo"] = "Kapya",
["klp"] = "Kamasa",
["klq"] = "Rumu",
["klr"] = "Khaling",
["kls"] = "Kalasha",
["klt"] = "Nukna",
["klu"] = "Klao",
["klv"] = "Maskelynes",
["klw"] = "ลินดู",
["klx"] = "Koluwawa",
["kly"] = "Kalao",
["klz"] = "Kabola",
["km"] = "เขมร",
["kma"] = "Konni",
["kmb"] = "Kimbundu",
["kmc"] = "ต้งใต้",
["kmd"] = "Madukayang Kalinga",
["kme"] = "Bakole",
["kmf"] = "Kare (New Guinea)",
["kmg"] = "Kâte",
["kmh"] = "Kalam",
["kmi"] = "Kami",
["kmj"] = "Kumarbhag Paharia",
["kmk"] = "Limos Kalinga",
["kml"] = "Tanudan Kalinga",
["kmm"] = "Kom (India)",
["kmn"] = "Awtuw",
["kmo"] = "Kwoma",
["kmp"] = "Gimme",
["kmq"] = "Kwama",
["kmr"] = "เคิร์ดเหนือ",
["kms"] = "Kamasau",
["kmt"] = "Kemtuik",
["kmu"] = "Kanite",
["kmv"] = "Karipúna Creole French",
["kmw"] = "Kumu",
["kmx"] = "Waboda",
["kmy"] = "Koma",
["kmz"] = "Khorasani Turkish",
["kn"] = "กันนฑะ",
["kna"] = "Kanakuru",
["knb"] = "Lubuagan Kalinga",
["knd"] = "Konda",
["kne"] = "กันกานาอือ",
["knf"] = "Mankanya",
["kni"] = "Kanufi",
["knj"] = "Akatek",
["knk"] = "Kuranko",
["knl"] = "Keninjal",
["knm"] = "Kanamari",
["kno"] = "Kono (Sierra Leone)",
["knp"] = "Kwanja",
["knq"] = "Kintaq",
["knr"] = "Kaningra",
["kns"] = "Kensiu",
["knt"] = "Katukina",
["knu"] = "Kono (Guinea)",
["knv"] = "Tabo",
["knx"] = "Kendayan",
["kny"] = "Kanyok",
["knz"] = "Kalamsé",
["ko"] = "เกาหลี",
["ko-ear"] = "เกาหลีใหม่ช่วงต้น",
["koa"] = "Konomala",
["koc"] = "Kpati",
["kod"] = "Kodi",
["koe"] = "Kacipo-Balesi",
["kof"] = "Kubi",
["kog"] = "Cogui",
["koh"] = "Koyo",
["koi"] = "Komi-Permyak",
["kok"] = "กงกัณ",
["kol"] = "Kol (New Guinea)",
["koo"] = "Konzo",
["kop"] = "Waube",
["koq"] = "Kota (Gabon)",
["kos"] = "Kosraean",
["kot"] = "Lagwan",
["kou"] = "Koke",
["kov"] = "Kudu-Camo",
["kow"] = "Kugama",
["koy"] = "Koyukon",
["koz"] = "Korak",
["kpa"] = "Kutto",
["kpb"] = "Mullu Kurumba",
["kpc"] = "Curripaco",
["kpd"] = "Koba",
["kpe"] = "Kpelle",
["kpf"] = "Komba",
["kpg"] = "Kapingamarangi",
["kph"] = "Kplang",
["kpi"] = "Kofei",
["kpj"] = "Karajá",
["kpk"] = "Kpan",
["kpl"] = "Kpala",
["kpm"] = "เกอฮอ",
["kpn"] = "Kepkiriwát",
["kpo"] = "Ikposo",
["kpq"] = "Korupun-Sela",
["kpr"] = "Korafe-Yegha",
["kps"] = "Tehit",
["kpt"] = "Karata",
["kpu"] = "Kafoa",
["kpv"] = "Komi-Zyrian",
["kpw"] = "Kobon",
["kpx"] = "Mountain Koiari",
["kpy"] = "Koryak",
["kpz"] = "Kupsabiny",
["kqa"] = "Mum",
["kqb"] = "Kovai",
["kqc"] = "Doromu-Koki",
["kqd"] = "Koy Sanjaq Surat",
["kqe"] = "กาลากัน",
["kqf"] = "Kakabai",
["kqg"] = "Khe",
["kqh"] = "Kisankasa",
["kqi"] = "Koitabu",
["kqj"] = "Koromira",
["kqk"] = "Kotafon Gbe",
["kql"] = "Kyenele",
["kqm"] = "Khisa",
["kqn"] = "Kaonde",
["kqo"] = "Eastern Krahn",
["kqp"] = "Kimré",
["kqq"] = "Krenak",
["kqr"] = "Kimaragang",
["kqs"] = "Northern Kissi",
["kqt"] = "Klias River Kadazan",
["kqu"] = "Seroa",
["kqv"] = "Okolod",
["kqw"] = "Kandas",
["kqx"] = "Mser",
["kqy"] = "Koorete",
["kqz"] = "Korana",
["kr"] = "กานูรี",
["kra"] = "Kumhali",
["krb"] = "Karkin",
["krc"] = "Karachay-Balkar",
["krd"] = "Kairui-Midiki",
["kre"] = "Panará",
["krf"] = "Koro (Vanuatu)",
["krh"] = "Kurama",
["kri"] = "Krio",
["krj"] = "Kinaray-a",
["krk"] = "Kerek",
["krl"] = "คาเรเลีย",
["krm"] = "Krim",
["krn"] = "Sapo",
["kro-pro"] = "Proto-Kru",
["krp"] = "Korop",
["krr"] = "Kru'ng",
["krs"] = "Kresh",
["kru"] = "กุรุข",
["krv"] = "Kavet",
["krw"] = "Western Krahn",
["krx"] = "Karon",
["kry"] = "Kryts",
["krz"] = "Sota Kanum",
["ks"] = "แคชเมียร์",
["ksa"] = "Shuwa-Zamani",
["ksb"] = "Shambala",
["ksc"] = "Southern Kalinga",
["ksd"] = "Tolai",
["kse"] = "Kuni",
["ksf"] = "Bafia",
["ksg"] = "Kusaghe",
["ksi"] = "Krisa",
["ksj"] = "Uare",
["ksk"] = "Kansa",
["ksl"] = "Kumalu",
["ksm"] = "Kumba",
["ksn"] = "Kasiguranin",
["kso"] = "Kofa",
["ksp"] = "Kaba",
["ksq"] = "Kwaami",
["ksr"] = "Borong",
["kss"] = "Southern Kissi",
["kst"] = "Winyé",
["ksu"] = "Khamyang",
["ksv"] = "Kusu",
["ksw"] = "กะเหรี่ยงสะกอ",
["ksx"] = "Kedang",
["ksy"] = "Kharia Thar",
["ksz"] = "Kodaku",
["kta"] = "Katua",
["ktb"] = "Kambaata",
["ktc"] = "Kholok",
["ktd"] = "Kokata",
["ktf"] = "Kwami",
["ktg"] = "Kalkatungu",
["kth"] = "Karanga",
["kti"] = "North Muyu",
["ktj"] = "Plapo Krumen",
["ktk"] = "Kaniet",
["ktl"] = "Koroshi",
["ktm"] = "Kurti",
["ktn"] = "Karitiâna",
["kto"] = "Kuot",
["ktp"] = "Kaduo",
["ktq"] = "Katabaga",
["ktr"] = "Kota Marudu Tinagas",
["kts"] = "South Muyu",
["ktt"] = "Ketum",
["ktu"] = "Kituba",
["ktv"] = "กะตูตะวันออก",
["ktw"] = "Kato",
["ktx"] = "Kaxararí",
["kty"] = "Kango",
["ktz"] = "Juǀ'hoan",
["ku-pro"] = "เคอร์ดิชดั้งเดิม",
["kub"] = "Kutep",
["kuc"] = "Kwinsu",
["kud"] = "Auhelawa",
["kue"] = "Kuman",
["kuf"] = "กะตูตะวันตก",
["kug"] = "Kupa",
["kuh"] = "Kushi",
["kui"] = "Kuikúro",
["kuj"] = "Kuria",
["kuk"] = "Kepo'",
["kul"] = "Kulere",
["kum"] = "คูมุก",
["kun"] = "Kunama",
["kuo"] = "Kumukio",
["kup"] = "Kunimaipa",
["kuq"] = "Karipuna",
["kus"] = "Kusaal",
["kut"] = "Ktunaxa",
["kuu"] = "Upper Kuskokwim",
["kuv"] = "Kur",
["kuw"] = "Kpagua",
["kux"] = "Kukatja",
["kuy"] = "Kuuku-Ya'u",
["kuz"] = "Kunza",
["kva"] = "Bagvalal",
["kvb"] = "Kubu",
["kvc"] = "Kove",
["kvd"] = "Kui (Indonesia)",
["kve"] = "Kalabakan",
["kvf"] = "Kabalai",
["kvg"] = "Kuni-Boazi",
["kvh"] = "Komodo",
["kvi"] = "Kwang",
["kvj"] = "Psikye",
["kvk"] = "Korean Sign Language",
["kvl"] = "Brek Karen",
["kvm"] = "Kendem",
["kvn"] = "Border Kuna",
["kvo"] = "Dobel",
["kvp"] = "Kompane",
["kvq"] = "Geba Karen",
["kvr"] = "Kerinci",
["kvt"] = "Lahta Karen",
["kvu"] = "Yinbaw Karen",
["kvv"] = "Kola",
["kvw"] = "Wersing",
["kvx"] = "Parkari Koli",
["kvy"] = "Yintale Karen",
["kvz"] = "Tsakwambo",
["kw"] = "คอร์นวอลล์",
["kwa"] = "Dâw",
["kwb"] = "Baa",
["kwc"] = "Likwala",
["kwd"] = "Kwaio",
["kwe"] = "Kwerba",
["kwf"] = "Kwara'ae",
["kwg"] = "Sara Kaba Deme",
["kwh"] = "Kowiai",
["kwi"] = "Awa-Cuaiquer",
["kwj"] = "Kwanga",
["kwk"] = "Kwak'wala",
["kwl"] = "Kofyar",
["kwm"] = "Kwambi",
["kwn"] = "Kwangali",
["kwo"] = "Kwomtari",
["kwp"] = "Kodia",
["kwq"] = "Kwak",
["kwr"] = "Kwer",
["kws"] = "Kwese",
["kwt"] = "Kwesten",
["kwu"] = "Kwakum",
["kwv"] = "Sara Kaba Náà",
["kww"] = "Kwinti",
["kwx"] = "Khirwar",
["kwz"] = "Kwadi",
["kxa"] = "Kairiru",
["kxb"] = "Krobu",
["kxc"] = "Konso",
["kxd"] = "มลายูแบบบรูไน",
["kxe"] = "Kakihum",
["kxf"] = "Manumanaw Karen",
["kxh"] = "Karo",
["kxi"] = "Keningau Murut",
["kxj"] = "Kulfa",
["kxk"] = "Zayein Karen",
["kxl"] = "Nepali Kurux",
["kxm"] = "เขมรเหนือ",
["kxn"] = "Kanowit",
["kxo"] = "Kanoé",
["kxp"] = "Wadiyara Koli",
["kxq"] = "Smärky Kanum",
["kxr"] = "Manus Koro",
["kxs"] = "Kangjia",
["kxt"] = "Koiwat",
["kxu"] = "Kui (India)",
["kxv"] = "Kuvi",
["kxw"] = "Konai",
["kxx"] = "Likuba",
["kxy"] = "Kayong",
["kxz"] = "Kerewo",
["ky"] = "คีร์กีซ",
["kya"] = "Kwaya",
["kyb"] = "Butbut Kalinga",
["kyc"] = "Kyaka",
["kyd"] = "Karey",
["kye"] = "Krache",
["kyf"] = "Kouya",
["kyg"] = "Keyagana",
["kyh"] = "Karok",
["kyi"] = "Kiput",
["kyj"] = "กาเรา",
["kyk"] = "Kamayo",
["kyl"] = "Kalapuya",
["kym"] = "Kpatili",
["kyn"] = "Karolanos",
["kyo"] = "Kelon",
["kyp"] = "Kang",
["kyq"] = "Kenga",
["kyr"] = "Kuruáya",
["kys"] = "Baram Kayan",
["kyt"] = "Kayagar",
["kyu"] = "กะยาตะวันตก",
["kyv"] = "Kayort",
["kyw"] = "Kudmali",
["kyx"] = "Rapoisi",
["kyy"] = "Kambaira",
["kyz"] = "Kayabí",
["kza"] = "Western Karaboro",
["kzb"] = "Kaibobo",
["kzc"] = "Bondoukou Kulango",
["kzd"] = "Kadai",
["kzf"] = "Da'a Kaili",
["kzg"] = "Kikai",
["kzh"] = "Dongolawi",
["kzi"] = "Kelabit",
["kzj"] = "กาดาซันชายฝั่ง",
["kzk"] = "Kazukuru",
["kzl"] = "Kayeli",
["kzm"] = "Kais",
["kzn"] = "Kokola",
["kzo"] = "Kaningi",
["kzp"] = "Kaidipang",
["kzq"] = "Kaike",
["kzr"] = "Karang",
["kzs"] = "Sugut Dusun",
["kzt"] = "Tambunan Dusun",
["kzu"] = "Kayupulau",
["kzv"] = "Komyandaret",
["kzw"] = "Kariri",
["kzx"] = "Kamarian",
["kzy"] = "Kango-Sua",
["kzz"] = "Kalabra",
["la"] = "ละติน",
["laa"] = "Lapuyan Subanun",
["lab"] = "Linear A",
["lac"] = "Lacandon",
["lad"] = "ลาดิโน",
["lae"] = "Pattani",
["laf"] = "Lafofa",
["lag"] = "Langi",
["lah"] = "Lahnda",
["lai"] = "Lambya",
["laj"] = "Lango (Uganda)",
["lak"] = "Laka",
["lam"] = "Lamba",
["lan"] = "Laru",
["lap"] = "Kabba-Laka",
["laq"] = "Qabiao",
["lar"] = "Larteh",
["las"] = "Gur Lama",
["lau"] = "Laba",
["law"] = "Lauje",
["lax"] = "Tiwa",
["lay"] = "Lama Bai",
["laz"] = "Aribwatsa",
["lb"] = "ลักเซมเบิร์ก",
["lbb"] = "Label",
["lbc"] = "ลักเกีย",
["lbe"] = "ลัก",
["lbf"] = "Tinani",
["lbg"] = "Laopang",
["lbi"] = "La'bi",
["lbj"] = "ลาดัก",
["lbk"] = "Central Bontoc",
["lbl"] = "Libon Bikol",
["lbm"] = "Lodhi",
["lbn"] = "Lamet",
["lbo"] = "Laven",
["lbq"] = "Wampar",
["lbr"] = "Northern Lorung",
["lbs"] = "Libyan Sign Language",
["lbt"] = "Lachi",
["lbu"] = "Labu",
["lbv"] = "Lavatbura-Lamusong",
["lbw"] = "Tolaki",
["lbx"] = "Lawangan",
["lby"] = "Lamu-Lamu",
["lbz"] = "Lardil",
["lcc"] = "Legenyem",
["lcd"] = "Lola",
["lce"] = "Loncong",
["lcf"] = "Lubu",
["lch"] = "Luchazi",
["lcl"] = "Lisela",
["lcm"] = "Tungag",
["lcp"] = "เลอเวือะตะวันตก",
["lcq"] = "Luhu",
["lcs"] = "Lisabata-Nuniali",
["lda"] = "Kla",
["ldb"] = "Idun",
["ldd"] = "Luri (Nigeria)",
["ldg"] = "Lenyima",
["ldh"] = "Lamja-Dengsa-Tola",
["ldj"] = "Lemoro",
["ldk"] = "Leelau",
["ldl"] = "Kaan",
["ldm"] = "Landoma",
["ldn"] = "Láadan",
["ldo"] = "Loo",
["ldp"] = "Tso",
["ldq"] = "Lufu",
["lea"] = "Lega-Shabunda",
["leb"] = "Lala-Bisa",
["lec"] = "Leco",
["led"] = "Lendu",
["lee"] = "Lyélé",
["lef"] = "Lelemi",
["leh"] = "Lenje",
["lei"] = "Lemio",
["lej"] = "Lengola",
["lek"] = "Leipon",
["lel"] = "Lele (Congo)",
["lem"] = "Nomaande",
["len"] = "Honduran Lenca",
["leo"] = "Mengisa",
["lep"] = "Lepcha",
["leq"] = "Lembena",
["ler"] = "Lenkau",
["les"] = "Lese",
["let"] = "Lesing-Gelimi",
["leu"] = "Kara (New Guinea)",
["lev"] = "Lamma",
["lew"] = "Ledo Kaili",
["lex"] = "Luang",
["ley"] = "Lemolang",
["lez"] = "เลซกี",
["lfa"] = "Lefa",
["lfn"] = "Lingua Franca Nova",
["lg"] = "ลูกันดา",
["lga"] = "Lungga",
["lgb"] = "Laghu",
["lgg"] = "Lugbara",
["lgh"] = "Laghuu",
["lgi"] = "Lengilu",
["lgk"] = "Neverver",
["lgl"] = "Wala",
["lgm"] = "Lega-Mwenga",
["lgn"] = "Opuuo",
["lgq"] = "Logba",
["lgr"] = "Lengo",
["lgs"] = "Guinea-Bissau Sign Language",
["lgt"] = "Pahi",
["lgu"] = "Longgu",
["lgz"] = "Ligenza",
["lha"] = "Laha (Vietnam)",
["lhh"] = "Laha (Indonesia)",
["lhi"] = "Lahu Shi",
["lhl"] = "Lahul Lohar",
["lhn"] = "Lahanan",
["lhp"] = "Lhokpu",
["lhs"] = "Mlahsö",
["lht"] = "Lo-Toga",
["lhu"] = "Lahu",
["li"] = "ลิมเบิร์ก",
["lia"] = "West-Central Limba",
["lib"] = "Likum",
["lic"] = "ไหล",
["lid"] = "Nyindrou",
["lie"] = "Likila",
["lif"] = "ลิมบู",
["lig"] = "Ligbi",
["lih"] = "Lihir",
["lii"] = "Lingkhim",
["lij"] = "ลีกูเรีย",
["lik"] = "Lika",
["lil"] = "Lillooet",
["lio"] = "Liki",
["lip"] = "Sekpele",
["liq"] = "Libido",
["lir"] = "Liberian Kreyol",
["lis"] = "ลีสู่",
["liu"] = "Logorik",
["liv"] = "ลีโวเนีย",
["liw"] = "Col",
["lix"] = "Liabuku",
["liy"] = "Banda-Bambari",
["liz"] = "Libinza",
["lja"] = "Golpa",
["lje"] = "Rampi",
["lji"] = "Laiyolo",
["ljl"] = "Li'o",
["ljp"] = "Lampung Api",
["ljw"] = "Yirandali",
["ljx"] = "Yuru",
["lka"] = "Lakalei",
["lkb"] = "Kabras",
["lkc"] = "Kucong",
["lkd"] = "Lakondê",
["lke"] = "Kenyi",
["lkh"] = "Lakha",
["lki"] = "Laki",
["lkj"] = "Remun",
["lkl"] = "Laeko-Libuat",
["lkm"] = "Kalaamaya",
["lkn"] = "Lakon",
["lko"] = "Khayo",
["lkr"] = "Päri",
["lks"] = "Kisa",
["lkt"] = "ลาโคตา",
["lku"] = "Kungkari",
["lky"] = "Lokoya",
["lla"] = "Lala-Roba",
["llb"] = "Lolo",
["llc"] = "Lele (Guinea)",
["lld"] = "ลาดิน",
["lle"] = "Lele (New Guinea)",
["llf"] = "Hermit",
["llg"] = "Lole",
["llh"] = "Lamu",
["lli"] = "Teke-Laali",
["llj"] = "Ladji-Ladji",
["llk"] = "Lelak",
["lll"] = "Lilau",
["llm"] = "Lasalimu",
["lln"] = "Lele (Chad)",
["llo"] = "Khlor",
["llp"] = "North Efate",
["llq"] = "Lolak",
["lls"] = "Lithuanian Sign Language",
["llu"] = "Lau",
["llx"] = "Lauan",
["lma"] = "East Limba",
["lmb"] = "Merei",
["lmc"] = "Limilngan",
["lmd"] = "Lumun",
["lme"] = "Pévé",
["lmf"] = "South Lembata",
["lmg"] = "Lamogai",
["lmh"] = "Lambichhong",
["lmi"] = "Lombi",
["lmj"] = "West Lembata",
["lmk"] = "Lamkang",
["lml"] = "Raga",
["lmn"] = "Lambadi",
["lmo"] = "ลอมบาร์ด",
["lmp"] = "Limbum",
["lmq"] = "Lamatuka",
["lmr"] = "Lamalera",
["lmu"] = "Lamenu",
["lmv"] = "Lomaiviti",
["lmw"] = "Lake Miwok",
["lmx"] = "Laimbue",
["lmy"] = "ลัมโบยา",
["lmz"] = "Lumbee",
["ln"] = "ลิงกาลา",
["lna"] = "Langbashe",
["lnb"] = "Mbalanhu",
["lnd"] = "Lun Bawang",
["lnh"] = "Lanoh",
["lni"] = "Daantanai'",
["lnj"] = "Linngithigh",
["lnl"] = "South Central Banda",
["lnm"] = "Langam",
["lnn"] = "Lorediakarkar",
["lno"] = "Lango (Sudan)",
["lns"] = "Lamnso'",
["lnu"] = "Longuda",
["lnw"] = "Lanima",
["lo"] = "ลาว",
["loa"] = "Loloda",
["lob"] = "Lobi",
["loc"] = "Inonhan",
["lod"] = "เบอราวัน",
["loe"] = "Saluan",
["lof"] = "Logol",
["log"] = "Logo",
["loh"] = "Narim",
["loi"] = "Lomakka",
["loj"] = "Lou",
["lok"] = "Loko",
["lol"] = "Mongo",
["lom"] = "Loma",
["lon"] = "Malawi Lomwe",
["loo"] = "Lombo",
["lop"] = "Lopa",
["loq"] = "Lobala",
["lor"] = "Téén",
["los"] = "Loniu",
["lot"] = "Lotuko",
["lou"] = "ครีโอลลุยเซียนา",
["lov"] = "Lopi",
["low"] = "Tampias Lobu",
["lox"] = "Loun",
["loz"] = "Lozi",
["lpa"] = "Lelepa",
["lpe"] = "Lepki",
["lpn"] = "Long Phuri Naga",
["lpo"] = "Lipo",
["lpx"] = "Lopit",
["lra"] = "Rara Bakati'",
["lrc"] = "Northern Luri",
["lre"] = "Laurentian",
["lrg"] = "Laragia",
["lri"] = "Marachi",
["lrk"] = "Loarki",
["lrl"] = "Larestani",
["lrm"] = "Marama",
["lrn"] = "Lorang",
["lro"] = "Laro",
["lrr"] = "Southern Lorung",
["lrt"] = "Larantuka Malay",
["lrv"] = "Larëvat",
["lrz"] = "Lemerig",
["lsa"] = "Lasgerdi",
["lsd"] = "Lishana Deni",
["lse"] = "Lusengo",
["lsh"] = "Lish",
["lsi"] = "Lashi",
["lsl"] = "Latvian Sign Language",
["lsm"] = "Saamia",
["lsn"] = "Tibetan Sign Language",
["lso"] = "Laos Sign Language",
["lsp"] = "Panamanian Sign Language",
["lsr"] = "Aruop",
["lss"] = "Lasi",
["lst"] = "Trinidad and Tobago Sign Language",
["lsv"] = "Sivia Sign Language",
["lsy"] = "Mauritian Sign Language",
["lt"] = "ลิทัวเนีย",
["ltc"] = "จีนยุคกลาง",
["ltg"] = "ลัตเกล",
["lti"] = "Leti",
["ltn"] = "Latundê",
["lto"] = "Olutsotso",
["lts"] = "Lutachoni",
["ltu"] = "Latu",
["lu"] = "Luba-Katanga",
["lua"] = "Luba-Kasai",
["luc"] = "Aringa",
["lud"] = "Ludian",
["lue"] = "Luvale",
["luf"] = "Laua",
["luh"] = "หล่อยแอว๋",
["lui"] = "Luiseño",
["luj"] = "Luna",
["luk"] = "Lunanakha",
["lul"] = "Olu'bo",
["lum"] = "Luimbi",
["lun"] = "Lunda",
["luo"] = "Luo",
["lup"] = "Lumbu",
["luq"] = "Lucumí",
["lur"] = "Laura",
["lus"] = "มีโซ",
["lut"] = "Lushootseed",
["luu"] = "Lumba-Yakkha",
["luv"] = "Luwati",
["luy"] = "Luhya",
["luz"] = "Southern Luri",
["lv"] = "ลัตเวีย",
["lva"] = "Maku'a",
["lvi"] = "Lawi",
["lvk"] = "Lavukaleve",
["lvl"] = "Lwel",
["lvu"] = "Levuka",
["lwa"] = "Lwalu",
["lwe"] = "Lewo Eleng",
["lwg"] = "Wanga",
["lwh"] = "White Lachi",
["lwl"] = "เลอเวือะตะวันออก",
["lwm"] = "Laomian",
["lwo"] = "Luwo",
["lws"] = "Malawian Sign Language",
["lwt"] = "Lewotobi",
["lwu"] = "Lawu",
["lww"] = "Lewo",
["lya"] = "Layakha",
["lyg"] = "ลึงงัม",
["lyn"] = "Luyana",
["lzh"] = "จีนวรรณกรรม",
["lzl"] = "Litzlitz",
["lzn"] = "Leinong Naga",
["lzz"] = "ลัซ",
["maa"] = "San Jerónimo Tecóatl Mazatec",
["mab"] = "Yutanduchi Mixtec",
["mad"] = "Madurese",
["mae"] = "Bo-Rukul",
["maf"] = "Mafa",
["mag"] = "มคหะ",
["mai"] = "ไมถิลี",
["maj"] = "Jalapa de Díaz Mazatec",
["mak"] = "มากัซซาร์",
["mam"] = "Mam",
["man"] = "Mandingo",
["map-ata-pro"] = "Proto-Atayalic",
["map-bms"] = "Banyumasan",
["map-pro"] = "ออสโตรนีเซียนดั้งเดิม",
["maq"] = "Chiquihuitlán Mazatec",
["mas"] = "มาไซ",
["mat"] = "Matlatzinca",
["mau"] = "Huautla Mazatec",
["mav"] = "Sateré-Mawé",
["maw"] = "Mampruli",
["max"] = "มลายูแบบโมลุกกะเหนือ",
["maz"] = "Central Mazahua",
["mba"] = "Higaonon",
["mbb"] = "Western Bukidnon Manobo",
["mbc"] = "Macushi",
["mbd"] = "Dibabawon Manobo",
["mbe"] = "Molale",
["mbf"] = "Baba Malay",
["mbh"] = "Mangseng",
["mbi"] = "Ilianen Manobo",
["mbj"] = "Nadëb",
["mbk"] = "Malol",
["mbl"] = "Maxakalí",
["mbm"] = "Ombamba",
["mbn"] = "Macaguán",
["mbo"] = "Mbo (Cameroon)",
["mbp"] = "Wiwa",
["mbq"] = "Maisin",
["mbr"] = "Nukak Makú",
["mbs"] = "Sarangani Manobo",
["mbt"] = "Matigsalug Manobo",
["mbu"] = "Mbula-Bwazza",
["mbv"] = "Mbulungish",
["mbw"] = "Maring",
["mbx"] = "Sepik Mari",
["mby"] = "Memoni",
["mbz"] = "Amoltepec Mixtec",
["mca"] = "Maca",
["mcb"] = "Machiguenga",
["mcc"] = "Bitur",
["mcd"] = "Sharanahua",
["mce"] = "Itundujia Mixtec",
["mcf"] = "Matsés",
["mcg"] = "Mapoyo",
["mch"] = "Ye'kwana",
["mci"] = "Mese",
["mcj"] = "Mvanip",
["mck"] = "Mbunda",
["mcl"] = "Macaguaje",
["mcm"] = "Kristang",
["mcn"] = "Masana",
["mco"] = "Coatlán Mixe",
["mcp"] = "Makaa",
["mcq"] = "Ese",
["mcr"] = "Menya",
["mcs"] = "Mambai",
["mcu"] = "Cameroon Mambila",
["mcw"] = "Mawa",
["mcx"] = "Mpiemo",
["mcy"] = "South Watut",
["mcz"] = "Mawan",
["mda"] = "Mada (Nigeria)",
["mdb"] = "Morigi",
["mdc"] = "Male",
["mdd"] = "Mbum",
["mde"] = "Bura Mabang",
["mdf"] = "มอกชา",
["mdg"] = "Massalat",
["mdh"] = "มากินดาเนา",
["mdi"] = "Mamvu",
["mdj"] = "Mangbetu",
["mdk"] = "Mangbutu",
["mdl"] = "Maltese Sign Language",
["mdm"] = "Mayogo",
["mdn"] = "Mbati",
["mdp"] = "Mbala",
["mdq"] = "Mbole",
["mdr"] = "Mandar",
["mds"] = "Maria",
["mdt"] = "Mbere",
["mdu"] = "Mboko",
["mdv"] = "Santa Lucía Monteverde Mixtec",
["mdw"] = "Mbosi",
["mdx"] = "Dizin",
["mdy"] = "Maale",
["mdz"] = "Suruí Do Pará",
["mea"] = "Menka",
["meb"] = "Ikobi-Mena",
["mec"] = "Mara",
["med"] = "Melpa",
["mee"] = "Mengen",
["mef"] = "Megam",
["meh"] = "Southwestern Tlaxiaco Mixtec",
["mei"] = "Midob",
["mej"] = "Meyah",
["mek"] = "Mekeo",
["mel"] = "Central Melanau",
["mem"] = "Mangala",
["men"] = "Mende",
["meo"] = "มลายูแบบเกอดะฮ์",
["mep"] = "Miriwung",
["meq"] = "Merey",
["mer"] = "Meru",
["mes"] = "Masmaje",
["met"] = "Mato",
["meu"] = "Motu",
["mev"] = "Mano",
["mew"] = "Maaka",
["mey"] = "Hassaniya Arabic",
["mez"] = "Menominee",
["mfa"] = "มลายูแบบปัตตานี",
["mfb"] = "Bangka",
["mfc"] = "Mba",
["mfd"] = "Mendankwe-Nkwen",
["mfe"] = "ครีโอลมอริเชียส",
["mff"] = "Naki",
["mfg"] = "Mixifore",
["mfh"] = "Matal",
["mfi"] = "Wandala",
["mfj"] = "Mefele",
["mfk"] = "North Mofu",
["mfl"] = "Putai",
["mfm"] = "Marghi South",
["mfn"] = "Cross River Mbembe",
["mfo"] = "Mbe",
["mfp"] = "Makassar Malay",
["mfq"] = "Moba",
["mfr"] = "Marrithiyel",
["mfs"] = "Mexican Sign Language",
["mft"] = "Mokerang",
["mfu"] = "Mbwela",
["mfv"] = "Mandjak",
["mfw"] = "Mulaha",
["mfx"] = "Melo",
["mfy"] = "Mayo",
["mfz"] = "Mabaan",
["mg"] = "มาลากาซี",
["mga"] = "ไอริชกลาง",
["mgb"] = "Mararit",
["mgc"] = "Morokodo",
["mgd"] = "Moru",
["mge"] = "Mango",
["mgf"] = "Maklew",
["mgg"] = "Mpongmpong",
["mgh"] = "Makhuwa-Meetto",
["mgi"] = "Jili",
["mgj"] = "Abureni",
["mgk"] = "Mawes",
["mgl"] = "Maleu-Kilenge",
["mgm"] = "Mambae",
["mgn"] = "Mbangi",
["mgo"] = "Meta'",
["mgp"] = "Eastern Magar",
["mgq"] = "Malila",
["mgr"] = "Mambwe-Lungu",
["mgs"] = "Manda (Tanzania)",
["mgt"] = "Mongol",
["mgu"] = "Mailu",
["mgv"] = "Matengo",
["mgw"] = "Matumbi",
["mgy"] = "Mbunga",
["mgz"] = "Mbugwe",
["mh"] = "มาร์แชลล์",
["mha"] = "Manda (India)",
["mhb"] = "Mahongwe",
["mhc"] = "Mocho",
["mhd"] = "Mbugu",
["mhe"] = "Besisi",
["mhf"] = "Mamaa",
["mhg"] = "Marrgu",
["mhi"] = "Ma'di",
["mhj"] = "Mogholi",
["mhk"] = "Mungaka",
["mhl"] = "Mauwake",
["mhm"] = "Makhuwa-Moniga",
["mhn"] = "โมเชโน",
["mho"] = "Mashi",
["mhp"] = "Balinese Malay",
["mhq"] = "Mandan",
["mhr"] = "Eastern Mari",
["mhs"] = "Buru (Indonesia)",
["mht"] = "Mandahuaca",
["mhu"] = "Taraon",
["mhw"] = "Mbukushu",
["mhx"] = "Lhao Vo",
["mhy"] = "Ma'anyan",
["mhz"] = "Mor (Austronesian)",
["mi"] = "มาวรี",
["mia"] = "Miami",
["mib"] = "Atatláhuca Mixtec",
["mic"] = "Mi'kmaq",
["mid"] = "Mandaic",
["mie"] = "Ocotepec Mixtec",
["mif"] = "Mofu-Gudur",
["mig"] = "San Miguel el Grande Mixtec",
["mih"] = "Chayuco Mixtec",
["mii"] = "Chigmecatitlán Mixtec",
["mij"] = "Mungbam",
["mik"] = "Mikasuki",
["mil"] = "Peñoles Mixtec",
["mim"] = "Alacatlatzala Mixtec",
["min"] = "มีนังกาเบา",
["mio"] = "Pinotepa Nacional Mixtec",
["mip"] = "Apasco-Apoala Mixtec",
["miq"] = "Miskito",
["mir"] = "Isthmus Mixe",
["mis-hkl"] = "Kelantan Peranakan Hokkien",
["mis-idn"] = "Idiom Neutral",
["mis-isa"] = "Isaurian",
["mis-jie"] = "Jie",
["mis-jzh"] = "Jizhao",
["mis-kas"] = "Kassite",
["mis-mmd"] = "Mimi of Decorse",
["mis-mmn"] = "Mimi of Nachtigal",
["mis-phi"] = "Philistine",
["mis-rou"] = "Rouran",
["mis-tdl"] = "Turdulian",
["mis-tdt"] = "Turdetanian",
["mis-tnw"] = "Tangwang",
["mis-tuh"] = "Tuyuhun",
["mis-tuo"] = "Tuoba",
["mis-wuh"] = "Wuhuan",
["mis-xbi"] = "Xianbei",
["mis-xnu"] = "Xiongnu",
["mit"] = "Southern Puebla Mixtec",
["miu"] = "Cacaloxtepec Mixtec",
["miw"] = "Akoye",
["mix"] = "Mixtepec Mixtec",
["miy"] = "Ayutla Mixtec",
["miz"] = "Coatzospan Mixtec",
["mjb"] = "Makalero",
["mjc"] = "San Juan Colorado Mixtec",
["mjd"] = "Northwest Maidu",
["mje"] = "Muskum",
["mjg-mgl"] = "Mongghul",
["mjg-mgr"] = "Mangghuer",
["mji"] = "Kim Mun",
["mjj"] = "Mawak",
["mjk"] = "Matukar",
["mjl"] = "Mandeali",
["mjm"] = "Medebur",
["mjn"] = "Mebu",
["mjo"] = "Malankuravan",
["mjp"] = "Malapandaram",
["mjq"] = "Malaryan",
["mjr"] = "Malavedan",
["mjs"] = "Miship",
["mjt"] = "Sawriya Paharia",
["mju"] = "Manna-Dora",
["mjv"] = "Mannan",
["mjw"] = "Karbi",
["mjx"] = "Mahali",
["mjy"] = "Mahican",
["mjz"] = "Majhi",
["mk"] = "มาซิโดเนีย",
["mka"] = "Mbre",
["mkb"] = "Mal Paharia",
["mkc"] = "Siliput",
["mke"] = "Mawchi",
["mkf"] = "Miya",
["mkg"] = "Mak (China)",
["mkh-asl-pro"] = "Proto-Aslian",
["mkh-ban-pro"] = "Proto-Bahnaric",
["mkh-kat-pro"] = "Proto-Katuic",
["mkh-khm-pro"] = "ขมุอิกดั้งเดิม",
["mkh-kmr-pro"] = "เขมรดั้งเดิม",
["mkh-mmn"] = "มอญกลาง",
["mkh-mnc-pro"] = "มอญดั้งเดิม",
["mkh-mvi"] = "เวียดนามกลาง",
["mkh-pal-pro"] = "ปะหล่องดั้งเดิม",
["mkh-pea-pro"] = "แพริกดั้งเดิม",
["mkh-pkn-pro"] = "Proto-Pakanic",
["mkh-pro"] = "มอญ-เขมรดั้งเดิม",
["mkh-vie-pro"] = "เวียตติกดั้งเดิม",
["mki"] = "Dhatki",
["mkj"] = "โมกิล",
["mkk"] = "Byep",
["mkl"] = "Mokole",
["mkm"] = "Moklen",
["mkn"] = "Kupang Malay",
["mko"] = "Mingang Doso",
["mkp"] = "Moikodi",
["mkq"] = "Bay Miwok",
["mkr"] = "Malas",
["mks"] = "Silacayoapan Mixtec",
["mkt"] = "Vamale",
["mku"] = "Konyanka Maninka",
["mkv"] = "Mav̋ea",
["mkx"] = "Cinamiguin Manobo",
["mky"] = "Taba",
["mkz"] = "Makasae",
["ml"] = "มลยาฬัม",
["mla"] = "Tamambo",
["mlb"] = "Mbule",
["mlc"] = "Caolan",
["mle"] = "Manambu",
["mlf"] = "มัล",
["mlh"] = "Mape",
["mli"] = "Malimpung",
["mlj"] = "Miltu",
["mlk"] = "Ilwana",
["mll"] = "Malua Bay",
["mlm"] = "Mulam",
["mln"] = "Malango",
["mlo"] = "Mlomp",
["mlp"] = "Bargam",
["mlq"] = "Western Maninkakan",
["mlr"] = "Vame",
["mls"] = "Masalit",
["mlu"] = "To'abaita",
["mlv"] = "Mwotlap",
["mlw"] = "Moloko",
["mlx"] = "Malfaxal",
["mlz"] = "Malaynon",
["mma"] = "Mama",
["mmb"] = "Momina",
["mmc"] = "Michoacán Mazahua",
["mmd"] = "Maonan",
["mme"] = "Tirax",
["mmf"] = "Mundat",
["mmg"] = "North Ambrym",
["mmh"] = "Mehináku",
["mmi"] = "Musar",
["mmj"] = "Majhwar",
["mmk"] = "Mukha-Dora",
["mml"] = "Man Met",
["mmm"] = "Maii",
["mmn"] = "Mamanwa",
["mmo"] = "Mangga Buang",
["mmp"] = "Musan",
["mmq"] = "Aisi",
["mmr"] = "Western Xiangxi Miao",
["mmt"] = "Malalamai",
["mmu"] = "Mmaala",
["mmv"] = "Miriti",
["mmw"] = "Emae",
["mmx"] = "Madak",
["mmy"] = "Migaama",
["mmz"] = "Mabaale",
["mn"] = "มองโกเลีย",
["mna"] = "Mbula",
["mnb"] = "Muna",
["mnc"] = "แมนจู",
["mnd"] = "Mondé",
["mne"] = "Naba",
["mnf"] = "Mundani",
["mng"] = "Eastern Mnong",
["mnh"] = "Mono (Congo)",
["mni"] = "มณีปุระ",
["mnj"] = "Munji",
["mnk"] = "Mandinka",
["mnl"] = "Tiale",
["mnm"] = "Mapena",
["mnn"] = "มนองใต้",
["mnp"] = "หมิ่นเหนือ",
["mnq"] = "Minriq",
["mnr"] = "Mono (California)",
["mns-cen"] = "Central Mansi",
["mns-nor"] = "Northern Mansi",
["mns-pro"] = "Proto-Mansi",
["mns-sou"] = "Southern Mansi",
["mnt"] = "Maykulan",
["mnu"] = "Mer",
["mnv"] = "Rennellese",
["mnw"] = "มอญ",
["mnw-tha"] = "มอญแบบไทย",
["mnx"] = "Manikion",
["mny"] = "Manyawa",
["mnz"] = "Moni",
["moa"] = "Mwan",
["moc"] = "Mocoví",
["mod"] = "Mobilian",
["moe"] = "มงตาแญ",
["mog"] = "Mongondow",
["moh"] = "Mohawk",
["moi"] = "Mboi",
["moj"] = "Monzombo",
["mok"] = "Morori",
["mom"] = "Monimbo",
["moo"] = "Monom",
["mop"] = "Mopan Maya",
["moq"] = "Mor (Papuan)",
["mor"] = "Moro",
["mos"] = "Moore",
["mot"] = "Barí",
["mou"] = "Mogum",
["mov"] = "Mojave",
["mow"] = "Moi (Congo)",
["mox"] = "Molima",
["moy"] = "Shekkacho",
["moz"] = "Mukulu",
["mpa"] = "Mpoto",
["mpb"] = "Mullukmulluk",
["mpc"] = "Mangarayi",
["mpd"] = "Machinere",
["mpe"] = "Majang",
["mpg"] = "Marba",
["mph"] = "Maung",
["mpi"] = "Mpade",
["mpj"] = "Martu Wangka",
["mpk"] = "Mbara (Chad)",
["mpl"] = "Middle Watut",
["mpm"] = "Yosondúa Mixtec",
["mpn"] = "Mindiri",
["mpo"] = "Miu",
["mpp"] = "Migabac",
["mpq"] = "Matís",
["mpr"] = "Vangunu",
["mps"] = "Dadibi",
["mpt"] = "Mian",
["mpu"] = "Makuráp",
["mpv"] = "Mungkip",
["mpw"] = "Mapidian",
["mpx"] = "Misima-Paneati",
["mpy"] = "Mapia",
["mpz"] = "Mpi",
["mqa"] = "Maba",
["mqb"] = "Mbuko",
["mqc"] = "Mangole",
["mqe"] = "Matepi",
["mqf"] = "Momuna",
["mqg"] = "Kota Bangun Kutai Malay",
["mqh"] = "Tlazoyaltepec Mixtec",
["mqi"] = "Mariri",
["mqj"] = "Mamasa",
["mqk"] = "Rajah Kabunsuwan Manobo",
["mql"] = "Mbelime",
["mqm"] = "South Marquesan",
["mqn"] = "Moronene",
["mqo"] = "Modole",
["mqp"] = "Manipa",
["mqq"] = "Minokok",
["mqr"] = "Mander",
["mqs"] = "West Makian",
["mqt"] = "Mok",
["mqu"] = "Mandari",
["mqv"] = "Mosimo",
["mqw"] = "Murupi",
["mqx"] = "Mamuju",
["mqy"] = "Manggarai",
["mqz"] = "Malasanga",
["mr"] = "มราฐี",
["mra"] = "Mlabri",
["mrb"] = "Sungwadia",
["mrc"] = "Maricopa",
["mrd"] = "Western Magar",
["mre"] = "Martha's Vineyard Sign Language",
["mrf"] = "Elseng",
["mrg"] = "Mising",
["mrh"] = "Mara Chin",
["mrj"] = "Western Mari",
["mrk"] = "Hmwaveke",
["mrl"] = "Mortlockese",
["mrm"] = "Mwerlap",
["mrn"] = "Cheke Holo",
["mro"] = "Mru",
["mrp"] = "Morouas",
["mrq"] = "North Marquesan",
["mrr"] = "Hill Maria",
["mrs"] = "Maragus",
["mrt"] = "Margi",
["mru"] = "Mono (Cameroon)",
["mrv"] = "Mangarevan",
["mrw"] = "มาราเนา",
["mrx"] = "Dineor",
["mry"] = "Karaga Mandaya",
["mrz"] = "Marind",
["ms"] = "มาเลเซีย",
["msb"] = "มัสบาเต",
["msc"] = "Sankaran Maninka",
["msd"] = "Yucatec Maya Sign Language",
["mse"] = "Musey",
["msf"] = "Mekwei",
["msg"] = "Moraid",
["msi"] = "Sabah Malay",
["msj"] = "Ma",
["msk"] = "Mansaka",
["msl"] = "Molof",
["msm"] = "Agusan Manobo",
["msn"] = "Vurës",
["mso"] = "Mombum",
["msp"] = "Maritsauá",
["msq"] = "Caac",
["msr"] = "Mongolian Sign Language",
["mss"] = "West Masela",
["msu"] = "Musom",
["msv"] = "Maslam",
["msw"] = "Mansoanka",
["msx"] = "Moresada",
["msy"] = "Aruamu",
["msz"] = "Momare",
["mt"] = "มอลตา",
["mta"] = "Cotabato Manobo",
["mtb"] = "Anyin Morofo",
["mtc"] = "Munit",
["mtd"] = "Mualang",
["mte"] = "Alu",
["mtf"] = "Murik (New Guinea)",
["mtg"] = "Una",
["mth"] = "Munggui",
["mti"] = "Maiwa (New Guinea)",
["mtj"] = "Moskona",
["mtk"] = "Mbe'",
["mtl"] = "Montol",
["mtm"] = "Mator",
["mtn"] = "Matagalpa",
["mto"] = "Totontepec Mixe",
["mtp"] = "Wichí Lhamtés Nocten",
["mtq"] = "เหมื่อง",
["mtr"] = "เมวาร์",
["mts"] = "Yora",
["mtt"] = "Mota",
["mtu"] = "Tututepec Mixtec",
["mtv"] = "Asaro'o",
["mtw"] = "Magahat",
["mtx"] = "Tidaá Mixtec",
["mty"] = "Nabi",
["mua"] = "Mundang",
["mub"] = "Mubi",
["muc"] = "Mbu'",
["mud"] = "Mednyj Aleut",
["mue"] = "Media Lengua",
["mug"] = "Musgu",
["muh"] = "Mündü",
["mui"] = "มูซี",
["muj"] = "Mabire",
["mul"] = "ร่วม",
["mum"] = "Maiwala",
["mun-pro"] = "มุนดาดั้งเดิม",
["muo"] = "Nyong",
["mup"] = "Malvi",
["muq"] = "Eastern Xiangxi Miao",
["mur"] = "Murle",
["mus"] = "Creek",
["mut"] = "Western Muria",
["muu"] = "Yaaku",
["muv"] = "Muthuvan",
["mux"] = "Bo-Ung",
["muy"] = "Muyang",
["muz"] = "Mursi",
["mva"] = "Manam",
["mvb"] = "Mattole",
["mvd"] = "Mamboru",
["mvg"] = "Yucuañe Mixtec",
["mvh"] = "Mire",
["mvi"] = "มิยาโกะ",
["mvk"] = "Mekmek",
["mvl"] = "Mbara (Australia)",
["mvm"] = "Muya",
["mvn"] = "Minaveha",
["mvo"] = "Marovo",
["mvp"] = "Duri",
["mvq"] = "Moere",
["mvr"] = "Marau",
["mvs"] = "Massep",
["mvt"] = "Mpotovoro",
["mvu"] = "Marfa",
["mvv"] = "Tagal Murut",
["mvw"] = "Machinga",
["mvx"] = "Meoswar",
["mvy"] = "Indus Kohistani",
["mvz"] = "Mesqan",
["mwa"] = "Mwatebu",
["mwb"] = "Juwal",
["mwc"] = "Are",
["mwe"] = "Mwera",
["mwf"] = "Murrinh-Patha",
["mwg"] = "Aiklep",
["mwh"] = "Mouk-Aria",
["mwi"] = "Labo",
["mwk"] = "Kita Maninkakan",
["mwl"] = "มีรังดา",
["mwm"] = "Sar",
["mwn"] = "Nyamwanga",
["mwo"] = "Sungwadaga",
["mwp"] = "Kala Lagaw Ya",
["mwq"] = "Mün Chin",
["mwr"] = "มาร์วาร์",
["mws"] = "Mwimbi-Muthambi",
["mwt"] = "Moken",
["mwu"] = "Mittu",
["mwv"] = "Mentawai",
["mww"] = "ม้งขาว",
["mwz"] = "Moingi",
["mxa"] = "Northwest Oaxaca Mixtec",
["mxb"] = "Tezoatlán Mixtec",
["mxd"] = "Modang",
["mxe"] = "Mele-Fila",
["mxf"] = "Malgbe",
["mxg"] = "Mbangala",
["mxh"] = "Mvuba",
["mxi"] = "Mozarabic",
["mxj"] = "Miju",
["mxk"] = "Monumbo",
["mxl"] = "Maxi Gbe",
["mxm"] = "Meramera",
["mxn"] = "Moi (Indonesia)",
["mxo"] = "Mbowe",
["mxp"] = "Tlahuitoltepec Mixe",
["mxq"] = "Juquila Mixe",
["mxr"] = "Murik (Malaysia)",
["mxs"] = "Huitepec Mixtec",
["mxt"] = "Jamiltepec Mixtec",
["mxu"] = "Mada (Cameroon)",
["mxv"] = "Metlatónoc Mixtec",
["mxw"] = "Namo",
["mxx"] = "Mahou",
["mxy"] = "Southeastern Nochixtlán Mixtec",
["mxz"] = "Central Masela",
["my"] = "พม่า",
["myb"] = "Mbay",
["myc"] = "Mayeka",
["mye"] = "Myene",
["myf"] = "Bambassi",
["myg"] = "Manta",
["myh"] = "Makah",
["myj"] = "Mangayat",
["myk"] = "Mamara Senoufo",
["myl"] = "Moma",
["mym"] = "Me'en",
["myn-chl"] = "Ch'olti'",
["myn-pro"] = "มายันดั้งเดิม",
["myo"] = "Anfillo",
["myp"] = "Pirahã",
["myr"] = "Muniche",
["mys"] = "Mesmes",
["myu"] = "Mundurukú",
["myv"] = "เอร์เซีย",
["myw"] = "Muyuw",
["myx"] = "Masaba",
["myy"] = "Macuna",
["myz"] = "Classical Mandaic",
["mza"] = "Santa María Zacatepec Mixtec",
["mzb"] = "Northern Saharan Berber",
["mzc"] = "Madagascar Sign Language",
["mzd"] = "Malimba",
["mze"] = "Morawa",
["mzg"] = "Monastic Sign Language",
["mzh"] = "Wichí Lhamtés Güisnay",
["mzi"] = "Ixcatlán Mazatec",
["mzj"] = "Manya",
["mzk"] = "Nigeria Mambila",
["mzl"] = "Mazatlán Mixe",
["mzm"] = "Mumuye",
["mzn"] = "มอแซนแดรอน",
["mzo"] = "Matipuhy",
["mzp"] = "Movima",
["mzq"] = "Mori Atas",
["mzr"] = "Marúbo",
["mzs"] = "ครีโอลมาเก๊า",
["mzt"] = "Mintil",
["mzu"] = "Inapang",
["mzv"] = "Manza",
["mzw"] = "Deg",
["mzx"] = "Mawayana",
["mzy"] = "Mozambican Sign Language",
["mzz"] = "Maiadomu",
["na"] = "นาอูรู",
["naa"] = "Namla",
["nab"] = "Nambikwara",
["nac"] = "Narak",
["nae"] = "Naka'ela",
["naf"] = "Nabak",
["nag"] = "Naga Pidgin",
["nah"] = "นาวัตล์",
["nai-ala"] = "Alazapa",
["nai-bay"] = "Bayogoula",
["nai-cal"] = "Calusa",
["nai-chi"] = "Chiquimulilla",
["nai-chu-pro"] = "Proto-Chumash",
["nai-cig"] = "Ciguayo",
["nai-ckn-pro"] = "Proto-Chinookan",
["nai-guz"] = "Guazacapán",
["nai-hit"] = "Hitchiti",
["nai-ipa"] = "Ipai",
["nai-jtp"] = "Jutiapa",
["nai-jum"] = "Jumaytepeque",
["nai-kat"] = "Kathlamet",
["nai-klp-pro"] = "Proto-Kalapuyan",
["nai-knm"] = "Konomihu",
["nai-kum"] = "Kumeyaay",
["nai-mac"] = "Macoris",
["nai-mdu-pro"] = "Proto-Maidun",
["nai-miz-pro"] = "Proto-Mixe-Zoque",
["nai-mus-pro"] = "Proto-Muskogean",
["nai-nao"] = "Naolan",
["nai-nrs"] = "New River Shasta",
["nai-okw"] = "Okwanuchu",
["nai-per"] = "Pericú",
["nai-pic"] = "Picuris",
["nai-plp-pro"] = "Proto-Plateau Penutian",
["nai-pom-pro"] = "Proto-Pomo",
["nai-qng"] = "Quinigua",
["nai-sca-pro"] = "Proto-Siouan-Catawban",
["nai-sin"] = "Sinacantán",
["nai-sln"] = "Salvadoran Lenca",
["nai-spt"] = "Sahaptin",
["nai-tap"] = "Tapachultec",
["nai-taw"] = "Tawasa",
["nai-teq"] = "Tequistlatec",
["nai-tip"] = "Tipai",
["nai-tot-pro"] = "Proto-Totozoquean",
["nai-tsi-pro"] = "Proto-Tsimshianic",
["nai-utn-pro"] = "Proto-Utian",
["nai-wai"] = "Waikuri",
["nai-wji"] = "Western Jicaque",
["nai-yup"] = "Yupiltepeque",
["naj"] = "Nalu",
["nak"] = "Nakanai",
["nal"] = "Nalik",
["nam"] = "Ngan'gityemerri",
["nan"] = "หมิ่นใต้",
["nan-dat"] = "Datian Min",
["nan-hbl"] = "ฮกเกี้ยน",
["nan-hlh"] = "Hailufeng Min",
["nan-lnx"] = "Longyan Min",
["nan-tws"] = "แต้จิ๋ว",
["nan-zhe"] = "Zhenan Min",
["nan-zsh"] = "Sanxiang Min",
["nao"] = "Naaba",
["nap"] = "นาโปลี",
["naq"] = "Khoekhoe",
["nar"] = "Iguta",
["nas"] = "Nasioi",
["nat"] = "Hungworo",
["naw"] = "Nawuri",
["nax"] = "Nakwi",
["nay"] = "Ngarrindjeri",
["naz"] = "Coatepec Nahuatl",
["nb"] = "นอร์เวย์แบบบุ๊กมอล",
["nba"] = "Nyemba",
["nbb"] = "Ndoe",
["nbc"] = "Chang",
["nbd"] = "Ngbinda",
["nbe"] = "Konyak Naga",
["nbg"] = "Nagarchal",
["nbh"] = "Ngamo",
["nbi"] = "Mao Naga",
["nbj"] = "Ngarinman",
["nbk"] = "Nake",
["nbm"] = "Ngbaka Ma'bo",
["nbn"] = "Kuri",
["nbo"] = "Nkukoli",
["nbp"] = "Nnam",
["nbq"] = "Nggem",
["nbr"] = "Numana",
["nbs"] = "Namibian Sign Language",
["nbt"] = "Na",
["nbu"] = "Rongmei Naga",
["nbv"] = "Ngamambo",
["nbw"] = "Southern Ngbandi",
["nby"] = "Ningera",
["nca"] = "Iyo",
["ncb"] = "นิโคบาร์กลาง",
["ncc"] = "Ponam",
["ncd"] = "Nachering",
["nce"] = "Yale",
["ncf"] = "Notsi",
["ncg"] = "Nisga'a",
["nch"] = "Central Huasteca Nahuatl",
["nci"] = "นาวัตล์คลาสสิก",
["ncj"] = "Northern Puebla Nahuatl",
["nck"] = "Nakara",
["ncl"] = "Michoacán Nahuatl",
["ncm"] = "Nambo",
["ncn"] = "Nauna",
["nco"] = "Sibe",
["ncr"] = "Ncane",
["ncs"] = "Nicaraguan Sign Language",
["nct"] = "Chothe Naga",
["ncu"] = "Chumburung",
["ncx"] = "Central Puebla Nahuatl",
["ncz"] = "Natchez",
["nd"] = "Northern Ndebele",
["nda"] = "Ndasa",
["ndb"] = "Kenswei Nsei",
["ndc"] = "Ndau",
["ndd"] = "Nde-Nsele-Nta",
["ndf"] = "Nadruvian",
["ndg"] = "Ndengereko",
["ndh"] = "Ndali",
["ndi"] = "Chamba Leko",
["ndj"] = "Ndamba",
["ndk"] = "Ndaka",
["ndl"] = "Ndolo",
["ndm"] = "Ndam",
["ndn"] = "Ngundi",
["ndp"] = "Ndo",
["ndq"] = "Ndombe",
["ndr"] = "Ndoola",
["nds"] = "เยอรมันต่ำ",
["nds-de"] = "เยอรมันต่ำแบบเยอรมนี",
["nds-nl"] = "Dutch Low Saxon",
["ndt"] = "Ndunga",
["ndu"] = "Dugun",
["ndv"] = "Ndut",
["ndw"] = "Ndobo",
["ndx"] = "Nduga",
["ndy"] = "Lutos",
["ndz"] = "Ndogo",
["ne"] = "เนปาล",
["nea"] = "Eastern Ngad'a",
["neb"] = "Toura",
["nec"] = "Nedebang",
["ned"] = "Nde-Gbite",
["nee"] = "Kumak",
["nef"] = "Nefamese",
["neg"] = "Negidal",
["neh"] = "Nyenkha",
["nej"] = "Neko",
["nek"] = "Neku",
["nem"] = "Nemi",
["nen"] = "Nengone",
["neo"] = "Ná-Meo",
["neq"] = "North Central Mixe",
["ner"] = "Yahadian",
["nes"] = "Bhoti Kinnauri",
["net"] = "Nete",
["neu"] = "Neo",
["nev"] = "Nyaheun",
["new"] = "เนวาร์",
["nex"] = "Neme",
["ney"] = "Neyo",
["nez"] = "Nez Perce",
["nfa"] = "Dhao",
["nfd"] = "Ahwai",
["nfl"] = "Äiwoo",
["nfr"] = "Nafaanra",
["nfu"] = "Mfumte",
["ng"] = "Ndonga",
["nga"] = "Ngbaka",
["ngb"] = "Northern Ngbandi",
["ngc"] = "Ngombe (Congo)",
["ngd"] = "Ngando (Central African Republic)",
["nge"] = "Ngemba",
["ngf-pro"] = "Proto-Trans-New Guinea",
["ngg"] = "Ngbaka Manza",
["ngh"] = "Nǀuu",
["ngi"] = "Ngizim",
["ngj"] = "Ngie",
["ngk"] = "Ngalkbun",
["ngl"] = "Lomwe",
["ngm"] = "Ngatik Men's Creole",
["ngn"] = "Ngwo",
["ngo"] = "Ngoni",
["ngp"] = "Ngulu",
["ngq"] = "Ngoreme",
["ngr"] = "Nagu",
["ngs"] = "Gvoko",
["ngt"] = "Ngeq",
["ngu"] = "Guerrero Nahuatl",
["ngv"] = "Nagumi",
["ngw"] = "Ngwaba",
["ngx"] = "Nggwahyi",
["ngy"] = "Tibea",
["ngz"] = "Ngungwel",
["nha"] = "Nhanda",
["nhb"] = "Beng",
["nhc"] = "Tabasco Nahuatl",
["nhd"] = "Chiripá",
["nhe"] = "Eastern Huasteca Nahuatl",
["nhf"] = "Nhuwala",
["nhg"] = "Tetelcingo Nahuatl",
["nhh"] = "Nahari",
["nhi"] = "Zacatlán-Ahuacatlán-Tepetzintla Nahuatl",
["nhk"] = "Cosoleacaque Nahuatl",
["nhm"] = "Morelos Nahuatl",
["nhn"] = "นาวัตล์ตอนกลาง",
["nho"] = "Takuu",
["nhp"] = "Pajapan Nahuatl",
["nhq"] = "Huaxcaleca Nahuatl",
["nhr"] = "Naro",
["nht"] = "Ometepec Nahuatl",
["nhu"] = "Noone",
["nhv"] = "Temascaltepec Nahuatl",
["nhw"] = "Western Huasteca Nahuatl",
["nhx"] = "Mecayapan Nahuatl",
["nhy"] = "Northern Oaxaca Nahuatl",
["nhz"] = "Santa María La Alta Nahuatl",
["nia"] = "Nias",
["nib"] = "Nakame",
["nic-bco-pro"] = "เบนูเอ-คองโกดั้งเดิม",
["nic-bod-pro"] = "แบนทอยด์ดั้งเดิม",
["nic-eov-pro"] = "Proto-Eastern Oti-Volta",
["nic-gns-pro"] = "Proto-Gurunsi",
["nic-grf-pro"] = "Proto-Grassfields",
["nic-gur-pro"] = "กูร์ดั้งเดิม",
["nic-jkn-pro"] = "Proto-Jukunoid",
["nic-lcr-pro"] = "Proto-Lower Cross River",
["nic-ogo-pro"] = "Proto-Ogoni",
["nic-ovo-pro"] = "Proto-Oti-Volta",
["nic-plt-pro"] = "Proto-Plateau",
["nic-pro"] = "ไนเจอร์-คองโกดั้งเดิม",
["nic-ubg-pro"] = "Proto-Ubangian",
["nic-ucr-pro"] = "Proto-Upper Cross River",
["nic-vco-pro"] = "วอลตา-คองโกดั้งเดิม",
["nid"] = "Ngandi",
["nie"] = "Niellim",
["nif"] = "Nek",
["nig"] = "Ngalakan",
["nih"] = "Nyiha",
["nii"] = "Nii",
["nij"] = "Ngaju",
["nik"] = "Southern Nicobarese",
["nil"] = "Nila",
["nim"] = "Nilamba",
["nin"] = "Ninzo",
["nio"] = "Nganasan",
["niq"] = "Nandi",
["nir"] = "Nimboran",
["nis"] = "Nimi",
["nit"] = "Southeastern Kolami",
["niu"] = "นีวเว",
["niv"] = "Nivkh",
["niw"] = "Nimo",
["nix"] = "Hema",
["niy"] = "Ngiti",
["niz"] = "Ningil",
["nja"] = "Nzanyi",
["njb"] = "Nocte",
["njh"] = "Lotha Naga",
["nji"] = "Gudanji",
["njj"] = "Njen",
["njl"] = "Njalgulgule",
["njm"] = "Angami",
["njn"] = "Liangmai Naga",
["njo"] = "Ao",
["njr"] = "Njerep",
["njs"] = "Nisa",
["njt"] = "Ndyuka-Trio Pidgin",
["nju"] = "Ngadjunmaya",
["njx"] = "Kunyi",
["njy"] = "Njyem",
["njz"] = "Nyishi",
["nka"] = "Nkoya",
["nkb"] = "Khoibu Naga",
["nkc"] = "Nkongho",
["nkd"] = "Koireng",
["nke"] = "Duke",
["nkf"] = "Inpui Naga",
["nkg"] = "Nekgini",
["nkh"] = "Khezha Naga",
["nki"] = "Thangal Naga",
["nkj"] = "Nakai",
["nkk"] = "Nokuku",
["nkm"] = "Namat",
["nkn"] = "Nkangala",
["nko"] = "Nkonya",
["nkp"] = "Niuatoputapu",
["nkq"] = "Nkami",
["nkr"] = "Nukuoro",
["nks"] = "North Asmat",
["nkt"] = "Nyika",
["nku"] = "Bouna Kulango",
["nkw"] = "Nkutu",
["nkx"] = "Nkoroo",
["nkz"] = "Nkari",
["nl"] = "ดัตช์",
["nla"] = "Ngombale",
["nlc"] = "Nalca",
["nle"] = "East Nyala",
["nlg"] = "Gela",
["nli"] = "Grangali",
["nlj"] = "Nyali",
["nlk"] = "Ninia Yali",
["nll"] = "Nihali",
["nlm"] = "Mankiyali",
["nlo"] = "Ngul",
["nlq"] = "Lao Naga",
["nlu"] = "Nchumbulu",
["nlv"] = "Orizaba Nahuatl",
["nlw"] = "Walangama",
["nlx"] = "Nahali",
["nly"] = "Nyamal",
["nlz"] = "Nalögo",
["nma"] = "Maram Naga",
["nmb"] = "Big Nambas",
["nmc"] = "Ngam",
["nmd"] = "Ndumu",
["nme"] = "Mzieme Naga",
["nmf"] = "Tangkhul Naga",
["nmg"] = "Kwasio",
["nmh"] = "Monsang Naga",
["nmi"] = "Nyam",
["nmj"] = "Ngombe (Central African Republic)",
["nmk"] = "Namakura",
["nml"] = "Ndemli",
["nmm"] = "Manangba",
["nmn"] = "ǃXóõ",
["nmo"] = "Moyon Naga",
["nmp"] = "Nimanbur",
["nmq"] = "Nambya",
["nmr"] = "Nimbari",
["nms"] = "Letemboi",
["nmt"] = "Namonuito",
["nmu"] = "Northeast Maidu",
["nmv"] = "Ngamini",
["nmw"] = "Nimoa",
["nmy"] = "Namuyi",
["nmz"] = "Nawdm",
["nn"] = "นอร์เวย์แบบนือนอสก์",
["nna"] = "Nyangumarta",
["nnb"] = "Nande",
["nnc"] = "Nancere",
["nnd"] = "West Ambae",
["nne"] = "Ngandyera",
["nnf"] = "Ngaing",
["nng"] = "Maring Naga",
["nnh"] = "Ngiemboon",
["nni"] = "North Nuaulu",
["nnj"] = "Nyangatom",
["nnk"] = "Nankina",
["nnl"] = "Northern Rengma Naga",
["nnm"] = "Namia",
["nnn"] = "Ngete",
["nnp"] = "Wancho",
["nnq"] = "Ngindo",
["nnr"] = "Narungga",
["nnt"] = "Nanticoke",
["nnu"] = "Dwang",
["nnv"] = "Nukunu",
["nnw"] = "Southern Nuni",
["nnx"] = "Ngong",
["nny"] = "Nyangga",
["nnz"] = "Nda'nda'",
["no"] = "นอร์เวย์",
["noa"] = "Woun Meu",
["noc"] = "Nuk",
["nod"] = "คำเมือง",
["noe"] = "Nimadi",
["nof"] = "Nomane",
["nog"] = "Nogai",
["noh"] = "Nomu",
["noi"] = "Noiri",
["noj"] = "Nonuya",
["nok"] = "Nooksack",
["nol"] = "Nomlaki",
["nom"] = "Nocamán",
["non"] = "นอร์สเก่า",
["nop"] = "Numanggang",
["noq"] = "Ngongo",
["nos"] = "Eastern Nisu",
["not"] = "Nomatsiguenga",
["nou"] = "Ewage-Notu",
["nov"] = "โนเวียล",
["now"] = "Nyambo",
["noy"] = "Noy",
["noz"] = "Nayi",
["npa"] = "Nar Phu",
["npb"] = "Nupbikha",
["npg"] = "Ponyo",
["nph"] = "Phom",
["npl"] = "Southeastern Puebla Nahuatl",
["npn"] = "Mondropolon",
["npo"] = "Pochuri Naga",
["nps"] = "Nipsan",
["npu"] = "Puimei Naga",
["npy"] = "Napu",
["nqg"] = "Ede Nago",
["nqk"] = "Kura Ede Nago",
["nql"] = "Ngendelengo",
["nqm"] = "Ndom",
["nqn"] = "Nen",
["nqo"] = "N'Ko",
["nqq"] = "Kyan-Karyaw Naga",
["nqy"] = "Akyaung Ari",
["nr"] = "Southern Ndebele",
["nra"] = "Ngom",
["nrb"] = "Nara",
["nrc"] = "Noric",
["nre"] = "Southern Rengma Naga",
["nrf"] = "นอร์มัน",
["nrg"] = "Narango",
["nri"] = "Chokri Naga",
["nrk"] = "Ngarla",
["nrl"] = "Ngarluma",
["nrm"] = "Narom",
["nrn"] = "Norn",
["nrp"] = "North Picene",
["nrr"] = "Norra",
["nrt"] = "Northern Kalapuya",
["nru"] = "Narua",
["nrx"] = "Ngurmbur",
["nrz"] = "Lala (New Guinea)",
["nsa"] = "Sangtam Naga",
["nsb"] = "Lower Nossob",
["nsc"] = "Nshi",
["nsd"] = "Southern Nisu",
["nse"] = "Nsenga",
["nsg"] = "Ngasa",
["nsh"] = "Ngoshie",
["nsi"] = "Nigerian Sign Language",
["nsk"] = "Naskapi",
["nsl"] = "Norwegian Sign Language",
["nsm"] = "Sema",
["nsn"] = "Nehan",
["nso"] = "ซูทูเหนือ",
["nsp"] = "มือเนปาล",
["nsq"] = "Northern Sierra Miwok",
["nsr"] = "Maritime Sign Language",
["nss"] = "Nali",
["nst"] = "Tangsa",
["nsu"] = "Sierra Negra Nahuatl",
["nsv"] = "Southwestern Nisu",
["nsw"] = "Navut",
["nsx"] = "Nsongo",
["nsy"] = "Nasal",
["nsz"] = "Nisenan",
["ntd"] = "Northern Tidung",
["ntg"] = "Ngantangarra",
["nti"] = "Natioro",
["ntj"] = "Ngaanyatjarra",
["ntk"] = "Ikoma",
["ntm"] = "Nateni",
["nto"] = "Ntomba",
["ntp"] = "Northern Tepehuan",
["ntr"] = "Delo",
["nts"] = "Natagaimas",
["ntu"] = "Natügu",
["ntw"] = "Nottoway",
["ntx"] = "Somra",
["nty"] = "Mantsi",
["nua"] = "Yuanga",
["nub-har"] = "Haraza",
["nub-pro"] = "นูเบียนดั้งเดิม",
["nuc"] = "Nukuini",
["nud"] = "Ngala",
["nue"] = "Ngundu",
["nuf"] = "Nusu",
["nug"] = "Nungali",
["nuh"] = "Ndunda",
["nui"] = "Ngumbi",
["nuj"] = "Nyole (Uganda)",
["nuk"] = "Nootka",
["nul"] = "Nusa Laut",
["num"] = "Niuafo'ou",
["nun"] = "Anong",
["nuo"] = "หง่วน",
["nup"] = "Nupe",
["nuq"] = "Nukumanu",
["nur"] = "Nuguria",
["nus"] = "Nuer",
["nut"] = "นุง",
["nuu"] = "Ngbundu",
["nuv"] = "Northern Nuni",
["nuw"] = "Nguluwan",
["nux"] = "Mehek",
["nuy"] = "Nunggubuyu",
["nuz"] = "Tlamacazapa Nahuatl",
["nv"] = "นาวาโฮ",
["nvh"] = "Nasarian",
["nvm"] = "Namiae",
["nvo"] = "Nyokon",
["nwa"] = "Nawathinehena",
["nwb"] = "Nyabwa",
["nwc"] = "เนวาร์คลาสสิก",
["nwe"] = "Ngwe",
["nwi"] = "Southwest Tanna",
["nwm"] = "Nyamusa-Molo",
["nwo"] = "Nauo",
["nwr"] = "Nawaru",
["nwx"] = "เนวาร์กลาง",
["nwy"] = "Nottoway-Meherrin",
["nxa"] = "Nauete",
["nxd"] = "Ngando (Congo)",
["nxe"] = "Nage",
["nxg"] = "Ngadha",
["nxi"] = "Nindi",
["nxl"] = "South Nuaulu",
["nxm"] = "Numidian",
["nxn"] = "Ngawun",
["nxo"] = "Ndambomo",
["nxq"] = "Naxi",
["nxr"] = "Ninggerum",
["nxx"] = "Nafri",
["ny"] = "เจวา",
["nyb"] = "Nyangbo",
["nyc"] = "Nyanga-li",
["nyd"] = "Nyole (Kenya)",
["nye"] = "Nyengo",
["nyf"] = "Giryama",
["nyg"] = "Nyindu",
["nyh"] = "Nyigina",
["nyi"] = "Nyimang",
["nyj"] = "Nyanga (Congo)",
["nyk"] = "Nyaneka",
["nyl"] = "Nyeu",
["nym"] = "Nyamwezi",
["nyn"] = "Nyankole",
["nyo"] = "Nyoro",
["nyp"] = "Nyang'i",
["nys"] = "Nyunga",
["nyt"] = "Nyawaygi",
["nyu"] = "Nyungwe",
["nyv"] = "Nyulnyul",
["nyw"] = "ญ้อ",
["nyx"] = "Nganyaywana",
["nyy"] = "Nyakyusa",
["nza"] = "Tigon Mbembe",
["nzb"] = "Njebi",
["nzd"] = "Nzadi",
["nzi"] = "Nzima",
["nzk"] = "Nzakara",
["nzm"] = "Zeme Naga",
["nzs"] = "New Zealand Sign Language",
["nzu"] = "Central Teke",
["nzy"] = "Nzakambay",
["nzz"] = "Nanga Dama Dogon",
["oaa"] = "Orok",
["oac"] = "Oroch",
["oak"] = "Noakhali",
["oav"] = "อะวาร์เก่า",
["obi"] = "Obispeño",
["obk"] = "Southern Bontoc",
["obl"] = "Oblo",
["obm"] = "โมอับ",
["obo"] = "Obo Manobo",
["obr"] = "พม่าเก่า",
["obt"] = "เบรอตงเก่า",
["obu"] = "Obulom",
["oc"] = "อุตซิตา",
["oca"] = "Ocaina",
["och"] = "จีนเก่า",
["oco"] = "คอร์นวอลล์เก่า",
["ocu"] = "Tlahuica",
["oda"] = "Odut",
["odk"] = "Od",
["odt"] = "ดัตช์เก่า",
["odu"] = "Odual",
["ofo"] = "Ofo",
["ofs"] = "ฟรีเชียเก่า",
["ofu"] = "Efutop",
["ogb"] = "Ogbia",
["ogc"] = "Ogbah",
["oge"] = "จอร์เจียเก่า",
["ogg"] = "Ogbogolo",
["ogo"] = "Khana",
["ogu"] = "Ogbronuagum",
["ohu"] = "ฮังการีเก่า",
["oia"] = "Oirata",
["oin"] = "Inebu One",
["oj"] = "โอจิบเว",
["ojb"] = "Northwestern Ojibwa",
["ojc"] = "Central Ojibwa",
["ojg"] = "Eastern Ojibwa",
["ojp"] = "ญี่ปุ่นเก่า",
["ojs"] = "Severn Ojibwa",
["ojv"] = "Ontong Java",
["ojw"] = "Western Ojibwa",
["oka"] = "Okanagan",
["okb"] = "Okobo",
["okd"] = "Okodia",
["oke"] = "Okpe (Southwestern Edo)",
["okg"] = "Kok-Paponk",
["okh"] = "Koresh-e Rostam",
["oki"] = "Okiek",
["okj"] = "Oko-Juwoi",
["okk"] = "Kwamtim One",
["okl"] = "Old Kentish Sign Language",
["okm"] = "เกาหลีกลาง",
["okn"] = "โอกิโนเอราบุ",
["oko"] = "เกาหลีเก่า",
["okr"] = "Kirike",
["oks"] = "Oko-Eni-Osayen",
["oku"] = "Oku",
["okv"] = "Orokaiva",
["okx"] = "Okpe (Northwestern Edo)",
["okz"] = "เขมรเก่า",
["old"] = "Mochi",
["ole"] = "Olekha",
["olm"] = "Oloma",
["olo"] = "ลิววี",
["olr"] = "Olrat",
["olt"] = "ลิทัวเนียเก่า",
["olu"] = "Kuvale",
["om"] = "ออโรโม",
["oma"] = "Omaha-Ponca",
["omb"] = "Omba",
["omc"] = "Mochica",
["omg"] = "Omagua",
["omi"] = "Omi",
["omk"] = "Omok",
["oml"] = "Ombo",
["omn"] = "ไมนอส",
["omo"] = "Utarmbung",
["omp"] = "มณีปุระเก่า",
["omq-cha-pro"] = "Proto-Chatino",
["omq-maz-pro"] = "Proto-Mazatec",
["omq-mix-pro"] = "Proto-Mixtecan",
["omq-mxt-pro"] = "Proto-Mixtec",
["omq-otp-pro"] = "Proto-Oto-Pamean",
["omq-pro"] = "Proto-Oto-Manguean",
["omq-sjq"] = "San Juan Quiahije Chatino",
["omq-tel"] = "Teposcolula Mixtec",
["omq-teo"] = "Teojomulco Chatino",
["omq-tri-pro"] = "Proto-Triqui",
["omq-zap-pro"] = "Proto-Zapotecan",
["omq-zpc-pro"] = "Proto-Zapotec",
["omr"] = "มราฐีเก่า",
["omt"] = "Omotik",
["omu"] = "Omurano",
["omv-aro-pro"] = "Proto-Aroid",
["omv-diz-pro"] = "Proto-Dizoid",
["omv-pro"] = "Proto-Omotic",
["omw"] = "South Tairora",
["omx"] = "มอญเก่า",
["ona"] = "Selk'nam",
["onb"] = "เบ",
["one"] = "Oneida",
["ong"] = "Olo",
["oni"] = "Onin",
["onj"] = "Onjob",
["onk"] = "Kabore One",
["onn"] = "Onobasulu",
["ono"] = "Onondaga",
["onp"] = "Sartang",
["onr"] = "Northern One",
["ons"] = "Ono",
["ont"] = "Ontenu",
["onu"] = "Unua",
["onw"] = "นิวเบียเก่า",
["onx"] = "Pidgin Onin",
["ood"] = "O'odham",
["oog"] = "Ong",
["oon"] = "Önge",
["oor"] = "Oorlams",
["opa"] = "Okpamheri",
["opk"] = "Kopkaka",
["opm"] = "Oksapmin",
["opo"] = "Opao",
["opt"] = "Opata",
["opy"] = "Ofayé",
["or"] = "โอริยา",
["ora"] = "Oroha",
["ore"] = "Orejón",
["org"] = "Oring",
["orh"] = "Oroqen",
["oro"] = "Orokolo",
["orr"] = "Oruma",
["ort"] = "Adivasi Odia",
["oru"] = "Ormuri",
["orv"] = "สลาวิกตะวันออกเก่า",
["orw"] = "Oro Win",
["orx"] = "Oro",
["orz"] = "Ormu",
["os"] = "ออสซีเซีย",
["osa"] = "Osage",
["osc"] = "Oscan",
["osi"] = "โอซิง",
["osn"] = "Old Sundanese",
["oso"] = "Ososo",
["osp"] = "สเปนเก่า",
["ost"] = "Osatu",
["osu"] = "Southern One",
["osx"] = "แซกซันเก่า",
["ota"] = "ตุรกีแบบออตโตมัน",
["otb"] = "ทิเบตเก่า",
["otd"] = "Ot Danum",
["ote"] = "Mezquital Otomi",
["oti"] = "Oti",
["otk"] = "เตอร์กิกเก่า",
["otl"] = "Tilapa Otomi",
["otm"] = "Eastern Highland Otomi",
["otn"] = "Tenango Otomi",
["oto-otm-pro"] = "Proto-Otomi",
["oto-pro"] = "Proto-Otomian",
["otq"] = "Querétaro Otomi",
["otr"] = "Otoro",
["ots"] = "Estado de México Otomi",
["ott"] = "Temoaya Otomi",
["otu"] = "Otuke",
["otw"] = "Ottawa",
["otx"] = "Texcatepec Otomi",
["oty"] = "ทมิฬเก่า",
["otz"] = "Ixtenco Otomi",
["oub"] = "Glio-Oubi",
["oue"] = "Oune",
["oui"] = "อุยกูร์เก่า",
["oum"] = "Ouma",
["ovd"] = "แอลฟ์ดาเลิน",
["owi"] = "Owiniga",
["owl"] = "เวลส์เก่า",
["oyb"] = "Oy",
["oyd"] = "Oyda",
["oym"] = "Wayampi",
["oyy"] = "Oya'oya",
["ozm"] = "Koonzime",
["pa"] = "ปัญจาบ",
["paa-bin-pro"] = "Proto-Binanderean",
["paa-kom"] = "Kómnzo",
["paa-kwn"] = "Kuwani",
["paa-nha-pro"] = "Proto-North Halmahera",
["paa-nun"] = "Nungon",
["pab"] = "Pareci",
["pac"] = "ปาโกะห์",
["pad"] = "Paumarí",
["pae"] = "Pagibete",
["paf"] = "Paranawát",
["pag"] = "Pangasinan",
["pah"] = "Tenharim",
["pai"] = "Pe",
["pak"] = "Parakanã",
["pal"] = "เปอร์เซียกลาง",
["pam"] = "กาปัมปางัน",
["pao"] = "Northern Paiute",
["pap"] = "ปาเปียเมนตู",
["paq"] = "Parya",
["par"] = "Panamint",
["pas"] = "Papasena",
["pau"] = "ปาเลา",
["pav"] = "Wari'",
["paw"] = "Pawnee",
["pax"] = "Pankararé",
["pay"] = "Pech",
["paz"] = "Pankararú",
["pbb"] = "Páez",
["pbc"] = "Patamona",
["pbe"] = "Mezontla Popoloca",
["pbf"] = "Coyotepec Popoloca",
["pbg"] = "Paraujano",
["pbh"] = "Panare",
["pbi"] = "Podoko",
["pbl"] = "Mak (Nigeria)",
["pbm"] = "Puebla Mazatec",
["pbn"] = "Kpasam",
["pbo"] = "Papel",
["pbp"] = "Badyara",
["pbr"] = "Pangwa",
["pbs"] = "Central Pame",
["pbv"] = "ปนัร",
["pby"] = "Pyu (New Guinea)",
["pca"] = "Santa Inés Ahuatempan Popoloca",
["pcb"] = "ปอร์",
["pcc"] = "ปู้อี",
["pcd"] = "ปีการ์",
["pce"] = "Ruching Palaung",
["pcf"] = "Paliyan",
["pcg"] = "Paniya",
["pch"] = "Pardhan",
["pci"] = "Duruwa",
["pcj"] = "Parenga",
["pck"] = "Paite",
["pcl"] = "Pardhi",
["pcm"] = "Nigerian Pidgin",
["pcn"] = "Piti",
["pcp"] = "Pacahuara",
["pcw"] = "Pyapun",
["pda"] = "Anam",
["pdc"] = "เยอรมันแบบเพนซิลเวเนีย",
["pdi"] = "Pa Di",
["pdn"] = "Fedan",
["pdo"] = "Padoe",
["pdt"] = "เพลาท์ดิทช์",
["pdu"] = "กะยัน",
["pea"] = "Peranakan Indonesian",
["peb"] = "Eastern Pomo",
["ped"] = "Mala (New Guinea)",
["pee"] = "Taje",
["pef"] = "Northeastern Pomo",
["peg"] = "Pengo",
["peh"] = "Bonan",
["pei"] = "Chichimeca-Jonaz",
["pej"] = "Northern Pomo",
["pek"] = "Penchal",
["pel"] = "Pekal",
["pem"] = "Phende",
["peo"] = "เปอร์เซียเก่า",
["pep"] = "Kunja",
["peq"] = "Southern Pomo",
["pev"] = "Pémono",
["pex"] = "Petats",
["pey"] = "Petjo",
["pez"] = "Eastern Penan",
["pfa"] = "Pááfang",
["pfe"] = "Peere",
["pga"] = "Juba Arabic",
["pgd"] = "คานธาระ",
["pgg"] = "ปังควาฬฺ",
["pgi"] = "Pagi",
["pgk"] = "Rerep",
["pgl"] = "Primitive Irish",
["pgn"] = "Paelignian",
["pgs"] = "Pangseng",
["pgu"] = "Pagu",
["pgz"] = "Papua New Guinean Sign Language",
["pha"] = "Pa-Hng",
["phd"] = "Phudagi",
["phg"] = "Phuong",
["phh"] = "Phukha",
["phi-din"] = "Dinapigue Agta",
["phi-kal-pro"] = "คาลาเมียนดั้งเดิม",
["phi-nag"] = "Nagtipunan Agta",
["phi-pro"] = "ฟิลิปปินส์ดั้งเดิม",
["phk"] = "พ่าเก",
["phl"] = "Palula",
["phm"] = "Phimbi",
["phn"] = "ฟินิเชีย",
["pho"] = "ผู้น้อย",
["phq"] = "Phana'",
["phr"] = "Pahari-Potwari",
["pht"] = "ผู้ไท",
["phu"] = "พวน",
["phv"] = "Pahlavani",
["phw"] = "Phangduwali",
["pi"] = "บาลี",
["pia"] = "Pima Bajo",
["pib"] = "Yine",
["pic"] = "Pinji",
["pid"] = "Piaroa",
["pie"] = "Piro",
["pif"] = "Pingelapese",
["pig"] = "Pisabo",
["pih"] = "Pitcairn-Norfolk",
["pii"] = "Pini",
["pij"] = "Pijao",
["pil"] = "Yom",
["pim"] = "Powhatan",
["pin"] = "Piame",
["pio"] = "Piapoco",
["pip"] = "Pero",
["pir"] = "Piratapuyo",
["pis"] = "Pijin",
["pit"] = "Pitta-Pitta",
["piu"] = "Pintupi-Luritja",
["piv"] = "Pileni",
["piw"] = "Pimbwe",
["pix"] = "Piu",
["piy"] = "Piya-Kwonci",
["piz"] = "Pije",
["pjt"] = "Pitjantjatjara",
["pkb"] = "Kipfokomo",
["pkc"] = "แพ็กเจ",
["pkg"] = "Pak-Tong",
["pkh"] = "Pankhu",
["pkn"] = "Pakanha",
["pko"] = "Pökoot",
["pkp"] = "ปูกาปูกา",
["pkr"] = "Attapady Kurumba",
["pks"] = "Pakistan Sign Language",
["pkt"] = "Maleng",
["pku"] = "Paku",
["pl"] = "โปแลนด์",
["pla"] = "Miani",
["plb"] = "Polonombauk",
["plc"] = "ปาลาวาโนตอนกลาง",
["ple"] = "Palu'e",
["plg"] = "Pilagá",
["plh"] = "Paulohi",
["plj"] = "Polci",
["plk"] = "Kohistani Shina",
["pll"] = "Shwe Palaung",
["pln"] = "Palenquero",
["plo"] = "Oluta Popoluca",
["plq"] = "Palaic",
["plr"] = "Palaka Senoufo",
["pls"] = "San Marcos Tlalcoyalco Popoloca",
["plu"] = "Palikur",
["plv"] = "ปาลาวาโนตะวันตกเฉียงใต้",
["plw"] = "ปาลาวาโนแบบบรูกส์พอยต์",
["ply"] = "Bolyu",
["plz"] = "Paluan",
["pma"] = "Paamese",
["pmb"] = "Pambia",
["pmd"] = "Pallanganmiddang",
["pme"] = "Pwaamèi",
["pmf"] = "Pamona",
["pmi"] = "Northern Pumi",
["pmj"] = "Southern Pumi",
["pmk"] = "Pamlico",
["pml"] = "Sabir",
["pmm"] = "Pol",
["pmn"] = "Pam",
["pmo"] = "Pom",
["pmq"] = "Northern Pame",
["pmr"] = "Paynamar",
["pms"] = "ปีเยมอนเต",
["pmt"] = "Tuamotuan",
["pmu"] = "Mirpur Panjabi",
["pmw"] = "Plains Miwok",
["pmx"] = "Poumei Naga",
["pmy"] = "Papuan Malay",
["pmz"] = "Southern Pame",
["pna"] = "Punan Bah-Biau",
["pnc"] = "Pannei",
["pnd"] = "Mpinda",
["pne"] = "Western Penan",
["png"] = "Pongu",
["pnh"] = "Penrhyn",
["pni"] = "Aoheng",
["pnj"] = "Pinjarup",
["pnk"] = "Paunaka",
["pnl"] = "Paleni",
["pnm"] = "Punan Batu",
["pnn"] = "Pinai-Hagahai",
["pno"] = "Panobo",
["pnp"] = "Pancana",
["pnq"] = "Pana (West Africa)",
["pnr"] = "Panim",
["pns"] = "Ponosakan",
["pnt"] = "Pontic Greek",
["pnu"] = "Jiongnai Bunu",
["pnv"] = "Pinigura",
["pnw"] = "Panyjima",
["pnx"] = "Phong-Kniang",
["pny"] = "Pinyin",
["pnz"] = "Pana (Central Africa)",
["poc"] = "Poqomam",
["poe"] = "San Juan Atzingo Popoloca",
["pof"] = "Poke",
["pog"] = "Potiguára",
["poh"] = "Poqomchi'",
["poi"] = "Highland Popoluca",
["pok"] = "Pokangá",
["pom"] = "Southeastern Pomo",
["pon"] = "Pohnpeian",
["poo"] = "Central Pomo",
["pop"] = "Pwapwâ",
["poq"] = "Texistepec Popoluca",
["pos"] = "Sayula Popoluca",
["pot"] = "Potawatomi",
["pov"] = "ครีโอลกินี-บิสเซา",
["pow"] = "San Felipe Otlaltepec Popoloca",
["pox"] = "Polabian",
["poy"] = "Pogolo",
["poz-abi"] = "Abai",
["poz-bal"] = "Baliledo",
["poz-btk-pro"] = "Proto-Bungku-Tolaki",
["poz-cet-pro"] = "มาลาโย-พอลินีเชียนตอนกลาง-ตะวันออกดั้งเดิม",
["poz-hce-pro"] = "Proto-Halmahera-Cenderawasih",
["poz-lgx-pro"] = "ลัมปุงกิกดั้งเดิม",
["poz-mcm-pro"] = "มาลาโย-จามิกดั้งเดิม",
["poz-mic-pro"] = "ไมโครนีเซียนดั้งเดิม",
["poz-mly-pro"] = "มาเลย์อิกดั้งเดิม",
["poz-msa-pro"] = "มาลาโย-ซุมบาวันดั้งเดิม",
["poz-oce-pro"] = "โอเชียนิกดั้งเดิม",
["poz-pep-pro"] = "พอลินีเชียนตะวันออกดั้งเดิม",
["poz-pnp-pro"] = "นิวเคลียร์พอลินีเชียนดั้งเดิม",
["poz-pol-pro"] = "พอลินีเชียนดั้งเดิม",
["poz-pro"] = "มาลาโย-พอลินีเชียนดั้งเดิม",
["poz-sml"] = "Sarawak Malay",
["poz-ssw-pro"] = "ซูลาเวซีใต้ดั้งเดิม",
["poz-swa-pro"] = "ซาราวักเหนือดั้งเดิม",
["poz-ter"] = "มลายูแบบตรังกานู",
["ppa"] = "Pao",
["ppe"] = "Papi",
["ppi"] = "Paipai",
["ppk"] = "Uma",
["ppl"] = "ปีปิล",
["ppm"] = "Papuma",
["ppn"] = "Papapana",
["ppo"] = "Folopa",
["ppq"] = "Pei",
["pps"] = "San Luís Temalacayuca Popoloca",
["ppt"] = "Pa",
["ppu"] = "Papora",
["pqa"] = "Pa'a",
["pqe-pro"] = "มาลาโย-พอลินีเชียนตะวันออกดั้งเดิม",
["pqm"] = "Malecite-Passamaquoddy",
["pra"] = "ปรากฤต",
["pra-niy"] = "Niya Prakrit",
["prc"] = "Parachi",
["pre"] = "Principense",
["prf"] = "Paranan",
["prg"] = "Old Prussian",
["prh"] = "Porohanon",
["pri"] = "Paicî",
["prk"] = "Parauk",
["prl"] = "Peruvian Sign Language",
["prm"] = "Kibiri",
["prn"] = "Prasuni",
["pro"] = "อุตซิตาเก่า",
["prq"] = "Ashéninka Perené",
["prr"] = "Puri",
["prt"] = "Phai",
["pru"] = "Puragi",
["prw"] = "Parawen",
["prx"] = "Purik",
["prz"] = "Providencia Sign Language",
["ps"] = "ปาทาน",
["psa"] = "Asue Awyu",
["psc"] = "Persian Sign Language",
["psd"] = "Plains Indian Sign Language",
["pse"] = "มลายูตอนกลาง",
["psg"] = "Penang Sign Language",
["psh"] = "Southwest Pashayi",
["psi"] = "Southeast Pashayi",
["psl"] = "Puerto Rican Sign Language",
["psm"] = "Pauserna",
["psn"] = "Panasuan",
["pso"] = "Polish Sign Language",
["psp"] = "Philippine Sign Language",
["psq"] = "Pasi",
["psr"] = "Portuguese Sign Language",
["pss"] = "Kaulong",
["psw"] = "Port Sandwich",
["psy"] = "Piscataway",
["pt"] = "โปรตุเกส",
["pta"] = "Pai Tavytera",
["pth"] = "Pataxó Hã-Ha-Hãe",
["pti"] = "Pintiini",
["ptn"] = "Patani",
["pto"] = "Zo'é",
["ptp"] = "Patep",
["ptq"] = "Pattapu",
["ptr"] = "Piamatsina",
["ptt"] = "Enrekang",
["ptu"] = "Bambam",
["ptv"] = "Port Vato",
["ptw"] = "Pentlatch",
["pty"] = "Pathiya",
["pua"] = "Purepecha",
["pub"] = "Purum",
["puc"] = "Punan Merap",
["pud"] = "Punan Aput",
["pue"] = "Puelche",
["puf"] = "Punan Merah",
["pug"] = "Phuie",
["pui"] = "Puinave",
["puj"] = "Punan Tubu",
["pum"] = "Puma",
["puo"] = "Puoc",
["pup"] = "Pulabu",
["puq"] = "Puquina",
["pur"] = "Puruborá",
["put"] = "Putoh",
["puu"] = "Punu",
["puw"] = "Puluwat",
["pux"] = "Puare",
["puy"] = "Purisimeño",
["pwa"] = "Pawaia",
["pwb"] = "Panawa",
["pwg"] = "Gapapaiwa",
["pwi"] = "Patwin",
["pwm"] = "Molbog",
["pwn"] = "ไปวัน",
["pwo"] = "กะเหรี่ยงโปตะวันตก",
["pwr"] = "Powari",
["pww"] = "กะเหรี่ยงโปเหนือ",
["pxm"] = "Quetzaltepec Mixe",
["pye"] = "Pye Krumen",
["pym"] = "Fyam",
["pyn"] = "Poyanáwa",
["pys"] = "Paraguayan Sign Language",
["pyu"] = "Puyuma",
["pyx"] = "ปยู",
["pyy"] = "Pyen",
["pzh"] = "Pazeh",
["pzn"] = "Para Naga",
["qfa-adm-pro"] = "เกรตอันดามันนีสดั้งเดิม",
["qfa-bet-pro"] = "เบ-ไทดั้งเดิม",
["qfa-cka-pro"] = "Proto-Chukotko-Kamchatkan",
["qfa-hur-pro"] = "Proto-Hurro-Urartian",
["qfa-kad-pro"] = "Proto-Kadu",
["qfa-kms-pro"] = "Proto-Kam-Sui",
["qfa-kor-pro"] = "เกาหลีดั้งเดิม",
["qfa-kra-pro"] = "ขร้าดั้งเดิม",
["qfa-lic-pro"] = "ไหลดั้งเดิม",
["qfa-onb-pro"] = "เบดั้งเดิม",
["qfa-ong-pro"] = "Proto-Ongan",
["qfa-tak-pro"] = "ขร้า-ไทดั้งเดิม",
["qfa-yen-pro"] = "Proto-Yeniseian",
["qfa-yuk-pro"] = "Proto-Yukaghir",
["qu"] = "เกชัว",
["qua"] = "Quapaw",
["quc"] = "K'iche'",
["qui"] = "Quileute",
["qum"] = "Sipakapense",
["qun"] = "Quinault",
["quq"] = "Quinqui",
["quv"] = "Sacapulteco",
["qvy"] = "Queyu",
["qwc"] = "เกชัวคลาสสิก",
["qwe-kch"] = "Kichwa",
["qwe-pro"] = "เกชวนดั้งเดิม",
["qwm"] = "คูมาน",
["qwt"] = "Kwalhioqua-Tlatskanai",
["qxs"] = "Southern Qiang",
["qya"] = "เควนยา",
["qyp"] = "Quiripi",
["raa"] = "Dungmali",
["rab"] = "Chamling",
["rac"] = "Rasawa",
["rad"] = "ระแด",
["raf"] = "Western Meohang",
["rag"] = "Logooli",
["rah"] = "Rabha",
["rai"] = "Ramoaaina",
["rak"] = "Tulu-Bohuai",
["ral"] = "Ralte",
["ram"] = "Canela",
["ran"] = "Riantana",
["rao"] = "Rao",
["rap"] = "ราปานูอี",
["raq"] = "Saam",
["rar"] = "ราโรโตงา",
["ras"] = "Tegali",
["rat"] = "Razajerdi",
["rau"] = "Raute",
["rav"] = "Sampang",
["raw"] = "เรอหวั่ง",
["rax"] = "Rang",
["ray"] = "Rapa",
["raz"] = "Rahambuu",
["rbb"] = "Rumai Palaung",
["rbk"] = "Northern Bontoc",
["rbl"] = "Miraya Bikol",
["rcf"] = "Réunion Creole French",
["rdb"] = "Rudbari",
["rea"] = "Rerau",
["reb"] = "Rembong",
["ree"] = "Rejang Kayan",
["reg"] = "Kara (Tanzania)",
["rei"] = "Reli",
["rej"] = "Rejang",
["rel"] = "Rendille",
["rem"] = "Remo",
["ren"] = "Rengao",
["rer"] = "Rer Bare",
["res"] = "Reshe",
["ret"] = "Retta",
["rey"] = "Reyesano",
["rga"] = "Roria",
["rge"] = "Romano-Greek",
["rgk"] = "Rangkas",
["rgn"] = "โรมัญญา",
["rgr"] = "Resígaro",
["rgs"] = "Southern Roglai",
["rgu"] = "Ringgou",
["rhg"] = "โรฮีนจา",
["rhp"] = "Yahang",
["ria"] = "Reang",
["rif"] = "ริฟ",
["ril"] = "Riang",
["rim"] = "Nyaturu",
["rin"] = "Nungu",
["rir"] = "Ribun",
["rit"] = "Ritarungo",
["riu"] = "Riung",
["rjg"] = "Rajong",
["rji"] = "Raji",
["rjs"] = "ราชพังสี",
["rka"] = "Kraol",
["rkb"] = "Rikbaktsa",
["rkh"] = "Rakahanga-Manihiki",
["rki"] = "ยะไข่",
["rkm"] = "Marka",
["rkt"] = "Kamta",
["rkw"] = "Arakwal",
["rm"] = "โรมานช์",
["rma"] = "Rama",
["rmb"] = "Rembarunga",
["rmc"] = "Carpathian Romani",
["rmd"] = "Traveller Danish",
["rme"] = "Angloromani",
["rmf"] = "Kalo Finnish Romani",
["rmg"] = "Traveller Norwegian",
["rmh"] = "Murkim",
["rmi"] = "Lomavren",
["rmk"] = "Romkun",
["rml"] = "Baltic Romani",
["rmm"] = "Roma",
["rmn"] = "Balkan Romani",
["rmo"] = "Sinte Romani",
["rmp"] = "Rempi",
["rmq"] = "Caló",
["rms"] = "Romanian Sign Language",
["rmt"] = "Domari",
["rmu"] = "Tavringer Romani",
["rmv"] = "Romanova",
["rmw"] = "Welsh Romani",
["rmx"] = "Romam",
["rmy"] = "Vlax Romani",
["rmz"] = "Marma",
["rnd"] = "Ruwund",
["rng"] = "Ronga",
["rnl"] = "Ranglong",
["rnn"] = "Roon",
["rnp"] = "Rongpo",
["rnw"] = "Rungwa",
["ro"] = "โรมาเนีย",
["roa-ang"] = "Angevin",
["roa-bbn"] = "บูร์บอแน-แบรีชง",
["roa-brg"] = "Bourguignon",
["roa-can"] = "Cantabrian",
["roa-cha"] = "Champenois",
["roa-fcm"] = "Franc-Comtois",
["roa-gal"] = "Gallo",
["roa-gib"] = "Gallo-Italic of Basilicata",
["roa-gis"] = "Gallo-Italic of Sicily",
["roa-leo"] = "เลออน",
["roa-lor"] = "Lorrain",
["roa-oca"] = "กาตาลาเก่า",
["roa-ole"] = "เลออนเก่า",
["roa-ona"] = "Old Navarro-Aragonese",
["roa-opt"] = "กาลิเซีย-โปรตุเกสเก่า",
["roa-orl"] = "Orléanais",
["roa-poi"] = "Poitevin-Saintongeais",
["roa-tar"] = "Tarantino",
["rob"] = "Tae'",
["roc"] = "Cacgia Roglai",
["rod"] = "Rogo",
["roe"] = "Ronji",
["rof"] = "Rombo",
["rog"] = "Northern Roglai",
["rol"] = "Romblomanon",
["rom"] = "โรมานี",
["roo"] = "Rotokas",
["rop"] = "Australian Kriol",
["ror"] = "Rongga",
["rou"] = "Runga",
["row"] = "Dela-Oenale",
["rpn"] = "Repanbitip",
["rpt"] = "Rapting",
["rri"] = "Ririo",
["rro"] = "Roro",
["rrt"] = "Arritinngithigh",
["rsb"] = "Romano-Serbian",
["rsk"] = "รูซินแบบพันโนเนีย",
["rsl"] = "มือรัสเซีย",
["rsm"] = "Miriwoong Sign Language",
["rsn"] = "Rwandan Sign Language",
["rtc"] = "Rungtu",
["rth"] = "Ratahan",
["rtm"] = "Rotuman",
["rtw"] = "Rathawi",
["ru"] = "รัสเซีย",
["rub"] = "Gungu",
["ruc"] = "Ruuli",
["rue"] = "รูซินแบบคาร์พาเทีย",
["ruf"] = "Luguru",
["rug"] = "Roviana",
["ruh"] = "Ruga",
["rui"] = "Rufiji",
["ruk"] = "Che",
["ruo"] = "Istro-Romanian",
["rup"] = "Aromanian",
["ruq"] = "Megleno-Romanian",
["rut"] = "Rutul",
["ruu"] = "Lanas Lobu",
["ruy"] = "Mala (Nigeria)",
["ruz"] = "Ruma",
["rw"] = "รวันดา-รุนดี",
["rwa"] = "Rawo",
["rwk"] = "Rwa",
["rwm"] = "Amba",
["rwo"] = "Rawa",
["rxd"] = "Ngardi",
["rxw"] = "Karuwali",
["ryn"] = "อามามิโอชิมะเหนือ",
["rys"] = "ยาเอยามะ",
["ryu"] = "โอกินาวะ",
["rzh"] = "Razihi",
["sa"] = "สันสกฤต",
["saa"] = "Saba",
["sab"] = "Buglere",
["sac"] = "Fox",
["sad"] = "Sandawe",
["sae"] = "Sabanê",
["saf"] = "Safaliba",
["sah"] = "ซาคา",
["sai-all"] = "Allentiac",
["sai-and"] = "Andoquero",
["sai-ayo"] = "Ayomán",
["sai-bae"] = "Baenan",
["sai-bag"] = "Bagua",
["sai-bet"] = "Betoi",
["sai-bor-pro"] = "Proto-Boran",
["sai-cac"] = "Cacán",
["sai-caq"] = "Caranqui",
["sai-car-pro"] = "Proto-Cariban",
["sai-cat"] = "Catacao",
["sai-cer-pro"] = "Proto-Cerrado",
["sai-chi"] = "Chirino",
["sai-chn"] = "Chaná",
["sai-chp"] = "Chapacura",
["sai-chr"] = "Charrua",
["sai-chu"] = "Churuya",
["sai-cje-pro"] = "Proto-Central Jê",
["sai-cmg"] = "Comechingon",
["sai-cno"] = "Chono",
["sai-cnr"] = "Cañari",
["sai-coe"] = "Coeruna",
["sai-col"] = "Colán",
["sai-cop"] = "Copallén",
["sai-crd"] = "Coroado Puri",
["sai-ctq"] = "Catuquinaru",
["sai-cul"] = "Culli",
["sai-cva"] = "Cueva",
["sai-esm"] = "Esmeralda",
["sai-ewa"] = "Ewarhuyana",
["sai-gam"] = "Gamela",
["sai-gay"] = "Gayón",
["sai-gmo"] = "Guamo",
["sai-gua"] = "Guachí",
["sai-gue"] = "Güenoa",
["sai-hau"] = "Haush",
["sai-jee-pro"] = "Proto-Jê",
["sai-jko"] = "Jeikó",
["sai-jrj"] = "Jirajara",
["sai-kat"] = "Katembri",
["sai-mal"] = "Malalí",
["sai-mar"] = "Maratino",
["sai-mat"] = "Matanawi",
["sai-mcn"] = "Mocana",
["sai-men"] = "Menien",
["sai-mil"] = "Millcayac",
["sai-mlb"] = "Malibu",
["sai-msk"] = "Masakará",
["sai-muc"] = "Mucuchí",
["sai-mue"] = "Muellama",
["sai-muz"] = "Muzo",
["sai-mys"] = "Maynas",
["sai-nat"] = "Natú",
["sai-nje-pro"] = "Proto-Northern Jê",
["sai-opo"] = "Opón",
["sai-oto"] = "Otomaco",
["sai-pal"] = "Palta",
["sai-pam"] = "Pamigua",
["sai-par"] = "Paratió",
["sai-peb"] = "Peba",
["sai-pnz"] = "Panzaleo",
["sai-prh"] = "Puruhá",
["sai-ptg"] = "Patagón",
["sai-pur"] = "Purukotó",
["sai-pyg"] = "Payaguá",
["sai-pyk"] = "Pykobjê",
["sai-qmb"] = "Quimbaya",
["sai-qtm"] = "Quitemo",
["sai-rab"] = "Rabona",
["sai-ram"] = "Ramanos",
["sai-sac"] = "Sácata",
["sai-san"] = "Sanaviron",
["sai-sap"] = "Sapará",
["sai-sec"] = "Sechura",
["sai-sin"] = "Sinúfana",
["sai-sje-pro"] = "Proto-Southern Jê",
["sai-tab"] = "Tabancale",
["sai-tal"] = "Tallán",
["sai-tap"] = "Tapayuna",
["sai-tar-pro"] = "Proto-Taranoan",
["sai-teu"] = "Teushen",
["sai-tim"] = "Timote",
["sai-tpr"] = "Taparita",
["sai-trr"] = "Tarairiú",
["sai-wai"] = "Waitaká",
["sai-way"] = "Wayumara",
["sai-wit-pro"] = "Proto-Witotoan",
["sai-wnm"] = "Wanham",
["sai-xoc"] = "Xocó",
["sai-yao"] = "Yao (South America)",
["sai-yar"] = "Yarumá",
["sai-yri"] = "Yuri",
["sai-yup"] = "Yupua",
["sai-yur"] = "Yurumanguí",
["saj"] = "Sahu",
["sak"] = "Sake",
["sal-pro"] = "Proto-Salish",
["sam"] = "Samaritan Aramaic",
["sao"] = "Sause",
["saq"] = "Samburu",
["sar"] = "Saraveca",
["sas"] = "Sasak",
["sat"] = "สันถาลี",
["sau"] = "Saleman",
["sav"] = "Saafi-Saafi",
["saw"] = "Sawi",
["sax"] = "Sa",
["say"] = "Saya",
["saz"] = "Saurashtra",
["sba"] = "Ngambay",
["sbb"] = "Simbo",
["sbc"] = "Gele'",
["sbd"] = "Southern Samo",
["sbe"] = "Saliba (New Guinea)",
["sbf"] = "Shabo",
["sbg"] = "Seget",
["sbh"] = "Sori-Harengan",
["sbi"] = "Seti",
["sbj"] = "Surbakhal",
["sbk"] = "Safwa",
["sbl"] = "Botolan Sambal",
["sbm"] = "Sagala",
["sbn"] = "Sindhi Bhil",
["sbo"] = "Sabüm",
["sbp"] = "Sangu (Tanzania)",
["sbq"] = "Sileibi",
["sbr"] = "Sembakung Murut",
["sbs"] = "Subiya",
["sbt"] = "Kimki",
["sbu"] = "Stod Bhoti",
["sbv"] = "Sabine",
["sbw"] = "Simba",
["sbx"] = "Seberuang",
["sby"] = "Soli",
["sbz"] = "Sara Kaba",
["sc"] = "ซาร์ดิเนีย",
["scb"] = "Chut",
["sce"] = "ตงเซียง",
["scf"] = "San Miguel Creole French",
["scg"] = "Sanggau",
["sch"] = "Sakachep",
["sci"] = "Sri Lankan Creole Malay",
["sck"] = "Sadri",
["scl"] = "Shina",
["scn"] = "ซิซิลี",
["sco"] = "สกอต",
["scp"] = "Yolmo",
["scq"] = "สะโอจ",
["scs"] = "North Slavey",
["scu"] = "Shumcho",
["scv"] = "Sheni",
["scw"] = "Sha",
["scx"] = "Sicel",
["scz"] = "Shetland",
["sd"] = "สินธ์",
["sda"] = "Toraja-Sa'dan",
["sdb"] = "Shabak",
["sdc"] = "ซัสซารี",
["sde"] = "Surubu",
["sdf"] = "Sarli",
["sdg"] = "Savi",
["sdh"] = "Southern Kurdish",
["sdj"] = "Suundi",
["sdk"] = "Sos Kundi",
["sdl"] = "Saudi Arabian Sign Language",
["sdm"] = "Semandang",
["sdn"] = "Gallurese",
["sdo"] = "Bukar-Sadung Bidayuh",
["sdp"] = "Sherdukpen",
["sdr"] = "Oraon Sadri",
["sds"] = "เบอร์เบอร์แบบตูนีเซีย",
["sdu"] = "Sarudu",
["sdv-daj-pro"] = "Proto-Daju",
["sdv-eje-pro"] = "Proto-Eastern Jebel",
["sdv-nil-pro"] = "Proto-Nilotic",
["sdv-nyi-pro"] = "Proto-Nyima",
["sdv-tmn-pro"] = "Proto-Taman",
["sdx"] = "Sibu Melanau",
["se"] = "ซามีเหนือ",
["sea"] = "เซอไม",
["sec"] = "Sechelt",
["sed"] = "Sedang",
["see"] = "Seneca",
["sef"] = "Cebaara Senoufo",
["seg"] = "Segeju",
["seh"] = "Sena",
["sei"] = "Seri",
["sej"] = "Sene",
["sek"] = "Sekani",
["sel-nor"] = "Northern Selkup",
["sel-pro"] = "Proto-Selkup",
["sel-sou"] = "Southern Selkup",
["sem-amm"] = "อัมโมน",
["sem-amo"] = "Amorite",
["sem-cha"] = "Chaha",
["sem-dad"] = "Dadanitic",
["sem-dum"] = "Dumaitic",
["sem-has"] = "Hasaitic",
["sem-his"] = "Hismaic",
["sem-mhr"] = "Muher",
["sem-pro"] = "เซมิติกดั้งเดิม",
["sem-saf"] = "Safaitic",
["sem-sam"] = "Samalian",
["sem-srb"] = "อาหรับใต้เก่า",
["sem-tay"] = "Taymanitic",
["sem-tha"] = "Thamudic",
["sem-wes-pro"] = "เซมิติกตะวันตกดั้งเดิม",
["sen"] = "Nanerigé Sénoufo",
["seo"] = "Suarmin",
["sep"] = "Sìcìté Sénoufo",
["seq"] = "Senara Sénoufo",
["ser"] = "Serrano",
["ses"] = "Koyraboro Senni",
["set"] = "Sentani",
["seu"] = "Serui-Laut",
["sev"] = "Nyarafolo Senoufo",
["sew"] = "Sewa Bay",
["sey"] = "Secoya",
["sez"] = "Senthang Chin",
["sfb"] = "French Belgian Sign Language",
["sfe"] = "Eastern Subanun",
["sfm"] = "Small Flowery Miao",
["sfs"] = "South African Sign Language",
["sfw"] = "Sehwi",
["sg"] = "ซังโก",
["sga"] = "ไอริชเก่า",
["sgb"] = "Mag-Anchi Ayta",
["sgc"] = "Kipsigis",
["sgd"] = "ซูรีเกาโนน",
["sge"] = "Segai",
["sgg"] = "Swiss-German Sign Language",
["sgh"] = "Shughni",
["sgi"] = "Suga",
["sgk"] = "Sangkong",
["sgm"] = "Singa",
["sgp"] = "Singpho",
["sgr"] = "Sangisari",
["sgs"] = "Samogitian",
["sgt"] = "Brokpake",
["sgu"] = "Salas",
["sgw"] = "Sebat Bet Gurage",
["sgx"] = "Sierra Leone Sign Language",
["sgy"] = "Sanglechi",
["sgz"] = "Sursurunga",
["sh"] = "เซอร์โบ-โครเอเชีย",
["sha"] = "Shall-Zwall",
["shb"] = "Ninam",
["shc"] = "Sonde",
["shd"] = "Kundal Shahi",
["she"] = "Sheko",
["shg"] = "Shua",
["shh"] = "Shoshone",
["shi"] = "Tashelhit",
["shj"] = "Shatt",
["shk"] = "Shilluk",
["shl"] = "Shendu",
["shm"] = "Shahrudi",
["shn"] = "ไทใหญ่",
["sho"] = "Shanga",
["shp"] = "Shipibo-Conibo",
["shq"] = "Sala",
["shr"] = "Shi",
["shs"] = "Shuswap",
["sht"] = "Shasta",
["shu"] = "Chadian Arabic",
["shv"] = "Shehri",
["shw"] = "Shwai",
["shx"] = "She",
["shy"] = "Tachawit",
["shz"] = "Syenara Senoufo",
["si"] = "สิงหล",
["sia"] = "Akkala Sami",
["sib"] = "Sebop",
["sid"] = "ซีดามา",
["sie"] = "Simaa",
["sif"] = "Siamou",
["sig"] = "Paasaal",
["sih"] = "Sîshëë",
["sii"] = "Shom Peng",
["sij"] = "Numbami",
["sik"] = "Sikiana",
["sil"] = "Tumulung Sisaala",
["sim"] = "Seim",
["sio-pro"] = "Proto-Siouan",
["sip"] = "สิกขิม",
["siq"] = "Sonia",
["sir"] = "Siri",
["sis"] = "Siuslaw",
["sit-aao-pro"] = "Proto-Central Naga",
["sit-bai-pro"] = "Proto-Bai",
["sit-ban"] = "Bangru",
["sit-bdi-pro"] = "Proto-Bodish",
["sit-bok"] = "Bokar",
["sit-cai"] = "Caijia",
["sit-cha"] = "Chairel",
["sit-ers-pro"] = "Proto-Ersuic",
["sit-hrs-pro"] = "Proto-Hrusish",
["sit-jap"] = "Japhug",
["sit-kha-pro"] = "Proto-Kham",
["sit-khb-pro"] = "Proto-Kho-Bwa",
["sit-khp-pro"] = "Proto-Puroik",
["sit-khw-pro"] = "Proto-Western Kho-Bwa",
["sit-kon-pro"] = "Proto-Northern Naga",
["sit-liz"] = "Lizu",
["sit-lnj"] = "Longjia",
["sit-lrn"] = "Luren",
["sit-luu-pro"] = "ลูอิชดั้งเดิม",
["sit-nas-pro"] = "Proto-Naish",
["sit-prn"] = "Puiron",
["sit-pro"] = "ซีโน-ทิเบตันดั้งเดิม",
["sit-sit"] = "Situ",
["sit-tam-pro"] = "Proto-Tamangic",
["sit-tan-pro"] = "Proto-Tani",
["sit-tgm"] = "ตางัม",
["sit-tng-pro"] = "Proto-Tangkhulic",
["sit-tos"] = "Tosu",
["sit-tsh"] = "Tshobdun",
["sit-zbu"] = "Zbu",
["siu"] = "Sinagen",
["siv"] = "Sumariup",
["siw"] = "Siwai",
["six"] = "Sumau",
["siy"] = "Sivandi",
["siz"] = "Siwi",
["sja"] = "Epena",
["sjb"] = "Sajau Basap",
["sjc"] = "Shaojiang Min",
["sjd"] = "ซามีแบบกิลดิน",
["sje"] = "ซามีแบบปีเต",
["sjg"] = "Assangori",
["sjk"] = "Kemi Sami",
["sjl"] = "Miji",
["sjm"] = "Mapun",
["sjn"] = "ซินดาริน",
["sjo"] = "Xibe",
["sjp"] = "Surjapuri",
["sjr"] = "Siar-Lak",
["sjs"] = "Senhaja de Srair",
["sjt"] = "Ter Sami",
["sju"] = "Ume Sami",
["sjw"] = "Shawnee",
["sk"] = "สโลวัก",
["ska"] = "Skagit",
["skb"] = "แสก",
["skc"] = "Ma Manda",
["skd"] = "Southern Sierra Miwok",
["ske"] = "Ske",
["skf"] = "Mekéns",
["skh"] = "Sikule",
["ski"] = "Sika",
["skj"] = "Seke",
["skk"] = "Sok",
["skm"] = "Sakam",
["skn"] = "Kolibugan Subanon",
["sko"] = "Seko Tengah",
["skp"] = "Sekapan",
["skq"] = "Sininkere",
["skr"] = "Saraiki",
["sks"] = "ไมยา",
["skt"] = "Sakata",
["sku"] = "Sakao",
["skv"] = "Skou",
["skw"] = "Skepi Creole Dutch",
["skx"] = "Seko Padang",
["sky"] = "ซีกายานา",
["skz"] = "Sekar",
["sl"] = "สโลวีเนีย",
["sla-pro"] = "สลาวิกดั้งเดิม",
["slc"] = "Saliba (Colombia)",
["sld"] = "Sisaala",
["sle"] = "Sholaga",
["slf"] = "Swiss-Italian Sign Language",
["slg"] = "Selungai Murut",
["slh"] = "Southern Puget Sound Salish",
["slj"] = "Salumá",
["sll"] = "Salt-Yui",
["slm"] = "ซามาแบบปางูตารัน",
["sln"] = "Salinan",
["slp"] = "Lamaholot",
["slr"] = "ซาลาร์",
["sls"] = "Singapore Sign Language",
["slt"] = "Sila",
["slu"] = "Selaru",
["slw"] = "Sialum",
["slx"] = "Salampasu",
["sly"] = "Selayar",
["slz"] = "Ma'ya",
["sm"] = "ซามัว",
["sma"] = "ซามีใต้",
["smb"] = "Simbari",
["smc"] = "Som",
["smd"] = "Sama",
["smf"] = "Auwe",
["smg"] = "Simbali",
["smh"] = "Samei",
["smi-pro"] = "ซามิกดั้งเดิม",
["smj"] = "ซามีแบบลูเล",
["smk"] = "โบลีเนา",
["sml"] = "ซามาตอนกลาง",
["smm"] = "Musasa",
["smn"] = "ซามีแบบอีนารี",
["smp"] = "Samaritan Hebrew",
["smq"] = "Samo",
["smr"] = "Simeulue",
["sms"] = "Skolt Sami",
["smt"] = "Simte",
["smu"] = "สมราย",
["smv"] = "Samvedi",
["smw"] = "Sumbawa",
["smx"] = "Samba",
["smy"] = "Semnani",
["smz"] = "Simeku",
["sn"] = "โชนา",
["snb"] = "Sebuyau",
["snc"] = "Sinaugoro",
["sne"] = "Bau Bidayuh",
["snf"] = "Noon",
["sng"] = "Sanga (Congo)",
["sni"] = "Sensi",
["snj"] = "Riverain Sango",
["snk"] = "Soninke",
["snl"] = "Sangil",
["snm"] = "Southern Ma'di",
["snn"] = "Siona",
["sno"] = "Snohomish",
["snp"] = "Siane",
["snq"] = "Sangu (Gabon)",
["snr"] = "Sihan",
["sns"] = "Nahavaq",
["snu"] = "Senggi",
["snv"] = "Sa'ban",
["snw"] = "Selee",
["snx"] = "Sam",
["sny"] = "Saniyo-Hiyewe",
["snz"] = "Kou",
["so"] = "โซมาลี",
["soa"] = "โซ่ง",
["sob"] = "Sobei",
["soc"] = "Soko",
["sod"] = "Songoora",
["soe"] = "Songomeno",
["sog"] = "Sogdian",
["soh"] = "Aka (Sudan)",
["soi"] = "Sonha",
["sok"] = "Sokoro",
["sol"] = "Solos",
["son-pro"] = "Proto-Songhay",
["soo"] = "Nsong",
["sop"] = "Songe",
["soq"] = "Kanasi",
["sor"] = "Somrai",
["sos"] = "Seenku",
["sou"] = "ปักษ์ใต้",
["sov"] = "Sonsorolese",
["sow"] = "Sowanda",
["sox"] = "Swo",
["soy"] = "Miyobe",
["soz"] = "Temi",
["spb"] = "Sepa (Indonesia)",
["spc"] = "Sapé",
["spd"] = "Saep",
["spe"] = "Sepa (New Guinea)",
["spg"] = "Sian",
["spi"] = "Saponi",
["spk"] = "Sengo",
["spl"] = "Selepet",
["spm"] = "Sepen",
["spn"] = "Sanapaná",
["spo"] = "Spokane",
["spp"] = "Supyire",
["spr"] = "Saparua",
["sps"] = "Saposa",
["spt"] = "Spiti Bhoti",
["spu"] = "Sapuan",
["spv"] = "Sambalpuri",
["spx"] = "South Picene",
["spy"] = "Sabaot",
["sq"] = "แอลเบเนีย",
["sqa"] = "Shama-Sambuga",
["sqh"] = "Shau",
["sqj-pro"] = "แอลเบเนียนดั้งเดิม",
["sqk"] = "Albanian Sign Language",
["sqm"] = "Suma",
["sqn"] = "Susquehannock",
["sqo"] = "Sorkhei",
["sqq"] = "Sou",
["sqr"] = "Siculo-Arabic",
["sqs"] = "Sri Lankan Sign Language",
["sqt"] = "Soqotri",
["squ"] = "Squamish",
["sra"] = "Saruga",
["srb"] = "Sora",
["sre"] = "Sara",
["srf"] = "Nafi",
["srg"] = "Sulod",
["srh"] = "Sarikoli",
["sri"] = "Siriano",
["srk"] = "Serudung Murut",
["srl"] = "Isirawa",
["srm"] = "ซารามักกา",
["srn"] = "ซรานันโตโง",
["srq"] = "Sirionó",
["srr"] = "Serer",
["srs"] = "Tsuut'ina",
["srt"] = "Sauri",
["sru"] = "Suruí",
["srv"] = "Waray Sorsogon",
["srw"] = "Serua",
["srx"] = "Sirmauri",
["sry"] = "Sera",
["srz"] = "Shahmirzadi",
["ss"] = "สวาซี",
["ssa-klk-pro"] = "Proto-Kuliak",
["ssa-kom-pro"] = "Proto-Koman",
["ssa-pro"] = "Proto-Nilo-Saharan",
["ssb"] = "Southern Sama",
["ssc"] = "Suba-Simbiti",
["ssd"] = "Siroi",
["sse"] = "Balangingi",
["ssf"] = "Thao",
["ssg"] = "Seimat",
["ssh"] = "Shihhi Arabic",
["ssi"] = "Sansi",
["ssj"] = "Sausi",
["ssk"] = "Sunam",
["ssl"] = "Western Sisaala",
["ssm"] = "Semnam",
["sso"] = "Sissano",
["ssp"] = "Spanish Sign Language",
["ssq"] = "So'a",
["ssr"] = "Swiss-French Sign Language",
["sss"] = "Sô",
["sst"] = "Sinasina",
["ssu"] = "Susuami",
["ssv"] = "Shark Bay",
["ssx"] = "Samberigi",
["ssy"] = "ซาโฮ",
["ssz"] = "Sengseng",
["st"] = "ซูทู",
["stb"] = "Northern Subanen",
["std"] = "Sentinelese",
["ste"] = "Liana-Seti",
["stf"] = "Seta",
["stg"] = "Trieng",
["sth"] = "Shelta",
["sti"] = "Bulo Stieng",
["stj"] = "Matya Samo",
["stk"] = "Arammba",
["stm"] = "Setaman",
["stn"] = "Owa",
["sto"] = "Stoney",
["stp"] = "Southeastern Tepehuan",
["stq"] = "ฟรีเชียแบบซาเทอร์ลันท์",
["str"] = "Saanich",
["sts"] = "Shumashti",
["stt"] = "Budeh Stieng",
["stu"] = "Samtao",
["stv"] = "Silt'e",
["stw"] = "Satawalese",
["sty"] = "Siberian Tatar",
["su"] = "ซุนดา",
["sua"] = "Sulka",
["sub"] = "Suku",
["suc"] = "Western Subanon",
["sue"] = "Suena",
["sug"] = "Suganga",
["sui"] = "Suki",
["suk"] = "Sukuma",
["suq"] = "Suri",
["sur"] = "Mwaghavul",
["sus"] = "Susu",
["sut"] = "Subtiaba",
["suv"] = "Puroik",
["suw"] = "Sumbwa",
["sux"] = "ซูเมอร์",
["suy"] = "Suyá",
["suz"] = "Sunwar",
["sv"] = "สวีเดน",
["sva"] = "Svan",
["svb"] = "Ulau-Suain",
["svc"] = "Vincentian Creole English",
["sve"] = "Serili",
["svk"] = "Slovakian Sign Language",
["svm"] = "Slavomolisano",
["svs"] = "Savosavo",
["svx"] = "Skalvian",
["sw"] = "สวาฮีลี",
["swb"] = "Maore Comorian",
["swf"] = "Sere",
["swg"] = "Swabian",
["swi"] = "สุ่ย",
["swj"] = "Sira",
["swl"] = "Swedish Sign Language",
["swm"] = "Samosa",
["swn"] = "Sokna",
["swo"] = "Shanenawa",
["swp"] = "Suau",
["swq"] = "Sharwa",
["swr"] = "Saweru",
["sws"] = "Seluwasan",
["swt"] = "Sawila",
["swu"] = "Suwawa",
["sww"] = "Sowa",
["swx"] = "Suruahá",
["swy"] = "Sarua",
["sxb"] = "Suba",
["sxc"] = "Sicanian",
["sxe"] = "Sighu",
["sxg"] = "Shixing",
["sxk"] = "Southern Kalapuya",
["sxl"] = "Selonian",
["sxm"] = "ซำเร",
["sxn"] = "Sangir",
["sxo"] = "Sorothaptic",
["sxr"] = "Saaroa",
["sxs"] = "Sasaru",
["sxw"] = "Saxwe Gbe",
["sya"] = "Siang",
["syb"] = "Central Subanen",
["syc"] = "ซีรีแอกคลาสสิก",
["syd-pro"] = "Proto-Samoyedic",
["syi"] = "Seki",
["syk"] = "Sukur",
["syl"] = "สิเลฏ",
["sym"] = "Maya Samo",
["syn"] = "Senaya",
["syo"] = "Suoy",
["sys"] = "Sinyar",
["syw"] = "Kagate",
["syx"] = "Osamayi",
["syy"] = "Al-Sayyid Bedouin Sign Language",
["sza"] = "Semelai",
["szb"] = "Ngalum",
["szc"] = "Semaq Beri",
["szd"] = "Seru",
["sze"] = "Seze",
["szg"] = "Sengele",
["szl"] = "ไซลีเซีย",
["szn"] = "Sula",
["szp"] = "Suabo",
["szv"] = "Isubu",
["szw"] = "Sawai",
["szy"] = "ซากีซายา",
["ta"] = "ทมิฬ",
["taa"] = "Lower Tanana",
["tab"] = "ทาบาซารัน",
["tac"] = "Lowland Tarahumara",
["tad"] = "Tause",
["tae"] = "Tariana",
["taf"] = "Tapirapé",
["tag"] = "Tagoi",
["tai-pro"] = "ไทดั้งเดิม",
["tai-swe-pro"] = "ไทตะวันตกเฉียงใต้ดั้งเดิม",
["taj"] = "Eastern Tamang",
["tak"] = "Tala",
["tal"] = "Tal",
["tan"] = "Tangale",
["tao"] = "ยามี",
["tap"] = "Taabwa",
["tar"] = "Central Tarahumara",
["tas"] = "Tây Bồi",
["tau"] = "Upper Tanana",
["tav"] = "Tatuyo",
["taw"] = "Tai",
["tax"] = "Tamki",
["tay"] = "Atayal",
["taz"] = "Tocho",
["tba"] = "Aikanã",
["tbb"] = "Tapeba",
["tbc"] = "Takia",
["tbd"] = "Kaki Ae",
["tbe"] = "Tanimbili",
["tbf"] = "Mandara",
["tbg"] = "North Tairora",
["tbh"] = "Thurawal",
["tbi"] = "Gaam",
["tbj"] = "Tiang",
["tbk"] = "Calamian Tagbanwa",
["tbl"] = "ตโบลี",
["tbm"] = "Tagbu",
["tbn"] = "Barro Negro Tunebo",
["tbo"] = "Tawala",
["tbp"] = "Taworta",
["tbq-bdg-pro"] = "โบโด-กาโรดั้งเดิม",
["tbq-blg"] = "Bailang",
["tbq-brm-pro"] = "Proto-Burmish",
["tbq-gkh"] = "Gokhy",
["tbq-kuk-pro"] = "Proto-Kuki-Chin",
["tbq-lal-pro"] = "Proto-Lalo",
["tbq-laz"] = "Laze",
["tbq-lob-pro"] = "โลโล-เบอร์มีซดั้งเดิม",
["tbq-lol-pro"] = "โลโลอิชดั้งเดิม",
["tbq-mil"] = "Milang",
["tbq-mor"] = "Moran",
["tbq-ngo"] = "Ngochang",
["tbr"] = "Tumtum",
["tbs"] = "Tanguat",
["tbt"] = "Kitembo",
["tbu"] = "Tubar",
["tbv"] = "Tobo",
["tbw"] = "Aborlan Tagbanwa",
["tbx"] = "Kapin",
["tby"] = "Tabaru",
["tbz"] = "Ditammari",
["tca"] = "Ticuna",
["tcb"] = "Tanacross",
["tcc"] = "Datooga",
["tcd"] = "Tafi",
["tce"] = "Southern Tutchone",
["tcf"] = "Malinaltepec Tlapanec",
["tcg"] = "Tamagario",
["tch"] = "Turks and Caicos Creole English",
["tci"] = "Wára",
["tck"] = "Tchitchege",
["tcl"] = "Taman (Myanmar)",
["tcm"] = "Tanahmerah",
["tco"] = "Taungyo",
["tcp"] = "Tawr Chin",
["tcq"] = "Kaiy",
["tcs"] = "ครีโอลช่องแคบทอร์เรส",
["tct"] = "T'en",
["tcu"] = "Southeastern Tarahumara",
["tcw"] = "Tecpatlán Totonac",
["tcx"] = "โตทา",
["tcy"] = "ตูลู",
["tcz"] = "Thado Chin",
["tda"] = "Tagdal",
["tdb"] = "Panchpargania",
["tdc"] = "Emberá-Tadó",
["tdd"] = "ไทใต้คง",
["tde"] = "Tiranige Diga Dogon",
["tdf"] = "Talieng",
["tdg"] = "Western Tamang",
["tdh"] = "Thulung",
["tdi"] = "Tomadino",
["tdj"] = "Tajio",
["tdk"] = "Tambas",
["tdl"] = "Sur",
["tdm"] = "Taruma",
["tdn"] = "Tondano",
["tdo"] = "Teme",
["tdq"] = "Tita",
["tdr"] = "Todrah",
["tds"] = "Doutai",
["tdt"] = "Tetun Dili",
["tdu"] = "Tempasuk Dusun",
["tdv"] = "Toro",
["tdy"] = "Tadyawan",
["te"] = "เตลูกู",
["tea"] = "เตอเมียร์",
["teb"] = "Tetete",
["tec"] = "Terik",
["ted"] = "Tepo Krumen",
["tee"] = "Huehuetla Tepehua",
["tef"] = "Teressa",
["teg"] = "Teke-Tege",
["teh"] = "Tehuelche",
["tei"] = "Torricelli",
["tek"] = "Ibali Teke",
["tem"] = "Temne",
["ten"] = "Tama (Colombia)",
["teo"] = "Ateso",
["tep"] = "Tepecano",
["teq"] = "Temein",
["ter"] = "Tereno",
["tes"] = "Tengger",
["tet"] = "เตตุน",
["teu"] = "Soo",
["tev"] = "Teor",
["tew"] = "Tewa",
["tex"] = "Tennet",
["tey"] = "Tulishi",
["tez"] = "Tetserret",
["tfi"] = "Tofin Gbe",
["tfn"] = "Dena'ina",
["tfo"] = "Tefaro",
["tfr"] = "Teribe",
["tft"] = "เตอร์นาเต",
["tg"] = "ทาจิก",
["tga"] = "Sagalla",
["tgb"] = "Tobilung",
["tgc"] = "Tigak",
["tgd"] = "Ciwogai",
["tge"] = "Eastern Gorkha Tamang",
["tgf"] = "Chali",
["tgh"] = "Tobagonian Creole English",
["tgi"] = "Lawunuia",
["tgn"] = "ตันดากาโนน",
["tgo"] = "Sudest",
["tgp"] = "Tangoa",
["tgq"] = "Tring",
["tgr"] = "Tareng",
["tgs"] = "Nume",
["tgt"] = "Central Tagbanwa",
["tgu"] = "Tanggu",
["tgv"] = "Tingui-Boto",
["tgw"] = "Tagwana Senoufo",
["tgx"] = "Tagish",
["tgy"] = "Togoyo",
["th"] = "ไทย",
["thc"] = "Tai Hang Tong",
["thd"] = "Kuuk Thaayorre",
["the"] = "Chitwania Tharu",
["thf"] = "Thangmi",
["thh"] = "Northern Tarahumara",
["thi"] = "Tai Long",
["thk"] = "Tharaka",
["thl"] = "Dangaura Tharu",
["thm"] = "ทะวืง",
["thn"] = "Thachanadan",
["thp"] = "Thompson",
["thq"] = "Kochila Tharu",
["thr"] = "Rana Tharu",
["ths"] = "Thakali",
["tht"] = "Tahltan",
["thu"] = "Thuri",
["thy"] = "Tha",
["ti"] = "ทือกรึญญา",
["tic"] = "Tira",
["tif"] = "Tifal",
["tig"] = "ทือเกร",
["tih"] = "Timugon Murut",
["tii"] = "Tiene",
["tij"] = "Tilung",
["tik"] = "Tikar",
["til"] = "Tillamook",
["tim"] = "Timbe",
["tin"] = "Tindi",
["tio"] = "Teop",
["tip"] = "Trimuris",
["tiq"] = "Tiéfo",
["tis"] = "Masadiit Itneg",
["tit"] = "Tinigua",
["tiu"] = "Adasen",
["tiv"] = "Tiv",
["tiw"] = "Tiwi",
["tix"] = "Southern Tiwa",
["tiy"] = "ตีรูไร",
["tiz"] = "Tai Hongjin",
["tja"] = "Tajuasohn",
["tjg"] = "Tunjung",
["tji"] = "Northern Tujia",
["tjl"] = "ไทแหล่ง",
["tjm"] = "Timucua",
["tjn"] = "Tonjon",
["tjs"] = "Southern Tujia",
["tju"] = "Tjurruru",
["tjw"] = "Chaap Wuurong",
["tk"] = "เติร์กเมน",
["tka"] = "Truká",
["tkb"] = "Buksa",
["tkd"] = "Tukudede",
["tke"] = "Takwane",
["tkf"] = "Tukumanféd",
["tkl"] = "Tokelauan",
["tkm"] = "Takelma",
["tkn"] = "โทกูโนชิมะ",
["tkp"] = "Tikopia",
["tkq"] = "Tee",
["tkr"] = "Tsakhur",
["tks"] = "Ramandi",
["tkt"] = "Kathoriya Tharu",
["tku"] = "Upper Necaxa Totonac",
["tkv"] = "Mur Pano",
["tkw"] = "Teanu",
["tkx"] = "Tangko",
["tkz"] = "Takua",
["tl"] = "ตากาล็อก",
["tla"] = "Southwestern Tepehuan",
["tlb"] = "Tobelo",
["tlc"] = "Misantla Totonac",
["tld"] = "Talaud",
["tlf"] = "Telefol",
["tlg"] = "Tofanma",
["tlh"] = "Klingon",
["tli"] = "Tlingit",
["tlj"] = "Talinga-Bwisi",
["tlk"] = "Taloki",
["tll"] = "Tetela",
["tlm"] = "Tolomako",
["tln"] = "Talondo'",
["tlo"] = "Talodi",
["tlp"] = "Filomena Mata-Coahuitlán Totonac",
["tlq"] = "Tai Loi",
["tlr"] = "Talise",
["tls"] = "Tambotalo",
["tlt"] = "Teluti",
["tlu"] = "Tulehu",
["tlv"] = "Taliabu",
["tlx"] = "Khehek",
["tly"] = "Talysh",
["tma"] = "Tama (Chad)",
["tmb"] = "Avava",
["tmc"] = "Tumak",
["tmd"] = "Haruai",
["tme"] = "Tremembé",
["tmf"] = "Toba-Maskoy",
["tmg"] = "Ternateño",
["tmh"] = "Tuareg",
["tmi"] = "Tutuba",
["tmj"] = "Samarokena",
["tmk"] = "Northwestern Tamang",
["tml"] = "Tamnim Citak",
["tmm"] = "Tai Thanh",
["tmn"] = "Taman (Indonesia)",
["tmo"] = "Temoq",
["tmq"] = "Tumleo",
["tms"] = "Tima",
["tmt"] = "Tasmate",
["tmu"] = "Iau",
["tmv"] = "Motembo",
["tmy"] = "Tami",
["tmz"] = "Tamanaku",
["tn"] = "สวานา",
["tna"] = "Tacana",
["tnb"] = "Western Tunebo",
["tnc"] = "Tanimuca-Retuarã",
["tnd"] = "Angosturas Tunebo",
["tne"] = "Tinoc Kallahan",
["tng"] = "Tobanga",
["tnh"] = "Maiani",
["tni"] = "Tandia",
["tnk"] = "Kwamera",
["tnl"] = "Lenakel",
["tnm"] = "Tabla",
["tnn"] = "North Tanna",
["tno"] = "Toromono",
["tnp"] = "Whitesands",
["tnq"] = "ตาอีโน",
["tnr"] = "Bedik",
["tns"] = "Tenis",
["tnt"] = "Tontemboan",
["tnu"] = "Tay Khang",
["tnv"] = "Tanchangya",
["tnw"] = "Tonsawang",
["tnx"] = "Tanema",
["tny"] = "Tongwe",
["tnz"] = "Ten'edn",
["to"] = "ตองงา",
["tob"] = "Toba",
["toc"] = "Coyutla Totonac",
["tod"] = "Toma",
["tof"] = "Gizrra",
["tog"] = "Tonga (Malawi)",
["toh"] = "Tonga (Mozambique)",
["toi"] = "Tonga (Zambia)",
["toj"] = "Tojolabal",
["tok"] = "Toki Pona",
["tol"] = "Tolowa",
["tom"] = "Tombulu",
["too"] = "Xicotepec de Juárez Totonac",
["top"] = "Papantla Totonac",
["toq"] = "Toposa",
["tor"] = "Togbo-Vara Banda",
["tos"] = "Highland Totonac",
["tou"] = "Tho",
["tov"] = "Upper Taromi",
["tow"] = "Jemez",
["tox"] = "Tobian",
["toy"] = "Topoiyo",
["toz"] = "To",
["tpa"] = "Taupota",
["tpc"] = "Azoyú Me'phaa",
["tpe"] = "Tippera",
["tpf"] = "Tarpia",
["tpg"] = "Kula",
["tpi"] = "ตอกปีซิน",
["tpj"] = "Tapieté",
["tpk"] = "Tupinikin",
["tpl"] = "Tlacoapa Me'phaa",
["tpm"] = "Tampulma",
["tpn"] = "Tupinambá",
["tpo"] = "Tai Pao",
["tpp"] = "Pisaflores Tepehua",
["tpq"] = "Tukpa",
["tpr"] = "Tuparí",
["tpt"] = "Tlachichilco Tepehua",
["tpu"] = "Tampuan",
["tpv"] = "Tanapag",
["tpw"] = "ตูปีเก่า",
["tpx"] = "Acatepec Me'phaa",
["tpy"] = "Trumai",
["tpz"] = "Tinputz",
["tqb"] = "Tembé",
["tql"] = "Lehali",
["tqm"] = "Turumsa",
["tqn"] = "Tenino",
["tqo"] = "Toaripi",
["tqp"] = "Tomoip",
["tqq"] = "Tunni",
["tqr"] = "Torona",
["tqt"] = "Western Totonac",
["tqu"] = "Touo",
["tqw"] = "Tonkawa",
["tr"] = "ตุรกี",
["tra"] = "Tirahi",
["trb"] = "Terebu",
["trc"] = "Copala Triqui",
["trd"] = "Turi",
["tre"] = "East Tarangan",
["trf"] = "Trinidadian Creole English",
["trg"] = "Lishán Didán",
["trh"] = "Turaka",
["tri"] = "Trió",
["trj"] = "Toram",
["trk-dkh"] = "Dukhan",
["trk-eog"] = "Early Old Oghuz",
["trk-oat"] = "ตุรกีแบบอานาโตเลียเก่า",
["trk-pro"] = "เตอร์กิกดั้งเดิม",
["trl"] = "Traveller Scottish",
["trm"] = "Tregami",
["trn"] = "Trinitario",
["tro"] = "Tarao",
["trp"] = "กอกบอรอก",
["trq"] = "San Martín Itunyoso Triqui",
["trr"] = "Taushiro",
["trs"] = "Chicahuaxtla Triqui",
["trt"] = "Tunggare",
["tru"] = "Turoyo",
["trv"] = "Taroko",
["trw"] = "Torwali",
["trx"] = "Tringgus",
["try"] = "ตุรุง",
["trz"] = "Torá",
["ts"] = "Tsonga",
["tsa"] = "Tsaangi",
["tsb"] = "Tsamai",
["tsc"] = "Tswa",
["tsd"] = "Tsakonian",
["tse"] = "Tunisian Sign Language",
["tsf"] = "Southwestern Tamang",
["tsg"] = "ซูก",
["tsh"] = "Tsuvan",
["tsi"] = "Tsimshian",
["tsj"] = "Tshangla",
["tsl"] = "Ts'ün-Lao",
["tsm"] = "Turkish Sign Language",
["tsp"] = "Northern Toussian",
["tsq"] = "มือไทย",
["tsr"] = "Akei",
["tss"] = "Taiwan Sign Language",
["tsu"] = "โจว",
["tsv"] = "Tsogo",
["tsw"] = "Tsishingini",
["tsx"] = "Mubami",
["tsy"] = "Tebul Sign Language",
["tt"] = "ตาตาร์",
["tta"] = "Tutelo",
["ttb"] = "Gaa",
["ttc"] = "Tektiteko",
["ttd"] = "Tauade",
["tte"] = "Bwanabwana",
["ttf"] = "Tuotomb",
["ttg"] = "Tutong",
["tth"] = "Upper Ta'oih",
["tti"] = "Tobati",
["ttj"] = "Tooro",
["ttk"] = "Totoro",
["ttl"] = "Totela",
["ttm"] = "Northern Tutchone",
["ttn"] = "Towei",
["tto"] = "Lower Ta'oih",
["ttp"] = "Tombelala",
["ttr"] = "Tera",
["tts"] = "อีสาน",
["ttt"] = "Tat",
["ttu"] = "Torau",
["ttv"] = "Titan",
["ttw"] = "Long Wat",
["tty"] = "Sikaritai",
["ttz"] = "Tsum",
["tua"] = "Wiarumus",
["tub"] = "Tübatulabal",
["tuc"] = "Mutu",
["tud"] = "Tuxá",
["tue"] = "Tuyuca",
["tuf"] = "Central Tunebo",
["tug"] = "Tunia",
["tuh"] = "Taulil",
["tui"] = "Tupuri",
["tuj"] = "Tugutil",
["tul"] = "Tula",
["tum"] = "Tumbuka",
["tun"] = "Tunica",
["tuo"] = "Tucano",
["tup-gua-pro"] = "ตูปี-กัวรานีดั้งเดิม",
["tup-kab"] = "Kabishiana",
["tup-pro"] = "ตูเปียนดั้งเดิม",
["tuq"] = "Tedaga",
["tus"] = "Tuscarora",
["tuu"] = "Tututni",
["tuv"] = "Turkana",
["tuw-alk"] = "Alchuka",
["tuw-bal"] = "Bala",
["tuw-kkl"] = "Kyakala",
["tuw-kli"] = "Kili",
["tuw-pro"] = "Proto-Tungusic",
["tuw-sol"] = "Solon",
["tux"] = "Tuxináwa",
["tuy"] = "Tugen",
["tuz"] = "Turka",
["tva"] = "Vaghua",
["tvd"] = "Tsuvadi",
["tve"] = "Te'un",
["tvk"] = "Southeast Ambrym",
["tvl"] = "ตูวาลู",
["tvm"] = "Tela-Masbuar",
["tvn"] = "Tavoyan",
["tvo"] = "ตีโดเร",
["tvs"] = "Taveta",
["tvt"] = "Tutsa Naga",
["tvu"] = "Tunen",
["tvw"] = "Sedoa",
["tvx"] = "Taivoan",
["tvy"] = "Timor Pidgin",
["twa"] = "Twana",
["twb"] = "Western Tawbuid",
["twc"] = "Teshenawa",
["twe"] = "Teiwa",
["twf"] = "เทาส์",
["twg"] = "Tereweng",
["twh"] = "ไทขาว",
["twm"] = "Tawang Monpa",
["twn"] = "Twendi",
["two"] = "Tswapong",
["twp"] = "Ere",
["twq"] = "Tasawaq",
["twr"] = "Southwestern Tarahumara",
["twt"] = "Turiwára",
["twu"] = "Termanu",
["tww"] = "Tuwari",
["twy"] = "Tawoyan",
["txa"] = "Tombonuo",
["txb"] = "โทแคเรียนบี",
["txc"] = "Tsetsaut",
["txe"] = "Totoli",
["txg"] = "ตังกุต",
["txh"] = "Thracian",
["txi"] = "Ikpeng",
["txj"] = "Tarjumo",
["txm"] = "Tomini",
["txn"] = "West Tarangan",
["txo"] = "Toto",
["txq"] = "Tii",
["txr"] = "Tartessian",
["txs"] = "Tonsea",
["txt"] = "Citak",
["txu"] = "Kayapó",
["txx"] = "Tatana",
["ty"] = "ตาฮีตี",
["tya"] = "Tauya",
["tye"] = "Kyenga",
["tyh"] = "O'du",
["tyi"] = "Teke-Tsaayi",
["tyj"] = "ไทแมน",
["tyl"] = "Thu Lao",
["tyn"] = "Kombai",
["typ"] = "Kuku-Thaypan",
["tyr"] = "ไทแดง",
["tys"] = "ซาปา",
["tyt"] = "Tày Tac",
["tyu"] = "Kua",
["tyv"] = "ตูวา",
["tyx"] = "Teke-Tyee",
["tyz"] = "ตั่ย",
["tza"] = "Tanzanian Sign Language",
["tzh"] = "Tzeltal",
["tzj"] = "Tz'utujil",
["tzl"] = "Talossan",
["tzm"] = "Central Atlas Tamazight",
["tzn"] = "Tugun",
["tzo"] = "โซตซิล",
["tzx"] = "Tabriak",
["uam"] = "Uamué",
["uan"] = "Kuan",
["uar"] = "Tairuma",
["uba"] = "Ubang",
["ubi"] = "Ubi",
["ubl"] = "Buhi'non Bikol",
["ubr"] = "Ubir",
["ubu"] = "Umbu-Ungu",
["uby"] = "Ubykh",
["uda"] = "Uda",
["ude"] = "Udihe",
["udg"] = "Muduga",
["udi"] = "อูดี",
["udj"] = "Ujir",
["udl"] = "Uldeme",
["udm"] = "อุดมูร์ต",
["udu"] = "Uduk",
["ues"] = "Kioko",
["ufi"] = "Ufim",
["ug"] = "อุยกูร์",
["uga"] = "ยูการิต",
["ugb"] = "Kuku-Ugbanh",
["uge"] = "Ughele",
["ugn"] = "Ugandan Sign Language",
["ugo"] = "กฺ๋อง",
["ugy"] = "Uruguayan Sign Language",
["uha"] = "Uhami",
["uhn"] = "Damal",
["uis"] = "Uisai",
["uiv"] = "Iyive",
["uji"] = "Tanjijili",
["uk"] = "ยูเครน",
["uka"] = "Kaburi",
["ukg"] = "Ukuriguma",
["ukh"] = "Ukhwejo",
["ukk"] = "Muak Sa-aak",
["ukl"] = "Ukrainian Sign Language",
["ukp"] = "Ukpe-Bayobiri",
["ukq"] = "Ukwa",
["uks"] = "Kaapor Sign Language",
["uku"] = "Ukue",
["ukw"] = "Ukwuani-Aboh-Ndoni",
["uky"] = "Kuuk Yak",
["ula"] = "Fungwa",
["ulb"] = "Olukumi",
["ulc"] = "Ulch",
["ule"] = "Lule",
["ulf"] = "Afra",
["uli"] = "Ulithian",
["ulk"] = "Meriam",
["ull"] = "Ullatan",
["ulm"] = "Ulumanda'",
["uln"] = "อุนเซอร์ด็อยทช์",
["ulu"] = "Uma' Lung",
["ulw"] = "Ulwa",
["uma"] = "Umatilla",
["umb"] = "Umbundu",
["umc"] = "Marrucinian",
["umd"] = "Umbindhamu",
["umg"] = "Umbuygamu",
["umi"] = "Ukit",
["umm"] = "Umon",
["umn"] = "Makyan Naga",
["umo"] = "Umotína",
["ump"] = "Umpila",
["umr"] = "Umbugarla",
["ums"] = "Pendau",
["umu"] = "Munsee",
["una"] = "North Watut",
["und"] = "Undetermined",
["une"] = "Uneme",
["ung"] = "Ngarinyin",
["unk"] = "Enawené-Nawé",
["unm"] = "Unami",
["unn"] = "Kurnai",
["unr"] = "Mundari",
["unu"] = "Unubahe",
["unx"] = "Munda",
["unz"] = "Unde Kaili",
["uok"] = "Uokha",
["uon"] = "Kulon",
["upi"] = "Umeda",
["upv"] = "Northeast Malakula",
["ur"] = "อูรดู",
["ura"] = "Urarina",
["urb"] = "Urubú-Kaapor",
["urc"] = "Urningangg",
["ure"] = "Uru",
["urf"] = "Uradhi",
["urg"] = "Urigina",
["urh"] = "Urhobo",
["uri"] = "Urim",
["urj-fin-pro"] = "ฟินนิกดั้งเดิม",
["urj-koo"] = "Old Komi",
["urj-kuk"] = "Kukkuzi",
["urj-kya"] = "Komi-Yazva",
["urj-mdv-pro"] = "Proto-Mordvinic",
["urj-prm-pro"] = "เปอร์มิกดั้งเดิม",
["urj-pro"] = "ยูราลิกดั้งเดิม",
["urj-ugr-pro"] = "ยูกริกดั้งเดิม",
["urk"] = "อูรักลาโวยจ",
["url"] = "Urali",
["urm"] = "Urapmin",
["urn"] = "Uruangnirin",
["uro"] = "Ura (New Guinea)",
["urp"] = "Uru-Pa-In",
["urr"] = "Löyöp",
["urt"] = "Urat",
["uru"] = "Urumi",
["urv"] = "Uruava",
["urw"] = "Sop",
["urx"] = "Urimo",
["ury"] = "Orya",
["urz"] = "Uru-Eu-Wau-Wau",
["usa"] = "Usarufa",
["ush"] = "Ushojo",
["usi"] = "Usui",
["usk"] = "Usaghade",
["usp"] = "Uspanteco",
["uss"] = "Saare",
["usu"] = "Uya",
["uta"] = "Otank",
["ute"] = "Ute",
["uth"] = "Hun",
["utp"] = "Aba",
["utr"] = "Etulo",
["utu"] = "Utu",
["uum"] = "Urum",
["uun"] = "Kulon-Pazeh",
["uur"] = "Ura (Vanuatu)",
["uuu"] = "U",
["uve"] = "West Uvean",
["uvh"] = "Uri",
["uvl"] = "Lote",
["uwa"] = "Kuku-Uwanh",
["uya"] = "Doko-Uyanga",
["uz"] = "อุซเบก",
["vaa"] = "Vaagri Booli",
["vae"] = "Vale",
["vag"] = "Vagla",
["vah"] = "Varhadi",
["vai"] = "ไว",
["vaj"] = "Sekele",
["val"] = "Vehes",
["vam"] = "Vanimo",
["van"] = "Valman",
["vao"] = "Vao",
["vap"] = "Vaiphei",
["var"] = "Huarijio",
["vas"] = "Vasavi",
["vau"] = "Vanuma",
["vav"] = "Varli",
["vay"] = "Vayu",
["vbb"] = "Southeast Babar",
["vbk"] = "Southwestern Bontoc",
["ve"] = "เวนดา",
["vec"] = "เวเนโต",
["ved"] = "Veddah",
["vem"] = "Vemgo-Mabas",
["veo"] = "Ventureño",
["vep"] = "เวปส์",
["ver"] = "Mom Jango",
["vgr"] = "Vaghri",
["vgt"] = "Flemish Sign Language",
["vi"] = "เวียดนาม",
["vic"] = "Virgin Islands Creole",
["vid"] = "Vidunda",
["vif"] = "Vili",
["vig"] = "Viemo",
["vil"] = "Vilela",
["vis"] = "Vishavan",
["vit"] = "Viti",
["viv"] = "Iduna",
["vjk"] = "Bajjika",
["vka"] = "Kariyarra",
["vki"] = "Ija-Zuba",
["vkj"] = "Kujarge",
["vkk"] = "Kaur",
["vkl"] = "Kulisusu",
["vkm"] = "Kamakan",
["vko"] = "Kodeoha",
["vkp"] = "Korlai Creole Portuguese",
["vkt"] = "Tenggarong Kutai Malay",
["vku"] = "Kurrama",
["vlp"] = "Valpei",
["vls"] = "West Flemish",
["vma"] = "Martuthunira",
["vmb"] = "Mbabaram",
["vmc"] = "Juxtlahuaca Mixtec",
["vmd"] = "Mudu Koraga",
["vme"] = "East Masela",
["vmf"] = "ฟรังโกเนียตะวันออก",
["vmg"] = "Minigir",
["vmh"] = "Maraghei",
["vmi"] = "Miwa",
["vmj"] = "Ixtayutla Mixtec",
["vmk"] = "Makhuwa-Shirima",
["vml"] = "Malgana",
["vmm"] = "Mitlatongo Mixtec",
["vmp"] = "Soyaltepec Mazatec",
["vmq"] = "Soyaltepec Mixtec",
["vmr"] = "Marenje",
["vmu"] = "Muluridyi",
["vmv"] = "Valley Maidu",
["vmw"] = "Makhuwa",
["vmx"] = "Tamazola Mixtec",
["vmy"] = "Ayautla Mazatec",
["vmz"] = "Mazatlán Mazatec",
["vnk"] = "Lovono",
["vnm"] = "Neve'ei",
["vnp"] = "Vunapu",
["vo"] = "โวลาปุก",
["vor"] = "Voro",
["vot"] = "โวต",
["vra"] = "Vera'a",
["vro"] = "เวอโร",
["vrs"] = "Varisi",
["vrt"] = "Burmbar",
["vsi"] = "Moldova Sign Language",
["vsl"] = "Venezuelan Sign Language",
["vsv"] = "Valencian Sign Language",
["vto"] = "Vitou",
["vum"] = "Vumbu",
["vun"] = "Vunjo",
["vut"] = "Vute",
["vwa"] = "Awa (China)",
["wa"] = "วัลลูน",
["waa"] = "Walla Walla",
["wab"] = "Wab",
["wac"] = "Wasco-Wishram",
["wad"] = "Wandamen",
["waf"] = "Wakoná",
["wag"] = "Wa'ema",
["wah"] = "Watubela",
["waj"] = "Waffa",
["wal"] = "Wolaytta",
["wam"] = "Massachusett",
["wan"] = "Wan",
["wao"] = "Wappo",
["wap"] = "Wapishana",
["waq"] = "Wageman",
["war"] = "วาไร",
["was"] = "Washo",
["wat"] = "Kaninuwa",
["wau"] = "Wauja",
["wav"] = "Waka",
["waw"] = "Waiwai",
["wax"] = "Watam",
["way"] = "Wayana",
["waz"] = "Wampur",
["wba"] = "วาราโอ",
["wbb"] = "Wabo",
["wbe"] = "Waritai",
["wbf"] = "Wara",
["wbh"] = "Wanda",
["wbi"] = "Wanji",
["wbj"] = "Alagwa",
["wbk"] = "Waigali",
["wbl"] = "Wakhi",
["wbm"] = "Wa",
["wbp"] = "Warlpiri",
["wbq"] = "Waddar",
["wbr"] = "Wagdi",
["wbt"] = "Wanman",
["wbv"] = "Wajarri",
["wbw"] = "Woi",
["wca"] = "Yanomam",
["wci"] = "Waci Gbe",
["wdd"] = "Wandji",
["wdg"] = "Wadaginam",
["wdj"] = "Wadjiginy",
["wdt"] = "Wendat",
["wdu"] = "Wadjigu",
["wdy"] = "Wadjabangayi",
["wea"] = "Wewaw",
["wec"] = "Wè Western",
["wed"] = "Wedau",
["weh"] = "Weh",
["wei"] = "Kiunum",
["wem"] = "Weme Gbe",
["weo"] = "Wemale",
["wer"] = "Weri",
["wes"] = "Cameroon Pidgin",
["wet"] = "Perai",
["weu"] = "Welaung",
["wew"] = "Weyewa",
["wfg"] = "Yafi",
["wga"] = "Wagaya",
["wgb"] = "Wagawaga",
["wgg"] = "Wangganguru",
["wgi"] = "Wahgi",
["wgo"] = "Waigeo",
["wgu"] = "Wirangu",
["wgy"] = "Warrgamay",
["wha"] = "Manusela",
["whg"] = "North Wahgi",
["whk"] = "Wahau Kenyah",
["whu"] = "Wahau Kayan",
["wib"] = "Southern Toussian",
["wic"] = "Wichita",
["wie"] = "Wik-Epa",
["wif"] = "Wik-Keyangan",
["wig"] = "Wik-Ngathana",
["wih"] = "Wik-Me'anha",
["wii"] = "Minidien",
["wij"] = "Wik-Iiyanh",
["wik"] = "Wikalkan",
["wil"] = "Wilawila",
["wim"] = "Wik-Mungkan",
["win"] = "วินเนอเบโก",
["wir"] = "Wiraféd",
["wiu"] = "Wiru",
["wiv"] = "Muduapa",
["wiy"] = "Wiyot",
["wja"] = "Waja",
["wji"] = "Warji",
["wka"] = "Kw'adza",
["wkb"] = "Kumbaran",
["wkd"] = "Mo",
["wkl"] = "Kalanadi",
["wku"] = "Kunduvadi",
["wkw"] = "Wakawaka",
["wky"] = "Wangkayutyuru",
["wla"] = "Walio",
["wlc"] = "Mwali Comorian",
["wle"] = "Wolane",
["wlg"] = "Kunbarlang",
["wli"] = "Waioli",
["wlk"] = "Wailaki",
["wll"] = "Wali (Sudan)",
["wlm"] = "เวลส์กลาง",
["wlo"] = "Wolio",
["wlr"] = "Wailapa",
["wls"] = "Wallisian",
["wlu"] = "Wuliwuli",
["wlv"] = "Wichí Lhamtés Vejoz",
["wlw"] = "Walak",
["wlx"] = "Wali (Ghana)",
["wly"] = "Waling",
["wmb"] = "Wambaya",
["wmc"] = "Wamas",
["wmd"] = "Mamaindé",
["wme"] = "Wambule",
["wmh"] = "Waima'a",
["wmi"] = "Wamin",
["wmm"] = "Maiwa (Indonesia)",
["wmn"] = "Waamwang",
["wmo"] = "Wam",
["wms"] = "Wambon",
["wmt"] = "Walmajarri",
["wmw"] = "มวานี",
["wmx"] = "Womo",
["wnb"] = "Wanambre",
["wnc"] = "Wantoat",
["wnd"] = "Wandarang",
["wne"] = "Waneci",
["wng"] = "Wanggom",
["wni"] = "Ndzwani Comorian",
["wnk"] = "Wanukaka",
["wnm"] = "Wanggamala",
["wno"] = "Wano",
["wnp"] = "Wanap",
["wnu"] = "Usan",
["wnw"] = "Wintu",
["wny"] = "Wanyi",
["wo"] = "โวลอฟ",
["woa"] = "Tyaraity",
["wob"] = "Wobé",
["woc"] = "Wogeo",
["wod"] = "Wolani",
["woe"] = "Woleaian",
["wog"] = "Wogamusin",
["woi"] = "Kamang",
["wok"] = "Longto",
["wom"] = "Perema",
["won"] = "Wongo",
["woo"] = "Manombai",
["wor"] = "Woria",
["wos"] = "Hanga Hundi",
["wow"] = "Wawonii",
["woy"] = "Weyto",
["wpc"] = "Wirö",
["wra"] = "Warapu",
["wrb"] = "Warluwara",
["wrg"] = "Warungu",
["wrh"] = "Wiradjuri",
["wri"] = "Wariyangga",
["wrk"] = "Garawa",
["wrl"] = "Warlmanpa",
["wrm"] = "Warumungu",
["wrn"] = "Warnang",
["wro"] = "Worora",
["wrp"] = "Waropen",
["wrr"] = "Wardaman",
["wrs"] = "Waris",
["wru"] = "Waru",
["wrv"] = "Waruna",
["wrw"] = "Gugu Warra",
["wrx"] = "Wae Rana",
["wrz"] = "Warray",
["wsa"] = "Warembori",
["wsi"] = "Wusi",
["wsk"] = "Waskia",
["wsr"] = "Owenia",
["wsu"] = "Wasu",
["wsv"] = "Wotapuri-Katarqalai",
["wtf"] = "วาตีวา",
["wth"] = "Wathaurong",
["wti"] = "Berta",
["wtk"] = "Watakataui",
["wtm"] = "Mewati",
["wtw"] = "Wotu",
["wua"] = "Wikngenchera",
["wub"] = "Wunambal",
["wud"] = "Wudu",
["wuh"] = "Wutunhua",
["wul"] = "Silimo",
["wum"] = "Wumbvu",
["wun"] = "Bungu",
["wur"] = "Wurrugu",
["wut"] = "Wutung",
["wuu"] = "อู๋",
["wuv"] = "Wuvulu-Aua",
["wux"] = "Wulna",
["wuy"] = "Wauyai",
["wwa"] = "Waama",
["wwo"] = "Dorig",
["wwr"] = "Warrwa",
["www"] = "Wawa",
["wxa"] = "Waxiang",
["wxw"] = "Wardandi",
["wya"] = "Wyandot",
["wyb"] = "Ngiyambaa",
["wyi"] = "Woiwurrung",
["wym"] = "วีลามอวิตแซ",
["wyr"] = "Wayoró",
["wyy"] = "Western Fijian",
["xaa"] = "อาหรับแบบอันดะลุส",
["xab"] = "Sambe",
["xac"] = "Kachari",
["xad"] = "Adai",
["xae"] = "Aequian",
["xag"] = "Aghwan",
["xai"] = "Kaimbé",
["xaj"] = "Ararandewára",
["xak"] = "Maku",
["xal"] = "คัลมึค",
["xam"] = "ǀXam",
["xan"] = "Xamtanga",
["xao"] = "Khao",
["xap"] = "Apalachee",
["xaq"] = "Aquitanian",
["xar"] = "Karami",
["xas"] = "Kamassian",
["xat"] = "Katawixi",
["xau"] = "Kauwera",
["xav"] = "Xavante",
["xaw"] = "Kawaiisu",
["xay"] = "Kayan Mahakam",
["xbb"] = "Lower Burdekin",
["xbc"] = "แบกเตรีย",
["xbd"] = "Bindal",
["xbe"] = "Bigambal",
["xbg"] = "Bunganditj",
["xbi"] = "Kombio",
["xbj"] = "Birrpayi",
["xbm"] = "เบรอตงกลาง",
["xbn"] = "Kenaboi",
["xbo"] = "Bulgar",
["xbp"] = "Bibbulman",
["xbr"] = "กัมเบอรา",
["xbw"] = "Kambiwá",
["xby"] = "Butchulla",
["xcb"] = "Cumbric",
["xcc"] = "Camunic",
["xce"] = "Celtiberian",
["xch"] = "Chemakum",
["xcl"] = "อาร์มีเนียเก่า",
["xcm"] = "Comecrudo",
["xcn"] = "Cotoname",
["xco"] = "Khwarezmian",
["xcr"] = "Carian",
["xct"] = "ทิเบตคลาสสิก",
["xcu"] = "Curonian",
["xcv"] = "Chuvan",
["xcw"] = "Coahuilteco",
["xcy"] = "Cayuse",
["xda"] = "Darkinjung",
["xdc"] = "Dacian",
["xdk"] = "Dharug",
["xdm"] = "เอโดม",
["xdq"] = "Kaitag",
["xdy"] = "Malayic Dayak",
["xeb"] = "Eblaite",
["xed"] = "Hdi",
["xeg"] = "ǁXegwi",
["xel"] = "Kelo",
["xem"] = "Kembayan",
["xep"] = "Epi-Olmec",
["xer"] = "Xerénte",
["xes"] = "Kesawai",
["xet"] = "Xetá",
["xeu"] = "Keoru-Ahia",
["xfa"] = "ฟาลิสกุส",
["xga"] = "Galatian",
["xgb"] = "Gbin",
["xgd"] = "Gudang",
["xgf"] = "Gabrielino-Fernandeño",
["xgg"] = "Goreng",
["xgi"] = "Garingbal",
["xgl"] = "Galindian",
["xgm"] = "Darumbal",
["xgn-pro"] = "มองโกลิกดั้งเดิม",
["xgr"] = "Garza",
["xgu"] = "Unggumi",
["xgw"] = "Guwa",
["xh"] = "โคซา",
["xha"] = "Harami",
["xhc"] = "Hunnic",
["xhd"] = "Hadrami",
["xhe"] = "Khetrani",
["xhm"] = "เขมรกลาง",
["xhr"] = "Hernican",
["xht"] = "Hattic",
["xhu"] = "ฮูร์เรีย",
["xhv"] = "Khua",
["xib"] = "Iberian",
["xii"] = "Xiri",
["xil"] = "Illyrian",
["xin"] = "Xinca",
["xir"] = "Xiriâna",
["xis"] = "Kisan",
["xiv"] = "Harappan",
["xiy"] = "Xipaya",
["xjb"] = "Minjungbal",
["xka"] = "Kalkoti",
["xkb"] = "Manigri-Kambolé Ede Nago",
["xkc"] = "Khoini",
["xkd"] = "Mendalam Kayan",
["xke"] = "Kereho",
["xkf"] = "Khengkha",
["xkg"] = "Kagoro",
["xki"] = "Kenyan Sign Language",
["xkj"] = "Kajali",
["xkk"] = "Kaco'",
["xkl"] = "Bakung",
["xkn"] = "Kayan River Kayan",
["xko"] = "Kiorr",
["xkp"] = "Kabatei",
["xkq"] = "Koroni",
["xkr"] = "Xakriabá",
["xks"] = "Kumbewaha",
["xkt"] = "Kantosi",
["xku"] = "Kaamba",
["xkv"] = "Kgalagadi",
["xkw"] = "Kembra",
["xkx"] = "Karore",
["xky"] = "Uma' Lasan",
["xkz"] = "Kurtöp",
["xla"] = "Kamula",
["xlb"] = "Loup B",
["xlc"] = "Lycian",
["xld"] = "Lydian",
["xle"] = "Lemnian",
["xlg"] = "Ancient Ligurian",
["xli"] = "Liburnian",
["xln"] = "Alanic",
["xlo"] = "Loup A",
["xlp"] = "Lepontic",
["xls"] = "Lusitanian",
["xlu"] = "Luwian",
["xly"] = "Elymian",
["xmb"] = "Mbonga",
["xmc"] = "Makhuwa-Marrevone",
["xmd"] = "Mbudum",
["xme-ker"] = "Kermanic",
["xme-kls"] = "Kalasuri",
["xme-klt"] = "Kilit",
["xme-mid"] = "Middle Median",
["xme-old"] = "Old Median",
["xme-ott"] = "Old Tati",
["xme-taf"] = "Tafreshi",
["xme-ttc-pro"] = "Proto-Tatic",
["xmf"] = "มิงเกรเลีย",
["xmg"] = "Mengaka",
["xmh"] = "Kugu-Muminh",
["xmj"] = "Majera",
["xmk"] = "Ancient Macedonian",
["xml"] = "Malaysian Sign Language",
["xmm"] = "มลายูแบบมานาโด",
["xmo"] = "Morerebi",
["xmp"] = "Kuku-Mu'inh",
["xmq"] = "Kuku-Mangk",
["xmr"] = "Meroitic",
["xms"] = "Moroccan Sign Language",
["xmt"] = "Matbat",
["xmu"] = "Kamu",
["xmx"] = "Maden",
["xmy"] = "Mayaguduna",
["xmz"] = "Mori Bawah",
["xna"] = "Ancient North Arabian",
["xnb"] = "Kanakanabu",
["xnd-pro"] = "Proto-Na-Dene",
["xng"] = "มองโกเลียกลาง",
["xnh"] = "Kuanhua",
["xni"] = "Ngarigu",
["xnk"] = "Nganakarti",
["xnn"] = "กันกานาอือเหนือ",
["xnr"] = "Kangri",
["xns"] = "Kanashi",
["xnt"] = "Narragansett",
["xnu"] = "Nukunul",
["xny"] = "Nyiyaparli",
["xoc"] = "O'chi'chi'",
["xod"] = "Kokoda",
["xog"] = "Soga",
["xoi"] = "Kominimung",
["xok"] = "Xokleng",
["xom"] = "Komo",
["xon"] = "Konkomba",
["xoo"] = "Xukurú",
["xop"] = "Kopar",
["xor"] = "Korubo",
["xow"] = "Kowaki",
["xpa"] = "Pirriya",
["xpb"] = "Pyemmairre",
["xpc"] = "Pecheneg",
["xpd"] = "Paredarerme",
["xpe"] = "Liberia Kpelle",
["xpf"] = "Southeast Tasmanian",
["xpg"] = "Phrygian",
["xph"] = "Tyerrernotepanner",
["xpi"] = "Pictish",
["xpj"] = "Mpalitjanh",
["xpk"] = "Kulina",
["xpl"] = "Port Sorell",
["xpm"] = "Pumpokol",
["xpn"] = "Kapinawá",
["xpo"] = "Pochutec",
["xpp"] = "Puyo-Paekche",
["xpq"] = "Mohegan-Pequot",
["xpr"] = "พาร์เทีย",
["xps"] = "Pisidian",
["xpu"] = "Punic",
["xpv"] = "Tommeginne",
["xpw"] = "Peerapper",
["xpx"] = "Toogee",
["xpy"] = "Buyeo",
["xpz"] = "Bruny Island",
["xqa"] = "Karakhanid",
["xqt"] = "Qatabanian",
["xra"] = "Krahô",
["xrb"] = "Eastern Karaboro",
["xrd"] = "Gundungurra",
["xre"] = "Kreye",
["xrg"] = "Minang",
["xri"] = "Krikati-Timbira",
["xrm"] = "Armazic",
["xrn"] = "Arin",
["xrq"] = "Karranga",
["xrr"] = "Raetic",
["xrt"] = "Aranama-Tamique",
["xru"] = "Marriammu",
["xrw"] = "Karawa",
["xsa"] = "Sabaean",
["xsb"] = "ซัมบัล",
["xsc-pro"] = "Proto-Scythian",
["xsc-sak-pro"] = "Proto-Saka",
["xsc-sar-pro"] = "Proto-Sarmatian",
["xsc-skw-pro"] = "Proto-Saka-Wakhi",
["xsd"] = "Sidetic",
["xse"] = "Sempan",
["xsh"] = "Shamang",
["xsi"] = "Sio",
["xsj"] = "Subi",
["xsl"] = "South Slavey",
["xsm"] = "Kasem",
["xsn"] = "Sanga (Nigeria)",
["xso"] = "Solano",
["xsp"] = "Silopi",
["xsq"] = "Makhuwa-Saka",
["xsr"] = "เศรปา",
["xss"] = "Assan",
["xsu"] = "Sanumá",
["xsv"] = "ซูโดเวีย",
["xsy"] = "Saisiyat",
["xta"] = "Alcozauca Mixtec",
["xtb"] = "Chazumba Mixtec",
["xtc"] = "Kadugli",
["xtd"] = "Diuxi-Tilantongo Mixtec",
["xte"] = "Ketengban",
["xth"] = "Yitha Yitha",
["xti"] = "Sinicahua Mixtec",
["xtj"] = "San Juan Teita Mixtec",
["xtl"] = "Tijaltepec Mixtec",
["xtm"] = "Magdalena Peñasco Mixtec",
["xtn"] = "Northern Tlaxiaco Mixtec",
["xto"] = "โทแคเรียนเอ",
["xtp"] = "San Miguel Piedras Mixtec",
["xtq"] = "ตุมซุก",
["xtr"] = "Early Tripuri",
["xts"] = "Sindihui Mixtec",
["xtt"] = "Tacahua Mixtec",
["xtu"] = "Cuyamecalco Mixtec",
["xtv"] = "Thawa",
["xtw"] = "Tawandê",
["xty"] = "Yoloxochitl Mixtec",
["xua"] = "Alu Kurumba",
["xub"] = "Betta Kurumba",
["xud"] = "Umiida",
["xug"] = "คูนิงามิ",
["xuj"] = "Jennu Kurumba",
["xul"] = "Ngunawal",
["xum"] = "อุมเบรีย",
["xun"] = "Unggaranggu",
["xuo"] = "Kuo",
["xup"] = "Upper Umpqua",
["xur"] = "Urartian",
["xut"] = "Kuthant",
["xuu"] = "Khwe",
["xve"] = "Venetic",
["xvn"] = "วันดัล",
["xvo"] = "Volscian",
["xvs"] = "Vestinian",
["xwa"] = "Kwaza",
["xwc"] = "Woccon",
["xwd"] = "Wadi Wadi",
["xwe"] = "Xwela Gbe",
["xwg"] = "Kwegu",
["xwj"] = "Wajuk",
["xwk"] = "Wangkumara",
["xwl"] = "Western Xwla Gbe",
["xwo"] = "Written Oirat",
["xwr"] = "Kwerba Mamberamo",
["xww"] = "Wemba-Wemba",
["xxb"] = "Boro",
["xxk"] = "Ke'o",
["xxm"] = "Minkin",
["xxr"] = "Koropó",
["xxt"] = "Tambora",
["xya"] = "Yaygir",
["xyb"] = "Yandjibara",
["xyl"] = "Yalakalore",
["xyt"] = "Mayi-Thakurti",
["xyy"] = "Yorta Yorta",
["xzh"] = "Zhang-Zhung",
["xzm"] = "Semigallian",
["xzp"] = "Ancient Zapotec",
["yaa"] = "Yaminahua",
["yab"] = "Yuhup",
["yac"] = "Pass Valley Yali",
["yad"] = "Yagua",
["yae"] = "Pumé",
["yaf"] = "Yaka",
["yag"] = "ยามานา",
["yah"] = "Yazghulami",
["yai"] = "Yaghnobi",
["yaj"] = "Banda-Yangere",
["yak"] = "Yakima",
["yal"] = "Yalunka",
["yam"] = "Yamba",
["yan"] = "Mayangna",
["yao"] = "Yao",
["yap"] = "Yapese",
["yaq"] = "Yaqui",
["yar"] = "Yabarana",
["yas"] = "Gunu",
["yat"] = "Yambeta",
["yau"] = "Yuwana",
["yav"] = "Yangben",
["yaw"] = "Yawalapití",
["yay"] = "Agwagwune",
["yaz"] = "Lokaa",
["yba"] = "Yala",
["ybb"] = "Yemba",
["ybe"] = "Western Yugur",
["ybh"] = "Yakkha",
["ybi"] = "Yamphu",
["ybj"] = "Hasha",
["ybk"] = "Bokha",
["ybl"] = "Yukuben",
["ybm"] = "Yaben",
["ybn"] = "Yabaâna",
["ybo"] = "Yabong",
["ybx"] = "Yawiyo",
["yby"] = "Yaweyuha",
["ych"] = "Chesu",
["ycl"] = "Lolopo",
["ycn"] = "Yucuna",
["ycp"] = "Chepya",
["ycr"] = "Yilan Creole",
["yda"] = "Yanda",
["yde"] = "Yangum Dey",
["ydg"] = "Yidgha",
["ydk"] = "Yoidik",
["yea"] = "Ravula",
["yec"] = "Yenish",
["yee"] = "Yimas",
["yei"] = "Yeni",
["yej"] = "Yevanic",
["yen"] = "Yendang",
["yer"] = "Tarok",
["yes"] = "Yeskwa",
["yet"] = "Yetfa",
["yeu"] = "Yerukula",
["yev"] = "Yapunda",
["yey"] = "Yeyi",
["ygi"] = "Yiningayi",
["ygl"] = "Yangum Gel",
["ygm"] = "Yagomi",
["ygp"] = "Gepo",
["ygr"] = "Yagaria",
["ygs"] = "Yolngu Sign Language",
["ygu"] = "Yugul",
["ygw"] = "Yagwoia",
["yha"] = "Baha",
["yhl"] = "Hlepho Phowa",
["yi"] = "ยิดดิช",
["yia"] = "Yinggarda",
["yif"] = "Ache",
["yig"] = "Wusa",
["yii"] = "Yidiny",
["yij"] = "Yindjibarndi",
["yik"] = "Dongshanba Lalo",
["yil"] = "Yindjilandji",
["yim"] = "Yimchungru Naga",
["yin"] = "Yinchia",
["yip"] = "Pholo",
["yiq"] = "Micha",
["yir"] = "North Awyu",
["yis"] = "Yis",
["yit"] = "Eastern Lalu",
["yiu"] = "Lope",
["yiv"] = "Northern Nisu",
["yix"] = "Axi",
["yiy"] = "Yir-Yoront",
["yiz"] = "Azhe",
["yka"] = "ยากัน",
["ykg"] = "Northern Yukaghir",
["ykh"] = "Khamnigan Mongol",
["yki"] = "Yoke",
["ykk"] = "Yakaikeke",
["ykl"] = "Khlula",
["ykm"] = "Kap",
["ykn"] = "Kua-nsi",
["yko"] = "Yasa",
["ykr"] = "Yekora",
["ykt"] = "Kathu",
["yku"] = "Kuamasi",
["yky"] = "Yakoma",
["yla"] = "Yaul",
["ylb"] = "Yaleba",
["yle"] = "Yele",
["ylg"] = "Yelogu",
["yli"] = "Angguruk Yali",
["yll"] = "Yil",
["ylm"] = "Limi",
["yln"] = "Langnian Buyang",
["ylo"] = "Naruo",
["ylr"] = "Yalarnnga",
["ylu"] = "Aribwaung",
["yly"] = "Nyelâyu",
["ymb"] = "Yambes",
["ymc"] = "Southern Muji",
["ymd"] = "Muda",
["yme"] = "Yameo",
["ymg"] = "Yamongeri",
["ymh"] = "Mili",
["ymi"] = "Moji",
["ymk"] = "Makwe",
["yml"] = "Iamalele",
["ymm"] = "Maay",
["ymn"] = "Sunum",
["ymo"] = "Yangum Mon",
["ymp"] = "Yamap",
["ymq"] = "Qila Muji",
["ymr"] = "Malasar",
["yms"] = "Mysian",
["ymx"] = "Northern Muji",
["ymz"] = "Muzi",
["yna"] = "Aluo",
["ynb"] = "Yamben",
["ynd"] = "Yandruwandha",
["yne"] = "Lang'e",
["yng"] = "Yango",
["ynk"] = "Naukanski",
["ynl"] = "Yangulam",
["ynn"] = "Yana",
["yno"] = "ยอง",
["yns"] = "Yansi",
["ynu"] = "Yahuna",
["yo"] = "โยรูบา",
["yob"] = "Yoba",
["yog"] = "โยกัด",
["yoi"] = "โยนางูนิ",
["yok-bvy"] = "Buena Vista Yokuts",
["yok-dly"] = "Delta Yokuts",
["yok-gsy"] = "Gashowu Yokuts",
["yok-kry"] = "Kings River Yokuts",
["yok-nvy"] = "Northern Valley Yokuts",
["yok-ply"] = "Palewyami Yokuts",
["yok-svy"] = "Southern Valley Yokuts",
["yok-tky"] = "Tule-Kaweah Yokuts",
["yol"] = "ยอลอ",
["yom"] = "Yombe",
["yon"] = "Yongkom",
["yox"] = "โยรง",
["yoy"] = "Yoy",
["ypa"] = "Phala",
["ypb"] = "Labo Phowa",
["ypg"] = "Phola",
["yph"] = "Phupha",
["ypk-pro"] = "Proto-Yupik",
["ypm"] = "Phuma",
["ypn"] = "Ani Phowa",
["ypo"] = "Alo Phola",
["ypp"] = "Phupa",
["ypz"] = "Phuza",
["yra"] = "Yerakai",
["yrb"] = "Yareba",
["yre"] = "Yaouré",
["yri"] = "Yarí",
["yrk-for"] = "Forest Nenets",
["yrk-tun"] = "Tundra Nenets",
["yrl"] = "Nheengatu",
["yrn"] = "Yerong",
["yro"] = "Ỹaroamë",
["yrw"] = "Yarawata",
["yry"] = "Yarluyandi",
["ysc"] = "Jassic",
["ysd"] = "Samatao",
["ysg"] = "Sonaga",
["ysl"] = "Yugoslavian Sign Language",
["ysn"] = "Sani",
["yso"] = "Nisi",
["ysp"] = "Southern Lolopo",
["ysr"] = "Sirenik",
["yss"] = "Yessan-Mayo",
["ysy"] = "Sanie",
["yta"] = "Talu",
["ytl"] = "Toloza",
["ytp"] = "Thopho",
["ytw"] = "Yout Wam",
["yty"] = "Yatay",
["yua"] = "Yucatec Maya",
["yub"] = "Yugambal",
["yuc"] = "Yuchi",
["yue"] = "กวางตุ้ง",
["yuf"] = "Havasupai-Walapai-Yavapai",
["yug"] = "Yug",
["yui"] = "Yurutí",
["yuj"] = "Karkar-Yuri",
["yuk"] = "Yuki",
["yul"] = "Yulu",
["yum"] = "Yuma",
["yun"] = "Bena",
["yup"] = "Yukpa",
["yuq"] = "Yuqui",
["yur"] = "Yurok",
["yut"] = "Yopno",
["yuw"] = "Finisterre Yau",
["yux"] = "Southern Yukaghir",
["yuy"] = "East Yugur",
["yuz"] = "Yuracare",
["yva"] = "Yawa",
["yvt"] = "Yavitero",
["ywa"] = "Kalou",
["ywg"] = "Yinhawangka",
["ywl"] = "Western Lalu",
["ywn"] = "Yawanawa",
["ywq"] = "Nasu",
["ywr"] = "Yawuru",
["ywt"] = "Xishanba Lalo",
["ywu"] = "Wumeng",
["yww"] = "Yawarawarga",
["yxa"] = "Mayawali",
["yxg"] = "Yagara",
["yxl"] = "Yarli",
["yxm"] = "Yinwum",
["yxu"] = "Yuyu",
["yxy"] = "Yabula Yabula",
["yyu"] = "Torricelli Yau",
["yyz"] = "Ayizi",
["yzg"] = "E'ma Buyang",
["yzk"] = "Zokhuo",
["za"] = "จ้วง",
["zaa"] = "Sierra de Juárez Zapotec",
["zab"] = "San Juan Guelavía Zapotec",
["zac"] = "Ocotlán Zapotec",
["zad"] = "Cajonos Zapotec",
["zae"] = "Yareni Zapotec",
["zaf"] = "Ayoquesco Zapotec",
["zag"] = "Zaghawa",
["zah"] = "Zangwal",
["zai"] = "Isthmus Zapotec",
["zaj"] = "Zaramo",
["zak"] = "Zanaki",
["zal"] = "Zauzou",
["zam"] = "Central Mahuatlán Zapotec",
["zao"] = "Ozolotepec Zapotec",
["zap"] = "Zapotec",
["zaq"] = "Aloápam Zapotec",
["zar"] = "Rincón Zapotec",
["zas"] = "Santo Domingo Albarradas Zapotec",
["zat"] = "Tabaa Zapotec",
["zau"] = "ซันสการ์",
["zav"] = "Yatzachi Zapotec",
["zaw"] = "Mitla Zapotec",
["zax"] = "Xadani Zapotec",
["zay"] = "Zayse-Zergulla",
["zaz"] = "Zari",
["zbt"] = "Batui",
["zca"] = "Coatecas Altas Zapotec",
["zdj"] = "Ngazidja Comorian",
["zea"] = "Zealandic",
["zeg"] = "Zenag",
["zen"] = "Zenaga",
["zga"] = "Kinga",
["zgh"] = "Moroccan Amazigh",
["zgr"] = "Magori",
["zh"] = "จีน",
["zhb"] = "Zhaba",
["zhi"] = "Zhire",
["zhn"] = "จ้วงแบบหนง",
["zhw"] = "Zhoa",
["zhx-min-pro"] = "หมิ่นดั้งเดิม",
["zhx-sht"] = "Shaozhou Tuhua",
["zhx-sic"] = "เสฉวน",
["zhx-tai"] = "ห่อยซัน",
["zia"] = "Zia",
["zib"] = "Zimbabwe Sign Language",
["zik"] = "Zimakani",
["zil"] = "Zialo",
["zim"] = "Mesme",
["zin"] = "Zinza",
["zir"] = "Ziriya",
["ziw"] = "Zigula",
["ziz"] = "Zizilivakan",
["zka"] = "Kaimbulawa",
["zkb"] = "Koibal",
["zkd"] = "กะดู",
["zkg"] = "Goguryeo",
["zkh"] = "Khorezmian Turkic",
["zkk"] = "Karankawa",
["zko"] = "Kott",
["zkp"] = "São Paulo Kaingáng",
["zkr"] = "Zakhring",
["zkt"] = "คีตัน",
["zku"] = "Kaurna",
["zkv"] = "Krevinian",
["zkz"] = "Khazar",
["zle-ono"] = "Old Novgorodian",
["zle-ort"] = "รูซินเก่า",
["zls-chs"] = "Church Slavonic",
["zlw-ocs"] = "เช็กเก่า",
["zlw-opl"] = "โปแลนด์เก่า",
["zlw-osk"] = "สโลวักเก่า",
["zlw-slv"] = "สโลวินช์",
["zma"] = "Manda (Australia)",
["zmb"] = "Zimba",
["zmc"] = "Margany",
["zmd"] = "Maridan",
["zme"] = "Mangerr",
["zmf"] = "Mfinu",
["zmg"] = "Marti Ke",
["zmh"] = "Makolkol",
["zmi"] = "Negeri Sembilan Malay",
["zmj"] = "Maridjabin",
["zmk"] = "Mandandanyi",
["zml"] = "Madngele",
["zmm"] = "Marimanindji",
["zmn"] = "Mbangwe",
["zmo"] = "Molo",
["zmp"] = "Mbuun",
["zmq"] = "Mituku",
["zmr"] = "Maranungku",
["zms"] = "Mbesa",
["zmt"] = "Maringarr",
["zmu"] = "Muruwari",
["zmv"] = "Mbariman-Gudhinma",
["zmw"] = "Mbo (Congo)",
["zmx"] = "Bomitaba",
["zmy"] = "Mariyedi",
["zmz"] = "Mbandja",
["zna"] = "Zan Gula",
["zne"] = "Zande",
["zng"] = "Mang",
["znk"] = "Manangkari",
["zns"] = "Mangas",
["zoc"] = "Copainalá Zoque",
["zoh"] = "Chimalapa Zoque",
["zom"] = "Zou",
["zoo"] = "Asunción Mixtepec Zapotec",
["zoq"] = "Tabasco Zoque",
["zor"] = "Rayón Zoque",
["zos"] = "Francisco León Zoque",
["zpa"] = "Lachiguiri Zapotec",
["zpb"] = "Yautepec Zapotec",
["zpc"] = "Choapan Zapotec",
["zpd"] = "Southeastern Ixtlán Zapotec",
["zpe"] = "Petapa Zapotec",
["zpf"] = "San Pedro Quiatoni Zapotec",
["zpg"] = "Guevea de Humboldt Zapotec",
["zph"] = "Totomachapan Zapotec",
["zpi"] = "Santa María Quiegolani Zapotec",
["zpj"] = "Quiavicuzas Zapotec",
["zpk"] = "Tlacolulita Zapotec",
["zpl"] = "Lachixío Zapotec",
["zpm"] = "Mixtepec Zapotec",
["zpn"] = "Santa Inés Yatzechi Zapotec",
["zpo"] = "Amatlán Zapotec",
["zpp"] = "El Alto Zapotec",
["zpq"] = "Zoogocho Zapotec",
["zpr"] = "Santiago Xanica Zapotec",
["zps"] = "Coatlán Zapotec",
["zpt"] = "San Vicente Coatlán Zapotec",
["zpu"] = "Yalálag Zapotec",
["zpv"] = "Chichicapan Zapotec",
["zpw"] = "Zaniza Zapotec",
["zpx"] = "San Baltazar Loxicha Zapotec",
["zpy"] = "Mazaltepec Zapotec",
["zpz"] = "Texmelucan Zapotec",
["zra"] = "Gaya",
["zrg"] = "Mirgan",
["zrn"] = "Zirenkel",
["zro"] = "Záparo",
["zrs"] = "Mairasi",
["zsa"] = "Sarasira",
["zsk"] = "Kaskean",
["zsl"] = "Zambian Sign Language",
["zsr"] = "Southern Rincon Zapotec",
["zsu"] = "Sukurum",
["zte"] = "Elotepec Zapotec",
["ztg"] = "Xanaguía Zapotec",
["ztl"] = "Lapaguía-Guivini Zapotec",
["ztm"] = "San Agustín Mixtepec Zapotec",
["ztn"] = "Santa Catarina Albarradas Zapotec",
["ztp"] = "Loxicha Zapotec",
["ztq"] = "Quioquitani-Quierí Zapotec",
["zts"] = "Tilquiapan Zapotec",
["ztt"] = "Tejalapan Zapotec",
["ztu"] = "San Pablo Güilá Zapotec",
["ztx"] = "Zaachila Zapotec",
["zty"] = "Yatee Zapotec",
["zu"] = "ซูลู",
["zua"] = "Zeem",
["zuh"] = "Tokano",
["zum"] = "Kumzari",
["zun"] = "ซูนี",
["zuy"] = "Zumaya",
["zwa"] = "Zay",
["zyp"] = "Zyphe",
["zza"] = "ซาซา",
["zzj"] = "จ้วงแบบจั่วเจียง",
}
53kc5mmxpl6xxxivq5fdsn9qq4a3xsn
5729385
5729131
2026-07-20T07:43:08Z
Octahedron80
267
5729385
Scribunto
text/plain
return {
["aa"] = "อาฟาร์",
["aaa"] = "Ghotuo",
["aab"] = "Alumu-Tesu",
["aac"] = "Ari",
["aad"] = "Amal",
["aaf"] = "Aranadan",
["aag"] = "Ambrak",
["aah"] = "Abu'",
["aai"] = "Arifama-Miniafia",
["aak"] = "Ankave",
["aal"] = "Afade",
["aan"] = "Anambé",
["aap"] = "Arára (Pará)",
["aaq"] = "Penobscot",
["aas"] = "Aasax",
["aau"] = "Abau",
["aav-khs-pro"] = "คาเซียนดั้งเดิม",
["aav-nic-pro"] = "นิโคบารีสดั้งเดิม",
["aav-pkl-pro"] = "ปนัร-คาซี-ลึงงัมดั้งเดิม",
["aav-pro"] = "ออสโตรเอเชียติกดั้งเดิม",
["aaw"] = "Solong",
["aax"] = "Mandobo Atas",
["aaz"] = "Amarasi",
["ab"] = "อับคาเซีย",
["aba"] = "อาเบ",
["abb"] = "Bankon",
["abc"] = "Ambala Ayta",
["abd"] = "Camarines Norte Agta",
["abe"] = "Abenaki",
["abf"] = "Abai Sungai",
["abg"] = "Abaga",
["abh"] = "อาหรับแบบทาจิกิสถาน",
["abi"] = "Abidji",
["abj"] = "Aka-Bea",
["abl"] = "Abung",
["abm"] = "Abanyom",
["abn"] = "Abua",
["abo"] = "Abon",
["abp"] = "Abenlen Ayta",
["abq"] = "อาบาซา",
["abs"] = "Ambonese Malay",
["abt"] = "Ambulas",
["abu"] = "Abure",
["abv"] = "อาหรับแบบบาห์เรน",
["abw"] = "Pal",
["abx"] = "Inabaknon",
["aby"] = "Aneme Wake",
["abz"] = "Abui",
["aca"] = "Achagua",
["acb"] = "Áncá",
["acd"] = "Gikyode",
["ace"] = "อาเจะฮ์",
["ach"] = "Acholi",
["aci"] = "Aka-Cari",
["ack"] = "Aka-Kora",
["acl"] = "Akar-Bale",
["acm"] = "อาหรับแบบอิรัก",
["acn"] = "Achang",
["acp"] = "Eastern Acipa",
["acr"] = "Achi",
["acs"] = "Acroá",
["acu"] = "Achuar",
["acv"] = "Achumawi",
["acw"] = "อาหรับแบบฮิญาซ",
["acx"] = "อาหรับแบบโอมาน",
["acy"] = "อาหรับแบบไซปรัส",
["acz"] = "Acheron",
["ada"] = "Adangme",
["adb"] = "Atauran",
["add"] = "Dzodinka",
["ade"] = "Adele",
["adf"] = "Dhofari Arabic",
["adg"] = "Andegerebinha",
["adh"] = "Adhola",
["adi"] = "Adi",
["adj"] = "Adioukrou",
["adl"] = "Galo",
["adn"] = "Adang",
["ado"] = "Abu",
["adp"] = "Adap",
["adq"] = "Adangbe",
["adr"] = "Adonara",
["ads"] = "Adamorobe Sign Language",
["adt"] = "Adnyamathanha",
["adu"] = "Aduge",
["adw"] = "Amondawa",
["ady"] = "อะดีเกยา",
["adz"] = "Adzera",
["ae"] = "อเวสตะ",
["aea"] = "Areba",
["aeb"] = "อาหรับแบบตูนิเซีย",
["aed"] = "Argentine Sign Language",
["aee"] = "Northeast Pashayi",
["aek"] = "Haeke",
["ael"] = "Ambele",
["aem"] = "Arem",
["aen"] = "Armenian Sign Language",
["aeq"] = "Aer",
["aer"] = "Eastern Arrernte",
["aes"] = "Alsea",
["aeu"] = "Akeu",
["aew"] = "Ambakich",
["aey"] = "Amele",
["aez"] = "Aeka",
["af"] = "อาฟรีกานส์",
["afa-pro"] = "แอฟโฟรเอเชียติกดั้งเดิม",
["afb"] = "Gulf Arabic",
["afd"] = "Andai",
["afe"] = "Putukwam",
["afg"] = "Afghan Sign Language",
["afh"] = "Afrihili",
["afi"] = "Akrukay",
["afk"] = "Nanubae",
["afn"] = "Defaka",
["afo"] = "Eloyi",
["afp"] = "Tapei",
["afs"] = "Afro-Seminole Creole",
["aft"] = "Afitti",
["afu"] = "Awutu",
["afz"] = "Obokuitai",
["aga"] = "Aguano",
["agb"] = "Legbo",
["agc"] = "Agatu",
["agd"] = "Agarabi",
["age"] = "Angal",
["agf"] = "Arguni",
["agg"] = "Angor",
["agh"] = "Ngelima",
["agi"] = "Agariya",
["agj"] = "Argobba",
["agk"] = "Isarog Agta",
["agl"] = "Fembe",
["agm"] = "Angaataha",
["agn"] = "อากูตายา",
["ago"] = "Tainae",
["agq"] = "Aghem",
["agr"] = "Aguaruna",
["ags"] = "Esimbi",
["agt"] = "Central Cagayan Agta",
["agu"] = "Aguacateca",
["agv"] = "Remontado Agta",
["agw"] = "Kahua",
["agx"] = "Aghul",
["agy"] = "Southern Alta",
["agz"] = "Mount Iriga Agta",
["aha"] = "Ahanta",
["ahb"] = "Axamb",
["ahg"] = "Qimant",
["ahh"] = "Aghu",
["ahi"] = "Tiagba",
["ahk"] = "อาข่า",
["ahl"] = "Igo",
["ahm"] = "Mobu",
["ahn"] = "Àhàn",
["aho"] = "อาหม",
["ahp"] = "Apro",
["ahr"] = "Ahirani",
["ahs"] = "Ashe",
["aht"] = "Ahtna",
["aia"] = "Arosi",
["aib"] = "Äynu",
["aic"] = "Ainbai",
["aid"] = "Alngith",
["aie"] = "Amara",
["aif"] = "Agi",
["aig"] = "Antigua and Barbuda Creole English",
["aih"] = "Ai-Cham",
["aii"] = "อารามายาใหม่แบบอัสซีเรีย",
["aij"] = "Lishanid Noshan",
["aik"] = "Ake",
["ail"] = "Aimele",
["aim"] = "Aimol",
["ain"] = "ไอนุ",
["aio"] = "อ่ายตน",
["aip"] = "Burumakok",
["air"] = "Airoran",
["ait"] = "Arikem",
["aiw"] = "Aari",
["aix"] = "Aighon",
["aiy"] = "Ali",
["aja"] = "Aja",
["ajg"] = "Adja",
["aji"] = "Ajië",
["ajn"] = "Andajin",
["ajp"] = "อาหรับแบบลิแวนต์ใต้",
["ajw"] = "Ajawa",
["ajz"] = "Amri Karbi",
["ak"] = "อาคัน",
["akb"] = "Angkola Batak",
["akc"] = "Mpur",
["akd"] = "Ukpet-Ehom",
["ake"] = "Akawaio",
["akf"] = "Akpa",
["akg"] = "Anakalangu",
["akh"] = "Angal Heneng",
["aki"] = "Aiome",
["akj"] = "Jeru",
["akk"] = "แอกแคด",
["akl"] = "อักลัน",
["akm"] = "Aka-Bo",
["ako"] = "Akurio",
["akp"] = "Siwu",
["akq"] = "Ak",
["akr"] = "Araki",
["aks"] = "Akaselem",
["akt"] = "Akolet",
["aku"] = "Akum",
["akv"] = "Akhvakh",
["akw"] = "Akwa",
["akx"] = "Aka-Kede",
["aky"] = "Aka-Kol",
["akz"] = "แอละแบมา",
["ala"] = "Alago",
["alc"] = "Kawésqar",
["ald"] = "Alladian",
["ale"] = "Aleut",
["alf"] = "Alege",
["alg-aga"] = "Agawam",
["alg-pro"] = "แอลกองเคียนดั้งเดิม",
["alh"] = "Alawa",
["ali"] = "Amaimon",
["alj"] = "Alangan",
["alk"] = "Alak",
["all"] = "Allar",
["alm"] = "Amblong",
["alo"] = "Larike-Wakasihu",
["alp"] = "Alune",
["alq"] = "Algonquin",
["alr"] = "Alutor",
["alt"] = "อัลไตใต้",
["alu"] = "'Are'are",
["alv-ama"] = "Amasi",
["alv-bgu"] = "Baïnounk Gubëeher",
["alv-bua-pro"] = "Proto-Bua",
["alv-cng-pro"] = "Proto-Cangin",
["alv-edk-pro"] = "Proto-Edekiri",
["alv-edo-pro"] = "Proto-Edoid",
["alv-fli-pro"] = "Proto-Fali",
["alv-gbe-pro"] = "กเบดั้งเดิม",
["alv-gng-pro"] = "Proto-Guang",
["alv-gtm-pro"] = "Proto-Central Togo",
["alv-gwa"] = "Gwara",
["alv-hei-pro"] = "Proto-Heiban",
["alv-ido-pro"] = "Proto-Idomoid",
["alv-igb-pro"] = "Proto-Igboid",
["alv-kwa-pro"] = "Proto-Kwa",
["alv-mum-pro"] = "Proto-Mumuye",
["alv-nup-pro"] = "Proto-Nupoid",
["alv-pro"] = "แอตแลนติก-คองโกดั้งเดิม",
["alv-von-pro"] = "วอลตา-ไนเจอร์ดั้งเดิม",
["alv-yor-pro"] = "โยรูบาดั้งเดิม",
["alv-yrd-pro"] = "โยรูบอยด์ดั้งเดิม",
["alw"] = "Alaba",
["alx"] = "Amol",
["aly"] = "Alyawarr",
["alz"] = "Alur",
["am"] = "อัมฮารา",
["ama"] = "Amanayé",
["amb"] = "Ambo",
["amc"] = "Amahuaca",
["ame"] = "Yanesha'",
["amf"] = "Hamer-Banna",
["amg"] = "Amurdag",
["ami"] = "Amis",
["amj"] = "Amdang",
["amk"] = "Ambai",
["aml"] = "War-Jaintia",
["amm"] = "Ama",
["amn"] = "Amanab",
["amo"] = "Amo",
["amp"] = "Alamblak",
["amq"] = "Amahai",
["amr"] = "Amarakaeri",
["ams"] = "อามามิโอชิมะใต้",
["amt"] = "Amto",
["amu"] = "Guerrero Amuzgo",
["amv"] = "Ambelau",
["amw"] = "Western Neo-Aramaic",
["amx"] = "Anmatyerre",
["amy"] = "Ami",
["amz"] = "Atampaya",
["an"] = "อารากอน",
["ana"] = "Andaqui",
["anb"] = "Andoa",
["anc"] = "Ngas",
["and"] = "Ansus",
["ane"] = "คังรังชือ",
["anf"] = "Animere",
["ang"] = "อังกฤษเก่า",
["anh"] = "Nend",
["ani"] = "Andi",
["anj"] = "Anor",
["ank"] = "Goemai",
["anl"] = "Anu",
["anm"] = "Anāl",
["ann"] = "Obolo",
["ano"] = "Andoque",
["anp"] = "Angika",
["anq"] = "Jarawa",
["anr"] = "Andh",
["ans"] = "Anserma",
["ant"] = "Antakarinya",
["anu"] = "Anuak",
["anv"] = "Denya",
["anw"] = "Anaang",
["anx"] = "Andra-Hus",
["any"] = "Anyi",
["anz"] = "Anem",
["aoa"] = "Angolar",
["aob"] = "Abom",
["aoc"] = "Pemon",
["aod"] = "Andarum",
["aoe"] = "Angal Enen",
["aof"] = "Bragat",
["aog"] = "Angoram",
["aoi"] = "Anindilyakwa",
["aoj"] = "Mufian",
["aok"] = "Arhö",
["aol"] = "Alorese",
["aom"] = "Ömie",
["aon"] = "Bumbita Arapesh",
["aor"] = "Aore",
["aos"] = "Taikat",
["aot"] = "อะตง",
["aou"] = "A'ou",
["aox"] = "Atorada",
["aoz"] = "Uab Meto",
["apa-pro"] = "Proto-Apachean",
["apb"] = "Sa'a",
["apc"] = "North Levantine Arabic",
["apd"] = "อาหรับแบบซูดาน",
["ape"] = "Bukiyip",
["apf"] = "Pahanan Agta",
["apg"] = "Ampanang",
["aph"] = "Athpare",
["api"] = "Apiaká",
["apj"] = "Jicarilla",
["apk"] = "Plains Apache",
["apl"] = "Lipan",
["apm"] = "Chiricahua",
["apn"] = "Apinayé",
["apo"] = "Ambul",
["app"] = "Apma",
["apq"] = "A-Pucikwar",
["apr"] = "Arop-Lokep",
["aps"] = "Arop-Sissano",
["apt"] = "Apatani",
["apu"] = "Apurinã",
["apv"] = "Alapmunte",
["apw"] = "อะแพชีตะวันตก",
["apx"] = "Aputai",
["apy"] = "Apalaí",
["apz"] = "Safeyoka",
["aqc"] = "Archi",
["aqd"] = "Ampari Dogon",
["aqg"] = "Arigidi",
["aql-pro"] = "แอลจิกดั้งเดิม",
["aqm"] = "Atohwaim",
["aqn"] = "Northern Alta",
["aqp"] = "Atakapa",
["aqr"] = "Arhâ",
["aqt"] = "Angaité",
["aqz"] = "Akuntsu",
["ar"] = "อาหรับ",
["arc"] = "อารามายา",
["ard"] = "Arabana",
["are"] = "Western Arrernte",
["arh"] = "Arhuaco",
["ari"] = "Arikara",
["arj"] = "Arapaso",
["ark"] = "Arikapú",
["arl"] = "Arabela",
["arn"] = "Mapudungun",
["aro"] = "Araona",
["arp"] = "Arapaho",
["arq"] = "อาหรับแบบแอลจีเรีย",
["arr"] = "Arara-Karo",
["ars"] = "Najdi Arabic",
["art-adu"] = "Adûni",
["art-bel"] = "Belter Creole",
["art-blk"] = "Bolak",
["art-bsp"] = "แบล็กสปีช",
["art-com"] = "Communicationssprache",
["art-dtk"] = "Dothraki",
["art-elo"] = "Eloi",
["art-gld"] = "Goa'uld",
["art-lap"] = "Lapine",
["art-man"] = "Mandalorian",
["art-mun"] = "Mundolinco",
["art-nav"] = "Naʼvi",
["art-vlh"] = "High Valyrian",
["aru"] = "Arua",
["arv"] = "Arbore",
["arw"] = "โลโกโน",
["arx"] = "Aruá",
["ary"] = "อาหรับแบบโมร็อกโก",
["arz"] = "อาหรับแบบอียิปต์",
["as"] = "อัสสัม",
["asa"] = "Pare",
["asb"] = "Assiniboine",
["asc"] = "Casuarina Coast Asmat",
["ase"] = "มืออเมริกัน",
["asf"] = "Auslan",
["asg"] = "Cishingini",
["ash"] = "Abishira",
["asi"] = "Buruwai",
["asj"] = "Nsari",
["ask"] = "Ashkun",
["asl"] = "Asilulu",
["asn"] = "Xingú Asuriní",
["aso"] = "Dano",
["asp"] = "Algerian Sign Language",
["asq"] = "Austrian Sign Language",
["asr"] = "Asuri",
["ass"] = "Ipulo",
["ast"] = "อัสตูเรียส",
["asu"] = "Tocantins Asurini",
["asv"] = "Asoa",
["asw"] = "Australian Aboriginal Sign Language",
["asx"] = "Muratayak",
["asy"] = "Yaosakor Asmat",
["asz"] = "As",
["ata"] = "Pele-Ata",
["atb"] = "Zaiwa",
["atc"] = "Atsahuaca",
["atd"] = "Ata Manobo",
["ate"] = "Atemble",
["atg"] = "Okpela",
["ath-nic"] = "Nicola",
["ath-pro"] = "Proto-Athabaskan",
["ati"] = "Attié",
["atj"] = "Atikamekw",
["atk"] = "Ati",
["atl"] = "Mount Iraya Agta",
["atm"] = "Ata",
["ato"] = "Atong (Cameroon)",
["atp"] = "Pudtol Atta",
["atq"] = "Aralle-Tabulahan",
["atr"] = "Waimiri-Atroari",
["ats"] = "Gros Ventre",
["att"] = "Pamplona Atta",
["atu"] = "Reel",
["atv"] = "อัลไตเหนือ",
["atw"] = "Atsugewi",
["atx"] = "Arutani",
["aty"] = "อาเนตยูม",
["atz"] = "Arta",
["aua"] = "Asumboa",
["aub"] = "Alugu",
["auc"] = "Huaorani",
["aud"] = "Anuta",
["auf-pro"] = "Proto-Arawa",
["aug"] = "Aguna",
["auh"] = "Aushi",
["aui"] = "Anuki",
["auj"] = "Awjila",
["auk"] = "Heyo",
["aul"] = "Aulua",
["aum"] = "Asu",
["aun"] = "Molmo One",
["auo"] = "Auyokawa",
["aup"] = "Makayam",
["auq"] = "Anus",
["aur"] = "Aruek",
["aus-alu"] = "Alungul",
["aus-and"] = "Andjingith",
["aus-ang"] = "Angkula",
["aus-arn-pro"] = "Proto-Arnhem",
["aus-bra"] = "Barranbinya",
["aus-brm"] = "Barunggam",
["aus-cww-pro"] = "Proto-Central New South Wales",
["aus-dal-pro"] = "Proto-Daly",
["aus-guw"] = "Guwar",
["aus-lsw"] = "Little Swanport",
["aus-mbi"] = "Mbiywom",
["aus-ngk"] = "Ngkoth",
["aus-nyu-pro"] = "Proto-Nyulnyulan",
["aus-pam-pro"] = "Proto-Pama-Nyungan",
["aus-tul"] = "Tulua",
["aus-uwi"] = "Uwinymil",
["aus-wdj-pro"] = "Proto-Iwaidjan",
["aus-won"] = "Wong-gie",
["aus-wul"] = "Wulguru",
["aus-ynk"] = "Yangkaal",
["aut"] = "Austral",
["auu"] = "Auye",
["auw"] = "Awyi",
["aux"] = "Aurá",
["auy"] = "Auyana",
["auz"] = "อาหรับแบบอุซเบกิสถาน",
["av"] = "อะวาร์",
["avb"] = "Avau",
["avd"] = "Alviri-Vidari",
["avi"] = "Avikam",
["avk"] = "โคทาวา",
["avm"] = "Angkamuthi",
["avn"] = "Avatime",
["avo"] = "Agavotaguerra",
["avs"] = "Aushiri",
["avt"] = "Au",
["avu"] = "Avokaya",
["avv"] = "Avá-Canoeiro",
["awa"] = "อวัธ",
["awb"] = "Awa (New Guinea)",
["awc"] = "Cicipu",
["awd-ama"] = "Amarizana",
["awd-amc-pro"] = "Proto-Amuesha-Chamicuro",
["awd-ana"] = "Anauyá",
["awd-apo"] = "Apolista",
["awd-cab"] = "Cabre",
["awd-gnu"] = "Guinau",
["awd-kar"] = "Cariay",
["awd-kaw"] = "Kawishana",
["awd-kmp-pro"] = "Proto-Kampa",
["awd-kus"] = "Kustenau",
["awd-man"] = "Manao",
["awd-mar"] = "Marawan",
["awd-mpr"] = "Maipure",
["awd-mrt"] = "Mariaté",
["awd-nwk-pro"] = "Proto-Nawiki",
["awd-pai"] = "Paikoneka",
["awd-pas"] = "Pasé",
["awd-pro"] = "Proto-Arawak",
["awd-prw-pro"] = "Proto-Paresi-Waura",
["awd-she"] = "Shebayo",
["awd-taa-pro"] = "Proto-Ta-Arawak",
["awd-wai"] = "Wainumá",
["awd-yum"] = "Yumana",
["awe"] = "Awetí",
["awg"] = "Anguthimri",
["awh"] = "Awbono",
["awi"] = "Aekyom",
["awk"] = "Awabakal",
["awm"] = "Arawum",
["awn"] = "Awngi",
["awo"] = "Awak",
["awr"] = "Awera",
["aws"] = "South Awyu",
["awt"] = "Araweté",
["awu"] = "Central Awyu",
["awv"] = "Jair Awyu",
["aww"] = "Awun",
["awx"] = "Awara",
["awy"] = "Edera Awyu",
["axb"] = "Abipón",
["axe"] = "Ayerrerenge",
["axg"] = "Arára (Mato Grosso)",
["axk"] = "Aka (Central Africa)",
["axl"] = "Lower Southern Aranda",
["axm"] = "อาร์มีเนียกลาง",
["axx"] = "Xârâgurè",
["ay"] = "ไอย์มารา",
["aya"] = "Awar",
["ayb"] = "Ayizo",
["ayd"] = "Ayabadhu",
["aye"] = "Ayere",
["ayg"] = "Nyanga (Togo)",
["ayi"] = "Leyigha",
["ayk"] = "Akuku",
["ayl"] = "อาหรับแบบลิเบีย",
["ayn"] = "อาหรับแบบเยเมน",
["ayo"] = "Ayoreo",
["ayp"] = "อาหรับแบบเมโสโปเตเมียเหนือ",
["ayq"] = "Ayi",
["ays"] = "Sorsogon Ayta",
["ayt"] = "Bataan Ayta",
["ayu"] = "Ayu",
["ayy"] = "Tayabas Ayta",
["ayz"] = "Maybrat",
["az"] = "อาเซอร์ไบจาน",
["aza"] = "Azha",
["azc-caz"] = "Cazcan",
["azc-cup-pro"] = "Proto-Cupan",
["azc-ktn"] = "Kitanemuk",
["azc-nah-pro"] = "นาวันดั้งเดิม",
["azc-num-pro"] = "Proto-Numic",
["azc-pro"] = "ยูโต-แอซเทกันดั้งเดิม",
["azc-tak-pro"] = "Proto-Takic",
["azc-tat"] = "Tataviam",
["azd"] = "Eastern Durango Nahuatl",
["azg"] = "San Pedro Amuzgos Amuzgo",
["azm"] = "Ipalapa Amuzgo",
["azn"] = "Western Durango Nahuatl",
["azo"] = "Awing",
["azt"] = "Faire Atta",
["azz"] = "Highland Puebla Nahuatl",
["ba"] = "แบชเคียร์",
["baa"] = "Babatana",
["bab"] = "Bainouk-Gunyuño",
["bac"] = "Baduy",
["bae"] = "Baré",
["baf"] = "Nubaca",
["bag"] = "Tuki",
["bah"] = "Bahamian Creole",
["baj"] = "Barakai",
["bal"] = "บาโลจ",
["ban"] = "บาหลี",
["bao"] = "Waimaha",
["bap"] = "Bantawa",
["bar"] = "บาวาเรีย",
["bas"] = "Basaa",
["bau"] = "Badanchi",
["bav"] = "Babungo",
["baw"] = "Bambili-Bambui",
["bax"] = "Bamum",
["bay"] = "Batuley",
["bba"] = "Baatonum",
["bbb"] = "Barai",
["bbc"] = "Toba Batak",
["bbd"] = "Bau",
["bbe"] = "Bangba",
["bbf"] = "Baibai",
["bbg"] = "Barama",
["bbh"] = "Bugan",
["bbi"] = "Barombi",
["bbj"] = "Ghomala'",
["bbk"] = "Babanki",
["bbl"] = "บัตส์",
["bbm"] = "Babango",
["bbn"] = "Uneapa",
["bbo"] = "Konabéré",
["bbp"] = "West Central Banda",
["bbq"] = "Bamali",
["bbr"] = "Girawa",
["bbs"] = "Bakpinka",
["bbt"] = "Mburku",
["bbu"] = "Bakulung",
["bbv"] = "Karnai",
["bbw"] = "Baba",
["bbx"] = "Bubia",
["bby"] = "Befang",
["bca"] = "Central Bai",
["bcb"] = "Bainouk-Samik",
["bcd"] = "North Babar",
["bce"] = "Bamenyam",
["bcf"] = "Bamu",
["bcg"] = "Baga Pokur",
["bch"] = "Bariai",
["bci"] = "Baoule",
["bcj"] = "Bardi",
["bck"] = "Bunaba",
["bcl"] = "บีโคลตอนกลาง",
["bcm"] = "Banoni",
["bcn"] = "Bibaali",
["bco"] = "Kaluli",
["bcp"] = "Bali",
["bcq"] = "Bench",
["bcr"] = "Babine-Witsuwit'en",
["bcs"] = "Kohumono",
["bct"] = "Bendi",
["bcu"] = "Biliau",
["bcv"] = "Shoo-Minda-Nye",
["bcw"] = "Bana",
["bcy"] = "Bacama",
["bcz"] = "Bainouk-Gunyaamolo",
["bda"] = "Bayot",
["bdb"] = "Basap",
["bdc"] = "Emberá-Baudó",
["bdd"] = "Bunama",
["bde"] = "Bade",
["bdf"] = "Biage",
["bdg"] = "Bonggi",
["bdh"] = "Tara Baka",
["bdi"] = "Burun",
["bdj"] = "Bai (South Sudan)",
["bdk"] = "Budukh",
["bdl"] = "บาเจาแบบอินโดนีเซีย",
["bdm"] = "Buduma",
["bdn"] = "Baldemu",
["bdo"] = "Morom",
["bdp"] = "Bende",
["bdq"] = "บะห์นัร",
["bdr"] = "บาเจาแบบเวสต์โคสต์",
["bds"] = "Burunge",
["bdt"] = "Bokoto",
["bdu"] = "Oroko",
["bdv"] = "Bodo Parja",
["bdw"] = "Baham",
["bdx"] = "Budong-Budong",
["bdy"] = "Bandjalang",
["bdz"] = "Badeshi",
["be"] = "เบลารุส",
["bea"] = "Beaver",
["beb"] = "Bebele",
["bec"] = "Iceve-Maci",
["bed"] = "Bedoanas",
["bee"] = "Byangsi",
["bef"] = "Benabena",
["beg"] = "Belait",
["beh"] = "Biali",
["bei"] = "Bekati'",
["bej"] = "Beja",
["bek"] = "Bebeli",
["bem"] = "Bemba",
["beo"] = "Beami",
["bep"] = "Besoa",
["beq"] = "Beembe",
["ber-fog"] = "Fogaha",
["ber-pro"] = "เบอร์เบอร์ดั้งเดิม",
["ber-zuw"] = "Zuwara",
["bes"] = "Besme",
["bet"] = "Guiberoua Bété",
["beu"] = "บลาการ์",
["bev"] = "Daloa Bété",
["bew"] = "เบอตาวี",
["bex"] = "Jur Modo",
["bey"] = "Akuwagel",
["bez"] = "Kibena",
["bfa"] = "Bari",
["bfb"] = "Pauri Bareli",
["bfc"] = "Panyi Bai",
["bfd"] = "Bafut",
["bfe"] = "Betaf",
["bff"] = "Bofi",
["bfg"] = "Busang Kayan",
["bfh"] = "Blafe",
["bfi"] = "British Sign Language",
["bfj"] = "Bafanji",
["bfk"] = "Ban Khor Sign Language",
["bfl"] = "Banda-Ndélé",
["bfm"] = "Mmen",
["bfn"] = "Bunak",
["bfo"] = "Malba Birifor",
["bfp"] = "Beba",
["bfq"] = "พทคะ",
["bfr"] = "Bazigar",
["bfs"] = "Southern Bai",
["bft"] = "บัลติ",
["bfu"] = "Gahri",
["bfw"] = "Bondo",
["bfx"] = "Bantayanon",
["bfy"] = "Bagheli",
["bfz"] = "Mahasu Pahari",
["bg"] = "บัลแกเรีย",
["bga"] = "Gwamhi-Wuri",
["bgb"] = "Bobongko",
["bgc"] = "หริยาณวี",
["bgd"] = "Rathwi Bareli",
["bge"] = "Bauria",
["bgf"] = "Bangandu",
["bgg"] = "Bugun",
["bgi"] = "Giangan",
["bgj"] = "Bangolan",
["bgk"] = "Bit",
["bgl"] = "Bo",
["bgo"] = "Baga Koga",
["bgq"] = "Bagri",
["bgr"] = "Bawm Chin",
["bgs"] = "Tagabawa",
["bgt"] = "Bughotu",
["bgu"] = "Mbongno",
["bgv"] = "Warkay-Bipim",
["bgw"] = "Bhatri",
["bgx"] = "Balkan Gagauz Turkish",
["bgy"] = "Benggoi",
["bgz"] = "Banggai",
["bh"] = "พิหาร",
["bha"] = "Bharia",
["bhb"] = "Bhili",
["bhc"] = "Biga",
["bhd"] = "Bhadrawahi",
["bhe"] = "Bhaya",
["bhf"] = "Odiai",
["bhg"] = "Binandere",
["bhh"] = "Bukhari",
["bhi"] = "Bhilali",
["bhj"] = "Bahing",
["bhl"] = "Bimin",
["bhm"] = "Bathari",
["bhn"] = "Bohtan Neo-Aramaic",
["bho"] = "โภชปุระ",
["bhp"] = "Bima",
["bhq"] = "Tukang Besi South",
["bhs"] = "Buwal",
["bht"] = "Bhattiyali",
["bhu"] = "Bhunjia",
["bhv"] = "Bahau",
["bhw"] = "Biak",
["bhx"] = "Bhalay",
["bhy"] = "Bhele",
["bhz"] = "Bada",
["bi"] = "บิสลามา",
["bia"] = "Badimaya",
["bib"] = "Bissa",
["bic"] = "Bikaru",
["bid"] = "Bidiyo",
["bie"] = "Bepour",
["bif"] = "Biafada",
["big"] = "Biangai",
["bij"] = "Kwanka",
["bil"] = "Bile",
["bim"] = "Bimoba",
["bin"] = "Edo",
["bio"] = "Nai",
["bip"] = "Bila",
["biq"] = "Bipi",
["bir"] = "Bisorio",
["bit"] = "Berinomo",
["biu"] = "Biete",
["biv"] = "Southern Birifor",
["biw"] = "Kol (Cameroon)",
["bix"] = "Bijori",
["biy"] = "Birhor",
["biz"] = "Baloi",
["bja"] = "Budza",
["bjb"] = "Barngarla",
["bjc"] = "Bariji",
["bje"] = "Biao-Jiao Mien",
["bjf"] = "Barzani Jewish Neo-Aramaic",
["bjg"] = "Bidyogo",
["bjh"] = "Bahinemo",
["bji"] = "Burji",
["bjj"] = "Kannauji",
["bjk"] = "Barok",
["bjl"] = "Bulu (New Guinea)",
["bjm"] = "Bajelani",
["bjn"] = "บันจาร์",
["bjo"] = "Mid-Southern Banda",
["bjp"] = "Fanamaket",
["bjr"] = "Binumarien",
["bjs"] = "Bajan",
["bjt"] = "Balanta-Ganja",
["bju"] = "Busuu",
["bjv"] = "Bedjond",
["bjw"] = "Bakwé",
["bjx"] = "Banao Itneg",
["bjy"] = "Bayali",
["bjz"] = "Baruga",
["bka"] = "Kyak",
["bkc"] = "Baka",
["bkd"] = "บีนูกิด",
["bkf"] = "Beeke",
["bkg"] = "Buraka",
["bkh"] = "Bakoko",
["bki"] = "Baki",
["bkj"] = "Pande",
["bkk"] = "Brokskat",
["bkl"] = "Berik",
["bkm"] = "Kom (Cameroon)",
["bkn"] = "Bukitan",
["bko"] = "Kwa'",
["bkp"] = "Iboko",
["bkq"] = "Bakairí",
["bkr"] = "Bakumpai",
["bks"] = "Masbate Sorsogon",
["bkt"] = "Boloki",
["bku"] = "Buhid",
["bkv"] = "Bekwarra",
["bkw"] = "Bekwel",
["bkx"] = "Baikeno",
["bky"] = "Bokyi",
["bkz"] = "Bungku",
["bla"] = "Blackfoot",
["blb"] = "Bilua",
["blc"] = "Bella Coola",
["bld"] = "Bolango",
["ble"] = "Balanta-Kentohe",
["blf"] = "Buol",
["blg"] = "Balau",
["blh"] = "Kuwaa",
["bli"] = "Bolia",
["blj"] = "Bulungan",
["blk"] = "กะเหรี่ยงปะโอ",
["bll"] = "Biloxi",
["blm"] = "Beli",
["bln"] = "Southern Catanduanes Bicolano",
["blo"] = "Anii",
["blp"] = "Blablanga",
["blq"] = "Baluan-Pam",
["blr"] = "Blang",
["bls"] = "Balaesang",
["blt"] = "ไทดำ",
["blv"] = "Kibala",
["blw"] = "Balangao",
["blx"] = "Mag-Indi Ayta",
["bly"] = "Notre",
["blz"] = "Balantak",
["bm"] = "บัมบารา",
["bma"] = "Lame",
["bmb"] = "Bembe",
["bmc"] = "Biem",
["bmd"] = "Baga Manduri",
["bme"] = "Limassa",
["bmf"] = "Bom",
["bmg"] = "Bamwe",
["bmh"] = "Kein",
["bmi"] = "Bagirmi",
["bmj"] = "Bote-Majhi",
["bmk"] = "Ghayavi",
["bml"] = "Bomboli",
["bmn"] = "Bina",
["bmo"] = "Bambalang",
["bmp"] = "Bulgebi",
["bmq"] = "Bomu",
["bmr"] = "Muinane",
["bmt"] = "Biao Mon",
["bmu"] = "Somba-Siawari",
["bmv"] = "Bum",
["bmw"] = "Bomwali",
["bmx"] = "Baimak",
["bmz"] = "Baramu",
["bn"] = "เบงกอล",
["bna"] = "Bonerate",
["bnb"] = "Bookan",
["bnd"] = "Banda",
["bne"] = "Bintauna",
["bnf"] = "Masiwang",
["bng"] = "Benga",
["bni"] = "Bangi",
["bnj"] = "Eastern Tawbuid",
["bnk"] = "Bierebo",
["bnl"] = "Boon",
["bnm"] = "Batanga",
["bnn"] = "Bunun",
["bno"] = "อาซี",
["bnp"] = "Bola",
["bnq"] = "Bantik",
["bnr"] = "Butmas-Tur",
["bns"] = "Bundeli",
["bnt-bal"] = "Balong",
["bnt-bon"] = "Boma Nkuu",
["bnt-boy"] = "Boma Yumu",
["bnt-bwa"] = "Bwala",
["bnt-cmw"] = "Chimwiini",
["bnt-ind"] = "Indanga",
["bnt-lal"] = "Lala (South Africa)",
["bnt-mpi"] = "Mpiin",
["bnt-mpu"] = "Mpuono",
["bnt-ngu-pro"] = "งูนีดั้งเดิม",
["bnt-phu"] = "Phuthi",
["bnt-pro"] = "แบนทูดั้งเดิม",
["bnt-sab-pro"] = "Proto-Sabaki",
["bnt-sbo"] = "South Boma",
["bnt-sts-pro"] = "Proto-Sotho-Tswana",
["bnu"] = "Bentong",
["bnv"] = "Beneraf",
["bnw"] = "Bisis",
["bnx"] = "Bangubangu",
["bny"] = "Bintulu",
["bnz"] = "Beezen",
["bo"] = "ทิเบต",
["boa"] = "Bora",
["bob"] = "Aweer",
["boe"] = "Mundabli",
["bof"] = "Bolon",
["bog"] = "Bamako Sign Language",
["boh"] = "North Boma",
["boi"] = "Barbareño",
["boj"] = "Anjam",
["bok"] = "Bonjo",
["bol"] = "โบล",
["bom"] = "Berom",
["bon"] = "Bine",
["boo"] = "Tiemacèwè Bozo",
["bop"] = "Bonkiman",
["boq"] = "Bogaya",
["bor"] = "Borôro",
["bot"] = "Bongo",
["bou"] = "Bondei",
["bov"] = "Tuwuli",
["bow"] = "Rema",
["box"] = "Buamu",
["boy"] = "Bodo (Central Africa)",
["boz"] = "Tiéyaxo Bozo",
["bpa"] = "Daakaka",
["bpd"] = "Banda-Banda",
["bpg"] = "Bonggo",
["bph"] = "Botlikh",
["bpi"] = "Bagupi",
["bpj"] = "Binji",
["bpk"] = "Orowe",
["bpl"] = "Broome Pearling Lugger Pidgin",
["bpm"] = "Biyom",
["bpn"] = "Dzao Min",
["bpo"] = "Anasi",
["bpp"] = "Kaure",
["bpq"] = "Banda Malay",
["bpr"] = "Koronadal Blaan",
["bps"] = "Sarangani Blaan",
["bpt"] = "Barrow Point",
["bpu"] = "Bongu",
["bpv"] = "Bian Marind",
["bpx"] = "Palya Bareli",
["bpy"] = "Bishnupriya Manipuri",
["bpz"] = "Bilba",
["bqa"] = "Tchumbuli",
["bqb"] = "Bagusa",
["bqc"] = "Boko",
["bqd"] = "Bung",
["bqf"] = "Baga Kaloum",
["bqg"] = "Bago-Kusuntu",
["bqh"] = "Baima",
["bqi"] = "Bakhtiari",
["bqj"] = "Bandial",
["bqk"] = "Banda-Mbrès",
["bql"] = "Bilakura",
["bqm"] = "Wumboko",
["bqn"] = "Bulgarian Sign Language",
["bqo"] = "Balo",
["bqp"] = "Busa",
["bqq"] = "Biritai",
["bqr"] = "Burusu",
["bqs"] = "Bosngun",
["bqt"] = "Bamukumbit",
["bqu"] = "Boguru",
["bqv"] = "Begbere-Ejar",
["bqw"] = "Buru (Nigeria)",
["bqx"] = "Baangi",
["bqy"] = "Bengkala Sign Language",
["bqz"] = "Bakaka",
["br"] = "เบรอตง",
["bra"] = "พรัช",
["brb"] = "Lave",
["brc"] = "Berbice Creole Dutch",
["brd"] = "Baraamu",
["brf"] = "Bera",
["brg"] = "Baure",
["brh"] = "บราฮุอี",
["bri"] = "Mokpwe",
["brj"] = "Bieria",
["brk"] = "Birgid",
["brl"] = "Birwa",
["brm"] = "Barambu",
["brn"] = "Boruca",
["bro"] = "Brokkat",
["brp"] = "Barapasi",
["brq"] = "Breri",
["brr"] = "Birao",
["brs"] = "Baras",
["brt"] = "Bitare",
["bru"] = "บรูตะวันออก",
["brv"] = "บรูตะวันตก",
["brw"] = "Bellari",
["brx"] = "โบโด",
["bry"] = "Burui",
["brz"] = "Bilbil",
["bsa"] = "Abinomn",
["bsb"] = "Brunei Bisaya",
["bsc"] = "Bassari",
["bse"] = "Wushi",
["bsf"] = "Bauchi",
["bsg"] = "Bashkardi",
["bsh"] = "Kamkata-viri",
["bsi"] = "Bassossi",
["bsj"] = "Bangwinji",
["bsk"] = "Burushaski",
["bsl"] = "Basa-Gumna",
["bsm"] = "Busami",
["bsn"] = "Barasana",
["bso"] = "Buso",
["bsp"] = "Baga Sitemu",
["bsq"] = "Bassa",
["bsr"] = "Bassa-Kontagora",
["bss"] = "Akoose",
["bst"] = "Basketo",
["bsu"] = "Bahonsuai",
["bsv"] = "Baga Sobané",
["bsw"] = "Baiso",
["bsx"] = "Yangkam",
["bsy"] = "Sabah Bisaya",
["bta"] = "Bata",
["btc"] = "Bati (Cameroon)",
["btd"] = "Dairi Batak",
["bte"] = "Gamo-Ningi",
["btf"] = "Birgit",
["btg"] = "Gagnoa Bété",
["bth"] = "Biatah Bidayuh",
["bti"] = "Burate",
["btj"] = "Bacanese Malay",
["btk-pro"] = "Proto-Batak",
["btm"] = "Mandailing Batak",
["btn"] = "Ratagnon",
["bto"] = "Iriga Bicolano",
["btp"] = "Budibud",
["btq"] = "Batek",
["btr"] = "Baetora",
["bts"] = "Simalungun Batak",
["btt"] = "Bete-Bendi",
["btu"] = "Batu",
["btv"] = "Bateri",
["btw"] = "Butuanon",
["btx"] = "Karo Batak",
["bty"] = "Bobot",
["btz"] = "Alas-Kluet Batak",
["bua"] = "บูร์ยัต",
["bub"] = "Bua",
["bud"] = "Ntcham",
["bue"] = "Beothuk",
["buf"] = "Bushoong",
["bug"] = "บูกิส",
["buh"] = "Younuo Bunu",
["bui"] = "Bongili",
["buj"] = "Basa-Gurmana",
["buk"] = "Bukawa",
["bum"] = "Bulu (Cameroon)",
["bun"] = "Sherbro",
["buo"] = "Terei",
["bup"] = "Busoa",
["buq"] = "Brem",
["bus"] = "Bokobaru",
["but"] = "Bungain",
["buu"] = "Budu",
["buv"] = "Bun",
["buw"] = "Bubi",
["bux"] = "Boghom",
["buy"] = "Mmani",
["bva"] = "Barein",
["bvb"] = "Bube",
["bvc"] = "Baelelea",
["bvd"] = "Baeggu",
["bve"] = "Berau Malay",
["bvf"] = "Boor",
["bvg"] = "Bonkeng",
["bvh"] = "Bure",
["bvi"] = "Belanda Viri",
["bvj"] = "Baan",
["bvk"] = "Bukat",
["bvl"] = "Bolivian Sign Language",
["bvm"] = "Bamunka",
["bvn"] = "Buna",
["bvo"] = "Bolgo",
["bvp"] = "Bumang",
["bvq"] = "Birri",
["bvr"] = "Burarra",
["bvt"] = "Bati (Indonesia)",
["bvu"] = "Bukit Malay",
["bvv"] = "Baniva",
["bvw"] = "Boga",
["bvx"] = "Babole",
["bvy"] = "Baybayanon",
["bvz"] = "Bauzi",
["bwa"] = "Bwatoo",
["bwb"] = "Namosi-Naitasiri-Serua",
["bwc"] = "Bwile",
["bwd"] = "Bwaidoka",
["bwe"] = "Bwe Karen",
["bwf"] = "Boselewa",
["bwg"] = "Barwe",
["bwh"] = "Bishuo",
["bwi"] = "Baniwa",
["bwj"] = "Láá Láá Bwamu",
["bwk"] = "Bauwaki",
["bwl"] = "Bwela",
["bwm"] = "Biwat",
["bwn"] = "Wunai Bunu",
["bwo"] = "Shinasha",
["bwp"] = "Mandobo Bawah",
["bwq"] = "Southern Bobo",
["bwr"] = "Bura",
["bws"] = "Bomboma",
["bwt"] = "Bafaw",
["bwu"] = "Buli (Ghana)",
["bww"] = "Bwa",
["bwx"] = "Bu-Nao Bunu",
["bwy"] = "Cwi Bwamu",
["bwz"] = "Bwisi",
["bxa"] = "Bauro",
["bxb"] = "Belanda Bor",
["bxc"] = "Molengue",
["bxd"] = "Pela",
["bxe"] = "Ongota",
["bxf"] = "Bilur",
["bxg"] = "Bangala",
["bxh"] = "Buhutu",
["bxi"] = "Pirlatapa",
["bxj"] = "Bayungu",
["bxk"] = "Bukusu",
["bxl"] = "Jalkunan",
["bxn"] = "Burduna",
["bxo"] = "Barikanchi",
["bxp"] = "Bebil",
["bxq"] = "Beele",
["bxs"] = "Busam",
["bxv"] = "Berakou",
["bxw"] = "Banka",
["bxz"] = "Binahari",
["bya"] = "Palawan Batak",
["byb"] = "Bikya",
["byc"] = "Ubaghara",
["byd"] = "Benyadu'",
["bye"] = "Pouye",
["byf"] = "Bete",
["byg"] = "Baygo",
["byh"] = "Bujhyal",
["byi"] = "Buyu",
["byj"] = "Binawa",
["byk"] = "Biao",
["byl"] = "Bayono",
["bym"] = "Bidyara",
["byn"] = "Blin",
["byo"] = "Biyo",
["byp"] = "Bumaji",
["byq"] = "Basay",
["byr"] = "Baruya",
["bys"] = "Burak",
["byt"] = "Berti",
["byv"] = "Medumba",
["byw"] = "Belhariya",
["byx"] = "Qaqet",
["byz"] = "Banaro",
["bza"] = "Bandi",
["bzb"] = "Andio",
["bzd"] = "Bribri",
["bze"] = "Jenaama Bozo",
["bzf"] = "Boikin",
["bzg"] = "Babuza",
["bzh"] = "Mapos Buang",
["bzi"] = "บีซู",
["bzj"] = "Belizean Creole",
["bzk"] = "Nicaraguan Creole",
["bzl"] = "Boano (Sulawesi)",
["bzm"] = "Bolondo",
["bzn"] = "Boano (Maluku)",
["bzo"] = "Bozaba",
["bzp"] = "Kemberano",
["bzq"] = "Buli (Indonesia)",
["bzr"] = "Biri",
["bzs"] = "Brazilian Sign Language",
["bzu"] = "Burmeso",
["bzv"] = "Bebe",
["bzw"] = "Basa",
["bzx"] = "Hainyaxo Bozo",
["bzy"] = "Obanliku",
["bzz"] = "Evant",
["ca"] = "กาตาลา",
["caa"] = "Ch'orti'",
["cab"] = "Garifuna",
["cac"] = "Chuj",
["cad"] = "Caddo",
["cae"] = "Laalaa",
["caf"] = "Southern Carrier",
["cag"] = "Nivaclé",
["cah"] = "Cahuarano",
["caj"] = "Chané",
["cak"] = "Kaqchikel",
["cal"] = "Carolinian",
["cam"] = "Cèmuhî",
["can"] = "Chambri",
["cao"] = "Chácobo",
["cap"] = "Chipaya",
["caq"] = "คาร์นิโคบาร์",
["car"] = "Kari'na",
["cas"] = "Tsimané",
["cau-abz-pro"] = "Proto-Abkhaz-Abaza",
["cau-and-pro"] = "Proto-Andian",
["cau-ava-pro"] = "Proto-Avaro-Andian",
["cau-cir-pro"] = "Proto-Circassian",
["cau-drg-pro"] = "Proto-Dargwa",
["cau-lzg-pro"] = "Proto-Lezghian",
["cau-nec-pro"] = "คอเคเซียนตะวันออกเฉียงเหนือดั้งเดิม",
["cau-nkh-pro"] = "นัคดั้งเดิม",
["cau-nwc-pro"] = "คอเคเซียนตะวันตกเฉียงเหนือดั้งเดิม",
["cau-tsz-pro"] = "Proto-Tsezian",
["cav"] = "Cavineña",
["caw"] = "Kallawaya",
["cax"] = "Chiquitano",
["cay"] = "Cayuga",
["caz"] = "Canichana",
["cba-ata"] = "Atanques",
["cba-cat"] = "Catío Chibcha",
["cba-dor"] = "Dorasque",
["cba-dui"] = "Duit",
["cba-hue"] = "Huetar",
["cba-nut"] = "Nutabe",
["cba-pro"] = "Proto-Chibchan",
["cbb"] = "Cabiyarí",
["cbc"] = "Carapana",
["cbd"] = "Carijona",
["cbg"] = "Chimila",
["cbi"] = "Chachi",
["cbj"] = "Ede Cabe",
["cbk"] = "ชาบากาโน",
["cbl"] = "Bualkhaw Chin",
["cbn"] = "ญัฮกุร",
["cbo"] = "Izora",
["cbq"] = "Tsucuba",
["cbr"] = "Cashibo-Cacataibo",
["cbs"] = "Cashinahua",
["cbt"] = "Chayahuita",
["cbu"] = "Candoshi-Shapra",
["cbv"] = "Cacua",
["cbw"] = "Kinabalian",
["cby"] = "Carabayo",
["cca"] = "Cauca",
["ccc"] = "Chamicuro",
["ccd"] = "Cafundó",
["cce"] = "Chopi",
["ccg"] = "Chamba Daka",
["cch"] = "Atsam",
["ccj"] = "Kasanga",
["ccl"] = "Cutchi-Swahili",
["ccm"] = "Malaccan Creole Malay",
["cco"] = "Comaltepec Chinantec",
["ccp"] = "จักมา",
["ccr"] = "Cacaopera",
["ccs-gzn-pro"] = "จอร์เจียน-แซนดั้งเดิม",
["ccs-pro"] = "คาร์ทเวเลียนดั้งเดิม",
["cda"] = "Choni",
["cdc-cbm-pro"] = "ชาดิกตอนกลางดั้งเดิม",
["cdc-mas-pro"] = "Proto-Masa",
["cdc-pro"] = "ชาดิกดั้งเดิม",
["cdd-pro"] = "Proto-Caddoan",
["cde"] = "Chenchu",
["cdf"] = "Chiru",
["cdh"] = "Chambeali",
["cdi"] = "Chodri",
["cdj"] = "Churahi",
["cdm"] = "Chepang",
["cdn"] = "Chaudangsi",
["cdo"] = "หมิ่นตะวันออก",
["cdr"] = "Cinda-Regi-Tiyal",
["cds"] = "Chadian Sign Language",
["cdy"] = "Chadong",
["cdz"] = "Koda",
["ce"] = "เชเชน",
["cea"] = "Lower Chehalis",
["ceb"] = "เซบัวโน",
["ceg"] = "Chamacoco",
["cel-bry-pro"] = "บริทอนิกดั้งเดิม",
["cel-gal"] = "Gallaecian",
["cel-gau"] = "กอล",
["cel-pro"] = "เคลติกดั้งเดิม",
["cen"] = "Cen",
["cet"] = "Centúúm",
["cfa"] = "Dijim-Bwilim",
["cfd"] = "Cara",
["cfg"] = "Como Karim",
["cfm"] = "Falam Chin",
["cga"] = "Changriwa",
["cgc"] = "Kagayanen",
["cgg"] = "Rukiga",
["cgk"] = "Chocangaca",
["ch"] = "ชามอร์โร",
["chb"] = "Chibcha",
["chc"] = "Catawba",
["chd"] = "Highland Oaxaca Chontal",
["chf"] = "Chontal Maya",
["chg"] = "ชากาทาย",
["chh"] = "Chinook",
["chi-pro"] = "Proto-Chimakuan",
["chj"] = "Ojitlán Chinantec",
["chk"] = "Chuukese",
["chl"] = "Cahuilla",
["chm-pro"] = "Proto-Mari",
["chn"] = "Chinook Jargon",
["cho"] = "Choctaw",
["chp"] = "Chipewyan",
["chq"] = "Quiotepec Chinantec",
["chr"] = "เชโรกี",
["cht"] = "Cholón",
["chw"] = "Chuabo",
["chx"] = "Chantyal",
["chy"] = "เชเยนน์",
["chz"] = "Ozumacín Chinantec",
["cia"] = "Cia-Cia",
["cib"] = "Ci Gbe",
["cic"] = "Chickasaw",
["cid"] = "Chimariko",
["cie"] = "Cineni",
["cih"] = "Chinali",
["cik"] = "Chitkuli Kinnauri",
["cim"] = "คิมบรี",
["cin"] = "Cinta Larga",
["cip"] = "Chiapanec",
["cir"] = "Tinrin",
["ciy"] = "Chaima",
["cja"] = "จามตะวันตก",
["cje"] = "Chru",
["cjh"] = "Upper Chehalis",
["cji"] = "Chamalal",
["cjk"] = "Chokwe",
["cjm"] = "จามตะวันออก",
["cjn"] = "Chenapian",
["cjo"] = "Ashéninka Pajonal",
["cjp"] = "Cabécar",
["cjs"] = "โชร์",
["cjv"] = "Chuave",
["cjy"] = "จิ้น",
["ckb"] = "เคิร์ดตอนกลาง",
["ckh"] = "Chak",
["ckl"] = "Cibak",
["ckn"] = "Kaang Chin",
["cko"] = "Anufo",
["ckq"] = "Kajakse",
["ckr"] = "Kairak",
["cks"] = "Tayo",
["ckt"] = "ชุกชี",
["cku"] = "Koasati",
["ckv"] = "กบาลัน",
["ckx"] = "Caka",
["cky"] = "Cakfem-Mushere",
["ckz"] = "Kaqchikel-K'iche' Mixed Language",
["cla"] = "Ron",
["clc"] = "Chilcotin",
["cld"] = "Chaldean Neo-Aramaic",
["cle"] = "Lealao Chinantec",
["clh"] = "Chilisso",
["cli"] = "Chakali",
["clj"] = "Laitu Chin",
["clk"] = "Idu",
["cll"] = "Chala",
["clm"] = "Klallam",
["clo"] = "Lowland Oaxaca Chontal",
["clt"] = "Lutuv",
["clu"] = "Caluyanun",
["clw"] = "Chulym",
["cly"] = "Eastern Highland Chatino",
["cma"] = "หมะ",
["cmc-pro"] = "จามิกดั้งเดิม",
["cme"] = "Cerma",
["cmg"] = "มองโกเลียคลาสสิก",
["cmi"] = "Emberá-Chamí",
["cml"] = "Campalagian",
["cmm"] = "Michigamea",
["cmn"] = "จีนกลาง",
["cmo"] = "มนองตอนกลาง",
["cmr"] = "Mro Chin",
["cms"] = "Messapic",
["cmt"] = "Camtho",
["cna"] = "Changthang",
["cnb"] = "Chinbon Chin",
["cnc"] = "Cốông",
["cng"] = "Northern Qiang",
["cnh"] = "Lai",
["cni"] = "Asháninka",
["cnk"] = "Khumi Chin",
["cnl"] = "Lalana Chinantec",
["cno"] = "Con",
["cnp"] = "ผิงเหนือ",
["cns"] = "Central Asmat",
["cnt"] = "Tepetotutla Chinantec",
["cnu"] = "Chenoua",
["cnw"] = "Ngawn Chin",
["cnx"] = "Middle Cornish",
["co"] = "คอร์ซิกา",
["coa"] = "Cocos Islands Malay",
["cob"] = "Chicomuceltec",
["coc"] = "Cocopa",
["cod"] = "Cocama",
["coe"] = "Koreguaje",
["cof"] = "Tsafiki",
["cog"] = "ชอง",
["coh"] = "Chichonyi-Chidzihana-Chikauma",
["coj"] = "Cochimi",
["cok"] = "Santa Teresa Cora",
["col"] = "Columbia-Wenatchi",
["com"] = "Comanche",
["con"] = "Cofán",
["coo"] = "Comox",
["cop"] = "คอปติก",
["coq"] = "Coquille",
["cot"] = "Caquinte",
["cou"] = "Wamey",
["cov"] = "เฉ่าเหมียว",
["cow"] = "Cowlitz",
["cox"] = "Nanti",
["coy"] = "Coyaima",
["coz"] = "Chochotec",
["cpa"] = "Palantla Chinantec",
["cpb"] = "Ucayali-Yurúa Ashéninka",
["cpc"] = "Ajyíninka Apurucayali",
["cpg"] = "Cappadocian Greek",
["cpi"] = "Chinese Pidgin English",
["cpn"] = "Cherepon",
["cpo"] = "Kpee",
["cps"] = "Capiznon",
["cpu"] = "Pichis Ashéninka",
["cpx"] = "ผูเซียน",
["cpy"] = "South Ucayali Ashéninka",
["cqd"] = "Chuanqiandian Cluster Miao",
["cr"] = "ครี",
["cra"] = "Chara",
["crb"] = "Kalinago",
["crc"] = "Lonwolwol",
["crd"] = "Coeur d'Alene",
["crf"] = "Caramanta",
["crg"] = "Michif",
["crh"] = "ตาตาร์แบบไครเมีย",
["cri"] = "Sãotomense",
["crj"] = "Southern East Cree",
["crk"] = "Plains Cree",
["crl"] = "Northern East Cree",
["crm"] = "Moose Cree",
["crn"] = "Cora",
["cro"] = "Crow",
["crp-bip"] = "Basque-Icelandic Pidgin",
["crp-gep"] = "West Greenlandic Pidgin",
["crp-kia"] = "Kiautschou German Pidgin",
["crp-mar"] = "Maroon Spirit Language",
["crp-mpp"] = "Macau Pidgin Portuguese",
["crp-rsn"] = "Russenorsk",
["crp-slb"] = "Solombala English",
["crp-spp"] = "Samoan Plantation Pidgin",
["crp-tpr"] = "Taimyr Pidgin Russian",
["crq"] = "Iyo'wujwa Chorote",
["crr"] = "Carolina Algonquian",
["crs"] = "Seychellois Creole",
["crt"] = "Iyojwa'ja Chorote",
["crv"] = "Chaura",
["crw"] = "Chrau",
["crx"] = "Carrier",
["cry"] = "Cori",
["crz"] = "Cruzeño",
["cs"] = "เช็ก",
["csa"] = "Chiltepec Chinantec",
["csb"] = "คาชุบ",
["csc"] = "Catalan Sign Language",
["csd"] = "Chiangmai Sign Language",
["cse"] = "Czech Sign Language",
["csf"] = "Cuban Sign Language",
["csg"] = "Chilean Sign Language",
["csh"] = "Asho Chin",
["csi"] = "Coast Miwok",
["csj"] = "Songlai Chin",
["csk"] = "Jola-Kasa",
["csl"] = "Chinese Sign Language",
["csm"] = "Central Sierra Miwok",
["csn"] = "Colombian Sign Language",
["cso"] = "Sochiapam Chinantec",
["csp"] = "ผิงใต้",
["csq"] = "Croatian Sign Language",
["csr"] = "Costa Rican Sign Language",
["css"] = "Southern Ohlone",
["cst"] = "Northern Ohlone",
["csu-bba-pro"] = "Proto-Bongo-Bagirmi",
["csu-maa-pro"] = "Proto-Mangbetu",
["csu-pro"] = "Proto-Central Sudanic",
["csu-sar-pro"] = "Proto-Sara",
["csv"] = "Sumtu Chin",
["csw"] = "Swampy Cree",
["csx"] = "Cambodian Sign Language",
["csy"] = "Siyin Chin",
["csz"] = "Coos",
["cta"] = "Tataltepec Chatino",
["ctc"] = "Chetco-Tolowa",
["ctd"] = "Tedim Chin",
["cte"] = "Tepinapa Chinantec",
["ctg"] = "Chittagonian",
["cth"] = "Thaiphum Chin",
["ctl"] = "Tlacoatzintepec Chinantec",
["ctm"] = "Chitimacha",
["ctn"] = "Chhintange",
["cto"] = "Emberá-Catío",
["ctp"] = "Western Highland Chatino",
["cts"] = "Northern Catanduanes Bicolano",
["ctt"] = "Wayanad Chetti",
["ctu"] = "Chol",
["ctz"] = "Zacatepec Chatino",
["cu"] = "สลาวอนิกคริสตจักรเก่า",
["cua"] = "Cua",
["cub"] = "Cubeo",
["cuc"] = "Usila Chinantec",
["cug"] = "Cung",
["cuh"] = "Chuka",
["cui"] = "Cuiba",
["cuj"] = "Mashco Piro",
["cuk"] = "Kuna",
["cul"] = "Culina",
["cuo"] = "Cumanagoto",
["cup"] = "Cupeño",
["cuq"] = "จุน",
["cur"] = "Chhulung",
["cus-ash"] = "Ashraaf",
["cus-hec-pro"] = "Proto-Highland East Cushitic",
["cus-pro"] = "Proto-Cushitic",
["cus-som-pro"] = "โซมาลอยด์ดั้งเดิม",
["cus-sou-pro"] = "Proto-South Cushitic",
["cut"] = "Teutila Cuicatec",
["cuu"] = "Tai Ya",
["cuv"] = "Cuvok",
["cuw"] = "Chukwa",
["cux"] = "Tepeuxila Cuicatec",
["cuy"] = "Cuitlatec",
["cv"] = "ชูวัช",
["cvg"] = "Chug",
["cvn"] = "Valle Nacional Chinantec",
["cwa"] = "Kabwa",
["cwb"] = "Maindo",
["cwd"] = "Woods Cree",
["cwe"] = "Kwere",
["cwg"] = "Chewong",
["cwt"] = "Kuwaataay",
["cy"] = "เวลส์",
["cya"] = "Nopala Chatino",
["cyb"] = "Cayubaba",
["cyo"] = "Cuyunon",
["czh"] = "Huizhou",
["czk"] = "Knaanic",
["czn"] = "Zenzontepec Chatino",
["czo"] = "หมิ่นตอนกลาง",
["czt"] = "Zotung Chin",
["da"] = "เดนมาร์ก",
["daa"] = "Dangaléat",
["dac"] = "Dambi",
["dad"] = "Marik",
["dae"] = "Duupa",
["dag"] = "Dagbani",
["dah"] = "Gwahatike",
["dai"] = "Day",
["daj"] = "Dar Fur Daju",
["dak"] = "ดาโคตา",
["dal"] = "Dahalo",
["dam"] = "Damakawa",
["dao"] = "Daai Chin",
["daq"] = "Dandami Maria",
["dar"] = "Dargwa",
["das"] = "Daho-Doo",
["dau"] = "Dar Sila Daju",
["dav"] = "Taita",
["daw"] = "Davawenyo",
["dax"] = "Dayi",
["daz"] = "Dao",
["dba"] = "Bangime",
["dbb"] = "Deno",
["dbd"] = "Dadiya",
["dbe"] = "Dabe",
["dbf"] = "Edopi",
["dbg"] = "Dogul Dom",
["dbi"] = "Doka",
["dbj"] = "อีดาอัน",
["dbl"] = "Dyirbal",
["dbm"] = "Duguri",
["dbn"] = "Duriankere",
["dbo"] = "Dulbu",
["dbp"] = "Duwai",
["dbq"] = "Daba",
["dbr"] = "Dabarre",
["dbt"] = "Ben Tey",
["dbu"] = "Bondum Dom Dogon",
["dbv"] = "Dungu",
["dbw"] = "Bankan Tey Dogon",
["dby"] = "Dibiyaso",
["dcc"] = "Deccani",
["dcr"] = "เนเกอร์ฮอลันดส์",
["dda"] = "Dadi Dadi",
["ddd"] = "Dongotono",
["dde"] = "Doondo",
["ddg"] = "Fataluku",
["ddi"] = "Diodio",
["ddj"] = "Jaru",
["ddn"] = "Dendi",
["ddo"] = "Tsez",
["ddr"] = "Dhudhuroa",
["dds"] = "Donno So Dogon",
["ddw"] = "Dawera-Daweloor",
["de"] = "เยอรมัน",
["dec"] = "Dagik",
["ded"] = "Dedua",
["dee"] = "Dewoin",
["def"] = "Dezfuli",
["deg"] = "Degema",
["deh"] = "Dehwari",
["dei"] = "Demisa",
["dem"] = "Dem",
["dep"] = "Pidgin Delaware",
["der"] = "Deori",
["des"] = "Desano",
["dev"] = "Domung",
["dez"] = "Dengese",
["dga"] = "Southern Dagaare",
["dgb"] = "Bunoge",
["dgc"] = "Casiguran Dumagat Agta",
["dgd"] = "Dagaari Dioula",
["dge"] = "Degenan",
["dgg"] = "Doga",
["dgh"] = "Dghwede",
["dgi"] = "Northern Dagara",
["dgk"] = "Dagba",
["dgn"] = "Dagoman",
["dgo"] = "Hindi Dogri",
["dgr"] = "Dogrib",
["dgs"] = "Dogoso",
["dgt"] = "Ntra'ngith",
["dgw"] = "Daungwurrung",
["dgx"] = "Doghoro",
["dgz"] = "Daga",
["dhd"] = "Dhundhari",
["dhg"] = "Dhangu",
["dhi"] = "Dhimal",
["dhl"] = "Dhalandji",
["dhm"] = "Zemba",
["dhn"] = "Dhanki",
["dho"] = "Dhodia",
["dhr"] = "Tharrgari",
["dhs"] = "Dhaiso",
["dhu"] = "Dhurga",
["dhv"] = "Drehu",
["dhw"] = "Danuwar",
["dhx"] = "Dhungaloo",
["dia"] = "Dia",
["dib"] = "South Central Dinka",
["dic"] = "Lakota Dida",
["did"] = "Didinga",
["dif"] = "Dieri",
["dig"] = "Digo",
["dii"] = "Dimbong",
["dij"] = "Dai",
["dik"] = "Southwestern Dinka",
["dil"] = "Dilling",
["dim"] = "Dime",
["din"] = "Dinka",
["dio"] = "Dibo",
["dip"] = "Northeastern Dinka",
["dir"] = "Dirim",
["dis"] = "Dimasa",
["diu"] = "Gciriku",
["diw"] = "Northwestern Dinka",
["dix"] = "Dixon Reef",
["diy"] = "Diuwe",
["diz"] = "Ding",
["dja"] = "Djadjawurrung",
["djb"] = "Djinba",
["djc"] = "Dar Daju Daju",
["djd"] = "Jaminjung",
["dje"] = "Zarma",
["djf"] = "Djangun",
["dji"] = "Djinang",
["djj"] = "Ndjébbana",
["djk"] = "Aukan",
["djl"] = "Djiwarli",
["djm"] = "Jamsay",
["djn"] = "Djauan",
["djo"] = "Jangkang",
["djr"] = "Djambarrpuyngu",
["dju"] = "Kapriman",
["djw"] = "Djawi",
["dka"] = "Dakpa",
["dkk"] = "Dakka",
["dkr"] = "Kuijau",
["dks"] = "Southeastern Dinka",
["dkx"] = "Mazagway",
["dlg"] = "Dolgan",
["dlk"] = "Dahalik",
["dlm"] = "แดลเมเชีย",
["dln"] = "Darlong",
["dma"] = "Duma",
["dmb"] = "Mombo Dogon",
["dmc"] = "Gavak",
["dmd"] = "Madhi Madhi",
["dme"] = "Dugwor",
["dmf"] = "Medefaidrin",
["dmg"] = "กีนาบาตางันตอนบน",
["dmk"] = "Domaaki",
["dml"] = "Dameli",
["dmm"] = "Dama (Nigeria)",
["dmn-dam"] = "Dama (Sierra Leone)",
["dmn-mdw-pro"] = "Proto-Western Mande",
["dmn-pro"] = "Proto-Mande",
["dmo"] = "Kemezung",
["dmr"] = "East Damar",
["dms"] = "Dampelas",
["dmu"] = "Dubu",
["dmv"] = "Dumpas",
["dmw"] = "Mudburra",
["dmx"] = "Dema",
["dmy"] = "Demta",
["dna"] = "Upper Grand Valley Dani",
["dnd"] = "Daonda",
["dne"] = "Ndendeule",
["dng"] = "ดุงกาน",
["dni"] = "Lower Grand Valley Dani",
["dnj"] = "Dan",
["dnk"] = "Dengka",
["dnn"] = "Dzuun",
["dno"] = "Ndrulo",
["dnr"] = "Danaru",
["dnt"] = "Mid Grand Valley Dani",
["dnu"] = "Danau",
["dnv"] = "Danu",
["dnw"] = "Western Dani",
["dny"] = "Dení",
["doa"] = "Dom",
["dob"] = "Dobu",
["doc"] = "ต้งเหนือ",
["doe"] = "Doe",
["dof"] = "Domu",
["doh"] = "Dong",
["doi"] = "Dogri",
["dok"] = "Dondo",
["dol"] = "Doso",
["don"] = "Doura",
["doo"] = "Dongo",
["dop"] = "Lukpa",
["doq"] = "Dominican Sign Language",
["dor"] = "Dori'o",
["dos"] = "Dogosé",
["dot"] = "Dass",
["dov"] = "Toka-Leya",
["dow"] = "Doyayo",
["dox"] = "Bussa",
["doy"] = "Dompo",
["doz"] = "Dorze",
["dpp"] = "Papar",
["dra-bry"] = "Beary",
["dra-cen-pro"] = "ดราวิเดียนตอนกลางดั้งเดิม",
["dra-mkn"] = "Middle Kannada",
["dra-nor-pro"] = "ดราวิเดียนเหนือดั้งเดิม",
["dra-okn"] = "Old Kannada",
["dra-ote"] = "Old Telugu",
["dra-pro"] = "ดราวิเดียนดั้งเดิม",
["dra-sdo-pro"] = "ดราวิเดียนใต้ที่หนึ่งดั้งเดิม",
["dra-sdt-pro"] = "ดราวิเดียนใต้ที่สองดั้งเดิม",
["dra-sou-pro"] = "ดราวิเดียนใต้ดั้งเดิม",
["drb"] = "Dair",
["drc"] = "Minderico",
["drd"] = "Darmiya",
["drg"] = "Rungus",
["dri"] = "Lela",
["drl"] = "Baagandji",
["drn"] = "West Damar",
["dro"] = "Daro-Matu Melanau",
["drq"] = "Dura",
["drs"] = "Gedeo",
["dru"] = "Rukai",
["dru-pro"] = "Proto-Rukai",
["dry"] = "Darai",
["dsb"] = "ซอร์เบียตอนล่าง",
["dse"] = "Dutch Sign Language",
["dsh"] = "Daasanach",
["dsi"] = "Disa",
["dsl"] = "Danish Sign Language",
["dsn"] = "Dusner",
["dso"] = "Desiya",
["dsq"] = "Tadaksahak",
["dta"] = "Daur",
["dtb"] = "Labuk-Kinabatangan Kadazan",
["dtd"] = "Ditidaht",
["dth"] = "Adithinngithigh",
["dti"] = "Ana Tinga Dogon",
["dtk"] = "Tene Kan Dogon",
["dtm"] = "Tomo Kan Dogon",
["dto"] = "Tommo So",
["dtp"] = "ดูซุนตอนกลาง",
["dtr"] = "Lotud",
["dts"] = "Toro So Dogon",
["dtt"] = "Toro Tegu Dogon",
["dtu"] = "Tebul Ure Dogon",
["dty"] = "Doteli",
["dua"] = "Duala",
["dub"] = "Dubli",
["duc"] = "Duna",
["due"] = "Umiray Dumaget Agta",
["duf"] = "Dumbea",
["dug"] = "Chiduruma",
["duh"] = "Dungra Bhil",
["dui"] = "Dumun",
["duk"] = "Uyajitaya",
["dul"] = "Alabat Island Agta",
["dum"] = "ดัตช์กลาง",
["dun"] = "Dusun Deyah",
["duo"] = "Dupaningan Agta",
["dup"] = "Duano",
["duq"] = "Dusun Malang",
["dur"] = "Dii",
["dus"] = "Dumi",
["duu"] = "Drung",
["duv"] = "Duvle",
["duw"] = "Dusun Witu",
["dux"] = "Duun",
["duy"] = "Dicamay Agta",
["duz"] = "Duli",
["dv"] = "มัลดีฟส์",
["dva"] = "Duau",
["dwa"] = "Diri",
["dwr"] = "เดาโร",
["dwu"] = "Dhuwal",
["dww"] = "Dawawa",
["dwy"] = "Dhuwaya",
["dwz"] = "Dewas Rai",
["dya"] = "Dyan",
["dyb"] = "Dyaberdyaber",
["dyd"] = "Dyugun",
["dyg"] = "Villa Viciosa Agta",
["dyi"] = "Djimini",
["dym"] = "Yanda Dogon",
["dyn"] = "Dyangadi",
["dyo"] = "Jola-Fonyi",
["dyu"] = "Dyula",
["dyy"] = "Dyaabugay",
["dz"] = "ซองคา",
["dza"] = "Tunzu",
["dzg"] = "Dazaga",
["dzl"] = "Dzala",
["dzn"] = "Dzando",
["ebg"] = "Ebughu",
["ebk"] = "Eastern Bontoc",
["ebr"] = "Ebrié",
["ebu"] = "Embu",
["ecr"] = "Eteocretan",
["ecs"] = "Ecuadorian Sign Language",
["ecy"] = "Eteocypriot",
["ee"] = "เอเว",
["eee"] = "E",
["efa"] = "Efai",
["efe"] = "Efe",
["efi"] = "Efik",
["ega"] = "Ega",
["egl"] = "เอมีเลีย",
["ego"] = "Eggon",
["egx-dem"] = "Demotic Egyptian",
["egy"] = "อียิปต์",
["ehu"] = "Ehueun",
["eip"] = "Eipomek",
["eit"] = "Eitiep",
["eiv"] = "Askopan",
["eja"] = "Ejamat",
["eka"] = "Ekajuk",
["eke"] = "Ekit",
["ekg"] = "Ekari",
["eki"] = "Eki",
["ekl"] = "Kolhe",
["ekm"] = "Elip",
["eko"] = "Koti",
["ekp"] = "Ekpeye",
["ekr"] = "Yace",
["eky"] = "กะยาตะวันออก",
["el"] = "กรีก",
["ele"] = "Elepi",
["elh"] = "El Hugeirat",
["eli"] = "Nding",
["elk"] = "Elkei",
["elm"] = "Eleme",
["elo"] = "El Molo",
["elu"] = "Elu",
["elx"] = "Elamite",
["ema"] = "Emai",
["emb"] = "Embaloh",
["eme"] = "Emerillon",
["emg"] = "Eastern Meohang",
["emi"] = "Mussau-Emira",
["emk"] = "Eastern Maninkakan",
["emm"] = "Mamulique",
["emn"] = "Eman",
["emp"] = "Northern Emberá",
["ems"] = "อาลูตีก",
["emu"] = "Eastern Muria",
["emw"] = "Emplawas",
["emx"] = "Erromintxela",
["emy"] = "Epigraphic Mayan",
["en"] = "อังกฤษ",
["ena"] = "Apali",
["enb"] = "Markweeta",
["enc"] = "En",
["end"] = "Ende",
["enf"] = "Forest Enets",
["enh"] = "Tundra Enets",
["enl"] = "Enlhet",
["enm"] = "อังกฤษกลาง",
["enn"] = "Engenni",
["eno"] = "Enggano",
["enq"] = "Enga",
["enr"] = "Emem",
["enu"] = "Enu",
["env"] = "Enwan",
["enw"] = "Enwang",
["enx"] = "Enxet",
["eo"] = "เอสเปรันโต",
["eot"] = "Eotile",
["epi"] = "Epie",
["era"] = "Eravallan",
["erg"] = "Sie",
["erh"] = "Eruwa",
["eri"] = "Ogea",
["erk"] = "South Efate",
["ero-gsz"] = "Geshiza",
["ero-nya"] = "Nyagrong Minyag",
["ero-tau"] = "Stau",
["err"] = "Erre",
["ers"] = "Ersu",
["ert"] = "Eritai",
["erw"] = "Erokwanas",
["es"] = "สเปน",
["ese"] = "Ese Ejja",
["esh"] = "เอชเตฮาร์ด",
["esl"] = "Egyptian Sign Language",
["esm"] = "Esuma",
["esn"] = "Salvadoran Sign Language",
["eso"] = "Estonian Sign Language",
["esq"] = "Esselen",
["ess"] = "Central Siberian Yupik",
["esu"] = "ยุปปิก",
["esx-esk-pro"] = "เอสกิโมดั้งเดิม",
["esx-ink"] = "Inuktun",
["esx-inq"] = "Inuinnaqtun",
["esx-inu-pro"] = "อินุอิตดั้งเดิม",
["esx-pro"] = "Proto-Eskimo-Aleut",
["esx-tut"] = "Tunumiisut",
["esy"] = "Eskayan",
["et"] = "เอสโตเนีย",
["etb"] = "Etebi",
["etc"] = "Etchemin",
["eth"] = "Ethiopian Sign Language",
["etn"] = "Eton (Vanuatu)",
["eto"] = "Eton (Cameroon)",
["etr"] = "Edolo",
["ets"] = "Yekhee",
["ett"] = "อีทรัสคัน",
["etu"] = "Ejagham",
["etx"] = "Eten",
["etz"] = "Semimi",
["eu"] = "บาสก์",
["euq-pro"] = "บาสก์ดั้งเดิม",
["eve"] = "เอเว็น",
["evh"] = "Uvbie",
["evn"] = "เอเวนค์",
["ewo"] = "Ewondo",
["ext"] = "เอซเตรมาดูรา",
["eya"] = "Eyak",
["eyo"] = "Keiyo",
["eza"] = "Ezaa",
["eze"] = "Uzekwe",
["fa"] = "เปอร์เซีย",
["faa"] = "Fasu",
["fab"] = "Annobonese",
["fad"] = "Wagi",
["faf"] = "Fagani",
["fag"] = "Finongan",
["fah"] = "Baissa Fali",
["fai"] = "Faiwol",
["faj"] = "Faita",
["fak"] = "Fang (Beboid)",
["fal"] = "South Fali",
["fam"] = "Fam",
["fan"] = "Fang (Bantu)",
["fap"] = "Palor",
["far"] = "Fataleka",
["fau"] = "Fayu",
["fax"] = "ฟาลา",
["fay"] = "Southwestern Fars",
["faz"] = "Northwestern Fars",
["fbl"] = "West Albay Bikol",
["fcs"] = "Quebec Sign Language",
["fer"] = "Feroge",
["ff"] = "ฟูลา",
["ffi"] = "Foia Foia",
["fgr"] = "Fongoro",
["fi"] = "ฟินแลนด์",
["fia"] = "Nobiin",
["fie"] = "Fyer",
["fip"] = "Fipa",
["fir"] = "Firan",
["fit"] = "Meänkieli",
["fiw"] = "Fiwaga",
["fj"] = "ฟีจี",
["fkk"] = "Kirya-Konzel",
["fkv"] = "Kven",
["fla"] = "Montana Salish",
["flh"] = "Foau",
["fli"] = "Fali",
["fll"] = "North Fali",
["fln"] = "Flinders Island",
["flr"] = "Fuliiru",
["fly"] = "Tsotsitaal",
["fmp"] = "Fe'fe'",
["fmu"] = "Far Western Muria",
["fng"] = "Fanagalo",
["fni"] = "Fania",
["fo"] = "แฟโร",
["fod"] = "Foodo",
["foi"] = "Foi",
["fom"] = "Foma",
["fon"] = "Fon",
["for"] = "Fore",
["fos"] = "Siraya",
["fpe"] = "Pichinglis",
["fqs"] = "Fas",
["fr"] = "ฝรั่งเศส",
["frd"] = "Fordata",
["frm"] = "ฝรั่งเศสกลาง",
["fro"] = "ฝรั่งเศสเก่า",
["frp"] = "ฟร็องโก-พรอว็องส์",
["frq"] = "Forak",
["frr"] = "ฟรีเชียเหนือ",
["frt"] = "Fortsenal",
["fse"] = "Finnish Sign Language",
["fsl"] = "French Sign Language",
["fss"] = "Finnish-Swedish Sign Language",
["fud"] = "East Futuna",
["fuj"] = "Ko",
["fum"] = "Fum",
["fun"] = "Fulniô",
["fur"] = "ฟรียูลี",
["fut"] = "Futuna-Aniwa",
["fuu"] = "Furu",
["fuy"] = "Fuyug",
["fvr"] = "Fur",
["fwa"] = "Fwâi",
["fwe"] = "Fwe",
["fy"] = "ฟรีเชียตะวันตก",
["ga"] = "ไอริช",
["gaa"] = "Ga",
["gab"] = "Gabri",
["gac"] = "Mixed Great Andamanese",
["gad"] = "Gaddang",
["gae"] = "Warekena",
["gaf"] = "Gende",
["gag"] = "กากาอุซ",
["gah"] = "Alekano",
["gai"] = "Borei",
["gaj"] = "Gadsup",
["gak"] = "Gamkonora",
["gal"] = "Galoli",
["gam"] = "Kandawo",
["gan"] = "กั้น",
["gao"] = "Gants",
["gap"] = "Gal",
["gaq"] = "Gata'",
["gar"] = "Galeya",
["gas"] = "Adiwasi Garasia",
["gat"] = "Kenati",
["gau"] = "Kondekor",
["gaw"] = "Nobonob",
["gay"] = "Gayo",
["gba-pro"] = "Proto-Gbaya",
["gbb"] = "Kaytetye",
["gbd"] = "Karadjeri",
["gbe"] = "Niksek",
["gbf"] = "Gaikundi",
["gbg"] = "Gbanziri",
["gbh"] = "Defi Gbe",
["gbi"] = "Galela",
["gbj"] = "Bodo Gadaba",
["gbk"] = "Gaddi",
["gbl"] = "Gamit",
["gbm"] = "Garhwali",
["gbn"] = "Mo'da",
["gbo"] = "Northern Grebo",
["gbp"] = "Gbaya-Bossangoa",
["gbq"] = "Gbaya-Bozoum",
["gbr"] = "Gbagyi",
["gbs"] = "Gbesi Gbe",
["gbu"] = "Gagadu",
["gbv"] = "Gbanu",
["gbw"] = "Gabi",
["gbx"] = "Eastern Xwla Gbe",
["gby"] = "Gbari",
["gcc"] = "Mali",
["gcd"] = "Ganggalida",
["gce"] = "Galice",
["gcf"] = "Antillean Creole",
["gcl"] = "Grenadian Creole English",
["gcn"] = "Gaina",
["gcr"] = "Guianese Creole",
["gct"] = "Colonia Tovar German",
["gd"] = "แกลิกแบบสกอตแลนด์",
["gdb"] = "Ollari",
["gdc"] = "Gugu Badhun",
["gdd"] = "Gedaged",
["gde"] = "Gude",
["gdf"] = "Guduf-Gava",
["gdg"] = "Ga'dang",
["gdh"] = "Gadjerawang",
["gdi"] = "Gundi",
["gdj"] = "Kurtjar",
["gdk"] = "Gadang",
["gdl"] = "Dirasha",
["gdm"] = "Laal",
["gdn"] = "Umanakaina",
["gdo"] = "Godoberi",
["gdq"] = "Mehri",
["gdr"] = "Wipi",
["gds"] = "Ghandruk Sign Language",
["gdt"] = "Kungardutyi",
["gdu"] = "Gudu",
["gdx"] = "Godwari",
["gea"] = "Geruma",
["geb"] = "Kire",
["gec"] = "Gboloo Grebo",
["ged"] = "Gade",
["geg"] = "Gengle",
["geh"] = "Hutterisch",
["gei"] = "Gebe",
["gej"] = "Gen",
["gek"] = "Gerka",
["gel"] = "Fakkanci",
["gem-pro"] = "เจอร์แมนิกดั้งเดิม",
["geq"] = "Geme",
["ges"] = "Geser-Gorom",
["gev"] = "Viya",
["gew"] = "Gera",
["gex"] = "Garre",
["gey"] = "Enya",
["gez"] = "กืออึซ",
["gfk"] = "Patpatar",
["gft"] = "Gafat",
["gga"] = "Gao",
["ggb"] = "Gbii",
["ggd"] = "Gugadj",
["gge"] = "Guragone",
["ggg"] = "Gurgula",
["ggk"] = "Kungarakany",
["ggl"] = "Ganglau",
["ggn"] = "Eastern Gurung",
["ggt"] = "Gitua",
["ggu"] = "Gban",
["ggw"] = "Gogodala",
["gha"] = "Ghadames",
["ghc"] = "แกลิกคลาสสิก",
["ghe"] = "Southern Ghale",
["ghh"] = "Northern Ghale",
["ghk"] = "Geko Karen",
["ghl"] = "Ghulfan",
["ghn"] = "Ghanongga",
["gho"] = "Ghomara",
["ghr"] = "Ghera",
["ghs"] = "Guhu-Samane",
["ght"] = "Kutang Ghale",
["gia"] = "Kitja",
["gib"] = "Gibanawa",
["gid"] = "Gidar",
["gie"] = "Guébie",
["gig"] = "Goaria",
["gih"] = "Githabul",
["gii"] = "Girirra",
["gil"] = "กิลเบิร์ต",
["gim"] = "Gimi (Papuan)",
["gin"] = "Hinukh",
["gip"] = "Gimi (Austronesian)",
["giq"] = "Green Gelao",
["gir"] = "Red Gelao",
["gis"] = "North Giziga",
["git"] = "Gitxsan",
["giu"] = "Mulao",
["giw"] = "White Gelao",
["gix"] = "Gilima",
["giy"] = "Giyug",
["giz"] = "South Giziga",
["gji"] = "Geji",
["gjk"] = "Kachi Koli",
["gjm"] = "Gunditjmara",
["gjn"] = "Gonja",
["gjr"] = "Gurindji Kriol",
["gju"] = "Gojri",
["gka"] = "Guya",
["gkd"] = "Magɨ",
["gke"] = "Ndai",
["gkn"] = "Gokana",
["gko"] = "Kok-Nar",
["gkp"] = "Guinea Kpelle",
["gl"] = "กาลิเซีย",
["glc"] = "Bon Gula",
["gld"] = "Nanai",
["glh"] = "Northwest Pashayi",
["glj"] = "Kulaal",
["glk"] = "Gilaki",
["glo"] = "Galambu",
["glr"] = "Glaro-Twabo",
["glu"] = "Gula",
["glw"] = "Glavda",
["gly"] = "Gule",
["gma"] = "Gambera",
["gmb"] = "Gula'alaa",
["gmd"] = "Mághdì",
["gme-bur"] = "Burgundian",
["gme-cgo"] = "กอทแบบไครเมีย",
["gmg"] = "Magiyi",
["gmh"] = "เยอรมันสูงกลาง",
["gml"] = "เยอรมันต่ำกลาง",
["gmm"] = "Gbaya-Mbodomo",
["gmn"] = "Gimnime",
["gmq-gut"] = "Gutnish",
["gmq-jmk"] = "Jamtish",
["gmq-mno"] = "นอร์เวย์กลาง",
["gmq-oda"] = "เดนมาร์กเก่า",
["gmq-ogt"] = "Old Gutnish",
["gmq-osw"] = "สวีเดนเก่า",
["gmq-pro"] = "นอร์สดั้งเดิม",
["gmq-scy"] = "Scanian",
["gmr"] = "Mirning",
["gmu"] = "Gumalu",
["gmv"] = "กาโม",
["gmw-bgh"] = "Bergish",
["gmw-cfr"] = "ฟรังโกเนียตอนกลาง",
["gmw-ecg"] = "เยอรมันตอนกลางตะวันออก",
["gmw-fin"] = "Fingallian",
["gmw-gts"] = "Gottscheerish",
["gmw-jdt"] = "Jersey Dutch",
["gmw-msc"] = "Middle Scots",
["gmw-pro"] = "เจอร์แมนิกตะวันตกดั้งเดิม",
["gmw-rfr"] = "ฟรังโกเนียแบบไรน์",
["gmw-stm"] = "Sathmar Swabian",
["gmw-tsx"] = "Transylvanian Saxon",
["gmw-vog"] = "เยอรมันแบบว็อลกา",
["gmw-zps"] = "เยอรมันแบบซิพเซอร์",
["gmx"] = "Magoma",
["gmy"] = "กรีกแบบไมซีนี",
["gmz"] = "Mgbo",
["gn-cls"] = "กัวรานีคลาสสิก",
["gna"] = "Kaansa",
["gnb"] = "Gangte",
["gnc"] = "Guanche",
["gnd"] = "Zulgo-Gemzek",
["gne"] = "Ganang",
["gng"] = "Ngangam",
["gnh"] = "Lere",
["gni"] = "กูนียันดี",
["gnj"] = "Ngen of Djonkro",
["gnk"] = "ǁGana",
["gnl"] = "Gangulu",
["gnm"] = "Ginuman",
["gnn"] = "Gumatj",
["gnq"] = "Gana",
["gnr"] = "Gureng Gureng",
["gnt"] = "Guntai",
["gnu"] = "Gnau",
["gnw"] = "Western Bolivian Guarani",
["gnz"] = "Ganzi",
["goa"] = "Guro",
["gob"] = "Playero",
["goc"] = "Gorakor",
["god"] = "Godié",
["goe"] = "Gongduk",
["gof"] = "โกฟา",
["gog"] = "Gogo",
["goh"] = "เยอรมันสูงเก่า",
["goi"] = "Gobasi",
["goj"] = "Gowlan",
["gol"] = "Gola",
["gon"] = "โคณฑี",
["goo"] = "Gone Dau",
["gop"] = "Yeretuar",
["goq"] = "Gorap",
["gor"] = "Gorontalo",
["got"] = "กอท",
["gou"] = "Gavar",
["gov"] = "Goo",
["gow"] = "Gorwaa",
["gox"] = "Gobu",
["goy"] = "Goundo",
["goz"] = "Gozarkhani",
["gpa"] = "Gupa-Abawa",
["gpn"] = "Taiap",
["gqa"] = "Ga'anda",
["gqi"] = "Guiqiong",
["gqn"] = "Kinikinao",
["gqr"] = "Gor",
["gqu"] = "Qau",
["gra"] = "Rajput Garasia",
["grc"] = "กรีกโบราณ",
["grd"] = "Guruntum",
["grg"] = "Madi",
["grh"] = "Gbiri-Niragu",
["gri"] = "Ghari",
["grj"] = "Southern Grebo",
["grk-cal"] = "Calabrian Greek",
["grk-ita"] = "Italiot Greek",
["grk-mar"] = "Mariupol Greek",
["grk-pro"] = "เฮลเลนิกดั้งเดิม",
["grm"] = "Kota Marudu Talantang",
["gro"] = "Groma",
["grq"] = "Gorovu",
["grs"] = "Gresi",
["grt"] = "กาโร",
["gru"] = "Kistane",
["grv"] = "Central Grebo",
["grw"] = "Gweda",
["grx"] = "Guriaso",
["gry"] = "Barclayville Grebo",
["grz"] = "Guramalum",
["gse"] = "Ghanaian Sign Language",
["gsg"] = "German Sign Language",
["gsl"] = "Gusilay",
["gsm"] = "Guatemalan Sign Language",
["gsn"] = "Gusan",
["gso"] = "Southwest Gbaya",
["gsp"] = "Wasembo",
["gss"] = "Greek Sign Language",
["gsw"] = "เยอรมันแบบอลามันเนีย",
["gta"] = "Guató",
["gtu"] = "Aghu Tharrnggala",
["gu"] = "คุชราต",
["gua"] = "Shiki",
["gub"] = "Guajajára",
["guc"] = "Wayuu",
["gud"] = "Yocoboué Dida",
["gue"] = "Gurindji",
["guf"] = "Gupapuyngu",
["gug"] = "กัวรานีแบบปารากวัย",
["guh"] = "Guahibo",
["gui"] = "Eastern Bolivian Guarani",
["guk"] = "Gumuz",
["gul"] = "Gullah",
["gum"] = "Guambiano",
["gun"] = "Mbya Guarani",
["guo"] = "Guayabero",
["gup"] = "Gunwinggu",
["guq"] = "Aché",
["gur"] = "ฟราฟรา",
["gus"] = "Guinean Sign Language",
["gut"] = "Maléku Jaíka",
["guu"] = "Yanomamö",
["guv"] = "Gey",
["guw"] = "Gun",
["gux"] = "Gourmanchéma",
["guz"] = "Gusii",
["gv"] = "แมงซ์",
["gva"] = "Kaskihá",
["gvc"] = "Guanano",
["gve"] = "Duwet",
["gvf"] = "Golin",
["gvj"] = "Guajá",
["gvl"] = "Gulay",
["gvm"] = "Gurmana",
["gvn"] = "Kuku-Yalanji",
["gvo"] = "Gavião do Jiparaná",
["gvp"] = "Pará Gavião",
["gvr"] = "Western Gurung",
["gvs"] = "Gumawana",
["gvy"] = "Guyani",
["gwa"] = "Mbato",
["gwb"] = "Gwa",
["gwc"] = "Kalami",
["gwd"] = "Gawwada",
["gwe"] = "Gweno",
["gwf"] = "Gowro",
["gwg"] = "Moo",
["gwi"] = "Gwich'in",
["gwj"] = "Gcwi",
["gwm"] = "Awngthim",
["gwn"] = "Gwandara",
["gwr"] = "Gwere",
["gwt"] = "Gawar-Bati",
["gwu"] = "Guwamu",
["gww"] = "Kwini",
["gwx"] = "Gua",
["gxx"] = "Wè Southern",
["gya"] = "Northwest Gbaya",
["gyb"] = "Garus",
["gyd"] = "Kayardild",
["gye"] = "Gyem",
["gyf"] = "Gungabula",
["gyg"] = "Gbayi",
["gyi"] = "Gyele",
["gyl"] = "Gayil",
["gym"] = "Ngäbere",
["gyn"] = "Guyanese Creole English",
["gyo"] = "Gyalsumdo",
["gyr"] = "Guarayu",
["gyy"] = "Gunya",
["gza"] = "Ganza",
["gzn"] = "Gane",
["ha"] = "เฮาซา",
["haa"] = "Hän",
["hab"] = "Hanoi Sign Language",
["hac"] = "Gurani",
["had"] = "Hatam",
["haf"] = "Haiphong Sign Language",
["hag"] = "Hanga",
["hah"] = "Hahon",
["hai"] = "Haida",
["haj"] = "ฮาชอง",
["hak"] = "แคะ",
["hal"] = "Halang",
["ham"] = "Hewa",
["hao"] = "Hakö",
["hap"] = "Hupla",
["har"] = "Harari",
["has"] = "Haisla",
["hav"] = "Havu",
["haw"] = "ฮาวาย",
["hax"] = "Southern Haida",
["hay"] = "Haya",
["hba"] = "Hamba",
["hbb"] = "Huba",
["hbn"] = "Heiban",
["hbu"] = "Habu",
["hca"] = "Andaman Creole Hindi",
["hch"] = "Huichol",
["hdn"] = "Northern Haida",
["hds"] = "Honduras Sign Language",
["hdy"] = "Hadiyya",
["he"] = "ฮีบรู",
["hea"] = "Northern Qiandong Miao",
["hed"] = "Herdé",
["heg"] = "Helong",
["heh"] = "Hehe",
["hei"] = "Heiltsuk",
["hem"] = "Hemba",
["hgm"] = "Haiǁom",
["hgw"] = "Haigwai",
["hhi"] = "Hoia Hoia",
["hhr"] = "Kerak",
["hhy"] = "Hoyahoya",
["hi"] = "ฮินดี",
["hia"] = "Lamang",
["hib"] = "Hibito",
["hid"] = "Hidatsa",
["hif"] = "ฮินดีแบบฟีจี",
["hig"] = "Kamwe",
["hih"] = "Pamosu",
["hii"] = "Hinduri",
["hij"] = "Hijuk",
["hik"] = "Seit-Kaitetu",
["hil"] = "ฮีลีไกโนน",
["hio"] = "Tshwa",
["hir"] = "Himarimã",
["hit"] = "Hittite",
["hiw"] = "Hiw",
["hix"] = "Hixkaryana",
["hji"] = "Haji",
["hka"] = "Kahe",
["hke"] = "Hunde",
["hkh"] = "Pogali",
["hkk"] = "Hunjara-Kaina Ke",
["hkn"] = "Mel-Khaonh",
["hks"] = "Hong Kong Sign Language",
["hla"] = "Halia",
["hlb"] = "Halbi",
["hld"] = "Halang Doan",
["hle"] = "Hlersu",
["hlt"] = "Nga La",
["hma"] = "Southern Mashan Hmong",
["hmb"] = "Humburi Senni",
["hmc"] = "Central Huishui Hmong",
["hmd"] = "A-Hmao",
["hme"] = "Eastern Huishui Hmong",
["hmf"] = "Hmong Don",
["hmg"] = "Southwestern Guiyang Hmong",
["hmh"] = "Southwestern Huishui Hmong",
["hmi"] = "Northern Huishui Hmong",
["hmj"] = "Ge",
["hmk"] = "Yemaek",
["hml"] = "Luopohe Hmong",
["hmm"] = "Central Mashan Hmong",
["hmn-pro"] = "ม้งดั้งเดิม",
["hmp"] = "Northern Mashan Hmong",
["hmq"] = "Eastern Qiandong Miao",
["hmr"] = "Hmar",
["hms"] = "Southern Qiandong Miao",
["hmt"] = "Hamtai",
["hmu"] = "Hamap",
["hmv"] = "Hmong Dô",
["hmw"] = "Western Mashan Hmong",
["hmx-mie-pro"] = "เมี่ยนดั้งเดิม",
["hmx-pro"] = "ม้ง-เมี่ยนดั้งเดิม",
["hmy"] = "Southern Guiyang Hmong",
["hmz"] = "Hmong Shua",
["hna"] = "Mina",
["hnd"] = "Southern Hindko",
["hne"] = "Chhattisgarhi",
["hnh"] = "ǁAni",
["hni"] = "Hani",
["hnj"] = "ม้งเขียว",
["hnm"] = "ไหหลำ",
["hnn"] = "ฮานูโนโอ",
["hno"] = "Northern Hindko",
["hns"] = "ฮินดูสตานีแบบแคริบเบียน",
["hnu"] = "Hung",
["ho"] = "ฮีรีโมตู",
["hoa"] = "Hoava",
["hob"] = "Austronesian Mari",
["hoc"] = "Ho",
["hod"] = "Holma",
["hoe"] = "Horom",
["hoh"] = "Hobyót",
["hoi"] = "Holikachuk",
["hoj"] = "Hadoti",
["hol"] = "Holu",
["hom"] = "Homa",
["hoo"] = "Holoholo",
["hop"] = "Hopi",
["hor"] = "Horo",
["hos"] = "Ho Chi Minh City Sign Language",
["hot"] = "Hote",
["hov"] = "Hovongan",
["how"] = "Honi",
["hoy"] = "Holiya",
["hoz"] = "Hozo",
["hpo"] = "Hpon",
["hps"] = "Hawai'i Pidgin Sign Language",
["hra"] = "Hrangkhol",
["hrc"] = "Niwer Mil",
["hre"] = "Hrê",
["hrk"] = "Haruku",
["hrm"] = "Horned Miao",
["hro"] = "Haroi",
["hrp"] = "Nhirrpi",
["hrt"] = "Hértevin",
["hru"] = "Hruso",
["hrw"] = "Warwar Feni",
["hrx"] = "ฮุนสริก",
["hrz"] = "Harzani",
["hsb"] = "ซอร์เบียตอนบน",
["hsh"] = "Hungarian Sign Language",
["hsl"] = "Hausa Sign Language",
["hsn"] = "เซียง",
["hss"] = "Harsusi",
["ht"] = "ครีโอลเฮติ",
["hti"] = "Hoti",
["hto"] = "Minica Huitoto",
["hts"] = "Hadza",
["htu"] = "Hitu",
["hu"] = "ฮังการี",
["hub"] = "Huambisa",
["huc"] = "ǂHoan",
["hud"] = "Huaulu",
["huf"] = "Humene",
["hug"] = "Huachipaeri",
["huh"] = "Huilliche",
["hui"] = "Huli",
["huj"] = "Northern Guiyang Hmong",
["huk"] = "Hulung",
["hul"] = "Hula",
["hum"] = "Hungana",
["huo"] = "Hu",
["hup"] = "Hupa",
["huq"] = "Tsat",
["hur"] = "Halkomelem",
["hus"] = "Wastek",
["huu"] = "Murui Huitoto",
["huv"] = "Huave",
["huw"] = "Hukumina",
["hux"] = "Nüpode Huitoto",
["huy"] = "Hulaulá",
["huz"] = "Hunzib",
["hvc"] = "Haitian Vodoun Culture Language",
["hvk"] = "Haveke",
["hvn"] = "Sabu",
["hwa"] = "Wané",
["hwc"] = "Hawaiian Creole",
["hwo"] = "Hwana",
["hy"] = "อาร์มีเนีย",
["hya"] = "Hya",
["hyx-pro"] = "อาร์มีเนียนดั้งเดิม",
["hz"] = "เฮเรโร",
["ia"] = "อินเทอร์ลิงกวา",
["iai"] = "Iaai",
["ian"] = "Iatmul",
["iar"] = "Purari",
["iba"] = "อีบัน",
["ibb"] = "Ibibio",
["ibd"] = "Iwaidja",
["ibe"] = "Akpes",
["ibg"] = "Ibanag",
["ibh"] = "Bih",
["ibl"] = "Ibaloi",
["ibm"] = "Agoi",
["ibn"] = "Ibino",
["ibr"] = "Ibuoro",
["ibu"] = "Ibu",
["iby"] = "Ibani",
["ica"] = "Ede Ica",
["ich"] = "Etkywan",
["icl"] = "Icelandic Sign Language",
["icr"] = "Islander Creole English",
["id"] = "อินโดนีเซีย",
["ida"] = "Idakho-Isukha-Tiriki",
["idb"] = "Indo-Portuguese",
["idc"] = "Idon",
["idd"] = "Ede Idaca",
["ide"] = "Idere",
["idi"] = "Idi",
["idr"] = "Indri",
["ids"] = "Idesa",
["idt"] = "Idaté",
["idu"] = "Idoma",
["ie"] = "อินเทร์ลิงเกว",
["ifa"] = "Amganad Ifugao",
["ifb"] = "Batad Ifugao",
["ife"] = "Ifè",
["iff"] = "Ifo",
["ifk"] = "Tuwali Ifugao",
["ifm"] = "Teke-Fuumu",
["ifu"] = "Mayoyao Ifugao",
["ify"] = "Keley-I Kallahan",
["ig"] = "อิกโบ",
["igb"] = "Ebira",
["ige"] = "Igede",
["igg"] = "Igana",
["igl"] = "Igala",
["igm"] = "Kanggape",
["ign"] = "Ignaciano",
["igo"] = "Isebe",
["igs"] = "Glosa",
["igw"] = "Igwe",
["ihb"] = "Pidgin Iha",
["ihi"] = "Ihievbe",
["ihp"] = "Iha",
["ii"] = "นอซู",
["iir-nur-pro"] = "Proto-Nuristani",
["iir-pro"] = "อินโด-อิเรเนียนดั้งเดิม",
["ijc"] = "Izon",
["ije"] = "Biseni",
["ijj"] = "Ede Ije",
["ijn"] = "Kalabari",
["ijo-pro"] = "Proto-Ijoid",
["ijs"] = "Southeast Ijo",
["ik"] = "Inupiaq",
["ike"] = "Eastern Canadian Inuktitut",
["iki"] = "Iko",
["ikk"] = "Ika",
["ikl"] = "Ikulu",
["iko"] = "Olulumo-Ikom",
["ikp"] = "Ikpeshi",
["ikr"] = "Ikaranggal",
["iks"] = "Inuit Sign Language",
["ikt"] = "Inuvialuktun",
["ikv"] = "Iku-Gora-Ankwa",
["ikw"] = "Ikwere",
["ikx"] = "Ik",
["ikz"] = "Ikizu",
["ila"] = "Ile Ape",
["ilb"] = "Ila",
["ilg"] = "Ilgar",
["ili"] = "Ili Turki",
["ilk"] = "Ilongot",
["ill"] = "อีรานุน",
["ilo"] = "อีโลกาโน",
["ils"] = "International Sign",
["ilu"] = "Ili'uun",
["ilv"] = "Ilue",
["ima"] = "Mala Malasar",
["imi"] = "Anamgura",
["iml"] = "Miluk",
["imn"] = "Imonda",
["imo"] = "Imbongu",
["imr"] = "Imroing",
["ims"] = "Marsian",
["imy"] = "Milyan",
["inb"] = "Inga",
["inc-apa"] = "Apabhramsa",
["inc-ash"] = "ปรากฤตแบบอโศก",
["inc-dng-pro"] = "Proto-Dangari",
["inc-kam"] = "กามรูป",
["inc-kho"] = "Kholosi",
["inc-krd-pro"] = "Proto-Kamta",
["inc-mas"] = "อัสสัมกลาง",
["inc-mbn"] = "เบงกอลกลาง",
["inc-mgu"] = "คุชราตกลาง",
["inc-mor"] = "โอริยากลาง",
["inc-oas"] = "อัสสัมช่วงต้น",
["inc-oaw"] = "Old Awadhi",
["inc-obn"] = "เบงกอลเก่า",
["inc-ogu"] = "คุชราตเก่า",
["inc-ohi"] = "ฮินดีเก่า",
["inc-oor"] = "โอริยาเก่า",
["inc-opa"] = "ปัญจาบเก่า",
["inc-pro"] = "อินโด-อารยันดั้งเดิม",
["ine-ana-pro"] = "อานาโตเลียนดั้งเดิม",
["ine-bsl-pro"] = "บอลโต-สลาวิกดั้งเดิม",
["ine-kal"] = "Kalašma",
["ine-pae"] = "Paeonian",
["ine-pro"] = "อินโด-ยูโรเปียนดั้งเดิม",
["ine-toc-pro"] = "โทแคเรียนดั้งเดิม",
["ing"] = "Deg Xinag",
["inh"] = "อิงกุช",
["inj"] = "Jungle Inga",
["inl"] = "มืออินโดนีเซีย",
["inm"] = "Minaean",
["inn"] = "Isinai",
["ino"] = "Inoke-Yate",
["inp"] = "Iñapari",
["ins"] = "มืออินเดีย",
["int"] = "Intha",
["inz"] = "Ineseño",
["io"] = "อีโด",
["ior"] = "Inor",
["iou"] = "Tuma-Irumu",
["iow"] = "Chiwere",
["ipi"] = "Ipili",
["ipo"] = "Ipiko",
["iqu"] = "Iquito",
["iqw"] = "Ikwo",
["ira-kms-pro"] = "Proto-Komisenian",
["ira-mny-pro"] = "Proto-Munji-Yidgha",
["ira-mpr-pro"] = "Proto-Medo-Parthian",
["ira-pat-pro"] = "ปาทานดั้งเดิม",
["ira-pro"] = "อิเรเนียนดั้งเดิม",
["ira-sgc-pro"] = "ซอกดิกดั้งเดิม",
["ira-sgi-pro"] = "Proto-Sanglechi-Ishkashimi",
["ira-shr-pro"] = "Proto-Shughni-Roshani",
["ira-shy-pro"] = "Proto-Shughni-Yazghulami",
["ira-sym-pro"] = "Proto-Shughni-Yazghulami-Munji",
["ira-wnj"] = "Vanji",
["ira-zgr-pro"] = "Proto-Zaza-Gorani",
["ire"] = "Iresim",
["irh"] = "Irarutu",
["iri"] = "Rigwe",
["irk"] = "Iraqw",
["irn"] = "Irantxe",
["iro-ere"] = "Erie",
["iro-min"] = "Mingo",
["iro-nor-pro"] = "Proto-North Iroquoian",
["iro-pro"] = "Proto-Iroquoian",
["irr"] = "Ir",
["iru"] = "Irula",
["irx"] = "Kamberau",
["iry"] = "Iraya",
["is"] = "ไอซ์แลนด์",
["isa"] = "Isabi",
["isc"] = "Isconahua",
["isd"] = "Isnag",
["ise"] = "Italian Sign Language",
["isg"] = "Irish Sign Language",
["ish"] = "Esan",
["isi"] = "Nkem-Nkum",
["isk"] = "Ishkashimi",
["ism"] = "Masimasi",
["isn"] = "Isanzu",
["iso"] = "Isoko",
["isr"] = "Israeli Sign Language",
["ist"] = "อิสเตรีย",
["isu"] = "Isu",
["isv"] = "Interslavic",
["it"] = "อิตาลี",
["itb"] = "Binongan Itneg",
["itc-pro"] = "อิตาลิกดั้งเดิม",
["itc-psa"] = "Pre-Samnite",
["itd"] = "Southern Tidung",
["ite"] = "Itene",
["iti"] = "Inlaod Itneg",
["itk"] = "Judeo-Italian",
["itl"] = "Itelmen",
["itm"] = "Itu Mbon Uzo",
["ito"] = "Itonama",
["itr"] = "Iteri",
["its"] = "Itsekiri",
["itt"] = "Maeng Itneg",
["itv"] = "Itawit",
["itw"] = "Ito",
["itx"] = "Itik",
["ity"] = "Moyadan Itneg",
["itz"] = "Itza'",
["iu"] = "อินุกติตุต",
["ium"] = "อิ้วเมี่ยน",
["ivb"] = "Ibatan",
["ivv"] = "Ivatan",
["iwk"] = "I-Wak",
["iwm"] = "Iwam",
["iwo"] = "Iwur",
["iws"] = "Sepik Iwam",
["ixc"] = "Ixcatec",
["ixl"] = "Ixil",
["iya"] = "Iyayu",
["iyo"] = "Mesaka",
["iyx"] = "Yaa",
["izh"] = "อิงเกรีย",
["izi"] = "Izi-Ezaa-Ikwo-Mgbo",
["izr"] = "Izere",
["izz"] = "Izi",
["ja"] = "ญี่ปุ่น",
["jaa"] = "Jamamadí",
["jab"] = "Hyam",
["jac"] = "Jakaltek",
["jad"] = "Jahanka",
["jae"] = "Jabem",
["jaf"] = "Jara",
["jah"] = "Jah Hut",
["jaj"] = "Zazao",
["jal"] = "Yalahatan",
["jam"] = "ครีโอลจาเมกา",
["jan"] = "Janday",
["jao"] = "Yanyuwa",
["jaq"] = "Yaqay",
["jas"] = "ชวาแบบนิวแคลิโดเนีย",
["jat"] = "Jakati",
["jau"] = "Yaur",
["jax"] = "Jambi Malay",
["jay"] = "Yan-nhangu",
["jaz"] = "Jawe",
["jbj"] = "Arandai",
["jbk"] = "Barikewa",
["jbn"] = "Nefusa",
["jbo"] = "โลจบาน",
["jbr"] = "Jofotek-Bromnya",
["jbt"] = "Jabutí",
["jbu"] = "Jukun Takum",
["jbw"] = "Yawijibaya",
["jcs"] = "Jamaican Country Sign Language",
["jct"] = "Krymchak",
["jda"] = "Jad",
["jdg"] = "Jadgali",
["jdt"] = "Judeo-Tat",
["jeb"] = "Jebero",
["jee"] = "Jerung",
["jeg"] = "Jeng",
["jeh"] = "Jeh",
["jei"] = "Yei",
["jek"] = "Jeri Kuo",
["jel"] = "Yelmek",
["jen"] = "Dza",
["jer"] = "Jere",
["jet"] = "Manem",
["jeu"] = "Jonkor Bourmataguil",
["jgb"] = "Ngbee",
["jgk"] = "Gwak",
["jgo"] = "Ngomba",
["jhi"] = "Jehai",
["jhs"] = "Jhankot Sign Language",
["jia"] = "Jina",
["jib"] = "Jibu",
["jic"] = "Tol",
["jid"] = "Bu",
["jie"] = "Jilbe",
["jig"] = "Jingulu",
["jih"] = "Shangzhai",
["jii"] = "Jiiddu",
["jil"] = "Jilim",
["jim"] = "Jimjimen",
["jio"] = "เจียเม่า",
["jiq"] = "Khroskyabs",
["jit"] = "Jita",
["jiu"] = "Youle Jino",
["jiv"] = "Shuar",
["jiy"] = "Buyuan Jino",
["jje"] = "เชจู",
["jjr"] = "Zhár",
["jka"] = "Kaera",
["jko"] = "Kubo",
["jkp"] = "Paku Karen",
["jkr"] = "Koro (India)",
["jku"] = "Labir",
["jle"] = "Ngile",
["jls"] = "Jamaican Sign Language",
["jma"] = "Dima",
["jmb"] = "Zumbun",
["jmc"] = "Machame",
["jmd"] = "Yamdena",
["jmi"] = "Jimi",
["jml"] = "Jumli",
["jmn"] = "Makuri Naga",
["jmr"] = "Kamara",
["jmw"] = "Mouwase",
["jmx"] = "Western Juxtlahuaca Mixtec",
["jna"] = "Jangshung",
["jnd"] = "Jandavra",
["jng"] = "Yangman",
["jni"] = "Janji",
["jnj"] = "Yemsa",
["jnl"] = "Rawat",
["jns"] = "Jaunsari",
["job"] = "Joba",
["jod"] = "Wojenaka",
["jor"] = "Jorá",
["jos"] = "Jordanian Sign Language",
["jow"] = "Jowulu",
["jpr"] = "Judeo-Persian",
["jpx-hcj"] = "Hachijō",
["jpx-pro"] = "แจพอนิกดั้งเดิม",
["jpx-ryu-pro"] = "Proto-Ryukyuan",
["jqr"] = "Jaqaru",
["jra"] = "Jarai",
["jrr"] = "Jiru",
["jru"] = "Japrería",
["jsl"] = "Japanese Sign Language",
["jua"] = "Júma",
["jub"] = "Wannu",
["juc"] = "จูร์เชน",
["jud"] = "Worodougou",
["juh"] = "Hone",
["jui"] = "Ngadjuri",
["juk"] = "Wapan",
["jul"] = "Jirel",
["jum"] = "Jumjum",
["jun"] = "Juang",
["juo"] = "Jiba",
["jup"] = "Hupdë",
["jur"] = "Jurúna",
["jus"] = "Jumla Sign Language",
["jut"] = "Jutish",
["juu"] = "Ju",
["juw"] = "Wãpha",
["juy"] = "Juray",
["jv"] = "ชวา",
["jvd"] = "Javindo",
["jvn"] = "ชวาแบบแคริบเบียน",
["jwi"] = "Jwira-Pepesa",
["jyy"] = "Jaya",
["ka"] = "จอร์เจีย",
["kaa"] = "การากัลปัก",
["kab"] = "กะไบล์",
["kac"] = "จิ่งเผาะ",
["kad"] = "Kadara",
["kae"] = "Ketangalan",
["kaf"] = "Katso",
["kag"] = "Kajaman",
["kah"] = "Fer",
["kai"] = "Karekare",
["kaj"] = "Jju",
["kak"] = "Kayapa Kallahan",
["kam"] = "Kamba",
["kao"] = "Kassonke",
["kap"] = "Bezhta",
["kaq"] = "Capanahua",
["kar-pro"] = "กะเหรี่ยงดั้งเดิม",
["kaw"] = "ชวาเก่า",
["kax"] = "Kao",
["kay"] = "Kamayurá",
["kba"] = "Kalarko",
["kbb"] = "Kaxuyana",
["kbc"] = "Kadiwéu",
["kbd"] = "คาบาร์เดีย",
["kbe"] = "Kanju",
["kbh"] = "Camsá",
["kbi"] = "Kaptiau",
["kbj"] = "Kari",
["kbk"] = "Grass Koiari",
["kbm"] = "Iwal",
["kbn"] = "Kare (Central Africa)",
["kbo"] = "Keliko",
["kbp"] = "Kabiyé",
["kbq"] = "Kamano",
["kbr"] = "Kafa",
["kbs"] = "Kande",
["kbt"] = "Gabadi",
["kbu"] = "Kabutra",
["kbv"] = "Kamberataro",
["kbw"] = "Kaiep",
["kbx"] = "Ap Ma",
["kbz"] = "Duhwa",
["kca-eas"] = "Eastern Khanty",
["kca-nor"] = "Northern Khanty",
["kca-pro"] = "Proto-Khanty",
["kca-sou"] = "Southern Khanty",
["kcb"] = "Kawacha",
["kcc"] = "Lubila",
["kcd"] = "Ngkâlmpw Kanum",
["kce"] = "Kaivi",
["kcf"] = "Ukaan",
["kcg"] = "Tyap",
["kch"] = "Vono",
["kci"] = "Kamantan",
["kcj"] = "Kobiana",
["kck"] = "Kalanga",
["kcl"] = "Kala",
["kcm"] = "Tar Gula",
["kcn"] = "Nubi",
["kco"] = "Kinalakna",
["kcp"] = "Kanga",
["kcq"] = "Kamo",
["kcr"] = "Katla",
["kcs"] = "Koenoem",
["kct"] = "Kaian",
["kcu"] = "Kikami",
["kcv"] = "Kete",
["kcw"] = "Kabwari",
["kcx"] = "Kachama-Ganjule",
["kcy"] = "Korandje",
["kcz"] = "Konongo",
["kda"] = "Worimi",
["kdc"] = "Kutu",
["kdd"] = "Yankunytjatjara",
["kde"] = "Makonde",
["kdf"] = "Mamusi",
["kdg"] = "Seba",
["kdh"] = "Tem",
["kdi"] = "Kumam",
["kdj"] = "Karamojong",
["kdk"] = "Numèè",
["kdl"] = "Tsikimba",
["kdm"] = "Kagoma",
["kdn"] = "Kunda",
["kdp"] = "Kaningdon-Nindem",
["kdq"] = "Koch",
["kdr"] = "Karaim",
["kdt"] = "กูย",
["kdu"] = "Kadaru",
["kdv"] = "Kado",
["kdw"] = "Koneraw",
["kdx"] = "Kam",
["kdy"] = "Keder",
["kdz"] = "Kwaja",
["kea"] = "ครีโอลกาบูเวร์ดี",
["keb"] = "Kélé",
["kec"] = "Keiga",
["ked"] = "Kerewe",
["kee"] = "Eastern Keres",
["kef"] = "Kpessi",
["keg"] = "Tese",
["keh"] = "Keak",
["kei"] = "Kei",
["kej"] = "Kadar",
["kek"] = "Q'eqchi",
["kel"] = "Kela-Yela",
["kem"] = "Kemak",
["ken"] = "Kenyang",
["keo"] = "Kakwa",
["kep"] = "Kaikadi",
["keq"] = "Kamar",
["ker"] = "Kera",
["kes"] = "Kugbo",
["ket"] = "Ket",
["keu"] = "Akebu",
["kev"] = "Kanikkaran",
["kew"] = "Kewa",
["kex"] = "Kukna",
["key"] = "Kupia",
["kez"] = "Kukele",
["kfa"] = "Kodava",
["kfb"] = "Kolami",
["kfc"] = "Konda-Dora",
["kfd"] = "Korra Koraga",
["kfe"] = "Kota (India)",
["kff"] = "Koya",
["kfg"] = "Kudiya",
["kfh"] = "Kurichiya",
["kfi"] = "Kannada Kurumba",
["kfj"] = "Kemiehua",
["kfk"] = "Kinnauri",
["kfl"] = "Kung",
["kfn"] = "Kuk",
["kfo"] = "Koro (West Africa)",
["kfp"] = "Korwa",
["kfq"] = "Korku",
["kfr"] = "กัจฉ์",
["kfs"] = "Bilaspuri",
["kft"] = "Kanjari",
["kfu"] = "Katkari",
["kfv"] = "Kurmukar",
["kfw"] = "Kharam Naga",
["kfx"] = "Kullu Pahari",
["kfy"] = "Kumaoni",
["kfz"] = "Koromfé",
["kg"] = "คองโก",
["kga"] = "Koyaga",
["kgb"] = "Kawe",
["kgd"] = "Kataang",
["kge"] = "Komering",
["kgf"] = "Kube",
["kgg"] = "Kusunda",
["kgi"] = "Selangor Sign Language",
["kgj"] = "Gamale Kham",
["kgk"] = "Kaiwá",
["kgl"] = "Kunggari",
["kgn"] = "Karingani",
["kgo"] = "Krongo",
["kgp"] = "Kaingang",
["kgq"] = "Kamoro",
["kgr"] = "Abun",
["kgs"] = "Kumbainggar",
["kgt"] = "Somyev",
["kgu"] = "Kobol",
["kgv"] = "Karas",
["kgw"] = "Karon Dori",
["kgx"] = "Kamaru",
["kgy"] = "Kyerung",
["kha"] = "คาซี",
["khb"] = "ไทลื้อ",
["khc"] = "Tukang Besi North",
["khd"] = "Bädi Kanum",
["khe"] = "Korowai",
["khf"] = "Khuen",
["khh"] = "Kehu",
["khi-kho-pro"] = "Proto-Khoe",
["khi-kun"] = "ǃKung",
["khj"] = "Kuturmi",
["khl"] = "Lusi",
["khn"] = "Khandeshi",
["kho"] = "โคตาน",
["khp"] = "Kapauri",
["khq"] = "Koyra Chiini",
["khr"] = "Kharia",
["khs"] = "Kasua",
["kht"] = "คำตี้",
["khu"] = "Nkhumbi",
["khv"] = "Khvarshi",
["khw"] = "Khowar",
["khx"] = "Kanu",
["khy"] = "Ekele",
["khz"] = "Keapara",
["ki"] = "เกโกโย",
["kia"] = "Kim",
["kib"] = "Koalib",
["kic"] = "Kickapoo",
["kid"] = "Koshin",
["kie"] = "Kibet",
["kif"] = "Eastern Parbate Kham",
["kig"] = "Kimaama",
["kih"] = "Kilmeri",
["kii"] = "Kitsai",
["kij"] = "Kilivila",
["kil"] = "Kariya",
["kim"] = "โตฟา",
["kio"] = "Kiowa",
["kip"] = "Sheshi Kham",
["kiq"] = "Kosadle",
["kis"] = "Kis",
["kit"] = "Agob",
["kiv"] = "Kimbu",
["kiw"] = "Northeast Kiwai",
["kix"] = "Khiamniungan Naga",
["kiy"] = "Kirikiri",
["kiz"] = "Kisi",
["kj"] = "Kwanyama",
["kja"] = "Mlap",
["kjb"] = "Q'anjob'al",
["kjc"] = "Coastal Konjo",
["kjd"] = "Southern Kiwai",
["kje"] = "Kisar",
["kjg"] = "ขมุ",
["kjh"] = "คาคัส",
["kji"] = "Zabana",
["kjj"] = "Khinalug",
["kjk"] = "Highland Konjo",
["kjl"] = "Western Parbate Kham",
["kjm"] = "Kháng",
["kjn"] = "Kunjen",
["kjo"] = "Harijan Kinnauri",
["kjp"] = "กะเหรี่ยงโปตะวันออก",
["kjq"] = "Western Keres",
["kjr"] = "Kurudu",
["kjs"] = "East Kewa",
["kjt"] = "กะเหรี่ยงโปแพร่",
["kju"] = "Kashaya",
["kjx"] = "Ramopa",
["kjy"] = "Erave",
["kjz"] = "Bumthangkha",
["kk"] = "คาซัค",
["kka"] = "Kakanda",
["kkb"] = "Kwerisa",
["kkc"] = "Odoodee",
["kkd"] = "Kinuku",
["kke"] = "Kakabe",
["kkf"] = "Kalaktang Monpa",
["kkg"] = "Mabaka Valley Kalinga",
["kkh"] = "เขิน",
["kki"] = "Kagulu",
["kkj"] = "Kako",
["kkk"] = "Kokota",
["kkl"] = "Kosarek Yale",
["kkm"] = "Kiong",
["kkn"] = "Kon Keu",
["kko"] = "Karko",
["kkp"] = "Koko-Bera",
["kkq"] = "Kaiku",
["kkr"] = "Kir-Balar",
["kks"] = "Kirfi",
["kkt"] = "Koi",
["kku"] = "Tumi",
["kkv"] = "Kangean",
["kkw"] = "Teke-Kukuya",
["kkx"] = "Kohin",
["kky"] = "Guugu Yimidhirr",
["kkz"] = "Kaska",
["kl"] = "กรีนแลนด์",
["kla"] = "Klamath-Modoc",
["klb"] = "Kiliwa",
["klc"] = "Kolbila",
["kld"] = "Gamilaraay",
["kle"] = "Kulung",
["klf"] = "Kendeje",
["klg"] = "กาลากันแบบตากาเกาลู",
["klh"] = "Weliki",
["kli"] = "Kalumpang",
["klj"] = "แฆแลจ",
["klk"] = "Kono (Nigeria)",
["kll"] = "กาลากันแบบกากัน",
["klm"] = "Kolom",
["kln"] = "Kalenjin",
["klo"] = "Kapya",
["klp"] = "Kamasa",
["klq"] = "Rumu",
["klr"] = "Khaling",
["kls"] = "Kalasha",
["klt"] = "Nukna",
["klu"] = "Klao",
["klv"] = "Maskelynes",
["klw"] = "ลินดู",
["klx"] = "Koluwawa",
["kly"] = "Kalao",
["klz"] = "Kabola",
["km"] = "เขมร",
["kma"] = "Konni",
["kmb"] = "Kimbundu",
["kmc"] = "ต้งใต้",
["kmd"] = "Madukayang Kalinga",
["kme"] = "Bakole",
["kmf"] = "Kare (New Guinea)",
["kmg"] = "Kâte",
["kmh"] = "Kalam",
["kmi"] = "Kami",
["kmj"] = "Kumarbhag Paharia",
["kmk"] = "Limos Kalinga",
["kml"] = "Tanudan Kalinga",
["kmm"] = "Kom (India)",
["kmn"] = "Awtuw",
["kmo"] = "Kwoma",
["kmp"] = "Gimme",
["kmq"] = "Kwama",
["kmr"] = "เคิร์ดเหนือ",
["kms"] = "Kamasau",
["kmt"] = "Kemtuik",
["kmu"] = "Kanite",
["kmv"] = "Karipúna Creole French",
["kmw"] = "Kumu",
["kmx"] = "Waboda",
["kmy"] = "Koma",
["kmz"] = "Khorasani Turkish",
["kn"] = "กันนฑะ",
["kna"] = "Kanakuru",
["knb"] = "Lubuagan Kalinga",
["knd"] = "Konda",
["kne"] = "กันกานาอือ",
["knf"] = "Mankanya",
["kni"] = "Kanufi",
["knj"] = "Akatek",
["knk"] = "Kuranko",
["knl"] = "Keninjal",
["knm"] = "Kanamari",
["kno"] = "Kono (Sierra Leone)",
["knp"] = "Kwanja",
["knq"] = "Kintaq",
["knr"] = "Kaningra",
["kns"] = "Kensiu",
["knt"] = "Katukina",
["knu"] = "Kono (Guinea)",
["knv"] = "Tabo",
["knx"] = "Kendayan",
["kny"] = "Kanyok",
["knz"] = "Kalamsé",
["ko"] = "เกาหลี",
["ko-ear"] = "เกาหลีใหม่ช่วงต้น",
["koa"] = "Konomala",
["koc"] = "Kpati",
["kod"] = "Kodi",
["koe"] = "Kacipo-Balesi",
["kof"] = "Kubi",
["kog"] = "Cogui",
["koh"] = "Koyo",
["koi"] = "Komi-Permyak",
["kok"] = "กงกัณ",
["kol"] = "Kol (New Guinea)",
["koo"] = "Konzo",
["kop"] = "Waube",
["koq"] = "Kota (Gabon)",
["kos"] = "Kosraean",
["kot"] = "Lagwan",
["kou"] = "Koke",
["kov"] = "Kudu-Camo",
["kow"] = "Kugama",
["koy"] = "Koyukon",
["koz"] = "Korak",
["kpa"] = "Kutto",
["kpb"] = "Mullu Kurumba",
["kpc"] = "Curripaco",
["kpd"] = "Koba",
["kpe"] = "Kpelle",
["kpf"] = "Komba",
["kpg"] = "Kapingamarangi",
["kph"] = "Kplang",
["kpi"] = "Kofei",
["kpj"] = "Karajá",
["kpk"] = "Kpan",
["kpl"] = "Kpala",
["kpm"] = "เกอฮอ",
["kpn"] = "Kepkiriwát",
["kpo"] = "Ikposo",
["kpq"] = "Korupun-Sela",
["kpr"] = "Korafe-Yegha",
["kps"] = "Tehit",
["kpt"] = "Karata",
["kpu"] = "Kafoa",
["kpv"] = "Komi-Zyrian",
["kpw"] = "Kobon",
["kpx"] = "Mountain Koiari",
["kpy"] = "Koryak",
["kpz"] = "Kupsabiny",
["kqa"] = "Mum",
["kqb"] = "Kovai",
["kqc"] = "Doromu-Koki",
["kqd"] = "Koy Sanjaq Surat",
["kqe"] = "กาลากัน",
["kqf"] = "Kakabai",
["kqg"] = "Khe",
["kqh"] = "Kisankasa",
["kqi"] = "Koitabu",
["kqj"] = "Koromira",
["kqk"] = "Kotafon Gbe",
["kql"] = "Kyenele",
["kqm"] = "Khisa",
["kqn"] = "Kaonde",
["kqo"] = "Eastern Krahn",
["kqp"] = "Kimré",
["kqq"] = "Krenak",
["kqr"] = "Kimaragang",
["kqs"] = "Northern Kissi",
["kqt"] = "Klias River Kadazan",
["kqu"] = "Seroa",
["kqv"] = "Okolod",
["kqw"] = "Kandas",
["kqx"] = "Mser",
["kqy"] = "Koorete",
["kqz"] = "Korana",
["kr"] = "กานูรี",
["kra"] = "Kumhali",
["krb"] = "Karkin",
["krc"] = "Karachay-Balkar",
["krd"] = "Kairui-Midiki",
["kre"] = "Panará",
["krf"] = "Koro (Vanuatu)",
["krh"] = "Kurama",
["kri"] = "Krio",
["krj"] = "Kinaray-a",
["krk"] = "Kerek",
["krl"] = "คาเรเลีย",
["krm"] = "Krim",
["krn"] = "Sapo",
["kro-pro"] = "Proto-Kru",
["krp"] = "Korop",
["krr"] = "Kru'ng",
["krs"] = "Kresh",
["kru"] = "กุรุข",
["krv"] = "Kavet",
["krw"] = "Western Krahn",
["krx"] = "Karon",
["kry"] = "Kryts",
["krz"] = "Sota Kanum",
["ks"] = "แคชเมียร์",
["ksa"] = "Shuwa-Zamani",
["ksb"] = "Shambala",
["ksc"] = "Southern Kalinga",
["ksd"] = "Tolai",
["kse"] = "Kuni",
["ksf"] = "Bafia",
["ksg"] = "Kusaghe",
["ksi"] = "Krisa",
["ksj"] = "Uare",
["ksk"] = "Kansa",
["ksl"] = "Kumalu",
["ksm"] = "Kumba",
["ksn"] = "Kasiguranin",
["kso"] = "Kofa",
["ksp"] = "Kaba",
["ksq"] = "Kwaami",
["ksr"] = "Borong",
["kss"] = "Southern Kissi",
["kst"] = "Winyé",
["ksu"] = "Khamyang",
["ksv"] = "Kusu",
["ksw"] = "กะเหรี่ยงสะกอ",
["ksx"] = "Kedang",
["ksy"] = "Kharia Thar",
["ksz"] = "Kodaku",
["kta"] = "Katua",
["ktb"] = "Kambaata",
["ktc"] = "Kholok",
["ktd"] = "Kokata",
["ktf"] = "Kwami",
["ktg"] = "Kalkatungu",
["kth"] = "Karanga",
["kti"] = "North Muyu",
["ktj"] = "Plapo Krumen",
["ktk"] = "Kaniet",
["ktl"] = "Koroshi",
["ktm"] = "Kurti",
["ktn"] = "Karitiâna",
["kto"] = "Kuot",
["ktp"] = "Kaduo",
["ktq"] = "Katabaga",
["ktr"] = "Kota Marudu Tinagas",
["kts"] = "South Muyu",
["ktt"] = "Ketum",
["ktu"] = "Kituba",
["ktv"] = "กะตูตะวันออก",
["ktw"] = "Kato",
["ktx"] = "Kaxararí",
["kty"] = "Kango",
["ktz"] = "Juǀ'hoan",
["ku-pro"] = "เคอร์ดิชดั้งเดิม",
["kub"] = "Kutep",
["kuc"] = "Kwinsu",
["kud"] = "Auhelawa",
["kue"] = "Kuman",
["kuf"] = "กะตูตะวันตก",
["kug"] = "Kupa",
["kuh"] = "Kushi",
["kui"] = "Kuikúro",
["kuj"] = "Kuria",
["kuk"] = "Kepo'",
["kul"] = "Kulere",
["kum"] = "คูมุก",
["kun"] = "Kunama",
["kuo"] = "Kumukio",
["kup"] = "Kunimaipa",
["kuq"] = "Karipuna",
["kus"] = "Kusaal",
["kut"] = "Ktunaxa",
["kuu"] = "Upper Kuskokwim",
["kuv"] = "Kur",
["kuw"] = "Kpagua",
["kux"] = "Kukatja",
["kuy"] = "Kuuku-Ya'u",
["kuz"] = "Kunza",
["kva"] = "Bagvalal",
["kvb"] = "Kubu",
["kvc"] = "Kove",
["kvd"] = "Kui (Indonesia)",
["kve"] = "Kalabakan",
["kvf"] = "Kabalai",
["kvg"] = "Kuni-Boazi",
["kvh"] = "Komodo",
["kvi"] = "Kwang",
["kvj"] = "Psikye",
["kvk"] = "Korean Sign Language",
["kvl"] = "Brek Karen",
["kvm"] = "Kendem",
["kvn"] = "Border Kuna",
["kvo"] = "Dobel",
["kvp"] = "Kompane",
["kvq"] = "Geba Karen",
["kvr"] = "Kerinci",
["kvt"] = "Lahta Karen",
["kvu"] = "Yinbaw Karen",
["kvv"] = "Kola",
["kvw"] = "Wersing",
["kvx"] = "Parkari Koli",
["kvy"] = "Yintale Karen",
["kvz"] = "Tsakwambo",
["kw"] = "คอร์นวอลล์",
["kwa"] = "Dâw",
["kwb"] = "Baa",
["kwc"] = "Likwala",
["kwd"] = "Kwaio",
["kwe"] = "Kwerba",
["kwf"] = "Kwara'ae",
["kwg"] = "Sara Kaba Deme",
["kwh"] = "Kowiai",
["kwi"] = "Awa-Cuaiquer",
["kwj"] = "Kwanga",
["kwk"] = "Kwak'wala",
["kwl"] = "Kofyar",
["kwm"] = "Kwambi",
["kwn"] = "Kwangali",
["kwo"] = "Kwomtari",
["kwp"] = "Kodia",
["kwq"] = "Kwak",
["kwr"] = "Kwer",
["kws"] = "Kwese",
["kwt"] = "Kwesten",
["kwu"] = "Kwakum",
["kwv"] = "Sara Kaba Náà",
["kww"] = "Kwinti",
["kwx"] = "Khirwar",
["kwz"] = "Kwadi",
["kxa"] = "Kairiru",
["kxb"] = "Krobu",
["kxc"] = "Konso",
["kxd"] = "มลายูแบบบรูไน",
["kxe"] = "Kakihum",
["kxf"] = "Manumanaw Karen",
["kxh"] = "Karo",
["kxi"] = "Keningau Murut",
["kxj"] = "Kulfa",
["kxk"] = "Zayein Karen",
["kxl"] = "Nepali Kurux",
["kxm"] = "เขมรเหนือ",
["kxn"] = "Kanowit",
["kxo"] = "Kanoé",
["kxp"] = "Wadiyara Koli",
["kxq"] = "Smärky Kanum",
["kxr"] = "Manus Koro",
["kxs"] = "Kangjia",
["kxt"] = "Koiwat",
["kxu"] = "Kui (India)",
["kxv"] = "Kuvi",
["kxw"] = "Konai",
["kxx"] = "Likuba",
["kxy"] = "Kayong",
["kxz"] = "Kerewo",
["ky"] = "คีร์กีซ",
["kya"] = "Kwaya",
["kyb"] = "Butbut Kalinga",
["kyc"] = "Kyaka",
["kyd"] = "Karey",
["kye"] = "Krache",
["kyf"] = "Kouya",
["kyg"] = "Keyagana",
["kyh"] = "Karok",
["kyi"] = "Kiput",
["kyj"] = "กาเรา",
["kyk"] = "Kamayo",
["kyl"] = "Kalapuya",
["kym"] = "Kpatili",
["kyn"] = "Karolanos",
["kyo"] = "Kelon",
["kyp"] = "Kang",
["kyq"] = "Kenga",
["kyr"] = "Kuruáya",
["kys"] = "Baram Kayan",
["kyt"] = "Kayagar",
["kyu"] = "กะยาตะวันตก",
["kyv"] = "Kayort",
["kyw"] = "Kudmali",
["kyx"] = "Rapoisi",
["kyy"] = "Kambaira",
["kyz"] = "Kayabí",
["kza"] = "Western Karaboro",
["kzb"] = "Kaibobo",
["kzc"] = "Bondoukou Kulango",
["kzd"] = "Kadai",
["kzf"] = "Da'a Kaili",
["kzg"] = "Kikai",
["kzh"] = "Dongolawi",
["kzi"] = "Kelabit",
["kzj"] = "กาดาซันชายฝั่ง",
["kzk"] = "Kazukuru",
["kzl"] = "Kayeli",
["kzm"] = "Kais",
["kzn"] = "Kokola",
["kzo"] = "Kaningi",
["kzp"] = "Kaidipang",
["kzq"] = "Kaike",
["kzr"] = "Karang",
["kzs"] = "Sugut Dusun",
["kzt"] = "Tambunan Dusun",
["kzu"] = "Kayupulau",
["kzv"] = "Komyandaret",
["kzw"] = "Kariri",
["kzx"] = "Kamarian",
["kzy"] = "Kango-Sua",
["kzz"] = "Kalabra",
["la"] = "ละติน",
["laa"] = "Lapuyan Subanun",
["lab"] = "Linear A",
["lac"] = "Lacandon",
["lad"] = "ลาดิโน",
["lae"] = "Pattani",
["laf"] = "Lafofa",
["lag"] = "Langi",
["lah"] = "Lahnda",
["lai"] = "Lambya",
["laj"] = "Lango (Uganda)",
["lak"] = "Laka",
["lam"] = "Lamba",
["lan"] = "Laru",
["lap"] = "Kabba-Laka",
["laq"] = "Qabiao",
["lar"] = "Larteh",
["las"] = "Gur Lama",
["lau"] = "Laba",
["law"] = "Lauje",
["lax"] = "Tiwa",
["lay"] = "Lama Bai",
["laz"] = "Aribwatsa",
["lb"] = "ลักเซมเบิร์ก",
["lbb"] = "Label",
["lbc"] = "ลักเกีย",
["lbe"] = "ลัก",
["lbf"] = "Tinani",
["lbg"] = "Laopang",
["lbi"] = "La'bi",
["lbj"] = "ลาดัก",
["lbk"] = "Central Bontoc",
["lbl"] = "Libon Bikol",
["lbm"] = "Lodhi",
["lbn"] = "Lamet",
["lbo"] = "Laven",
["lbq"] = "Wampar",
["lbr"] = "Northern Lorung",
["lbs"] = "Libyan Sign Language",
["lbt"] = "Lachi",
["lbu"] = "Labu",
["lbv"] = "Lavatbura-Lamusong",
["lbw"] = "Tolaki",
["lbx"] = "Lawangan",
["lby"] = "Lamu-Lamu",
["lbz"] = "Lardil",
["lcc"] = "Legenyem",
["lcd"] = "Lola",
["lce"] = "Loncong",
["lcf"] = "Lubu",
["lch"] = "Luchazi",
["lcl"] = "Lisela",
["lcm"] = "Tungag",
["lcp"] = "เลอเวือะตะวันตก",
["lcq"] = "Luhu",
["lcs"] = "Lisabata-Nuniali",
["lda"] = "Kla",
["ldb"] = "Idun",
["ldd"] = "Luri (Nigeria)",
["ldg"] = "Lenyima",
["ldh"] = "Lamja-Dengsa-Tola",
["ldj"] = "Lemoro",
["ldk"] = "Leelau",
["ldl"] = "Kaan",
["ldm"] = "Landoma",
["ldn"] = "Láadan",
["ldo"] = "Loo",
["ldp"] = "Tso",
["ldq"] = "Lufu",
["lea"] = "Lega-Shabunda",
["leb"] = "Lala-Bisa",
["lec"] = "Leco",
["led"] = "Lendu",
["lee"] = "Lyélé",
["lef"] = "Lelemi",
["leh"] = "Lenje",
["lei"] = "Lemio",
["lej"] = "Lengola",
["lek"] = "Leipon",
["lel"] = "Lele (Congo)",
["lem"] = "Nomaande",
["len"] = "Honduran Lenca",
["leo"] = "Mengisa",
["lep"] = "Lepcha",
["leq"] = "Lembena",
["ler"] = "Lenkau",
["les"] = "Lese",
["let"] = "Lesing-Gelimi",
["leu"] = "Kara (New Guinea)",
["lev"] = "Lamma",
["lew"] = "Ledo Kaili",
["lex"] = "Luang",
["ley"] = "Lemolang",
["lez"] = "เลซกี",
["lfa"] = "Lefa",
["lfn"] = "Lingua Franca Nova",
["lg"] = "ลูกันดา",
["lga"] = "Lungga",
["lgb"] = "Laghu",
["lgg"] = "Lugbara",
["lgh"] = "Laghuu",
["lgi"] = "Lengilu",
["lgk"] = "Neverver",
["lgl"] = "Wala",
["lgm"] = "Lega-Mwenga",
["lgn"] = "Opuuo",
["lgq"] = "Logba",
["lgr"] = "Lengo",
["lgs"] = "Guinea-Bissau Sign Language",
["lgt"] = "Pahi",
["lgu"] = "Longgu",
["lgz"] = "Ligenza",
["lha"] = "Laha (Vietnam)",
["lhh"] = "Laha (Indonesia)",
["lhi"] = "Lahu Shi",
["lhl"] = "Lahul Lohar",
["lhn"] = "Lahanan",
["lhp"] = "Lhokpu",
["lhs"] = "Mlahsö",
["lht"] = "Lo-Toga",
["lhu"] = "Lahu",
["li"] = "ลิมเบิร์ก",
["lia"] = "West-Central Limba",
["lib"] = "Likum",
["lic"] = "ไหล",
["lid"] = "Nyindrou",
["lie"] = "Likila",
["lif"] = "ลิมบู",
["lig"] = "Ligbi",
["lih"] = "Lihir",
["lii"] = "Lingkhim",
["lij"] = "ลีกูเรีย",
["lik"] = "Lika",
["lil"] = "Lillooet",
["lio"] = "Liki",
["lip"] = "Sekpele",
["liq"] = "Libido",
["lir"] = "Liberian Kreyol",
["lis"] = "ลีสู่",
["liu"] = "Logorik",
["liv"] = "ลีโวเนีย",
["liw"] = "Col",
["lix"] = "Liabuku",
["liy"] = "Banda-Bambari",
["liz"] = "Libinza",
["lja"] = "Golpa",
["lje"] = "Rampi",
["lji"] = "Laiyolo",
["ljl"] = "Li'o",
["ljp"] = "Lampung Api",
["ljw"] = "Yirandali",
["ljx"] = "Yuru",
["lka"] = "Lakalei",
["lkb"] = "Kabras",
["lkc"] = "Kucong",
["lkd"] = "Lakondê",
["lke"] = "Kenyi",
["lkh"] = "Lakha",
["lki"] = "Laki",
["lkj"] = "Remun",
["lkl"] = "Laeko-Libuat",
["lkm"] = "Kalaamaya",
["lkn"] = "Lakon",
["lko"] = "Khayo",
["lkr"] = "Päri",
["lks"] = "Kisa",
["lkt"] = "ลาโคตา",
["lku"] = "Kungkari",
["lky"] = "Lokoya",
["lla"] = "Lala-Roba",
["llb"] = "Lolo",
["llc"] = "Lele (Guinea)",
["lld"] = "ลาดิน",
["lle"] = "Lele (New Guinea)",
["llf"] = "Hermit",
["llg"] = "Lole",
["llh"] = "Lamu",
["lli"] = "Teke-Laali",
["llj"] = "Ladji-Ladji",
["llk"] = "Lelak",
["lll"] = "Lilau",
["llm"] = "Lasalimu",
["lln"] = "Lele (Chad)",
["llo"] = "Khlor",
["llp"] = "North Efate",
["llq"] = "Lolak",
["lls"] = "Lithuanian Sign Language",
["llu"] = "Lau",
["llx"] = "Lauan",
["lma"] = "East Limba",
["lmb"] = "Merei",
["lmc"] = "Limilngan",
["lmd"] = "Lumun",
["lme"] = "Pévé",
["lmf"] = "South Lembata",
["lmg"] = "Lamogai",
["lmh"] = "Lambichhong",
["lmi"] = "Lombi",
["lmj"] = "West Lembata",
["lmk"] = "Lamkang",
["lml"] = "Raga",
["lmn"] = "Lambadi",
["lmo"] = "ลอมบาร์ด",
["lmp"] = "Limbum",
["lmq"] = "Lamatuka",
["lmr"] = "Lamalera",
["lmu"] = "Lamenu",
["lmv"] = "Lomaiviti",
["lmw"] = "Lake Miwok",
["lmx"] = "Laimbue",
["lmy"] = "ลัมโบยา",
["lmz"] = "Lumbee",
["ln"] = "ลิงกาลา",
["lna"] = "Langbashe",
["lnb"] = "Mbalanhu",
["lnd"] = "Lun Bawang",
["lnh"] = "Lanoh",
["lni"] = "Daantanai'",
["lnj"] = "Linngithigh",
["lnl"] = "South Central Banda",
["lnm"] = "Langam",
["lnn"] = "Lorediakarkar",
["lno"] = "Lango (Sudan)",
["lns"] = "Lamnso'",
["lnu"] = "Longuda",
["lnw"] = "Lanima",
["lo"] = "ลาว",
["loa"] = "Loloda",
["lob"] = "Lobi",
["loc"] = "Inonhan",
["lod"] = "เบอราวัน",
["loe"] = "Saluan",
["lof"] = "Logol",
["log"] = "Logo",
["loh"] = "Narim",
["loi"] = "Lomakka",
["loj"] = "Lou",
["lok"] = "Loko",
["lol"] = "Mongo",
["lom"] = "Loma",
["lon"] = "Malawi Lomwe",
["loo"] = "Lombo",
["lop"] = "Lopa",
["loq"] = "Lobala",
["lor"] = "Téén",
["los"] = "Loniu",
["lot"] = "Lotuko",
["lou"] = "ครีโอลลุยเซียนา",
["lov"] = "Lopi",
["low"] = "Tampias Lobu",
["lox"] = "Loun",
["loz"] = "Lozi",
["lpa"] = "Lelepa",
["lpe"] = "Lepki",
["lpn"] = "Long Phuri Naga",
["lpo"] = "Lipo",
["lpx"] = "Lopit",
["lra"] = "Rara Bakati'",
["lrc"] = "Northern Luri",
["lre"] = "Laurentian",
["lrg"] = "Laragia",
["lri"] = "Marachi",
["lrk"] = "Loarki",
["lrl"] = "Larestani",
["lrm"] = "Marama",
["lrn"] = "Lorang",
["lro"] = "Laro",
["lrr"] = "Southern Lorung",
["lrt"] = "Larantuka Malay",
["lrv"] = "Larëvat",
["lrz"] = "Lemerig",
["lsa"] = "Lasgerdi",
["lsd"] = "Lishana Deni",
["lse"] = "Lusengo",
["lsh"] = "Lish",
["lsi"] = "Lashi",
["lsl"] = "Latvian Sign Language",
["lsm"] = "Saamia",
["lsn"] = "Tibetan Sign Language",
["lso"] = "Laos Sign Language",
["lsp"] = "Panamanian Sign Language",
["lsr"] = "Aruop",
["lss"] = "Lasi",
["lst"] = "Trinidad and Tobago Sign Language",
["lsv"] = "Sivia Sign Language",
["lsy"] = "Mauritian Sign Language",
["lt"] = "ลิทัวเนีย",
["ltc"] = "จีนยุคกลาง",
["ltg"] = "ลัตเกล",
["lti"] = "Leti",
["ltn"] = "Latundê",
["lto"] = "Olutsotso",
["lts"] = "Lutachoni",
["ltu"] = "Latu",
["lu"] = "Luba-Katanga",
["lua"] = "Luba-Kasai",
["luc"] = "Aringa",
["lud"] = "Ludian",
["lue"] = "Luvale",
["luf"] = "Laua",
["luh"] = "หล่อยแอว๋",
["lui"] = "Luiseño",
["luj"] = "Luna",
["luk"] = "Lunanakha",
["lul"] = "Olu'bo",
["lum"] = "Luimbi",
["lun"] = "Lunda",
["luo"] = "Luo",
["lup"] = "Lumbu",
["luq"] = "Lucumí",
["lur"] = "Laura",
["lus"] = "มีโซ",
["lut"] = "Lushootseed",
["luu"] = "Lumba-Yakkha",
["luv"] = "Luwati",
["luy"] = "Luhya",
["luz"] = "Southern Luri",
["lv"] = "ลัตเวีย",
["lva"] = "Maku'a",
["lvi"] = "Lawi",
["lvk"] = "Lavukaleve",
["lvl"] = "Lwel",
["lvu"] = "Levuka",
["lwa"] = "Lwalu",
["lwe"] = "Lewo Eleng",
["lwg"] = "Wanga",
["lwh"] = "White Lachi",
["lwl"] = "เลอเวือะตะวันออก",
["lwm"] = "Laomian",
["lwo"] = "Luwo",
["lws"] = "Malawian Sign Language",
["lwt"] = "Lewotobi",
["lwu"] = "Lawu",
["lww"] = "Lewo",
["lya"] = "Layakha",
["lyg"] = "ลึงงัม",
["lyn"] = "Luyana",
["lzh"] = "จีนวรรณกรรม",
["lzl"] = "Litzlitz",
["lzn"] = "Leinong Naga",
["lzz"] = "ลัซ",
["maa"] = "San Jerónimo Tecóatl Mazatec",
["mab"] = "Yutanduchi Mixtec",
["mad"] = "Madurese",
["mae"] = "Bo-Rukul",
["maf"] = "Mafa",
["mag"] = "มคหะ",
["mai"] = "ไมถิลี",
["maj"] = "Jalapa de Díaz Mazatec",
["mak"] = "มากัซซาร์",
["mam"] = "Mam",
["man"] = "Mandingo",
["map-ata-pro"] = "Proto-Atayalic",
["map-bms"] = "Banyumasan",
["map-pro"] = "ออสโตรนีเซียนดั้งเดิม",
["maq"] = "Chiquihuitlán Mazatec",
["mas"] = "มาไซ",
["mat"] = "Matlatzinca",
["mau"] = "Huautla Mazatec",
["mav"] = "Sateré-Mawé",
["maw"] = "Mampruli",
["max"] = "มลายูแบบโมลุกกะเหนือ",
["maz"] = "Central Mazahua",
["mba"] = "Higaonon",
["mbb"] = "Western Bukidnon Manobo",
["mbc"] = "Macushi",
["mbd"] = "Dibabawon Manobo",
["mbe"] = "Molale",
["mbf"] = "Baba Malay",
["mbh"] = "Mangseng",
["mbi"] = "Ilianen Manobo",
["mbj"] = "Nadëb",
["mbk"] = "Malol",
["mbl"] = "Maxakalí",
["mbm"] = "Ombamba",
["mbn"] = "Macaguán",
["mbo"] = "Mbo (Cameroon)",
["mbp"] = "Wiwa",
["mbq"] = "Maisin",
["mbr"] = "Nukak Makú",
["mbs"] = "Sarangani Manobo",
["mbt"] = "Matigsalug Manobo",
["mbu"] = "Mbula-Bwazza",
["mbv"] = "Mbulungish",
["mbw"] = "Maring",
["mbx"] = "Sepik Mari",
["mby"] = "Memoni",
["mbz"] = "Amoltepec Mixtec",
["mca"] = "Maca",
["mcb"] = "Machiguenga",
["mcc"] = "Bitur",
["mcd"] = "Sharanahua",
["mce"] = "Itundujia Mixtec",
["mcf"] = "Matsés",
["mcg"] = "Mapoyo",
["mch"] = "Ye'kwana",
["mci"] = "Mese",
["mcj"] = "Mvanip",
["mck"] = "Mbunda",
["mcl"] = "Macaguaje",
["mcm"] = "Kristang",
["mcn"] = "Masana",
["mco"] = "Coatlán Mixe",
["mcp"] = "Makaa",
["mcq"] = "Ese",
["mcr"] = "Menya",
["mcs"] = "Mambai",
["mcu"] = "Cameroon Mambila",
["mcw"] = "Mawa",
["mcx"] = "Mpiemo",
["mcy"] = "South Watut",
["mcz"] = "Mawan",
["mda"] = "Mada (Nigeria)",
["mdb"] = "Morigi",
["mdc"] = "Male",
["mdd"] = "Mbum",
["mde"] = "Bura Mabang",
["mdf"] = "มอกชา",
["mdg"] = "Massalat",
["mdh"] = "มากินดาเนา",
["mdi"] = "Mamvu",
["mdj"] = "Mangbetu",
["mdk"] = "Mangbutu",
["mdl"] = "Maltese Sign Language",
["mdm"] = "Mayogo",
["mdn"] = "Mbati",
["mdp"] = "Mbala",
["mdq"] = "Mbole",
["mdr"] = "Mandar",
["mds"] = "Maria",
["mdt"] = "Mbere",
["mdu"] = "Mboko",
["mdv"] = "Santa Lucía Monteverde Mixtec",
["mdw"] = "Mbosi",
["mdx"] = "Dizin",
["mdy"] = "Maale",
["mdz"] = "Suruí Do Pará",
["mea"] = "Menka",
["meb"] = "Ikobi-Mena",
["mec"] = "Mara",
["med"] = "Melpa",
["mee"] = "Mengen",
["mef"] = "Megam",
["meh"] = "Southwestern Tlaxiaco Mixtec",
["mei"] = "Midob",
["mej"] = "Meyah",
["mek"] = "Mekeo",
["mel"] = "Central Melanau",
["mem"] = "Mangala",
["men"] = "Mende",
["meo"] = "มลายูแบบเกอดะฮ์",
["mep"] = "Miriwung",
["meq"] = "Merey",
["mer"] = "Meru",
["mes"] = "Masmaje",
["met"] = "Mato",
["meu"] = "Motu",
["mev"] = "Mano",
["mew"] = "Maaka",
["mey"] = "Hassaniya Arabic",
["mez"] = "Menominee",
["mfa"] = "มลายูแบบปัตตานี",
["mfb"] = "Bangka",
["mfc"] = "Mba",
["mfd"] = "Mendankwe-Nkwen",
["mfe"] = "ครีโอลมอริเชียส",
["mff"] = "Naki",
["mfg"] = "Mixifore",
["mfh"] = "Matal",
["mfi"] = "Wandala",
["mfj"] = "Mefele",
["mfk"] = "North Mofu",
["mfl"] = "Putai",
["mfm"] = "Marghi South",
["mfn"] = "Cross River Mbembe",
["mfo"] = "Mbe",
["mfp"] = "Makassar Malay",
["mfq"] = "Moba",
["mfr"] = "Marrithiyel",
["mfs"] = "Mexican Sign Language",
["mft"] = "Mokerang",
["mfu"] = "Mbwela",
["mfv"] = "Mandjak",
["mfw"] = "Mulaha",
["mfx"] = "Melo",
["mfy"] = "Mayo",
["mfz"] = "Mabaan",
["mg"] = "มาลากาซี",
["mga"] = "ไอริชกลาง",
["mgb"] = "Mararit",
["mgc"] = "Morokodo",
["mgd"] = "Moru",
["mge"] = "Mango",
["mgf"] = "Maklew",
["mgg"] = "Mpongmpong",
["mgh"] = "Makhuwa-Meetto",
["mgi"] = "Jili",
["mgj"] = "Abureni",
["mgk"] = "Mawes",
["mgl"] = "Maleu-Kilenge",
["mgm"] = "Mambae",
["mgn"] = "Mbangi",
["mgo"] = "Meta'",
["mgp"] = "Eastern Magar",
["mgq"] = "Malila",
["mgr"] = "Mambwe-Lungu",
["mgs"] = "Manda (Tanzania)",
["mgt"] = "Mongol",
["mgu"] = "Mailu",
["mgv"] = "Matengo",
["mgw"] = "Matumbi",
["mgy"] = "Mbunga",
["mgz"] = "Mbugwe",
["mh"] = "มาร์แชลล์",
["mha"] = "Manda (India)",
["mhb"] = "Mahongwe",
["mhc"] = "Mocho",
["mhd"] = "Mbugu",
["mhe"] = "Besisi",
["mhf"] = "Mamaa",
["mhg"] = "Marrgu",
["mhi"] = "Ma'di",
["mhj"] = "Mogholi",
["mhk"] = "Mungaka",
["mhl"] = "Mauwake",
["mhm"] = "Makhuwa-Moniga",
["mhn"] = "โมเชโน",
["mho"] = "Mashi",
["mhp"] = "Balinese Malay",
["mhq"] = "Mandan",
["mhr"] = "Eastern Mari",
["mhs"] = "Buru (Indonesia)",
["mht"] = "Mandahuaca",
["mhu"] = "Taraon",
["mhw"] = "Mbukushu",
["mhx"] = "Lhao Vo",
["mhy"] = "Ma'anyan",
["mhz"] = "Mor (Austronesian)",
["mi"] = "มาวรี",
["mia"] = "Miami",
["mib"] = "Atatláhuca Mixtec",
["mic"] = "Mi'kmaq",
["mid"] = "Mandaic",
["mie"] = "Ocotepec Mixtec",
["mif"] = "Mofu-Gudur",
["mig"] = "San Miguel el Grande Mixtec",
["mih"] = "Chayuco Mixtec",
["mii"] = "Chigmecatitlán Mixtec",
["mij"] = "Mungbam",
["mik"] = "Mikasuki",
["mil"] = "Peñoles Mixtec",
["mim"] = "Alacatlatzala Mixtec",
["min"] = "มีนังกาเบา",
["mio"] = "Pinotepa Nacional Mixtec",
["mip"] = "Apasco-Apoala Mixtec",
["miq"] = "Miskito",
["mir"] = "Isthmus Mixe",
["mis-hkl"] = "Kelantan Peranakan Hokkien",
["mis-idn"] = "Idiom Neutral",
["mis-isa"] = "Isaurian",
["mis-jie"] = "Jie",
["mis-jzh"] = "Jizhao",
["mis-kas"] = "Kassite",
["mis-mmd"] = "Mimi of Decorse",
["mis-mmn"] = "Mimi of Nachtigal",
["mis-phi"] = "Philistine",
["mis-rou"] = "Rouran",
["mis-tdl"] = "Turdulian",
["mis-tdt"] = "Turdetanian",
["mis-tnw"] = "Tangwang",
["mis-tuh"] = "Tuyuhun",
["mis-tuo"] = "Tuoba",
["mis-wuh"] = "Wuhuan",
["mis-xbi"] = "Xianbei",
["mis-xnu"] = "Xiongnu",
["mit"] = "Southern Puebla Mixtec",
["miu"] = "Cacaloxtepec Mixtec",
["miw"] = "Akoye",
["mix"] = "Mixtepec Mixtec",
["miy"] = "Ayutla Mixtec",
["miz"] = "Coatzospan Mixtec",
["mjb"] = "Makalero",
["mjc"] = "San Juan Colorado Mixtec",
["mjd"] = "Northwest Maidu",
["mje"] = "Muskum",
["mjg-mgl"] = "Mongghul",
["mjg-mgr"] = "Mangghuer",
["mji"] = "Kim Mun",
["mjj"] = "Mawak",
["mjk"] = "Matukar",
["mjl"] = "Mandeali",
["mjm"] = "Medebur",
["mjn"] = "Mebu",
["mjo"] = "Malankuravan",
["mjp"] = "Malapandaram",
["mjq"] = "Malaryan",
["mjr"] = "Malavedan",
["mjs"] = "Miship",
["mjt"] = "Sawriya Paharia",
["mju"] = "Manna-Dora",
["mjv"] = "Mannan",
["mjw"] = "Karbi",
["mjx"] = "Mahali",
["mjy"] = "Mahican",
["mjz"] = "Majhi",
["mk"] = "มาซิโดเนีย",
["mka"] = "Mbre",
["mkb"] = "Mal Paharia",
["mkc"] = "Siliput",
["mke"] = "Mawchi",
["mkf"] = "Miya",
["mkg"] = "Mak (China)",
["mkh-asl-pro"] = "Proto-Aslian",
["mkh-ban-pro"] = "Proto-Bahnaric",
["mkh-kat-pro"] = "Proto-Katuic",
["mkh-khm-pro"] = "ขมุอิกดั้งเดิม",
["mkh-kmr-pro"] = "เขมรดั้งเดิม",
["mkh-mmn"] = "มอญกลาง",
["mkh-mnc-pro"] = "มอญดั้งเดิม",
["mkh-mvi"] = "เวียดนามกลาง",
["mkh-pal-pro"] = "ปะหล่องดั้งเดิม",
["mkh-pea-pro"] = "แพริกดั้งเดิม",
["mkh-pkn-pro"] = "Proto-Pakanic",
["mkh-pro"] = "มอญ-เขมรดั้งเดิม",
["mkh-vie-pro"] = "เวียตติกดั้งเดิม",
["mki"] = "Dhatki",
["mkj"] = "โมกิล",
["mkk"] = "Byep",
["mkl"] = "Mokole",
["mkm"] = "Moklen",
["mkn"] = "Kupang Malay",
["mko"] = "Mingang Doso",
["mkp"] = "Moikodi",
["mkq"] = "Bay Miwok",
["mkr"] = "Malas",
["mks"] = "Silacayoapan Mixtec",
["mkt"] = "Vamale",
["mku"] = "Konyanka Maninka",
["mkv"] = "Mav̋ea",
["mkx"] = "Cinamiguin Manobo",
["mky"] = "Taba",
["mkz"] = "Makasae",
["ml"] = "มลยาฬัม",
["mla"] = "Tamambo",
["mlb"] = "Mbule",
["mlc"] = "Caolan",
["mle"] = "Manambu",
["mlf"] = "มัล",
["mlh"] = "Mape",
["mli"] = "Malimpung",
["mlj"] = "Miltu",
["mlk"] = "Ilwana",
["mll"] = "Malua Bay",
["mlm"] = "Mulam",
["mln"] = "Malango",
["mlo"] = "Mlomp",
["mlp"] = "Bargam",
["mlq"] = "Western Maninkakan",
["mlr"] = "Vame",
["mls"] = "Masalit",
["mlu"] = "To'abaita",
["mlv"] = "Mwotlap",
["mlw"] = "Moloko",
["mlx"] = "Malfaxal",
["mlz"] = "Malaynon",
["mma"] = "Mama",
["mmb"] = "Momina",
["mmc"] = "Michoacán Mazahua",
["mmd"] = "Maonan",
["mme"] = "Tirax",
["mmf"] = "Mundat",
["mmg"] = "North Ambrym",
["mmh"] = "Mehináku",
["mmi"] = "Musar",
["mmj"] = "Majhwar",
["mmk"] = "Mukha-Dora",
["mml"] = "Man Met",
["mmm"] = "Maii",
["mmn"] = "Mamanwa",
["mmo"] = "Mangga Buang",
["mmp"] = "Musan",
["mmq"] = "Aisi",
["mmr"] = "Western Xiangxi Miao",
["mmt"] = "Malalamai",
["mmu"] = "Mmaala",
["mmv"] = "Miriti",
["mmw"] = "Emae",
["mmx"] = "Madak",
["mmy"] = "Migaama",
["mmz"] = "Mabaale",
["mn"] = "มองโกเลีย",
["mna"] = "Mbula",
["mnb"] = "Muna",
["mnc"] = "แมนจู",
["mnd"] = "Mondé",
["mne"] = "Naba",
["mnf"] = "Mundani",
["mng"] = "Eastern Mnong",
["mnh"] = "Mono (Congo)",
["mni"] = "มณีปุระ",
["mnj"] = "Munji",
["mnk"] = "Mandinka",
["mnl"] = "Tiale",
["mnm"] = "Mapena",
["mnn"] = "มนองใต้",
["mnp"] = "หมิ่นเหนือ",
["mnq"] = "Minriq",
["mnr"] = "Mono (California)",
["mns-cen"] = "Central Mansi",
["mns-nor"] = "Northern Mansi",
["mns-pro"] = "Proto-Mansi",
["mns-sou"] = "Southern Mansi",
["mnt"] = "Maykulan",
["mnu"] = "Mer",
["mnv"] = "Rennellese",
["mnw"] = "มอญ",
["mnw-tha"] = "มอญแบบไทย",
["mnx"] = "Manikion",
["mny"] = "Manyawa",
["mnz"] = "Moni",
["moa"] = "Mwan",
["moc"] = "Mocoví",
["mod"] = "Mobilian",
["moe"] = "มงตาแญ",
["mog"] = "Mongondow",
["moh"] = "Mohawk",
["moi"] = "Mboi",
["moj"] = "Monzombo",
["mok"] = "Morori",
["mom"] = "Monimbo",
["moo"] = "Monom",
["mop"] = "Mopan Maya",
["moq"] = "Mor (Papuan)",
["mor"] = "Moro",
["mos"] = "Moore",
["mot"] = "Barí",
["mou"] = "Mogum",
["mov"] = "Mojave",
["mow"] = "Moi (Congo)",
["mox"] = "Molima",
["moy"] = "Shekkacho",
["moz"] = "Mukulu",
["mpa"] = "Mpoto",
["mpb"] = "Mullukmulluk",
["mpc"] = "Mangarayi",
["mpd"] = "Machinere",
["mpe"] = "Majang",
["mpg"] = "Marba",
["mph"] = "Maung",
["mpi"] = "Mpade",
["mpj"] = "Martu Wangka",
["mpk"] = "Mbara (Chad)",
["mpl"] = "Middle Watut",
["mpm"] = "Yosondúa Mixtec",
["mpn"] = "Mindiri",
["mpo"] = "Miu",
["mpp"] = "Migabac",
["mpq"] = "Matís",
["mpr"] = "Vangunu",
["mps"] = "Dadibi",
["mpt"] = "Mian",
["mpu"] = "Makuráp",
["mpv"] = "Mungkip",
["mpw"] = "Mapidian",
["mpx"] = "Misima-Paneati",
["mpy"] = "Mapia",
["mpz"] = "Mpi",
["mqa"] = "Maba",
["mqb"] = "Mbuko",
["mqc"] = "Mangole",
["mqe"] = "Matepi",
["mqf"] = "Momuna",
["mqg"] = "Kota Bangun Kutai Malay",
["mqh"] = "Tlazoyaltepec Mixtec",
["mqi"] = "Mariri",
["mqj"] = "Mamasa",
["mqk"] = "Rajah Kabunsuwan Manobo",
["mql"] = "Mbelime",
["mqm"] = "South Marquesan",
["mqn"] = "Moronene",
["mqo"] = "Modole",
["mqp"] = "Manipa",
["mqq"] = "Minokok",
["mqr"] = "Mander",
["mqs"] = "West Makian",
["mqt"] = "Mok",
["mqu"] = "Mandari",
["mqv"] = "Mosimo",
["mqw"] = "Murupi",
["mqx"] = "Mamuju",
["mqy"] = "Manggarai",
["mqz"] = "Malasanga",
["mr"] = "มราฐี",
["mra"] = "Mlabri",
["mrb"] = "Sungwadia",
["mrc"] = "Maricopa",
["mrd"] = "Western Magar",
["mre"] = "Martha's Vineyard Sign Language",
["mrf"] = "Elseng",
["mrg"] = "Mising",
["mrh"] = "Mara Chin",
["mrj"] = "Western Mari",
["mrk"] = "Hmwaveke",
["mrl"] = "Mortlockese",
["mrm"] = "Mwerlap",
["mrn"] = "Cheke Holo",
["mro"] = "Mru",
["mrp"] = "Morouas",
["mrq"] = "North Marquesan",
["mrr"] = "Hill Maria",
["mrs"] = "Maragus",
["mrt"] = "Margi",
["mru"] = "Mono (Cameroon)",
["mrv"] = "Mangarevan",
["mrw"] = "มาราเนา",
["mrx"] = "Dineor",
["mry"] = "Karaga Mandaya",
["mrz"] = "Marind",
["ms"] = "มาเลเซีย",
["msb"] = "มัสบาเต",
["msc"] = "Sankaran Maninka",
["msd"] = "Yucatec Maya Sign Language",
["mse"] = "Musey",
["msf"] = "Mekwei",
["msg"] = "Moraid",
["msi"] = "Sabah Malay",
["msj"] = "Ma",
["msk"] = "Mansaka",
["msl"] = "Molof",
["msm"] = "Agusan Manobo",
["msn"] = "Vurës",
["mso"] = "Mombum",
["msp"] = "Maritsauá",
["msq"] = "Caac",
["msr"] = "Mongolian Sign Language",
["mss"] = "West Masela",
["msu"] = "Musom",
["msv"] = "Maslam",
["msw"] = "Mansoanka",
["msx"] = "Moresada",
["msy"] = "Aruamu",
["msz"] = "Momare",
["mt"] = "มอลตา",
["mta"] = "Cotabato Manobo",
["mtb"] = "Anyin Morofo",
["mtc"] = "Munit",
["mtd"] = "Mualang",
["mte"] = "Alu",
["mtf"] = "Murik (New Guinea)",
["mtg"] = "Una",
["mth"] = "Munggui",
["mti"] = "Maiwa (New Guinea)",
["mtj"] = "Moskona",
["mtk"] = "Mbe'",
["mtl"] = "Montol",
["mtm"] = "Mator",
["mtn"] = "Matagalpa",
["mto"] = "Totontepec Mixe",
["mtp"] = "Wichí Lhamtés Nocten",
["mtq"] = "เหมื่อง",
["mtr"] = "เมวาร์",
["mts"] = "Yora",
["mtt"] = "Mota",
["mtu"] = "Tututepec Mixtec",
["mtv"] = "Asaro'o",
["mtw"] = "Magahat",
["mtx"] = "Tidaá Mixtec",
["mty"] = "Nabi",
["mua"] = "Mundang",
["mub"] = "Mubi",
["muc"] = "Mbu'",
["mud"] = "Mednyj Aleut",
["mue"] = "Media Lengua",
["mug"] = "Musgu",
["muh"] = "Mündü",
["mui"] = "มูซี",
["muj"] = "Mabire",
["mul"] = "ร่วม",
["mum"] = "Maiwala",
["mun-pro"] = "มุนดาดั้งเดิม",
["muo"] = "Nyong",
["mup"] = "Malvi",
["muq"] = "Eastern Xiangxi Miao",
["mur"] = "Murle",
["mus"] = "Creek",
["mut"] = "Western Muria",
["muu"] = "Yaaku",
["muv"] = "Muthuvan",
["mux"] = "Bo-Ung",
["muy"] = "Muyang",
["muz"] = "Mursi",
["mva"] = "Manam",
["mvb"] = "Mattole",
["mvd"] = "Mamboru",
["mvg"] = "Yucuañe Mixtec",
["mvh"] = "Mire",
["mvi"] = "มิยาโกะ",
["mvk"] = "Mekmek",
["mvl"] = "Mbara (Australia)",
["mvm"] = "Muya",
["mvn"] = "Minaveha",
["mvo"] = "Marovo",
["mvp"] = "Duri",
["mvq"] = "Moere",
["mvr"] = "Marau",
["mvs"] = "Massep",
["mvt"] = "Mpotovoro",
["mvu"] = "Marfa",
["mvv"] = "Tagal Murut",
["mvw"] = "Machinga",
["mvx"] = "Meoswar",
["mvy"] = "Indus Kohistani",
["mvz"] = "Mesqan",
["mwa"] = "Mwatebu",
["mwb"] = "Juwal",
["mwc"] = "Are",
["mwe"] = "Mwera",
["mwf"] = "Murrinh-Patha",
["mwg"] = "Aiklep",
["mwh"] = "Mouk-Aria",
["mwi"] = "Labo",
["mwk"] = "Kita Maninkakan",
["mwl"] = "มีรังดา",
["mwm"] = "Sar",
["mwn"] = "Nyamwanga",
["mwo"] = "Sungwadaga",
["mwp"] = "Kala Lagaw Ya",
["mwq"] = "Mün Chin",
["mwr"] = "มาร์วาร์",
["mws"] = "Mwimbi-Muthambi",
["mwt"] = "Moken",
["mwu"] = "Mittu",
["mwv"] = "Mentawai",
["mww"] = "ม้งขาว",
["mwz"] = "Moingi",
["mxa"] = "Northwest Oaxaca Mixtec",
["mxb"] = "Tezoatlán Mixtec",
["mxd"] = "Modang",
["mxe"] = "Mele-Fila",
["mxf"] = "Malgbe",
["mxg"] = "Mbangala",
["mxh"] = "Mvuba",
["mxi"] = "Mozarabic",
["mxj"] = "Miju",
["mxk"] = "Monumbo",
["mxl"] = "Maxi Gbe",
["mxm"] = "Meramera",
["mxn"] = "Moi (Indonesia)",
["mxo"] = "Mbowe",
["mxp"] = "Tlahuitoltepec Mixe",
["mxq"] = "Juquila Mixe",
["mxr"] = "Murik (Malaysia)",
["mxs"] = "Huitepec Mixtec",
["mxt"] = "Jamiltepec Mixtec",
["mxu"] = "Mada (Cameroon)",
["mxv"] = "Metlatónoc Mixtec",
["mxw"] = "Namo",
["mxx"] = "Mahou",
["mxy"] = "Southeastern Nochixtlán Mixtec",
["mxz"] = "Central Masela",
["my"] = "พม่า",
["myb"] = "Mbay",
["myc"] = "Mayeka",
["mye"] = "Myene",
["myf"] = "Bambassi",
["myg"] = "Manta",
["myh"] = "Makah",
["myj"] = "Mangayat",
["myk"] = "Mamara Senoufo",
["myl"] = "Moma",
["mym"] = "Me'en",
["myn-chl"] = "Ch'olti'",
["myn-pro"] = "มายันดั้งเดิม",
["myo"] = "Anfillo",
["myp"] = "Pirahã",
["myr"] = "Muniche",
["mys"] = "Mesmes",
["myu"] = "Mundurukú",
["myv"] = "เอร์เซีย",
["myw"] = "Muyuw",
["myx"] = "Masaba",
["myy"] = "Macuna",
["myz"] = "Classical Mandaic",
["mza"] = "Santa María Zacatepec Mixtec",
["mzb"] = "Northern Saharan Berber",
["mzc"] = "Madagascar Sign Language",
["mzd"] = "Malimba",
["mze"] = "Morawa",
["mzg"] = "Monastic Sign Language",
["mzh"] = "Wichí Lhamtés Güisnay",
["mzi"] = "Ixcatlán Mazatec",
["mzj"] = "Manya",
["mzk"] = "Nigeria Mambila",
["mzl"] = "Mazatlán Mixe",
["mzm"] = "Mumuye",
["mzn"] = "มอแซนแดรอน",
["mzo"] = "Matipuhy",
["mzp"] = "Movima",
["mzq"] = "Mori Atas",
["mzr"] = "Marúbo",
["mzs"] = "ครีโอลมาเก๊า",
["mzt"] = "Mintil",
["mzu"] = "Inapang",
["mzv"] = "Manza",
["mzw"] = "Deg",
["mzx"] = "Mawayana",
["mzy"] = "Mozambican Sign Language",
["mzz"] = "Maiadomu",
["na"] = "นาอูรู",
["naa"] = "Namla",
["nab"] = "Nambikwara",
["nac"] = "Narak",
["nae"] = "Naka'ela",
["naf"] = "Nabak",
["nag"] = "Naga Pidgin",
["nah"] = "นาวัตล์",
["nai-ala"] = "Alazapa",
["nai-bay"] = "Bayogoula",
["nai-cal"] = "Calusa",
["nai-chi"] = "Chiquimulilla",
["nai-chu-pro"] = "Proto-Chumash",
["nai-cig"] = "Ciguayo",
["nai-ckn-pro"] = "Proto-Chinookan",
["nai-guz"] = "Guazacapán",
["nai-hit"] = "Hitchiti",
["nai-ipa"] = "Ipai",
["nai-jtp"] = "Jutiapa",
["nai-jum"] = "Jumaytepeque",
["nai-kat"] = "Kathlamet",
["nai-klp-pro"] = "Proto-Kalapuyan",
["nai-knm"] = "Konomihu",
["nai-kum"] = "Kumeyaay",
["nai-mac"] = "Macoris",
["nai-mdu-pro"] = "Proto-Maidun",
["nai-miz-pro"] = "Proto-Mixe-Zoque",
["nai-mus-pro"] = "Proto-Muskogean",
["nai-nao"] = "Naolan",
["nai-nrs"] = "New River Shasta",
["nai-okw"] = "Okwanuchu",
["nai-per"] = "Pericú",
["nai-pic"] = "Picuris",
["nai-plp-pro"] = "Proto-Plateau Penutian",
["nai-pom-pro"] = "Proto-Pomo",
["nai-qng"] = "Quinigua",
["nai-sca-pro"] = "Proto-Siouan-Catawban",
["nai-sin"] = "Sinacantán",
["nai-sln"] = "Salvadoran Lenca",
["nai-spt"] = "Sahaptin",
["nai-tap"] = "Tapachultec",
["nai-taw"] = "Tawasa",
["nai-teq"] = "Tequistlatec",
["nai-tip"] = "Tipai",
["nai-tot-pro"] = "Proto-Totozoquean",
["nai-tsi-pro"] = "Proto-Tsimshianic",
["nai-utn-pro"] = "Proto-Utian",
["nai-wai"] = "Waikuri",
["nai-wji"] = "Western Jicaque",
["nai-yup"] = "Yupiltepeque",
["naj"] = "Nalu",
["nak"] = "Nakanai",
["nal"] = "Nalik",
["nam"] = "Ngan'gityemerri",
["nan"] = "หมิ่นใต้",
["nan-dat"] = "Datian Min",
["nan-hbl"] = "ฮกเกี้ยน",
["nan-hlh"] = "Hailufeng Min",
["nan-lnx"] = "Longyan Min",
["nan-tws"] = "แต้จิ๋ว",
["nan-zhe"] = "Zhenan Min",
["nan-zsh"] = "Sanxiang Min",
["nao"] = "Naaba",
["nap"] = "นาโปลี",
["naq"] = "Khoekhoe",
["nar"] = "Iguta",
["nas"] = "Nasioi",
["nat"] = "Hungworo",
["naw"] = "Nawuri",
["nax"] = "Nakwi",
["nay"] = "Ngarrindjeri",
["naz"] = "Coatepec Nahuatl",
["nb"] = "นอร์เวย์แบบบุ๊กมอล",
["nba"] = "Nyemba",
["nbb"] = "Ndoe",
["nbc"] = "Chang",
["nbd"] = "Ngbinda",
["nbe"] = "Konyak Naga",
["nbg"] = "Nagarchal",
["nbh"] = "Ngamo",
["nbi"] = "Mao Naga",
["nbj"] = "Ngarinman",
["nbk"] = "Nake",
["nbm"] = "Ngbaka Ma'bo",
["nbn"] = "Kuri",
["nbo"] = "Nkukoli",
["nbp"] = "Nnam",
["nbq"] = "Nggem",
["nbr"] = "Numana",
["nbs"] = "Namibian Sign Language",
["nbt"] = "Na",
["nbu"] = "Rongmei Naga",
["nbv"] = "Ngamambo",
["nbw"] = "Southern Ngbandi",
["nby"] = "Ningera",
["nca"] = "Iyo",
["ncb"] = "นิโคบาร์กลาง",
["ncc"] = "Ponam",
["ncd"] = "Nachering",
["nce"] = "Yale",
["ncf"] = "Notsi",
["ncg"] = "Nisga'a",
["nch"] = "Central Huasteca Nahuatl",
["nci"] = "นาวัตล์คลาสสิก",
["ncj"] = "Northern Puebla Nahuatl",
["nck"] = "Nakara",
["ncl"] = "Michoacán Nahuatl",
["ncm"] = "Nambo",
["ncn"] = "Nauna",
["nco"] = "Sibe",
["ncr"] = "Ncane",
["ncs"] = "Nicaraguan Sign Language",
["nct"] = "Chothe Naga",
["ncu"] = "Chumburung",
["ncx"] = "Central Puebla Nahuatl",
["ncz"] = "Natchez",
["nd"] = "Northern Ndebele",
["nda"] = "Ndasa",
["ndb"] = "Kenswei Nsei",
["ndc"] = "Ndau",
["ndd"] = "Nde-Nsele-Nta",
["ndf"] = "Nadruvian",
["ndg"] = "Ndengereko",
["ndh"] = "Ndali",
["ndi"] = "Chamba Leko",
["ndj"] = "Ndamba",
["ndk"] = "Ndaka",
["ndl"] = "Ndolo",
["ndm"] = "Ndam",
["ndn"] = "Ngundi",
["ndp"] = "Ndo",
["ndq"] = "Ndombe",
["ndr"] = "Ndoola",
["nds"] = "เยอรมันต่ำ",
["nds-de"] = "เยอรมันต่ำแบบเยอรมนี",
["nds-nl"] = "Dutch Low Saxon",
["ndt"] = "Ndunga",
["ndu"] = "Dugun",
["ndv"] = "Ndut",
["ndw"] = "Ndobo",
["ndx"] = "Nduga",
["ndy"] = "Lutos",
["ndz"] = "Ndogo",
["ne"] = "เนปาล",
["nea"] = "Eastern Ngad'a",
["neb"] = "Toura",
["nec"] = "Nedebang",
["ned"] = "Nde-Gbite",
["nee"] = "Kumak",
["nef"] = "Nefamese",
["neg"] = "Negidal",
["neh"] = "Nyenkha",
["nej"] = "Neko",
["nek"] = "Neku",
["nem"] = "Nemi",
["nen"] = "Nengone",
["neo"] = "Ná-Meo",
["neq"] = "North Central Mixe",
["ner"] = "Yahadian",
["nes"] = "Bhoti Kinnauri",
["net"] = "Nete",
["neu"] = "Neo",
["nev"] = "Nyaheun",
["new"] = "เนวาร์",
["nex"] = "Neme",
["ney"] = "Neyo",
["nez"] = "Nez Perce",
["nfa"] = "Dhao",
["nfd"] = "Ahwai",
["nfl"] = "Äiwoo",
["nfr"] = "Nafaanra",
["nfu"] = "Mfumte",
["ng"] = "Ndonga",
["nga"] = "Ngbaka",
["ngb"] = "Northern Ngbandi",
["ngc"] = "Ngombe (Congo)",
["ngd"] = "Ngando (Central African Republic)",
["nge"] = "Ngemba",
["ngf-pro"] = "Proto-Trans-New Guinea",
["ngg"] = "Ngbaka Manza",
["ngh"] = "Nǀuu",
["ngi"] = "Ngizim",
["ngj"] = "Ngie",
["ngk"] = "Ngalkbun",
["ngl"] = "Lomwe",
["ngm"] = "Ngatik Men's Creole",
["ngn"] = "Ngwo",
["ngo"] = "Ngoni",
["ngp"] = "Ngulu",
["ngq"] = "Ngoreme",
["ngr"] = "Nagu",
["ngs"] = "Gvoko",
["ngt"] = "Ngeq",
["ngu"] = "Guerrero Nahuatl",
["ngv"] = "Nagumi",
["ngw"] = "Ngwaba",
["ngx"] = "Nggwahyi",
["ngy"] = "Tibea",
["ngz"] = "Ngungwel",
["nha"] = "Nhanda",
["nhb"] = "Beng",
["nhc"] = "Tabasco Nahuatl",
["nhd"] = "Chiripá",
["nhe"] = "Eastern Huasteca Nahuatl",
["nhf"] = "Nhuwala",
["nhg"] = "Tetelcingo Nahuatl",
["nhh"] = "Nahari",
["nhi"] = "Zacatlán-Ahuacatlán-Tepetzintla Nahuatl",
["nhk"] = "Cosoleacaque Nahuatl",
["nhm"] = "Morelos Nahuatl",
["nhn"] = "นาวัตล์ตอนกลาง",
["nho"] = "Takuu",
["nhp"] = "Pajapan Nahuatl",
["nhq"] = "Huaxcaleca Nahuatl",
["nhr"] = "Naro",
["nht"] = "Ometepec Nahuatl",
["nhu"] = "Noone",
["nhv"] = "Temascaltepec Nahuatl",
["nhw"] = "Western Huasteca Nahuatl",
["nhx"] = "Mecayapan Nahuatl",
["nhy"] = "Northern Oaxaca Nahuatl",
["nhz"] = "Santa María La Alta Nahuatl",
["nia"] = "Nias",
["nib"] = "Nakame",
["nic-bco-pro"] = "เบนูเอ-คองโกดั้งเดิม",
["nic-bod-pro"] = "แบนทอยด์ดั้งเดิม",
["nic-eov-pro"] = "Proto-Eastern Oti-Volta",
["nic-gns-pro"] = "Proto-Gurunsi",
["nic-grf-pro"] = "Proto-Grassfields",
["nic-gur-pro"] = "กูร์ดั้งเดิม",
["nic-jkn-pro"] = "Proto-Jukunoid",
["nic-lcr-pro"] = "Proto-Lower Cross River",
["nic-ogo-pro"] = "Proto-Ogoni",
["nic-ovo-pro"] = "Proto-Oti-Volta",
["nic-plt-pro"] = "Proto-Plateau",
["nic-pro"] = "ไนเจอร์-คองโกดั้งเดิม",
["nic-ubg-pro"] = "Proto-Ubangian",
["nic-ucr-pro"] = "Proto-Upper Cross River",
["nic-vco-pro"] = "วอลตา-คองโกดั้งเดิม",
["nid"] = "Ngandi",
["nie"] = "Niellim",
["nif"] = "Nek",
["nig"] = "Ngalakan",
["nih"] = "Nyiha",
["nii"] = "Nii",
["nij"] = "Ngaju",
["nik"] = "Southern Nicobarese",
["nil"] = "Nila",
["nim"] = "Nilamba",
["nin"] = "Ninzo",
["nio"] = "Nganasan",
["niq"] = "Nandi",
["nir"] = "Nimboran",
["nis"] = "Nimi",
["nit"] = "Southeastern Kolami",
["niu"] = "นีวเว",
["niv"] = "Nivkh",
["niw"] = "Nimo",
["nix"] = "Hema",
["niy"] = "Ngiti",
["niz"] = "Ningil",
["nja"] = "Nzanyi",
["njb"] = "Nocte",
["njh"] = "Lotha Naga",
["nji"] = "Gudanji",
["njj"] = "Njen",
["njl"] = "Njalgulgule",
["njm"] = "Angami",
["njn"] = "Liangmai Naga",
["njo"] = "Ao",
["njr"] = "Njerep",
["njs"] = "Nisa",
["njt"] = "Ndyuka-Trio Pidgin",
["nju"] = "Ngadjunmaya",
["njx"] = "Kunyi",
["njy"] = "Njyem",
["njz"] = "Nyishi",
["nka"] = "Nkoya",
["nkb"] = "Khoibu Naga",
["nkc"] = "Nkongho",
["nkd"] = "Koireng",
["nke"] = "Duke",
["nkf"] = "Inpui Naga",
["nkg"] = "Nekgini",
["nkh"] = "Khezha Naga",
["nki"] = "Thangal Naga",
["nkj"] = "Nakai",
["nkk"] = "Nokuku",
["nkm"] = "Namat",
["nkn"] = "Nkangala",
["nko"] = "Nkonya",
["nkp"] = "Niuatoputapu",
["nkq"] = "Nkami",
["nkr"] = "Nukuoro",
["nks"] = "North Asmat",
["nkt"] = "Nyika",
["nku"] = "Bouna Kulango",
["nkw"] = "Nkutu",
["nkx"] = "Nkoroo",
["nkz"] = "Nkari",
["nl"] = "ดัตช์",
["nla"] = "Ngombale",
["nlc"] = "Nalca",
["nle"] = "East Nyala",
["nlg"] = "Gela",
["nli"] = "Grangali",
["nlj"] = "Nyali",
["nlk"] = "Ninia Yali",
["nll"] = "Nihali",
["nlm"] = "Mankiyali",
["nlo"] = "Ngul",
["nlq"] = "Lao Naga",
["nlu"] = "Nchumbulu",
["nlv"] = "Orizaba Nahuatl",
["nlw"] = "Walangama",
["nlx"] = "Nahali",
["nly"] = "Nyamal",
["nlz"] = "Nalögo",
["nma"] = "Maram Naga",
["nmb"] = "Big Nambas",
["nmc"] = "Ngam",
["nmd"] = "Ndumu",
["nme"] = "Mzieme Naga",
["nmf"] = "Tangkhul Naga",
["nmg"] = "Kwasio",
["nmh"] = "Monsang Naga",
["nmi"] = "Nyam",
["nmj"] = "Ngombe (Central African Republic)",
["nmk"] = "Namakura",
["nml"] = "Ndemli",
["nmm"] = "Manangba",
["nmn"] = "ǃXóõ",
["nmo"] = "Moyon Naga",
["nmp"] = "Nimanbur",
["nmq"] = "Nambya",
["nmr"] = "Nimbari",
["nms"] = "Letemboi",
["nmt"] = "Namonuito",
["nmu"] = "Northeast Maidu",
["nmv"] = "Ngamini",
["nmw"] = "Nimoa",
["nmy"] = "Namuyi",
["nmz"] = "Nawdm",
["nn"] = "นอร์เวย์แบบนือนอสก์",
["nna"] = "Nyangumarta",
["nnb"] = "Nande",
["nnc"] = "Nancere",
["nnd"] = "West Ambae",
["nne"] = "Ngandyera",
["nnf"] = "Ngaing",
["nng"] = "Maring Naga",
["nnh"] = "Ngiemboon",
["nni"] = "North Nuaulu",
["nnj"] = "Nyangatom",
["nnk"] = "Nankina",
["nnl"] = "Northern Rengma Naga",
["nnm"] = "Namia",
["nnn"] = "Ngete",
["nnp"] = "Wancho",
["nnq"] = "Ngindo",
["nnr"] = "Narungga",
["nnt"] = "Nanticoke",
["nnu"] = "Dwang",
["nnv"] = "Nukunu",
["nnw"] = "Southern Nuni",
["nnx"] = "Ngong",
["nny"] = "Nyangga",
["nnz"] = "Nda'nda'",
["no"] = "นอร์เวย์",
["noa"] = "Woun Meu",
["noc"] = "Nuk",
["nod"] = "คำเมือง",
["noe"] = "Nimadi",
["nof"] = "Nomane",
["nog"] = "Nogai",
["noh"] = "Nomu",
["noi"] = "Noiri",
["noj"] = "Nonuya",
["nok"] = "Nooksack",
["nol"] = "Nomlaki",
["nom"] = "Nocamán",
["non"] = "นอร์สเก่า",
["nop"] = "Numanggang",
["noq"] = "Ngongo",
["nos"] = "Eastern Nisu",
["not"] = "Nomatsiguenga",
["nou"] = "Ewage-Notu",
["nov"] = "โนเวียล",
["now"] = "Nyambo",
["noy"] = "Noy",
["noz"] = "Nayi",
["npa"] = "Nar Phu",
["npb"] = "Nupbikha",
["npg"] = "Ponyo",
["nph"] = "Phom",
["npl"] = "Southeastern Puebla Nahuatl",
["npn"] = "Mondropolon",
["npo"] = "Pochuri Naga",
["nps"] = "Nipsan",
["npu"] = "Puimei Naga",
["npy"] = "Napu",
["nqg"] = "Ede Nago",
["nqk"] = "Kura Ede Nago",
["nql"] = "Ngendelengo",
["nqm"] = "Ndom",
["nqn"] = "Nen",
["nqo"] = "N'Ko",
["nqq"] = "Kyan-Karyaw Naga",
["nqy"] = "Akyaung Ari",
["nr"] = "Southern Ndebele",
["nra"] = "Ngom",
["nrb"] = "Nara",
["nrc"] = "Noric",
["nre"] = "Southern Rengma Naga",
["nrf"] = "นอร์มัน",
["nrg"] = "Narango",
["nri"] = "Chokri Naga",
["nrk"] = "Ngarla",
["nrl"] = "Ngarluma",
["nrm"] = "Narom",
["nrn"] = "Norn",
["nrp"] = "North Picene",
["nrr"] = "Norra",
["nrt"] = "Northern Kalapuya",
["nru"] = "Narua",
["nrx"] = "Ngurmbur",
["nrz"] = "Lala (New Guinea)",
["nsa"] = "Sangtam Naga",
["nsb"] = "Lower Nossob",
["nsc"] = "Nshi",
["nsd"] = "Southern Nisu",
["nse"] = "Nsenga",
["nsg"] = "Ngasa",
["nsh"] = "Ngoshie",
["nsi"] = "Nigerian Sign Language",
["nsk"] = "Naskapi",
["nsl"] = "Norwegian Sign Language",
["nsm"] = "Sema",
["nsn"] = "Nehan",
["nso"] = "ซูทูเหนือ",
["nsp"] = "มือเนปาล",
["nsq"] = "Northern Sierra Miwok",
["nsr"] = "Maritime Sign Language",
["nss"] = "Nali",
["nst"] = "Tangsa",
["nsu"] = "Sierra Negra Nahuatl",
["nsv"] = "Southwestern Nisu",
["nsw"] = "Navut",
["nsx"] = "Nsongo",
["nsy"] = "Nasal",
["nsz"] = "Nisenan",
["ntd"] = "Northern Tidung",
["ntg"] = "Ngantangarra",
["nti"] = "Natioro",
["ntj"] = "Ngaanyatjarra",
["ntk"] = "Ikoma",
["ntm"] = "Nateni",
["nto"] = "Ntomba",
["ntp"] = "Northern Tepehuan",
["ntr"] = "Delo",
["nts"] = "Natagaimas",
["ntu"] = "Natügu",
["ntw"] = "Nottoway",
["ntx"] = "Somra",
["nty"] = "Mantsi",
["nua"] = "Yuanga",
["nub-har"] = "Haraza",
["nub-pro"] = "นูเบียนดั้งเดิม",
["nuc"] = "Nukuini",
["nud"] = "Ngala",
["nue"] = "Ngundu",
["nuf"] = "Nusu",
["nug"] = "Nungali",
["nuh"] = "Ndunda",
["nui"] = "Ngumbi",
["nuj"] = "Nyole (Uganda)",
["nuk"] = "Nootka",
["nul"] = "Nusa Laut",
["num"] = "Niuafo'ou",
["nun"] = "Anong",
["nuo"] = "หง่วน",
["nup"] = "Nupe",
["nuq"] = "Nukumanu",
["nur"] = "Nuguria",
["nus"] = "Nuer",
["nut"] = "นุง",
["nuu"] = "Ngbundu",
["nuv"] = "Northern Nuni",
["nuw"] = "Nguluwan",
["nux"] = "Mehek",
["nuy"] = "Nunggubuyu",
["nuz"] = "Tlamacazapa Nahuatl",
["nv"] = "นาวาโฮ",
["nvh"] = "Nasarian",
["nvm"] = "Namiae",
["nvo"] = "Nyokon",
["nwa"] = "Nawathinehena",
["nwb"] = "Nyabwa",
["nwc"] = "เนวาร์คลาสสิก",
["nwe"] = "Ngwe",
["nwi"] = "Southwest Tanna",
["nwm"] = "Nyamusa-Molo",
["nwo"] = "Nauo",
["nwr"] = "Nawaru",
["nwx"] = "เนวาร์กลาง",
["nwy"] = "Nottoway-Meherrin",
["nxa"] = "Nauete",
["nxd"] = "Ngando (Congo)",
["nxe"] = "Nage",
["nxg"] = "Ngadha",
["nxi"] = "Nindi",
["nxl"] = "South Nuaulu",
["nxm"] = "Numidian",
["nxn"] = "Ngawun",
["nxo"] = "Ndambomo",
["nxq"] = "Naxi",
["nxr"] = "Ninggerum",
["nxx"] = "Nafri",
["ny"] = "เจวา",
["nyb"] = "Nyangbo",
["nyc"] = "Nyanga-li",
["nyd"] = "Nyole (Kenya)",
["nye"] = "Nyengo",
["nyf"] = "Giryama",
["nyg"] = "Nyindu",
["nyh"] = "Nyigina",
["nyi"] = "Nyimang",
["nyj"] = "Nyanga (Congo)",
["nyk"] = "Nyaneka",
["nyl"] = "Nyeu",
["nym"] = "Nyamwezi",
["nyn"] = "Nyankole",
["nyo"] = "Nyoro",
["nyp"] = "Nyang'i",
["nys"] = "Nyunga",
["nyt"] = "Nyawaygi",
["nyu"] = "Nyungwe",
["nyv"] = "Nyulnyul",
["nyw"] = "ญ้อ",
["nyx"] = "Nganyaywana",
["nyy"] = "Nyakyusa",
["nza"] = "Tigon Mbembe",
["nzb"] = "Njebi",
["nzd"] = "Nzadi",
["nzi"] = "Nzima",
["nzk"] = "Nzakara",
["nzm"] = "Zeme Naga",
["nzs"] = "New Zealand Sign Language",
["nzu"] = "Central Teke",
["nzy"] = "Nzakambay",
["nzz"] = "Nanga Dama Dogon",
["oaa"] = "Orok",
["oac"] = "Oroch",
["oak"] = "Noakhali",
["oav"] = "อะวาร์เก่า",
["obi"] = "Obispeño",
["obk"] = "Southern Bontoc",
["obl"] = "Oblo",
["obm"] = "โมอับ",
["obo"] = "Obo Manobo",
["obr"] = "พม่าเก่า",
["obt"] = "เบรอตงเก่า",
["obu"] = "Obulom",
["oc"] = "อุตซิตา",
["oca"] = "Ocaina",
["och"] = "จีนเก่า",
["oco"] = "คอร์นวอลล์เก่า",
["ocu"] = "Tlahuica",
["oda"] = "Odut",
["odk"] = "Od",
["odt"] = "ดัตช์เก่า",
["odu"] = "Odual",
["ofo"] = "Ofo",
["ofs"] = "ฟรีเชียเก่า",
["ofu"] = "Efutop",
["ogb"] = "Ogbia",
["ogc"] = "Ogbah",
["oge"] = "จอร์เจียเก่า",
["ogg"] = "Ogbogolo",
["ogo"] = "Khana",
["ogu"] = "Ogbronuagum",
["ohu"] = "ฮังการีเก่า",
["oia"] = "Oirata",
["oin"] = "Inebu One",
["oj"] = "โอจิบเว",
["ojb"] = "Northwestern Ojibwa",
["ojc"] = "Central Ojibwa",
["ojg"] = "Eastern Ojibwa",
["ojp"] = "ญี่ปุ่นเก่า",
["ojs"] = "Severn Ojibwa",
["ojv"] = "Ontong Java",
["ojw"] = "Western Ojibwa",
["oka"] = "Okanagan",
["okb"] = "Okobo",
["okd"] = "Okodia",
["oke"] = "Okpe (Southwestern Edo)",
["okg"] = "Kok-Paponk",
["okh"] = "Koresh-e Rostam",
["oki"] = "Okiek",
["okj"] = "Oko-Juwoi",
["okk"] = "Kwamtim One",
["okl"] = "Old Kentish Sign Language",
["okm"] = "เกาหลีกลาง",
["okn"] = "โอกิโนเอราบุ",
["oko"] = "เกาหลีเก่า",
["okr"] = "Kirike",
["oks"] = "Oko-Eni-Osayen",
["oku"] = "Oku",
["okv"] = "Orokaiva",
["okx"] = "Okpe (Northwestern Edo)",
["okz"] = "เขมรเก่า",
["old"] = "Mochi",
["ole"] = "Olekha",
["olm"] = "Oloma",
["olo"] = "ลิววี",
["olr"] = "Olrat",
["olt"] = "ลิทัวเนียเก่า",
["olu"] = "Kuvale",
["om"] = "ออโรโม",
["oma"] = "Omaha-Ponca",
["omb"] = "Omba",
["omc"] = "Mochica",
["omg"] = "Omagua",
["omi"] = "Omi",
["omk"] = "Omok",
["oml"] = "Ombo",
["omn"] = "ไมนอส",
["omo"] = "Utarmbung",
["omp"] = "มณีปุระเก่า",
["omq-cha-pro"] = "Proto-Chatino",
["omq-maz-pro"] = "Proto-Mazatec",
["omq-mix-pro"] = "Proto-Mixtecan",
["omq-mxt-pro"] = "Proto-Mixtec",
["omq-otp-pro"] = "Proto-Oto-Pamean",
["omq-pro"] = "Proto-Oto-Manguean",
["omq-sjq"] = "San Juan Quiahije Chatino",
["omq-tel"] = "Teposcolula Mixtec",
["omq-teo"] = "Teojomulco Chatino",
["omq-tri-pro"] = "Proto-Triqui",
["omq-zap-pro"] = "Proto-Zapotecan",
["omq-zpc-pro"] = "Proto-Zapotec",
["omr"] = "มราฐีเก่า",
["omt"] = "Omotik",
["omu"] = "Omurano",
["omv-aro-pro"] = "Proto-Aroid",
["omv-diz-pro"] = "Proto-Dizoid",
["omv-pro"] = "Proto-Omotic",
["omw"] = "South Tairora",
["omx"] = "มอญเก่า",
["ona"] = "Selk'nam",
["onb"] = "เบ",
["one"] = "Oneida",
["ong"] = "Olo",
["oni"] = "Onin",
["onj"] = "Onjob",
["onk"] = "Kabore One",
["onn"] = "Onobasulu",
["ono"] = "Onondaga",
["onp"] = "Sartang",
["onr"] = "Northern One",
["ons"] = "Ono",
["ont"] = "Ontenu",
["onu"] = "Unua",
["onw"] = "นิวเบียเก่า",
["onx"] = "Pidgin Onin",
["ood"] = "O'odham",
["oog"] = "Ong",
["oon"] = "Önge",
["oor"] = "Oorlams",
["opa"] = "Okpamheri",
["opk"] = "Kopkaka",
["opm"] = "Oksapmin",
["opo"] = "Opao",
["opt"] = "Opata",
["opy"] = "Ofayé",
["or"] = "โอริยา",
["ora"] = "Oroha",
["ore"] = "Orejón",
["org"] = "Oring",
["orh"] = "Oroqen",
["oro"] = "Orokolo",
["orr"] = "Oruma",
["ort"] = "Adivasi Odia",
["oru"] = "Ormuri",
["orv"] = "สลาวิกตะวันออกเก่า",
["orw"] = "Oro Win",
["orx"] = "Oro",
["orz"] = "Ormu",
["os"] = "ออสซีเซีย",
["osa"] = "Osage",
["osc"] = "Oscan",
["osi"] = "โอซิง",
["osn"] = "Old Sundanese",
["oso"] = "Ososo",
["osp"] = "สเปนเก่า",
["ost"] = "Osatu",
["osu"] = "Southern One",
["osx"] = "แซกซันเก่า",
["ota"] = "ตุรกีแบบออตโตมัน",
["otb"] = "ทิเบตเก่า",
["otd"] = "Ot Danum",
["ote"] = "Mezquital Otomi",
["oti"] = "Oti",
["otk"] = "เตอร์กิกเก่า",
["otl"] = "Tilapa Otomi",
["otm"] = "Eastern Highland Otomi",
["otn"] = "Tenango Otomi",
["oto-otm-pro"] = "Proto-Otomi",
["oto-pro"] = "Proto-Otomian",
["otq"] = "Querétaro Otomi",
["otr"] = "Otoro",
["ots"] = "Estado de México Otomi",
["ott"] = "Temoaya Otomi",
["otu"] = "Otuke",
["otw"] = "Ottawa",
["otx"] = "Texcatepec Otomi",
["oty"] = "ทมิฬเก่า",
["otz"] = "Ixtenco Otomi",
["oub"] = "Glio-Oubi",
["oue"] = "Oune",
["oui"] = "อุยกูร์เก่า",
["oum"] = "Ouma",
["ovd"] = "แอลฟ์ดาเลิน",
["owi"] = "Owiniga",
["owl"] = "เวลส์เก่า",
["oyb"] = "Oy",
["oyd"] = "Oyda",
["oym"] = "Wayampi",
["oyy"] = "Oya'oya",
["ozm"] = "Koonzime",
["pa"] = "ปัญจาบ",
["paa-bin-pro"] = "Proto-Binanderean",
["paa-kom"] = "Kómnzo",
["paa-kwn"] = "Kuwani",
["paa-nha-pro"] = "Proto-North Halmahera",
["paa-nun"] = "Nungon",
["pab"] = "Pareci",
["pac"] = "ปาโกะห์",
["pad"] = "Paumarí",
["pae"] = "Pagibete",
["paf"] = "Paranawát",
["pag"] = "Pangasinan",
["pah"] = "Tenharim",
["pai"] = "Pe",
["pak"] = "Parakanã",
["pal"] = "เปอร์เซียกลาง",
["pam"] = "กาปัมปางัน",
["pao"] = "Northern Paiute",
["pap"] = "ปาเปียเมนตู",
["paq"] = "Parya",
["par"] = "Panamint",
["pas"] = "Papasena",
["pau"] = "ปาเลา",
["pav"] = "Wari'",
["paw"] = "Pawnee",
["pax"] = "Pankararé",
["pay"] = "Pech",
["paz"] = "Pankararú",
["pbb"] = "Páez",
["pbc"] = "Patamona",
["pbe"] = "Mezontla Popoloca",
["pbf"] = "Coyotepec Popoloca",
["pbg"] = "Paraujano",
["pbh"] = "Panare",
["pbi"] = "Podoko",
["pbl"] = "Mak (Nigeria)",
["pbm"] = "Puebla Mazatec",
["pbn"] = "Kpasam",
["pbo"] = "Papel",
["pbp"] = "Badyara",
["pbr"] = "Pangwa",
["pbs"] = "Central Pame",
["pbv"] = "ปนัร",
["pby"] = "Pyu (New Guinea)",
["pca"] = "Santa Inés Ahuatempan Popoloca",
["pcb"] = "ปอร์",
["pcc"] = "ปู้อี",
["pcd"] = "ปีการ์",
["pce"] = "Ruching Palaung",
["pcf"] = "Paliyan",
["pcg"] = "Paniya",
["pch"] = "Pardhan",
["pci"] = "Duruwa",
["pcj"] = "Parenga",
["pck"] = "Paite",
["pcl"] = "Pardhi",
["pcm"] = "Nigerian Pidgin",
["pcn"] = "Piti",
["pcp"] = "Pacahuara",
["pcw"] = "Pyapun",
["pda"] = "Anam",
["pdc"] = "เยอรมันแบบเพนซิลเวเนีย",
["pdi"] = "Pa Di",
["pdn"] = "Fedan",
["pdo"] = "Padoe",
["pdt"] = "เพลาท์ดิทช์",
["pdu"] = "กะยัน",
["pea"] = "Peranakan Indonesian",
["peb"] = "Eastern Pomo",
["ped"] = "Mala (New Guinea)",
["pee"] = "Taje",
["pef"] = "Northeastern Pomo",
["peg"] = "Pengo",
["peh"] = "Bonan",
["pei"] = "Chichimeca-Jonaz",
["pej"] = "Northern Pomo",
["pek"] = "Penchal",
["pel"] = "Pekal",
["pem"] = "Phende",
["peo"] = "เปอร์เซียเก่า",
["pep"] = "Kunja",
["peq"] = "Southern Pomo",
["pev"] = "Pémono",
["pex"] = "Petats",
["pey"] = "Petjo",
["pez"] = "Eastern Penan",
["pfa"] = "Pááfang",
["pfe"] = "Peere",
["pga"] = "Juba Arabic",
["pgd"] = "คานธาระ",
["pgg"] = "ปังควาฬฺ",
["pgi"] = "Pagi",
["pgk"] = "Rerep",
["pgl"] = "Primitive Irish",
["pgn"] = "Paelignian",
["pgs"] = "Pangseng",
["pgu"] = "Pagu",
["pgz"] = "Papua New Guinean Sign Language",
["pha"] = "Pa-Hng",
["phd"] = "Phudagi",
["phg"] = "Phuong",
["phh"] = "Phukha",
["phi-din"] = "Dinapigue Agta",
["phi-kal-pro"] = "คาลาเมียนดั้งเดิม",
["phi-nag"] = "Nagtipunan Agta",
["phi-pro"] = "ฟิลิปปินส์ดั้งเดิม",
["phk"] = "พ่าเก",
["phl"] = "Palula",
["phm"] = "Phimbi",
["phn"] = "ฟินิเชีย",
["pho"] = "ผู้น้อย",
["phq"] = "Phana'",
["phr"] = "Pahari-Potwari",
["pht"] = "ผู้ไท",
["phu"] = "พวน",
["phv"] = "Pahlavani",
["phw"] = "Phangduwali",
["pi"] = "บาลี",
["pia"] = "Pima Bajo",
["pib"] = "Yine",
["pic"] = "Pinji",
["pid"] = "Piaroa",
["pie"] = "Piro",
["pif"] = "Pingelapese",
["pig"] = "Pisabo",
["pih"] = "Pitcairn-Norfolk",
["pii"] = "Pini",
["pij"] = "Pijao",
["pil"] = "Yom",
["pim"] = "Powhatan",
["pin"] = "Piame",
["pio"] = "Piapoco",
["pip"] = "Pero",
["pir"] = "Piratapuyo",
["pis"] = "Pijin",
["pit"] = "Pitta-Pitta",
["piu"] = "Pintupi-Luritja",
["piv"] = "Pileni",
["piw"] = "Pimbwe",
["pix"] = "Piu",
["piy"] = "Piya-Kwonci",
["piz"] = "Pije",
["pjt"] = "Pitjantjatjara",
["pkb"] = "Kipfokomo",
["pkc"] = "แพ็กเจ",
["pkg"] = "Pak-Tong",
["pkh"] = "Pankhu",
["pkn"] = "Pakanha",
["pko"] = "Pökoot",
["pkp"] = "ปูกาปูกา",
["pkr"] = "Attapady Kurumba",
["pks"] = "Pakistan Sign Language",
["pkt"] = "Maleng",
["pku"] = "Paku",
["pl"] = "โปแลนด์",
["pla"] = "Miani",
["plb"] = "Polonombauk",
["plc"] = "ปาลาวาโนตอนกลาง",
["ple"] = "Palu'e",
["plg"] = "Pilagá",
["plh"] = "Paulohi",
["plj"] = "Polci",
["plk"] = "Kohistani Shina",
["pll"] = "Shwe Palaung",
["pln"] = "Palenquero",
["plo"] = "Oluta Popoluca",
["plq"] = "Palaic",
["plr"] = "Palaka Senoufo",
["pls"] = "San Marcos Tlalcoyalco Popoloca",
["plu"] = "Palikur",
["plv"] = "ปาลาวาโนตะวันตกเฉียงใต้",
["plw"] = "ปาลาวาโนแบบบรูกส์พอยต์",
["ply"] = "Bolyu",
["plz"] = "Paluan",
["pma"] = "Paamese",
["pmb"] = "Pambia",
["pmd"] = "Pallanganmiddang",
["pme"] = "Pwaamèi",
["pmf"] = "Pamona",
["pmi"] = "Northern Pumi",
["pmj"] = "Southern Pumi",
["pmk"] = "Pamlico",
["pml"] = "Sabir",
["pmm"] = "Pol",
["pmn"] = "Pam",
["pmo"] = "Pom",
["pmq"] = "Northern Pame",
["pmr"] = "Paynamar",
["pms"] = "ปีเยมอนเต",
["pmt"] = "Tuamotuan",
["pmu"] = "Mirpur Panjabi",
["pmw"] = "Plains Miwok",
["pmx"] = "Poumei Naga",
["pmy"] = "Papuan Malay",
["pmz"] = "Southern Pame",
["pna"] = "Punan Bah-Biau",
["pnc"] = "Pannei",
["pnd"] = "Mpinda",
["pne"] = "Western Penan",
["png"] = "Pongu",
["pnh"] = "Penrhyn",
["pni"] = "Aoheng",
["pnj"] = "Pinjarup",
["pnk"] = "Paunaka",
["pnl"] = "Paleni",
["pnm"] = "Punan Batu",
["pnn"] = "Pinai-Hagahai",
["pno"] = "Panobo",
["pnp"] = "Pancana",
["pnq"] = "Pana (West Africa)",
["pnr"] = "Panim",
["pns"] = "Ponosakan",
["pnt"] = "Pontic Greek",
["pnu"] = "Jiongnai Bunu",
["pnv"] = "Pinigura",
["pnw"] = "Panyjima",
["pnx"] = "Phong-Kniang",
["pny"] = "Pinyin",
["pnz"] = "Pana (Central Africa)",
["poc"] = "Poqomam",
["poe"] = "San Juan Atzingo Popoloca",
["pof"] = "Poke",
["pog"] = "Potiguára",
["poh"] = "Poqomchi'",
["poi"] = "Highland Popoluca",
["pok"] = "Pokangá",
["pom"] = "Southeastern Pomo",
["pon"] = "Pohnpeian",
["poo"] = "Central Pomo",
["pop"] = "Pwapwâ",
["poq"] = "Texistepec Popoluca",
["pos"] = "Sayula Popoluca",
["pot"] = "Potawatomi",
["pov"] = "ครีโอลกินี-บิสเซา",
["pow"] = "San Felipe Otlaltepec Popoloca",
["pox"] = "Polabian",
["poy"] = "Pogolo",
["poz-abi"] = "Abai",
["poz-bal"] = "Baliledo",
["poz-btk-pro"] = "Proto-Bungku-Tolaki",
["poz-cet-pro"] = "มาลาโย-พอลินีเชียนตอนกลาง-ตะวันออกดั้งเดิม",
["poz-hce-pro"] = "Proto-Halmahera-Cenderawasih",
["poz-lgx-pro"] = "ลัมปุงกิกดั้งเดิม",
["poz-mcm-pro"] = "มาลาโย-จามิกดั้งเดิม",
["poz-mic-pro"] = "ไมโครนีเซียนดั้งเดิม",
["poz-mly-pro"] = "มาเลย์อิกดั้งเดิม",
["poz-msa-pro"] = "มาลาโย-ซุมบาวันดั้งเดิม",
["poz-oce-pro"] = "โอเชียนิกดั้งเดิม",
["poz-pep-pro"] = "พอลินีเชียนตะวันออกดั้งเดิม",
["poz-pnp-pro"] = "นิวเคลียร์พอลินีเชียนดั้งเดิม",
["poz-pol-pro"] = "พอลินีเชียนดั้งเดิม",
["poz-pro"] = "มาลาโย-พอลินีเชียนดั้งเดิม",
["poz-sml"] = "Sarawak Malay",
["poz-ssw-pro"] = "ซูลาเวซีใต้ดั้งเดิม",
["poz-swa-pro"] = "ซาราวักเหนือดั้งเดิม",
["poz-ter"] = "มลายูแบบตรังกานู",
["ppa"] = "Pao",
["ppe"] = "Papi",
["ppi"] = "Paipai",
["ppk"] = "Uma",
["ppl"] = "ปีปิล",
["ppm"] = "Papuma",
["ppn"] = "Papapana",
["ppo"] = "Folopa",
["ppq"] = "Pei",
["pps"] = "San Luís Temalacayuca Popoloca",
["ppt"] = "Pa",
["ppu"] = "Papora",
["pqa"] = "Pa'a",
["pqe-pro"] = "มาลาโย-พอลินีเชียนตะวันออกดั้งเดิม",
["pqm"] = "Malecite-Passamaquoddy",
["pra"] = "ปรากฤต",
["pra-niy"] = "Niya Prakrit",
["prc"] = "Parachi",
["pre"] = "Principense",
["prf"] = "Paranan",
["prg"] = "Old Prussian",
["prh"] = "Porohanon",
["pri"] = "Paicî",
["prk"] = "Parauk",
["prl"] = "Peruvian Sign Language",
["prm"] = "Kibiri",
["prn"] = "Prasuni",
["pro"] = "อุตซิตาเก่า",
["prq"] = "Ashéninka Perené",
["prr"] = "Puri",
["prt"] = "Phai",
["pru"] = "Puragi",
["prw"] = "Parawen",
["prx"] = "Purik",
["prz"] = "Providencia Sign Language",
["ps"] = "ปาทาน",
["psa"] = "Asue Awyu",
["psc"] = "Persian Sign Language",
["psd"] = "Plains Indian Sign Language",
["pse"] = "มลายูตอนกลาง",
["psg"] = "Penang Sign Language",
["psh"] = "Southwest Pashayi",
["psi"] = "Southeast Pashayi",
["psl"] = "Puerto Rican Sign Language",
["psm"] = "Pauserna",
["psn"] = "Panasuan",
["pso"] = "Polish Sign Language",
["psp"] = "Philippine Sign Language",
["psq"] = "Pasi",
["psr"] = "Portuguese Sign Language",
["pss"] = "Kaulong",
["psw"] = "Port Sandwich",
["psy"] = "Piscataway",
["pt"] = "โปรตุเกส",
["pta"] = "Pai Tavytera",
["pth"] = "Pataxó Hã-Ha-Hãe",
["pti"] = "Pintiini",
["ptn"] = "Patani",
["pto"] = "Zo'é",
["ptp"] = "Patep",
["ptq"] = "Pattapu",
["ptr"] = "Piamatsina",
["ptt"] = "Enrekang",
["ptu"] = "Bambam",
["ptv"] = "Port Vato",
["ptw"] = "Pentlatch",
["pty"] = "Pathiya",
["pua"] = "Purepecha",
["pub"] = "Purum",
["puc"] = "Punan Merap",
["pud"] = "Punan Aput",
["pue"] = "Puelche",
["puf"] = "Punan Merah",
["pug"] = "Phuie",
["pui"] = "Puinave",
["puj"] = "Punan Tubu",
["pum"] = "Puma",
["puo"] = "Puoc",
["pup"] = "Pulabu",
["puq"] = "Puquina",
["pur"] = "Puruborá",
["put"] = "Putoh",
["puu"] = "Punu",
["puw"] = "Puluwat",
["pux"] = "Puare",
["puy"] = "Purisimeño",
["pwa"] = "Pawaia",
["pwb"] = "Panawa",
["pwg"] = "Gapapaiwa",
["pwi"] = "Patwin",
["pwm"] = "Molbog",
["pwn"] = "ไปวัน",
["pwo"] = "กะเหรี่ยงโปตะวันตก",
["pwr"] = "Powari",
["pww"] = "กะเหรี่ยงโปเหนือ",
["pxm"] = "Quetzaltepec Mixe",
["pye"] = "Pye Krumen",
["pym"] = "Fyam",
["pyn"] = "Poyanáwa",
["pys"] = "Paraguayan Sign Language",
["pyu"] = "Puyuma",
["pyx"] = "ปยู",
["pyy"] = "Pyen",
["pzh"] = "Pazeh",
["pzn"] = "Para Naga",
["qfa-adm-pro"] = "เกรตอันดามันนีสดั้งเดิม",
["qfa-bet-pro"] = "เบ-ไทดั้งเดิม",
["qfa-cka-pro"] = "Proto-Chukotko-Kamchatkan",
["qfa-hur-pro"] = "Proto-Hurro-Urartian",
["qfa-kad-pro"] = "Proto-Kadu",
["qfa-kms-pro"] = "Proto-Kam-Sui",
["qfa-kor-pro"] = "เกาหลีดั้งเดิม",
["qfa-kra-pro"] = "ขร้าดั้งเดิม",
["qfa-lic-pro"] = "ไหลดั้งเดิม",
["qfa-onb-pro"] = "เบดั้งเดิม",
["qfa-ong-pro"] = "Proto-Ongan",
["qfa-tak-pro"] = "ขร้า-ไทดั้งเดิม",
["qfa-yen-pro"] = "Proto-Yeniseian",
["qfa-yuk-pro"] = "Proto-Yukaghir",
["qu"] = "เกชัว",
["qua"] = "Quapaw",
["quc"] = "K'iche'",
["qui"] = "Quileute",
["qum"] = "Sipakapense",
["qun"] = "Quinault",
["quq"] = "Quinqui",
["quv"] = "Sacapulteco",
["qvy"] = "Queyu",
["qwc"] = "เกชัวคลาสสิก",
["qwe-kch"] = "Kichwa",
["qwe-pro"] = "เกชวนดั้งเดิม",
["qwm"] = "คูมาน",
["qwt"] = "Kwalhioqua-Tlatskanai",
["qxs"] = "Southern Qiang",
["qya"] = "เควนยา",
["qyp"] = "Quiripi",
["raa"] = "Dungmali",
["rab"] = "Chamling",
["rac"] = "Rasawa",
["rad"] = "ระแด",
["raf"] = "Western Meohang",
["rag"] = "Logooli",
["rah"] = "Rabha",
["rai"] = "Ramoaaina",
["rak"] = "Tulu-Bohuai",
["ral"] = "Ralte",
["ram"] = "Canela",
["ran"] = "Riantana",
["rao"] = "Rao",
["rap"] = "ราปานูอี",
["raq"] = "Saam",
["rar"] = "ราโรโตงา",
["ras"] = "Tegali",
["rat"] = "Razajerdi",
["rau"] = "Raute",
["rav"] = "Sampang",
["raw"] = "เรอหวั่ง",
["rax"] = "Rang",
["ray"] = "Rapa",
["raz"] = "Rahambuu",
["rbb"] = "Rumai Palaung",
["rbk"] = "Northern Bontoc",
["rbl"] = "Miraya Bikol",
["rcf"] = "Réunion Creole French",
["rdb"] = "Rudbari",
["rea"] = "Rerau",
["reb"] = "Rembong",
["ree"] = "Rejang Kayan",
["reg"] = "Kara (Tanzania)",
["rei"] = "Reli",
["rej"] = "Rejang",
["rel"] = "Rendille",
["rem"] = "Remo",
["ren"] = "Rengao",
["rer"] = "Rer Bare",
["res"] = "Reshe",
["ret"] = "Retta",
["rey"] = "Reyesano",
["rga"] = "Roria",
["rge"] = "Romano-Greek",
["rgk"] = "Rangkas",
["rgn"] = "โรมัญญา",
["rgr"] = "Resígaro",
["rgs"] = "Southern Roglai",
["rgu"] = "Ringgou",
["rhg"] = "โรฮีนจา",
["rhp"] = "Yahang",
["ria"] = "Reang",
["rif"] = "ริฟ",
["ril"] = "Riang",
["rim"] = "Nyaturu",
["rin"] = "Nungu",
["rir"] = "Ribun",
["rit"] = "Ritarungo",
["riu"] = "Riung",
["rjg"] = "Rajong",
["rji"] = "Raji",
["rjs"] = "ราชพังสี",
["rka"] = "Kraol",
["rkb"] = "Rikbaktsa",
["rkh"] = "Rakahanga-Manihiki",
["rki"] = "ยะไข่",
["rkm"] = "Marka",
["rkt"] = "Kamta",
["rkw"] = "Arakwal",
["rm"] = "โรมานช์",
["rma"] = "Rama",
["rmb"] = "Rembarunga",
["rmc"] = "Carpathian Romani",
["rmd"] = "Traveller Danish",
["rme"] = "Angloromani",
["rmf"] = "Kalo Finnish Romani",
["rmg"] = "Traveller Norwegian",
["rmh"] = "Murkim",
["rmi"] = "Lomavren",
["rmk"] = "Romkun",
["rml"] = "Baltic Romani",
["rmm"] = "Roma",
["rmn"] = "Balkan Romani",
["rmo"] = "Sinte Romani",
["rmp"] = "Rempi",
["rmq"] = "Caló",
["rms"] = "Romanian Sign Language",
["rmt"] = "Domari",
["rmu"] = "Tavringer Romani",
["rmv"] = "Romanova",
["rmw"] = "Welsh Romani",
["rmx"] = "Romam",
["rmy"] = "Vlax Romani",
["rmz"] = "Marma",
["rnd"] = "Ruwund",
["rng"] = "Ronga",
["rnl"] = "Ranglong",
["rnn"] = "Roon",
["rnp"] = "Rongpo",
["rnw"] = "Rungwa",
["ro"] = "โรมาเนีย",
["roa-ang"] = "Angevin",
["roa-bbn"] = "บูร์บอแน-แบรีชง",
["roa-brg"] = "Bourguignon",
["roa-can"] = "Cantabrian",
["roa-cha"] = "Champenois",
["roa-fcm"] = "Franc-Comtois",
["roa-gal"] = "Gallo",
["roa-gib"] = "Gallo-Italic of Basilicata",
["roa-gis"] = "Gallo-Italic of Sicily",
["roa-leo"] = "เลออน",
["roa-lor"] = "Lorrain",
["roa-oca"] = "กาตาลาเก่า",
["roa-ole"] = "เลออนเก่า",
["roa-ona"] = "Old Navarro-Aragonese",
["roa-opt"] = "กาลิเซีย-โปรตุเกสเก่า",
["roa-orl"] = "Orléanais",
["roa-poi"] = "Poitevin-Saintongeais",
["roa-tar"] = "Tarantino",
["rob"] = "Tae'",
["roc"] = "Cacgia Roglai",
["rod"] = "Rogo",
["roe"] = "Ronji",
["rof"] = "Rombo",
["rog"] = "Northern Roglai",
["rol"] = "Romblomanon",
["rom"] = "โรมานี",
["roo"] = "Rotokas",
["rop"] = "Australian Kriol",
["ror"] = "Rongga",
["rou"] = "Runga",
["row"] = "Dela-Oenale",
["rpn"] = "Repanbitip",
["rpt"] = "Rapting",
["rri"] = "Ririo",
["rro"] = "Roro",
["rrt"] = "Arritinngithigh",
["rsb"] = "Romano-Serbian",
["rsk"] = "รูซินแบบพันโนเนีย",
["rsl"] = "มือรัสเซีย",
["rsm"] = "Miriwoong Sign Language",
["rsn"] = "Rwandan Sign Language",
["rtc"] = "Rungtu",
["rth"] = "Ratahan",
["rtm"] = "Rotuman",
["rtw"] = "Rathawi",
["ru"] = "รัสเซีย",
["rub"] = "Gungu",
["ruc"] = "Ruuli",
["rue"] = "รูซินแบบคาร์พาเทีย",
["ruf"] = "Luguru",
["rug"] = "Roviana",
["ruh"] = "Ruga",
["rui"] = "Rufiji",
["ruk"] = "Che",
["ruo"] = "อิสโตร-โรมาเนีย",
["rup"] = "Aromanian",
["ruq"] = "Megleno-Romanian",
["rut"] = "Rutul",
["ruu"] = "Lanas Lobu",
["ruy"] = "Mala (Nigeria)",
["ruz"] = "Ruma",
["rw"] = "รวันดา-รุนดี",
["rwa"] = "Rawo",
["rwk"] = "Rwa",
["rwm"] = "Amba",
["rwo"] = "Rawa",
["rxd"] = "Ngardi",
["rxw"] = "Karuwali",
["ryn"] = "อามามิโอชิมะเหนือ",
["rys"] = "ยาเอยามะ",
["ryu"] = "โอกินาวะ",
["rzh"] = "Razihi",
["sa"] = "สันสกฤต",
["saa"] = "Saba",
["sab"] = "Buglere",
["sac"] = "Fox",
["sad"] = "Sandawe",
["sae"] = "Sabanê",
["saf"] = "Safaliba",
["sah"] = "ซาคา",
["sai-all"] = "Allentiac",
["sai-and"] = "Andoquero",
["sai-ayo"] = "Ayomán",
["sai-bae"] = "Baenan",
["sai-bag"] = "Bagua",
["sai-bet"] = "Betoi",
["sai-bor-pro"] = "Proto-Boran",
["sai-cac"] = "Cacán",
["sai-caq"] = "Caranqui",
["sai-car-pro"] = "Proto-Cariban",
["sai-cat"] = "Catacao",
["sai-cer-pro"] = "Proto-Cerrado",
["sai-chi"] = "Chirino",
["sai-chn"] = "Chaná",
["sai-chp"] = "Chapacura",
["sai-chr"] = "Charrua",
["sai-chu"] = "Churuya",
["sai-cje-pro"] = "Proto-Central Jê",
["sai-cmg"] = "Comechingon",
["sai-cno"] = "Chono",
["sai-cnr"] = "Cañari",
["sai-coe"] = "Coeruna",
["sai-col"] = "Colán",
["sai-cop"] = "Copallén",
["sai-crd"] = "Coroado Puri",
["sai-ctq"] = "Catuquinaru",
["sai-cul"] = "Culli",
["sai-cva"] = "Cueva",
["sai-esm"] = "Esmeralda",
["sai-ewa"] = "Ewarhuyana",
["sai-gam"] = "Gamela",
["sai-gay"] = "Gayón",
["sai-gmo"] = "Guamo",
["sai-gua"] = "Guachí",
["sai-gue"] = "Güenoa",
["sai-hau"] = "Haush",
["sai-jee-pro"] = "Proto-Jê",
["sai-jko"] = "Jeikó",
["sai-jrj"] = "Jirajara",
["sai-kat"] = "Katembri",
["sai-mal"] = "Malalí",
["sai-mar"] = "Maratino",
["sai-mat"] = "Matanawi",
["sai-mcn"] = "Mocana",
["sai-men"] = "Menien",
["sai-mil"] = "Millcayac",
["sai-mlb"] = "Malibu",
["sai-msk"] = "Masakará",
["sai-muc"] = "Mucuchí",
["sai-mue"] = "Muellama",
["sai-muz"] = "Muzo",
["sai-mys"] = "Maynas",
["sai-nat"] = "Natú",
["sai-nje-pro"] = "Proto-Northern Jê",
["sai-opo"] = "Opón",
["sai-oto"] = "Otomaco",
["sai-pal"] = "Palta",
["sai-pam"] = "Pamigua",
["sai-par"] = "Paratió",
["sai-peb"] = "Peba",
["sai-pnz"] = "Panzaleo",
["sai-prh"] = "Puruhá",
["sai-ptg"] = "Patagón",
["sai-pur"] = "Purukotó",
["sai-pyg"] = "Payaguá",
["sai-pyk"] = "Pykobjê",
["sai-qmb"] = "Quimbaya",
["sai-qtm"] = "Quitemo",
["sai-rab"] = "Rabona",
["sai-ram"] = "Ramanos",
["sai-sac"] = "Sácata",
["sai-san"] = "Sanaviron",
["sai-sap"] = "Sapará",
["sai-sec"] = "Sechura",
["sai-sin"] = "Sinúfana",
["sai-sje-pro"] = "Proto-Southern Jê",
["sai-tab"] = "Tabancale",
["sai-tal"] = "Tallán",
["sai-tap"] = "Tapayuna",
["sai-tar-pro"] = "Proto-Taranoan",
["sai-teu"] = "Teushen",
["sai-tim"] = "Timote",
["sai-tpr"] = "Taparita",
["sai-trr"] = "Tarairiú",
["sai-wai"] = "Waitaká",
["sai-way"] = "Wayumara",
["sai-wit-pro"] = "Proto-Witotoan",
["sai-wnm"] = "Wanham",
["sai-xoc"] = "Xocó",
["sai-yao"] = "Yao (South America)",
["sai-yar"] = "Yarumá",
["sai-yri"] = "Yuri",
["sai-yup"] = "Yupua",
["sai-yur"] = "Yurumanguí",
["saj"] = "Sahu",
["sak"] = "Sake",
["sal-pro"] = "Proto-Salish",
["sam"] = "Samaritan Aramaic",
["sao"] = "Sause",
["saq"] = "Samburu",
["sar"] = "Saraveca",
["sas"] = "Sasak",
["sat"] = "สันถาลี",
["sau"] = "Saleman",
["sav"] = "Saafi-Saafi",
["saw"] = "Sawi",
["sax"] = "Sa",
["say"] = "Saya",
["saz"] = "Saurashtra",
["sba"] = "Ngambay",
["sbb"] = "Simbo",
["sbc"] = "Gele'",
["sbd"] = "Southern Samo",
["sbe"] = "Saliba (New Guinea)",
["sbf"] = "Shabo",
["sbg"] = "Seget",
["sbh"] = "Sori-Harengan",
["sbi"] = "Seti",
["sbj"] = "Surbakhal",
["sbk"] = "Safwa",
["sbl"] = "Botolan Sambal",
["sbm"] = "Sagala",
["sbn"] = "Sindhi Bhil",
["sbo"] = "Sabüm",
["sbp"] = "Sangu (Tanzania)",
["sbq"] = "Sileibi",
["sbr"] = "Sembakung Murut",
["sbs"] = "Subiya",
["sbt"] = "Kimki",
["sbu"] = "Stod Bhoti",
["sbv"] = "Sabine",
["sbw"] = "Simba",
["sbx"] = "Seberuang",
["sby"] = "Soli",
["sbz"] = "Sara Kaba",
["sc"] = "ซาร์ดิเนีย",
["scb"] = "Chut",
["sce"] = "ตงเซียง",
["scf"] = "San Miguel Creole French",
["scg"] = "Sanggau",
["sch"] = "Sakachep",
["sci"] = "Sri Lankan Creole Malay",
["sck"] = "Sadri",
["scl"] = "Shina",
["scn"] = "ซิซิลี",
["sco"] = "สกอต",
["scp"] = "Yolmo",
["scq"] = "สะโอจ",
["scs"] = "North Slavey",
["scu"] = "Shumcho",
["scv"] = "Sheni",
["scw"] = "Sha",
["scx"] = "Sicel",
["scz"] = "Shetland",
["sd"] = "สินธ์",
["sda"] = "Toraja-Sa'dan",
["sdb"] = "Shabak",
["sdc"] = "ซัสซารี",
["sde"] = "Surubu",
["sdf"] = "Sarli",
["sdg"] = "Savi",
["sdh"] = "Southern Kurdish",
["sdj"] = "Suundi",
["sdk"] = "Sos Kundi",
["sdl"] = "Saudi Arabian Sign Language",
["sdm"] = "Semandang",
["sdn"] = "Gallurese",
["sdo"] = "Bukar-Sadung Bidayuh",
["sdp"] = "Sherdukpen",
["sdr"] = "Oraon Sadri",
["sds"] = "เบอร์เบอร์แบบตูนีเซีย",
["sdu"] = "Sarudu",
["sdv-daj-pro"] = "Proto-Daju",
["sdv-eje-pro"] = "Proto-Eastern Jebel",
["sdv-nil-pro"] = "Proto-Nilotic",
["sdv-nyi-pro"] = "Proto-Nyima",
["sdv-tmn-pro"] = "Proto-Taman",
["sdx"] = "Sibu Melanau",
["se"] = "ซามีเหนือ",
["sea"] = "เซอไม",
["sec"] = "Sechelt",
["sed"] = "Sedang",
["see"] = "Seneca",
["sef"] = "Cebaara Senoufo",
["seg"] = "Segeju",
["seh"] = "Sena",
["sei"] = "Seri",
["sej"] = "Sene",
["sek"] = "Sekani",
["sel-nor"] = "Northern Selkup",
["sel-pro"] = "Proto-Selkup",
["sel-sou"] = "Southern Selkup",
["sem-amm"] = "อัมโมน",
["sem-amo"] = "Amorite",
["sem-cha"] = "Chaha",
["sem-dad"] = "Dadanitic",
["sem-dum"] = "Dumaitic",
["sem-has"] = "Hasaitic",
["sem-his"] = "Hismaic",
["sem-mhr"] = "Muher",
["sem-pro"] = "เซมิติกดั้งเดิม",
["sem-saf"] = "Safaitic",
["sem-sam"] = "Samalian",
["sem-srb"] = "อาหรับใต้เก่า",
["sem-tay"] = "Taymanitic",
["sem-tha"] = "Thamudic",
["sem-wes-pro"] = "เซมิติกตะวันตกดั้งเดิม",
["sen"] = "Nanerigé Sénoufo",
["seo"] = "Suarmin",
["sep"] = "Sìcìté Sénoufo",
["seq"] = "Senara Sénoufo",
["ser"] = "Serrano",
["ses"] = "Koyraboro Senni",
["set"] = "Sentani",
["seu"] = "Serui-Laut",
["sev"] = "Nyarafolo Senoufo",
["sew"] = "Sewa Bay",
["sey"] = "Secoya",
["sez"] = "Senthang Chin",
["sfb"] = "French Belgian Sign Language",
["sfe"] = "Eastern Subanun",
["sfm"] = "Small Flowery Miao",
["sfs"] = "South African Sign Language",
["sfw"] = "Sehwi",
["sg"] = "ซังโก",
["sga"] = "ไอริชเก่า",
["sgb"] = "Mag-Anchi Ayta",
["sgc"] = "Kipsigis",
["sgd"] = "ซูรีเกาโนน",
["sge"] = "Segai",
["sgg"] = "Swiss-German Sign Language",
["sgh"] = "Shughni",
["sgi"] = "Suga",
["sgk"] = "Sangkong",
["sgm"] = "Singa",
["sgp"] = "Singpho",
["sgr"] = "Sangisari",
["sgs"] = "Samogitian",
["sgt"] = "Brokpake",
["sgu"] = "Salas",
["sgw"] = "Sebat Bet Gurage",
["sgx"] = "Sierra Leone Sign Language",
["sgy"] = "Sanglechi",
["sgz"] = "Sursurunga",
["sh"] = "เซอร์โบ-โครเอเชีย",
["sha"] = "Shall-Zwall",
["shb"] = "Ninam",
["shc"] = "Sonde",
["shd"] = "Kundal Shahi",
["she"] = "Sheko",
["shg"] = "Shua",
["shh"] = "Shoshone",
["shi"] = "Tashelhit",
["shj"] = "Shatt",
["shk"] = "Shilluk",
["shl"] = "Shendu",
["shm"] = "Shahrudi",
["shn"] = "ไทใหญ่",
["sho"] = "Shanga",
["shp"] = "Shipibo-Conibo",
["shq"] = "Sala",
["shr"] = "Shi",
["shs"] = "Shuswap",
["sht"] = "Shasta",
["shu"] = "Chadian Arabic",
["shv"] = "Shehri",
["shw"] = "Shwai",
["shx"] = "She",
["shy"] = "Tachawit",
["shz"] = "Syenara Senoufo",
["si"] = "สิงหล",
["sia"] = "Akkala Sami",
["sib"] = "Sebop",
["sid"] = "ซีดามา",
["sie"] = "Simaa",
["sif"] = "Siamou",
["sig"] = "Paasaal",
["sih"] = "Sîshëë",
["sii"] = "Shom Peng",
["sij"] = "Numbami",
["sik"] = "Sikiana",
["sil"] = "Tumulung Sisaala",
["sim"] = "Seim",
["sio-pro"] = "Proto-Siouan",
["sip"] = "สิกขิม",
["siq"] = "Sonia",
["sir"] = "Siri",
["sis"] = "Siuslaw",
["sit-aao-pro"] = "Proto-Central Naga",
["sit-bai-pro"] = "Proto-Bai",
["sit-ban"] = "Bangru",
["sit-bdi-pro"] = "Proto-Bodish",
["sit-bok"] = "Bokar",
["sit-cai"] = "Caijia",
["sit-cha"] = "Chairel",
["sit-ers-pro"] = "Proto-Ersuic",
["sit-hrs-pro"] = "Proto-Hrusish",
["sit-jap"] = "Japhug",
["sit-kha-pro"] = "Proto-Kham",
["sit-khb-pro"] = "Proto-Kho-Bwa",
["sit-khp-pro"] = "Proto-Puroik",
["sit-khw-pro"] = "Proto-Western Kho-Bwa",
["sit-kon-pro"] = "Proto-Northern Naga",
["sit-liz"] = "Lizu",
["sit-lnj"] = "Longjia",
["sit-lrn"] = "Luren",
["sit-luu-pro"] = "ลูอิชดั้งเดิม",
["sit-nas-pro"] = "Proto-Naish",
["sit-prn"] = "Puiron",
["sit-pro"] = "ซีโน-ทิเบตันดั้งเดิม",
["sit-sit"] = "Situ",
["sit-tam-pro"] = "Proto-Tamangic",
["sit-tan-pro"] = "Proto-Tani",
["sit-tgm"] = "ตางัม",
["sit-tng-pro"] = "Proto-Tangkhulic",
["sit-tos"] = "Tosu",
["sit-tsh"] = "Tshobdun",
["sit-zbu"] = "Zbu",
["siu"] = "Sinagen",
["siv"] = "Sumariup",
["siw"] = "Siwai",
["six"] = "Sumau",
["siy"] = "Sivandi",
["siz"] = "Siwi",
["sja"] = "Epena",
["sjb"] = "Sajau Basap",
["sjc"] = "Shaojiang Min",
["sjd"] = "ซามีแบบกิลดิน",
["sje"] = "ซามีแบบปีเต",
["sjg"] = "Assangori",
["sjk"] = "Kemi Sami",
["sjl"] = "Miji",
["sjm"] = "Mapun",
["sjn"] = "ซินดาริน",
["sjo"] = "Xibe",
["sjp"] = "Surjapuri",
["sjr"] = "Siar-Lak",
["sjs"] = "Senhaja de Srair",
["sjt"] = "Ter Sami",
["sju"] = "Ume Sami",
["sjw"] = "Shawnee",
["sk"] = "สโลวัก",
["ska"] = "Skagit",
["skb"] = "แสก",
["skc"] = "Ma Manda",
["skd"] = "Southern Sierra Miwok",
["ske"] = "Ske",
["skf"] = "Mekéns",
["skh"] = "Sikule",
["ski"] = "Sika",
["skj"] = "Seke",
["skk"] = "Sok",
["skm"] = "Sakam",
["skn"] = "Kolibugan Subanon",
["sko"] = "Seko Tengah",
["skp"] = "Sekapan",
["skq"] = "Sininkere",
["skr"] = "Saraiki",
["sks"] = "ไมยา",
["skt"] = "Sakata",
["sku"] = "Sakao",
["skv"] = "Skou",
["skw"] = "Skepi Creole Dutch",
["skx"] = "Seko Padang",
["sky"] = "ซีกายานา",
["skz"] = "Sekar",
["sl"] = "สโลวีเนีย",
["sla-pro"] = "สลาวิกดั้งเดิม",
["slc"] = "Saliba (Colombia)",
["sld"] = "Sisaala",
["sle"] = "Sholaga",
["slf"] = "Swiss-Italian Sign Language",
["slg"] = "Selungai Murut",
["slh"] = "Southern Puget Sound Salish",
["slj"] = "Salumá",
["sll"] = "Salt-Yui",
["slm"] = "ซามาแบบปางูตารัน",
["sln"] = "Salinan",
["slp"] = "Lamaholot",
["slr"] = "ซาลาร์",
["sls"] = "Singapore Sign Language",
["slt"] = "Sila",
["slu"] = "Selaru",
["slw"] = "Sialum",
["slx"] = "Salampasu",
["sly"] = "Selayar",
["slz"] = "Ma'ya",
["sm"] = "ซามัว",
["sma"] = "ซามีใต้",
["smb"] = "Simbari",
["smc"] = "Som",
["smd"] = "Sama",
["smf"] = "Auwe",
["smg"] = "Simbali",
["smh"] = "Samei",
["smi-pro"] = "ซามิกดั้งเดิม",
["smj"] = "ซามีแบบลูเล",
["smk"] = "โบลีเนา",
["sml"] = "ซามาตอนกลาง",
["smm"] = "Musasa",
["smn"] = "ซามีแบบอีนารี",
["smp"] = "Samaritan Hebrew",
["smq"] = "Samo",
["smr"] = "Simeulue",
["sms"] = "Skolt Sami",
["smt"] = "Simte",
["smu"] = "สมราย",
["smv"] = "Samvedi",
["smw"] = "Sumbawa",
["smx"] = "Samba",
["smy"] = "Semnani",
["smz"] = "Simeku",
["sn"] = "โชนา",
["snb"] = "Sebuyau",
["snc"] = "Sinaugoro",
["sne"] = "Bau Bidayuh",
["snf"] = "Noon",
["sng"] = "Sanga (Congo)",
["sni"] = "Sensi",
["snj"] = "Riverain Sango",
["snk"] = "Soninke",
["snl"] = "Sangil",
["snm"] = "Southern Ma'di",
["snn"] = "Siona",
["sno"] = "Snohomish",
["snp"] = "Siane",
["snq"] = "Sangu (Gabon)",
["snr"] = "Sihan",
["sns"] = "Nahavaq",
["snu"] = "Senggi",
["snv"] = "Sa'ban",
["snw"] = "Selee",
["snx"] = "Sam",
["sny"] = "Saniyo-Hiyewe",
["snz"] = "Kou",
["so"] = "โซมาลี",
["soa"] = "โซ่ง",
["sob"] = "Sobei",
["soc"] = "Soko",
["sod"] = "Songoora",
["soe"] = "Songomeno",
["sog"] = "Sogdian",
["soh"] = "Aka (Sudan)",
["soi"] = "Sonha",
["sok"] = "Sokoro",
["sol"] = "Solos",
["son-pro"] = "Proto-Songhay",
["soo"] = "Nsong",
["sop"] = "Songe",
["soq"] = "Kanasi",
["sor"] = "Somrai",
["sos"] = "Seenku",
["sou"] = "ปักษ์ใต้",
["sov"] = "Sonsorolese",
["sow"] = "Sowanda",
["sox"] = "Swo",
["soy"] = "Miyobe",
["soz"] = "Temi",
["spb"] = "Sepa (Indonesia)",
["spc"] = "Sapé",
["spd"] = "Saep",
["spe"] = "Sepa (New Guinea)",
["spg"] = "Sian",
["spi"] = "Saponi",
["spk"] = "Sengo",
["spl"] = "Selepet",
["spm"] = "Sepen",
["spn"] = "Sanapaná",
["spo"] = "Spokane",
["spp"] = "Supyire",
["spr"] = "Saparua",
["sps"] = "Saposa",
["spt"] = "Spiti Bhoti",
["spu"] = "Sapuan",
["spv"] = "Sambalpuri",
["spx"] = "South Picene",
["spy"] = "Sabaot",
["sq"] = "แอลเบเนีย",
["sqa"] = "Shama-Sambuga",
["sqh"] = "Shau",
["sqj-pro"] = "แอลเบเนียนดั้งเดิม",
["sqk"] = "Albanian Sign Language",
["sqm"] = "Suma",
["sqn"] = "Susquehannock",
["sqo"] = "Sorkhei",
["sqq"] = "Sou",
["sqr"] = "Siculo-Arabic",
["sqs"] = "Sri Lankan Sign Language",
["sqt"] = "Soqotri",
["squ"] = "Squamish",
["sra"] = "Saruga",
["srb"] = "Sora",
["sre"] = "Sara",
["srf"] = "Nafi",
["srg"] = "Sulod",
["srh"] = "Sarikoli",
["sri"] = "Siriano",
["srk"] = "Serudung Murut",
["srl"] = "Isirawa",
["srm"] = "ซารามักกา",
["srn"] = "ซรานันโตโง",
["srq"] = "Sirionó",
["srr"] = "Serer",
["srs"] = "Tsuut'ina",
["srt"] = "Sauri",
["sru"] = "Suruí",
["srv"] = "Waray Sorsogon",
["srw"] = "Serua",
["srx"] = "Sirmauri",
["sry"] = "Sera",
["srz"] = "Shahmirzadi",
["ss"] = "สวาซี",
["ssa-klk-pro"] = "Proto-Kuliak",
["ssa-kom-pro"] = "Proto-Koman",
["ssa-pro"] = "Proto-Nilo-Saharan",
["ssb"] = "Southern Sama",
["ssc"] = "Suba-Simbiti",
["ssd"] = "Siroi",
["sse"] = "Balangingi",
["ssf"] = "Thao",
["ssg"] = "Seimat",
["ssh"] = "Shihhi Arabic",
["ssi"] = "Sansi",
["ssj"] = "Sausi",
["ssk"] = "Sunam",
["ssl"] = "Western Sisaala",
["ssm"] = "Semnam",
["sso"] = "Sissano",
["ssp"] = "Spanish Sign Language",
["ssq"] = "So'a",
["ssr"] = "Swiss-French Sign Language",
["sss"] = "Sô",
["sst"] = "Sinasina",
["ssu"] = "Susuami",
["ssv"] = "Shark Bay",
["ssx"] = "Samberigi",
["ssy"] = "ซาโฮ",
["ssz"] = "Sengseng",
["st"] = "ซูทู",
["stb"] = "Northern Subanen",
["std"] = "Sentinelese",
["ste"] = "Liana-Seti",
["stf"] = "Seta",
["stg"] = "Trieng",
["sth"] = "Shelta",
["sti"] = "Bulo Stieng",
["stj"] = "Matya Samo",
["stk"] = "Arammba",
["stm"] = "Setaman",
["stn"] = "Owa",
["sto"] = "Stoney",
["stp"] = "Southeastern Tepehuan",
["stq"] = "ฟรีเชียแบบซาเทอร์ลันท์",
["str"] = "Saanich",
["sts"] = "Shumashti",
["stt"] = "Budeh Stieng",
["stu"] = "Samtao",
["stv"] = "Silt'e",
["stw"] = "Satawalese",
["sty"] = "Siberian Tatar",
["su"] = "ซุนดา",
["sua"] = "Sulka",
["sub"] = "Suku",
["suc"] = "Western Subanon",
["sue"] = "Suena",
["sug"] = "Suganga",
["sui"] = "Suki",
["suk"] = "Sukuma",
["suq"] = "Suri",
["sur"] = "Mwaghavul",
["sus"] = "Susu",
["sut"] = "Subtiaba",
["suv"] = "Puroik",
["suw"] = "Sumbwa",
["sux"] = "ซูเมอร์",
["suy"] = "Suyá",
["suz"] = "Sunwar",
["sv"] = "สวีเดน",
["sva"] = "Svan",
["svb"] = "Ulau-Suain",
["svc"] = "Vincentian Creole English",
["sve"] = "Serili",
["svk"] = "Slovakian Sign Language",
["svm"] = "Slavomolisano",
["svs"] = "Savosavo",
["svx"] = "Skalvian",
["sw"] = "สวาฮีลี",
["swb"] = "Maore Comorian",
["swf"] = "Sere",
["swg"] = "Swabian",
["swi"] = "สุ่ย",
["swj"] = "Sira",
["swl"] = "Swedish Sign Language",
["swm"] = "Samosa",
["swn"] = "Sokna",
["swo"] = "Shanenawa",
["swp"] = "Suau",
["swq"] = "Sharwa",
["swr"] = "Saweru",
["sws"] = "Seluwasan",
["swt"] = "Sawila",
["swu"] = "Suwawa",
["sww"] = "Sowa",
["swx"] = "Suruahá",
["swy"] = "Sarua",
["sxb"] = "Suba",
["sxc"] = "Sicanian",
["sxe"] = "Sighu",
["sxg"] = "Shixing",
["sxk"] = "Southern Kalapuya",
["sxl"] = "Selonian",
["sxm"] = "ซำเร",
["sxn"] = "Sangir",
["sxo"] = "Sorothaptic",
["sxr"] = "Saaroa",
["sxs"] = "Sasaru",
["sxw"] = "Saxwe Gbe",
["sya"] = "Siang",
["syb"] = "Central Subanen",
["syc"] = "ซีรีแอกคลาสสิก",
["syd-pro"] = "Proto-Samoyedic",
["syi"] = "Seki",
["syk"] = "Sukur",
["syl"] = "สิเลฏ",
["sym"] = "Maya Samo",
["syn"] = "Senaya",
["syo"] = "Suoy",
["sys"] = "Sinyar",
["syw"] = "Kagate",
["syx"] = "Osamayi",
["syy"] = "Al-Sayyid Bedouin Sign Language",
["sza"] = "Semelai",
["szb"] = "Ngalum",
["szc"] = "Semaq Beri",
["szd"] = "Seru",
["sze"] = "Seze",
["szg"] = "Sengele",
["szl"] = "ไซลีเซีย",
["szn"] = "Sula",
["szp"] = "Suabo",
["szv"] = "Isubu",
["szw"] = "Sawai",
["szy"] = "ซากีซายา",
["ta"] = "ทมิฬ",
["taa"] = "Lower Tanana",
["tab"] = "ทาบาซารัน",
["tac"] = "Lowland Tarahumara",
["tad"] = "Tause",
["tae"] = "Tariana",
["taf"] = "Tapirapé",
["tag"] = "Tagoi",
["tai-pro"] = "ไทดั้งเดิม",
["tai-swe-pro"] = "ไทตะวันตกเฉียงใต้ดั้งเดิม",
["taj"] = "Eastern Tamang",
["tak"] = "Tala",
["tal"] = "Tal",
["tan"] = "Tangale",
["tao"] = "ยามี",
["tap"] = "Taabwa",
["tar"] = "Central Tarahumara",
["tas"] = "Tây Bồi",
["tau"] = "Upper Tanana",
["tav"] = "Tatuyo",
["taw"] = "Tai",
["tax"] = "Tamki",
["tay"] = "Atayal",
["taz"] = "Tocho",
["tba"] = "Aikanã",
["tbb"] = "Tapeba",
["tbc"] = "Takia",
["tbd"] = "Kaki Ae",
["tbe"] = "Tanimbili",
["tbf"] = "Mandara",
["tbg"] = "North Tairora",
["tbh"] = "Thurawal",
["tbi"] = "Gaam",
["tbj"] = "Tiang",
["tbk"] = "Calamian Tagbanwa",
["tbl"] = "ตโบลี",
["tbm"] = "Tagbu",
["tbn"] = "Barro Negro Tunebo",
["tbo"] = "Tawala",
["tbp"] = "Taworta",
["tbq-bdg-pro"] = "โบโด-กาโรดั้งเดิม",
["tbq-blg"] = "Bailang",
["tbq-brm-pro"] = "Proto-Burmish",
["tbq-gkh"] = "Gokhy",
["tbq-kuk-pro"] = "Proto-Kuki-Chin",
["tbq-lal-pro"] = "Proto-Lalo",
["tbq-laz"] = "Laze",
["tbq-lob-pro"] = "โลโล-เบอร์มีซดั้งเดิม",
["tbq-lol-pro"] = "โลโลอิชดั้งเดิม",
["tbq-mil"] = "Milang",
["tbq-mor"] = "Moran",
["tbq-ngo"] = "Ngochang",
["tbr"] = "Tumtum",
["tbs"] = "Tanguat",
["tbt"] = "Kitembo",
["tbu"] = "Tubar",
["tbv"] = "Tobo",
["tbw"] = "Aborlan Tagbanwa",
["tbx"] = "Kapin",
["tby"] = "Tabaru",
["tbz"] = "Ditammari",
["tca"] = "Ticuna",
["tcb"] = "Tanacross",
["tcc"] = "Datooga",
["tcd"] = "Tafi",
["tce"] = "Southern Tutchone",
["tcf"] = "Malinaltepec Tlapanec",
["tcg"] = "Tamagario",
["tch"] = "Turks and Caicos Creole English",
["tci"] = "Wára",
["tck"] = "Tchitchege",
["tcl"] = "Taman (Myanmar)",
["tcm"] = "Tanahmerah",
["tco"] = "Taungyo",
["tcp"] = "Tawr Chin",
["tcq"] = "Kaiy",
["tcs"] = "ครีโอลช่องแคบทอร์เรส",
["tct"] = "T'en",
["tcu"] = "Southeastern Tarahumara",
["tcw"] = "Tecpatlán Totonac",
["tcx"] = "โตทา",
["tcy"] = "ตูลู",
["tcz"] = "Thado Chin",
["tda"] = "Tagdal",
["tdb"] = "Panchpargania",
["tdc"] = "Emberá-Tadó",
["tdd"] = "ไทใต้คง",
["tde"] = "Tiranige Diga Dogon",
["tdf"] = "Talieng",
["tdg"] = "Western Tamang",
["tdh"] = "Thulung",
["tdi"] = "Tomadino",
["tdj"] = "Tajio",
["tdk"] = "Tambas",
["tdl"] = "Sur",
["tdm"] = "Taruma",
["tdn"] = "Tondano",
["tdo"] = "Teme",
["tdq"] = "Tita",
["tdr"] = "Todrah",
["tds"] = "Doutai",
["tdt"] = "Tetun Dili",
["tdu"] = "Tempasuk Dusun",
["tdv"] = "Toro",
["tdy"] = "Tadyawan",
["te"] = "เตลูกู",
["tea"] = "เตอเมียร์",
["teb"] = "Tetete",
["tec"] = "Terik",
["ted"] = "Tepo Krumen",
["tee"] = "Huehuetla Tepehua",
["tef"] = "Teressa",
["teg"] = "Teke-Tege",
["teh"] = "Tehuelche",
["tei"] = "Torricelli",
["tek"] = "Ibali Teke",
["tem"] = "Temne",
["ten"] = "Tama (Colombia)",
["teo"] = "Ateso",
["tep"] = "Tepecano",
["teq"] = "Temein",
["ter"] = "Tereno",
["tes"] = "Tengger",
["tet"] = "เตตุน",
["teu"] = "Soo",
["tev"] = "Teor",
["tew"] = "Tewa",
["tex"] = "Tennet",
["tey"] = "Tulishi",
["tez"] = "Tetserret",
["tfi"] = "Tofin Gbe",
["tfn"] = "Dena'ina",
["tfo"] = "Tefaro",
["tfr"] = "Teribe",
["tft"] = "เตอร์นาเต",
["tg"] = "ทาจิก",
["tga"] = "Sagalla",
["tgb"] = "Tobilung",
["tgc"] = "Tigak",
["tgd"] = "Ciwogai",
["tge"] = "Eastern Gorkha Tamang",
["tgf"] = "Chali",
["tgh"] = "Tobagonian Creole English",
["tgi"] = "Lawunuia",
["tgn"] = "ตันดากาโนน",
["tgo"] = "Sudest",
["tgp"] = "Tangoa",
["tgq"] = "Tring",
["tgr"] = "Tareng",
["tgs"] = "Nume",
["tgt"] = "Central Tagbanwa",
["tgu"] = "Tanggu",
["tgv"] = "Tingui-Boto",
["tgw"] = "Tagwana Senoufo",
["tgx"] = "Tagish",
["tgy"] = "Togoyo",
["th"] = "ไทย",
["thc"] = "Tai Hang Tong",
["thd"] = "Kuuk Thaayorre",
["the"] = "Chitwania Tharu",
["thf"] = "Thangmi",
["thh"] = "Northern Tarahumara",
["thi"] = "Tai Long",
["thk"] = "Tharaka",
["thl"] = "Dangaura Tharu",
["thm"] = "ทะวืง",
["thn"] = "Thachanadan",
["thp"] = "Thompson",
["thq"] = "Kochila Tharu",
["thr"] = "Rana Tharu",
["ths"] = "Thakali",
["tht"] = "Tahltan",
["thu"] = "Thuri",
["thy"] = "Tha",
["ti"] = "ทือกรึญญา",
["tic"] = "Tira",
["tif"] = "Tifal",
["tig"] = "ทือเกร",
["tih"] = "Timugon Murut",
["tii"] = "Tiene",
["tij"] = "Tilung",
["tik"] = "Tikar",
["til"] = "Tillamook",
["tim"] = "Timbe",
["tin"] = "Tindi",
["tio"] = "Teop",
["tip"] = "Trimuris",
["tiq"] = "Tiéfo",
["tis"] = "Masadiit Itneg",
["tit"] = "Tinigua",
["tiu"] = "Adasen",
["tiv"] = "Tiv",
["tiw"] = "Tiwi",
["tix"] = "Southern Tiwa",
["tiy"] = "ตีรูไร",
["tiz"] = "Tai Hongjin",
["tja"] = "Tajuasohn",
["tjg"] = "Tunjung",
["tji"] = "Northern Tujia",
["tjl"] = "ไทแหล่ง",
["tjm"] = "Timucua",
["tjn"] = "Tonjon",
["tjs"] = "Southern Tujia",
["tju"] = "Tjurruru",
["tjw"] = "Chaap Wuurong",
["tk"] = "เติร์กเมน",
["tka"] = "Truká",
["tkb"] = "Buksa",
["tkd"] = "Tukudede",
["tke"] = "Takwane",
["tkf"] = "Tukumanféd",
["tkl"] = "Tokelauan",
["tkm"] = "Takelma",
["tkn"] = "โทกูโนชิมะ",
["tkp"] = "Tikopia",
["tkq"] = "Tee",
["tkr"] = "Tsakhur",
["tks"] = "Ramandi",
["tkt"] = "Kathoriya Tharu",
["tku"] = "Upper Necaxa Totonac",
["tkv"] = "Mur Pano",
["tkw"] = "Teanu",
["tkx"] = "Tangko",
["tkz"] = "Takua",
["tl"] = "ตากาล็อก",
["tla"] = "Southwestern Tepehuan",
["tlb"] = "Tobelo",
["tlc"] = "Misantla Totonac",
["tld"] = "Talaud",
["tlf"] = "Telefol",
["tlg"] = "Tofanma",
["tlh"] = "Klingon",
["tli"] = "Tlingit",
["tlj"] = "Talinga-Bwisi",
["tlk"] = "Taloki",
["tll"] = "Tetela",
["tlm"] = "Tolomako",
["tln"] = "Talondo'",
["tlo"] = "Talodi",
["tlp"] = "Filomena Mata-Coahuitlán Totonac",
["tlq"] = "Tai Loi",
["tlr"] = "Talise",
["tls"] = "Tambotalo",
["tlt"] = "Teluti",
["tlu"] = "Tulehu",
["tlv"] = "Taliabu",
["tlx"] = "Khehek",
["tly"] = "Talysh",
["tma"] = "Tama (Chad)",
["tmb"] = "Avava",
["tmc"] = "Tumak",
["tmd"] = "Haruai",
["tme"] = "Tremembé",
["tmf"] = "Toba-Maskoy",
["tmg"] = "Ternateño",
["tmh"] = "Tuareg",
["tmi"] = "Tutuba",
["tmj"] = "Samarokena",
["tmk"] = "Northwestern Tamang",
["tml"] = "Tamnim Citak",
["tmm"] = "Tai Thanh",
["tmn"] = "Taman (Indonesia)",
["tmo"] = "Temoq",
["tmq"] = "Tumleo",
["tms"] = "Tima",
["tmt"] = "Tasmate",
["tmu"] = "Iau",
["tmv"] = "Motembo",
["tmy"] = "Tami",
["tmz"] = "Tamanaku",
["tn"] = "สวานา",
["tna"] = "Tacana",
["tnb"] = "Western Tunebo",
["tnc"] = "Tanimuca-Retuarã",
["tnd"] = "Angosturas Tunebo",
["tne"] = "Tinoc Kallahan",
["tng"] = "Tobanga",
["tnh"] = "Maiani",
["tni"] = "Tandia",
["tnk"] = "Kwamera",
["tnl"] = "Lenakel",
["tnm"] = "Tabla",
["tnn"] = "North Tanna",
["tno"] = "Toromono",
["tnp"] = "Whitesands",
["tnq"] = "ตาอีโน",
["tnr"] = "Bedik",
["tns"] = "Tenis",
["tnt"] = "Tontemboan",
["tnu"] = "Tay Khang",
["tnv"] = "Tanchangya",
["tnw"] = "Tonsawang",
["tnx"] = "Tanema",
["tny"] = "Tongwe",
["tnz"] = "Ten'edn",
["to"] = "ตองงา",
["tob"] = "Toba",
["toc"] = "Coyutla Totonac",
["tod"] = "Toma",
["tof"] = "Gizrra",
["tog"] = "Tonga (Malawi)",
["toh"] = "Tonga (Mozambique)",
["toi"] = "Tonga (Zambia)",
["toj"] = "Tojolabal",
["tok"] = "Toki Pona",
["tol"] = "Tolowa",
["tom"] = "Tombulu",
["too"] = "Xicotepec de Juárez Totonac",
["top"] = "Papantla Totonac",
["toq"] = "Toposa",
["tor"] = "Togbo-Vara Banda",
["tos"] = "Highland Totonac",
["tou"] = "Tho",
["tov"] = "Upper Taromi",
["tow"] = "Jemez",
["tox"] = "Tobian",
["toy"] = "Topoiyo",
["toz"] = "To",
["tpa"] = "Taupota",
["tpc"] = "Azoyú Me'phaa",
["tpe"] = "Tippera",
["tpf"] = "Tarpia",
["tpg"] = "Kula",
["tpi"] = "ตอกปีซิน",
["tpj"] = "Tapieté",
["tpk"] = "Tupinikin",
["tpl"] = "Tlacoapa Me'phaa",
["tpm"] = "Tampulma",
["tpn"] = "Tupinambá",
["tpo"] = "Tai Pao",
["tpp"] = "Pisaflores Tepehua",
["tpq"] = "Tukpa",
["tpr"] = "Tuparí",
["tpt"] = "Tlachichilco Tepehua",
["tpu"] = "Tampuan",
["tpv"] = "Tanapag",
["tpw"] = "ตูปีเก่า",
["tpx"] = "Acatepec Me'phaa",
["tpy"] = "Trumai",
["tpz"] = "Tinputz",
["tqb"] = "Tembé",
["tql"] = "Lehali",
["tqm"] = "Turumsa",
["tqn"] = "Tenino",
["tqo"] = "Toaripi",
["tqp"] = "Tomoip",
["tqq"] = "Tunni",
["tqr"] = "Torona",
["tqt"] = "Western Totonac",
["tqu"] = "Touo",
["tqw"] = "Tonkawa",
["tr"] = "ตุรกี",
["tra"] = "Tirahi",
["trb"] = "Terebu",
["trc"] = "Copala Triqui",
["trd"] = "Turi",
["tre"] = "East Tarangan",
["trf"] = "Trinidadian Creole English",
["trg"] = "Lishán Didán",
["trh"] = "Turaka",
["tri"] = "Trió",
["trj"] = "Toram",
["trk-dkh"] = "Dukhan",
["trk-eog"] = "Early Old Oghuz",
["trk-oat"] = "ตุรกีแบบอานาโตเลียเก่า",
["trk-pro"] = "เตอร์กิกดั้งเดิม",
["trl"] = "Traveller Scottish",
["trm"] = "Tregami",
["trn"] = "Trinitario",
["tro"] = "Tarao",
["trp"] = "กอกบอรอก",
["trq"] = "San Martín Itunyoso Triqui",
["trr"] = "Taushiro",
["trs"] = "Chicahuaxtla Triqui",
["trt"] = "Tunggare",
["tru"] = "Turoyo",
["trv"] = "Taroko",
["trw"] = "Torwali",
["trx"] = "Tringgus",
["try"] = "ตุรุง",
["trz"] = "Torá",
["ts"] = "Tsonga",
["tsa"] = "Tsaangi",
["tsb"] = "Tsamai",
["tsc"] = "Tswa",
["tsd"] = "Tsakonian",
["tse"] = "Tunisian Sign Language",
["tsf"] = "Southwestern Tamang",
["tsg"] = "ซูก",
["tsh"] = "Tsuvan",
["tsi"] = "Tsimshian",
["tsj"] = "Tshangla",
["tsl"] = "Ts'ün-Lao",
["tsm"] = "Turkish Sign Language",
["tsp"] = "Northern Toussian",
["tsq"] = "มือไทย",
["tsr"] = "Akei",
["tss"] = "Taiwan Sign Language",
["tsu"] = "โจว",
["tsv"] = "Tsogo",
["tsw"] = "Tsishingini",
["tsx"] = "Mubami",
["tsy"] = "Tebul Sign Language",
["tt"] = "ตาตาร์",
["tta"] = "Tutelo",
["ttb"] = "Gaa",
["ttc"] = "Tektiteko",
["ttd"] = "Tauade",
["tte"] = "Bwanabwana",
["ttf"] = "Tuotomb",
["ttg"] = "Tutong",
["tth"] = "Upper Ta'oih",
["tti"] = "Tobati",
["ttj"] = "Tooro",
["ttk"] = "Totoro",
["ttl"] = "Totela",
["ttm"] = "Northern Tutchone",
["ttn"] = "Towei",
["tto"] = "Lower Ta'oih",
["ttp"] = "Tombelala",
["ttr"] = "Tera",
["tts"] = "อีสาน",
["ttt"] = "Tat",
["ttu"] = "Torau",
["ttv"] = "Titan",
["ttw"] = "Long Wat",
["tty"] = "Sikaritai",
["ttz"] = "Tsum",
["tua"] = "Wiarumus",
["tub"] = "Tübatulabal",
["tuc"] = "Mutu",
["tud"] = "Tuxá",
["tue"] = "Tuyuca",
["tuf"] = "Central Tunebo",
["tug"] = "Tunia",
["tuh"] = "Taulil",
["tui"] = "Tupuri",
["tuj"] = "Tugutil",
["tul"] = "Tula",
["tum"] = "Tumbuka",
["tun"] = "Tunica",
["tuo"] = "Tucano",
["tup-gua-pro"] = "ตูปี-กัวรานีดั้งเดิม",
["tup-kab"] = "Kabishiana",
["tup-pro"] = "ตูเปียนดั้งเดิม",
["tuq"] = "Tedaga",
["tus"] = "Tuscarora",
["tuu"] = "Tututni",
["tuv"] = "Turkana",
["tuw-alk"] = "Alchuka",
["tuw-bal"] = "Bala",
["tuw-kkl"] = "Kyakala",
["tuw-kli"] = "Kili",
["tuw-pro"] = "Proto-Tungusic",
["tuw-sol"] = "Solon",
["tux"] = "Tuxináwa",
["tuy"] = "Tugen",
["tuz"] = "Turka",
["tva"] = "Vaghua",
["tvd"] = "Tsuvadi",
["tve"] = "Te'un",
["tvk"] = "Southeast Ambrym",
["tvl"] = "ตูวาลู",
["tvm"] = "Tela-Masbuar",
["tvn"] = "Tavoyan",
["tvo"] = "ตีโดเร",
["tvs"] = "Taveta",
["tvt"] = "Tutsa Naga",
["tvu"] = "Tunen",
["tvw"] = "Sedoa",
["tvx"] = "Taivoan",
["tvy"] = "Timor Pidgin",
["twa"] = "Twana",
["twb"] = "Western Tawbuid",
["twc"] = "Teshenawa",
["twe"] = "Teiwa",
["twf"] = "เทาส์",
["twg"] = "Tereweng",
["twh"] = "ไทขาว",
["twm"] = "Tawang Monpa",
["twn"] = "Twendi",
["two"] = "Tswapong",
["twp"] = "Ere",
["twq"] = "Tasawaq",
["twr"] = "Southwestern Tarahumara",
["twt"] = "Turiwára",
["twu"] = "Termanu",
["tww"] = "Tuwari",
["twy"] = "Tawoyan",
["txa"] = "Tombonuo",
["txb"] = "โทแคเรียนบี",
["txc"] = "Tsetsaut",
["txe"] = "Totoli",
["txg"] = "ตังกุต",
["txh"] = "Thracian",
["txi"] = "Ikpeng",
["txj"] = "Tarjumo",
["txm"] = "Tomini",
["txn"] = "West Tarangan",
["txo"] = "Toto",
["txq"] = "Tii",
["txr"] = "Tartessian",
["txs"] = "Tonsea",
["txt"] = "Citak",
["txu"] = "Kayapó",
["txx"] = "Tatana",
["ty"] = "ตาฮีตี",
["tya"] = "Tauya",
["tye"] = "Kyenga",
["tyh"] = "O'du",
["tyi"] = "Teke-Tsaayi",
["tyj"] = "ไทแมน",
["tyl"] = "Thu Lao",
["tyn"] = "Kombai",
["typ"] = "Kuku-Thaypan",
["tyr"] = "ไทแดง",
["tys"] = "ซาปา",
["tyt"] = "Tày Tac",
["tyu"] = "Kua",
["tyv"] = "ตูวา",
["tyx"] = "Teke-Tyee",
["tyz"] = "ตั่ย",
["tza"] = "Tanzanian Sign Language",
["tzh"] = "Tzeltal",
["tzj"] = "Tz'utujil",
["tzl"] = "Talossan",
["tzm"] = "Central Atlas Tamazight",
["tzn"] = "Tugun",
["tzo"] = "โซตซิล",
["tzx"] = "Tabriak",
["uam"] = "Uamué",
["uan"] = "Kuan",
["uar"] = "Tairuma",
["uba"] = "Ubang",
["ubi"] = "Ubi",
["ubl"] = "Buhi'non Bikol",
["ubr"] = "Ubir",
["ubu"] = "Umbu-Ungu",
["uby"] = "Ubykh",
["uda"] = "Uda",
["ude"] = "Udihe",
["udg"] = "Muduga",
["udi"] = "อูดี",
["udj"] = "Ujir",
["udl"] = "Uldeme",
["udm"] = "อุดมูร์ต",
["udu"] = "Uduk",
["ues"] = "Kioko",
["ufi"] = "Ufim",
["ug"] = "อุยกูร์",
["uga"] = "ยูการิต",
["ugb"] = "Kuku-Ugbanh",
["uge"] = "Ughele",
["ugn"] = "Ugandan Sign Language",
["ugo"] = "กฺ๋อง",
["ugy"] = "Uruguayan Sign Language",
["uha"] = "Uhami",
["uhn"] = "Damal",
["uis"] = "Uisai",
["uiv"] = "Iyive",
["uji"] = "Tanjijili",
["uk"] = "ยูเครน",
["uka"] = "Kaburi",
["ukg"] = "Ukuriguma",
["ukh"] = "Ukhwejo",
["ukk"] = "Muak Sa-aak",
["ukl"] = "Ukrainian Sign Language",
["ukp"] = "Ukpe-Bayobiri",
["ukq"] = "Ukwa",
["uks"] = "Kaapor Sign Language",
["uku"] = "Ukue",
["ukw"] = "Ukwuani-Aboh-Ndoni",
["uky"] = "Kuuk Yak",
["ula"] = "Fungwa",
["ulb"] = "Olukumi",
["ulc"] = "Ulch",
["ule"] = "Lule",
["ulf"] = "Afra",
["uli"] = "Ulithian",
["ulk"] = "Meriam",
["ull"] = "Ullatan",
["ulm"] = "Ulumanda'",
["uln"] = "อุนเซอร์ด็อยทช์",
["ulu"] = "Uma' Lung",
["ulw"] = "Ulwa",
["uma"] = "Umatilla",
["umb"] = "Umbundu",
["umc"] = "Marrucinian",
["umd"] = "Umbindhamu",
["umg"] = "Umbuygamu",
["umi"] = "Ukit",
["umm"] = "Umon",
["umn"] = "Makyan Naga",
["umo"] = "Umotína",
["ump"] = "Umpila",
["umr"] = "Umbugarla",
["ums"] = "Pendau",
["umu"] = "Munsee",
["una"] = "North Watut",
["und"] = "Undetermined",
["une"] = "Uneme",
["ung"] = "Ngarinyin",
["unk"] = "Enawené-Nawé",
["unm"] = "Unami",
["unn"] = "Kurnai",
["unr"] = "Mundari",
["unu"] = "Unubahe",
["unx"] = "Munda",
["unz"] = "Unde Kaili",
["uok"] = "Uokha",
["uon"] = "Kulon",
["upi"] = "Umeda",
["upv"] = "Northeast Malakula",
["ur"] = "อูรดู",
["ura"] = "Urarina",
["urb"] = "Urubú-Kaapor",
["urc"] = "Urningangg",
["ure"] = "Uru",
["urf"] = "Uradhi",
["urg"] = "Urigina",
["urh"] = "Urhobo",
["uri"] = "Urim",
["urj-fin-pro"] = "ฟินนิกดั้งเดิม",
["urj-koo"] = "Old Komi",
["urj-kuk"] = "Kukkuzi",
["urj-kya"] = "Komi-Yazva",
["urj-mdv-pro"] = "Proto-Mordvinic",
["urj-prm-pro"] = "เปอร์มิกดั้งเดิม",
["urj-pro"] = "ยูราลิกดั้งเดิม",
["urj-ugr-pro"] = "ยูกริกดั้งเดิม",
["urk"] = "อูรักลาโวยจ",
["url"] = "Urali",
["urm"] = "Urapmin",
["urn"] = "Uruangnirin",
["uro"] = "Ura (New Guinea)",
["urp"] = "Uru-Pa-In",
["urr"] = "Löyöp",
["urt"] = "Urat",
["uru"] = "Urumi",
["urv"] = "Uruava",
["urw"] = "Sop",
["urx"] = "Urimo",
["ury"] = "Orya",
["urz"] = "Uru-Eu-Wau-Wau",
["usa"] = "Usarufa",
["ush"] = "Ushojo",
["usi"] = "Usui",
["usk"] = "Usaghade",
["usp"] = "Uspanteco",
["uss"] = "Saare",
["usu"] = "Uya",
["uta"] = "Otank",
["ute"] = "Ute",
["uth"] = "Hun",
["utp"] = "Aba",
["utr"] = "Etulo",
["utu"] = "Utu",
["uum"] = "Urum",
["uun"] = "Kulon-Pazeh",
["uur"] = "Ura (Vanuatu)",
["uuu"] = "U",
["uve"] = "West Uvean",
["uvh"] = "Uri",
["uvl"] = "Lote",
["uwa"] = "Kuku-Uwanh",
["uya"] = "Doko-Uyanga",
["uz"] = "อุซเบก",
["vaa"] = "Vaagri Booli",
["vae"] = "Vale",
["vag"] = "Vagla",
["vah"] = "Varhadi",
["vai"] = "ไว",
["vaj"] = "Sekele",
["val"] = "Vehes",
["vam"] = "Vanimo",
["van"] = "Valman",
["vao"] = "Vao",
["vap"] = "Vaiphei",
["var"] = "Huarijio",
["vas"] = "Vasavi",
["vau"] = "Vanuma",
["vav"] = "Varli",
["vay"] = "Vayu",
["vbb"] = "Southeast Babar",
["vbk"] = "Southwestern Bontoc",
["ve"] = "เวนดา",
["vec"] = "เวเนโต",
["ved"] = "Veddah",
["vem"] = "Vemgo-Mabas",
["veo"] = "Ventureño",
["vep"] = "เวปส์",
["ver"] = "Mom Jango",
["vgr"] = "Vaghri",
["vgt"] = "Flemish Sign Language",
["vi"] = "เวียดนาม",
["vic"] = "Virgin Islands Creole",
["vid"] = "Vidunda",
["vif"] = "Vili",
["vig"] = "Viemo",
["vil"] = "Vilela",
["vis"] = "Vishavan",
["vit"] = "Viti",
["viv"] = "Iduna",
["vjk"] = "Bajjika",
["vka"] = "Kariyarra",
["vki"] = "Ija-Zuba",
["vkj"] = "Kujarge",
["vkk"] = "Kaur",
["vkl"] = "Kulisusu",
["vkm"] = "Kamakan",
["vko"] = "Kodeoha",
["vkp"] = "Korlai Creole Portuguese",
["vkt"] = "Tenggarong Kutai Malay",
["vku"] = "Kurrama",
["vlp"] = "Valpei",
["vls"] = "West Flemish",
["vma"] = "Martuthunira",
["vmb"] = "Mbabaram",
["vmc"] = "Juxtlahuaca Mixtec",
["vmd"] = "Mudu Koraga",
["vme"] = "East Masela",
["vmf"] = "ฟรังโกเนียตะวันออก",
["vmg"] = "Minigir",
["vmh"] = "Maraghei",
["vmi"] = "Miwa",
["vmj"] = "Ixtayutla Mixtec",
["vmk"] = "Makhuwa-Shirima",
["vml"] = "Malgana",
["vmm"] = "Mitlatongo Mixtec",
["vmp"] = "Soyaltepec Mazatec",
["vmq"] = "Soyaltepec Mixtec",
["vmr"] = "Marenje",
["vmu"] = "Muluridyi",
["vmv"] = "Valley Maidu",
["vmw"] = "Makhuwa",
["vmx"] = "Tamazola Mixtec",
["vmy"] = "Ayautla Mazatec",
["vmz"] = "Mazatlán Mazatec",
["vnk"] = "Lovono",
["vnm"] = "Neve'ei",
["vnp"] = "Vunapu",
["vo"] = "โวลาปุก",
["vor"] = "Voro",
["vot"] = "โวต",
["vra"] = "Vera'a",
["vro"] = "เวอโร",
["vrs"] = "Varisi",
["vrt"] = "Burmbar",
["vsi"] = "Moldova Sign Language",
["vsl"] = "Venezuelan Sign Language",
["vsv"] = "Valencian Sign Language",
["vto"] = "Vitou",
["vum"] = "Vumbu",
["vun"] = "Vunjo",
["vut"] = "Vute",
["vwa"] = "Awa (China)",
["wa"] = "วัลลูน",
["waa"] = "Walla Walla",
["wab"] = "Wab",
["wac"] = "Wasco-Wishram",
["wad"] = "Wandamen",
["waf"] = "Wakoná",
["wag"] = "Wa'ema",
["wah"] = "Watubela",
["waj"] = "Waffa",
["wal"] = "Wolaytta",
["wam"] = "Massachusett",
["wan"] = "Wan",
["wao"] = "Wappo",
["wap"] = "Wapishana",
["waq"] = "Wageman",
["war"] = "วาไร",
["was"] = "Washo",
["wat"] = "Kaninuwa",
["wau"] = "Wauja",
["wav"] = "Waka",
["waw"] = "Waiwai",
["wax"] = "Watam",
["way"] = "Wayana",
["waz"] = "Wampur",
["wba"] = "วาราโอ",
["wbb"] = "Wabo",
["wbe"] = "Waritai",
["wbf"] = "Wara",
["wbh"] = "Wanda",
["wbi"] = "Wanji",
["wbj"] = "Alagwa",
["wbk"] = "Waigali",
["wbl"] = "Wakhi",
["wbm"] = "Wa",
["wbp"] = "Warlpiri",
["wbq"] = "Waddar",
["wbr"] = "Wagdi",
["wbt"] = "Wanman",
["wbv"] = "Wajarri",
["wbw"] = "Woi",
["wca"] = "Yanomam",
["wci"] = "Waci Gbe",
["wdd"] = "Wandji",
["wdg"] = "Wadaginam",
["wdj"] = "Wadjiginy",
["wdt"] = "Wendat",
["wdu"] = "Wadjigu",
["wdy"] = "Wadjabangayi",
["wea"] = "Wewaw",
["wec"] = "Wè Western",
["wed"] = "Wedau",
["weh"] = "Weh",
["wei"] = "Kiunum",
["wem"] = "Weme Gbe",
["weo"] = "Wemale",
["wer"] = "Weri",
["wes"] = "Cameroon Pidgin",
["wet"] = "Perai",
["weu"] = "Welaung",
["wew"] = "Weyewa",
["wfg"] = "Yafi",
["wga"] = "Wagaya",
["wgb"] = "Wagawaga",
["wgg"] = "Wangganguru",
["wgi"] = "Wahgi",
["wgo"] = "Waigeo",
["wgu"] = "Wirangu",
["wgy"] = "Warrgamay",
["wha"] = "Manusela",
["whg"] = "North Wahgi",
["whk"] = "Wahau Kenyah",
["whu"] = "Wahau Kayan",
["wib"] = "Southern Toussian",
["wic"] = "Wichita",
["wie"] = "Wik-Epa",
["wif"] = "Wik-Keyangan",
["wig"] = "Wik-Ngathana",
["wih"] = "Wik-Me'anha",
["wii"] = "Minidien",
["wij"] = "Wik-Iiyanh",
["wik"] = "Wikalkan",
["wil"] = "Wilawila",
["wim"] = "Wik-Mungkan",
["win"] = "วินเนอเบโก",
["wir"] = "Wiraféd",
["wiu"] = "Wiru",
["wiv"] = "Muduapa",
["wiy"] = "Wiyot",
["wja"] = "Waja",
["wji"] = "Warji",
["wka"] = "Kw'adza",
["wkb"] = "Kumbaran",
["wkd"] = "Mo",
["wkl"] = "Kalanadi",
["wku"] = "Kunduvadi",
["wkw"] = "Wakawaka",
["wky"] = "Wangkayutyuru",
["wla"] = "Walio",
["wlc"] = "Mwali Comorian",
["wle"] = "Wolane",
["wlg"] = "Kunbarlang",
["wli"] = "Waioli",
["wlk"] = "Wailaki",
["wll"] = "Wali (Sudan)",
["wlm"] = "เวลส์กลาง",
["wlo"] = "Wolio",
["wlr"] = "Wailapa",
["wls"] = "Wallisian",
["wlu"] = "Wuliwuli",
["wlv"] = "Wichí Lhamtés Vejoz",
["wlw"] = "Walak",
["wlx"] = "Wali (Ghana)",
["wly"] = "Waling",
["wmb"] = "Wambaya",
["wmc"] = "Wamas",
["wmd"] = "Mamaindé",
["wme"] = "Wambule",
["wmh"] = "Waima'a",
["wmi"] = "Wamin",
["wmm"] = "Maiwa (Indonesia)",
["wmn"] = "Waamwang",
["wmo"] = "Wam",
["wms"] = "Wambon",
["wmt"] = "Walmajarri",
["wmw"] = "มวานี",
["wmx"] = "Womo",
["wnb"] = "Wanambre",
["wnc"] = "Wantoat",
["wnd"] = "Wandarang",
["wne"] = "Waneci",
["wng"] = "Wanggom",
["wni"] = "Ndzwani Comorian",
["wnk"] = "Wanukaka",
["wnm"] = "Wanggamala",
["wno"] = "Wano",
["wnp"] = "Wanap",
["wnu"] = "Usan",
["wnw"] = "Wintu",
["wny"] = "Wanyi",
["wo"] = "โวลอฟ",
["woa"] = "Tyaraity",
["wob"] = "Wobé",
["woc"] = "Wogeo",
["wod"] = "Wolani",
["woe"] = "Woleaian",
["wog"] = "Wogamusin",
["woi"] = "Kamang",
["wok"] = "Longto",
["wom"] = "Perema",
["won"] = "Wongo",
["woo"] = "Manombai",
["wor"] = "Woria",
["wos"] = "Hanga Hundi",
["wow"] = "Wawonii",
["woy"] = "Weyto",
["wpc"] = "Wirö",
["wra"] = "Warapu",
["wrb"] = "Warluwara",
["wrg"] = "Warungu",
["wrh"] = "Wiradjuri",
["wri"] = "Wariyangga",
["wrk"] = "Garawa",
["wrl"] = "Warlmanpa",
["wrm"] = "Warumungu",
["wrn"] = "Warnang",
["wro"] = "Worora",
["wrp"] = "Waropen",
["wrr"] = "Wardaman",
["wrs"] = "Waris",
["wru"] = "Waru",
["wrv"] = "Waruna",
["wrw"] = "Gugu Warra",
["wrx"] = "Wae Rana",
["wrz"] = "Warray",
["wsa"] = "Warembori",
["wsi"] = "Wusi",
["wsk"] = "Waskia",
["wsr"] = "Owenia",
["wsu"] = "Wasu",
["wsv"] = "Wotapuri-Katarqalai",
["wtf"] = "วาตีวา",
["wth"] = "Wathaurong",
["wti"] = "Berta",
["wtk"] = "Watakataui",
["wtm"] = "Mewati",
["wtw"] = "Wotu",
["wua"] = "Wikngenchera",
["wub"] = "Wunambal",
["wud"] = "Wudu",
["wuh"] = "Wutunhua",
["wul"] = "Silimo",
["wum"] = "Wumbvu",
["wun"] = "Bungu",
["wur"] = "Wurrugu",
["wut"] = "Wutung",
["wuu"] = "อู๋",
["wuv"] = "Wuvulu-Aua",
["wux"] = "Wulna",
["wuy"] = "Wauyai",
["wwa"] = "Waama",
["wwo"] = "Dorig",
["wwr"] = "Warrwa",
["www"] = "Wawa",
["wxa"] = "Waxiang",
["wxw"] = "Wardandi",
["wya"] = "Wyandot",
["wyb"] = "Ngiyambaa",
["wyi"] = "Woiwurrung",
["wym"] = "วีลามอวิตแซ",
["wyr"] = "Wayoró",
["wyy"] = "Western Fijian",
["xaa"] = "อาหรับแบบอันดะลุส",
["xab"] = "Sambe",
["xac"] = "Kachari",
["xad"] = "Adai",
["xae"] = "Aequian",
["xag"] = "Aghwan",
["xai"] = "Kaimbé",
["xaj"] = "Ararandewára",
["xak"] = "Maku",
["xal"] = "คัลมึค",
["xam"] = "ǀXam",
["xan"] = "Xamtanga",
["xao"] = "Khao",
["xap"] = "Apalachee",
["xaq"] = "Aquitanian",
["xar"] = "Karami",
["xas"] = "Kamassian",
["xat"] = "Katawixi",
["xau"] = "Kauwera",
["xav"] = "Xavante",
["xaw"] = "Kawaiisu",
["xay"] = "Kayan Mahakam",
["xbb"] = "Lower Burdekin",
["xbc"] = "แบกเตรีย",
["xbd"] = "Bindal",
["xbe"] = "Bigambal",
["xbg"] = "Bunganditj",
["xbi"] = "Kombio",
["xbj"] = "Birrpayi",
["xbm"] = "เบรอตงกลาง",
["xbn"] = "Kenaboi",
["xbo"] = "Bulgar",
["xbp"] = "Bibbulman",
["xbr"] = "กัมเบอรา",
["xbw"] = "Kambiwá",
["xby"] = "Butchulla",
["xcb"] = "Cumbric",
["xcc"] = "Camunic",
["xce"] = "Celtiberian",
["xch"] = "Chemakum",
["xcl"] = "อาร์มีเนียเก่า",
["xcm"] = "Comecrudo",
["xcn"] = "Cotoname",
["xco"] = "Khwarezmian",
["xcr"] = "Carian",
["xct"] = "ทิเบตคลาสสิก",
["xcu"] = "Curonian",
["xcv"] = "Chuvan",
["xcw"] = "Coahuilteco",
["xcy"] = "Cayuse",
["xda"] = "Darkinjung",
["xdc"] = "Dacian",
["xdk"] = "Dharug",
["xdm"] = "เอโดม",
["xdq"] = "Kaitag",
["xdy"] = "Malayic Dayak",
["xeb"] = "Eblaite",
["xed"] = "Hdi",
["xeg"] = "ǁXegwi",
["xel"] = "Kelo",
["xem"] = "Kembayan",
["xep"] = "Epi-Olmec",
["xer"] = "Xerénte",
["xes"] = "Kesawai",
["xet"] = "Xetá",
["xeu"] = "Keoru-Ahia",
["xfa"] = "ฟาลิสกุส",
["xga"] = "Galatian",
["xgb"] = "Gbin",
["xgd"] = "Gudang",
["xgf"] = "Gabrielino-Fernandeño",
["xgg"] = "Goreng",
["xgi"] = "Garingbal",
["xgl"] = "Galindian",
["xgm"] = "Darumbal",
["xgn-pro"] = "มองโกลิกดั้งเดิม",
["xgr"] = "Garza",
["xgu"] = "Unggumi",
["xgw"] = "Guwa",
["xh"] = "โคซา",
["xha"] = "Harami",
["xhc"] = "Hunnic",
["xhd"] = "Hadrami",
["xhe"] = "Khetrani",
["xhm"] = "เขมรกลาง",
["xhr"] = "Hernican",
["xht"] = "Hattic",
["xhu"] = "ฮูร์เรีย",
["xhv"] = "Khua",
["xib"] = "Iberian",
["xii"] = "Xiri",
["xil"] = "Illyrian",
["xin"] = "Xinca",
["xir"] = "Xiriâna",
["xis"] = "Kisan",
["xiv"] = "Harappan",
["xiy"] = "Xipaya",
["xjb"] = "Minjungbal",
["xka"] = "Kalkoti",
["xkb"] = "Manigri-Kambolé Ede Nago",
["xkc"] = "Khoini",
["xkd"] = "Mendalam Kayan",
["xke"] = "Kereho",
["xkf"] = "Khengkha",
["xkg"] = "Kagoro",
["xki"] = "Kenyan Sign Language",
["xkj"] = "Kajali",
["xkk"] = "Kaco'",
["xkl"] = "Bakung",
["xkn"] = "Kayan River Kayan",
["xko"] = "Kiorr",
["xkp"] = "Kabatei",
["xkq"] = "Koroni",
["xkr"] = "Xakriabá",
["xks"] = "Kumbewaha",
["xkt"] = "Kantosi",
["xku"] = "Kaamba",
["xkv"] = "Kgalagadi",
["xkw"] = "Kembra",
["xkx"] = "Karore",
["xky"] = "Uma' Lasan",
["xkz"] = "Kurtöp",
["xla"] = "Kamula",
["xlb"] = "Loup B",
["xlc"] = "Lycian",
["xld"] = "Lydian",
["xle"] = "Lemnian",
["xlg"] = "Ancient Ligurian",
["xli"] = "Liburnian",
["xln"] = "Alanic",
["xlo"] = "Loup A",
["xlp"] = "Lepontic",
["xls"] = "Lusitanian",
["xlu"] = "Luwian",
["xly"] = "Elymian",
["xmb"] = "Mbonga",
["xmc"] = "Makhuwa-Marrevone",
["xmd"] = "Mbudum",
["xme-ker"] = "Kermanic",
["xme-kls"] = "Kalasuri",
["xme-klt"] = "Kilit",
["xme-mid"] = "Middle Median",
["xme-old"] = "Old Median",
["xme-ott"] = "Old Tati",
["xme-taf"] = "Tafreshi",
["xme-ttc-pro"] = "Proto-Tatic",
["xmf"] = "มิงเกรเลีย",
["xmg"] = "Mengaka",
["xmh"] = "Kugu-Muminh",
["xmj"] = "Majera",
["xmk"] = "Ancient Macedonian",
["xml"] = "Malaysian Sign Language",
["xmm"] = "มลายูแบบมานาโด",
["xmo"] = "Morerebi",
["xmp"] = "Kuku-Mu'inh",
["xmq"] = "Kuku-Mangk",
["xmr"] = "Meroitic",
["xms"] = "Moroccan Sign Language",
["xmt"] = "Matbat",
["xmu"] = "Kamu",
["xmx"] = "Maden",
["xmy"] = "Mayaguduna",
["xmz"] = "Mori Bawah",
["xna"] = "Ancient North Arabian",
["xnb"] = "Kanakanabu",
["xnd-pro"] = "Proto-Na-Dene",
["xng"] = "มองโกเลียกลาง",
["xnh"] = "Kuanhua",
["xni"] = "Ngarigu",
["xnk"] = "Nganakarti",
["xnn"] = "กันกานาอือเหนือ",
["xnr"] = "Kangri",
["xns"] = "Kanashi",
["xnt"] = "Narragansett",
["xnu"] = "Nukunul",
["xny"] = "Nyiyaparli",
["xoc"] = "O'chi'chi'",
["xod"] = "Kokoda",
["xog"] = "Soga",
["xoi"] = "Kominimung",
["xok"] = "Xokleng",
["xom"] = "Komo",
["xon"] = "Konkomba",
["xoo"] = "Xukurú",
["xop"] = "Kopar",
["xor"] = "Korubo",
["xow"] = "Kowaki",
["xpa"] = "Pirriya",
["xpb"] = "Pyemmairre",
["xpc"] = "Pecheneg",
["xpd"] = "Paredarerme",
["xpe"] = "Liberia Kpelle",
["xpf"] = "Southeast Tasmanian",
["xpg"] = "Phrygian",
["xph"] = "Tyerrernotepanner",
["xpi"] = "Pictish",
["xpj"] = "Mpalitjanh",
["xpk"] = "Kulina",
["xpl"] = "Port Sorell",
["xpm"] = "Pumpokol",
["xpn"] = "Kapinawá",
["xpo"] = "Pochutec",
["xpp"] = "Puyo-Paekche",
["xpq"] = "Mohegan-Pequot",
["xpr"] = "พาร์เทีย",
["xps"] = "Pisidian",
["xpu"] = "Punic",
["xpv"] = "Tommeginne",
["xpw"] = "Peerapper",
["xpx"] = "Toogee",
["xpy"] = "Buyeo",
["xpz"] = "Bruny Island",
["xqa"] = "Karakhanid",
["xqt"] = "Qatabanian",
["xra"] = "Krahô",
["xrb"] = "Eastern Karaboro",
["xrd"] = "Gundungurra",
["xre"] = "Kreye",
["xrg"] = "Minang",
["xri"] = "Krikati-Timbira",
["xrm"] = "Armazic",
["xrn"] = "Arin",
["xrq"] = "Karranga",
["xrr"] = "Raetic",
["xrt"] = "Aranama-Tamique",
["xru"] = "Marriammu",
["xrw"] = "Karawa",
["xsa"] = "Sabaean",
["xsb"] = "ซัมบัล",
["xsc-pro"] = "Proto-Scythian",
["xsc-sak-pro"] = "Proto-Saka",
["xsc-sar-pro"] = "Proto-Sarmatian",
["xsc-skw-pro"] = "Proto-Saka-Wakhi",
["xsd"] = "Sidetic",
["xse"] = "Sempan",
["xsh"] = "Shamang",
["xsi"] = "Sio",
["xsj"] = "Subi",
["xsl"] = "South Slavey",
["xsm"] = "Kasem",
["xsn"] = "Sanga (Nigeria)",
["xso"] = "Solano",
["xsp"] = "Silopi",
["xsq"] = "Makhuwa-Saka",
["xsr"] = "เศรปา",
["xss"] = "Assan",
["xsu"] = "Sanumá",
["xsv"] = "ซูโดเวีย",
["xsy"] = "Saisiyat",
["xta"] = "Alcozauca Mixtec",
["xtb"] = "Chazumba Mixtec",
["xtc"] = "Kadugli",
["xtd"] = "Diuxi-Tilantongo Mixtec",
["xte"] = "Ketengban",
["xth"] = "Yitha Yitha",
["xti"] = "Sinicahua Mixtec",
["xtj"] = "San Juan Teita Mixtec",
["xtl"] = "Tijaltepec Mixtec",
["xtm"] = "Magdalena Peñasco Mixtec",
["xtn"] = "Northern Tlaxiaco Mixtec",
["xto"] = "โทแคเรียนเอ",
["xtp"] = "San Miguel Piedras Mixtec",
["xtq"] = "ตุมซุก",
["xtr"] = "Early Tripuri",
["xts"] = "Sindihui Mixtec",
["xtt"] = "Tacahua Mixtec",
["xtu"] = "Cuyamecalco Mixtec",
["xtv"] = "Thawa",
["xtw"] = "Tawandê",
["xty"] = "Yoloxochitl Mixtec",
["xua"] = "Alu Kurumba",
["xub"] = "Betta Kurumba",
["xud"] = "Umiida",
["xug"] = "คูนิงามิ",
["xuj"] = "Jennu Kurumba",
["xul"] = "Ngunawal",
["xum"] = "อุมเบรีย",
["xun"] = "Unggaranggu",
["xuo"] = "Kuo",
["xup"] = "Upper Umpqua",
["xur"] = "Urartian",
["xut"] = "Kuthant",
["xuu"] = "Khwe",
["xve"] = "Venetic",
["xvn"] = "วันดัล",
["xvo"] = "Volscian",
["xvs"] = "Vestinian",
["xwa"] = "Kwaza",
["xwc"] = "Woccon",
["xwd"] = "Wadi Wadi",
["xwe"] = "Xwela Gbe",
["xwg"] = "Kwegu",
["xwj"] = "Wajuk",
["xwk"] = "Wangkumara",
["xwl"] = "Western Xwla Gbe",
["xwo"] = "Written Oirat",
["xwr"] = "Kwerba Mamberamo",
["xww"] = "Wemba-Wemba",
["xxb"] = "Boro",
["xxk"] = "Ke'o",
["xxm"] = "Minkin",
["xxr"] = "Koropó",
["xxt"] = "Tambora",
["xya"] = "Yaygir",
["xyb"] = "Yandjibara",
["xyl"] = "Yalakalore",
["xyt"] = "Mayi-Thakurti",
["xyy"] = "Yorta Yorta",
["xzh"] = "Zhang-Zhung",
["xzm"] = "Semigallian",
["xzp"] = "Ancient Zapotec",
["yaa"] = "Yaminahua",
["yab"] = "Yuhup",
["yac"] = "Pass Valley Yali",
["yad"] = "Yagua",
["yae"] = "Pumé",
["yaf"] = "Yaka",
["yag"] = "ยามานา",
["yah"] = "Yazghulami",
["yai"] = "Yaghnobi",
["yaj"] = "Banda-Yangere",
["yak"] = "Yakima",
["yal"] = "Yalunka",
["yam"] = "Yamba",
["yan"] = "Mayangna",
["yao"] = "Yao",
["yap"] = "Yapese",
["yaq"] = "Yaqui",
["yar"] = "Yabarana",
["yas"] = "Gunu",
["yat"] = "Yambeta",
["yau"] = "Yuwana",
["yav"] = "Yangben",
["yaw"] = "Yawalapití",
["yay"] = "Agwagwune",
["yaz"] = "Lokaa",
["yba"] = "Yala",
["ybb"] = "Yemba",
["ybe"] = "Western Yugur",
["ybh"] = "Yakkha",
["ybi"] = "Yamphu",
["ybj"] = "Hasha",
["ybk"] = "Bokha",
["ybl"] = "Yukuben",
["ybm"] = "Yaben",
["ybn"] = "Yabaâna",
["ybo"] = "Yabong",
["ybx"] = "Yawiyo",
["yby"] = "Yaweyuha",
["ych"] = "Chesu",
["ycl"] = "Lolopo",
["ycn"] = "Yucuna",
["ycp"] = "Chepya",
["ycr"] = "Yilan Creole",
["yda"] = "Yanda",
["yde"] = "Yangum Dey",
["ydg"] = "Yidgha",
["ydk"] = "Yoidik",
["yea"] = "Ravula",
["yec"] = "Yenish",
["yee"] = "Yimas",
["yei"] = "Yeni",
["yej"] = "Yevanic",
["yen"] = "Yendang",
["yer"] = "Tarok",
["yes"] = "Yeskwa",
["yet"] = "Yetfa",
["yeu"] = "Yerukula",
["yev"] = "Yapunda",
["yey"] = "Yeyi",
["ygi"] = "Yiningayi",
["ygl"] = "Yangum Gel",
["ygm"] = "Yagomi",
["ygp"] = "Gepo",
["ygr"] = "Yagaria",
["ygs"] = "Yolngu Sign Language",
["ygu"] = "Yugul",
["ygw"] = "Yagwoia",
["yha"] = "Baha",
["yhl"] = "Hlepho Phowa",
["yi"] = "ยิดดิช",
["yia"] = "Yinggarda",
["yif"] = "Ache",
["yig"] = "Wusa",
["yii"] = "Yidiny",
["yij"] = "Yindjibarndi",
["yik"] = "Dongshanba Lalo",
["yil"] = "Yindjilandji",
["yim"] = "Yimchungru Naga",
["yin"] = "Yinchia",
["yip"] = "Pholo",
["yiq"] = "Micha",
["yir"] = "North Awyu",
["yis"] = "Yis",
["yit"] = "Eastern Lalu",
["yiu"] = "Lope",
["yiv"] = "Northern Nisu",
["yix"] = "Axi",
["yiy"] = "Yir-Yoront",
["yiz"] = "Azhe",
["yka"] = "ยากัน",
["ykg"] = "Northern Yukaghir",
["ykh"] = "Khamnigan Mongol",
["yki"] = "Yoke",
["ykk"] = "Yakaikeke",
["ykl"] = "Khlula",
["ykm"] = "Kap",
["ykn"] = "Kua-nsi",
["yko"] = "Yasa",
["ykr"] = "Yekora",
["ykt"] = "Kathu",
["yku"] = "Kuamasi",
["yky"] = "Yakoma",
["yla"] = "Yaul",
["ylb"] = "Yaleba",
["yle"] = "Yele",
["ylg"] = "Yelogu",
["yli"] = "Angguruk Yali",
["yll"] = "Yil",
["ylm"] = "Limi",
["yln"] = "Langnian Buyang",
["ylo"] = "Naruo",
["ylr"] = "Yalarnnga",
["ylu"] = "Aribwaung",
["yly"] = "Nyelâyu",
["ymb"] = "Yambes",
["ymc"] = "Southern Muji",
["ymd"] = "Muda",
["yme"] = "Yameo",
["ymg"] = "Yamongeri",
["ymh"] = "Mili",
["ymi"] = "Moji",
["ymk"] = "Makwe",
["yml"] = "Iamalele",
["ymm"] = "Maay",
["ymn"] = "Sunum",
["ymo"] = "Yangum Mon",
["ymp"] = "Yamap",
["ymq"] = "Qila Muji",
["ymr"] = "Malasar",
["yms"] = "Mysian",
["ymx"] = "Northern Muji",
["ymz"] = "Muzi",
["yna"] = "Aluo",
["ynb"] = "Yamben",
["ynd"] = "Yandruwandha",
["yne"] = "Lang'e",
["yng"] = "Yango",
["ynk"] = "Naukanski",
["ynl"] = "Yangulam",
["ynn"] = "Yana",
["yno"] = "ยอง",
["yns"] = "Yansi",
["ynu"] = "Yahuna",
["yo"] = "โยรูบา",
["yob"] = "Yoba",
["yog"] = "โยกัด",
["yoi"] = "โยนางูนิ",
["yok-bvy"] = "Buena Vista Yokuts",
["yok-dly"] = "Delta Yokuts",
["yok-gsy"] = "Gashowu Yokuts",
["yok-kry"] = "Kings River Yokuts",
["yok-nvy"] = "Northern Valley Yokuts",
["yok-ply"] = "Palewyami Yokuts",
["yok-svy"] = "Southern Valley Yokuts",
["yok-tky"] = "Tule-Kaweah Yokuts",
["yol"] = "ยอลอ",
["yom"] = "Yombe",
["yon"] = "Yongkom",
["yox"] = "โยรง",
["yoy"] = "Yoy",
["ypa"] = "Phala",
["ypb"] = "Labo Phowa",
["ypg"] = "Phola",
["yph"] = "Phupha",
["ypk-pro"] = "Proto-Yupik",
["ypm"] = "Phuma",
["ypn"] = "Ani Phowa",
["ypo"] = "Alo Phola",
["ypp"] = "Phupa",
["ypz"] = "Phuza",
["yra"] = "Yerakai",
["yrb"] = "Yareba",
["yre"] = "Yaouré",
["yri"] = "Yarí",
["yrk-for"] = "Forest Nenets",
["yrk-tun"] = "Tundra Nenets",
["yrl"] = "Nheengatu",
["yrn"] = "Yerong",
["yro"] = "Ỹaroamë",
["yrw"] = "Yarawata",
["yry"] = "Yarluyandi",
["ysc"] = "Jassic",
["ysd"] = "Samatao",
["ysg"] = "Sonaga",
["ysl"] = "Yugoslavian Sign Language",
["ysn"] = "Sani",
["yso"] = "Nisi",
["ysp"] = "Southern Lolopo",
["ysr"] = "Sirenik",
["yss"] = "Yessan-Mayo",
["ysy"] = "Sanie",
["yta"] = "Talu",
["ytl"] = "Toloza",
["ytp"] = "Thopho",
["ytw"] = "Yout Wam",
["yty"] = "Yatay",
["yua"] = "Yucatec Maya",
["yub"] = "Yugambal",
["yuc"] = "Yuchi",
["yue"] = "กวางตุ้ง",
["yuf"] = "Havasupai-Walapai-Yavapai",
["yug"] = "Yug",
["yui"] = "Yurutí",
["yuj"] = "Karkar-Yuri",
["yuk"] = "Yuki",
["yul"] = "Yulu",
["yum"] = "Yuma",
["yun"] = "Bena",
["yup"] = "Yukpa",
["yuq"] = "Yuqui",
["yur"] = "Yurok",
["yut"] = "Yopno",
["yuw"] = "Finisterre Yau",
["yux"] = "Southern Yukaghir",
["yuy"] = "East Yugur",
["yuz"] = "Yuracare",
["yva"] = "Yawa",
["yvt"] = "Yavitero",
["ywa"] = "Kalou",
["ywg"] = "Yinhawangka",
["ywl"] = "Western Lalu",
["ywn"] = "Yawanawa",
["ywq"] = "Nasu",
["ywr"] = "Yawuru",
["ywt"] = "Xishanba Lalo",
["ywu"] = "Wumeng",
["yww"] = "Yawarawarga",
["yxa"] = "Mayawali",
["yxg"] = "Yagara",
["yxl"] = "Yarli",
["yxm"] = "Yinwum",
["yxu"] = "Yuyu",
["yxy"] = "Yabula Yabula",
["yyu"] = "Torricelli Yau",
["yyz"] = "Ayizi",
["yzg"] = "E'ma Buyang",
["yzk"] = "Zokhuo",
["za"] = "จ้วง",
["zaa"] = "Sierra de Juárez Zapotec",
["zab"] = "San Juan Guelavía Zapotec",
["zac"] = "Ocotlán Zapotec",
["zad"] = "Cajonos Zapotec",
["zae"] = "Yareni Zapotec",
["zaf"] = "Ayoquesco Zapotec",
["zag"] = "Zaghawa",
["zah"] = "Zangwal",
["zai"] = "Isthmus Zapotec",
["zaj"] = "Zaramo",
["zak"] = "Zanaki",
["zal"] = "Zauzou",
["zam"] = "Central Mahuatlán Zapotec",
["zao"] = "Ozolotepec Zapotec",
["zap"] = "Zapotec",
["zaq"] = "Aloápam Zapotec",
["zar"] = "Rincón Zapotec",
["zas"] = "Santo Domingo Albarradas Zapotec",
["zat"] = "Tabaa Zapotec",
["zau"] = "ซันสการ์",
["zav"] = "Yatzachi Zapotec",
["zaw"] = "Mitla Zapotec",
["zax"] = "Xadani Zapotec",
["zay"] = "Zayse-Zergulla",
["zaz"] = "Zari",
["zbt"] = "Batui",
["zca"] = "Coatecas Altas Zapotec",
["zdj"] = "Ngazidja Comorian",
["zea"] = "Zealandic",
["zeg"] = "Zenag",
["zen"] = "Zenaga",
["zga"] = "Kinga",
["zgh"] = "Moroccan Amazigh",
["zgr"] = "Magori",
["zh"] = "จีน",
["zhb"] = "Zhaba",
["zhi"] = "Zhire",
["zhn"] = "จ้วงแบบหนง",
["zhw"] = "Zhoa",
["zhx-min-pro"] = "หมิ่นดั้งเดิม",
["zhx-sht"] = "Shaozhou Tuhua",
["zhx-sic"] = "เสฉวน",
["zhx-tai"] = "ห่อยซัน",
["zia"] = "Zia",
["zib"] = "Zimbabwe Sign Language",
["zik"] = "Zimakani",
["zil"] = "Zialo",
["zim"] = "Mesme",
["zin"] = "Zinza",
["zir"] = "Ziriya",
["ziw"] = "Zigula",
["ziz"] = "Zizilivakan",
["zka"] = "Kaimbulawa",
["zkb"] = "Koibal",
["zkd"] = "กะดู",
["zkg"] = "Goguryeo",
["zkh"] = "Khorezmian Turkic",
["zkk"] = "Karankawa",
["zko"] = "Kott",
["zkp"] = "São Paulo Kaingáng",
["zkr"] = "Zakhring",
["zkt"] = "คีตัน",
["zku"] = "Kaurna",
["zkv"] = "Krevinian",
["zkz"] = "Khazar",
["zle-ono"] = "Old Novgorodian",
["zle-ort"] = "รูซินเก่า",
["zls-chs"] = "Church Slavonic",
["zlw-ocs"] = "เช็กเก่า",
["zlw-opl"] = "โปแลนด์เก่า",
["zlw-osk"] = "สโลวักเก่า",
["zlw-slv"] = "สโลวินช์",
["zma"] = "Manda (Australia)",
["zmb"] = "Zimba",
["zmc"] = "Margany",
["zmd"] = "Maridan",
["zme"] = "Mangerr",
["zmf"] = "Mfinu",
["zmg"] = "Marti Ke",
["zmh"] = "Makolkol",
["zmi"] = "Negeri Sembilan Malay",
["zmj"] = "Maridjabin",
["zmk"] = "Mandandanyi",
["zml"] = "Madngele",
["zmm"] = "Marimanindji",
["zmn"] = "Mbangwe",
["zmo"] = "Molo",
["zmp"] = "Mbuun",
["zmq"] = "Mituku",
["zmr"] = "Maranungku",
["zms"] = "Mbesa",
["zmt"] = "Maringarr",
["zmu"] = "Muruwari",
["zmv"] = "Mbariman-Gudhinma",
["zmw"] = "Mbo (Congo)",
["zmx"] = "Bomitaba",
["zmy"] = "Mariyedi",
["zmz"] = "Mbandja",
["zna"] = "Zan Gula",
["zne"] = "Zande",
["zng"] = "Mang",
["znk"] = "Manangkari",
["zns"] = "Mangas",
["zoc"] = "Copainalá Zoque",
["zoh"] = "Chimalapa Zoque",
["zom"] = "Zou",
["zoo"] = "Asunción Mixtepec Zapotec",
["zoq"] = "Tabasco Zoque",
["zor"] = "Rayón Zoque",
["zos"] = "Francisco León Zoque",
["zpa"] = "Lachiguiri Zapotec",
["zpb"] = "Yautepec Zapotec",
["zpc"] = "Choapan Zapotec",
["zpd"] = "Southeastern Ixtlán Zapotec",
["zpe"] = "Petapa Zapotec",
["zpf"] = "San Pedro Quiatoni Zapotec",
["zpg"] = "Guevea de Humboldt Zapotec",
["zph"] = "Totomachapan Zapotec",
["zpi"] = "Santa María Quiegolani Zapotec",
["zpj"] = "Quiavicuzas Zapotec",
["zpk"] = "Tlacolulita Zapotec",
["zpl"] = "Lachixío Zapotec",
["zpm"] = "Mixtepec Zapotec",
["zpn"] = "Santa Inés Yatzechi Zapotec",
["zpo"] = "Amatlán Zapotec",
["zpp"] = "El Alto Zapotec",
["zpq"] = "Zoogocho Zapotec",
["zpr"] = "Santiago Xanica Zapotec",
["zps"] = "Coatlán Zapotec",
["zpt"] = "San Vicente Coatlán Zapotec",
["zpu"] = "Yalálag Zapotec",
["zpv"] = "Chichicapan Zapotec",
["zpw"] = "Zaniza Zapotec",
["zpx"] = "San Baltazar Loxicha Zapotec",
["zpy"] = "Mazaltepec Zapotec",
["zpz"] = "Texmelucan Zapotec",
["zra"] = "Gaya",
["zrg"] = "Mirgan",
["zrn"] = "Zirenkel",
["zro"] = "Záparo",
["zrs"] = "Mairasi",
["zsa"] = "Sarasira",
["zsk"] = "Kaskean",
["zsl"] = "Zambian Sign Language",
["zsr"] = "Southern Rincon Zapotec",
["zsu"] = "Sukurum",
["zte"] = "Elotepec Zapotec",
["ztg"] = "Xanaguía Zapotec",
["ztl"] = "Lapaguía-Guivini Zapotec",
["ztm"] = "San Agustín Mixtepec Zapotec",
["ztn"] = "Santa Catarina Albarradas Zapotec",
["ztp"] = "Loxicha Zapotec",
["ztq"] = "Quioquitani-Quierí Zapotec",
["zts"] = "Tilquiapan Zapotec",
["ztt"] = "Tejalapan Zapotec",
["ztu"] = "San Pablo Güilá Zapotec",
["ztx"] = "Zaachila Zapotec",
["zty"] = "Yatee Zapotec",
["zu"] = "ซูลู",
["zua"] = "Zeem",
["zuh"] = "Tokano",
["zum"] = "Kumzari",
["zun"] = "ซูนี",
["zuy"] = "Zumaya",
["zwa"] = "Zay",
["zyp"] = "Zyphe",
["zza"] = "ซาซา",
["zzj"] = "จ้วงแบบจั่วเจียง",
}
07qxjcjek99jwq4jntmvvsdvplf65gq
จั๋ก
0
175411
5729048
1881326
2026-07-19T23:31:30Z
Alifshinobi
397
/* ภาษาคำเมือง */
5729048
wikitext
text/x-wiki
{{also/auto}}
==ภาษาคำเมือง==
=== การออกเสียง ===
* {{IPA|nod|/t͡ɕak˨˦/|a=เชียงใหม่}}
===คำกริยาวิเศษณ์===
{{nod-adv|-}}
# {{altform|nod|ᨧᩢ᩠ᨠ|t=[[จะ]]}}
===คำกริยา===
{{nod-verb}}
# {{lb|nod|สกรรม}} {{altform|nod|ᨧᩢ᩠ᨠ|t=[[ตัด]]}}
rqhqomizqozda16tivzsg6l55pl82f3
มอดูล:languages/canonical names
828
211224
5729121
5727409
2026-07-20T02:24:53Z
Octahedron80
267
5729121
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",
["Abenaki"] = "abe",
["Abenlen Ayta"] = "abp",
["Abidji"] = "abi",
["Abinomn"] = "bsa",
["Abipón"] = "axb",
["Abishira"] = "ash",
["Abom"] = "aob",
["Abon"] = "abo",
["Aborlan Tagbanwa"] = "tbw",
["Abu"] = "ado",
["Abu'"] = "aah",
["Abua"] = "abn",
["Abui"] = "abz",
["Abun"] = "kgr",
["Abung"] = "abl",
["Abure"] = "abu",
["Abureni"] = "mgj",
["Acatepec Me'phaa"] = "tpx",
["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",
["Adja"] = "ajg",
["Adnyamathanha"] = "adt",
["Adonara"] = "adr",
["Aduge"] = "adu",
["Adzera"] = "adz",
["Adûni"] = "art-adu",
["Aeka"] = "aez",
["Aekyom"] = "awi",
["Aequian"] = "xae",
["Aer"] = "aeq",
["Afade"] = "aal",
["Afghan Sign Language"] = "afg",
["Afitti"] = "aft",
["Afra"] = "ulf",
["Afrihili"] = "afh",
["Afro-Seminole Creole"] = "afs",
["Agarabi"] = "agd",
["Agariya"] = "agi",
["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",
["Agwagwune"] = "yay",
["Ahanta"] = "aha",
["Ahirani"] = "ahr",
["Ahtna"] = "aht",
["Ahwai"] = "nfd",
["Ai-Cham"] = "aih",
["Aighon"] = "aix",
["Aikanã"] = "tba",
["Aiklep"] = "mwg",
["Aimele"] = "ail",
["Aimol"] = "aim",
["Ainbai"] = "aic",
["Aiome"] = "aki",
["Airoran"] = "air",
["Aisi"] = "mmq",
["Aja"] = "aja",
["Ajawa"] = "ajw",
["Ajië"] = "aji",
["Ajyíninka Apurucayali"] = "cpc",
["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",
["Akar-Bale"] = "acl",
["Akaselem"] = "aks",
["Akatek"] = "knj",
["Akawaio"] = "ake",
["Ake"] = "aik",
["Akebu"] = "keu",
["Akei"] = "tsr",
["Akeu"] = "aeu",
["Akhvakh"] = "akv",
["Akkala Sami"] = "sia",
["Akolet"] = "akt",
["Akoose"] = "bss",
["Akoye"] = "miw",
["Akpa"] = "akf",
["Akpes"] = "ibe",
["Akrukay"] = "afi",
["Akuku"] = "ayk",
["Akum"] = "aku",
["Akuntsu"] = "aqz",
["Akurio"] = "ako",
["Akuwagel"] = "bey",
["Akwa"] = "akw",
["Akyaung Ari"] = "nqy",
["Al-Sayyid Bedouin Sign Language"] = "syy",
["Alaba"] = "alw",
["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 Sign Language"] = "sqk",
["Alchuka"] = "tuw-alk",
["Alcozauca Mixtec"] = "xta",
["Alege"] = "alf",
["Alekano"] = "gah",
["Aleut"] = "ale",
["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",
["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",
["Amganad Ifugao"] = "ifa",
["Ami"] = "amy",
["Amis"] = "ami",
["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 Ligurian"] = "xlg",
["Ancient Macedonian"] = "xmk",
["Ancient North Arabian"] = "xna",
["Ancient Zapotec"] = "xzp",
["Andai"] = "afd",
["Andajin"] = "ajn",
["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",
["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",
["Ao"] = "njo",
["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",
["Aputai"] = "apx",
["Aquitanian"] = "xaq",
["Arabana"] = "ard",
["Arabela"] = "arl",
["Araki"] = "akr",
["Arakwal"] = "rkw",
["Aralle-Tabulahan"] = "atq",
["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 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",
["Asaro'o"] = "mtv",
["Ashe"] = "ahs",
["Ashkun"] = "ask",
["Asho Chin"] = "csh",
["Ashraaf"] = "cus-ash",
["Asháninka"] = "cni",
["Ashéninka Pajonal"] = "cjo",
["Ashéninka Perené"] = "prq",
["Asilulu"] = "asl",
["Askopan"] = "eiv",
["Asoa"] = "asv",
["Assan"] = "xss",
["Assangori"] = "sjg",
["Assiniboine"] = "asb",
["อารามายาใหม่แบบอัสซีเรีย"] = "aii",
["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",
["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",
["Austronesian Mari"] = "hob",
["Auwe"] = "smf",
["Auyana"] = "auy",
["Auye"] = "auu",
["Auyokawa"] = "auo",
["Avatime"] = "avn",
["Avau"] = "avb",
["Avava"] = "tmb",
["Avikam"] = "avi",
["Avokaya"] = "avu",
["Avá-Canoeiro"] = "avv",
["Awa (China)"] = "vwa",
["Awa (New Guinea)"] = "awb",
["Awa-Cuaiquer"] = "kwi",
["Awabakal"] = "awk",
["Awak"] = "awo",
["Awar"] = "aya",
["Awara"] = "awx",
["Awbono"] = "awh",
["Aweer"] = "bob",
["Awera"] = "awr",
["Awetí"] = "awe",
["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",
["Ayomán"] = "sai-ayo",
["Ayoquesco Zapotec"] = "zaf",
["Ayoreo"] = "ayo",
["Ayu"] = "ayu",
["Ayutla Mixtec"] = "miy",
["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",
["Bada"] = "bhz",
["Badanchi"] = "bau",
["Bade"] = "bde",
["Badeshi"] = "bdz",
["Badimaya"] = "bia",
["Baduy"] = "bac",
["Badyara"] = "pbp",
["Baeggu"] = "bvd",
["Baelelea"] = "bvc",
["Baenan"] = "sai-bae",
["Baetora"] = "btr",
["Bafanji"] = "bfj",
["Bafaw"] = "bwt",
["Bafia"] = "ksf",
["Bafut"] = "bfd",
["Baga Kaloum"] = "bqf",
["Baga Koga"] = "bgo",
["Baga Manduri"] = "bmd",
["Baga Pokur"] = "bcg",
["Baga Sitemu"] = "bsp",
["Baga Sobané"] = "bsv",
["Bagheli"] = "bfy",
["Bagirmi"] = "bmi",
["Bago-Kusuntu"] = "bqg",
["Bagri"] = "bgq",
["Bagua"] = "sai-bag",
["Bagupi"] = "bpi",
["Bagusa"] = "bqb",
["Bagvalal"] = "kva",
["Baha"] = "yha",
["Baham"] = "bdw",
["Bahamian Creole"] = "bah",
["Bahau"] = "bhv",
["Bahinemo"] = "bjh",
["Bahing"] = "bhj",
["Bahonsuai"] = "bsu",
["Bai (South Sudan)"] = "bdj",
["Baibai"] = "bbf",
["Baikeno"] = "bkx",
["Bailang"] = "tbq-blg",
["Baima"] = "bqh",
["Baimak"] = "bmx",
["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 Malay"] = "mhp",
["Balkan Gagauz Turkish"] = "bgx",
["Balkan Romani"] = "rmn",
["Balo"] = "bqo",
["Baloi"] = "biz",
["Balong"] = "bnt-bal",
["Baltic Romani"] = "rml",
["Baluan-Pam"] = "blq",
["Bamako Sign Language"] = "bog",
["Bamali"] = "bbq",
["Bambalang"] = "bmo",
["Bambam"] = "ptu",
["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",
["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",
["Basketo"] = "bst",
["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",
["Batu"] = "btu",
["Batui"] = "zbt",
["Batuley"] = "bay",
["Bau"] = "bbd",
["Bau Bidayuh"] = "sne",
["Bauchi"] = "bsf",
["Baure"] = "brg",
["Bauria"] = "bge",
["Bauro"] = "bxa",
["Bauwaki"] = "bwk",
["Bauzi"] = "bvz",
["Bawm Chin"] = "bgr",
["Bay Miwok"] = "mkq",
["Bayali"] = "bjy",
["Baybayanon"] = "bvy",
["Baygo"] = "byg",
["Bayogoula"] = "nai-bay",
["Bayono"] = "byl",
["Bayot"] = "bda",
["Bayungu"] = "bxj",
["Bazigar"] = "bfr",
["Baïnounk Gubëeher"] = "alv-bgu",
["Beami"] = "beo",
["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",
["Belhariya"] = "byw",
["Beli"] = "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",
["Benggoi"] = "bgy",
["Bengkala Sign Language"] = "bqy",
["Bentong"] = "bnu",
["Benyadu'"] = "byd",
["Beothuk"] = "bue",
["Bepour"] = "bie",
["Bera"] = "brf",
["Berakou"] = "bxv",
["Berau Malay"] = "bve",
["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",
["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",
["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",
["Bijori"] = "bix",
["Bikaru"] = "bic",
["Bikya"] = "byb",
["Bila"] = "bip",
["Bilakura"] = "bql",
["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",
["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",
["Bisorio"] = "bir",
["Bissa"] = "bib",
["Bit"] = "bgk",
["Bitare"] = "brt",
["Bitur"] = "mcc",
["Biwat"] = "bwm",
["Biyo"] = "byo",
["Biyom"] = "bpm",
["Blablanga"] = "blp",
["Blackfoot"] = "bla",
["Blafe"] = "bfh",
["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 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",
["Bolgo"] = "bvo",
["Bolia"] = "bli",
["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",
["Bourguignon"] = "roa-brg",
["Bozaba"] = "bzo",
["Bragat"] = "aof",
["Brazilian Sign Language"] = "bzs",
["Brek Karen"] = "kvl",
["Brem"] = "buq",
["Breri"] = "brq",
["Bribri"] = "bzd",
["British Sign Language"] = "bfi",
["Brokkat"] = "bro",
["Brokpake"] = "sgt",
["Brokskat"] = "bkk",
["Broome Pearling Lugger Pidgin"] = "bpl",
["Brunei Bisaya"] = "bsb",
["Bruny Island"] = "xpz",
["Bu"] = "jid",
["Bu-Nao Bunu"] = "bwx",
["Bua"] = "bub",
["Bualkhaw Chin"] = "cbl",
["Buamu"] = "box",
["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",
["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 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",
["Burmeso"] = "bzu",
["Buru (Indonesia)"] = "mhs",
["Buru (Nigeria)"] = "bqw",
["Burui"] = "bry",
["Burumakok"] = "aip",
["Burun"] = "bdi",
["Burunge"] = "bds",
["Burushaski"] = "bsk",
["Burusu"] = "bqr",
["Buruwai"] = "asi",
["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",
["Caolan"] = "mlc",
["Capanahua"] = "kaq",
["Capiznon"] = "cps",
["Cappadocian Greek"] = "cpg",
["Caquinte"] = "cot",
["Cara"] = "cfd",
["Carabayo"] = "cby",
["Caramanta"] = "crf",
["Caranqui"] = "sai-caq",
["Carapana"] = "cbc",
["Carian"] = "xcr",
["Cariay"] = "awd-kar",
["Carijona"] = "cbd",
["Carolina Algonquian"] = "crr",
["Carolinian"] = "cal",
["Carpathian Romani"] = "rmc",
["Carrier"] = "crx",
["Cashibo-Cacataibo"] = "cbr",
["Cashinahua"] = "cbs",
["Casiguran Dumagat Agta"] = "dgc",
["Casuarina Coast Asmat"] = "asc",
["Catacao"] = "sai-cat",
["Catalan Sign Language"] = "csc",
["Catawba"] = "chc",
["Catuquinaru"] = "sai-ctq",
["Catío Chibcha"] = "cba-cat",
["Cauca"] = "cca",
["Cavineña"] = "cav",
["Cayubaba"] = "cyb",
["Cayuga"] = "cay",
["Cayuse"] = "xcy",
["Cazcan"] = "azc-caz",
["Cañari"] = "sai-cnr",
["Cebaara Senoufo"] = "sef",
["Celtiberian"] = "xce",
["Cen"] = "cen",
["Central Asmat"] = "cns",
["Central Atlas Tamazight"] = "tzm",
["Central Awyu"] = "awu",
["Central Bai"] = "bca",
["Central Bontoc"] = "lbk",
["Central Cagayan Agta"] = "agt",
["ฟรังโกเนียตอนกลาง"] = "gmw-cfr",
["Central Grebo"] = "grv",
["Central Huasteca Nahuatl"] = "nch",
["Central Huishui Hmong"] = "hmc",
["Central Mahuatlán Zapotec"] = "zam",
["Central Mansi"] = "mns-cen",
["Central Masela"] = "mxz",
["Central Mashan Hmong"] = "hmm",
["Central Mazahua"] = "maz",
["Central Melanau"] = "mel",
["Central Ojibwa"] = "ojc",
["Central Pame"] = "pbs",
["Central Pomo"] = "poo",
["Central Puebla Nahuatl"] = "ncx",
["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",
["Chaha"] = "sem-cha",
["Chaima"] = "ciy",
["Chairel"] = "sit-cha",
["Chak"] = "ckh",
["Chakali"] = "cli",
["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",
["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",
["Chayahuita"] = "cbt",
["Chayuco Mixtec"] = "mih",
["Chazumba Mixtec"] = "xtb",
["Che"] = "ruk",
["Cheke Holo"] = "mrn",
["Chemakum"] = "xch",
["Chenapian"] = "cjn",
["Chenchu"] = "cde",
["Chenoua"] = "cnu",
["Chepang"] = "cdm",
["Chepya"] = "ycp",
["Cherepon"] = "cpn",
["Chesu"] = "ych",
["Chetco-Tolowa"] = "ctc",
["Chewong"] = "cwg",
["Chhattisgarhi"] = "hne",
["Chhintange"] = "ctn",
["Chhulung"] = "cur",
["Chiangmai Sign Language"] = "csd",
["Chiapanec"] = "cip",
["Chibcha"] = "chb",
["Chicahuaxtla Triqui"] = "trs",
["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 Pidgin English"] = "cpi",
["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",
["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",
["Chukwa"] = "cuw",
["Chulym"] = "clw",
["Chumburung"] = "ncu",
["Churahi"] = "cdj",
["Church Slavonic"] = "zls-chs",
["Churuya"] = "sai-chu",
["Chut"] = "scb",
["Chuukese"] = "chk",
["Chuvan"] = "xcv",
["Chácobo"] = "cao",
["Ci Gbe"] = "cib",
["Cia-Cia"] = "cia",
["Cibak"] = "ckl",
["Cicipu"] = "awc",
["Ciguayo"] = "nai-cig",
["คิมบรี"] = "cim",
["Cinamiguin Manobo"] = "mkx",
["Cinda-Regi-Tiyal"] = "cdr",
["Cineni"] = "cie",
["Cinta Larga"] = "cin",
["Cishingini"] = "asg",
["Citak"] = "txt",
["Ciwogai"] = "tgd",
["แกลิกคลาสสิก"] = "ghc",
["Classical Mandaic"] = "myz",
["ซีรีแอกคลาสสิก"] = "syc",
["Coahuilteco"] = "xcw",
["Coast Miwok"] = "csi",
["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",
["Coquille"] = "coq",
["Cora"] = "crn",
["Cori"] = "cry",
["Coroado Puri"] = "sai-crd",
["Cosoleacaque Nahuatl"] = "nhk",
["Costa Rican Sign Language"] = "csr",
["Cotabato Manobo"] = "mta",
["Cotoname"] = "xcn",
["Cowlitz"] = "cow",
["Coyaima"] = "coy",
["Coyotepec Popoloca"] = "pbf",
["Coyutla Totonac"] = "toc",
["Creek"] = "mus",
["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",
["Cung"] = "cug",
["Cupeño"] = "cup",
["Curonian"] = "xcu",
["Curripaco"] = "kpc",
["Cutchi-Swahili"] = "ccl",
["Cuvok"] = "cuv",
["Cuyamecalco Mixtec"] = "xtu",
["Cuyunon"] = "cyo",
["Cwi Bwamu"] = "bwy",
["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",
["Dakpa"] = "dka",
["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 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",
["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",
["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",
["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",
["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 Low Saxon"] = "nds-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",
["Dzuun"] = "dnn",
["Dâw"] = "kwa",
["E"] = "eee",
["E'ma Buyang"] = "yzg",
["Early Old Oghuz"] = "trk-eog",
["Early Tripuri"] = "xtr",
["East Damar"] = "dmr",
["ฟรังโกเนียตะวันออก"] = "vmf",
["East Futuna"] = "fud",
["East Kewa"] = "kjs",
["East Limba"] = "lma",
["East Masela"] = "vme",
["East Nyala"] = "nle",
["East Tarangan"] = "tre",
["East Yugur"] = "yuy",
["Eastern Acipa"] = "acp",
["Eastern Arrernte"] = "aer",
["Eastern Bolivian Guarani"] = "gui",
["Eastern Bontoc"] = "ebk",
["Eastern Canadian Inuktitut"] = "ike",
["Eastern Durango Nahuatl"] = "azd",
["Eastern Gorkha Tamang"] = "tge",
["Eastern Gurung"] = "ggn",
["Eastern Highland Chatino"] = "cly",
["Eastern Highland Otomi"] = "otm",
["Eastern Huasteca Nahuatl"] = "nhe",
["Eastern Huishui Hmong"] = "hme",
["Eastern Karaboro"] = "xrb",
["Eastern Keres"] = "kee",
["Eastern Khanty"] = "kca-eas",
["Eastern Krahn"] = "kqo",
["Eastern Lalu"] = "yit",
["Eastern Magar"] = "mgp",
["Eastern Maninkakan"] = "emk",
["Eastern Mari"] = "mhr",
["Eastern Meohang"] = "emg",
["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 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",
["Edopi"] = "dbf",
["Efai"] = "efa",
["Efe"] = "efe",
["Efik"] = "efi",
["Efutop"] = "ofu",
["Ega"] = "ega",
["Eggon"] = "ego",
["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",
["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",
["Emplawas"] = "emw",
["En"] = "enc",
["Enawené-Nawé"] = "unk",
["Ende"] = "end",
["Enga"] = "enq",
["Engenni"] = "enn",
["Enggano"] = "eno",
["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",
["Esan"] = "ish",
["Ese"] = "mcq",
["Ese Ejja"] = "ese",
["Esimbi"] = "ags",
["Eskayan"] = "esy",
["Esmeralda"] = "sai-esm",
["Esselen"] = "esq",
["Estado de México Otomi"] = "ots",
["Estonian Sign Language"] = "eso",
["Esuma"] = "esm",
["Etchemin"] = "etc",
["Etebi"] = "etb",
["Eten"] = "etx",
["Eteocretan"] = "ecr",
["Eteocypriot"] = "ecy",
["Ethiopian Sign Language"] = "eth",
["Etkywan"] = "ich",
["Eton (Cameroon)"] = "eto",
["Eton (Vanuatu)"] = "etn",
["Etulo"] = "utr",
["Evant"] = "bzz",
["Ewage-Notu"] = "nou",
["Ewarhuyana"] = "sai-ewa",
["Ewondo"] = "ewo",
["Eyak"] = "eya",
["Ezaa"] = "eza",
["Fagani"] = "faf",
["Faire Atta"] = "azt",
["Faita"] = "faj",
["Faiwol"] = "fai",
["Fakkanci"] = "gel",
["Falam Chin"] = "cfm",
["Fali"] = "fli",
["Fam"] = "fam",
["Fanagalo"] = "fng",
["Fanamaket"] = "bjp",
["Fang (Bantu)"] = "fan",
["Fang (Beboid)"] = "fak",
["Fania"] = "fni",
["Far Western Muria"] = "fmu",
["ฟราฟรา"] = "gur",
["Fas"] = "fqs",
["Fasu"] = "faa",
["Fataleka"] = "far",
["Fataluku"] = "ddg",
["Fayu"] = "fau",
["Fe'fe'"] = "fmp",
["Fedan"] = "pdn",
["Fembe"] = "agl",
["Fer"] = "kah",
["Feroge"] = "fer",
["Filomena Mata-Coahuitlán Totonac"] = "tlp",
["Fingallian"] = "gmw-fin",
["Finisterre Yau"] = "yuw",
["Finnish Sign Language"] = "fse",
["Finnish-Swedish Sign Language"] = "fss",
["Finongan"] = "fag",
["Fipa"] = "fip",
["Firan"] = "fir",
["Fiwaga"] = "fiw",
["Flemish Sign Language"] = "vgt",
["Flinders Island"] = "fln",
["Foau"] = "flh",
["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",
["French Belgian Sign Language"] = "sfb",
["French Sign Language"] = "fsl",
["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",
["Gagnoa Bété"] = "btg",
["Gahri"] = "bfu",
["Gaikundi"] = "gbf",
["Gaina"] = "gcn",
["Gal"] = "gap",
["Galambu"] = "glo",
["Galatian"] = "xga",
["Galela"] = "gbi",
["Galeya"] = "gar",
["Galice"] = "gce",
["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-Ningi"] = "bte",
["Gana"] = "gnq",
["Ganang"] = "gne",
["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",
["Garre"] = "gex",
["Garus"] = "gyb",
["Garza"] = "xgr",
["Gashowu Yokuts"] = "yok-gsy",
["Gata'"] = "gaq",
["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",
["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",
["Gepo"] = "ygp",
["Gera"] = "gew",
["Gerka"] = "gek",
["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",
["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",
["Gogo"] = "gog",
["Gogodala"] = "ggw",
["Goguryeo"] = "zkg",
["Gojri"] = "gju",
["Gokana"] = "gkn",
["Gokhy"] = "tbq-gkh",
["Gola"] = "gol",
["Golin"] = "gvf",
["Golpa"] = "lja",
["Gone Dau"] = "goo",
["Gongduk"] = "goe",
["Gonja"] = "gjn",
["Goo"] = "gov",
["Gor"] = "gqr",
["Gorakor"] = "goc",
["Gorap"] = "goq",
["Goreng"] = "xgg",
["Gorontalo"] = "gor",
["Gorovu"] = "grq",
["Gorwaa"] = "gow",
["Gottscheerish"] = "gmw-gts",
["Goundo"] = "goy",
["Gourmanchéma"] = "gux",
["Gowlan"] = "goj",
["Gowro"] = "gwf",
["Gozarkhani"] = "goz",
["Grangali"] = "nli",
["Grass Koiari"] = "kbk",
["Greek Sign Language"] = "gss",
["Green Gelao"] = "giq",
["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 Sign Language"] = "lgs",
["Guinean Sign Language"] = "gus",
["Guiqiong"] = "gqi",
["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",
["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",
["Hainyaxo Bozo"] = "bzx",
["Haiphong Sign Language"] = "haf",
["Haisla"] = "has",
["Haitian Vodoun Culture Language"] = "hvc",
["Haiǁom"] = "hgm",
["Haji"] = "hji",
["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",
["Harami"] = "xha",
["Harappan"] = "xiv",
["Harari"] = "har",
["Haraza"] = "nub-har",
["Harijan Kinnauri"] = "kjo",
["Haroi"] = "hro",
["Harsusi"] = "hss",
["Haruai"] = "tmd",
["Haruku"] = "hrk",
["หริยาณวี"] = "bgc",
["Harzani"] = "hrz",
["Hasaitic"] = "sem-has",
["Hasha"] = "ybj",
["Hassaniya Arabic"] = "mey",
["Hatam"] = "had",
["Hattic"] = "xht",
["Hausa Sign Language"] = "hsl",
["Haush"] = "sai-hau",
["Havasupai-Walapai-Yavapai"] = "yuf",
["Haveke"] = "hvk",
["Havu"] = "hav",
["Hawai'i Pidgin Sign Language"] = "hps",
["Hawaiian Creole"] = "hwc",
["Haya"] = "hay",
["Hdi"] = "xed",
["Hehe"] = "heh",
["Heiban"] = "hbn",
["Heiltsuk"] = "hei",
["Helong"] = "heg",
["Hema"] = "nix",
["Hemba"] = "hem",
["Herdé"] = "hed",
["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",
["Hijuk"] = "hij",
["Hill Maria"] = "mrr",
["Himarimã"] = "hir",
["Hindi Dogri"] = "dgo",
["Hinduri"] = "hii",
["Hinukh"] = "gin",
["Hismaic"] = "sem-his",
["Hitchiti"] = "nai-hit",
["Hittite"] = "hit",
["Hitu"] = "htu",
["Hiw"] = "hiw",
["Hixkaryana"] = "hix",
["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",
["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 Sign Language"] = "hsh",
["Hungworo"] = "nat",
["Hunjara-Kaina Ke"] = "hkk",
["Hunnic"] = "xhc",
["Hunzib"] = "huz",
["Hupa"] = "hup",
["Hupdë"] = "jup",
["Hupla"] = "hap",
["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",
["Ibanag"] = "ibg",
["Ibani"] = "iby",
["Ibatan"] = "ivb",
["Iberian"] = "xib",
["Ibibio"] = "ibb",
["Ibino"] = "ibn",
["Iboko"] = "bkp",
["Ibu"] = "ibu",
["Ibuoro"] = "ibr",
["Icelandic Sign Language"] = "icl",
["Iceve-Maci"] = "bec",
["Idakho-Isukha-Tiriki"] = "ida",
["Idaté"] = "idt",
["Idere"] = "ide",
["Idesa"] = "ids",
["Idi"] = "idi",
["Idiom Neutral"] = "mis-idn",
["Idoma"] = "idu",
["Idon"] = "idc",
["Idu"] = "clk",
["Idun"] = "ldb",
["Iduna"] = "viv",
["Ifo"] = "iff",
["Ifè"] = "ife",
["Igala"] = "igl",
["Igana"] = "igg",
["Igede"] = "ige",
["Ignaciano"] = "ign",
["Igo"] = "ahl",
["Iguta"] = "nar",
["Igwe"] = "igw",
["Iha"] = "ihp",
["Ihievbe"] = "ihi",
["Ija-Zuba"] = "vki",
["Ik"] = "ikx",
["Ika"] = "ikk",
["Ikaranggal"] = "ikr",
["Ikizu"] = "ikz",
["Iko"] = "iki",
["Ikobi-Mena"] = "meb",
["Ikoma"] = "ntk",
["Ikpeng"] = "txi",
["Ikpeshi"] = "ikp",
["Ikposo"] = "kpo",
["Iku-Gora-Ankwa"] = "ikv",
["Ikulu"] = "ikl",
["Ikwere"] = "ikw",
["Ikwo"] = "iqw",
["Ila"] = "ilb",
["Ile Ape"] = "ila",
["Ilgar"] = "ilg",
["Ili Turki"] = "ili",
["Ili'uun"] = "ilu",
["Ilianen Manobo"] = "mbi",
["Illyrian"] = "xil",
["Ilongot"] = "ilk",
["Ilue"] = "ilv",
["Ilwana"] = "mlk",
["Imbongu"] = "imo",
["Imonda"] = "imn",
["Imroing"] = "imr",
["Inabaknon"] = "abx",
["Inapang"] = "mzu",
["Indanga"] = "bnt-ind",
["Indo-Portuguese"] = "idb",
["Indri"] = "idr",
["Indus Kohistani"] = "mvy",
["Inebu One"] = "oin",
["Ineseño"] = "inz",
["Inga"] = "inb",
["Inlaod Itneg"] = "iti",
["Inoke-Yate"] = "ino",
["Inonhan"] = "loc",
["Inor"] = "ior",
["Inpui Naga"] = "nkf",
["International Sign"] = "ils",
["Interslavic"] = "isv",
["Intha"] = "int",
["Inuinnaqtun"] = "esx-inq",
["Inuit Sign Language"] = "iks",
["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",
["Iraqw"] = "irk",
["Irarutu"] = "irh",
["Iraya"] = "iry",
["Iresim"] = "ire",
["Iriga Bicolano"] = "bto",
["Irish Sign Language"] = "isg",
["Irula"] = "iru",
["Isabi"] = "isa",
["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",
["Istro-Romanian"] = "ruo",
["Isu"] = "isu",
["Isubu"] = "szv",
["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",
["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 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 Sign Language"] = "jsl",
["Japhug"] = "sit-jap",
["Japrería"] = "jru",
["Jaqaru"] = "jqr",
["Jara"] = "jaf",
["Jarai"] = "jra",
["Jarawa"] = "anq",
["Jaru"] = "ddj",
["Jassic"] = "ysc",
["Jaunsari"] = "jns",
["Javindo"] = "jvd",
["Jawe"] = "jaz",
["Jaya"] = "jyy",
["Jebero"] = "jeb",
["Jeh"] = "jeh",
["Jehai"] = "jhi",
["Jeikó"] = "sai-jko",
["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",
["Jiba"] = "juo",
["Jibu"] = "jib",
["Jicarilla"] = "apj",
["Jie"] = "mis-jie",
["Jiiddu"] = "jii",
["Jilbe"] = "jie",
["Jili"] = "mgi",
["Jilim"] = "jil",
["Jimi"] = "jmi",
["Jimjimen"] = "jim",
["Jina"] = "jia",
["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",
["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",
["Kabiyé"] = "kbp",
["Kabola"] = "klz",
["Kabore One"] = "onk",
["Kabras"] = "lkb",
["Kaburi"] = "uka",
["Kabutra"] = "kbu",
["Kabwa"] = "cwa",
["Kabwari"] = "kcw",
["Kachama-Ganjule"] = "kcx",
["Kachari"] = "xac",
["Kachi Koli"] = "gjk",
["Kacipo-Balesi"] = "koe",
["Kaco'"] = "xkk",
["Kadai"] = "kzd",
["Kadar"] = "kej",
["Kadara"] = "kad",
["Kadaru"] = "kdu",
["Kadiwéu"] = "kbc",
["Kado"] = "kdv",
["Kadugli"] = "xtc",
["Kaduo"] = "ktp",
["Kaera"] = "jka",
["Kafa"] = "kbr",
["Kafoa"] = "kpu",
["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",
["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",
["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",
["Kamasa"] = "klp",
["Kamasau"] = "kms",
["Kamassian"] = "xas",
["Kamayo"] = "kyk",
["Kamayurá"] = "kay",
["Kamba"] = "kam",
["Kambaata"] = "ktb",
["Kambaira"] = "kyy",
["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",
["Kannada Kurumba"] = "kfi",
["Kannauji"] = "bjj",
["Kanowit"] = "kxn",
["Kanoé"] = "kxo",
["Kansa"] = "ksk",
["Kantosi"] = "xkt",
["Kanu"] = "khx",
["Kanufi"] = "kni",
["Kanyok"] = "kny",
["Kao"] = "kax",
["Kaonde"] = "kqn",
["Kap"] = "ykm",
["Kapauri"] = "khp",
["Kapin"] = "tbx",
["Kapinawá"] = "xpn",
["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",
["Karakhanid"] = "xqa",
["Karami"] = "xar",
["Karamojong"] = "kdj",
["Karang"] = "kzr",
["Karanga"] = "kth",
["Karankawa"] = "zkk",
["Karas"] = "kgv",
["Karata"] = "kpt",
["Karawa"] = "xrw",
["Karbi"] = "mjw",
["Kare (Central Africa)"] = "kbn",
["Kare (New Guinea)"] = "kmf",
["Karekare"] = "kai",
["Karey"] = "kyd",
["Kari"] = "kbj",
["Kari'na"] = "car",
["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",
["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",
["Kavet"] = "krv",
["Kawacha"] = "kcb",
["Kawaiisu"] = "xaw",
["Kawe"] = "kgb",
["Kawishana"] = "awd-kaw",
["Kawésqar"] = "alc",
["Kaxararí"] = "ktx",
["Kaxuyana"] = "kbb",
["Kayabí"] = "kyz",
["Kayagar"] = "kyt",
["Kayan Mahakam"] = "xay",
["Kayan River Kayan"] = "xkn",
["Kayapa Kallahan"] = "kak",
["Kayapó"] = "txu",
["Kayardild"] = "gyd",
["Kayeli"] = "kzl",
["Kayong"] = "kxy",
["Kayort"] = "kyv",
["Kaytetye"] = "gbb",
["Kayupulau"] = "kzu",
["Kazukuru"] = "kzk",
["Ke'o"] = "xxk",
["Keak"] = "keh",
["Keapara"] = "khz",
["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",
["Kesawai"] = "xes",
["Ket"] = "ket",
["Ketangalan"] = "kae",
["Kete"] = "kcv",
["Ketengban"] = "xte",
["Ketum"] = "ktt",
["Kewa"] = "kew",
["Keyagana"] = "kyg",
["Kgalagadi"] = "xkv",
["แฆแลจ"] = "klj",
["Khaling"] = "klr",
["Khamnigan Mongol"] = "ykh",
["Khamyang"] = "ksu",
["Khana"] = "ogo",
["Khandeshi"] = "khn",
["Khao"] = "xao",
["Kharam Naga"] = "kfw",
["Kharia"] = "khr",
["Kharia Thar"] = "ksy",
["Khayo"] = "lko",
["Khazar"] = "zkz",
["Khe"] = "kqg",
["Khehek"] = "tlx",
["Khengkha"] = "xkf",
["Khetrani"] = "xhe",
["Khezha Naga"] = "nkh",
["Khiamniungan Naga"] = "kix",
["Khinalug"] = "kjj",
["Khirwar"] = "kwx",
["Khisa"] = "kqm",
["Khlor"] = "llo",
["Khlula"] = "ykl",
["Khoekhoe"] = "naq",
["Khoibu Naga"] = "nkb",
["Khoini"] = "xkc",
["Kholok"] = "ktc",
["Kholosi"] = "inc-kho",
["Khorasani Turkish"] = "kmz",
["Khorezmian Turkic"] = "zkh",
["Khowar"] = "khw",
["Khroskyabs"] = "jiq",
["Khua"] = "xhv",
["Khuen"] = "khf",
["Khumi Chin"] = "cnk",
["Khvarshi"] = "khv",
["Khwarezmian"] = "xco",
["Khwe"] = "xuu",
["Kháng"] = "kjm",
["Kiautschou German Pidgin"] = "crp-kia",
["Kibala"] = "blv",
["Kibena"] = "bez",
["Kibet"] = "kie",
["Kibiri"] = "prm",
["Kichwa"] = "qwe-kch",
["Kickapoo"] = "kic",
["Kikai"] = "kzg",
["Kikami"] = "kcu",
["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",
["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",
["Kohumono"] = "bcs",
["Koi"] = "kkt",
["Koibal"] = "zkb",
["Koireng"] = "nkd",
["Koitabu"] = "kqi",
["Koiwat"] = "kxt",
["Kok-Nar"] = "gko",
["Kok-Paponk"] = "okg",
["Kokata"] = "ktd",
["Koke"] = "kou",
["Koko-Bera"] = "kkp",
["Kokoda"] = "xod",
["Kokola"] = "kzn",
["Kokota"] = "kkk",
["Kol (Cameroon)"] = "biw",
["Kol (New Guinea)"] = "kol",
["Kola"] = "kvv",
["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",
["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 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",
["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",
["Kota Marudu Tinagas"] = "ktr",
["Kotafon Gbe"] = "kqk",
["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",
["Kulon-Pazeh"] = "uun",
["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",
["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",
["Kunimaipa"] = "kup",
["Kunja"] = "pep",
["Kunjen"] = "kjn",
["Kunyi"] = "njx",
["Kunza"] = "kuz",
["Kuo"] = "xuo",
["Kuot"] = "kto",
["Kupa"] = "kug",
["Kupang Malay"] = "mkn",
["Kupia"] = "key",
["Kupsabiny"] = "kpz",
["Kur"] = "kuv",
["Kura Ede Nago"] = "nqk",
["Kurama"] = "krh",
["Kuranko"] = "knk",
["Kuri"] = "nbn",
["Kuria"] = "kuj",
["Kurichiya"] = "kfh",
["Kurmukar"] = "kfv",
["Kurnai"] = "unn",
["Kurrama"] = "vku",
["Kurti"] = "ktm",
["Kurtjar"] = "gdj",
["Kurtöp"] = "xkz",
["Kurudu"] = "kjr",
["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",
["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",
["Kâte"] = "kmg",
["Kélé"] = "keb",
["Kómnzo"] = "paa-kom",
["La'bi"] = "lbi",
["Laal"] = "gdm",
["Laalaa"] = "cae",
["Laba"] = "lau",
["Label"] = "lbb",
["Labir"] = "jku",
["Labo"] = "mwi",
["Labo Phowa"] = "ypb",
["Labu"] = "lbu",
["Labuk-Kinabatangan Kadazan"] = "dtb",
["Lacandon"] = "lac",
["Lachi"] = "lbt",
["Lachiguiri Zapotec"] = "zpa",
["Lachixío Zapotec"] = "zpl",
["Ladji-Ladji"] = "llj",
["Laeko-Libuat"] = "lkl",
["Lafofa"] = "laf",
["Laghu"] = "lgb",
["Laghuu"] = "lgh",
["Lagwan"] = "kot",
["Laha (Indonesia)"] = "lhh",
["Laha (Vietnam)"] = "lha",
["Lahanan"] = "lhn",
["Lahnda"] = "lah",
["Lahta Karen"] = "kvt",
["Lahu"] = "lhu",
["Lahu Shi"] = "lhi",
["Lahul Lohar"] = "lhl",
["Lai"] = "cnh",
["Laimbue"] = "lmx",
["Laitu Chin"] = "clj",
["Laiyolo"] = "lji",
["Laka"] = "lak",
["Lakalei"] = "lka",
["Lake Miwok"] = "lmw",
["Lakha"] = "lkh",
["Laki"] = "lki",
["Lakon"] = "lkn",
["Lakondê"] = "lkd",
["ลาโคตา"] = "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",
["Langam"] = "lnm",
["Langbashe"] = "lna",
["Langi"] = "lag",
["Langnian Buyang"] = "yln",
["Lango (Sudan)"] = "lno",
["Lango (Uganda)"] = "laj",
["Lanima"] = "lnw",
["Lanoh"] = "lnh",
["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",
["Latu"] = "ltu",
["Latundê"] = "ltn",
["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",
["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",
["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",
["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",
["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 Sign Language"] = "lbs",
["Ligbi"] = "lig",
["Ligenza"] = "lgz",
["Lihir"] = "lih",
["Lika"] = "lik",
["Liki"] = "lio",
["Likila"] = "lie",
["Likuba"] = "kxx",
["Likum"] = "lib",
["Likwala"] = "kwc",
["Lilau"] = "lll",
["Lillooet"] = "lil",
["Limassa"] = "bme",
["Limbum"] = "lmp",
["Limi"] = "ylm",
["Limilngan"] = "lmc",
["Limos Kalinga"] = "kmk",
["Linear A"] = "lab",
["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",
["Lithuanian Sign Language"] = "lls",
["Little Swanport"] = "aus-lsw",
["Litzlitz"] = "lzl",
["Lizu"] = "sit-liz",
["Lo-Toga"] = "lht",
["Loarki"] = "lrk",
["Lobala"] = "loq",
["Lobi"] = "lob",
["Lodhi"] = "lbm",
["Logba"] = "lgq",
["Logo"] = "log",
["Logol"] = "lof",
["Logooli"] = "rag",
["Logorik"] = "liu",
["Lokaa"] = "yaz",
["Loko"] = "lok",
["Lokoya"] = "lky",
["Lola"] = "lcd",
["Lolak"] = "llq",
["Lole"] = "llg",
["Lolo"] = "llb",
["Loloda"] = "loa",
["Lolopo"] = "ycl",
["Loma"] = "lom",
["Lomaiviti"] = "lmv",
["Lomakka"] = "loi",
["Lomavren"] = "rmi",
["Lombi"] = "lmi",
["Lombo"] = "loo",
["Lomwe"] = "ngl",
["Loncong"] = "lce",
["Long Phuri Naga"] = "lpn",
["Long Wat"] = "ttw",
["Longgu"] = "lgu",
["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",
["Loun"] = "lox",
["Loup A"] = "xlo",
["Loup B"] = "xlb",
["Lovono"] = "vnk",
["Lower Burdekin"] = "xbb",
["Lower Chehalis"] = "cea",
["Lower Grand Valley Dani"] = "dni",
["Lower Nossob"] = "nsb",
["Lower Southern Aranda"] = "axl",
["Lower Ta'oih"] = "tto",
["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",
["Lugbara"] = "lgg",
["Luguru"] = "ruf",
["Luhu"] = "lcq",
["Luhya"] = "luy",
["Luimbi"] = "lum",
["Luiseño"] = "lui",
["Lukpa"] = "dop",
["Lule"] = "ule",
["Lumba-Yakkha"] = "luu",
["Lumbee"] = "lmz",
["Lumbu"] = "lup",
["Lumun"] = "lmd",
["Lun Bawang"] = "lnd",
["Luna"] = "luj",
["Lunanakha"] = "luk",
["Lunda"] = "lun",
["Lungga"] = "lga",
["Luo"] = "luo",
["Luopohe Hmong"] = "hml",
["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",
["Luyana"] = "lyn",
["Lwalu"] = "lwa",
["Lwel"] = "lvl",
["Lycian"] = "xlc",
["Lydian"] = "xld",
["Lyélé"] = "lee",
["Láadan"] = "ldn",
["Láá Láá Bwamu"] = "bwj",
["Löyöp"] = "urr",
["Ma"] = "msj",
["Ma Manda"] = "skc",
["Ma'anyan"] = "mhy",
["Ma'di"] = "mhi",
["Ma'ya"] = "slz",
["Maaka"] = "mew",
["Maale"] = "mdy",
["Maay"] = "ymm",
["Maba"] = "mqa",
["Mabaale"] = "mmz",
["Mabaan"] = "mfz",
["Mabaka Valley Kalinga"] = "kkg",
["Mabire"] = "muj",
["Maca"] = "mca",
["Macaguaje"] = "mcl",
["Macaguán"] = "mbn",
["Macau Pidgin Portuguese"] = "crp-mpp",
["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",
["Magdalena Peñasco Mixtec"] = "xtm",
["Magiyi"] = "gmg",
["Magoma"] = "gmx",
["Magori"] = "zgr",
["Magɨ"] = "gkd",
["Mahali"] = "mjx",
["Mahasu Pahari"] = "bfz",
["Mahican"] = "mjy",
["Mahongwe"] = "mhb",
["Mahou"] = "mxx",
["Maiadomu"] = "mzz",
["Maiani"] = "tnh",
["Maii"] = "mmm",
["Mailu"] = "mgu",
["Maindo"] = "cwb",
["Maipure"] = "awd-mpr",
["Mairasi"] = "zrs",
["Maisin"] = "mbq",
["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",
["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 Paharia"] = "mkb",
["Mala (New Guinea)"] = "ped",
["Mala (Nigeria)"] = "ruy",
["Mala Malasar"] = "ima",
["Malaccan Creole Malay"] = "ccm",
["Malalamai"] = "mmt",
["Malalí"] = "sai-mal",
["Malango"] = "mln",
["Malankuravan"] = "mjo",
["Malapandaram"] = "mjp",
["Malaryan"] = "mjq",
["Malas"] = "mkr",
["Malasanga"] = "mqz",
["Malasar"] = "ymr",
["Malavedan"] = "mjr",
["Malawi Lomwe"] = "lon",
["Malawian Sign Language"] = "lws",
["Malayic Dayak"] = "xdy",
["Malaynon"] = "mlz",
["Malaysian Sign Language"] = "xml",
["Malba Birifor"] = "bfo",
["Male"] = "mdc",
["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 Sign Language"] = "mdl",
["Malua Bay"] = "mll",
["Malvi"] = "mup",
["Maléku Jaíka"] = "gut",
["Mam"] = "mam",
["Mama"] = "mma",
["Mamaa"] = "mhf",
["Mamaindé"] = "wmd",
["Mamanwa"] = "mmn",
["Mamara Senoufo"] = "myk",
["Mamasa"] = "mqj",
["Mambae"] = "mgm",
["Mambai"] = "mcs",
["Mamboru"] = "mvd",
["Mambwe-Lungu"] = "mgr",
["Mampruli"] = "maw",
["Mamuju"] = "mqx",
["Mamulique"] = "emm",
["Mamusi"] = "kdf",
["Mamvu"] = "mdi",
["Man Met"] = "mml",
["มลายูแบบมานาโด"] = "xmm",
["Manam"] = "mva",
["Manambu"] = "mle",
["Manangba"] = "nmm",
["Manangkari"] = "znk",
["Manao"] = "awd-man",
["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",
["Mandeali"] = "mjl",
["Mander"] = "mqr",
["Mandingo"] = "man",
["Mandinka"] = "mnk",
["Mandjak"] = "mfv",
["Mandobo Atas"] = "aax",
["Mandobo Bawah"] = "bwp",
["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",
["Manikion"] = "mnx",
["Manipa"] = "mqp",
["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",
["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",
["Maranungku"] = "zmr",
["Mararit"] = "mgb",
["Maratino"] = "sai-mar",
["Marau"] = "mvr",
["Marawan"] = "awd-mar",
["Marba"] = "mpg",
["Marenje"] = "vmr",
["Marfa"] = "mvu",
["Margany"] = "zmc",
["Marghi South"] = "mfm",
["Margi"] = "mrt",
["Maria"] = "mds",
["Mariaté"] = "awd-mrt",
["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",
["Marsian"] = "ims",
["Martha's Vineyard Sign Language"] = "mre",
["Marti Ke"] = "zmg",
["Martu Wangka"] = "mpj",
["Martuthunira"] = "vma",
["Marúbo"] = "mzr",
["Masaba"] = "myx",
["Masadiit Itneg"] = "tis",
["Masakará"] = "sai-msk",
["Masalit"] = "mls",
["Masana"] = "mcn",
["Masbate Sorsogon"] = "bks",
["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 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",
["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"] = "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",
["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 Cornish"] = "cnx",
["Middle Kannada"] = "dra-mkn",
["Middle Median"] = "xme-mid",
["Middle Scots"] = "gmw-msc",
["Middle Watut"] = "mpl",
["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",
["Mina"] = "hna",
["Minaean"] = "inm",
["Minang"] = "xrg",
["Minaveha"] = "mvn",
["Minderico"] = "drc",
["Mindiri"] = "mpn",
["Mingang Doso"] = "mko",
["Mingo"] = "iro-min",
["Minica Huitoto"] = "hto",
["Minidien"] = "wii",
["Minigir"] = "vmg",
["Minjungbal"] = "xjb",
["Minkin"] = "xxm",
["Minokok"] = "mqq",
["Minriq"] = "mnq",
["Mintil"] = "mzt",
["Miraya Bikol"] = "rbl",
["Mire"] = "mvh",
["Mirgan"] = "zrg",
["Miriti"] = "mmv",
["Miriwoong Sign Language"] = "rsm",
["Miriwung"] = "mep",
["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",
["Miyobe"] = "soy",
["Mlabri"] = "mra",
["Mlahsö"] = "lhs",
["Mlap"] = "kja",
["Mlomp"] = "mlo",
["Mmaala"] = "mmu",
["Mmani"] = "buy",
["Mmen"] = "bfm",
["Mo"] = "wkd",
["Mo'da"] = "gbn",
["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",
["Moken"] = "mwt",
["Mokerang"] = "mft",
["Moklen"] = "mkm",
["Mokole"] = "mkl",
["Mokpwe"] = "bri",
["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",
["Monastic Sign Language"] = "mzg",
["Mondropolon"] = "npn",
["Mondé"] = "mnd",
["Mongghul"] = "mjg-mgl",
["Mongo"] = "lol",
["Mongol"] = "mgt",
["Mongolian Sign Language"] = "msr",
["Mongondow"] = "mog",
["Moni"] = "mnz",
["Monimbo"] = "mom",
["Mono (California)"] = "mnr",
["Mono (Cameroon)"] = "mru",
["Mono (Congo)"] = "mnh",
["Monom"] = "moo",
["Monsang Naga"] = "nmh",
["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",
["Moro"] = "mor",
["Moroccan Amazigh"] = "zgh",
["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",
["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",
["Musar"] = "mmi",
["Musasa"] = "smm",
["Musey"] = "mse",
["Musgu"] = "mug",
["Muskum"] = "mje",
["Musom"] = "msu",
["Mussau-Emira"] = "emi",
["Muthuvan"] = "muv",
["Mutu"] = "tuc",
["Muya"] = "mvm",
["Muyang"] = "muy",
["Muyuw"] = "myw",
["Muzi"] = "ymz",
["Muzo"] = "sai-muz",
["Mvanip"] = "mcj",
["Mvuba"] = "mxh",
["Mwaghavul"] = "sur",
["Mwali Comorian"] = "wlc",
["Mwan"] = "moa",
["Mwatebu"] = "mwa",
["Mwera"] = "mwe",
["Mwerlap"] = "mrm",
["Mwimbi-Muthambi"] = "mws",
["Mwotlap"] = "mlv",
["Myene"] = "mye",
["Mysian"] = "yms",
["Mzieme Naga"] = "nme",
["Mághdì"] = "gmd",
["Mün Chin"] = "mwq",
["Mündü"] = "muh",
["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",
["Nai"] = "bio",
["Najdi Arabic"] = "ars",
["Naka'ela"] = "nae",
["Nakai"] = "nkj",
["Nakame"] = "nib",
["Nakanai"] = "nak",
["Nakara"] = "nck",
["Nake"] = "nbk",
["Naki"] = "mff",
["Nakwi"] = "nax",
["Nalca"] = "nlc",
["Nali"] = "nss",
["Nalik"] = "nal",
["Nalu"] = "naj",
["Nalögo"] = "nlz",
["Namakura"] = "nmk",
["Namat"] = "nkm",
["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",
["Nanerigé Sénoufo"] = "sen",
["Nanga Dama Dogon"] = "nzz",
["Nankina"] = "nnk",
["Nanti"] = "cox",
["Nanticoke"] = "nnt",
["Nanubae"] = "afk",
["Naolan"] = "nai-nao",
["Napu"] = "npy",
["Nar Phu"] = "npa",
["Nara"] = "nrb",
["Narak"] = "nac",
["Narango"] = "nrg",
["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",
["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",
["Nedebang"] = "nec",
["Nefamese"] = "nef",
["Nefusa"] = "jbn",
["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",
["Nepali Kurux"] = "kxl",
["Nete"] = "net",
["Neve'ei"] = "vnm",
["Neverver"] = "lgk",
["New River Shasta"] = "nai-nrs",
["New Zealand Sign Language"] = "nzs",
["Neyo"] = "ney",
["Nez Perce"] = "nez",
["Nga La"] = "hlt",
["Ngaanyatjarra"] = "ntj",
["Ngadha"] = "nxg",
["Ngadjunmaya"] = "nju",
["Ngadjuri"] = "jui",
["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",
["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",
["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",
["Noiri"] = "noi",
["Nokuku"] = "nkk",
["Nomaande"] = "lem",
["Nomane"] = "nof",
["Nomatsiguenga"] = "not",
["Nomlaki"] = "nol",
["Nomu"] = "noh",
["Nonuya"] = "noj",
["Nooksack"] = "nok",
["Noon"] = "snf",
["Noone"] = "nhu",
["Nootka"] = "nuk",
["Nopala Chatino"] = "cya",
["Noric"] = "nrc",
["Norn"] = "nrn",
["Norra"] = "nrr",
["North Ambrym"] = "mmg",
["North Asmat"] = "nks",
["North Awyu"] = "yir",
["North Babar"] = "bcd",
["North Boma"] = "boh",
["North Central Mixe"] = "neq",
["North Efate"] = "llp",
["North Fali"] = "fll",
["North Giziga"] = "gis",
["North Levantine Arabic"] = "apc",
["North Marquesan"] = "mrq",
["North Mofu"] = "mfk",
["มลายูแบบโมลุกกะเหนือ"] = "max",
["North Muyu"] = "kti",
["North Nuaulu"] = "nni",
["North Picene"] = "nrp",
["North Slavey"] = "scs",
["North Tairora"] = "tbg",
["North Tanna"] = "tnn",
["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 Bontoc"] = "rbk",
["Northern Catanduanes Bicolano"] = "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 Khanty"] = "kca-nor",
["Northern Kissi"] = "kqs",
["Northern Lorung"] = "lbr",
["Northern Luri"] = "lrc",
["Northern Mansi"] = "mns-nor",
["Northern Mashan Hmong"] = "hmp",
["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 Pomo"] = "pej",
["Northern Puebla Nahuatl"] = "ncj",
["Northern Pumi"] = "pmi",
["Northern Qiandong Miao"] = "hea",
["Northern Qiang"] = "cng",
["Northern Rengma Naga"] = "nnl",
["Northern Roglai"] = "rog",
["Northern Saharan Berber"] = "mzb",
["Northern Selkup"] = "sel-nor",
["Northern Sierra Miwok"] = "nsq",
["Northern Subanen"] = "stb",
["Northern Tarahumara"] = "thh",
["Northern Tepehuan"] = "ntp",
["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",
["Northwestern Tamang"] = "tmk",
["Norwegian Sign Language"] = "nsl",
["Notre"] = "bly",
["Notsi"] = "ncf",
["Nottoway"] = "ntw",
["Nottoway-Meherrin"] = "nwy",
["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",
["Nupbikha"] = "npb",
["Nupe"] = "nup",
["Nusa Laut"] = "nul",
["Nusu"] = "nuf",
["Nutabe"] = "cba-nut",
["Nyabwa"] = "nwb",
["Nyagrong Minyag"] = "ero-nya",
["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 Senoufo"] = "sev",
["Nyaturu"] = "rim",
["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ü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",
["Ocotepec Mixtec"] = "mie",
["Ocotlán Zapotec"] = "zac",
["Od"] = "odk",
["Odiai"] = "bhf",
["Odoodee"] = "kkc",
["Odual"] = "odu",
["Odut"] = "oda",
["Ofayé"] = "opy",
["Ofo"] = "ofo",
["Ogbah"] = "ogc",
["Ogbia"] = "ogb",
["Ogbogolo"] = "ogg",
["Ogbronuagum"] = "ogu",
["Ogea"] = "eri",
["Oirata"] = "oia",
["Ojitlán Chinantec"] = "chj",
["Okanagan"] = "oka",
["Okiek"] = "oki",
["Oko-Eni-Osayen"] = "oks",
["Oko-Juwoi"] = "okj",
["Okobo"] = "okb",
["Okodia"] = "okd",
["Okolod"] = "kqv",
["Okpamheri"] = "opa",
["Okpe (Northwestern Edo)"] = "okx",
["Okpe (Southwestern Edo)"] = "oke",
["Okpela"] = "atg",
["Oksapmin"] = "opm",
["Oku"] = "oku",
["Okwanuchu"] = "nai-okw",
["Old Awadhi"] = "inc-oaw",
["Old Gutnish"] = "gmq-ogt",
["Old Kannada"] = "dra-okn",
["Old Kentish Sign Language"] = "okl",
["Old Komi"] = "urj-koo",
["Old Median"] = "xme-old",
["Old Navarro-Aragonese"] = "roa-ona",
["Old Novgorodian"] = "zle-ono",
["Old Prussian"] = "prg",
["รูซินเก่า"] = "zle-ort",
["อาหรับใต้เก่า"] = "sem-srb",
["Old Sundanese"] = "osn",
["Old Tati"] = "xme-ott",
["Old Telugu"] = "dra-ote",
["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",
["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",
["Ontenu"] = "ont",
["Ontong Java"] = "ojv",
["Oorlams"] = "oor",
["Opao"] = "opo",
["Opata"] = "opt",
["Opuuo"] = "lgn",
["Opón"] = "sai-opo",
["Oraon Sadri"] = "sdr",
["Orejón"] = "ore",
["Oring"] = "org",
["Orizaba Nahuatl"] = "nlv",
["Orléanais"] = "roa-orl",
["Ormu"] = "orz",
["Ormuri"] = "oru",
["Oro"] = "orx",
["Oro Win"] = "orw",
["Oroch"] = "oac",
["Oroha"] = "ora",
["Orok"] = "oaa",
["Orokaiva"] = "okv",
["Oroko"] = "bdu",
["Orokolo"] = "oro",
["Oroqen"] = "orh",
["Orowe"] = "bpk",
["Oruma"] = "orr",
["Orya"] = "ury",
["Osage"] = "osa",
["Osamayi"] = "syx",
["Osatu"] = "ost",
["Oscan"] = "osc",
["Ososo"] = "oso",
["Ot Danum"] = "otd",
["Otank"] = "uta",
["Oti"] = "oti",
["Otomaco"] = "sai-oto",
["Otoro"] = "otr",
["Ottawa"] = "otw",
["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-Hng"] = "pha",
["Paamese"] = "pma",
["Paasaal"] = "sig",
["Pacahuara"] = "pcp",
["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",
["Pajapan Nahuatl"] = "nhp",
["Pak-Tong"] = "pkg",
["Pakanha"] = "pkn",
["Pakistan Sign Language"] = "pks",
["Paku"] = "pku",
["Paku Karen"] = "jkp",
["Pal"] = "abw",
["Palaic"] = "plq",
["Palaka Senoufo"] = "plr",
["Palantla Chinantec"] = "cpa",
["Palawan Batak"] = "bya",
["Paleni"] = "pnl",
["Palenquero"] = "pln",
["Palewyami Yokuts"] = "yok-ply",
["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",
["Pangwa"] = "pbr",
["Panim"] = "pnr",
["Paniya"] = "pcg",
["Pankararé"] = "pax",
["Pankararú"] = "paz",
["Pankhu"] = "pkh",
["Pannei"] = "pnc",
["Panobo"] = "pno",
["Panyi Bai"] = "bfc",
["Panyjima"] = "pnw",
["Panzaleo"] = "sai-pnz",
["Pao"] = "ppa",
["Papantla Totonac"] = "top",
["Papapana"] = "ppn",
["Papar"] = "dpp",
["Papasena"] = "pas",
["Papel"] = "pbo",
["Papi"] = "ppe",
["Papora"] = "ppu",
["Papua New Guinean Sign Language"] = "pgz",
["Papuan Malay"] = "pmy",
["Papuma"] = "ppm",
["Para Naga"] = "pzn",
["Parachi"] = "prc",
["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",
["พาร์เทีย"] = "xpr",
["Parya"] = "paq",
["Pará Gavião"] = "gvp",
["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",
["Pattapu"] = "ptq",
["Patwin"] = "pwi",
["Paulohi"] = "plh",
["Paumarí"] = "pad",
["Paunaka"] = "pnk",
["Pauri Bareli"] = "bfb",
["Pauserna"] = "psm",
["Pawaia"] = "pwa",
["Pawnee"] = "paw",
["Payaguá"] = "sai-pyg",
["Paynamar"] = "pmr",
["Pazeh"] = "pzh",
["Pe"] = "pai",
["ปอร์"] = "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",
["Penobscot"] = "aaq",
["Penrhyn"] = "pnh",
["Pentlatch"] = "ptw",
["Perai"] = "wet",
["Peranakan Indonesian"] = "pea",
["Perema"] = "wom",
["Pericú"] = "nai-per",
["Pero"] = "pip",
["Persian Sign Language"] = "psc",
["Peruvian Sign Language"] = "prl",
["Petapa Zapotec"] = "zpe",
["Petats"] = "pex",
["Petjo"] = "pey",
["Peñoles Mixtec"] = "mil",
["Phai"] = "prt",
["Phala"] = "ypa",
["Phana'"] = "phq",
["Phangduwali"] = "phw",
["Phende"] = "pem",
["Philippine Sign Language"] = "psp",
["Philistine"] = "mis-phi",
["Phimbi"] = "phm",
["Phola"] = "ypg",
["Pholo"] = "yip",
["Phom"] = "nph",
["Phong-Kniang"] = "pnx",
["Phrygian"] = "xpg",
["Phudagi"] = "phd",
["Phuie"] = "pug",
["Phukha"] = "phh",
["Phuma"] = "ypm",
["Phuong"] = "phg",
["Phupa"] = "ypp",
["Phupha"] = "yph",
["Phuthi"] = "bnt-phu",
["Phuza"] = "ypz",
["Piamatsina"] = "ptr",
["Piame"] = "pin",
["Piapoco"] = "pio",
["Piaroa"] = "pid",
["Pichinglis"] = "fpe",
["Pichis Ashéninka"] = "cpu",
["Pictish"] = "xpi",
["Picuris"] = "nai-pic",
["Pidgin Delaware"] = "dep",
["Pidgin Iha"] = "ihb",
["Pidgin Onin"] = "onx",
["Pijao"] = "pij",
["Pije"] = "piz",
["Pijin"] = "pis",
["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",
["Pirahã"] = "myp",
["Piratapuyo"] = "pir",
["Pirlatapa"] = "bxi",
["Piro"] = "pie",
["Pirriya"] = "xpa",
["Pisabo"] = "pig",
["Pisaflores Tepehua"] = "tpp",
["Piscataway"] = "psy",
["Pisidian"] = "xps",
["Pitcairn-Norfolk"] = "pih",
["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",
["Playero"] = "gob",
["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 Sign Language"] = "pso",
["Polonombauk"] = "plb",
["Pom"] = "pmo",
["Ponam"] = "ncc",
["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 Sign Language"] = "psr",
["Potawatomi"] = "pot",
["Potiguára"] = "pog",
["Poumei Naga"] = "pmx",
["Pouye"] = "bye",
["Powari"] = "pwr",
["Powhatan"] = "pim",
["Poyanáwa"] = "pyn",
["Prasuni"] = "prn",
["Pre-Samnite"] = "itc-psa",
["Primitive Irish"] = "pgl",
["Principense"] = "pre",
["Proto-Abkhaz-Abaza"] = "cau-abz-pro",
["Proto-Amuesha-Chamicuro"] = "awd-amc-pro",
["Proto-Andian"] = "cau-and-pro",
["Proto-Apachean"] = "apa-pro",
["Proto-Arawa"] = "auf-pro",
["Proto-Arawak"] = "awd-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-Avaro-Andian"] = "cau-ava-pro",
["Proto-Bahnaric"] = "mkh-ban-pro",
["Proto-Bai"] = "sit-bai-pro",
["Proto-Batak"] = "btk-pro",
["Proto-Binanderean"] = "paa-bin-pro",
["Proto-Bodish"] = "sit-bdi-pro",
["Proto-Bongo-Bagirmi"] = "csu-bba-pro",
["Proto-Boran"] = "sai-bor-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-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-Cerrado"] = "sai-cer-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-Eastern Jebel"] = "sdv-eje-pro",
["Proto-Eastern Oti-Volta"] = "nic-eov-pro",
["Proto-Edekiri"] = "alv-edk-pro",
["Proto-Edoid"] = "alv-edo-pro",
["Proto-Ersuic"] = "sit-ers-pro",
["Proto-Eskimo-Aleut"] = "esx-pro",
["Proto-Fali"] = "alv-fli-pro",
["Proto-Gbaya"] = "gba-pro",
["Proto-Grassfields"] = "nic-grf-pro",
["Proto-Guang"] = "alv-gng-pro",
["Proto-Gurunsi"] = "nic-gns-pro",
["Proto-Halmahera-Cenderawasih"] = "poz-hce-pro",
["Proto-Heiban"] = "alv-hei-pro",
["Proto-Highland East Cushitic"] = "cus-hec-pro",
["Proto-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-Iroquoian"] = "iro-pro",
["Proto-Iwaidjan"] = "aus-wdj-pro",
["Proto-Jukunoid"] = "nic-jkn-pro",
["Proto-Jê"] = "sai-jee-pro",
["Proto-Kadu"] = "qfa-kad-pro",
["Proto-Kalapuyan"] = "nai-klp-pro",
["Proto-Kam-Sui"] = "qfa-kms-pro",
["Proto-Kampa"] = "awd-kmp-pro",
["Proto-Kamta"] = "inc-krd-pro",
["Proto-Katuic"] = "mkh-kat-pro",
["Proto-Kham"] = "sit-kha-pro",
["Proto-Khanty"] = "kca-pro",
["Proto-Kho-Bwa"] = "sit-khb-pro",
["Proto-Khoe"] = "khi-kho-pro",
["Proto-Koman"] = "ssa-kom-pro",
["Proto-Komisenian"] = "ira-kms-pro",
["Proto-Kru"] = "kro-pro",
["Proto-Kuki-Chin"] = "tbq-kuk-pro",
["Proto-Kuliak"] = "ssa-klk-pro",
["Proto-Kwa"] = "alv-kwa-pro",
["Proto-Lalo"] = "tbq-lal-pro",
["Proto-Lezghian"] = "cau-lzg-pro",
["Proto-Lower Cross River"] = "nic-lcr-pro",
["Proto-Maidun"] = "nai-mdu-pro",
["Proto-Mande"] = "dmn-pro",
["Proto-Mangbetu"] = "csu-maa-pro",
["Proto-Mansi"] = "mns-pro",
["Proto-Mari"] = "chm-pro",
["Proto-Masa"] = "cdc-mas-pro",
["Proto-Mazatec"] = "omq-maz-pro",
["Proto-Medo-Parthian"] = "ira-mpr-pro",
["Proto-Mixe-Zoque"] = "nai-miz-pro",
["Proto-Mixtec"] = "omq-mxt-pro",
["Proto-Mixtecan"] = "omq-mix-pro",
["Proto-Mordvinic"] = "urj-mdv-pro",
["Proto-Mumuye"] = "alv-mum-pro",
["Proto-Munji-Yidgha"] = "ira-mny-pro",
["Proto-Muskogean"] = "nai-mus-pro",
["Proto-Na-Dene"] = "xnd-pro",
["Proto-Naish"] = "sit-nas-pro",
["Proto-Nawiki"] = "awd-nwk-pro",
["Proto-Nilo-Saharan"] = "ssa-pro",
["Proto-Nilotic"] = "sdv-nil-pro",
["Proto-North Halmahera"] = "paa-nha-pro",
["Proto-North Iroquoian"] = "iro-nor-pro",
["Proto-Northern Jê"] = "sai-nje-pro",
["Proto-Northern Naga"] = "sit-kon-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-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-Pama-Nyungan"] = "aus-pam-pro",
["Proto-Paresi-Waura"] = "awd-prw-pro",
["แพริกดั้งเดิม"] = "mkh-pea-pro",
["Proto-Plateau"] = "nic-plt-pro",
["Proto-Plateau Penutian"] = "nai-plp-pro",
["Proto-Pomo"] = "nai-pom-pro",
["Proto-Puroik"] = "sit-khp-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-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-Shughni-Roshani"] = "ira-shr-pro",
["Proto-Shughni-Yazghulami"] = "ira-shy-pro",
["Proto-Shughni-Yazghulami-Munji"] = "ira-sym-pro",
["Proto-Siouan"] = "sio-pro",
["Proto-Siouan-Catawban"] = "nai-sca-pro",
["Proto-Songhay"] = "son-pro",
["Proto-Sotho-Tswana"] = "bnt-sts-pro",
["Proto-South Cushitic"] = "cus-sou-pro",
["Proto-Southern Jê"] = "sai-sje-pro",
["Proto-Ta-Arawak"] = "awd-taa-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-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-Ubangian"] = "nic-ubg-pro",
["Proto-Upper Cross River"] = "nic-ucr-pro",
["Proto-Utian"] = "nai-utn-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-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",
["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",
["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",
["Puyo-Paekche"] = "xpp",
["Puyuma"] = "pyu",
["Pwaamèi"] = "pme",
["Pwapwâ"] = "pop",
["Pyapun"] = "pcw",
["Pye Krumen"] = "pye",
["Pyemmairre"] = "xpb",
["Pyen"] = "pyy",
["Pykobjê"] = "sai-pyk",
["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",
["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",
["ระแด"] = "rad",
["Raetic"] = "xrr",
["Raga"] = "lml",
["Rahambuu"] = "raz",
["Rajah Kabunsuwan Manobo"] = "mqk",
["Raji"] = "rji",
["Rajong"] = "rjg",
["Rajput Garasia"] = "gra",
["Rakahanga-Manihiki"] = "rkh",
["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",
["Rapoisi"] = "kyx",
["Rapting"] = "rpt",
["Rara Bakati'"] = "lra",
["Rasawa"] = "rac",
["Ratagnon"] = "btn",
["Ratahan"] = "rth",
["Rathawi"] = "rtw",
["Rathwi Bareli"] = "bgd",
["Raute"] = "rau",
["Ravula"] = "yea",
["Rawa"] = "rwo",
["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",
["ฟรังโกเนียแบบไรน์"] = "gmw-rfr",
["Riang"] = "ril",
["Riantana"] = "ran",
["Ribun"] = "rir",
["Rigwe"] = "iri",
["Rikbaktsa"] = "rkb",
["Rincón Zapotec"] = "zar",
["Ringgou"] = "rgu",
["Ririo"] = "rri",
["Ritarungo"] = "rit",
["Riung"] = "riu",
["Riverain Sango"] = "snj",
["Rogo"] = "rod",
["Roma"] = "rmm",
["Romam"] = "rmx",
["Romanian Sign Language"] = "rms",
["Romano-Greek"] = "rge",
["Romano-Serbian"] = "rsb",
["Romanova"] = "rmv",
["Romblomanon"] = "rol",
["Rombo"] = "rof",
["Romkun"] = "rmk",
["Ron"] = "cla",
["Ronga"] = "rng",
["Rongga"] = "ror",
["Rongmei Naga"] = "nbu",
["Rongpo"] = "rnp",
["Ronji"] = "roe",
["Roon"] = "rnn",
["Roria"] = "rga",
["Roro"] = "rro",
["Rotokas"] = "roo",
["Rotuman"] = "rtm",
["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",
["Rutul"] = "rut",
["Ruuli"] = "ruc",
["Ruwund"] = "rnd",
["Rwa"] = "rwk",
["Rwandan Sign Language"] = "rsn",
["Réunion Creole French"] = "rcf",
["Sa"] = "sax",
["Sa'a"] = "apb",
["Sa'ban"] = "snv",
["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",
["Saep"] = "spd",
["Safaitic"] = "sem-saf",
["Safaliba"] = "saf",
["Safeyoka"] = "apz",
["Safwa"] = "sbk",
["Sagala"] = "sbm",
["Sagalla"] = "tga",
["Sahaptin"] = "nai-spt",
["Sahu"] = "saj",
["Saisiyat"] = "xsy",
["Sajau Basap"] = "sjb",
["Sakachep"] = "sch",
["Sakam"] = "skm",
["Sakao"] = "sku",
["Sakata"] = "skt",
["Sake"] = "sak",
["Sala"] = "shq",
["Salampasu"] = "slx",
["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",
["Sambalpuri"] = "spv",
["Sambe"] = "xab",
["Samberigi"] = "ssx",
["Samburu"] = "saq",
["Samei"] = "smh",
["Samo"] = "smq",
["Samoan Plantation Pidgin"] = "crp-spp",
["Samogitian"] = "sgs",
["Samosa"] = "swm",
["Sampang"] = "rav",
["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",
["Sangtam Naga"] = "nsa",
["Sangu (Gabon)"] = "snq",
["Sangu (Tanzania)"] = "sbp",
["Sani"] = "ysn",
["Sanie"] = "ysy",
["Saniyo-Hiyewe"] = "sny",
["Sankaran Maninka"] = "msc",
["Sansi"] = "ssi",
["Santa Catarina Albarradas Zapotec"] = "ztn",
["Santa Inés Ahuatempan Popoloca"] = "pca",
["Santa Inés Yatzechi Zapotec"] = "zpn",
["Santa Lucía Monteverde Mixtec"] = "mdv",
["Santa María La Alta Nahuatl"] = "nhz",
["Santa María Quiegolani Zapotec"] = "zpi",
["Santa María Zacatepec Mixtec"] = "mza",
["Santa Teresa Cora"] = "cok",
["Santiago Xanica Zapotec"] = "zpr",
["Santo Domingo Albarradas Zapotec"] = "zas",
["Sanumá"] = "xsu",
["Sanxiang Min"] = "nan-zsh",
["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",
["ซารามักกา"] = "srm",
["Sarangani Blaan"] = "bps",
["Sarangani Manobo"] = "mbs",
["Sarasira"] = "zsa",
["Saraveca"] = "sar",
["Sarawak Malay"] = "poz-sml",
["Sarikoli"] = "srh",
["Sarli"] = "sdf",
["Sartang"] = "onp",
["Sarua"] = "swy",
["Sarudu"] = "sdu",
["Saruga"] = "sra",
["Sasak"] = "sas",
["Sasaru"] = "sxs",
["Satawalese"] = "stw",
["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",
["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",
["Seim"] = "sim",
["Seimat"] = "ssg",
["Seit-Kaitetu"] = "hik",
["Sekani"] = "sek",
["Sekapan"] = "skp",
["Sekar"] = "skz",
["Seke"] = "skj",
["Sekele"] = "vaj",
["Seki"] = "syi",
["Seko Padang"] = "skx",
["Seko Tengah"] = "sko",
["Sekpele"] = "lip",
["Selangor Sign Language"] = "kgi",
["Selaru"] = "slu",
["Selayar"] = "sly",
["Selee"] = "snw",
["Selepet"] = "spl",
["Selk'nam"] = "ona",
["Selonian"] = "sxl",
["Selungai Murut"] = "slg",
["Seluwasan"] = "sws",
["Sema"] = "nsm",
["Semandang"] = "sdm",
["Semaq Beri"] = "szc",
["Sembakung Murut"] = "sbr",
["Semelai"] = "sza",
["Semigallian"] = "xzm",
["Semimi"] = "etz",
["Semnam"] = "ssm",
["Semnani"] = "smy",
["Sempan"] = "xse",
["Sena"] = "seh",
["Senara Sénoufo"] = "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",
["Sepik Mari"] = "mbx",
["Sera"] = "sry",
["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",
["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",
["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",
["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",
["Shoo-Minda-Nye"] = "bcv",
["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",
["Siculo-Arabic"] = "sqr",
["Sidetic"] = "xsd",
["Sie"] = "erg",
["Sierra Leone Sign Language"] = "sgx",
["Sierra Negra Nahuatl"] = "nsu",
["Sierra de Juárez Zapotec"] = "zaa",
["Sighu"] = "sxe",
["Sihan"] = "snr",
["Sika"] = "ski",
["Sikaritai"] = "tty",
["Sikiana"] = "sik",
["Sikule"] = "skh",
["Sila"] = "slt",
["Silacayoapan Mixtec"] = "mks",
["Sileibi"] = "sbq",
["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",
["Sindhi Bhil"] = "sbn",
["Sindihui Mixtec"] = "xts",
["Singa"] = "sgm",
["Singapore Sign Language"] = "sls",
["Singpho"] = "sgp",
["Sinicahua Mixtec"] = "xti",
["Sininkere"] = "skq",
["Sinte Romani"] = "rmo",
["Sinyar"] = "sys",
["Sinúfana"] = "sai-sin",
["Sio"] = "xsi",
["Siona"] = "snn",
["Sipakapense"] = "qum",
["Sira"] = "swj",
["Siraya"] = "fos",
["Sirenik"] = "ysr",
["Siri"] = "sir",
["Siriano"] = "sri",
["Sirionó"] = "srq",
["Sirmauri"] = "srx",
["Siroi"] = "ssd",
["Sisaala"] = "sld",
["Sissano"] = "sso",
["Situ"] = "sit-sit",
["Siuslaw"] = "sis",
["Sivandi"] = "siy",
["Sivia Sign Language"] = "lsv",
["Siwai"] = "siw",
["Siwi"] = "siz",
["Siwu"] = "akp",
["Siyin Chin"] = "csy",
["Skagit"] = "ska",
["Skalvian"] = "svx",
["Ske"] = "ske",
["Skepi Creole Dutch"] = "skw",
["Skolt Sami"] = "sms",
["Skou"] = "skv",
["Slavomolisano"] = "svm",
["Slovakian Sign Language"] = "svk",
["Small Flowery Miao"] = "sfm",
["Smärky Kanum"] = "kxq",
["Snohomish"] = "sno",
["So'a"] = "ssq",
["Sobei"] = "sob",
["Sochiapam Chinantec"] = "cso",
["Soga"] = "xog",
["Sogdian"] = "sog",
["Sok"] = "skk",
["Sokna"] = "swn",
["Soko"] = "soc",
["Sokoro"] = "sok",
["Solano"] = "xso",
["Soli"] = "sby",
["Solombala English"] = "crp-slb",
["Solon"] = "tuw-sol",
["Solong"] = "aaw",
["Solos"] = "sol",
["Som"] = "smc",
["Somba-Siawari"] = "bmu",
["Somra"] = "ntx",
["Somrai"] = "sor",
["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",
["Sou"] = "sqq",
["South African Sign Language"] = "sfs",
["South Awyu"] = "aws",
["South Boma"] = "bnt-sbo",
["South Central Banda"] = "lnl",
["South Central Dinka"] = "dib",
["South Efate"] = "erk",
["South Fali"] = "fal",
["South Giziga"] = "giz",
["South Lembata"] = "lmf",
["South Marquesan"] = "mqm",
["South Muyu"] = "kts",
["South Nuaulu"] = "nxl",
["South Picene"] = "spx",
["South Slavey"] = "xsl",
["South Tairora"] = "omw",
["South Ucayali Ashéninka"] = "cpy",
["South Watut"] = "mcy",
["Southeast Ambrym"] = "tvk",
["Southeast Babar"] = "vbb",
["Southeast Ijo"] = "ijs",
["Southeast Pashayi"] = "psi",
["Southeast Tasmanian"] = "xpf",
["Southeastern Dinka"] = "dks",
["Southeastern Ixtlán Zapotec"] = "zpd",
["Southeastern Kolami"] = "nit",
["Southeastern Nochixtlán Mixtec"] = "mxy",
["Southeastern Pomo"] = "pom",
["Southeastern Puebla Nahuatl"] = "npl",
["Southeastern Tarahumara"] = "tcu",
["Southeastern Tepehuan"] = "stp",
["Southern Alta"] = "agy",
["Southern Bai"] = "bfs",
["Southern Birifor"] = "biv",
["Southern Bobo"] = "bwq",
["Southern Bontoc"] = "obk",
["Southern Carrier"] = "caf",
["Southern Catanduanes Bicolano"] = "bln",
["Southern Dagaare"] = "dga",
["Southern East Cree"] = "crj",
["Southern Ghale"] = "ghe",
["Southern Grebo"] = "grj",
["Southern Guiyang Hmong"] = "hmy",
["Southern Haida"] = "hax",
["Southern Hindko"] = "hnd",
["Southern Kalapuya"] = "sxk",
["Southern Kalinga"] = "ksc",
["Southern Khanty"] = "kca-sou",
["Southern Kissi"] = "kss",
["Southern Kiwai"] = "kjd",
["Southern Kurdish"] = "sdh",
["Southern Lolopo"] = "ysp",
["Southern Lorung"] = "lrr",
["Southern Luri"] = "luz",
["Southern Ma'di"] = "snm",
["Southern Mansi"] = "mns-sou",
["Southern Mashan Hmong"] = "hma",
["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 Pomo"] = "peq",
["Southern Puebla Mixtec"] = "mit",
["Southern Puget Sound Salish"] = "slh",
["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 Samo"] = "sbd",
["Southern Selkup"] = "sel-sou",
["Southern Sierra Miwok"] = "skd",
["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 Pashayi"] = "psh",
["Southwest Tanna"] = "nwi",
["Southwestern Bontoc"] = "vbk",
["Southwestern Dinka"] = "dik",
["Southwestern Fars"] = "fay",
["Southwestern Guiyang Hmong"] = "hmg",
["Southwestern Huishui Hmong"] = "hmh",
["Southwestern Nisu"] = "nsv",
["Southwestern Tamang"] = "tsf",
["Southwestern Tarahumara"] = "twr",
["Southwestern Tepehuan"] = "tla",
["Southwestern Tlaxiaco Mixtec"] = "meh",
["Sowa"] = "sww",
["Sowanda"] = "sow",
["Soyaltepec Mazatec"] = "vmp",
["Soyaltepec Mixtec"] = "vmq",
["Spanish Sign Language"] = "ssp",
["Spiti Bhoti"] = "spt",
["Spokane"] = "spo",
["Squamish"] = "squ",
["Sranan Tongo"] = "srn",
["Sri Lankan Creole Malay"] = "sci",
["Sri Lankan Sign Language"] = "sqs",
["Stau"] = "ero-tau",
["Stod Bhoti"] = "sbu",
["Stoney"] = "sto",
["Suabo"] = "szp",
["Suarmin"] = "seo",
["Suau"] = "swp",
["Suba"] = "sxb",
["Suba-Simbiti"] = "ssc",
["Subi"] = "xsj",
["Subiya"] = "sbs",
["Subtiaba"] = "sut",
["Sudest"] = "tgo",
["Suena"] = "sue",
["Suga"] = "sgi",
["Suganga"] = "sug",
["Sugut Dusun"] = "kzs",
["Suki"] = "sui",
["Suku"] = "sub",
["Sukuma"] = "suk",
["Sukur"] = "syk",
["Sukurum"] = "zsu",
["Sula"] = "szn",
["Sulka"] = "sua",
["Sulod"] = "srg",
["Suma"] = "sqm",
["Sumariup"] = "siv",
["Sumau"] = "six",
["Sumbawa"] = "smw",
["Sumbwa"] = "suw",
["Sumtu Chin"] = "csv",
["Sunam"] = "ssk",
["Sungwadaga"] = "mwo",
["Sungwadia"] = "mrb",
["Sunum"] = "ymn",
["Sunwar"] = "suz",
["Suoy"] = "syo",
["Supyire"] = "spp",
["Sur"] = "tdl",
["Surbakhal"] = "sbj",
["Suri"] = "suq",
["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",
["Swampy Cree"] = "csw",
["Swazi"] = "ss",
["Swedish Sign Language"] = "swl",
["Swiss-French Sign Language"] = "ssr",
["Swiss-German Sign Language"] = "sgg",
["Swiss-Italian Sign Language"] = "slf",
["Swo"] = "sox",
["Syenara Senoufo"] = "shz",
["Sácata"] = "sai-sac",
["São Paulo Kaingáng"] = "zkp",
["Sãotomense"] = "cri",
["Sìcìté Sénoufo"] = "sep",
["Sîshëë"] = "sih",
["Sô"] = "sss",
["T'en"] = "tct",
["Taabwa"] = "tap",
["Taba"] = "mky",
["Tabaa Zapotec"] = "zat",
["Tabancale"] = "sai-tab",
["Tabaru"] = "tby",
["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",
["Tagal Murut"] = "mvv",
["Tagbu"] = "tbm",
["Tagdal"] = "tda",
["Tagish"] = "tgx",
["Tagoi"] = "tag",
["Tagwana Senoufo"] = "tgw",
["Tahltan"] = "tht",
["Tai"] = "taw",
["Tai Hang Tong"] = "thc",
["Tai Hongjin"] = "tiz",
["Tai Loi"] = "tlq",
["Tai Long"] = "thi",
["Tai Pao"] = "tpo",
["Tai Thanh"] = "tmm",
["Tai Ya"] = "cuu",
["Taiap"] = "gpn",
["Taikat"] = "aos",
["Taimyr Pidgin Russian"] = "crp-tpr",
["Tainae"] = "ago",
["Tairuma"] = "uar",
["Taita"] = "dav",
["Taivoan"] = "tvx",
["Taiwan Sign Language"] = "tss",
["Taje"] = "pee",
["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",
["Tambunan Dusun"] = "kzt",
["Tami"] = "tmy",
["Tamki"] = "tax",
["Tamnim Citak"] = "tml",
["Tampias Lobu"] = "low",
["Tampuan"] = "tpu",
["Tampulma"] = "tpm",
["Tanacross"] = "tcb",
["Tanahmerah"] = "tcm",
["Tanapag"] = "tpv",
["Tanchangya"] = "tnv",
["Tandia"] = "tni",
["Tanema"] = "tnx",
["Tangale"] = "tan",
["Tanggu"] = "tgu",
["Tangkhul Naga"] = "nmf",
["Tangko"] = "tkx",
["Tangoa"] = "tgp",
["Tangsa"] = "nst",
["Tanguat"] = "tbs",
["Tangwang"] = "mis-tnw",
["Tanimbili"] = "tbe",
["Tanimuca-Retuarã"] = "tnc",
["Tanjijili"] = "uji",
["Tanudan Kalinga"] = "kml",
["Tanzanian Sign Language"] = "tza",
["Tapachultec"] = "nai-tap",
["Taparita"] = "sai-tpr",
["Tapayuna"] = "sai-tap",
["Tapeba"] = "tbb",
["Tapei"] = "afp",
["Tapieté"] = "tpj",
["Tapirapé"] = "taf",
["Tar Gula"] = "kcm",
["Tara Baka"] = "bdh",
["Tarairiú"] = "sai-trr",
["Tarantino"] = "roa-tar",
["Tarao"] = "tro",
["Taraon"] = "mhu",
["Tareng"] = "tgr",
["Tariana"] = "tae",
["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",
["Tataviam"] = "azc-tat",
["Tatuyo"] = "tav",
["Tauade"] = "ttd",
["Taulil"] = "tuh",
["Taungyo"] = "tco",
["Taupota"] = "tpa",
["Tause"] = "tad",
["Taushiro"] = "trr",
["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",
["Tayabas Ayta"] = "ayy",
["Taymanitic"] = "sem-tay",
["Tayo"] = "cks",
["Tchitchege"] = "tck",
["Tchumbuli"] = "bqa",
["Te'un"] = "tve",
["Teanu"] = "tkw",
["Tebul Sign Language"] = "tsy",
["Tebul Ure Dogon"] = "dtu",
["Tecpatlán Totonac"] = "tcw",
["Tedaga"] = "tuq",
["Tedim Chin"] = "ctd",
["Tee"] = "tkq",
["Tefaro"] = "tfo",
["Tegali"] = "ras",
["Tehit"] = "kps",
["Tehuelche"] = "teh",
["Teiwa"] = "twe",
["Tejalapan Zapotec"] = "ztt",
["Teke-Fuumu"] = "ifm",
["Teke-Kukuya"] = "kkw",
["Teke-Laali"] = "lli",
["Teke-Tege"] = "teg",
["Teke-Tsaayi"] = "tyi",
["Teke-Tyee"] = "tyx",
["Tektiteko"] = "ttc",
["Tela-Masbuar"] = "tvm",
["Telefol"] = "tlf",
["Teluti"] = "tlt",
["Tem"] = "kdh",
["Temascaltepec Nahuatl"] = "nhv",
["Tembé"] = "tqb",
["Teme"] = "tdo",
["Temein"] = "teq",
["Temi"] = "soz",
["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",
["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",
["Tereno"] = "ter",
["Teressa"] = "tef",
["Tereweng"] = "twg",
["Teribe"] = "tfr",
["Terik"] = "tec",
["Termanu"] = "twu",
["Ternateño"] = "tmg",
["Tese"] = "keg",
["Teshenawa"] = "twc",
["Tetela"] = "tll",
["Tetelcingo Nahuatl"] = "nhg",
["Tetete"] = "teb",
["Tetserret"] = "tez",
["Tetun Dili"] = "tdt",
["Teushen"] = "sai-teu",
["Teutila Cuicatec"] = "cut",
["Tewa"] = "tew",
["Texcatepec Otomi"] = "otx",
["Texistepec Popoluca"] = "poq",
["Texmelucan Zapotec"] = "zpz",
["Tezoatlán Mixtec"] = "mxb",
["Tha"] = "thy",
["Thachanadan"] = "thn",
["Thado Chin"] = "tcz",
["Thaiphum Chin"] = "cth",
["Thakali"] = "ths",
["Thamudic"] = "sem-tha",
["Thangal Naga"] = "nki",
["Thangmi"] = "thf",
["Thao"] = "ssf",
["Tharaka"] = "thk",
["Tharrgari"] = "dhr",
["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 Sign Language"] = "lsn",
["Ticuna"] = "tca",
["Tidaá Mixtec"] = "mtx",
["Tiemacèwè Bozo"] = "boo",
["Tiene"] = "tii",
["Tifal"] = "tif",
["Tigak"] = "tgc",
["Tigon Mbembe"] = "nza",
["Tii"] = "txq",
["Tijaltepec Mixtec"] = "xtl",
["Tikar"] = "tik",
["Tikopia"] = "tkp",
["Tilapa Otomi"] = "otl",
["Tillamook"] = "til",
["Tilquiapan Zapotec"] = "zts",
["Tilung"] = "tij",
["Tima"] = "tms",
["Timbe"] = "tim",
["Timor Pidgin"] = "tvy",
["Timote"] = "sai-tim",
["Timucua"] = "tjm",
["Timugon Murut"] = "tih",
["Tinani"] = "lbf",
["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",
["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",
["Tocho"] = "taz",
["Todrah"] = "tdr",
["Tofanma"] = "tlg",
["Tofin Gbe"] = "tfi",
["Togbo-Vara Banda"] = "tor",
["Togoyo"] = "tgy",
["Tojolabal"] = "toj",
["Toka-Leya"] = "dov",
["Tokano"] = "zuh",
["Tokelauan"] = "tkl",
["Toki Pona"] = "tok",
["Tol"] = "jic",
["Tolai"] = "ksd",
["Tolaki"] = "lbw",
["Tolomako"] = "tlm",
["Tolowa"] = "tol",
["Toloza"] = "ytl",
["Toma"] = "tod",
["Tomadino"] = "tdi",
["Tombelala"] = "ttp",
["Tombonuo"] = "txa",
["Tombulu"] = "tom",
["Tomini"] = "txm",
["Tommeginne"] = "xpv",
["Tommo So"] = "dto",
["Tomo Kan Dogon"] = "dtm",
["Tomoip"] = "tqp",
["Tondano"] = "tdn",
["Tonga (Malawi)"] = "tog",
["Tonga (Mozambique)"] = "toh",
["Tonga (Zambia)"] = "toi",
["Tongwe"] = "tny",
["Tonjon"] = "tjn",
["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",
["ครีโอลช่องแคบทอร์เรส"] = "tcs",
["Torricelli"] = "tei",
["Torricelli Yau"] = "yyu",
["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",
["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",
["Tsucuba"] = "cbq",
["Tsum"] = "ttz",
["Tsuut'ina"] = "srs",
["Tsuvadi"] = "tvd",
["Tsuvan"] = "tsh",
["Tswa"] = "tsc",
["Tswapong"] = "two",
["Tuamotuan"] = "pmt",
["Tuareg"] = "tmh",
["Tubar"] = "tbu",
["Tucano"] = "tuo",
["Tugen"] = "tuy",
["Tugun"] = "tzn",
["Tugutil"] = "tuj",
["Tukang Besi North"] = "khc",
["Tukang Besi South"] = "bhq",
["Tuki"] = "bag",
["Tukpa"] = "tpq",
["Tukudede"] = "tkd",
["Tukumanféd"] = "tkf",
["Tula"] = "tul",
["Tule-Kaweah Yokuts"] = "yok-tky",
["Tulehu"] = "tlu",
["Tulishi"] = "tey",
["Tulu-Bohuai"] = "rak",
["Tulua"] = "aus-tul",
["Tuma-Irumu"] = "iou",
["Tumak"] = "tmc",
["Tumbuka"] = "tum",
["Tumi"] = "kku",
["Tumleo"] = "tmq",
["Tumtum"] = "tbr",
["Tumulung Sisaala"] = "sil",
["Tundra Enets"] = "enh",
["Tundra Nenets"] = "yrk-tun",
["Tunen"] = "tvu",
["Tungag"] = "lcm",
["Tunggare"] = "trt",
["Tunia"] = "tug",
["Tunica"] = "tun",
["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 Sign Language"] = "tsm",
["Turks and Caicos Creole English"] = "tch",
["Turoyo"] = "tru",
["Turumsa"] = "tqm",
["Tuscarora"] = "tus",
["Tutelo"] = "tta",
["Tutong"] = "ttg",
["Tutsa Naga"] = "tvt",
["Tutuba"] = "tmi",
["Tututepec Mixtec"] = "mtu",
["Tututni"] = "tuu",
["Tuwali Ifugao"] = "ifk",
["Tuwari"] = "tww",
["Tuwuli"] = "bov",
["Tuxináwa"] = "tux",
["Tuxá"] = "tud",
["Tuyuca"] = "tue",
["Tuyuhun"] = "mis-tuh",
["Twana"] = "twa",
["Twendi"] = "twn",
["Tyap"] = "kcg",
["Tyaraity"] = "woa",
["Tyerrernotepanner"] = "xph",
["Tz'utujil"] = "tzj",
["Tzeltal"] = "tzh",
["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",
["Udihe"] = "ude",
["Uduk"] = "udu",
["Ufim"] = "ufi",
["Ugandan Sign Language"] = "ugn",
["Ughele"] = "uge",
["Uhami"] = "uha",
["Uisai"] = "uis",
["Ujir"] = "udj",
["Ukaan"] = "kcf",
["Ukhwejo"] = "ukh",
["Ukit"] = "umi",
["Ukpe-Bayobiri"] = "ukp",
["Ukpet-Ehom"] = "akd",
["Ukrainian Sign Language"] = "ukl",
["Ukue"] = "uku",
["Ukuriguma"] = "ukg",
["Ukwa"] = "ukq",
["Ukwuani-Aboh-Ndoni"] = "ukw",
["Ulau-Suain"] = "svb",
["Ulch"] = "ulc",
["Uldeme"] = "udl",
["Ulithian"] = "uli",
["Ullatan"] = "ull",
["Ulumanda'"] = "ulm",
["Ulwa"] = "ulw",
["Uma"] = "ppk",
["Uma' Lasan"] = "xky",
["Uma' Lung"] = "ulu",
["Umanakaina"] = "gdn",
["Umatilla"] = "uma",
["Umbindhamu"] = "umd",
["Umbu-Ungu"] = "ubu",
["Umbugarla"] = "umr",
["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",
["Unua"] = "onu",
["Unubahe"] = "unu",
["Uokha"] = "uok",
["Upper Chehalis"] = "cjh",
["Upper Grand Valley Dani"] = "dna",
["Upper Kuskokwim"] = "kuu",
["Upper Necaxa Totonac"] = "tku",
["Upper Ta'oih"] = "tth",
["Upper Tanana"] = "tau",
["Upper Taromi"] = "tov",
["Upper Umpqua"] = "xup",
["Ura (New Guinea)"] = "uro",
["Ura (Vanuatu)"] = "uur",
["Uradhi"] = "urf",
["Urali"] = "url",
["Urapmin"] = "urm",
["Urarina"] = "ura",
["Urartian"] = "xur",
["Urat"] = "urt",
["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",
["Uzekwe"] = "eze",
["Vaagri Booli"] = "vaa",
["Vaghri"] = "vgr",
["Vaghua"] = "tva",
["Vagla"] = "vag",
["Vaiphei"] = "vap",
["Vale"] = "vae",
["Valencian Sign Language"] = "vsv",
["Valle Nacional Chinantec"] = "cvn",
["Valley Maidu"] = "vmv",
["Valman"] = "van",
["Valpei"] = "vlp",
["Vamale"] = "mkt",
["Vame"] = "mlr",
["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",
["Venetic"] = "xve",
["Venezuelan Sign Language"] = "vsl",
["Ventureño"] = "veo",
["Vera'a"] = "vra",
["Vestinian"] = "xvs",
["Vidunda"] = "vid",
["Viemo"] = "vig",
["Vilela"] = "vil",
["Vili"] = "vif",
["Villa Viciosa Agta"] = "dyg",
["Vincentian Creole English"] = "svc",
["Virgin Islands Creole"] = "vic",
["Vishavan"] = "vis",
["Viti"] = "vit",
["Vitou"] = "vto",
["Viya"] = "gev",
["Vlax Romani"] = "rmy",
["Volscian"] = "xvo",
["Vono"] = "kch",
["Voro"] = "vor",
["Vumbu"] = "vum",
["Vunapu"] = "vnp",
["Vunjo"] = "vun",
["Vurës"] = "msn",
["Vute"] = "vut",
["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",
["Walmajarri"] = "wmt",
["Wam"] = "wmo",
["Wamas"] = "wmc",
["Wambaya"] = "wmb",
["Wambon"] = "wms",
["Wambule"] = "wme",
["Wamey"] = "cou",
["Wamin"] = "wmi",
["Wampar"] = "lbq",
["Wampur"] = "waz",
["Wan"] = "wan",
["Wanambre"] = "wnb",
["Wanap"] = "wnp",
["Wancho"] = "nnp",
["Wanda"] = "wbh",
["Wandala"] = "mfi",
["Wandamen"] = "wad",
["Wandarang"] = "wnd",
["Wandji"] = "wdd",
["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",
["Warapu"] = "wra",
["Waray Sorsogon"] = "srv",
["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",
["วาตีวา"] = "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 Romani"] = "rmw",
["Wemale"] = "weo",
["Wemba-Wemba"] = "xww",
["Weme Gbe"] = "wem",
["Wendat"] = "wdt",
["Weri"] = "wer",
["Wersing"] = "kvw",
["West Albay Bikol"] = "fbl",
["West Ambae"] = "nnd",
["West Central Banda"] = "bbp",
["West Damar"] = "drn",
["West Flemish"] = "vls",
["West Greenlandic Pidgin"] = "crp-gep",
["West Lembata"] = "lmj",
["West Makian"] = "mqs",
["West Masela"] = "mss",
["West Tarangan"] = "txn",
["West Uvean"] = "uve",
["West-Central Limba"] = "lia",
["Western Arrernte"] = "are",
["Western Bolivian Guarani"] = "gnw",
["Western Bukidnon Manobo"] = "mbb",
["Western Dani"] = "dnw",
["Western Durango Nahuatl"] = "azn",
["Western Fijian"] = "wyy",
["Western Gurung"] = "gvr",
["Western Highland Chatino"] = "ctp",
["Western Huasteca Nahuatl"] = "nhw",
["Western Jicaque"] = "nai-wji",
["Western Juxtlahuaca Mixtec"] = "jmx",
["Western Karaboro"] = "kza",
["Western Keres"] = "kjq",
["Western Krahn"] = "krw",
["Western Lalu"] = "ywl",
["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 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 Lachi"] = "lwh",
["Whitesands"] = "tnp",
["Wiarumus"] = "tua",
["Wichita"] = "wic",
["Wichí Lhamtés Güisnay"] = "mzh",
["Wichí Lhamtés Nocten"] = "mtp",
["Wichí Lhamtés Vejoz"] = "wlv",
["Wik-Epa"] = "wie",
["Wik-Iiyanh"] = "wij",
["Wik-Keyangan"] = "wif",
["Wik-Me'anha"] = "wih",
["Wik-Mungkan"] = "wim",
["Wik-Ngathana"] = "wig",
["Wikalkan"] = "wik",
["Wikngenchera"] = "wua",
["Wilawila"] = "wil",
["Wintu"] = "wnw",
["Winyé"] = "kst",
["Wipi"] = "gdr",
["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",
["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",
["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",
["Xianbei"] = "mis-xbi",
["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âgurè"] = "axx",
["Yaa"] = "iyx",
["Yaaku"] = "muu",
["Yabarana"] = "yar",
["Yabaâna"] = "ybn",
["Yaben"] = "ybm",
["Yabong"] = "ybo",
["Yabula Yabula"] = "yxy",
["Yace"] = "ekr",
["Yafi"] = "wfg",
["Yagara"] = "yxg",
["Yagaria"] = "ygr",
["Yaghnobi"] = "yai",
["Yagomi"] = "ygm",
["Yagua"] = "yad",
["Yagwoia"] = "ygw",
["Yahadian"] = "ner",
["Yahang"] = "rhp",
["Yahuna"] = "ynu",
["Yaka"] = "yaf",
["Yakaikeke"] = "ykk",
["Yakima"] = "yak",
["Yakkha"] = "ybh",
["Yakoma"] = "yky",
["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",
["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"] = "yao",
["Yao (South America)"] = "sai-yao",
["Yaosakor Asmat"] = "asy",
["Yaouré"] = "yre",
["Yapese"] = "yap",
["Yapunda"] = "yev",
["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",
["Yaul"] = "yla",
["Yaur"] = "jau",
["Yautepec Zapotec"] = "zpb",
["Yavitero"] = "yvt",
["Yawa"] = "yva",
["Yawalapití"] = "yaw",
["Yawanawa"] = "ywn",
["Yawarawarga"] = "yww",
["Yaweyuha"] = "yby",
["Yawijibaya"] = "jbw",
["Yawiyo"] = "ybx",
["Yawuru"] = "ywr",
["Yaygir"] = "xya",
["Yazghulami"] = "yah",
["Ye'kwana"] = "mch",
["Yei"] = "jei",
["Yekhee"] = "ets",
["Yekora"] = "ykr",
["Yele"] = "yle",
["Yelmek"] = "jel",
["Yelogu"] = "ylg",
["Yemaek"] = "hmk",
["Yemba"] = "ybb",
["Yemsa"] = "jnj",
["Yendang"] = "yen",
["Yeni"] = "yei",
["Yenish"] = "yec",
["Yerakai"] = "yra",
["Yeretuar"] = "gop",
["Yerong"] = "yrn",
["Yerukula"] = "yeu",
["Yeskwa"] = "yes",
["Yessan-Mayo"] = "yss",
["Yetfa"] = "yet",
["Yevanic"] = "yej",
["Yeyi"] = "yey",
["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",
["Yoidik"] = "ydk",
["Yoke"] = "yki",
["Yolmo"] = "scp",
["Yolngu Sign Language"] = "ygs",
["Yoloxochitl Mixtec"] = "xty",
["Yom"] = "pil",
["Yombe"] = "yom",
["Yongkom"] = "yon",
["Yopno"] = "yut",
["Yora"] = "mts",
["Yorta Yorta"] = "xyy",
["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",
["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",
["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",
["Zangwal"] = "zah",
["Zaniza Zapotec"] = "zpw",
["Zapotec"] = "zap",
["Zaramo"] = "zaj",
["Zari"] = "zaz",
["Zarma"] = "dje",
["Zauzou"] = "zal",
["Zay"] = "zwa",
["Zayein Karen"] = "kxk",
["Zayse-Zergulla"] = "zay",
["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",
["Zhár"] = "jjr",
["Zia"] = "zia",
["Zialo"] = "zil",
["Zigula"] = "ziw",
["Zimakani"] = "zik",
["Zimba"] = "zmb",
["Zimbabwe Sign Language"] = "zib",
["Zinza"] = "zin",
["Zirenkel"] = "zrn",
["Ziriya"] = "zir",
["Zizilivakan"] = "ziz",
["Zo'é"] = "pto",
["Zokhuo"] = "yzk",
["Zoogocho Zapotec"] = "zpq",
["Zotung Chin"] = "czt",
["Zou"] = "zom",
["Zulgo-Gemzek"] = "gnd",
["Zumaya"] = "zuy",
["Zumbun"] = "jmb",
["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",
["กงกัณ"] = "kok",
["กบาลัน"] = "ckv",
["กรีก"] = "el",
["กรีกแบบไมซีนี"] = "gmy",
["กรีกโบราณ"] = "grc",
["กรีนแลนด์"] = "kl",
["กวางตุ้ง"] = "yue",
["กอกบอรอก"] = "trp",
["กอท"] = "got",
["กอทแบบไครเมีย"] = "gme-cgo",
["กอล"] = "cel-gau",
["กะดู"] = "zkd",
["กะตูตะวันตก"] = "kuf",
["กะตูตะวันออก"] = "ktv",
["กะยัน"] = "pdu",
["กะยาตะวันตก"] = "kyu",
["กะยาตะวันออก"] = "eky",
["กะเหรี่ยงดั้งเดิม"] = "kar-pro",
["กะเหรี่ยงปะโอ"] = "blk",
["กะเหรี่ยงสะกอ"] = "ksw",
["กะเหรี่ยงโปตะวันตก"] = "pwo",
["กะเหรี่ยงโปตะวันออก"] = "kjp",
["กะเหรี่ยงโปเหนือ"] = "pww",
["กะเหรี่ยงโปแพร่"] = "kjt",
["กะไบล์"] = "kab",
["กัจฉ์"] = "kfr",
["กันกานาอือ"] = "kne",
["กันกานาอือเหนือ"] = "xnn",
["กันนฑะ"] = "kn",
["กัมเบอรา"] = "xbr",
["กัวรานีคลาสสิก"] = "gn-cls",
["กัวรานีแบบปารากวัย"] = "gug",
["กั้น"] = "gan",
["กากาอุซ"] = "gag",
["กาดาซันชายฝั่ง"] = "kzj",
["กาตาลา"] = "ca",
["กาตาลาเก่า"] = "roa-oca",
["กานูรี"] = "kr",
["กาปัมปางัน"] = "pam",
["กามรูป"] = "inc-kam",
["การากัลปัก"] = "kaa",
["กาลากัน"] = "kqe",
["กาลากันแบบกากัน"] = "kll",
["กาลากันแบบตากาเกาลู"] = "klg",
["กาลิเซีย"] = "gl",
["กาลิเซีย-โปรตุเกสเก่า"] = "roa-opt",
["กาเรา"] = "kyj",
["กาโม"] = "gmv",
["กาโร"] = "grt",
["กิลเบิร์ต"] = "gil",
["กีนาบาตางันตอนบน"] = "dmg",
["กืออึซ"] = "gez",
["กุรุข"] = "kru",
["กูนียันดี"] = "gni",
["กูย"] = "kdt",
["กูร์ดั้งเดิม"] = "nic-gur-pro",
["กฺ๋อง"] = "ugo",
["กเบดั้งเดิม"] = "alv-gbe-pro",
["ขมุ"] = "kjg",
["ขมุอิกดั้งเดิม"] = "mkh-khm-pro",
["ขร้า-ไทดั้งเดิม"] = "qfa-tak-pro",
["ขร้าดั้งเดิม"] = "qfa-kra-pro",
["ครี"] = "cr",
["ครีโอลกาบูเวร์ดี"] = "kea",
["ครีโอลกินี-บิสเซา"] = "pov",
["ครีโอลจาเมกา"] = "jam",
["ครีโอลมอริเชียส"] = "mfe",
["ครีโอลมาเก๊า"] = "mzs",
["ครีโอลลุยเซียนา"] = "lou",
["ครีโอลเฮติ"] = "ht",
["คองโก"] = "kg",
["คอปติก"] = "cop",
["คอร์ซิกา"] = "co",
["คอร์นวอลล์"] = "kw",
["คอร์นวอลล์เก่า"] = "oco",
["คอเคเซียนตะวันตกเฉียงเหนือดั้งเดิม"] = "cau-nwc-pro",
["คอเคเซียนตะวันออกเฉียงเหนือดั้งเดิม"] = "cau-nec-pro",
["คังรังชือ"] = "ane",
["คัลมึค"] = "xal",
["คาคัส"] = "kjh",
["คาชุบ"] = "csb",
["คาซัค"] = "kk",
["คาซี"] = "kha",
["คานธาระ"] = "pgd",
["คาบาร์เดีย"] = "kbd",
["คาร์ทเวเลียนดั้งเดิม"] = "ccs-pro",
["คาร์นิโคบาร์"] = "caq",
["คาลาเมียนดั้งเดิม"] = "phi-kal-pro",
["คาเซียนดั้งเดิม"] = "aav-khs-pro",
["คาเรเลีย"] = "krl",
["คำตี้"] = "kht",
["คำเมือง"] = "nod",
["คีตัน"] = "zkt",
["คีร์กีซ"] = "ky",
["คุชราต"] = "gu",
["คุชราตกลาง"] = "inc-mgu",
["คุชราตเก่า"] = "inc-ogu",
["คูนิงามิ"] = "xug",
["คูมาน"] = "qwm",
["คูมุก"] = "kum",
["งูนีดั้งเดิม"] = "bnt-ngu-pro",
["จอร์เจีย"] = "ka",
["จอร์เจียน-แซนดั้งเดิม"] = "ccs-gzn-pro",
["จอร์เจียเก่า"] = "oge",
["จักมา"] = "ccp",
["จามตะวันตก"] = "cja",
["จามตะวันออก"] = "cjm",
["จามิกดั้งเดิม"] = "cmc-pro",
["จิ่งเผาะ"] = "kac",
["จิ้น"] = "cjy",
["จีน"] = "zh",
["จีนกลาง"] = "cmn",
["จีนยุคกลาง"] = "ltc",
["จีนวรรณกรรม"] = "lzh",
["จีนเก่า"] = "och",
["จุน"] = "cuq",
["จูร์เชน"] = "juc",
["จ้วง"] = "za",
["จ้วงแบบจั่วเจียง"] = "zzj",
["จ้วงแบบหนง"] = "zhn",
["ชวา"] = "jv",
["ชวาเก่า"] = "kaw",
["ชวาแบบนิวแคลิโดเนีย"] = "jas",
["ชวาแบบแคริบเบียน"] = "jvn",
["ชอง"] = "cog",
["ชากาทาย"] = "chg",
["ชาดิกดั้งเดิม"] = "cdc-pro",
["ชาดิกตอนกลางดั้งเดิม"] = "cdc-cbm-pro",
["ชาบากาโน"] = "cbk",
["ชามอร์โร"] = "ch",
["ชุกชี"] = "ckt",
["ชูวัช"] = "cv",
["ซอกดิกดั้งเดิม"] = "ira-sgc-pro",
["ซองคา"] = "dz",
["ซอร์เบียตอนบน"] = "hsb",
["ซอร์เบียตอนล่าง"] = "dsb",
["ซังโก"] = "sg",
["ซันสการ์"] = "zau",
["ซัมบัล"] = "xsb",
["ซัสซารี"] = "sdc",
["ซากีซายา"] = "szy",
["ซาคา"] = "sah",
["ซาซา"] = "zza",
["ซาปา"] = "tys",
["ซามัว"] = "sm",
["ซามาตอนกลาง"] = "sml",
["ซามาแบบปางูตารัน"] = "slm",
["ซามิกดั้งเดิม"] = "smi-pro",
["ซามีเหนือ"] = "se",
["ซามีแบบกิลดิน"] = "sjd",
["ซามีแบบปีเต"] = "sje",
["ซามีแบบลูเล"] = "smj",
["ซามีแบบอีนารี"] = "smn",
["ซามีใต้"] = "sma",
["ซาราวักเหนือดั้งเดิม"] = "poz-swa-pro",
["ซาร์ดิเนีย"] = "sc",
["ซาลาร์"] = "slr",
["ซาโฮ"] = "ssy",
["ซิซิลี"] = "scn",
["ซินดาริน"] = "sjn",
["ซีกายานา"] = "sky",
["ซีดามา"] = "sid",
["ซีโน-ทิเบตันดั้งเดิม"] = "sit-pro",
["ซุนดา"] = "su",
["ซูก"] = "tsg",
["ซูทู"] = "st",
["ซูทูเหนือ"] = "nso",
["ซูนี"] = "zun",
["ซูรีเกาโนน"] = "sgd",
["ซูลาเวซีใต้ดั้งเดิม"] = "poz-ssw-pro",
["ซูลู"] = "zu",
["ซูเมอร์"] = "sux",
["ซูโดเวีย"] = "xsv",
["ญัฮกุร"] = "cbn",
["ญี่ปุ่น"] = "ja",
["ญี่ปุ่นเก่า"] = "ojp",
["ญ้อ"] = "nyw",
["ดราวิเดียนดั้งเดิม"] = "dra-pro",
["ดราวิเดียนตอนกลางดั้งเดิม"] = "dra-cen-pro",
["ดราวิเดียนเหนือดั้งเดิม"] = "dra-nor-pro",
["ดราวิเดียนใต้ดั้งเดิม"] = "dra-sou-pro",
["ดราวิเดียนใต้ที่สองดั้งเดิม"] = "dra-sdt-pro",
["ดราวิเดียนใต้ที่หนึ่งดั้งเดิม"] = "dra-sdo-pro",
["ดัตช์"] = "nl",
["ดัตช์กลาง"] = "dum",
["ดัตช์เก่า"] = "odt",
["ดาโคตา"] = "dak",
["ดุงกาน"] = "dng",
["ดูซุนตอนกลาง"] = "dtp",
["ตงเซียง"] = "sce",
["ตองงา"] = "to",
["ตังกุต"] = "txg",
["ตันดากาโนน"] = "tgn",
["ตั่ย"] = "tyz",
["ตากาล็อก"] = "tl",
["ตางัม"] = "sit-tgm",
["ตาตาร์"] = "tt",
["ตาตาร์แบบไครเมีย"] = "crh",
["ตาอีโน"] = "tnq",
["ตาฮีตี"] = "ty",
["ตีรูไร"] = "tiy",
["ตีโดเร"] = "tvo",
["ตุมซุก"] = "xtq",
["ตุรกี"] = "tr",
["ตุรกีแบบออตโตมัน"] = "ota",
["ตุรกีแบบอานาโตเลียเก่า"] = "trk-oat",
["ตุรุง"] = "try",
["ตูปี-กัวรานีดั้งเดิม"] = "tup-gua-pro",
["ตูปีเก่า"] = "tpw",
["ตูลู"] = "tcy",
["ตูวา"] = "tyv",
["ตูวาลู"] = "tvl",
["ตูเปียนดั้งเดิม"] = "tup-pro",
["ตโบลี"] = "tbl",
["ต้งเหนือ"] = "doc",
["ต้งใต้"] = "kmc",
["ทมิฬ"] = "ta",
["ทมิฬเก่า"] = "oty",
["ตอกปีซิน"] = "tpi",
["ทะวืง"] = "thm",
["ทาจิก"] = "tg",
["ทาบาซารัน"] = "tab",
["ทิเบต"] = "bo",
["ทิเบตคลาสสิก"] = "xct",
["ทิเบตเก่า"] = "otb",
["ทือกรึญญา"] = "ti",
["ทือเกร"] = "tig",
["นอซู"] = "ii",
["นอร์มัน"] = "nrf",
["นอร์สดั้งเดิม"] = "gmq-pro",
["นอร์สเก่า"] = "non",
["นอร์เวย์"] = "no",
["นอร์เวย์กลาง"] = "gmq-mno",
["นอร์เวย์แบบนือนอสก์"] = "nn",
["นอร์เวย์แบบบุ๊กมอล"] = "nb",
["นัคดั้งเดิม"] = "cau-nkh-pro",
["นาวัตล์"] = "nah",
["นาวัตล์คลาสสิก"] = "nci",
["นาวัตล์ตอนกลาง"] = "nhn",
["นาวันดั้งเดิม"] = "azc-nah-pro",
["นาวาโฮ"] = "nv",
["นาอูรู"] = "na",
["นาโปลี"] = "nap",
["นิวเคลียร์พอลินีเชียนดั้งเดิม"] = "poz-pnp-pro",
["นิวเบียเก่า"] = "onw",
["นิโคบารีสดั้งเดิม"] = "aav-nic-pro",
["นิโคบาร์กลาง"] = "ncb",
["นีวเว"] = "niu",
["นุง"] = "nut",
["นูเบียนดั้งเดิม"] = "nub-pro",
["บราฮุอี"] = "brh",
["บริทอนิกดั้งเดิม"] = "cel-bry-pro",
["บรูตะวันตก"] = "brv",
["บรูตะวันออก"] = "bru",
["บลาการ์"] = "beu",
["บอลโต-สลาวิกดั้งเดิม"] = "ine-bsl-pro",
["บะห์นัร"] = "bdq",
["บัตส์"] = "bbl",
["บันจาร์"] = "bjn",
["บัมบารา"] = "bm",
["บัลติ"] = "bft",
["บัลแกเรีย"] = "bg",
["บาลี"] = "pi",
["บาวาเรีย"] = "bar",
["บาสก์"] = "eu",
["บาสก์ดั้งเดิม"] = "euq-pro",
["บาหลี"] = "ban",
["บาเจาแบบอินโดนีเซีย"] = "bdl",
["บาเจาแบบเวสต์โคสต์"] = "bdr",
["บาโลจ"] = "bal",
["บิสลามา"] = "bi",
["บีซู"] = "bzi",
["บีนูกิด"] = "bkd",
["บีโคลตอนกลาง"] = "bcl",
["บูกิส"] = "bug",
["บูร์บอแน-แบรีชง"] = "roa-bbn",
["บูร์ยัต"] = "bua",
["ปนัร"] = "pbv",
["ปนัร-คาซี-ลึงงัมดั้งเดิม"] = "aav-pkl-pro",
["ปยู"] = "pyx",
["ปรากฤต"] = "pra",
["ปรากฤตแบบอโศก"] = "inc-ash",
["ปะหล่องดั้งเดิม"] = "mkh-pal-pro",
["ปักษ์ใต้"] = "sou",
["ปังควาฬฺ"] = "pgg",
["ปัญจาบ"] = "pa",
["ปัญจาบเก่า"] = "inc-opa",
["ปาทาน"] = "ps",
["ปาทานดั้งเดิม"] = "ira-pat-pro",
["ปาลาวาโนตอนกลาง"] = "plc",
["ปาลาวาโนตะวันตกเฉียงใต้"] = "plv",
["ปาลาวาโนแบบบรูกส์พอยต์"] = "plw",
["ปาเปียเมนตู"] = "pap",
["ปาเลา"] = "pau",
["ปาโกะห์"] = "pac",
["ปีการ์"] = "pcd",
["ปีปิล"] = "ppl",
["ปีเยมอนเต"] = "pms",
["ปูกาปูกา"] = "pkp",
["ปู้อี"] = "pcc",
["ผิงเหนือ"] = "cnp",
["ผิงใต้"] = "csp",
["ผูเซียน"] = "cpx",
["ผู้น้อย"] = "pho",
["ผู้ไท"] = "pht",
["ฝรั่งเศส"] = "fr",
["ฝรั่งเศสกลาง"] = "frm",
["ฝรั่งเศสเก่า"] = "fro",
["พทคะ"] = "bfq",
["พม่า"] = "my",
["พม่าเก่า"] = "obr",
["พรัช"] = "bra",
["พวน"] = "phu",
["พอลินีเชียนดั้งเดิม"] = "poz-pol-pro",
["พอลินีเชียนตะวันออกดั้งเดิม"] = "poz-pep-pro",
["พิหาร"] = "bh",
["พ่าเก"] = "phk",
["ฟรียูลี"] = "fur",
["ฟรีเชียตะวันตก"] = "fy",
["ฟรีเชียเก่า"] = "ofs",
["ฟรีเชียเหนือ"] = "frr",
["ฟรีเชียแบบซาเทอร์ลันท์"] = "stq",
["ฟร็องโก-พรอว็องส์"] = "frp",
["ฟาลา"] = "fax",
["ฟาลิสกุส"] = "xfa",
["ฟินนิกดั้งเดิม"] = "urj-fin-pro",
["ฟินิเชีย"] = "phn",
["ฟินแลนด์"] = "fi",
["ฟิลิปปินส์ดั้งเดิม"] = "phi-pro",
["ฟีจี"] = "fj",
["ฟูลา"] = "ff",
["มคหะ"] = "mag",
["มงตาแญ"] = "moe",
["มณีปุระ"] = "mni",
["มณีปุระเก่า"] = "omp",
["มนองตอนกลาง"] = "cmo",
["มนองใต้"] = "mnn",
["มราฐี"] = "mr",
["มราฐีเก่า"] = "omr",
["มลยาฬัม"] = "ml",
["มลายูตอนกลาง"] = "pse",
["มลายูแบบตรังกานู"] = "poz-ter",
["มลายูแบบบรูไน"] = "kxd",
["มลายูแบบปัตตานี"] = "mfa",
["มลายูแบบเกอดะฮ์"] = "meo",
["มวานี"] = "wmw",
["มอกชา"] = "mdf",
["มองโกลิกดั้งเดิม"] = "xgn-pro",
["มองโกเลีย"] = "mn",
["มองโกเลียกลาง"] = "xng",
["มองโกเลียคลาสสิก"] = "cmg",
["มอญ"] = "mnw",
["มอญ-เขมรดั้งเดิม"] = "mkh-pro",
["มอญกลาง"] = "mkh-mmn",
["มอญดั้งเดิม"] = "mkh-mnc-pro",
["มอญเก่า"] = "omx",
["มอญแบบไทย"] = "mnw-tha",
["มอลตา"] = "mt",
["มอแซนแดรอน"] = "mzn",
["มัล"] = "mlf",
["มัลดีฟส์"] = "dv",
["มัสบาเต"] = "msb",
["มากัซซาร์"] = "mak",
["มากินดาเนา"] = "mdh",
["มาซิโดเนีย"] = "mk",
["มายันดั้งเดิม"] = "myn-pro",
["มาราเนา"] = "mrw",
["มาร์วาร์"] = "mwr",
["มาร์แชลล์"] = "mh",
["มาลากาซี"] = "mg",
["มาลาโย-จามิกดั้งเดิม"] = "poz-mcm-pro",
["มาลาโย-ซุมบาวันดั้งเดิม"] = "poz-msa-pro",
["มาลาโย-พอลินีเชียนดั้งเดิม"] = "poz-pro",
["มาลาโย-พอลินีเชียนตอนกลาง-ตะวันออกดั้งเดิม"] = "poz-cet-pro",
["มาลาโย-พอลินีเชียนตะวันออกดั้งเดิม"] = "pqe-pro",
["มาวรี"] = "mi",
["มาเลย์อิกดั้งเดิม"] = "poz-mly-pro",
["มาเลเซีย"] = "ms",
["มาไซ"] = "mas",
["มิงเกรเลีย"] = "xmf",
["มิยาโกะ"] = "mvi",
["มีนังกาเบา"] = "min",
["มีรังดา"] = "mwl",
["มีโซ"] = "lus",
["มือรัสเซีย"] = "rsl",
["มืออินเดีย"] = "ins",
["มืออินโดนีเซีย"] = "inl",
["มืออเมริกัน"] = "ase",
["มือเนปาล"] = "nsp",
["มือไทย"] = "tsq",
["มุนดาดั้งเดิม"] = "mun-pro",
["มูซี"] = "mui",
["ม้ง-เมี่ยนดั้งเดิม"] = "hmx-pro",
["ม้งขาว"] = "mww",
["ม้งดั้งเดิม"] = "hmn-pro",
["ม้งเขียว"] = "hnj",
["ยอง"] = "yno",
["ยอลอ"] = "yol",
["ยะไข่"] = "rki",
["ยากัน"] = "yka",
["ยามานา"] = "yag",
["ยามี"] = "tao",
["ยาเอยามะ"] = "rys",
["ยิดดิช"] = "yi",
["ยุปปิก"] = "esu",
["ยูกริกดั้งเดิม"] = "urj-ugr-pro",
["ยูการิต"] = "uga",
["ยูราลิกดั้งเดิม"] = "urj-pro",
["ยูเครน"] = "uk",
["ยูโต-แอซเทกันดั้งเดิม"] = "azc-pro",
["รวันดา-รุนดี"] = "rw",
["รัสเซีย"] = "ru",
["ราชพังสี"] = "rjs",
["ราปานูอี"] = "rap",
["ราโรโตงา"] = "rar",
["ริฟ"] = "rif",
["รูซินแบบคาร์พาเทีย"] = "rue",
["รูซินแบบพันโนเนีย"] = "rsk",
["ร่วม"] = "mul",
["ลอมบาร์ด"] = "lmo",
["ละติน"] = "la",
["ลัก"] = "lbe",
["ลักเกีย"] = "lbc",
["ลักเซมเบิร์ก"] = "lb",
["ลัซ"] = "lzz",
["ลัตเกล"] = "ltg",
["ลัตเวีย"] = "lv",
["ลัมปุงกิกดั้งเดิม"] = "poz-lgx-pro",
["ลัมโบยา"] = "lmy",
["ลาดัก"] = "lbj",
["ลาดิน"] = "lld",
["ลาดิโน"] = "lad",
["ลาว"] = "lo",
["ลิงกาลา"] = "ln",
["ลิทัวเนีย"] = "lt",
["ลิทัวเนียเก่า"] = "olt",
["ลินดู"] = "klw",
["ลิมบู"] = "lif",
["ลิมเบิร์ก"] = "li",
["ลิววี"] = "olo",
["ลีกูเรีย"] = "lij",
["ลีสู่"] = "lis",
["ลีโวเนีย"] = "liv",
["ลึงงัม"] = "lyg",
["ลูกันดา"] = "lg",
["ลูอิชดั้งเดิม"] = "sit-luu-pro",
["วอลตา-คองโกดั้งเดิม"] = "nic-vco-pro",
["วอลตา-ไนเจอร์ดั้งเดิม"] = "alv-von-pro",
["วันดัล"] = "xvn",
["วัลลูน"] = "wa",
["วาราโอ"] = "wba",
["วาไร"] = "war",
["วินเนอเบโก"] = "win",
["วีลามอวิตแซ"] = "wym",
["สกอต"] = "sco",
["สมราย"] = "smu",
["สลาวอนิกคริสตจักรเก่า"] = "cu",
["สลาวิกดั้งเดิม"] = "sla-pro",
["สลาวิกตะวันออกเก่า"] = "orv",
["สวานา"] = "tn",
["สวาฮีลี"] = "sw",
["สวีเดน"] = "sv",
["สวีเดนเก่า"] = "gmq-osw",
["สะโอจ"] = "scq",
["สันถาลี"] = "sat",
["สันสกฤต"] = "sa",
["ซำเร"] = "sxm",
["สิกขิม"] = "sip",
["สิงหล"] = "si",
["สินธ์"] = "sd",
["สิเลฏ"] = "syl",
["สุ่ย"] = "swi",
["สเปน"] = "es",
["สเปนเก่า"] = "osp",
["สโลวัก"] = "sk",
["สโลวักเก่า"] = "zlw-osk",
["สโลวินช์"] = "zlw-slv",
["สโลวีเนีย"] = "sl",
["หง่วน"] = "nuo",
["หมะ"] = "cma",
["หมิ่นดั้งเดิม"] = "zhx-min-pro",
["หมิ่นตอนกลาง"] = "czo",
["หมิ่นตะวันออก"] = "cdo",
["หมิ่นเหนือ"] = "mnp",
["หมิ่นใต้"] = "nan",
["หล่อยแอว๋"] = "luh",
["ห่อยซัน"] = "zhx-tai",
["อวัธ"] = "awa",
["ออสซีเซีย"] = "os",
["ออสโตรนีเซียนดั้งเดิม"] = "map-pro",
["ออสโตรเอเชียติกดั้งเดิม"] = "aav-pro",
["ออโรโม"] = "om",
["อะดีเกยา"] = "ady",
["อะตง"] = "aot",
["อะวาร์"] = "av",
["อะวาร์เก่า"] = "oav",
["อะแพชีตะวันตก"] = "apw",
["อักลัน"] = "akl",
["อังกฤษ"] = "en",
["อังกฤษกลาง"] = "enm",
["อังกฤษเก่า"] = "ang",
["อับคาเซีย"] = "ab",
["อัมฮารา"] = "am",
["อัมโมน"] = "sem-amm",
["อัลไตเหนือ"] = "atv",
["อัลไตใต้"] = "alt",
["อัสตูเรียส"] = "ast",
["อัสสัม"] = "as",
["อัสสัมกลาง"] = "inc-mas",
["อัสสัมช่วงต้น"] = "inc-oas",
["อากูตายา"] = "agn",
["อาข่า"] = "ahk",
["อาคัน"] = "ak",
["อาซี"] = "bno",
["อานาโตเลียนดั้งเดิม"] = "ine-ana-pro",
["อาบาซา"] = "abq",
["อาฟรีกานส์"] = "af",
["อาฟาร์"] = "aa",
["อามามิโอชิมะเหนือ"] = "ryn",
["อามามิโอชิมะใต้"] = "ams",
["อารากอน"] = "an",
["อารามายา"] = "arc",
["อาร์มีเนีย"] = "hy",
["อาร์มีเนียกลาง"] = "axm",
["อาร์มีเนียนดั้งเดิม"] = "hyx-pro",
["อาร์มีเนียเก่า"] = "xcl",
["อาลูตีก"] = "ems",
["อาหม"] = "aho",
["อาหรับ"] = "ar",
["อาหรับแบบซูดาน"] = "apd",
["อาหรับแบบตูนิเซีย"] = "aeb",
["อาหรับแบบทาจิกิสถาน"] = "abh",
["อาหรับแบบบาห์เรน"] = "abv",
["อาหรับแบบลิเบีย"] = "ayl",
["อาหรับแบบลิแวนต์ใต้"] = "ajp",
["อาหรับแบบอันดะลุส"] = "xaa",
["อาหรับแบบอิรัก"] = "acm",
["อาหรับแบบอียิปต์"] = "arz",
["อาหรับแบบอุซเบกิสถาน"] = "auz",
["อาหรับแบบฮิญาซ"] = "acw",
["อาหรับแบบเมโสโปเตเมียเหนือ"] = "ayp",
["อาหรับแบบเยเมน"] = "ayn",
["อาหรับแบบแอลจีเรีย"] = "arq",
["อาหรับแบบโมร็อกโก"] = "ary",
["อาหรับแบบโอมาน"] = "acx",
["อาหรับแบบไซปรัส"] = "acy",
["อาเจะฮ์"] = "ace",
["อาเซอร์ไบจาน"] = "az",
["อาเนตยูม"] = "aty",
["อาเบ"] = "aba",
["อิกโบ"] = "ig",
["อิงกุช"] = "inh",
["อิงเกรีย"] = "izh",
["อิตาลิกดั้งเดิม"] = "itc-pro",
["อิตาลี"] = "it",
["อินุกติตุต"] = "iu",
["อินุอิตดั้งเดิม"] = "esx-inu-pro",
["อินเทร์ลิงเกว"] = "ie",
["อินเทอร์ลิงกวา"] = "ia",
["อินโด-ยูโรเปียนดั้งเดิม"] = "ine-pro",
["อินโด-อารยันดั้งเดิม"] = "inc-pro",
["อินโด-อิเรเนียนดั้งเดิม"] = "iir-pro",
["อินโดนีเซีย"] = "id",
["อิสเตรีย"] = "ist",
["อิเรเนียนดั้งเดิม"] = "ira-pro",
["อีดาอัน"] = "dbj",
["อีทรัสคัน"] = "ett",
["อีบัน"] = "iba",
["อียิปต์"] = "egy",
["อีรานุน"] = "ill",
["อีสาน"] = "tts",
["อีโด"] = "io",
["อีโลกาโน"] = "ilo",
["อุซเบก"] = "uz",
["อุดมูร์ต"] = "udm",
["อุตซิตา"] = "oc",
["อุตซิตาเก่า"] = "pro",
["อุนเซอร์ด็อยทช์"] = "uln",
["อุมเบรีย"] = "xum",
["อุยกูร์"] = "ug",
["อุยกูร์เก่า"] = "oui",
["อูดี"] = "udi",
["อูรดู"] = "ur",
["อูรักลาโวยจ"] = "urk",
["อู๋"] = "wuu",
["อเวสตะ"] = "ae",
["อ่ายตน"] = "aio",
["ฮกเกี้ยน"] = "nan-hbl",
["ฮังการี"] = "hu",
["ฮังการีเก่า"] = "ohu",
["ฮาชอง"] = "haj",
["ฮานูโนโอ"] = "hnn",
["ฮาวาย"] = "haw",
["ฮินดี"] = "hi",
["ฮินดีเก่า"] = "inc-ohi",
["ฮินดีแบบฟีจี"] = "hif",
["ฮินดูสตานีแบบแคริบเบียน"] = "hns",
["ฮีบรู"] = "he",
["ฮีรีโมตู"] = "ho",
["ฮีลีไกโนน"] = "hil",
["ฮุนสริก"] = "hrx",
["ฮูร์เรีย"] = "xhu",
["เกชวนดั้งเดิม"] = "qwe-pro",
["เกชัว"] = "qu",
["เกชัวคลาสสิก"] = "qwc",
["เกรตอันดามันนีสดั้งเดิม"] = "qfa-adm-pro",
["เกอฮอ"] = "kpm",
["เกาหลี"] = "ko",
["เกาหลีกลาง"] = "okm",
["เกาหลีดั้งเดิม"] = "qfa-kor-pro",
["เกาหลีเก่า"] = "oko",
["เกาหลีใหม่ช่วงต้น"] = "ko-ear",
["เกโกโย"] = "ki",
["เขมร"] = "km",
["เขมรกลาง"] = "xhm",
["เขมรดั้งเดิม"] = "mkh-kmr-pro",
["เขมรเก่า"] = "okz",
["เขมรเหนือ"] = "kxm",
["เขิน"] = "kkh",
["เคลติกดั้งเดิม"] = "cel-pro",
["เควนยา"] = "qya",
["เคอร์ดิชดั้งเดิม"] = "ku-pro",
["เคิร์ดตอนกลาง"] = "ckb",
["เคิร์ดเหนือ"] = "kmr",
["เจวา"] = "ny",
["เจอร์แมนิกดั้งเดิม"] = "gem-pro",
["เจอร์แมนิกตะวันตกดั้งเดิม"] = "gmw-pro",
["เจียเม่า"] = "jio",
["เฉ่าเหมียว"] = "cov",
["เชจู"] = "jje",
["เชเชน"] = "ce",
["เชเยนน์"] = "chy",
["เชโรกี"] = "chr",
["เช็ก"] = "cs",
["เช็กเก่า"] = "zlw-ocs",
["เซบัวโน"] = "ceb",
["เซมิติกดั้งเดิม"] = "sem-pro",
["เซมิติกตะวันตกดั้งเดิม"] = "sem-wes-pro",
["เซอร์โบ-โครเอเชีย"] = "sh",
["เซอไม"] = "sea",
["เซียง"] = "hsn",
["เดนมาร์ก"] = "da",
["เดนมาร์กเก่า"] = "gmq-oda",
["เดาโร"] = "dwr",
["เตตุน"] = "tet",
["เตลูกู"] = "te",
["เตอร์กิกดั้งเดิม"] = "trk-pro",
["เตอร์กิกเก่า"] = "otk",
["เตอร์นาเต"] = "tft",
["เตอเมียร์"] = "tea",
["เติร์กเมน"] = "tk",
["เทาส์"] = "twf",
["เนปาล"] = "ne",
["เนวาร์"] = "new",
["เนวาร์กลาง"] = "nwx",
["เนวาร์คลาสสิก"] = "nwc",
["เนเกอร์ฮอลันดส์"] = "dcr",
["เบ"] = "onb",
["เบ-ไทดั้งเดิม"] = "qfa-bet-pro",
["เบงกอล"] = "bn",
["เบงกอลกลาง"] = "inc-mbn",
["เบงกอลเก่า"] = "inc-obn",
["เบดั้งเดิม"] = "qfa-onb-pro",
["เบนูเอ-คองโกดั้งเดิม"] = "nic-bco-pro",
["เบรอตง"] = "br",
["เบรอตงกลาง"] = "xbm",
["เบรอตงเก่า"] = "obt",
["เบลารุส"] = "be",
["เบอตาวี"] = "bew",
["เบอราวัน"] = "lod",
["เบอร์เบอร์ดั้งเดิม"] = "ber-pro",
["เบอร์เบอร์แบบตูนีเซีย"] = "sds",
["เปอร์มิกดั้งเดิม"] = "urj-prm-pro",
["เปอร์เซีย"] = "fa",
["เปอร์เซียกลาง"] = "pal",
["เปอร์เซียเก่า"] = "peo",
["เพลาท์ดิทช์"] = "pdt",
["เมวาร์"] = "mtr",
["อิ้วเมี่ยน"] = "ium",
["เมี่ยนดั้งเดิม"] = "hmx-mie-pro",
["เยอรมัน"] = "de",
["เยอรมันตอนกลางตะวันออก"] = "gmw-ecg",
["เยอรมันต่ำ"] = "nds",
["เยอรมันต่ำกลาง"] = "gml",
["เยอรมันต่ำแบบเยอรมนี"] = "nds-de",
["เยอรมันสูงกลาง"] = "gmh",
["เยอรมันสูงเก่า"] = "goh",
["เยอรมันแบบซิพเซอร์"] = "gmw-zps",
["เยอรมันแบบว็อลกา"] = "gmw-vog",
["เยอรมันแบบอลามันเนีย"] = "gsw",
["เยอรมันแบบเพนซิลเวเนีย"] = "pdc",
["เรอหวั่ง"] = "raw",
["เลซกี"] = "lez",
["เลออน"] = "roa-leo",
["เลออนเก่า"] = "roa-ole",
["เลอเวือะตะวันตก"] = "lcp",
["เลอเวือะตะวันออก"] = "lwl",
["เวนดา"] = "ve",
["เวปส์"] = "vep",
["เวลส์"] = "cy",
["เวลส์กลาง"] = "wlm",
["เวลส์เก่า"] = "owl",
["เวอโร"] = "vro",
["เวียดนาม"] = "vi",
["เวียดนามกลาง"] = "mkh-mvi",
["เวียตติกดั้งเดิม"] = "mkh-vie-pro",
["เวเนโต"] = "vec",
["เศรปา"] = "xsr",
["เสฉวน"] = "zhx-sic",
["เหมื่อง"] = "mtq",
["เอชเตฮาร์ด"] = "esh",
["เอซเตรมาดูรา"] = "ext",
["เอมีเลีย"] = "egl",
["เอร์เซีย"] = "myv",
["เอสกิโมดั้งเดิม"] = "esx-esk-pro",
["เอสเปรันโต"] = "eo",
["เอสโตเนีย"] = "et",
["เอเว"] = "ee",
["เอเวนค์"] = "evn",
["เอเว็น"] = "eve",
["เอโดม"] = "xdm",
["เฮลเลนิกดั้งเดิม"] = "grk-pro",
["เฮาซา"] = "ha",
["เฮเรโร"] = "hz",
["แกลิกแบบสกอตแลนด์"] = "gd",
["แคชเมียร์"] = "ks",
["แคะ"] = "hak",
["แจพอนิกดั้งเดิม"] = "jpx-pro",
["แซกซันเก่า"] = "osx",
["แดลเมเชีย"] = "dlm",
["แต้จิ๋ว"] = "nan-tws",
["แบกเตรีย"] = "xbc",
["แบชเคียร์"] = "ba",
["แบนทอยด์ดั้งเดิม"] = "nic-bod-pro",
["แบนทูดั้งเดิม"] = "bnt-pro",
["แบล็กสปีช"] = "art-bsp",
["แพ็กเจ"] = "pkc",
["แฟโร"] = "fo",
["แมงซ์"] = "gv",
["แมนจู"] = "mnc",
["แสก"] = "skb",
["แอกแคด"] = "akk",
["แอตแลนติก-คองโกดั้งเดิม"] = "alv-pro",
["แอฟโฟรเอเชียติกดั้งเดิม"] = "afa-pro",
["แอลกองเคียนดั้งเดิม"] = "alg-pro",
["แอลจิกดั้งเดิม"] = "aql-pro",
["แอลฟ์ดาเลิน"] = "ovd",
["แอละแบมา"] = "akz",
["แอลเบเนีย"] = "sq",
["แอลเบเนียนดั้งเดิม"] = "sqj-pro",
["โกฟา"] = "gof",
["โคซา"] = "xh",
["โคณฑี"] = "gon",
["โคตาน"] = "kho",
["โคทาวา"] = "avk",
["โจว"] = "tsu",
["โชนา"] = "sn",
["โชร์"] = "cjs",
["โซตซิล"] = "tzo",
["โซมาลอยด์ดั้งเดิม"] = "cus-som-pro",
["โซมาลี"] = "so",
["โซ่ง"] = "soa",
["โตทา"] = "tcx",
["โตฟา"] = "kim",
["โทกูโนชิมะ"] = "tkn",
["โทแคเรียนดั้งเดิม"] = "ine-toc-pro",
["โทแคเรียนบี"] = "txb",
["โทแคเรียนเอ"] = "xto",
["โนเวียล"] = "nov",
["โบล"] = "bol",
["โบลีเนา"] = "smk",
["โบโด"] = "brx",
["โบโด-กาโรดั้งเดิม"] = "tbq-bdg-pro",
["โปรตุเกส"] = "pt",
["โปแลนด์"] = "pl",
["โปแลนด์เก่า"] = "zlw-opl",
["โภชปุระ"] = "bho",
["โมกิล"] = "mkj",
["โมอับ"] = "obm",
["โมเชโน"] = "mhn",
["โยกัด"] = "yog",
["โยนางูนิ"] = "yoi",
["โยรง"] = "yox",
["โยรูบอยด์ดั้งเดิม"] = "alv-yrd-pro",
["โยรูบา"] = "yo",
["โยรูบาดั้งเดิม"] = "alv-yor-pro",
["โรมัญญา"] = "rgn",
["โรมานช์"] = "rm",
["โรมานี"] = "rom",
["โรมาเนีย"] = "ro",
["โรฮีนจา"] = "rhg",
["โลจบาน"] = "jbo",
["โลโกโน"] = "arw",
["โลโล-เบอร์มีซดั้งเดิม"] = "tbq-lob-pro",
["โลโลอิชดั้งเดิม"] = "tbq-lol-pro",
["โวต"] = "vot",
["โวลอฟ"] = "wo",
["โวลาปุก"] = "vo",
["โอกินาวะ"] = "ryu",
["โอกิโนเอราบุ"] = "okn",
["โอจิบเว"] = "oj",
["โอซิง"] = "osi",
["โอริยา"] = "or",
["โอริยากลาง"] = "inc-mor",
["โอริยาเก่า"] = "inc-oor",
["โอเชียนิกดั้งเดิม"] = "poz-oce-pro",
["ไซลีเซีย"] = "szl",
["ไทขาว"] = "twh",
["ไทดั้งเดิม"] = "tai-pro",
["ไทดำ"] = "blt",
["ไทตะวันตกเฉียงใต้ดั้งเดิม"] = "tai-swe-pro",
["ไทย"] = "th",
["ไทลื้อ"] = "khb",
["ไทแดง"] = "tyr",
["ไทแมน"] = "tyj",
["ไทแหล่ง"] = "tjl",
["ไทใต้คง"] = "tdd",
["ไทใหญ่"] = "shn",
["ไนเจอร์-คองโกดั้งเดิม"] = "nic-pro",
["ไปวัน"] = "pwn",
["ไมถิลี"] = "mai",
["ไมนอส"] = "omn",
["ไมยา"] = "sks",
["ไมโครนีเซียนดั้งเดิม"] = "poz-mic-pro",
["ไว"] = "vai",
["ไหล"] = "lic",
["ไหลดั้งเดิม"] = "qfa-lic-pro",
["ไหหลำ"] = "hnm",
["ไอซ์แลนด์"] = "is",
["ไอนุ"] = "ain",
["ไอย์มารา"] = "ay",
["ไอริช"] = "ga",
["ไอริชกลาง"] = "mga",
["ไอริชเก่า"] = "sga",
["Ỹaroamë"] = "yro",
}
5ti6l2yrgzfdx6tb6x0o2qwn538b64v
5729126
5729121
2026-07-20T02:32:10Z
Octahedron80
267
5729126
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",
["Abenaki"] = "abe",
["Abenlen Ayta"] = "abp",
["Abidji"] = "abi",
["Abinomn"] = "bsa",
["Abipón"] = "axb",
["Abishira"] = "ash",
["Abom"] = "aob",
["Abon"] = "abo",
["Aborlan Tagbanwa"] = "tbw",
["Abu"] = "ado",
["Abu'"] = "aah",
["Abua"] = "abn",
["Abui"] = "abz",
["Abun"] = "kgr",
["Abung"] = "abl",
["Abure"] = "abu",
["Abureni"] = "mgj",
["Acatepec Me'phaa"] = "tpx",
["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",
["Adja"] = "ajg",
["Adnyamathanha"] = "adt",
["Adonara"] = "adr",
["Aduge"] = "adu",
["Adzera"] = "adz",
["Adûni"] = "art-adu",
["Aeka"] = "aez",
["Aekyom"] = "awi",
["Aequian"] = "xae",
["Aer"] = "aeq",
["Afade"] = "aal",
["Afghan Sign Language"] = "afg",
["Afitti"] = "aft",
["Afra"] = "ulf",
["Afrihili"] = "afh",
["Afro-Seminole Creole"] = "afs",
["Agarabi"] = "agd",
["Agariya"] = "agi",
["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",
["Agwagwune"] = "yay",
["Ahanta"] = "aha",
["Ahirani"] = "ahr",
["Ahtna"] = "aht",
["Ahwai"] = "nfd",
["Ai-Cham"] = "aih",
["Aighon"] = "aix",
["Aikanã"] = "tba",
["Aiklep"] = "mwg",
["Aimele"] = "ail",
["Aimol"] = "aim",
["Ainbai"] = "aic",
["Aiome"] = "aki",
["Airoran"] = "air",
["Aisi"] = "mmq",
["Aja"] = "aja",
["Ajawa"] = "ajw",
["Ajië"] = "aji",
["Ajyíninka Apurucayali"] = "cpc",
["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",
["Akar-Bale"] = "acl",
["Akaselem"] = "aks",
["Akatek"] = "knj",
["Akawaio"] = "ake",
["Ake"] = "aik",
["Akebu"] = "keu",
["Akei"] = "tsr",
["Akeu"] = "aeu",
["Akhvakh"] = "akv",
["Akkala Sami"] = "sia",
["Akolet"] = "akt",
["Akoose"] = "bss",
["Akoye"] = "miw",
["Akpa"] = "akf",
["Akpes"] = "ibe",
["Akrukay"] = "afi",
["Akuku"] = "ayk",
["Akum"] = "aku",
["Akuntsu"] = "aqz",
["Akurio"] = "ako",
["Akuwagel"] = "bey",
["Akwa"] = "akw",
["Akyaung Ari"] = "nqy",
["Al-Sayyid Bedouin Sign Language"] = "syy",
["Alaba"] = "alw",
["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 Sign Language"] = "sqk",
["Alchuka"] = "tuw-alk",
["Alcozauca Mixtec"] = "xta",
["Alege"] = "alf",
["Alekano"] = "gah",
["Aleut"] = "ale",
["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",
["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",
["Amganad Ifugao"] = "ifa",
["Ami"] = "amy",
["Amis"] = "ami",
["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 Ligurian"] = "xlg",
["Ancient Macedonian"] = "xmk",
["Ancient North Arabian"] = "xna",
["Ancient Zapotec"] = "xzp",
["Andai"] = "afd",
["Andajin"] = "ajn",
["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",
["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",
["Ao"] = "njo",
["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",
["Aputai"] = "apx",
["Aquitanian"] = "xaq",
["Arabana"] = "ard",
["Arabela"] = "arl",
["Araki"] = "akr",
["Arakwal"] = "rkw",
["Aralle-Tabulahan"] = "atq",
["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 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",
["Asaro'o"] = "mtv",
["Ashe"] = "ahs",
["Ashkun"] = "ask",
["Asho Chin"] = "csh",
["Ashraaf"] = "cus-ash",
["Asháninka"] = "cni",
["Ashéninka Pajonal"] = "cjo",
["Ashéninka Perené"] = "prq",
["Asilulu"] = "asl",
["Askopan"] = "eiv",
["Asoa"] = "asv",
["Assan"] = "xss",
["Assangori"] = "sjg",
["Assiniboine"] = "asb",
["อารามายาใหม่แบบอัสซีเรีย"] = "aii",
["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",
["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",
["Austronesian Mari"] = "hob",
["Auwe"] = "smf",
["Auyana"] = "auy",
["Auye"] = "auu",
["Auyokawa"] = "auo",
["Avatime"] = "avn",
["Avau"] = "avb",
["Avava"] = "tmb",
["Avikam"] = "avi",
["Avokaya"] = "avu",
["Avá-Canoeiro"] = "avv",
["Awa (China)"] = "vwa",
["Awa (New Guinea)"] = "awb",
["Awa-Cuaiquer"] = "kwi",
["Awabakal"] = "awk",
["Awak"] = "awo",
["Awar"] = "aya",
["Awara"] = "awx",
["Awbono"] = "awh",
["Aweer"] = "bob",
["Awera"] = "awr",
["Awetí"] = "awe",
["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",
["Ayomán"] = "sai-ayo",
["Ayoquesco Zapotec"] = "zaf",
["Ayoreo"] = "ayo",
["Ayu"] = "ayu",
["Ayutla Mixtec"] = "miy",
["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",
["Bada"] = "bhz",
["Badanchi"] = "bau",
["Bade"] = "bde",
["Badeshi"] = "bdz",
["Badimaya"] = "bia",
["Baduy"] = "bac",
["Badyara"] = "pbp",
["Baeggu"] = "bvd",
["Baelelea"] = "bvc",
["Baenan"] = "sai-bae",
["Baetora"] = "btr",
["Bafanji"] = "bfj",
["Bafaw"] = "bwt",
["Bafia"] = "ksf",
["Bafut"] = "bfd",
["Baga Kaloum"] = "bqf",
["Baga Koga"] = "bgo",
["Baga Manduri"] = "bmd",
["Baga Pokur"] = "bcg",
["Baga Sitemu"] = "bsp",
["Baga Sobané"] = "bsv",
["Bagheli"] = "bfy",
["Bagirmi"] = "bmi",
["Bago-Kusuntu"] = "bqg",
["Bagri"] = "bgq",
["Bagua"] = "sai-bag",
["Bagupi"] = "bpi",
["Bagusa"] = "bqb",
["Bagvalal"] = "kva",
["Baha"] = "yha",
["Baham"] = "bdw",
["Bahamian Creole"] = "bah",
["Bahau"] = "bhv",
["Bahinemo"] = "bjh",
["Bahing"] = "bhj",
["Bahonsuai"] = "bsu",
["Bai (South Sudan)"] = "bdj",
["Baibai"] = "bbf",
["Baikeno"] = "bkx",
["Bailang"] = "tbq-blg",
["Baima"] = "bqh",
["Baimak"] = "bmx",
["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 Malay"] = "mhp",
["Balkan Gagauz Turkish"] = "bgx",
["Balkan Romani"] = "rmn",
["Balo"] = "bqo",
["Baloi"] = "biz",
["Balong"] = "bnt-bal",
["Baltic Romani"] = "rml",
["Baluan-Pam"] = "blq",
["Bamako Sign Language"] = "bog",
["Bamali"] = "bbq",
["Bambalang"] = "bmo",
["Bambam"] = "ptu",
["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",
["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",
["Basketo"] = "bst",
["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",
["Batu"] = "btu",
["Batui"] = "zbt",
["Batuley"] = "bay",
["Bau"] = "bbd",
["Bau Bidayuh"] = "sne",
["Bauchi"] = "bsf",
["Baure"] = "brg",
["Bauria"] = "bge",
["Bauro"] = "bxa",
["Bauwaki"] = "bwk",
["Bauzi"] = "bvz",
["Bawm Chin"] = "bgr",
["Bay Miwok"] = "mkq",
["Bayali"] = "bjy",
["Baybayanon"] = "bvy",
["Baygo"] = "byg",
["Bayogoula"] = "nai-bay",
["Bayono"] = "byl",
["Bayot"] = "bda",
["Bayungu"] = "bxj",
["Bazigar"] = "bfr",
["Baïnounk Gubëeher"] = "alv-bgu",
["Beami"] = "beo",
["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",
["Belhariya"] = "byw",
["Beli"] = "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",
["Benggoi"] = "bgy",
["Bengkala Sign Language"] = "bqy",
["Bentong"] = "bnu",
["Benyadu'"] = "byd",
["Beothuk"] = "bue",
["Bepour"] = "bie",
["Bera"] = "brf",
["Berakou"] = "bxv",
["Berau Malay"] = "bve",
["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",
["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",
["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",
["Bijori"] = "bix",
["Bikaru"] = "bic",
["Bikya"] = "byb",
["Bila"] = "bip",
["Bilakura"] = "bql",
["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",
["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",
["Bisorio"] = "bir",
["Bissa"] = "bib",
["Bit"] = "bgk",
["Bitare"] = "brt",
["Bitur"] = "mcc",
["Biwat"] = "bwm",
["Biyo"] = "byo",
["Biyom"] = "bpm",
["Blablanga"] = "blp",
["Blackfoot"] = "bla",
["Blafe"] = "bfh",
["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 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",
["Bolgo"] = "bvo",
["Bolia"] = "bli",
["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",
["Bourguignon"] = "roa-brg",
["Bozaba"] = "bzo",
["Bragat"] = "aof",
["Brazilian Sign Language"] = "bzs",
["Brek Karen"] = "kvl",
["Brem"] = "buq",
["Breri"] = "brq",
["Bribri"] = "bzd",
["British Sign Language"] = "bfi",
["Brokkat"] = "bro",
["Brokpake"] = "sgt",
["Brokskat"] = "bkk",
["Broome Pearling Lugger Pidgin"] = "bpl",
["Brunei Bisaya"] = "bsb",
["Bruny Island"] = "xpz",
["Bu"] = "jid",
["Bu-Nao Bunu"] = "bwx",
["Bua"] = "bub",
["Bualkhaw Chin"] = "cbl",
["Buamu"] = "box",
["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",
["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 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",
["Burmeso"] = "bzu",
["Buru (Indonesia)"] = "mhs",
["Buru (Nigeria)"] = "bqw",
["Burui"] = "bry",
["Burumakok"] = "aip",
["Burun"] = "bdi",
["Burunge"] = "bds",
["Burushaski"] = "bsk",
["Burusu"] = "bqr",
["Buruwai"] = "asi",
["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",
["Caolan"] = "mlc",
["Capanahua"] = "kaq",
["Capiznon"] = "cps",
["Cappadocian Greek"] = "cpg",
["Caquinte"] = "cot",
["Cara"] = "cfd",
["Carabayo"] = "cby",
["Caramanta"] = "crf",
["Caranqui"] = "sai-caq",
["Carapana"] = "cbc",
["Carian"] = "xcr",
["Cariay"] = "awd-kar",
["Carijona"] = "cbd",
["Carolina Algonquian"] = "crr",
["Carolinian"] = "cal",
["Carpathian Romani"] = "rmc",
["Carrier"] = "crx",
["Cashibo-Cacataibo"] = "cbr",
["Cashinahua"] = "cbs",
["Casiguran Dumagat Agta"] = "dgc",
["Casuarina Coast Asmat"] = "asc",
["Catacao"] = "sai-cat",
["Catalan Sign Language"] = "csc",
["Catawba"] = "chc",
["Catuquinaru"] = "sai-ctq",
["Catío Chibcha"] = "cba-cat",
["Cauca"] = "cca",
["Cavineña"] = "cav",
["Cayubaba"] = "cyb",
["Cayuga"] = "cay",
["Cayuse"] = "xcy",
["Cazcan"] = "azc-caz",
["Cañari"] = "sai-cnr",
["Cebaara Senoufo"] = "sef",
["Celtiberian"] = "xce",
["Cen"] = "cen",
["Central Asmat"] = "cns",
["Central Atlas Tamazight"] = "tzm",
["Central Awyu"] = "awu",
["Central Bai"] = "bca",
["Central Bontoc"] = "lbk",
["Central Cagayan Agta"] = "agt",
["ฟรังโกเนียตอนกลาง"] = "gmw-cfr",
["Central Grebo"] = "grv",
["Central Huasteca Nahuatl"] = "nch",
["Central Huishui Hmong"] = "hmc",
["Central Mahuatlán Zapotec"] = "zam",
["Central Mansi"] = "mns-cen",
["Central Masela"] = "mxz",
["Central Mashan Hmong"] = "hmm",
["Central Mazahua"] = "maz",
["Central Melanau"] = "mel",
["Central Ojibwa"] = "ojc",
["Central Pame"] = "pbs",
["Central Pomo"] = "poo",
["Central Puebla Nahuatl"] = "ncx",
["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",
["Chaha"] = "sem-cha",
["Chaima"] = "ciy",
["Chairel"] = "sit-cha",
["Chak"] = "ckh",
["Chakali"] = "cli",
["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",
["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",
["Chayahuita"] = "cbt",
["Chayuco Mixtec"] = "mih",
["Chazumba Mixtec"] = "xtb",
["Che"] = "ruk",
["Cheke Holo"] = "mrn",
["Chemakum"] = "xch",
["Chenapian"] = "cjn",
["Chenchu"] = "cde",
["Chenoua"] = "cnu",
["Chepang"] = "cdm",
["Chepya"] = "ycp",
["Cherepon"] = "cpn",
["Chesu"] = "ych",
["Chetco-Tolowa"] = "ctc",
["Chewong"] = "cwg",
["Chhattisgarhi"] = "hne",
["Chhintange"] = "ctn",
["Chhulung"] = "cur",
["Chiangmai Sign Language"] = "csd",
["Chiapanec"] = "cip",
["Chibcha"] = "chb",
["Chicahuaxtla Triqui"] = "trs",
["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 Pidgin English"] = "cpi",
["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",
["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",
["Chukwa"] = "cuw",
["Chulym"] = "clw",
["Chumburung"] = "ncu",
["Churahi"] = "cdj",
["Church Slavonic"] = "zls-chs",
["Churuya"] = "sai-chu",
["Chut"] = "scb",
["Chuukese"] = "chk",
["Chuvan"] = "xcv",
["Chácobo"] = "cao",
["Ci Gbe"] = "cib",
["Cia-Cia"] = "cia",
["Cibak"] = "ckl",
["Cicipu"] = "awc",
["Ciguayo"] = "nai-cig",
["คิมบรี"] = "cim",
["Cinamiguin Manobo"] = "mkx",
["Cinda-Regi-Tiyal"] = "cdr",
["Cineni"] = "cie",
["Cinta Larga"] = "cin",
["Cishingini"] = "asg",
["Citak"] = "txt",
["Ciwogai"] = "tgd",
["แกลิกคลาสสิก"] = "ghc",
["Classical Mandaic"] = "myz",
["ซีรีแอกคลาสสิก"] = "syc",
["Coahuilteco"] = "xcw",
["Coast Miwok"] = "csi",
["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",
["Coquille"] = "coq",
["Cora"] = "crn",
["Cori"] = "cry",
["Coroado Puri"] = "sai-crd",
["Cosoleacaque Nahuatl"] = "nhk",
["Costa Rican Sign Language"] = "csr",
["Cotabato Manobo"] = "mta",
["Cotoname"] = "xcn",
["Cowlitz"] = "cow",
["Coyaima"] = "coy",
["Coyotepec Popoloca"] = "pbf",
["Coyutla Totonac"] = "toc",
["Creek"] = "mus",
["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",
["Cung"] = "cug",
["Cupeño"] = "cup",
["Curonian"] = "xcu",
["Curripaco"] = "kpc",
["Cutchi-Swahili"] = "ccl",
["Cuvok"] = "cuv",
["Cuyamecalco Mixtec"] = "xtu",
["Cuyunon"] = "cyo",
["Cwi Bwamu"] = "bwy",
["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",
["Dakpa"] = "dka",
["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 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",
["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",
["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",
["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",
["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 Low Saxon"] = "nds-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",
["Dzuun"] = "dnn",
["Dâw"] = "kwa",
["E"] = "eee",
["E'ma Buyang"] = "yzg",
["Early Old Oghuz"] = "trk-eog",
["Early Tripuri"] = "xtr",
["East Damar"] = "dmr",
["ฟรังโกเนียตะวันออก"] = "vmf",
["East Futuna"] = "fud",
["East Kewa"] = "kjs",
["East Limba"] = "lma",
["East Masela"] = "vme",
["East Nyala"] = "nle",
["East Tarangan"] = "tre",
["East Yugur"] = "yuy",
["Eastern Acipa"] = "acp",
["Eastern Arrernte"] = "aer",
["Eastern Bolivian Guarani"] = "gui",
["Eastern Bontoc"] = "ebk",
["Eastern Canadian Inuktitut"] = "ike",
["Eastern Durango Nahuatl"] = "azd",
["Eastern Gorkha Tamang"] = "tge",
["Eastern Gurung"] = "ggn",
["Eastern Highland Chatino"] = "cly",
["Eastern Highland Otomi"] = "otm",
["Eastern Huasteca Nahuatl"] = "nhe",
["Eastern Huishui Hmong"] = "hme",
["Eastern Karaboro"] = "xrb",
["Eastern Keres"] = "kee",
["Eastern Khanty"] = "kca-eas",
["Eastern Krahn"] = "kqo",
["Eastern Lalu"] = "yit",
["Eastern Magar"] = "mgp",
["Eastern Maninkakan"] = "emk",
["Eastern Mari"] = "mhr",
["Eastern Meohang"] = "emg",
["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 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",
["Edopi"] = "dbf",
["Efai"] = "efa",
["Efe"] = "efe",
["Efik"] = "efi",
["Efutop"] = "ofu",
["Ega"] = "ega",
["Eggon"] = "ego",
["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",
["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",
["Emplawas"] = "emw",
["En"] = "enc",
["Enawené-Nawé"] = "unk",
["Ende"] = "end",
["Enga"] = "enq",
["Engenni"] = "enn",
["Enggano"] = "eno",
["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",
["Esan"] = "ish",
["Ese"] = "mcq",
["Ese Ejja"] = "ese",
["Esimbi"] = "ags",
["Eskayan"] = "esy",
["Esmeralda"] = "sai-esm",
["Esselen"] = "esq",
["Estado de México Otomi"] = "ots",
["Estonian Sign Language"] = "eso",
["Esuma"] = "esm",
["Etchemin"] = "etc",
["Etebi"] = "etb",
["Eten"] = "etx",
["Eteocretan"] = "ecr",
["Eteocypriot"] = "ecy",
["Ethiopian Sign Language"] = "eth",
["Etkywan"] = "ich",
["Eton (Cameroon)"] = "eto",
["Eton (Vanuatu)"] = "etn",
["Etulo"] = "utr",
["Evant"] = "bzz",
["Ewage-Notu"] = "nou",
["Ewarhuyana"] = "sai-ewa",
["Ewondo"] = "ewo",
["Eyak"] = "eya",
["Ezaa"] = "eza",
["Fagani"] = "faf",
["Faire Atta"] = "azt",
["Faita"] = "faj",
["Faiwol"] = "fai",
["Fakkanci"] = "gel",
["Falam Chin"] = "cfm",
["Fali"] = "fli",
["Fam"] = "fam",
["Fanagalo"] = "fng",
["Fanamaket"] = "bjp",
["Fang (Bantu)"] = "fan",
["Fang (Beboid)"] = "fak",
["Fania"] = "fni",
["Far Western Muria"] = "fmu",
["ฟราฟรา"] = "gur",
["Fas"] = "fqs",
["Fasu"] = "faa",
["Fataleka"] = "far",
["Fataluku"] = "ddg",
["Fayu"] = "fau",
["Fe'fe'"] = "fmp",
["Fedan"] = "pdn",
["Fembe"] = "agl",
["Fer"] = "kah",
["Feroge"] = "fer",
["Filomena Mata-Coahuitlán Totonac"] = "tlp",
["Fingallian"] = "gmw-fin",
["Finisterre Yau"] = "yuw",
["Finnish Sign Language"] = "fse",
["Finnish-Swedish Sign Language"] = "fss",
["Finongan"] = "fag",
["Fipa"] = "fip",
["Firan"] = "fir",
["Fiwaga"] = "fiw",
["Flemish Sign Language"] = "vgt",
["Flinders Island"] = "fln",
["Foau"] = "flh",
["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",
["French Belgian Sign Language"] = "sfb",
["French Sign Language"] = "fsl",
["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",
["Gagnoa Bété"] = "btg",
["Gahri"] = "bfu",
["Gaikundi"] = "gbf",
["Gaina"] = "gcn",
["Gal"] = "gap",
["Galambu"] = "glo",
["Galatian"] = "xga",
["Galela"] = "gbi",
["Galeya"] = "gar",
["Galice"] = "gce",
["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-Ningi"] = "bte",
["Gana"] = "gnq",
["Ganang"] = "gne",
["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",
["Garre"] = "gex",
["Garus"] = "gyb",
["Garza"] = "xgr",
["Gashowu Yokuts"] = "yok-gsy",
["Gata'"] = "gaq",
["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",
["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",
["Gepo"] = "ygp",
["Gera"] = "gew",
["Gerka"] = "gek",
["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",
["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",
["Gogo"] = "gog",
["Gogodala"] = "ggw",
["Goguryeo"] = "zkg",
["Gojri"] = "gju",
["Gokana"] = "gkn",
["Gokhy"] = "tbq-gkh",
["Gola"] = "gol",
["Golin"] = "gvf",
["Golpa"] = "lja",
["Gone Dau"] = "goo",
["Gongduk"] = "goe",
["Gonja"] = "gjn",
["Goo"] = "gov",
["Gor"] = "gqr",
["Gorakor"] = "goc",
["Gorap"] = "goq",
["Goreng"] = "xgg",
["Gorontalo"] = "gor",
["Gorovu"] = "grq",
["Gorwaa"] = "gow",
["Gottscheerish"] = "gmw-gts",
["Goundo"] = "goy",
["Gourmanchéma"] = "gux",
["Gowlan"] = "goj",
["Gowro"] = "gwf",
["Gozarkhani"] = "goz",
["Grangali"] = "nli",
["Grass Koiari"] = "kbk",
["Greek Sign Language"] = "gss",
["Green Gelao"] = "giq",
["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 Sign Language"] = "lgs",
["Guinean Sign Language"] = "gus",
["Guiqiong"] = "gqi",
["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",
["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",
["Hainyaxo Bozo"] = "bzx",
["Haiphong Sign Language"] = "haf",
["Haisla"] = "has",
["Haitian Vodoun Culture Language"] = "hvc",
["Haiǁom"] = "hgm",
["Haji"] = "hji",
["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",
["Harami"] = "xha",
["Harappan"] = "xiv",
["Harari"] = "har",
["Haraza"] = "nub-har",
["Harijan Kinnauri"] = "kjo",
["Haroi"] = "hro",
["Harsusi"] = "hss",
["Haruai"] = "tmd",
["Haruku"] = "hrk",
["หริยาณวี"] = "bgc",
["Harzani"] = "hrz",
["Hasaitic"] = "sem-has",
["Hasha"] = "ybj",
["Hassaniya Arabic"] = "mey",
["Hatam"] = "had",
["Hattic"] = "xht",
["Hausa Sign Language"] = "hsl",
["Haush"] = "sai-hau",
["Havasupai-Walapai-Yavapai"] = "yuf",
["Haveke"] = "hvk",
["Havu"] = "hav",
["Hawai'i Pidgin Sign Language"] = "hps",
["Hawaiian Creole"] = "hwc",
["Haya"] = "hay",
["Hdi"] = "xed",
["Hehe"] = "heh",
["Heiban"] = "hbn",
["Heiltsuk"] = "hei",
["Helong"] = "heg",
["Hema"] = "nix",
["Hemba"] = "hem",
["Herdé"] = "hed",
["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",
["Hijuk"] = "hij",
["Hill Maria"] = "mrr",
["Himarimã"] = "hir",
["Hindi Dogri"] = "dgo",
["Hinduri"] = "hii",
["Hinukh"] = "gin",
["Hismaic"] = "sem-his",
["Hitchiti"] = "nai-hit",
["Hittite"] = "hit",
["Hitu"] = "htu",
["Hiw"] = "hiw",
["Hixkaryana"] = "hix",
["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",
["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 Sign Language"] = "hsh",
["Hungworo"] = "nat",
["Hunjara-Kaina Ke"] = "hkk",
["Hunnic"] = "xhc",
["Hunzib"] = "huz",
["Hupa"] = "hup",
["Hupdë"] = "jup",
["Hupla"] = "hap",
["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",
["Ibanag"] = "ibg",
["Ibani"] = "iby",
["Ibatan"] = "ivb",
["Iberian"] = "xib",
["Ibibio"] = "ibb",
["Ibino"] = "ibn",
["Iboko"] = "bkp",
["Ibu"] = "ibu",
["Ibuoro"] = "ibr",
["Icelandic Sign Language"] = "icl",
["Iceve-Maci"] = "bec",
["Idakho-Isukha-Tiriki"] = "ida",
["Idaté"] = "idt",
["Idere"] = "ide",
["Idesa"] = "ids",
["Idi"] = "idi",
["Idiom Neutral"] = "mis-idn",
["Idoma"] = "idu",
["Idon"] = "idc",
["Idu"] = "clk",
["Idun"] = "ldb",
["Iduna"] = "viv",
["Ifo"] = "iff",
["Ifè"] = "ife",
["Igala"] = "igl",
["Igana"] = "igg",
["Igede"] = "ige",
["Ignaciano"] = "ign",
["Igo"] = "ahl",
["Iguta"] = "nar",
["Igwe"] = "igw",
["Iha"] = "ihp",
["Ihievbe"] = "ihi",
["Ija-Zuba"] = "vki",
["Ik"] = "ikx",
["Ika"] = "ikk",
["Ikaranggal"] = "ikr",
["Ikizu"] = "ikz",
["Iko"] = "iki",
["Ikobi-Mena"] = "meb",
["Ikoma"] = "ntk",
["Ikpeng"] = "txi",
["Ikpeshi"] = "ikp",
["Ikposo"] = "kpo",
["Iku-Gora-Ankwa"] = "ikv",
["Ikulu"] = "ikl",
["Ikwere"] = "ikw",
["Ikwo"] = "iqw",
["Ila"] = "ilb",
["Ile Ape"] = "ila",
["Ilgar"] = "ilg",
["Ili Turki"] = "ili",
["Ili'uun"] = "ilu",
["Ilianen Manobo"] = "mbi",
["Illyrian"] = "xil",
["Ilongot"] = "ilk",
["Ilue"] = "ilv",
["Ilwana"] = "mlk",
["Imbongu"] = "imo",
["Imonda"] = "imn",
["Imroing"] = "imr",
["Inabaknon"] = "abx",
["Inapang"] = "mzu",
["Indanga"] = "bnt-ind",
["Indo-Portuguese"] = "idb",
["Indri"] = "idr",
["Indus Kohistani"] = "mvy",
["Inebu One"] = "oin",
["Ineseño"] = "inz",
["Inga"] = "inb",
["Inlaod Itneg"] = "iti",
["Inoke-Yate"] = "ino",
["Inonhan"] = "loc",
["Inor"] = "ior",
["Inpui Naga"] = "nkf",
["International Sign"] = "ils",
["Interslavic"] = "isv",
["Intha"] = "int",
["Inuinnaqtun"] = "esx-inq",
["Inuit Sign Language"] = "iks",
["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",
["Iraqw"] = "irk",
["Irarutu"] = "irh",
["Iraya"] = "iry",
["Iresim"] = "ire",
["Iriga Bicolano"] = "bto",
["Irish Sign Language"] = "isg",
["Irula"] = "iru",
["Isabi"] = "isa",
["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",
["Istro-Romanian"] = "ruo",
["Isu"] = "isu",
["Isubu"] = "szv",
["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",
["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 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 Sign Language"] = "jsl",
["Japhug"] = "sit-jap",
["Japrería"] = "jru",
["Jaqaru"] = "jqr",
["Jara"] = "jaf",
["Jarai"] = "jra",
["Jarawa"] = "anq",
["Jaru"] = "ddj",
["Jassic"] = "ysc",
["Jaunsari"] = "jns",
["Javindo"] = "jvd",
["Jawe"] = "jaz",
["Jaya"] = "jyy",
["Jebero"] = "jeb",
["Jeh"] = "jeh",
["Jehai"] = "jhi",
["Jeikó"] = "sai-jko",
["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",
["Jiba"] = "juo",
["Jibu"] = "jib",
["Jicarilla"] = "apj",
["Jie"] = "mis-jie",
["Jiiddu"] = "jii",
["Jilbe"] = "jie",
["Jili"] = "mgi",
["Jilim"] = "jil",
["Jimi"] = "jmi",
["Jimjimen"] = "jim",
["Jina"] = "jia",
["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",
["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",
["Kabiyé"] = "kbp",
["Kabola"] = "klz",
["Kabore One"] = "onk",
["Kabras"] = "lkb",
["Kaburi"] = "uka",
["Kabutra"] = "kbu",
["Kabwa"] = "cwa",
["Kabwari"] = "kcw",
["Kachama-Ganjule"] = "kcx",
["Kachari"] = "xac",
["Kachi Koli"] = "gjk",
["Kacipo-Balesi"] = "koe",
["Kaco'"] = "xkk",
["Kadai"] = "kzd",
["Kadar"] = "kej",
["Kadara"] = "kad",
["Kadaru"] = "kdu",
["Kadiwéu"] = "kbc",
["Kado"] = "kdv",
["Kadugli"] = "xtc",
["Kaduo"] = "ktp",
["Kaera"] = "jka",
["Kafa"] = "kbr",
["Kafoa"] = "kpu",
["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",
["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",
["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",
["Kamasa"] = "klp",
["Kamasau"] = "kms",
["Kamassian"] = "xas",
["Kamayo"] = "kyk",
["Kamayurá"] = "kay",
["Kamba"] = "kam",
["Kambaata"] = "ktb",
["Kambaira"] = "kyy",
["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",
["Kannada Kurumba"] = "kfi",
["Kannauji"] = "bjj",
["Kanowit"] = "kxn",
["Kanoé"] = "kxo",
["Kansa"] = "ksk",
["Kantosi"] = "xkt",
["Kanu"] = "khx",
["Kanufi"] = "kni",
["Kanyok"] = "kny",
["Kao"] = "kax",
["Kaonde"] = "kqn",
["Kap"] = "ykm",
["Kapauri"] = "khp",
["Kapin"] = "tbx",
["Kapinawá"] = "xpn",
["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",
["Karakhanid"] = "xqa",
["Karami"] = "xar",
["Karamojong"] = "kdj",
["Karang"] = "kzr",
["Karanga"] = "kth",
["Karankawa"] = "zkk",
["Karas"] = "kgv",
["Karata"] = "kpt",
["Karawa"] = "xrw",
["Karbi"] = "mjw",
["Kare (Central Africa)"] = "kbn",
["Kare (New Guinea)"] = "kmf",
["Karekare"] = "kai",
["Karey"] = "kyd",
["Kari"] = "kbj",
["Kari'na"] = "car",
["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",
["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",
["Kavet"] = "krv",
["Kawacha"] = "kcb",
["Kawaiisu"] = "xaw",
["Kawe"] = "kgb",
["Kawishana"] = "awd-kaw",
["Kawésqar"] = "alc",
["Kaxararí"] = "ktx",
["Kaxuyana"] = "kbb",
["Kayabí"] = "kyz",
["Kayagar"] = "kyt",
["Kayan Mahakam"] = "xay",
["Kayan River Kayan"] = "xkn",
["Kayapa Kallahan"] = "kak",
["Kayapó"] = "txu",
["Kayardild"] = "gyd",
["Kayeli"] = "kzl",
["Kayong"] = "kxy",
["Kayort"] = "kyv",
["Kaytetye"] = "gbb",
["Kayupulau"] = "kzu",
["Kazukuru"] = "kzk",
["Ke'o"] = "xxk",
["Keak"] = "keh",
["Keapara"] = "khz",
["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",
["Kesawai"] = "xes",
["Ket"] = "ket",
["Ketangalan"] = "kae",
["Kete"] = "kcv",
["Ketengban"] = "xte",
["Ketum"] = "ktt",
["Kewa"] = "kew",
["Keyagana"] = "kyg",
["Kgalagadi"] = "xkv",
["แฆแลจ"] = "klj",
["Khaling"] = "klr",
["Khamnigan Mongol"] = "ykh",
["Khamyang"] = "ksu",
["Khana"] = "ogo",
["Khandeshi"] = "khn",
["Khao"] = "xao",
["Kharam Naga"] = "kfw",
["Kharia"] = "khr",
["Kharia Thar"] = "ksy",
["Khayo"] = "lko",
["Khazar"] = "zkz",
["Khe"] = "kqg",
["Khehek"] = "tlx",
["Khengkha"] = "xkf",
["Khetrani"] = "xhe",
["Khezha Naga"] = "nkh",
["Khiamniungan Naga"] = "kix",
["Khinalug"] = "kjj",
["Khirwar"] = "kwx",
["Khisa"] = "kqm",
["Khlor"] = "llo",
["Khlula"] = "ykl",
["Khoekhoe"] = "naq",
["Khoibu Naga"] = "nkb",
["Khoini"] = "xkc",
["Kholok"] = "ktc",
["Kholosi"] = "inc-kho",
["Khorasani Turkish"] = "kmz",
["Khorezmian Turkic"] = "zkh",
["Khowar"] = "khw",
["Khroskyabs"] = "jiq",
["Khua"] = "xhv",
["Khuen"] = "khf",
["Khumi Chin"] = "cnk",
["Khvarshi"] = "khv",
["Khwarezmian"] = "xco",
["Khwe"] = "xuu",
["Kháng"] = "kjm",
["Kiautschou German Pidgin"] = "crp-kia",
["Kibala"] = "blv",
["Kibena"] = "bez",
["Kibet"] = "kie",
["Kibiri"] = "prm",
["Kichwa"] = "qwe-kch",
["Kickapoo"] = "kic",
["Kikai"] = "kzg",
["Kikami"] = "kcu",
["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",
["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",
["Kohumono"] = "bcs",
["Koi"] = "kkt",
["Koibal"] = "zkb",
["Koireng"] = "nkd",
["Koitabu"] = "kqi",
["Koiwat"] = "kxt",
["Kok-Nar"] = "gko",
["Kok-Paponk"] = "okg",
["Kokata"] = "ktd",
["Koke"] = "kou",
["Koko-Bera"] = "kkp",
["Kokoda"] = "xod",
["Kokola"] = "kzn",
["Kokota"] = "kkk",
["Kol (Cameroon)"] = "biw",
["Kol (New Guinea)"] = "kol",
["Kola"] = "kvv",
["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",
["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 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",
["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",
["Kota Marudu Tinagas"] = "ktr",
["Kotafon Gbe"] = "kqk",
["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",
["Kulon-Pazeh"] = "uun",
["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",
["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",
["Kunimaipa"] = "kup",
["Kunja"] = "pep",
["Kunjen"] = "kjn",
["Kunyi"] = "njx",
["Kunza"] = "kuz",
["Kuo"] = "xuo",
["Kuot"] = "kto",
["Kupa"] = "kug",
["Kupang Malay"] = "mkn",
["Kupia"] = "key",
["Kupsabiny"] = "kpz",
["Kur"] = "kuv",
["Kura Ede Nago"] = "nqk",
["Kurama"] = "krh",
["Kuranko"] = "knk",
["Kuri"] = "nbn",
["Kuria"] = "kuj",
["Kurichiya"] = "kfh",
["Kurmukar"] = "kfv",
["Kurnai"] = "unn",
["Kurrama"] = "vku",
["Kurti"] = "ktm",
["Kurtjar"] = "gdj",
["Kurtöp"] = "xkz",
["Kurudu"] = "kjr",
["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",
["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",
["Kâte"] = "kmg",
["Kélé"] = "keb",
["Kómnzo"] = "paa-kom",
["La'bi"] = "lbi",
["Laal"] = "gdm",
["Laalaa"] = "cae",
["Laba"] = "lau",
["Label"] = "lbb",
["Labir"] = "jku",
["Labo"] = "mwi",
["Labo Phowa"] = "ypb",
["Labu"] = "lbu",
["Labuk-Kinabatangan Kadazan"] = "dtb",
["Lacandon"] = "lac",
["Lachi"] = "lbt",
["Lachiguiri Zapotec"] = "zpa",
["Lachixío Zapotec"] = "zpl",
["Ladji-Ladji"] = "llj",
["Laeko-Libuat"] = "lkl",
["Lafofa"] = "laf",
["Laghu"] = "lgb",
["Laghuu"] = "lgh",
["Lagwan"] = "kot",
["Laha (Indonesia)"] = "lhh",
["Laha (Vietnam)"] = "lha",
["Lahanan"] = "lhn",
["Lahnda"] = "lah",
["Lahta Karen"] = "kvt",
["Lahu"] = "lhu",
["Lahu Shi"] = "lhi",
["Lahul Lohar"] = "lhl",
["Lai"] = "cnh",
["Laimbue"] = "lmx",
["Laitu Chin"] = "clj",
["Laiyolo"] = "lji",
["Laka"] = "lak",
["Lakalei"] = "lka",
["Lake Miwok"] = "lmw",
["Lakha"] = "lkh",
["Laki"] = "lki",
["Lakon"] = "lkn",
["Lakondê"] = "lkd",
["ลาโคตา"] = "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",
["Langam"] = "lnm",
["Langbashe"] = "lna",
["Langi"] = "lag",
["Langnian Buyang"] = "yln",
["Lango (Sudan)"] = "lno",
["Lango (Uganda)"] = "laj",
["Lanima"] = "lnw",
["Lanoh"] = "lnh",
["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",
["Latu"] = "ltu",
["Latundê"] = "ltn",
["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",
["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",
["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",
["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",
["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 Sign Language"] = "lbs",
["Ligbi"] = "lig",
["Ligenza"] = "lgz",
["Lihir"] = "lih",
["Lika"] = "lik",
["Liki"] = "lio",
["Likila"] = "lie",
["Likuba"] = "kxx",
["Likum"] = "lib",
["Likwala"] = "kwc",
["Lilau"] = "lll",
["Lillooet"] = "lil",
["Limassa"] = "bme",
["Limbum"] = "lmp",
["Limi"] = "ylm",
["Limilngan"] = "lmc",
["Limos Kalinga"] = "kmk",
["Linear A"] = "lab",
["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",
["Lithuanian Sign Language"] = "lls",
["Little Swanport"] = "aus-lsw",
["Litzlitz"] = "lzl",
["Lizu"] = "sit-liz",
["Lo-Toga"] = "lht",
["Loarki"] = "lrk",
["Lobala"] = "loq",
["Lobi"] = "lob",
["Lodhi"] = "lbm",
["Logba"] = "lgq",
["Logo"] = "log",
["Logol"] = "lof",
["Logooli"] = "rag",
["Logorik"] = "liu",
["Lokaa"] = "yaz",
["Loko"] = "lok",
["Lokoya"] = "lky",
["Lola"] = "lcd",
["Lolak"] = "llq",
["Lole"] = "llg",
["Lolo"] = "llb",
["Loloda"] = "loa",
["Lolopo"] = "ycl",
["Loma"] = "lom",
["Lomaiviti"] = "lmv",
["Lomakka"] = "loi",
["Lomavren"] = "rmi",
["Lombi"] = "lmi",
["Lombo"] = "loo",
["Lomwe"] = "ngl",
["Loncong"] = "lce",
["Long Phuri Naga"] = "lpn",
["Long Wat"] = "ttw",
["Longgu"] = "lgu",
["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",
["Loun"] = "lox",
["Loup A"] = "xlo",
["Loup B"] = "xlb",
["Lovono"] = "vnk",
["Lower Burdekin"] = "xbb",
["Lower Chehalis"] = "cea",
["Lower Grand Valley Dani"] = "dni",
["Lower Nossob"] = "nsb",
["Lower Southern Aranda"] = "axl",
["Lower Ta'oih"] = "tto",
["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",
["Lugbara"] = "lgg",
["Luguru"] = "ruf",
["Luhu"] = "lcq",
["Luhya"] = "luy",
["Luimbi"] = "lum",
["Luiseño"] = "lui",
["Lukpa"] = "dop",
["Lule"] = "ule",
["Lumba-Yakkha"] = "luu",
["Lumbee"] = "lmz",
["Lumbu"] = "lup",
["Lumun"] = "lmd",
["Lun Bawang"] = "lnd",
["Luna"] = "luj",
["Lunanakha"] = "luk",
["Lunda"] = "lun",
["Lungga"] = "lga",
["Luo"] = "luo",
["Luopohe Hmong"] = "hml",
["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",
["Luyana"] = "lyn",
["Lwalu"] = "lwa",
["Lwel"] = "lvl",
["Lycian"] = "xlc",
["Lydian"] = "xld",
["Lyélé"] = "lee",
["Láadan"] = "ldn",
["Láá Láá Bwamu"] = "bwj",
["Löyöp"] = "urr",
["Ma"] = "msj",
["Ma Manda"] = "skc",
["Ma'anyan"] = "mhy",
["Ma'di"] = "mhi",
["Ma'ya"] = "slz",
["Maaka"] = "mew",
["Maale"] = "mdy",
["Maay"] = "ymm",
["Maba"] = "mqa",
["Mabaale"] = "mmz",
["Mabaan"] = "mfz",
["Mabaka Valley Kalinga"] = "kkg",
["Mabire"] = "muj",
["Maca"] = "mca",
["Macaguaje"] = "mcl",
["Macaguán"] = "mbn",
["Macau Pidgin Portuguese"] = "crp-mpp",
["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",
["Magdalena Peñasco Mixtec"] = "xtm",
["Magiyi"] = "gmg",
["Magoma"] = "gmx",
["Magori"] = "zgr",
["Magɨ"] = "gkd",
["Mahali"] = "mjx",
["Mahasu Pahari"] = "bfz",
["Mahican"] = "mjy",
["Mahongwe"] = "mhb",
["Mahou"] = "mxx",
["Maiadomu"] = "mzz",
["Maiani"] = "tnh",
["Maii"] = "mmm",
["Mailu"] = "mgu",
["Maindo"] = "cwb",
["Maipure"] = "awd-mpr",
["Mairasi"] = "zrs",
["Maisin"] = "mbq",
["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",
["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 Paharia"] = "mkb",
["Mala (New Guinea)"] = "ped",
["Mala (Nigeria)"] = "ruy",
["Mala Malasar"] = "ima",
["Malaccan Creole Malay"] = "ccm",
["Malalamai"] = "mmt",
["Malalí"] = "sai-mal",
["Malango"] = "mln",
["Malankuravan"] = "mjo",
["Malapandaram"] = "mjp",
["Malaryan"] = "mjq",
["Malas"] = "mkr",
["Malasanga"] = "mqz",
["Malasar"] = "ymr",
["Malavedan"] = "mjr",
["Malawi Lomwe"] = "lon",
["Malawian Sign Language"] = "lws",
["Malayic Dayak"] = "xdy",
["Malaynon"] = "mlz",
["Malaysian Sign Language"] = "xml",
["Malba Birifor"] = "bfo",
["Male"] = "mdc",
["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 Sign Language"] = "mdl",
["Malua Bay"] = "mll",
["Malvi"] = "mup",
["Maléku Jaíka"] = "gut",
["Mam"] = "mam",
["Mama"] = "mma",
["Mamaa"] = "mhf",
["Mamaindé"] = "wmd",
["Mamanwa"] = "mmn",
["Mamara Senoufo"] = "myk",
["Mamasa"] = "mqj",
["Mambae"] = "mgm",
["Mambai"] = "mcs",
["Mamboru"] = "mvd",
["Mambwe-Lungu"] = "mgr",
["Mampruli"] = "maw",
["Mamuju"] = "mqx",
["Mamulique"] = "emm",
["Mamusi"] = "kdf",
["Mamvu"] = "mdi",
["Man Met"] = "mml",
["มลายูแบบมานาโด"] = "xmm",
["Manam"] = "mva",
["Manambu"] = "mle",
["Manangba"] = "nmm",
["Manangkari"] = "znk",
["Manao"] = "awd-man",
["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",
["Mandeali"] = "mjl",
["Mander"] = "mqr",
["Mandingo"] = "man",
["Mandinka"] = "mnk",
["Mandjak"] = "mfv",
["Mandobo Atas"] = "aax",
["Mandobo Bawah"] = "bwp",
["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",
["Manikion"] = "mnx",
["Manipa"] = "mqp",
["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",
["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",
["Maranungku"] = "zmr",
["Mararit"] = "mgb",
["Maratino"] = "sai-mar",
["Marau"] = "mvr",
["Marawan"] = "awd-mar",
["Marba"] = "mpg",
["Marenje"] = "vmr",
["Marfa"] = "mvu",
["Margany"] = "zmc",
["Marghi South"] = "mfm",
["Margi"] = "mrt",
["Maria"] = "mds",
["Mariaté"] = "awd-mrt",
["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",
["Marsian"] = "ims",
["Martha's Vineyard Sign Language"] = "mre",
["Marti Ke"] = "zmg",
["Martu Wangka"] = "mpj",
["Martuthunira"] = "vma",
["Marúbo"] = "mzr",
["Masaba"] = "myx",
["Masadiit Itneg"] = "tis",
["Masakará"] = "sai-msk",
["Masalit"] = "mls",
["Masana"] = "mcn",
["Masbate Sorsogon"] = "bks",
["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 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",
["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"] = "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",
["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 Cornish"] = "cnx",
["Middle Kannada"] = "dra-mkn",
["Middle Median"] = "xme-mid",
["Middle Scots"] = "gmw-msc",
["Middle Watut"] = "mpl",
["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",
["Mina"] = "hna",
["Minaean"] = "inm",
["Minang"] = "xrg",
["Minaveha"] = "mvn",
["Minderico"] = "drc",
["Mindiri"] = "mpn",
["Mingang Doso"] = "mko",
["Mingo"] = "iro-min",
["Minica Huitoto"] = "hto",
["Minidien"] = "wii",
["Minigir"] = "vmg",
["Minjungbal"] = "xjb",
["Minkin"] = "xxm",
["Minokok"] = "mqq",
["Minriq"] = "mnq",
["Mintil"] = "mzt",
["Miraya Bikol"] = "rbl",
["Mire"] = "mvh",
["Mirgan"] = "zrg",
["Miriti"] = "mmv",
["Miriwoong Sign Language"] = "rsm",
["Miriwung"] = "mep",
["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",
["Miyobe"] = "soy",
["Mlabri"] = "mra",
["Mlahsö"] = "lhs",
["Mlap"] = "kja",
["Mlomp"] = "mlo",
["Mmaala"] = "mmu",
["Mmani"] = "buy",
["Mmen"] = "bfm",
["Mo"] = "wkd",
["Mo'da"] = "gbn",
["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",
["Moken"] = "mwt",
["Mokerang"] = "mft",
["Moklen"] = "mkm",
["Mokole"] = "mkl",
["Mokpwe"] = "bri",
["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",
["Monastic Sign Language"] = "mzg",
["Mondropolon"] = "npn",
["Mondé"] = "mnd",
["Mongghul"] = "mjg-mgl",
["Mongo"] = "lol",
["Mongol"] = "mgt",
["Mongolian Sign Language"] = "msr",
["Mongondow"] = "mog",
["Moni"] = "mnz",
["Monimbo"] = "mom",
["Mono (California)"] = "mnr",
["Mono (Cameroon)"] = "mru",
["Mono (Congo)"] = "mnh",
["Monom"] = "moo",
["Monsang Naga"] = "nmh",
["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",
["Moro"] = "mor",
["Moroccan Amazigh"] = "zgh",
["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",
["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",
["Musar"] = "mmi",
["Musasa"] = "smm",
["Musey"] = "mse",
["Musgu"] = "mug",
["Muskum"] = "mje",
["Musom"] = "msu",
["Mussau-Emira"] = "emi",
["Muthuvan"] = "muv",
["Mutu"] = "tuc",
["Muya"] = "mvm",
["Muyang"] = "muy",
["Muyuw"] = "myw",
["Muzi"] = "ymz",
["Muzo"] = "sai-muz",
["Mvanip"] = "mcj",
["Mvuba"] = "mxh",
["Mwaghavul"] = "sur",
["Mwali Comorian"] = "wlc",
["Mwan"] = "moa",
["Mwatebu"] = "mwa",
["Mwera"] = "mwe",
["Mwerlap"] = "mrm",
["Mwimbi-Muthambi"] = "mws",
["Mwotlap"] = "mlv",
["Myene"] = "mye",
["Mysian"] = "yms",
["Mzieme Naga"] = "nme",
["Mághdì"] = "gmd",
["Mün Chin"] = "mwq",
["Mündü"] = "muh",
["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",
["Nai"] = "bio",
["Najdi Arabic"] = "ars",
["Naka'ela"] = "nae",
["Nakai"] = "nkj",
["Nakame"] = "nib",
["Nakanai"] = "nak",
["Nakara"] = "nck",
["Nake"] = "nbk",
["Naki"] = "mff",
["Nakwi"] = "nax",
["Nalca"] = "nlc",
["Nali"] = "nss",
["Nalik"] = "nal",
["Nalu"] = "naj",
["Nalögo"] = "nlz",
["Namakura"] = "nmk",
["Namat"] = "nkm",
["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",
["Nanerigé Sénoufo"] = "sen",
["Nanga Dama Dogon"] = "nzz",
["Nankina"] = "nnk",
["Nanti"] = "cox",
["Nanticoke"] = "nnt",
["Nanubae"] = "afk",
["Naolan"] = "nai-nao",
["Napu"] = "npy",
["Nar Phu"] = "npa",
["Nara"] = "nrb",
["Narak"] = "nac",
["Narango"] = "nrg",
["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",
["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",
["Nedebang"] = "nec",
["Nefamese"] = "nef",
["Nefusa"] = "jbn",
["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",
["Nepali Kurux"] = "kxl",
["Nete"] = "net",
["Neve'ei"] = "vnm",
["Neverver"] = "lgk",
["New River Shasta"] = "nai-nrs",
["New Zealand Sign Language"] = "nzs",
["Neyo"] = "ney",
["Nez Perce"] = "nez",
["Nga La"] = "hlt",
["Ngaanyatjarra"] = "ntj",
["Ngadha"] = "nxg",
["Ngadjunmaya"] = "nju",
["Ngadjuri"] = "jui",
["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",
["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",
["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",
["Noiri"] = "noi",
["Nokuku"] = "nkk",
["Nomaande"] = "lem",
["Nomane"] = "nof",
["Nomatsiguenga"] = "not",
["Nomlaki"] = "nol",
["Nomu"] = "noh",
["Nonuya"] = "noj",
["Nooksack"] = "nok",
["Noon"] = "snf",
["Noone"] = "nhu",
["Nootka"] = "nuk",
["Nopala Chatino"] = "cya",
["Noric"] = "nrc",
["Norn"] = "nrn",
["Norra"] = "nrr",
["North Ambrym"] = "mmg",
["North Asmat"] = "nks",
["North Awyu"] = "yir",
["North Babar"] = "bcd",
["North Boma"] = "boh",
["North Central Mixe"] = "neq",
["North Efate"] = "llp",
["North Fali"] = "fll",
["North Giziga"] = "gis",
["North Levantine Arabic"] = "apc",
["North Marquesan"] = "mrq",
["North Mofu"] = "mfk",
["มลายูแบบโมลุกกะเหนือ"] = "max",
["North Muyu"] = "kti",
["North Nuaulu"] = "nni",
["North Picene"] = "nrp",
["North Slavey"] = "scs",
["North Tairora"] = "tbg",
["North Tanna"] = "tnn",
["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 Bontoc"] = "rbk",
["Northern Catanduanes Bicolano"] = "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 Khanty"] = "kca-nor",
["Northern Kissi"] = "kqs",
["Northern Lorung"] = "lbr",
["Northern Luri"] = "lrc",
["Northern Mansi"] = "mns-nor",
["Northern Mashan Hmong"] = "hmp",
["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 Pomo"] = "pej",
["Northern Puebla Nahuatl"] = "ncj",
["Northern Pumi"] = "pmi",
["Northern Qiandong Miao"] = "hea",
["Northern Qiang"] = "cng",
["Northern Rengma Naga"] = "nnl",
["Northern Roglai"] = "rog",
["Northern Saharan Berber"] = "mzb",
["Northern Selkup"] = "sel-nor",
["Northern Sierra Miwok"] = "nsq",
["Northern Subanen"] = "stb",
["Northern Tarahumara"] = "thh",
["Northern Tepehuan"] = "ntp",
["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",
["Northwestern Tamang"] = "tmk",
["Norwegian Sign Language"] = "nsl",
["Notre"] = "bly",
["Notsi"] = "ncf",
["Nottoway"] = "ntw",
["Nottoway-Meherrin"] = "nwy",
["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",
["Nupbikha"] = "npb",
["Nupe"] = "nup",
["Nusa Laut"] = "nul",
["Nusu"] = "nuf",
["Nutabe"] = "cba-nut",
["Nyabwa"] = "nwb",
["Nyagrong Minyag"] = "ero-nya",
["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 Senoufo"] = "sev",
["Nyaturu"] = "rim",
["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ü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",
["Ocotepec Mixtec"] = "mie",
["Ocotlán Zapotec"] = "zac",
["Od"] = "odk",
["Odiai"] = "bhf",
["Odoodee"] = "kkc",
["Odual"] = "odu",
["Odut"] = "oda",
["Ofayé"] = "opy",
["Ofo"] = "ofo",
["Ogbah"] = "ogc",
["Ogbia"] = "ogb",
["Ogbogolo"] = "ogg",
["Ogbronuagum"] = "ogu",
["Ogea"] = "eri",
["Oirata"] = "oia",
["Ojitlán Chinantec"] = "chj",
["Okanagan"] = "oka",
["Okiek"] = "oki",
["Oko-Eni-Osayen"] = "oks",
["Oko-Juwoi"] = "okj",
["Okobo"] = "okb",
["Okodia"] = "okd",
["Okolod"] = "kqv",
["Okpamheri"] = "opa",
["Okpe (Northwestern Edo)"] = "okx",
["Okpe (Southwestern Edo)"] = "oke",
["Okpela"] = "atg",
["Oksapmin"] = "opm",
["Oku"] = "oku",
["Okwanuchu"] = "nai-okw",
["Old Awadhi"] = "inc-oaw",
["Old Gutnish"] = "gmq-ogt",
["Old Kannada"] = "dra-okn",
["Old Kentish Sign Language"] = "okl",
["Old Komi"] = "urj-koo",
["Old Median"] = "xme-old",
["Old Navarro-Aragonese"] = "roa-ona",
["Old Novgorodian"] = "zle-ono",
["Old Prussian"] = "prg",
["รูซินเก่า"] = "zle-ort",
["อาหรับใต้เก่า"] = "sem-srb",
["Old Sundanese"] = "osn",
["Old Tati"] = "xme-ott",
["Old Telugu"] = "dra-ote",
["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",
["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",
["Ontenu"] = "ont",
["Ontong Java"] = "ojv",
["Oorlams"] = "oor",
["Opao"] = "opo",
["Opata"] = "opt",
["Opuuo"] = "lgn",
["Opón"] = "sai-opo",
["Oraon Sadri"] = "sdr",
["Orejón"] = "ore",
["Oring"] = "org",
["Orizaba Nahuatl"] = "nlv",
["Orléanais"] = "roa-orl",
["Ormu"] = "orz",
["Ormuri"] = "oru",
["Oro"] = "orx",
["Oro Win"] = "orw",
["Oroch"] = "oac",
["Oroha"] = "ora",
["Orok"] = "oaa",
["Orokaiva"] = "okv",
["Oroko"] = "bdu",
["Orokolo"] = "oro",
["Oroqen"] = "orh",
["Orowe"] = "bpk",
["Oruma"] = "orr",
["Orya"] = "ury",
["Osage"] = "osa",
["Osamayi"] = "syx",
["Osatu"] = "ost",
["Oscan"] = "osc",
["Ososo"] = "oso",
["Ot Danum"] = "otd",
["Otank"] = "uta",
["Oti"] = "oti",
["Otomaco"] = "sai-oto",
["Otoro"] = "otr",
["Ottawa"] = "otw",
["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-Hng"] = "pha",
["Paamese"] = "pma",
["Paasaal"] = "sig",
["Pacahuara"] = "pcp",
["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",
["Pajapan Nahuatl"] = "nhp",
["Pak-Tong"] = "pkg",
["Pakanha"] = "pkn",
["Pakistan Sign Language"] = "pks",
["Paku"] = "pku",
["Paku Karen"] = "jkp",
["Pal"] = "abw",
["Palaic"] = "plq",
["Palaka Senoufo"] = "plr",
["Palantla Chinantec"] = "cpa",
["Palawan Batak"] = "bya",
["Paleni"] = "pnl",
["Palenquero"] = "pln",
["Palewyami Yokuts"] = "yok-ply",
["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",
["Pangwa"] = "pbr",
["Panim"] = "pnr",
["Paniya"] = "pcg",
["Pankararé"] = "pax",
["Pankararú"] = "paz",
["Pankhu"] = "pkh",
["Pannei"] = "pnc",
["Panobo"] = "pno",
["Panyi Bai"] = "bfc",
["Panyjima"] = "pnw",
["Panzaleo"] = "sai-pnz",
["Pao"] = "ppa",
["Papantla Totonac"] = "top",
["Papapana"] = "ppn",
["Papar"] = "dpp",
["Papasena"] = "pas",
["Papel"] = "pbo",
["Papi"] = "ppe",
["Papora"] = "ppu",
["Papua New Guinean Sign Language"] = "pgz",
["Papuan Malay"] = "pmy",
["Papuma"] = "ppm",
["Para Naga"] = "pzn",
["Parachi"] = "prc",
["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",
["พาร์เทีย"] = "xpr",
["Parya"] = "paq",
["Pará Gavião"] = "gvp",
["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",
["Pattapu"] = "ptq",
["Patwin"] = "pwi",
["Paulohi"] = "plh",
["Paumarí"] = "pad",
["Paunaka"] = "pnk",
["Pauri Bareli"] = "bfb",
["Pauserna"] = "psm",
["Pawaia"] = "pwa",
["Pawnee"] = "paw",
["Payaguá"] = "sai-pyg",
["Paynamar"] = "pmr",
["Pazeh"] = "pzh",
["Pe"] = "pai",
["ปอร์"] = "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",
["Penobscot"] = "aaq",
["Penrhyn"] = "pnh",
["Pentlatch"] = "ptw",
["Perai"] = "wet",
["Peranakan Indonesian"] = "pea",
["Perema"] = "wom",
["Pericú"] = "nai-per",
["Pero"] = "pip",
["Persian Sign Language"] = "psc",
["Peruvian Sign Language"] = "prl",
["Petapa Zapotec"] = "zpe",
["Petats"] = "pex",
["Petjo"] = "pey",
["Peñoles Mixtec"] = "mil",
["Phai"] = "prt",
["Phala"] = "ypa",
["Phana'"] = "phq",
["Phangduwali"] = "phw",
["Phende"] = "pem",
["Philippine Sign Language"] = "psp",
["Philistine"] = "mis-phi",
["Phimbi"] = "phm",
["Phola"] = "ypg",
["Pholo"] = "yip",
["Phom"] = "nph",
["Phong-Kniang"] = "pnx",
["Phrygian"] = "xpg",
["Phudagi"] = "phd",
["Phuie"] = "pug",
["Phukha"] = "phh",
["Phuma"] = "ypm",
["Phuong"] = "phg",
["Phupa"] = "ypp",
["Phupha"] = "yph",
["Phuthi"] = "bnt-phu",
["Phuza"] = "ypz",
["Piamatsina"] = "ptr",
["Piame"] = "pin",
["Piapoco"] = "pio",
["Piaroa"] = "pid",
["Pichinglis"] = "fpe",
["Pichis Ashéninka"] = "cpu",
["Pictish"] = "xpi",
["Picuris"] = "nai-pic",
["Pidgin Delaware"] = "dep",
["Pidgin Iha"] = "ihb",
["Pidgin Onin"] = "onx",
["Pijao"] = "pij",
["Pije"] = "piz",
["Pijin"] = "pis",
["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",
["Pirahã"] = "myp",
["Piratapuyo"] = "pir",
["Pirlatapa"] = "bxi",
["Piro"] = "pie",
["Pirriya"] = "xpa",
["Pisabo"] = "pig",
["Pisaflores Tepehua"] = "tpp",
["Piscataway"] = "psy",
["Pisidian"] = "xps",
["Pitcairn-Norfolk"] = "pih",
["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",
["Playero"] = "gob",
["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 Sign Language"] = "pso",
["Polonombauk"] = "plb",
["Pom"] = "pmo",
["Ponam"] = "ncc",
["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 Sign Language"] = "psr",
["Potawatomi"] = "pot",
["Potiguára"] = "pog",
["Poumei Naga"] = "pmx",
["Pouye"] = "bye",
["Powari"] = "pwr",
["Powhatan"] = "pim",
["Poyanáwa"] = "pyn",
["Prasuni"] = "prn",
["Pre-Samnite"] = "itc-psa",
["Primitive Irish"] = "pgl",
["Principense"] = "pre",
["Proto-Abkhaz-Abaza"] = "cau-abz-pro",
["Proto-Amuesha-Chamicuro"] = "awd-amc-pro",
["Proto-Andian"] = "cau-and-pro",
["Proto-Apachean"] = "apa-pro",
["Proto-Arawa"] = "auf-pro",
["Proto-Arawak"] = "awd-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-Avaro-Andian"] = "cau-ava-pro",
["Proto-Bahnaric"] = "mkh-ban-pro",
["Proto-Bai"] = "sit-bai-pro",
["Proto-Batak"] = "btk-pro",
["Proto-Binanderean"] = "paa-bin-pro",
["Proto-Bodish"] = "sit-bdi-pro",
["Proto-Bongo-Bagirmi"] = "csu-bba-pro",
["Proto-Boran"] = "sai-bor-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-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-Cerrado"] = "sai-cer-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-Eastern Jebel"] = "sdv-eje-pro",
["Proto-Eastern Oti-Volta"] = "nic-eov-pro",
["Proto-Edekiri"] = "alv-edk-pro",
["Proto-Edoid"] = "alv-edo-pro",
["Proto-Ersuic"] = "sit-ers-pro",
["Proto-Eskimo-Aleut"] = "esx-pro",
["Proto-Fali"] = "alv-fli-pro",
["Proto-Gbaya"] = "gba-pro",
["Proto-Grassfields"] = "nic-grf-pro",
["Proto-Guang"] = "alv-gng-pro",
["Proto-Gurunsi"] = "nic-gns-pro",
["Proto-Halmahera-Cenderawasih"] = "poz-hce-pro",
["Proto-Heiban"] = "alv-hei-pro",
["Proto-Highland East Cushitic"] = "cus-hec-pro",
["Proto-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-Iroquoian"] = "iro-pro",
["Proto-Iwaidjan"] = "aus-wdj-pro",
["Proto-Jukunoid"] = "nic-jkn-pro",
["Proto-Jê"] = "sai-jee-pro",
["Proto-Kadu"] = "qfa-kad-pro",
["Proto-Kalapuyan"] = "nai-klp-pro",
["Proto-Kam-Sui"] = "qfa-kms-pro",
["Proto-Kampa"] = "awd-kmp-pro",
["Proto-Kamta"] = "inc-krd-pro",
["Proto-Katuic"] = "mkh-kat-pro",
["Proto-Kham"] = "sit-kha-pro",
["Proto-Khanty"] = "kca-pro",
["Proto-Kho-Bwa"] = "sit-khb-pro",
["Proto-Khoe"] = "khi-kho-pro",
["Proto-Koman"] = "ssa-kom-pro",
["Proto-Komisenian"] = "ira-kms-pro",
["Proto-Kru"] = "kro-pro",
["Proto-Kuki-Chin"] = "tbq-kuk-pro",
["Proto-Kuliak"] = "ssa-klk-pro",
["Proto-Kwa"] = "alv-kwa-pro",
["Proto-Lalo"] = "tbq-lal-pro",
["Proto-Lezghian"] = "cau-lzg-pro",
["Proto-Lower Cross River"] = "nic-lcr-pro",
["Proto-Maidun"] = "nai-mdu-pro",
["Proto-Mande"] = "dmn-pro",
["Proto-Mangbetu"] = "csu-maa-pro",
["Proto-Mansi"] = "mns-pro",
["Proto-Mari"] = "chm-pro",
["Proto-Masa"] = "cdc-mas-pro",
["Proto-Mazatec"] = "omq-maz-pro",
["Proto-Medo-Parthian"] = "ira-mpr-pro",
["Proto-Mixe-Zoque"] = "nai-miz-pro",
["Proto-Mixtec"] = "omq-mxt-pro",
["Proto-Mixtecan"] = "omq-mix-pro",
["Proto-Mordvinic"] = "urj-mdv-pro",
["Proto-Mumuye"] = "alv-mum-pro",
["Proto-Munji-Yidgha"] = "ira-mny-pro",
["Proto-Muskogean"] = "nai-mus-pro",
["Proto-Na-Dene"] = "xnd-pro",
["Proto-Naish"] = "sit-nas-pro",
["Proto-Nawiki"] = "awd-nwk-pro",
["Proto-Nilo-Saharan"] = "ssa-pro",
["Proto-Nilotic"] = "sdv-nil-pro",
["Proto-North Halmahera"] = "paa-nha-pro",
["Proto-North Iroquoian"] = "iro-nor-pro",
["Proto-Northern Jê"] = "sai-nje-pro",
["Proto-Northern Naga"] = "sit-kon-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-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-Pama-Nyungan"] = "aus-pam-pro",
["Proto-Paresi-Waura"] = "awd-prw-pro",
["แพริกดั้งเดิม"] = "mkh-pea-pro",
["Proto-Plateau"] = "nic-plt-pro",
["Proto-Plateau Penutian"] = "nai-plp-pro",
["Proto-Pomo"] = "nai-pom-pro",
["Proto-Puroik"] = "sit-khp-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-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-Shughni-Roshani"] = "ira-shr-pro",
["Proto-Shughni-Yazghulami"] = "ira-shy-pro",
["Proto-Shughni-Yazghulami-Munji"] = "ira-sym-pro",
["Proto-Siouan"] = "sio-pro",
["Proto-Siouan-Catawban"] = "nai-sca-pro",
["Proto-Songhay"] = "son-pro",
["Proto-Sotho-Tswana"] = "bnt-sts-pro",
["Proto-South Cushitic"] = "cus-sou-pro",
["Proto-Southern Jê"] = "sai-sje-pro",
["Proto-Ta-Arawak"] = "awd-taa-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-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-Ubangian"] = "nic-ubg-pro",
["Proto-Upper Cross River"] = "nic-ucr-pro",
["Proto-Utian"] = "nai-utn-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-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",
["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",
["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",
["Puyo-Paekche"] = "xpp",
["Puyuma"] = "pyu",
["Pwaamèi"] = "pme",
["Pwapwâ"] = "pop",
["Pyapun"] = "pcw",
["Pye Krumen"] = "pye",
["Pyemmairre"] = "xpb",
["Pyen"] = "pyy",
["Pykobjê"] = "sai-pyk",
["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",
["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",
["ระแด"] = "rad",
["Raetic"] = "xrr",
["Raga"] = "lml",
["Rahambuu"] = "raz",
["Rajah Kabunsuwan Manobo"] = "mqk",
["Raji"] = "rji",
["Rajong"] = "rjg",
["Rajput Garasia"] = "gra",
["Rakahanga-Manihiki"] = "rkh",
["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",
["Rapoisi"] = "kyx",
["Rapting"] = "rpt",
["Rara Bakati'"] = "lra",
["Rasawa"] = "rac",
["Ratagnon"] = "btn",
["Ratahan"] = "rth",
["Rathawi"] = "rtw",
["Rathwi Bareli"] = "bgd",
["Raute"] = "rau",
["Ravula"] = "yea",
["Rawa"] = "rwo",
["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",
["ฟรังโกเนียแบบไรน์"] = "gmw-rfr",
["Riang"] = "ril",
["Riantana"] = "ran",
["Ribun"] = "rir",
["Rigwe"] = "iri",
["Rikbaktsa"] = "rkb",
["Rincón Zapotec"] = "zar",
["Ringgou"] = "rgu",
["Ririo"] = "rri",
["Ritarungo"] = "rit",
["Riung"] = "riu",
["Riverain Sango"] = "snj",
["Rogo"] = "rod",
["Roma"] = "rmm",
["Romam"] = "rmx",
["Romanian Sign Language"] = "rms",
["Romano-Greek"] = "rge",
["Romano-Serbian"] = "rsb",
["Romanova"] = "rmv",
["Romblomanon"] = "rol",
["Rombo"] = "rof",
["Romkun"] = "rmk",
["Ron"] = "cla",
["Ronga"] = "rng",
["Rongga"] = "ror",
["Rongmei Naga"] = "nbu",
["Rongpo"] = "rnp",
["Ronji"] = "roe",
["Roon"] = "rnn",
["Roria"] = "rga",
["Roro"] = "rro",
["Rotokas"] = "roo",
["Rotuman"] = "rtm",
["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",
["Rutul"] = "rut",
["Ruuli"] = "ruc",
["Ruwund"] = "rnd",
["Rwa"] = "rwk",
["Rwandan Sign Language"] = "rsn",
["Réunion Creole French"] = "rcf",
["Sa"] = "sax",
["Sa'a"] = "apb",
["Sa'ban"] = "snv",
["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",
["Saep"] = "spd",
["Safaitic"] = "sem-saf",
["Safaliba"] = "saf",
["Safeyoka"] = "apz",
["Safwa"] = "sbk",
["Sagala"] = "sbm",
["Sagalla"] = "tga",
["Sahaptin"] = "nai-spt",
["Sahu"] = "saj",
["Saisiyat"] = "xsy",
["Sajau Basap"] = "sjb",
["Sakachep"] = "sch",
["Sakam"] = "skm",
["Sakao"] = "sku",
["Sakata"] = "skt",
["Sake"] = "sak",
["Sala"] = "shq",
["Salampasu"] = "slx",
["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",
["Sambalpuri"] = "spv",
["Sambe"] = "xab",
["Samberigi"] = "ssx",
["Samburu"] = "saq",
["Samei"] = "smh",
["Samo"] = "smq",
["Samoan Plantation Pidgin"] = "crp-spp",
["Samogitian"] = "sgs",
["Samosa"] = "swm",
["Sampang"] = "rav",
["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",
["Sangtam Naga"] = "nsa",
["Sangu (Gabon)"] = "snq",
["Sangu (Tanzania)"] = "sbp",
["Sani"] = "ysn",
["Sanie"] = "ysy",
["Saniyo-Hiyewe"] = "sny",
["Sankaran Maninka"] = "msc",
["Sansi"] = "ssi",
["Santa Catarina Albarradas Zapotec"] = "ztn",
["Santa Inés Ahuatempan Popoloca"] = "pca",
["Santa Inés Yatzechi Zapotec"] = "zpn",
["Santa Lucía Monteverde Mixtec"] = "mdv",
["Santa María La Alta Nahuatl"] = "nhz",
["Santa María Quiegolani Zapotec"] = "zpi",
["Santa María Zacatepec Mixtec"] = "mza",
["Santa Teresa Cora"] = "cok",
["Santiago Xanica Zapotec"] = "zpr",
["Santo Domingo Albarradas Zapotec"] = "zas",
["Sanumá"] = "xsu",
["Sanxiang Min"] = "nan-zsh",
["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",
["ซารามักกา"] = "srm",
["Sarangani Blaan"] = "bps",
["Sarangani Manobo"] = "mbs",
["Sarasira"] = "zsa",
["Saraveca"] = "sar",
["Sarawak Malay"] = "poz-sml",
["Sarikoli"] = "srh",
["Sarli"] = "sdf",
["Sartang"] = "onp",
["Sarua"] = "swy",
["Sarudu"] = "sdu",
["Saruga"] = "sra",
["Sasak"] = "sas",
["Sasaru"] = "sxs",
["Satawalese"] = "stw",
["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",
["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",
["Seim"] = "sim",
["Seimat"] = "ssg",
["Seit-Kaitetu"] = "hik",
["Sekani"] = "sek",
["Sekapan"] = "skp",
["Sekar"] = "skz",
["Seke"] = "skj",
["Sekele"] = "vaj",
["Seki"] = "syi",
["Seko Padang"] = "skx",
["Seko Tengah"] = "sko",
["Sekpele"] = "lip",
["Selangor Sign Language"] = "kgi",
["Selaru"] = "slu",
["Selayar"] = "sly",
["Selee"] = "snw",
["Selepet"] = "spl",
["Selk'nam"] = "ona",
["Selonian"] = "sxl",
["Selungai Murut"] = "slg",
["Seluwasan"] = "sws",
["Sema"] = "nsm",
["Semandang"] = "sdm",
["Semaq Beri"] = "szc",
["Sembakung Murut"] = "sbr",
["Semelai"] = "sza",
["Semigallian"] = "xzm",
["Semimi"] = "etz",
["Semnam"] = "ssm",
["Semnani"] = "smy",
["Sempan"] = "xse",
["Sena"] = "seh",
["Senara Sénoufo"] = "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",
["Sepik Mari"] = "mbx",
["Sera"] = "sry",
["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",
["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",
["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",
["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",
["Shoo-Minda-Nye"] = "bcv",
["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",
["Siculo-Arabic"] = "sqr",
["Sidetic"] = "xsd",
["Sie"] = "erg",
["Sierra Leone Sign Language"] = "sgx",
["Sierra Negra Nahuatl"] = "nsu",
["Sierra de Juárez Zapotec"] = "zaa",
["Sighu"] = "sxe",
["Sihan"] = "snr",
["Sika"] = "ski",
["Sikaritai"] = "tty",
["Sikiana"] = "sik",
["Sikule"] = "skh",
["Sila"] = "slt",
["Silacayoapan Mixtec"] = "mks",
["Sileibi"] = "sbq",
["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",
["Sindhi Bhil"] = "sbn",
["Sindihui Mixtec"] = "xts",
["Singa"] = "sgm",
["Singapore Sign Language"] = "sls",
["Singpho"] = "sgp",
["Sinicahua Mixtec"] = "xti",
["Sininkere"] = "skq",
["Sinte Romani"] = "rmo",
["Sinyar"] = "sys",
["Sinúfana"] = "sai-sin",
["Sio"] = "xsi",
["Siona"] = "snn",
["Sipakapense"] = "qum",
["Sira"] = "swj",
["Siraya"] = "fos",
["Sirenik"] = "ysr",
["Siri"] = "sir",
["Siriano"] = "sri",
["Sirionó"] = "srq",
["Sirmauri"] = "srx",
["Siroi"] = "ssd",
["Sisaala"] = "sld",
["Sissano"] = "sso",
["Situ"] = "sit-sit",
["Siuslaw"] = "sis",
["Sivandi"] = "siy",
["Sivia Sign Language"] = "lsv",
["Siwai"] = "siw",
["Siwi"] = "siz",
["Siwu"] = "akp",
["Siyin Chin"] = "csy",
["Skagit"] = "ska",
["Skalvian"] = "svx",
["Ske"] = "ske",
["Skepi Creole Dutch"] = "skw",
["Skolt Sami"] = "sms",
["Skou"] = "skv",
["Slavomolisano"] = "svm",
["Slovakian Sign Language"] = "svk",
["Small Flowery Miao"] = "sfm",
["Smärky Kanum"] = "kxq",
["Snohomish"] = "sno",
["So'a"] = "ssq",
["Sobei"] = "sob",
["Sochiapam Chinantec"] = "cso",
["Soga"] = "xog",
["Sogdian"] = "sog",
["Sok"] = "skk",
["Sokna"] = "swn",
["Soko"] = "soc",
["Sokoro"] = "sok",
["Solano"] = "xso",
["Soli"] = "sby",
["Solombala English"] = "crp-slb",
["Solon"] = "tuw-sol",
["Solong"] = "aaw",
["Solos"] = "sol",
["Som"] = "smc",
["Somba-Siawari"] = "bmu",
["Somra"] = "ntx",
["Somrai"] = "sor",
["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",
["Sou"] = "sqq",
["South African Sign Language"] = "sfs",
["South Awyu"] = "aws",
["South Boma"] = "bnt-sbo",
["South Central Banda"] = "lnl",
["South Central Dinka"] = "dib",
["South Efate"] = "erk",
["South Fali"] = "fal",
["South Giziga"] = "giz",
["South Lembata"] = "lmf",
["South Marquesan"] = "mqm",
["South Muyu"] = "kts",
["South Nuaulu"] = "nxl",
["South Picene"] = "spx",
["South Slavey"] = "xsl",
["South Tairora"] = "omw",
["South Ucayali Ashéninka"] = "cpy",
["South Watut"] = "mcy",
["Southeast Ambrym"] = "tvk",
["Southeast Babar"] = "vbb",
["Southeast Ijo"] = "ijs",
["Southeast Pashayi"] = "psi",
["Southeast Tasmanian"] = "xpf",
["Southeastern Dinka"] = "dks",
["Southeastern Ixtlán Zapotec"] = "zpd",
["Southeastern Kolami"] = "nit",
["Southeastern Nochixtlán Mixtec"] = "mxy",
["Southeastern Pomo"] = "pom",
["Southeastern Puebla Nahuatl"] = "npl",
["Southeastern Tarahumara"] = "tcu",
["Southeastern Tepehuan"] = "stp",
["Southern Alta"] = "agy",
["Southern Bai"] = "bfs",
["Southern Birifor"] = "biv",
["Southern Bobo"] = "bwq",
["Southern Bontoc"] = "obk",
["Southern Carrier"] = "caf",
["Southern Catanduanes Bicolano"] = "bln",
["Southern Dagaare"] = "dga",
["Southern East Cree"] = "crj",
["Southern Ghale"] = "ghe",
["Southern Grebo"] = "grj",
["Southern Guiyang Hmong"] = "hmy",
["Southern Haida"] = "hax",
["Southern Hindko"] = "hnd",
["Southern Kalapuya"] = "sxk",
["Southern Kalinga"] = "ksc",
["Southern Khanty"] = "kca-sou",
["Southern Kissi"] = "kss",
["Southern Kiwai"] = "kjd",
["Southern Kurdish"] = "sdh",
["Southern Lolopo"] = "ysp",
["Southern Lorung"] = "lrr",
["Southern Luri"] = "luz",
["Southern Ma'di"] = "snm",
["Southern Mansi"] = "mns-sou",
["Southern Mashan Hmong"] = "hma",
["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 Pomo"] = "peq",
["Southern Puebla Mixtec"] = "mit",
["Southern Puget Sound Salish"] = "slh",
["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 Samo"] = "sbd",
["Southern Selkup"] = "sel-sou",
["Southern Sierra Miwok"] = "skd",
["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 Pashayi"] = "psh",
["Southwest Tanna"] = "nwi",
["Southwestern Bontoc"] = "vbk",
["Southwestern Dinka"] = "dik",
["Southwestern Fars"] = "fay",
["Southwestern Guiyang Hmong"] = "hmg",
["Southwestern Huishui Hmong"] = "hmh",
["Southwestern Nisu"] = "nsv",
["Southwestern Tamang"] = "tsf",
["Southwestern Tarahumara"] = "twr",
["Southwestern Tepehuan"] = "tla",
["Southwestern Tlaxiaco Mixtec"] = "meh",
["Sowa"] = "sww",
["Sowanda"] = "sow",
["Soyaltepec Mazatec"] = "vmp",
["Soyaltepec Mixtec"] = "vmq",
["Spanish Sign Language"] = "ssp",
["Spiti Bhoti"] = "spt",
["Spokane"] = "spo",
["Squamish"] = "squ",
["ซรานันโตโง"] = "srn",
["Sri Lankan Creole Malay"] = "sci",
["Sri Lankan Sign Language"] = "sqs",
["Stau"] = "ero-tau",
["Stod Bhoti"] = "sbu",
["Stoney"] = "sto",
["Suabo"] = "szp",
["Suarmin"] = "seo",
["Suau"] = "swp",
["Suba"] = "sxb",
["Suba-Simbiti"] = "ssc",
["Subi"] = "xsj",
["Subiya"] = "sbs",
["Subtiaba"] = "sut",
["Sudest"] = "tgo",
["Suena"] = "sue",
["Suga"] = "sgi",
["Suganga"] = "sug",
["Sugut Dusun"] = "kzs",
["Suki"] = "sui",
["Suku"] = "sub",
["Sukuma"] = "suk",
["Sukur"] = "syk",
["Sukurum"] = "zsu",
["Sula"] = "szn",
["Sulka"] = "sua",
["Sulod"] = "srg",
["Suma"] = "sqm",
["Sumariup"] = "siv",
["Sumau"] = "six",
["Sumbawa"] = "smw",
["Sumbwa"] = "suw",
["Sumtu Chin"] = "csv",
["Sunam"] = "ssk",
["Sungwadaga"] = "mwo",
["Sungwadia"] = "mrb",
["Sunum"] = "ymn",
["Sunwar"] = "suz",
["Suoy"] = "syo",
["Supyire"] = "spp",
["Sur"] = "tdl",
["Surbakhal"] = "sbj",
["Suri"] = "suq",
["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",
["Swampy Cree"] = "csw",
["Swazi"] = "ss",
["Swedish Sign Language"] = "swl",
["Swiss-French Sign Language"] = "ssr",
["Swiss-German Sign Language"] = "sgg",
["Swiss-Italian Sign Language"] = "slf",
["Swo"] = "sox",
["Syenara Senoufo"] = "shz",
["Sácata"] = "sai-sac",
["São Paulo Kaingáng"] = "zkp",
["Sãotomense"] = "cri",
["Sìcìté Sénoufo"] = "sep",
["Sîshëë"] = "sih",
["Sô"] = "sss",
["T'en"] = "tct",
["Taabwa"] = "tap",
["Taba"] = "mky",
["Tabaa Zapotec"] = "zat",
["Tabancale"] = "sai-tab",
["Tabaru"] = "tby",
["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",
["Tagal Murut"] = "mvv",
["Tagbu"] = "tbm",
["Tagdal"] = "tda",
["Tagish"] = "tgx",
["Tagoi"] = "tag",
["Tagwana Senoufo"] = "tgw",
["Tahltan"] = "tht",
["Tai"] = "taw",
["Tai Hang Tong"] = "thc",
["Tai Hongjin"] = "tiz",
["Tai Loi"] = "tlq",
["Tai Long"] = "thi",
["Tai Pao"] = "tpo",
["Tai Thanh"] = "tmm",
["Tai Ya"] = "cuu",
["Taiap"] = "gpn",
["Taikat"] = "aos",
["Taimyr Pidgin Russian"] = "crp-tpr",
["Tainae"] = "ago",
["Tairuma"] = "uar",
["Taita"] = "dav",
["Taivoan"] = "tvx",
["Taiwan Sign Language"] = "tss",
["Taje"] = "pee",
["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",
["Tambunan Dusun"] = "kzt",
["Tami"] = "tmy",
["Tamki"] = "tax",
["Tamnim Citak"] = "tml",
["Tampias Lobu"] = "low",
["Tampuan"] = "tpu",
["Tampulma"] = "tpm",
["Tanacross"] = "tcb",
["Tanahmerah"] = "tcm",
["Tanapag"] = "tpv",
["Tanchangya"] = "tnv",
["Tandia"] = "tni",
["Tanema"] = "tnx",
["Tangale"] = "tan",
["Tanggu"] = "tgu",
["Tangkhul Naga"] = "nmf",
["Tangko"] = "tkx",
["Tangoa"] = "tgp",
["Tangsa"] = "nst",
["Tanguat"] = "tbs",
["Tangwang"] = "mis-tnw",
["Tanimbili"] = "tbe",
["Tanimuca-Retuarã"] = "tnc",
["Tanjijili"] = "uji",
["Tanudan Kalinga"] = "kml",
["Tanzanian Sign Language"] = "tza",
["Tapachultec"] = "nai-tap",
["Taparita"] = "sai-tpr",
["Tapayuna"] = "sai-tap",
["Tapeba"] = "tbb",
["Tapei"] = "afp",
["Tapieté"] = "tpj",
["Tapirapé"] = "taf",
["Tar Gula"] = "kcm",
["Tara Baka"] = "bdh",
["Tarairiú"] = "sai-trr",
["Tarantino"] = "roa-tar",
["Tarao"] = "tro",
["Taraon"] = "mhu",
["Tareng"] = "tgr",
["Tariana"] = "tae",
["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",
["Tataviam"] = "azc-tat",
["Tatuyo"] = "tav",
["Tauade"] = "ttd",
["Taulil"] = "tuh",
["Taungyo"] = "tco",
["Taupota"] = "tpa",
["Tause"] = "tad",
["Taushiro"] = "trr",
["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",
["Tayabas Ayta"] = "ayy",
["Taymanitic"] = "sem-tay",
["Tayo"] = "cks",
["Tchitchege"] = "tck",
["Tchumbuli"] = "bqa",
["Te'un"] = "tve",
["Teanu"] = "tkw",
["Tebul Sign Language"] = "tsy",
["Tebul Ure Dogon"] = "dtu",
["Tecpatlán Totonac"] = "tcw",
["Tedaga"] = "tuq",
["Tedim Chin"] = "ctd",
["Tee"] = "tkq",
["Tefaro"] = "tfo",
["Tegali"] = "ras",
["Tehit"] = "kps",
["Tehuelche"] = "teh",
["Teiwa"] = "twe",
["Tejalapan Zapotec"] = "ztt",
["Teke-Fuumu"] = "ifm",
["Teke-Kukuya"] = "kkw",
["Teke-Laali"] = "lli",
["Teke-Tege"] = "teg",
["Teke-Tsaayi"] = "tyi",
["Teke-Tyee"] = "tyx",
["Tektiteko"] = "ttc",
["Tela-Masbuar"] = "tvm",
["Telefol"] = "tlf",
["Teluti"] = "tlt",
["Tem"] = "kdh",
["Temascaltepec Nahuatl"] = "nhv",
["Tembé"] = "tqb",
["Teme"] = "tdo",
["Temein"] = "teq",
["Temi"] = "soz",
["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",
["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",
["Tereno"] = "ter",
["Teressa"] = "tef",
["Tereweng"] = "twg",
["Teribe"] = "tfr",
["Terik"] = "tec",
["Termanu"] = "twu",
["Ternateño"] = "tmg",
["Tese"] = "keg",
["Teshenawa"] = "twc",
["Tetela"] = "tll",
["Tetelcingo Nahuatl"] = "nhg",
["Tetete"] = "teb",
["Tetserret"] = "tez",
["Tetun Dili"] = "tdt",
["Teushen"] = "sai-teu",
["Teutila Cuicatec"] = "cut",
["Tewa"] = "tew",
["Texcatepec Otomi"] = "otx",
["Texistepec Popoluca"] = "poq",
["Texmelucan Zapotec"] = "zpz",
["Tezoatlán Mixtec"] = "mxb",
["Tha"] = "thy",
["Thachanadan"] = "thn",
["Thado Chin"] = "tcz",
["Thaiphum Chin"] = "cth",
["Thakali"] = "ths",
["Thamudic"] = "sem-tha",
["Thangal Naga"] = "nki",
["Thangmi"] = "thf",
["Thao"] = "ssf",
["Tharaka"] = "thk",
["Tharrgari"] = "dhr",
["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 Sign Language"] = "lsn",
["Ticuna"] = "tca",
["Tidaá Mixtec"] = "mtx",
["Tiemacèwè Bozo"] = "boo",
["Tiene"] = "tii",
["Tifal"] = "tif",
["Tigak"] = "tgc",
["Tigon Mbembe"] = "nza",
["Tii"] = "txq",
["Tijaltepec Mixtec"] = "xtl",
["Tikar"] = "tik",
["Tikopia"] = "tkp",
["Tilapa Otomi"] = "otl",
["Tillamook"] = "til",
["Tilquiapan Zapotec"] = "zts",
["Tilung"] = "tij",
["Tima"] = "tms",
["Timbe"] = "tim",
["Timor Pidgin"] = "tvy",
["Timote"] = "sai-tim",
["Timucua"] = "tjm",
["Timugon Murut"] = "tih",
["Tinani"] = "lbf",
["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",
["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",
["Tocho"] = "taz",
["Todrah"] = "tdr",
["Tofanma"] = "tlg",
["Tofin Gbe"] = "tfi",
["Togbo-Vara Banda"] = "tor",
["Togoyo"] = "tgy",
["Tojolabal"] = "toj",
["Toka-Leya"] = "dov",
["Tokano"] = "zuh",
["Tokelauan"] = "tkl",
["Toki Pona"] = "tok",
["Tol"] = "jic",
["Tolai"] = "ksd",
["Tolaki"] = "lbw",
["Tolomako"] = "tlm",
["Tolowa"] = "tol",
["Toloza"] = "ytl",
["Toma"] = "tod",
["Tomadino"] = "tdi",
["Tombelala"] = "ttp",
["Tombonuo"] = "txa",
["Tombulu"] = "tom",
["Tomini"] = "txm",
["Tommeginne"] = "xpv",
["Tommo So"] = "dto",
["Tomo Kan Dogon"] = "dtm",
["Tomoip"] = "tqp",
["Tondano"] = "tdn",
["Tonga (Malawi)"] = "tog",
["Tonga (Mozambique)"] = "toh",
["Tonga (Zambia)"] = "toi",
["Tongwe"] = "tny",
["Tonjon"] = "tjn",
["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",
["ครีโอลช่องแคบทอร์เรส"] = "tcs",
["Torricelli"] = "tei",
["Torricelli Yau"] = "yyu",
["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",
["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",
["Tsucuba"] = "cbq",
["Tsum"] = "ttz",
["Tsuut'ina"] = "srs",
["Tsuvadi"] = "tvd",
["Tsuvan"] = "tsh",
["Tswa"] = "tsc",
["Tswapong"] = "two",
["Tuamotuan"] = "pmt",
["Tuareg"] = "tmh",
["Tubar"] = "tbu",
["Tucano"] = "tuo",
["Tugen"] = "tuy",
["Tugun"] = "tzn",
["Tugutil"] = "tuj",
["Tukang Besi North"] = "khc",
["Tukang Besi South"] = "bhq",
["Tuki"] = "bag",
["Tukpa"] = "tpq",
["Tukudede"] = "tkd",
["Tukumanféd"] = "tkf",
["Tula"] = "tul",
["Tule-Kaweah Yokuts"] = "yok-tky",
["Tulehu"] = "tlu",
["Tulishi"] = "tey",
["Tulu-Bohuai"] = "rak",
["Tulua"] = "aus-tul",
["Tuma-Irumu"] = "iou",
["Tumak"] = "tmc",
["Tumbuka"] = "tum",
["Tumi"] = "kku",
["Tumleo"] = "tmq",
["Tumtum"] = "tbr",
["Tumulung Sisaala"] = "sil",
["Tundra Enets"] = "enh",
["Tundra Nenets"] = "yrk-tun",
["Tunen"] = "tvu",
["Tungag"] = "lcm",
["Tunggare"] = "trt",
["Tunia"] = "tug",
["Tunica"] = "tun",
["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 Sign Language"] = "tsm",
["Turks and Caicos Creole English"] = "tch",
["Turoyo"] = "tru",
["Turumsa"] = "tqm",
["Tuscarora"] = "tus",
["Tutelo"] = "tta",
["Tutong"] = "ttg",
["Tutsa Naga"] = "tvt",
["Tutuba"] = "tmi",
["Tututepec Mixtec"] = "mtu",
["Tututni"] = "tuu",
["Tuwali Ifugao"] = "ifk",
["Tuwari"] = "tww",
["Tuwuli"] = "bov",
["Tuxináwa"] = "tux",
["Tuxá"] = "tud",
["Tuyuca"] = "tue",
["Tuyuhun"] = "mis-tuh",
["Twana"] = "twa",
["Twendi"] = "twn",
["Tyap"] = "kcg",
["Tyaraity"] = "woa",
["Tyerrernotepanner"] = "xph",
["Tz'utujil"] = "tzj",
["Tzeltal"] = "tzh",
["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",
["Udihe"] = "ude",
["Uduk"] = "udu",
["Ufim"] = "ufi",
["Ugandan Sign Language"] = "ugn",
["Ughele"] = "uge",
["Uhami"] = "uha",
["Uisai"] = "uis",
["Ujir"] = "udj",
["Ukaan"] = "kcf",
["Ukhwejo"] = "ukh",
["Ukit"] = "umi",
["Ukpe-Bayobiri"] = "ukp",
["Ukpet-Ehom"] = "akd",
["Ukrainian Sign Language"] = "ukl",
["Ukue"] = "uku",
["Ukuriguma"] = "ukg",
["Ukwa"] = "ukq",
["Ukwuani-Aboh-Ndoni"] = "ukw",
["Ulau-Suain"] = "svb",
["Ulch"] = "ulc",
["Uldeme"] = "udl",
["Ulithian"] = "uli",
["Ullatan"] = "ull",
["Ulumanda'"] = "ulm",
["Ulwa"] = "ulw",
["Uma"] = "ppk",
["Uma' Lasan"] = "xky",
["Uma' Lung"] = "ulu",
["Umanakaina"] = "gdn",
["Umatilla"] = "uma",
["Umbindhamu"] = "umd",
["Umbu-Ungu"] = "ubu",
["Umbugarla"] = "umr",
["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",
["Unua"] = "onu",
["Unubahe"] = "unu",
["Uokha"] = "uok",
["Upper Chehalis"] = "cjh",
["Upper Grand Valley Dani"] = "dna",
["Upper Kuskokwim"] = "kuu",
["Upper Necaxa Totonac"] = "tku",
["Upper Ta'oih"] = "tth",
["Upper Tanana"] = "tau",
["Upper Taromi"] = "tov",
["Upper Umpqua"] = "xup",
["Ura (New Guinea)"] = "uro",
["Ura (Vanuatu)"] = "uur",
["Uradhi"] = "urf",
["Urali"] = "url",
["Urapmin"] = "urm",
["Urarina"] = "ura",
["Urartian"] = "xur",
["Urat"] = "urt",
["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",
["Uzekwe"] = "eze",
["Vaagri Booli"] = "vaa",
["Vaghri"] = "vgr",
["Vaghua"] = "tva",
["Vagla"] = "vag",
["Vaiphei"] = "vap",
["Vale"] = "vae",
["Valencian Sign Language"] = "vsv",
["Valle Nacional Chinantec"] = "cvn",
["Valley Maidu"] = "vmv",
["Valman"] = "van",
["Valpei"] = "vlp",
["Vamale"] = "mkt",
["Vame"] = "mlr",
["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",
["Venetic"] = "xve",
["Venezuelan Sign Language"] = "vsl",
["Ventureño"] = "veo",
["Vera'a"] = "vra",
["Vestinian"] = "xvs",
["Vidunda"] = "vid",
["Viemo"] = "vig",
["Vilela"] = "vil",
["Vili"] = "vif",
["Villa Viciosa Agta"] = "dyg",
["Vincentian Creole English"] = "svc",
["Virgin Islands Creole"] = "vic",
["Vishavan"] = "vis",
["Viti"] = "vit",
["Vitou"] = "vto",
["Viya"] = "gev",
["Vlax Romani"] = "rmy",
["Volscian"] = "xvo",
["Vono"] = "kch",
["Voro"] = "vor",
["Vumbu"] = "vum",
["Vunapu"] = "vnp",
["Vunjo"] = "vun",
["Vurës"] = "msn",
["Vute"] = "vut",
["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",
["Walmajarri"] = "wmt",
["Wam"] = "wmo",
["Wamas"] = "wmc",
["Wambaya"] = "wmb",
["Wambon"] = "wms",
["Wambule"] = "wme",
["Wamey"] = "cou",
["Wamin"] = "wmi",
["Wampar"] = "lbq",
["Wampur"] = "waz",
["Wan"] = "wan",
["Wanambre"] = "wnb",
["Wanap"] = "wnp",
["Wancho"] = "nnp",
["Wanda"] = "wbh",
["Wandala"] = "mfi",
["Wandamen"] = "wad",
["Wandarang"] = "wnd",
["Wandji"] = "wdd",
["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",
["Warapu"] = "wra",
["Waray Sorsogon"] = "srv",
["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",
["วาตีวา"] = "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 Romani"] = "rmw",
["Wemale"] = "weo",
["Wemba-Wemba"] = "xww",
["Weme Gbe"] = "wem",
["Wendat"] = "wdt",
["Weri"] = "wer",
["Wersing"] = "kvw",
["West Albay Bikol"] = "fbl",
["West Ambae"] = "nnd",
["West Central Banda"] = "bbp",
["West Damar"] = "drn",
["West Flemish"] = "vls",
["West Greenlandic Pidgin"] = "crp-gep",
["West Lembata"] = "lmj",
["West Makian"] = "mqs",
["West Masela"] = "mss",
["West Tarangan"] = "txn",
["West Uvean"] = "uve",
["West-Central Limba"] = "lia",
["Western Arrernte"] = "are",
["Western Bolivian Guarani"] = "gnw",
["Western Bukidnon Manobo"] = "mbb",
["Western Dani"] = "dnw",
["Western Durango Nahuatl"] = "azn",
["Western Fijian"] = "wyy",
["Western Gurung"] = "gvr",
["Western Highland Chatino"] = "ctp",
["Western Huasteca Nahuatl"] = "nhw",
["Western Jicaque"] = "nai-wji",
["Western Juxtlahuaca Mixtec"] = "jmx",
["Western Karaboro"] = "kza",
["Western Keres"] = "kjq",
["Western Krahn"] = "krw",
["Western Lalu"] = "ywl",
["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 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 Lachi"] = "lwh",
["Whitesands"] = "tnp",
["Wiarumus"] = "tua",
["Wichita"] = "wic",
["Wichí Lhamtés Güisnay"] = "mzh",
["Wichí Lhamtés Nocten"] = "mtp",
["Wichí Lhamtés Vejoz"] = "wlv",
["Wik-Epa"] = "wie",
["Wik-Iiyanh"] = "wij",
["Wik-Keyangan"] = "wif",
["Wik-Me'anha"] = "wih",
["Wik-Mungkan"] = "wim",
["Wik-Ngathana"] = "wig",
["Wikalkan"] = "wik",
["Wikngenchera"] = "wua",
["Wilawila"] = "wil",
["Wintu"] = "wnw",
["Winyé"] = "kst",
["Wipi"] = "gdr",
["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",
["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",
["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",
["Xianbei"] = "mis-xbi",
["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âgurè"] = "axx",
["Yaa"] = "iyx",
["Yaaku"] = "muu",
["Yabarana"] = "yar",
["Yabaâna"] = "ybn",
["Yaben"] = "ybm",
["Yabong"] = "ybo",
["Yabula Yabula"] = "yxy",
["Yace"] = "ekr",
["Yafi"] = "wfg",
["Yagara"] = "yxg",
["Yagaria"] = "ygr",
["Yaghnobi"] = "yai",
["Yagomi"] = "ygm",
["Yagua"] = "yad",
["Yagwoia"] = "ygw",
["Yahadian"] = "ner",
["Yahang"] = "rhp",
["Yahuna"] = "ynu",
["Yaka"] = "yaf",
["Yakaikeke"] = "ykk",
["Yakima"] = "yak",
["Yakkha"] = "ybh",
["Yakoma"] = "yky",
["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",
["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"] = "yao",
["Yao (South America)"] = "sai-yao",
["Yaosakor Asmat"] = "asy",
["Yaouré"] = "yre",
["Yapese"] = "yap",
["Yapunda"] = "yev",
["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",
["Yaul"] = "yla",
["Yaur"] = "jau",
["Yautepec Zapotec"] = "zpb",
["Yavitero"] = "yvt",
["Yawa"] = "yva",
["Yawalapití"] = "yaw",
["Yawanawa"] = "ywn",
["Yawarawarga"] = "yww",
["Yaweyuha"] = "yby",
["Yawijibaya"] = "jbw",
["Yawiyo"] = "ybx",
["Yawuru"] = "ywr",
["Yaygir"] = "xya",
["Yazghulami"] = "yah",
["Ye'kwana"] = "mch",
["Yei"] = "jei",
["Yekhee"] = "ets",
["Yekora"] = "ykr",
["Yele"] = "yle",
["Yelmek"] = "jel",
["Yelogu"] = "ylg",
["Yemaek"] = "hmk",
["Yemba"] = "ybb",
["Yemsa"] = "jnj",
["Yendang"] = "yen",
["Yeni"] = "yei",
["Yenish"] = "yec",
["Yerakai"] = "yra",
["Yeretuar"] = "gop",
["Yerong"] = "yrn",
["Yerukula"] = "yeu",
["Yeskwa"] = "yes",
["Yessan-Mayo"] = "yss",
["Yetfa"] = "yet",
["Yevanic"] = "yej",
["Yeyi"] = "yey",
["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",
["Yoidik"] = "ydk",
["Yoke"] = "yki",
["Yolmo"] = "scp",
["Yolngu Sign Language"] = "ygs",
["Yoloxochitl Mixtec"] = "xty",
["Yom"] = "pil",
["Yombe"] = "yom",
["Yongkom"] = "yon",
["Yopno"] = "yut",
["Yora"] = "mts",
["Yorta Yorta"] = "xyy",
["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",
["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",
["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",
["Zangwal"] = "zah",
["Zaniza Zapotec"] = "zpw",
["Zapotec"] = "zap",
["Zaramo"] = "zaj",
["Zari"] = "zaz",
["Zarma"] = "dje",
["Zauzou"] = "zal",
["Zay"] = "zwa",
["Zayein Karen"] = "kxk",
["Zayse-Zergulla"] = "zay",
["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",
["Zhár"] = "jjr",
["Zia"] = "zia",
["Zialo"] = "zil",
["Zigula"] = "ziw",
["Zimakani"] = "zik",
["Zimba"] = "zmb",
["Zimbabwe Sign Language"] = "zib",
["Zinza"] = "zin",
["Zirenkel"] = "zrn",
["Ziriya"] = "zir",
["Zizilivakan"] = "ziz",
["Zo'é"] = "pto",
["Zokhuo"] = "yzk",
["Zoogocho Zapotec"] = "zpq",
["Zotung Chin"] = "czt",
["Zou"] = "zom",
["Zulgo-Gemzek"] = "gnd",
["Zumaya"] = "zuy",
["Zumbun"] = "jmb",
["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",
["กงกัณ"] = "kok",
["กบาลัน"] = "ckv",
["กรีก"] = "el",
["กรีกแบบไมซีนี"] = "gmy",
["กรีกโบราณ"] = "grc",
["กรีนแลนด์"] = "kl",
["กวางตุ้ง"] = "yue",
["กอกบอรอก"] = "trp",
["กอท"] = "got",
["กอทแบบไครเมีย"] = "gme-cgo",
["กอล"] = "cel-gau",
["กะดู"] = "zkd",
["กะตูตะวันตก"] = "kuf",
["กะตูตะวันออก"] = "ktv",
["กะยัน"] = "pdu",
["กะยาตะวันตก"] = "kyu",
["กะยาตะวันออก"] = "eky",
["กะเหรี่ยงดั้งเดิม"] = "kar-pro",
["กะเหรี่ยงปะโอ"] = "blk",
["กะเหรี่ยงสะกอ"] = "ksw",
["กะเหรี่ยงโปตะวันตก"] = "pwo",
["กะเหรี่ยงโปตะวันออก"] = "kjp",
["กะเหรี่ยงโปเหนือ"] = "pww",
["กะเหรี่ยงโปแพร่"] = "kjt",
["กะไบล์"] = "kab",
["กัจฉ์"] = "kfr",
["กันกานาอือ"] = "kne",
["กันกานาอือเหนือ"] = "xnn",
["กันนฑะ"] = "kn",
["กัมเบอรา"] = "xbr",
["กัวรานีคลาสสิก"] = "gn-cls",
["กัวรานีแบบปารากวัย"] = "gug",
["กั้น"] = "gan",
["กากาอุซ"] = "gag",
["กาดาซันชายฝั่ง"] = "kzj",
["กาตาลา"] = "ca",
["กาตาลาเก่า"] = "roa-oca",
["กานูรี"] = "kr",
["กาปัมปางัน"] = "pam",
["กามรูป"] = "inc-kam",
["การากัลปัก"] = "kaa",
["กาลากัน"] = "kqe",
["กาลากันแบบกากัน"] = "kll",
["กาลากันแบบตากาเกาลู"] = "klg",
["กาลิเซีย"] = "gl",
["กาลิเซีย-โปรตุเกสเก่า"] = "roa-opt",
["กาเรา"] = "kyj",
["กาโม"] = "gmv",
["กาโร"] = "grt",
["กิลเบิร์ต"] = "gil",
["กีนาบาตางันตอนบน"] = "dmg",
["กืออึซ"] = "gez",
["กุรุข"] = "kru",
["กูนียันดี"] = "gni",
["กูย"] = "kdt",
["กูร์ดั้งเดิม"] = "nic-gur-pro",
["กฺ๋อง"] = "ugo",
["กเบดั้งเดิม"] = "alv-gbe-pro",
["ขมุ"] = "kjg",
["ขมุอิกดั้งเดิม"] = "mkh-khm-pro",
["ขร้า-ไทดั้งเดิม"] = "qfa-tak-pro",
["ขร้าดั้งเดิม"] = "qfa-kra-pro",
["ครี"] = "cr",
["ครีโอลกาบูเวร์ดี"] = "kea",
["ครีโอลกินี-บิสเซา"] = "pov",
["ครีโอลจาเมกา"] = "jam",
["ครีโอลมอริเชียส"] = "mfe",
["ครีโอลมาเก๊า"] = "mzs",
["ครีโอลลุยเซียนา"] = "lou",
["ครีโอลเฮติ"] = "ht",
["คองโก"] = "kg",
["คอปติก"] = "cop",
["คอร์ซิกา"] = "co",
["คอร์นวอลล์"] = "kw",
["คอร์นวอลล์เก่า"] = "oco",
["คอเคเซียนตะวันตกเฉียงเหนือดั้งเดิม"] = "cau-nwc-pro",
["คอเคเซียนตะวันออกเฉียงเหนือดั้งเดิม"] = "cau-nec-pro",
["คังรังชือ"] = "ane",
["คัลมึค"] = "xal",
["คาคัส"] = "kjh",
["คาชุบ"] = "csb",
["คาซัค"] = "kk",
["คาซี"] = "kha",
["คานธาระ"] = "pgd",
["คาบาร์เดีย"] = "kbd",
["คาร์ทเวเลียนดั้งเดิม"] = "ccs-pro",
["คาร์นิโคบาร์"] = "caq",
["คาลาเมียนดั้งเดิม"] = "phi-kal-pro",
["คาเซียนดั้งเดิม"] = "aav-khs-pro",
["คาเรเลีย"] = "krl",
["คำตี้"] = "kht",
["คำเมือง"] = "nod",
["คีตัน"] = "zkt",
["คีร์กีซ"] = "ky",
["คุชราต"] = "gu",
["คุชราตกลาง"] = "inc-mgu",
["คุชราตเก่า"] = "inc-ogu",
["คูนิงามิ"] = "xug",
["คูมาน"] = "qwm",
["คูมุก"] = "kum",
["งูนีดั้งเดิม"] = "bnt-ngu-pro",
["จอร์เจีย"] = "ka",
["จอร์เจียน-แซนดั้งเดิม"] = "ccs-gzn-pro",
["จอร์เจียเก่า"] = "oge",
["จักมา"] = "ccp",
["จามตะวันตก"] = "cja",
["จามตะวันออก"] = "cjm",
["จามิกดั้งเดิม"] = "cmc-pro",
["จิ่งเผาะ"] = "kac",
["จิ้น"] = "cjy",
["จีน"] = "zh",
["จีนกลาง"] = "cmn",
["จีนยุคกลาง"] = "ltc",
["จีนวรรณกรรม"] = "lzh",
["จีนเก่า"] = "och",
["จุน"] = "cuq",
["จูร์เชน"] = "juc",
["จ้วง"] = "za",
["จ้วงแบบจั่วเจียง"] = "zzj",
["จ้วงแบบหนง"] = "zhn",
["ชวา"] = "jv",
["ชวาเก่า"] = "kaw",
["ชวาแบบนิวแคลิโดเนีย"] = "jas",
["ชวาแบบแคริบเบียน"] = "jvn",
["ชอง"] = "cog",
["ชากาทาย"] = "chg",
["ชาดิกดั้งเดิม"] = "cdc-pro",
["ชาดิกตอนกลางดั้งเดิม"] = "cdc-cbm-pro",
["ชาบากาโน"] = "cbk",
["ชามอร์โร"] = "ch",
["ชุกชี"] = "ckt",
["ชูวัช"] = "cv",
["ซอกดิกดั้งเดิม"] = "ira-sgc-pro",
["ซองคา"] = "dz",
["ซอร์เบียตอนบน"] = "hsb",
["ซอร์เบียตอนล่าง"] = "dsb",
["ซังโก"] = "sg",
["ซันสการ์"] = "zau",
["ซัมบัล"] = "xsb",
["ซัสซารี"] = "sdc",
["ซากีซายา"] = "szy",
["ซาคา"] = "sah",
["ซาซา"] = "zza",
["ซาปา"] = "tys",
["ซามัว"] = "sm",
["ซามาตอนกลาง"] = "sml",
["ซามาแบบปางูตารัน"] = "slm",
["ซามิกดั้งเดิม"] = "smi-pro",
["ซามีเหนือ"] = "se",
["ซามีแบบกิลดิน"] = "sjd",
["ซามีแบบปีเต"] = "sje",
["ซามีแบบลูเล"] = "smj",
["ซามีแบบอีนารี"] = "smn",
["ซามีใต้"] = "sma",
["ซาราวักเหนือดั้งเดิม"] = "poz-swa-pro",
["ซาร์ดิเนีย"] = "sc",
["ซาลาร์"] = "slr",
["ซาโฮ"] = "ssy",
["ซิซิลี"] = "scn",
["ซินดาริน"] = "sjn",
["ซีกายานา"] = "sky",
["ซีดามา"] = "sid",
["ซีโน-ทิเบตันดั้งเดิม"] = "sit-pro",
["ซุนดา"] = "su",
["ซูก"] = "tsg",
["ซูทู"] = "st",
["ซูทูเหนือ"] = "nso",
["ซูนี"] = "zun",
["ซูรีเกาโนน"] = "sgd",
["ซูลาเวซีใต้ดั้งเดิม"] = "poz-ssw-pro",
["ซูลู"] = "zu",
["ซูเมอร์"] = "sux",
["ซูโดเวีย"] = "xsv",
["ญัฮกุร"] = "cbn",
["ญี่ปุ่น"] = "ja",
["ญี่ปุ่นเก่า"] = "ojp",
["ญ้อ"] = "nyw",
["ดราวิเดียนดั้งเดิม"] = "dra-pro",
["ดราวิเดียนตอนกลางดั้งเดิม"] = "dra-cen-pro",
["ดราวิเดียนเหนือดั้งเดิม"] = "dra-nor-pro",
["ดราวิเดียนใต้ดั้งเดิม"] = "dra-sou-pro",
["ดราวิเดียนใต้ที่สองดั้งเดิม"] = "dra-sdt-pro",
["ดราวิเดียนใต้ที่หนึ่งดั้งเดิม"] = "dra-sdo-pro",
["ดัตช์"] = "nl",
["ดัตช์กลาง"] = "dum",
["ดัตช์เก่า"] = "odt",
["ดาโคตา"] = "dak",
["ดุงกาน"] = "dng",
["ดูซุนตอนกลาง"] = "dtp",
["ตงเซียง"] = "sce",
["ตองงา"] = "to",
["ตังกุต"] = "txg",
["ตันดากาโนน"] = "tgn",
["ตั่ย"] = "tyz",
["ตากาล็อก"] = "tl",
["ตางัม"] = "sit-tgm",
["ตาตาร์"] = "tt",
["ตาตาร์แบบไครเมีย"] = "crh",
["ตาอีโน"] = "tnq",
["ตาฮีตี"] = "ty",
["ตีรูไร"] = "tiy",
["ตีโดเร"] = "tvo",
["ตุมซุก"] = "xtq",
["ตุรกี"] = "tr",
["ตุรกีแบบออตโตมัน"] = "ota",
["ตุรกีแบบอานาโตเลียเก่า"] = "trk-oat",
["ตุรุง"] = "try",
["ตูปี-กัวรานีดั้งเดิม"] = "tup-gua-pro",
["ตูปีเก่า"] = "tpw",
["ตูลู"] = "tcy",
["ตูวา"] = "tyv",
["ตูวาลู"] = "tvl",
["ตูเปียนดั้งเดิม"] = "tup-pro",
["ตโบลี"] = "tbl",
["ต้งเหนือ"] = "doc",
["ต้งใต้"] = "kmc",
["ทมิฬ"] = "ta",
["ทมิฬเก่า"] = "oty",
["ตอกปีซิน"] = "tpi",
["ทะวืง"] = "thm",
["ทาจิก"] = "tg",
["ทาบาซารัน"] = "tab",
["ทิเบต"] = "bo",
["ทิเบตคลาสสิก"] = "xct",
["ทิเบตเก่า"] = "otb",
["ทือกรึญญา"] = "ti",
["ทือเกร"] = "tig",
["นอซู"] = "ii",
["นอร์มัน"] = "nrf",
["นอร์สดั้งเดิม"] = "gmq-pro",
["นอร์สเก่า"] = "non",
["นอร์เวย์"] = "no",
["นอร์เวย์กลาง"] = "gmq-mno",
["นอร์เวย์แบบนือนอสก์"] = "nn",
["นอร์เวย์แบบบุ๊กมอล"] = "nb",
["นัคดั้งเดิม"] = "cau-nkh-pro",
["นาวัตล์"] = "nah",
["นาวัตล์คลาสสิก"] = "nci",
["นาวัตล์ตอนกลาง"] = "nhn",
["นาวันดั้งเดิม"] = "azc-nah-pro",
["นาวาโฮ"] = "nv",
["นาอูรู"] = "na",
["นาโปลี"] = "nap",
["นิวเคลียร์พอลินีเชียนดั้งเดิม"] = "poz-pnp-pro",
["นิวเบียเก่า"] = "onw",
["นิโคบารีสดั้งเดิม"] = "aav-nic-pro",
["นิโคบาร์กลาง"] = "ncb",
["นีวเว"] = "niu",
["นุง"] = "nut",
["นูเบียนดั้งเดิม"] = "nub-pro",
["บราฮุอี"] = "brh",
["บริทอนิกดั้งเดิม"] = "cel-bry-pro",
["บรูตะวันตก"] = "brv",
["บรูตะวันออก"] = "bru",
["บลาการ์"] = "beu",
["บอลโต-สลาวิกดั้งเดิม"] = "ine-bsl-pro",
["บะห์นัร"] = "bdq",
["บัตส์"] = "bbl",
["บันจาร์"] = "bjn",
["บัมบารา"] = "bm",
["บัลติ"] = "bft",
["บัลแกเรีย"] = "bg",
["บาลี"] = "pi",
["บาวาเรีย"] = "bar",
["บาสก์"] = "eu",
["บาสก์ดั้งเดิม"] = "euq-pro",
["บาหลี"] = "ban",
["บาเจาแบบอินโดนีเซีย"] = "bdl",
["บาเจาแบบเวสต์โคสต์"] = "bdr",
["บาโลจ"] = "bal",
["บิสลามา"] = "bi",
["บีซู"] = "bzi",
["บีนูกิด"] = "bkd",
["บีโคลตอนกลาง"] = "bcl",
["บูกิส"] = "bug",
["บูร์บอแน-แบรีชง"] = "roa-bbn",
["บูร์ยัต"] = "bua",
["ปนัร"] = "pbv",
["ปนัร-คาซี-ลึงงัมดั้งเดิม"] = "aav-pkl-pro",
["ปยู"] = "pyx",
["ปรากฤต"] = "pra",
["ปรากฤตแบบอโศก"] = "inc-ash",
["ปะหล่องดั้งเดิม"] = "mkh-pal-pro",
["ปักษ์ใต้"] = "sou",
["ปังควาฬฺ"] = "pgg",
["ปัญจาบ"] = "pa",
["ปัญจาบเก่า"] = "inc-opa",
["ปาทาน"] = "ps",
["ปาทานดั้งเดิม"] = "ira-pat-pro",
["ปาลาวาโนตอนกลาง"] = "plc",
["ปาลาวาโนตะวันตกเฉียงใต้"] = "plv",
["ปาลาวาโนแบบบรูกส์พอยต์"] = "plw",
["ปาเปียเมนตู"] = "pap",
["ปาเลา"] = "pau",
["ปาโกะห์"] = "pac",
["ปีการ์"] = "pcd",
["ปีปิล"] = "ppl",
["ปีเยมอนเต"] = "pms",
["ปูกาปูกา"] = "pkp",
["ปู้อี"] = "pcc",
["ผิงเหนือ"] = "cnp",
["ผิงใต้"] = "csp",
["ผูเซียน"] = "cpx",
["ผู้น้อย"] = "pho",
["ผู้ไท"] = "pht",
["ฝรั่งเศส"] = "fr",
["ฝรั่งเศสกลาง"] = "frm",
["ฝรั่งเศสเก่า"] = "fro",
["พทคะ"] = "bfq",
["พม่า"] = "my",
["พม่าเก่า"] = "obr",
["พรัช"] = "bra",
["พวน"] = "phu",
["พอลินีเชียนดั้งเดิม"] = "poz-pol-pro",
["พอลินีเชียนตะวันออกดั้งเดิม"] = "poz-pep-pro",
["พิหาร"] = "bh",
["พ่าเก"] = "phk",
["ฟรียูลี"] = "fur",
["ฟรีเชียตะวันตก"] = "fy",
["ฟรีเชียเก่า"] = "ofs",
["ฟรีเชียเหนือ"] = "frr",
["ฟรีเชียแบบซาเทอร์ลันท์"] = "stq",
["ฟร็องโก-พรอว็องส์"] = "frp",
["ฟาลา"] = "fax",
["ฟาลิสกุส"] = "xfa",
["ฟินนิกดั้งเดิม"] = "urj-fin-pro",
["ฟินิเชีย"] = "phn",
["ฟินแลนด์"] = "fi",
["ฟิลิปปินส์ดั้งเดิม"] = "phi-pro",
["ฟีจี"] = "fj",
["ฟูลา"] = "ff",
["มคหะ"] = "mag",
["มงตาแญ"] = "moe",
["มณีปุระ"] = "mni",
["มณีปุระเก่า"] = "omp",
["มนองตอนกลาง"] = "cmo",
["มนองใต้"] = "mnn",
["มราฐี"] = "mr",
["มราฐีเก่า"] = "omr",
["มลยาฬัม"] = "ml",
["มลายูตอนกลาง"] = "pse",
["มลายูแบบตรังกานู"] = "poz-ter",
["มลายูแบบบรูไน"] = "kxd",
["มลายูแบบปัตตานี"] = "mfa",
["มลายูแบบเกอดะฮ์"] = "meo",
["มวานี"] = "wmw",
["มอกชา"] = "mdf",
["มองโกลิกดั้งเดิม"] = "xgn-pro",
["มองโกเลีย"] = "mn",
["มองโกเลียกลาง"] = "xng",
["มองโกเลียคลาสสิก"] = "cmg",
["มอญ"] = "mnw",
["มอญ-เขมรดั้งเดิม"] = "mkh-pro",
["มอญกลาง"] = "mkh-mmn",
["มอญดั้งเดิม"] = "mkh-mnc-pro",
["มอญเก่า"] = "omx",
["มอญแบบไทย"] = "mnw-tha",
["มอลตา"] = "mt",
["มอแซนแดรอน"] = "mzn",
["มัล"] = "mlf",
["มัลดีฟส์"] = "dv",
["มัสบาเต"] = "msb",
["มากัซซาร์"] = "mak",
["มากินดาเนา"] = "mdh",
["มาซิโดเนีย"] = "mk",
["มายันดั้งเดิม"] = "myn-pro",
["มาราเนา"] = "mrw",
["มาร์วาร์"] = "mwr",
["มาร์แชลล์"] = "mh",
["มาลากาซี"] = "mg",
["มาลาโย-จามิกดั้งเดิม"] = "poz-mcm-pro",
["มาลาโย-ซุมบาวันดั้งเดิม"] = "poz-msa-pro",
["มาลาโย-พอลินีเชียนดั้งเดิม"] = "poz-pro",
["มาลาโย-พอลินีเชียนตอนกลาง-ตะวันออกดั้งเดิม"] = "poz-cet-pro",
["มาลาโย-พอลินีเชียนตะวันออกดั้งเดิม"] = "pqe-pro",
["มาวรี"] = "mi",
["มาเลย์อิกดั้งเดิม"] = "poz-mly-pro",
["มาเลเซีย"] = "ms",
["มาไซ"] = "mas",
["มิงเกรเลีย"] = "xmf",
["มิยาโกะ"] = "mvi",
["มีนังกาเบา"] = "min",
["มีรังดา"] = "mwl",
["มีโซ"] = "lus",
["มือรัสเซีย"] = "rsl",
["มืออินเดีย"] = "ins",
["มืออินโดนีเซีย"] = "inl",
["มืออเมริกัน"] = "ase",
["มือเนปาล"] = "nsp",
["มือไทย"] = "tsq",
["มุนดาดั้งเดิม"] = "mun-pro",
["มูซี"] = "mui",
["ม้ง-เมี่ยนดั้งเดิม"] = "hmx-pro",
["ม้งขาว"] = "mww",
["ม้งดั้งเดิม"] = "hmn-pro",
["ม้งเขียว"] = "hnj",
["ยอง"] = "yno",
["ยอลอ"] = "yol",
["ยะไข่"] = "rki",
["ยากัน"] = "yka",
["ยามานา"] = "yag",
["ยามี"] = "tao",
["ยาเอยามะ"] = "rys",
["ยิดดิช"] = "yi",
["ยุปปิก"] = "esu",
["ยูกริกดั้งเดิม"] = "urj-ugr-pro",
["ยูการิต"] = "uga",
["ยูราลิกดั้งเดิม"] = "urj-pro",
["ยูเครน"] = "uk",
["ยูโต-แอซเทกันดั้งเดิม"] = "azc-pro",
["รวันดา-รุนดี"] = "rw",
["รัสเซีย"] = "ru",
["ราชพังสี"] = "rjs",
["ราปานูอี"] = "rap",
["ราโรโตงา"] = "rar",
["ริฟ"] = "rif",
["รูซินแบบคาร์พาเทีย"] = "rue",
["รูซินแบบพันโนเนีย"] = "rsk",
["ร่วม"] = "mul",
["ลอมบาร์ด"] = "lmo",
["ละติน"] = "la",
["ลัก"] = "lbe",
["ลักเกีย"] = "lbc",
["ลักเซมเบิร์ก"] = "lb",
["ลัซ"] = "lzz",
["ลัตเกล"] = "ltg",
["ลัตเวีย"] = "lv",
["ลัมปุงกิกดั้งเดิม"] = "poz-lgx-pro",
["ลัมโบยา"] = "lmy",
["ลาดัก"] = "lbj",
["ลาดิน"] = "lld",
["ลาดิโน"] = "lad",
["ลาว"] = "lo",
["ลิงกาลา"] = "ln",
["ลิทัวเนีย"] = "lt",
["ลิทัวเนียเก่า"] = "olt",
["ลินดู"] = "klw",
["ลิมบู"] = "lif",
["ลิมเบิร์ก"] = "li",
["ลิววี"] = "olo",
["ลีกูเรีย"] = "lij",
["ลีสู่"] = "lis",
["ลีโวเนีย"] = "liv",
["ลึงงัม"] = "lyg",
["ลูกันดา"] = "lg",
["ลูอิชดั้งเดิม"] = "sit-luu-pro",
["วอลตา-คองโกดั้งเดิม"] = "nic-vco-pro",
["วอลตา-ไนเจอร์ดั้งเดิม"] = "alv-von-pro",
["วันดัล"] = "xvn",
["วัลลูน"] = "wa",
["วาราโอ"] = "wba",
["วาไร"] = "war",
["วินเนอเบโก"] = "win",
["วีลามอวิตแซ"] = "wym",
["สกอต"] = "sco",
["สมราย"] = "smu",
["สลาวอนิกคริสตจักรเก่า"] = "cu",
["สลาวิกดั้งเดิม"] = "sla-pro",
["สลาวิกตะวันออกเก่า"] = "orv",
["สวานา"] = "tn",
["สวาฮีลี"] = "sw",
["สวีเดน"] = "sv",
["สวีเดนเก่า"] = "gmq-osw",
["สะโอจ"] = "scq",
["สันถาลี"] = "sat",
["สันสกฤต"] = "sa",
["ซำเร"] = "sxm",
["สิกขิม"] = "sip",
["สิงหล"] = "si",
["สินธ์"] = "sd",
["สิเลฏ"] = "syl",
["สุ่ย"] = "swi",
["สเปน"] = "es",
["สเปนเก่า"] = "osp",
["สโลวัก"] = "sk",
["สโลวักเก่า"] = "zlw-osk",
["สโลวินช์"] = "zlw-slv",
["สโลวีเนีย"] = "sl",
["หง่วน"] = "nuo",
["หมะ"] = "cma",
["หมิ่นดั้งเดิม"] = "zhx-min-pro",
["หมิ่นตอนกลาง"] = "czo",
["หมิ่นตะวันออก"] = "cdo",
["หมิ่นเหนือ"] = "mnp",
["หมิ่นใต้"] = "nan",
["หล่อยแอว๋"] = "luh",
["ห่อยซัน"] = "zhx-tai",
["อวัธ"] = "awa",
["ออสซีเซีย"] = "os",
["ออสโตรนีเซียนดั้งเดิม"] = "map-pro",
["ออสโตรเอเชียติกดั้งเดิม"] = "aav-pro",
["ออโรโม"] = "om",
["อะดีเกยา"] = "ady",
["อะตง"] = "aot",
["อะวาร์"] = "av",
["อะวาร์เก่า"] = "oav",
["อะแพชีตะวันตก"] = "apw",
["อักลัน"] = "akl",
["อังกฤษ"] = "en",
["อังกฤษกลาง"] = "enm",
["อังกฤษเก่า"] = "ang",
["อับคาเซีย"] = "ab",
["อัมฮารา"] = "am",
["อัมโมน"] = "sem-amm",
["อัลไตเหนือ"] = "atv",
["อัลไตใต้"] = "alt",
["อัสตูเรียส"] = "ast",
["อัสสัม"] = "as",
["อัสสัมกลาง"] = "inc-mas",
["อัสสัมช่วงต้น"] = "inc-oas",
["อากูตายา"] = "agn",
["อาข่า"] = "ahk",
["อาคัน"] = "ak",
["อาซี"] = "bno",
["อานาโตเลียนดั้งเดิม"] = "ine-ana-pro",
["อาบาซา"] = "abq",
["อาฟรีกานส์"] = "af",
["อาฟาร์"] = "aa",
["อามามิโอชิมะเหนือ"] = "ryn",
["อามามิโอชิมะใต้"] = "ams",
["อารากอน"] = "an",
["อารามายา"] = "arc",
["อาร์มีเนีย"] = "hy",
["อาร์มีเนียกลาง"] = "axm",
["อาร์มีเนียนดั้งเดิม"] = "hyx-pro",
["อาร์มีเนียเก่า"] = "xcl",
["อาลูตีก"] = "ems",
["อาหม"] = "aho",
["อาหรับ"] = "ar",
["อาหรับแบบซูดาน"] = "apd",
["อาหรับแบบตูนิเซีย"] = "aeb",
["อาหรับแบบทาจิกิสถาน"] = "abh",
["อาหรับแบบบาห์เรน"] = "abv",
["อาหรับแบบลิเบีย"] = "ayl",
["อาหรับแบบลิแวนต์ใต้"] = "ajp",
["อาหรับแบบอันดะลุส"] = "xaa",
["อาหรับแบบอิรัก"] = "acm",
["อาหรับแบบอียิปต์"] = "arz",
["อาหรับแบบอุซเบกิสถาน"] = "auz",
["อาหรับแบบฮิญาซ"] = "acw",
["อาหรับแบบเมโสโปเตเมียเหนือ"] = "ayp",
["อาหรับแบบเยเมน"] = "ayn",
["อาหรับแบบแอลจีเรีย"] = "arq",
["อาหรับแบบโมร็อกโก"] = "ary",
["อาหรับแบบโอมาน"] = "acx",
["อาหรับแบบไซปรัส"] = "acy",
["อาเจะฮ์"] = "ace",
["อาเซอร์ไบจาน"] = "az",
["อาเนตยูม"] = "aty",
["อาเบ"] = "aba",
["อิกโบ"] = "ig",
["อิงกุช"] = "inh",
["อิงเกรีย"] = "izh",
["อิตาลิกดั้งเดิม"] = "itc-pro",
["อิตาลี"] = "it",
["อินุกติตุต"] = "iu",
["อินุอิตดั้งเดิม"] = "esx-inu-pro",
["อินเทร์ลิงเกว"] = "ie",
["อินเทอร์ลิงกวา"] = "ia",
["อินโด-ยูโรเปียนดั้งเดิม"] = "ine-pro",
["อินโด-อารยันดั้งเดิม"] = "inc-pro",
["อินโด-อิเรเนียนดั้งเดิม"] = "iir-pro",
["อินโดนีเซีย"] = "id",
["อิสเตรีย"] = "ist",
["อิเรเนียนดั้งเดิม"] = "ira-pro",
["อีดาอัน"] = "dbj",
["อีทรัสคัน"] = "ett",
["อีบัน"] = "iba",
["อียิปต์"] = "egy",
["อีรานุน"] = "ill",
["อีสาน"] = "tts",
["อีโด"] = "io",
["อีโลกาโน"] = "ilo",
["อุซเบก"] = "uz",
["อุดมูร์ต"] = "udm",
["อุตซิตา"] = "oc",
["อุตซิตาเก่า"] = "pro",
["อุนเซอร์ด็อยทช์"] = "uln",
["อุมเบรีย"] = "xum",
["อุยกูร์"] = "ug",
["อุยกูร์เก่า"] = "oui",
["อูดี"] = "udi",
["อูรดู"] = "ur",
["อูรักลาโวยจ"] = "urk",
["อู๋"] = "wuu",
["อเวสตะ"] = "ae",
["อ่ายตน"] = "aio",
["ฮกเกี้ยน"] = "nan-hbl",
["ฮังการี"] = "hu",
["ฮังการีเก่า"] = "ohu",
["ฮาชอง"] = "haj",
["ฮานูโนโอ"] = "hnn",
["ฮาวาย"] = "haw",
["ฮินดี"] = "hi",
["ฮินดีเก่า"] = "inc-ohi",
["ฮินดีแบบฟีจี"] = "hif",
["ฮินดูสตานีแบบแคริบเบียน"] = "hns",
["ฮีบรู"] = "he",
["ฮีรีโมตู"] = "ho",
["ฮีลีไกโนน"] = "hil",
["ฮุนสริก"] = "hrx",
["ฮูร์เรีย"] = "xhu",
["เกชวนดั้งเดิม"] = "qwe-pro",
["เกชัว"] = "qu",
["เกชัวคลาสสิก"] = "qwc",
["เกรตอันดามันนีสดั้งเดิม"] = "qfa-adm-pro",
["เกอฮอ"] = "kpm",
["เกาหลี"] = "ko",
["เกาหลีกลาง"] = "okm",
["เกาหลีดั้งเดิม"] = "qfa-kor-pro",
["เกาหลีเก่า"] = "oko",
["เกาหลีใหม่ช่วงต้น"] = "ko-ear",
["เกโกโย"] = "ki",
["เขมร"] = "km",
["เขมรกลาง"] = "xhm",
["เขมรดั้งเดิม"] = "mkh-kmr-pro",
["เขมรเก่า"] = "okz",
["เขมรเหนือ"] = "kxm",
["เขิน"] = "kkh",
["เคลติกดั้งเดิม"] = "cel-pro",
["เควนยา"] = "qya",
["เคอร์ดิชดั้งเดิม"] = "ku-pro",
["เคิร์ดตอนกลาง"] = "ckb",
["เคิร์ดเหนือ"] = "kmr",
["เจวา"] = "ny",
["เจอร์แมนิกดั้งเดิม"] = "gem-pro",
["เจอร์แมนิกตะวันตกดั้งเดิม"] = "gmw-pro",
["เจียเม่า"] = "jio",
["เฉ่าเหมียว"] = "cov",
["เชจู"] = "jje",
["เชเชน"] = "ce",
["เชเยนน์"] = "chy",
["เชโรกี"] = "chr",
["เช็ก"] = "cs",
["เช็กเก่า"] = "zlw-ocs",
["เซบัวโน"] = "ceb",
["เซมิติกดั้งเดิม"] = "sem-pro",
["เซมิติกตะวันตกดั้งเดิม"] = "sem-wes-pro",
["เซอร์โบ-โครเอเชีย"] = "sh",
["เซอไม"] = "sea",
["เซียง"] = "hsn",
["เดนมาร์ก"] = "da",
["เดนมาร์กเก่า"] = "gmq-oda",
["เดาโร"] = "dwr",
["เตตุน"] = "tet",
["เตลูกู"] = "te",
["เตอร์กิกดั้งเดิม"] = "trk-pro",
["เตอร์กิกเก่า"] = "otk",
["เตอร์นาเต"] = "tft",
["เตอเมียร์"] = "tea",
["เติร์กเมน"] = "tk",
["เทาส์"] = "twf",
["เนปาล"] = "ne",
["เนวาร์"] = "new",
["เนวาร์กลาง"] = "nwx",
["เนวาร์คลาสสิก"] = "nwc",
["เนเกอร์ฮอลันดส์"] = "dcr",
["เบ"] = "onb",
["เบ-ไทดั้งเดิม"] = "qfa-bet-pro",
["เบงกอล"] = "bn",
["เบงกอลกลาง"] = "inc-mbn",
["เบงกอลเก่า"] = "inc-obn",
["เบดั้งเดิม"] = "qfa-onb-pro",
["เบนูเอ-คองโกดั้งเดิม"] = "nic-bco-pro",
["เบรอตง"] = "br",
["เบรอตงกลาง"] = "xbm",
["เบรอตงเก่า"] = "obt",
["เบลารุส"] = "be",
["เบอตาวี"] = "bew",
["เบอราวัน"] = "lod",
["เบอร์เบอร์ดั้งเดิม"] = "ber-pro",
["เบอร์เบอร์แบบตูนีเซีย"] = "sds",
["เปอร์มิกดั้งเดิม"] = "urj-prm-pro",
["เปอร์เซีย"] = "fa",
["เปอร์เซียกลาง"] = "pal",
["เปอร์เซียเก่า"] = "peo",
["เพลาท์ดิทช์"] = "pdt",
["เมวาร์"] = "mtr",
["อิ้วเมี่ยน"] = "ium",
["เมี่ยนดั้งเดิม"] = "hmx-mie-pro",
["เยอรมัน"] = "de",
["เยอรมันตอนกลางตะวันออก"] = "gmw-ecg",
["เยอรมันต่ำ"] = "nds",
["เยอรมันต่ำกลาง"] = "gml",
["เยอรมันต่ำแบบเยอรมนี"] = "nds-de",
["เยอรมันสูงกลาง"] = "gmh",
["เยอรมันสูงเก่า"] = "goh",
["เยอรมันแบบซิพเซอร์"] = "gmw-zps",
["เยอรมันแบบว็อลกา"] = "gmw-vog",
["เยอรมันแบบอลามันเนีย"] = "gsw",
["เยอรมันแบบเพนซิลเวเนีย"] = "pdc",
["เรอหวั่ง"] = "raw",
["เลซกี"] = "lez",
["เลออน"] = "roa-leo",
["เลออนเก่า"] = "roa-ole",
["เลอเวือะตะวันตก"] = "lcp",
["เลอเวือะตะวันออก"] = "lwl",
["เวนดา"] = "ve",
["เวปส์"] = "vep",
["เวลส์"] = "cy",
["เวลส์กลาง"] = "wlm",
["เวลส์เก่า"] = "owl",
["เวอโร"] = "vro",
["เวียดนาม"] = "vi",
["เวียดนามกลาง"] = "mkh-mvi",
["เวียตติกดั้งเดิม"] = "mkh-vie-pro",
["เวเนโต"] = "vec",
["เศรปา"] = "xsr",
["เสฉวน"] = "zhx-sic",
["เหมื่อง"] = "mtq",
["เอชเตฮาร์ด"] = "esh",
["เอซเตรมาดูรา"] = "ext",
["เอมีเลีย"] = "egl",
["เอร์เซีย"] = "myv",
["เอสกิโมดั้งเดิม"] = "esx-esk-pro",
["เอสเปรันโต"] = "eo",
["เอสโตเนีย"] = "et",
["เอเว"] = "ee",
["เอเวนค์"] = "evn",
["เอเว็น"] = "eve",
["เอโดม"] = "xdm",
["เฮลเลนิกดั้งเดิม"] = "grk-pro",
["เฮาซา"] = "ha",
["เฮเรโร"] = "hz",
["แกลิกแบบสกอตแลนด์"] = "gd",
["แคชเมียร์"] = "ks",
["แคะ"] = "hak",
["แจพอนิกดั้งเดิม"] = "jpx-pro",
["แซกซันเก่า"] = "osx",
["แดลเมเชีย"] = "dlm",
["แต้จิ๋ว"] = "nan-tws",
["แบกเตรีย"] = "xbc",
["แบชเคียร์"] = "ba",
["แบนทอยด์ดั้งเดิม"] = "nic-bod-pro",
["แบนทูดั้งเดิม"] = "bnt-pro",
["แบล็กสปีช"] = "art-bsp",
["แพ็กเจ"] = "pkc",
["แฟโร"] = "fo",
["แมงซ์"] = "gv",
["แมนจู"] = "mnc",
["แสก"] = "skb",
["แอกแคด"] = "akk",
["แอตแลนติก-คองโกดั้งเดิม"] = "alv-pro",
["แอฟโฟรเอเชียติกดั้งเดิม"] = "afa-pro",
["แอลกองเคียนดั้งเดิม"] = "alg-pro",
["แอลจิกดั้งเดิม"] = "aql-pro",
["แอลฟ์ดาเลิน"] = "ovd",
["แอละแบมา"] = "akz",
["แอลเบเนีย"] = "sq",
["แอลเบเนียนดั้งเดิม"] = "sqj-pro",
["โกฟา"] = "gof",
["โคซา"] = "xh",
["โคณฑี"] = "gon",
["โคตาน"] = "kho",
["โคทาวา"] = "avk",
["โจว"] = "tsu",
["โชนา"] = "sn",
["โชร์"] = "cjs",
["โซตซิล"] = "tzo",
["โซมาลอยด์ดั้งเดิม"] = "cus-som-pro",
["โซมาลี"] = "so",
["โซ่ง"] = "soa",
["โตทา"] = "tcx",
["โตฟา"] = "kim",
["โทกูโนชิมะ"] = "tkn",
["โทแคเรียนดั้งเดิม"] = "ine-toc-pro",
["โทแคเรียนบี"] = "txb",
["โทแคเรียนเอ"] = "xto",
["โนเวียล"] = "nov",
["โบล"] = "bol",
["โบลีเนา"] = "smk",
["โบโด"] = "brx",
["โบโด-กาโรดั้งเดิม"] = "tbq-bdg-pro",
["โปรตุเกส"] = "pt",
["โปแลนด์"] = "pl",
["โปแลนด์เก่า"] = "zlw-opl",
["โภชปุระ"] = "bho",
["โมกิล"] = "mkj",
["โมอับ"] = "obm",
["โมเชโน"] = "mhn",
["โยกัด"] = "yog",
["โยนางูนิ"] = "yoi",
["โยรง"] = "yox",
["โยรูบอยด์ดั้งเดิม"] = "alv-yrd-pro",
["โยรูบา"] = "yo",
["โยรูบาดั้งเดิม"] = "alv-yor-pro",
["โรมัญญา"] = "rgn",
["โรมานช์"] = "rm",
["โรมานี"] = "rom",
["โรมาเนีย"] = "ro",
["โรฮีนจา"] = "rhg",
["โลจบาน"] = "jbo",
["โลโกโน"] = "arw",
["โลโล-เบอร์มีซดั้งเดิม"] = "tbq-lob-pro",
["โลโลอิชดั้งเดิม"] = "tbq-lol-pro",
["โวต"] = "vot",
["โวลอฟ"] = "wo",
["โวลาปุก"] = "vo",
["โอกินาวะ"] = "ryu",
["โอกิโนเอราบุ"] = "okn",
["โอจิบเว"] = "oj",
["โอซิง"] = "osi",
["โอริยา"] = "or",
["โอริยากลาง"] = "inc-mor",
["โอริยาเก่า"] = "inc-oor",
["โอเชียนิกดั้งเดิม"] = "poz-oce-pro",
["ไซลีเซีย"] = "szl",
["ไทขาว"] = "twh",
["ไทดั้งเดิม"] = "tai-pro",
["ไทดำ"] = "blt",
["ไทตะวันตกเฉียงใต้ดั้งเดิม"] = "tai-swe-pro",
["ไทย"] = "th",
["ไทลื้อ"] = "khb",
["ไทแดง"] = "tyr",
["ไทแมน"] = "tyj",
["ไทแหล่ง"] = "tjl",
["ไทใต้คง"] = "tdd",
["ไทใหญ่"] = "shn",
["ไนเจอร์-คองโกดั้งเดิม"] = "nic-pro",
["ไปวัน"] = "pwn",
["ไมถิลี"] = "mai",
["ไมนอส"] = "omn",
["ไมยา"] = "sks",
["ไมโครนีเซียนดั้งเดิม"] = "poz-mic-pro",
["ไว"] = "vai",
["ไหล"] = "lic",
["ไหลดั้งเดิม"] = "qfa-lic-pro",
["ไหหลำ"] = "hnm",
["ไอซ์แลนด์"] = "is",
["ไอนุ"] = "ain",
["ไอย์มารา"] = "ay",
["ไอริช"] = "ga",
["ไอริชกลาง"] = "mga",
["ไอริชเก่า"] = "sga",
["Ỹaroamë"] = "yro",
}
b0s1kfqjlksy7yuo02f4sus414h778g
5729130
5729126
2026-07-20T02:36:11Z
Octahedron80
267
5729130
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",
["Abenaki"] = "abe",
["Abenlen Ayta"] = "abp",
["Abidji"] = "abi",
["Abinomn"] = "bsa",
["Abipón"] = "axb",
["Abishira"] = "ash",
["Abom"] = "aob",
["Abon"] = "abo",
["Aborlan Tagbanwa"] = "tbw",
["Abu"] = "ado",
["Abu'"] = "aah",
["Abua"] = "abn",
["Abui"] = "abz",
["Abun"] = "kgr",
["Abung"] = "abl",
["Abure"] = "abu",
["Abureni"] = "mgj",
["Acatepec Me'phaa"] = "tpx",
["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",
["Adja"] = "ajg",
["Adnyamathanha"] = "adt",
["Adonara"] = "adr",
["Aduge"] = "adu",
["Adzera"] = "adz",
["Adûni"] = "art-adu",
["Aeka"] = "aez",
["Aekyom"] = "awi",
["Aequian"] = "xae",
["Aer"] = "aeq",
["Afade"] = "aal",
["Afghan Sign Language"] = "afg",
["Afitti"] = "aft",
["Afra"] = "ulf",
["Afrihili"] = "afh",
["Afro-Seminole Creole"] = "afs",
["Agarabi"] = "agd",
["Agariya"] = "agi",
["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",
["Agwagwune"] = "yay",
["Ahanta"] = "aha",
["Ahirani"] = "ahr",
["Ahtna"] = "aht",
["Ahwai"] = "nfd",
["Ai-Cham"] = "aih",
["Aighon"] = "aix",
["Aikanã"] = "tba",
["Aiklep"] = "mwg",
["Aimele"] = "ail",
["Aimol"] = "aim",
["Ainbai"] = "aic",
["Aiome"] = "aki",
["Airoran"] = "air",
["Aisi"] = "mmq",
["Aja"] = "aja",
["Ajawa"] = "ajw",
["Ajië"] = "aji",
["Ajyíninka Apurucayali"] = "cpc",
["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",
["Akar-Bale"] = "acl",
["Akaselem"] = "aks",
["Akatek"] = "knj",
["Akawaio"] = "ake",
["Ake"] = "aik",
["Akebu"] = "keu",
["Akei"] = "tsr",
["Akeu"] = "aeu",
["Akhvakh"] = "akv",
["Akkala Sami"] = "sia",
["Akolet"] = "akt",
["Akoose"] = "bss",
["Akoye"] = "miw",
["Akpa"] = "akf",
["Akpes"] = "ibe",
["Akrukay"] = "afi",
["Akuku"] = "ayk",
["Akum"] = "aku",
["Akuntsu"] = "aqz",
["Akurio"] = "ako",
["Akuwagel"] = "bey",
["Akwa"] = "akw",
["Akyaung Ari"] = "nqy",
["Al-Sayyid Bedouin Sign Language"] = "syy",
["Alaba"] = "alw",
["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 Sign Language"] = "sqk",
["Alchuka"] = "tuw-alk",
["Alcozauca Mixtec"] = "xta",
["Alege"] = "alf",
["Alekano"] = "gah",
["Aleut"] = "ale",
["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",
["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",
["Amganad Ifugao"] = "ifa",
["Ami"] = "amy",
["Amis"] = "ami",
["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 Ligurian"] = "xlg",
["Ancient Macedonian"] = "xmk",
["Ancient North Arabian"] = "xna",
["Ancient Zapotec"] = "xzp",
["Andai"] = "afd",
["Andajin"] = "ajn",
["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",
["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",
["Ao"] = "njo",
["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",
["Aputai"] = "apx",
["Aquitanian"] = "xaq",
["Arabana"] = "ard",
["Arabela"] = "arl",
["Araki"] = "akr",
["Arakwal"] = "rkw",
["Aralle-Tabulahan"] = "atq",
["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 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",
["Asaro'o"] = "mtv",
["Ashe"] = "ahs",
["Ashkun"] = "ask",
["Asho Chin"] = "csh",
["Ashraaf"] = "cus-ash",
["Asháninka"] = "cni",
["Ashéninka Pajonal"] = "cjo",
["Ashéninka Perené"] = "prq",
["Asilulu"] = "asl",
["Askopan"] = "eiv",
["Asoa"] = "asv",
["Assan"] = "xss",
["Assangori"] = "sjg",
["Assiniboine"] = "asb",
["อารามายาใหม่แบบอัสซีเรีย"] = "aii",
["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",
["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",
["Austronesian Mari"] = "hob",
["Auwe"] = "smf",
["Auyana"] = "auy",
["Auye"] = "auu",
["Auyokawa"] = "auo",
["Avatime"] = "avn",
["Avau"] = "avb",
["Avava"] = "tmb",
["Avikam"] = "avi",
["Avokaya"] = "avu",
["Avá-Canoeiro"] = "avv",
["Awa (China)"] = "vwa",
["Awa (New Guinea)"] = "awb",
["Awa-Cuaiquer"] = "kwi",
["Awabakal"] = "awk",
["Awak"] = "awo",
["Awar"] = "aya",
["Awara"] = "awx",
["Awbono"] = "awh",
["Aweer"] = "bob",
["Awera"] = "awr",
["Awetí"] = "awe",
["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",
["Ayomán"] = "sai-ayo",
["Ayoquesco Zapotec"] = "zaf",
["Ayoreo"] = "ayo",
["Ayu"] = "ayu",
["Ayutla Mixtec"] = "miy",
["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",
["Bada"] = "bhz",
["Badanchi"] = "bau",
["Bade"] = "bde",
["Badeshi"] = "bdz",
["Badimaya"] = "bia",
["Baduy"] = "bac",
["Badyara"] = "pbp",
["Baeggu"] = "bvd",
["Baelelea"] = "bvc",
["Baenan"] = "sai-bae",
["Baetora"] = "btr",
["Bafanji"] = "bfj",
["Bafaw"] = "bwt",
["Bafia"] = "ksf",
["Bafut"] = "bfd",
["Baga Kaloum"] = "bqf",
["Baga Koga"] = "bgo",
["Baga Manduri"] = "bmd",
["Baga Pokur"] = "bcg",
["Baga Sitemu"] = "bsp",
["Baga Sobané"] = "bsv",
["Bagheli"] = "bfy",
["Bagirmi"] = "bmi",
["Bago-Kusuntu"] = "bqg",
["Bagri"] = "bgq",
["Bagua"] = "sai-bag",
["Bagupi"] = "bpi",
["Bagusa"] = "bqb",
["Bagvalal"] = "kva",
["Baha"] = "yha",
["Baham"] = "bdw",
["Bahamian Creole"] = "bah",
["Bahau"] = "bhv",
["Bahinemo"] = "bjh",
["Bahing"] = "bhj",
["Bahonsuai"] = "bsu",
["Bai (South Sudan)"] = "bdj",
["Baibai"] = "bbf",
["Baikeno"] = "bkx",
["Bailang"] = "tbq-blg",
["Baima"] = "bqh",
["Baimak"] = "bmx",
["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 Malay"] = "mhp",
["Balkan Gagauz Turkish"] = "bgx",
["Balkan Romani"] = "rmn",
["Balo"] = "bqo",
["Baloi"] = "biz",
["Balong"] = "bnt-bal",
["Baltic Romani"] = "rml",
["Baluan-Pam"] = "blq",
["Bamako Sign Language"] = "bog",
["Bamali"] = "bbq",
["Bambalang"] = "bmo",
["Bambam"] = "ptu",
["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",
["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",
["Basketo"] = "bst",
["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",
["Batu"] = "btu",
["Batui"] = "zbt",
["Batuley"] = "bay",
["Bau"] = "bbd",
["Bau Bidayuh"] = "sne",
["Bauchi"] = "bsf",
["Baure"] = "brg",
["Bauria"] = "bge",
["Bauro"] = "bxa",
["Bauwaki"] = "bwk",
["Bauzi"] = "bvz",
["Bawm Chin"] = "bgr",
["Bay Miwok"] = "mkq",
["Bayali"] = "bjy",
["Baybayanon"] = "bvy",
["Baygo"] = "byg",
["Bayogoula"] = "nai-bay",
["Bayono"] = "byl",
["Bayot"] = "bda",
["Bayungu"] = "bxj",
["Bazigar"] = "bfr",
["Baïnounk Gubëeher"] = "alv-bgu",
["Beami"] = "beo",
["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",
["Belhariya"] = "byw",
["Beli"] = "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",
["Benggoi"] = "bgy",
["Bengkala Sign Language"] = "bqy",
["Bentong"] = "bnu",
["Benyadu'"] = "byd",
["Beothuk"] = "bue",
["Bepour"] = "bie",
["Bera"] = "brf",
["Berakou"] = "bxv",
["Berau Malay"] = "bve",
["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",
["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",
["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",
["Bijori"] = "bix",
["Bikaru"] = "bic",
["Bikya"] = "byb",
["Bila"] = "bip",
["Bilakura"] = "bql",
["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",
["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",
["Bisorio"] = "bir",
["Bissa"] = "bib",
["Bit"] = "bgk",
["Bitare"] = "brt",
["Bitur"] = "mcc",
["Biwat"] = "bwm",
["Biyo"] = "byo",
["Biyom"] = "bpm",
["Blablanga"] = "blp",
["Blackfoot"] = "bla",
["Blafe"] = "bfh",
["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 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",
["Bolgo"] = "bvo",
["Bolia"] = "bli",
["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",
["Bourguignon"] = "roa-brg",
["Bozaba"] = "bzo",
["Bragat"] = "aof",
["Brazilian Sign Language"] = "bzs",
["Brek Karen"] = "kvl",
["Brem"] = "buq",
["Breri"] = "brq",
["Bribri"] = "bzd",
["British Sign Language"] = "bfi",
["Brokkat"] = "bro",
["Brokpake"] = "sgt",
["Brokskat"] = "bkk",
["Broome Pearling Lugger Pidgin"] = "bpl",
["Brunei Bisaya"] = "bsb",
["Bruny Island"] = "xpz",
["Bu"] = "jid",
["Bu-Nao Bunu"] = "bwx",
["Bua"] = "bub",
["Bualkhaw Chin"] = "cbl",
["Buamu"] = "box",
["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",
["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 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",
["Burmeso"] = "bzu",
["Buru (Indonesia)"] = "mhs",
["Buru (Nigeria)"] = "bqw",
["Burui"] = "bry",
["Burumakok"] = "aip",
["Burun"] = "bdi",
["Burunge"] = "bds",
["Burushaski"] = "bsk",
["Burusu"] = "bqr",
["Buruwai"] = "asi",
["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",
["Caolan"] = "mlc",
["Capanahua"] = "kaq",
["Capiznon"] = "cps",
["Cappadocian Greek"] = "cpg",
["Caquinte"] = "cot",
["Cara"] = "cfd",
["Carabayo"] = "cby",
["Caramanta"] = "crf",
["Caranqui"] = "sai-caq",
["Carapana"] = "cbc",
["Carian"] = "xcr",
["Cariay"] = "awd-kar",
["Carijona"] = "cbd",
["Carolina Algonquian"] = "crr",
["Carolinian"] = "cal",
["Carpathian Romani"] = "rmc",
["Carrier"] = "crx",
["Cashibo-Cacataibo"] = "cbr",
["Cashinahua"] = "cbs",
["Casiguran Dumagat Agta"] = "dgc",
["Casuarina Coast Asmat"] = "asc",
["Catacao"] = "sai-cat",
["Catalan Sign Language"] = "csc",
["Catawba"] = "chc",
["Catuquinaru"] = "sai-ctq",
["Catío Chibcha"] = "cba-cat",
["Cauca"] = "cca",
["Cavineña"] = "cav",
["Cayubaba"] = "cyb",
["Cayuga"] = "cay",
["Cayuse"] = "xcy",
["Cazcan"] = "azc-caz",
["Cañari"] = "sai-cnr",
["Cebaara Senoufo"] = "sef",
["Celtiberian"] = "xce",
["Cen"] = "cen",
["Central Asmat"] = "cns",
["Central Atlas Tamazight"] = "tzm",
["Central Awyu"] = "awu",
["Central Bai"] = "bca",
["Central Bontoc"] = "lbk",
["Central Cagayan Agta"] = "agt",
["ฟรังโกเนียตอนกลาง"] = "gmw-cfr",
["Central Grebo"] = "grv",
["Central Huasteca Nahuatl"] = "nch",
["Central Huishui Hmong"] = "hmc",
["Central Mahuatlán Zapotec"] = "zam",
["Central Mansi"] = "mns-cen",
["Central Masela"] = "mxz",
["Central Mashan Hmong"] = "hmm",
["Central Mazahua"] = "maz",
["Central Melanau"] = "mel",
["Central Ojibwa"] = "ojc",
["Central Pame"] = "pbs",
["Central Pomo"] = "poo",
["Central Puebla Nahuatl"] = "ncx",
["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",
["Chaha"] = "sem-cha",
["Chaima"] = "ciy",
["Chairel"] = "sit-cha",
["Chak"] = "ckh",
["Chakali"] = "cli",
["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",
["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",
["Chayahuita"] = "cbt",
["Chayuco Mixtec"] = "mih",
["Chazumba Mixtec"] = "xtb",
["Che"] = "ruk",
["Cheke Holo"] = "mrn",
["Chemakum"] = "xch",
["Chenapian"] = "cjn",
["Chenchu"] = "cde",
["Chenoua"] = "cnu",
["Chepang"] = "cdm",
["Chepya"] = "ycp",
["Cherepon"] = "cpn",
["Chesu"] = "ych",
["Chetco-Tolowa"] = "ctc",
["Chewong"] = "cwg",
["Chhattisgarhi"] = "hne",
["Chhintange"] = "ctn",
["Chhulung"] = "cur",
["Chiangmai Sign Language"] = "csd",
["Chiapanec"] = "cip",
["Chibcha"] = "chb",
["Chicahuaxtla Triqui"] = "trs",
["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 Pidgin English"] = "cpi",
["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",
["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",
["Chukwa"] = "cuw",
["Chulym"] = "clw",
["Chumburung"] = "ncu",
["Churahi"] = "cdj",
["Church Slavonic"] = "zls-chs",
["Churuya"] = "sai-chu",
["Chut"] = "scb",
["Chuukese"] = "chk",
["Chuvan"] = "xcv",
["Chácobo"] = "cao",
["Ci Gbe"] = "cib",
["Cia-Cia"] = "cia",
["Cibak"] = "ckl",
["Cicipu"] = "awc",
["Ciguayo"] = "nai-cig",
["คิมบรี"] = "cim",
["Cinamiguin Manobo"] = "mkx",
["Cinda-Regi-Tiyal"] = "cdr",
["Cineni"] = "cie",
["Cinta Larga"] = "cin",
["Cishingini"] = "asg",
["Citak"] = "txt",
["Ciwogai"] = "tgd",
["แกลิกคลาสสิก"] = "ghc",
["Classical Mandaic"] = "myz",
["ซีรีแอกคลาสสิก"] = "syc",
["Coahuilteco"] = "xcw",
["Coast Miwok"] = "csi",
["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",
["Coquille"] = "coq",
["Cora"] = "crn",
["Cori"] = "cry",
["Coroado Puri"] = "sai-crd",
["Cosoleacaque Nahuatl"] = "nhk",
["Costa Rican Sign Language"] = "csr",
["Cotabato Manobo"] = "mta",
["Cotoname"] = "xcn",
["Cowlitz"] = "cow",
["Coyaima"] = "coy",
["Coyotepec Popoloca"] = "pbf",
["Coyutla Totonac"] = "toc",
["Creek"] = "mus",
["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",
["Cung"] = "cug",
["Cupeño"] = "cup",
["Curonian"] = "xcu",
["Curripaco"] = "kpc",
["Cutchi-Swahili"] = "ccl",
["Cuvok"] = "cuv",
["Cuyamecalco Mixtec"] = "xtu",
["Cuyunon"] = "cyo",
["Cwi Bwamu"] = "bwy",
["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",
["Dakpa"] = "dka",
["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 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",
["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",
["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",
["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",
["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 Low Saxon"] = "nds-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",
["Dzuun"] = "dnn",
["Dâw"] = "kwa",
["E"] = "eee",
["E'ma Buyang"] = "yzg",
["Early Old Oghuz"] = "trk-eog",
["Early Tripuri"] = "xtr",
["East Damar"] = "dmr",
["ฟรังโกเนียตะวันออก"] = "vmf",
["East Futuna"] = "fud",
["East Kewa"] = "kjs",
["East Limba"] = "lma",
["East Masela"] = "vme",
["East Nyala"] = "nle",
["East Tarangan"] = "tre",
["East Yugur"] = "yuy",
["Eastern Acipa"] = "acp",
["Eastern Arrernte"] = "aer",
["Eastern Bolivian Guarani"] = "gui",
["Eastern Bontoc"] = "ebk",
["Eastern Canadian Inuktitut"] = "ike",
["Eastern Durango Nahuatl"] = "azd",
["Eastern Gorkha Tamang"] = "tge",
["Eastern Gurung"] = "ggn",
["Eastern Highland Chatino"] = "cly",
["Eastern Highland Otomi"] = "otm",
["Eastern Huasteca Nahuatl"] = "nhe",
["Eastern Huishui Hmong"] = "hme",
["Eastern Karaboro"] = "xrb",
["Eastern Keres"] = "kee",
["Eastern Khanty"] = "kca-eas",
["Eastern Krahn"] = "kqo",
["Eastern Lalu"] = "yit",
["Eastern Magar"] = "mgp",
["Eastern Maninkakan"] = "emk",
["Eastern Mari"] = "mhr",
["Eastern Meohang"] = "emg",
["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 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",
["Edopi"] = "dbf",
["Efai"] = "efa",
["Efe"] = "efe",
["Efik"] = "efi",
["Efutop"] = "ofu",
["Ega"] = "ega",
["Eggon"] = "ego",
["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",
["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",
["Emplawas"] = "emw",
["En"] = "enc",
["Enawené-Nawé"] = "unk",
["Ende"] = "end",
["Enga"] = "enq",
["Engenni"] = "enn",
["Enggano"] = "eno",
["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",
["Esan"] = "ish",
["Ese"] = "mcq",
["Ese Ejja"] = "ese",
["Esimbi"] = "ags",
["Eskayan"] = "esy",
["Esmeralda"] = "sai-esm",
["Esselen"] = "esq",
["Estado de México Otomi"] = "ots",
["Estonian Sign Language"] = "eso",
["Esuma"] = "esm",
["Etchemin"] = "etc",
["Etebi"] = "etb",
["Eten"] = "etx",
["Eteocretan"] = "ecr",
["Eteocypriot"] = "ecy",
["Ethiopian Sign Language"] = "eth",
["Etkywan"] = "ich",
["Eton (Cameroon)"] = "eto",
["Eton (Vanuatu)"] = "etn",
["Etulo"] = "utr",
["Evant"] = "bzz",
["Ewage-Notu"] = "nou",
["Ewarhuyana"] = "sai-ewa",
["Ewondo"] = "ewo",
["Eyak"] = "eya",
["Ezaa"] = "eza",
["Fagani"] = "faf",
["Faire Atta"] = "azt",
["Faita"] = "faj",
["Faiwol"] = "fai",
["Fakkanci"] = "gel",
["Falam Chin"] = "cfm",
["Fali"] = "fli",
["Fam"] = "fam",
["Fanagalo"] = "fng",
["Fanamaket"] = "bjp",
["Fang (Bantu)"] = "fan",
["Fang (Beboid)"] = "fak",
["Fania"] = "fni",
["Far Western Muria"] = "fmu",
["ฟราฟรา"] = "gur",
["Fas"] = "fqs",
["Fasu"] = "faa",
["Fataleka"] = "far",
["Fataluku"] = "ddg",
["Fayu"] = "fau",
["Fe'fe'"] = "fmp",
["Fedan"] = "pdn",
["Fembe"] = "agl",
["Fer"] = "kah",
["Feroge"] = "fer",
["Filomena Mata-Coahuitlán Totonac"] = "tlp",
["Fingallian"] = "gmw-fin",
["Finisterre Yau"] = "yuw",
["Finnish Sign Language"] = "fse",
["Finnish-Swedish Sign Language"] = "fss",
["Finongan"] = "fag",
["Fipa"] = "fip",
["Firan"] = "fir",
["Fiwaga"] = "fiw",
["Flemish Sign Language"] = "vgt",
["Flinders Island"] = "fln",
["Foau"] = "flh",
["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",
["French Belgian Sign Language"] = "sfb",
["French Sign Language"] = "fsl",
["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",
["Gagnoa Bété"] = "btg",
["Gahri"] = "bfu",
["Gaikundi"] = "gbf",
["Gaina"] = "gcn",
["Gal"] = "gap",
["Galambu"] = "glo",
["Galatian"] = "xga",
["Galela"] = "gbi",
["Galeya"] = "gar",
["Galice"] = "gce",
["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-Ningi"] = "bte",
["Gana"] = "gnq",
["Ganang"] = "gne",
["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",
["Garre"] = "gex",
["Garus"] = "gyb",
["Garza"] = "xgr",
["Gashowu Yokuts"] = "yok-gsy",
["Gata'"] = "gaq",
["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",
["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",
["Gepo"] = "ygp",
["Gera"] = "gew",
["Gerka"] = "gek",
["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",
["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",
["Gogo"] = "gog",
["Gogodala"] = "ggw",
["Goguryeo"] = "zkg",
["Gojri"] = "gju",
["Gokana"] = "gkn",
["Gokhy"] = "tbq-gkh",
["Gola"] = "gol",
["Golin"] = "gvf",
["Golpa"] = "lja",
["Gone Dau"] = "goo",
["Gongduk"] = "goe",
["Gonja"] = "gjn",
["Goo"] = "gov",
["Gor"] = "gqr",
["Gorakor"] = "goc",
["Gorap"] = "goq",
["Goreng"] = "xgg",
["Gorontalo"] = "gor",
["Gorovu"] = "grq",
["Gorwaa"] = "gow",
["Gottscheerish"] = "gmw-gts",
["Goundo"] = "goy",
["Gourmanchéma"] = "gux",
["Gowlan"] = "goj",
["Gowro"] = "gwf",
["Gozarkhani"] = "goz",
["Grangali"] = "nli",
["Grass Koiari"] = "kbk",
["Greek Sign Language"] = "gss",
["Green Gelao"] = "giq",
["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 Sign Language"] = "lgs",
["Guinean Sign Language"] = "gus",
["Guiqiong"] = "gqi",
["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",
["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",
["Hainyaxo Bozo"] = "bzx",
["Haiphong Sign Language"] = "haf",
["Haisla"] = "has",
["Haitian Vodoun Culture Language"] = "hvc",
["Haiǁom"] = "hgm",
["Haji"] = "hji",
["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",
["Harami"] = "xha",
["Harappan"] = "xiv",
["Harari"] = "har",
["Haraza"] = "nub-har",
["Harijan Kinnauri"] = "kjo",
["Haroi"] = "hro",
["Harsusi"] = "hss",
["Haruai"] = "tmd",
["Haruku"] = "hrk",
["หริยาณวี"] = "bgc",
["Harzani"] = "hrz",
["Hasaitic"] = "sem-has",
["Hasha"] = "ybj",
["Hassaniya Arabic"] = "mey",
["Hatam"] = "had",
["Hattic"] = "xht",
["Hausa Sign Language"] = "hsl",
["Haush"] = "sai-hau",
["Havasupai-Walapai-Yavapai"] = "yuf",
["Haveke"] = "hvk",
["Havu"] = "hav",
["Hawai'i Pidgin Sign Language"] = "hps",
["Hawaiian Creole"] = "hwc",
["Haya"] = "hay",
["Hdi"] = "xed",
["Hehe"] = "heh",
["Heiban"] = "hbn",
["Heiltsuk"] = "hei",
["Helong"] = "heg",
["Hema"] = "nix",
["Hemba"] = "hem",
["Herdé"] = "hed",
["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",
["Hijuk"] = "hij",
["Hill Maria"] = "mrr",
["Himarimã"] = "hir",
["Hindi Dogri"] = "dgo",
["Hinduri"] = "hii",
["Hinukh"] = "gin",
["Hismaic"] = "sem-his",
["Hitchiti"] = "nai-hit",
["Hittite"] = "hit",
["Hitu"] = "htu",
["Hiw"] = "hiw",
["Hixkaryana"] = "hix",
["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",
["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 Sign Language"] = "hsh",
["Hungworo"] = "nat",
["Hunjara-Kaina Ke"] = "hkk",
["Hunnic"] = "xhc",
["Hunzib"] = "huz",
["Hupa"] = "hup",
["Hupdë"] = "jup",
["Hupla"] = "hap",
["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",
["Ibanag"] = "ibg",
["Ibani"] = "iby",
["Ibatan"] = "ivb",
["Iberian"] = "xib",
["Ibibio"] = "ibb",
["Ibino"] = "ibn",
["Iboko"] = "bkp",
["Ibu"] = "ibu",
["Ibuoro"] = "ibr",
["Icelandic Sign Language"] = "icl",
["Iceve-Maci"] = "bec",
["Idakho-Isukha-Tiriki"] = "ida",
["Idaté"] = "idt",
["Idere"] = "ide",
["Idesa"] = "ids",
["Idi"] = "idi",
["Idiom Neutral"] = "mis-idn",
["Idoma"] = "idu",
["Idon"] = "idc",
["Idu"] = "clk",
["Idun"] = "ldb",
["Iduna"] = "viv",
["Ifo"] = "iff",
["Ifè"] = "ife",
["Igala"] = "igl",
["Igana"] = "igg",
["Igede"] = "ige",
["Ignaciano"] = "ign",
["Igo"] = "ahl",
["Iguta"] = "nar",
["Igwe"] = "igw",
["Iha"] = "ihp",
["Ihievbe"] = "ihi",
["Ija-Zuba"] = "vki",
["Ik"] = "ikx",
["Ika"] = "ikk",
["Ikaranggal"] = "ikr",
["Ikizu"] = "ikz",
["Iko"] = "iki",
["Ikobi-Mena"] = "meb",
["Ikoma"] = "ntk",
["Ikpeng"] = "txi",
["Ikpeshi"] = "ikp",
["Ikposo"] = "kpo",
["Iku-Gora-Ankwa"] = "ikv",
["Ikulu"] = "ikl",
["Ikwere"] = "ikw",
["Ikwo"] = "iqw",
["Ila"] = "ilb",
["Ile Ape"] = "ila",
["Ilgar"] = "ilg",
["Ili Turki"] = "ili",
["Ili'uun"] = "ilu",
["Ilianen Manobo"] = "mbi",
["Illyrian"] = "xil",
["Ilongot"] = "ilk",
["Ilue"] = "ilv",
["Ilwana"] = "mlk",
["Imbongu"] = "imo",
["Imonda"] = "imn",
["Imroing"] = "imr",
["Inabaknon"] = "abx",
["Inapang"] = "mzu",
["Indanga"] = "bnt-ind",
["Indo-Portuguese"] = "idb",
["Indri"] = "idr",
["Indus Kohistani"] = "mvy",
["Inebu One"] = "oin",
["Ineseño"] = "inz",
["Inga"] = "inb",
["Inlaod Itneg"] = "iti",
["Inoke-Yate"] = "ino",
["Inonhan"] = "loc",
["Inor"] = "ior",
["Inpui Naga"] = "nkf",
["International Sign"] = "ils",
["Interslavic"] = "isv",
["Intha"] = "int",
["Inuinnaqtun"] = "esx-inq",
["Inuit Sign Language"] = "iks",
["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",
["Iraqw"] = "irk",
["Irarutu"] = "irh",
["Iraya"] = "iry",
["Iresim"] = "ire",
["Iriga Bicolano"] = "bto",
["Irish Sign Language"] = "isg",
["Irula"] = "iru",
["Isabi"] = "isa",
["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",
["Istro-Romanian"] = "ruo",
["Isu"] = "isu",
["Isubu"] = "szv",
["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",
["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 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 Sign Language"] = "jsl",
["Japhug"] = "sit-jap",
["Japrería"] = "jru",
["Jaqaru"] = "jqr",
["Jara"] = "jaf",
["Jarai"] = "jra",
["Jarawa"] = "anq",
["Jaru"] = "ddj",
["Jassic"] = "ysc",
["Jaunsari"] = "jns",
["Javindo"] = "jvd",
["Jawe"] = "jaz",
["Jaya"] = "jyy",
["Jebero"] = "jeb",
["Jeh"] = "jeh",
["Jehai"] = "jhi",
["Jeikó"] = "sai-jko",
["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",
["Jiba"] = "juo",
["Jibu"] = "jib",
["Jicarilla"] = "apj",
["Jie"] = "mis-jie",
["Jiiddu"] = "jii",
["Jilbe"] = "jie",
["Jili"] = "mgi",
["Jilim"] = "jil",
["Jimi"] = "jmi",
["Jimjimen"] = "jim",
["Jina"] = "jia",
["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",
["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",
["Kabiyé"] = "kbp",
["Kabola"] = "klz",
["Kabore One"] = "onk",
["Kabras"] = "lkb",
["Kaburi"] = "uka",
["Kabutra"] = "kbu",
["Kabwa"] = "cwa",
["Kabwari"] = "kcw",
["Kachama-Ganjule"] = "kcx",
["Kachari"] = "xac",
["Kachi Koli"] = "gjk",
["Kacipo-Balesi"] = "koe",
["Kaco'"] = "xkk",
["Kadai"] = "kzd",
["Kadar"] = "kej",
["Kadara"] = "kad",
["Kadaru"] = "kdu",
["Kadiwéu"] = "kbc",
["Kado"] = "kdv",
["Kadugli"] = "xtc",
["Kaduo"] = "ktp",
["Kaera"] = "jka",
["Kafa"] = "kbr",
["Kafoa"] = "kpu",
["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",
["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",
["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",
["Kamasa"] = "klp",
["Kamasau"] = "kms",
["Kamassian"] = "xas",
["Kamayo"] = "kyk",
["Kamayurá"] = "kay",
["Kamba"] = "kam",
["Kambaata"] = "ktb",
["Kambaira"] = "kyy",
["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",
["Kannada Kurumba"] = "kfi",
["Kannauji"] = "bjj",
["Kanowit"] = "kxn",
["Kanoé"] = "kxo",
["Kansa"] = "ksk",
["Kantosi"] = "xkt",
["Kanu"] = "khx",
["Kanufi"] = "kni",
["Kanyok"] = "kny",
["Kao"] = "kax",
["Kaonde"] = "kqn",
["Kap"] = "ykm",
["Kapauri"] = "khp",
["Kapin"] = "tbx",
["Kapinawá"] = "xpn",
["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",
["Karakhanid"] = "xqa",
["Karami"] = "xar",
["Karamojong"] = "kdj",
["Karang"] = "kzr",
["Karanga"] = "kth",
["Karankawa"] = "zkk",
["Karas"] = "kgv",
["Karata"] = "kpt",
["Karawa"] = "xrw",
["Karbi"] = "mjw",
["Kare (Central Africa)"] = "kbn",
["Kare (New Guinea)"] = "kmf",
["Karekare"] = "kai",
["Karey"] = "kyd",
["Kari"] = "kbj",
["Kari'na"] = "car",
["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",
["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",
["Kavet"] = "krv",
["Kawacha"] = "kcb",
["Kawaiisu"] = "xaw",
["Kawe"] = "kgb",
["Kawishana"] = "awd-kaw",
["Kawésqar"] = "alc",
["Kaxararí"] = "ktx",
["Kaxuyana"] = "kbb",
["Kayabí"] = "kyz",
["Kayagar"] = "kyt",
["Kayan Mahakam"] = "xay",
["Kayan River Kayan"] = "xkn",
["Kayapa Kallahan"] = "kak",
["Kayapó"] = "txu",
["Kayardild"] = "gyd",
["Kayeli"] = "kzl",
["Kayong"] = "kxy",
["Kayort"] = "kyv",
["Kaytetye"] = "gbb",
["Kayupulau"] = "kzu",
["Kazukuru"] = "kzk",
["Ke'o"] = "xxk",
["Keak"] = "keh",
["Keapara"] = "khz",
["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",
["Kesawai"] = "xes",
["Ket"] = "ket",
["Ketangalan"] = "kae",
["Kete"] = "kcv",
["Ketengban"] = "xte",
["Ketum"] = "ktt",
["Kewa"] = "kew",
["Keyagana"] = "kyg",
["Kgalagadi"] = "xkv",
["แฆแลจ"] = "klj",
["Khaling"] = "klr",
["Khamnigan Mongol"] = "ykh",
["Khamyang"] = "ksu",
["Khana"] = "ogo",
["Khandeshi"] = "khn",
["Khao"] = "xao",
["Kharam Naga"] = "kfw",
["Kharia"] = "khr",
["Kharia Thar"] = "ksy",
["Khayo"] = "lko",
["Khazar"] = "zkz",
["Khe"] = "kqg",
["Khehek"] = "tlx",
["Khengkha"] = "xkf",
["Khetrani"] = "xhe",
["Khezha Naga"] = "nkh",
["Khiamniungan Naga"] = "kix",
["Khinalug"] = "kjj",
["Khirwar"] = "kwx",
["Khisa"] = "kqm",
["Khlor"] = "llo",
["Khlula"] = "ykl",
["Khoekhoe"] = "naq",
["Khoibu Naga"] = "nkb",
["Khoini"] = "xkc",
["Kholok"] = "ktc",
["Kholosi"] = "inc-kho",
["Khorasani Turkish"] = "kmz",
["Khorezmian Turkic"] = "zkh",
["Khowar"] = "khw",
["Khroskyabs"] = "jiq",
["Khua"] = "xhv",
["Khuen"] = "khf",
["Khumi Chin"] = "cnk",
["Khvarshi"] = "khv",
["Khwarezmian"] = "xco",
["Khwe"] = "xuu",
["Kháng"] = "kjm",
["Kiautschou German Pidgin"] = "crp-kia",
["Kibala"] = "blv",
["Kibena"] = "bez",
["Kibet"] = "kie",
["Kibiri"] = "prm",
["Kichwa"] = "qwe-kch",
["Kickapoo"] = "kic",
["Kikai"] = "kzg",
["Kikami"] = "kcu",
["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",
["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",
["Kohumono"] = "bcs",
["Koi"] = "kkt",
["Koibal"] = "zkb",
["Koireng"] = "nkd",
["Koitabu"] = "kqi",
["Koiwat"] = "kxt",
["Kok-Nar"] = "gko",
["Kok-Paponk"] = "okg",
["Kokata"] = "ktd",
["Koke"] = "kou",
["Koko-Bera"] = "kkp",
["Kokoda"] = "xod",
["Kokola"] = "kzn",
["Kokota"] = "kkk",
["Kol (Cameroon)"] = "biw",
["Kol (New Guinea)"] = "kol",
["Kola"] = "kvv",
["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",
["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 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",
["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",
["Kota Marudu Tinagas"] = "ktr",
["Kotafon Gbe"] = "kqk",
["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",
["Kulon-Pazeh"] = "uun",
["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",
["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",
["Kunimaipa"] = "kup",
["Kunja"] = "pep",
["Kunjen"] = "kjn",
["Kunyi"] = "njx",
["Kunza"] = "kuz",
["Kuo"] = "xuo",
["Kuot"] = "kto",
["Kupa"] = "kug",
["Kupang Malay"] = "mkn",
["Kupia"] = "key",
["Kupsabiny"] = "kpz",
["Kur"] = "kuv",
["Kura Ede Nago"] = "nqk",
["Kurama"] = "krh",
["Kuranko"] = "knk",
["Kuri"] = "nbn",
["Kuria"] = "kuj",
["Kurichiya"] = "kfh",
["Kurmukar"] = "kfv",
["Kurnai"] = "unn",
["Kurrama"] = "vku",
["Kurti"] = "ktm",
["Kurtjar"] = "gdj",
["Kurtöp"] = "xkz",
["Kurudu"] = "kjr",
["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",
["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",
["Kâte"] = "kmg",
["Kélé"] = "keb",
["Kómnzo"] = "paa-kom",
["La'bi"] = "lbi",
["Laal"] = "gdm",
["Laalaa"] = "cae",
["Laba"] = "lau",
["Label"] = "lbb",
["Labir"] = "jku",
["Labo"] = "mwi",
["Labo Phowa"] = "ypb",
["Labu"] = "lbu",
["Labuk-Kinabatangan Kadazan"] = "dtb",
["Lacandon"] = "lac",
["Lachi"] = "lbt",
["Lachiguiri Zapotec"] = "zpa",
["Lachixío Zapotec"] = "zpl",
["Ladji-Ladji"] = "llj",
["Laeko-Libuat"] = "lkl",
["Lafofa"] = "laf",
["Laghu"] = "lgb",
["Laghuu"] = "lgh",
["Lagwan"] = "kot",
["Laha (Indonesia)"] = "lhh",
["Laha (Vietnam)"] = "lha",
["Lahanan"] = "lhn",
["Lahnda"] = "lah",
["Lahta Karen"] = "kvt",
["Lahu"] = "lhu",
["Lahu Shi"] = "lhi",
["Lahul Lohar"] = "lhl",
["Lai"] = "cnh",
["Laimbue"] = "lmx",
["Laitu Chin"] = "clj",
["Laiyolo"] = "lji",
["Laka"] = "lak",
["Lakalei"] = "lka",
["Lake Miwok"] = "lmw",
["Lakha"] = "lkh",
["Laki"] = "lki",
["Lakon"] = "lkn",
["Lakondê"] = "lkd",
["ลาโคตา"] = "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",
["Langam"] = "lnm",
["Langbashe"] = "lna",
["Langi"] = "lag",
["Langnian Buyang"] = "yln",
["Lango (Sudan)"] = "lno",
["Lango (Uganda)"] = "laj",
["Lanima"] = "lnw",
["Lanoh"] = "lnh",
["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",
["Latu"] = "ltu",
["Latundê"] = "ltn",
["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",
["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",
["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",
["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",
["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 Sign Language"] = "lbs",
["Ligbi"] = "lig",
["Ligenza"] = "lgz",
["Lihir"] = "lih",
["Lika"] = "lik",
["Liki"] = "lio",
["Likila"] = "lie",
["Likuba"] = "kxx",
["Likum"] = "lib",
["Likwala"] = "kwc",
["Lilau"] = "lll",
["Lillooet"] = "lil",
["Limassa"] = "bme",
["Limbum"] = "lmp",
["Limi"] = "ylm",
["Limilngan"] = "lmc",
["Limos Kalinga"] = "kmk",
["Linear A"] = "lab",
["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",
["Lithuanian Sign Language"] = "lls",
["Little Swanport"] = "aus-lsw",
["Litzlitz"] = "lzl",
["Lizu"] = "sit-liz",
["Lo-Toga"] = "lht",
["Loarki"] = "lrk",
["Lobala"] = "loq",
["Lobi"] = "lob",
["Lodhi"] = "lbm",
["Logba"] = "lgq",
["Logo"] = "log",
["Logol"] = "lof",
["Logooli"] = "rag",
["Logorik"] = "liu",
["Lokaa"] = "yaz",
["Loko"] = "lok",
["Lokoya"] = "lky",
["Lola"] = "lcd",
["Lolak"] = "llq",
["Lole"] = "llg",
["Lolo"] = "llb",
["Loloda"] = "loa",
["Lolopo"] = "ycl",
["Loma"] = "lom",
["Lomaiviti"] = "lmv",
["Lomakka"] = "loi",
["Lomavren"] = "rmi",
["Lombi"] = "lmi",
["Lombo"] = "loo",
["Lomwe"] = "ngl",
["Loncong"] = "lce",
["Long Phuri Naga"] = "lpn",
["Long Wat"] = "ttw",
["Longgu"] = "lgu",
["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",
["Loun"] = "lox",
["Loup A"] = "xlo",
["Loup B"] = "xlb",
["Lovono"] = "vnk",
["Lower Burdekin"] = "xbb",
["Lower Chehalis"] = "cea",
["Lower Grand Valley Dani"] = "dni",
["Lower Nossob"] = "nsb",
["Lower Southern Aranda"] = "axl",
["Lower Ta'oih"] = "tto",
["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",
["Lugbara"] = "lgg",
["Luguru"] = "ruf",
["Luhu"] = "lcq",
["Luhya"] = "luy",
["Luimbi"] = "lum",
["Luiseño"] = "lui",
["Lukpa"] = "dop",
["Lule"] = "ule",
["Lumba-Yakkha"] = "luu",
["Lumbee"] = "lmz",
["Lumbu"] = "lup",
["Lumun"] = "lmd",
["Lun Bawang"] = "lnd",
["Luna"] = "luj",
["Lunanakha"] = "luk",
["Lunda"] = "lun",
["Lungga"] = "lga",
["Luo"] = "luo",
["Luopohe Hmong"] = "hml",
["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",
["Luyana"] = "lyn",
["Lwalu"] = "lwa",
["Lwel"] = "lvl",
["Lycian"] = "xlc",
["Lydian"] = "xld",
["Lyélé"] = "lee",
["Láadan"] = "ldn",
["Láá Láá Bwamu"] = "bwj",
["Löyöp"] = "urr",
["Ma"] = "msj",
["Ma Manda"] = "skc",
["Ma'anyan"] = "mhy",
["Ma'di"] = "mhi",
["Ma'ya"] = "slz",
["Maaka"] = "mew",
["Maale"] = "mdy",
["Maay"] = "ymm",
["Maba"] = "mqa",
["Mabaale"] = "mmz",
["Mabaan"] = "mfz",
["Mabaka Valley Kalinga"] = "kkg",
["Mabire"] = "muj",
["Maca"] = "mca",
["Macaguaje"] = "mcl",
["Macaguán"] = "mbn",
["Macau Pidgin Portuguese"] = "crp-mpp",
["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",
["Magdalena Peñasco Mixtec"] = "xtm",
["Magiyi"] = "gmg",
["Magoma"] = "gmx",
["Magori"] = "zgr",
["Magɨ"] = "gkd",
["Mahali"] = "mjx",
["Mahasu Pahari"] = "bfz",
["Mahican"] = "mjy",
["Mahongwe"] = "mhb",
["Mahou"] = "mxx",
["Maiadomu"] = "mzz",
["Maiani"] = "tnh",
["Maii"] = "mmm",
["Mailu"] = "mgu",
["Maindo"] = "cwb",
["Maipure"] = "awd-mpr",
["Mairasi"] = "zrs",
["Maisin"] = "mbq",
["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",
["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 Paharia"] = "mkb",
["Mala (New Guinea)"] = "ped",
["Mala (Nigeria)"] = "ruy",
["Mala Malasar"] = "ima",
["Malaccan Creole Malay"] = "ccm",
["Malalamai"] = "mmt",
["Malalí"] = "sai-mal",
["Malango"] = "mln",
["Malankuravan"] = "mjo",
["Malapandaram"] = "mjp",
["Malaryan"] = "mjq",
["Malas"] = "mkr",
["Malasanga"] = "mqz",
["Malasar"] = "ymr",
["Malavedan"] = "mjr",
["Malawi Lomwe"] = "lon",
["Malawian Sign Language"] = "lws",
["Malayic Dayak"] = "xdy",
["Malaynon"] = "mlz",
["Malaysian Sign Language"] = "xml",
["Malba Birifor"] = "bfo",
["Male"] = "mdc",
["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 Sign Language"] = "mdl",
["Malua Bay"] = "mll",
["Malvi"] = "mup",
["Maléku Jaíka"] = "gut",
["Mam"] = "mam",
["Mama"] = "mma",
["Mamaa"] = "mhf",
["Mamaindé"] = "wmd",
["Mamanwa"] = "mmn",
["Mamara Senoufo"] = "myk",
["Mamasa"] = "mqj",
["Mambae"] = "mgm",
["Mambai"] = "mcs",
["Mamboru"] = "mvd",
["Mambwe-Lungu"] = "mgr",
["Mampruli"] = "maw",
["Mamuju"] = "mqx",
["Mamulique"] = "emm",
["Mamusi"] = "kdf",
["Mamvu"] = "mdi",
["Man Met"] = "mml",
["มลายูแบบมานาโด"] = "xmm",
["Manam"] = "mva",
["Manambu"] = "mle",
["Manangba"] = "nmm",
["Manangkari"] = "znk",
["Manao"] = "awd-man",
["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",
["Mandeali"] = "mjl",
["Mander"] = "mqr",
["Mandingo"] = "man",
["Mandinka"] = "mnk",
["Mandjak"] = "mfv",
["Mandobo Atas"] = "aax",
["Mandobo Bawah"] = "bwp",
["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",
["Manikion"] = "mnx",
["Manipa"] = "mqp",
["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",
["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",
["Maranungku"] = "zmr",
["Mararit"] = "mgb",
["Maratino"] = "sai-mar",
["Marau"] = "mvr",
["Marawan"] = "awd-mar",
["Marba"] = "mpg",
["Marenje"] = "vmr",
["Marfa"] = "mvu",
["Margany"] = "zmc",
["Marghi South"] = "mfm",
["Margi"] = "mrt",
["Maria"] = "mds",
["Mariaté"] = "awd-mrt",
["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",
["Marsian"] = "ims",
["Martha's Vineyard Sign Language"] = "mre",
["Marti Ke"] = "zmg",
["Martu Wangka"] = "mpj",
["Martuthunira"] = "vma",
["Marúbo"] = "mzr",
["Masaba"] = "myx",
["Masadiit Itneg"] = "tis",
["Masakará"] = "sai-msk",
["Masalit"] = "mls",
["Masana"] = "mcn",
["Masbate Sorsogon"] = "bks",
["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 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",
["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"] = "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",
["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 Cornish"] = "cnx",
["Middle Kannada"] = "dra-mkn",
["Middle Median"] = "xme-mid",
["Middle Scots"] = "gmw-msc",
["Middle Watut"] = "mpl",
["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",
["Mina"] = "hna",
["Minaean"] = "inm",
["Minang"] = "xrg",
["Minaveha"] = "mvn",
["Minderico"] = "drc",
["Mindiri"] = "mpn",
["Mingang Doso"] = "mko",
["Mingo"] = "iro-min",
["Minica Huitoto"] = "hto",
["Minidien"] = "wii",
["Minigir"] = "vmg",
["Minjungbal"] = "xjb",
["Minkin"] = "xxm",
["Minokok"] = "mqq",
["Minriq"] = "mnq",
["Mintil"] = "mzt",
["Miraya Bikol"] = "rbl",
["Mire"] = "mvh",
["Mirgan"] = "zrg",
["Miriti"] = "mmv",
["Miriwoong Sign Language"] = "rsm",
["Miriwung"] = "mep",
["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",
["Miyobe"] = "soy",
["Mlabri"] = "mra",
["Mlahsö"] = "lhs",
["Mlap"] = "kja",
["Mlomp"] = "mlo",
["Mmaala"] = "mmu",
["Mmani"] = "buy",
["Mmen"] = "bfm",
["Mo"] = "wkd",
["Mo'da"] = "gbn",
["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",
["Moken"] = "mwt",
["Mokerang"] = "mft",
["Moklen"] = "mkm",
["Mokole"] = "mkl",
["Mokpwe"] = "bri",
["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",
["Monastic Sign Language"] = "mzg",
["Mondropolon"] = "npn",
["Mondé"] = "mnd",
["Mongghul"] = "mjg-mgl",
["Mongo"] = "lol",
["Mongol"] = "mgt",
["Mongolian Sign Language"] = "msr",
["Mongondow"] = "mog",
["Moni"] = "mnz",
["Monimbo"] = "mom",
["Mono (California)"] = "mnr",
["Mono (Cameroon)"] = "mru",
["Mono (Congo)"] = "mnh",
["Monom"] = "moo",
["Monsang Naga"] = "nmh",
["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",
["Moro"] = "mor",
["Moroccan Amazigh"] = "zgh",
["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",
["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",
["Musar"] = "mmi",
["Musasa"] = "smm",
["Musey"] = "mse",
["Musgu"] = "mug",
["Muskum"] = "mje",
["Musom"] = "msu",
["Mussau-Emira"] = "emi",
["Muthuvan"] = "muv",
["Mutu"] = "tuc",
["Muya"] = "mvm",
["Muyang"] = "muy",
["Muyuw"] = "myw",
["Muzi"] = "ymz",
["Muzo"] = "sai-muz",
["Mvanip"] = "mcj",
["Mvuba"] = "mxh",
["Mwaghavul"] = "sur",
["Mwali Comorian"] = "wlc",
["Mwan"] = "moa",
["Mwatebu"] = "mwa",
["Mwera"] = "mwe",
["Mwerlap"] = "mrm",
["Mwimbi-Muthambi"] = "mws",
["Mwotlap"] = "mlv",
["Myene"] = "mye",
["Mysian"] = "yms",
["Mzieme Naga"] = "nme",
["Mághdì"] = "gmd",
["Mün Chin"] = "mwq",
["Mündü"] = "muh",
["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",
["Nai"] = "bio",
["Najdi Arabic"] = "ars",
["Naka'ela"] = "nae",
["Nakai"] = "nkj",
["Nakame"] = "nib",
["Nakanai"] = "nak",
["Nakara"] = "nck",
["Nake"] = "nbk",
["Naki"] = "mff",
["Nakwi"] = "nax",
["Nalca"] = "nlc",
["Nali"] = "nss",
["Nalik"] = "nal",
["Nalu"] = "naj",
["Nalögo"] = "nlz",
["Namakura"] = "nmk",
["Namat"] = "nkm",
["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",
["Nanerigé Sénoufo"] = "sen",
["Nanga Dama Dogon"] = "nzz",
["Nankina"] = "nnk",
["Nanti"] = "cox",
["Nanticoke"] = "nnt",
["Nanubae"] = "afk",
["Naolan"] = "nai-nao",
["Napu"] = "npy",
["Nar Phu"] = "npa",
["Nara"] = "nrb",
["Narak"] = "nac",
["Narango"] = "nrg",
["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",
["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",
["Nedebang"] = "nec",
["Nefamese"] = "nef",
["Nefusa"] = "jbn",
["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",
["Nepali Kurux"] = "kxl",
["Nete"] = "net",
["Neve'ei"] = "vnm",
["Neverver"] = "lgk",
["New River Shasta"] = "nai-nrs",
["New Zealand Sign Language"] = "nzs",
["Neyo"] = "ney",
["Nez Perce"] = "nez",
["Nga La"] = "hlt",
["Ngaanyatjarra"] = "ntj",
["Ngadha"] = "nxg",
["Ngadjunmaya"] = "nju",
["Ngadjuri"] = "jui",
["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",
["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",
["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",
["Noiri"] = "noi",
["Nokuku"] = "nkk",
["Nomaande"] = "lem",
["Nomane"] = "nof",
["Nomatsiguenga"] = "not",
["Nomlaki"] = "nol",
["Nomu"] = "noh",
["Nonuya"] = "noj",
["Nooksack"] = "nok",
["Noon"] = "snf",
["Noone"] = "nhu",
["Nootka"] = "nuk",
["Nopala Chatino"] = "cya",
["Noric"] = "nrc",
["Norn"] = "nrn",
["Norra"] = "nrr",
["North Ambrym"] = "mmg",
["North Asmat"] = "nks",
["North Awyu"] = "yir",
["North Babar"] = "bcd",
["North Boma"] = "boh",
["North Central Mixe"] = "neq",
["North Efate"] = "llp",
["North Fali"] = "fll",
["North Giziga"] = "gis",
["North Levantine Arabic"] = "apc",
["North Marquesan"] = "mrq",
["North Mofu"] = "mfk",
["มลายูแบบโมลุกกะเหนือ"] = "max",
["North Muyu"] = "kti",
["North Nuaulu"] = "nni",
["North Picene"] = "nrp",
["North Slavey"] = "scs",
["North Tairora"] = "tbg",
["North Tanna"] = "tnn",
["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 Bontoc"] = "rbk",
["Northern Catanduanes Bicolano"] = "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 Khanty"] = "kca-nor",
["Northern Kissi"] = "kqs",
["Northern Lorung"] = "lbr",
["Northern Luri"] = "lrc",
["Northern Mansi"] = "mns-nor",
["Northern Mashan Hmong"] = "hmp",
["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 Pomo"] = "pej",
["Northern Puebla Nahuatl"] = "ncj",
["Northern Pumi"] = "pmi",
["Northern Qiandong Miao"] = "hea",
["Northern Qiang"] = "cng",
["Northern Rengma Naga"] = "nnl",
["Northern Roglai"] = "rog",
["Northern Saharan Berber"] = "mzb",
["Northern Selkup"] = "sel-nor",
["Northern Sierra Miwok"] = "nsq",
["Northern Subanen"] = "stb",
["Northern Tarahumara"] = "thh",
["Northern Tepehuan"] = "ntp",
["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",
["Northwestern Tamang"] = "tmk",
["Norwegian Sign Language"] = "nsl",
["Notre"] = "bly",
["Notsi"] = "ncf",
["Nottoway"] = "ntw",
["Nottoway-Meherrin"] = "nwy",
["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",
["Nupbikha"] = "npb",
["Nupe"] = "nup",
["Nusa Laut"] = "nul",
["Nusu"] = "nuf",
["Nutabe"] = "cba-nut",
["Nyabwa"] = "nwb",
["Nyagrong Minyag"] = "ero-nya",
["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 Senoufo"] = "sev",
["Nyaturu"] = "rim",
["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ü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",
["Ocotepec Mixtec"] = "mie",
["Ocotlán Zapotec"] = "zac",
["Od"] = "odk",
["Odiai"] = "bhf",
["Odoodee"] = "kkc",
["Odual"] = "odu",
["Odut"] = "oda",
["Ofayé"] = "opy",
["Ofo"] = "ofo",
["Ogbah"] = "ogc",
["Ogbia"] = "ogb",
["Ogbogolo"] = "ogg",
["Ogbronuagum"] = "ogu",
["Ogea"] = "eri",
["Oirata"] = "oia",
["Ojitlán Chinantec"] = "chj",
["Okanagan"] = "oka",
["Okiek"] = "oki",
["Oko-Eni-Osayen"] = "oks",
["Oko-Juwoi"] = "okj",
["Okobo"] = "okb",
["Okodia"] = "okd",
["Okolod"] = "kqv",
["Okpamheri"] = "opa",
["Okpe (Northwestern Edo)"] = "okx",
["Okpe (Southwestern Edo)"] = "oke",
["Okpela"] = "atg",
["Oksapmin"] = "opm",
["Oku"] = "oku",
["Okwanuchu"] = "nai-okw",
["Old Awadhi"] = "inc-oaw",
["Old Gutnish"] = "gmq-ogt",
["Old Kannada"] = "dra-okn",
["Old Kentish Sign Language"] = "okl",
["Old Komi"] = "urj-koo",
["Old Median"] = "xme-old",
["Old Navarro-Aragonese"] = "roa-ona",
["Old Novgorodian"] = "zle-ono",
["Old Prussian"] = "prg",
["รูซินเก่า"] = "zle-ort",
["อาหรับใต้เก่า"] = "sem-srb",
["Old Sundanese"] = "osn",
["Old Tati"] = "xme-ott",
["Old Telugu"] = "dra-ote",
["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",
["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",
["Ontenu"] = "ont",
["Ontong Java"] = "ojv",
["Oorlams"] = "oor",
["Opao"] = "opo",
["Opata"] = "opt",
["Opuuo"] = "lgn",
["Opón"] = "sai-opo",
["Oraon Sadri"] = "sdr",
["Orejón"] = "ore",
["Oring"] = "org",
["Orizaba Nahuatl"] = "nlv",
["Orléanais"] = "roa-orl",
["Ormu"] = "orz",
["Ormuri"] = "oru",
["Oro"] = "orx",
["Oro Win"] = "orw",
["Oroch"] = "oac",
["Oroha"] = "ora",
["Orok"] = "oaa",
["Orokaiva"] = "okv",
["Oroko"] = "bdu",
["Orokolo"] = "oro",
["Oroqen"] = "orh",
["Orowe"] = "bpk",
["Oruma"] = "orr",
["Orya"] = "ury",
["Osage"] = "osa",
["Osamayi"] = "syx",
["Osatu"] = "ost",
["Oscan"] = "osc",
["Ososo"] = "oso",
["Ot Danum"] = "otd",
["Otank"] = "uta",
["Oti"] = "oti",
["Otomaco"] = "sai-oto",
["Otoro"] = "otr",
["Ottawa"] = "otw",
["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-Hng"] = "pha",
["Paamese"] = "pma",
["Paasaal"] = "sig",
["Pacahuara"] = "pcp",
["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",
["Pajapan Nahuatl"] = "nhp",
["Pak-Tong"] = "pkg",
["Pakanha"] = "pkn",
["Pakistan Sign Language"] = "pks",
["Paku"] = "pku",
["Paku Karen"] = "jkp",
["Pal"] = "abw",
["Palaic"] = "plq",
["Palaka Senoufo"] = "plr",
["Palantla Chinantec"] = "cpa",
["Palawan Batak"] = "bya",
["Paleni"] = "pnl",
["Palenquero"] = "pln",
["Palewyami Yokuts"] = "yok-ply",
["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",
["Pangwa"] = "pbr",
["Panim"] = "pnr",
["Paniya"] = "pcg",
["Pankararé"] = "pax",
["Pankararú"] = "paz",
["Pankhu"] = "pkh",
["Pannei"] = "pnc",
["Panobo"] = "pno",
["Panyi Bai"] = "bfc",
["Panyjima"] = "pnw",
["Panzaleo"] = "sai-pnz",
["Pao"] = "ppa",
["Papantla Totonac"] = "top",
["Papapana"] = "ppn",
["Papar"] = "dpp",
["Papasena"] = "pas",
["Papel"] = "pbo",
["Papi"] = "ppe",
["Papora"] = "ppu",
["Papua New Guinean Sign Language"] = "pgz",
["Papuan Malay"] = "pmy",
["Papuma"] = "ppm",
["Para Naga"] = "pzn",
["Parachi"] = "prc",
["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",
["พาร์เทีย"] = "xpr",
["Parya"] = "paq",
["Pará Gavião"] = "gvp",
["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",
["Pattapu"] = "ptq",
["Patwin"] = "pwi",
["Paulohi"] = "plh",
["Paumarí"] = "pad",
["Paunaka"] = "pnk",
["Pauri Bareli"] = "bfb",
["Pauserna"] = "psm",
["Pawaia"] = "pwa",
["Pawnee"] = "paw",
["Payaguá"] = "sai-pyg",
["Paynamar"] = "pmr",
["Pazeh"] = "pzh",
["Pe"] = "pai",
["ปอร์"] = "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",
["Penobscot"] = "aaq",
["Penrhyn"] = "pnh",
["Pentlatch"] = "ptw",
["Perai"] = "wet",
["Peranakan Indonesian"] = "pea",
["Perema"] = "wom",
["Pericú"] = "nai-per",
["Pero"] = "pip",
["Persian Sign Language"] = "psc",
["Peruvian Sign Language"] = "prl",
["Petapa Zapotec"] = "zpe",
["Petats"] = "pex",
["Petjo"] = "pey",
["Peñoles Mixtec"] = "mil",
["Phai"] = "prt",
["Phala"] = "ypa",
["Phana'"] = "phq",
["Phangduwali"] = "phw",
["Phende"] = "pem",
["Philippine Sign Language"] = "psp",
["Philistine"] = "mis-phi",
["Phimbi"] = "phm",
["Phola"] = "ypg",
["Pholo"] = "yip",
["Phom"] = "nph",
["Phong-Kniang"] = "pnx",
["Phrygian"] = "xpg",
["Phudagi"] = "phd",
["Phuie"] = "pug",
["Phukha"] = "phh",
["Phuma"] = "ypm",
["Phuong"] = "phg",
["Phupa"] = "ypp",
["Phupha"] = "yph",
["Phuthi"] = "bnt-phu",
["Phuza"] = "ypz",
["Piamatsina"] = "ptr",
["Piame"] = "pin",
["Piapoco"] = "pio",
["Piaroa"] = "pid",
["Pichinglis"] = "fpe",
["Pichis Ashéninka"] = "cpu",
["Pictish"] = "xpi",
["Picuris"] = "nai-pic",
["Pidgin Delaware"] = "dep",
["Pidgin Iha"] = "ihb",
["Pidgin Onin"] = "onx",
["Pijao"] = "pij",
["Pije"] = "piz",
["Pijin"] = "pis",
["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",
["Pirahã"] = "myp",
["Piratapuyo"] = "pir",
["Pirlatapa"] = "bxi",
["Piro"] = "pie",
["Pirriya"] = "xpa",
["Pisabo"] = "pig",
["Pisaflores Tepehua"] = "tpp",
["Piscataway"] = "psy",
["Pisidian"] = "xps",
["Pitcairn-Norfolk"] = "pih",
["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",
["Playero"] = "gob",
["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 Sign Language"] = "pso",
["Polonombauk"] = "plb",
["Pom"] = "pmo",
["Ponam"] = "ncc",
["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 Sign Language"] = "psr",
["Potawatomi"] = "pot",
["Potiguára"] = "pog",
["Poumei Naga"] = "pmx",
["Pouye"] = "bye",
["Powari"] = "pwr",
["Powhatan"] = "pim",
["Poyanáwa"] = "pyn",
["Prasuni"] = "prn",
["Pre-Samnite"] = "itc-psa",
["Primitive Irish"] = "pgl",
["Principense"] = "pre",
["Proto-Abkhaz-Abaza"] = "cau-abz-pro",
["Proto-Amuesha-Chamicuro"] = "awd-amc-pro",
["Proto-Andian"] = "cau-and-pro",
["Proto-Apachean"] = "apa-pro",
["Proto-Arawa"] = "auf-pro",
["Proto-Arawak"] = "awd-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-Avaro-Andian"] = "cau-ava-pro",
["Proto-Bahnaric"] = "mkh-ban-pro",
["Proto-Bai"] = "sit-bai-pro",
["Proto-Batak"] = "btk-pro",
["Proto-Binanderean"] = "paa-bin-pro",
["Proto-Bodish"] = "sit-bdi-pro",
["Proto-Bongo-Bagirmi"] = "csu-bba-pro",
["Proto-Boran"] = "sai-bor-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-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-Cerrado"] = "sai-cer-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-Eastern Jebel"] = "sdv-eje-pro",
["Proto-Eastern Oti-Volta"] = "nic-eov-pro",
["Proto-Edekiri"] = "alv-edk-pro",
["Proto-Edoid"] = "alv-edo-pro",
["Proto-Ersuic"] = "sit-ers-pro",
["Proto-Eskimo-Aleut"] = "esx-pro",
["Proto-Fali"] = "alv-fli-pro",
["Proto-Gbaya"] = "gba-pro",
["Proto-Grassfields"] = "nic-grf-pro",
["Proto-Guang"] = "alv-gng-pro",
["Proto-Gurunsi"] = "nic-gns-pro",
["Proto-Halmahera-Cenderawasih"] = "poz-hce-pro",
["Proto-Heiban"] = "alv-hei-pro",
["Proto-Highland East Cushitic"] = "cus-hec-pro",
["Proto-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-Iroquoian"] = "iro-pro",
["Proto-Iwaidjan"] = "aus-wdj-pro",
["Proto-Jukunoid"] = "nic-jkn-pro",
["Proto-Jê"] = "sai-jee-pro",
["Proto-Kadu"] = "qfa-kad-pro",
["Proto-Kalapuyan"] = "nai-klp-pro",
["Proto-Kam-Sui"] = "qfa-kms-pro",
["Proto-Kampa"] = "awd-kmp-pro",
["Proto-Kamta"] = "inc-krd-pro",
["Proto-Katuic"] = "mkh-kat-pro",
["Proto-Kham"] = "sit-kha-pro",
["Proto-Khanty"] = "kca-pro",
["Proto-Kho-Bwa"] = "sit-khb-pro",
["Proto-Khoe"] = "khi-kho-pro",
["Proto-Koman"] = "ssa-kom-pro",
["Proto-Komisenian"] = "ira-kms-pro",
["Proto-Kru"] = "kro-pro",
["Proto-Kuki-Chin"] = "tbq-kuk-pro",
["Proto-Kuliak"] = "ssa-klk-pro",
["Proto-Kwa"] = "alv-kwa-pro",
["Proto-Lalo"] = "tbq-lal-pro",
["Proto-Lezghian"] = "cau-lzg-pro",
["Proto-Lower Cross River"] = "nic-lcr-pro",
["Proto-Maidun"] = "nai-mdu-pro",
["Proto-Mande"] = "dmn-pro",
["Proto-Mangbetu"] = "csu-maa-pro",
["Proto-Mansi"] = "mns-pro",
["Proto-Mari"] = "chm-pro",
["Proto-Masa"] = "cdc-mas-pro",
["Proto-Mazatec"] = "omq-maz-pro",
["Proto-Medo-Parthian"] = "ira-mpr-pro",
["Proto-Mixe-Zoque"] = "nai-miz-pro",
["Proto-Mixtec"] = "omq-mxt-pro",
["Proto-Mixtecan"] = "omq-mix-pro",
["Proto-Mordvinic"] = "urj-mdv-pro",
["Proto-Mumuye"] = "alv-mum-pro",
["Proto-Munji-Yidgha"] = "ira-mny-pro",
["Proto-Muskogean"] = "nai-mus-pro",
["Proto-Na-Dene"] = "xnd-pro",
["Proto-Naish"] = "sit-nas-pro",
["Proto-Nawiki"] = "awd-nwk-pro",
["Proto-Nilo-Saharan"] = "ssa-pro",
["Proto-Nilotic"] = "sdv-nil-pro",
["Proto-North Halmahera"] = "paa-nha-pro",
["Proto-North Iroquoian"] = "iro-nor-pro",
["Proto-Northern Jê"] = "sai-nje-pro",
["Proto-Northern Naga"] = "sit-kon-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-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-Pama-Nyungan"] = "aus-pam-pro",
["Proto-Paresi-Waura"] = "awd-prw-pro",
["แพริกดั้งเดิม"] = "mkh-pea-pro",
["Proto-Plateau"] = "nic-plt-pro",
["Proto-Plateau Penutian"] = "nai-plp-pro",
["Proto-Pomo"] = "nai-pom-pro",
["Proto-Puroik"] = "sit-khp-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-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-Shughni-Roshani"] = "ira-shr-pro",
["Proto-Shughni-Yazghulami"] = "ira-shy-pro",
["Proto-Shughni-Yazghulami-Munji"] = "ira-sym-pro",
["Proto-Siouan"] = "sio-pro",
["Proto-Siouan-Catawban"] = "nai-sca-pro",
["Proto-Songhay"] = "son-pro",
["Proto-Sotho-Tswana"] = "bnt-sts-pro",
["Proto-South Cushitic"] = "cus-sou-pro",
["Proto-Southern Jê"] = "sai-sje-pro",
["Proto-Ta-Arawak"] = "awd-taa-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-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-Ubangian"] = "nic-ubg-pro",
["Proto-Upper Cross River"] = "nic-ucr-pro",
["Proto-Utian"] = "nai-utn-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-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",
["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",
["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",
["Puyo-Paekche"] = "xpp",
["Puyuma"] = "pyu",
["Pwaamèi"] = "pme",
["Pwapwâ"] = "pop",
["Pyapun"] = "pcw",
["Pye Krumen"] = "pye",
["Pyemmairre"] = "xpb",
["Pyen"] = "pyy",
["Pykobjê"] = "sai-pyk",
["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",
["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",
["ระแด"] = "rad",
["Raetic"] = "xrr",
["Raga"] = "lml",
["Rahambuu"] = "raz",
["Rajah Kabunsuwan Manobo"] = "mqk",
["Raji"] = "rji",
["Rajong"] = "rjg",
["Rajput Garasia"] = "gra",
["Rakahanga-Manihiki"] = "rkh",
["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",
["Rapoisi"] = "kyx",
["Rapting"] = "rpt",
["Rara Bakati'"] = "lra",
["Rasawa"] = "rac",
["Ratagnon"] = "btn",
["Ratahan"] = "rth",
["Rathawi"] = "rtw",
["Rathwi Bareli"] = "bgd",
["Raute"] = "rau",
["Ravula"] = "yea",
["Rawa"] = "rwo",
["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",
["ฟรังโกเนียแบบไรน์"] = "gmw-rfr",
["Riang"] = "ril",
["Riantana"] = "ran",
["Ribun"] = "rir",
["Rigwe"] = "iri",
["Rikbaktsa"] = "rkb",
["Rincón Zapotec"] = "zar",
["Ringgou"] = "rgu",
["Ririo"] = "rri",
["Ritarungo"] = "rit",
["Riung"] = "riu",
["Riverain Sango"] = "snj",
["Rogo"] = "rod",
["Roma"] = "rmm",
["Romam"] = "rmx",
["Romanian Sign Language"] = "rms",
["Romano-Greek"] = "rge",
["Romano-Serbian"] = "rsb",
["Romanova"] = "rmv",
["Romblomanon"] = "rol",
["Rombo"] = "rof",
["Romkun"] = "rmk",
["Ron"] = "cla",
["Ronga"] = "rng",
["Rongga"] = "ror",
["Rongmei Naga"] = "nbu",
["Rongpo"] = "rnp",
["Ronji"] = "roe",
["Roon"] = "rnn",
["Roria"] = "rga",
["Roro"] = "rro",
["Rotokas"] = "roo",
["Rotuman"] = "rtm",
["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",
["Rutul"] = "rut",
["Ruuli"] = "ruc",
["Ruwund"] = "rnd",
["Rwa"] = "rwk",
["Rwandan Sign Language"] = "rsn",
["Réunion Creole French"] = "rcf",
["Sa"] = "sax",
["Sa'a"] = "apb",
["Sa'ban"] = "snv",
["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",
["Saep"] = "spd",
["Safaitic"] = "sem-saf",
["Safaliba"] = "saf",
["Safeyoka"] = "apz",
["Safwa"] = "sbk",
["Sagala"] = "sbm",
["Sagalla"] = "tga",
["Sahaptin"] = "nai-spt",
["Sahu"] = "saj",
["Saisiyat"] = "xsy",
["Sajau Basap"] = "sjb",
["Sakachep"] = "sch",
["Sakam"] = "skm",
["Sakao"] = "sku",
["Sakata"] = "skt",
["Sake"] = "sak",
["Sala"] = "shq",
["Salampasu"] = "slx",
["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",
["Sambalpuri"] = "spv",
["Sambe"] = "xab",
["Samberigi"] = "ssx",
["Samburu"] = "saq",
["Samei"] = "smh",
["Samo"] = "smq",
["Samoan Plantation Pidgin"] = "crp-spp",
["Samogitian"] = "sgs",
["Samosa"] = "swm",
["Sampang"] = "rav",
["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",
["Sangtam Naga"] = "nsa",
["Sangu (Gabon)"] = "snq",
["Sangu (Tanzania)"] = "sbp",
["Sani"] = "ysn",
["Sanie"] = "ysy",
["Saniyo-Hiyewe"] = "sny",
["Sankaran Maninka"] = "msc",
["Sansi"] = "ssi",
["Santa Catarina Albarradas Zapotec"] = "ztn",
["Santa Inés Ahuatempan Popoloca"] = "pca",
["Santa Inés Yatzechi Zapotec"] = "zpn",
["Santa Lucía Monteverde Mixtec"] = "mdv",
["Santa María La Alta Nahuatl"] = "nhz",
["Santa María Quiegolani Zapotec"] = "zpi",
["Santa María Zacatepec Mixtec"] = "mza",
["Santa Teresa Cora"] = "cok",
["Santiago Xanica Zapotec"] = "zpr",
["Santo Domingo Albarradas Zapotec"] = "zas",
["Sanumá"] = "xsu",
["Sanxiang Min"] = "nan-zsh",
["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",
["ซารามักกา"] = "srm",
["Sarangani Blaan"] = "bps",
["Sarangani Manobo"] = "mbs",
["Sarasira"] = "zsa",
["Saraveca"] = "sar",
["Sarawak Malay"] = "poz-sml",
["Sarikoli"] = "srh",
["Sarli"] = "sdf",
["Sartang"] = "onp",
["Sarua"] = "swy",
["Sarudu"] = "sdu",
["Saruga"] = "sra",
["Sasak"] = "sas",
["Sasaru"] = "sxs",
["Satawalese"] = "stw",
["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",
["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",
["Seim"] = "sim",
["Seimat"] = "ssg",
["Seit-Kaitetu"] = "hik",
["Sekani"] = "sek",
["Sekapan"] = "skp",
["Sekar"] = "skz",
["Seke"] = "skj",
["Sekele"] = "vaj",
["Seki"] = "syi",
["Seko Padang"] = "skx",
["Seko Tengah"] = "sko",
["Sekpele"] = "lip",
["Selangor Sign Language"] = "kgi",
["Selaru"] = "slu",
["Selayar"] = "sly",
["Selee"] = "snw",
["Selepet"] = "spl",
["Selk'nam"] = "ona",
["Selonian"] = "sxl",
["Selungai Murut"] = "slg",
["Seluwasan"] = "sws",
["Sema"] = "nsm",
["Semandang"] = "sdm",
["Semaq Beri"] = "szc",
["Sembakung Murut"] = "sbr",
["Semelai"] = "sza",
["Semigallian"] = "xzm",
["Semimi"] = "etz",
["Semnam"] = "ssm",
["Semnani"] = "smy",
["Sempan"] = "xse",
["Sena"] = "seh",
["Senara Sénoufo"] = "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",
["Sepik Mari"] = "mbx",
["Sera"] = "sry",
["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",
["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",
["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",
["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",
["Shoo-Minda-Nye"] = "bcv",
["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",
["Siculo-Arabic"] = "sqr",
["Sidetic"] = "xsd",
["Sie"] = "erg",
["Sierra Leone Sign Language"] = "sgx",
["Sierra Negra Nahuatl"] = "nsu",
["Sierra de Juárez Zapotec"] = "zaa",
["Sighu"] = "sxe",
["Sihan"] = "snr",
["Sika"] = "ski",
["Sikaritai"] = "tty",
["Sikiana"] = "sik",
["Sikule"] = "skh",
["Sila"] = "slt",
["Silacayoapan Mixtec"] = "mks",
["Sileibi"] = "sbq",
["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",
["Sindhi Bhil"] = "sbn",
["Sindihui Mixtec"] = "xts",
["Singa"] = "sgm",
["Singapore Sign Language"] = "sls",
["Singpho"] = "sgp",
["Sinicahua Mixtec"] = "xti",
["Sininkere"] = "skq",
["Sinte Romani"] = "rmo",
["Sinyar"] = "sys",
["Sinúfana"] = "sai-sin",
["Sio"] = "xsi",
["Siona"] = "snn",
["Sipakapense"] = "qum",
["Sira"] = "swj",
["Siraya"] = "fos",
["Sirenik"] = "ysr",
["Siri"] = "sir",
["Siriano"] = "sri",
["Sirionó"] = "srq",
["Sirmauri"] = "srx",
["Siroi"] = "ssd",
["Sisaala"] = "sld",
["Sissano"] = "sso",
["Situ"] = "sit-sit",
["Siuslaw"] = "sis",
["Sivandi"] = "siy",
["Sivia Sign Language"] = "lsv",
["Siwai"] = "siw",
["Siwi"] = "siz",
["Siwu"] = "akp",
["Siyin Chin"] = "csy",
["Skagit"] = "ska",
["Skalvian"] = "svx",
["Ske"] = "ske",
["Skepi Creole Dutch"] = "skw",
["Skolt Sami"] = "sms",
["Skou"] = "skv",
["Slavomolisano"] = "svm",
["Slovakian Sign Language"] = "svk",
["Small Flowery Miao"] = "sfm",
["Smärky Kanum"] = "kxq",
["Snohomish"] = "sno",
["So'a"] = "ssq",
["Sobei"] = "sob",
["Sochiapam Chinantec"] = "cso",
["Soga"] = "xog",
["Sogdian"] = "sog",
["Sok"] = "skk",
["Sokna"] = "swn",
["Soko"] = "soc",
["Sokoro"] = "sok",
["Solano"] = "xso",
["Soli"] = "sby",
["Solombala English"] = "crp-slb",
["Solon"] = "tuw-sol",
["Solong"] = "aaw",
["Solos"] = "sol",
["Som"] = "smc",
["Somba-Siawari"] = "bmu",
["Somra"] = "ntx",
["Somrai"] = "sor",
["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",
["Sou"] = "sqq",
["South African Sign Language"] = "sfs",
["South Awyu"] = "aws",
["South Boma"] = "bnt-sbo",
["South Central Banda"] = "lnl",
["South Central Dinka"] = "dib",
["South Efate"] = "erk",
["South Fali"] = "fal",
["South Giziga"] = "giz",
["South Lembata"] = "lmf",
["South Marquesan"] = "mqm",
["South Muyu"] = "kts",
["South Nuaulu"] = "nxl",
["South Picene"] = "spx",
["South Slavey"] = "xsl",
["South Tairora"] = "omw",
["South Ucayali Ashéninka"] = "cpy",
["South Watut"] = "mcy",
["Southeast Ambrym"] = "tvk",
["Southeast Babar"] = "vbb",
["Southeast Ijo"] = "ijs",
["Southeast Pashayi"] = "psi",
["Southeast Tasmanian"] = "xpf",
["Southeastern Dinka"] = "dks",
["Southeastern Ixtlán Zapotec"] = "zpd",
["Southeastern Kolami"] = "nit",
["Southeastern Nochixtlán Mixtec"] = "mxy",
["Southeastern Pomo"] = "pom",
["Southeastern Puebla Nahuatl"] = "npl",
["Southeastern Tarahumara"] = "tcu",
["Southeastern Tepehuan"] = "stp",
["Southern Alta"] = "agy",
["Southern Bai"] = "bfs",
["Southern Birifor"] = "biv",
["Southern Bobo"] = "bwq",
["Southern Bontoc"] = "obk",
["Southern Carrier"] = "caf",
["Southern Catanduanes Bicolano"] = "bln",
["Southern Dagaare"] = "dga",
["Southern East Cree"] = "crj",
["Southern Ghale"] = "ghe",
["Southern Grebo"] = "grj",
["Southern Guiyang Hmong"] = "hmy",
["Southern Haida"] = "hax",
["Southern Hindko"] = "hnd",
["Southern Kalapuya"] = "sxk",
["Southern Kalinga"] = "ksc",
["Southern Khanty"] = "kca-sou",
["Southern Kissi"] = "kss",
["Southern Kiwai"] = "kjd",
["Southern Kurdish"] = "sdh",
["Southern Lolopo"] = "ysp",
["Southern Lorung"] = "lrr",
["Southern Luri"] = "luz",
["Southern Ma'di"] = "snm",
["Southern Mansi"] = "mns-sou",
["Southern Mashan Hmong"] = "hma",
["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 Pomo"] = "peq",
["Southern Puebla Mixtec"] = "mit",
["Southern Puget Sound Salish"] = "slh",
["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 Samo"] = "sbd",
["Southern Selkup"] = "sel-sou",
["Southern Sierra Miwok"] = "skd",
["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 Pashayi"] = "psh",
["Southwest Tanna"] = "nwi",
["Southwestern Bontoc"] = "vbk",
["Southwestern Dinka"] = "dik",
["Southwestern Fars"] = "fay",
["Southwestern Guiyang Hmong"] = "hmg",
["Southwestern Huishui Hmong"] = "hmh",
["Southwestern Nisu"] = "nsv",
["Southwestern Tamang"] = "tsf",
["Southwestern Tarahumara"] = "twr",
["Southwestern Tepehuan"] = "tla",
["Southwestern Tlaxiaco Mixtec"] = "meh",
["Sowa"] = "sww",
["Sowanda"] = "sow",
["Soyaltepec Mazatec"] = "vmp",
["Soyaltepec Mixtec"] = "vmq",
["Spanish Sign Language"] = "ssp",
["Spiti Bhoti"] = "spt",
["Spokane"] = "spo",
["Squamish"] = "squ",
["ซรานันโตโง"] = "srn",
["Sri Lankan Creole Malay"] = "sci",
["Sri Lankan Sign Language"] = "sqs",
["Stau"] = "ero-tau",
["Stod Bhoti"] = "sbu",
["Stoney"] = "sto",
["Suabo"] = "szp",
["Suarmin"] = "seo",
["Suau"] = "swp",
["Suba"] = "sxb",
["Suba-Simbiti"] = "ssc",
["Subi"] = "xsj",
["Subiya"] = "sbs",
["Subtiaba"] = "sut",
["Sudest"] = "tgo",
["Suena"] = "sue",
["Suga"] = "sgi",
["Suganga"] = "sug",
["Sugut Dusun"] = "kzs",
["Suki"] = "sui",
["Suku"] = "sub",
["Sukuma"] = "suk",
["Sukur"] = "syk",
["Sukurum"] = "zsu",
["Sula"] = "szn",
["Sulka"] = "sua",
["Sulod"] = "srg",
["Suma"] = "sqm",
["Sumariup"] = "siv",
["Sumau"] = "six",
["Sumbawa"] = "smw",
["Sumbwa"] = "suw",
["Sumtu Chin"] = "csv",
["Sunam"] = "ssk",
["Sungwadaga"] = "mwo",
["Sungwadia"] = "mrb",
["Sunum"] = "ymn",
["Sunwar"] = "suz",
["Suoy"] = "syo",
["Supyire"] = "spp",
["Sur"] = "tdl",
["Surbakhal"] = "sbj",
["Suri"] = "suq",
["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",
["Swampy Cree"] = "csw",
["สวาซี"] = "ss",
["Swedish Sign Language"] = "swl",
["Swiss-French Sign Language"] = "ssr",
["Swiss-German Sign Language"] = "sgg",
["Swiss-Italian Sign Language"] = "slf",
["Swo"] = "sox",
["Syenara Senoufo"] = "shz",
["Sácata"] = "sai-sac",
["São Paulo Kaingáng"] = "zkp",
["Sãotomense"] = "cri",
["Sìcìté Sénoufo"] = "sep",
["Sîshëë"] = "sih",
["Sô"] = "sss",
["T'en"] = "tct",
["Taabwa"] = "tap",
["Taba"] = "mky",
["Tabaa Zapotec"] = "zat",
["Tabancale"] = "sai-tab",
["Tabaru"] = "tby",
["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",
["Tagal Murut"] = "mvv",
["Tagbu"] = "tbm",
["Tagdal"] = "tda",
["Tagish"] = "tgx",
["Tagoi"] = "tag",
["Tagwana Senoufo"] = "tgw",
["Tahltan"] = "tht",
["Tai"] = "taw",
["Tai Hang Tong"] = "thc",
["Tai Hongjin"] = "tiz",
["Tai Loi"] = "tlq",
["Tai Long"] = "thi",
["Tai Pao"] = "tpo",
["Tai Thanh"] = "tmm",
["Tai Ya"] = "cuu",
["Taiap"] = "gpn",
["Taikat"] = "aos",
["Taimyr Pidgin Russian"] = "crp-tpr",
["Tainae"] = "ago",
["Tairuma"] = "uar",
["Taita"] = "dav",
["Taivoan"] = "tvx",
["Taiwan Sign Language"] = "tss",
["Taje"] = "pee",
["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",
["Tambunan Dusun"] = "kzt",
["Tami"] = "tmy",
["Tamki"] = "tax",
["Tamnim Citak"] = "tml",
["Tampias Lobu"] = "low",
["Tampuan"] = "tpu",
["Tampulma"] = "tpm",
["Tanacross"] = "tcb",
["Tanahmerah"] = "tcm",
["Tanapag"] = "tpv",
["Tanchangya"] = "tnv",
["Tandia"] = "tni",
["Tanema"] = "tnx",
["Tangale"] = "tan",
["Tanggu"] = "tgu",
["Tangkhul Naga"] = "nmf",
["Tangko"] = "tkx",
["Tangoa"] = "tgp",
["Tangsa"] = "nst",
["Tanguat"] = "tbs",
["Tangwang"] = "mis-tnw",
["Tanimbili"] = "tbe",
["Tanimuca-Retuarã"] = "tnc",
["Tanjijili"] = "uji",
["Tanudan Kalinga"] = "kml",
["Tanzanian Sign Language"] = "tza",
["Tapachultec"] = "nai-tap",
["Taparita"] = "sai-tpr",
["Tapayuna"] = "sai-tap",
["Tapeba"] = "tbb",
["Tapei"] = "afp",
["Tapieté"] = "tpj",
["Tapirapé"] = "taf",
["Tar Gula"] = "kcm",
["Tara Baka"] = "bdh",
["Tarairiú"] = "sai-trr",
["Tarantino"] = "roa-tar",
["Tarao"] = "tro",
["Taraon"] = "mhu",
["Tareng"] = "tgr",
["Tariana"] = "tae",
["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",
["Tataviam"] = "azc-tat",
["Tatuyo"] = "tav",
["Tauade"] = "ttd",
["Taulil"] = "tuh",
["Taungyo"] = "tco",
["Taupota"] = "tpa",
["Tause"] = "tad",
["Taushiro"] = "trr",
["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",
["Tayabas Ayta"] = "ayy",
["Taymanitic"] = "sem-tay",
["Tayo"] = "cks",
["Tchitchege"] = "tck",
["Tchumbuli"] = "bqa",
["Te'un"] = "tve",
["Teanu"] = "tkw",
["Tebul Sign Language"] = "tsy",
["Tebul Ure Dogon"] = "dtu",
["Tecpatlán Totonac"] = "tcw",
["Tedaga"] = "tuq",
["Tedim Chin"] = "ctd",
["Tee"] = "tkq",
["Tefaro"] = "tfo",
["Tegali"] = "ras",
["Tehit"] = "kps",
["Tehuelche"] = "teh",
["Teiwa"] = "twe",
["Tejalapan Zapotec"] = "ztt",
["Teke-Fuumu"] = "ifm",
["Teke-Kukuya"] = "kkw",
["Teke-Laali"] = "lli",
["Teke-Tege"] = "teg",
["Teke-Tsaayi"] = "tyi",
["Teke-Tyee"] = "tyx",
["Tektiteko"] = "ttc",
["Tela-Masbuar"] = "tvm",
["Telefol"] = "tlf",
["Teluti"] = "tlt",
["Tem"] = "kdh",
["Temascaltepec Nahuatl"] = "nhv",
["Tembé"] = "tqb",
["Teme"] = "tdo",
["Temein"] = "teq",
["Temi"] = "soz",
["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",
["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",
["Tereno"] = "ter",
["Teressa"] = "tef",
["Tereweng"] = "twg",
["Teribe"] = "tfr",
["Terik"] = "tec",
["Termanu"] = "twu",
["Ternateño"] = "tmg",
["Tese"] = "keg",
["Teshenawa"] = "twc",
["Tetela"] = "tll",
["Tetelcingo Nahuatl"] = "nhg",
["Tetete"] = "teb",
["Tetserret"] = "tez",
["Tetun Dili"] = "tdt",
["Teushen"] = "sai-teu",
["Teutila Cuicatec"] = "cut",
["Tewa"] = "tew",
["Texcatepec Otomi"] = "otx",
["Texistepec Popoluca"] = "poq",
["Texmelucan Zapotec"] = "zpz",
["Tezoatlán Mixtec"] = "mxb",
["Tha"] = "thy",
["Thachanadan"] = "thn",
["Thado Chin"] = "tcz",
["Thaiphum Chin"] = "cth",
["Thakali"] = "ths",
["Thamudic"] = "sem-tha",
["Thangal Naga"] = "nki",
["Thangmi"] = "thf",
["Thao"] = "ssf",
["Tharaka"] = "thk",
["Tharrgari"] = "dhr",
["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 Sign Language"] = "lsn",
["Ticuna"] = "tca",
["Tidaá Mixtec"] = "mtx",
["Tiemacèwè Bozo"] = "boo",
["Tiene"] = "tii",
["Tifal"] = "tif",
["Tigak"] = "tgc",
["Tigon Mbembe"] = "nza",
["Tii"] = "txq",
["Tijaltepec Mixtec"] = "xtl",
["Tikar"] = "tik",
["Tikopia"] = "tkp",
["Tilapa Otomi"] = "otl",
["Tillamook"] = "til",
["Tilquiapan Zapotec"] = "zts",
["Tilung"] = "tij",
["Tima"] = "tms",
["Timbe"] = "tim",
["Timor Pidgin"] = "tvy",
["Timote"] = "sai-tim",
["Timucua"] = "tjm",
["Timugon Murut"] = "tih",
["Tinani"] = "lbf",
["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",
["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",
["Tocho"] = "taz",
["Todrah"] = "tdr",
["Tofanma"] = "tlg",
["Tofin Gbe"] = "tfi",
["Togbo-Vara Banda"] = "tor",
["Togoyo"] = "tgy",
["Tojolabal"] = "toj",
["Toka-Leya"] = "dov",
["Tokano"] = "zuh",
["Tokelauan"] = "tkl",
["Toki Pona"] = "tok",
["Tol"] = "jic",
["Tolai"] = "ksd",
["Tolaki"] = "lbw",
["Tolomako"] = "tlm",
["Tolowa"] = "tol",
["Toloza"] = "ytl",
["Toma"] = "tod",
["Tomadino"] = "tdi",
["Tombelala"] = "ttp",
["Tombonuo"] = "txa",
["Tombulu"] = "tom",
["Tomini"] = "txm",
["Tommeginne"] = "xpv",
["Tommo So"] = "dto",
["Tomo Kan Dogon"] = "dtm",
["Tomoip"] = "tqp",
["Tondano"] = "tdn",
["Tonga (Malawi)"] = "tog",
["Tonga (Mozambique)"] = "toh",
["Tonga (Zambia)"] = "toi",
["Tongwe"] = "tny",
["Tonjon"] = "tjn",
["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",
["ครีโอลช่องแคบทอร์เรส"] = "tcs",
["Torricelli"] = "tei",
["Torricelli Yau"] = "yyu",
["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",
["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",
["Tsucuba"] = "cbq",
["Tsum"] = "ttz",
["Tsuut'ina"] = "srs",
["Tsuvadi"] = "tvd",
["Tsuvan"] = "tsh",
["Tswa"] = "tsc",
["Tswapong"] = "two",
["Tuamotuan"] = "pmt",
["Tuareg"] = "tmh",
["Tubar"] = "tbu",
["Tucano"] = "tuo",
["Tugen"] = "tuy",
["Tugun"] = "tzn",
["Tugutil"] = "tuj",
["Tukang Besi North"] = "khc",
["Tukang Besi South"] = "bhq",
["Tuki"] = "bag",
["Tukpa"] = "tpq",
["Tukudede"] = "tkd",
["Tukumanféd"] = "tkf",
["Tula"] = "tul",
["Tule-Kaweah Yokuts"] = "yok-tky",
["Tulehu"] = "tlu",
["Tulishi"] = "tey",
["Tulu-Bohuai"] = "rak",
["Tulua"] = "aus-tul",
["Tuma-Irumu"] = "iou",
["Tumak"] = "tmc",
["Tumbuka"] = "tum",
["Tumi"] = "kku",
["Tumleo"] = "tmq",
["Tumtum"] = "tbr",
["Tumulung Sisaala"] = "sil",
["Tundra Enets"] = "enh",
["Tundra Nenets"] = "yrk-tun",
["Tunen"] = "tvu",
["Tungag"] = "lcm",
["Tunggare"] = "trt",
["Tunia"] = "tug",
["Tunica"] = "tun",
["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 Sign Language"] = "tsm",
["Turks and Caicos Creole English"] = "tch",
["Turoyo"] = "tru",
["Turumsa"] = "tqm",
["Tuscarora"] = "tus",
["Tutelo"] = "tta",
["Tutong"] = "ttg",
["Tutsa Naga"] = "tvt",
["Tutuba"] = "tmi",
["Tututepec Mixtec"] = "mtu",
["Tututni"] = "tuu",
["Tuwali Ifugao"] = "ifk",
["Tuwari"] = "tww",
["Tuwuli"] = "bov",
["Tuxináwa"] = "tux",
["Tuxá"] = "tud",
["Tuyuca"] = "tue",
["Tuyuhun"] = "mis-tuh",
["Twana"] = "twa",
["Twendi"] = "twn",
["Tyap"] = "kcg",
["Tyaraity"] = "woa",
["Tyerrernotepanner"] = "xph",
["Tz'utujil"] = "tzj",
["Tzeltal"] = "tzh",
["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",
["Udihe"] = "ude",
["Uduk"] = "udu",
["Ufim"] = "ufi",
["Ugandan Sign Language"] = "ugn",
["Ughele"] = "uge",
["Uhami"] = "uha",
["Uisai"] = "uis",
["Ujir"] = "udj",
["Ukaan"] = "kcf",
["Ukhwejo"] = "ukh",
["Ukit"] = "umi",
["Ukpe-Bayobiri"] = "ukp",
["Ukpet-Ehom"] = "akd",
["Ukrainian Sign Language"] = "ukl",
["Ukue"] = "uku",
["Ukuriguma"] = "ukg",
["Ukwa"] = "ukq",
["Ukwuani-Aboh-Ndoni"] = "ukw",
["Ulau-Suain"] = "svb",
["Ulch"] = "ulc",
["Uldeme"] = "udl",
["Ulithian"] = "uli",
["Ullatan"] = "ull",
["Ulumanda'"] = "ulm",
["Ulwa"] = "ulw",
["Uma"] = "ppk",
["Uma' Lasan"] = "xky",
["Uma' Lung"] = "ulu",
["Umanakaina"] = "gdn",
["Umatilla"] = "uma",
["Umbindhamu"] = "umd",
["Umbu-Ungu"] = "ubu",
["Umbugarla"] = "umr",
["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",
["Unua"] = "onu",
["Unubahe"] = "unu",
["Uokha"] = "uok",
["Upper Chehalis"] = "cjh",
["Upper Grand Valley Dani"] = "dna",
["Upper Kuskokwim"] = "kuu",
["Upper Necaxa Totonac"] = "tku",
["Upper Ta'oih"] = "tth",
["Upper Tanana"] = "tau",
["Upper Taromi"] = "tov",
["Upper Umpqua"] = "xup",
["Ura (New Guinea)"] = "uro",
["Ura (Vanuatu)"] = "uur",
["Uradhi"] = "urf",
["Urali"] = "url",
["Urapmin"] = "urm",
["Urarina"] = "ura",
["Urartian"] = "xur",
["Urat"] = "urt",
["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",
["Uzekwe"] = "eze",
["Vaagri Booli"] = "vaa",
["Vaghri"] = "vgr",
["Vaghua"] = "tva",
["Vagla"] = "vag",
["Vaiphei"] = "vap",
["Vale"] = "vae",
["Valencian Sign Language"] = "vsv",
["Valle Nacional Chinantec"] = "cvn",
["Valley Maidu"] = "vmv",
["Valman"] = "van",
["Valpei"] = "vlp",
["Vamale"] = "mkt",
["Vame"] = "mlr",
["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",
["Venetic"] = "xve",
["Venezuelan Sign Language"] = "vsl",
["Ventureño"] = "veo",
["Vera'a"] = "vra",
["Vestinian"] = "xvs",
["Vidunda"] = "vid",
["Viemo"] = "vig",
["Vilela"] = "vil",
["Vili"] = "vif",
["Villa Viciosa Agta"] = "dyg",
["Vincentian Creole English"] = "svc",
["Virgin Islands Creole"] = "vic",
["Vishavan"] = "vis",
["Viti"] = "vit",
["Vitou"] = "vto",
["Viya"] = "gev",
["Vlax Romani"] = "rmy",
["Volscian"] = "xvo",
["Vono"] = "kch",
["Voro"] = "vor",
["Vumbu"] = "vum",
["Vunapu"] = "vnp",
["Vunjo"] = "vun",
["Vurës"] = "msn",
["Vute"] = "vut",
["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",
["Walmajarri"] = "wmt",
["Wam"] = "wmo",
["Wamas"] = "wmc",
["Wambaya"] = "wmb",
["Wambon"] = "wms",
["Wambule"] = "wme",
["Wamey"] = "cou",
["Wamin"] = "wmi",
["Wampar"] = "lbq",
["Wampur"] = "waz",
["Wan"] = "wan",
["Wanambre"] = "wnb",
["Wanap"] = "wnp",
["Wancho"] = "nnp",
["Wanda"] = "wbh",
["Wandala"] = "mfi",
["Wandamen"] = "wad",
["Wandarang"] = "wnd",
["Wandji"] = "wdd",
["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",
["Warapu"] = "wra",
["Waray Sorsogon"] = "srv",
["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",
["วาตีวา"] = "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 Romani"] = "rmw",
["Wemale"] = "weo",
["Wemba-Wemba"] = "xww",
["Weme Gbe"] = "wem",
["Wendat"] = "wdt",
["Weri"] = "wer",
["Wersing"] = "kvw",
["West Albay Bikol"] = "fbl",
["West Ambae"] = "nnd",
["West Central Banda"] = "bbp",
["West Damar"] = "drn",
["West Flemish"] = "vls",
["West Greenlandic Pidgin"] = "crp-gep",
["West Lembata"] = "lmj",
["West Makian"] = "mqs",
["West Masela"] = "mss",
["West Tarangan"] = "txn",
["West Uvean"] = "uve",
["West-Central Limba"] = "lia",
["Western Arrernte"] = "are",
["Western Bolivian Guarani"] = "gnw",
["Western Bukidnon Manobo"] = "mbb",
["Western Dani"] = "dnw",
["Western Durango Nahuatl"] = "azn",
["Western Fijian"] = "wyy",
["Western Gurung"] = "gvr",
["Western Highland Chatino"] = "ctp",
["Western Huasteca Nahuatl"] = "nhw",
["Western Jicaque"] = "nai-wji",
["Western Juxtlahuaca Mixtec"] = "jmx",
["Western Karaboro"] = "kza",
["Western Keres"] = "kjq",
["Western Krahn"] = "krw",
["Western Lalu"] = "ywl",
["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 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 Lachi"] = "lwh",
["Whitesands"] = "tnp",
["Wiarumus"] = "tua",
["Wichita"] = "wic",
["Wichí Lhamtés Güisnay"] = "mzh",
["Wichí Lhamtés Nocten"] = "mtp",
["Wichí Lhamtés Vejoz"] = "wlv",
["Wik-Epa"] = "wie",
["Wik-Iiyanh"] = "wij",
["Wik-Keyangan"] = "wif",
["Wik-Me'anha"] = "wih",
["Wik-Mungkan"] = "wim",
["Wik-Ngathana"] = "wig",
["Wikalkan"] = "wik",
["Wikngenchera"] = "wua",
["Wilawila"] = "wil",
["Wintu"] = "wnw",
["Winyé"] = "kst",
["Wipi"] = "gdr",
["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",
["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",
["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",
["Xianbei"] = "mis-xbi",
["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âgurè"] = "axx",
["Yaa"] = "iyx",
["Yaaku"] = "muu",
["Yabarana"] = "yar",
["Yabaâna"] = "ybn",
["Yaben"] = "ybm",
["Yabong"] = "ybo",
["Yabula Yabula"] = "yxy",
["Yace"] = "ekr",
["Yafi"] = "wfg",
["Yagara"] = "yxg",
["Yagaria"] = "ygr",
["Yaghnobi"] = "yai",
["Yagomi"] = "ygm",
["Yagua"] = "yad",
["Yagwoia"] = "ygw",
["Yahadian"] = "ner",
["Yahang"] = "rhp",
["Yahuna"] = "ynu",
["Yaka"] = "yaf",
["Yakaikeke"] = "ykk",
["Yakima"] = "yak",
["Yakkha"] = "ybh",
["Yakoma"] = "yky",
["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",
["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"] = "yao",
["Yao (South America)"] = "sai-yao",
["Yaosakor Asmat"] = "asy",
["Yaouré"] = "yre",
["Yapese"] = "yap",
["Yapunda"] = "yev",
["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",
["Yaul"] = "yla",
["Yaur"] = "jau",
["Yautepec Zapotec"] = "zpb",
["Yavitero"] = "yvt",
["Yawa"] = "yva",
["Yawalapití"] = "yaw",
["Yawanawa"] = "ywn",
["Yawarawarga"] = "yww",
["Yaweyuha"] = "yby",
["Yawijibaya"] = "jbw",
["Yawiyo"] = "ybx",
["Yawuru"] = "ywr",
["Yaygir"] = "xya",
["Yazghulami"] = "yah",
["Ye'kwana"] = "mch",
["Yei"] = "jei",
["Yekhee"] = "ets",
["Yekora"] = "ykr",
["Yele"] = "yle",
["Yelmek"] = "jel",
["Yelogu"] = "ylg",
["Yemaek"] = "hmk",
["Yemba"] = "ybb",
["Yemsa"] = "jnj",
["Yendang"] = "yen",
["Yeni"] = "yei",
["Yenish"] = "yec",
["Yerakai"] = "yra",
["Yeretuar"] = "gop",
["Yerong"] = "yrn",
["Yerukula"] = "yeu",
["Yeskwa"] = "yes",
["Yessan-Mayo"] = "yss",
["Yetfa"] = "yet",
["Yevanic"] = "yej",
["Yeyi"] = "yey",
["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",
["Yoidik"] = "ydk",
["Yoke"] = "yki",
["Yolmo"] = "scp",
["Yolngu Sign Language"] = "ygs",
["Yoloxochitl Mixtec"] = "xty",
["Yom"] = "pil",
["Yombe"] = "yom",
["Yongkom"] = "yon",
["Yopno"] = "yut",
["Yora"] = "mts",
["Yorta Yorta"] = "xyy",
["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",
["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",
["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",
["Zangwal"] = "zah",
["Zaniza Zapotec"] = "zpw",
["Zapotec"] = "zap",
["Zaramo"] = "zaj",
["Zari"] = "zaz",
["Zarma"] = "dje",
["Zauzou"] = "zal",
["Zay"] = "zwa",
["Zayein Karen"] = "kxk",
["Zayse-Zergulla"] = "zay",
["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",
["Zhár"] = "jjr",
["Zia"] = "zia",
["Zialo"] = "zil",
["Zigula"] = "ziw",
["Zimakani"] = "zik",
["Zimba"] = "zmb",
["Zimbabwe Sign Language"] = "zib",
["Zinza"] = "zin",
["Zirenkel"] = "zrn",
["Ziriya"] = "zir",
["Zizilivakan"] = "ziz",
["Zo'é"] = "pto",
["Zokhuo"] = "yzk",
["Zoogocho Zapotec"] = "zpq",
["Zotung Chin"] = "czt",
["Zou"] = "zom",
["Zulgo-Gemzek"] = "gnd",
["Zumaya"] = "zuy",
["Zumbun"] = "jmb",
["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",
["กงกัณ"] = "kok",
["กบาลัน"] = "ckv",
["กรีก"] = "el",
["กรีกแบบไมซีนี"] = "gmy",
["กรีกโบราณ"] = "grc",
["กรีนแลนด์"] = "kl",
["กวางตุ้ง"] = "yue",
["กอกบอรอก"] = "trp",
["กอท"] = "got",
["กอทแบบไครเมีย"] = "gme-cgo",
["กอล"] = "cel-gau",
["กะดู"] = "zkd",
["กะตูตะวันตก"] = "kuf",
["กะตูตะวันออก"] = "ktv",
["กะยัน"] = "pdu",
["กะยาตะวันตก"] = "kyu",
["กะยาตะวันออก"] = "eky",
["กะเหรี่ยงดั้งเดิม"] = "kar-pro",
["กะเหรี่ยงปะโอ"] = "blk",
["กะเหรี่ยงสะกอ"] = "ksw",
["กะเหรี่ยงโปตะวันตก"] = "pwo",
["กะเหรี่ยงโปตะวันออก"] = "kjp",
["กะเหรี่ยงโปเหนือ"] = "pww",
["กะเหรี่ยงโปแพร่"] = "kjt",
["กะไบล์"] = "kab",
["กัจฉ์"] = "kfr",
["กันกานาอือ"] = "kne",
["กันกานาอือเหนือ"] = "xnn",
["กันนฑะ"] = "kn",
["กัมเบอรา"] = "xbr",
["กัวรานีคลาสสิก"] = "gn-cls",
["กัวรานีแบบปารากวัย"] = "gug",
["กั้น"] = "gan",
["กากาอุซ"] = "gag",
["กาดาซันชายฝั่ง"] = "kzj",
["กาตาลา"] = "ca",
["กาตาลาเก่า"] = "roa-oca",
["กานูรี"] = "kr",
["กาปัมปางัน"] = "pam",
["กามรูป"] = "inc-kam",
["การากัลปัก"] = "kaa",
["กาลากัน"] = "kqe",
["กาลากันแบบกากัน"] = "kll",
["กาลากันแบบตากาเกาลู"] = "klg",
["กาลิเซีย"] = "gl",
["กาลิเซีย-โปรตุเกสเก่า"] = "roa-opt",
["กาเรา"] = "kyj",
["กาโม"] = "gmv",
["กาโร"] = "grt",
["กิลเบิร์ต"] = "gil",
["กีนาบาตางันตอนบน"] = "dmg",
["กืออึซ"] = "gez",
["กุรุข"] = "kru",
["กูนียันดี"] = "gni",
["กูย"] = "kdt",
["กูร์ดั้งเดิม"] = "nic-gur-pro",
["กฺ๋อง"] = "ugo",
["กเบดั้งเดิม"] = "alv-gbe-pro",
["ขมุ"] = "kjg",
["ขมุอิกดั้งเดิม"] = "mkh-khm-pro",
["ขร้า-ไทดั้งเดิม"] = "qfa-tak-pro",
["ขร้าดั้งเดิม"] = "qfa-kra-pro",
["ครี"] = "cr",
["ครีโอลกาบูเวร์ดี"] = "kea",
["ครีโอลกินี-บิสเซา"] = "pov",
["ครีโอลจาเมกา"] = "jam",
["ครีโอลมอริเชียส"] = "mfe",
["ครีโอลมาเก๊า"] = "mzs",
["ครีโอลลุยเซียนา"] = "lou",
["ครีโอลเฮติ"] = "ht",
["คองโก"] = "kg",
["คอปติก"] = "cop",
["คอร์ซิกา"] = "co",
["คอร์นวอลล์"] = "kw",
["คอร์นวอลล์เก่า"] = "oco",
["คอเคเซียนตะวันตกเฉียงเหนือดั้งเดิม"] = "cau-nwc-pro",
["คอเคเซียนตะวันออกเฉียงเหนือดั้งเดิม"] = "cau-nec-pro",
["คังรังชือ"] = "ane",
["คัลมึค"] = "xal",
["คาคัส"] = "kjh",
["คาชุบ"] = "csb",
["คาซัค"] = "kk",
["คาซี"] = "kha",
["คานธาระ"] = "pgd",
["คาบาร์เดีย"] = "kbd",
["คาร์ทเวเลียนดั้งเดิม"] = "ccs-pro",
["คาร์นิโคบาร์"] = "caq",
["คาลาเมียนดั้งเดิม"] = "phi-kal-pro",
["คาเซียนดั้งเดิม"] = "aav-khs-pro",
["คาเรเลีย"] = "krl",
["คำตี้"] = "kht",
["คำเมือง"] = "nod",
["คีตัน"] = "zkt",
["คีร์กีซ"] = "ky",
["คุชราต"] = "gu",
["คุชราตกลาง"] = "inc-mgu",
["คุชราตเก่า"] = "inc-ogu",
["คูนิงามิ"] = "xug",
["คูมาน"] = "qwm",
["คูมุก"] = "kum",
["งูนีดั้งเดิม"] = "bnt-ngu-pro",
["จอร์เจีย"] = "ka",
["จอร์เจียน-แซนดั้งเดิม"] = "ccs-gzn-pro",
["จอร์เจียเก่า"] = "oge",
["จักมา"] = "ccp",
["จามตะวันตก"] = "cja",
["จามตะวันออก"] = "cjm",
["จามิกดั้งเดิม"] = "cmc-pro",
["จิ่งเผาะ"] = "kac",
["จิ้น"] = "cjy",
["จีน"] = "zh",
["จีนกลาง"] = "cmn",
["จีนยุคกลาง"] = "ltc",
["จีนวรรณกรรม"] = "lzh",
["จีนเก่า"] = "och",
["จุน"] = "cuq",
["จูร์เชน"] = "juc",
["จ้วง"] = "za",
["จ้วงแบบจั่วเจียง"] = "zzj",
["จ้วงแบบหนง"] = "zhn",
["ชวา"] = "jv",
["ชวาเก่า"] = "kaw",
["ชวาแบบนิวแคลิโดเนีย"] = "jas",
["ชวาแบบแคริบเบียน"] = "jvn",
["ชอง"] = "cog",
["ชากาทาย"] = "chg",
["ชาดิกดั้งเดิม"] = "cdc-pro",
["ชาดิกตอนกลางดั้งเดิม"] = "cdc-cbm-pro",
["ชาบากาโน"] = "cbk",
["ชามอร์โร"] = "ch",
["ชุกชี"] = "ckt",
["ชูวัช"] = "cv",
["ซอกดิกดั้งเดิม"] = "ira-sgc-pro",
["ซองคา"] = "dz",
["ซอร์เบียตอนบน"] = "hsb",
["ซอร์เบียตอนล่าง"] = "dsb",
["ซังโก"] = "sg",
["ซันสการ์"] = "zau",
["ซัมบัล"] = "xsb",
["ซัสซารี"] = "sdc",
["ซากีซายา"] = "szy",
["ซาคา"] = "sah",
["ซาซา"] = "zza",
["ซาปา"] = "tys",
["ซามัว"] = "sm",
["ซามาตอนกลาง"] = "sml",
["ซามาแบบปางูตารัน"] = "slm",
["ซามิกดั้งเดิม"] = "smi-pro",
["ซามีเหนือ"] = "se",
["ซามีแบบกิลดิน"] = "sjd",
["ซามีแบบปีเต"] = "sje",
["ซามีแบบลูเล"] = "smj",
["ซามีแบบอีนารี"] = "smn",
["ซามีใต้"] = "sma",
["ซาราวักเหนือดั้งเดิม"] = "poz-swa-pro",
["ซาร์ดิเนีย"] = "sc",
["ซาลาร์"] = "slr",
["ซาโฮ"] = "ssy",
["ซิซิลี"] = "scn",
["ซินดาริน"] = "sjn",
["ซีกายานา"] = "sky",
["ซีดามา"] = "sid",
["ซีโน-ทิเบตันดั้งเดิม"] = "sit-pro",
["ซุนดา"] = "su",
["ซูก"] = "tsg",
["ซูทู"] = "st",
["ซูทูเหนือ"] = "nso",
["ซูนี"] = "zun",
["ซูรีเกาโนน"] = "sgd",
["ซูลาเวซีใต้ดั้งเดิม"] = "poz-ssw-pro",
["ซูลู"] = "zu",
["ซูเมอร์"] = "sux",
["ซูโดเวีย"] = "xsv",
["ญัฮกุร"] = "cbn",
["ญี่ปุ่น"] = "ja",
["ญี่ปุ่นเก่า"] = "ojp",
["ญ้อ"] = "nyw",
["ดราวิเดียนดั้งเดิม"] = "dra-pro",
["ดราวิเดียนตอนกลางดั้งเดิม"] = "dra-cen-pro",
["ดราวิเดียนเหนือดั้งเดิม"] = "dra-nor-pro",
["ดราวิเดียนใต้ดั้งเดิม"] = "dra-sou-pro",
["ดราวิเดียนใต้ที่สองดั้งเดิม"] = "dra-sdt-pro",
["ดราวิเดียนใต้ที่หนึ่งดั้งเดิม"] = "dra-sdo-pro",
["ดัตช์"] = "nl",
["ดัตช์กลาง"] = "dum",
["ดัตช์เก่า"] = "odt",
["ดาโคตา"] = "dak",
["ดุงกาน"] = "dng",
["ดูซุนตอนกลาง"] = "dtp",
["ตงเซียง"] = "sce",
["ตองงา"] = "to",
["ตังกุต"] = "txg",
["ตันดากาโนน"] = "tgn",
["ตั่ย"] = "tyz",
["ตากาล็อก"] = "tl",
["ตางัม"] = "sit-tgm",
["ตาตาร์"] = "tt",
["ตาตาร์แบบไครเมีย"] = "crh",
["ตาอีโน"] = "tnq",
["ตาฮีตี"] = "ty",
["ตีรูไร"] = "tiy",
["ตีโดเร"] = "tvo",
["ตุมซุก"] = "xtq",
["ตุรกี"] = "tr",
["ตุรกีแบบออตโตมัน"] = "ota",
["ตุรกีแบบอานาโตเลียเก่า"] = "trk-oat",
["ตุรุง"] = "try",
["ตูปี-กัวรานีดั้งเดิม"] = "tup-gua-pro",
["ตูปีเก่า"] = "tpw",
["ตูลู"] = "tcy",
["ตูวา"] = "tyv",
["ตูวาลู"] = "tvl",
["ตูเปียนดั้งเดิม"] = "tup-pro",
["ตโบลี"] = "tbl",
["ต้งเหนือ"] = "doc",
["ต้งใต้"] = "kmc",
["ทมิฬ"] = "ta",
["ทมิฬเก่า"] = "oty",
["ตอกปีซิน"] = "tpi",
["ทะวืง"] = "thm",
["ทาจิก"] = "tg",
["ทาบาซารัน"] = "tab",
["ทิเบต"] = "bo",
["ทิเบตคลาสสิก"] = "xct",
["ทิเบตเก่า"] = "otb",
["ทือกรึญญา"] = "ti",
["ทือเกร"] = "tig",
["นอซู"] = "ii",
["นอร์มัน"] = "nrf",
["นอร์สดั้งเดิม"] = "gmq-pro",
["นอร์สเก่า"] = "non",
["นอร์เวย์"] = "no",
["นอร์เวย์กลาง"] = "gmq-mno",
["นอร์เวย์แบบนือนอสก์"] = "nn",
["นอร์เวย์แบบบุ๊กมอล"] = "nb",
["นัคดั้งเดิม"] = "cau-nkh-pro",
["นาวัตล์"] = "nah",
["นาวัตล์คลาสสิก"] = "nci",
["นาวัตล์ตอนกลาง"] = "nhn",
["นาวันดั้งเดิม"] = "azc-nah-pro",
["นาวาโฮ"] = "nv",
["นาอูรู"] = "na",
["นาโปลี"] = "nap",
["นิวเคลียร์พอลินีเชียนดั้งเดิม"] = "poz-pnp-pro",
["นิวเบียเก่า"] = "onw",
["นิโคบารีสดั้งเดิม"] = "aav-nic-pro",
["นิโคบาร์กลาง"] = "ncb",
["นีวเว"] = "niu",
["นุง"] = "nut",
["นูเบียนดั้งเดิม"] = "nub-pro",
["บราฮุอี"] = "brh",
["บริทอนิกดั้งเดิม"] = "cel-bry-pro",
["บรูตะวันตก"] = "brv",
["บรูตะวันออก"] = "bru",
["บลาการ์"] = "beu",
["บอลโต-สลาวิกดั้งเดิม"] = "ine-bsl-pro",
["บะห์นัร"] = "bdq",
["บัตส์"] = "bbl",
["บันจาร์"] = "bjn",
["บัมบารา"] = "bm",
["บัลติ"] = "bft",
["บัลแกเรีย"] = "bg",
["บาลี"] = "pi",
["บาวาเรีย"] = "bar",
["บาสก์"] = "eu",
["บาสก์ดั้งเดิม"] = "euq-pro",
["บาหลี"] = "ban",
["บาเจาแบบอินโดนีเซีย"] = "bdl",
["บาเจาแบบเวสต์โคสต์"] = "bdr",
["บาโลจ"] = "bal",
["บิสลามา"] = "bi",
["บีซู"] = "bzi",
["บีนูกิด"] = "bkd",
["บีโคลตอนกลาง"] = "bcl",
["บูกิส"] = "bug",
["บูร์บอแน-แบรีชง"] = "roa-bbn",
["บูร์ยัต"] = "bua",
["ปนัร"] = "pbv",
["ปนัร-คาซี-ลึงงัมดั้งเดิม"] = "aav-pkl-pro",
["ปยู"] = "pyx",
["ปรากฤต"] = "pra",
["ปรากฤตแบบอโศก"] = "inc-ash",
["ปะหล่องดั้งเดิม"] = "mkh-pal-pro",
["ปักษ์ใต้"] = "sou",
["ปังควาฬฺ"] = "pgg",
["ปัญจาบ"] = "pa",
["ปัญจาบเก่า"] = "inc-opa",
["ปาทาน"] = "ps",
["ปาทานดั้งเดิม"] = "ira-pat-pro",
["ปาลาวาโนตอนกลาง"] = "plc",
["ปาลาวาโนตะวันตกเฉียงใต้"] = "plv",
["ปาลาวาโนแบบบรูกส์พอยต์"] = "plw",
["ปาเปียเมนตู"] = "pap",
["ปาเลา"] = "pau",
["ปาโกะห์"] = "pac",
["ปีการ์"] = "pcd",
["ปีปิล"] = "ppl",
["ปีเยมอนเต"] = "pms",
["ปูกาปูกา"] = "pkp",
["ปู้อี"] = "pcc",
["ผิงเหนือ"] = "cnp",
["ผิงใต้"] = "csp",
["ผูเซียน"] = "cpx",
["ผู้น้อย"] = "pho",
["ผู้ไท"] = "pht",
["ฝรั่งเศส"] = "fr",
["ฝรั่งเศสกลาง"] = "frm",
["ฝรั่งเศสเก่า"] = "fro",
["พทคะ"] = "bfq",
["พม่า"] = "my",
["พม่าเก่า"] = "obr",
["พรัช"] = "bra",
["พวน"] = "phu",
["พอลินีเชียนดั้งเดิม"] = "poz-pol-pro",
["พอลินีเชียนตะวันออกดั้งเดิม"] = "poz-pep-pro",
["พิหาร"] = "bh",
["พ่าเก"] = "phk",
["ฟรียูลี"] = "fur",
["ฟรีเชียตะวันตก"] = "fy",
["ฟรีเชียเก่า"] = "ofs",
["ฟรีเชียเหนือ"] = "frr",
["ฟรีเชียแบบซาเทอร์ลันท์"] = "stq",
["ฟร็องโก-พรอว็องส์"] = "frp",
["ฟาลา"] = "fax",
["ฟาลิสกุส"] = "xfa",
["ฟินนิกดั้งเดิม"] = "urj-fin-pro",
["ฟินิเชีย"] = "phn",
["ฟินแลนด์"] = "fi",
["ฟิลิปปินส์ดั้งเดิม"] = "phi-pro",
["ฟีจี"] = "fj",
["ฟูลา"] = "ff",
["มคหะ"] = "mag",
["มงตาแญ"] = "moe",
["มณีปุระ"] = "mni",
["มณีปุระเก่า"] = "omp",
["มนองตอนกลาง"] = "cmo",
["มนองใต้"] = "mnn",
["มราฐี"] = "mr",
["มราฐีเก่า"] = "omr",
["มลยาฬัม"] = "ml",
["มลายูตอนกลาง"] = "pse",
["มลายูแบบตรังกานู"] = "poz-ter",
["มลายูแบบบรูไน"] = "kxd",
["มลายูแบบปัตตานี"] = "mfa",
["มลายูแบบเกอดะฮ์"] = "meo",
["มวานี"] = "wmw",
["มอกชา"] = "mdf",
["มองโกลิกดั้งเดิม"] = "xgn-pro",
["มองโกเลีย"] = "mn",
["มองโกเลียกลาง"] = "xng",
["มองโกเลียคลาสสิก"] = "cmg",
["มอญ"] = "mnw",
["มอญ-เขมรดั้งเดิม"] = "mkh-pro",
["มอญกลาง"] = "mkh-mmn",
["มอญดั้งเดิม"] = "mkh-mnc-pro",
["มอญเก่า"] = "omx",
["มอญแบบไทย"] = "mnw-tha",
["มอลตา"] = "mt",
["มอแซนแดรอน"] = "mzn",
["มัล"] = "mlf",
["มัลดีฟส์"] = "dv",
["มัสบาเต"] = "msb",
["มากัซซาร์"] = "mak",
["มากินดาเนา"] = "mdh",
["มาซิโดเนีย"] = "mk",
["มายันดั้งเดิม"] = "myn-pro",
["มาราเนา"] = "mrw",
["มาร์วาร์"] = "mwr",
["มาร์แชลล์"] = "mh",
["มาลากาซี"] = "mg",
["มาลาโย-จามิกดั้งเดิม"] = "poz-mcm-pro",
["มาลาโย-ซุมบาวันดั้งเดิม"] = "poz-msa-pro",
["มาลาโย-พอลินีเชียนดั้งเดิม"] = "poz-pro",
["มาลาโย-พอลินีเชียนตอนกลาง-ตะวันออกดั้งเดิม"] = "poz-cet-pro",
["มาลาโย-พอลินีเชียนตะวันออกดั้งเดิม"] = "pqe-pro",
["มาวรี"] = "mi",
["มาเลย์อิกดั้งเดิม"] = "poz-mly-pro",
["มาเลเซีย"] = "ms",
["มาไซ"] = "mas",
["มิงเกรเลีย"] = "xmf",
["มิยาโกะ"] = "mvi",
["มีนังกาเบา"] = "min",
["มีรังดา"] = "mwl",
["มีโซ"] = "lus",
["มือรัสเซีย"] = "rsl",
["มืออินเดีย"] = "ins",
["มืออินโดนีเซีย"] = "inl",
["มืออเมริกัน"] = "ase",
["มือเนปาล"] = "nsp",
["มือไทย"] = "tsq",
["มุนดาดั้งเดิม"] = "mun-pro",
["มูซี"] = "mui",
["ม้ง-เมี่ยนดั้งเดิม"] = "hmx-pro",
["ม้งขาว"] = "mww",
["ม้งดั้งเดิม"] = "hmn-pro",
["ม้งเขียว"] = "hnj",
["ยอง"] = "yno",
["ยอลอ"] = "yol",
["ยะไข่"] = "rki",
["ยากัน"] = "yka",
["ยามานา"] = "yag",
["ยามี"] = "tao",
["ยาเอยามะ"] = "rys",
["ยิดดิช"] = "yi",
["ยุปปิก"] = "esu",
["ยูกริกดั้งเดิม"] = "urj-ugr-pro",
["ยูการิต"] = "uga",
["ยูราลิกดั้งเดิม"] = "urj-pro",
["ยูเครน"] = "uk",
["ยูโต-แอซเทกันดั้งเดิม"] = "azc-pro",
["รวันดา-รุนดี"] = "rw",
["รัสเซีย"] = "ru",
["ราชพังสี"] = "rjs",
["ราปานูอี"] = "rap",
["ราโรโตงา"] = "rar",
["ริฟ"] = "rif",
["รูซินแบบคาร์พาเทีย"] = "rue",
["รูซินแบบพันโนเนีย"] = "rsk",
["ร่วม"] = "mul",
["ลอมบาร์ด"] = "lmo",
["ละติน"] = "la",
["ลัก"] = "lbe",
["ลักเกีย"] = "lbc",
["ลักเซมเบิร์ก"] = "lb",
["ลัซ"] = "lzz",
["ลัตเกล"] = "ltg",
["ลัตเวีย"] = "lv",
["ลัมปุงกิกดั้งเดิม"] = "poz-lgx-pro",
["ลัมโบยา"] = "lmy",
["ลาดัก"] = "lbj",
["ลาดิน"] = "lld",
["ลาดิโน"] = "lad",
["ลาว"] = "lo",
["ลิงกาลา"] = "ln",
["ลิทัวเนีย"] = "lt",
["ลิทัวเนียเก่า"] = "olt",
["ลินดู"] = "klw",
["ลิมบู"] = "lif",
["ลิมเบิร์ก"] = "li",
["ลิววี"] = "olo",
["ลีกูเรีย"] = "lij",
["ลีสู่"] = "lis",
["ลีโวเนีย"] = "liv",
["ลึงงัม"] = "lyg",
["ลูกันดา"] = "lg",
["ลูอิชดั้งเดิม"] = "sit-luu-pro",
["วอลตา-คองโกดั้งเดิม"] = "nic-vco-pro",
["วอลตา-ไนเจอร์ดั้งเดิม"] = "alv-von-pro",
["วันดัล"] = "xvn",
["วัลลูน"] = "wa",
["วาราโอ"] = "wba",
["วาไร"] = "war",
["วินเนอเบโก"] = "win",
["วีลามอวิตแซ"] = "wym",
["สกอต"] = "sco",
["สมราย"] = "smu",
["สลาวอนิกคริสตจักรเก่า"] = "cu",
["สลาวิกดั้งเดิม"] = "sla-pro",
["สลาวิกตะวันออกเก่า"] = "orv",
["สวานา"] = "tn",
["สวาฮีลี"] = "sw",
["สวีเดน"] = "sv",
["สวีเดนเก่า"] = "gmq-osw",
["สะโอจ"] = "scq",
["สันถาลี"] = "sat",
["สันสกฤต"] = "sa",
["ซำเร"] = "sxm",
["สิกขิม"] = "sip",
["สิงหล"] = "si",
["สินธ์"] = "sd",
["สิเลฏ"] = "syl",
["สุ่ย"] = "swi",
["สเปน"] = "es",
["สเปนเก่า"] = "osp",
["สโลวัก"] = "sk",
["สโลวักเก่า"] = "zlw-osk",
["สโลวินช์"] = "zlw-slv",
["สโลวีเนีย"] = "sl",
["หง่วน"] = "nuo",
["หมะ"] = "cma",
["หมิ่นดั้งเดิม"] = "zhx-min-pro",
["หมิ่นตอนกลาง"] = "czo",
["หมิ่นตะวันออก"] = "cdo",
["หมิ่นเหนือ"] = "mnp",
["หมิ่นใต้"] = "nan",
["หล่อยแอว๋"] = "luh",
["ห่อยซัน"] = "zhx-tai",
["อวัธ"] = "awa",
["ออสซีเซีย"] = "os",
["ออสโตรนีเซียนดั้งเดิม"] = "map-pro",
["ออสโตรเอเชียติกดั้งเดิม"] = "aav-pro",
["ออโรโม"] = "om",
["อะดีเกยา"] = "ady",
["อะตง"] = "aot",
["อะวาร์"] = "av",
["อะวาร์เก่า"] = "oav",
["อะแพชีตะวันตก"] = "apw",
["อักลัน"] = "akl",
["อังกฤษ"] = "en",
["อังกฤษกลาง"] = "enm",
["อังกฤษเก่า"] = "ang",
["อับคาเซีย"] = "ab",
["อัมฮารา"] = "am",
["อัมโมน"] = "sem-amm",
["อัลไตเหนือ"] = "atv",
["อัลไตใต้"] = "alt",
["อัสตูเรียส"] = "ast",
["อัสสัม"] = "as",
["อัสสัมกลาง"] = "inc-mas",
["อัสสัมช่วงต้น"] = "inc-oas",
["อากูตายา"] = "agn",
["อาข่า"] = "ahk",
["อาคัน"] = "ak",
["อาซี"] = "bno",
["อานาโตเลียนดั้งเดิม"] = "ine-ana-pro",
["อาบาซา"] = "abq",
["อาฟรีกานส์"] = "af",
["อาฟาร์"] = "aa",
["อามามิโอชิมะเหนือ"] = "ryn",
["อามามิโอชิมะใต้"] = "ams",
["อารากอน"] = "an",
["อารามายา"] = "arc",
["อาร์มีเนีย"] = "hy",
["อาร์มีเนียกลาง"] = "axm",
["อาร์มีเนียนดั้งเดิม"] = "hyx-pro",
["อาร์มีเนียเก่า"] = "xcl",
["อาลูตีก"] = "ems",
["อาหม"] = "aho",
["อาหรับ"] = "ar",
["อาหรับแบบซูดาน"] = "apd",
["อาหรับแบบตูนิเซีย"] = "aeb",
["อาหรับแบบทาจิกิสถาน"] = "abh",
["อาหรับแบบบาห์เรน"] = "abv",
["อาหรับแบบลิเบีย"] = "ayl",
["อาหรับแบบลิแวนต์ใต้"] = "ajp",
["อาหรับแบบอันดะลุส"] = "xaa",
["อาหรับแบบอิรัก"] = "acm",
["อาหรับแบบอียิปต์"] = "arz",
["อาหรับแบบอุซเบกิสถาน"] = "auz",
["อาหรับแบบฮิญาซ"] = "acw",
["อาหรับแบบเมโสโปเตเมียเหนือ"] = "ayp",
["อาหรับแบบเยเมน"] = "ayn",
["อาหรับแบบแอลจีเรีย"] = "arq",
["อาหรับแบบโมร็อกโก"] = "ary",
["อาหรับแบบโอมาน"] = "acx",
["อาหรับแบบไซปรัส"] = "acy",
["อาเจะฮ์"] = "ace",
["อาเซอร์ไบจาน"] = "az",
["อาเนตยูม"] = "aty",
["อาเบ"] = "aba",
["อิกโบ"] = "ig",
["อิงกุช"] = "inh",
["อิงเกรีย"] = "izh",
["อิตาลิกดั้งเดิม"] = "itc-pro",
["อิตาลี"] = "it",
["อินุกติตุต"] = "iu",
["อินุอิตดั้งเดิม"] = "esx-inu-pro",
["อินเทร์ลิงเกว"] = "ie",
["อินเทอร์ลิงกวา"] = "ia",
["อินโด-ยูโรเปียนดั้งเดิม"] = "ine-pro",
["อินโด-อารยันดั้งเดิม"] = "inc-pro",
["อินโด-อิเรเนียนดั้งเดิม"] = "iir-pro",
["อินโดนีเซีย"] = "id",
["อิสเตรีย"] = "ist",
["อิเรเนียนดั้งเดิม"] = "ira-pro",
["อีดาอัน"] = "dbj",
["อีทรัสคัน"] = "ett",
["อีบัน"] = "iba",
["อียิปต์"] = "egy",
["อีรานุน"] = "ill",
["อีสาน"] = "tts",
["อีโด"] = "io",
["อีโลกาโน"] = "ilo",
["อุซเบก"] = "uz",
["อุดมูร์ต"] = "udm",
["อุตซิตา"] = "oc",
["อุตซิตาเก่า"] = "pro",
["อุนเซอร์ด็อยทช์"] = "uln",
["อุมเบรีย"] = "xum",
["อุยกูร์"] = "ug",
["อุยกูร์เก่า"] = "oui",
["อูดี"] = "udi",
["อูรดู"] = "ur",
["อูรักลาโวยจ"] = "urk",
["อู๋"] = "wuu",
["อเวสตะ"] = "ae",
["อ่ายตน"] = "aio",
["ฮกเกี้ยน"] = "nan-hbl",
["ฮังการี"] = "hu",
["ฮังการีเก่า"] = "ohu",
["ฮาชอง"] = "haj",
["ฮานูโนโอ"] = "hnn",
["ฮาวาย"] = "haw",
["ฮินดี"] = "hi",
["ฮินดีเก่า"] = "inc-ohi",
["ฮินดีแบบฟีจี"] = "hif",
["ฮินดูสตานีแบบแคริบเบียน"] = "hns",
["ฮีบรู"] = "he",
["ฮีรีโมตู"] = "ho",
["ฮีลีไกโนน"] = "hil",
["ฮุนสริก"] = "hrx",
["ฮูร์เรีย"] = "xhu",
["เกชวนดั้งเดิม"] = "qwe-pro",
["เกชัว"] = "qu",
["เกชัวคลาสสิก"] = "qwc",
["เกรตอันดามันนีสดั้งเดิม"] = "qfa-adm-pro",
["เกอฮอ"] = "kpm",
["เกาหลี"] = "ko",
["เกาหลีกลาง"] = "okm",
["เกาหลีดั้งเดิม"] = "qfa-kor-pro",
["เกาหลีเก่า"] = "oko",
["เกาหลีใหม่ช่วงต้น"] = "ko-ear",
["เกโกโย"] = "ki",
["เขมร"] = "km",
["เขมรกลาง"] = "xhm",
["เขมรดั้งเดิม"] = "mkh-kmr-pro",
["เขมรเก่า"] = "okz",
["เขมรเหนือ"] = "kxm",
["เขิน"] = "kkh",
["เคลติกดั้งเดิม"] = "cel-pro",
["เควนยา"] = "qya",
["เคอร์ดิชดั้งเดิม"] = "ku-pro",
["เคิร์ดตอนกลาง"] = "ckb",
["เคิร์ดเหนือ"] = "kmr",
["เจวา"] = "ny",
["เจอร์แมนิกดั้งเดิม"] = "gem-pro",
["เจอร์แมนิกตะวันตกดั้งเดิม"] = "gmw-pro",
["เจียเม่า"] = "jio",
["เฉ่าเหมียว"] = "cov",
["เชจู"] = "jje",
["เชเชน"] = "ce",
["เชเยนน์"] = "chy",
["เชโรกี"] = "chr",
["เช็ก"] = "cs",
["เช็กเก่า"] = "zlw-ocs",
["เซบัวโน"] = "ceb",
["เซมิติกดั้งเดิม"] = "sem-pro",
["เซมิติกตะวันตกดั้งเดิม"] = "sem-wes-pro",
["เซอร์โบ-โครเอเชีย"] = "sh",
["เซอไม"] = "sea",
["เซียง"] = "hsn",
["เดนมาร์ก"] = "da",
["เดนมาร์กเก่า"] = "gmq-oda",
["เดาโร"] = "dwr",
["เตตุน"] = "tet",
["เตลูกู"] = "te",
["เตอร์กิกดั้งเดิม"] = "trk-pro",
["เตอร์กิกเก่า"] = "otk",
["เตอร์นาเต"] = "tft",
["เตอเมียร์"] = "tea",
["เติร์กเมน"] = "tk",
["เทาส์"] = "twf",
["เนปาล"] = "ne",
["เนวาร์"] = "new",
["เนวาร์กลาง"] = "nwx",
["เนวาร์คลาสสิก"] = "nwc",
["เนเกอร์ฮอลันดส์"] = "dcr",
["เบ"] = "onb",
["เบ-ไทดั้งเดิม"] = "qfa-bet-pro",
["เบงกอล"] = "bn",
["เบงกอลกลาง"] = "inc-mbn",
["เบงกอลเก่า"] = "inc-obn",
["เบดั้งเดิม"] = "qfa-onb-pro",
["เบนูเอ-คองโกดั้งเดิม"] = "nic-bco-pro",
["เบรอตง"] = "br",
["เบรอตงกลาง"] = "xbm",
["เบรอตงเก่า"] = "obt",
["เบลารุส"] = "be",
["เบอตาวี"] = "bew",
["เบอราวัน"] = "lod",
["เบอร์เบอร์ดั้งเดิม"] = "ber-pro",
["เบอร์เบอร์แบบตูนีเซีย"] = "sds",
["เปอร์มิกดั้งเดิม"] = "urj-prm-pro",
["เปอร์เซีย"] = "fa",
["เปอร์เซียกลาง"] = "pal",
["เปอร์เซียเก่า"] = "peo",
["เพลาท์ดิทช์"] = "pdt",
["เมวาร์"] = "mtr",
["อิ้วเมี่ยน"] = "ium",
["เมี่ยนดั้งเดิม"] = "hmx-mie-pro",
["เยอรมัน"] = "de",
["เยอรมันตอนกลางตะวันออก"] = "gmw-ecg",
["เยอรมันต่ำ"] = "nds",
["เยอรมันต่ำกลาง"] = "gml",
["เยอรมันต่ำแบบเยอรมนี"] = "nds-de",
["เยอรมันสูงกลาง"] = "gmh",
["เยอรมันสูงเก่า"] = "goh",
["เยอรมันแบบซิพเซอร์"] = "gmw-zps",
["เยอรมันแบบว็อลกา"] = "gmw-vog",
["เยอรมันแบบอลามันเนีย"] = "gsw",
["เยอรมันแบบเพนซิลเวเนีย"] = "pdc",
["เรอหวั่ง"] = "raw",
["เลซกี"] = "lez",
["เลออน"] = "roa-leo",
["เลออนเก่า"] = "roa-ole",
["เลอเวือะตะวันตก"] = "lcp",
["เลอเวือะตะวันออก"] = "lwl",
["เวนดา"] = "ve",
["เวปส์"] = "vep",
["เวลส์"] = "cy",
["เวลส์กลาง"] = "wlm",
["เวลส์เก่า"] = "owl",
["เวอโร"] = "vro",
["เวียดนาม"] = "vi",
["เวียดนามกลาง"] = "mkh-mvi",
["เวียตติกดั้งเดิม"] = "mkh-vie-pro",
["เวเนโต"] = "vec",
["เศรปา"] = "xsr",
["เสฉวน"] = "zhx-sic",
["เหมื่อง"] = "mtq",
["เอชเตฮาร์ด"] = "esh",
["เอซเตรมาดูรา"] = "ext",
["เอมีเลีย"] = "egl",
["เอร์เซีย"] = "myv",
["เอสกิโมดั้งเดิม"] = "esx-esk-pro",
["เอสเปรันโต"] = "eo",
["เอสโตเนีย"] = "et",
["เอเว"] = "ee",
["เอเวนค์"] = "evn",
["เอเว็น"] = "eve",
["เอโดม"] = "xdm",
["เฮลเลนิกดั้งเดิม"] = "grk-pro",
["เฮาซา"] = "ha",
["เฮเรโร"] = "hz",
["แกลิกแบบสกอตแลนด์"] = "gd",
["แคชเมียร์"] = "ks",
["แคะ"] = "hak",
["แจพอนิกดั้งเดิม"] = "jpx-pro",
["แซกซันเก่า"] = "osx",
["แดลเมเชีย"] = "dlm",
["แต้จิ๋ว"] = "nan-tws",
["แบกเตรีย"] = "xbc",
["แบชเคียร์"] = "ba",
["แบนทอยด์ดั้งเดิม"] = "nic-bod-pro",
["แบนทูดั้งเดิม"] = "bnt-pro",
["แบล็กสปีช"] = "art-bsp",
["แพ็กเจ"] = "pkc",
["แฟโร"] = "fo",
["แมงซ์"] = "gv",
["แมนจู"] = "mnc",
["แสก"] = "skb",
["แอกแคด"] = "akk",
["แอตแลนติก-คองโกดั้งเดิม"] = "alv-pro",
["แอฟโฟรเอเชียติกดั้งเดิม"] = "afa-pro",
["แอลกองเคียนดั้งเดิม"] = "alg-pro",
["แอลจิกดั้งเดิม"] = "aql-pro",
["แอลฟ์ดาเลิน"] = "ovd",
["แอละแบมา"] = "akz",
["แอลเบเนีย"] = "sq",
["แอลเบเนียนดั้งเดิม"] = "sqj-pro",
["โกฟา"] = "gof",
["โคซา"] = "xh",
["โคณฑี"] = "gon",
["โคตาน"] = "kho",
["โคทาวา"] = "avk",
["โจว"] = "tsu",
["โชนา"] = "sn",
["โชร์"] = "cjs",
["โซตซิล"] = "tzo",
["โซมาลอยด์ดั้งเดิม"] = "cus-som-pro",
["โซมาลี"] = "so",
["โซ่ง"] = "soa",
["โตทา"] = "tcx",
["โตฟา"] = "kim",
["โทกูโนชิมะ"] = "tkn",
["โทแคเรียนดั้งเดิม"] = "ine-toc-pro",
["โทแคเรียนบี"] = "txb",
["โทแคเรียนเอ"] = "xto",
["โนเวียล"] = "nov",
["โบล"] = "bol",
["โบลีเนา"] = "smk",
["โบโด"] = "brx",
["โบโด-กาโรดั้งเดิม"] = "tbq-bdg-pro",
["โปรตุเกส"] = "pt",
["โปแลนด์"] = "pl",
["โปแลนด์เก่า"] = "zlw-opl",
["โภชปุระ"] = "bho",
["โมกิล"] = "mkj",
["โมอับ"] = "obm",
["โมเชโน"] = "mhn",
["โยกัด"] = "yog",
["โยนางูนิ"] = "yoi",
["โยรง"] = "yox",
["โยรูบอยด์ดั้งเดิม"] = "alv-yrd-pro",
["โยรูบา"] = "yo",
["โยรูบาดั้งเดิม"] = "alv-yor-pro",
["โรมัญญา"] = "rgn",
["โรมานช์"] = "rm",
["โรมานี"] = "rom",
["โรมาเนีย"] = "ro",
["โรฮีนจา"] = "rhg",
["โลจบาน"] = "jbo",
["โลโกโน"] = "arw",
["โลโล-เบอร์มีซดั้งเดิม"] = "tbq-lob-pro",
["โลโลอิชดั้งเดิม"] = "tbq-lol-pro",
["โวต"] = "vot",
["โวลอฟ"] = "wo",
["โวลาปุก"] = "vo",
["โอกินาวะ"] = "ryu",
["โอกิโนเอราบุ"] = "okn",
["โอจิบเว"] = "oj",
["โอซิง"] = "osi",
["โอริยา"] = "or",
["โอริยากลาง"] = "inc-mor",
["โอริยาเก่า"] = "inc-oor",
["โอเชียนิกดั้งเดิม"] = "poz-oce-pro",
["ไซลีเซีย"] = "szl",
["ไทขาว"] = "twh",
["ไทดั้งเดิม"] = "tai-pro",
["ไทดำ"] = "blt",
["ไทตะวันตกเฉียงใต้ดั้งเดิม"] = "tai-swe-pro",
["ไทย"] = "th",
["ไทลื้อ"] = "khb",
["ไทแดง"] = "tyr",
["ไทแมน"] = "tyj",
["ไทแหล่ง"] = "tjl",
["ไทใต้คง"] = "tdd",
["ไทใหญ่"] = "shn",
["ไนเจอร์-คองโกดั้งเดิม"] = "nic-pro",
["ไปวัน"] = "pwn",
["ไมถิลี"] = "mai",
["ไมนอส"] = "omn",
["ไมยา"] = "sks",
["ไมโครนีเซียนดั้งเดิม"] = "poz-mic-pro",
["ไว"] = "vai",
["ไหล"] = "lic",
["ไหลดั้งเดิม"] = "qfa-lic-pro",
["ไหหลำ"] = "hnm",
["ไอซ์แลนด์"] = "is",
["ไอนุ"] = "ain",
["ไอย์มารา"] = "ay",
["ไอริช"] = "ga",
["ไอริชกลาง"] = "mga",
["ไอริชเก่า"] = "sga",
["Ỹaroamë"] = "yro",
}
b8xuylggmjpydazbttp842u025sx6an
5729384
5729130
2026-07-20T07:42:56Z
Octahedron80
267
5729384
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",
["Abenaki"] = "abe",
["Abenlen Ayta"] = "abp",
["Abidji"] = "abi",
["Abinomn"] = "bsa",
["Abipón"] = "axb",
["Abishira"] = "ash",
["Abom"] = "aob",
["Abon"] = "abo",
["Aborlan Tagbanwa"] = "tbw",
["Abu"] = "ado",
["Abu'"] = "aah",
["Abua"] = "abn",
["Abui"] = "abz",
["Abun"] = "kgr",
["Abung"] = "abl",
["Abure"] = "abu",
["Abureni"] = "mgj",
["Acatepec Me'phaa"] = "tpx",
["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",
["Adja"] = "ajg",
["Adnyamathanha"] = "adt",
["Adonara"] = "adr",
["Aduge"] = "adu",
["Adzera"] = "adz",
["Adûni"] = "art-adu",
["Aeka"] = "aez",
["Aekyom"] = "awi",
["Aequian"] = "xae",
["Aer"] = "aeq",
["Afade"] = "aal",
["Afghan Sign Language"] = "afg",
["Afitti"] = "aft",
["Afra"] = "ulf",
["Afrihili"] = "afh",
["Afro-Seminole Creole"] = "afs",
["Agarabi"] = "agd",
["Agariya"] = "agi",
["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",
["Agwagwune"] = "yay",
["Ahanta"] = "aha",
["Ahirani"] = "ahr",
["Ahtna"] = "aht",
["Ahwai"] = "nfd",
["Ai-Cham"] = "aih",
["Aighon"] = "aix",
["Aikanã"] = "tba",
["Aiklep"] = "mwg",
["Aimele"] = "ail",
["Aimol"] = "aim",
["Ainbai"] = "aic",
["Aiome"] = "aki",
["Airoran"] = "air",
["Aisi"] = "mmq",
["Aja"] = "aja",
["Ajawa"] = "ajw",
["Ajië"] = "aji",
["Ajyíninka Apurucayali"] = "cpc",
["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",
["Akar-Bale"] = "acl",
["Akaselem"] = "aks",
["Akatek"] = "knj",
["Akawaio"] = "ake",
["Ake"] = "aik",
["Akebu"] = "keu",
["Akei"] = "tsr",
["Akeu"] = "aeu",
["Akhvakh"] = "akv",
["Akkala Sami"] = "sia",
["Akolet"] = "akt",
["Akoose"] = "bss",
["Akoye"] = "miw",
["Akpa"] = "akf",
["Akpes"] = "ibe",
["Akrukay"] = "afi",
["Akuku"] = "ayk",
["Akum"] = "aku",
["Akuntsu"] = "aqz",
["Akurio"] = "ako",
["Akuwagel"] = "bey",
["Akwa"] = "akw",
["Akyaung Ari"] = "nqy",
["Al-Sayyid Bedouin Sign Language"] = "syy",
["Alaba"] = "alw",
["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 Sign Language"] = "sqk",
["Alchuka"] = "tuw-alk",
["Alcozauca Mixtec"] = "xta",
["Alege"] = "alf",
["Alekano"] = "gah",
["Aleut"] = "ale",
["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",
["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",
["Amganad Ifugao"] = "ifa",
["Ami"] = "amy",
["Amis"] = "ami",
["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 Ligurian"] = "xlg",
["Ancient Macedonian"] = "xmk",
["Ancient North Arabian"] = "xna",
["Ancient Zapotec"] = "xzp",
["Andai"] = "afd",
["Andajin"] = "ajn",
["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",
["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",
["Ao"] = "njo",
["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",
["Aputai"] = "apx",
["Aquitanian"] = "xaq",
["Arabana"] = "ard",
["Arabela"] = "arl",
["Araki"] = "akr",
["Arakwal"] = "rkw",
["Aralle-Tabulahan"] = "atq",
["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 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",
["Asaro'o"] = "mtv",
["Ashe"] = "ahs",
["Ashkun"] = "ask",
["Asho Chin"] = "csh",
["Ashraaf"] = "cus-ash",
["Asháninka"] = "cni",
["Ashéninka Pajonal"] = "cjo",
["Ashéninka Perené"] = "prq",
["Asilulu"] = "asl",
["Askopan"] = "eiv",
["Asoa"] = "asv",
["Assan"] = "xss",
["Assangori"] = "sjg",
["Assiniboine"] = "asb",
["อารามายาใหม่แบบอัสซีเรีย"] = "aii",
["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",
["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",
["Austronesian Mari"] = "hob",
["Auwe"] = "smf",
["Auyana"] = "auy",
["Auye"] = "auu",
["Auyokawa"] = "auo",
["Avatime"] = "avn",
["Avau"] = "avb",
["Avava"] = "tmb",
["Avikam"] = "avi",
["Avokaya"] = "avu",
["Avá-Canoeiro"] = "avv",
["Awa (China)"] = "vwa",
["Awa (New Guinea)"] = "awb",
["Awa-Cuaiquer"] = "kwi",
["Awabakal"] = "awk",
["Awak"] = "awo",
["Awar"] = "aya",
["Awara"] = "awx",
["Awbono"] = "awh",
["Aweer"] = "bob",
["Awera"] = "awr",
["Awetí"] = "awe",
["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",
["Ayomán"] = "sai-ayo",
["Ayoquesco Zapotec"] = "zaf",
["Ayoreo"] = "ayo",
["Ayu"] = "ayu",
["Ayutla Mixtec"] = "miy",
["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",
["Bada"] = "bhz",
["Badanchi"] = "bau",
["Bade"] = "bde",
["Badeshi"] = "bdz",
["Badimaya"] = "bia",
["Baduy"] = "bac",
["Badyara"] = "pbp",
["Baeggu"] = "bvd",
["Baelelea"] = "bvc",
["Baenan"] = "sai-bae",
["Baetora"] = "btr",
["Bafanji"] = "bfj",
["Bafaw"] = "bwt",
["Bafia"] = "ksf",
["Bafut"] = "bfd",
["Baga Kaloum"] = "bqf",
["Baga Koga"] = "bgo",
["Baga Manduri"] = "bmd",
["Baga Pokur"] = "bcg",
["Baga Sitemu"] = "bsp",
["Baga Sobané"] = "bsv",
["Bagheli"] = "bfy",
["Bagirmi"] = "bmi",
["Bago-Kusuntu"] = "bqg",
["Bagri"] = "bgq",
["Bagua"] = "sai-bag",
["Bagupi"] = "bpi",
["Bagusa"] = "bqb",
["Bagvalal"] = "kva",
["Baha"] = "yha",
["Baham"] = "bdw",
["Bahamian Creole"] = "bah",
["Bahau"] = "bhv",
["Bahinemo"] = "bjh",
["Bahing"] = "bhj",
["Bahonsuai"] = "bsu",
["Bai (South Sudan)"] = "bdj",
["Baibai"] = "bbf",
["Baikeno"] = "bkx",
["Bailang"] = "tbq-blg",
["Baima"] = "bqh",
["Baimak"] = "bmx",
["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 Malay"] = "mhp",
["Balkan Gagauz Turkish"] = "bgx",
["Balkan Romani"] = "rmn",
["Balo"] = "bqo",
["Baloi"] = "biz",
["Balong"] = "bnt-bal",
["Baltic Romani"] = "rml",
["Baluan-Pam"] = "blq",
["Bamako Sign Language"] = "bog",
["Bamali"] = "bbq",
["Bambalang"] = "bmo",
["Bambam"] = "ptu",
["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",
["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",
["Basketo"] = "bst",
["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",
["Batu"] = "btu",
["Batui"] = "zbt",
["Batuley"] = "bay",
["Bau"] = "bbd",
["Bau Bidayuh"] = "sne",
["Bauchi"] = "bsf",
["Baure"] = "brg",
["Bauria"] = "bge",
["Bauro"] = "bxa",
["Bauwaki"] = "bwk",
["Bauzi"] = "bvz",
["Bawm Chin"] = "bgr",
["Bay Miwok"] = "mkq",
["Bayali"] = "bjy",
["Baybayanon"] = "bvy",
["Baygo"] = "byg",
["Bayogoula"] = "nai-bay",
["Bayono"] = "byl",
["Bayot"] = "bda",
["Bayungu"] = "bxj",
["Bazigar"] = "bfr",
["Baïnounk Gubëeher"] = "alv-bgu",
["Beami"] = "beo",
["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",
["Belhariya"] = "byw",
["Beli"] = "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",
["Benggoi"] = "bgy",
["Bengkala Sign Language"] = "bqy",
["Bentong"] = "bnu",
["Benyadu'"] = "byd",
["Beothuk"] = "bue",
["Bepour"] = "bie",
["Bera"] = "brf",
["Berakou"] = "bxv",
["Berau Malay"] = "bve",
["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",
["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",
["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",
["Bijori"] = "bix",
["Bikaru"] = "bic",
["Bikya"] = "byb",
["Bila"] = "bip",
["Bilakura"] = "bql",
["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",
["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",
["Bisorio"] = "bir",
["Bissa"] = "bib",
["Bit"] = "bgk",
["Bitare"] = "brt",
["Bitur"] = "mcc",
["Biwat"] = "bwm",
["Biyo"] = "byo",
["Biyom"] = "bpm",
["Blablanga"] = "blp",
["Blackfoot"] = "bla",
["Blafe"] = "bfh",
["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 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",
["Bolgo"] = "bvo",
["Bolia"] = "bli",
["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",
["Bourguignon"] = "roa-brg",
["Bozaba"] = "bzo",
["Bragat"] = "aof",
["Brazilian Sign Language"] = "bzs",
["Brek Karen"] = "kvl",
["Brem"] = "buq",
["Breri"] = "brq",
["Bribri"] = "bzd",
["British Sign Language"] = "bfi",
["Brokkat"] = "bro",
["Brokpake"] = "sgt",
["Brokskat"] = "bkk",
["Broome Pearling Lugger Pidgin"] = "bpl",
["Brunei Bisaya"] = "bsb",
["Bruny Island"] = "xpz",
["Bu"] = "jid",
["Bu-Nao Bunu"] = "bwx",
["Bua"] = "bub",
["Bualkhaw Chin"] = "cbl",
["Buamu"] = "box",
["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",
["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 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",
["Burmeso"] = "bzu",
["Buru (Indonesia)"] = "mhs",
["Buru (Nigeria)"] = "bqw",
["Burui"] = "bry",
["Burumakok"] = "aip",
["Burun"] = "bdi",
["Burunge"] = "bds",
["Burushaski"] = "bsk",
["Burusu"] = "bqr",
["Buruwai"] = "asi",
["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",
["Caolan"] = "mlc",
["Capanahua"] = "kaq",
["Capiznon"] = "cps",
["Cappadocian Greek"] = "cpg",
["Caquinte"] = "cot",
["Cara"] = "cfd",
["Carabayo"] = "cby",
["Caramanta"] = "crf",
["Caranqui"] = "sai-caq",
["Carapana"] = "cbc",
["Carian"] = "xcr",
["Cariay"] = "awd-kar",
["Carijona"] = "cbd",
["Carolina Algonquian"] = "crr",
["Carolinian"] = "cal",
["Carpathian Romani"] = "rmc",
["Carrier"] = "crx",
["Cashibo-Cacataibo"] = "cbr",
["Cashinahua"] = "cbs",
["Casiguran Dumagat Agta"] = "dgc",
["Casuarina Coast Asmat"] = "asc",
["Catacao"] = "sai-cat",
["Catalan Sign Language"] = "csc",
["Catawba"] = "chc",
["Catuquinaru"] = "sai-ctq",
["Catío Chibcha"] = "cba-cat",
["Cauca"] = "cca",
["Cavineña"] = "cav",
["Cayubaba"] = "cyb",
["Cayuga"] = "cay",
["Cayuse"] = "xcy",
["Cazcan"] = "azc-caz",
["Cañari"] = "sai-cnr",
["Cebaara Senoufo"] = "sef",
["Celtiberian"] = "xce",
["Cen"] = "cen",
["Central Asmat"] = "cns",
["Central Atlas Tamazight"] = "tzm",
["Central Awyu"] = "awu",
["Central Bai"] = "bca",
["Central Bontoc"] = "lbk",
["Central Cagayan Agta"] = "agt",
["ฟรังโกเนียตอนกลาง"] = "gmw-cfr",
["Central Grebo"] = "grv",
["Central Huasteca Nahuatl"] = "nch",
["Central Huishui Hmong"] = "hmc",
["Central Mahuatlán Zapotec"] = "zam",
["Central Mansi"] = "mns-cen",
["Central Masela"] = "mxz",
["Central Mashan Hmong"] = "hmm",
["Central Mazahua"] = "maz",
["Central Melanau"] = "mel",
["Central Ojibwa"] = "ojc",
["Central Pame"] = "pbs",
["Central Pomo"] = "poo",
["Central Puebla Nahuatl"] = "ncx",
["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",
["Chaha"] = "sem-cha",
["Chaima"] = "ciy",
["Chairel"] = "sit-cha",
["Chak"] = "ckh",
["Chakali"] = "cli",
["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",
["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",
["Chayahuita"] = "cbt",
["Chayuco Mixtec"] = "mih",
["Chazumba Mixtec"] = "xtb",
["Che"] = "ruk",
["Cheke Holo"] = "mrn",
["Chemakum"] = "xch",
["Chenapian"] = "cjn",
["Chenchu"] = "cde",
["Chenoua"] = "cnu",
["Chepang"] = "cdm",
["Chepya"] = "ycp",
["Cherepon"] = "cpn",
["Chesu"] = "ych",
["Chetco-Tolowa"] = "ctc",
["Chewong"] = "cwg",
["Chhattisgarhi"] = "hne",
["Chhintange"] = "ctn",
["Chhulung"] = "cur",
["Chiangmai Sign Language"] = "csd",
["Chiapanec"] = "cip",
["Chibcha"] = "chb",
["Chicahuaxtla Triqui"] = "trs",
["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 Pidgin English"] = "cpi",
["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",
["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",
["Chukwa"] = "cuw",
["Chulym"] = "clw",
["Chumburung"] = "ncu",
["Churahi"] = "cdj",
["Church Slavonic"] = "zls-chs",
["Churuya"] = "sai-chu",
["Chut"] = "scb",
["Chuukese"] = "chk",
["Chuvan"] = "xcv",
["Chácobo"] = "cao",
["Ci Gbe"] = "cib",
["Cia-Cia"] = "cia",
["Cibak"] = "ckl",
["Cicipu"] = "awc",
["Ciguayo"] = "nai-cig",
["คิมบรี"] = "cim",
["Cinamiguin Manobo"] = "mkx",
["Cinda-Regi-Tiyal"] = "cdr",
["Cineni"] = "cie",
["Cinta Larga"] = "cin",
["Cishingini"] = "asg",
["Citak"] = "txt",
["Ciwogai"] = "tgd",
["แกลิกคลาสสิก"] = "ghc",
["Classical Mandaic"] = "myz",
["ซีรีแอกคลาสสิก"] = "syc",
["Coahuilteco"] = "xcw",
["Coast Miwok"] = "csi",
["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",
["Coquille"] = "coq",
["Cora"] = "crn",
["Cori"] = "cry",
["Coroado Puri"] = "sai-crd",
["Cosoleacaque Nahuatl"] = "nhk",
["Costa Rican Sign Language"] = "csr",
["Cotabato Manobo"] = "mta",
["Cotoname"] = "xcn",
["Cowlitz"] = "cow",
["Coyaima"] = "coy",
["Coyotepec Popoloca"] = "pbf",
["Coyutla Totonac"] = "toc",
["Creek"] = "mus",
["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",
["Cung"] = "cug",
["Cupeño"] = "cup",
["Curonian"] = "xcu",
["Curripaco"] = "kpc",
["Cutchi-Swahili"] = "ccl",
["Cuvok"] = "cuv",
["Cuyamecalco Mixtec"] = "xtu",
["Cuyunon"] = "cyo",
["Cwi Bwamu"] = "bwy",
["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",
["Dakpa"] = "dka",
["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 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",
["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",
["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",
["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",
["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 Low Saxon"] = "nds-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",
["Dzuun"] = "dnn",
["Dâw"] = "kwa",
["E"] = "eee",
["E'ma Buyang"] = "yzg",
["Early Old Oghuz"] = "trk-eog",
["Early Tripuri"] = "xtr",
["East Damar"] = "dmr",
["ฟรังโกเนียตะวันออก"] = "vmf",
["East Futuna"] = "fud",
["East Kewa"] = "kjs",
["East Limba"] = "lma",
["East Masela"] = "vme",
["East Nyala"] = "nle",
["East Tarangan"] = "tre",
["East Yugur"] = "yuy",
["Eastern Acipa"] = "acp",
["Eastern Arrernte"] = "aer",
["Eastern Bolivian Guarani"] = "gui",
["Eastern Bontoc"] = "ebk",
["Eastern Canadian Inuktitut"] = "ike",
["Eastern Durango Nahuatl"] = "azd",
["Eastern Gorkha Tamang"] = "tge",
["Eastern Gurung"] = "ggn",
["Eastern Highland Chatino"] = "cly",
["Eastern Highland Otomi"] = "otm",
["Eastern Huasteca Nahuatl"] = "nhe",
["Eastern Huishui Hmong"] = "hme",
["Eastern Karaboro"] = "xrb",
["Eastern Keres"] = "kee",
["Eastern Khanty"] = "kca-eas",
["Eastern Krahn"] = "kqo",
["Eastern Lalu"] = "yit",
["Eastern Magar"] = "mgp",
["Eastern Maninkakan"] = "emk",
["Eastern Mari"] = "mhr",
["Eastern Meohang"] = "emg",
["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 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",
["Edopi"] = "dbf",
["Efai"] = "efa",
["Efe"] = "efe",
["Efik"] = "efi",
["Efutop"] = "ofu",
["Ega"] = "ega",
["Eggon"] = "ego",
["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",
["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",
["Emplawas"] = "emw",
["En"] = "enc",
["Enawené-Nawé"] = "unk",
["Ende"] = "end",
["Enga"] = "enq",
["Engenni"] = "enn",
["Enggano"] = "eno",
["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",
["Esan"] = "ish",
["Ese"] = "mcq",
["Ese Ejja"] = "ese",
["Esimbi"] = "ags",
["Eskayan"] = "esy",
["Esmeralda"] = "sai-esm",
["Esselen"] = "esq",
["Estado de México Otomi"] = "ots",
["Estonian Sign Language"] = "eso",
["Esuma"] = "esm",
["Etchemin"] = "etc",
["Etebi"] = "etb",
["Eten"] = "etx",
["Eteocretan"] = "ecr",
["Eteocypriot"] = "ecy",
["Ethiopian Sign Language"] = "eth",
["Etkywan"] = "ich",
["Eton (Cameroon)"] = "eto",
["Eton (Vanuatu)"] = "etn",
["Etulo"] = "utr",
["Evant"] = "bzz",
["Ewage-Notu"] = "nou",
["Ewarhuyana"] = "sai-ewa",
["Ewondo"] = "ewo",
["Eyak"] = "eya",
["Ezaa"] = "eza",
["Fagani"] = "faf",
["Faire Atta"] = "azt",
["Faita"] = "faj",
["Faiwol"] = "fai",
["Fakkanci"] = "gel",
["Falam Chin"] = "cfm",
["Fali"] = "fli",
["Fam"] = "fam",
["Fanagalo"] = "fng",
["Fanamaket"] = "bjp",
["Fang (Bantu)"] = "fan",
["Fang (Beboid)"] = "fak",
["Fania"] = "fni",
["Far Western Muria"] = "fmu",
["ฟราฟรา"] = "gur",
["Fas"] = "fqs",
["Fasu"] = "faa",
["Fataleka"] = "far",
["Fataluku"] = "ddg",
["Fayu"] = "fau",
["Fe'fe'"] = "fmp",
["Fedan"] = "pdn",
["Fembe"] = "agl",
["Fer"] = "kah",
["Feroge"] = "fer",
["Filomena Mata-Coahuitlán Totonac"] = "tlp",
["Fingallian"] = "gmw-fin",
["Finisterre Yau"] = "yuw",
["Finnish Sign Language"] = "fse",
["Finnish-Swedish Sign Language"] = "fss",
["Finongan"] = "fag",
["Fipa"] = "fip",
["Firan"] = "fir",
["Fiwaga"] = "fiw",
["Flemish Sign Language"] = "vgt",
["Flinders Island"] = "fln",
["Foau"] = "flh",
["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",
["French Belgian Sign Language"] = "sfb",
["French Sign Language"] = "fsl",
["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",
["Gagnoa Bété"] = "btg",
["Gahri"] = "bfu",
["Gaikundi"] = "gbf",
["Gaina"] = "gcn",
["Gal"] = "gap",
["Galambu"] = "glo",
["Galatian"] = "xga",
["Galela"] = "gbi",
["Galeya"] = "gar",
["Galice"] = "gce",
["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-Ningi"] = "bte",
["Gana"] = "gnq",
["Ganang"] = "gne",
["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",
["Garre"] = "gex",
["Garus"] = "gyb",
["Garza"] = "xgr",
["Gashowu Yokuts"] = "yok-gsy",
["Gata'"] = "gaq",
["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",
["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",
["Gepo"] = "ygp",
["Gera"] = "gew",
["Gerka"] = "gek",
["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",
["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",
["Gogo"] = "gog",
["Gogodala"] = "ggw",
["Goguryeo"] = "zkg",
["Gojri"] = "gju",
["Gokana"] = "gkn",
["Gokhy"] = "tbq-gkh",
["Gola"] = "gol",
["Golin"] = "gvf",
["Golpa"] = "lja",
["Gone Dau"] = "goo",
["Gongduk"] = "goe",
["Gonja"] = "gjn",
["Goo"] = "gov",
["Gor"] = "gqr",
["Gorakor"] = "goc",
["Gorap"] = "goq",
["Goreng"] = "xgg",
["Gorontalo"] = "gor",
["Gorovu"] = "grq",
["Gorwaa"] = "gow",
["Gottscheerish"] = "gmw-gts",
["Goundo"] = "goy",
["Gourmanchéma"] = "gux",
["Gowlan"] = "goj",
["Gowro"] = "gwf",
["Gozarkhani"] = "goz",
["Grangali"] = "nli",
["Grass Koiari"] = "kbk",
["Greek Sign Language"] = "gss",
["Green Gelao"] = "giq",
["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 Sign Language"] = "lgs",
["Guinean Sign Language"] = "gus",
["Guiqiong"] = "gqi",
["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",
["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",
["Hainyaxo Bozo"] = "bzx",
["Haiphong Sign Language"] = "haf",
["Haisla"] = "has",
["Haitian Vodoun Culture Language"] = "hvc",
["Haiǁom"] = "hgm",
["Haji"] = "hji",
["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",
["Harami"] = "xha",
["Harappan"] = "xiv",
["Harari"] = "har",
["Haraza"] = "nub-har",
["Harijan Kinnauri"] = "kjo",
["Haroi"] = "hro",
["Harsusi"] = "hss",
["Haruai"] = "tmd",
["Haruku"] = "hrk",
["หริยาณวี"] = "bgc",
["Harzani"] = "hrz",
["Hasaitic"] = "sem-has",
["Hasha"] = "ybj",
["Hassaniya Arabic"] = "mey",
["Hatam"] = "had",
["Hattic"] = "xht",
["Hausa Sign Language"] = "hsl",
["Haush"] = "sai-hau",
["Havasupai-Walapai-Yavapai"] = "yuf",
["Haveke"] = "hvk",
["Havu"] = "hav",
["Hawai'i Pidgin Sign Language"] = "hps",
["Hawaiian Creole"] = "hwc",
["Haya"] = "hay",
["Hdi"] = "xed",
["Hehe"] = "heh",
["Heiban"] = "hbn",
["Heiltsuk"] = "hei",
["Helong"] = "heg",
["Hema"] = "nix",
["Hemba"] = "hem",
["Herdé"] = "hed",
["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",
["Hijuk"] = "hij",
["Hill Maria"] = "mrr",
["Himarimã"] = "hir",
["Hindi Dogri"] = "dgo",
["Hinduri"] = "hii",
["Hinukh"] = "gin",
["Hismaic"] = "sem-his",
["Hitchiti"] = "nai-hit",
["Hittite"] = "hit",
["Hitu"] = "htu",
["Hiw"] = "hiw",
["Hixkaryana"] = "hix",
["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",
["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 Sign Language"] = "hsh",
["Hungworo"] = "nat",
["Hunjara-Kaina Ke"] = "hkk",
["Hunnic"] = "xhc",
["Hunzib"] = "huz",
["Hupa"] = "hup",
["Hupdë"] = "jup",
["Hupla"] = "hap",
["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",
["Ibanag"] = "ibg",
["Ibani"] = "iby",
["Ibatan"] = "ivb",
["Iberian"] = "xib",
["Ibibio"] = "ibb",
["Ibino"] = "ibn",
["Iboko"] = "bkp",
["Ibu"] = "ibu",
["Ibuoro"] = "ibr",
["Icelandic Sign Language"] = "icl",
["Iceve-Maci"] = "bec",
["Idakho-Isukha-Tiriki"] = "ida",
["Idaté"] = "idt",
["Idere"] = "ide",
["Idesa"] = "ids",
["Idi"] = "idi",
["Idiom Neutral"] = "mis-idn",
["Idoma"] = "idu",
["Idon"] = "idc",
["Idu"] = "clk",
["Idun"] = "ldb",
["Iduna"] = "viv",
["Ifo"] = "iff",
["Ifè"] = "ife",
["Igala"] = "igl",
["Igana"] = "igg",
["Igede"] = "ige",
["Ignaciano"] = "ign",
["Igo"] = "ahl",
["Iguta"] = "nar",
["Igwe"] = "igw",
["Iha"] = "ihp",
["Ihievbe"] = "ihi",
["Ija-Zuba"] = "vki",
["Ik"] = "ikx",
["Ika"] = "ikk",
["Ikaranggal"] = "ikr",
["Ikizu"] = "ikz",
["Iko"] = "iki",
["Ikobi-Mena"] = "meb",
["Ikoma"] = "ntk",
["Ikpeng"] = "txi",
["Ikpeshi"] = "ikp",
["Ikposo"] = "kpo",
["Iku-Gora-Ankwa"] = "ikv",
["Ikulu"] = "ikl",
["Ikwere"] = "ikw",
["Ikwo"] = "iqw",
["Ila"] = "ilb",
["Ile Ape"] = "ila",
["Ilgar"] = "ilg",
["Ili Turki"] = "ili",
["Ili'uun"] = "ilu",
["Ilianen Manobo"] = "mbi",
["Illyrian"] = "xil",
["Ilongot"] = "ilk",
["Ilue"] = "ilv",
["Ilwana"] = "mlk",
["Imbongu"] = "imo",
["Imonda"] = "imn",
["Imroing"] = "imr",
["Inabaknon"] = "abx",
["Inapang"] = "mzu",
["Indanga"] = "bnt-ind",
["Indo-Portuguese"] = "idb",
["Indri"] = "idr",
["Indus Kohistani"] = "mvy",
["Inebu One"] = "oin",
["Ineseño"] = "inz",
["Inga"] = "inb",
["Inlaod Itneg"] = "iti",
["Inoke-Yate"] = "ino",
["Inonhan"] = "loc",
["Inor"] = "ior",
["Inpui Naga"] = "nkf",
["International Sign"] = "ils",
["Interslavic"] = "isv",
["Intha"] = "int",
["Inuinnaqtun"] = "esx-inq",
["Inuit Sign Language"] = "iks",
["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",
["Iraqw"] = "irk",
["Irarutu"] = "irh",
["Iraya"] = "iry",
["Iresim"] = "ire",
["Iriga Bicolano"] = "bto",
["Irish Sign Language"] = "isg",
["Irula"] = "iru",
["Isabi"] = "isa",
["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",
["อิสโตร-โรมาเนีย"] = "ruo",
["Isu"] = "isu",
["Isubu"] = "szv",
["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",
["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 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 Sign Language"] = "jsl",
["Japhug"] = "sit-jap",
["Japrería"] = "jru",
["Jaqaru"] = "jqr",
["Jara"] = "jaf",
["Jarai"] = "jra",
["Jarawa"] = "anq",
["Jaru"] = "ddj",
["Jassic"] = "ysc",
["Jaunsari"] = "jns",
["Javindo"] = "jvd",
["Jawe"] = "jaz",
["Jaya"] = "jyy",
["Jebero"] = "jeb",
["Jeh"] = "jeh",
["Jehai"] = "jhi",
["Jeikó"] = "sai-jko",
["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",
["Jiba"] = "juo",
["Jibu"] = "jib",
["Jicarilla"] = "apj",
["Jie"] = "mis-jie",
["Jiiddu"] = "jii",
["Jilbe"] = "jie",
["Jili"] = "mgi",
["Jilim"] = "jil",
["Jimi"] = "jmi",
["Jimjimen"] = "jim",
["Jina"] = "jia",
["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",
["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",
["Kabiyé"] = "kbp",
["Kabola"] = "klz",
["Kabore One"] = "onk",
["Kabras"] = "lkb",
["Kaburi"] = "uka",
["Kabutra"] = "kbu",
["Kabwa"] = "cwa",
["Kabwari"] = "kcw",
["Kachama-Ganjule"] = "kcx",
["Kachari"] = "xac",
["Kachi Koli"] = "gjk",
["Kacipo-Balesi"] = "koe",
["Kaco'"] = "xkk",
["Kadai"] = "kzd",
["Kadar"] = "kej",
["Kadara"] = "kad",
["Kadaru"] = "kdu",
["Kadiwéu"] = "kbc",
["Kado"] = "kdv",
["Kadugli"] = "xtc",
["Kaduo"] = "ktp",
["Kaera"] = "jka",
["Kafa"] = "kbr",
["Kafoa"] = "kpu",
["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",
["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",
["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",
["Kamasa"] = "klp",
["Kamasau"] = "kms",
["Kamassian"] = "xas",
["Kamayo"] = "kyk",
["Kamayurá"] = "kay",
["Kamba"] = "kam",
["Kambaata"] = "ktb",
["Kambaira"] = "kyy",
["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",
["Kannada Kurumba"] = "kfi",
["Kannauji"] = "bjj",
["Kanowit"] = "kxn",
["Kanoé"] = "kxo",
["Kansa"] = "ksk",
["Kantosi"] = "xkt",
["Kanu"] = "khx",
["Kanufi"] = "kni",
["Kanyok"] = "kny",
["Kao"] = "kax",
["Kaonde"] = "kqn",
["Kap"] = "ykm",
["Kapauri"] = "khp",
["Kapin"] = "tbx",
["Kapinawá"] = "xpn",
["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",
["Karakhanid"] = "xqa",
["Karami"] = "xar",
["Karamojong"] = "kdj",
["Karang"] = "kzr",
["Karanga"] = "kth",
["Karankawa"] = "zkk",
["Karas"] = "kgv",
["Karata"] = "kpt",
["Karawa"] = "xrw",
["Karbi"] = "mjw",
["Kare (Central Africa)"] = "kbn",
["Kare (New Guinea)"] = "kmf",
["Karekare"] = "kai",
["Karey"] = "kyd",
["Kari"] = "kbj",
["Kari'na"] = "car",
["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",
["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",
["Kavet"] = "krv",
["Kawacha"] = "kcb",
["Kawaiisu"] = "xaw",
["Kawe"] = "kgb",
["Kawishana"] = "awd-kaw",
["Kawésqar"] = "alc",
["Kaxararí"] = "ktx",
["Kaxuyana"] = "kbb",
["Kayabí"] = "kyz",
["Kayagar"] = "kyt",
["Kayan Mahakam"] = "xay",
["Kayan River Kayan"] = "xkn",
["Kayapa Kallahan"] = "kak",
["Kayapó"] = "txu",
["Kayardild"] = "gyd",
["Kayeli"] = "kzl",
["Kayong"] = "kxy",
["Kayort"] = "kyv",
["Kaytetye"] = "gbb",
["Kayupulau"] = "kzu",
["Kazukuru"] = "kzk",
["Ke'o"] = "xxk",
["Keak"] = "keh",
["Keapara"] = "khz",
["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",
["Kesawai"] = "xes",
["Ket"] = "ket",
["Ketangalan"] = "kae",
["Kete"] = "kcv",
["Ketengban"] = "xte",
["Ketum"] = "ktt",
["Kewa"] = "kew",
["Keyagana"] = "kyg",
["Kgalagadi"] = "xkv",
["แฆแลจ"] = "klj",
["Khaling"] = "klr",
["Khamnigan Mongol"] = "ykh",
["Khamyang"] = "ksu",
["Khana"] = "ogo",
["Khandeshi"] = "khn",
["Khao"] = "xao",
["Kharam Naga"] = "kfw",
["Kharia"] = "khr",
["Kharia Thar"] = "ksy",
["Khayo"] = "lko",
["Khazar"] = "zkz",
["Khe"] = "kqg",
["Khehek"] = "tlx",
["Khengkha"] = "xkf",
["Khetrani"] = "xhe",
["Khezha Naga"] = "nkh",
["Khiamniungan Naga"] = "kix",
["Khinalug"] = "kjj",
["Khirwar"] = "kwx",
["Khisa"] = "kqm",
["Khlor"] = "llo",
["Khlula"] = "ykl",
["Khoekhoe"] = "naq",
["Khoibu Naga"] = "nkb",
["Khoini"] = "xkc",
["Kholok"] = "ktc",
["Kholosi"] = "inc-kho",
["Khorasani Turkish"] = "kmz",
["Khorezmian Turkic"] = "zkh",
["Khowar"] = "khw",
["Khroskyabs"] = "jiq",
["Khua"] = "xhv",
["Khuen"] = "khf",
["Khumi Chin"] = "cnk",
["Khvarshi"] = "khv",
["Khwarezmian"] = "xco",
["Khwe"] = "xuu",
["Kháng"] = "kjm",
["Kiautschou German Pidgin"] = "crp-kia",
["Kibala"] = "blv",
["Kibena"] = "bez",
["Kibet"] = "kie",
["Kibiri"] = "prm",
["Kichwa"] = "qwe-kch",
["Kickapoo"] = "kic",
["Kikai"] = "kzg",
["Kikami"] = "kcu",
["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",
["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",
["Kohumono"] = "bcs",
["Koi"] = "kkt",
["Koibal"] = "zkb",
["Koireng"] = "nkd",
["Koitabu"] = "kqi",
["Koiwat"] = "kxt",
["Kok-Nar"] = "gko",
["Kok-Paponk"] = "okg",
["Kokata"] = "ktd",
["Koke"] = "kou",
["Koko-Bera"] = "kkp",
["Kokoda"] = "xod",
["Kokola"] = "kzn",
["Kokota"] = "kkk",
["Kol (Cameroon)"] = "biw",
["Kol (New Guinea)"] = "kol",
["Kola"] = "kvv",
["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",
["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 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",
["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",
["Kota Marudu Tinagas"] = "ktr",
["Kotafon Gbe"] = "kqk",
["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",
["Kulon-Pazeh"] = "uun",
["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",
["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",
["Kunimaipa"] = "kup",
["Kunja"] = "pep",
["Kunjen"] = "kjn",
["Kunyi"] = "njx",
["Kunza"] = "kuz",
["Kuo"] = "xuo",
["Kuot"] = "kto",
["Kupa"] = "kug",
["Kupang Malay"] = "mkn",
["Kupia"] = "key",
["Kupsabiny"] = "kpz",
["Kur"] = "kuv",
["Kura Ede Nago"] = "nqk",
["Kurama"] = "krh",
["Kuranko"] = "knk",
["Kuri"] = "nbn",
["Kuria"] = "kuj",
["Kurichiya"] = "kfh",
["Kurmukar"] = "kfv",
["Kurnai"] = "unn",
["Kurrama"] = "vku",
["Kurti"] = "ktm",
["Kurtjar"] = "gdj",
["Kurtöp"] = "xkz",
["Kurudu"] = "kjr",
["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",
["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",
["Kâte"] = "kmg",
["Kélé"] = "keb",
["Kómnzo"] = "paa-kom",
["La'bi"] = "lbi",
["Laal"] = "gdm",
["Laalaa"] = "cae",
["Laba"] = "lau",
["Label"] = "lbb",
["Labir"] = "jku",
["Labo"] = "mwi",
["Labo Phowa"] = "ypb",
["Labu"] = "lbu",
["Labuk-Kinabatangan Kadazan"] = "dtb",
["Lacandon"] = "lac",
["Lachi"] = "lbt",
["Lachiguiri Zapotec"] = "zpa",
["Lachixío Zapotec"] = "zpl",
["Ladji-Ladji"] = "llj",
["Laeko-Libuat"] = "lkl",
["Lafofa"] = "laf",
["Laghu"] = "lgb",
["Laghuu"] = "lgh",
["Lagwan"] = "kot",
["Laha (Indonesia)"] = "lhh",
["Laha (Vietnam)"] = "lha",
["Lahanan"] = "lhn",
["Lahnda"] = "lah",
["Lahta Karen"] = "kvt",
["Lahu"] = "lhu",
["Lahu Shi"] = "lhi",
["Lahul Lohar"] = "lhl",
["Lai"] = "cnh",
["Laimbue"] = "lmx",
["Laitu Chin"] = "clj",
["Laiyolo"] = "lji",
["Laka"] = "lak",
["Lakalei"] = "lka",
["Lake Miwok"] = "lmw",
["Lakha"] = "lkh",
["Laki"] = "lki",
["Lakon"] = "lkn",
["Lakondê"] = "lkd",
["ลาโคตา"] = "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",
["Langam"] = "lnm",
["Langbashe"] = "lna",
["Langi"] = "lag",
["Langnian Buyang"] = "yln",
["Lango (Sudan)"] = "lno",
["Lango (Uganda)"] = "laj",
["Lanima"] = "lnw",
["Lanoh"] = "lnh",
["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",
["Latu"] = "ltu",
["Latundê"] = "ltn",
["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",
["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",
["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",
["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",
["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 Sign Language"] = "lbs",
["Ligbi"] = "lig",
["Ligenza"] = "lgz",
["Lihir"] = "lih",
["Lika"] = "lik",
["Liki"] = "lio",
["Likila"] = "lie",
["Likuba"] = "kxx",
["Likum"] = "lib",
["Likwala"] = "kwc",
["Lilau"] = "lll",
["Lillooet"] = "lil",
["Limassa"] = "bme",
["Limbum"] = "lmp",
["Limi"] = "ylm",
["Limilngan"] = "lmc",
["Limos Kalinga"] = "kmk",
["Linear A"] = "lab",
["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",
["Lithuanian Sign Language"] = "lls",
["Little Swanport"] = "aus-lsw",
["Litzlitz"] = "lzl",
["Lizu"] = "sit-liz",
["Lo-Toga"] = "lht",
["Loarki"] = "lrk",
["Lobala"] = "loq",
["Lobi"] = "lob",
["Lodhi"] = "lbm",
["Logba"] = "lgq",
["Logo"] = "log",
["Logol"] = "lof",
["Logooli"] = "rag",
["Logorik"] = "liu",
["Lokaa"] = "yaz",
["Loko"] = "lok",
["Lokoya"] = "lky",
["Lola"] = "lcd",
["Lolak"] = "llq",
["Lole"] = "llg",
["Lolo"] = "llb",
["Loloda"] = "loa",
["Lolopo"] = "ycl",
["Loma"] = "lom",
["Lomaiviti"] = "lmv",
["Lomakka"] = "loi",
["Lomavren"] = "rmi",
["Lombi"] = "lmi",
["Lombo"] = "loo",
["Lomwe"] = "ngl",
["Loncong"] = "lce",
["Long Phuri Naga"] = "lpn",
["Long Wat"] = "ttw",
["Longgu"] = "lgu",
["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",
["Loun"] = "lox",
["Loup A"] = "xlo",
["Loup B"] = "xlb",
["Lovono"] = "vnk",
["Lower Burdekin"] = "xbb",
["Lower Chehalis"] = "cea",
["Lower Grand Valley Dani"] = "dni",
["Lower Nossob"] = "nsb",
["Lower Southern Aranda"] = "axl",
["Lower Ta'oih"] = "tto",
["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",
["Lugbara"] = "lgg",
["Luguru"] = "ruf",
["Luhu"] = "lcq",
["Luhya"] = "luy",
["Luimbi"] = "lum",
["Luiseño"] = "lui",
["Lukpa"] = "dop",
["Lule"] = "ule",
["Lumba-Yakkha"] = "luu",
["Lumbee"] = "lmz",
["Lumbu"] = "lup",
["Lumun"] = "lmd",
["Lun Bawang"] = "lnd",
["Luna"] = "luj",
["Lunanakha"] = "luk",
["Lunda"] = "lun",
["Lungga"] = "lga",
["Luo"] = "luo",
["Luopohe Hmong"] = "hml",
["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",
["Luyana"] = "lyn",
["Lwalu"] = "lwa",
["Lwel"] = "lvl",
["Lycian"] = "xlc",
["Lydian"] = "xld",
["Lyélé"] = "lee",
["Láadan"] = "ldn",
["Láá Láá Bwamu"] = "bwj",
["Löyöp"] = "urr",
["Ma"] = "msj",
["Ma Manda"] = "skc",
["Ma'anyan"] = "mhy",
["Ma'di"] = "mhi",
["Ma'ya"] = "slz",
["Maaka"] = "mew",
["Maale"] = "mdy",
["Maay"] = "ymm",
["Maba"] = "mqa",
["Mabaale"] = "mmz",
["Mabaan"] = "mfz",
["Mabaka Valley Kalinga"] = "kkg",
["Mabire"] = "muj",
["Maca"] = "mca",
["Macaguaje"] = "mcl",
["Macaguán"] = "mbn",
["Macau Pidgin Portuguese"] = "crp-mpp",
["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",
["Magdalena Peñasco Mixtec"] = "xtm",
["Magiyi"] = "gmg",
["Magoma"] = "gmx",
["Magori"] = "zgr",
["Magɨ"] = "gkd",
["Mahali"] = "mjx",
["Mahasu Pahari"] = "bfz",
["Mahican"] = "mjy",
["Mahongwe"] = "mhb",
["Mahou"] = "mxx",
["Maiadomu"] = "mzz",
["Maiani"] = "tnh",
["Maii"] = "mmm",
["Mailu"] = "mgu",
["Maindo"] = "cwb",
["Maipure"] = "awd-mpr",
["Mairasi"] = "zrs",
["Maisin"] = "mbq",
["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",
["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 Paharia"] = "mkb",
["Mala (New Guinea)"] = "ped",
["Mala (Nigeria)"] = "ruy",
["Mala Malasar"] = "ima",
["Malaccan Creole Malay"] = "ccm",
["Malalamai"] = "mmt",
["Malalí"] = "sai-mal",
["Malango"] = "mln",
["Malankuravan"] = "mjo",
["Malapandaram"] = "mjp",
["Malaryan"] = "mjq",
["Malas"] = "mkr",
["Malasanga"] = "mqz",
["Malasar"] = "ymr",
["Malavedan"] = "mjr",
["Malawi Lomwe"] = "lon",
["Malawian Sign Language"] = "lws",
["Malayic Dayak"] = "xdy",
["Malaynon"] = "mlz",
["Malaysian Sign Language"] = "xml",
["Malba Birifor"] = "bfo",
["Male"] = "mdc",
["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 Sign Language"] = "mdl",
["Malua Bay"] = "mll",
["Malvi"] = "mup",
["Maléku Jaíka"] = "gut",
["Mam"] = "mam",
["Mama"] = "mma",
["Mamaa"] = "mhf",
["Mamaindé"] = "wmd",
["Mamanwa"] = "mmn",
["Mamara Senoufo"] = "myk",
["Mamasa"] = "mqj",
["Mambae"] = "mgm",
["Mambai"] = "mcs",
["Mamboru"] = "mvd",
["Mambwe-Lungu"] = "mgr",
["Mampruli"] = "maw",
["Mamuju"] = "mqx",
["Mamulique"] = "emm",
["Mamusi"] = "kdf",
["Mamvu"] = "mdi",
["Man Met"] = "mml",
["มลายูแบบมานาโด"] = "xmm",
["Manam"] = "mva",
["Manambu"] = "mle",
["Manangba"] = "nmm",
["Manangkari"] = "znk",
["Manao"] = "awd-man",
["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",
["Mandeali"] = "mjl",
["Mander"] = "mqr",
["Mandingo"] = "man",
["Mandinka"] = "mnk",
["Mandjak"] = "mfv",
["Mandobo Atas"] = "aax",
["Mandobo Bawah"] = "bwp",
["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",
["Manikion"] = "mnx",
["Manipa"] = "mqp",
["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",
["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",
["Maranungku"] = "zmr",
["Mararit"] = "mgb",
["Maratino"] = "sai-mar",
["Marau"] = "mvr",
["Marawan"] = "awd-mar",
["Marba"] = "mpg",
["Marenje"] = "vmr",
["Marfa"] = "mvu",
["Margany"] = "zmc",
["Marghi South"] = "mfm",
["Margi"] = "mrt",
["Maria"] = "mds",
["Mariaté"] = "awd-mrt",
["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",
["Marsian"] = "ims",
["Martha's Vineyard Sign Language"] = "mre",
["Marti Ke"] = "zmg",
["Martu Wangka"] = "mpj",
["Martuthunira"] = "vma",
["Marúbo"] = "mzr",
["Masaba"] = "myx",
["Masadiit Itneg"] = "tis",
["Masakará"] = "sai-msk",
["Masalit"] = "mls",
["Masana"] = "mcn",
["Masbate Sorsogon"] = "bks",
["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 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",
["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"] = "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",
["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 Cornish"] = "cnx",
["Middle Kannada"] = "dra-mkn",
["Middle Median"] = "xme-mid",
["Middle Scots"] = "gmw-msc",
["Middle Watut"] = "mpl",
["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",
["Mina"] = "hna",
["Minaean"] = "inm",
["Minang"] = "xrg",
["Minaveha"] = "mvn",
["Minderico"] = "drc",
["Mindiri"] = "mpn",
["Mingang Doso"] = "mko",
["Mingo"] = "iro-min",
["Minica Huitoto"] = "hto",
["Minidien"] = "wii",
["Minigir"] = "vmg",
["Minjungbal"] = "xjb",
["Minkin"] = "xxm",
["Minokok"] = "mqq",
["Minriq"] = "mnq",
["Mintil"] = "mzt",
["Miraya Bikol"] = "rbl",
["Mire"] = "mvh",
["Mirgan"] = "zrg",
["Miriti"] = "mmv",
["Miriwoong Sign Language"] = "rsm",
["Miriwung"] = "mep",
["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",
["Miyobe"] = "soy",
["Mlabri"] = "mra",
["Mlahsö"] = "lhs",
["Mlap"] = "kja",
["Mlomp"] = "mlo",
["Mmaala"] = "mmu",
["Mmani"] = "buy",
["Mmen"] = "bfm",
["Mo"] = "wkd",
["Mo'da"] = "gbn",
["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",
["Moken"] = "mwt",
["Mokerang"] = "mft",
["Moklen"] = "mkm",
["Mokole"] = "mkl",
["Mokpwe"] = "bri",
["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",
["Monastic Sign Language"] = "mzg",
["Mondropolon"] = "npn",
["Mondé"] = "mnd",
["Mongghul"] = "mjg-mgl",
["Mongo"] = "lol",
["Mongol"] = "mgt",
["Mongolian Sign Language"] = "msr",
["Mongondow"] = "mog",
["Moni"] = "mnz",
["Monimbo"] = "mom",
["Mono (California)"] = "mnr",
["Mono (Cameroon)"] = "mru",
["Mono (Congo)"] = "mnh",
["Monom"] = "moo",
["Monsang Naga"] = "nmh",
["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",
["Moro"] = "mor",
["Moroccan Amazigh"] = "zgh",
["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",
["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",
["Musar"] = "mmi",
["Musasa"] = "smm",
["Musey"] = "mse",
["Musgu"] = "mug",
["Muskum"] = "mje",
["Musom"] = "msu",
["Mussau-Emira"] = "emi",
["Muthuvan"] = "muv",
["Mutu"] = "tuc",
["Muya"] = "mvm",
["Muyang"] = "muy",
["Muyuw"] = "myw",
["Muzi"] = "ymz",
["Muzo"] = "sai-muz",
["Mvanip"] = "mcj",
["Mvuba"] = "mxh",
["Mwaghavul"] = "sur",
["Mwali Comorian"] = "wlc",
["Mwan"] = "moa",
["Mwatebu"] = "mwa",
["Mwera"] = "mwe",
["Mwerlap"] = "mrm",
["Mwimbi-Muthambi"] = "mws",
["Mwotlap"] = "mlv",
["Myene"] = "mye",
["Mysian"] = "yms",
["Mzieme Naga"] = "nme",
["Mághdì"] = "gmd",
["Mün Chin"] = "mwq",
["Mündü"] = "muh",
["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",
["Nai"] = "bio",
["Najdi Arabic"] = "ars",
["Naka'ela"] = "nae",
["Nakai"] = "nkj",
["Nakame"] = "nib",
["Nakanai"] = "nak",
["Nakara"] = "nck",
["Nake"] = "nbk",
["Naki"] = "mff",
["Nakwi"] = "nax",
["Nalca"] = "nlc",
["Nali"] = "nss",
["Nalik"] = "nal",
["Nalu"] = "naj",
["Nalögo"] = "nlz",
["Namakura"] = "nmk",
["Namat"] = "nkm",
["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",
["Nanerigé Sénoufo"] = "sen",
["Nanga Dama Dogon"] = "nzz",
["Nankina"] = "nnk",
["Nanti"] = "cox",
["Nanticoke"] = "nnt",
["Nanubae"] = "afk",
["Naolan"] = "nai-nao",
["Napu"] = "npy",
["Nar Phu"] = "npa",
["Nara"] = "nrb",
["Narak"] = "nac",
["Narango"] = "nrg",
["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",
["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",
["Nedebang"] = "nec",
["Nefamese"] = "nef",
["Nefusa"] = "jbn",
["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",
["Nepali Kurux"] = "kxl",
["Nete"] = "net",
["Neve'ei"] = "vnm",
["Neverver"] = "lgk",
["New River Shasta"] = "nai-nrs",
["New Zealand Sign Language"] = "nzs",
["Neyo"] = "ney",
["Nez Perce"] = "nez",
["Nga La"] = "hlt",
["Ngaanyatjarra"] = "ntj",
["Ngadha"] = "nxg",
["Ngadjunmaya"] = "nju",
["Ngadjuri"] = "jui",
["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",
["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",
["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",
["Noiri"] = "noi",
["Nokuku"] = "nkk",
["Nomaande"] = "lem",
["Nomane"] = "nof",
["Nomatsiguenga"] = "not",
["Nomlaki"] = "nol",
["Nomu"] = "noh",
["Nonuya"] = "noj",
["Nooksack"] = "nok",
["Noon"] = "snf",
["Noone"] = "nhu",
["Nootka"] = "nuk",
["Nopala Chatino"] = "cya",
["Noric"] = "nrc",
["Norn"] = "nrn",
["Norra"] = "nrr",
["North Ambrym"] = "mmg",
["North Asmat"] = "nks",
["North Awyu"] = "yir",
["North Babar"] = "bcd",
["North Boma"] = "boh",
["North Central Mixe"] = "neq",
["North Efate"] = "llp",
["North Fali"] = "fll",
["North Giziga"] = "gis",
["North Levantine Arabic"] = "apc",
["North Marquesan"] = "mrq",
["North Mofu"] = "mfk",
["มลายูแบบโมลุกกะเหนือ"] = "max",
["North Muyu"] = "kti",
["North Nuaulu"] = "nni",
["North Picene"] = "nrp",
["North Slavey"] = "scs",
["North Tairora"] = "tbg",
["North Tanna"] = "tnn",
["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 Bontoc"] = "rbk",
["Northern Catanduanes Bicolano"] = "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 Khanty"] = "kca-nor",
["Northern Kissi"] = "kqs",
["Northern Lorung"] = "lbr",
["Northern Luri"] = "lrc",
["Northern Mansi"] = "mns-nor",
["Northern Mashan Hmong"] = "hmp",
["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 Pomo"] = "pej",
["Northern Puebla Nahuatl"] = "ncj",
["Northern Pumi"] = "pmi",
["Northern Qiandong Miao"] = "hea",
["Northern Qiang"] = "cng",
["Northern Rengma Naga"] = "nnl",
["Northern Roglai"] = "rog",
["Northern Saharan Berber"] = "mzb",
["Northern Selkup"] = "sel-nor",
["Northern Sierra Miwok"] = "nsq",
["Northern Subanen"] = "stb",
["Northern Tarahumara"] = "thh",
["Northern Tepehuan"] = "ntp",
["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",
["Northwestern Tamang"] = "tmk",
["Norwegian Sign Language"] = "nsl",
["Notre"] = "bly",
["Notsi"] = "ncf",
["Nottoway"] = "ntw",
["Nottoway-Meherrin"] = "nwy",
["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",
["Nupbikha"] = "npb",
["Nupe"] = "nup",
["Nusa Laut"] = "nul",
["Nusu"] = "nuf",
["Nutabe"] = "cba-nut",
["Nyabwa"] = "nwb",
["Nyagrong Minyag"] = "ero-nya",
["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 Senoufo"] = "sev",
["Nyaturu"] = "rim",
["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ü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",
["Ocotepec Mixtec"] = "mie",
["Ocotlán Zapotec"] = "zac",
["Od"] = "odk",
["Odiai"] = "bhf",
["Odoodee"] = "kkc",
["Odual"] = "odu",
["Odut"] = "oda",
["Ofayé"] = "opy",
["Ofo"] = "ofo",
["Ogbah"] = "ogc",
["Ogbia"] = "ogb",
["Ogbogolo"] = "ogg",
["Ogbronuagum"] = "ogu",
["Ogea"] = "eri",
["Oirata"] = "oia",
["Ojitlán Chinantec"] = "chj",
["Okanagan"] = "oka",
["Okiek"] = "oki",
["Oko-Eni-Osayen"] = "oks",
["Oko-Juwoi"] = "okj",
["Okobo"] = "okb",
["Okodia"] = "okd",
["Okolod"] = "kqv",
["Okpamheri"] = "opa",
["Okpe (Northwestern Edo)"] = "okx",
["Okpe (Southwestern Edo)"] = "oke",
["Okpela"] = "atg",
["Oksapmin"] = "opm",
["Oku"] = "oku",
["Okwanuchu"] = "nai-okw",
["Old Awadhi"] = "inc-oaw",
["Old Gutnish"] = "gmq-ogt",
["Old Kannada"] = "dra-okn",
["Old Kentish Sign Language"] = "okl",
["Old Komi"] = "urj-koo",
["Old Median"] = "xme-old",
["Old Navarro-Aragonese"] = "roa-ona",
["Old Novgorodian"] = "zle-ono",
["Old Prussian"] = "prg",
["รูซินเก่า"] = "zle-ort",
["อาหรับใต้เก่า"] = "sem-srb",
["Old Sundanese"] = "osn",
["Old Tati"] = "xme-ott",
["Old Telugu"] = "dra-ote",
["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",
["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",
["Ontenu"] = "ont",
["Ontong Java"] = "ojv",
["Oorlams"] = "oor",
["Opao"] = "opo",
["Opata"] = "opt",
["Opuuo"] = "lgn",
["Opón"] = "sai-opo",
["Oraon Sadri"] = "sdr",
["Orejón"] = "ore",
["Oring"] = "org",
["Orizaba Nahuatl"] = "nlv",
["Orléanais"] = "roa-orl",
["Ormu"] = "orz",
["Ormuri"] = "oru",
["Oro"] = "orx",
["Oro Win"] = "orw",
["Oroch"] = "oac",
["Oroha"] = "ora",
["Orok"] = "oaa",
["Orokaiva"] = "okv",
["Oroko"] = "bdu",
["Orokolo"] = "oro",
["Oroqen"] = "orh",
["Orowe"] = "bpk",
["Oruma"] = "orr",
["Orya"] = "ury",
["Osage"] = "osa",
["Osamayi"] = "syx",
["Osatu"] = "ost",
["Oscan"] = "osc",
["Ososo"] = "oso",
["Ot Danum"] = "otd",
["Otank"] = "uta",
["Oti"] = "oti",
["Otomaco"] = "sai-oto",
["Otoro"] = "otr",
["Ottawa"] = "otw",
["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-Hng"] = "pha",
["Paamese"] = "pma",
["Paasaal"] = "sig",
["Pacahuara"] = "pcp",
["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",
["Pajapan Nahuatl"] = "nhp",
["Pak-Tong"] = "pkg",
["Pakanha"] = "pkn",
["Pakistan Sign Language"] = "pks",
["Paku"] = "pku",
["Paku Karen"] = "jkp",
["Pal"] = "abw",
["Palaic"] = "plq",
["Palaka Senoufo"] = "plr",
["Palantla Chinantec"] = "cpa",
["Palawan Batak"] = "bya",
["Paleni"] = "pnl",
["Palenquero"] = "pln",
["Palewyami Yokuts"] = "yok-ply",
["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",
["Pangwa"] = "pbr",
["Panim"] = "pnr",
["Paniya"] = "pcg",
["Pankararé"] = "pax",
["Pankararú"] = "paz",
["Pankhu"] = "pkh",
["Pannei"] = "pnc",
["Panobo"] = "pno",
["Panyi Bai"] = "bfc",
["Panyjima"] = "pnw",
["Panzaleo"] = "sai-pnz",
["Pao"] = "ppa",
["Papantla Totonac"] = "top",
["Papapana"] = "ppn",
["Papar"] = "dpp",
["Papasena"] = "pas",
["Papel"] = "pbo",
["Papi"] = "ppe",
["Papora"] = "ppu",
["Papua New Guinean Sign Language"] = "pgz",
["Papuan Malay"] = "pmy",
["Papuma"] = "ppm",
["Para Naga"] = "pzn",
["Parachi"] = "prc",
["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",
["พาร์เทีย"] = "xpr",
["Parya"] = "paq",
["Pará Gavião"] = "gvp",
["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",
["Pattapu"] = "ptq",
["Patwin"] = "pwi",
["Paulohi"] = "plh",
["Paumarí"] = "pad",
["Paunaka"] = "pnk",
["Pauri Bareli"] = "bfb",
["Pauserna"] = "psm",
["Pawaia"] = "pwa",
["Pawnee"] = "paw",
["Payaguá"] = "sai-pyg",
["Paynamar"] = "pmr",
["Pazeh"] = "pzh",
["Pe"] = "pai",
["ปอร์"] = "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",
["Penobscot"] = "aaq",
["Penrhyn"] = "pnh",
["Pentlatch"] = "ptw",
["Perai"] = "wet",
["Peranakan Indonesian"] = "pea",
["Perema"] = "wom",
["Pericú"] = "nai-per",
["Pero"] = "pip",
["Persian Sign Language"] = "psc",
["Peruvian Sign Language"] = "prl",
["Petapa Zapotec"] = "zpe",
["Petats"] = "pex",
["Petjo"] = "pey",
["Peñoles Mixtec"] = "mil",
["Phai"] = "prt",
["Phala"] = "ypa",
["Phana'"] = "phq",
["Phangduwali"] = "phw",
["Phende"] = "pem",
["Philippine Sign Language"] = "psp",
["Philistine"] = "mis-phi",
["Phimbi"] = "phm",
["Phola"] = "ypg",
["Pholo"] = "yip",
["Phom"] = "nph",
["Phong-Kniang"] = "pnx",
["Phrygian"] = "xpg",
["Phudagi"] = "phd",
["Phuie"] = "pug",
["Phukha"] = "phh",
["Phuma"] = "ypm",
["Phuong"] = "phg",
["Phupa"] = "ypp",
["Phupha"] = "yph",
["Phuthi"] = "bnt-phu",
["Phuza"] = "ypz",
["Piamatsina"] = "ptr",
["Piame"] = "pin",
["Piapoco"] = "pio",
["Piaroa"] = "pid",
["Pichinglis"] = "fpe",
["Pichis Ashéninka"] = "cpu",
["Pictish"] = "xpi",
["Picuris"] = "nai-pic",
["Pidgin Delaware"] = "dep",
["Pidgin Iha"] = "ihb",
["Pidgin Onin"] = "onx",
["Pijao"] = "pij",
["Pije"] = "piz",
["Pijin"] = "pis",
["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",
["Pirahã"] = "myp",
["Piratapuyo"] = "pir",
["Pirlatapa"] = "bxi",
["Piro"] = "pie",
["Pirriya"] = "xpa",
["Pisabo"] = "pig",
["Pisaflores Tepehua"] = "tpp",
["Piscataway"] = "psy",
["Pisidian"] = "xps",
["Pitcairn-Norfolk"] = "pih",
["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",
["Playero"] = "gob",
["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 Sign Language"] = "pso",
["Polonombauk"] = "plb",
["Pom"] = "pmo",
["Ponam"] = "ncc",
["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 Sign Language"] = "psr",
["Potawatomi"] = "pot",
["Potiguára"] = "pog",
["Poumei Naga"] = "pmx",
["Pouye"] = "bye",
["Powari"] = "pwr",
["Powhatan"] = "pim",
["Poyanáwa"] = "pyn",
["Prasuni"] = "prn",
["Pre-Samnite"] = "itc-psa",
["Primitive Irish"] = "pgl",
["Principense"] = "pre",
["Proto-Abkhaz-Abaza"] = "cau-abz-pro",
["Proto-Amuesha-Chamicuro"] = "awd-amc-pro",
["Proto-Andian"] = "cau-and-pro",
["Proto-Apachean"] = "apa-pro",
["Proto-Arawa"] = "auf-pro",
["Proto-Arawak"] = "awd-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-Avaro-Andian"] = "cau-ava-pro",
["Proto-Bahnaric"] = "mkh-ban-pro",
["Proto-Bai"] = "sit-bai-pro",
["Proto-Batak"] = "btk-pro",
["Proto-Binanderean"] = "paa-bin-pro",
["Proto-Bodish"] = "sit-bdi-pro",
["Proto-Bongo-Bagirmi"] = "csu-bba-pro",
["Proto-Boran"] = "sai-bor-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-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-Cerrado"] = "sai-cer-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-Eastern Jebel"] = "sdv-eje-pro",
["Proto-Eastern Oti-Volta"] = "nic-eov-pro",
["Proto-Edekiri"] = "alv-edk-pro",
["Proto-Edoid"] = "alv-edo-pro",
["Proto-Ersuic"] = "sit-ers-pro",
["Proto-Eskimo-Aleut"] = "esx-pro",
["Proto-Fali"] = "alv-fli-pro",
["Proto-Gbaya"] = "gba-pro",
["Proto-Grassfields"] = "nic-grf-pro",
["Proto-Guang"] = "alv-gng-pro",
["Proto-Gurunsi"] = "nic-gns-pro",
["Proto-Halmahera-Cenderawasih"] = "poz-hce-pro",
["Proto-Heiban"] = "alv-hei-pro",
["Proto-Highland East Cushitic"] = "cus-hec-pro",
["Proto-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-Iroquoian"] = "iro-pro",
["Proto-Iwaidjan"] = "aus-wdj-pro",
["Proto-Jukunoid"] = "nic-jkn-pro",
["Proto-Jê"] = "sai-jee-pro",
["Proto-Kadu"] = "qfa-kad-pro",
["Proto-Kalapuyan"] = "nai-klp-pro",
["Proto-Kam-Sui"] = "qfa-kms-pro",
["Proto-Kampa"] = "awd-kmp-pro",
["Proto-Kamta"] = "inc-krd-pro",
["Proto-Katuic"] = "mkh-kat-pro",
["Proto-Kham"] = "sit-kha-pro",
["Proto-Khanty"] = "kca-pro",
["Proto-Kho-Bwa"] = "sit-khb-pro",
["Proto-Khoe"] = "khi-kho-pro",
["Proto-Koman"] = "ssa-kom-pro",
["Proto-Komisenian"] = "ira-kms-pro",
["Proto-Kru"] = "kro-pro",
["Proto-Kuki-Chin"] = "tbq-kuk-pro",
["Proto-Kuliak"] = "ssa-klk-pro",
["Proto-Kwa"] = "alv-kwa-pro",
["Proto-Lalo"] = "tbq-lal-pro",
["Proto-Lezghian"] = "cau-lzg-pro",
["Proto-Lower Cross River"] = "nic-lcr-pro",
["Proto-Maidun"] = "nai-mdu-pro",
["Proto-Mande"] = "dmn-pro",
["Proto-Mangbetu"] = "csu-maa-pro",
["Proto-Mansi"] = "mns-pro",
["Proto-Mari"] = "chm-pro",
["Proto-Masa"] = "cdc-mas-pro",
["Proto-Mazatec"] = "omq-maz-pro",
["Proto-Medo-Parthian"] = "ira-mpr-pro",
["Proto-Mixe-Zoque"] = "nai-miz-pro",
["Proto-Mixtec"] = "omq-mxt-pro",
["Proto-Mixtecan"] = "omq-mix-pro",
["Proto-Mordvinic"] = "urj-mdv-pro",
["Proto-Mumuye"] = "alv-mum-pro",
["Proto-Munji-Yidgha"] = "ira-mny-pro",
["Proto-Muskogean"] = "nai-mus-pro",
["Proto-Na-Dene"] = "xnd-pro",
["Proto-Naish"] = "sit-nas-pro",
["Proto-Nawiki"] = "awd-nwk-pro",
["Proto-Nilo-Saharan"] = "ssa-pro",
["Proto-Nilotic"] = "sdv-nil-pro",
["Proto-North Halmahera"] = "paa-nha-pro",
["Proto-North Iroquoian"] = "iro-nor-pro",
["Proto-Northern Jê"] = "sai-nje-pro",
["Proto-Northern Naga"] = "sit-kon-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-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-Pama-Nyungan"] = "aus-pam-pro",
["Proto-Paresi-Waura"] = "awd-prw-pro",
["แพริกดั้งเดิม"] = "mkh-pea-pro",
["Proto-Plateau"] = "nic-plt-pro",
["Proto-Plateau Penutian"] = "nai-plp-pro",
["Proto-Pomo"] = "nai-pom-pro",
["Proto-Puroik"] = "sit-khp-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-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-Shughni-Roshani"] = "ira-shr-pro",
["Proto-Shughni-Yazghulami"] = "ira-shy-pro",
["Proto-Shughni-Yazghulami-Munji"] = "ira-sym-pro",
["Proto-Siouan"] = "sio-pro",
["Proto-Siouan-Catawban"] = "nai-sca-pro",
["Proto-Songhay"] = "son-pro",
["Proto-Sotho-Tswana"] = "bnt-sts-pro",
["Proto-South Cushitic"] = "cus-sou-pro",
["Proto-Southern Jê"] = "sai-sje-pro",
["Proto-Ta-Arawak"] = "awd-taa-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-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-Ubangian"] = "nic-ubg-pro",
["Proto-Upper Cross River"] = "nic-ucr-pro",
["Proto-Utian"] = "nai-utn-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-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",
["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",
["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",
["Puyo-Paekche"] = "xpp",
["Puyuma"] = "pyu",
["Pwaamèi"] = "pme",
["Pwapwâ"] = "pop",
["Pyapun"] = "pcw",
["Pye Krumen"] = "pye",
["Pyemmairre"] = "xpb",
["Pyen"] = "pyy",
["Pykobjê"] = "sai-pyk",
["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",
["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",
["ระแด"] = "rad",
["Raetic"] = "xrr",
["Raga"] = "lml",
["Rahambuu"] = "raz",
["Rajah Kabunsuwan Manobo"] = "mqk",
["Raji"] = "rji",
["Rajong"] = "rjg",
["Rajput Garasia"] = "gra",
["Rakahanga-Manihiki"] = "rkh",
["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",
["Rapoisi"] = "kyx",
["Rapting"] = "rpt",
["Rara Bakati'"] = "lra",
["Rasawa"] = "rac",
["Ratagnon"] = "btn",
["Ratahan"] = "rth",
["Rathawi"] = "rtw",
["Rathwi Bareli"] = "bgd",
["Raute"] = "rau",
["Ravula"] = "yea",
["Rawa"] = "rwo",
["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",
["ฟรังโกเนียแบบไรน์"] = "gmw-rfr",
["Riang"] = "ril",
["Riantana"] = "ran",
["Ribun"] = "rir",
["Rigwe"] = "iri",
["Rikbaktsa"] = "rkb",
["Rincón Zapotec"] = "zar",
["Ringgou"] = "rgu",
["Ririo"] = "rri",
["Ritarungo"] = "rit",
["Riung"] = "riu",
["Riverain Sango"] = "snj",
["Rogo"] = "rod",
["Roma"] = "rmm",
["Romam"] = "rmx",
["Romanian Sign Language"] = "rms",
["Romano-Greek"] = "rge",
["Romano-Serbian"] = "rsb",
["Romanova"] = "rmv",
["Romblomanon"] = "rol",
["Rombo"] = "rof",
["Romkun"] = "rmk",
["Ron"] = "cla",
["Ronga"] = "rng",
["Rongga"] = "ror",
["Rongmei Naga"] = "nbu",
["Rongpo"] = "rnp",
["Ronji"] = "roe",
["Roon"] = "rnn",
["Roria"] = "rga",
["Roro"] = "rro",
["Rotokas"] = "roo",
["Rotuman"] = "rtm",
["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",
["Rutul"] = "rut",
["Ruuli"] = "ruc",
["Ruwund"] = "rnd",
["Rwa"] = "rwk",
["Rwandan Sign Language"] = "rsn",
["Réunion Creole French"] = "rcf",
["Sa"] = "sax",
["Sa'a"] = "apb",
["Sa'ban"] = "snv",
["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",
["Saep"] = "spd",
["Safaitic"] = "sem-saf",
["Safaliba"] = "saf",
["Safeyoka"] = "apz",
["Safwa"] = "sbk",
["Sagala"] = "sbm",
["Sagalla"] = "tga",
["Sahaptin"] = "nai-spt",
["Sahu"] = "saj",
["Saisiyat"] = "xsy",
["Sajau Basap"] = "sjb",
["Sakachep"] = "sch",
["Sakam"] = "skm",
["Sakao"] = "sku",
["Sakata"] = "skt",
["Sake"] = "sak",
["Sala"] = "shq",
["Salampasu"] = "slx",
["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",
["Sambalpuri"] = "spv",
["Sambe"] = "xab",
["Samberigi"] = "ssx",
["Samburu"] = "saq",
["Samei"] = "smh",
["Samo"] = "smq",
["Samoan Plantation Pidgin"] = "crp-spp",
["Samogitian"] = "sgs",
["Samosa"] = "swm",
["Sampang"] = "rav",
["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",
["Sangtam Naga"] = "nsa",
["Sangu (Gabon)"] = "snq",
["Sangu (Tanzania)"] = "sbp",
["Sani"] = "ysn",
["Sanie"] = "ysy",
["Saniyo-Hiyewe"] = "sny",
["Sankaran Maninka"] = "msc",
["Sansi"] = "ssi",
["Santa Catarina Albarradas Zapotec"] = "ztn",
["Santa Inés Ahuatempan Popoloca"] = "pca",
["Santa Inés Yatzechi Zapotec"] = "zpn",
["Santa Lucía Monteverde Mixtec"] = "mdv",
["Santa María La Alta Nahuatl"] = "nhz",
["Santa María Quiegolani Zapotec"] = "zpi",
["Santa María Zacatepec Mixtec"] = "mza",
["Santa Teresa Cora"] = "cok",
["Santiago Xanica Zapotec"] = "zpr",
["Santo Domingo Albarradas Zapotec"] = "zas",
["Sanumá"] = "xsu",
["Sanxiang Min"] = "nan-zsh",
["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",
["ซารามักกา"] = "srm",
["Sarangani Blaan"] = "bps",
["Sarangani Manobo"] = "mbs",
["Sarasira"] = "zsa",
["Saraveca"] = "sar",
["Sarawak Malay"] = "poz-sml",
["Sarikoli"] = "srh",
["Sarli"] = "sdf",
["Sartang"] = "onp",
["Sarua"] = "swy",
["Sarudu"] = "sdu",
["Saruga"] = "sra",
["Sasak"] = "sas",
["Sasaru"] = "sxs",
["Satawalese"] = "stw",
["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",
["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",
["Seim"] = "sim",
["Seimat"] = "ssg",
["Seit-Kaitetu"] = "hik",
["Sekani"] = "sek",
["Sekapan"] = "skp",
["Sekar"] = "skz",
["Seke"] = "skj",
["Sekele"] = "vaj",
["Seki"] = "syi",
["Seko Padang"] = "skx",
["Seko Tengah"] = "sko",
["Sekpele"] = "lip",
["Selangor Sign Language"] = "kgi",
["Selaru"] = "slu",
["Selayar"] = "sly",
["Selee"] = "snw",
["Selepet"] = "spl",
["Selk'nam"] = "ona",
["Selonian"] = "sxl",
["Selungai Murut"] = "slg",
["Seluwasan"] = "sws",
["Sema"] = "nsm",
["Semandang"] = "sdm",
["Semaq Beri"] = "szc",
["Sembakung Murut"] = "sbr",
["Semelai"] = "sza",
["Semigallian"] = "xzm",
["Semimi"] = "etz",
["Semnam"] = "ssm",
["Semnani"] = "smy",
["Sempan"] = "xse",
["Sena"] = "seh",
["Senara Sénoufo"] = "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",
["Sepik Mari"] = "mbx",
["Sera"] = "sry",
["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",
["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",
["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",
["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",
["Shoo-Minda-Nye"] = "bcv",
["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",
["Siculo-Arabic"] = "sqr",
["Sidetic"] = "xsd",
["Sie"] = "erg",
["Sierra Leone Sign Language"] = "sgx",
["Sierra Negra Nahuatl"] = "nsu",
["Sierra de Juárez Zapotec"] = "zaa",
["Sighu"] = "sxe",
["Sihan"] = "snr",
["Sika"] = "ski",
["Sikaritai"] = "tty",
["Sikiana"] = "sik",
["Sikule"] = "skh",
["Sila"] = "slt",
["Silacayoapan Mixtec"] = "mks",
["Sileibi"] = "sbq",
["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",
["Sindhi Bhil"] = "sbn",
["Sindihui Mixtec"] = "xts",
["Singa"] = "sgm",
["Singapore Sign Language"] = "sls",
["Singpho"] = "sgp",
["Sinicahua Mixtec"] = "xti",
["Sininkere"] = "skq",
["Sinte Romani"] = "rmo",
["Sinyar"] = "sys",
["Sinúfana"] = "sai-sin",
["Sio"] = "xsi",
["Siona"] = "snn",
["Sipakapense"] = "qum",
["Sira"] = "swj",
["Siraya"] = "fos",
["Sirenik"] = "ysr",
["Siri"] = "sir",
["Siriano"] = "sri",
["Sirionó"] = "srq",
["Sirmauri"] = "srx",
["Siroi"] = "ssd",
["Sisaala"] = "sld",
["Sissano"] = "sso",
["Situ"] = "sit-sit",
["Siuslaw"] = "sis",
["Sivandi"] = "siy",
["Sivia Sign Language"] = "lsv",
["Siwai"] = "siw",
["Siwi"] = "siz",
["Siwu"] = "akp",
["Siyin Chin"] = "csy",
["Skagit"] = "ska",
["Skalvian"] = "svx",
["Ske"] = "ske",
["Skepi Creole Dutch"] = "skw",
["Skolt Sami"] = "sms",
["Skou"] = "skv",
["Slavomolisano"] = "svm",
["Slovakian Sign Language"] = "svk",
["Small Flowery Miao"] = "sfm",
["Smärky Kanum"] = "kxq",
["Snohomish"] = "sno",
["So'a"] = "ssq",
["Sobei"] = "sob",
["Sochiapam Chinantec"] = "cso",
["Soga"] = "xog",
["Sogdian"] = "sog",
["Sok"] = "skk",
["Sokna"] = "swn",
["Soko"] = "soc",
["Sokoro"] = "sok",
["Solano"] = "xso",
["Soli"] = "sby",
["Solombala English"] = "crp-slb",
["Solon"] = "tuw-sol",
["Solong"] = "aaw",
["Solos"] = "sol",
["Som"] = "smc",
["Somba-Siawari"] = "bmu",
["Somra"] = "ntx",
["Somrai"] = "sor",
["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",
["Sou"] = "sqq",
["South African Sign Language"] = "sfs",
["South Awyu"] = "aws",
["South Boma"] = "bnt-sbo",
["South Central Banda"] = "lnl",
["South Central Dinka"] = "dib",
["South Efate"] = "erk",
["South Fali"] = "fal",
["South Giziga"] = "giz",
["South Lembata"] = "lmf",
["South Marquesan"] = "mqm",
["South Muyu"] = "kts",
["South Nuaulu"] = "nxl",
["South Picene"] = "spx",
["South Slavey"] = "xsl",
["South Tairora"] = "omw",
["South Ucayali Ashéninka"] = "cpy",
["South Watut"] = "mcy",
["Southeast Ambrym"] = "tvk",
["Southeast Babar"] = "vbb",
["Southeast Ijo"] = "ijs",
["Southeast Pashayi"] = "psi",
["Southeast Tasmanian"] = "xpf",
["Southeastern Dinka"] = "dks",
["Southeastern Ixtlán Zapotec"] = "zpd",
["Southeastern Kolami"] = "nit",
["Southeastern Nochixtlán Mixtec"] = "mxy",
["Southeastern Pomo"] = "pom",
["Southeastern Puebla Nahuatl"] = "npl",
["Southeastern Tarahumara"] = "tcu",
["Southeastern Tepehuan"] = "stp",
["Southern Alta"] = "agy",
["Southern Bai"] = "bfs",
["Southern Birifor"] = "biv",
["Southern Bobo"] = "bwq",
["Southern Bontoc"] = "obk",
["Southern Carrier"] = "caf",
["Southern Catanduanes Bicolano"] = "bln",
["Southern Dagaare"] = "dga",
["Southern East Cree"] = "crj",
["Southern Ghale"] = "ghe",
["Southern Grebo"] = "grj",
["Southern Guiyang Hmong"] = "hmy",
["Southern Haida"] = "hax",
["Southern Hindko"] = "hnd",
["Southern Kalapuya"] = "sxk",
["Southern Kalinga"] = "ksc",
["Southern Khanty"] = "kca-sou",
["Southern Kissi"] = "kss",
["Southern Kiwai"] = "kjd",
["Southern Kurdish"] = "sdh",
["Southern Lolopo"] = "ysp",
["Southern Lorung"] = "lrr",
["Southern Luri"] = "luz",
["Southern Ma'di"] = "snm",
["Southern Mansi"] = "mns-sou",
["Southern Mashan Hmong"] = "hma",
["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 Pomo"] = "peq",
["Southern Puebla Mixtec"] = "mit",
["Southern Puget Sound Salish"] = "slh",
["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 Samo"] = "sbd",
["Southern Selkup"] = "sel-sou",
["Southern Sierra Miwok"] = "skd",
["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 Pashayi"] = "psh",
["Southwest Tanna"] = "nwi",
["Southwestern Bontoc"] = "vbk",
["Southwestern Dinka"] = "dik",
["Southwestern Fars"] = "fay",
["Southwestern Guiyang Hmong"] = "hmg",
["Southwestern Huishui Hmong"] = "hmh",
["Southwestern Nisu"] = "nsv",
["Southwestern Tamang"] = "tsf",
["Southwestern Tarahumara"] = "twr",
["Southwestern Tepehuan"] = "tla",
["Southwestern Tlaxiaco Mixtec"] = "meh",
["Sowa"] = "sww",
["Sowanda"] = "sow",
["Soyaltepec Mazatec"] = "vmp",
["Soyaltepec Mixtec"] = "vmq",
["Spanish Sign Language"] = "ssp",
["Spiti Bhoti"] = "spt",
["Spokane"] = "spo",
["Squamish"] = "squ",
["ซรานันโตโง"] = "srn",
["Sri Lankan Creole Malay"] = "sci",
["Sri Lankan Sign Language"] = "sqs",
["Stau"] = "ero-tau",
["Stod Bhoti"] = "sbu",
["Stoney"] = "sto",
["Suabo"] = "szp",
["Suarmin"] = "seo",
["Suau"] = "swp",
["Suba"] = "sxb",
["Suba-Simbiti"] = "ssc",
["Subi"] = "xsj",
["Subiya"] = "sbs",
["Subtiaba"] = "sut",
["Sudest"] = "tgo",
["Suena"] = "sue",
["Suga"] = "sgi",
["Suganga"] = "sug",
["Sugut Dusun"] = "kzs",
["Suki"] = "sui",
["Suku"] = "sub",
["Sukuma"] = "suk",
["Sukur"] = "syk",
["Sukurum"] = "zsu",
["Sula"] = "szn",
["Sulka"] = "sua",
["Sulod"] = "srg",
["Suma"] = "sqm",
["Sumariup"] = "siv",
["Sumau"] = "six",
["Sumbawa"] = "smw",
["Sumbwa"] = "suw",
["Sumtu Chin"] = "csv",
["Sunam"] = "ssk",
["Sungwadaga"] = "mwo",
["Sungwadia"] = "mrb",
["Sunum"] = "ymn",
["Sunwar"] = "suz",
["Suoy"] = "syo",
["Supyire"] = "spp",
["Sur"] = "tdl",
["Surbakhal"] = "sbj",
["Suri"] = "suq",
["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",
["Swampy Cree"] = "csw",
["สวาซี"] = "ss",
["Swedish Sign Language"] = "swl",
["Swiss-French Sign Language"] = "ssr",
["Swiss-German Sign Language"] = "sgg",
["Swiss-Italian Sign Language"] = "slf",
["Swo"] = "sox",
["Syenara Senoufo"] = "shz",
["Sácata"] = "sai-sac",
["São Paulo Kaingáng"] = "zkp",
["Sãotomense"] = "cri",
["Sìcìté Sénoufo"] = "sep",
["Sîshëë"] = "sih",
["Sô"] = "sss",
["T'en"] = "tct",
["Taabwa"] = "tap",
["Taba"] = "mky",
["Tabaa Zapotec"] = "zat",
["Tabancale"] = "sai-tab",
["Tabaru"] = "tby",
["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",
["Tagal Murut"] = "mvv",
["Tagbu"] = "tbm",
["Tagdal"] = "tda",
["Tagish"] = "tgx",
["Tagoi"] = "tag",
["Tagwana Senoufo"] = "tgw",
["Tahltan"] = "tht",
["Tai"] = "taw",
["Tai Hang Tong"] = "thc",
["Tai Hongjin"] = "tiz",
["Tai Loi"] = "tlq",
["Tai Long"] = "thi",
["Tai Pao"] = "tpo",
["Tai Thanh"] = "tmm",
["Tai Ya"] = "cuu",
["Taiap"] = "gpn",
["Taikat"] = "aos",
["Taimyr Pidgin Russian"] = "crp-tpr",
["Tainae"] = "ago",
["Tairuma"] = "uar",
["Taita"] = "dav",
["Taivoan"] = "tvx",
["Taiwan Sign Language"] = "tss",
["Taje"] = "pee",
["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",
["Tambunan Dusun"] = "kzt",
["Tami"] = "tmy",
["Tamki"] = "tax",
["Tamnim Citak"] = "tml",
["Tampias Lobu"] = "low",
["Tampuan"] = "tpu",
["Tampulma"] = "tpm",
["Tanacross"] = "tcb",
["Tanahmerah"] = "tcm",
["Tanapag"] = "tpv",
["Tanchangya"] = "tnv",
["Tandia"] = "tni",
["Tanema"] = "tnx",
["Tangale"] = "tan",
["Tanggu"] = "tgu",
["Tangkhul Naga"] = "nmf",
["Tangko"] = "tkx",
["Tangoa"] = "tgp",
["Tangsa"] = "nst",
["Tanguat"] = "tbs",
["Tangwang"] = "mis-tnw",
["Tanimbili"] = "tbe",
["Tanimuca-Retuarã"] = "tnc",
["Tanjijili"] = "uji",
["Tanudan Kalinga"] = "kml",
["Tanzanian Sign Language"] = "tza",
["Tapachultec"] = "nai-tap",
["Taparita"] = "sai-tpr",
["Tapayuna"] = "sai-tap",
["Tapeba"] = "tbb",
["Tapei"] = "afp",
["Tapieté"] = "tpj",
["Tapirapé"] = "taf",
["Tar Gula"] = "kcm",
["Tara Baka"] = "bdh",
["Tarairiú"] = "sai-trr",
["Tarantino"] = "roa-tar",
["Tarao"] = "tro",
["Taraon"] = "mhu",
["Tareng"] = "tgr",
["Tariana"] = "tae",
["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",
["Tataviam"] = "azc-tat",
["Tatuyo"] = "tav",
["Tauade"] = "ttd",
["Taulil"] = "tuh",
["Taungyo"] = "tco",
["Taupota"] = "tpa",
["Tause"] = "tad",
["Taushiro"] = "trr",
["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",
["Tayabas Ayta"] = "ayy",
["Taymanitic"] = "sem-tay",
["Tayo"] = "cks",
["Tchitchege"] = "tck",
["Tchumbuli"] = "bqa",
["Te'un"] = "tve",
["Teanu"] = "tkw",
["Tebul Sign Language"] = "tsy",
["Tebul Ure Dogon"] = "dtu",
["Tecpatlán Totonac"] = "tcw",
["Tedaga"] = "tuq",
["Tedim Chin"] = "ctd",
["Tee"] = "tkq",
["Tefaro"] = "tfo",
["Tegali"] = "ras",
["Tehit"] = "kps",
["Tehuelche"] = "teh",
["Teiwa"] = "twe",
["Tejalapan Zapotec"] = "ztt",
["Teke-Fuumu"] = "ifm",
["Teke-Kukuya"] = "kkw",
["Teke-Laali"] = "lli",
["Teke-Tege"] = "teg",
["Teke-Tsaayi"] = "tyi",
["Teke-Tyee"] = "tyx",
["Tektiteko"] = "ttc",
["Tela-Masbuar"] = "tvm",
["Telefol"] = "tlf",
["Teluti"] = "tlt",
["Tem"] = "kdh",
["Temascaltepec Nahuatl"] = "nhv",
["Tembé"] = "tqb",
["Teme"] = "tdo",
["Temein"] = "teq",
["Temi"] = "soz",
["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",
["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",
["Tereno"] = "ter",
["Teressa"] = "tef",
["Tereweng"] = "twg",
["Teribe"] = "tfr",
["Terik"] = "tec",
["Termanu"] = "twu",
["Ternateño"] = "tmg",
["Tese"] = "keg",
["Teshenawa"] = "twc",
["Tetela"] = "tll",
["Tetelcingo Nahuatl"] = "nhg",
["Tetete"] = "teb",
["Tetserret"] = "tez",
["Tetun Dili"] = "tdt",
["Teushen"] = "sai-teu",
["Teutila Cuicatec"] = "cut",
["Tewa"] = "tew",
["Texcatepec Otomi"] = "otx",
["Texistepec Popoluca"] = "poq",
["Texmelucan Zapotec"] = "zpz",
["Tezoatlán Mixtec"] = "mxb",
["Tha"] = "thy",
["Thachanadan"] = "thn",
["Thado Chin"] = "tcz",
["Thaiphum Chin"] = "cth",
["Thakali"] = "ths",
["Thamudic"] = "sem-tha",
["Thangal Naga"] = "nki",
["Thangmi"] = "thf",
["Thao"] = "ssf",
["Tharaka"] = "thk",
["Tharrgari"] = "dhr",
["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 Sign Language"] = "lsn",
["Ticuna"] = "tca",
["Tidaá Mixtec"] = "mtx",
["Tiemacèwè Bozo"] = "boo",
["Tiene"] = "tii",
["Tifal"] = "tif",
["Tigak"] = "tgc",
["Tigon Mbembe"] = "nza",
["Tii"] = "txq",
["Tijaltepec Mixtec"] = "xtl",
["Tikar"] = "tik",
["Tikopia"] = "tkp",
["Tilapa Otomi"] = "otl",
["Tillamook"] = "til",
["Tilquiapan Zapotec"] = "zts",
["Tilung"] = "tij",
["Tima"] = "tms",
["Timbe"] = "tim",
["Timor Pidgin"] = "tvy",
["Timote"] = "sai-tim",
["Timucua"] = "tjm",
["Timugon Murut"] = "tih",
["Tinani"] = "lbf",
["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",
["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",
["Tocho"] = "taz",
["Todrah"] = "tdr",
["Tofanma"] = "tlg",
["Tofin Gbe"] = "tfi",
["Togbo-Vara Banda"] = "tor",
["Togoyo"] = "tgy",
["Tojolabal"] = "toj",
["Toka-Leya"] = "dov",
["Tokano"] = "zuh",
["Tokelauan"] = "tkl",
["Toki Pona"] = "tok",
["Tol"] = "jic",
["Tolai"] = "ksd",
["Tolaki"] = "lbw",
["Tolomako"] = "tlm",
["Tolowa"] = "tol",
["Toloza"] = "ytl",
["Toma"] = "tod",
["Tomadino"] = "tdi",
["Tombelala"] = "ttp",
["Tombonuo"] = "txa",
["Tombulu"] = "tom",
["Tomini"] = "txm",
["Tommeginne"] = "xpv",
["Tommo So"] = "dto",
["Tomo Kan Dogon"] = "dtm",
["Tomoip"] = "tqp",
["Tondano"] = "tdn",
["Tonga (Malawi)"] = "tog",
["Tonga (Mozambique)"] = "toh",
["Tonga (Zambia)"] = "toi",
["Tongwe"] = "tny",
["Tonjon"] = "tjn",
["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",
["ครีโอลช่องแคบทอร์เรส"] = "tcs",
["Torricelli"] = "tei",
["Torricelli Yau"] = "yyu",
["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",
["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",
["Tsucuba"] = "cbq",
["Tsum"] = "ttz",
["Tsuut'ina"] = "srs",
["Tsuvadi"] = "tvd",
["Tsuvan"] = "tsh",
["Tswa"] = "tsc",
["Tswapong"] = "two",
["Tuamotuan"] = "pmt",
["Tuareg"] = "tmh",
["Tubar"] = "tbu",
["Tucano"] = "tuo",
["Tugen"] = "tuy",
["Tugun"] = "tzn",
["Tugutil"] = "tuj",
["Tukang Besi North"] = "khc",
["Tukang Besi South"] = "bhq",
["Tuki"] = "bag",
["Tukpa"] = "tpq",
["Tukudede"] = "tkd",
["Tukumanféd"] = "tkf",
["Tula"] = "tul",
["Tule-Kaweah Yokuts"] = "yok-tky",
["Tulehu"] = "tlu",
["Tulishi"] = "tey",
["Tulu-Bohuai"] = "rak",
["Tulua"] = "aus-tul",
["Tuma-Irumu"] = "iou",
["Tumak"] = "tmc",
["Tumbuka"] = "tum",
["Tumi"] = "kku",
["Tumleo"] = "tmq",
["Tumtum"] = "tbr",
["Tumulung Sisaala"] = "sil",
["Tundra Enets"] = "enh",
["Tundra Nenets"] = "yrk-tun",
["Tunen"] = "tvu",
["Tungag"] = "lcm",
["Tunggare"] = "trt",
["Tunia"] = "tug",
["Tunica"] = "tun",
["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 Sign Language"] = "tsm",
["Turks and Caicos Creole English"] = "tch",
["Turoyo"] = "tru",
["Turumsa"] = "tqm",
["Tuscarora"] = "tus",
["Tutelo"] = "tta",
["Tutong"] = "ttg",
["Tutsa Naga"] = "tvt",
["Tutuba"] = "tmi",
["Tututepec Mixtec"] = "mtu",
["Tututni"] = "tuu",
["Tuwali Ifugao"] = "ifk",
["Tuwari"] = "tww",
["Tuwuli"] = "bov",
["Tuxináwa"] = "tux",
["Tuxá"] = "tud",
["Tuyuca"] = "tue",
["Tuyuhun"] = "mis-tuh",
["Twana"] = "twa",
["Twendi"] = "twn",
["Tyap"] = "kcg",
["Tyaraity"] = "woa",
["Tyerrernotepanner"] = "xph",
["Tz'utujil"] = "tzj",
["Tzeltal"] = "tzh",
["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",
["Udihe"] = "ude",
["Uduk"] = "udu",
["Ufim"] = "ufi",
["Ugandan Sign Language"] = "ugn",
["Ughele"] = "uge",
["Uhami"] = "uha",
["Uisai"] = "uis",
["Ujir"] = "udj",
["Ukaan"] = "kcf",
["Ukhwejo"] = "ukh",
["Ukit"] = "umi",
["Ukpe-Bayobiri"] = "ukp",
["Ukpet-Ehom"] = "akd",
["Ukrainian Sign Language"] = "ukl",
["Ukue"] = "uku",
["Ukuriguma"] = "ukg",
["Ukwa"] = "ukq",
["Ukwuani-Aboh-Ndoni"] = "ukw",
["Ulau-Suain"] = "svb",
["Ulch"] = "ulc",
["Uldeme"] = "udl",
["Ulithian"] = "uli",
["Ullatan"] = "ull",
["Ulumanda'"] = "ulm",
["Ulwa"] = "ulw",
["Uma"] = "ppk",
["Uma' Lasan"] = "xky",
["Uma' Lung"] = "ulu",
["Umanakaina"] = "gdn",
["Umatilla"] = "uma",
["Umbindhamu"] = "umd",
["Umbu-Ungu"] = "ubu",
["Umbugarla"] = "umr",
["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",
["Unua"] = "onu",
["Unubahe"] = "unu",
["Uokha"] = "uok",
["Upper Chehalis"] = "cjh",
["Upper Grand Valley Dani"] = "dna",
["Upper Kuskokwim"] = "kuu",
["Upper Necaxa Totonac"] = "tku",
["Upper Ta'oih"] = "tth",
["Upper Tanana"] = "tau",
["Upper Taromi"] = "tov",
["Upper Umpqua"] = "xup",
["Ura (New Guinea)"] = "uro",
["Ura (Vanuatu)"] = "uur",
["Uradhi"] = "urf",
["Urali"] = "url",
["Urapmin"] = "urm",
["Urarina"] = "ura",
["Urartian"] = "xur",
["Urat"] = "urt",
["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",
["Uzekwe"] = "eze",
["Vaagri Booli"] = "vaa",
["Vaghri"] = "vgr",
["Vaghua"] = "tva",
["Vagla"] = "vag",
["Vaiphei"] = "vap",
["Vale"] = "vae",
["Valencian Sign Language"] = "vsv",
["Valle Nacional Chinantec"] = "cvn",
["Valley Maidu"] = "vmv",
["Valman"] = "van",
["Valpei"] = "vlp",
["Vamale"] = "mkt",
["Vame"] = "mlr",
["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",
["Venetic"] = "xve",
["Venezuelan Sign Language"] = "vsl",
["Ventureño"] = "veo",
["Vera'a"] = "vra",
["Vestinian"] = "xvs",
["Vidunda"] = "vid",
["Viemo"] = "vig",
["Vilela"] = "vil",
["Vili"] = "vif",
["Villa Viciosa Agta"] = "dyg",
["Vincentian Creole English"] = "svc",
["Virgin Islands Creole"] = "vic",
["Vishavan"] = "vis",
["Viti"] = "vit",
["Vitou"] = "vto",
["Viya"] = "gev",
["Vlax Romani"] = "rmy",
["Volscian"] = "xvo",
["Vono"] = "kch",
["Voro"] = "vor",
["Vumbu"] = "vum",
["Vunapu"] = "vnp",
["Vunjo"] = "vun",
["Vurës"] = "msn",
["Vute"] = "vut",
["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",
["Walmajarri"] = "wmt",
["Wam"] = "wmo",
["Wamas"] = "wmc",
["Wambaya"] = "wmb",
["Wambon"] = "wms",
["Wambule"] = "wme",
["Wamey"] = "cou",
["Wamin"] = "wmi",
["Wampar"] = "lbq",
["Wampur"] = "waz",
["Wan"] = "wan",
["Wanambre"] = "wnb",
["Wanap"] = "wnp",
["Wancho"] = "nnp",
["Wanda"] = "wbh",
["Wandala"] = "mfi",
["Wandamen"] = "wad",
["Wandarang"] = "wnd",
["Wandji"] = "wdd",
["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",
["Warapu"] = "wra",
["Waray Sorsogon"] = "srv",
["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",
["วาตีวา"] = "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 Romani"] = "rmw",
["Wemale"] = "weo",
["Wemba-Wemba"] = "xww",
["Weme Gbe"] = "wem",
["Wendat"] = "wdt",
["Weri"] = "wer",
["Wersing"] = "kvw",
["West Albay Bikol"] = "fbl",
["West Ambae"] = "nnd",
["West Central Banda"] = "bbp",
["West Damar"] = "drn",
["West Flemish"] = "vls",
["West Greenlandic Pidgin"] = "crp-gep",
["West Lembata"] = "lmj",
["West Makian"] = "mqs",
["West Masela"] = "mss",
["West Tarangan"] = "txn",
["West Uvean"] = "uve",
["West-Central Limba"] = "lia",
["Western Arrernte"] = "are",
["Western Bolivian Guarani"] = "gnw",
["Western Bukidnon Manobo"] = "mbb",
["Western Dani"] = "dnw",
["Western Durango Nahuatl"] = "azn",
["Western Fijian"] = "wyy",
["Western Gurung"] = "gvr",
["Western Highland Chatino"] = "ctp",
["Western Huasteca Nahuatl"] = "nhw",
["Western Jicaque"] = "nai-wji",
["Western Juxtlahuaca Mixtec"] = "jmx",
["Western Karaboro"] = "kza",
["Western Keres"] = "kjq",
["Western Krahn"] = "krw",
["Western Lalu"] = "ywl",
["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 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 Lachi"] = "lwh",
["Whitesands"] = "tnp",
["Wiarumus"] = "tua",
["Wichita"] = "wic",
["Wichí Lhamtés Güisnay"] = "mzh",
["Wichí Lhamtés Nocten"] = "mtp",
["Wichí Lhamtés Vejoz"] = "wlv",
["Wik-Epa"] = "wie",
["Wik-Iiyanh"] = "wij",
["Wik-Keyangan"] = "wif",
["Wik-Me'anha"] = "wih",
["Wik-Mungkan"] = "wim",
["Wik-Ngathana"] = "wig",
["Wikalkan"] = "wik",
["Wikngenchera"] = "wua",
["Wilawila"] = "wil",
["Wintu"] = "wnw",
["Winyé"] = "kst",
["Wipi"] = "gdr",
["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",
["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",
["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",
["Xianbei"] = "mis-xbi",
["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âgurè"] = "axx",
["Yaa"] = "iyx",
["Yaaku"] = "muu",
["Yabarana"] = "yar",
["Yabaâna"] = "ybn",
["Yaben"] = "ybm",
["Yabong"] = "ybo",
["Yabula Yabula"] = "yxy",
["Yace"] = "ekr",
["Yafi"] = "wfg",
["Yagara"] = "yxg",
["Yagaria"] = "ygr",
["Yaghnobi"] = "yai",
["Yagomi"] = "ygm",
["Yagua"] = "yad",
["Yagwoia"] = "ygw",
["Yahadian"] = "ner",
["Yahang"] = "rhp",
["Yahuna"] = "ynu",
["Yaka"] = "yaf",
["Yakaikeke"] = "ykk",
["Yakima"] = "yak",
["Yakkha"] = "ybh",
["Yakoma"] = "yky",
["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",
["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"] = "yao",
["Yao (South America)"] = "sai-yao",
["Yaosakor Asmat"] = "asy",
["Yaouré"] = "yre",
["Yapese"] = "yap",
["Yapunda"] = "yev",
["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",
["Yaul"] = "yla",
["Yaur"] = "jau",
["Yautepec Zapotec"] = "zpb",
["Yavitero"] = "yvt",
["Yawa"] = "yva",
["Yawalapití"] = "yaw",
["Yawanawa"] = "ywn",
["Yawarawarga"] = "yww",
["Yaweyuha"] = "yby",
["Yawijibaya"] = "jbw",
["Yawiyo"] = "ybx",
["Yawuru"] = "ywr",
["Yaygir"] = "xya",
["Yazghulami"] = "yah",
["Ye'kwana"] = "mch",
["Yei"] = "jei",
["Yekhee"] = "ets",
["Yekora"] = "ykr",
["Yele"] = "yle",
["Yelmek"] = "jel",
["Yelogu"] = "ylg",
["Yemaek"] = "hmk",
["Yemba"] = "ybb",
["Yemsa"] = "jnj",
["Yendang"] = "yen",
["Yeni"] = "yei",
["Yenish"] = "yec",
["Yerakai"] = "yra",
["Yeretuar"] = "gop",
["Yerong"] = "yrn",
["Yerukula"] = "yeu",
["Yeskwa"] = "yes",
["Yessan-Mayo"] = "yss",
["Yetfa"] = "yet",
["Yevanic"] = "yej",
["Yeyi"] = "yey",
["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",
["Yoidik"] = "ydk",
["Yoke"] = "yki",
["Yolmo"] = "scp",
["Yolngu Sign Language"] = "ygs",
["Yoloxochitl Mixtec"] = "xty",
["Yom"] = "pil",
["Yombe"] = "yom",
["Yongkom"] = "yon",
["Yopno"] = "yut",
["Yora"] = "mts",
["Yorta Yorta"] = "xyy",
["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",
["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",
["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",
["Zangwal"] = "zah",
["Zaniza Zapotec"] = "zpw",
["Zapotec"] = "zap",
["Zaramo"] = "zaj",
["Zari"] = "zaz",
["Zarma"] = "dje",
["Zauzou"] = "zal",
["Zay"] = "zwa",
["Zayein Karen"] = "kxk",
["Zayse-Zergulla"] = "zay",
["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",
["Zhár"] = "jjr",
["Zia"] = "zia",
["Zialo"] = "zil",
["Zigula"] = "ziw",
["Zimakani"] = "zik",
["Zimba"] = "zmb",
["Zimbabwe Sign Language"] = "zib",
["Zinza"] = "zin",
["Zirenkel"] = "zrn",
["Ziriya"] = "zir",
["Zizilivakan"] = "ziz",
["Zo'é"] = "pto",
["Zokhuo"] = "yzk",
["Zoogocho Zapotec"] = "zpq",
["Zotung Chin"] = "czt",
["Zou"] = "zom",
["Zulgo-Gemzek"] = "gnd",
["Zumaya"] = "zuy",
["Zumbun"] = "jmb",
["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",
["กงกัณ"] = "kok",
["กบาลัน"] = "ckv",
["กรีก"] = "el",
["กรีกแบบไมซีนี"] = "gmy",
["กรีกโบราณ"] = "grc",
["กรีนแลนด์"] = "kl",
["กวางตุ้ง"] = "yue",
["กอกบอรอก"] = "trp",
["กอท"] = "got",
["กอทแบบไครเมีย"] = "gme-cgo",
["กอล"] = "cel-gau",
["กะดู"] = "zkd",
["กะตูตะวันตก"] = "kuf",
["กะตูตะวันออก"] = "ktv",
["กะยัน"] = "pdu",
["กะยาตะวันตก"] = "kyu",
["กะยาตะวันออก"] = "eky",
["กะเหรี่ยงดั้งเดิม"] = "kar-pro",
["กะเหรี่ยงปะโอ"] = "blk",
["กะเหรี่ยงสะกอ"] = "ksw",
["กะเหรี่ยงโปตะวันตก"] = "pwo",
["กะเหรี่ยงโปตะวันออก"] = "kjp",
["กะเหรี่ยงโปเหนือ"] = "pww",
["กะเหรี่ยงโปแพร่"] = "kjt",
["กะไบล์"] = "kab",
["กัจฉ์"] = "kfr",
["กันกานาอือ"] = "kne",
["กันกานาอือเหนือ"] = "xnn",
["กันนฑะ"] = "kn",
["กัมเบอรา"] = "xbr",
["กัวรานีคลาสสิก"] = "gn-cls",
["กัวรานีแบบปารากวัย"] = "gug",
["กั้น"] = "gan",
["กากาอุซ"] = "gag",
["กาดาซันชายฝั่ง"] = "kzj",
["กาตาลา"] = "ca",
["กาตาลาเก่า"] = "roa-oca",
["กานูรี"] = "kr",
["กาปัมปางัน"] = "pam",
["กามรูป"] = "inc-kam",
["การากัลปัก"] = "kaa",
["กาลากัน"] = "kqe",
["กาลากันแบบกากัน"] = "kll",
["กาลากันแบบตากาเกาลู"] = "klg",
["กาลิเซีย"] = "gl",
["กาลิเซีย-โปรตุเกสเก่า"] = "roa-opt",
["กาเรา"] = "kyj",
["กาโม"] = "gmv",
["กาโร"] = "grt",
["กิลเบิร์ต"] = "gil",
["กีนาบาตางันตอนบน"] = "dmg",
["กืออึซ"] = "gez",
["กุรุข"] = "kru",
["กูนียันดี"] = "gni",
["กูย"] = "kdt",
["กูร์ดั้งเดิม"] = "nic-gur-pro",
["กฺ๋อง"] = "ugo",
["กเบดั้งเดิม"] = "alv-gbe-pro",
["ขมุ"] = "kjg",
["ขมุอิกดั้งเดิม"] = "mkh-khm-pro",
["ขร้า-ไทดั้งเดิม"] = "qfa-tak-pro",
["ขร้าดั้งเดิม"] = "qfa-kra-pro",
["ครี"] = "cr",
["ครีโอลกาบูเวร์ดี"] = "kea",
["ครีโอลกินี-บิสเซา"] = "pov",
["ครีโอลจาเมกา"] = "jam",
["ครีโอลมอริเชียส"] = "mfe",
["ครีโอลมาเก๊า"] = "mzs",
["ครีโอลลุยเซียนา"] = "lou",
["ครีโอลเฮติ"] = "ht",
["คองโก"] = "kg",
["คอปติก"] = "cop",
["คอร์ซิกา"] = "co",
["คอร์นวอลล์"] = "kw",
["คอร์นวอลล์เก่า"] = "oco",
["คอเคเซียนตะวันตกเฉียงเหนือดั้งเดิม"] = "cau-nwc-pro",
["คอเคเซียนตะวันออกเฉียงเหนือดั้งเดิม"] = "cau-nec-pro",
["คังรังชือ"] = "ane",
["คัลมึค"] = "xal",
["คาคัส"] = "kjh",
["คาชุบ"] = "csb",
["คาซัค"] = "kk",
["คาซี"] = "kha",
["คานธาระ"] = "pgd",
["คาบาร์เดีย"] = "kbd",
["คาร์ทเวเลียนดั้งเดิม"] = "ccs-pro",
["คาร์นิโคบาร์"] = "caq",
["คาลาเมียนดั้งเดิม"] = "phi-kal-pro",
["คาเซียนดั้งเดิม"] = "aav-khs-pro",
["คาเรเลีย"] = "krl",
["คำตี้"] = "kht",
["คำเมือง"] = "nod",
["คีตัน"] = "zkt",
["คีร์กีซ"] = "ky",
["คุชราต"] = "gu",
["คุชราตกลาง"] = "inc-mgu",
["คุชราตเก่า"] = "inc-ogu",
["คูนิงามิ"] = "xug",
["คูมาน"] = "qwm",
["คูมุก"] = "kum",
["งูนีดั้งเดิม"] = "bnt-ngu-pro",
["จอร์เจีย"] = "ka",
["จอร์เจียน-แซนดั้งเดิม"] = "ccs-gzn-pro",
["จอร์เจียเก่า"] = "oge",
["จักมา"] = "ccp",
["จามตะวันตก"] = "cja",
["จามตะวันออก"] = "cjm",
["จามิกดั้งเดิม"] = "cmc-pro",
["จิ่งเผาะ"] = "kac",
["จิ้น"] = "cjy",
["จีน"] = "zh",
["จีนกลาง"] = "cmn",
["จีนยุคกลาง"] = "ltc",
["จีนวรรณกรรม"] = "lzh",
["จีนเก่า"] = "och",
["จุน"] = "cuq",
["จูร์เชน"] = "juc",
["จ้วง"] = "za",
["จ้วงแบบจั่วเจียง"] = "zzj",
["จ้วงแบบหนง"] = "zhn",
["ชวา"] = "jv",
["ชวาเก่า"] = "kaw",
["ชวาแบบนิวแคลิโดเนีย"] = "jas",
["ชวาแบบแคริบเบียน"] = "jvn",
["ชอง"] = "cog",
["ชากาทาย"] = "chg",
["ชาดิกดั้งเดิม"] = "cdc-pro",
["ชาดิกตอนกลางดั้งเดิม"] = "cdc-cbm-pro",
["ชาบากาโน"] = "cbk",
["ชามอร์โร"] = "ch",
["ชุกชี"] = "ckt",
["ชูวัช"] = "cv",
["ซอกดิกดั้งเดิม"] = "ira-sgc-pro",
["ซองคา"] = "dz",
["ซอร์เบียตอนบน"] = "hsb",
["ซอร์เบียตอนล่าง"] = "dsb",
["ซังโก"] = "sg",
["ซันสการ์"] = "zau",
["ซัมบัล"] = "xsb",
["ซัสซารี"] = "sdc",
["ซากีซายา"] = "szy",
["ซาคา"] = "sah",
["ซาซา"] = "zza",
["ซาปา"] = "tys",
["ซามัว"] = "sm",
["ซามาตอนกลาง"] = "sml",
["ซามาแบบปางูตารัน"] = "slm",
["ซามิกดั้งเดิม"] = "smi-pro",
["ซามีเหนือ"] = "se",
["ซามีแบบกิลดิน"] = "sjd",
["ซามีแบบปีเต"] = "sje",
["ซามีแบบลูเล"] = "smj",
["ซามีแบบอีนารี"] = "smn",
["ซามีใต้"] = "sma",
["ซาราวักเหนือดั้งเดิม"] = "poz-swa-pro",
["ซาร์ดิเนีย"] = "sc",
["ซาลาร์"] = "slr",
["ซาโฮ"] = "ssy",
["ซิซิลี"] = "scn",
["ซินดาริน"] = "sjn",
["ซีกายานา"] = "sky",
["ซีดามา"] = "sid",
["ซีโน-ทิเบตันดั้งเดิม"] = "sit-pro",
["ซุนดา"] = "su",
["ซูก"] = "tsg",
["ซูทู"] = "st",
["ซูทูเหนือ"] = "nso",
["ซูนี"] = "zun",
["ซูรีเกาโนน"] = "sgd",
["ซูลาเวซีใต้ดั้งเดิม"] = "poz-ssw-pro",
["ซูลู"] = "zu",
["ซูเมอร์"] = "sux",
["ซูโดเวีย"] = "xsv",
["ญัฮกุร"] = "cbn",
["ญี่ปุ่น"] = "ja",
["ญี่ปุ่นเก่า"] = "ojp",
["ญ้อ"] = "nyw",
["ดราวิเดียนดั้งเดิม"] = "dra-pro",
["ดราวิเดียนตอนกลางดั้งเดิม"] = "dra-cen-pro",
["ดราวิเดียนเหนือดั้งเดิม"] = "dra-nor-pro",
["ดราวิเดียนใต้ดั้งเดิม"] = "dra-sou-pro",
["ดราวิเดียนใต้ที่สองดั้งเดิม"] = "dra-sdt-pro",
["ดราวิเดียนใต้ที่หนึ่งดั้งเดิม"] = "dra-sdo-pro",
["ดัตช์"] = "nl",
["ดัตช์กลาง"] = "dum",
["ดัตช์เก่า"] = "odt",
["ดาโคตา"] = "dak",
["ดุงกาน"] = "dng",
["ดูซุนตอนกลาง"] = "dtp",
["ตงเซียง"] = "sce",
["ตองงา"] = "to",
["ตังกุต"] = "txg",
["ตันดากาโนน"] = "tgn",
["ตั่ย"] = "tyz",
["ตากาล็อก"] = "tl",
["ตางัม"] = "sit-tgm",
["ตาตาร์"] = "tt",
["ตาตาร์แบบไครเมีย"] = "crh",
["ตาอีโน"] = "tnq",
["ตาฮีตี"] = "ty",
["ตีรูไร"] = "tiy",
["ตีโดเร"] = "tvo",
["ตุมซุก"] = "xtq",
["ตุรกี"] = "tr",
["ตุรกีแบบออตโตมัน"] = "ota",
["ตุรกีแบบอานาโตเลียเก่า"] = "trk-oat",
["ตุรุง"] = "try",
["ตูปี-กัวรานีดั้งเดิม"] = "tup-gua-pro",
["ตูปีเก่า"] = "tpw",
["ตูลู"] = "tcy",
["ตูวา"] = "tyv",
["ตูวาลู"] = "tvl",
["ตูเปียนดั้งเดิม"] = "tup-pro",
["ตโบลี"] = "tbl",
["ต้งเหนือ"] = "doc",
["ต้งใต้"] = "kmc",
["ทมิฬ"] = "ta",
["ทมิฬเก่า"] = "oty",
["ตอกปีซิน"] = "tpi",
["ทะวืง"] = "thm",
["ทาจิก"] = "tg",
["ทาบาซารัน"] = "tab",
["ทิเบต"] = "bo",
["ทิเบตคลาสสิก"] = "xct",
["ทิเบตเก่า"] = "otb",
["ทือกรึญญา"] = "ti",
["ทือเกร"] = "tig",
["นอซู"] = "ii",
["นอร์มัน"] = "nrf",
["นอร์สดั้งเดิม"] = "gmq-pro",
["นอร์สเก่า"] = "non",
["นอร์เวย์"] = "no",
["นอร์เวย์กลาง"] = "gmq-mno",
["นอร์เวย์แบบนือนอสก์"] = "nn",
["นอร์เวย์แบบบุ๊กมอล"] = "nb",
["นัคดั้งเดิม"] = "cau-nkh-pro",
["นาวัตล์"] = "nah",
["นาวัตล์คลาสสิก"] = "nci",
["นาวัตล์ตอนกลาง"] = "nhn",
["นาวันดั้งเดิม"] = "azc-nah-pro",
["นาวาโฮ"] = "nv",
["นาอูรู"] = "na",
["นาโปลี"] = "nap",
["นิวเคลียร์พอลินีเชียนดั้งเดิม"] = "poz-pnp-pro",
["นิวเบียเก่า"] = "onw",
["นิโคบารีสดั้งเดิม"] = "aav-nic-pro",
["นิโคบาร์กลาง"] = "ncb",
["นีวเว"] = "niu",
["นุง"] = "nut",
["นูเบียนดั้งเดิม"] = "nub-pro",
["บราฮุอี"] = "brh",
["บริทอนิกดั้งเดิม"] = "cel-bry-pro",
["บรูตะวันตก"] = "brv",
["บรูตะวันออก"] = "bru",
["บลาการ์"] = "beu",
["บอลโต-สลาวิกดั้งเดิม"] = "ine-bsl-pro",
["บะห์นัร"] = "bdq",
["บัตส์"] = "bbl",
["บันจาร์"] = "bjn",
["บัมบารา"] = "bm",
["บัลติ"] = "bft",
["บัลแกเรีย"] = "bg",
["บาลี"] = "pi",
["บาวาเรีย"] = "bar",
["บาสก์"] = "eu",
["บาสก์ดั้งเดิม"] = "euq-pro",
["บาหลี"] = "ban",
["บาเจาแบบอินโดนีเซีย"] = "bdl",
["บาเจาแบบเวสต์โคสต์"] = "bdr",
["บาโลจ"] = "bal",
["บิสลามา"] = "bi",
["บีซู"] = "bzi",
["บีนูกิด"] = "bkd",
["บีโคลตอนกลาง"] = "bcl",
["บูกิส"] = "bug",
["บูร์บอแน-แบรีชง"] = "roa-bbn",
["บูร์ยัต"] = "bua",
["ปนัร"] = "pbv",
["ปนัร-คาซี-ลึงงัมดั้งเดิม"] = "aav-pkl-pro",
["ปยู"] = "pyx",
["ปรากฤต"] = "pra",
["ปรากฤตแบบอโศก"] = "inc-ash",
["ปะหล่องดั้งเดิม"] = "mkh-pal-pro",
["ปักษ์ใต้"] = "sou",
["ปังควาฬฺ"] = "pgg",
["ปัญจาบ"] = "pa",
["ปัญจาบเก่า"] = "inc-opa",
["ปาทาน"] = "ps",
["ปาทานดั้งเดิม"] = "ira-pat-pro",
["ปาลาวาโนตอนกลาง"] = "plc",
["ปาลาวาโนตะวันตกเฉียงใต้"] = "plv",
["ปาลาวาโนแบบบรูกส์พอยต์"] = "plw",
["ปาเปียเมนตู"] = "pap",
["ปาเลา"] = "pau",
["ปาโกะห์"] = "pac",
["ปีการ์"] = "pcd",
["ปีปิล"] = "ppl",
["ปีเยมอนเต"] = "pms",
["ปูกาปูกา"] = "pkp",
["ปู้อี"] = "pcc",
["ผิงเหนือ"] = "cnp",
["ผิงใต้"] = "csp",
["ผูเซียน"] = "cpx",
["ผู้น้อย"] = "pho",
["ผู้ไท"] = "pht",
["ฝรั่งเศส"] = "fr",
["ฝรั่งเศสกลาง"] = "frm",
["ฝรั่งเศสเก่า"] = "fro",
["พทคะ"] = "bfq",
["พม่า"] = "my",
["พม่าเก่า"] = "obr",
["พรัช"] = "bra",
["พวน"] = "phu",
["พอลินีเชียนดั้งเดิม"] = "poz-pol-pro",
["พอลินีเชียนตะวันออกดั้งเดิม"] = "poz-pep-pro",
["พิหาร"] = "bh",
["พ่าเก"] = "phk",
["ฟรียูลี"] = "fur",
["ฟรีเชียตะวันตก"] = "fy",
["ฟรีเชียเก่า"] = "ofs",
["ฟรีเชียเหนือ"] = "frr",
["ฟรีเชียแบบซาเทอร์ลันท์"] = "stq",
["ฟร็องโก-พรอว็องส์"] = "frp",
["ฟาลา"] = "fax",
["ฟาลิสกุส"] = "xfa",
["ฟินนิกดั้งเดิม"] = "urj-fin-pro",
["ฟินิเชีย"] = "phn",
["ฟินแลนด์"] = "fi",
["ฟิลิปปินส์ดั้งเดิม"] = "phi-pro",
["ฟีจี"] = "fj",
["ฟูลา"] = "ff",
["มคหะ"] = "mag",
["มงตาแญ"] = "moe",
["มณีปุระ"] = "mni",
["มณีปุระเก่า"] = "omp",
["มนองตอนกลาง"] = "cmo",
["มนองใต้"] = "mnn",
["มราฐี"] = "mr",
["มราฐีเก่า"] = "omr",
["มลยาฬัม"] = "ml",
["มลายูตอนกลาง"] = "pse",
["มลายูแบบตรังกานู"] = "poz-ter",
["มลายูแบบบรูไน"] = "kxd",
["มลายูแบบปัตตานี"] = "mfa",
["มลายูแบบเกอดะฮ์"] = "meo",
["มวานี"] = "wmw",
["มอกชา"] = "mdf",
["มองโกลิกดั้งเดิม"] = "xgn-pro",
["มองโกเลีย"] = "mn",
["มองโกเลียกลาง"] = "xng",
["มองโกเลียคลาสสิก"] = "cmg",
["มอญ"] = "mnw",
["มอญ-เขมรดั้งเดิม"] = "mkh-pro",
["มอญกลาง"] = "mkh-mmn",
["มอญดั้งเดิม"] = "mkh-mnc-pro",
["มอญเก่า"] = "omx",
["มอญแบบไทย"] = "mnw-tha",
["มอลตา"] = "mt",
["มอแซนแดรอน"] = "mzn",
["มัล"] = "mlf",
["มัลดีฟส์"] = "dv",
["มัสบาเต"] = "msb",
["มากัซซาร์"] = "mak",
["มากินดาเนา"] = "mdh",
["มาซิโดเนีย"] = "mk",
["มายันดั้งเดิม"] = "myn-pro",
["มาราเนา"] = "mrw",
["มาร์วาร์"] = "mwr",
["มาร์แชลล์"] = "mh",
["มาลากาซี"] = "mg",
["มาลาโย-จามิกดั้งเดิม"] = "poz-mcm-pro",
["มาลาโย-ซุมบาวันดั้งเดิม"] = "poz-msa-pro",
["มาลาโย-พอลินีเชียนดั้งเดิม"] = "poz-pro",
["มาลาโย-พอลินีเชียนตอนกลาง-ตะวันออกดั้งเดิม"] = "poz-cet-pro",
["มาลาโย-พอลินีเชียนตะวันออกดั้งเดิม"] = "pqe-pro",
["มาวรี"] = "mi",
["มาเลย์อิกดั้งเดิม"] = "poz-mly-pro",
["มาเลเซีย"] = "ms",
["มาไซ"] = "mas",
["มิงเกรเลีย"] = "xmf",
["มิยาโกะ"] = "mvi",
["มีนังกาเบา"] = "min",
["มีรังดา"] = "mwl",
["มีโซ"] = "lus",
["มือรัสเซีย"] = "rsl",
["มืออินเดีย"] = "ins",
["มืออินโดนีเซีย"] = "inl",
["มืออเมริกัน"] = "ase",
["มือเนปาล"] = "nsp",
["มือไทย"] = "tsq",
["มุนดาดั้งเดิม"] = "mun-pro",
["มูซี"] = "mui",
["ม้ง-เมี่ยนดั้งเดิม"] = "hmx-pro",
["ม้งขาว"] = "mww",
["ม้งดั้งเดิม"] = "hmn-pro",
["ม้งเขียว"] = "hnj",
["ยอง"] = "yno",
["ยอลอ"] = "yol",
["ยะไข่"] = "rki",
["ยากัน"] = "yka",
["ยามานา"] = "yag",
["ยามี"] = "tao",
["ยาเอยามะ"] = "rys",
["ยิดดิช"] = "yi",
["ยุปปิก"] = "esu",
["ยูกริกดั้งเดิม"] = "urj-ugr-pro",
["ยูการิต"] = "uga",
["ยูราลิกดั้งเดิม"] = "urj-pro",
["ยูเครน"] = "uk",
["ยูโต-แอซเทกันดั้งเดิม"] = "azc-pro",
["รวันดา-รุนดี"] = "rw",
["รัสเซีย"] = "ru",
["ราชพังสี"] = "rjs",
["ราปานูอี"] = "rap",
["ราโรโตงา"] = "rar",
["ริฟ"] = "rif",
["รูซินแบบคาร์พาเทีย"] = "rue",
["รูซินแบบพันโนเนีย"] = "rsk",
["ร่วม"] = "mul",
["ลอมบาร์ด"] = "lmo",
["ละติน"] = "la",
["ลัก"] = "lbe",
["ลักเกีย"] = "lbc",
["ลักเซมเบิร์ก"] = "lb",
["ลัซ"] = "lzz",
["ลัตเกล"] = "ltg",
["ลัตเวีย"] = "lv",
["ลัมปุงกิกดั้งเดิม"] = "poz-lgx-pro",
["ลัมโบยา"] = "lmy",
["ลาดัก"] = "lbj",
["ลาดิน"] = "lld",
["ลาดิโน"] = "lad",
["ลาว"] = "lo",
["ลิงกาลา"] = "ln",
["ลิทัวเนีย"] = "lt",
["ลิทัวเนียเก่า"] = "olt",
["ลินดู"] = "klw",
["ลิมบู"] = "lif",
["ลิมเบิร์ก"] = "li",
["ลิววี"] = "olo",
["ลีกูเรีย"] = "lij",
["ลีสู่"] = "lis",
["ลีโวเนีย"] = "liv",
["ลึงงัม"] = "lyg",
["ลูกันดา"] = "lg",
["ลูอิชดั้งเดิม"] = "sit-luu-pro",
["วอลตา-คองโกดั้งเดิม"] = "nic-vco-pro",
["วอลตา-ไนเจอร์ดั้งเดิม"] = "alv-von-pro",
["วันดัล"] = "xvn",
["วัลลูน"] = "wa",
["วาราโอ"] = "wba",
["วาไร"] = "war",
["วินเนอเบโก"] = "win",
["วีลามอวิตแซ"] = "wym",
["สกอต"] = "sco",
["สมราย"] = "smu",
["สลาวอนิกคริสตจักรเก่า"] = "cu",
["สลาวิกดั้งเดิม"] = "sla-pro",
["สลาวิกตะวันออกเก่า"] = "orv",
["สวานา"] = "tn",
["สวาฮีลี"] = "sw",
["สวีเดน"] = "sv",
["สวีเดนเก่า"] = "gmq-osw",
["สะโอจ"] = "scq",
["สันถาลี"] = "sat",
["สันสกฤต"] = "sa",
["ซำเร"] = "sxm",
["สิกขิม"] = "sip",
["สิงหล"] = "si",
["สินธ์"] = "sd",
["สิเลฏ"] = "syl",
["สุ่ย"] = "swi",
["สเปน"] = "es",
["สเปนเก่า"] = "osp",
["สโลวัก"] = "sk",
["สโลวักเก่า"] = "zlw-osk",
["สโลวินช์"] = "zlw-slv",
["สโลวีเนีย"] = "sl",
["หง่วน"] = "nuo",
["หมะ"] = "cma",
["หมิ่นดั้งเดิม"] = "zhx-min-pro",
["หมิ่นตอนกลาง"] = "czo",
["หมิ่นตะวันออก"] = "cdo",
["หมิ่นเหนือ"] = "mnp",
["หมิ่นใต้"] = "nan",
["หล่อยแอว๋"] = "luh",
["ห่อยซัน"] = "zhx-tai",
["อวัธ"] = "awa",
["ออสซีเซีย"] = "os",
["ออสโตรนีเซียนดั้งเดิม"] = "map-pro",
["ออสโตรเอเชียติกดั้งเดิม"] = "aav-pro",
["ออโรโม"] = "om",
["อะดีเกยา"] = "ady",
["อะตง"] = "aot",
["อะวาร์"] = "av",
["อะวาร์เก่า"] = "oav",
["อะแพชีตะวันตก"] = "apw",
["อักลัน"] = "akl",
["อังกฤษ"] = "en",
["อังกฤษกลาง"] = "enm",
["อังกฤษเก่า"] = "ang",
["อับคาเซีย"] = "ab",
["อัมฮารา"] = "am",
["อัมโมน"] = "sem-amm",
["อัลไตเหนือ"] = "atv",
["อัลไตใต้"] = "alt",
["อัสตูเรียส"] = "ast",
["อัสสัม"] = "as",
["อัสสัมกลาง"] = "inc-mas",
["อัสสัมช่วงต้น"] = "inc-oas",
["อากูตายา"] = "agn",
["อาข่า"] = "ahk",
["อาคัน"] = "ak",
["อาซี"] = "bno",
["อานาโตเลียนดั้งเดิม"] = "ine-ana-pro",
["อาบาซา"] = "abq",
["อาฟรีกานส์"] = "af",
["อาฟาร์"] = "aa",
["อามามิโอชิมะเหนือ"] = "ryn",
["อามามิโอชิมะใต้"] = "ams",
["อารากอน"] = "an",
["อารามายา"] = "arc",
["อาร์มีเนีย"] = "hy",
["อาร์มีเนียกลาง"] = "axm",
["อาร์มีเนียนดั้งเดิม"] = "hyx-pro",
["อาร์มีเนียเก่า"] = "xcl",
["อาลูตีก"] = "ems",
["อาหม"] = "aho",
["อาหรับ"] = "ar",
["อาหรับแบบซูดาน"] = "apd",
["อาหรับแบบตูนิเซีย"] = "aeb",
["อาหรับแบบทาจิกิสถาน"] = "abh",
["อาหรับแบบบาห์เรน"] = "abv",
["อาหรับแบบลิเบีย"] = "ayl",
["อาหรับแบบลิแวนต์ใต้"] = "ajp",
["อาหรับแบบอันดะลุส"] = "xaa",
["อาหรับแบบอิรัก"] = "acm",
["อาหรับแบบอียิปต์"] = "arz",
["อาหรับแบบอุซเบกิสถาน"] = "auz",
["อาหรับแบบฮิญาซ"] = "acw",
["อาหรับแบบเมโสโปเตเมียเหนือ"] = "ayp",
["อาหรับแบบเยเมน"] = "ayn",
["อาหรับแบบแอลจีเรีย"] = "arq",
["อาหรับแบบโมร็อกโก"] = "ary",
["อาหรับแบบโอมาน"] = "acx",
["อาหรับแบบไซปรัส"] = "acy",
["อาเจะฮ์"] = "ace",
["อาเซอร์ไบจาน"] = "az",
["อาเนตยูม"] = "aty",
["อาเบ"] = "aba",
["อิกโบ"] = "ig",
["อิงกุช"] = "inh",
["อิงเกรีย"] = "izh",
["อิตาลิกดั้งเดิม"] = "itc-pro",
["อิตาลี"] = "it",
["อินุกติตุต"] = "iu",
["อินุอิตดั้งเดิม"] = "esx-inu-pro",
["อินเทร์ลิงเกว"] = "ie",
["อินเทอร์ลิงกวา"] = "ia",
["อินโด-ยูโรเปียนดั้งเดิม"] = "ine-pro",
["อินโด-อารยันดั้งเดิม"] = "inc-pro",
["อินโด-อิเรเนียนดั้งเดิม"] = "iir-pro",
["อินโดนีเซีย"] = "id",
["อิสเตรีย"] = "ist",
["อิเรเนียนดั้งเดิม"] = "ira-pro",
["อีดาอัน"] = "dbj",
["อีทรัสคัน"] = "ett",
["อีบัน"] = "iba",
["อียิปต์"] = "egy",
["อีรานุน"] = "ill",
["อีสาน"] = "tts",
["อีโด"] = "io",
["อีโลกาโน"] = "ilo",
["อุซเบก"] = "uz",
["อุดมูร์ต"] = "udm",
["อุตซิตา"] = "oc",
["อุตซิตาเก่า"] = "pro",
["อุนเซอร์ด็อยทช์"] = "uln",
["อุมเบรีย"] = "xum",
["อุยกูร์"] = "ug",
["อุยกูร์เก่า"] = "oui",
["อูดี"] = "udi",
["อูรดู"] = "ur",
["อูรักลาโวยจ"] = "urk",
["อู๋"] = "wuu",
["อเวสตะ"] = "ae",
["อ่ายตน"] = "aio",
["ฮกเกี้ยน"] = "nan-hbl",
["ฮังการี"] = "hu",
["ฮังการีเก่า"] = "ohu",
["ฮาชอง"] = "haj",
["ฮานูโนโอ"] = "hnn",
["ฮาวาย"] = "haw",
["ฮินดี"] = "hi",
["ฮินดีเก่า"] = "inc-ohi",
["ฮินดีแบบฟีจี"] = "hif",
["ฮินดูสตานีแบบแคริบเบียน"] = "hns",
["ฮีบรู"] = "he",
["ฮีรีโมตู"] = "ho",
["ฮีลีไกโนน"] = "hil",
["ฮุนสริก"] = "hrx",
["ฮูร์เรีย"] = "xhu",
["เกชวนดั้งเดิม"] = "qwe-pro",
["เกชัว"] = "qu",
["เกชัวคลาสสิก"] = "qwc",
["เกรตอันดามันนีสดั้งเดิม"] = "qfa-adm-pro",
["เกอฮอ"] = "kpm",
["เกาหลี"] = "ko",
["เกาหลีกลาง"] = "okm",
["เกาหลีดั้งเดิม"] = "qfa-kor-pro",
["เกาหลีเก่า"] = "oko",
["เกาหลีใหม่ช่วงต้น"] = "ko-ear",
["เกโกโย"] = "ki",
["เขมร"] = "km",
["เขมรกลาง"] = "xhm",
["เขมรดั้งเดิม"] = "mkh-kmr-pro",
["เขมรเก่า"] = "okz",
["เขมรเหนือ"] = "kxm",
["เขิน"] = "kkh",
["เคลติกดั้งเดิม"] = "cel-pro",
["เควนยา"] = "qya",
["เคอร์ดิชดั้งเดิม"] = "ku-pro",
["เคิร์ดตอนกลาง"] = "ckb",
["เคิร์ดเหนือ"] = "kmr",
["เจวา"] = "ny",
["เจอร์แมนิกดั้งเดิม"] = "gem-pro",
["เจอร์แมนิกตะวันตกดั้งเดิม"] = "gmw-pro",
["เจียเม่า"] = "jio",
["เฉ่าเหมียว"] = "cov",
["เชจู"] = "jje",
["เชเชน"] = "ce",
["เชเยนน์"] = "chy",
["เชโรกี"] = "chr",
["เช็ก"] = "cs",
["เช็กเก่า"] = "zlw-ocs",
["เซบัวโน"] = "ceb",
["เซมิติกดั้งเดิม"] = "sem-pro",
["เซมิติกตะวันตกดั้งเดิม"] = "sem-wes-pro",
["เซอร์โบ-โครเอเชีย"] = "sh",
["เซอไม"] = "sea",
["เซียง"] = "hsn",
["เดนมาร์ก"] = "da",
["เดนมาร์กเก่า"] = "gmq-oda",
["เดาโร"] = "dwr",
["เตตุน"] = "tet",
["เตลูกู"] = "te",
["เตอร์กิกดั้งเดิม"] = "trk-pro",
["เตอร์กิกเก่า"] = "otk",
["เตอร์นาเต"] = "tft",
["เตอเมียร์"] = "tea",
["เติร์กเมน"] = "tk",
["เทาส์"] = "twf",
["เนปาล"] = "ne",
["เนวาร์"] = "new",
["เนวาร์กลาง"] = "nwx",
["เนวาร์คลาสสิก"] = "nwc",
["เนเกอร์ฮอลันดส์"] = "dcr",
["เบ"] = "onb",
["เบ-ไทดั้งเดิม"] = "qfa-bet-pro",
["เบงกอล"] = "bn",
["เบงกอลกลาง"] = "inc-mbn",
["เบงกอลเก่า"] = "inc-obn",
["เบดั้งเดิม"] = "qfa-onb-pro",
["เบนูเอ-คองโกดั้งเดิม"] = "nic-bco-pro",
["เบรอตง"] = "br",
["เบรอตงกลาง"] = "xbm",
["เบรอตงเก่า"] = "obt",
["เบลารุส"] = "be",
["เบอตาวี"] = "bew",
["เบอราวัน"] = "lod",
["เบอร์เบอร์ดั้งเดิม"] = "ber-pro",
["เบอร์เบอร์แบบตูนีเซีย"] = "sds",
["เปอร์มิกดั้งเดิม"] = "urj-prm-pro",
["เปอร์เซีย"] = "fa",
["เปอร์เซียกลาง"] = "pal",
["เปอร์เซียเก่า"] = "peo",
["เพลาท์ดิทช์"] = "pdt",
["เมวาร์"] = "mtr",
["อิ้วเมี่ยน"] = "ium",
["เมี่ยนดั้งเดิม"] = "hmx-mie-pro",
["เยอรมัน"] = "de",
["เยอรมันตอนกลางตะวันออก"] = "gmw-ecg",
["เยอรมันต่ำ"] = "nds",
["เยอรมันต่ำกลาง"] = "gml",
["เยอรมันต่ำแบบเยอรมนี"] = "nds-de",
["เยอรมันสูงกลาง"] = "gmh",
["เยอรมันสูงเก่า"] = "goh",
["เยอรมันแบบซิพเซอร์"] = "gmw-zps",
["เยอรมันแบบว็อลกา"] = "gmw-vog",
["เยอรมันแบบอลามันเนีย"] = "gsw",
["เยอรมันแบบเพนซิลเวเนีย"] = "pdc",
["เรอหวั่ง"] = "raw",
["เลซกี"] = "lez",
["เลออน"] = "roa-leo",
["เลออนเก่า"] = "roa-ole",
["เลอเวือะตะวันตก"] = "lcp",
["เลอเวือะตะวันออก"] = "lwl",
["เวนดา"] = "ve",
["เวปส์"] = "vep",
["เวลส์"] = "cy",
["เวลส์กลาง"] = "wlm",
["เวลส์เก่า"] = "owl",
["เวอโร"] = "vro",
["เวียดนาม"] = "vi",
["เวียดนามกลาง"] = "mkh-mvi",
["เวียตติกดั้งเดิม"] = "mkh-vie-pro",
["เวเนโต"] = "vec",
["เศรปา"] = "xsr",
["เสฉวน"] = "zhx-sic",
["เหมื่อง"] = "mtq",
["เอชเตฮาร์ด"] = "esh",
["เอซเตรมาดูรา"] = "ext",
["เอมีเลีย"] = "egl",
["เอร์เซีย"] = "myv",
["เอสกิโมดั้งเดิม"] = "esx-esk-pro",
["เอสเปรันโต"] = "eo",
["เอสโตเนีย"] = "et",
["เอเว"] = "ee",
["เอเวนค์"] = "evn",
["เอเว็น"] = "eve",
["เอโดม"] = "xdm",
["เฮลเลนิกดั้งเดิม"] = "grk-pro",
["เฮาซา"] = "ha",
["เฮเรโร"] = "hz",
["แกลิกแบบสกอตแลนด์"] = "gd",
["แคชเมียร์"] = "ks",
["แคะ"] = "hak",
["แจพอนิกดั้งเดิม"] = "jpx-pro",
["แซกซันเก่า"] = "osx",
["แดลเมเชีย"] = "dlm",
["แต้จิ๋ว"] = "nan-tws",
["แบกเตรีย"] = "xbc",
["แบชเคียร์"] = "ba",
["แบนทอยด์ดั้งเดิม"] = "nic-bod-pro",
["แบนทูดั้งเดิม"] = "bnt-pro",
["แบล็กสปีช"] = "art-bsp",
["แพ็กเจ"] = "pkc",
["แฟโร"] = "fo",
["แมงซ์"] = "gv",
["แมนจู"] = "mnc",
["แสก"] = "skb",
["แอกแคด"] = "akk",
["แอตแลนติก-คองโกดั้งเดิม"] = "alv-pro",
["แอฟโฟรเอเชียติกดั้งเดิม"] = "afa-pro",
["แอลกองเคียนดั้งเดิม"] = "alg-pro",
["แอลจิกดั้งเดิม"] = "aql-pro",
["แอลฟ์ดาเลิน"] = "ovd",
["แอละแบมา"] = "akz",
["แอลเบเนีย"] = "sq",
["แอลเบเนียนดั้งเดิม"] = "sqj-pro",
["โกฟา"] = "gof",
["โคซา"] = "xh",
["โคณฑี"] = "gon",
["โคตาน"] = "kho",
["โคทาวา"] = "avk",
["โจว"] = "tsu",
["โชนา"] = "sn",
["โชร์"] = "cjs",
["โซตซิล"] = "tzo",
["โซมาลอยด์ดั้งเดิม"] = "cus-som-pro",
["โซมาลี"] = "so",
["โซ่ง"] = "soa",
["โตทา"] = "tcx",
["โตฟา"] = "kim",
["โทกูโนชิมะ"] = "tkn",
["โทแคเรียนดั้งเดิม"] = "ine-toc-pro",
["โทแคเรียนบี"] = "txb",
["โทแคเรียนเอ"] = "xto",
["โนเวียล"] = "nov",
["โบล"] = "bol",
["โบลีเนา"] = "smk",
["โบโด"] = "brx",
["โบโด-กาโรดั้งเดิม"] = "tbq-bdg-pro",
["โปรตุเกส"] = "pt",
["โปแลนด์"] = "pl",
["โปแลนด์เก่า"] = "zlw-opl",
["โภชปุระ"] = "bho",
["โมกิล"] = "mkj",
["โมอับ"] = "obm",
["โมเชโน"] = "mhn",
["โยกัด"] = "yog",
["โยนางูนิ"] = "yoi",
["โยรง"] = "yox",
["โยรูบอยด์ดั้งเดิม"] = "alv-yrd-pro",
["โยรูบา"] = "yo",
["โยรูบาดั้งเดิม"] = "alv-yor-pro",
["โรมัญญา"] = "rgn",
["โรมานช์"] = "rm",
["โรมานี"] = "rom",
["โรมาเนีย"] = "ro",
["โรฮีนจา"] = "rhg",
["โลจบาน"] = "jbo",
["โลโกโน"] = "arw",
["โลโล-เบอร์มีซดั้งเดิม"] = "tbq-lob-pro",
["โลโลอิชดั้งเดิม"] = "tbq-lol-pro",
["โวต"] = "vot",
["โวลอฟ"] = "wo",
["โวลาปุก"] = "vo",
["โอกินาวะ"] = "ryu",
["โอกิโนเอราบุ"] = "okn",
["โอจิบเว"] = "oj",
["โอซิง"] = "osi",
["โอริยา"] = "or",
["โอริยากลาง"] = "inc-mor",
["โอริยาเก่า"] = "inc-oor",
["โอเชียนิกดั้งเดิม"] = "poz-oce-pro",
["ไซลีเซีย"] = "szl",
["ไทขาว"] = "twh",
["ไทดั้งเดิม"] = "tai-pro",
["ไทดำ"] = "blt",
["ไทตะวันตกเฉียงใต้ดั้งเดิม"] = "tai-swe-pro",
["ไทย"] = "th",
["ไทลื้อ"] = "khb",
["ไทแดง"] = "tyr",
["ไทแมน"] = "tyj",
["ไทแหล่ง"] = "tjl",
["ไทใต้คง"] = "tdd",
["ไทใหญ่"] = "shn",
["ไนเจอร์-คองโกดั้งเดิม"] = "nic-pro",
["ไปวัน"] = "pwn",
["ไมถิลี"] = "mai",
["ไมนอส"] = "omn",
["ไมยา"] = "sks",
["ไมโครนีเซียนดั้งเดิม"] = "poz-mic-pro",
["ไว"] = "vai",
["ไหล"] = "lic",
["ไหลดั้งเดิม"] = "qfa-lic-pro",
["ไหหลำ"] = "hnm",
["ไอซ์แลนด์"] = "is",
["ไอนุ"] = "ain",
["ไอย์มารา"] = "ay",
["ไอริช"] = "ga",
["ไอริชกลาง"] = "mga",
["ไอริชเก่า"] = "sga",
["Ỹaroamë"] = "yro",
}
i434pamj3bh1l6tz1inwko3jtgytyuw
อุ้ย
0
211890
5729293
5719860
2026-07-20T05:28:46Z
Alifshinobi
397
5729293
wikitext
text/x-wiki
{{also/auto}}
==ภาษาคำเมือง==
=== การออกเสียง ===
* {{IPA|nod|/ʔuj˦˥/|a=เชียงใหม่}}
===คำนาม===
{{nod-noun|tl=1}}
# {{altform|nod|ᩋᩩ᩠᩶ᨿ|t=[[ปู่]][[ย่า]][[ตา]][[ยาย]]}}
#: {{syn|nod|ทุ้ย|ป้ออุ้ย|แม่อุ้ย}}
{{topics|nod|ครอบครัว}}
842pg4myn6q6noeujybsatbmy01eka9
ป้ออุ้ย
0
211891
5729313
5720431
2026-07-20T05:40:11Z
Alifshinobi
397
/* ภาษาคำเมือง */
5729313
wikitext
text/x-wiki
{{also/auto}}
== ภาษาคำเมือง ==
=== คำนาม ===
{{nod-noun|tl=1}}
# {{altform|nod|ᨻᩬᩴ᩵ᩋᩩ᩠᩶ᨿ|t=[[ปู่]], [[ตา]]}}
{{topics|nod|ครอบครัว}}
6uee1s6iml9xbn2ram2mx4w52i0w1hn
5729314
5729313
2026-07-20T05:40:31Z
Alifshinobi
397
/* ภาษาคำเมือง */
5729314
wikitext
text/x-wiki
{{also/auto}}
== ภาษาคำเมือง ==
=== คำนาม ===
{{nod-noun}}
# {{altform|nod|ᨻᩬᩴ᩵ᩋᩩ᩠᩶ᨿ|t=[[ปู่]], [[ตา]]}}
{{topics|nod|ครอบครัว}}
2mlpvv6osj2c14um55g5kr5gat0bwb3
มอดูล:ca-headword
828
232398
5729298
4750744
2026-07-20T05:32:56Z
Octahedron80
267
5729298
Scribunto
text/plain
local export = {}
local pos_functions = {}
local force_cat = false -- for testing; if true, categories appear in non-mainspace pages
local m_table = require("Module:table")
local com = require("Module:ca-common")
local ca_IPA_module = "Module:ca-IPA"
local ca_verb_module = "Module:ca-verb"
local en_utilities_module = "Module:en-utilities"
local inflection_utilities_module = "Module:inflection utilities"
local parse_utilities_module = "Module:parse utilities"
local romut_module = "Module:romance utilities"
local lang = require("Module:languages").getByCode("ca")
local langname = --[[lang:getCanonicalName()]] lang:getCategoryName()
local list_to_text = mw.text.listToText
local rfind = mw.ustring.find
local rmatch = mw.ustring.match
local rsplit = mw.text.split
local usub = mw.ustring.sub
local rsub = com.rsub
local function track(page)
require("Module:debug/track")("ca-headword/" .. page)
return true
end
local boolean = {type = "boolean"}
local list = {list = true}
-----------------------------------------------------------------------------------------
-- Main entry point --
-----------------------------------------------------------------------------------------
-- The main entry point.
-- This is the only function that can be invoked from a template.
function export.show(frame)
local poscat = frame.args[1] or error("Part of speech has not been specified. Please pass parameter 1 to the module invocation.")
-- หมวดหมู่เป็นภาษาไทย
local poscat_th = require("Module:th-utilities").th_pos(poscat)
local params = {
["head"] = list,
["id"] = {},
["splithyph"] = boolean,
["nolinkhead"] = boolean,
["json"] = boolean,
["pagename"] = {}, -- for testing
}
if pos_functions[poscat_th] then
for key, val in pairs(pos_functions[poscat_th].params) do
params[key] = val
end
end
local args = require("Module:parameters").process(frame:getParent().args, params)
local pagename = args.pagename or mw.loadData("Module:headword/data").pagename
local user_specified_heads = args.head
local heads = user_specified_heads
if args.nolinkhead then
if #heads == 0 then
heads = {pagename}
end
else
local romut = require(romut_module)
local auto_linked_head = romut.add_links_to_multiword_term(pagename, args.splithyph)
if #heads == 0 then
heads = {auto_linked_head}
else
for i, head in ipairs(heads) do
if head:find("^~") then
head = romut.apply_link_modifiers(auto_linked_head, usub(head, 2))
heads[i] = head
end
if head == auto_linked_head then
track("redundant-head")
end
end
end
end
local data = {
lang = lang,
pos_category = poscat_th,
categories = {},
heads = heads,
user_specified_heads = user_specified_heads,
no_redundant_head_cat = #user_specified_heads == 0,
genders = {},
inflections = {},
pagename = pagename,
id = args.id,
force_cat_output = force_cat,
}
local is_suffix = false
if pagename:find("^%-") and poscat_th ~= "รูปปัจจัย" then
is_suffix = true
data.pos_category = "ปัจจัย"
local singular_poscat = --[[require(en_utilities_module).singularize(poscat)]] poscat_th
table.insert(data.categories, "ปัจจัยสร้าง" .. singular_poscat .. langname)
table.insert(data.inflections, {label = "ปัจจัยสร้าง" .. singular_poscat})
end
if pos_functions[poscat_th] then
pos_functions[poscat_th].func(args, data)
end
if args.json then
return require("Module:JSON").toJSON(data)
end
local post_note = data.post_note and "; " .. data.post_note or ""
return require("Module:headword").full_headword(data) .. post_note
end
-----------------------------------------------------------------------------------------
-- Utility functions --
-----------------------------------------------------------------------------------------
local function glossary_link(entry, text)
text = text or entry
return "[[Appendix:Glossary#" .. entry .. "|" .. text .. "]]"
end
local function fetch_qualifiers(qual, existing)
if not qual then
return existing
end
if not existing then
return {qual}
end
local retval = {}
for _, e in ipairs(existing) do
table.insert(retval, e)
end
table.insert(retval, qual)
return retval
end
local function process_terms_with_qualifiers(terms, quals)
local infls = {}
for i, term in ipairs(terms) do
table.insert(infls, {term = term, q = fetch_qualifiers(quals[i])})
end
return infls
end
local function replace_hash_with_lemma(term, lemma)
-- If there is a % sign in the lemma, we have to replace it with %% so it doesn't get interpreted as a capture replace
-- expression.
lemma = lemma:gsub("%%", "%%%%")
-- Assign to a variable to discard second return value.
term = term:gsub("#", lemma)
return term
end
local function check_all_missing(data, forms, plpos)
for _, form in ipairs(forms) do
if type(form) == "table" then
form = form.term
end
if form then
local title = mw.title.new(form)
if title and not title.exists then
table.insert(data.categories, langname .. " " .. plpos .. " with red links in their headword lines")
end
end
end
end
local function insert_ancillary_inflection(data, forms, quals, label, plpos)
if forms and #forms > 0 then
local terms = process_terms_with_qualifiers(forms, quals)
check_all_missing(data, terms, plpos)
terms.label = label
table.insert(data.inflections, terms)
end
end
-----------------------------------------------------------------------------------------
-- Adjectives --
-----------------------------------------------------------------------------------------
local function do_adjective(args, data, pos, is_suffix, is_superlative)
local feminines = {}
local masculine_plurals = {}
local feminine_plurals = {}
if is_suffix then
pos = "ปัจจัย"
end
local plpos = --[[require(en_utilities_module).pluralize(pos)]] pos
if not is_suffix then
data.pos_category = plpos
end
if args.sp then
local romut = require(romut_module)
if not romut.allowed_special_indicators[args.sp] then
local indicators = {}
for indic, _ in pairs(romut.allowed_special_indicators) do
table.insert(indicators, "'" .. indic .. "'")
end
table.sort(indicators)
error("Special inflection indicator beginning can only be " ..
list_to_text(indicators) .. ": " .. args.sp)
end
end
local lemma = data.pagename
local function insert_inflection(forms, label, accel)
if #forms > 0 then
if forms[1].term == "-" then
table.insert(data.inflections, {label = "ไม่มี" .. label})
else
forms.label = label
forms.accel = {form = accel}
table.insert(data.inflections, forms)
end
end
end
if args.f[1] == "ind" or args.f[1] == "inv" then
-- invariable adjective
table.insert(data.inflections, {label = glossary_link("ผันรูปไม่ได้")})
table.insert(data.categories, plpos .. "ผันรูปไม่ได้" .. langname)
if args.sp or #args.f > 1 or #args.pl > 0 or #args.mpl > 0 or #args.fpl > 0 then
error("Can't specify inflections with an invariable " .. pos)
end
elseif args.fonly then
-- feminine-only
if #args.f > 0 then
error("Can't specify explicit feminines with feminine-only " .. pos)
end
if #args.pl > 0 then
error("Can't specify explicit plurals with feminine-only " .. pos .. ", use fpl=")
end
if #args.mpl > 0 then
error("Can't specify explicit masculine plurals with feminine-only " .. pos)
end
local argsfpl = args.fpl
if #argsfpl == 0 then
argsfpl = {"+"}
end
for i, fpl in ipairs(argsfpl) do
local quals = fetch_qualifiers(args.fpl_qual[i])
if fpl == "+" then
-- Generate default feminine plural.
local defpls = com.make_plural(lemma, "f", args.sp)
if not defpls then
error("Unable to generate default plural of '" .. lemma .. "'")
end
for _, defpl in ipairs(defpls) do
table.insert(feminine_plurals, {term = defpl, q = quals})
end
else
table.insert(feminine_plurals, {term = replace_hash_with_lemma(fpl, lemma), q = quals})
end
end
check_all_missing(data, feminine_plurals, plpos)
table.insert(data.inflections, {label = "เพศหญิงเท่านั้น"})
insert_inflection(feminine_plurals, "เพศหญิงพหูพจน์", "f|p")
else
-- Gather feminines.
local argsf = args.f
if #argsf == 0 then
argsf = {"+"}
end
for i, f in ipairs(argsf) do
if f == "mf" then
f = lemma
elseif f == "+" then
-- Generate default feminine.
f = com.make_feminine(lemma, args.sp)
else
f = replace_hash_with_lemma(f, lemma)
end
table.insert(feminines, {term = f, q = fetch_qualifiers(args.f_qual[i])})
end
local fem_like_lemma = #feminines == 1 and feminines[1].term == lemma and not feminines[1].q
if fem_like_lemma then
table.insert(data.categories, plpos .. "epicene" .. langname)
end
local argsmpl = args.mpl
local argsfpl = args.fpl
if #args.pl > 0 then
if #argsmpl > 0 or #argsfpl > 0 or args.mpl_qual.maxindex > 0 or args.fpl_qual.maxindex > 0 then
error("Can't specify both pl= and mpl=/fpl=")
end
argsmpl = args.pl
args.mpl_qual = args.pl_qual
argsfpl = args.pl
args.fpl_qual = args.pl_qual
end
if #argsmpl == 0 then
argsmpl = {"+"}
end
if #argsfpl == 0 then
argsfpl = {"+"}
end
for i, mpl in ipairs(argsmpl) do
local quals = fetch_qualifiers(args.mpl_qual[i])
if mpl == "+" then
-- Generate default masculine plural.
local defpls
-- First, some special hacks based on the feminine singular.
if not fem_like_lemma and not args.sp and not lemma:find(" ") then
for _, f in ipairs(feminines) do
if f.term:find("ssa$") then
-- If the feminine ends in -ssa, assume that the -ss- is also in the
-- masculine plural form
defpls = {rsub(f.term, "a$", "os")}
break
elseif f.term == lemma .. "na" then
defpls = {lemma .. "ns"}
break
elseif lemma:find("ig$") and f.term:find("ja$") then
-- Adjectives in -ig have two masculine plural forms, one derived from
-- the m.sg. and the other derived from the f.sg.
defpls = {lemma .. "s", rsub(f.term, "ja$", "jos")}
break
end
end
end
defpls = defpls or com.make_plural(lemma, "m", args.sp)
if not defpls then
error("Unable to generate default plural of '" .. lemma .. "'")
end
for _, defpl in ipairs(defpls) do
table.insert(masculine_plurals, {term = defpl, q = quals})
end
else
table.insert(masculine_plurals, {term = replace_hash_with_lemma(mpl, lemma), q = quals})
end
end
for i, fpl in ipairs(argsfpl) do
if fpl == "+" then
-- First, some special hacks based on the feminine singular.
if fem_like_lemma and not args.sp and not lemma:find(" ") and lemma:find("[çx]$") then
-- Adjectives ending in -ç or -x behave as mf-type in the singular, but
-- regular type in the plural.
local defpls = com.make_plural(lemma .. "a", "f")
if not defpls then
error("Unable to generate default plural of '" .. lemma .. "a'")
end
local fquals = fetch_qualifiers(args.fpl_qual[i])
for _, defpl in ipairs(defpls) do
table.insert(feminine_plurals, {term = defpl, q = fquals})
end
else
for _, f in ipairs(feminines) do
-- Generate default feminine plural; f is a table.
local defpls = com.make_plural(f.term, "f", args.sp)
if not defpls then
error("Unable to generate default plural of '" .. f.term .. "'")
end
local fquals = fetch_qualifiers(args.fpl_qual[i], f.q)
for _, defpl in ipairs(defpls) do
table.insert(feminine_plurals, {term = defpl, q = fquals})
end
end
end
else
fpl = replace_hash_with_lemma(fpl, lemma)
table.insert(feminine_plurals, {term = fpl, q = fetch_qualifiers(args.fpl_qual[i])})
end
end
check_all_missing(data, feminines, plpos)
check_all_missing(data, masculine_plurals, plpos)
check_all_missing(data, feminine_plurals, plpos)
local fem_pl_like_masc_pl = #masculine_plurals > 0 and #feminine_plurals > 0 and
m_table.deepEquals(masculine_plurals, feminine_plurals)
local masc_pl_like_lemma = #masculine_plurals == 1 and masculine_plurals[1].term == lemma and
not masculine_plurals[1].q
if fem_like_lemma and fem_pl_like_masc_pl and masc_pl_like_lemma then
-- actually invariable
table.insert(data.inflections, {label = glossary_link("ผันรูปไม่ได้")})
table.insert(data.categories, plpos .. "ผันรูปไม่ได้" .. langname)
else
-- Make sure there are feminines given and not same as lemma.
if not fem_like_lemma then
insert_inflection(feminines, "เพศหญิง", "f|s")
else
data.genders = {"mf"}
end
if fem_pl_like_masc_pl then
insert_inflection(masculine_plurals, "เพศชายและเพศหญิงพหูพจน์", "p")
else
insert_inflection(masculine_plurals, "เพศชายพหูพจน์", "m|p")
insert_inflection(feminine_plurals, "เพศหญิงพหูพจน์", "f|p")
end
end
end
if args.irreg and is_superlative then
table.insert(data.categories, plpos .. "ขั้นสุดไม่ปรกติ" .. langname)
end
end
local function get_adjective_params(adjtype)
local params = {
["sp"] = {}, -- special indicator: "first", "first-last", etc.
["f"] = list, --feminine form(s)
[1] = {alias_of = "f", list = false},
["f_qual"] = {list = "f\1_qual", allow_holes = true},
["pl"] = list, --plural override(s)
["pl_qual"] = {list = "pl\1_qual", allow_holes = true},
["mpl"] = list, --masculine plural override(s)
["mpl_qual"] = {list = "mpl\1_qual", allow_holes = true},
["fpl"] = list, --feminine plural override(s)
["fpl_qual"] = {list = "fpl\1_qual", allow_holes = true},
}
if adjtype == "base" then
params["comp"] = list --comparative(s)
params["comp_qual"] = {list = "comp\1_qual", allow_holes = true}
params["sup"] = list --superlative(s)
params["sup_qual"] = {list = "sup\1_qual", allow_holes = true}
params["dim"] = list --diminutive(s)
params["dim_qual"] = {list = "dim\1_qual", allow_holes = true}
params["aug"] = list --augmentative(s)
params["aug_qual"] = {list = "aug\1_qual", allow_holes = true}
params["fonly"] = boolean -- feminine only
params["hascomp"] = {} -- has comparative
end
if adjtype == "sup" then
params["irreg"] = boolean
end
return params
end
-- Display additional inflection information for an adjective
pos_functions["คำคุณศัพท์"] = {
params = get_adjective_params("base"),
func = function(args, data, is_suffix)
do_adjective(args, data, "คำคุณศัพท์", is_suffix)
end,
}
pos_functions["รูปกริยาขยายอดีตกาล"] = {
params = get_adjective_params("part"),
func = function(args, data, is_suffix)
do_adjective(args, data, "รูปกริยาขยาย", is_suffix)
data.pos_category = "รูปกริยาขยายอดีตกาล"
end,
}
pos_functions["ตัวกำหนด"] = {
params = get_adjective_params("det"),
func = function(args, data, is_suffix)
do_adjective(args, data, "ตัวกำหนด", is_suffix)
end,
}
pos_functions["คำสรรพนาม"] = {
params = get_adjective_params("pron"),
func = function(args, data, is_suffix)
do_adjective(args, data, "คำสรรพนาม", is_suffix)
end,
}
-----------------------------------------------------------------------------------------
-- Nouns --
-----------------------------------------------------------------------------------------
local allowed_genders = m_table.listToSet(
{"m", "f", "mf", "mfbysense", "n", "m-p", "f-p", "mf-p", "mfbysense-p", "n-p", "?", "?-p"}
)
local function process_genders(data, genders, g_qual)
for i, g in ipairs(genders) do
if not allowed_genders[g] then
error("Unrecognized gender: " .. g)
end
if g_qual[i] then
table.insert(data.genders, {spec = g, qualifiers = {g_qual[i]}})
else
table.insert(data.genders, g)
end
end
end
local function do_noun(args, data, pos, is_suffix, is_proper)
local is_plurale_tantum = false
local has_singular = false
if is_suffix then
pos = "ปัจจัย"
end
local plpos = --[[require(en_utilities_module).pluralize(pos)]] pos
data.genders = {}
local saw_m = false
local saw_f = false
local gender_for_default_plural, gender_for_irreg_ending
process_genders(data, args[1], args.g_qual)
-- Check for specific genders and pluralia tantum.
for _, g in ipairs(args[1]) do
if g:find("-p$") then
is_plurale_tantum = true
else
has_singular = true
if g == "m" or g == "mf" or g == "mfbysense" then
saw_m = true
end
if g == "f" or g == "mf" or g == "mfbysense" then
saw_f = true
end
end
end
if saw_m and saw_f then
gender_for_default_plural = "m"
gender_for_irreg_ending = "mf"
elseif saw_f then
gender_for_default_plural = "f"
gender_for_irreg_ending = "f"
else
gender_for_default_plural = "m"
gender_for_irreg_ending = "m"
end
local lemma = data.pagename
local function insert_inflection(list, term, accel, qualifiers, no_inv)
local infl = {q = qualifiers, accel = accel}
--if term == lemma and not no_inv then
-- infl.label = glossary_link("ผันรูปไม่ได้")
--else
infl.term = term
--end
infl.term_for_further_inflection = term
table.insert(list, infl)
end
-- Plural
local plurals = {}
local args_pl = args[2]
if is_plurale_tantum and not has_singular then
if #args_pl > 0 then
error("Can't specify plurals of plurale tantum " .. pos)
end
table.insert(data.inflections, {label = glossary_link("พหูพจน์เท่านั้น")})
else
if is_plurale_tantum then
-- both singular and plural
table.insert(data.inflections, {label = "บางครั้ง" .. glossary_link("พหูพจน์เท่านั้น") .. ", ในการแปรผัน"})
end
-- If no plurals, use the default plural if not a proper noun.
if #args_pl == 0 and not is_proper then
args_pl = {"+"}
end
-- If only ~ given (countable and uncountable), add the default plural after it.
if #args_pl == 1 and args_pl[1] == "~" then
args_pl = {"~", "+"}
end
-- Gather plurals, handling requests for default plurals
for i, pl in ipairs(args_pl) do
local function insert_pl(term)
local quals = fetch_qualifiers(args.pl_qual[i])
if term == lemma and i == 1 and #args_pl == 1 then
table.insert(data.inflections, {label = glossary_link("ผันรูปไม่ได้"), q = quals})
table.insert(data.categories, plpos .. "ผันรูปไม่ได้" .. langname)
else
insert_inflection(plurals, term, nil, quals)
end
table.insert(data.categories, plpos .. "นับได้" .. langname)
end
local function make_plural_and_insert(form, special)
local pls = com.make_plural(lemma, gender_for_default_plural, special)
if pls then
for _, pl in ipairs(pls) do
insert_pl(pl)
end
end
end
if pl == "+" then
make_plural_and_insert(lemma)
elseif pl:find("^%+") then
pl = require(romut_module).get_special_indicator(pl)
make_plural_and_insert(lemma, pl)
elseif pl == "?" or pl == "!" then
if i > 1 or #args_pl > 1 then
error("Can't specify ? or ! with other plurals")
end
if pl == "?" then
-- Plural is unknown
-- Better not to display anything
-- table.insert(data.inflections, {label = "พหูพจน์ไม่ทราบหรือไม่แน่ชัด"})
table.insert(data.categories, langname .. " " .. plpos .. " with unknown or uncertain plurals")
else
-- Plural is not attested
table.insert(data.inflections, {label = "พหูพจน์ไม่รับรอง"})
table.insert(data.categories, langname .. " " .. plpos .. " with unattested plurals")
end
elseif pl == "-" then
if i > 1 then
error("Plural specifier - must be first")
end
-- Uncountable noun; may occasionally have a plural
table.insert(data.categories, plpos .. "นับไม่ได้" .. langname)
-- If plural forms were given explicitly, then show "usually"
if #args_pl > 1 then
table.insert(data.inflections, {label = "โดยปกติ" .. glossary_link("นับไม่ได้")})
table.insert(data.categories, plpos .. "นับได้" .. langname)
else
table.insert(data.inflections, {label = glossary_link("uncountable")})
end
elseif pl == "~" then
if i > 1 then
error("Plural specifier ~ must be first")
end
-- Countable and uncountable noun; will have a plural
table.insert(data.categories, plpos .. "นับได้" .. langname)
table.insert(data.categories, plpos .. "นับไม่ได้" .. langname)
table.insert(data.inflections, {label = glossary_link("นับได้") .. "และ" .. glossary_link("นับไม่ได้")})
else
insert_pl(replace_hash_with_lemma(pl, lemma))
end
end
end
if #plurals > 1 then
table.insert(data.categories, langname .. " " .. plpos .. " with multiple plurals")
end
-- Gather masculines/feminines.
local function handle_mf(mfs, qualifiers, inflect)
local retval = {}
for i, mf in ipairs(mfs) do
local function insert_infl(list, term, accel, existing_qualifiers)
insert_inflection(list, term, accel, fetch_qualifiers(qualifiers[i], existing_qualifiers), "no inv")
end
local function call_inflect(special)
if inflect then
-- Generate default feminine.
return inflect(lemma, special)
else
-- FIXME
error("Can't generate default masculine currently")
end
end
if mf == "+" then
mf = call_inflect()
else
mf = replace_hash_with_lemma(mf, lemma)
end
local special = require(romut_module).get_special_indicator(mf)
if special then
mf = call_inflect(special)
end
insert_infl(retval, mf)
end
return retval
end
local feminines = handle_mf(args.f, args.f_qual, com.make_feminine)
-- FIXME, write make_masculine()
local masculines = handle_mf(args.m, args.m_qual)
check_all_missing(data, plurals, plpos)
check_all_missing(data, feminines, plpos)
if #plurals > 0 then
plurals.label = "พหูพจน์"
plurals.accel = {form = "p"}
table.insert(data.inflections, plurals)
end
if #masculines > 0 then
masculines.label = "เพศชาย"
table.insert(data.inflections, masculines)
end
if #feminines > 0 then
feminines.label = "เพศหญิง"
feminines.accel = {form = "f"}
table.insert(data.inflections, feminines)
end
-- Is this a noun with an unexpected ending (for its gender)?
-- Only check if the term is one word (there are no spaces in the term).
local irreg_gender_lemma = rsub(lemma, " .*", "") -- only look at first word
if (gender_for_irreg_ending == "m" or gender_for_irreg_ending == "mf") and irreg_gender_lemma:find("a$") then
table.insert(data.categories, plpos .. "เพศชาย" .. langname .. "ที่ลงท้ายด้วย -a")
elseif (gender_for_irreg_ending == "f" or gender_for_irreg_ending == "mf") and not (
irreg_gender_lemma:find("a$") or irreg_gender_lemma:find("ió$") or irreg_gender_lemma:find("tat$") or
irreg_gender_lemma:find("tud$") or irreg_gender_lemma:find("[dt]riu$")) then
table.insert(data.categories, plpos .. "เพศหญิง" .. langname .. "ที่ไม่มีส่วนลงท้ายเพศหญิง")
end
end
local function get_noun_params()
return {
[1] = {list = "g", required = true, default = "?"},
[2] = {list = "pl"},
["g_qual"] = {list = "g\1_qual", allow_holes = true},
["pl_qual"] = {list = "pl\1_qual", allow_holes = true},
["m"] = list,
["m_qual"] = {list = "m\1_qual", allow_holes = true},
["f"] = list,
["f_qual"] = {list = "f\1_qual", allow_holes = true},
["mpl"] = list,
["mpl_qual"] = {list = "mpl\1_qual", allow_holes = true},
["fpl"] = list,
["fpl_qual"] = {list = "fpl\1_qual", allow_holes = true},
}
end
pos_functions["คำนาม"] = {
params = get_noun_params(),
func = function(args, data, is_suffix)
do_noun(args, data, "คำนาม", is_suffix)
end,
}
pos_functions["คำวิสามานยนาม"] = {
params = get_noun_params(),
func = function(args, data, is_suffix)
do_noun(args, data, "คำนาม", is_suffix, "is proper")
end,
}
-----------------------------------------------------------------------------------------
-- Verbs --
-----------------------------------------------------------------------------------------
pos_functions["คำกริยา"] = {
params = {
[1] = {},
["pres"] = list, --present
["pres_qual"] = {list = "pres\1_qual", allow_holes = true},
["pres3s"] = list, --third-singular present
["pres3s_qual"] = {list = "pres3s\1_qual", allow_holes = true},
["pret"] = list, --preterite
["pret_qual"] = {list = "pret\1_qual", allow_holes = true},
["part"] = list, --participle
["part_qual"] = {list = "part\1_qual", allow_holes = true},
["short_part"] = list, --short participle
["short_part_qual"] = {list = "short_part\1_qual", allow_holes = true},
["noautolinktext"] = boolean,
["noautolinkverb"] = boolean,
["attn"] = boolean,
["pres_1_sg"] = true, -- accept any ignore old-style param
["past_part"] = true, -- accept any ignore old-style param
["root"] = true, -- FIXME: Implement root-stressed vowel quality
},
func = function(args, data, tracking_categories, frame)
local preses, preses_3s, prets, parts, short_parts
if args.attn then
table.insert(tracking_categories, "Requests for attention concerning " .. langname)
return
end
local ca_verb = require(ca_verb_module)
local alternant_multiword_spec = ca_verb.do_generate_forms(args, "ca-verb", data.heads[1])
local specforms = alternant_multiword_spec.forms
local function slot_exists(slot)
return specforms[slot] and #specforms[slot] > 0
end
local function do_finite(slot_tense, label_tense)
-- Use pres_3s if it exists and pres_1s doesn't exist (e.g. impersonal verbs); similarly for pres_3p (only3p verbs);
-- but fall back to pres_1s if neither pres_1s nor pres_3s nor pres_3p exist (e.g. [[empedernir]]).
local has_1s = slot_exists(slot_tense .. "_1s")
local has_3s = slot_exists(slot_tense .. "_3s")
local has_3p = slot_exists(slot_tense .. "_3p")
if has_1s or (not has_3s and not has_3p) then
return {
slot = slot_tense .. "_1s",
label = ("บุรุษที่หนึ่งเอกพจน์%s"):format(label_tense),
}, true
elseif has_3s then
return {
slot = slot_tense .. "_3s",
label = ("บุรุษที่สามเอกพจน์%s"):format(label_tense),
}, false
else
return {
slot = slot_tense .. "_3p",
label = ("บุรุษที่สามพหูพจน์%s"):format(label_tense),
}, false
end
end
local did_pres_1s
preses, did_pres_1s = do_finite("pres", "ปัจจุบันกาล")
preses_3s = {
slot = "pres_3s",
label = "บุรุษที่สามเอกพจน์ปัจจุบันกาล",
}
prets = do_finite("pret", "อดีตกาลสิ้นสุด")
parts = {
slot = "pp_ms",
label = "รูปกริยาขยายอดีตกาล",
}
short_parts = {
slot = "short_pp_ms",
label = "รูปกริยาขยายอดีตกาลสั้น",
}
if #args.pres > 0 or #args.pres3s > 0 or #args.pret > 0 or #args.part > 0 or #args.short_part > 0 then
track("verb-old-multiarg")
end
local function strip_brackets(qualifiers)
if not qualifiers then
return nil
end
local stripped_qualifiers = {}
for _, qualifier in ipairs(qualifiers) do
local stripped_qualifier = qualifier:match("^%[(.*)%]$")
if not stripped_qualifier then
error("Internal error: Qualifier should be surrounded by brackets at this stage: " .. qualifier)
end
table.insert(stripped_qualifiers, stripped_qualifier)
end
return stripped_qualifiers
end
local function do_verb_form(args, qualifiers, slot_desc, skip_if_empty)
local forms
local to_insert
if #args == 0 then
forms = specforms[slot_desc.slot]
if not forms or #forms == 0 then
if skip_if_empty then
return
end
forms = {{form = "-"}}
end
elseif #args == 1 and args[1] == "-" then
forms = {{form = "-"}}
else
forms = {}
for i, arg in ipairs(args) do
local qual = qualifiers[i]
if qual then
-- FIXME: It's annoying we have to add brackets and strip them out later. The inflection
-- code adds all footnotes with brackets around them; we should change this.
qual = {"[" .. qual .. "]"}
end
local form = arg
if not args.noautolinkverb then
-- [[Module:inflection utilities]] already loaded by [[Module:ca-verb]]
form = require(inflection_utilities_module).add_links(form)
end
table.insert(forms, {form = form, footnotes = qual})
end
end
if forms[1].form == "-" then
to_insert = {label = "no " .. slot_desc.label}
else
local into_table = {label = slot_desc.label}
for _, form in ipairs(forms) do
local qualifiers = strip_brackets(form.footnotes)
-- Strip redundant brackets surrounding entire form. These may get generated e.g.
-- if we use the angle bracket notation with a single word.
local stripped_form = rmatch(form.form, "^%[%[([^%[%]]*)%]%]$") or form.form
-- Don't include accelerators if brackets remain in form, as the result will be wrong.
-- FIXME: For now, don't include accelerators. We should use the new {{ca-verb form of}}.
-- local this_accel = not stripped_form:find("%[%[") and accel or nil
local this_accel = nil
table.insert(into_table, {term = stripped_form, q = qualifiers, accel = this_accel})
end
to_insert = into_table
end
table.insert(data.inflections, to_insert)
end
local skip_pres_if_empty
if alternant_multiword_spec.no_pres1_and_sub then
table.insert(data.inflections, {label = "ไม่มีบุรุษที่หนึ่งเอกพจน์ปัจจุบันกาล"})
table.insert(data.inflections, {label = "no present subjunctive"})
end
if alternant_multiword_spec.no_pres_stressed then
table.insert(data.inflections, {label = "no stressed present indicative or subjunctive"})
skip_pres_if_empty = true
end
if alternant_multiword_spec.only3s then
table.insert(data.inflections, {label = glossary_link("อบุรุษ")})
elseif alternant_multiword_spec.only3sp then
table.insert(data.inflections, {label = "บุรุษที่สามเท่านั้น"})
elseif alternant_multiword_spec.only3p then
table.insert(data.inflections, {label = "บุรุษที่สามพหูพจน์เท่านั้น"})
end
local has_vowel_alt
if alternant_multiword_spec.vowel_alt then
for _, vowel_alt in ipairs(alternant_multiword_spec.vowel_alt) do
if vowel_alt ~= "+" and vowel_alt ~= "í" and vowel_alt ~= "ú" then
has_vowel_alt = true
break
end
end
end
do_verb_form(args.pres, args.pres_qual, preses, skip_pres_if_empty)
-- We want to include both the pres_1s and pres_3s if there is a vowel alternation in the present singular. But we
-- don't want to redundantly include the pres_3s if we already included it.
if did_pres_1s and has_vowel_alt then
do_verb_form(args.pres3s, args.pres3s_qual, preses_3s, skip_pres_if_empty)
end
do_verb_form(args.pret, args.pret_qual, prets)
do_verb_form(args.part, args.part_qual, parts)
do_verb_form(args.short_part, args.short_part_qual, short_parts, "skip if empty")
-- Add categories.
for _, cat in ipairs(alternant_multiword_spec.categories) do
table.insert(data.categories, cat)
end
-- If the user didn't explicitly specify head=, or specified exactly one head (not 2+) and we were able to
-- incorporate any links in that head into the 1= specification, use the infinitive generated by
-- [[Module:ca-verb]] in place of the user-specified or auto-generated head. This was copied from
-- [[Module:it-headword]], where doing this gets accents marked on the verb(s). We don't have accents marked on
-- the verb but by doing this we do get any footnotes on the infinitive propagated here. Don't do this if the
-- user gave multiple heads or gave a head with a multiword-linked verbal expression such as Italian
-- '[[dare esca]] [[al]] [[fuoco]]' (FIXME: give Catalan equivalent).
if #data.user_specified_heads == 0 or (
#data.user_specified_heads == 1 and alternant_multiword_spec.incorporated_headword_head_into_lemma
) then
data.heads = {}
for _, lemma_obj in ipairs(alternant_multiword_spec.forms.infinitive_linked) do
local quals, refs = require(inflection_utilities_module).
convert_footnotes_to_qualifiers_and_references(lemma_obj.footnotes)
table.insert(data.heads, {term = lemma_obj.form, q = quals, refs = refs})
end
end
if args.root then
local m_ca_IPA = require(ca_IPA_module)
local parsed_respellings = {}
local function set_parsed_respelling(dialect, parsed)
-- Validate the individual root vowel specs.
for _, termobj in ipairs(parsed.terms) do
if not rfind(termobj.words[1].term, "^" .. m_ca_IPA.mid_vowel_hint_c .. "$") then
error(("Root vowel spec '%s' should be one of the vowels %s"):format(
termobj.words[1].term, m_ca_IPA.mid_vowel_hints))
end
end
if not dialect then
for _, dial in ipairs(m_ca_IPA.dialects) do
-- Need to clone as we destructively modify each one later with the pronun.
parsed_respellings[dial] = m_table.deepCopy(parsed)
end
elseif m_ca_IPA.dialect_groups[dialect] then
for _, dial in ipairs(m_ca_IPA.dialect_groups[dialect]) do
-- Need to clone as we destructively modify each one later with the pronun.
parsed_respellings[dial] = m_table.deepCopy(parsed)
end
else
parsed_respellings[dialect] = parsed
end
end
local function check_dialect_or_dialect_group(dialect)
if not m_table.contains(m_ca_IPA.dialects, dialect) and not
m_ca_IPA.dialect_groups[dialect] then
local dialect_list = {}
for _, dial in ipairs(m_ca_IPA.dialects) do
table.insert(dialect_list, "'" .. dial .. "'")
end
dialect_list = list_to_text(dialect_list, nil, " or ")
local dialect_group_list = {}
for dialect_group, _ in pairs(m_ca_IPA.dialect_groups) do
table.insert(dialect_group_list, "'" .. dialect_group .. "'")
end
dialect_group_list = list_to_text(dialect_group_list, nil, " or ")
error(("Unrecognized dialect '%s': Should be a dialect %s or a dialect group %s"):format(
dialect, dialect_list, dialect_group_list))
end
end
-- Parse the root vowel specs.
if args.root:find("[<%[]") then
local put = require(parse_utilities_module)
-- Parse balanced segment runs involving either [...] (substitution notation) or <...> (inline
-- modifiers). We do this because we don't want commas or semicolons inside of square or angle brackets
-- to count as respelling delimiters. However, we need to rejoin square-bracketed segments with nearby
-- ones after splitting alternating runs on comma and semicolon.
local segments = put.parse_multi_delimiter_balanced_segment_run(args.root, {{"<", ">"}, {"[", "]"}})
local semicolon_separated_groups = put.split_alternating_runs(segments, "%s*;%s*")
for _, group in ipairs(semicolon_separated_groups) do
local first_element = group[1]
local dialect
if first_element:find("^[a-z]+:") then
-- a dialect-specific spec
local rest
dialect, rest = first_element:match("^([a-z]+):(.*)$")
check_dialect_or_dialect_group(dialect)
group[1] = rest
end
local comma_separated_groups = put.split_alternating_runs_on_comma(group)
-- Process each value.
local outer_container = m_ca_IPA.parse_comma_separated_groups(comma_separated_groups, true, args.root,
"root")
set_parsed_respelling(dialect, outer_container)
end
else
for _, dialect_spec in ipairs(rsplit(args.root, "%s*;%s*")) do
local dialect
if dialect_spec:find("^[a-z]+:") then
-- a dialect-specific spec
local rest
dialect, rest = dialect_spec:match("^([a-z]+):(.*)$")
check_dialect_or_dialect_group(dialect)
dialect_spec = rest
end
local termobjs = {}
for _, word in ipairs(rsplit(dialect_spec, ",")) do
table.insert(termobjs, {words = {{term = word}}})
end
set_parsed_respelling(dialect, {
terms = termobjs,
})
end
end
-- Convert each canonicalized respelling to phonemic/phonetic IPA.
m_ca_IPA.generate_phonemic_phonetic(parsed_respellings)
-- Group the results.
local grouped_pronuns = m_ca_IPA.group_pronuns_by_dialect(parsed_respellings)
-- Format for display.
for _, grouped_pronun_spec in pairs(grouped_pronuns) do
local pronunciations = {}
local function ins(text)
table.insert(pronunciations, text)
end
-- Loop through each pronunciation. For each one, format the phonetic version "raw".
for j, pronun in ipairs(grouped_pronun_spec.pronuns) do
-- Add dialect tags to left accent qualifiers if first one
local as = pronun.a
if j == 1 then
if as then
as = m_table.deepCopy(as)
else
as = {}
end
for _, dialect in ipairs(grouped_pronun_spec.dialects) do
table.insert(as, m_ca_IPA.dialects_to_names[dialect])
end
else
ins(", ")
end
local slash_pron = "/" .. pronun.phonetic:gsub("ˈ", "") .. "/"
if as or pronun.q or pronun.qq or pronun.aa then
ins(require("Module:pron qualifier").format_qualifiers {
lang = lang,
text = slash_pron,
q = pronun.q,
a = as,
qq = pronun.qq,
aa = pronun.aa
})
else
ins(slash_pron)
end
if pronun.refs then
-- FIXME: Copied from [[Module:IPA]]. Should be in a module.
local refs = {}
if #pronun.refs > 0 then
for _, refspec in ipairs(pronun.refs) 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
ins(table.concat(refs))
end
end
end
grouped_pronun_spec.formatted = table.concat(pronunciations)
end
-- Concatenate formatted results.
local formatted = {}
for _, grouped_pronun_spec in ipairs(grouped_pronuns) do
table.insert(formatted, grouped_pronun_spec.formatted)
end
data.post_note = "''root stress'': " .. table.concat(formatted, "; ")
end
end
}
-----------------------------------------------------------------------------------------
-- Numerals --
-----------------------------------------------------------------------------------------
-- Display additional inflection information for a numeral
pos_functions["เลข"] = {
params = {
[1] = true,
[2] = true,
},
func = function(args, data, is_suffix)
local feminine = args[1]
local noun_form = args[2]
if feminine then
table.insert(data.genders, "m")
table.insert(data.inflections, {label = "เพศหญิง", feminine})
if noun_form then
table.insert(data.inflections, {label = "รูปนาม", noun_form})
end
else
table.insert(data.genders, "m")
table.insert(data.genders, "f")
end
end
}
-----------------------------------------------------------------------------------------
-- Phrases --
-----------------------------------------------------------------------------------------
pos_functions["วลี"] = {
params = {
["g"] = list,
["g_qual"] = {list = "g\1_qual", allow_holes = true},
["m"] = list,
["m_qual"] = {list = "m\1_qual", allow_holes = true},
["f"] = list,
["f_qual"] = {list = "f\1_qual", allow_holes = true},
},
func = function(args, data, is_suffix)
data.genders = {}
process_genders(data, args.g, args.g_qual)
insert_ancillary_inflection(data, args.m, args.m_qual, "เพศชาย", "วลี")
insert_ancillary_inflection(data, args.f, args.f_qual, "เพศหญิง", "วลี")
end,
}
-----------------------------------------------------------------------------------------
-- Suffix forms --
-----------------------------------------------------------------------------------------
pos_functions["รูปปัจจัย"] = {
params = {
[1] = {required = true, list = true},
["g"] = list,
["g_qual"] = {list = "g\1_qual", allow_holes = true},
},
func = function(args, data, is_suffix)
data.genders = {}
process_genders(data, args.g, args.g_qual)
local suffix_type = {}
for _, typ in ipairs(args[1]) do
table.insert(suffix_type, "ปัจจัยสร้าง" .. typ)
end
table.insert(data.inflections, {label = "รูปผันของ " .. m_table.serialCommaJoin(suffix_type, {conj = "หรือ"})})
end,
}
return export
cw1paaznu0fsoqcmcvejewj0i5ynd0u
มอดูล:pt-headword
828
236296
5729300
5698770
2026-07-20T05:34:22Z
Octahedron80
267
5729300
Scribunto
text/plain
-- This module contains code for Portuguese headword templates.
-- Templates covered are:
-- * {{pt-noun}}, {{pt-proper noun}};
-- * {{pt-verb}};
-- * {{pt-adj}}, {{pt-adj-comp}}, {{pt-adj-sup}};
-- * {{pt-det}};
-- * {{pt-pron-adj}};
-- * {{pt-contr-adj}};
-- * {{pt-pp}};
-- * {{pt-cardinal}};
-- * {{pt-adv}}.
-- See [[Module:pt-verb]] for Portuguese conjugation templates.
local export = {}
local pos_functions = {}
local force_cat = false -- for testing; if true, categories appear in non-mainspace pages
local m_strutils = require("Module:string utilities")
local rfind = m_strutils.find
local rmatch = m_strutils.match
local rsplit = m_strutils.split
local usub = m_strutils.sub
local require_when_needed = require("Module:utilities/require when needed")
local insert = table.insert
local m_table = require("Module:table")
local com = require("Module:pt-common")
local en_utilities_module = "Module:en-utilities"
local headword_utilities_module = "Module:headword utilities"
local inflection_utilities_module = "Module:inflection utilities"
local romut_module = "Module:romance utilities"
local pt_verb_module = "Module:pt-verb"
local lang = require("Module:languages").getByCode("pt")
local langname = --[[lang:getCanonicalName()]] lang:getCategoryName()
local m_en_utilities = require_when_needed(en_utilities_module)
local m_headword_utilities = require_when_needed(headword_utilities_module)
local glossary_link = require_when_needed(headword_utilities_module, "glossary_link")
-- When followed by a hyphen in a hyphenated compound, the hyphen will be included with the prefix when linked.
local include_hyphen_prefixes = m_table.listToSet {
"ab",
"afro",
"anarco",
"anglo",
"ântero",
"anti",
"auto",
"contra",
"ex",
"franco",
"hiper",
"infra",
"inter",
"intra",
"macro",
"micro",
"neo",
"pan",
"pós",
"pré",
"pró",
"proto",
"sobre",
"sub",
"super",
"vice",
}
-----------------------------------------------------------------------------------------
-- Utility functions --
-----------------------------------------------------------------------------------------
local function track(page)
require("Module:debug/track")("pt-headword/" .. page)
return true
end
local list_param = {list = true, disallow_holes = true}
local boolean_param = {type = "boolean"}
local metaphonic_label = "[[ภาคผนวก:การออกเสียงภาษาโปรตุเกส#เมทาโฟนี|เมทาโฟนี]]"
local function make_plural(sg, special)
local pl = com.make_plural(sg, special)
if not pl then
error(("Internal error: Unable to generate default plural of '%s'"):format(sg))
end
return pl
end
-- Parse and insert an inflection not requiring additional processing into `data.inflections`. The raw arguments come
-- from `args[field]`, which is parsed for inline modifiers. `label` is the label that the inflections are given;
-- `plpos` is the plural part of speech, used in [[Category:LANGNAME PLPOS with red links in their headword lines]].
-- `accel` is the accelerator form, or nil.
local function parse_and_insert_inflection(data, args, field, label, plpos, accel, frob)
m_headword_utilities.parse_and_insert_inflection {
headdata = data,
forms = args[field],
paramname = field,
splitchar = ",",
label = label,
accel = accel and {form = accel} or nil,
frob = frob,
check_missing = true,
lang = lang,
plpos = plpos,
}
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[1] or error("Part of speech has not been specified. Please pass parameter 1 to the module invocation.")
-- หมวดหมู่เป็นภาษาไทย
local poscat_th = require("Module:th-utilities").th_pos(poscat)
local parargs = frame:getParent().args
local params = {
["head"] = list_param,
["id"] = true,
["json"] = boolean_param,
["splithyph"] = boolean_param,
["nolinkhead"] = boolean_param,
["nolink"] = {type = "boolean", alias_of = "nolinkhead"},
["abbr"] = list_param,
["pagename"] = true, -- for testing
}
if pos_functions[poscat_th] then
for key, val in pairs(pos_functions[poscat_th].params) do
params[key] = val
end
end
local args = require("Module:parameters").process(parargs, params)
local pagename = args.pagename or mw.loadData("Module:headword/data").pagename
local user_specified_heads = args.head
local heads = user_specified_heads
if args.nolinkhead then
if #heads == 0 then
heads = {pagename}
end
else
local romut = require(romut_module)
local auto_linked_head = romut.add_links_to_multiword_term(pagename, args.splithyph, nil,
include_hyphen_prefixes)
if #heads == 0 then
heads = {auto_linked_head}
else
for i, head in ipairs(heads) do
if head:find("^~") then
head = romut.apply_link_modifiers(auto_linked_head, usub(head, 2))
heads[i] = head
end
end
end
end
local data = {
lang = lang,
pos_category = poscat_th,
categories = {},
heads = heads,
user_specified_heads = user_specified_heads,
no_redundant_head_cat = #user_specified_heads == 0,
genders = {},
inflections = {},
pagename = pagename,
id = args.id,
force_cat_output = force_cat,
}
local is_suffix = false
if pagename:find("^%-") and poscat_th ~= "รูปปัจจัย" then
is_suffix = true
data.pos_category = "ปัจจัย"
local singular_poscat = --[[m_en_utilities.singularize(poscat)]] poscat_th
insert(data.categories, "ปัจจัยสร้าง" .. singular_poscat .. langname)
insert(data.inflections, {label = "ปัจจัยสร้าง" .. singular_poscat})
end
if pos_functions[poscat_th] then
pos_functions[poscat_th].func(args, data, is_suffix)
end
parse_and_insert_inflection(data, args, "abbr", "abbreviation")
if args.json then
return require("Module:JSON").toJSON(data)
end
return require("Module:headword").full_headword(data)
end
local function replace_hash_with_lemma(term, lemma)
-- If there is a % sign in the lemma, we have to replace it with %% so it doesn't get interpreted as a capture replace
-- expression.
lemma = lemma:gsub("%%", "%%%%")
return (term:gsub("#", lemma))
end
local function is_metaphonic(args, lemma)
if args.nometa then
return false
end
if args.meta then
return true
end
-- Anything in -oso with a preceding vowel (e.g. [[gostoso]], [[curioso]]) is normally metaphonic.
return rfind(lemma, com.V .. ".*oso$")
end
-----------------------------------------------------------------------------------------
-- Nouns --
-----------------------------------------------------------------------------------------
local allowed_genders = m_table.listToSet(
{"m", "f", "mf", "mfbysense", "mfequiv", "gneut", "n", "m-p", "f-p", "mf-p", "mfbysense-p", "mfequiv-p", "gneut-p", "n-p", "?", "?-p"}
)
local function validate_genders(genders)
for _, g in ipairs(genders) do
if type(g) == "table" then
g = g.spec
end
if not allowed_genders[g] then
error("Unrecognized gender: " .. g)
end
end
end
local function do_noun(args, data, pos, is_suffix, is_proper)
local is_plurale_tantum = false
local has_singular = false
if is_suffix then
pos = "ปัจจัย"
end
local plpos = --[[m_en_utilities.pluralize(pos)]] pos
validate_genders(args[1])
data.genders = args[1]
local saw_m = false
local saw_f = false
local saw_gneut = false
local gender_for_irreg_ending
-- Check for specific genders and pluralia tantum.
for _, g in ipairs(args[1]) do
if type(g) == "table" then
g = g.spec
end
if g:find("-p$") then
is_plurale_tantum = true
else
has_singular = true
if g == "m" or g == "mf" or g == "mfbysense" then
saw_m = true
end
if g == "f" or g == "mf" or g == "mfbysense" then
saw_f = true
end
if g == "gneut" then
saw_gneut = true
end
end
end
if saw_m and saw_f then
gender_for_irreg_ending = "mf"
elseif saw_f then
gender_for_irreg_ending = "f"
else
gender_for_irreg_ending = "m"
end
local lemma = data.pagename
local plurals = {}
local function insert_noun_inflection(terms, label, accel)
m_headword_utilities.insert_inflection {
headdata = data,
terms = terms,
label = label,
accel = accel and {form = accel} or nil,
check_missing = true,
lang = lang,
plpos = plpos,
}
end
if is_plurale_tantum and not has_singular then
if args[2][1] then
error("Can't specify plurals of plurale tantum " .. pos)
end
insert(data.inflections, {label = glossary_link("พหูพจน์เท่านั้น")})
else
plurals = m_headword_utilities.parse_term_list_with_modifiers {
paramname = {2, "pl"},
forms = args[2],
splitchar = ",",
}
-- Check for special plural signals
local mode = nil
local pl1 = plurals[1]
if pl1 and #pl1.term == 1 then
mode = pl1.term
if mode == "?" or mode == "!" or mode == "-" or mode == "~" then
pl1.term = nil
if next(pl1) then
error(("Can't specify inline modifiers with plural code '%s'"):format(mode))
end
table.remove(plurals, 1) -- Remove the mode parameter
elseif mode ~= "+" and mode ~= "#" then
error(("Unexpected plural code '%s'"):format(mode))
end
end
if is_plurale_tantum then
-- both singular and plural
insert(data.inflections, {label = "บางครั้ง" .. glossary_link("พหูพจน์เท่านั้น") .. "ในภาษาย่อย"})
end
if mode == "?" then
-- Plural is unknown
insert(data.categories, langname .. " " .. plpos .. " with unknown or uncertain plurals")
elseif mode == "!" then
-- Plural is not attested
insert(data.inflections, {label = "plural not attested"})
insert(data.categories, langname .. " " .. plpos .. " with unattested plurals")
if plurals[1] then
error("Can't specify any plurals along with unattested plural code '!'")
end
elseif mode == "-" then
-- Uncountable noun; may occasionally have a plural
insert(data.categories, plpos .. "นับไม่ได้" .. langname)
-- If plural forms were given explicitly, then show "usually"
if plurals[1] then
insert(data.inflections, {label = "โดยปกติ" .. glossary_link("นับไม่ได้")})
insert(data.categories, plpos .. "นับได้" .. langname)
else
insert(data.inflections, {label = glossary_link("นับไม่ได้")})
end
else
-- Countable or mixed countable/uncountable
if not plurals[1] and not is_proper then
plurals[1] = {term = "+"}
end
if mode == "~" then
-- Mixed countable/uncountable noun, always has a plural
insert(data.inflections, {label = glossary_link("นับได้") .. "และ" .. glossary_link("นับไม่ได้")})
insert(data.categories, plpos .. "นับไม่ได้" .. langname)
insert(data.categories, plpos .. "นับได้" .. langname)
elseif plurals[1] then
-- Countable nouns
insert(data.categories, plpos .. "นับได้" .. langname)
else
-- Uncountable nouns
insert(data.categories, plpos .. "นับไม่ได้" .. langname)
end
end
-- Gather plurals, handling requests for default plurals.
local has_default_or_hash = false
for _, pl in ipairs(plurals) do
if pl.term:find("^%+") or pl.term:find("#") then
has_default_or_hash = true
break
end
end
if has_default_or_hash then
for _, pl in ipairs(plurals) do
if pl.term == "+" then
pl.term = make_plural(lemma)
elseif pl.term:find("^%+") then
pl.term = require(romut_module).get_special_indicator(pl.term)
pl.term = make_plural(lemma, pl.term)
else
pl.term = replace_hash_with_lemma(pl.term, lemma)
end
end
end
local pl1 = plurals[1]
if pl1 and not plurals[2] and pl1.term == lemma then
insert(data.inflections, {label = glossary_link("ผันรูปไม่ได้"),
q = pl1.q, qq = pl1.qq, l = pl1.l, ll = pl1.ll, refs = pl1.refs
})
insert(data.categories, plpos .. "ผันรูปไม่ได้" .. langname)
else
insert_noun_inflection(plurals, "พหูพจน์", "p")
end
if plurals[2] then
insert(data.categories, langname .. " " .. plpos .. " with multiple plurals")
end
end
-- Gather masculines/feminines. For each one, generate the corresponding plural. `field` is the name of the field
-- containing the masculine or feminine forms (normally "m" or "f"); `inflect` is a function of one or two arguments
-- to generate the default masculine or feminine from the lemma (the arguments are the lemma and optionally a
-- "special" flag to indicate how to handle multiword lemmas, and the function is normally make_feminine or
-- make_masculine from [[Module:pt-common]]); and `default_plurals` is a list into which the corresponding default
-- plurals of the gathered or generated masculine or feminine forms are stored.
local function handle_mf(field, inflect, default_plurals)
local mfs = m_headword_utilities.parse_term_list_with_modifiers {
paramname = field,
forms = args[field],
splitchar = ",",
frob = function(term)
if term == "+" then
-- Generate default masculine/feminine.
term = inflect(lemma)
else
term = replace_hash_with_lemma(term, lemma)
end
local special = require(romut_module).get_special_indicator(term)
if special then
term = inflect(lemma, special)
end
return term
end
}
for _, mf in ipairs(mfs) do
local plobj = m_table.shallowCopy(mf)
plobj.term = make_plural(mf.term, special)
-- Add an accelerator for each masculine/feminine plural whose lemma is the corresponding singular, so that
-- the accelerated entry that is generated has a definition that looks like
-- # {{plural of|pt|MFSING}}
plobj.accel = {form = "p", lemma = mf.term}
insert(default_plurals, plobj)
end
return mfs
end
local feminine_plurals = {}
local feminines = handle_mf("f", com.make_feminine, feminine_plurals)
local masculine_plurals = {}
local masculines = handle_mf("m", com.make_masculine, masculine_plurals)
local function handle_mf_plural(mfplfield, default_plurals, singulars)
local mfpl = m_headword_utilities.parse_term_list_with_modifiers {
paramname = mfplfield,
forms = args[mfplfield],
splitchar = ",",
}
if is_plurale_tantum then
return mfpl
end
local new_mfpls = {}
local saw_plus
for i, mfpl in ipairs(mfpl) do
local accel
if #mfpl == #singulars then
-- If same number of overriding masculine/feminine plurals as singulars, assume each plural goes with
-- the corresponding singular and use each corresponding singular as the lemma in the accelerator. The
-- generated entry will have
-- # {{plural of|pt|SINGULAR}}
-- as the definition.
accel = {form = "p", lemma = singulars[i].term}
else
accel = nil
end
if mfpl.term == "+" then
-- We should never see + twice. If we do, it will lead to problems since we overwrite the values of
-- default_plurals the first time around.
if saw_plus then
error(("Saw + twice when handling %s="):format(mfplfield))
end
saw_plus = true
if not default_plurals[1] then
-- FIXME: Can this happen? Not in corresponding Spanish code and the old Portuguese code tried to
-- handle this condition by generating the default plural from the lemma.
error("Internal error: Something wrong, no generated default m/f plurals at this stage")
end
for _, defpl in ipairs(default_plurals) do
-- defpl is already a table and has an accel field
m_headword_utilities.combine_termobj_qualifiers_labels(defpl, mfpl)
insert(new_mfpls, defpl)
end
elseif mfpl.term:find("^%+") then
mfpl.term = require(romut_module).get_special_indicator(mfpl.term)
for _, mf in ipairs(singulars) do
local mfplobj = m_table.shallowCopy(mfpl)
mfplobj.term = make_plural(mf.term, mfpl.term)
mfplobj.accel = accel
m_headword_utilities.combine_termobj_qualifiers_labels(mfplobj, mf)
insert(new_mfpls, mfplobj)
end
else
mfpl.accel = accel
mfpl.term = replace_hash_with_lemma(mfpl.term, lemma)
insert(new_mfpls, mfpl)
end
end
return new_mfpls
end
if args.fpl[1] then
-- Override any existing feminine plurals.
feminine_plurals = handle_mf_plural("fpl", feminine_plurals, feminines)
end
if args.mpl[1] then
-- Override any existing masculine plurals.
masculine_plurals = handle_mf_plural("mpl", masculine_plurals, masculines)
end
local function parse_and_insert_noun_inflection(field, label, accel)
parse_and_insert_inflection(data, args, field, label, plpos, accel)
end
insert_noun_inflection(feminines, "เพศหญิง", "f")
insert_noun_inflection(feminine_plurals, "เพศหญิงพหูพจน์")
insert_noun_inflection(masculines, "เพศชาย")
insert_noun_inflection(masculine_plurals, "เพศชายพหูพจน์")
if is_metaphonic(args, lemma) then
insert(data.inflections, {label = metaphonic_label})
insert(data.categories, plpos .. langname .. "ที่มีเมทาโฟนี")
end
parse_and_insert_noun_inflection("dim", "ตัวบอกความเล็ก")
parse_and_insert_noun_inflection("aug", "ตัวบอกความใหญ่")
parse_and_insert_noun_inflection("pej", "pejorative")
parse_and_insert_noun_inflection("dem", "คำประชานาม")
parse_and_insert_noun_inflection("fdem", "คำประชานามหญิง")
-- Maybe add category 'Portuguese nouns with irregular gender' (or similar)
local irreg_gender_lemma = com.rsub(lemma, " .*", "") -- only look at first word
if (rfind(irreg_gender_lemma, "[^ã]o$") and (gender_for_irreg_ending == "f" or gender_for_irreg_ending == "mf")) or
(irreg_gender_lemma:find("a$") and (gender_for_irreg_ending == "m" or gender_for_irreg_ending == "mf")) then
insert(data.categories, langname .. " " .. plpos .. " with irregular gender")
end
end
local function get_noun_params(is_proper)
return {
[1] = {list = "g", disallow_holes = true, required = not is_proper, default = "?", type = "genders",
flatten = true},
[2] = {list = "pl", disallow_holes = true},
["m"] = list_param,
["f"] = list_param,
["mpl"] = list_param,
["fpl"] = list_param,
["dim"] = list_param, --diminutive(s)
["aug"] = list_param, --diminutive(s)
["pej"] = list_param, --pejorative(s)
["dem"] = list_param, --demonym(s)
["fdem"] = list_param, --female demonym(s)
["meta"] = boolean_param, -- metaphonic
["nometa"] = boolean_param, -- explicitly not metaphonic
}
end
pos_functions["คำนาม"] = {
params = get_noun_params(),
func = function(args, data, is_suffix)
do_noun(args, data, "คำนาม", is_suffix)
end,
}
pos_functions["คำวิสามานยนาม"] = {
params = get_noun_params("is proper"),
func = function(args, data, is_suffix)
do_noun(args, data, "คำวิสามานยนาม", is_suffix, "is proper noun")
end,
}
-----------------------------------------------------------------------------------------
-- Pronouns --
-----------------------------------------------------------------------------------------
local function do_pronoun(args, data, pos, is_suffix)
if is_suffix then
pos = "ปัจจัย"
end
local plpos = --[[m_en_utilities.pluralize(pos)]] pos
if not is_suffix then
data.pos_category = plpos
end
local lemma = data.pagename
validate_genders(args[1])
data.genders = args[1]
local function do_inflection(field, label, accel)
parse_and_insert_inflection(data, args, field, label, plpos, accel)
end
do_inflection("m", "เพศชาย")
do_inflection("f", "เพศหญิง")
do_inflection("sg", "เอกพจน์")
do_inflection("pl", "พหูพจน์")
do_inflection("mpl", "เพศชายพหูพจน์")
do_inflection("fpl", "เพศหญิงพหูพจน์")
do_inflection("n", "เพศกลาง")
end
local function get_pronoun_params()
local params = {
[1] = {list = "g", disallow_holes = true, type = "genders", flatten = true}, --gender(s)
["m"] = list_param, --masculine form(s)
["f"] = list_param, --feminine form(s)
["sg"] = list_param, --singular form(s)
["pl"] = list_param, --plural form(s)
["mpl"] = list_param, --masculine plural form(s)
["fpl"] = list_param, --feminine plural form(s)
["n"] = list_param, --neuter form(s)
}
return params
end
pos_functions["คำสรรพนาม"] = {
params = get_pronoun_params(),
func = function(args, data, is_suffix)
do_pronoun(args, data, "คำสรรพนาม", is_suffix)
end,
}
-----------------------------------------------------------------------------------------
-- Adjectives --
-----------------------------------------------------------------------------------------
-- Handle comparatives and superlatives for adjectives and adverbs, including user-specified comparatives and
-- superlatives, default-requested comparatives/superlatives using '+', autogenerated comparatives/superlatives,
-- and hascomp=. Code is the same for adjectives and adverbs.
local function handle_adj_adv_comp(args, data, plpos, is_adv)
local lemma = data.pagename
local stem
if is_adv then
stem = com.rsub(lemma, "mente$", "")
else
stem = lemma
end
local function insert_inflection(terms, label, accel)
m_headword_utilities.insert_inflection {
headdata = data,
terms = terms,
label = label,
accel = accel and {form = accel} or nil,
check_missing = true,
lang = lang,
plpos = plpos,
}
end
local function make_absolute_superlative(special)
if is_adv then
return com.make_adverbial_absolute_superlative(stem, special)
else
return com.make_absolute_superlative(stem, special)
end
end
-- Maybe autogenerate default comparative/superlative.
local comp, sup
if args.comp and args.sup then-- comp= and sup= were given as options to the user
-- If no comp, but a non-default sup given, then add the default comparative/superlative.
-- This is useful when an absolute superlative is given.
comp = m_headword_utilities.parse_term_list_with_modifiers {
paramname = "comp",
forms = args.comp,
splitchar = ",",
}
sup = m_headword_utilities.parse_term_list_with_modifiers {
paramname = "sup",
forms = args.sup,
splitchar = ",",
}
local saw_sup_plus = false
if not comp[1] and sup[1] then
for _, supval in ipairs(sup) do
if supval.term == "+" then
saw_sup_plus = true
end
end
if not saw_sup_plus then
comp = {{term = "+"}}
insert(sup, 1, {term = "+"})
end
end
-- If comp=+, use default comparative 'mais ...', and set a default superlative if unspecified.
local saw_comp_plus = false
for _, compval in ipairs(comp) do
if compval.term == "+" then
saw_comp_plus = true
compval.term = "[[mais]] [[" .. lemma .. "]]"
end
end
if saw_comp_plus and not sup[1] then
sup = {{term = "+"}}
end
-- If sup=+ (possibly from comp=+), use default superlative 'o mais ...'. Also handle absolute superlatives.
for _, supval in ipairs(sup) do
if supval.term == "+" then
supval.term = "[[o]] [[mais]] [[" .. lemma .. "]]"
elseif supval.term == "+abs" then
supval.term = make_absolute_superlative()
elseif rfind(supval.term, "^%+abs:") then
local sp = rmatch(supval.term, "^%+abs:(.*)$")
supval.term = make_absolute_superlative(sp)
end
end
end
if args.hascomp then
if args.hascomp == "both" then
insert(data.inflections, {label = "บางครั้ง" .. glossary_link("เปรียบเทียบได้")})
insert(data.categories, plpos .. "เปรียบเทียบได้" .. langname)
insert(data.categories, plpos .. "เปรียบเทียบไม่ได้" .. langname)
else
local hascomp = require("Module:yesno")(args.hascomp)
if hascomp == true then
insert(data.inflections, {label = glossary_link("เปรียบเทียบได้")})
insert(data.categories, plpos .. "เปรียบเทียบได้" .. langname)
elseif hascomp == false then
insert(data.inflections, {label = glossary_link("เปรียบเทียบไม่ได้")})
insert(data.categories, plpos .. "เปรียบเทียบไม่ได้" .. langname)
else
error("Unrecognized value for hascomp=: " .. args.hascomp)
end
end
elseif comp and comp[1] or sup and sup[1] then
insert(data.inflections, {label = glossary_link("เปรียบเทียบได้")})
insert(data.categories, plpos .. "เปรียบเทียบได้" .. langname)
end
insert_inflection(comp, "ขั้นกว่า")
insert_inflection(sup, "ขั้นสุด")
end
local function do_adjective(args, data, pos, is_suffix, is_superlative)
local feminines = {}
local masculine_plurals = {}
local feminine_plurals = {}
if is_suffix then
pos = "ปัจจัย"
end
local plpos = --[[m_en_utilities.pluralize(pos)]] pos
if not is_suffix then
data.pos_category = plpos
end
if args.sp then
local romut = require(romut_module)
if not romut.allowed_special_indicators[args.sp] then
local indicators = {}
for indic, _ in pairs(romut.allowed_special_indicators) do
insert(indicators, "'" .. indic .. "'")
end
table.sort(indicators)
error("Special inflection indicator beginning can only be " ..
mw.text.listToText(indicators) .. ": " .. args.sp)
end
end
local lemma = data.pagename
local function fetch_inflections(field)
local retval = m_headword_utilities.parse_term_list_with_modifiers {
paramname = field,
forms = args[field],
splitchar = ",",
}
if not retval[1] then
return {{term = "+"}}
end
return retval
end
local function insert_inflection(terms, label, accel)
m_headword_utilities.insert_inflection {
headdata = data,
terms = terms,
label = label,
accel = accel and {form = accel} or nil,
check_missing = true,
lang = lang,
plpos = plpos,
}
end
if args.short then
insert(data.inflections, {label = "[[Appendix:Portuguese verbs#Participles|short participle]]"})
end
if args.inv then
-- invariable adjective
insert(data.inflections, {label = glossary_link("ผันรูปไม่ได้")})
insert(data.categories, plpos .. "ผันรูปไม่ได้" .. langname)
if args.sp or args.f[1] or args.pl[1] or args.mpl[1] or args.fpl[1] then
error("Can't specify inflections with an invariable " .. pos)
end
elseif args.fonly then
-- feminine-only
if args.f[1] then
error("Can't specify explicit feminines with feminine-only " .. pos)
end
if args.pl[1] then
error("Can't specify explicit plurals with feminine-only " .. pos .. ", use fpl=")
end
if args.mpl[1] then
error("Can't specify explicit masculine plurals with feminine-only " .. pos)
end
local argsfpl = fetch_inflections("fpl")
for _, fpl in ipairs(argsfpl) do
if fpl.term == "+" then
fpl.term = make_plural(lemma, args.sp)
else
fpl.term = replace_hash_with_lemma(fpl.term, lemma)
end
insert(feminine_plurals, fpl)
end
insert(data.inflections, {label = "เพศหญิงเท่านั้น"})
insert_inflection(feminine_plurals, "เพศหญิงพหูพจน์", "f|p")
else
-- Gather feminines.
for _, f in ipairs(fetch_inflections("f")) do
if f.term == "+" then
-- Generate default feminine.
f.term = com.make_feminine(lemma, args.sp)
else
f.term = replace_hash_with_lemma(f.term, lemma)
end
insert(feminines, f)
end
local fem_like_lemma = #feminines == 1 and feminines[1].term == lemma and
not m_headword_utilities.termobj_has_qualifiers_or_labels(feminines[1])
if fem_like_lemma then
insert(data.categories, plpos .. "epicene" .. langname)
end
local mpl_field = "mpl"
local fpl_field = "fpl"
if args.pl[1] then
if args.mpl[1] or args.fpl[1] then
error("Can't specify both pl= and mpl=/fpl=")
end
mpl_field = "pl"
fpl_field = "pl"
end
local argsmpl = fetch_inflections(mpl_field)
local argsfpl = fetch_inflections(fpl_field)
for _, mpl in ipairs(argsmpl) do
if mpl.term == "+" then
-- Generate default masculine plural.
mpl.term = make_plural(lemma, args.sp)
else
mpl.term = replace_hash_with_lemma(mpl.term, lemma)
end
insert(masculine_plurals, mpl)
end
for _, fpl in ipairs(argsfpl) do
if fpl.term == "+" then
for _, f in ipairs(feminines) do
-- Generate default feminine plural; f is a table.
local fplobj = m_table.shallowCopy(fpl)
fplobj.term = make_plural(f.term, args.sp)
m_headword_utilities.combine_termobj_qualifiers_labels(fplobj, f)
insert(feminine_plurals, fplobj)
end
else
fpl.term = replace_hash_with_lemma(fpl.term, lemma)
insert(feminine_plurals, fpl)
end
end
local fem_pl_like_masc_pl = masculine_plurals[1] and feminine_plurals[1] and
m_table.deepEquals(masculine_plurals, feminine_plurals)
local masc_pl_like_lemma = #masculine_plurals == 1 and masculine_plurals[1].term == lemma and
not m_headword_utilities.termobj_has_qualifiers_or_labels(masculine_plurals[1])
if fem_like_lemma and fem_pl_like_masc_pl and masc_pl_like_lemma then
-- actually invariable
insert(data.inflections, {label = glossary_link("ผันรูปไม่ได้")})
insert(data.categories, plpos .. "ผันรูปไม่ได้" .. langname)
else
-- Make sure there are feminines given and not same as lemma.
if not fem_like_lemma then
insert_inflection(feminines, "เพศหญิง", "f|s")
elseif args.gneut then
data.genders = {"gneut"}
else
data.genders = {"mf"}
end
if fem_pl_like_masc_pl then
if args.gneut then
insert_inflection(masculine_plurals, "พหูพจน์", "p")
else
-- This is how the Spanish module works.
-- insert_inflection(masculine_plurals, "masculine and feminine plural", "p")
insert_inflection(masculine_plurals, "พหูพจน์", "p")
end
else
insert_inflection(masculine_plurals, "เพศชายพหูพจน์", "m|p")
insert_inflection(feminine_plurals, "เพศหญิงพหูพจน์", "f|p")
end
end
end
local function parse_and_insert_adj_inflection(field, label, accel, frob)
parse_and_insert_inflection(data, args, field, label, plpos, accel, frob)
end
parse_and_insert_adj_inflection("n", "เพศกลาง")
handle_adj_adv_comp(args, data, plpos, false)
parse_and_insert_adj_inflection("dim", "ตัวบอกความเล็ก", nil, function(term)
if term == "+" then
term = com.make_diminutive(lemma)
elseif term:find("^%+") then
term = require(romut_module).get_special_indicator(term)
term = com.make_diminutive(lemma, term)
end
return term
end)
parse_and_insert_adj_inflection("aug", "ตัวบอกความใหญ่", nil, function(term)
if term == "+" then
term = com.make_augmentative(lemma)
elseif term:find("^%+") then
term = require(romut_module).get_special_indicator(term)
term = com.make_augmentative(lemma, term)
end
return term
end)
if is_metaphonic(args, lemma) then
insert(data.inflections, {label = metaphonic_label})
insert(data.categories, plpos .. langname .. "ที่มีเมทาโฟนี")
end
if args.irreg and is_superlative then
insert(data.categories, langname .. " irregular superlative " .. plpos)
end
end
local function get_adjective_params(adjtype)
local params = {
["inv"] = boolean_param, --invariable
["sp"] = true, -- special indicator: "first", "first-last", etc.
["f"] = list_param, --feminine form(s)
["pl"] = list_param, --plural override(s)
["mpl"] = list_param, --masculine plural override(s)
["fpl"] = list_param, --feminine plural override(s)
["meta"] = boolean_param, -- metaphonic
["nometa"] = boolean_param, -- explicitly not metaphonic
}
if adjtype == "base" then
params["comp"] = list_param --comparative(s)
params["sup"] = list_param --superlative(s)
params["dim"] = list_param --diminutive(s)
params["aug"] = list_param --augmentative(s)
params["fonly"] = boolean_param -- feminine only
params["gneut"] = boolean_param -- gender-neutral adjective e.g. [[latine]] (FIXME: do these exist in Portuguese?)
params["hascomp"] = true -- has comparative
end
if adjtype == "part" then
params["short"] = boolean_param -- short participle
end
if adjtype == "sup" then
params["irreg"] = boolean_param
end
if adjtype == "pron" or adjtype == "contr" then
params["n"] = list_param --neuter form(s)
end
return params
end
pos_functions["คำคุณศัพท์"] = {
params = get_adjective_params("base"),
func = function(args, data, is_suffix)
do_adjective(args, data, "คำคุณศัพท์", is_suffix)
end,
}
pos_functions["คำคุณศัพท์ขั้นกว่า"] = {
params = get_adjective_params("comp"),
func = function(args, data, is_suffix)
do_adjective(args, data, "คำคุณศัพท์", is_suffix)
end,
}
pos_functions["คำคุณศัพท์ขั้นสุด"] = {
params = get_adjective_params("sup"),
func = function(args, data, is_suffix)
do_adjective(args, data, "คำคุณศัพท์", is_suffix, "is superlative")
end,
}
pos_functions["รูปกริยาขยายอดีตกาล"] = {
params = get_adjective_params("part"),
func = function(args, data, is_suffix)
do_adjective(args, data, "รูปกริยาขยาย", is_suffix)
data.pos_category = "รูปกริยาขยายอดีตกาล"
end,
}
pos_functions["ตัวกำหนด"] = {
params = get_adjective_params("det"),
func = function(args, data, is_suffix)
do_adjective(args, data, "ตัวกำหนด", is_suffix)
end,
}
pos_functions["คำสรรพนามคล้ายคุณศัพท์"] = {
params = get_adjective_params("pron"),
func = function(args, data, is_suffix)
do_adjective(args, data, "คำสรรพนาม", is_suffix)
end,
}
pos_functions["รูปหดย่อคล้ายคุณศัพท์"] = {
params = get_adjective_params("contr"),
func = function(args, data, is_suffix)
do_adjective(args, data, "รูปหดย่อ", is_suffix)
end,
}
-----------------------------------------------------------------------------------------
-- Adverbs --
-----------------------------------------------------------------------------------------
local function do_adverb(args, data, pos, is_suffix)
if is_suffix then
pos = "ปัจจัย"
end
local plpos = --[[m_en_utilities.pluralize(pos)]] pos
if not is_suffix then
data.pos_category = plpos
end
handle_adj_adv_comp(args, data, plpos, "is adv")
end
local function get_adverb_params(advtype)
local params = {}
if advtype == "base" then
params["comp"] = list_param --comparative(s)
params["sup"] = list_param --superlative(s)
params["hascomp"] = true -- has comparative
end
return params
end
pos_functions["คำกริยาวิเศษณ์"] = {
params = get_adverb_params("base"),
func = function(args, data, is_suffix)
do_adverb(args, data, "คำกริยาวิเศษณ์", is_suffix)
end,
}
pos_functions["คำกริยาวิเศษณ์ขั้นกว่า"] = {
params = get_adverb_params("comp"),
func = function(args, data, is_suffix)
do_adverb(args, data, "คำกริยาวิเศษณ์", is_suffix)
end,
}
pos_functions["คำกริยาวิเศษณ์ขั้นสุด"] = {
params = get_adverb_params("sup"),
func = function(args, data, is_suffix)
do_adverb(args, data, "คำกริยาวิเศษณ์", is_suffix)
end,
}
-----------------------------------------------------------------------------------------
-- Verbs --
-----------------------------------------------------------------------------------------
pos_functions["คำกริยา"] = {
params = {
[1] = true,
["pres"] = list_param, --present
["pres_qual"] = {list = "pres\1_qual", allow_holes = true},
["pres3s"] = list_param, --third-singular present
["pres3s_qual"] = {list = "pres3s\1_qual", allow_holes = true},
["pret"] = list_param, --preterite
["pret_qual"] = {list = "pret\1_qual", allow_holes = true},
["part"] = list_param, --participle
["part_qual"] = {list = "part\1_qual", allow_holes = true},
["short_part"] = list_param, --short participle
["short_part_qual"] = {list = "short_part\1_qual", allow_holes = true},
["noautolinktext"] = boolean_param,
["noautolinkverb"] = boolean_param,
["attn"] = boolean_param,
},
func = function(args, data, frame)
local preses, preses_3s, prets, parts, short_parts
if args.attn then
insert(data.categories, "Requests for attention concerning " .. langname)
return
end
local pt_verb = require(pt_verb_module)
local alternant_multiword_spec = pt_verb.do_generate_forms(args, "pt-verb", data.heads[1])
local specforms = alternant_multiword_spec.forms
local function slot_exists(slot)
return specforms[slot] and #specforms[slot] > 0
end
local function do_finite(slot_tense, label_tense)
-- Use pres_3s if it exists and pres_1s doesn't exist (e.g. impersonal verbs); similarly for pres_3p
-- (only3p verbs); but fall back to pres_1s if neither pres_1s nor pres_3s nor pres_3p exist (e.g.
-- [[empedernir]]).
local has_1s = slot_exists(slot_tense .. "_1s")
local has_3s = slot_exists(slot_tense .. "_3s")
local has_3p = slot_exists(slot_tense .. "_3p")
if has_1s or (not has_3s and not has_3p) then
return {
slot = slot_tense .. "_1s",
label = ("first-person singular %s"):format(label_tense),
}, true
elseif has_3s then
return {
slot = slot_tense .. "_3s",
label = ("third-person singular %s"):format(label_tense),
}, false
else
return {
slot = slot_tense .. "_3p",
label = ("third-person plural %s"):format(label_tense),
}, false
end
end
local did_pres_1s
preses, did_pres_1s = do_finite("pres", "ปัจจุบันกาล")
preses_3s = {
slot = "pres_3s",
label = "บุรุษที่สามเอกพจน์ปัจจุบันกาล",
}
prets = do_finite("pret", "อดีตกาลสิ้นสุด")
parts = {
slot = "pp_ms",
label = "รูปกริยาขยายอดีตกาล",
}
short_parts = {
slot = "short_pp_ms",
label = "รูปกริยาขยายอดีตกาลสั้น",
}
if args.pres[1] or args.pres3s[1] or args.pret[1] or args.part[1] or args.short_part[1] then
track("verb-old-multiarg")
end
local function strip_brackets(qualifiers)
if not qualifiers then
return nil
end
local stripped_qualifiers = {}
for _, qualifier in ipairs(qualifiers) do
local stripped_qualifier = qualifier:match("^%[(.*)%]$")
if not stripped_qualifier then
error("Internal error: Qualifier should be surrounded by brackets at this stage: " .. qualifier)
end
insert(stripped_qualifiers, stripped_qualifier)
end
return stripped_qualifiers
end
local function do_verb_form(args, qualifiers, slot_desc, skip_if_empty)
local forms
local to_insert
if #args == 0 then
forms = specforms[slot_desc.slot]
if not forms or #forms == 0 then
if skip_if_empty then
return
end
forms = {{form = "-"}}
end
elseif #args == 1 and args[1] == "-" then
forms = {{form = "-"}}
else
forms = {}
for i, arg in ipairs(args) do
local qual = qualifiers[i]
if qual then
-- FIXME: It's annoying we have to add brackets and strip them out later. The inflection
-- code adds all footnotes with brackets around them; we should change this.
qual = {"[" .. qual .. "]"}
end
local form = arg
if not args.noautolinkverb then
-- [[Module:inflection utilities]] already loaded by [[Module:pt-verb]]
form = require(inflection_utilities_module).add_links(form)
end
insert(forms, {form = form, footnotes = qual})
end
end
if forms[1].form == "-" then
to_insert = {label = "no " .. slot_desc.label}
else
local into_table = {label = slot_desc.label}
for _, form in ipairs(forms) do
local qualifiers = strip_brackets(form.footnotes)
-- Strip redundant brackets surrounding entire form. These may get generated e.g.
-- if we use the angle bracket notation with a single word.
local stripped_form = rmatch(form.form, "^%[%[([^%[%]]*)%]%]$") or form.form
stripped_form = pt_verb.remove_variant_codes(stripped_form)
-- Don't include accelerators if brackets remain in form, as the result will be wrong.
-- FIXME: For now, don't include accelerators. We should use the new {{pt-verb form of}} once
-- implemented.
-- local this_accel = not stripped_form:find("%[%[") and accel or nil
local this_accel = nil
insert(into_table, {term = stripped_form, q = qualifiers, accel = this_accel})
end
to_insert = into_table
end
insert(data.inflections, to_insert)
end
local skip_pres_if_empty
if alternant_multiword_spec.no_pres1_and_sub then
insert(data.inflections, {label = "no first-person singular present"})
insert(data.inflections, {label = "no present subjunctive"})
end
if alternant_multiword_spec.no_pres_stressed then
insert(data.inflections, {label = "no stressed present indicative or subjunctive"})
skip_pres_if_empty = true
end
if alternant_multiword_spec.only3s then
insert(data.inflections, {label = glossary_link("impersonal")})
elseif alternant_multiword_spec.only3sp then
insert(data.inflections, {label = "บุรุษที่สามเท่านั้น"})
elseif alternant_multiword_spec.only3p then
insert(data.inflections, {label = "บุรุษที่สามพหูพจน์เท่านั้น"})
end
local has_vowel_alt
if alternant_multiword_spec.vowel_alt then
for _, vowel_alt in ipairs(alternant_multiword_spec.vowel_alt) do
if vowel_alt ~= "+" and vowel_alt ~= "í" and vowel_alt ~= "ú" then
has_vowel_alt = true
break
end
end
end
do_verb_form(args.pres, args.pres_qual, preses, skip_pres_if_empty)
-- We want to include both the pres_1s and pres_3s if there is a vowel alternation in the present singular. But
-- we don't want to redundantly include the pres_3s if we already included it.
if did_pres_1s and has_vowel_alt then
do_verb_form(args.pres3s, args.pres3s_qual, preses_3s, skip_pres_if_empty)
end
do_verb_form(args.pret, args.pret_qual, prets)
do_verb_form(args.part, args.part_qual, parts)
do_verb_form(args.short_part, args.short_part_qual, short_parts, "skip if empty")
-- Add categories.
for _, cat in ipairs(alternant_multiword_spec.categories) do
insert(data.categories, cat)
end
-- If the user didn't explicitly specify head=, or specified exactly one head (not 2+) and we were able to
-- incorporate any links in that head into the 1= specification, use the infinitive generated by
-- [[Module:pt-verb]] in place of the user-specified or auto-generated head. This was copied from
-- [[Module:it-headword]], where doing this gets accents marked on the verb(s). We don't have accents marked on
-- the verb but by doing this we do get any footnotes on the infinitive propagated here. Don't do this if the
-- user gave multiple heads or gave a head with a multiword-linked verbal expression such as Italian
-- '[[dare esca]] [[al]] [[fuoco]]' (FIXME: give Portuguese equivalent).
if #data.user_specified_heads == 0 or (
#data.user_specified_heads == 1 and alternant_multiword_spec.incorporated_headword_head_into_lemma
) then
data.heads = {}
for _, lemma_obj in ipairs(alternant_multiword_spec.forms.infinitive_linked) do
local quals, refs = require(inflection_utilities_module).
convert_footnotes_to_qualifiers_and_references(lemma_obj.footnotes)
insert(data.heads, {term = lemma_obj.form, q = quals, refs = refs})
end
end
end
}
-----------------------------------------------------------------------------------------
-- Suffix forms --
-----------------------------------------------------------------------------------------
pos_functions["รูปปัจจัย"] = {
params = {
[1] = {required = true, list = true, disallow_holes = true},
["g"] = {list = true, disallow_holes = true, type = "genders", flatten = true},
},
func = function(args, data, is_suffix)
validate_genders(args.g)
data.genders = args.g
local suffix_type = {}
for _, typ in ipairs(args[1]) do
insert(suffix_type, "ปัจจัยสร้าง" .. typ)
end
insert(data.inflections, {label = "รูปผันของ " .. m_table.serialCommaJoin(suffix_type, {conj = "หรือ"})})
end,
}
return export
0eosrzqdjg0ismeddjsjlbv0v0fvcgb
5729301
5729300
2026-07-20T05:35:51Z
Octahedron80
267
5729301
Scribunto
text/plain
-- This module contains code for Portuguese headword templates.
-- Templates covered are:
-- * {{pt-noun}}, {{pt-proper noun}};
-- * {{pt-verb}};
-- * {{pt-adj}}, {{pt-adj-comp}}, {{pt-adj-sup}};
-- * {{pt-det}};
-- * {{pt-pron-adj}};
-- * {{pt-contr-adj}};
-- * {{pt-pp}};
-- * {{pt-cardinal}};
-- * {{pt-adv}}.
-- See [[Module:pt-verb]] for Portuguese conjugation templates.
local export = {}
local pos_functions = {}
local force_cat = false -- for testing; if true, categories appear in non-mainspace pages
local m_strutils = require("Module:string utilities")
local rfind = m_strutils.find
local rmatch = m_strutils.match
local rsplit = m_strutils.split
local usub = m_strutils.sub
local require_when_needed = require("Module:utilities/require when needed")
local insert = table.insert
local m_table = require("Module:table")
local com = require("Module:pt-common")
local en_utilities_module = "Module:en-utilities"
local headword_utilities_module = "Module:headword utilities"
local inflection_utilities_module = "Module:inflection utilities"
local romut_module = "Module:romance utilities"
local pt_verb_module = "Module:pt-verb"
local lang = require("Module:languages").getByCode("pt")
local langname = --[[lang:getCanonicalName()]] lang:getCategoryName()
local m_en_utilities = require_when_needed(en_utilities_module)
local m_headword_utilities = require_when_needed(headword_utilities_module)
local glossary_link = require_when_needed(headword_utilities_module, "glossary_link")
-- When followed by a hyphen in a hyphenated compound, the hyphen will be included with the prefix when linked.
local include_hyphen_prefixes = m_table.listToSet {
"ab",
"afro",
"anarco",
"anglo",
"ântero",
"anti",
"auto",
"contra",
"ex",
"franco",
"hiper",
"infra",
"inter",
"intra",
"macro",
"micro",
"neo",
"pan",
"pós",
"pré",
"pró",
"proto",
"sobre",
"sub",
"super",
"vice",
}
-----------------------------------------------------------------------------------------
-- Utility functions --
-----------------------------------------------------------------------------------------
local function track(page)
require("Module:debug/track")("pt-headword/" .. page)
return true
end
local list_param = {list = true, disallow_holes = true}
local boolean_param = {type = "boolean"}
local metaphonic_label = "[[ภาคผนวก:การออกเสียงภาษาโปรตุเกส#เมทาโฟนี|เมทาโฟนี]]"
local function make_plural(sg, special)
local pl = com.make_plural(sg, special)
if not pl then
error(("Internal error: Unable to generate default plural of '%s'"):format(sg))
end
return pl
end
-- Parse and insert an inflection not requiring additional processing into `data.inflections`. The raw arguments come
-- from `args[field]`, which is parsed for inline modifiers. `label` is the label that the inflections are given;
-- `plpos` is the plural part of speech, used in [[Category:LANGNAME PLPOS with red links in their headword lines]].
-- `accel` is the accelerator form, or nil.
local function parse_and_insert_inflection(data, args, field, label, plpos, accel, frob)
m_headword_utilities.parse_and_insert_inflection {
headdata = data,
forms = args[field],
paramname = field,
splitchar = ",",
label = label,
accel = accel and {form = accel} or nil,
frob = frob,
check_missing = true,
lang = lang,
plpos = plpos,
}
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[1] or error("Part of speech has not been specified. Please pass parameter 1 to the module invocation.")
-- หมวดหมู่เป็นภาษาไทย
local poscat_th = require("Module:th-utilities").th_pos(poscat)
local parargs = frame:getParent().args
local params = {
["head"] = list_param,
["id"] = true,
["json"] = boolean_param,
["splithyph"] = boolean_param,
["nolinkhead"] = boolean_param,
["nolink"] = {type = "boolean", alias_of = "nolinkhead"},
["abbr"] = list_param,
["pagename"] = true, -- for testing
}
if pos_functions[poscat_th] then
for key, val in pairs(pos_functions[poscat_th].params) do
params[key] = val
end
end
local args = require("Module:parameters").process(parargs, params)
local pagename = args.pagename or mw.loadData("Module:headword/data").pagename
local user_specified_heads = args.head
local heads = user_specified_heads
if args.nolinkhead then
if #heads == 0 then
heads = {pagename}
end
else
local romut = require(romut_module)
local auto_linked_head = romut.add_links_to_multiword_term(pagename, args.splithyph, nil,
include_hyphen_prefixes)
if #heads == 0 then
heads = {auto_linked_head}
else
for i, head in ipairs(heads) do
if head:find("^~") then
head = romut.apply_link_modifiers(auto_linked_head, usub(head, 2))
heads[i] = head
end
end
end
end
local data = {
lang = lang,
pos_category = poscat_th,
categories = {},
heads = heads,
user_specified_heads = user_specified_heads,
no_redundant_head_cat = #user_specified_heads == 0,
genders = {},
inflections = {},
pagename = pagename,
id = args.id,
force_cat_output = force_cat,
}
local is_suffix = false
if pagename:find("^%-") and poscat_th ~= "รูปปัจจัย" then
is_suffix = true
data.pos_category = "ปัจจัย"
local singular_poscat = --[[m_en_utilities.singularize(poscat)]] poscat_th
insert(data.categories, "ปัจจัยสร้าง" .. singular_poscat .. langname)
insert(data.inflections, {label = "ปัจจัยสร้าง" .. singular_poscat})
end
if pos_functions[poscat_th] then
pos_functions[poscat_th].func(args, data, is_suffix)
end
parse_and_insert_inflection(data, args, "abbr", "abbreviation")
if args.json then
return require("Module:JSON").toJSON(data)
end
return require("Module:headword").full_headword(data)
end
local function replace_hash_with_lemma(term, lemma)
-- If there is a % sign in the lemma, we have to replace it with %% so it doesn't get interpreted as a capture replace
-- expression.
lemma = lemma:gsub("%%", "%%%%")
return (term:gsub("#", lemma))
end
local function is_metaphonic(args, lemma)
if args.nometa then
return false
end
if args.meta then
return true
end
-- Anything in -oso with a preceding vowel (e.g. [[gostoso]], [[curioso]]) is normally metaphonic.
return rfind(lemma, com.V .. ".*oso$")
end
-----------------------------------------------------------------------------------------
-- Nouns --
-----------------------------------------------------------------------------------------
local allowed_genders = m_table.listToSet(
{"m", "f", "mf", "mfbysense", "mfequiv", "gneut", "n", "m-p", "f-p", "mf-p", "mfbysense-p", "mfequiv-p", "gneut-p", "n-p", "?", "?-p"}
)
local function validate_genders(genders)
for _, g in ipairs(genders) do
if type(g) == "table" then
g = g.spec
end
if not allowed_genders[g] then
error("Unrecognized gender: " .. g)
end
end
end
local function do_noun(args, data, pos, is_suffix, is_proper)
local is_plurale_tantum = false
local has_singular = false
if is_suffix then
pos = "ปัจจัย"
end
local plpos = --[[m_en_utilities.pluralize(pos)]] pos
validate_genders(args[1])
data.genders = args[1]
local saw_m = false
local saw_f = false
local saw_gneut = false
local gender_for_irreg_ending
-- Check for specific genders and pluralia tantum.
for _, g in ipairs(args[1]) do
if type(g) == "table" then
g = g.spec
end
if g:find("-p$") then
is_plurale_tantum = true
else
has_singular = true
if g == "m" or g == "mf" or g == "mfbysense" then
saw_m = true
end
if g == "f" or g == "mf" or g == "mfbysense" then
saw_f = true
end
if g == "gneut" then
saw_gneut = true
end
end
end
if saw_m and saw_f then
gender_for_irreg_ending = "mf"
elseif saw_f then
gender_for_irreg_ending = "f"
else
gender_for_irreg_ending = "m"
end
local lemma = data.pagename
local plurals = {}
local function insert_noun_inflection(terms, label, accel)
m_headword_utilities.insert_inflection {
headdata = data,
terms = terms,
label = label,
accel = accel and {form = accel} or nil,
check_missing = true,
lang = lang,
plpos = plpos,
}
end
if is_plurale_tantum and not has_singular then
if args[2][1] then
error("Can't specify plurals of plurale tantum " .. pos)
end
insert(data.inflections, {label = glossary_link("พหูพจน์เท่านั้น")})
else
plurals = m_headword_utilities.parse_term_list_with_modifiers {
paramname = {2, "pl"},
forms = args[2],
splitchar = ",",
}
-- Check for special plural signals
local mode = nil
local pl1 = plurals[1]
if pl1 and #pl1.term == 1 then
mode = pl1.term
if mode == "?" or mode == "!" or mode == "-" or mode == "~" then
pl1.term = nil
if next(pl1) then
error(("Can't specify inline modifiers with plural code '%s'"):format(mode))
end
table.remove(plurals, 1) -- Remove the mode parameter
elseif mode ~= "+" and mode ~= "#" then
error(("Unexpected plural code '%s'"):format(mode))
end
end
if is_plurale_tantum then
-- both singular and plural
insert(data.inflections, {label = "บางครั้ง" .. glossary_link("พหูพจน์เท่านั้น") .. "ในภาษาย่อย"})
end
if mode == "?" then
-- Plural is unknown
insert(data.categories, langname .. " " .. plpos .. " with unknown or uncertain plurals")
elseif mode == "!" then
-- Plural is not attested
insert(data.inflections, {label = "plural not attested"})
insert(data.categories, langname .. " " .. plpos .. " with unattested plurals")
if plurals[1] then
error("Can't specify any plurals along with unattested plural code '!'")
end
elseif mode == "-" then
-- Uncountable noun; may occasionally have a plural
insert(data.categories, plpos .. "นับไม่ได้" .. langname)
-- If plural forms were given explicitly, then show "usually"
if plurals[1] then
insert(data.inflections, {label = "โดยปกติ" .. glossary_link("นับไม่ได้")})
insert(data.categories, plpos .. "นับได้" .. langname)
else
insert(data.inflections, {label = glossary_link("นับไม่ได้")})
end
else
-- Countable or mixed countable/uncountable
if not plurals[1] and not is_proper then
plurals[1] = {term = "+"}
end
if mode == "~" then
-- Mixed countable/uncountable noun, always has a plural
insert(data.inflections, {label = glossary_link("นับได้") .. "และ" .. glossary_link("นับไม่ได้")})
insert(data.categories, plpos .. "นับไม่ได้" .. langname)
insert(data.categories, plpos .. "นับได้" .. langname)
elseif plurals[1] then
-- Countable nouns
insert(data.categories, plpos .. "นับได้" .. langname)
else
-- Uncountable nouns
insert(data.categories, plpos .. "นับไม่ได้" .. langname)
end
end
-- Gather plurals, handling requests for default plurals.
local has_default_or_hash = false
for _, pl in ipairs(plurals) do
if pl.term:find("^%+") or pl.term:find("#") then
has_default_or_hash = true
break
end
end
if has_default_or_hash then
for _, pl in ipairs(plurals) do
if pl.term == "+" then
pl.term = make_plural(lemma)
elseif pl.term:find("^%+") then
pl.term = require(romut_module).get_special_indicator(pl.term)
pl.term = make_plural(lemma, pl.term)
else
pl.term = replace_hash_with_lemma(pl.term, lemma)
end
end
end
local pl1 = plurals[1]
if pl1 and not plurals[2] and pl1.term == lemma then
insert(data.inflections, {label = glossary_link("ผันรูปไม่ได้"),
q = pl1.q, qq = pl1.qq, l = pl1.l, ll = pl1.ll, refs = pl1.refs
})
insert(data.categories, plpos .. "ผันรูปไม่ได้" .. langname)
else
insert_noun_inflection(plurals, "พหูพจน์", "p")
end
if plurals[2] then
insert(data.categories, langname .. " " .. plpos .. " with multiple plurals")
end
end
-- Gather masculines/feminines. For each one, generate the corresponding plural. `field` is the name of the field
-- containing the masculine or feminine forms (normally "m" or "f"); `inflect` is a function of one or two arguments
-- to generate the default masculine or feminine from the lemma (the arguments are the lemma and optionally a
-- "special" flag to indicate how to handle multiword lemmas, and the function is normally make_feminine or
-- make_masculine from [[Module:pt-common]]); and `default_plurals` is a list into which the corresponding default
-- plurals of the gathered or generated masculine or feminine forms are stored.
local function handle_mf(field, inflect, default_plurals)
local mfs = m_headword_utilities.parse_term_list_with_modifiers {
paramname = field,
forms = args[field],
splitchar = ",",
frob = function(term)
if term == "+" then
-- Generate default masculine/feminine.
term = inflect(lemma)
else
term = replace_hash_with_lemma(term, lemma)
end
local special = require(romut_module).get_special_indicator(term)
if special then
term = inflect(lemma, special)
end
return term
end
}
for _, mf in ipairs(mfs) do
local plobj = m_table.shallowCopy(mf)
plobj.term = make_plural(mf.term, special)
-- Add an accelerator for each masculine/feminine plural whose lemma is the corresponding singular, so that
-- the accelerated entry that is generated has a definition that looks like
-- # {{plural of|pt|MFSING}}
plobj.accel = {form = "p", lemma = mf.term}
insert(default_plurals, plobj)
end
return mfs
end
local feminine_plurals = {}
local feminines = handle_mf("f", com.make_feminine, feminine_plurals)
local masculine_plurals = {}
local masculines = handle_mf("m", com.make_masculine, masculine_plurals)
local function handle_mf_plural(mfplfield, default_plurals, singulars)
local mfpl = m_headword_utilities.parse_term_list_with_modifiers {
paramname = mfplfield,
forms = args[mfplfield],
splitchar = ",",
}
if is_plurale_tantum then
return mfpl
end
local new_mfpls = {}
local saw_plus
for i, mfpl in ipairs(mfpl) do
local accel
if #mfpl == #singulars then
-- If same number of overriding masculine/feminine plurals as singulars, assume each plural goes with
-- the corresponding singular and use each corresponding singular as the lemma in the accelerator. The
-- generated entry will have
-- # {{plural of|pt|SINGULAR}}
-- as the definition.
accel = {form = "p", lemma = singulars[i].term}
else
accel = nil
end
if mfpl.term == "+" then
-- We should never see + twice. If we do, it will lead to problems since we overwrite the values of
-- default_plurals the first time around.
if saw_plus then
error(("Saw + twice when handling %s="):format(mfplfield))
end
saw_plus = true
if not default_plurals[1] then
-- FIXME: Can this happen? Not in corresponding Spanish code and the old Portuguese code tried to
-- handle this condition by generating the default plural from the lemma.
error("Internal error: Something wrong, no generated default m/f plurals at this stage")
end
for _, defpl in ipairs(default_plurals) do
-- defpl is already a table and has an accel field
m_headword_utilities.combine_termobj_qualifiers_labels(defpl, mfpl)
insert(new_mfpls, defpl)
end
elseif mfpl.term:find("^%+") then
mfpl.term = require(romut_module).get_special_indicator(mfpl.term)
for _, mf in ipairs(singulars) do
local mfplobj = m_table.shallowCopy(mfpl)
mfplobj.term = make_plural(mf.term, mfpl.term)
mfplobj.accel = accel
m_headword_utilities.combine_termobj_qualifiers_labels(mfplobj, mf)
insert(new_mfpls, mfplobj)
end
else
mfpl.accel = accel
mfpl.term = replace_hash_with_lemma(mfpl.term, lemma)
insert(new_mfpls, mfpl)
end
end
return new_mfpls
end
if args.fpl[1] then
-- Override any existing feminine plurals.
feminine_plurals = handle_mf_plural("fpl", feminine_plurals, feminines)
end
if args.mpl[1] then
-- Override any existing masculine plurals.
masculine_plurals = handle_mf_plural("mpl", masculine_plurals, masculines)
end
local function parse_and_insert_noun_inflection(field, label, accel)
parse_and_insert_inflection(data, args, field, label, plpos, accel)
end
insert_noun_inflection(feminines, "เพศหญิง", "f")
insert_noun_inflection(feminine_plurals, "เพศหญิงพหูพจน์")
insert_noun_inflection(masculines, "เพศชาย")
insert_noun_inflection(masculine_plurals, "เพศชายพหูพจน์")
if is_metaphonic(args, lemma) then
insert(data.inflections, {label = metaphonic_label})
insert(data.categories, plpos .. langname .. "ที่มีเมทาโฟนี")
end
parse_and_insert_noun_inflection("dim", "ตัวบอกความเล็ก")
parse_and_insert_noun_inflection("aug", "ตัวบอกความใหญ่")
parse_and_insert_noun_inflection("pej", "pejorative")
parse_and_insert_noun_inflection("dem", "คำประชานาม")
parse_and_insert_noun_inflection("fdem", "คำประชานามหญิง")
-- Maybe add category 'Portuguese nouns with irregular gender' (or similar)
local irreg_gender_lemma = com.rsub(lemma, " .*", "") -- only look at first word
if (rfind(irreg_gender_lemma, "[^ã]o$") and (gender_for_irreg_ending == "f" or gender_for_irreg_ending == "mf")) or
(irreg_gender_lemma:find("a$") and (gender_for_irreg_ending == "m" or gender_for_irreg_ending == "mf")) then
insert(data.categories, langname .. " " .. plpos .. " with irregular gender")
end
end
local function get_noun_params(is_proper)
return {
[1] = {list = "g", disallow_holes = true, required = not is_proper, default = "?", type = "genders",
flatten = true},
[2] = {list = "pl", disallow_holes = true},
["m"] = list_param,
["f"] = list_param,
["mpl"] = list_param,
["fpl"] = list_param,
["dim"] = list_param, --diminutive(s)
["aug"] = list_param, --diminutive(s)
["pej"] = list_param, --pejorative(s)
["dem"] = list_param, --demonym(s)
["fdem"] = list_param, --female demonym(s)
["meta"] = boolean_param, -- metaphonic
["nometa"] = boolean_param, -- explicitly not metaphonic
}
end
pos_functions["คำนาม"] = {
params = get_noun_params(),
func = function(args, data, is_suffix)
do_noun(args, data, "คำนาม", is_suffix)
end,
}
pos_functions["คำวิสามานยนาม"] = {
params = get_noun_params("is proper"),
func = function(args, data, is_suffix)
do_noun(args, data, "คำวิสามานยนาม", is_suffix, "is proper noun")
end,
}
-----------------------------------------------------------------------------------------
-- Pronouns --
-----------------------------------------------------------------------------------------
local function do_pronoun(args, data, pos, is_suffix)
if is_suffix then
pos = "ปัจจัย"
end
local plpos = --[[m_en_utilities.pluralize(pos)]] pos
if not is_suffix then
data.pos_category = plpos
end
local lemma = data.pagename
validate_genders(args[1])
data.genders = args[1]
local function do_inflection(field, label, accel)
parse_and_insert_inflection(data, args, field, label, plpos, accel)
end
do_inflection("m", "เพศชาย")
do_inflection("f", "เพศหญิง")
do_inflection("sg", "เอกพจน์")
do_inflection("pl", "พหูพจน์")
do_inflection("mpl", "เพศชายพหูพจน์")
do_inflection("fpl", "เพศหญิงพหูพจน์")
do_inflection("n", "เพศกลาง")
end
local function get_pronoun_params()
local params = {
[1] = {list = "g", disallow_holes = true, type = "genders", flatten = true}, --gender(s)
["m"] = list_param, --masculine form(s)
["f"] = list_param, --feminine form(s)
["sg"] = list_param, --singular form(s)
["pl"] = list_param, --plural form(s)
["mpl"] = list_param, --masculine plural form(s)
["fpl"] = list_param, --feminine plural form(s)
["n"] = list_param, --neuter form(s)
}
return params
end
pos_functions["คำสรรพนาม"] = {
params = get_pronoun_params(),
func = function(args, data, is_suffix)
do_pronoun(args, data, "คำสรรพนาม", is_suffix)
end,
}
-----------------------------------------------------------------------------------------
-- Adjectives --
-----------------------------------------------------------------------------------------
-- Handle comparatives and superlatives for adjectives and adverbs, including user-specified comparatives and
-- superlatives, default-requested comparatives/superlatives using '+', autogenerated comparatives/superlatives,
-- and hascomp=. Code is the same for adjectives and adverbs.
local function handle_adj_adv_comp(args, data, plpos, is_adv)
local lemma = data.pagename
local stem
if is_adv then
stem = com.rsub(lemma, "mente$", "")
else
stem = lemma
end
local function insert_inflection(terms, label, accel)
m_headword_utilities.insert_inflection {
headdata = data,
terms = terms,
label = label,
accel = accel and {form = accel} or nil,
check_missing = true,
lang = lang,
plpos = plpos,
}
end
local function make_absolute_superlative(special)
if is_adv then
return com.make_adverbial_absolute_superlative(stem, special)
else
return com.make_absolute_superlative(stem, special)
end
end
-- Maybe autogenerate default comparative/superlative.
local comp, sup
if args.comp and args.sup then-- comp= and sup= were given as options to the user
-- If no comp, but a non-default sup given, then add the default comparative/superlative.
-- This is useful when an absolute superlative is given.
comp = m_headword_utilities.parse_term_list_with_modifiers {
paramname = "comp",
forms = args.comp,
splitchar = ",",
}
sup = m_headword_utilities.parse_term_list_with_modifiers {
paramname = "sup",
forms = args.sup,
splitchar = ",",
}
local saw_sup_plus = false
if not comp[1] and sup[1] then
for _, supval in ipairs(sup) do
if supval.term == "+" then
saw_sup_plus = true
end
end
if not saw_sup_plus then
comp = {{term = "+"}}
insert(sup, 1, {term = "+"})
end
end
-- If comp=+, use default comparative 'mais ...', and set a default superlative if unspecified.
local saw_comp_plus = false
for _, compval in ipairs(comp) do
if compval.term == "+" then
saw_comp_plus = true
compval.term = "[[mais]] [[" .. lemma .. "]]"
end
end
if saw_comp_plus and not sup[1] then
sup = {{term = "+"}}
end
-- If sup=+ (possibly from comp=+), use default superlative 'o mais ...'. Also handle absolute superlatives.
for _, supval in ipairs(sup) do
if supval.term == "+" then
supval.term = "[[o]] [[mais]] [[" .. lemma .. "]]"
elseif supval.term == "+abs" then
supval.term = make_absolute_superlative()
elseif rfind(supval.term, "^%+abs:") then
local sp = rmatch(supval.term, "^%+abs:(.*)$")
supval.term = make_absolute_superlative(sp)
end
end
end
if args.hascomp then
if args.hascomp == "both" then
insert(data.inflections, {label = "บางครั้ง" .. glossary_link("เปรียบเทียบได้")})
insert(data.categories, plpos .. "เปรียบเทียบได้" .. langname)
insert(data.categories, plpos .. "เปรียบเทียบไม่ได้" .. langname)
else
local hascomp = require("Module:yesno")(args.hascomp)
if hascomp == true then
insert(data.inflections, {label = glossary_link("เปรียบเทียบได้")})
insert(data.categories, plpos .. "เปรียบเทียบได้" .. langname)
elseif hascomp == false then
insert(data.inflections, {label = glossary_link("เปรียบเทียบไม่ได้")})
insert(data.categories, plpos .. "เปรียบเทียบไม่ได้" .. langname)
else
error("Unrecognized value for hascomp=: " .. args.hascomp)
end
end
elseif comp and comp[1] or sup and sup[1] then
insert(data.inflections, {label = glossary_link("เปรียบเทียบได้")})
insert(data.categories, plpos .. "เปรียบเทียบได้" .. langname)
end
insert_inflection(comp, "ขั้นกว่า")
insert_inflection(sup, "ขั้นสุด")
end
local function do_adjective(args, data, pos, is_suffix, is_superlative)
local feminines = {}
local masculine_plurals = {}
local feminine_plurals = {}
if is_suffix then
pos = "ปัจจัย"
end
local plpos = --[[m_en_utilities.pluralize(pos)]] pos
if not is_suffix then
data.pos_category = plpos
end
if args.sp then
local romut = require(romut_module)
if not romut.allowed_special_indicators[args.sp] then
local indicators = {}
for indic, _ in pairs(romut.allowed_special_indicators) do
insert(indicators, "'" .. indic .. "'")
end
table.sort(indicators)
error("Special inflection indicator beginning can only be " ..
mw.text.listToText(indicators) .. ": " .. args.sp)
end
end
local lemma = data.pagename
local function fetch_inflections(field)
local retval = m_headword_utilities.parse_term_list_with_modifiers {
paramname = field,
forms = args[field],
splitchar = ",",
}
if not retval[1] then
return {{term = "+"}}
end
return retval
end
local function insert_inflection(terms, label, accel)
m_headword_utilities.insert_inflection {
headdata = data,
terms = terms,
label = label,
accel = accel and {form = accel} or nil,
check_missing = true,
lang = lang,
plpos = plpos,
}
end
if args.short then
insert(data.inflections, {label = "[[Appendix:Portuguese verbs#Participles|short participle]]"})
end
if args.inv then
-- invariable adjective
insert(data.inflections, {label = glossary_link("ผันรูปไม่ได้")})
insert(data.categories, plpos .. "ผันรูปไม่ได้" .. langname)
if args.sp or args.f[1] or args.pl[1] or args.mpl[1] or args.fpl[1] then
error("Can't specify inflections with an invariable " .. pos)
end
elseif args.fonly then
-- feminine-only
if args.f[1] then
error("Can't specify explicit feminines with feminine-only " .. pos)
end
if args.pl[1] then
error("Can't specify explicit plurals with feminine-only " .. pos .. ", use fpl=")
end
if args.mpl[1] then
error("Can't specify explicit masculine plurals with feminine-only " .. pos)
end
local argsfpl = fetch_inflections("fpl")
for _, fpl in ipairs(argsfpl) do
if fpl.term == "+" then
fpl.term = make_plural(lemma, args.sp)
else
fpl.term = replace_hash_with_lemma(fpl.term, lemma)
end
insert(feminine_plurals, fpl)
end
insert(data.inflections, {label = "เพศหญิงเท่านั้น"})
insert_inflection(feminine_plurals, "เพศหญิงพหูพจน์", "f|p")
else
-- Gather feminines.
for _, f in ipairs(fetch_inflections("f")) do
if f.term == "+" then
-- Generate default feminine.
f.term = com.make_feminine(lemma, args.sp)
else
f.term = replace_hash_with_lemma(f.term, lemma)
end
insert(feminines, f)
end
local fem_like_lemma = #feminines == 1 and feminines[1].term == lemma and
not m_headword_utilities.termobj_has_qualifiers_or_labels(feminines[1])
if fem_like_lemma then
insert(data.categories, plpos .. "epicene" .. langname)
end
local mpl_field = "mpl"
local fpl_field = "fpl"
if args.pl[1] then
if args.mpl[1] or args.fpl[1] then
error("Can't specify both pl= and mpl=/fpl=")
end
mpl_field = "pl"
fpl_field = "pl"
end
local argsmpl = fetch_inflections(mpl_field)
local argsfpl = fetch_inflections(fpl_field)
for _, mpl in ipairs(argsmpl) do
if mpl.term == "+" then
-- Generate default masculine plural.
mpl.term = make_plural(lemma, args.sp)
else
mpl.term = replace_hash_with_lemma(mpl.term, lemma)
end
insert(masculine_plurals, mpl)
end
for _, fpl in ipairs(argsfpl) do
if fpl.term == "+" then
for _, f in ipairs(feminines) do
-- Generate default feminine plural; f is a table.
local fplobj = m_table.shallowCopy(fpl)
fplobj.term = make_plural(f.term, args.sp)
m_headword_utilities.combine_termobj_qualifiers_labels(fplobj, f)
insert(feminine_plurals, fplobj)
end
else
fpl.term = replace_hash_with_lemma(fpl.term, lemma)
insert(feminine_plurals, fpl)
end
end
local fem_pl_like_masc_pl = masculine_plurals[1] and feminine_plurals[1] and
m_table.deepEquals(masculine_plurals, feminine_plurals)
local masc_pl_like_lemma = #masculine_plurals == 1 and masculine_plurals[1].term == lemma and
not m_headword_utilities.termobj_has_qualifiers_or_labels(masculine_plurals[1])
if fem_like_lemma and fem_pl_like_masc_pl and masc_pl_like_lemma then
-- actually invariable
insert(data.inflections, {label = glossary_link("ผันรูปไม่ได้")})
insert(data.categories, plpos .. "ผันรูปไม่ได้" .. langname)
else
-- Make sure there are feminines given and not same as lemma.
if not fem_like_lemma then
insert_inflection(feminines, "เพศหญิง", "f|s")
elseif args.gneut then
data.genders = {"gneut"}
else
data.genders = {"mf"}
end
if fem_pl_like_masc_pl then
if args.gneut then
insert_inflection(masculine_plurals, "พหูพจน์", "p")
else
-- This is how the Spanish module works.
-- insert_inflection(masculine_plurals, "masculine and feminine plural", "p")
insert_inflection(masculine_plurals, "พหูพจน์", "p")
end
else
insert_inflection(masculine_plurals, "เพศชายพหูพจน์", "m|p")
insert_inflection(feminine_plurals, "เพศหญิงพหูพจน์", "f|p")
end
end
end
local function parse_and_insert_adj_inflection(field, label, accel, frob)
parse_and_insert_inflection(data, args, field, label, plpos, accel, frob)
end
parse_and_insert_adj_inflection("n", "เพศกลาง")
handle_adj_adv_comp(args, data, plpos, false)
parse_and_insert_adj_inflection("dim", "ตัวบอกความเล็ก", nil, function(term)
if term == "+" then
term = com.make_diminutive(lemma)
elseif term:find("^%+") then
term = require(romut_module).get_special_indicator(term)
term = com.make_diminutive(lemma, term)
end
return term
end)
parse_and_insert_adj_inflection("aug", "ตัวบอกความใหญ่", nil, function(term)
if term == "+" then
term = com.make_augmentative(lemma)
elseif term:find("^%+") then
term = require(romut_module).get_special_indicator(term)
term = com.make_augmentative(lemma, term)
end
return term
end)
if is_metaphonic(args, lemma) then
insert(data.inflections, {label = metaphonic_label})
insert(data.categories, plpos .. langname .. "ที่มีเมทาโฟนี")
end
if args.irreg and is_superlative then
insert(data.categories, langname .. " irregular superlative " .. plpos)
end
end
local function get_adjective_params(adjtype)
local params = {
["inv"] = boolean_param, --invariable
["sp"] = true, -- special indicator: "first", "first-last", etc.
["f"] = list_param, --feminine form(s)
["pl"] = list_param, --plural override(s)
["mpl"] = list_param, --masculine plural override(s)
["fpl"] = list_param, --feminine plural override(s)
["meta"] = boolean_param, -- metaphonic
["nometa"] = boolean_param, -- explicitly not metaphonic
}
if adjtype == "base" then
params["comp"] = list_param --comparative(s)
params["sup"] = list_param --superlative(s)
params["dim"] = list_param --diminutive(s)
params["aug"] = list_param --augmentative(s)
params["fonly"] = boolean_param -- feminine only
params["gneut"] = boolean_param -- gender-neutral adjective e.g. [[latine]] (FIXME: do these exist in Portuguese?)
params["hascomp"] = true -- has comparative
end
if adjtype == "part" then
params["short"] = boolean_param -- short participle
end
if adjtype == "sup" then
params["irreg"] = boolean_param
end
if adjtype == "pron" or adjtype == "contr" then
params["n"] = list_param --neuter form(s)
end
return params
end
pos_functions["คำคุณศัพท์"] = {
params = get_adjective_params("base"),
func = function(args, data, is_suffix)
do_adjective(args, data, "คำคุณศัพท์", is_suffix)
end,
}
pos_functions["คำคุณศัพท์ขั้นกว่า"] = {
params = get_adjective_params("comp"),
func = function(args, data, is_suffix)
do_adjective(args, data, "คำคุณศัพท์", is_suffix)
end,
}
pos_functions["คำคุณศัพท์ขั้นสุด"] = {
params = get_adjective_params("sup"),
func = function(args, data, is_suffix)
do_adjective(args, data, "คำคุณศัพท์", is_suffix, "is superlative")
end,
}
pos_functions["รูปกริยาขยายอดีตกาล"] = {
params = get_adjective_params("part"),
func = function(args, data, is_suffix)
do_adjective(args, data, "รูปกริยาขยาย", is_suffix)
data.pos_category = "รูปกริยาขยายอดีตกาล"
end,
}
pos_functions["ตัวกำหนด"] = {
params = get_adjective_params("det"),
func = function(args, data, is_suffix)
do_adjective(args, data, "ตัวกำหนด", is_suffix)
end,
}
pos_functions["คำสรรพนามคล้ายคุณศัพท์"] = {
params = get_adjective_params("pron"),
func = function(args, data, is_suffix)
do_adjective(args, data, "คำสรรพนาม", is_suffix)
end,
}
pos_functions["รูปหดย่อคล้ายคุณศัพท์"] = {
params = get_adjective_params("contr"),
func = function(args, data, is_suffix)
do_adjective(args, data, "รูปหดย่อ", is_suffix)
end,
}
-----------------------------------------------------------------------------------------
-- Adverbs --
-----------------------------------------------------------------------------------------
local function do_adverb(args, data, pos, is_suffix)
if is_suffix then
pos = "ปัจจัย"
end
local plpos = --[[m_en_utilities.pluralize(pos)]] pos
if not is_suffix then
data.pos_category = plpos
end
handle_adj_adv_comp(args, data, plpos, "is adv")
end
local function get_adverb_params(advtype)
local params = {}
if advtype == "base" then
params["comp"] = list_param --comparative(s)
params["sup"] = list_param --superlative(s)
params["hascomp"] = true -- has comparative
end
return params
end
pos_functions["คำกริยาวิเศษณ์"] = {
params = get_adverb_params("base"),
func = function(args, data, is_suffix)
do_adverb(args, data, "คำกริยาวิเศษณ์", is_suffix)
end,
}
pos_functions["คำกริยาวิเศษณ์ขั้นกว่า"] = {
params = get_adverb_params("comp"),
func = function(args, data, is_suffix)
do_adverb(args, data, "คำกริยาวิเศษณ์", is_suffix)
end,
}
pos_functions["คำกริยาวิเศษณ์ขั้นสุด"] = {
params = get_adverb_params("sup"),
func = function(args, data, is_suffix)
do_adverb(args, data, "คำกริยาวิเศษณ์", is_suffix)
end,
}
-----------------------------------------------------------------------------------------
-- Verbs --
-----------------------------------------------------------------------------------------
pos_functions["คำกริยา"] = {
params = {
[1] = true,
["pres"] = list_param, --present
["pres_qual"] = {list = "pres\1_qual", allow_holes = true},
["pres3s"] = list_param, --third-singular present
["pres3s_qual"] = {list = "pres3s\1_qual", allow_holes = true},
["pret"] = list_param, --preterite
["pret_qual"] = {list = "pret\1_qual", allow_holes = true},
["part"] = list_param, --participle
["part_qual"] = {list = "part\1_qual", allow_holes = true},
["short_part"] = list_param, --short participle
["short_part_qual"] = {list = "short_part\1_qual", allow_holes = true},
["noautolinktext"] = boolean_param,
["noautolinkverb"] = boolean_param,
["attn"] = boolean_param,
},
func = function(args, data, frame)
local preses, preses_3s, prets, parts, short_parts
if args.attn then
insert(data.categories, "Requests for attention concerning " .. langname)
return
end
local pt_verb = require(pt_verb_module)
local alternant_multiword_spec = pt_verb.do_generate_forms(args, "pt-verb", data.heads[1])
local specforms = alternant_multiword_spec.forms
local function slot_exists(slot)
return specforms[slot] and #specforms[slot] > 0
end
local function do_finite(slot_tense, label_tense)
-- Use pres_3s if it exists and pres_1s doesn't exist (e.g. impersonal verbs); similarly for pres_3p
-- (only3p verbs); but fall back to pres_1s if neither pres_1s nor pres_3s nor pres_3p exist (e.g.
-- [[empedernir]]).
local has_1s = slot_exists(slot_tense .. "_1s")
local has_3s = slot_exists(slot_tense .. "_3s")
local has_3p = slot_exists(slot_tense .. "_3p")
if has_1s or (not has_3s and not has_3p) then
return {
slot = slot_tense .. "_1s",
label = ("บุรุษที่หนึ่งเอกพจน์%s"):format(label_tense),
}, true
elseif has_3s then
return {
slot = slot_tense .. "_3s",
label = ("บุรุษที่สามเอกพจน์%s"):format(label_tense),
}, false
else
return {
slot = slot_tense .. "_3p",
label = ("บุรุษที่สามพหูพจน์%s"):format(label_tense),
}, false
end
end
local did_pres_1s
preses, did_pres_1s = do_finite("pres", "ปัจจุบันกาล")
preses_3s = {
slot = "pres_3s",
label = "บุรุษที่สามเอกพจน์ปัจจุบันกาล",
}
prets = do_finite("pret", "อดีตกาลสิ้นสุด")
parts = {
slot = "pp_ms",
label = "รูปกริยาขยายอดีตกาล",
}
short_parts = {
slot = "short_pp_ms",
label = "รูปกริยาขยายอดีตกาลสั้น",
}
if args.pres[1] or args.pres3s[1] or args.pret[1] or args.part[1] or args.short_part[1] then
track("verb-old-multiarg")
end
local function strip_brackets(qualifiers)
if not qualifiers then
return nil
end
local stripped_qualifiers = {}
for _, qualifier in ipairs(qualifiers) do
local stripped_qualifier = qualifier:match("^%[(.*)%]$")
if not stripped_qualifier then
error("Internal error: Qualifier should be surrounded by brackets at this stage: " .. qualifier)
end
insert(stripped_qualifiers, stripped_qualifier)
end
return stripped_qualifiers
end
local function do_verb_form(args, qualifiers, slot_desc, skip_if_empty)
local forms
local to_insert
if #args == 0 then
forms = specforms[slot_desc.slot]
if not forms or #forms == 0 then
if skip_if_empty then
return
end
forms = {{form = "-"}}
end
elseif #args == 1 and args[1] == "-" then
forms = {{form = "-"}}
else
forms = {}
for i, arg in ipairs(args) do
local qual = qualifiers[i]
if qual then
-- FIXME: It's annoying we have to add brackets and strip them out later. The inflection
-- code adds all footnotes with brackets around them; we should change this.
qual = {"[" .. qual .. "]"}
end
local form = arg
if not args.noautolinkverb then
-- [[Module:inflection utilities]] already loaded by [[Module:pt-verb]]
form = require(inflection_utilities_module).add_links(form)
end
insert(forms, {form = form, footnotes = qual})
end
end
if forms[1].form == "-" then
to_insert = {label = "no " .. slot_desc.label}
else
local into_table = {label = slot_desc.label}
for _, form in ipairs(forms) do
local qualifiers = strip_brackets(form.footnotes)
-- Strip redundant brackets surrounding entire form. These may get generated e.g.
-- if we use the angle bracket notation with a single word.
local stripped_form = rmatch(form.form, "^%[%[([^%[%]]*)%]%]$") or form.form
stripped_form = pt_verb.remove_variant_codes(stripped_form)
-- Don't include accelerators if brackets remain in form, as the result will be wrong.
-- FIXME: For now, don't include accelerators. We should use the new {{pt-verb form of}} once
-- implemented.
-- local this_accel = not stripped_form:find("%[%[") and accel or nil
local this_accel = nil
insert(into_table, {term = stripped_form, q = qualifiers, accel = this_accel})
end
to_insert = into_table
end
insert(data.inflections, to_insert)
end
local skip_pres_if_empty
if alternant_multiword_spec.no_pres1_and_sub then
insert(data.inflections, {label = "no first-person singular present"})
insert(data.inflections, {label = "no present subjunctive"})
end
if alternant_multiword_spec.no_pres_stressed then
insert(data.inflections, {label = "no stressed present indicative or subjunctive"})
skip_pres_if_empty = true
end
if alternant_multiword_spec.only3s then
insert(data.inflections, {label = glossary_link("impersonal")})
elseif alternant_multiword_spec.only3sp then
insert(data.inflections, {label = "บุรุษที่สามเท่านั้น"})
elseif alternant_multiword_spec.only3p then
insert(data.inflections, {label = "บุรุษที่สามพหูพจน์เท่านั้น"})
end
local has_vowel_alt
if alternant_multiword_spec.vowel_alt then
for _, vowel_alt in ipairs(alternant_multiword_spec.vowel_alt) do
if vowel_alt ~= "+" and vowel_alt ~= "í" and vowel_alt ~= "ú" then
has_vowel_alt = true
break
end
end
end
do_verb_form(args.pres, args.pres_qual, preses, skip_pres_if_empty)
-- We want to include both the pres_1s and pres_3s if there is a vowel alternation in the present singular. But
-- we don't want to redundantly include the pres_3s if we already included it.
if did_pres_1s and has_vowel_alt then
do_verb_form(args.pres3s, args.pres3s_qual, preses_3s, skip_pres_if_empty)
end
do_verb_form(args.pret, args.pret_qual, prets)
do_verb_form(args.part, args.part_qual, parts)
do_verb_form(args.short_part, args.short_part_qual, short_parts, "skip if empty")
-- Add categories.
for _, cat in ipairs(alternant_multiword_spec.categories) do
insert(data.categories, cat)
end
-- If the user didn't explicitly specify head=, or specified exactly one head (not 2+) and we were able to
-- incorporate any links in that head into the 1= specification, use the infinitive generated by
-- [[Module:pt-verb]] in place of the user-specified or auto-generated head. This was copied from
-- [[Module:it-headword]], where doing this gets accents marked on the verb(s). We don't have accents marked on
-- the verb but by doing this we do get any footnotes on the infinitive propagated here. Don't do this if the
-- user gave multiple heads or gave a head with a multiword-linked verbal expression such as Italian
-- '[[dare esca]] [[al]] [[fuoco]]' (FIXME: give Portuguese equivalent).
if #data.user_specified_heads == 0 or (
#data.user_specified_heads == 1 and alternant_multiword_spec.incorporated_headword_head_into_lemma
) then
data.heads = {}
for _, lemma_obj in ipairs(alternant_multiword_spec.forms.infinitive_linked) do
local quals, refs = require(inflection_utilities_module).
convert_footnotes_to_qualifiers_and_references(lemma_obj.footnotes)
insert(data.heads, {term = lemma_obj.form, q = quals, refs = refs})
end
end
end
}
-----------------------------------------------------------------------------------------
-- Suffix forms --
-----------------------------------------------------------------------------------------
pos_functions["รูปปัจจัย"] = {
params = {
[1] = {required = true, list = true, disallow_holes = true},
["g"] = {list = true, disallow_holes = true, type = "genders", flatten = true},
},
func = function(args, data, is_suffix)
validate_genders(args.g)
data.genders = args.g
local suffix_type = {}
for _, typ in ipairs(args[1]) do
insert(suffix_type, "ปัจจัยสร้าง" .. typ)
end
insert(data.inflections, {label = "รูปผันของ " .. m_table.serialCommaJoin(suffix_type, {conj = "หรือ"})})
end,
}
return export
9cxskedvn8p7iuq5bfcnx2s5mk47fnp
มอดูล:fr-conj
828
238530
5729453
5688354
2026-07-20T10:07:00Z
Octahedron80
267
5729453
Scribunto
text/plain
local export = {}
local m_links = require("Module:links")
local lang = require("Module:languages").getByCode("fr")
-- defined below
local format_links, categorize
--entry point
function export.frconj(frame)
--are we directly embedding through Template:fr-conj or calling the module?
local args = {}
if frame.args["direct"] == "yes" then
args = frame:getParent().args
else
args = frame.args
end
--create the forms
local data = {forms = {}, categories = {}, en = false, y = false, yen = false, l = false, le = false, la = false, les = false, l_en = false, l_y = false, l_yen = false, lesen = false, lesy = false, lesyen = false, refl = false, reflen = false, refll = false, reflle = false, reflla = false, reflles = false, reflly = false, refllesy = false, refly = false, reflyen = false, aux = ""}
data.aux = args["aux"]
if not (data.aux == "avoir" or data.aux == "être") then
data.aux = "avoir ''or'' être"
end
if (args["inf"] == nil or args["inf"] == "" or args["inf"] == mw.loadData("Module:headword/data").pagename) then
data.forms.inf_nolink = mw.loadData("Module:headword/data").pagename
else
data.forms.inf_nolink = format_links(args["inf"])
end
data.forms.pp = format_links(args["pp"])
data.forms.ppr = format_links(args["ppr"])
if (args["pp"] == "—") then
data.forms.pp_nolink = "—"
elseif (args["pp"] == nil or mw.loadData("Module:headword/data").pagename) then
data.forms.pp_nolink = mw.loadData("Module:headword/data").pagename
else
data.forms.pp_nolink = format_links(args["pp"])
end
if (args["ppr"] == "—") then
data.forms.ppr_nolink = "—"
elseif (args["ppr"] == nil or mw.loadData("Module:headword/data").pagename) then
data.forms.ppr_nolink = mw.loadData("Module:headword/data").pagename
else
data.forms.ppr_nolink = format_links(args["ppr"])
end
local form_params = {
"ind.p.1s", "ind.p.2s", "ind.p.3s", "ind.p.1p", "ind.p.2p", "ind.p.3p",
"ind.i.1s", "ind.i.2s", "ind.i.3s", "ind.i.1p", "ind.i.2p", "ind.i.3p",
"ind.ps.1s", "ind.ps.2s", "ind.ps.3s", "ind.ps.1p", "ind.ps.2p", "ind.ps.3p",
"ind.f.1s", "ind.f.2s", "ind.f.3s", "ind.f.1p", "ind.f.2p", "ind.f.3p",
"cond.p.1s", "cond.p.2s", "cond.p.3s", "cond.p.1p", "cond.p.2p", "cond.p.3p",
"sub.p.1s", "sub.p.2s", "sub.p.3s", "sub.p.1p", "sub.p.2p", "sub.p.3p",
"sub.pa.1s", "sub.pa.2s", "sub.pa.3s", "sub.pa.1p", "sub.pa.2p", "sub.pa.3p",
"imp.p.2s", "imp.p.1p", "imp.p.2p",
}
for _, form in ipairs(form_params) do
local key = form:gsub("%.", "_")
data.forms[key] = format_links(args[form])
local alt = form .. ".alt"
local alt_arg = args[alt]
if not (alt_arg == nil or alt_arg == "" or alt_arg == "—") then
data.forms[key] = data.forms[key] .. " <i>or</i> " .. format_links(alt_arg)
end
end
--a few ugly hacks
data.forms.ger = args["ger.override"]
data.forms.inf_comp = args["inf.override"]
data.forms.ger_comp = args["ger.comp.override"]
--finish up
if mw.title.getCurrentTitle().nsText == "" then
return export.make_table(data) .. categorize(args,data)
else
return export.make_table(data)
end
end
function format_links(link)
if (link == nil or link == "" or link == "—") then
return "—"
else
return m_links.full_link({lang = lang, term = link})
end
end
function categorize(args, data)
output = ""
if args.group == "1" or args.group == "1st" or args.group == "first" then
output = output .. "[[Category:คำกริยากลุ่ม 1 ภาษาฝรั่งเศส]]"
elseif args.group == "2" or args.group == "2st" or args.group == "second" then
output = output .. "[[Category:คำกริยากลุ่ม 2 ภาษาฝรั่งเศส]]"
elseif args.group == "3" or args.group == "3rd" or args.group == "third" then
output = output .. "[[Category:คำกริยากลุ่ม 3 ภาษาฝรั่งเศส]]"
end
if data.aux == "être" then
output = output .. "[[Category:คำกริยาภาษาฝรั่งเศสที่ใช้คำกริยาช่วย être]]"
elseif data.aux == "avoir or être" then
output = output .. "[[Category:คำกริยาภาษาฝรั่งเศสที่ใช้คำกริยาช่วย avoir หรือ être]]"
end
return output
end
--split from Module:fr-verb/core
function export.make_table(data)
local aux_gerund = ""
if data.aux == "avoir" then
aux_gerund = "[[ayant]]"
elseif data.aux == "[[s']][[être]]" then
aux_gerund = "[[s']][[étant]]"
elseif data.aux == "s'en être" then
aux_gerund = "[[s']][[en]] [[étant]]"
elseif data.aux == "s'y être" then
aux_gerund = "[[s']][[y]] [[étant]]"
elseif data.aux == "s'y en être" then
aux_gerund = "[[s']][[y]] [[en]] [[étant]]"
elseif data.aux == "se l'être" then
aux_gerund = "[[se]] [[l']][[étant]]"
elseif data.aux == "se les être" then
aux_gerund = "[[se]] [[les]] [[étant]]"
elseif data.aux == "l'en avoir" then
aux_gerund = "[[l']][[en]] [[ayant]]"
elseif data.aux == "l'y en avoir" then
aux_gerund = "[[l']][[y]] [[en]] [[ayant]]"
elseif data.aux == "les en avoir" then
aux_gerund = "[[les]] [[en]] [[ayant]]"
elseif data.aux == "les y en avoir" then
aux_gerund = "[[les]] [[y]] [[en]] [[ayant]]"
elseif data.aux == "se les y être" then
aux_gerund = "[[se]] [[les]] [[y]] [[étant]]"
elseif data.aux == "se l'y être" then
aux_gerund = "[[se]] [[l']][[y]] [[étant]]"
elseif data.aux == "l'avoir" then
aux_gerund = "[[l]]'[[ayant]]"
elseif data.aux == "l'être" then
aux_gerund = "[[l]]'[[étant]]"
elseif data.aux == "l'avoir ''or'' être" then
aux_gerund = "[[l]]'[[ayant]] ''or'' [[étant]]"
elseif data.aux == "l'y avoir" then
aux_gerund = "[[l]]'[[y]] [[ayant]]"
elseif data.aux == "l'y être" then
aux_gerund = "[[l]]'[[y]] [[étant]]"
elseif data.aux == "l'y avoir ''or'' être" then
aux_gerund = "[[l]]'[[y]] [[ayant]] ''or'' [[étant]]"
elseif data.aux == "les avoir" then
aux_gerund = "[[les]] [[ayant]]"
elseif data.aux == "les être" then
aux_gerund = "[[les]] [[étant]]"
elseif data.aux == "les avoir ''or'' être" then
aux_gerund = "[[les]] [[ayant]] ''or'' [[étant]]"
elseif data.aux == "les y avoir" then
aux_gerund = "[[les]] [[y]] [[ayant]]"
elseif data.aux == "les y être" then
aux_gerund = "[[les]] [[y]] [[étant]]"
elseif data.aux == "les y avoir ''or'' être" then
aux_gerund = "[[les]] [[y]] [[ayant]] ''or'' [[étant]]"
elseif data.aux == "y avoir" then
aux_gerund = "[[y]] [[ayant]]"
elseif data.aux == "y être" then
aux_gerund = "[[y]] [[étant]]"
elseif data.aux == "y avoir ''or'' être" then
aux_gerund = "[[y]] [[ayant]] ''or'' [[étant]]"
elseif data.aux == "y en avoir" then
aux_gerund = "[[y]] [[en]] [[ayant]]"
elseif data.aux == "y en être" then
aux_gerund = "[[y]] [[en]] [[étant]]"
elseif data.aux == "y en avoir ''or'' être" then
aux_gerund = "[[y]] [[en]] [[ayant]] ''or'' [[étant]]"
elseif data.aux == "en avoir" then
aux_gerund = "[[en]] [[ayant]]"
elseif data.aux == "en être" then
aux_gerund = "[[en]] [[étant]]"
elseif data.aux == "en avoir ''or'' être" then
aux_gerund = "[[en] [[ayant]] ''or'' [[étant]]"
elseif data.aux == "être" then
aux_gerund = "[[étant]]"
else
aux_gerund = "[[ayant]] <i>or</i> [[étant]]"
end
local result = {}
local inv = data.forms.pp_nolink
local inv_sub = data.forms.pp_nolink
local inversion_note = ""
local inversion_sub_note = ""
local replacement_note = "<sup>2</sup>"
--Until someone implements a better solution
if inv == "aimé" or inv == "chanté" or inv == "dansé" or inv == "dussé" or inv == "-é" or inv == "estimé" or inv == "eussé" or inv == "fussé" or inv == "mangé" or inv == "opiné" or inv == "parlé" or inv == "pensé" or inv == "pu" or inv == "trouvé" then
inversion_note = "<sup>2</sup>"
inversion_sub_note = "<sup>2</sup>"
replacement_note = "<sup>3</sup>"
if inv == "pu" then
inv = "puis"
inv_sub = "puissé"
inversion_sub_note = "<sup>3</sup>"
replacement_note = "<sup>4</sup>"
end
end
-- Template parameter syntax refers to the corresponding item in the data.forms table:
-- {{{inf_nolink}}} -> data.forms.inf_nolink
if data.notes then table.insert(result, data.notes .. '\n') end
table.insert(result,
[=[
<div class="NavFrame">
<div class="NavHead" align=center>การผันรูปของ ''{{{inf_nolink}}}'' <span style="font-size:90%;">(ดูเพิ่ม [[ภาคผนวก:คำกริยาภาษาฝรั่งเศส]])</span></div>
<div class="NavContent" align=left>
{| class="roa-inflection-table"
|-
! rowspan="2" class="roa-nonfinite-header" | <span title="infinitif">รูปกริยากลาง</span>
! class="roa-nonfinite-header" style="height:3em;" | <small>กาลสามัญ</small>
| {{{inf_nolink}}}
|-
! class="roa-nonfinite-header" style="height:3em;" | <small>กาลประสม</small>
]=])
if data.forms.inf_comp == "" then
table.insert(result, '! colspan="6" | ' ..data.forms.inf_comp.. ' \n')
elseif data.forms.pp_nolink == "—" then
table.insert(result, '! colspan="6" | — \n')
else
table.insert(result, '! colspan="6" class="roa-compound-row" | <i>[[' .. data.aux .. ']]</i> + รูปกริยาขยายอดีตกาล\n')
end
table.insert(result,
[=[
|-
! rowspan="2" class="roa-nonfinite-header" | <span title="participe présent">รูปกริยาขยายปัจจุบันกาล</span> หรือ <span title="">รูปกริยาเป็นนาม</span><sup>1</sup>
! class="roa-nonfinite-header" style="height:3em;" | <small>กาลสามัญ</small>
| {{{ppr}}}
|-
! class="roa-nonfinite-header" style="height:3em;" | <small>กาลประสม</small>
]=])
if data.forms.ger_comp == "" then
table.insert(result, '! colspan="6" class="roa-compound-row" | ' ..data.forms.ger_comp.. '\n')
elseif data.forms.pp_nolink == "—" then
table.insert(result, '! colspan="6" class="roa-compound-row" | — \n')
else
table.insert(result, '! colspan="6" class="roa-compound-row" | <i>' .. aux_gerund .. '</i> + รูปกริยาขยายอดีตกาล \n')
end
table.insert(result,
[=[
|-
! colspan="2" class="roa-nonfinite-header" | <span title="participe passé">รูปกริยาขยายอดีตกาล</span>
| {{{pp}}}
|-
! colspan="2" rowspan="2" class="roa-person-number-header" |
! colspan="3" class="roa-person-number-header" | เอกพจน์
! colspan="3" class="roa-person-number-header" | พหูพจน์
|-
! class="roa-person-number-header" style="width:12.5%;" | บุรุษที่หนึ่ง
! class="roa-person-number-header" style="width:12.5%;" | บุรุษที่สอง
! class="roa-person-number-header" style="width:12.5%;" | บุรุษที่สาม
! class="roa-person-number-header" style="width:12.5%;" | บุรุษที่หนึ่ง
! class="roa-person-number-header" style="width:12.5%;" | บุรุษที่สอง
! class="roa-person-number-header" style="width:12.5%;" | บุรุษที่สาม
|-
! class="roa-indicative-left-rail" colspan="2" | <span title="indicatif">มาลาบอกเล่า</span>
! class="roa-indicative-left-rail" | je (j’)
! class="roa-indicative-left-rail" | tu
! class="roa-indicative-left-rail" | il, elle, on
! class="roa-indicative-left-rail" | nous
! class="roa-indicative-left-rail" | vous
! class="roa-indicative-left-rail" | ils, elles
|-
! rowspan="5" class="roa-indicative-left-rail" | <small>(กาลสามัญ)</small>
! class="roa-indicative-left-rail" style="height:3em;" | <span title="présent">ปัจจุบันกาล</span>
| {{{ind_p_1s}}}]=] .. inversion_note .. [=[
| {{{ind_p_2s}}}
| {{{ind_p_3s}}}
| {{{ind_p_1p}}}
| {{{ind_p_2p}}}
| {{{ind_p_3p}}}
|-
! class="roa-indicative-left-rail" style="height:3em;" | <span title="imparfait">ไม่สมบูรณ์</span>
| {{{ind_i_1s}}}
| {{{ind_i_2s}}}
| {{{ind_i_3s}}}
| {{{ind_i_1p}}}
| {{{ind_i_2p}}}
| {{{ind_i_3p}}}
|-
! class="roa-indicative-left-rail" style="height:3em;" | <span title="passé simple">past historic</span>]=] .. replacement_note .. [=[
| {{{ind_ps_1s}}}
| {{{ind_ps_2s}}}
| {{{ind_ps_3s}}}
| {{{ind_ps_1p}}}
| {{{ind_ps_2p}}}
| {{{ind_ps_3p}}}
|-
! class="roa-indicative-left-rail" style="height:3em;" | <span title="futur simple">อนาคตกาล</span>
| {{{ind_f_1s}}}
| {{{ind_f_2s}}}
| {{{ind_f_3s}}}
| {{{ind_f_1p}}}
| {{{ind_f_2p}}}
| {{{ind_f_3p}}}
|-
! class="roa-indicative-left-rail" style="height:3em;" | <span title="conditionnel présent">มาลาเงื่อนไข</span>
| {{{cond_p_1s}}}
| {{{cond_p_2s}}}
| {{{cond_p_3s}}}
| {{{cond_p_1p}}}
| {{{cond_p_2p}}}
| {{{cond_p_3p}}}
|-
! rowspan="5" class="roa-indicative-left-rail" | <small>(กาลประสม)</small>
! class="roa-indicative-left-rail" style="height:3em;" | <span title="passé composé">ปัจจุบันกาลสมบูรณ์</span>
]=])
if data.forms.pp_nolink == "—" then
table.insert(result, '! colspan="6" class="roa-compound-row" | — \n')
else
table.insert(result, '! colspan="6" class="roa-compound-row" | present indicative of <i>[[' .. data.aux .. ']]</i> + รูปกริยาขยายอดีตกาล\n')
end
table.insert(result, '|-\n! class="roa-indicative-left-rail" style="height:3em;" | <span title="plus-que-parfait">pluperfect</span>\n')
if data.forms.pp_nolink == "—" then
table.insert(result, '! colspan="6" class="roa-compound-row" | — \n')
else
table.insert(result, '! colspan="6" class="roa-compound-row" | imperfect indicative of <i>[[' .. data.aux .. ']]</i> + รูปกริยาขยายอดีตกาล\n')
end
table.insert(result, '|-\n! class="roa-indicative-left-rail" style="height:3em;" | <span title="passé antérieur">past anterior</span>' .. replacement_note .. '\n')
if data.forms.pp_nolink == "—" then
table.insert(result, '! colspan="6" class="roa-compound-row" | — \n')
else
table.insert(result, '! colspan="6" class="roa-compound-row" | past historic of <i>[[' .. data.aux .. ']]</i> + รูปกริยาขยายอดีตกาล\n')
end
table.insert(result, '|-\n! class="roa-indicative-left-rail" style="height:3em;" | <span title="futur antérieur">future perfect</span>\n')
if data.forms.pp_nolink == "—" then
table.insert(result, '! colspan="6" class="roa-compound-row" | — \n')
else
table.insert(result, '! colspan="6" class="roa-compound-row" | future of <i>[[' .. data.aux .. ']]</i> + รูปกริยาขยายอดีตกาล\n')
end
table.insert(result, '|-\n! class="roa-indicative-left-rail" style="height:3em;" | <span title="conditionnel passé">conditional perfect</span>\n')
if data.forms.pp_nolink == "—" then
table.insert(result, '! colspan="6" class="roa-compound-row" | — \n')
else
table.insert(result, '! colspan="6" class="roa-compound-row" | conditional of <i>[[' .. data.aux .. ']]</i> + รูปกริยาขยายอดีตกาล\n')
end
table.insert(result,
[=[
|-
! class="roa-subjunctive-left-rail" colspan="2" | <span title="subjonctif">มาลาสมมุติ</span>
! class="roa-subjunctive-left-rail" | que je (j’)
! class="roa-subjunctive-left-rail" | que tu
! class="roa-subjunctive-left-rail" | qu’il, qu’elle
! class="roa-subjunctive-left-rail" | que nous
! class="roa-subjunctive-left-rail" | que vous
! class="roa-subjunctive-left-rail" | qu’ils, qu’elles
|-
! rowspan="2" class="roa-subjunctive-left-rail" | <small>(กาลสามัญ)</small>
! class="roa-subjunctive-left-rail" style="height:3em;" | <span title="subjonctif présent">ปัจจุบันกาล</span>
| {{{sub_p_1s}}}]=] .. inversion_sub_note .. [=[
| {{{sub_p_2s}}}
| {{{sub_p_3s}}}
| {{{sub_p_1p}}}
| {{{sub_p_2p}}}
| {{{sub_p_3p}}}
|-
! class="roa-subjunctive-left-rail" style="height:3em;" rowspan="1" | <span title="subjonctif imparfait">ไม่สมบูรณ์</span>]=] .. replacement_note .. [=[
| {{{sub_pa_1s}}}
| {{{sub_pa_2s}}}
| {{{sub_pa_3s}}}
| {{{sub_pa_1p}}}
| {{{sub_pa_2p}}}
| {{{sub_pa_3p}}}
|-
! rowspan="2" class="roa-subjunctive-left-rail" | <small>(กาลประสม)</small>
! class="roa-subjunctive-left-rail" style="height:3em;" | <span title="subjonctif passé">อดีตกาล</span>
]=])
if data.forms.pp_nolink == "—" then
table.insert(result, '! colspan="6" class="roa-compound-row" | — \n')
else
table.insert(result, '! colspan="6" class="roa-compound-row" | present subjunctive of <i>[[' .. data.aux .. ']]</i> + รูปกริยาขยายอดีตกาล\n')
end
table.insert(result, '|-\n! class="roa-subjunctive-left-rail" style="height:3em;" | <span title="subjonctif plus-que-parfait">pluperfect</span>' .. replacement_note .. '\n')
if data.forms.pp_nolink == "—" then
table.insert(result, '! colspan="6" class="roa-compound-row" | — \n')
else
table.insert(result, '! colspan="6" class="roa-compound-row" | imperfect subjunctive of <i>[[' .. data.aux .. ']]</i> + รูปกริยาขยายอดีตกาล\n')
end
table.insert(result,
[=[
|-
! colspan="2" class="roa-imperative-left-rail" | <span title="impératif">มาลาสั่ง</span>
! class="roa-imperative-left-rail" | –
! class="roa-imperative-left-rail" | <s>tu</s>
! class="roa-imperative-left-rail" | –
! class="roa-imperative-left-rail" | <s>nous</s>
! class="roa-imperative-left-rail" | <s>vous</s>
! class="roa-imperative-left-rail" | –
|-
! class="roa-imperative-left-rail" style="height:3em;" colspan="2" | <span title="">กาลสามัญ</span>
| —
| {{{imp_p_2s}}}
| —
| {{{imp_p_1p}}}
| {{{imp_p_2p}}}
| —
|-
! class="roa-imperative-left-rail" style="height:3em;" colspan="2" | <span title="">กาลประสม</span>
| —
]=])
if data.forms.pp_nolink == "—" then
table.insert(result, '! class="roa-compound-row" | — \n')
else
table.insert(result, '! class="roa-compound-row" | simple imperative of <i>[[' .. data.aux .. ']]</i> + รูปกริยาขยายอดีตกาล\n')
end
table.insert(result,
[=[
| —
]=])
if data.forms.pp_nolink == "—" then
table.insert(result, '! class="roa-compound-row" | — \n')
else
table.insert(result, '! class="roa-compound-row" | simple imperative of <i>[[' .. data.aux .. ']]</i> + รูปกริยาขยายอดีตกาล\n')
end
table.insert(result,
[=[
]=])
if data.forms.pp_nolink == "—" then
table.insert(result, '! class="roa-compound-row" | — \n')
else
table.insert(result, '! class="roa-compound-row" | simple imperative of <i>[[' .. data.aux .. ']]</i> + รูปกริยาขยายอดีตกาล\n')
end
table.insert(result,
[=[
| —
|-
| colspan="8" |<sup>1</sup> The French gerund is usable only with the preposition <i>[[en]]</i>.
|-
]=])
if inversion_note ~= "" then
table.insert(result,
[=[
| colspan="8" |<sup>2</sup> <i>[[]=] .. inv .. [=[]]</i> when inverted.
|-
]=])
end
if inv ~= inv_sub then
table.insert(result,
[=[
| colspan="8" |<sup>3</sup> <i>[[]=] .. inv_sub .. [=[]]</i> when inverted.
|-
]=])
end
table.insert(result,
[=[
| colspan="8" |]=] .. replacement_note .. [=[ In less formal writing or speech, these tenses may be found to have been replaced in the following way:
: past historic → present perfect
: past anterior → pluperfect
: imperfect subjunctive → present subjunctive
: pluperfect subjunctive → past subjunctive
(Christopher Kendris [1995], <i>Master the Basics: French</i>, pp. [https://books.google.fr/books?id=g4G4jg5GWMwC&pg=PA77 77], [https://books.google.fr/books?id=g4G4jg5GWMwC&pg=PA78 78], [https://books.google.fr/books?id=g4G4jg5GWMwC&pg=PA79 79], [https://books.google.fr/books?id=g4G4jg5GWMwC&pg=PA81 81]).
|}
</div>
</div>
]=])
--[[
setmetatable(data.forms, { __index =
function(t, k)
mw.log('No key for ' .. k)
end
})
--]]
return require("Module:TemplateStyles")("Module:roa-verb/style.css") .. string.gsub(table.concat(result), "{{{([^}]+)}}}",
function(code)
return data.forms[code]
end)
end
return export
l3fe18uzs74vbj9wixckdxch50iop89
5729454
5729453
2026-07-20T10:11:25Z
Octahedron80
267
5729454
Scribunto
text/plain
local export = {}
local m_links = require("Module:links")
local lang = require("Module:languages").getByCode("fr")
-- defined below
local format_links, categorize
--entry point
function export.frconj(frame)
--are we directly embedding through Template:fr-conj or calling the module?
local args = {}
if frame.args["direct"] == "yes" then
args = frame:getParent().args
else
args = frame.args
end
--create the forms
local data = {forms = {}, categories = {}, en = false, y = false, yen = false, l = false, le = false, la = false, les = false, l_en = false, l_y = false, l_yen = false, lesen = false, lesy = false, lesyen = false, refl = false, reflen = false, refll = false, reflle = false, reflla = false, reflles = false, reflly = false, refllesy = false, refly = false, reflyen = false, aux = ""}
data.aux = args["aux"]
if not (data.aux == "avoir" or data.aux == "être") then
data.aux = "avoir ''or'' être"
end
if (args["inf"] == nil or args["inf"] == "" or args["inf"] == mw.loadData("Module:headword/data").pagename) then
data.forms.inf_nolink = mw.loadData("Module:headword/data").pagename
else
data.forms.inf_nolink = format_links(args["inf"])
end
data.forms.pp = format_links(args["pp"])
data.forms.ppr = format_links(args["ppr"])
if (args["pp"] == "—") then
data.forms.pp_nolink = "—"
elseif (args["pp"] == nil or mw.loadData("Module:headword/data").pagename) then
data.forms.pp_nolink = mw.loadData("Module:headword/data").pagename
else
data.forms.pp_nolink = format_links(args["pp"])
end
if (args["ppr"] == "—") then
data.forms.ppr_nolink = "—"
elseif (args["ppr"] == nil or mw.loadData("Module:headword/data").pagename) then
data.forms.ppr_nolink = mw.loadData("Module:headword/data").pagename
else
data.forms.ppr_nolink = format_links(args["ppr"])
end
local form_params = {
"ind.p.1s", "ind.p.2s", "ind.p.3s", "ind.p.1p", "ind.p.2p", "ind.p.3p",
"ind.i.1s", "ind.i.2s", "ind.i.3s", "ind.i.1p", "ind.i.2p", "ind.i.3p",
"ind.ps.1s", "ind.ps.2s", "ind.ps.3s", "ind.ps.1p", "ind.ps.2p", "ind.ps.3p",
"ind.f.1s", "ind.f.2s", "ind.f.3s", "ind.f.1p", "ind.f.2p", "ind.f.3p",
"cond.p.1s", "cond.p.2s", "cond.p.3s", "cond.p.1p", "cond.p.2p", "cond.p.3p",
"sub.p.1s", "sub.p.2s", "sub.p.3s", "sub.p.1p", "sub.p.2p", "sub.p.3p",
"sub.pa.1s", "sub.pa.2s", "sub.pa.3s", "sub.pa.1p", "sub.pa.2p", "sub.pa.3p",
"imp.p.2s", "imp.p.1p", "imp.p.2p",
}
for _, form in ipairs(form_params) do
local key = form:gsub("%.", "_")
data.forms[key] = format_links(args[form])
local alt = form .. ".alt"
local alt_arg = args[alt]
if not (alt_arg == nil or alt_arg == "" or alt_arg == "—") then
data.forms[key] = data.forms[key] .. " <i>or</i> " .. format_links(alt_arg)
end
end
--a few ugly hacks
data.forms.ger = args["ger.override"]
data.forms.inf_comp = args["inf.override"]
data.forms.ger_comp = args["ger.comp.override"]
--finish up
if mw.title.getCurrentTitle().nsText == "" then
return export.make_table(data) .. categorize(args,data)
else
return export.make_table(data)
end
end
function format_links(link)
if (link == nil or link == "" or link == "—") then
return "—"
else
return m_links.full_link({lang = lang, term = link})
end
end
function categorize(args, data)
output = ""
if args.group == "1" or args.group == "1st" or args.group == "first" then
output = output .. "[[Category:คำกริยากลุ่ม 1 ภาษาฝรั่งเศส]]"
elseif args.group == "2" or args.group == "2st" or args.group == "second" then
output = output .. "[[Category:คำกริยากลุ่ม 2 ภาษาฝรั่งเศส]]"
elseif args.group == "3" or args.group == "3rd" or args.group == "third" then
output = output .. "[[Category:คำกริยากลุ่ม 3 ภาษาฝรั่งเศส]]"
end
if data.aux == "être" then
output = output .. "[[Category:คำกริยาภาษาฝรั่งเศสที่ใช้คำกริยาช่วย être]]"
elseif data.aux == "avoir or être" then
output = output .. "[[Category:คำกริยาภาษาฝรั่งเศสที่ใช้คำกริยาช่วย avoir หรือ être]]"
end
return output
end
--split from Module:fr-verb/core
function export.make_table(data)
local aux_gerund = ""
if data.aux == "avoir" then
aux_gerund = "[[ayant]]"
elseif data.aux == "[[s']][[être]]" then
aux_gerund = "[[s']][[étant]]"
elseif data.aux == "s'en être" then
aux_gerund = "[[s']][[en]] [[étant]]"
elseif data.aux == "s'y être" then
aux_gerund = "[[s']][[y]] [[étant]]"
elseif data.aux == "s'y en être" then
aux_gerund = "[[s']][[y]] [[en]] [[étant]]"
elseif data.aux == "se l'être" then
aux_gerund = "[[se]] [[l']][[étant]]"
elseif data.aux == "se les être" then
aux_gerund = "[[se]] [[les]] [[étant]]"
elseif data.aux == "l'en avoir" then
aux_gerund = "[[l']][[en]] [[ayant]]"
elseif data.aux == "l'y en avoir" then
aux_gerund = "[[l']][[y]] [[en]] [[ayant]]"
elseif data.aux == "les en avoir" then
aux_gerund = "[[les]] [[en]] [[ayant]]"
elseif data.aux == "les y en avoir" then
aux_gerund = "[[les]] [[y]] [[en]] [[ayant]]"
elseif data.aux == "se les y être" then
aux_gerund = "[[se]] [[les]] [[y]] [[étant]]"
elseif data.aux == "se l'y être" then
aux_gerund = "[[se]] [[l']][[y]] [[étant]]"
elseif data.aux == "l'avoir" then
aux_gerund = "[[l]]'[[ayant]]"
elseif data.aux == "l'être" then
aux_gerund = "[[l]]'[[étant]]"
elseif data.aux == "l'avoir ''or'' être" then
aux_gerund = "[[l]]'[[ayant]] ''or'' [[étant]]"
elseif data.aux == "l'y avoir" then
aux_gerund = "[[l]]'[[y]] [[ayant]]"
elseif data.aux == "l'y être" then
aux_gerund = "[[l]]'[[y]] [[étant]]"
elseif data.aux == "l'y avoir ''or'' être" then
aux_gerund = "[[l]]'[[y]] [[ayant]] ''or'' [[étant]]"
elseif data.aux == "les avoir" then
aux_gerund = "[[les]] [[ayant]]"
elseif data.aux == "les être" then
aux_gerund = "[[les]] [[étant]]"
elseif data.aux == "les avoir ''or'' être" then
aux_gerund = "[[les]] [[ayant]] ''or'' [[étant]]"
elseif data.aux == "les y avoir" then
aux_gerund = "[[les]] [[y]] [[ayant]]"
elseif data.aux == "les y être" then
aux_gerund = "[[les]] [[y]] [[étant]]"
elseif data.aux == "les y avoir ''or'' être" then
aux_gerund = "[[les]] [[y]] [[ayant]] ''or'' [[étant]]"
elseif data.aux == "y avoir" then
aux_gerund = "[[y]] [[ayant]]"
elseif data.aux == "y être" then
aux_gerund = "[[y]] [[étant]]"
elseif data.aux == "y avoir ''or'' être" then
aux_gerund = "[[y]] [[ayant]] ''or'' [[étant]]"
elseif data.aux == "y en avoir" then
aux_gerund = "[[y]] [[en]] [[ayant]]"
elseif data.aux == "y en être" then
aux_gerund = "[[y]] [[en]] [[étant]]"
elseif data.aux == "y en avoir ''or'' être" then
aux_gerund = "[[y]] [[en]] [[ayant]] ''or'' [[étant]]"
elseif data.aux == "en avoir" then
aux_gerund = "[[en]] [[ayant]]"
elseif data.aux == "en être" then
aux_gerund = "[[en]] [[étant]]"
elseif data.aux == "en avoir ''or'' être" then
aux_gerund = "[[en] [[ayant]] ''or'' [[étant]]"
elseif data.aux == "être" then
aux_gerund = "[[étant]]"
else
aux_gerund = "[[ayant]] <i>or</i> [[étant]]"
end
local result = {}
local inv = data.forms.pp_nolink
local inv_sub = data.forms.pp_nolink
local inversion_note = ""
local inversion_sub_note = ""
local replacement_note = "<sup>2</sup>"
--Until someone implements a better solution
if inv == "aimé" or inv == "chanté" or inv == "dansé" or inv == "dussé" or inv == "-é" or inv == "estimé" or inv == "eussé" or inv == "fussé" or inv == "mangé" or inv == "opiné" or inv == "parlé" or inv == "pensé" or inv == "pu" or inv == "trouvé" then
inversion_note = "<sup>2</sup>"
inversion_sub_note = "<sup>2</sup>"
replacement_note = "<sup>3</sup>"
if inv == "pu" then
inv = "puis"
inv_sub = "puissé"
inversion_sub_note = "<sup>3</sup>"
replacement_note = "<sup>4</sup>"
end
end
-- Template parameter syntax refers to the corresponding item in the data.forms table:
-- {{{inf_nolink}}} -> data.forms.inf_nolink
if data.notes then table.insert(result, data.notes .. '\n') end
table.insert(result,
[=[
<div class="NavFrame">
<div class="NavHead" align=center>การผันรูปของ ''{{{inf_nolink}}}'' <span style="font-size:90%;">(ดูเพิ่ม [[ภาคผนวก:คำกริยาภาษาฝรั่งเศส]])</span></div>
<div class="NavContent" align=left>
{| class="roa-inflection-table"
|-
! rowspan="2" class="roa-nonfinite-header" | <span title="infinitif">รูปกริยากลาง</span>
! class="roa-nonfinite-header" style="height:3em;" | <small>กาลสามัญ</small>
| {{{inf_nolink}}}
|-
! class="roa-nonfinite-header" style="height:3em;" | <small>กาลประสม</small>
]=])
if data.forms.inf_comp == "" then
table.insert(result, '! colspan="6" | ' ..data.forms.inf_comp.. ' \n')
elseif data.forms.pp_nolink == "—" then
table.insert(result, '! colspan="6" | — \n')
else
table.insert(result, '! colspan="6" class="roa-compound-row" | <i>[[' .. data.aux .. ']]</i> + รูปกริยาขยายอดีตกาล\n')
end
table.insert(result,
[=[
|-
! rowspan="2" class="roa-nonfinite-header" | <span title="participe présent">รูปกริยาขยายปัจจุบันกาล</span> หรือ <span title="">รูปกริยาเป็นนาม</span><sup>1</sup>
! class="roa-nonfinite-header" style="height:3em;" | <small>กาลสามัญ</small>
| {{{ppr}}}
|-
! class="roa-nonfinite-header" style="height:3em;" | <small>กาลประสม</small>
]=])
if data.forms.ger_comp == "" then
table.insert(result, '! colspan="6" class="roa-compound-row" | ' ..data.forms.ger_comp.. '\n')
elseif data.forms.pp_nolink == "—" then
table.insert(result, '! colspan="6" class="roa-compound-row" | — \n')
else
table.insert(result, '! colspan="6" class="roa-compound-row" | <i>' .. aux_gerund .. '</i> + รูปกริยาขยายอดีตกาล \n')
end
table.insert(result,
[=[
|-
! colspan="2" class="roa-nonfinite-header" | <span title="participe passé">รูปกริยาขยายอดีตกาล</span>
| {{{pp}}}
|-
! colspan="2" rowspan="2" class="roa-person-number-header" |
! colspan="3" class="roa-person-number-header" | เอกพจน์
! colspan="3" class="roa-person-number-header" | พหูพจน์
|-
! class="roa-person-number-header" style="width:12.5%;" | บุรุษที่หนึ่ง
! class="roa-person-number-header" style="width:12.5%;" | บุรุษที่สอง
! class="roa-person-number-header" style="width:12.5%;" | บุรุษที่สาม
! class="roa-person-number-header" style="width:12.5%;" | บุรุษที่หนึ่ง
! class="roa-person-number-header" style="width:12.5%;" | บุรุษที่สอง
! class="roa-person-number-header" style="width:12.5%;" | บุรุษที่สาม
|-
! class="roa-indicative-left-rail" colspan="2" | <span title="indicatif">มาลาบอกเล่า</span>
! class="roa-indicative-left-rail" | je (j’)
! class="roa-indicative-left-rail" | tu
! class="roa-indicative-left-rail" | il, elle, on
! class="roa-indicative-left-rail" | nous
! class="roa-indicative-left-rail" | vous
! class="roa-indicative-left-rail" | ils, elles
|-
! rowspan="5" class="roa-indicative-left-rail" | <small>(กาลสามัญ)</small>
! class="roa-indicative-left-rail" style="height:3em;" | <span title="présent">ปัจจุบันกาล</span>
| {{{ind_p_1s}}}]=] .. inversion_note .. [=[
| {{{ind_p_2s}}}
| {{{ind_p_3s}}}
| {{{ind_p_1p}}}
| {{{ind_p_2p}}}
| {{{ind_p_3p}}}
|-
! class="roa-indicative-left-rail" style="height:3em;" | <span title="imparfait">ไม่สมบูรณ์</span>
| {{{ind_i_1s}}}
| {{{ind_i_2s}}}
| {{{ind_i_3s}}}
| {{{ind_i_1p}}}
| {{{ind_i_2p}}}
| {{{ind_i_3p}}}
|-
! class="roa-indicative-left-rail" style="height:3em;" | <span title="passé simple">past historic</span>]=] .. replacement_note .. [=[
| {{{ind_ps_1s}}}
| {{{ind_ps_2s}}}
| {{{ind_ps_3s}}}
| {{{ind_ps_1p}}}
| {{{ind_ps_2p}}}
| {{{ind_ps_3p}}}
|-
! class="roa-indicative-left-rail" style="height:3em;" | <span title="futur simple">อนาคตกาล</span>
| {{{ind_f_1s}}}
| {{{ind_f_2s}}}
| {{{ind_f_3s}}}
| {{{ind_f_1p}}}
| {{{ind_f_2p}}}
| {{{ind_f_3p}}}
|-
! class="roa-indicative-left-rail" style="height:3em;" | <span title="conditionnel présent">มาลาเงื่อนไข</span>
| {{{cond_p_1s}}}
| {{{cond_p_2s}}}
| {{{cond_p_3s}}}
| {{{cond_p_1p}}}
| {{{cond_p_2p}}}
| {{{cond_p_3p}}}
|-
! rowspan="5" class="roa-indicative-left-rail" | <small>(กาลประสม)</small>
! class="roa-indicative-left-rail" style="height:3em;" | <span title="passé composé">ปัจจุบันกาลสมบูรณ์</span>
]=])
if data.forms.pp_nolink == "—" then
table.insert(result, '! colspan="6" class="roa-compound-row" | — \n')
else
table.insert(result, '! colspan="6" class="roa-compound-row" | ใช้รูปปัจจุบันกาลมาลาบอกเล่าของ <i>[[' .. data.aux .. ']]</i> + รูปกริยาขยายอดีตกาล\n')
end
table.insert(result, '|-\n! class="roa-indicative-left-rail" style="height:3em;" | <span title="plus-que-parfait">pluperfect</span>\n')
if data.forms.pp_nolink == "—" then
table.insert(result, '! colspan="6" class="roa-compound-row" | — \n')
else
table.insert(result, '! colspan="6" class="roa-compound-row" | ใช้รูปไม่สมบูรณ์มาลาบอกเล่าของ <i>[[' .. data.aux .. ']]</i> + รูปกริยาขยายอดีตกาล\n')
end
table.insert(result, '|-\n! class="roa-indicative-left-rail" style="height:3em;" | <span title="passé antérieur">past anterior</span>' .. replacement_note .. '\n')
if data.forms.pp_nolink == "—" then
table.insert(result, '! colspan="6" class="roa-compound-row" | — \n')
else
table.insert(result, '! colspan="6" class="roa-compound-row" | ใช้รูปpast historicของ <i>[[' .. data.aux .. ']]</i> + รูปกริยาขยายอดีตกาล\n')
end
table.insert(result, '|-\n! class="roa-indicative-left-rail" style="height:3em;" | <span title="futur antérieur">future perfect</span>\n')
if data.forms.pp_nolink == "—" then
table.insert(result, '! colspan="6" class="roa-compound-row" | — \n')
else
table.insert(result, '! colspan="6" class="roa-compound-row" | ใช้รูปอนาคตกาลของ <i>[[' .. data.aux .. ']]</i> + รูปกริยาขยายอดีตกาล\n')
end
table.insert(result, '|-\n! class="roa-indicative-left-rail" style="height:3em;" | <span title="conditionnel passé">conditional perfect</span>\n')
if data.forms.pp_nolink == "—" then
table.insert(result, '! colspan="6" class="roa-compound-row" | — \n')
else
table.insert(result, '! colspan="6" class="roa-compound-row" | ใช้รูปมาลาเงื่อนไขของ <i>[[' .. data.aux .. ']]</i> + รูปกริยาขยายอดีตกาล\n')
end
table.insert(result,
[=[
|-
! class="roa-subjunctive-left-rail" colspan="2" | <span title="subjonctif">มาลาสมมุติ</span>
! class="roa-subjunctive-left-rail" | que je (j’)
! class="roa-subjunctive-left-rail" | que tu
! class="roa-subjunctive-left-rail" | qu’il, qu’elle
! class="roa-subjunctive-left-rail" | que nous
! class="roa-subjunctive-left-rail" | que vous
! class="roa-subjunctive-left-rail" | qu’ils, qu’elles
|-
! rowspan="2" class="roa-subjunctive-left-rail" | <small>(กาลสามัญ)</small>
! class="roa-subjunctive-left-rail" style="height:3em;" | <span title="subjonctif présent">ปัจจุบันกาล</span>
| {{{sub_p_1s}}}]=] .. inversion_sub_note .. [=[
| {{{sub_p_2s}}}
| {{{sub_p_3s}}}
| {{{sub_p_1p}}}
| {{{sub_p_2p}}}
| {{{sub_p_3p}}}
|-
! class="roa-subjunctive-left-rail" style="height:3em;" rowspan="1" | <span title="subjonctif imparfait">ไม่สมบูรณ์</span>]=] .. replacement_note .. [=[
| {{{sub_pa_1s}}}
| {{{sub_pa_2s}}}
| {{{sub_pa_3s}}}
| {{{sub_pa_1p}}}
| {{{sub_pa_2p}}}
| {{{sub_pa_3p}}}
|-
! rowspan="2" class="roa-subjunctive-left-rail" | <small>(กาลประสม)</small>
! class="roa-subjunctive-left-rail" style="height:3em;" | <span title="subjonctif passé">อดีตกาล</span>
]=])
if data.forms.pp_nolink == "—" then
table.insert(result, '! colspan="6" class="roa-compound-row" | — \n')
else
table.insert(result, '! colspan="6" class="roa-compound-row" | ใช้รูปปัจจุบันกาลมาลาสมมุติของ <i>[[' .. data.aux .. ']]</i> + รูปกริยาขยายอดีตกาล\n')
end
table.insert(result, '|-\n! class="roa-subjunctive-left-rail" style="height:3em;" | <span title="subjonctif plus-que-parfait">pluperfect</span>' .. replacement_note .. '\n')
if data.forms.pp_nolink == "—" then
table.insert(result, '! colspan="6" class="roa-compound-row" | — \n')
else
table.insert(result, '! colspan="6" class="roa-compound-row" | ใช้รูปไม่สมบูรณ์มาลาสมมุติของ <i>[[' .. data.aux .. ']]</i> + รูปกริยาขยายอดีตกาล\n')
end
table.insert(result,
[=[
|-
! colspan="2" class="roa-imperative-left-rail" | <span title="impératif">มาลาสั่ง</span>
! class="roa-imperative-left-rail" | –
! class="roa-imperative-left-rail" | <s>tu</s>
! class="roa-imperative-left-rail" | –
! class="roa-imperative-left-rail" | <s>nous</s>
! class="roa-imperative-left-rail" | <s>vous</s>
! class="roa-imperative-left-rail" | –
|-
! class="roa-imperative-left-rail" style="height:3em;" colspan="2" | <span title="">กาลสามัญ</span>
| —
| {{{imp_p_2s}}}
| —
| {{{imp_p_1p}}}
| {{{imp_p_2p}}}
| —
|-
! class="roa-imperative-left-rail" style="height:3em;" colspan="2" | <span title="">กาลประสม</span>
| —
]=])
if data.forms.pp_nolink == "—" then
table.insert(result, '! class="roa-compound-row" | — \n')
else
table.insert(result, '! class="roa-compound-row" | ใช้รูปกาลสามัญมาลาสั่งของ <i>[[' .. data.aux .. ']]</i> + รูปกริยาขยายอดีตกาล\n')
end
table.insert(result,
[=[
| —
]=])
if data.forms.pp_nolink == "—" then
table.insert(result, '! class="roa-compound-row" | — \n')
else
table.insert(result, '! class="roa-compound-row" | ใช้รูปกาลสามัญมาลาสั่งของ <i>[[' .. data.aux .. ']]</i> + รูปกริยาขยายอดีตกาล\n')
end
table.insert(result,
[=[
]=])
if data.forms.pp_nolink == "—" then
table.insert(result, '! class="roa-compound-row" | — \n')
else
table.insert(result, '! class="roa-compound-row" | ใช้รูปกาลสามัญมาลาสั่งของ <i>[[' .. data.aux .. ']]</i> + รูปกริยาขยายอดีตกาล\n')
end
table.insert(result,
[=[
| —
|-
| colspan="8" |<sup>1</sup> The French gerund is usable only with the preposition <i>[[en]]</i>.
|-
]=])
if inversion_note ~= "" then
table.insert(result,
[=[
| colspan="8" |<sup>2</sup> <i>[[]=] .. inv .. [=[]]</i> when inverted.
|-
]=])
end
if inv ~= inv_sub then
table.insert(result,
[=[
| colspan="8" |<sup>3</sup> <i>[[]=] .. inv_sub .. [=[]]</i> when inverted.
|-
]=])
end
table.insert(result,
[=[
| colspan="8" |]=] .. replacement_note .. [=[ In less formal writing or speech, these tenses may be found to have been replaced in the following way:
: past historic → present perfect
: past anterior → pluperfect
: imperfect subjunctive → present subjunctive
: pluperfect subjunctive → past subjunctive
(Christopher Kendris [1995], <i>Master the Basics: French</i>, pp. [https://books.google.fr/books?id=g4G4jg5GWMwC&pg=PA77 77], [https://books.google.fr/books?id=g4G4jg5GWMwC&pg=PA78 78], [https://books.google.fr/books?id=g4G4jg5GWMwC&pg=PA79 79], [https://books.google.fr/books?id=g4G4jg5GWMwC&pg=PA81 81]).
|}
</div>
</div>
]=])
--[[
setmetatable(data.forms, { __index =
function(t, k)
mw.log('No key for ' .. k)
end
})
--]]
return require("Module:TemplateStyles")("Module:roa-verb/style.css") .. string.gsub(table.concat(result), "{{{([^}]+)}}}",
function(code)
return data.forms[code]
end)
end
return export
6m3dlviyv8v7z4w5b45zplos2t72w9g
5729455
5729454
2026-07-20T10:13:24Z
Octahedron80
267
5729455
Scribunto
text/plain
local export = {}
local m_links = require("Module:links")
local lang = require("Module:languages").getByCode("fr")
-- defined below
local format_links, categorize
--entry point
function export.frconj(frame)
--are we directly embedding through Template:fr-conj or calling the module?
local args = {}
if frame.args["direct"] == "yes" then
args = frame:getParent().args
else
args = frame.args
end
--create the forms
local data = {forms = {}, categories = {}, en = false, y = false, yen = false, l = false, le = false, la = false, les = false, l_en = false, l_y = false, l_yen = false, lesen = false, lesy = false, lesyen = false, refl = false, reflen = false, refll = false, reflle = false, reflla = false, reflles = false, reflly = false, refllesy = false, refly = false, reflyen = false, aux = ""}
data.aux = args["aux"]
if not (data.aux == "avoir" or data.aux == "être") then
data.aux = "avoir ''or'' être"
end
if (args["inf"] == nil or args["inf"] == "" or args["inf"] == mw.loadData("Module:headword/data").pagename) then
data.forms.inf_nolink = mw.loadData("Module:headword/data").pagename
else
data.forms.inf_nolink = format_links(args["inf"])
end
data.forms.pp = format_links(args["pp"])
data.forms.ppr = format_links(args["ppr"])
if (args["pp"] == "—") then
data.forms.pp_nolink = "—"
elseif (args["pp"] == nil or mw.loadData("Module:headword/data").pagename) then
data.forms.pp_nolink = mw.loadData("Module:headword/data").pagename
else
data.forms.pp_nolink = format_links(args["pp"])
end
if (args["ppr"] == "—") then
data.forms.ppr_nolink = "—"
elseif (args["ppr"] == nil or mw.loadData("Module:headword/data").pagename) then
data.forms.ppr_nolink = mw.loadData("Module:headword/data").pagename
else
data.forms.ppr_nolink = format_links(args["ppr"])
end
local form_params = {
"ind.p.1s", "ind.p.2s", "ind.p.3s", "ind.p.1p", "ind.p.2p", "ind.p.3p",
"ind.i.1s", "ind.i.2s", "ind.i.3s", "ind.i.1p", "ind.i.2p", "ind.i.3p",
"ind.ps.1s", "ind.ps.2s", "ind.ps.3s", "ind.ps.1p", "ind.ps.2p", "ind.ps.3p",
"ind.f.1s", "ind.f.2s", "ind.f.3s", "ind.f.1p", "ind.f.2p", "ind.f.3p",
"cond.p.1s", "cond.p.2s", "cond.p.3s", "cond.p.1p", "cond.p.2p", "cond.p.3p",
"sub.p.1s", "sub.p.2s", "sub.p.3s", "sub.p.1p", "sub.p.2p", "sub.p.3p",
"sub.pa.1s", "sub.pa.2s", "sub.pa.3s", "sub.pa.1p", "sub.pa.2p", "sub.pa.3p",
"imp.p.2s", "imp.p.1p", "imp.p.2p",
}
for _, form in ipairs(form_params) do
local key = form:gsub("%.", "_")
data.forms[key] = format_links(args[form])
local alt = form .. ".alt"
local alt_arg = args[alt]
if not (alt_arg == nil or alt_arg == "" or alt_arg == "—") then
data.forms[key] = data.forms[key] .. " <i>or</i> " .. format_links(alt_arg)
end
end
--a few ugly hacks
data.forms.ger = args["ger.override"]
data.forms.inf_comp = args["inf.override"]
data.forms.ger_comp = args["ger.comp.override"]
--finish up
if mw.title.getCurrentTitle().nsText == "" then
return export.make_table(data) .. categorize(args,data)
else
return export.make_table(data)
end
end
function format_links(link)
if (link == nil or link == "" or link == "—") then
return "—"
else
return m_links.full_link({lang = lang, term = link})
end
end
function categorize(args, data)
output = ""
if args.group == "1" or args.group == "1st" or args.group == "first" then
output = output .. "[[Category:คำกริยากลุ่ม 1 ภาษาฝรั่งเศส]]"
elseif args.group == "2" or args.group == "2st" or args.group == "second" then
output = output .. "[[Category:คำกริยากลุ่ม 2 ภาษาฝรั่งเศส]]"
elseif args.group == "3" or args.group == "3rd" or args.group == "third" then
output = output .. "[[Category:คำกริยากลุ่ม 3 ภาษาฝรั่งเศส]]"
end
if data.aux == "être" then
output = output .. "[[Category:คำกริยาภาษาฝรั่งเศสที่ใช้คำกริยาช่วย être]]"
elseif data.aux == "avoir or être" then
output = output .. "[[Category:คำกริยาภาษาฝรั่งเศสที่ใช้คำกริยาช่วย avoir หรือ être]]"
end
return output
end
--split from Module:fr-verb/core
function export.make_table(data)
local aux_gerund = ""
if data.aux == "avoir" then
aux_gerund = "[[ayant]]"
elseif data.aux == "[[s']][[être]]" then
aux_gerund = "[[s']][[étant]]"
elseif data.aux == "s'en être" then
aux_gerund = "[[s']][[en]] [[étant]]"
elseif data.aux == "s'y être" then
aux_gerund = "[[s']][[y]] [[étant]]"
elseif data.aux == "s'y en être" then
aux_gerund = "[[s']][[y]] [[en]] [[étant]]"
elseif data.aux == "se l'être" then
aux_gerund = "[[se]] [[l']][[étant]]"
elseif data.aux == "se les être" then
aux_gerund = "[[se]] [[les]] [[étant]]"
elseif data.aux == "l'en avoir" then
aux_gerund = "[[l']][[en]] [[ayant]]"
elseif data.aux == "l'y en avoir" then
aux_gerund = "[[l']][[y]] [[en]] [[ayant]]"
elseif data.aux == "les en avoir" then
aux_gerund = "[[les]] [[en]] [[ayant]]"
elseif data.aux == "les y en avoir" then
aux_gerund = "[[les]] [[y]] [[en]] [[ayant]]"
elseif data.aux == "se les y être" then
aux_gerund = "[[se]] [[les]] [[y]] [[étant]]"
elseif data.aux == "se l'y être" then
aux_gerund = "[[se]] [[l']][[y]] [[étant]]"
elseif data.aux == "l'avoir" then
aux_gerund = "[[l]]'[[ayant]]"
elseif data.aux == "l'être" then
aux_gerund = "[[l]]'[[étant]]"
elseif data.aux == "l'avoir ''or'' être" then
aux_gerund = "[[l]]'[[ayant]] ''or'' [[étant]]"
elseif data.aux == "l'y avoir" then
aux_gerund = "[[l]]'[[y]] [[ayant]]"
elseif data.aux == "l'y être" then
aux_gerund = "[[l]]'[[y]] [[étant]]"
elseif data.aux == "l'y avoir ''or'' être" then
aux_gerund = "[[l]]'[[y]] [[ayant]] ''or'' [[étant]]"
elseif data.aux == "les avoir" then
aux_gerund = "[[les]] [[ayant]]"
elseif data.aux == "les être" then
aux_gerund = "[[les]] [[étant]]"
elseif data.aux == "les avoir ''or'' être" then
aux_gerund = "[[les]] [[ayant]] ''or'' [[étant]]"
elseif data.aux == "les y avoir" then
aux_gerund = "[[les]] [[y]] [[ayant]]"
elseif data.aux == "les y être" then
aux_gerund = "[[les]] [[y]] [[étant]]"
elseif data.aux == "les y avoir ''or'' être" then
aux_gerund = "[[les]] [[y]] [[ayant]] ''or'' [[étant]]"
elseif data.aux == "y avoir" then
aux_gerund = "[[y]] [[ayant]]"
elseif data.aux == "y être" then
aux_gerund = "[[y]] [[étant]]"
elseif data.aux == "y avoir ''or'' être" then
aux_gerund = "[[y]] [[ayant]] ''or'' [[étant]]"
elseif data.aux == "y en avoir" then
aux_gerund = "[[y]] [[en]] [[ayant]]"
elseif data.aux == "y en être" then
aux_gerund = "[[y]] [[en]] [[étant]]"
elseif data.aux == "y en avoir ''or'' être" then
aux_gerund = "[[y]] [[en]] [[ayant]] ''or'' [[étant]]"
elseif data.aux == "en avoir" then
aux_gerund = "[[en]] [[ayant]]"
elseif data.aux == "en être" then
aux_gerund = "[[en]] [[étant]]"
elseif data.aux == "en avoir ''or'' être" then
aux_gerund = "[[en] [[ayant]] ''or'' [[étant]]"
elseif data.aux == "être" then
aux_gerund = "[[étant]]"
else
aux_gerund = "[[ayant]] <i>or</i> [[étant]]"
end
local result = {}
local inv = data.forms.pp_nolink
local inv_sub = data.forms.pp_nolink
local inversion_note = ""
local inversion_sub_note = ""
local replacement_note = "<sup>2</sup>"
--Until someone implements a better solution
if inv == "aimé" or inv == "chanté" or inv == "dansé" or inv == "dussé" or inv == "-é" or inv == "estimé" or inv == "eussé" or inv == "fussé" or inv == "mangé" or inv == "opiné" or inv == "parlé" or inv == "pensé" or inv == "pu" or inv == "trouvé" then
inversion_note = "<sup>2</sup>"
inversion_sub_note = "<sup>2</sup>"
replacement_note = "<sup>3</sup>"
if inv == "pu" then
inv = "puis"
inv_sub = "puissé"
inversion_sub_note = "<sup>3</sup>"
replacement_note = "<sup>4</sup>"
end
end
-- Template parameter syntax refers to the corresponding item in the data.forms table:
-- {{{inf_nolink}}} -> data.forms.inf_nolink
if data.notes then table.insert(result, data.notes .. '\n') end
table.insert(result,
[=[
<div class="NavFrame">
<div class="NavHead" align=center>การผันรูปของ ''{{{inf_nolink}}}'' <span style="font-size:90%;">(ดูเพิ่ม [[ภาคผนวก:คำกริยาภาษาฝรั่งเศส]])</span></div>
<div class="NavContent" align=left>
{| class="roa-inflection-table"
|-
! rowspan="2" class="roa-nonfinite-header" | <span title="infinitif">รูปกริยากลาง</span>
! class="roa-nonfinite-header" style="height:3em;" | <small>กาลสามัญ</small>
| {{{inf_nolink}}}
|-
! class="roa-nonfinite-header" style="height:3em;" | <small>กาลประสม</small>
]=])
if data.forms.inf_comp == "" then
table.insert(result, '! colspan="6" | ' ..data.forms.inf_comp.. ' \n')
elseif data.forms.pp_nolink == "—" then
table.insert(result, '! colspan="6" | — \n')
else
table.insert(result, '! colspan="6" class="roa-compound-row" | <i>[[' .. data.aux .. ']]</i> + รูปกริยาขยายอดีตกาล\n')
end
table.insert(result,
[=[
|-
! rowspan="2" class="roa-nonfinite-header" | <span title="participe présent">รูปกริยาขยายปัจจุบันกาล</span> หรือ <span title="">รูปกริยาเป็นนาม</span><sup>1</sup>
! class="roa-nonfinite-header" style="height:3em;" | <small>กาลสามัญ</small>
| {{{ppr}}}
|-
! class="roa-nonfinite-header" style="height:3em;" | <small>กาลประสม</small>
]=])
if data.forms.ger_comp == "" then
table.insert(result, '! colspan="6" class="roa-compound-row" | ' ..data.forms.ger_comp.. '\n')
elseif data.forms.pp_nolink == "—" then
table.insert(result, '! colspan="6" class="roa-compound-row" | — \n')
else
table.insert(result, '! colspan="6" class="roa-compound-row" | <i>' .. aux_gerund .. '</i> + รูปกริยาขยายอดีตกาล \n')
end
table.insert(result,
[=[
|-
! colspan="2" class="roa-nonfinite-header" | <span title="participe passé">รูปกริยาขยายอดีตกาล</span>
| {{{pp}}}
|-
! colspan="2" rowspan="2" class="roa-person-number-header" |
! colspan="3" class="roa-person-number-header" | เอกพจน์
! colspan="3" class="roa-person-number-header" | พหูพจน์
|-
! class="roa-person-number-header" style="width:12.5%;" | บุรุษที่หนึ่ง
! class="roa-person-number-header" style="width:12.5%;" | บุรุษที่สอง
! class="roa-person-number-header" style="width:12.5%;" | บุรุษที่สาม
! class="roa-person-number-header" style="width:12.5%;" | บุรุษที่หนึ่ง
! class="roa-person-number-header" style="width:12.5%;" | บุรุษที่สอง
! class="roa-person-number-header" style="width:12.5%;" | บุรุษที่สาม
|-
! class="roa-indicative-left-rail" colspan="2" | <span title="indicatif">มาลาบอกเล่า</span>
! class="roa-indicative-left-rail" | je (j’)
! class="roa-indicative-left-rail" | tu
! class="roa-indicative-left-rail" | il, elle, on
! class="roa-indicative-left-rail" | nous
! class="roa-indicative-left-rail" | vous
! class="roa-indicative-left-rail" | ils, elles
|-
! rowspan="5" class="roa-indicative-left-rail" | <small>(กาลสามัญ)</small>
! class="roa-indicative-left-rail" style="height:3em;" | <span title="présent">ปัจจุบันกาล</span>
| {{{ind_p_1s}}}]=] .. inversion_note .. [=[
| {{{ind_p_2s}}}
| {{{ind_p_3s}}}
| {{{ind_p_1p}}}
| {{{ind_p_2p}}}
| {{{ind_p_3p}}}
|-
! class="roa-indicative-left-rail" style="height:3em;" | <span title="imparfait">ไม่สมบูรณ์</span>
| {{{ind_i_1s}}}
| {{{ind_i_2s}}}
| {{{ind_i_3s}}}
| {{{ind_i_1p}}}
| {{{ind_i_2p}}}
| {{{ind_i_3p}}}
|-
! class="roa-indicative-left-rail" style="height:3em;" | <span title="passé simple">past historic</span>]=] .. replacement_note .. [=[
| {{{ind_ps_1s}}}
| {{{ind_ps_2s}}}
| {{{ind_ps_3s}}}
| {{{ind_ps_1p}}}
| {{{ind_ps_2p}}}
| {{{ind_ps_3p}}}
|-
! class="roa-indicative-left-rail" style="height:3em;" | <span title="futur simple">อนาคตกาล</span>
| {{{ind_f_1s}}}
| {{{ind_f_2s}}}
| {{{ind_f_3s}}}
| {{{ind_f_1p}}}
| {{{ind_f_2p}}}
| {{{ind_f_3p}}}
|-
! class="roa-indicative-left-rail" style="height:3em;" | <span title="conditionnel présent">มาลาเงื่อนไข</span>
| {{{cond_p_1s}}}
| {{{cond_p_2s}}}
| {{{cond_p_3s}}}
| {{{cond_p_1p}}}
| {{{cond_p_2p}}}
| {{{cond_p_3p}}}
|-
! rowspan="5" class="roa-indicative-left-rail" | <small>(กาลประสม)</small>
! class="roa-indicative-left-rail" style="height:3em;" | <span title="passé composé">ปัจจุบันกาลสมบูรณ์</span>
]=])
if data.forms.pp_nolink == "—" then
table.insert(result, '! colspan="6" class="roa-compound-row" | — \n')
else
table.insert(result, '! colspan="6" class="roa-compound-row" | ใช้รูปปัจจุบันกาลมาลาบอกเล่าของ <i>[[' .. data.aux .. ']]</i> + รูปกริยาขยายอดีตกาล\n')
end
table.insert(result, '|-\n! class="roa-indicative-left-rail" style="height:3em;" | <span title="plus-que-parfait">อภิสมบูรณ์</span>\n')
if data.forms.pp_nolink == "—" then
table.insert(result, '! colspan="6" class="roa-compound-row" | — \n')
else
table.insert(result, '! colspan="6" class="roa-compound-row" | ใช้รูปไม่สมบูรณ์มาลาบอกเล่าของ <i>[[' .. data.aux .. ']]</i> + รูปกริยาขยายอดีตกาล\n')
end
table.insert(result, '|-\n! class="roa-indicative-left-rail" style="height:3em;" | <span title="passé antérieur">past anterior</span>' .. replacement_note .. '\n')
if data.forms.pp_nolink == "—" then
table.insert(result, '! colspan="6" class="roa-compound-row" | — \n')
else
table.insert(result, '! colspan="6" class="roa-compound-row" | ใช้รูปpast historicของ <i>[[' .. data.aux .. ']]</i> + รูปกริยาขยายอดีตกาล\n')
end
table.insert(result, '|-\n! class="roa-indicative-left-rail" style="height:3em;" | <span title="futur antérieur">อนาคตกาลสมบูรณ์</span>\n')
if data.forms.pp_nolink == "—" then
table.insert(result, '! colspan="6" class="roa-compound-row" | — \n')
else
table.insert(result, '! colspan="6" class="roa-compound-row" | ใช้รูปอนาคตกาลของ <i>[[' .. data.aux .. ']]</i> + รูปกริยาขยายอดีตกาล\n')
end
table.insert(result, '|-\n! class="roa-indicative-left-rail" style="height:3em;" | <span title="conditionnel passé">มาลาเงื่อนไขสมบูรณ์</span>\n')
if data.forms.pp_nolink == "—" then
table.insert(result, '! colspan="6" class="roa-compound-row" | — \n')
else
table.insert(result, '! colspan="6" class="roa-compound-row" | ใช้รูปมาลาเงื่อนไขของ <i>[[' .. data.aux .. ']]</i> + รูปกริยาขยายอดีตกาล\n')
end
table.insert(result,
[=[
|-
! class="roa-subjunctive-left-rail" colspan="2" | <span title="subjonctif">มาลาสมมุติ</span>
! class="roa-subjunctive-left-rail" | que je (j’)
! class="roa-subjunctive-left-rail" | que tu
! class="roa-subjunctive-left-rail" | qu’il, qu’elle
! class="roa-subjunctive-left-rail" | que nous
! class="roa-subjunctive-left-rail" | que vous
! class="roa-subjunctive-left-rail" | qu’ils, qu’elles
|-
! rowspan="2" class="roa-subjunctive-left-rail" | <small>(กาลสามัญ)</small>
! class="roa-subjunctive-left-rail" style="height:3em;" | <span title="subjonctif présent">ปัจจุบันกาล</span>
| {{{sub_p_1s}}}]=] .. inversion_sub_note .. [=[
| {{{sub_p_2s}}}
| {{{sub_p_3s}}}
| {{{sub_p_1p}}}
| {{{sub_p_2p}}}
| {{{sub_p_3p}}}
|-
! class="roa-subjunctive-left-rail" style="height:3em;" rowspan="1" | <span title="subjonctif imparfait">ไม่สมบูรณ์</span>]=] .. replacement_note .. [=[
| {{{sub_pa_1s}}}
| {{{sub_pa_2s}}}
| {{{sub_pa_3s}}}
| {{{sub_pa_1p}}}
| {{{sub_pa_2p}}}
| {{{sub_pa_3p}}}
|-
! rowspan="2" class="roa-subjunctive-left-rail" | <small>(กาลประสม)</small>
! class="roa-subjunctive-left-rail" style="height:3em;" | <span title="subjonctif passé">อดีตกาล</span>
]=])
if data.forms.pp_nolink == "—" then
table.insert(result, '! colspan="6" class="roa-compound-row" | — \n')
else
table.insert(result, '! colspan="6" class="roa-compound-row" | ใช้รูปปัจจุบันกาลมาลาสมมุติของ <i>[[' .. data.aux .. ']]</i> + รูปกริยาขยายอดีตกาล\n')
end
table.insert(result, '|-\n! class="roa-subjunctive-left-rail" style="height:3em;" | <span title="subjonctif plus-que-parfait">pluperfect</span>' .. replacement_note .. '\n')
if data.forms.pp_nolink == "—" then
table.insert(result, '! colspan="6" class="roa-compound-row" | — \n')
else
table.insert(result, '! colspan="6" class="roa-compound-row" | ใช้รูปไม่สมบูรณ์มาลาสมมุติของ <i>[[' .. data.aux .. ']]</i> + รูปกริยาขยายอดีตกาล\n')
end
table.insert(result,
[=[
|-
! colspan="2" class="roa-imperative-left-rail" | <span title="impératif">มาลาสั่ง</span>
! class="roa-imperative-left-rail" | –
! class="roa-imperative-left-rail" | <s>tu</s>
! class="roa-imperative-left-rail" | –
! class="roa-imperative-left-rail" | <s>nous</s>
! class="roa-imperative-left-rail" | <s>vous</s>
! class="roa-imperative-left-rail" | –
|-
! class="roa-imperative-left-rail" style="height:3em;" colspan="2" | <span title="">กาลสามัญ</span>
| —
| {{{imp_p_2s}}}
| —
| {{{imp_p_1p}}}
| {{{imp_p_2p}}}
| —
|-
! class="roa-imperative-left-rail" style="height:3em;" colspan="2" | <span title="">กาลประสม</span>
| —
]=])
if data.forms.pp_nolink == "—" then
table.insert(result, '! class="roa-compound-row" | — \n')
else
table.insert(result, '! class="roa-compound-row" | ใช้รูปกาลสามัญมาลาสั่งของ <i>[[' .. data.aux .. ']]</i> + รูปกริยาขยายอดีตกาล\n')
end
table.insert(result,
[=[
| —
]=])
if data.forms.pp_nolink == "—" then
table.insert(result, '! class="roa-compound-row" | — \n')
else
table.insert(result, '! class="roa-compound-row" | ใช้รูปกาลสามัญมาลาสั่งของ <i>[[' .. data.aux .. ']]</i> + รูปกริยาขยายอดีตกาล\n')
end
table.insert(result,
[=[
]=])
if data.forms.pp_nolink == "—" then
table.insert(result, '! class="roa-compound-row" | — \n')
else
table.insert(result, '! class="roa-compound-row" | ใช้รูปกาลสามัญมาลาสั่งของ <i>[[' .. data.aux .. ']]</i> + รูปกริยาขยายอดีตกาล\n')
end
table.insert(result,
[=[
| —
|-
| colspan="8" |<sup>1</sup> The French gerund is usable only with the preposition <i>[[en]]</i>.
|-
]=])
if inversion_note ~= "" then
table.insert(result,
[=[
| colspan="8" |<sup>2</sup> <i>[[]=] .. inv .. [=[]]</i> when inverted.
|-
]=])
end
if inv ~= inv_sub then
table.insert(result,
[=[
| colspan="8" |<sup>3</sup> <i>[[]=] .. inv_sub .. [=[]]</i> when inverted.
|-
]=])
end
table.insert(result,
[=[
| colspan="8" |]=] .. replacement_note .. [=[ In less formal writing or speech, these tenses may be found to have been replaced in the following way:
: past historic → present perfect
: past anterior → pluperfect
: imperfect subjunctive → present subjunctive
: pluperfect subjunctive → past subjunctive
(Christopher Kendris [1995], <i>Master the Basics: French</i>, pp. [https://books.google.fr/books?id=g4G4jg5GWMwC&pg=PA77 77], [https://books.google.fr/books?id=g4G4jg5GWMwC&pg=PA78 78], [https://books.google.fr/books?id=g4G4jg5GWMwC&pg=PA79 79], [https://books.google.fr/books?id=g4G4jg5GWMwC&pg=PA81 81]).
|}
</div>
</div>
]=])
--[[
setmetatable(data.forms, { __index =
function(t, k)
mw.log('No key for ' .. k)
end
})
--]]
return require("Module:TemplateStyles")("Module:roa-verb/style.css") .. string.gsub(table.concat(result), "{{{([^}]+)}}}",
function(code)
return data.forms[code]
end)
end
return export
2lwqss61xp3pl1rto1fppoh4vyfcj2g
5729456
5729455
2026-07-20T10:14:11Z
Octahedron80
267
5729456
Scribunto
text/plain
local export = {}
local m_links = require("Module:links")
local lang = require("Module:languages").getByCode("fr")
-- defined below
local format_links, categorize
--entry point
function export.frconj(frame)
--are we directly embedding through Template:fr-conj or calling the module?
local args = {}
if frame.args["direct"] == "yes" then
args = frame:getParent().args
else
args = frame.args
end
--create the forms
local data = {forms = {}, categories = {}, en = false, y = false, yen = false, l = false, le = false, la = false, les = false, l_en = false, l_y = false, l_yen = false, lesen = false, lesy = false, lesyen = false, refl = false, reflen = false, refll = false, reflle = false, reflla = false, reflles = false, reflly = false, refllesy = false, refly = false, reflyen = false, aux = ""}
data.aux = args["aux"]
if not (data.aux == "avoir" or data.aux == "être") then
data.aux = "avoir ''or'' être"
end
if (args["inf"] == nil or args["inf"] == "" or args["inf"] == mw.loadData("Module:headword/data").pagename) then
data.forms.inf_nolink = mw.loadData("Module:headword/data").pagename
else
data.forms.inf_nolink = format_links(args["inf"])
end
data.forms.pp = format_links(args["pp"])
data.forms.ppr = format_links(args["ppr"])
if (args["pp"] == "—") then
data.forms.pp_nolink = "—"
elseif (args["pp"] == nil or mw.loadData("Module:headword/data").pagename) then
data.forms.pp_nolink = mw.loadData("Module:headword/data").pagename
else
data.forms.pp_nolink = format_links(args["pp"])
end
if (args["ppr"] == "—") then
data.forms.ppr_nolink = "—"
elseif (args["ppr"] == nil or mw.loadData("Module:headword/data").pagename) then
data.forms.ppr_nolink = mw.loadData("Module:headword/data").pagename
else
data.forms.ppr_nolink = format_links(args["ppr"])
end
local form_params = {
"ind.p.1s", "ind.p.2s", "ind.p.3s", "ind.p.1p", "ind.p.2p", "ind.p.3p",
"ind.i.1s", "ind.i.2s", "ind.i.3s", "ind.i.1p", "ind.i.2p", "ind.i.3p",
"ind.ps.1s", "ind.ps.2s", "ind.ps.3s", "ind.ps.1p", "ind.ps.2p", "ind.ps.3p",
"ind.f.1s", "ind.f.2s", "ind.f.3s", "ind.f.1p", "ind.f.2p", "ind.f.3p",
"cond.p.1s", "cond.p.2s", "cond.p.3s", "cond.p.1p", "cond.p.2p", "cond.p.3p",
"sub.p.1s", "sub.p.2s", "sub.p.3s", "sub.p.1p", "sub.p.2p", "sub.p.3p",
"sub.pa.1s", "sub.pa.2s", "sub.pa.3s", "sub.pa.1p", "sub.pa.2p", "sub.pa.3p",
"imp.p.2s", "imp.p.1p", "imp.p.2p",
}
for _, form in ipairs(form_params) do
local key = form:gsub("%.", "_")
data.forms[key] = format_links(args[form])
local alt = form .. ".alt"
local alt_arg = args[alt]
if not (alt_arg == nil or alt_arg == "" or alt_arg == "—") then
data.forms[key] = data.forms[key] .. " <i>or</i> " .. format_links(alt_arg)
end
end
--a few ugly hacks
data.forms.ger = args["ger.override"]
data.forms.inf_comp = args["inf.override"]
data.forms.ger_comp = args["ger.comp.override"]
--finish up
if mw.title.getCurrentTitle().nsText == "" then
return export.make_table(data) .. categorize(args,data)
else
return export.make_table(data)
end
end
function format_links(link)
if (link == nil or link == "" or link == "—") then
return "—"
else
return m_links.full_link({lang = lang, term = link})
end
end
function categorize(args, data)
output = ""
if args.group == "1" or args.group == "1st" or args.group == "first" then
output = output .. "[[Category:คำกริยากลุ่ม 1 ภาษาฝรั่งเศส]]"
elseif args.group == "2" or args.group == "2st" or args.group == "second" then
output = output .. "[[Category:คำกริยากลุ่ม 2 ภาษาฝรั่งเศส]]"
elseif args.group == "3" or args.group == "3rd" or args.group == "third" then
output = output .. "[[Category:คำกริยากลุ่ม 3 ภาษาฝรั่งเศส]]"
end
if data.aux == "être" then
output = output .. "[[Category:คำกริยาภาษาฝรั่งเศสที่ใช้คำกริยาช่วย être]]"
elseif data.aux == "avoir or être" then
output = output .. "[[Category:คำกริยาภาษาฝรั่งเศสที่ใช้คำกริยาช่วย avoir หรือ être]]"
end
return output
end
--split from Module:fr-verb/core
function export.make_table(data)
local aux_gerund = ""
if data.aux == "avoir" then
aux_gerund = "[[ayant]]"
elseif data.aux == "[[s']][[être]]" then
aux_gerund = "[[s']][[étant]]"
elseif data.aux == "s'en être" then
aux_gerund = "[[s']][[en]] [[étant]]"
elseif data.aux == "s'y être" then
aux_gerund = "[[s']][[y]] [[étant]]"
elseif data.aux == "s'y en être" then
aux_gerund = "[[s']][[y]] [[en]] [[étant]]"
elseif data.aux == "se l'être" then
aux_gerund = "[[se]] [[l']][[étant]]"
elseif data.aux == "se les être" then
aux_gerund = "[[se]] [[les]] [[étant]]"
elseif data.aux == "l'en avoir" then
aux_gerund = "[[l']][[en]] [[ayant]]"
elseif data.aux == "l'y en avoir" then
aux_gerund = "[[l']][[y]] [[en]] [[ayant]]"
elseif data.aux == "les en avoir" then
aux_gerund = "[[les]] [[en]] [[ayant]]"
elseif data.aux == "les y en avoir" then
aux_gerund = "[[les]] [[y]] [[en]] [[ayant]]"
elseif data.aux == "se les y être" then
aux_gerund = "[[se]] [[les]] [[y]] [[étant]]"
elseif data.aux == "se l'y être" then
aux_gerund = "[[se]] [[l']][[y]] [[étant]]"
elseif data.aux == "l'avoir" then
aux_gerund = "[[l]]'[[ayant]]"
elseif data.aux == "l'être" then
aux_gerund = "[[l]]'[[étant]]"
elseif data.aux == "l'avoir ''or'' être" then
aux_gerund = "[[l]]'[[ayant]] ''or'' [[étant]]"
elseif data.aux == "l'y avoir" then
aux_gerund = "[[l]]'[[y]] [[ayant]]"
elseif data.aux == "l'y être" then
aux_gerund = "[[l]]'[[y]] [[étant]]"
elseif data.aux == "l'y avoir ''or'' être" then
aux_gerund = "[[l]]'[[y]] [[ayant]] ''or'' [[étant]]"
elseif data.aux == "les avoir" then
aux_gerund = "[[les]] [[ayant]]"
elseif data.aux == "les être" then
aux_gerund = "[[les]] [[étant]]"
elseif data.aux == "les avoir ''or'' être" then
aux_gerund = "[[les]] [[ayant]] ''or'' [[étant]]"
elseif data.aux == "les y avoir" then
aux_gerund = "[[les]] [[y]] [[ayant]]"
elseif data.aux == "les y être" then
aux_gerund = "[[les]] [[y]] [[étant]]"
elseif data.aux == "les y avoir ''or'' être" then
aux_gerund = "[[les]] [[y]] [[ayant]] ''or'' [[étant]]"
elseif data.aux == "y avoir" then
aux_gerund = "[[y]] [[ayant]]"
elseif data.aux == "y être" then
aux_gerund = "[[y]] [[étant]]"
elseif data.aux == "y avoir ''or'' être" then
aux_gerund = "[[y]] [[ayant]] ''or'' [[étant]]"
elseif data.aux == "y en avoir" then
aux_gerund = "[[y]] [[en]] [[ayant]]"
elseif data.aux == "y en être" then
aux_gerund = "[[y]] [[en]] [[étant]]"
elseif data.aux == "y en avoir ''or'' être" then
aux_gerund = "[[y]] [[en]] [[ayant]] ''or'' [[étant]]"
elseif data.aux == "en avoir" then
aux_gerund = "[[en]] [[ayant]]"
elseif data.aux == "en être" then
aux_gerund = "[[en]] [[étant]]"
elseif data.aux == "en avoir ''or'' être" then
aux_gerund = "[[en] [[ayant]] ''or'' [[étant]]"
elseif data.aux == "être" then
aux_gerund = "[[étant]]"
else
aux_gerund = "[[ayant]] <i>or</i> [[étant]]"
end
local result = {}
local inv = data.forms.pp_nolink
local inv_sub = data.forms.pp_nolink
local inversion_note = ""
local inversion_sub_note = ""
local replacement_note = "<sup>2</sup>"
--Until someone implements a better solution
if inv == "aimé" or inv == "chanté" or inv == "dansé" or inv == "dussé" or inv == "-é" or inv == "estimé" or inv == "eussé" or inv == "fussé" or inv == "mangé" or inv == "opiné" or inv == "parlé" or inv == "pensé" or inv == "pu" or inv == "trouvé" then
inversion_note = "<sup>2</sup>"
inversion_sub_note = "<sup>2</sup>"
replacement_note = "<sup>3</sup>"
if inv == "pu" then
inv = "puis"
inv_sub = "puissé"
inversion_sub_note = "<sup>3</sup>"
replacement_note = "<sup>4</sup>"
end
end
-- Template parameter syntax refers to the corresponding item in the data.forms table:
-- {{{inf_nolink}}} -> data.forms.inf_nolink
if data.notes then table.insert(result, data.notes .. '\n') end
table.insert(result,
[=[
<div class="NavFrame">
<div class="NavHead" align=center>การผันรูปของ ''{{{inf_nolink}}}'' <span style="font-size:90%;">(ดูเพิ่ม [[ภาคผนวก:คำกริยาภาษาฝรั่งเศส]])</span></div>
<div class="NavContent" align=left>
{| class="roa-inflection-table"
|-
! rowspan="2" class="roa-nonfinite-header" | <span title="infinitif">รูปกริยากลาง</span>
! class="roa-nonfinite-header" style="height:3em;" | <small>กาลสามัญ</small>
| {{{inf_nolink}}}
|-
! class="roa-nonfinite-header" style="height:3em;" | <small>กาลประสม</small>
]=])
if data.forms.inf_comp == "" then
table.insert(result, '! colspan="6" | ' ..data.forms.inf_comp.. ' \n')
elseif data.forms.pp_nolink == "—" then
table.insert(result, '! colspan="6" | — \n')
else
table.insert(result, '! colspan="6" class="roa-compound-row" | <i>[[' .. data.aux .. ']]</i> + รูปกริยาขยายอดีตกาล\n')
end
table.insert(result,
[=[
|-
! rowspan="2" class="roa-nonfinite-header" | <span title="participe présent">รูปกริยาขยายปัจจุบันกาล</span> หรือ <span title="">รูปกริยาเป็นนาม</span><sup>1</sup>
! class="roa-nonfinite-header" style="height:3em;" | <small>กาลสามัญ</small>
| {{{ppr}}}
|-
! class="roa-nonfinite-header" style="height:3em;" | <small>กาลประสม</small>
]=])
if data.forms.ger_comp == "" then
table.insert(result, '! colspan="6" class="roa-compound-row" | ' ..data.forms.ger_comp.. '\n')
elseif data.forms.pp_nolink == "—" then
table.insert(result, '! colspan="6" class="roa-compound-row" | — \n')
else
table.insert(result, '! colspan="6" class="roa-compound-row" | <i>' .. aux_gerund .. '</i> + รูปกริยาขยายอดีตกาล \n')
end
table.insert(result,
[=[
|-
! colspan="2" class="roa-nonfinite-header" | <span title="participe passé">รูปกริยาขยายอดีตกาล</span>
| {{{pp}}}
|-
! colspan="2" rowspan="2" class="roa-person-number-header" |
! colspan="3" class="roa-person-number-header" | เอกพจน์
! colspan="3" class="roa-person-number-header" | พหูพจน์
|-
! class="roa-person-number-header" style="width:12.5%;" | บุรุษที่หนึ่ง
! class="roa-person-number-header" style="width:12.5%;" | บุรุษที่สอง
! class="roa-person-number-header" style="width:12.5%;" | บุรุษที่สาม
! class="roa-person-number-header" style="width:12.5%;" | บุรุษที่หนึ่ง
! class="roa-person-number-header" style="width:12.5%;" | บุรุษที่สอง
! class="roa-person-number-header" style="width:12.5%;" | บุรุษที่สาม
|-
! class="roa-indicative-left-rail" colspan="2" | <span title="indicatif">มาลาบอกเล่า</span>
! class="roa-indicative-left-rail" | je (j’)
! class="roa-indicative-left-rail" | tu
! class="roa-indicative-left-rail" | il, elle, on
! class="roa-indicative-left-rail" | nous
! class="roa-indicative-left-rail" | vous
! class="roa-indicative-left-rail" | ils, elles
|-
! rowspan="5" class="roa-indicative-left-rail" | <small>(กาลสามัญ)</small>
! class="roa-indicative-left-rail" style="height:3em;" | <span title="présent">ปัจจุบันกาล</span>
| {{{ind_p_1s}}}]=] .. inversion_note .. [=[
| {{{ind_p_2s}}}
| {{{ind_p_3s}}}
| {{{ind_p_1p}}}
| {{{ind_p_2p}}}
| {{{ind_p_3p}}}
|-
! class="roa-indicative-left-rail" style="height:3em;" | <span title="imparfait">ไม่สมบูรณ์</span>
| {{{ind_i_1s}}}
| {{{ind_i_2s}}}
| {{{ind_i_3s}}}
| {{{ind_i_1p}}}
| {{{ind_i_2p}}}
| {{{ind_i_3p}}}
|-
! class="roa-indicative-left-rail" style="height:3em;" | <span title="passé simple">past historic</span>]=] .. replacement_note .. [=[
| {{{ind_ps_1s}}}
| {{{ind_ps_2s}}}
| {{{ind_ps_3s}}}
| {{{ind_ps_1p}}}
| {{{ind_ps_2p}}}
| {{{ind_ps_3p}}}
|-
! class="roa-indicative-left-rail" style="height:3em;" | <span title="futur simple">อนาคตกาล</span>
| {{{ind_f_1s}}}
| {{{ind_f_2s}}}
| {{{ind_f_3s}}}
| {{{ind_f_1p}}}
| {{{ind_f_2p}}}
| {{{ind_f_3p}}}
|-
! class="roa-indicative-left-rail" style="height:3em;" | <span title="conditionnel présent">มาลาเงื่อนไข</span>
| {{{cond_p_1s}}}
| {{{cond_p_2s}}}
| {{{cond_p_3s}}}
| {{{cond_p_1p}}}
| {{{cond_p_2p}}}
| {{{cond_p_3p}}}
|-
! rowspan="5" class="roa-indicative-left-rail" | <small>(กาลประสม)</small>
! class="roa-indicative-left-rail" style="height:3em;" | <span title="passé composé">ปัจจุบันกาลสมบูรณ์</span>
]=])
if data.forms.pp_nolink == "—" then
table.insert(result, '! colspan="6" class="roa-compound-row" | — \n')
else
table.insert(result, '! colspan="6" class="roa-compound-row" | ใช้รูปปัจจุบันกาลมาลาบอกเล่าของ <i>[[' .. data.aux .. ']]</i> + รูปกริยาขยายอดีตกาล\n')
end
table.insert(result, '|-\n! class="roa-indicative-left-rail" style="height:3em;" | <span title="plus-que-parfait">อภิสมบูรณ์</span>\n')
if data.forms.pp_nolink == "—" then
table.insert(result, '! colspan="6" class="roa-compound-row" | — \n')
else
table.insert(result, '! colspan="6" class="roa-compound-row" | ใช้รูปไม่สมบูรณ์มาลาบอกเล่าของ <i>[[' .. data.aux .. ']]</i> + รูปกริยาขยายอดีตกาล\n')
end
table.insert(result, '|-\n! class="roa-indicative-left-rail" style="height:3em;" | <span title="passé antérieur">past anterior</span>' .. replacement_note .. '\n')
if data.forms.pp_nolink == "—" then
table.insert(result, '! colspan="6" class="roa-compound-row" | — \n')
else
table.insert(result, '! colspan="6" class="roa-compound-row" | ใช้รูปpast historicของ <i>[[' .. data.aux .. ']]</i> + รูปกริยาขยายอดีตกาล\n')
end
table.insert(result, '|-\n! class="roa-indicative-left-rail" style="height:3em;" | <span title="futur antérieur">อนาคตกาลสมบูรณ์</span>\n')
if data.forms.pp_nolink == "—" then
table.insert(result, '! colspan="6" class="roa-compound-row" | — \n')
else
table.insert(result, '! colspan="6" class="roa-compound-row" | ใช้รูปอนาคตกาลของ <i>[[' .. data.aux .. ']]</i> + รูปกริยาขยายอดีตกาล\n')
end
table.insert(result, '|-\n! class="roa-indicative-left-rail" style="height:3em;" | <span title="conditionnel passé">มาลาเงื่อนไขสมบูรณ์</span>\n')
if data.forms.pp_nolink == "—" then
table.insert(result, '! colspan="6" class="roa-compound-row" | — \n')
else
table.insert(result, '! colspan="6" class="roa-compound-row" | ใช้รูปมาลาเงื่อนไขของ <i>[[' .. data.aux .. ']]</i> + รูปกริยาขยายอดีตกาล\n')
end
table.insert(result,
[=[
|-
! class="roa-subjunctive-left-rail" colspan="2" | <span title="subjonctif">มาลาสมมุติ</span>
! class="roa-subjunctive-left-rail" | que je (j’)
! class="roa-subjunctive-left-rail" | que tu
! class="roa-subjunctive-left-rail" | qu’il, qu’elle
! class="roa-subjunctive-left-rail" | que nous
! class="roa-subjunctive-left-rail" | que vous
! class="roa-subjunctive-left-rail" | qu’ils, qu’elles
|-
! rowspan="2" class="roa-subjunctive-left-rail" | <small>(กาลสามัญ)</small>
! class="roa-subjunctive-left-rail" style="height:3em;" | <span title="subjonctif présent">ปัจจุบันกาล</span>
| {{{sub_p_1s}}}]=] .. inversion_sub_note .. [=[
| {{{sub_p_2s}}}
| {{{sub_p_3s}}}
| {{{sub_p_1p}}}
| {{{sub_p_2p}}}
| {{{sub_p_3p}}}
|-
! class="roa-subjunctive-left-rail" style="height:3em;" rowspan="1" | <span title="subjonctif imparfait">ไม่สมบูรณ์</span>]=] .. replacement_note .. [=[
| {{{sub_pa_1s}}}
| {{{sub_pa_2s}}}
| {{{sub_pa_3s}}}
| {{{sub_pa_1p}}}
| {{{sub_pa_2p}}}
| {{{sub_pa_3p}}}
|-
! rowspan="2" class="roa-subjunctive-left-rail" | <small>(กาลประสม)</small>
! class="roa-subjunctive-left-rail" style="height:3em;" | <span title="subjonctif passé">อดีตกาล</span>
]=])
if data.forms.pp_nolink == "—" then
table.insert(result, '! colspan="6" class="roa-compound-row" | — \n')
else
table.insert(result, '! colspan="6" class="roa-compound-row" | ใช้รูปปัจจุบันกาลมาลาสมมุติของ <i>[[' .. data.aux .. ']]</i> + รูปกริยาขยายอดีตกาล\n')
end
table.insert(result, '|-\n! class="roa-subjunctive-left-rail" style="height:3em;" | <span title="subjonctif plus-que-parfait">อภิสมบูรณ์</span>' .. replacement_note .. '\n')
if data.forms.pp_nolink == "—" then
table.insert(result, '! colspan="6" class="roa-compound-row" | — \n')
else
table.insert(result, '! colspan="6" class="roa-compound-row" | ใช้รูปไม่สมบูรณ์มาลาสมมุติของ <i>[[' .. data.aux .. ']]</i> + รูปกริยาขยายอดีตกาล\n')
end
table.insert(result,
[=[
|-
! colspan="2" class="roa-imperative-left-rail" | <span title="impératif">มาลาสั่ง</span>
! class="roa-imperative-left-rail" | –
! class="roa-imperative-left-rail" | <s>tu</s>
! class="roa-imperative-left-rail" | –
! class="roa-imperative-left-rail" | <s>nous</s>
! class="roa-imperative-left-rail" | <s>vous</s>
! class="roa-imperative-left-rail" | –
|-
! class="roa-imperative-left-rail" style="height:3em;" colspan="2" | <span title="">กาลสามัญ</span>
| —
| {{{imp_p_2s}}}
| —
| {{{imp_p_1p}}}
| {{{imp_p_2p}}}
| —
|-
! class="roa-imperative-left-rail" style="height:3em;" colspan="2" | <span title="">กาลประสม</span>
| —
]=])
if data.forms.pp_nolink == "—" then
table.insert(result, '! class="roa-compound-row" | — \n')
else
table.insert(result, '! class="roa-compound-row" | ใช้รูปกาลสามัญมาลาสั่งของ <i>[[' .. data.aux .. ']]</i> + รูปกริยาขยายอดีตกาล\n')
end
table.insert(result,
[=[
| —
]=])
if data.forms.pp_nolink == "—" then
table.insert(result, '! class="roa-compound-row" | — \n')
else
table.insert(result, '! class="roa-compound-row" | ใช้รูปกาลสามัญมาลาสั่งของ <i>[[' .. data.aux .. ']]</i> + รูปกริยาขยายอดีตกาล\n')
end
table.insert(result,
[=[
]=])
if data.forms.pp_nolink == "—" then
table.insert(result, '! class="roa-compound-row" | — \n')
else
table.insert(result, '! class="roa-compound-row" | ใช้รูปกาลสามัญมาลาสั่งของ <i>[[' .. data.aux .. ']]</i> + รูปกริยาขยายอดีตกาล\n')
end
table.insert(result,
[=[
| —
|-
| colspan="8" |<sup>1</sup> The French gerund is usable only with the preposition <i>[[en]]</i>.
|-
]=])
if inversion_note ~= "" then
table.insert(result,
[=[
| colspan="8" |<sup>2</sup> <i>[[]=] .. inv .. [=[]]</i> when inverted.
|-
]=])
end
if inv ~= inv_sub then
table.insert(result,
[=[
| colspan="8" |<sup>3</sup> <i>[[]=] .. inv_sub .. [=[]]</i> when inverted.
|-
]=])
end
table.insert(result,
[=[
| colspan="8" |]=] .. replacement_note .. [=[ In less formal writing or speech, these tenses may be found to have been replaced in the following way:
: past historic → present perfect
: past anterior → pluperfect
: imperfect subjunctive → present subjunctive
: pluperfect subjunctive → past subjunctive
(Christopher Kendris [1995], <i>Master the Basics: French</i>, pp. [https://books.google.fr/books?id=g4G4jg5GWMwC&pg=PA77 77], [https://books.google.fr/books?id=g4G4jg5GWMwC&pg=PA78 78], [https://books.google.fr/books?id=g4G4jg5GWMwC&pg=PA79 79], [https://books.google.fr/books?id=g4G4jg5GWMwC&pg=PA81 81]).
|}
</div>
</div>
]=])
--[[
setmetatable(data.forms, { __index =
function(t, k)
mw.log('No key for ' .. k)
end
})
--]]
return require("Module:TemplateStyles")("Module:roa-verb/style.css") .. string.gsub(table.concat(result), "{{{([^}]+)}}}",
function(code)
return data.forms[code]
end)
end
return export
s50h7b38ete407o3m4p0jvglnxlvug0
มอดูล:lb-headword
828
240712
5729286
5728617
2026-07-20T05:15:12Z
Octahedron80
267
5729286
Scribunto
text/plain
local export = {}
local pos_functions = {}
local legal_gender = {
["m"] = true,
["m-s"] = true,
["m-p"] = true,
["f"] = true,
["f-s"] = true,
["f-p"] = true,
["n"] = true,
["n-s"] = true,
["n-p"] = true,
["?"] = true,
["?-s"] = true,
["?-p"] = true,
["p"] = true,
}
local gender_names = {
["m"] = "เพศชาย",
["m-s"] = "เพศชาย",
["m-p"] = "เพศชาย",
["f"] = "เพศหญิง",
["f-s"] = "เพศหญิง",
["f-p"] = "เพศหญิง",
["n"] = "เพศกลาง",
["n-s"] = "เพศกลาง",
["n-p"] = "เพศกลาง",
["?"] = "ไม่ทราบเพศ",
["?-s"] = "ไม่ทราบเพศ",
["?-p"] = "ไม่ทราบเพศ",
["p"] = "ไม่ทราบเพศ",
}
local plural_genders = {
["m-p"] = true,
["f-p"] = true,
["n-p"] = true,
["?-p"] = true,
["p"] = true,
}
local lang = require("Module:languages").getByCode("lb")
-- The main entry point.
-- This is the only function that can be invoked from a template.
function export.show(frame)
local args = frame:getParent().args
PAGENAME = mw.title.getCurrentTitle().text
local head = args["head"]; if head == "" then head = nil end
local poscat = frame.args[1] or error("Part of speech has not been specified. Please pass parameter 1 to the module invocation.")
-- หมวดหมู่เป็นภาษาไทย
local poscat_th = require("Module:th-utilities").th_pos(poscat)
local data = {lang = lang, pos_category = poscat_th, categories = {}, heads = {args["head"]}, genders = {}, inflections = {}}
if pos_functions[poscat_th] then
pos_functions[poscat_th](class, args, data)
end
return
require("Module:headword").full_headword(data)
end
pos_functions["คำคุณศัพท์"] = function(class, args, data)
params = {
[1] = {list = "m",
default = mw.ustring.match(PAGENAME, "ee$") ~= nil
and PAGENAME .. "ën"
or PAGENAME .. "en"},
[2] = {list = "n",
default = mw.ustring.match(PAGENAME, "[dt]$") ~= nil
and PAGENAME
or mw.ustring.gsub(PAGENAME,
"([^AaIiEeOoUuÄäËëÉé])([aiou])([bcdfghjklmnpqrstvwxz])$",
"%1%2%2%3") .. "t"},
["f"] = {list = true},
["comp"] = {list = true},
["sup"] = {list = true,
default = mw.ustring.match(PAGENAME, "[sxz]$") ~= nil
and mw.ustring.gsub(PAGENAME,
"([^AaIiEeOoUuÄäËëÉé])([aiou])([sxz])$",
"%1%2%2%3") .. "ten"
or mw.ustring.gsub(PAGENAME,
"([^AaIiEeOoUuÄäËëÉé])([aiou])([bcdfghjklmnpqrstvwxz]?)$",
"%1%2%2%3") .. "sten"
},
["comp-irreg-only"] = {type = "boolean"},
["head"] = {default = PAGENAME},
["pred-only"] = {type = "boolean"},
}
local args = require("Module:parameters").process(args, params)
data.heads = {args.head}
if args["pred-only"] then
table.insert(data.inflections, {label = 'predicate-only'})
table.insert(data.categories, 'Luxembourgish predicate only adjectives')
else
for i, form in ipairs(args[1]) do
args[1][i] = {term = form, accel = 'masculine-form-of'}
end
args[1].label = "เพศชาย"
table.insert(data.inflections, args[1])
if #args.f > 0 then
for i, form in ipairs(args["f"]) do
args["f"][i] = {term = form, accel = 'feminine-form-of'}
end
args["f"].label = "เพศหญิง"
table.insert(data.inflections, args["f"])
end
for i, form in ipairs(args[2]) do
args[2][i] = {term = form, accel = 'neuter-form-of'}
end
args[2].label = "เพศกลาง"
table.insert(data.inflections, args[2])
end
if args["comp"][1] == '-' then
table.insert(data.inflections, {label = 'เปรียบเทียบไม่ได้'})
table.insert(data.categories, 'คำคุณศัพท์เปรียบเทียบไม่ได้ภาษาลักเซมเบิร์ก')
else
if #args["comp"] > 0 then
for i, form in ipairs(args["comp"]) do
args["comp"][i] = {term = form, accel = 'comparative-form-of'}
end
if not args["comp-irreg-only"] then
table.insert(args["comp"], 1, "[[méi]] " .. PAGENAME)
end
else
args["comp"] = {"[[méi]] " .. PAGENAME}
end
args["comp"].label = "ขั้นกว่า"
table.insert(data.inflections, args["comp"])
for i, form in ipairs(args["sup"]) do
args["sup"][i] = {term = 'am [[' .. form .. ']]', accel = 'superlative-form-of'}
end
args["sup"].label = "ขั้นสุด"
table.insert(data.inflections, args["sup"])
end
end
pos_functions["คำนาม"] = function(class, args, data)
params = {
[1] = {list = 'g', default = '?'},
[2] = {list = 'pl'},
["dim"] = {list = true},
["head"] = {default = PAGENAME},
["m"] = {list = true},
["f"] = {list = true},
}
if data.pos_category == 'คำนาม' then
params[2].default = mw.ustring.match(PAGENAME, "ee$") ~= nil
and PAGENAME .. "ën"
or PAGENAME .. "en"
end
local args = require("Module:parameters").process(args, params)
data.heads = {args.head}
local plur_tant = false
for _, g in ipairs(args[1]) do
if legal_gender[g] then
table.insert(data.genders, g)
table.insert(data.categories, "คำนาม" .. gender_names[g] .. "ภาษาลักเซมเบิร์ก")
else
error("Gender “" .. g .. "” is not an valid Luxembourgish gender.")
end
if plural_genders[g] then
plur_tant = true
end
end
if plur_tant then
table.insert(data.inflections, {label = 'พหูพจน์เท่านั้น'})
table.insert(data.categories, 'คำนามพหูพจน์เท่านั้นภาษาลักเซมเบิร์ก')
elseif args[2][1] == '-' then
table.insert(data.inflections, {label = 'นับไม่ได้'})
table.insert(data.categories, 'คำนามนับไม่ได้ภาษาลักเซมเบิร์ก')
elseif #args[2] > 0 then
for i, form in ipairs(args[2]) do
args[2][i] = {term = form, accel = 'plural-form-of'}
end
args[2].label = "พหูพจน์"
table.insert(data.inflections, args[2])
if #args[2] > 1 then
table.insert(data.categories, 'คำนามภาษาลักเซมเบิร์กที่มีหลายพหูพจน์')
end
end
if #args["dim"] > 0 then
for i, form in ipairs(args["dim"]) do
args["dim"][i] = {term = form, accel = 'diminutive-form-of'}
end
args["dim"].label = "ตัวบอกความเล็ก"
table.insert(data.inflections, args["dim"])
end
if #args.f > 0 then
args.f.label = "เพศหญิง"
table.insert(data.inflections, args.f)
end
if #args.m > 0 then
args.m.label = "เพศชาย"
table.insert(data.inflections, args.m)
end
end
pos_functions["คำวิสามานยนาม"] = pos_functions["คำนาม"]
local function make_verb_forms(prefix)
if prefix == nil then prefix = "" end
if mw.ustring.match(prefix, "n$") then
prefix = mw.ustring.gsub(
prefix,
"(.*)([^n])(n+)$",
"%1%2"
) .. "n*"
end
local stem = mw.ustring.gsub(PAGENAME, "^(" .. prefix .. ")(.*)([eë]n)$", "%2")
local dent_suff = mw.ustring.match(stem, "([td]+)$")
local conjugated = ""
if dent_suff then
conjugated = mw.ustring.gsub(stem, "([td]+)$", mw.ustring.rep("t", #dent_suff))
else
local lengthened = mw.ustring.gsub(stem,
"([^AaIiEeOoUuÄäËëÉé])([aiou])([bcdfghjklmnpqrstvwz])$",
"%1%2%2%3")
conjugated = mw.ustring.match(lengthened, "(w)$") and mw.ustring.sub(lengthened, 1, -2) .. "ft" or lengthened .. "t"
end
return conjugated, (mw.ustring.match(conjugated, "^[ei]") and "gë" or "ge") .. conjugated
end
pos_functions["คำกริยา"] = function(class, args, data)
third, pp = make_verb_forms(args.sep)
params = {
[1] = {list = '3s pres', default = third},
[2] = {list = 'pp', default = pp},
[3] = {default = 'hunn'},
["pret"] = {list = true},
["subj"] = {list = true},
["head"] = {default = PAGENAME},
["sep"] = {default = ""},
}
local args = require("Module:parameters").process(args, params)
data.heads = {args.head}
local denasalized_prefix = mw.ustring.gsub(
args.sep,
"(.*)([^n])(n+)$",
"%1%2"
)
for i, form in ipairs(args[1]) do
args[1][i] = {
term = form .. (#args.sep > 0 and " " .. args.sep or ""),
accel = 'third-singular-present-form-of'
}
end
args[1].label = 'บุรุษที่สามเอกพจน์ปัจจุบันกาล'
table.insert(data.inflections, args[1])
if #args.pret > 0 then
for i, form in ipairs(args.pret) do
args.pret[i] = {
term = form .. (#args.sep > 0 and " " .. args.sep or ""),
accel = 'past-perfect-form-of'
}
end
args.pret.label = 'อดีตกาลสิ้นสุด'
table.insert(data.inflections, args.pret)
end
for i, form in ipairs(args[2]) do
args[2][i] = {
term = (mw.ustring.match(form, "^[^dhntzaäeéëioöuü]") and denasalized_prefix or args.sep) .. form,
accel = 'past-participle-form-of'
}
end
args[2].label = 'รูปกริยาขยายอดีตกาล'
table.insert(data.inflections, args[2])
if #args.subj > 0 then
for i, form in ipairs(args.subj) do
args.subj[i] = {
term = form .. (#args.sep > 0 and " " .. args.sep or ""),
accel = 'subjunctive-form-of'
}
end
args.subj.label = 'past subjunctive'
table.insert(data.inflections, args.subj)
end
if args[3] == 'hunn' then
args[3] = {'hunn'}
table.insert(data.categories, 'คำกริยาภาษาลักเซมเบิร์กใช้คำกริยาช่วย hunn')
elseif args[3] == 'sinn' then
args[3] = {'sinn'}
table.insert(data.categories, 'คำกริยาภาษาลักเซมเบิร์กใช้คำกริยาช่วย sinn')
elseif args[3] == 'both' then
args[3] = {'hunn', 'sinn'}
table.insert(data.categories, 'คำกริยาภาษาลักเซมเบิร์กใช้คำกริยาช่วย hunn และ sinn')
else
error("Verb auxiliary “" .. args[3] .. "” is not an valid Luxembourgish auxiliary (“hunn”, “sinn”, or “both”).")
end
args[3].label = "คำกริยาช่วย"
table.insert(data.inflections, args[3])
end
return export
abbdc1q7op3ypmhum29gqpmrzd0cpyo
agradecer
0
241107
5729316
5385694
2026-07-20T05:43:01Z
Octahedron80
267
/* ภาษาอัสตูเรียส */ เก็บกวาด
5729316
wikitext
text/x-wiki
== ภาษากาลิเซีย ==
=== รากศัพท์ ===
จาก {{affix|gl|a-|grado|-ecer}}
=== คำกริยา ===
{{gl-verb}}<br>
{{gl-reinteg-verb}}
# [[ขอบคุณ]]
# [[ซาบซึ้ง]]
==== การผันรูป ====
{{gl-conj}}
{{gl-reinteg-conj}}
==== คำตรงข้าม ====
* {{l|gl|desagradecer}}
==== คำเกี่ยวข้อง ====
* {{l|gl|agradecemento}}
== ภาษาโปรตุเกส ==
=== รากศัพท์ ===
จาก {{affix|pt|a-|grado|-ecer|id2=Etymology 3 2}}
=== การออกเสียง ===
{{pt-IPA|agradecêr}}
* {{hyph|pt|a|gra|de|cer}}
=== คำกริยา ===
{{pt-verb}}
# [[ขอบคุณ]]
# [[ซาบซึ้ง]]
==== การผันรูป ====
{{pt-conj}}
==== คำตรงข้าม ====
* {{l|pt|desagradecer}}
==== คำเกี่ยวข้อง ====
* {{l|pt|agradecimento}}
== ภาษาสเปน ==
=== รากศัพท์ ===
{{inh+|es|osp|agradesçer}}; เทียบเท่า {{affix|es|a-|grado|-ecer|t2=will; liking, preference}}; ร่วมเชื้อสายกับ{{cog|an|agradeixer}} และ{{cog|ca|agrair}}
=== การออกเสียง ===
{{es-pr|+<audio:LL-Q1321 (spa)-AdrianAbdulBaha-agradecer.wav<a:Colombia>>}}
=== คำกริยา ===
{{es-verb}}
# {{lb|es|transitive}} [[ขอบคุณ]]
#: {{ant|es|desagradecer}}
#: {{ux|es|Le '''agradecí''' mucho su ayuda.|I '''thanked''' him very much for his help.}}
# {{lb|es|transitive}} [[ซาบซึ้ง]]
#: {{ant|es|desagradecer}}
==== การผันรูป ====
{{es-conj}}
==== ลูกคำ ====
{{col-auto|es
| agradecido
| agradecimiento
| desagradecer
}}
=== อ่านเพิ่ม ===
* {{R:es:DRAE}}
== ภาษาอัสตูเรียส ==
=== รูปแบบอื่น ===
* {{alt|ast|agraecer||Central Asturias|eye dialect}}
* {{alt|ast|agradescer||obsolete}}
=== รากศัพท์ ===
จาก{{affix|ast|a-|grau|-ecer}}
=== การออกเสียง ===
* {{ast-pr}}
=== คำกริยา ===
{{ast-verb}}
# [[ขอบคุณ]]
# [[ซาบซึ้ง]]
==== การผันรูป ====
{{ast-conj-cer|agrade}}
==== ลูกคำ ====
{{col|ast|agradecimientu}}
=== อ่านเพิ่ม ===
* {{R:ast:DALLA}}
* {{R:ast:DGLA}}
t50jm3fiwrzzowebu19tycixqnju3u4
5729317
5729316
2026-07-20T05:43:22Z
Octahedron80
267
/* รูปแบบอื่น */
5729317
wikitext
text/x-wiki
== ภาษากาลิเซีย ==
=== รากศัพท์ ===
จาก {{affix|gl|a-|grado|-ecer}}
=== คำกริยา ===
{{gl-verb}}<br>
{{gl-reinteg-verb}}
# [[ขอบคุณ]]
# [[ซาบซึ้ง]]
==== การผันรูป ====
{{gl-conj}}
{{gl-reinteg-conj}}
==== คำตรงข้าม ====
* {{l|gl|desagradecer}}
==== คำเกี่ยวข้อง ====
* {{l|gl|agradecemento}}
== ภาษาโปรตุเกส ==
=== รากศัพท์ ===
จาก {{affix|pt|a-|grado|-ecer|id2=Etymology 3 2}}
=== การออกเสียง ===
{{pt-IPA|agradecêr}}
* {{hyph|pt|a|gra|de|cer}}
=== คำกริยา ===
{{pt-verb}}
# [[ขอบคุณ]]
# [[ซาบซึ้ง]]
==== การผันรูป ====
{{pt-conj}}
==== คำตรงข้าม ====
* {{l|pt|desagradecer}}
==== คำเกี่ยวข้อง ====
* {{l|pt|agradecimento}}
== ภาษาสเปน ==
=== รากศัพท์ ===
{{inh+|es|osp|agradesçer}}; เทียบเท่า {{affix|es|a-|grado|-ecer|t2=will; liking, preference}}; ร่วมเชื้อสายกับ{{cog|an|agradeixer}} และ{{cog|ca|agrair}}
=== การออกเสียง ===
{{es-pr|+<audio:LL-Q1321 (spa)-AdrianAbdulBaha-agradecer.wav<a:Colombia>>}}
=== คำกริยา ===
{{es-verb}}
# {{lb|es|transitive}} [[ขอบคุณ]]
#: {{ant|es|desagradecer}}
#: {{ux|es|Le '''agradecí''' mucho su ayuda.|I '''thanked''' him very much for his help.}}
# {{lb|es|transitive}} [[ซาบซึ้ง]]
#: {{ant|es|desagradecer}}
==== การผันรูป ====
{{es-conj}}
==== ลูกคำ ====
{{col-auto|es
| agradecido
| agradecimiento
| desagradecer
}}
=== อ่านเพิ่ม ===
* {{R:es:DRAE}}
== ภาษาอัสตูเรียส ==
=== รูปแบบอื่น ===
* {{alt|ast|agraecer||อัสตูเรียสตอนกลาง|eye dialect}}
* {{alt|ast|agradescer||obsolete}}
=== รากศัพท์ ===
จาก{{affix|ast|a-|grau|-ecer}}
=== การออกเสียง ===
* {{ast-pr}}
=== คำกริยา ===
{{ast-verb}}
# [[ขอบคุณ]]
# [[ซาบซึ้ง]]
==== การผันรูป ====
{{ast-conj-cer|agrade}}
==== ลูกคำ ====
{{col|ast|agradecimientu}}
=== อ่านเพิ่ม ===
* {{R:ast:DALLA}}
* {{R:ast:DGLA}}
lklv1v379r57d1u63lqmmj4ubsdqc0y
จักขุ
0
244042
5729212
1881333
2026-07-20T03:47:44Z
Alifshinobi
397
5729212
wikitext
text/x-wiki
{{also/auto}}
== ภาษาไทย ==
=== รากศัพท์ ===
{{bor+|th|pi|จกฺขุ}}
=== การออกเสียง ===
{{th-pron|จัก-ขุ}}
=== คำนาม ===
{{th-noun}}
# {{lb|th|กลอน}} [[ตา]] (อวัยวะ)
==== ดูเพิ่ม ====
* {{l|th|จักษุ}}
== ภาษาคำเมือง ==
=== การออกเสียง ===
* {{IPA|nod|/t͡ɕak˨˦.xuʔ˨˦/|a=เชียงใหม่}}
=== คำนาม ===
{{nod-noun}}
# {{altform|nod|ᨧᩢ᩠ᨠᨡᩩ|t=[[ตั๊กแตน]][[สีเขียว]][[ชนิด]][[หนึ่ง]]}}
# {{altform|nod|ᨧᨠ᩠ᨡᩩ|t=[[จักขุ#ภาษาไทย|จักขุ]] [ตา], ดวงตา}}
== ภาษาบาลี ==
=== คำนาม ===
{{pi-noun|n}}
# {{pi-sc|t1|จกฺขุ}}
<!--
==== การผันรูป ====
{{pi-decl-noun|g=n}}
-->
9gufe2w9nuz5feamg2r9xpetupf9u6o
มอดูล:nl-verbs
828
246117
5729209
5684363
2026-07-20T03:44:12Z
Octahedron80
267
5729209
Scribunto
text/plain
local m_utilities = require("Module:utilities")
local m_links = require("Module:links")
local m_table = require("Module:table")
local lang = require("Module:languages").getByCode("nl")
local export = {}
-- Functions that do the actual inflecting by creating the forms of a basic term.
local inflections = {}
local irregular = {}
-- The main entry point.
-- This is the only function that can be invoked from a template.
function export.show(frame)
local infl_type = frame.args[1] or error("Inflection type has not been specified. Please pass parameter 1 to the module invocation.")
if not inflections[infl_type] then
error("Unknown inflection type '" .. infl_type .. "'")
end
local params = {
["aux"] = {},
["aux2"] = {},
["bot"] = {type = "boolean"},
["pref"] = {},
["sep"] = {},
["trans"] = {},
["trans2"] = {},
["vnoun"] = {},
["vnoung"] = {},
["vnoun2"] = {},
}
for key, val in pairs(inflections[infl_type].params) do
params[key] = val
end
local args = require("Module:parameters").process(frame:getParent().args, params)
local data = {forms = {}, title = nil, categories = {}}
inflections[infl_type].func(args, data)
postprocess(args, data)
if (args["bot"] or "") ~= "" then
return make_bot_list(data, args["sep"])
else
return make_table(data, args["sep"]) .. m_utilities.format_categories(data.categories, lang)
end
end
function postprocess(args, data)
-- Verbal noun
local vnoun = args["vnoun"]
local vnoun2 = args["vnoun2"]
if vnoun then
data.forms["vnoun"] = {vnoun, vnoun2}
end
-- Prefixed and separable
local pref = args["pref"]
local sep = args["sep"]
if pref then
table.insert(data.categories, "คำกริยาเติมอุปสรรคภาษาดัตช์")
table.insert(data.categories, "คำกริยาเติมอุปสรรค " .. pref .. "- ภาษาดัตช์")
data.title = data.title .. ", เติมอุปสรรค"
end
if sep then
table.insert(data.categories, "คำกริยาแยกได้ภาษาดัตช์")
table.insert(data.categories, "คำกริยาแยกได้ด้วย " .. sep .. " ภาษาดัตช์")
data.title = data.title .. ", แยกได้"
end
if not pref and not sep then
table.insert(data.categories, "คำกริยาพื้นฐานภาษาดัตช์")
end
local abbr = args["abbr"]
add_pref(data, pref, abbr)
add_sep(data, sep, pref, abbr)
data.aux = args["aux"] or "hebben"
if args["aux"] then
if args["aux"] == "zijn" then
require("Module:debug").track("nl-verb/zijn")
else
require("Module:debug").track("nl-verb/aux")
end
end
if args["aux2"] then
require("Module:debug").track("nl-verb/aux2")
end
data.trans = args["trans"]
if data.trans then
if data.trans == "acc" then
table.insert(data.categories, "คำกริยากรรมการกภาษาดัตช์")
elseif data.trans == "erg" then
table.insert(data.categories, "คำกริยาสาธกการกภาษาดัตช์")
elseif data.trans == "unerg" then
table.insert(data.categories, "คำกริยาอสาธกการกภาษาดัตช์")
elseif data.trans == "unacc" then
table.insert(data.categories, "คำกริยาอกรรมการกภาษาดัตช์")
else
error("The \"trans=\" parameter has an invalid value. Valid are: acc, erg, unerg, unacc.")
end
end
data.trans2 = args["trans2"]
if data.trans2 then
if data.trans2 == "acc" then
table.insert(data.categories, "คำกริยากรรมการกภาษาดัตช์")
elseif data.trans2 == "erg" then
table.insert(data.categories, "คำกริยาสาธกการกภาษาดัตช์")
elseif data.trans2 == "unerg" then
table.insert(data.categories, "คำกริยาอสาธกการกภาษาดัตช์")
elseif data.trans2 == "unacc" then
table.insert(data.categories, "คำกริยาอกรรมการกภาษาดัตช์")
else
error("The \"trans2=\" parameter has an invalid value. Valid are: acc, erg, unerg, unacc.")
end
end
if not args["trans"] then
require("Module:debug").track("nl-verb/no trans")
end
end
-- Add the unstressed prefix to all the verb forms, or
-- if there is no prefix, add ge- to the past participle
function add_pref(data, pref, abbr)
if pref then
-- Add prefix before every form
for key, form in pairs(data.forms) do
for i, subform in ipairs(form) do
-- Add hyphen if abbr=1
data.forms[key][i] = not abbr and pref .. subform or pref .. "-" .. subform
end
end
else
-- Add ge- prefix before past participle
if data.forms["past_ptc"] then
for i, subform in ipairs(data.forms["past_ptc"]) do
if not abbr then
-- Place a diaeresis on the initial vowel of the stem if necessary
if mw.ustring.find(subform, "^[eiu]") and not mw.ustring.find(subform, "^ij") then
subform = subform:gsub("^e", "ë"):gsub("^i", "ï"):gsub("^u", "ü")
end
end
-- Add hyphen if abbr=1
data.forms["past_ptc"][i] = not abbr and "ge" .. subform or "ge-" .. subform
end
end
end
end
-- Add the separable part to all the verb forms
function add_sep(data, sep, pref, abbr)
if not sep then
return
end
-- Add main clause forms
local mainforms = {}
for key, form in pairs(data.forms) do
if (key:find("^pres_") or key:find("^past_")) and not key:find("_ptc$") then
mainforms[key .. "_main"] = mw.clone(form)
end
end
for key, form in pairs(mainforms) do
data.forms[key] = form
end
-- Add separable part to forms
for key, form in pairs(data.forms) do
if key:find("_main$") or key:find("^impr_") then
-- For main-clause finite forms, add the separable part after the form, separated by a space
for i, subform in ipairs(data.forms[key]) do
data.forms[key][i] = data.forms[key][i] .. " " .. sep
end
else
-- For all other forms, add the separable part before the form, with no space
for i, subform in ipairs(data.forms[key]) do
-- Add a hyphen after the separable part if it ends with the same vowel
-- that the main/prefixed verb begins with, for verbs like na-apen,
-- also if abbr=1 but not for the past participle
if (mw.ustring.find("aeiou", sep:sub(-1)) and sep:sub(-1) == subform:sub(1, 1)) or (abbr and key ~= "past_ptc" and not pref) then
subform = sep .. "-" .. subform
else
subform = sep .. subform
end
data.forms[key][i] = subform
end
end
end
end
--[=[
*** REGULAR VERBS (mostly) ***
]=]--
local function addform(data, key, form, index)
if data.forms[key] then
if index then
table.insert(data.forms[key], index, form)
else
table.insert(data.forms[key], form)
end
else
data.forms[key] = {form}
end
end
-- Conjugate a weak verb
inflections["weak"] = {
params = {
[1] = {required = true},
[2] = {},
[3] = {},
["dt"] = {},
["abbr"] = {type = "boolean"},
},
func = function(args, data)
table.insert(data.categories, "คำกริยาอ่อนภาษาดัตช์")
data.title = "อ่อน"
local stems = {}
local abbr = args["abbr"]
stems["pres"] = args[1] or "{{{1}}}"
if not abbr then
stems["pres_e"] = args[2]
present(data, stems)
local dt = args["dt"] or (stems["pres_e"]:find("[cfhkpqstx]e$") and "t" or "d")
stems["past"] = stems["pres"]:gsub("([^aeiou])i$", "%1ie") .. dt .. "e"
past(data, stems)
stems["past_ptc"] = args[3] or make_long(stems["pres"]) .. (stems["pres"]:find("[dt]$") and "" or dt)
data.forms["past_ptc"] = {stems["past_ptc"]}
if stems["past_ptc"]:find("n$") then
table.insert(data.categories, "Dutch weak verbs with strong past participles")
data.title = data.title .. " with strong past participle"
end
-- "zeggen" has an irregular past tense alongside the regular one
if stems["pres"] == "zeg" then
past(data, {["past"] = "zei", ["past_e"] = "zeide", ["past_t"] = "zeidt"}, 1)
table.insert(data.categories, "คำกริยาอ่อนไม่ปรกติภาษาดัตช์")
data.title = data.title .. ", ไม่ปรกติ"
end
else
stems["pres_e"] = stems["pres"] .. "'e"
stems["pres_t"] = stems["pres"] .. "'t"
present(data, stems)
local dt = args["dt"] or (stems["pres"]:find("[fpsxFPSX]$") and "t" or "d")
stems["past"] = stems["pres"] .. "'" .. dt .. "e"
past(data, stems)
stems["past_ptc"] = stems["pres"] .. "'" .. dt
data.forms["past_ptc"] = {stems["past_ptc"]}
end
end
}
-- Conjugate a weak verb with a past tense in -cht
inflections["weak-cht"] = {
params = {
[1] = {required = true},
[2] = {},
[3] = {required = true},
},
func = function(args, data)
table.insert(data.categories, "คำกริยาอ่อนภาษาดัตช์ (-cht)")
data.title = "weak with past in ''-cht''"
local stems = {}
stems["pres"] = args[1] or "{{{1}}}"
stems["pres_e"] = args[2]
present(data, stems)
stems["past"] = (args[3] or "{{{3}}}") .. "cht"
past(data, stems)
stems["past_ptc"] = stems["past"]
data.forms["past_ptc"] = {stems["past_ptc"]}
end
}
local syncopic_verbs = m_table.listToSet {
"houd", "glijd", "rijd", "snijd"
}
-- Conjugate a strong verb
inflections["strong"] = {
params = {
[1] = {required = true},
[2] = {required = true},
[3] = {required = true},
[4] = {},
[5] = {},
[6] = {},
["class"] = {},
},
func = function(args, data)
local class = args["class"]
table.insert(data.categories, "คำกริยาแข็ง" .. (class and "กลุ่ม " .. class .. " " or "") .. "ภาษาดัตช์")
data.title = "แข็ง" .. (class and "กลุ่ม " .. class or "")
local stems = {}
stems["pres"] = args[1] or "{{{1}}}"
stems["pres_e"] = args[4]
present(data, stems)
stems["past"] = args[2] or "{{{2}}}"
stems["past_e"] = args[5]
stems["past_t"] = args[6]
past(data, stems)
stems["past_ptc"] = args[3] or "{{{3}}}"
data.forms["past_ptc"] = {stems["past_ptc"]}
-- If the final consonant of the past participle is not n, then it is a weak past participle.
if not stems["past_ptc"]:find("n$") then
table.insert(data.categories, "Dutch strong verbs with weak past participles")
data.title = data.title .. " with weak past participle"
end
-- some verbs have alternative forms without the final -d
if syncopic_verbs[stems["pres"]] then
local syncopic_form = stems["pres"]:sub(1,-2)
addform(data, "pres_indc_1sg", syncopic_form, 1)
addform(data, "pres_indc_jij_inversion", syncopic_form, 1)
addform(data, "impr_sg", syncopic_form, 1)
table.insert(data.categories, "คำกริยาแข็งไม่ปรกติภาษาดัตช์")
data.title = data.title .. ", ไม่ปรกติเล็กน้อย"
elseif stems["pres"] == "scheid" and args["sep"] == "uit" then
addform(data, "pres_indc_1sg", "schei", 1)
addform(data, "pres_indc_jij_inversion", "schei", 1)
addform(data, "impr_sg", "schei", 1)
addform(data, "past_indc_sg", "schee", 1)
addform(data, "past_indc_pl", "scheeën", 1)
addform(data, "past_ptc", "scheeën", 1)
table.insert(data.categories, "คำกริยาแข็งไม่ปรกติภาษาดัตช์")
data.title = data.title .. ", ไม่ปรกติเล็กน้อย"
-- If the initial or final consonants of the present stem don't match, then this verb is irregular.
elseif stems["pres"]:match("^([^aeiouyj]*)") ~= stems["past"]:match("^([^aeiouyj]*)") or stems["pres"]:match("([^aeiouyj]*)$") ~= stems["past"]:match("([^aeiouyj]*)$") then
table.insert(data.categories, "คำกริยาแข็งไม่ปรกติภาษาดัตช์")
data.title = data.title .. ", ไม่ปรกติ"
end
end
}
-- Conjugate an irregular verb
inflections["irregular"] = {
params = {
[1] = {required = true},
},
func = function(args, data)
local base = args[1] or "zijn"
if irregular[base] then
irregular[base](data)
else
error("Unknown irregular verb '" .. base .. "'.")
end
end
}
--[=[
*** IRREGULAR VERB TYPES ***
]=]--
irregular["doen"] = function(data)
table.insert(data.categories, "คำกริยาไม่ปรกติภาษาดัตช์")
data.title = "ไม่ปรกติ"
present(data, {["pres"] = "doe", ["pres_e"] = "doe"})
past(data, {["past"] = "deed", ["past_e"] = "dede"})
data.forms["past_ptc"] = {"daan"}
data.forms["pres_indc_u"] = {"doet"}
data.forms["pres_indc_3sg"] = {"doet"}
end
irregular["hebben"] = function(data)
table.insert(data.categories, "คำกริยาอ่อนไม่ปรกติภาษาดัตช์")
data.title = "อ่อน, ไม่ปรกติ"
present(data, {["pres"] = "heb", ["pres_e"] = "hebbe"})
past(data, {["past"] = "had", ["past_e"] = "hadde"})
data.forms["past_ptc"] = {"had"}
data.forms["pres_indc_u"] = {"hebt", "heeft"}
data.forms["pres_indc_3sg"] = {"heeft"}
end
irregular["durven"] = function(data)
table.insert(data.categories, "คำกริยาอดีตกาลสิ้นสุด-ปัจจุบันกาลภาษาดัตช์")
data.title = "อดีตกาลสิ้นสุด-ปัจจุบันกาล"
present(data, {["pres"] = "durf", ["pres_e"] = "durve", ["pres_t"] = "durft"})
past(data, {["past"] = "dorst"})
data.forms["past_ptc"] = {"durfd"}
end
irregular["kunnen"] = function(data)
table.insert(data.categories, "คำกริยาอดีตกาลสิ้นสุด-ปัจจุบันกาลภาษาดัตช์")
data.title = "อดีตกาลสิ้นสุด-ปัจจุบันกาล"
present(data, {["pres"] = "kan", ["pres_e"] = "kunne", ["pres_t"] = "kunt"})
past(data, {["past"] = "kon", ["past_e"] = "konde", ["past_t"] = "kondt"})
addform(data, "pres_indc_jij", "kan")
addform(data, "pres_indc_u", "kan")
data.forms["pres_indc_jij_inversion"] = {"kun"}
data.forms["pres_indc_3sg"] = {"kan"}
data.forms["past_ptc"] = {"kund"}
end
irregular["moeten"] = function(data)
table.insert(data.categories, "คำกริยาอดีตกาลสิ้นสุด-ปัจจุบันกาลภาษาดัตช์")
data.title = "อดีตกาลสิ้นสุด-ปัจจุบันกาล"
present(data, {["pres"] = "moet"})
past(data, {["past"] = "moest"})
data.forms["past_ptc"] = {"moeten"}
end
irregular["mogen"] = function(data)
table.insert(data.categories, "คำกริยาอดีตกาลสิ้นสุด-ปัจจุบันกาลภาษาดัตช์")
data.title = "อดีตกาลสิ้นสุด-ปัจจุบันกาล"
present(data, {["pres"] = "mag", ["pres_e"] = "moge", ["pres_t"] = "moogt"})
past(data, {["past"] = "mocht"})
data.forms["pres_indc_jij"] = {"mag"}
data.forms["pres_indc_u"] = {"mag"}
data.forms["pres_indc_3sg"] = {"mag"}
data.forms["past_ptc"] = {"mogen"}
end
irregular["weten"] = function(data)
table.insert(data.categories, "คำกริยาอดีตกาลสิ้นสุด-ปัจจุบันกาลภาษาดัตช์")
data.title = "อดีตกาลสิ้นสุด-ปัจจุบันกาล"
present(data, {["pres"] = "weet", ["pres_e"] = "wete"})
past(data, {["past"] = "wist"})
data.forms["past_ptc"] = {"weten"}
end
irregular["willen"] = function(data)
table.insert(data.categories, "คำกริยาไม่ปรกติภาษาดัตช์")
data.title = "ไม่ปรกติ"
present(data, {["pres"] = "wil", ["pres_e"] = "wille"})
past(data, {["past"] = "wilde"})
past(data, {["past"] = "wou", ["past_e"] = "woude", ["past_t"] = "woudt"})
data.forms["past_ptc"] = {"wild"}
addform(data, "pres_indc_jij", "wil")
addform(data, "pres_indc_u", "wil")
data.forms["pres_indc_3sg"] = {"wil"}
end
irregular["zijn"] = function(data)
table.insert(data.categories, "คำกริยาไม่ปรกติภาษาดัตช์")
table.insert(data.categories, "คำกริยาsuppletiveภาษาดัตช์")
data.title = "ไม่ปรกติ, suppletive"
present(data, {["pres"] = "ben", ["pres_e"] = "zij", ["pres_t"] = "zijt"})
past(data, {["past"] = "was", ["past_e"] = "ware", ["past_t"] = "waart"})
data.forms["past_ptc"] = {"weest"}
data.forms["pres_indc_jij"] = {"bent"}
data.forms["pres_indc_u"] = {"bent", "is"}
data.forms["pres_indc_3sg"] = {"is"}
addform(data, "impr_sg", "wees", 1)
addform(data, "impr_pl", "weest", 1)
end
irregular["zullen"] = function(data)
table.insert(data.categories, "คำกริยาอดีตกาลสิ้นสุด-ปัจจุบันกาลภาษาดัตช์")
data.title = "อดีตกาลสิ้นสุด-ปัจจุบันกาล"
present(data, {["pres"] = "zal", ["pres_e"] = "zulle", ["pres_t"] = "zult"})
past(data, {["past"] = "zou", ["past_e"] = "zoude", ["past_t"] = "zoudt"})
data.forms["pres_indc_jij"] = {"zult", "zal"}
data.forms["pres_indc_jij_inversion"] = {"zul"}
data.forms["pres_indc_u"] = {"zult", "zal"}
data.forms["pres_indc_3sg"] = {"zal"}
end
--[=[
*** HELPER FUNCTIONS ***
]=]--
-- Create regular present-tense forms
function present(data, stems, index)
if not stems["pres_e"] then
stems["pres_e"] = stems["pres"] .. "e"
end
if not stems["pres_t"] then
if mw.ustring.find(stems["pres"], "t$") then
stems["pres_t"] = make_long(stems["pres"])
else
stems["pres_t"] = make_long(stems["pres"]) .. "t"
end
end
addform(data, "pres_indc_1sg", stems["pres"], index)
addform(data, "pres_indc_jij", stems["pres_t"], index)
if mw.ustring.find(stems["pres"], "t$") or mw.ustring.find(stems["pres"], "mag$") or mw.ustring.find(stems["pres"], "wil$") then
-- do nothing
else
addform(data, "pres_indc_jij_inversion", stems["pres"], index)
end
addform(data, "pres_indc_gij", stems["pres_t"], index)
addform(data, "pres_indc_u" , stems["pres_t"], index)
addform(data, "pres_indc_3sg", stems["pres_t"], index)
addform(data, "pres_indc_pl" , make_long(stems["pres_e"]) .. "n", index)
addform(data, "pres_subj_sg" , stems["pres_e"], index)
addform(data, "impr_sg", stems["pres"], index)
addform(data, "impr_pl", stems["pres_t"], index)
addform(data, "infinitive", make_long(stems["pres_e"]) .. "n", index)
addform(data, "pres_ptc", make_long(stems["pres_e"]) .. "nd", index)
end
-- Create regular past-tense forms
function past(data, stems, index)
if not stems["past_e"] then
if mw.ustring.find(stems["past"], "e$") then
stems["past_e"] = stems["past"]
else
stems["past_e"] = stems["past"] .. "e"
end
end
if not stems["past_t"] then
if mw.ustring.find(stems["past"], "[^eio]e$") or mw.ustring.find(stems["past"], "[të]$") then
stems["past_t"] = stems["past"]
else
stems["past_t"] = stems["past"] .. "t"
end
end
addform(data, "past_indc_sg" , stems["past"], index)
addform(data, "past_indc_gij" , stems["past_t"], index)
addform(data, "past_indc_pl" , stems["past_e"] .. "n", index)
addform(data, "past_subj_sg" , stems["past_e"], index)
end
-- A small helper function for those few verbs that have a stem ending in a
-- vowel (like gaan, staan, skiën, echoën). This lengthens the stem-final vowel.
function make_long(form)
return (form:gsub("([^aeou])([aou])$", "%1%2%2"):gsub("([^aeiou])i$", "%1ie"))
end
-- Make the table
function make_table(data, hasSep)
local function show_form(form, inversion)
if not form then
return "—"
elseif type(form) ~= "table" then
error("a non-table value was given in the list of inflected forms.")
end
local ret = {}
for key, subform in ipairs(form) do
table.insert(ret, m_links.full_link({lang = lang, term = subform}))
end
if inversion then
return table.concat(ret, "<sup>2</sup>, ")
else
return table.concat(ret, ", ")
end
end
local function repl(param)
if param == "lemma" then
return m_links.full_link({lang = lang, alt = mw.loadData("Module:headword/data").pagename}, "term")
elseif param == "info" then
return data.title and " (" .. data.title .. ")" or ""
elseif param:find("inversion") then
return show_form(data.forms[param], true)
else
return show_form(data.forms[param], false)
end
end
local wikicode = [=[
{| style="border:1px solid var(--wikt-palette-indigo-3,#CCCCFF); text-align:center; line-height:125%" class="inflection-table vsSwitcher" data-toggle-category="inflection" cellspacing="1" cellpadding="3"
|- style="background:var(--wikt-palette-indigo-3,#CCCCFF); color:inherit"
! colspan="5" class="vsToggleElement" style="text-align: left" | การผันรูปของ {{{lemma}}}{{{info}}}
|- class="vsShow" style="background:var(--wikt-palette-indigo-0,#F2F2FF); color:inherit"
! style="background:var(--wikt-palette-indigo-2,#CCCCFF); color:inherit" | [[ภาคผนวก:อภิธานศัพท์#รูปกริยากลาง|รูปกริยากลาง]]
| style="min-width: 12em;" | {{{infinitive}}}
|- class="vsShow" style="background:var(--wikt-palette-indigo-0,#F2F2FF); color:inherit"
! style="background:var(--wikt-palette-indigo-2,#CCCCFF); color:inherit" | [[ภาคผนวก:อภิธานศัพท์#อดีตกาล|อดีตกาล]] [[ภาคผนวก:อภิธานศัพท์#เอกพจน์|เอกพจน์]]
| ]=] .. (hasSep and "{{{past_indc_sg_main}}}" or "{{{past_indc_sg}}}") .. [=[
|- class="vsShow" style="background:var(--wikt-palette-indigo-0,#F2F2FF); color:inherit"
! style="background:var(--wikt-palette-indigo-2,#CCCCFF); color:inherit" | [[ภาคผนวก:อภิธานศัพท์#อดีตกาล|อดีตกาล]] [[ภาคผนวก:อภิธานศัพท์#รูปกริยาขยาย|รูปกริยาขยาย]]
| {{{past_ptc}}}
|- class="vsHide" style="background:var(--wikt-palette-indigo-0,#F2F2FF); color:inherit"
! style="background:var(--wikt-palette-indigo-2,#CCCCFF); color:inherit" | [[ภาคผนวก:อภิธานศัพท์#รูปกริยากลาง|รูปกริยากลาง]]
| colspan="4" | {{{infinitive}}}
|- class="vsHide" style="background:var(--wikt-palette-indigo-0,#F2F2FF); color:inherit"
! style="background:var(--wikt-palette-indigo-2,#CCCCFF); color:inherit" | [[ภาคผนวก:อภิธานศัพท์#รูปกริยาเป็นนาม|รูปกริยาเป็นนาม]]
| colspan="4" | {{{infinitive}}} ]=] .. require("Module:gender and number").format_list({"n"}) .. (hasSep and [=[
|- class="vsHide" style="background:var(--wikt-palette-indigo-1,#E6E6FF); color:inherit"
|
! colspan="2" style="font-weight: bold;" | [[ภาคผนวก:อภิธานศัพท์#อนุประโยคอิสระ|มุขยประโยค]]
! colspan="2" style="font-weight: bold;" | [[ภาคผนวก:อภิธานศัพท์#อนุประโยคไม่อิสระ|อนุประโยคซ้อนความ]]
|- class="vsHide" style="background:var(--wikt-palette-indigo-1,#E6E6FF); color:inherit"
|
! style="min-width: 12em; font-weight: bold" | [[ภาคผนวก:อภิธานศัพท์#ปัจจุบันกาล|ปัจจุบันกาล]]
! style="min-width: 12em; font-weight: bold" | [[ภาคผนวก:อภิธานศัพท์#อดีตกาล|อดีตกาล]]
! style="min-width: 12em; font-weight: bold" | [[ภาคผนวก:อภิธานศัพท์#ปัจจุบันกาล|ปัจจุบันกาล]]
! style="min-width: 12em; font-weight: bold" | [[ภาคผนวก:อภิธานศัพท์#อดีตกาล|อดีตกาล]]]=] or [=[
|- class="vsHide" style="background:var(--wikt-palette-indigo-1,#E6E6FF); color:inherit"
|
! style="min-width: 12em; font-weight: bold" | [[ภาคผนวก:อภิธานศัพท์#ปัจจุบันกาล|ปัจจุบันกาล]]
! style="min-width: 12em; font-weight: bold" | [[ภาคผนวก:อภิธานศัพท์#อดีตกาล|อดีตกาล]]
|-]=]) .. [=[
|- class="vsHide" style="background:var(--wikt-palette-indigo-0,#F2F2FF); color:inherit"
! style="background:var(--wikt-palette-indigo-2,#CCCCFF); color:inherit" | [[ภาคผนวก:อภิธานศัพท์#บุรุษที่หนึ่ง|บุรุษที่หนึ่ง]] [[ภาคผนวก:อภิธานศัพท์#เอกพจน์|เอกพจน์]]
| ]=] .. (hasSep and "{{{pres_indc_1sg_main}}} || {{{past_indc_sg_main}}} || " or "") .. [=[{{{pres_indc_1sg}}} || {{{past_indc_sg}}}
|- class="vsHide" style="background:var(--wikt-palette-indigo-0,#F2F2FF); color:inherit"
! style="background:var(--wikt-palette-indigo-2,#CCCCFF); color:inherit" | [[ภาคผนวก:อภิธานศัพท์#บุรุษที่สอง|บุรุษที่สอง]] [[ภาคผนวก:อภิธานศัพท์#เอกพจน์|เอกพจน์]] (<span lang="nl">[[jij#ภาษาดัตช์|jij]]</span>)
| ]=] .. (hasSep and "{{{pres_indc_jij_main}}}, {{{pres_indc_jij_inversion_main}}}<sup>2</sup> || {{{past_indc_sg_main}}} || " or "")
.. (hasSep and "{{{pres_indc_jij}}} || {{{past_indc_sg}}} "
or "{{{pres_indc_jij}}}, {{{pres_indc_jij_inversion}}}<sup>2</sup> || {{{past_indc_sg}}}") .. [=[
|- class="vsHide" style="background:var(--wikt-palette-indigo-0,#F2F2FF); color:inherit"
! style="background:var(--wikt-palette-indigo-2,#CCCCFF); color:inherit" | [[ภาคผนวก:อภิธานศัพท์#บุรุษที่สอง|บุรุษที่สอง]] [[ภาคผนวก:อภิธานศัพท์#เอกพจน์|เอกพจน์]] (<span lang="nl">[[u#ภาษาดัตช์|u]]</span>)
| ]=] .. (hasSep and "{{{pres_indc_u_main}}} || {{{past_indc_sg_main}}} || " or "") .. [=[{{{pres_indc_u}}} || {{{past_indc_sg}}}
|- class="vsHide" style="background:var(--wikt-palette-indigo-0,#F2F2FF); color:inherit"
! style="background:var(--wikt-palette-indigo-2,#CCCCFF); color:inherit" | [[ภาคผนวก:อภิธานศัพท์#บุรุษที่สอง|บุรุษที่สอง]] [[ภาคผนวก:อภิธานศัพท์#เอกพจน์|เอกพจน์]] (<span lang="nl">[[gij#ภาษาดัตช์|gij]]</span>)
| ]=] .. (hasSep and "{{{pres_indc_gij_main}}} || {{{past_indc_gij_main}}} || " or "") .. [=[{{{pres_indc_gij}}} || {{{past_indc_gij}}}
|- class="vsHide" style="background:var(--wikt-palette-indigo-0,#F2F2FF); color:inherit"
! style="background:var(--wikt-palette-indigo-2,#CCCCFF); color:inherit" | [[ภาคผนวก:อภิธานศัพท์#บุรุษที่สาม|บุรุษที่สาม]] [[ภาคผนวก:อภิธานศัพท์#เอกพจน์|เอกพจน์]]
| ]=] .. (hasSep and "{{{pres_indc_3sg_main}}} || {{{past_indc_sg_main}}} || " or "") .. [=[{{{pres_indc_3sg}}} || {{{past_indc_sg}}}
|- class="vsHide" style="background:var(--wikt-palette-indigo-0,#F2F2FF); color:inherit"
! style="background:var(--wikt-palette-indigo-2,#CCCCFF); color:inherit" | [[ภาคผนวก:อภิธานศัพท์#พหูพจน์|พหูพจน์]]
| ]=] .. (hasSep and "{{{pres_indc_pl_main}}} || {{{past_indc_pl_main}}} || " or "") .. [=[{{{pres_indc_pl}}} || {{{past_indc_pl}}}
|- class="vsHide" style="background:var(--wikt-palette-indigo-1,#E6E6FF); height: 0.5em"
|
| colspan="2" |]=] .. (hasSep and [=[ || colspan="2" |]=] or "") .. [=[
|- class="vsHide" style="background:var(--wikt-palette-indigo-0,#F2F2FF); color:inherit"
! style="background:var(--wikt-palette-indigo-2,#CCCCFF); color:inherit" | [[ภาคผนวก:อภิธานศัพท์#มาลาสมมุติ|มาลาสมมุติ]] [[ภาคผนวก:อภิธานศัพท์#เอกพจน์|เอกพจน์]]<sup>1</sup>
| ]=] .. (hasSep and "{{{pres_subj_sg_main}}} || {{{past_subj_sg_main}}} || " or "") .. [=[{{{pres_subj_sg}}} || {{{past_subj_sg}}}
|- class="vsHide" style="background:var(--wikt-palette-indigo-0,#F2F2FF); color:inherit"
! style="background:var(--wikt-palette-indigo-2,#CCCCFF); color:inherit" | [[ภาคผนวก:อภิธานศัพท์#มาลาสมมุติ|มาลาสมมุติ]] [[ภาคผนวก:อภิธานศัพท์#พหูพจน์|พหูพจน์]]<sup>1</sup>
| ]=] .. (hasSep and "{{{pres_indc_pl_main}}} || {{{past_indc_pl_main}}} || " or "") .. [=[{{{pres_indc_pl}}} || {{{past_indc_pl}}}
|- class="vsHide" style="background:var(--wikt-palette-indigo-1,#E6E6FF); height: 0.5em"
|
| colspan="2" |]=] .. (hasSep and [=[ || rowspan="5" colspan="2" |]=] or "") .. [=[
|- class="vsHide" style="background:var(--wikt-palette-indigo-0,#F2F2FF); color:inherit"
! style="background:var(--wikt-palette-indigo-2,#CCCCFF); color:inherit" | [[ภาคผนวก:อภิธานศัพท์#มาลาสั่ง|มาลาสั่ง]] [[ภาคผนวก:อภิธานศัพท์#เอกพจน์|เอกพจน์]]
| {{{impr_sg}}}
| rowspan="2" style="background:var(--wikt-palette-indigo-1,#E6E6FF); color:inherit" |
|- class="vsHide" style="background:var(--wikt-palette-indigo-0,#F2F2FF); color:inherit"
! style="background:var(--wikt-palette-indigo-2,#CCCCFF); color:inherit" | [[ภาคผนวก:อภิธานศัพท์#มาลาสั่ง|มาลาสั่ง]] [[ภาคผนวก:อภิธานศัพท์#พหูพจน์|พหูพจน์]]<sup>1</sup>
| {{{impr_pl}}}
|- class="vsHide" style="background:var(--wikt-palette-indigo-1,#E6E6FF); height: 0.5em"
|
| colspan="2" |
|- class="vsHide" style="background:var(--wikt-palette-indigo-0,#F2F2FF); color:inherit"
! style="background:var(--wikt-palette-indigo-2,#CCCCFF); color:inherit" | [[ภาคผนวก:อภิธานศัพท์#รูปกริยาขยาย|รูปกริยาขยาย]]
| {{{pres_ptc}}} || {{{past_ptc}}}
|- class="vsHide" style="background:var(--wikt-palette-indigo-1,#E6E6FF); color:inherit"
| colspan="5" style="text-align:left; vertical-align:top; font-size: smaller; line-height: 1em"| <sup>1)</sup> [[ภาคผนวก:อภิธานศัพท์#โบราณ|โบราณ]] <sup>2)</sup> ในกรณีของ[[ภาคผนวก:อภิธานศัพท์#การสลับที่|การสลับที่]]
|}]=]
wikicode = mw.ustring.gsub(wikicode, "{{{([a-z0-9_]+)}}}", repl)
-- remove 'empty' 2sg forms (duplicates in case of inversion) + note
if mw.ustring.find(wikicode, ", —<sup>2</sup>") then
wikicode = mw.ustring.gsub(wikicode, ', —<sup>2</sup>', '')
wikicode = mw.ustring.gsub(wikicode, ' <sup>2%)</sup> ในกรณีของ%[%[ภาคผนวก:อภิธานศัพท์#การสลับที่|การสลับที่%]%]', '')
end
return wikicode
end
function make_bot_list(data, hasSep)
local ret = ""
if hasSep then
ret = ret .. "* sep=1\n"
end
for key, form in pairs(data.forms) do
if type(form) == "table" then
for key2, subform in ipairs(form) do
ret = ret .. "* " .. key .. "_" .. key2 .. "=" .. subform .. "\n"
end
else
ret = ret .. "* " .. key .. "=" .. form .. "\n"
end
end
return ret
end
return export
tjtqzsf96pprxfjk0em65oymjfu89k0
มอดูล:ca-verb
828
248061
5729297
5684466
2026-07-20T05:32:37Z
Octahedron80
267
5729297
Scribunto
text/plain
--[=[
This module implements {{ca-conj}} and provides the underlying conjugation functions for {{ca-verb}}
(whose actual formatting is done in [[Module:ca-headword]]).
Authorship: Ben Wing <benwing2>
]=]
local export = {}
--[=[
TERMINOLOGY:
-- "slot" = A particular combination of tense/mood/person/number/etc.
Example slot names for verbs are "pres_1s" (present indicative first-person singular), "pres_sub_2s" (present
subjunctive second-person singular) "impf_sub_3p" (imperfect subjunctive third-person plural).
Each slot is filled with zero or more forms.
-- "form" = The conjugated Catalan form representing the value of a given slot.
-- "lemma" = The dictionary form of a given Catalan term. For Catalan, always the infinitive.
]=]
--[=[
FIXME:
--]=]
local lang = require("Module:languages").getByCode("ca")
local m_string_utilities = require("Module:string utilities")
local m_links = require("Module:links")
local m_table = require("Module:table")
local iut = require("Module:inflection utilities")
local put = require("Module:parse utilities")
local com = require("Module:ca-common")
local force_cat = false -- set to true for debugging
local check_for_red_links = false -- set to false for debugging
local rfind = mw.ustring.find
local rmatch = mw.ustring.match
local rsplit = mw.text.split
local rsubn = mw.ustring.gsub
local rsub = com.rsub
local u = mw.ustring.char
-- version of rsubn() that returns a 2nd argument boolean indicating whether a substitution was made.
local function rsubb(term, foo, bar)
local retval, nsubs = rsubn(term, foo, bar)
return retval, nsubs > 0
end
local function link_term(term, display, face)
return m_links.full_link({ lang = lang, term = term, alt = display }, face)
end
local front_vowel = "eèéiíï"
local front_vowel_c = "[" .. front_vowel .. "]"
local V = com.V -- vowel regex class
local C = com.C -- consonant regex class
-- IS_USER_STEM_OVERRIDE is prepended to user-supplied stem overrides to prevent `base.prefix` from being prepended.
-- IS_USER_FORM_OVERRIDE is similar but also prevents final devoicing (cf. Balearic pres_1s 'trob' of [[trobar]]).
-- Don't use 0xFFF0 in case we call a [[Module:parse-utilities]] function that uses it temporarily.
local IS_USER_STEM_OVERRIDE = u(0xFFF1)
local IS_USER_FORM_OVERRIDE = u(0xFFF2)
--[=[
Irregular verbs:
-ldre/-ndre verbs:
infinitive pres1s pres3s pres1p impf1s fut1s pret1s sub1s sub1p pp
caldre - cal [calent] calia caldrà calgué calgui - calgut,-
coldre colc col colem colia coldré colguí colgui colguem colt,colta
doldre dolc dol dolem dolia doldré dolguí dolgui dolguem dolgut,dolguda
moldre molc mol molem molia moldré molguí molgui molguem molt,molta
oldre olc ol olem olia oldré olguí olgui olguem olgut,olguda
-soldre -solc -sol -solem -solia -soldré -solguí -solgui -solguem -solt,-solta
(absoldre, dissoldre, resoldre)
toldre tolc tol tolem tolia toldré tolguí tolgui tolguem tolt,tolta
romandre romanc roman romanem romania romandré romanguí romangui romanguem romàs,romasa,romasos
encendre encenc encén encenem encenia encendré encenguí encengui encenguem encès,encesa,encesos
fendre fenc fen/-fèn fenem fenia fendré fenguí fengui fenguem fes/-fès,fesa,fesos
(defendre, ofendre)
-pendre -depenc -pèn -penem -penia -pendré -penguí -pengui -penguem -pès,-pesa,-pesos
(dependre,despendre,expendre,suspendre)
prendre prenc pren/-prèn prenem prenia prendré prenguí prengui prenguem pres/-près,presa,presos
(aprendre, comprendre, desprendre, emprendre, reprendre, sorprendre)
-tendre -tenc -tén -tenem -tenia -tendré -tenguí -tengui -tenguem -tès,-tesa,-tesos
(pres2s: atens, pres3p: atenen)
(atendre, contendre, distendre, entendre, estendre, pretendre)
vendre venc ven venem venia vendré venguí vengui venguem venut,venuda
(malvendre, revendre)
fondre fonc fon fonem fonia fondré fonguí fongui fonguem fos/-fós,fosa,fosos
(confondre, difondre, infondre, refondre)
enfondre enfonc enfon enfonem enfonia enfondré enfonguí enfongui enfonguem enfús,enfusa,enfusos
pondre ponc pon ponem ponia pondré ponguí pongui ponguem post,posta,postos
(compondre, correspondre, descompondre, respondre)
tondre tonc ton tonem tonia tondré tonguí tongui tonguem tos,tosa,tosos
cerndre cerno cern cernem cernia cerndré cerní cerni cernem cernut,cernuda
-ler verbs (mostly like -ldre verbs):
infinitive pres1s pres3s pres1p impf1s fut1s pret1s sub1s sub1p pp
caler (var. of caldre)
doler (var. of doldre)
soler solc sol solem solia soldré solguí solgui solguem solgut,solguda
valer/valdre valc val valem valia valdré valguí valgui valguem valgut,valguda
(prevaler, equivaler)
other -dre/-tre verbs (regular except sometimes pp):
infinitive pres1s pres3s pres1p impf1s fut1s pret1s sub1s sub1p pp
batre bato bat batem batia batré batí bati batem batut,batuda
-metre -meto -met -metem -metia -metré -metí -meti -metem -mès,-mesa,-mesos
(ad-, co-, compro-, e-, entremetre's, mal-, o-, per-, pro-, read-, re-, retrans-, sot-, tra-, trans-)
perdre perdo perd perdem perdia perdré perdí perdi perdem perdut,perduda
-ure verbs
infinitive pres1s pres3s pres1p impf1s impf1p fut1s pret1s sub1s sub1p pp
caure caic cau caiem queia quèiem cauré caiguí caigui caiguem caigut,caiguda
(decaure, recaure)
plaure plac plau plaem plaïa plaíem plauré plaguí plagui plaguem plagut,plaguda
(complaure)
raure rac rau raem raïa raíem rauré raguí ragui raguem ragut,raguda
beure bec beu bevem bevia bevíem beuré beguí begui beguem begut,beguda
(embeure)
creure crec creu creiem creia crèiem creuré creguí cregui creguem cregut,creguda
deure dec deu devem devia devíem deuré deguí degui deguem degut,deguda
jeure jec jeu jaiem jeia jèiem jauré jaguí jegui jaguem jagut,jaguda
(ajeure)
lleure - lleu [-] llevia - lleurà llegué llegui - llegut,-
seure sec seu seiem seia sèiem seuré seguí segui seguem segut,seguda
(asseure)
treure trec treu traiem treia trèiem trauré traguí tregui traguem tret,treta
(abstreure, atreure, contreure, distreure, extreure, retreure, sostreure)
veure veig veu veiem veia vèiem veuré viu,veieres/veres, vegi vegem vist,vista,vists/vistos
(entreveure, preveure, reveure) veié/veu,veiérem/vérem
riure ric riu riem reia rèiem riuré riguí rigui riguem rigut,riguda
(somriure)
(e)scriure escric escriu escrivim escrivia escrivíem escriuré escriví/escriguí escrigui escriguem escrit,escrita
(circumscriure, descriure, inscriure, prescriure, proscriure, subscriure, transcriure)
viure visc viu vivim vivia vivíem viuré visquí visqui visquem viscut,viscuda
(conviure, sobreviure)
cloure cloc clou cloem cloïa cloíem clouré cloguí clogui cloguem clos,closa,closos
(concloure, descloure, encloure, excloure, incloure, recloure)
encloure encloc enclou encloem encloïa encloíem enclouré encloguí enclogui encloguem enclòs,enclosa,enclosos
coure coc cou coem coïa coíem couré coguí cogui coguem cuit/cogut,cuita/coguda
moure moc mou movem movia movíem mouré moguí mogui moguem mogut,moguda
(promoure)
noure noc nou noem noïa noíem nouré noguí nogui noguem nogut,noguda
ploure - plou [plovent] plovia - plourà plogué plogui - plogut,ploguda
-nyer verbs (regular except pp)
infinitive pres1s pres3s pres1p impf1s fut1s pret1s sub1s sub1p pp
atènyer atenyo ateny atenyem atenyia atenyeré atenyí atenyi atenyem atès,atesa,atesos
empènyer empenyo empeny empenyem empenyia empenyeré empenyí empenyi empenyem empès,empesa,empesos
estrènyer estrenyo estreny estrenyem estrenyia estrenyeré estrenyí estrenyi estrenyem estret,estreta
estrènyer
(constrènyer,restrènyer)
fènyer fenyo feny fenyem fenyia fenyeré fenyí/fenguí fenyi fenyem fenyut/fengut,fenyuda/fenguda
pertànyer pertanyo pertany pertanyem pertanyia pertanyeré pertanyí/pertanguí pertanyi pertanyem pertanyut/pertangut,pertanyuda/pertanguda
plànyer planyo plany planyem planyia planyeré planyí/planguí planyi planyem plangut/planyut,planguda/planyuda
-xer verbs (NOTE: pres2s in -xes)
infinitive pres1s pres3s pres1p impf1s fut1s pret1s sub1s sub1p pp
créixer creixo creix creixem creixia creixeré creixí/cresquí creixi creixem crescut,crescuda
(acréixer,decréixer)
conèixer conec coneix coneixem coneixia coneixeré coneguí conegui coneguem conegut,coneguda
(desconèixer,reconèixer)
merèixer mereixo mereix mereixem mereixia mereixeré mereixí/meresquí mereixi mereixem merescut,merescuda
néixer/ neixo/ neix/ naixem naixia naixeré naixí/nasquí neixi/ naixem/nasquem nascut,nascuda
nàixer naixo naix naixi
(renéixer)
parèixer parec pareix pareixem pareixia pareixeré pareguí paregui pareguem paregut,pareguda
(aparèixer,comparèixer,desaparèixer,reaparèixer)
péixer peixo peix paixem paixia paixeré paixí peixi paixem pascut,pascuda
misc. -er verbs
infinitive pres1s pres3s pres1p impf1s impf1p fut1s pret1s sub1s sub1p pp
córrer corro corre correm corria corríem correré correguí corri correm corregut,correguda
fúmer fumo fum fumem fumia fumíem fumeré fumí fumi fumem fumut,fumuda
prémer premo prem premem premia premíem premeré premí premi premem premut,premuda
(es-, re-)
témer temo tem temem temia temíem temeré temí temi temem temut,temuda
trémer [regular]
tòrcer torço torç torcem torcia torcíem torceré torcí torci torcem torçut,torçuda
(des-) [pres2s torces]
vèncer venço venç vencem vencia vencíem venceré vencí venci vencem vençut,vençuda
(con-, re-) [pres2s vences]
cabre/caber cabo cap cabem cabia cabíem cabré cabí càpiga capiguem cabut,cabuda
[sub2s càpigues]
haver he/haig ha havem/hem havia havíem hauré haguí hagi hàgim/haguem hagut,haguda
[noimp] [cond1s hauria/haguera; impsub2s haguessis/haguesses]
poder puc pot podem podia podíem podré poguí pugui puguem pogut,poguda
saber sé sap sabem sabia sabíem sabré sabí sàpiga sapiguem sabut,sabuda
[imp2s sàpigues, imp2p sapigueu]
voler vull vol volem volia volíem voldré volguí vulgui vulguem volgut,volguda
ser/ésser soc és som era érem seré fui sigui siguem estat/sigut,estada/siguda
[ger sent/essent] [cond1s seria/fora]
[pres: soc,ets,éts,som,sou,són; pret: fui,fores,fou,fórem,fóreu,foren; impsub: fos,fossis,fos,fóssim,fóssiu,fossin]
[imp: sigues,sigueu]
fer faig fa fem feia fèiem faré fiu faci fem fet,feta
[pres3p fan]
[pret: fiu,feres,feu,férem,féreu,feren]
]=]
local all_persons_numbers = {
["1s"] = "1|s",
["2s"] = "2|s",
["3s"] = "3|s",
["1p"] = "1|p",
["2p"] = "2|p",
["3p"] = "3|p",
}
local person_number_list = {"1s", "2s", "3s", "1p", "2p", "3p"}
local imp_person_number_list = {"2s", "3s", "1p", "2p", "3p"}
local neg_imp_person_number_list = {"2s", "3s", "1p", "2p", "3p"}
proclitic_non_elided_person_number_to_reflexive_pronoun = {
["1s"] = "em ",
["2s"] = "et ",
["3s"] = "es ",
["1p"] = "ens ",
["2p"] = "us ",
["3p"] = "es ",
}
proclitic_elided_person_number_to_reflexive_pronoun = {
["1s"] = "m'",
["2s"] = "t'",
["3s"] = "s'",
["1p"] = "ens ",
["2p"] = "us ",
["3p"] = "s'",
}
enclitic_non_elided_person_number_to_reflexive_pronoun = {
["1s"] = "-me",
["2s"] = "-te",
["3s"] = "-se",
["1p"] = "-nos",
["2p"] = "-vos",
["3p"] = "-se",
}
enclitic_elided_person_number_to_reflexive_pronoun = {
["1s"] = "'m",
["2s"] = "'t",
["3s"] = "'s",
["1p"] = "'ns",
["2p"] = "-us",
["3p"] = "'s",
}
local indicator_flags = m_table.listToSet {
"no_pres_stressed",
"only3s", "only3sp", "only3p", "noimp",
"pp_inv", "irreg", "no_built_in",
}
-- Initialize all the slots for which we generate forms.
local function add_slots(alternant_multiword_spec)
-- "Basic" slots: All slots that go into the regular table (not the reflexive form-of table).
alternant_multiword_spec.verb_slots_basic = {
{"infinitive", "inf"},
{"infinitive_linked", "inf"},
{"gerund", "ger"},
{"pp_ms", "m|s|past|part"},
{"pp_fs", "f|s|past|part"},
{"pp_mp", "m|p|past|part"},
{"pp_fp", "f|p|past|part"},
}
-- Special slots used to handle non-reflexive parts of reflexive verbs in {{ca-verb form of}}. For example, for a
-- reflexive-only verb like [[arrepentirse]], we want to be able to use {{ca-verb form of}} on [[arrepinta]] (which
-- should mention that it is a part of 'me arrepinta', first-person singular present subjunctive, and
-- 'se arrepinta', third-person singular present subjunctive) or on [[arrepentimos]] (which should mention that it
-- is a part of 'arrepentímonos', first-person plural present indicative or preterite). Similarly, we want to use
-- {{ca-verb form of}} on [[arrepentindo]] (which should mention that it is a part of 'se ... arrepentindo',
-- syntactic variant of [[arrepentíndose]], which is the gerund of [[arrepentirse]]). To do this, we need to be
-- able to map non-reflexive parts like [[arrepinta]], [[arrepentimos]], [[arrepentindo]], etc. to their reflexive
-- equivalent(s), to the tag(s) of the equivalent(s), and, in the case of forms like [[arrepentindo]],
-- [[arrepentir]] and imperatives, to the separated syntactic variant of the verb+clitic combination. We do this by
-- creating slots for the non-reflexive part equivalent of each basic reflexive slot, and for the separated
-- syntactic-variant equivalent of each basic reflexive slot that is formed of verb+clitic. We use slots in this
-- way to deal with multiword lemmas. Note that we run into difficulties mapping between reflexive verbs,
-- non-reflexive part equivalents, and separated syntactic variants if a slot contains more than one form. To
-- handle this, if there are the same number of forms in two slots we're trying to match up, we assume the forms
-- match one-to-one; otherwise we don't match up the two slots (which means {{ca-verb form of}} won't work in this
-- case, but such a case is extremely rare and not worth worrying about). Alternatives that handle this "properly"
-- are significantly more complicated and require non-trivial modifications to [[Module:inflection utilities]].
local need_special_verb_form_of_slots = alternant_multiword_spec.source_template == "ca-verb form of" and
alternant_multiword_spec.refl
if need_special_verb_form_of_slots then
alternant_multiword_spec.verb_slots_reflexive_verb_form_of = {
{"infinitive_non_reflexive", "-"},
{"infinitive_variant", "-"},
{"gerund_non_reflexive", "-"},
{"gerund_variant", "-"},
}
else
alternant_multiword_spec.verb_slots_reflexive_verb_form_of = {}
end
-- Add entries for a slot with person/number variants.
-- `verb_slots` is the table to add to.
-- `slot_prefix` is the prefix of the slot, typically specifying the tense/aspect.
-- `tag_suffix` is a string listing the set of inflection tags to add after the person/number tags.
-- `person_number_list` is a list of the person/number slot suffixes to add to `slot_prefix`.
local function add_personal_slot(verb_slots, slot_prefix, tag_suffix, person_number_list)
for _, persnum in ipairs(person_number_list) do
local persnum_tag = all_persons_numbers[persnum]
local slot = slot_prefix .. "_" .. persnum
local accel = persnum_tag .. "|" .. tag_suffix
table.insert(verb_slots, {slot, accel})
end
end
-- Add a personal slot (i.e. a slot with person/number variants) to `verb_slots_basic`.
local function add_basic_personal_slot(slot_prefix, tag_suffix, person_number_list, no_special_verb_form_of_slot)
add_personal_slot(alternant_multiword_spec.verb_slots_basic, slot_prefix, tag_suffix, person_number_list)
-- Add special slots for handling non-reflexive parts of reflexive verbs in {{ca-verb form of}}.
-- See comment above in `need_special_verb_form_of_slots`.
if need_special_verb_form_of_slots and not no_special_verb_form_of_slot then
for _, persnum in ipairs(person_number_list) do
local persnum_tag = all_persons_numbers[persnum]
local basic_slot = slot_prefix .. "_" .. persnum
local accel = persnum_tag .. "|" .. tag_suffix
table.insert(alternant_multiword_spec.verb_slots_reflexive_verb_form_of, {basic_slot .. "_non_reflexive", "-"})
end
end
end
add_basic_personal_slot("pres", "pres|ind", person_number_list)
add_basic_personal_slot("impf", "impf|ind", person_number_list)
add_basic_personal_slot("pret", "pret|ind", person_number_list)
add_basic_personal_slot("fut", "fut|ind", person_number_list)
add_basic_personal_slot("cond", "cond", person_number_list)
add_basic_personal_slot("pres_sub", "pres|sub", person_number_list)
add_basic_personal_slot("impf_sub", "impf|sub", person_number_list)
add_basic_personal_slot("imp", "imp", imp_person_number_list)
-- Don't need special non-reflexive-part slots because the negative imperative is multiword, of which the
-- individual words are 'no' + subjunctive.
add_basic_personal_slot("neg_imp", "neg|imp", neg_imp_person_number_list, "no special verb form of")
-- Don't need special non-reflexive-part slots because we don't want [[arrependendo]] mapping to [[arrependendo-me]]
-- (only [[arrependendo-se]]) or [[arrepender]] mapping to [[arrepender-me]] (only [[arrepender-se]]).
add_basic_personal_slot("infinitive", "inf", person_number_list, "no special verb form of")
add_basic_personal_slot("gerund", "ger", person_number_list, "no special verb form of")
-- Generate the list of all slots.
alternant_multiword_spec.all_verb_slots = {}
for _, slot_and_accel in ipairs(alternant_multiword_spec.verb_slots_basic) do
table.insert(alternant_multiword_spec.all_verb_slots, slot_and_accel)
end
for _, slot_and_accel in ipairs(alternant_multiword_spec.verb_slots_reflexive_verb_form_of) do
table.insert(alternant_multiword_spec.all_verb_slots, slot_and_accel)
end
alternant_multiword_spec.verb_slots_basic_map = {}
for _, slotaccel in ipairs(alternant_multiword_spec.verb_slots_basic) do
local slot, accel = unpack(slotaccel)
alternant_multiword_spec.verb_slots_basic_map[slot] = accel
end
end
local overridable_stems = {}
local function allow_multiple_values_for_override(separated_groups, data, is_form_override)
local retvals = {}
for _, separated_group in ipairs(separated_groups) do
local footnotes = data.fetch_footnotes(separated_group)
local form = separated_group[1]
-- Prepend marker to prevent prefixing with `base.prefix`, and (in the case of form overrides) prevent
-- final devoicing.
if is_form_override then
form = IS_USER_FORM_OVERRIDE .. form
else
form = IS_USER_STEM_OVERRIDE .. form
end
local retval = {form = form, footnotes = footnotes}
table.insert(retvals, retval)
end
return retvals
end
for _, overridable_stem in ipairs {
"stem",
"stressed_stem",
"unstressed_stem",
"pres_unstressed",
"pres_stressed",
"pres3s", -- overrides just pres_2s and pres_3s
-- Don't include pres1s, pres3p; use pres_1s etc. if you need to override just those forms
"impf1",
"impf2",
"pret",
"fut",
"cond",
"pres_sub_stressed",
"pres_sub_unstressed",
"impf_sub",
"pp",
"g_infix",
"eix_infix",
} do
-- Written so we can substitute a different validator; parallel code in [[Module:es-verb]] and [[Module:pt-verb]]
-- has simple_choice validators.
overridable_stems[overridable_stem] = allow_multiple_values_for_override
end
-- Useful as the value of the `match` property of a built-in verb. `main_verb_spec` is a Lua pattern that should match
-- the non-prefixed part of a verb, and `prefix_specs` is a list of Lua patterns that should match the prefixed part of
-- a verb. If a prefix spec is preceded by ^, it must match exactly at the beginning of the verb; otherwise, additional
-- prefixes (e.g. re-, des-) may precede. Return the prefix and main verb.
local function match_against_verbs(main_verb_spec, prefix_specs)
return function(verb)
for _, prefix_spec in ipairs(prefix_specs) do
if prefix_spec:find("^%^") then
-- must match exactly
prefix_spec = prefix_spec:gsub("^%^", "")
if prefix_spec == "" then
-- We can't use the second branch of the if-else statement because an empty () returns the current position
-- in rmatch().
local main_verb = rmatch(verb, "^(" .. main_verb_spec .. ")$")
if main_verb then
return "", main_verb
end
else
local prefix, main_verb = rmatch(verb, "^(" .. prefix_spec .. ")(" .. main_verb_spec .. ")$")
if prefix then
return prefix, main_verb
end
end
else
local prefix, main_verb = rmatch(verb, "^(.*" .. prefix_spec .. ")(" .. main_verb_spec .. ")$")
if prefix then
return prefix, main_verb
end
end
end
return nil
end
end
--[=[
Built-in (usually irregular) conjugations.
Each entry is processed in turn and consists of an object with two fields:
1. match=: Specifies the built-in verbs that match this object.
2. forms=: Specifies the built-in stems and forms for these verbs.
The value of match= is either a string beginning with "^" (match only the specified verb), a string not beginning
with "^" (match any verb ending in that string), or a function that is passed in the verb and should return the prefix
of the verb if it matches, otherwise nil. The function match_against_verbs() is provided to facilitate matching a set
of verbs with a common ending and specific prefixes (e.g. [[ter]] and [[ater]] but not [[abater]], etc.).
The value of forms= is a table specifying stems and individual override forms. Each key of the table names either a
stem (e.g. `pres_stressed`), a stem property (e.g. `g_infix`) or an individual override form (e.g. `pres_1s`).
Each value of a stem can either be a string (a single stem), a list of strings, or a list of objects of the form
{form = STEM, footnotes = {FOONOTES}}. Each value of an individual override should be of exactly the same form except
that the strings specify full forms rather than stems. The values of a stem property depend on the specific property
but are generally strings or booleans.
In order to understand how the stem specifications work, it's important to understand the phonetic modifications done
by combine_stem_ending(). In general, the complexities of predictable prefix, stem and ending modifications are all
handled in this function. In particular:
1. Spelling-based modifications (c/qu, ç/c, g/gu, j/g, gu/gü, qu/qü) occur automatically as appropriate for the ending.
2. If the ending begins with an asterisk, this is a signal to delete the accent on the last syllable of the stem, e.g.
veié -> veierem.
3. If ending begins with i, it may turn into í or ï after an unstressed vowel (in some but not all cases) to prevent the
two merging into a diphthong. See combine_stem_ending() for specifics.
The following stems are recognized [FIXME: This is not correct for Catalan, needs rewriting]:
-- pres_unstressed: The present indicative unstressed stem (1p, 2p). Also controls the imperative 2p
and gerund. Defaults to the infinitive stem (minus the ending -ar/-er/-ir/-or).
-- pres_stressed: The present indicative stressed stem (1s, 2s, 3s, 3p). Also controls the imperative 2s.
Default is empty if indicator `no_pres_stressed`, else a vowel alternation if such an indicator is given
(e.g. `ue`, `ì`), else the infinitive stem.
-- pres1: Special stem for 1s present indicative. Normally, do not set this explicitly. If you need to specify an
irregular 1s present indicative, use the form override pres_1s= to specify the entire form. Defaults to
pres_stressed.
-- pres_sub_unstressed: The present subjunctive unstressed stem (1p, 2p). Defaults to the infinitive stem.
-- pres_sub_stressed: The present subjunctive stressed stem (1s, 2s, 3s, 1p). Defaults to pres1.
-- impf: The imperfect stem (not including the -av-/-i- stem suffix, which is determined by the conjugation). Defaults
to the infinitive stem.
-- pret: The full preterite stem missing only the endings (-ste, -mos, etc.), e.g. 'fige', 'fo'. Only used for verbs
with irregular preterites (pret_conj == "irreg") such as [[facer]], [[poder]], [[traer]], etc. Defaults to
`pret_base` + the conjugation vowel.
-- fut: The future stem. Defaults to the infinitive stem + the conjugation vowel.
-- cond: The conditional stem. Defaults to `fut`.
-- impf_sub: The imperfect subjunctive stem. Defaults to `pret`.
-- pp: The masculine singular past participle. Default is based on the verb conjugation: infinitive stem + '-ado' for
-ar verbs, otherwise infinitive stem + '-ido'.
-- pp_inv: `true` if the past participle exists only in the masculine singular.
]=]
local built_in_conjugations = {
--------------------------------------------------------------------------------------------
-- -ar --
--------------------------------------------------------------------------------------------
-- Orthographic consonant alternations in endings are handled automatically in combine_stem_ending().
{
-- [[aguar]]:
-- pres agúo, agúes, agúa, agüem, agüeu, agúen
-- pres_sub aguï, aguïs, aguï, agüem, agüeu, aguïn
-- contrast a more typical verb in -guar, [[enaiguar]]:
-- pres enaiguo, enaigües, enaigua, enaigüem, enaigüeu, enaigüen
-- pres_sub enaigüi, enaigüis, enaigüi, enaigüem, enaigüeu, enaigüin
match = "^aguar",
forms = {
pres_stressed = "agú",
pres_sub_stressed = "aguï",
irreg = true,
}
},
{
-- [[anar]] (full verb); highly irregular
match = "^anar",
var = "full",
forms = {
fut = "anir",
pres_1s = "vaj", -- will be converted to 'vaig'; 'vaig' gets converted to 'vaic'
pres_2s = "vas",
pres_3s = "va",
pres_3p = "van",
pres_sub_stressed = "vagi",
imp_2s = "ves",
irreg = true,
}
},
{
-- [[anar]] (auxiliary); highly irregular
match = "^anar",
var = "aux",
forms = {
pres_1s = "vaj", -- will be converted to 'vaig'; 'vaig' gets converted to 'vaic'
pres_2s = {"vas", "vares"},
pres_3s = "va",
pres_1p = {"vam", "vàrem"},
pres_2p = {"vau", "vàreu"},
pres_3p = {"van", "varen"},
pres_sub_stressed = "vagi",
pres_sub_unstressed = "vàgi",
impf1 = {},
impf2 = {},
fut = {},
pret = {},
pp = {},
gerund = {},
noimp = true,
irreg = true,
}
},
{
-- [[dar]]
match = "^dar",
forms = {
pres_1s = {form = "do", footnotes = {"[obsolete]"}},
pres_2s = {form = "das", footnotes = {"[obsolete]"}},
pres_3s = {form = "da", footnotes = {"[obsolete]"}},
pres_3p = {form = "dan", footnotes = {"[obsolete]"}},
pres_sub_1s = {form = "de", footnotes = {"[obsolete]"}},
pres_sub_2s = {form = "des", footnotes = {"[obsolete]"}},
pres_sub_3s = {form = "de", footnotes = {"[obsolete]"}},
pres_sub_3p = {form = "den", footnotes = {"[obsolete]"}},
pret_1s = "di", -- regular except for lack of accent
pret_3s = "da", -- regular except for lack of accent
impf_sub_1s = "des", -- regular except for lack of accent
impf_sub_3s = "des", -- regular except for lack of accent
irreg = true,
}
},
{
-- [[estar]]; highly irregular
match = "^estar",
forms = {
pres_2s = "estàs",
pres_3s = "està",
pres_3p = "estan",
g_infix = "estig",
imp_2s = "estigues",
imp_2p = "estigueu",
pp = "estad",
}
},
--------------------------------------------------------------------------------------------
-- -er/-re --
--------------------------------------------------------------------------------------------
-- Regular verbs not needing entries here:
--
-- [[rebre]], [[concebre]], [[decebre]], [[percebre]]
-- [[rompre]]
-- [[fúmer]], [[prémer]], [[témer]], [[trémer]]
-- [[perdre]], [[batre]], [[botre]], [[fotre]], [[retre]]
-- [[tòrcer]], [[vèncer]]
-- etc.
------------------------------------------- -ldre/-ler --------------------------------------
{
-- [[caldre]], [[doldre]], [[condoldre's]], [[oldre]]
match = match_against_verbs("ldre", {"ca", "do", "^o"}),
forms = {
-- g_infix implies irreg = true
-- g_infix adds -g to pres_1s, sub, pret and pp stems; combine_stem_ending() changes final -g to -c
g_infix = "+",
}
},
{
-- [[caler]]
match = "caler",
like = "caldre",
},
{
-- [[doler]] and compounds
match = "doler",
like = "doldre",
},
{
-- [[valer]], [[equivaler]], [[prevaler]], [[sobrevaler]]
match = "valer",
forms = {
-- see above for g_infix effects
fut = "valdr",
g_infix = "+",
}
},
{
-- [[valdre]] and compounds
match = "valdre",
like = "valer",
},
{
-- [[soler]]
match = "^soler", -- this must precede -oldre rule below for alt form [[soldre]]
forms = {
-- see above for g_infix effects
fut = {},
pret = {},
impf_sub = "solgué", -- regular, but we disabled the preterite, which would normally disable impf_sub too
g_infix = "+",
pp = {},
noimp = true,
}
},
{
-- [[soldre]]
match = "^soldre", -- this must precede -oldre rule below
like = "soler",
},
{
-- [[coldre]], [[moldre]], [[absoldre]], [[dissoldre]], [[resoldre]], [[toldre]]
match = "oldre", -- this must follow [[doldre]]/[[oldre]] rule above
forms = {
-- see above for g_infix effects
g_infix = "+",
pp = "olt",
}
},
{
-- [[voler]], [[malvoler]]
match = "voler",
forms = {
fut = "voldr",
pres_1s = "vull",
pres_sub_stressed = "vulgui",
pres_sub_unstressed = "vulgue",
g_infix = "+",
imp_2s = "vulgues",
imp_2p = "vulgueu",
}
},
--------------------------------------------- -ndre ----------------------------------------
{
-- [[romandre]]; write it this way so there's a prefix with a vowel to prevent against the accent in the pp
-- from being removed while still removing it in the feminine.
match = match_against_verbs("mandre", {"^ro"}),
forms = {
-- see above for g_infix effects
g_infix = "+",
pp = "màs#",
}
},
{
-- [[encendre]], [[atendre]], [[contendre]], [[desentendre's]], [[distendre]], [[entendre]], [[estendre]],
-- [[pretendre]]
match = match_against_verbs("endre", {"enc", "t"}),
forms = {
pres_3s = "én#", -- remove final accent without prefix with vowel; also removed when adding a suffix
-- see above for g_infix effects
g_infix = "+",
pp = "ès#", -- see above for effect of final #
}
},
{
-- [[vendre]], [[malvendre]], [[revendre]]
match = "vendre",
forms = {
pres_3s = "vèn#", -- see above for effect of final #
-- see above for g_infix effects
g_infix = "+",
pp = "venud", -- g_infix would normally make it vengud
}
},
{
-- [[fendre]], [[defendre]], [[ofendre]], [[dependre]], [[despendre]], [[expendre]], [[suspendre]], [[prendre]],
-- [[aprendre]], [[comprendre]], [[desprendre]], [[emprendre]], [[reprendre]], [[sorprendre]]
match = "endre", -- this must follow previous -endre rules above
forms = {
pres_3s = "èn#", -- see above for effect of final #
-- see above for g_infix effects
g_infix = "+",
pp = "ès#", -- see above for effect of final #
}
},
{
-- [[enfondre]]; write it this way so there's a prefix with a vowel to prevent against the accent in the pp
-- from being removed while still removing it in the feminine.
match = match_against_verbs("fondre", {"^en"}),
forms = {
-- see above for g_infix effects
g_infix = "+",
pp = "fús#",
}
},
{
-- [[pondre]], [[compondre]], [[correspondre]], [[descompondre]], [[despondre's]], [[respondre]]
match = "pondre",
forms = {
-- see above for g_infix effects
g_infix = "+",
pp = "post",
}
},
{
-- [[fondre]], [[confondre]], [[difondre]], [[infondre]], [[refondre]], [[tondre]]
match = "ondre", -- this must follow previous -ondre rules above
forms = {
-- see above for g_infix effects
g_infix = "+",
pp = "ós#", -- see above for effect of final #
}
},
--------------------------------------------- -nyer ----------------------------------------
{
-- [[atènyer]]; write it this way so there's a prefix with a vowel to prevent against the accent in the pp
-- from being removed while still removing it in the feminine.
match = match_against_verbs("tènyer", {"^a"}),
forms = {
pp = "tès#",
irreg = true,
}
},
{
-- [[empènyer]], [[espènyer]]
match = match_against_verbs("pènyer", {"^em", "^es"}),
forms = {
pp = "pès#",
irreg = true,
}
},
{
-- [[estrènyer]], [[constrènyer]], [[destrènyer]], [[restrènyer]]
match = match_against_verbs("strènyer", {"^e", "con", "^de", "^re"}),
forms = {
pp = "stret",
irreg = true,
}
},
{
-- [[fènyer]]
match = "fènyer",
forms = {
pp = {"fengud", "fenyud"},
irreg = true,
}
},
{
-- [[júnyer]]
match = "júnyer",
like = "junyir",
},
{
-- [[plànyer]], [[complànyer]], [[pertànyer]]
match = match_against_verbs("ànyer", {"pl", "pert"}),
forms = {
pp = {"angud", "anyud"},
irreg = true,
}
},
--------------------------------------------- -aure ----------------------------------------
{
-- [[caure]], [[decaure]], [[recaure]]
match = "caure",
forms = {
-- stem ending in -ai and imperfect in -ia causes special stressed imperfect logic to take effect; we get
-- impf1s queia, impf1p quèiem (preceding vowel changed to è and attached to initial consonant using
-- combine_stem_ending(), which changes c- to qu-)
stem = "caie", -- i dropped by g_infix before u
-- g_infix implies irreg = true
-- g_infix adds -g to pres_1s, sub, pret and pp stems; combine_stem_ending() changes final -g to -c
-- g_infix sets pres_stressed to end in -u, removing a preceding -i or -v
g_infix = "+",
}
},
{
-- [[plaure]], [[complaure]]
match = "plaure",
forms = {
stem = "plae", -- ï in impf1s -aïa gets generated automatically by combine_stem_ending()
g_infix = "+",
}
},
{
-- [[raure]]
match = "^raure",
forms = {
stem = "rae", -- ï in impf1s -aïa gets generated automatically by combine_stem_ending()
g_infix = "+",
pp = {"ragud", "ras"},
}
},
--------------------------------------------- -eure ----------------------------------------
{
-- [[beure]], [[embeure]], [[deure]], [[lleure]]
match = match_against_verbs("eure", {"b", "d", "ll"}),
forms = {
stem = "eve", -- v dropped by g_infix before g and u
g_infix = "+",
}
},
{
-- [[creure]], [[seure]], [[asseure]]
match = match_against_verbs("eure", {"cr", "s"}),
forms = {
stem = "ee",
pres_unstressed = "eie", -- affects pres_1p, pres_2p, gerund, imperfect (see [[caure]])
g_infix = "+",
}
},
{
-- [[jeure]], [[ajeure]]
match = "jeure",
forms = {
fut = "jaur", -- affects future and cond
stressed_stem = "jee", -- affects stressed forms, which get g added by g_infix by added except for
-- pres_stressed, which gets u added (controls pres_3s, pres_2s, pres_3p)
unstressed_stem = "jae", -- affects unstressed_stem, which get g added by g_infix
pres_stressed = {"jeu", "jau"},
pres_unstressed = "jaie", -- affects pres_1p, pres_2p, gerund, imperfect (see [[caure]])
pres_1s = {"jec", "jac"},
impf1 = "jei", -- otherwise we'd get impf_1s '#geia' etc.
impf2 = "jèi",
g_infix = "+",
}
},
{
match = "jaure",
like = "jeure",
},
{
-- [[treure]], [[abstreure]], [[atreure]], [[bestreure]], [[contreure]], [[detreure]], [[distreure]],
-- [[extreure]], [[retreure], [[retrotreure]], [[sostreure]]
match = "treure",
forms = {
-- like [[jeure]] except for irregular pp
fut = "traur",
stressed_stem = "tree",
unstressed_stem = "trae",
pres_stressed = {"treu", "trau"},
pres_unstressed = "traie",
pres_1s = {"trec", "trac"},
g_infix = "+",
pp = "tret",
}
},
{
match = "traure",
like = "treure",
},
{
-- [[veure]], [[entreveure]], [[preveure]], [[reveure]]
match = "veure",
forms = {
stem = "veie",
-- impf1s veia, impf1p vèiem (preceding vowel changed to è)
pres_stressed = "veu",
pres_1s = "vej", -- will be converted to 'veig'; 'veig' gets converted to 'veic'
pres_sub_stressed = "vegi",
pres_sub_unstressed = "vege",
pret = {"veié", "vé"},
pret_1s = "viu",
pret_3s = {"veié", "veu"},
impf_sub = "veié",
pp = "vist",
imp_2s = "veges",
imp_2p = {"vegeu", "veieu"},
irreg = true,
}
},
--------------------------------------------- -iure ----------------------------------------
{
-- [[escriure]], [[circumscriure]], [[descriure]], [[inscriure]], [[prescriure]], [[proscriure]],
-- [[subscriure]], [[transcriure]]
match = "scriure",
forms = {
stem = "scrivi", -- v dropped by g_infix before g and u; pres_1p/pres_2p have -ir endings
g_infix = "+",
pret = {"scriví", "scrigué"},
pp = "scrit",
}
},
{
-- [[riure]], [[somriure]]
match = "riure", -- must follow rule for 'scriure'
forms = {
stem = "rie",
-- impf1s reia, impf1p rèiem (preceding vowel changed to è)
g_infix = "+",
}
},
{
-- [[viure]], [[conviure]], [[desviure's]], [[sobreviure]]
match = "viure",
forms = {
stem = "vivi", -- v dropped by g_infix before g and u; pres_1p/pres_2p have -ir endings
g_infix = "visc", -- applies to pres1s, sub, pret, pp
}
},
--------------------------------------------- -oure ----------------------------------------
{
-- [[cloure]], [[concloure]], [[descloure]], [[encloure]], [[excloure]], [[incloure]], [[recloure]]
match = "cloure",
forms = {
stem = "cloe", -- ï in impf1s cloïa gets generated automatically by combine_stem_ending()
g_infix = "+",
pp = "clòs#", -- remove final accent without prefix with vowel; also removed when adding a suffix
}
},
{
-- [[coure]] "to cook"
match = "coure",
var = "cook",
forms = {
stem = "coe", -- ï in impf1s coïa gets generated automatically by combine_stem_ending()
g_infix = "+",
pp = "cuit",
}
},
{
-- [[coure]] "to sting"
match = "coure",
var = "sting",
forms = {
stem = "coe", -- ï in impf1s coïa gets generated automatically by combine_stem_ending()
g_infix = "+",
-- pp regular 'cogud'
}
},
{
-- [[moure]], [[promoure]], [[remoure]], [[somoure]], [[ploure]]
match = match_against_verbs("oure", {"m", "pl"}),
forms = {
stem = "ove", -- v dropped by g_infix before g and u
g_infix = "+",
}
},
{
-- [[noure]]
match = "noure",
forms = {
stem = "noe", -- ï in impf1s -aïa gets generated automatically by combine_stem_ending()
g_infix = "+",
}
},
--------------------------------------------- -xer ----------------------------------------
{
-- [[conèixer]], [[desconèixer]], [[reconèixer]]
match = "conèixer",
forms = {
g_infix = "coneg",
}
},
{
-- [[créixer]], [[acréixer]], [[decréixer]], [[recréixer]], [[sobrecréixer]]
match = "créixer",
forms = {
pret = {"creixé", "cresqué"},
pres_sub_unstressed = {"creixe", "cresque"},
pp = "crescud",
irreg = true,
}
},
{
-- [[merèixer]], [[desmerèixer]], [[irèixer-se]]
match = match_against_verbs("rèixer", {"me", "^i"}),
forms = {
pret = {"reixé", "resqué"},
pres_sub_unstressed = {"reixe", "resque"},
pp = "rescud",
irreg = true,
}
},
{
-- [[néixer]]/[[nàixer]], [[renéixer]]/[[renàixer]], [[sobrenéixer]]/[[sobrenàixer]], [[péixer]]/[[pàixer]]
match = match_against_verbs("éixer", {"n", "p"}),
forms = {
stem = "aixe",
fut = "aixer",
pres_stressed = {"eix", "aix"},
pres_1s = "eixo",
pret = {"aixé", "asqué"},
pres_sub_stressed = "eixi",
pres_sub_unstressed = {"aixe", "asque"},
pp = "ascud",
irreg = true,
}
},
{
match = "àixer",
like = "éixer",
},
{
-- [[parèixer]], [[aparèixer]], [[comparèixer]], [[desaparèixer]], [[reaparèixer]]
match = "parèixer",
forms = {
g_infix = "pareg",
}
},
--------------------------------------------- misc ----------------------------------------
{
-- [[cabre]]
match = "cabre",
forms = {
pres_sub_stressed = "càpiga",
pres_sub_unstressed = "capigue",
irreg = true,
}
},
{
-- [[caber]]
match = "caber",
like = "cabre",
},
{
-- [[saber]]
match = "saber",
forms = {
fut = "sabr",
pres_1s = "sé",
pres_sub_stressed = "sàpiga",
pres_sub_unstressed = "sapigue",
imp_2s = "sàpiga",
imp_2p = "sapigueu",
irreg = true,
}
},
{
-- [[poder]]
match = "poder",
forms = {
fut = "podr",
pres_1s = "puc",
pres_sub_stressed = "pugui",
pres_sub_unstressed = "pugue",
g_infix = "pog",
imp_2s = "pugues",
imp_2p = "pugueu",
irreg = true,
}
},
{
-- [[córrer]], [[acórrer]], [[concórrer]], [[decórrer]], [[descórrer]], [[discórrer]], [[encórrer]],
-- [[escórrer]], [[incórrer]], [[ocórrer]], [[recórrer]], [[socórrer]], [[transcórrer]]
match = "córrer",
forms = {
pret = "corregué",
pres_sub_unstressed = {"corre", "corregue"},
pp = "corregud",
irreg = true,
}
},
{
-- [[metre]], [[admetre]], [[arremetre]], [[cometre]], [[comprometre]], [[demetre]], [[descomprometre]],
-- [[emetre]], [[entremetre's]], [[escometre]], [[malmetre]], [[manumetre]], [[ometre]], [[permetre]],
-- [[prometre]], [[readmetre]], [[remetre]], [[retransmetre]], [[sotmetre]], [[trametre]], [[transmetre]]
match = "metre",
forms = {
pp = "mès#",
irreg = true,
}
},
--------------------------------------------------------------------------------------------
-- -ir --
--------------------------------------------------------------------------------------------
{
-- [[acudir]]; NOTE: Separation by meaning does not occur in DCC, DIEC, DEIEC, and DCVB says the distinction
-- is geographical and makes no mention of distinction by meaning. OTOH ca.wikt does say that the pronominal
-- sense "to occur" tends to conjugate non-inchoative.
match = "acudir",
forms = {
eix_infix = {{
form = "+",
footnotes = {'[especially in the sense "to turn up, to be present"]'}
}, {
form = "-",
footnotes = {'[especially in the pronominal sense "to occur"]'}
}}
}
},
-- [[afegir]]: -- non-inchoative in Valencia, inchoative elsewhere
{
-- [[ajupir]]
-- [[buixir]]
-- [[bullir]], [[rebullir]]
-- [[cruixir]], [[escruixir]] (Routledge says this is inchoative but DIEC, DEIEC and DCC all disagree; note
-- pres_2s 'cruixes', handled automatically)
-- [[dormir]], [[adormir]]
-- [[funyir]]
-- [[grunyir]]
-- [[munyir]], [[esmunyir]]
-- [[pudir]]
-- [[punyir]]
-- [[retrunyir]]
-- [[sentir]], [[pressentir]], [[ressentir-se]]; not [[consentir]], with can be either non-inchoative or
-- inchoative, and not [[assentir]] or [[dissentir]], which are only inchoative
match = match_against_verbs("ir", {"ajup", "buix", "bull", "cruix", "dorm", "funy", "gruny", "muny", "pud",
"puny", "retruny", "^sent", "pressent", "^ressent"}),
forms = {
eix_infix = "-",
}
},
{
-- [[arrupir-se]];
-- [[brumir]];
-- [[brunzir]];
-- [[consumir]], [[resumir]], [[presumir]] (not [[sumir]], [[assumir]], [[subsumir]], which are regular)
-- [[mentir]], [[desmentir]]
-- [[percudir]]; cf. also [[acudir]], which to some extent has separate conjugations per meaning
-- [[consentir]]
match = match_against_verbs("ir", {"arrup", "brum", "brunz", "consum", "^resum", "presum", "ment", "percud",
"consent"}),
forms = {
eix_infix = {"+", "-"},
}
},
-- [[cenyir]]: -- non-inchoative or inchoative in Balearics, inchoative elsewhere
{
-- [[cobrir]], [[descobrir]], [[encobrir]], [[recobrir]], [[redescobrir]]
match = "cobrir",
forms = {
pp = "cobert",
irreg = true,
}
},
{
-- [[collir]], [[acollir]], [[escollir]], [[recollir]]
match = "collir",
forms = {
stressed_stem = "culli",
eix_infix = "-",
irreg = true,
}
},
{
-- [[complir]], [[acomplir]], [[incomplir]]
match = "complir",
forms = {
pp = {"complert", "complid"},
irreg = true,
}
},
{
-- [[cosir]], [[descosir]], [[recosir]]
match = "cosir",
forms = {
stressed_stem = "cusi",
pres_3s = "cús#",
eix_infix = "-",
irreg = true,
}
},
{
-- [[eixir]], [[deseixir-se]]; not [[teixir]] or [[entreteixir]], and not [[reeixir]] or [[sobreeixir]],
-- which have an ï in the stem-stressed forms
match = match_against_verbs("eixir", {"^", "des"}),
forms = {
stressed_stem = "ixi",
eix_infix = "-",
irreg = true,
}
},
{
-- [[reeixir]], [[sobreeixir]]
match = match_against_verbs("eixir", {"^re", "sobre"}),
forms = {
stressed_stem = "ïxi",
eix_infix = "-",
irreg = true,
}
},
-- [[engolir]]: -- non-inchoative in Valencia, inchoative elsewhere
{
-- [[escopir]]
match = "escopir",
forms = {
stressed_stem = "escupi",
eix_infix = "-",
irreg = true,
}
},
{
-- [[establir]], [[preestablir]], [[restablir]]
match = "establir",
forms = {
pp = {"establert", "establid"},
irreg = true,
}
},
-- [[ferir]]: -- non-inchoative in Balearics, inchoative elsewhere
-- [[fregir]]: -- non-inchoative in Valencia, inchoative elsewhere
{
-- [[fugir]], [[confugir]], [[defugir]], [[enfugir-se]]; pres sing ''fujo, fuges, fuig'' handled by
-- combine_stem_ending(); can't be handled by rule above that lists many non-inchoative verbs because the
-- prefix would be 'fug' and the front-back alternation code doesn't apply to prefixes.
match = "fugir",
forms = {
eix_infix = "-",
}
},
{
-- [[imprimir]], [[reimprimir]], [[sobreimprimir]]; not any other verbs in -primir; write it this way so
-- there's a prefix with a vowel to prevent against the accent in the pp from being removed while still
-- removing it in the feminine.
match = match_against_verbs("primir", {"im"}),
forms = {
pp = "près#",
irreg = true,
}
},
-- [[llegir]]: -- non-inchoative in Valencia and Minorca, inchoative elsewhere
{
-- [[lluir]]: regular inchoative in the figurative meaning "to display (something), to be showy" also in the
-- legal meaning "free from a pecuniary obligation, such as a land-based tax (emphyteusis)"; irregular in the
-- literal meaning "to shine"; use <no_built_in> to get regular conjugation. In the regular conjugation,
-- umlauts appear in the following forms: pres_1p/pres_sub_1p/imp_1p lluïm, pres_2p/pres_sub_2p/imp_2p lluïu,
-- impf_1s/impf_3s lluïa, impf_2s lluïes, impf_3p lluïen, pret_2s lluïres, pret_3p lluïren,
-- impf_sub_2s lluïssis, impf_sub_3p lluïssin, throughout the pp: lluït, lluïda, lluïts, lluïdes. IN the
-- irregular conjugation, umlauts appear in the same places as well as elsewhere in the present subjunctive:
-- pres_sub_1s/pres_sub_3s/imp_3s lluï, pres_sub_2s lluïs, pres_sub_3p/imp_3p lluïn. Notably, they do *NOT*
-- appear in the gerund lluint, the infinitive lluir, or anywhere in the future or conditional. Note that
-- verbs.cat [https://www.verbs.cat/en/conjugation/899-lluir.html] lists additional irregular forms pres_1s
-- lluu, and alternative impf_sub forms in -e- instead of -i- (lluïsses, lluíssem, lluísseu, lluïssen), but
-- these are nonstandard or dialectal per both Routledge and DEIEC.
match = "^lluir",
forms = {
eix_infix = "-",
pres3s = {"lluu", "llu"}, -- generates pres_2s, imp_2s
irreg = true,
}
},
{
-- [[entrelluir]] "to be half-seen", [[relluir]] "to shine", [[traslluir-se]] "to be translucent"; either
-- inchoative or non-inchoative, not distinguished by meaning; note, [[deslluir]] and [[enlluir]] are regular
-- inchoative verbs.
match = match_against_verbs("lluir", {"entre", "^re", "tras"}),
forms = {
eix_infix = {"+", "-"},
pres3s = {"llueix", "lluu", "llú"}, -- generates pres_2s, imp_2s; note, pres_2s will end in -es due to
-- combine_stem_ending()
irreg = true,
}
},
{
-- [[morir]], [[premorir]]; but not [[atemorir]]
match = match_against_verbs("morir", {"^", "pre"}),
forms = {
eix_infix = "-",
pp = "mort",
irreg = true,
}
},
{
-- [[obrir]], [[entreobrir]], [[reobrir]]; not [[cobrir]] and derivatives, not [[empobrir]], so we have to list
-- them individually
match = match_against_verbs("obrir", {"^", "entre", "^re"}),
forms = {
eix_infix = "-",
pp = "obert",
irreg = true,
}
},
{
-- [[oferir]]; but not [[proferir]]
match = "^oferir",
forms = {
pp = {"ofert", "oferid"},
irreg = true,
}
},
-- [[oir]], [[desoir]], [[entreoir]]: -- per Routledge, non-inchoative or inchoative normally but only
-- non-inchoative in Valencian; but all dictionaries disagree and say it is a regular inchoative-only verb.
-- It has the same umlauts as lluir (and [[corroir]], another regular inchoative verb).
{
-- [[omplir]], [[desomplir-se]], [[reomplir]]; not [[complir]] and derivatives, so we have to list them
-- individually
match = match_against_verbs("omplir", {"^", "des", "^re"}),
forms = {
eix_infix = "-",
pp = {"omplert", "omplid"},
irreg = true,
}
},
-- [[penedir-se]]: -- non-inchoative in Balearics, inchoative elsewhere
{
-- [[pruir]] "to itch": same umlauts as in [[lluir]].
match = "^pruir",
forms = {
eix_infix = "-",
pres3s = {"pruu", "pru"}, -- generates pres_2s, imp_2s
irreg = true,
}
},
{
-- [[reblir]]
match = "^reblir",
forms = {
pp = {"reblert", "reblid"},
irreg = true,
}
},
-- [[renyir]]: -- non-inchoative in Valencia, inchoative elsewhere
{
-- [[sofrir]]
match = "^sofrir",
forms = {
pp = {"sofert", "sofrid"},
irreg = true,
}
},
{
-- [[sortir]], [[ressortir]], [[sobresortir]]; but not [[assortir]], which is regular inchoative
match = match_against_verbs("sortir", {"^", "^res", "sobre"}),
forms = {
stressed_stem = "surti",
eix_infix = "-",
irreg = true,
}
},
{
-- [[suplir]]
match = "^suplir",
forms = {
pp = {"suplert", "suplid"},
irreg = true,
}
},
-- [[teixir]], [[entreteixir]]: -- non-inchoative in Valencia, inchoative elsewhere
{
-- [[tenir]] but not any compounds; highly irregular
match = "^tenir",
forms = {
fut = "tindr",
pres_stressed = "ten",
pres_3s = "té",
imp_2s = {"té", "ten", "tingues"},
imp_2p = {"teniu", "tingueu"},
g_infix = "ting",
}
},
{
-- [[abstenir-se]], [[atenir-se]], [[captenir-se]], [[cartenir]], [[contenir]], [[detenir]], [[entretenir]],
-- [[mantenir]], [[menystenir]], [[obtenir]], [[retenir]], [[sostenir]], [[viltenir]]; highly irregular
match = "tenir",
forms = {
fut = "tindr",
pres_stressed = "ten",
pres_3s = "té",
imp_2s = {"tén", "tingues"},
imp_2p = {"teniu", "tingueu"},
g_infix = "ting",
}
},
{
-- [[tindre]]: variant of [[tenir]]
match = "tindre",
like = "tenir",
},
-- [[tenyir]], [[destenyir]]: -- non-inchoative in Valencia, but [[retenyir]] inchoative or non-inchoative in
-- Valencia? (per Routledge); regular inchoative elsewhere
{
-- [[tossir]] "to cough"
match = "^tossir",
forms = {
stressed_stem = "tussi", -- pres_2s gets 'tusses'
pres_3s = "tus", -- note, pres_3s (a single form override) not pres3s (a stem override, which also affects
-- pres_2s; but imp_2s is physically copied from pres_3s, so imp_2s correctly gets 'tus')
eix_infix = "-",
irreg = true,
}
},
{
-- [[venir]] but not any compounds; highly irregular
match = "^venir",
forms = {
fut = "vindr",
pres_stressed = "ven",
pres_3s = "ve",
imp_2s = "vine",
g_infix = "ving",
}
},
{
-- compounds of [[venir]]: [[advenir]], [[avenir]], [[contravenir]], [[convenir]], [[desavenir-se]],
-- [[desconvenir]], [[entrevenir]], [[esdevenir]], [[intervenir]], [[obvenir]], [[pervenir]], [[prevenir]],
-- [[provenir]], [[reconvenir]], [[revenir]], [[sobrevenir]], [[subvenir]]; but not [[enjovenir]] or
-- [[rejovenir]]; highly irregular
match = match_against_verbs("venir", {"^ad", "^a", "contra", "con", "desa", "entre", "esde", "inter", "ob",
"per", "pre", "pro", "^re", "sobre", "sub"}),
forms = {
fut = "vindr",
pres_stressed = "ven",
pres_3s = "vé",
imp_2s = "vén",
g_infix = "ving",
}
},
{
-- [[vindre]]: variant of [[venir]]
match = "vindre",
like = "venir",
},
-- [[vestir]], [[desvestir]], [[revestir]], maybe [[transvestir]]: non-inchoative in Valencia, inchoative or
-- non-inchoative in the Balearics; regular inchoative elsewhere; but not [[envestir]] or [[investir]], which are
-- regular inchoative everywhere
{
-- [[fer]], [[contrafer]], [[desfer]], [[estrafer]], [[perfer]], [[refer]], [[satisfer]]; highly irregular
match = "fer",
forms = {
fut = "far",
pres_1s = "faj", -- will be converted to 'faig'; 'faig' gets converted to 'faic'
pres_2s = "fàs#",
pres_3s = "fà#",
pres_3p = "fan",
pres_unstressed = "fe",
impf1 = "fei",
impf2 = "fèi",
pres_sub_stressed = "faci",
pres_sub_unstressed = "fe",
pret = "fé",
pret_1s = "fiu",
pret_3s = "feu",
impf_sub_1s = "fés#", -- regular except for base form [[fes]], lacking an accent
impf_sub_3s = "fés#", -- same
imp_2s = "fés#",
pp = "fet",
irreg = true,
}
},
{
-- [[dir]], [[adir-se]], [[contradir]], [[desdir]], [[entredir]], [[interdir]], [[maldir]], [[predir]], [[redir]];
-- behaves like an -er/-re verb
match = match_against_verbs("dir", {"^", "^a", "contra", "des", "entre", "inter", "mal", "pre", "^re"}),
forms = {
stem = "die",
g_infix = "+",
imp_2s = "digues",
imp_2p = "digueu",
pp = "dit",
}
},
{
-- [[dur]], [[endur-se]]; behaves like an -er/-re verb
match = "dur",
forms = {
stem = "due",
g_infix = "+",
pres3s = {"duu", "du"}, -- generates pres_2s, imp_2s
impf1 = "dui",
impf2 = "dúi",
pp = "dut",
}
},
{
-- [[ser]]; highly irregular
match = "^ser",
forms = {
pres_1s = "soc",
pres_2s = "ets",
pres_3s = "és",
pres_1p = "som",
pres_2p = "sou",
pres_3p = "són",
impf1 = "er",
impf2 = "ér",
pres_sub_stressed = "sigui",
pres_sub_unstressed = "sigue",
pret = "fó",
pret_1s = "fui",
pret_3s = "fou",
impf_sub_1s = "fos", -- regular except for lack of accent
impf_sub_3s = "fos", -- same
cond = {"serí", "fór"},
imp_2s = "sigues",
imp_2p = "sigueu",
pp = {"estad", "sigud"},
gerund = {"sent", "essent"},
irreg = true,
}
},
{
-- [[ésser]]; variant of [[ser]]
match = "^ésser",
like = "ser",
},
{
-- [[haver]] as auxiliary; highly irregular
match = "^haver",
var = "aux",
forms = {
pres_1s = "he",
pres_2s = "has",
pres_3s = "ha",
pres_1p = "hem",
pres_2p = "heu",
pres_3p = "han",
fut = "haur",
cond = {"haurí", "haguér"},
pres_sub_stressed = "hagi",
pres_sub_unstressed = "hàgi",
noimp = true,
g_infix = "+",
}
},
{
-- [[haver]] as full verb; highly irregular
match = "^haver",
var = "full",
forms = {
pres_1s = {"hec", "hac"},
pres_stressed = {"heu", "hau"},
fut = "haur",
pres_sub_stressed = "hegui",
g_infix = "+",
}
},
{
-- [[heure]]; variant of full verb [[haver]]
match = "^heure",
like = "haver",
likevar = "full",
},
{
-- [[haure]]; variant of full verb [[haver]]
match = "^haure",
like = "haver",
likevar = "full",
},
}
local function skip_slot(base, slot, allow_overrides)
if not allow_overrides and (base.basic_overrides[slot] or
base.refl and base.basic_reflexive_only_overrides[slot]) then
-- Skip any slots for which there are overrides.
return true
end
if base.only3s and (slot:find("^pp_f") or slot:find("^pp_mp")) then
-- diluviar, atardecer, neviscar; impersonal verbs have only masc sing pp
return true
end
if not slot:find("[123]") then
-- Don't skip non-personal slots.
return false
end
if base.nofinite then
return true
end
if (base.only3s or base.only3sp or base.only3p) and (slot:find("^imp_") or slot:find("^neg_imp_")) then
return true
end
if base.only3s and not slot:find("3s") then
-- diluviar, atardecer, neviscar
return true
end
if base.only3sp and not slot:find("3[sp]") then
-- atañer, concernir
return true
end
if base.only3p and not slot:find("3p") then
-- [[caer cuatro gotas]], [[caer chuzos de punta]], [[entrarle los siete males]]
return true
end
return false
end
local function add_stem_ending(stem, ending)
if ending == "" then
return stem
end
if stem:find("#$") then -- remove final accent when adding a suffix
stem = com.remove_accents((stem:gsub("#$", "")), "final syllable only")
end
return stem .. ending
end
local function process_stem(stem, fn)
if stem:find("#$") then
local stem_no_pound_sign = stem:match("^(.*)#$")
return fn(stem_no_pound_sign) .. "#"
else
return fn(stem)
end
end
-- Add the `stem` to the `ending` and apply any phonetic modifications. `is_full_word` indicates that we're creating
-- a "full word" not a stem, and turns on devoicing of final consonants. `dont_include_prefix` is used when creating
-- stems and indicates not to prepend the prefix in `base.prefix` to the result. `is_pres_sub_stressed` is used when
-- creating the pres_sub_stressed stem, to correctly handle both [[desaiguar]] and [[argüir]], whose respective
-- interactions between ü and i/ï are very tricky.
--
-- WARNING: This function is written very carefully; changes to it can easily have unintended consequences.
local function combine_stem_ending(base, stem, ending, is_full_word, dont_include_prefix, is_pres_sub_stressed)
-- Include the prefix in the stem unless dont_include_prefix is given (used in construct_stems()), or the value of
-- `stem` comes from a user-specified stem or form override.
if not dont_include_prefix and not stem:find(IS_USER_STEM_OVERRIDE) and not stem:find(IS_USER_FORM_OVERRIDE) then
stem = base.prefix .. stem
end
-- A * at the beginning of the ending is a signal to remove a stressed accent from the stem. This may feed any of
-- the following rules.
if ending:find("^%*") then
ending = ending:gsub("^%*", "")
stem = com.remove_accents(stem, "final syllable only")
end
-- If ending begins with s and stem ends in a sibilant, we need an e in between; cf. pres_2s 'apareixes' of
-- [[aparèixer]], pres_2s 'torces' of [[tòrcer]], pres_2s 'fuges' of [[fugir]], pres_2s 'brunzes' of [[brunzir]].
-- This may feed the next rule.
if ending:find("^s") and rfind(stem, "[çjsxz]$") then
ending = "e" .. ending
end
-- By default, stems are in their "back" (standalone) form. Before a front vowel, convert the final consonant to
-- its "front" form so the pronunciation doesn't change.
if rfind(ending, "^" .. front_vowel_c) then
-- adequar -> adeqües
-- enaiguar -> enaigües
-- pegar -> pegues
-- arranjar -> arranges
-- marcar -> marques
-- abraçar -> abraces
stem = com.back_to_front(stem)
end
-- Ending beginning in -i after diphthong ending in V + i compresses the two i's into one (cf. pret_1s 'desmaí' and
-- pres_sub_1s 'desmaï' of [[desmaiar]]). This rule doesn't apply after pseudo-vowel u in gu/qu; cf. pret_1s 'guií'
-- of [[guiar]] and contrast pret_1s 'cruí' of [[cruiar]]. This may feed the next rule.
if rfind(ending, "^[iíï]") and rfind(stem, V .. "i$") and not rfind(stem, "[gq][uü]i$") then
stem = stem:gsub("i$", "")
end
-- If ending begins with i (not í), it must get a diaeresis after a true vowel (not gu/qu, cf. pres_1p 'delinquim'
-- of [[delinquir]], not '#delinquïm'; also not a diphthong ending in u, cf. pres_sub_1s 'apreui' of [[apreuar]]
-- not '#apreuï') to prevent the two merging into a diphthong. Note that ü -> u before ï, but to simplify things
-- we leave the double umlauts in place and remove the first one during postprocessing, in fix_double_umlauts().
-- Cf.:
-- * impf_1s 'raïa' of [[raure]];
-- * pres_sub_1s 'creï' of [[crear]];
-- * pres_sub_1s 'associï' of [[associar]];
-- * impf_1s 'cloïa' of [[cloure]];
-- * pres_1p 'lluïm' of [[lluir]];
-- * pres_1p 'arguïm' of [[argüir]].
if ending:find("^i") and rfind(stem, "[aeiouü]$") and not stem:find("[aeiogq]u$") and
-- Unstressed subjunctive endings of [[enaiguar]] remain without umlaut: enaigüi/enaigüis/enaigüin;
-- but stressed endings of [[argüir]] that begin with 'i' do get an umlaut: arguït, impf. arguïa, including
-- stressed subjunctive endings arguïm/arguïu. In both cases the ending is '-i' as part of the creation of
-- the respective stems. There seems no way of distinguishing the two cases other than with a special flag.
not (rfind(stem, "[gq]ü$") and ending == "i" and is_pres_sub_stressed) then
ending = ending:gsub("^i", "ï")
end
local retval = add_stem_ending(stem, ending)
if retval:find("#$") then -- remove final accent if no vowels in prefix
retval = retval:gsub("#$", "")
if not rfind(base.prefix, V) then
retval = com.remove_accents(retval, "final syllable only")
end
end
if is_full_word then
local saw_is_user_form_override
retval, saw_is_user_form_override = rsubb(retval, IS_USER_FORM_OVERRIDE, "")
retval = retval:gsub(IS_USER_STEM_OVERRIDE, "")
if not saw_is_user_form_override then
-- Devoice final voiced obstruent (cf. pres_2s 'caps', pres_3s 'cap' of [[cabre]]). But not after a
-- consonant (cf. pres_2s 'perds', pres_3s 'perd' of [[perdre]]), except for g -> c, which operates
-- even after a consonant (pres_1s 'resolc' of [[resoldre]], pres_1s 'tinc' of [[tenir]]).
retval = retval:gsub("g(s?)$", "c%1")
retval = rsub(retval, "(" .. V .. ")([bdj])(s?)$", function(before, voiced, after)
local devoice = {
b = "p",
d = "t",
j = "ig", -- pres_3s 'fuj' of [[fugir]] -> 'fuig'
}
return before .. devoice[voiced] .. after
end)
end
end
return retval
end
local function add3(base, slot, stems, endings, footnotes, allow_overrides)
if skip_slot(base, slot, allow_overrides) then
return
end
local function do_combine_stem_ending(stem, ending)
return combine_stem_ending(base, stem, ending, "is full word")
end
iut.add_forms(base.forms, slot, stems, endings, do_combine_stem_ending, nil, nil, footnotes)
end
local function insert_form(base, slot, form)
if not skip_slot(base, slot) then
iut.insert_form(base.forms, slot, form)
end
end
local function insert_forms(base, slot, forms)
if not skip_slot(base, slot) then
iut.insert_forms(base.forms, slot, forms)
end
end
local function add_single_stem_tense(base, slot_pref, stems, s1, s2, s3, p1, p2, p3)
local function addit(slot, ending)
add3(base, slot_pref .. "_" .. slot, stems, ending)
end
addit("1s", s1)
addit("2s", s2)
addit("3s", s3)
addit("1p", p1)
addit("2p", p2)
addit("3p", p3)
end
local function map_general(stemforms, fn)
return iut.map_forms(iut.convert_to_general_list_form(stemforms), fn)
end
local function flatmap_general(stemforms, fn)
return iut.flatmap_forms(iut.convert_to_general_list_form(stemforms), fn)
end
-- Given a stem ending in a conjugation vowel -a/-e/-i/-ï, split into stem base and conjugation vowel, converting the
-- stem base to "back" form if the conjugation vowel is front (hence 'torce' of [[tòrcer]] splits into 'torç' and 'e',
-- and 'fugi' of [[fugir]] splits into 'fuj' and 'i').
local function split_conj_vowel(stem)
local stem_base, conj_vowel = rmatch(stem, "^(.*)([aeiï])$")
if not stem_base then
error(("Internal error: Stem '%s' doesn't end in conjugation vowel a/e/i"):format(stem))
end
if conj_vowel == "ï" then
-- To simplify handling of ï, convert to i. It will be converted back to ï as necessary in
-- combine_stem_ending().
conj_vowel = "i"
end
if rfind(conj_vowel, front_vowel_c) then
stem_base = com.front_to_back(stem_base)
end
return stem_base, conj_vowel
end
local function construct_stems(base)
base.output_stems = {}
local stems = base.output_stems
local bst = base.input_stems
-- YUCK, see combine_stem_ending() for the necessity of is_pres_sub_stressed.
local function combine(stem, ending, is_pres_sub_stressed)
return combine_stem_ending(base, stem, ending, false, "dont include prefix", is_pres_sub_stressed)
end
stems.irreg = bst.irreg or bst.g_infix
-- NOTE: Some stems end in a conjugation or similar vowel, specifically:
-- * `stem` (ends in conjugation vowel -a/-e/-i);
-- * `stressed_stem` (likewise);
-- * `unstressed_stem` (likewise);
-- * `pres_unstressed` (which assumes the form of the gerund minus the -nt; note that `pres_stressed` does *NOT*
-- end in a conjugation vowel, but assumes the stem form; the value of pres_3s will be derived by adding -a for
-- -ar verbs and otherwise adding an -e prop vowel when required, as in [[cobrir]], and otherwise adding no
-- vowel);
-- * `pres_sub_stressed` (which assumes the form of pres_sub_3s and hence usually ends in -i, occasionally -a);
-- * `pres_sub_unstressed` (which assumes the form of pres_sub_1p minus the -m, hence ends in -e or -i).
-- Save stem for use in add_categories_and_annotation() for determining the conjugation class.
stems.stem = bst.stem or base.stem
local eix_infix_stem
if base.conj_vowel == "i" then
-- Save eix_infix value for use in add_categories_and_annotation() for determining whether consonant
-- alternations exist.
stems.eix_infix = bst.eix_infix or bst.g_infix and "-" or "+"
eix_infix_stem = flatmap_general(stems.eix_infix, function(form)
if form == "+" then
return map_general(stems.stem, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
return combine(stem_base, "eixe")
end)
elseif form == "-" then
return stems.stem
else
return form
end
end)
end
local stressed_stem = bst.stressed_stem or eix_infix_stem or stems.stem
local unstressed_stem = bst.unstressed_stem or stems.stem
-- Add the 'g' that is characteristic of g-infix verbs. We remove a stem-final v, e.g. [[beure]] with stem 'beve'
-- becomes 'beg'.
local function add_g(stemforms)
return map_general(stemforms, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
stem_base = stem_base:gsub("v$", "")
return combine(stem_base, "g")
end)
end
-- Add the 'u' of the pres_3s that is characteristic of g-infix verbs (and conjugation vowel 'e', later removed).
-- We remove a stem-final v, as well as i as part of a diphthong, e.g. [[beure]] with stem 'beve' becomes 'beue'
-- and [[veure]] with stem 'veie' becomes 'veue' (but [[riure]] with stem 'rie' becomes 'riue' not '#rue'). We
-- don't add -u after a consonant, e.g. [[doldre]] with stem 'dole' becomes 'dole' not '#dolue'.
local function add_u(stemforms)
return map_general(stemforms, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
if stem_base:find("v$") then
stem_base = stem_base:gsub("v$", "")
else
stem_base = rsub(stem_base, "(" .. V .. ")i$", "%1")
end
-- Add u after vowel but not after another u, so we get pres_3p 'duen' of [[dur]] not '#duuen'.
if rfind(stem_base, V .. "$") and not stem_base:find("u$") then
return combine(stem_base, "u")
else
return stem_base
end
end)
end
local stressed_g_infix, unstressed_g_infix, g_infix_pres_stressed
if bst.g_infix then
local function flatmap_g_infix(default)
return flatmap_general(bst.g_infix, function(form)
if form == "+" then
return default
else
return form
end
end)
end
stressed_g_infix = flatmap_g_infix(add_g(stressed_stem))
unstressed_g_infix = flatmap_g_infix(add_g(unstressed_stem))
g_infix_pres_stressed = add_u(stressed_stem)
end
stems.pres_unstressed = bst.pres_unstressed or unstressed_stem
stems.pres_stressed =
-- If no_pres_stressed given, pres_stressed stem should be empty so no forms are generated.
base.no_pres_stressed and {} or
bst.pres_stressed or
g_infix_pres_stressed or
map_general(stressed_stem, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
return stem_base
end)
stems.pres1s =
-- If no_pres_stressed given, pres1s stem should be empty so no forms are generated.
base.no_pres_stressed and {} or
stressed_g_infix or
map_general(stems.pres_stressed, function(form)
return combine(form, "o")
end)
stems.pres3s =
-- If no_pres_stressed given, pres3s stem should be empty so no forms are generated.
base.no_pres_stressed and {} or
bst.pres3s or
map_general(stems.pres_stressed, function(form)
if base.conj_vowel == "a" then
return combine(form, "a")
elseif rfind(form, C .. "[lr]$") and not rfind(form, V .. "ll$") then
return combine(form, "e")
else
return form
end
end)
stems.pres3p =
-- If no_pres_stressed given, pres3p stem should be empty so no forms are generated.
base.no_pres_stressed and {} or
map_general(stems.pres_stressed, function(form)
return combine(form, "en")
end)
local function compute_impf_stem(with_accent)
return map_general(stems.pres_unstressed, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
if conj_vowel == "a" then
return combine(stem_base, with_accent and "àv" or "av")
elseif stem_base:find("i#?$") then
form = form:gsub("i#?$", "")
return combine(rmatch(stem_base, "^(.-)" .. V .. "*$"), with_accent and "èi" or "ei")
else
return combine(stem_base, with_accent and "í" or "i") -- i -> ï after a vowel
end
end)
end
stems.impf1 = bst.impf1 or compute_impf_stem(false)
stems.impf2 = bst.impf2 or compute_impf_stem(true)
stems.pret = bst.pret or
unstressed_g_infix and map_general(unstressed_g_infix,
function(form) return combine(form, "é") end
) or
map_general(unstressed_stem, function(form)
local accent_conj_vowel = {
a = "à",
e = "é",
i = "í",
}
local stem_base, conj_vowel = split_conj_vowel(form)
return combine(stem_base, accent_conj_vowel[conj_vowel])
end)
stems.fut = bst.fut or base.inf_stem
stems.cond = bst.cond or map_general(stems.fut, function(form) return combine(form, "í") end)
stems.pres_sub_stressed = bst.pres_sub_stressed or
stressed_g_infix and map_general(stressed_g_infix, function(form) return combine(form, "i") end) or
map_general(stressed_stem, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
return combine(stem_base, "i", "is pres_sub_stressed")
end)
stems.pres_sub_unstressed = bst.pres_sub_unstressed or
unstressed_g_infix and map_general(unstressed_g_infix, function(form) return combine(form, "e") end) or
map_general(unstressed_stem, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
return combine(stem_base, conj_vowel == "i" and conj_vowel or "e")
end)
stems.impf_sub = bst.impf_sub or map_general(stems.pret, function(form)
local stem_base = rmatch(form, "^(.*)à$") -- already in "back" form, no need to convert
if stem_base then
return combine(stem_base, "é")
else
return form
end
end)
stems.pp = bst.pp or
unstressed_g_infix and map_general(unstressed_g_infix,
function(form) return combine(form, "ud") end
) or
map_general(unstressed_stem, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
-- use combine() so we get 'abduïd' from 'abdu-' of [[abduir]], 'seguid' from 'seg-' from [[seguir]], etc.
return combine(stem_base, (conj_vowel == "e" and "u" or conj_vowel) .. "d")
end)
end
local function a_to_e(base, stems, suffix)
return map_general(stems, function(form)
local stem_base = form:match("^(.-)a$")
if stem_base then
suffix = "e" .. suffix
else
stem_base = form
end
return combine_stem_ending(base, stem_base, suffix, "is full word")
end)
end
local function add_present_indic(base)
local stems = base.output_stems
local function addit(slot, stems, ending)
add3(base, "pres_" .. slot, stems, ending)
end
addit("1s", stems.pres1s, "")
insert_forms(base, "pres_2s", a_to_e(base, stems.pres3s, "s"))
addit("3s", stems.pres3s, "")
insert_forms(base, "pres_1p", a_to_e(base, stems.pres_unstressed, "m"))
insert_forms(base, "pres_2p", a_to_e(base, stems.pres_unstressed, "u"))
addit("3p", stems.pres3p, "")
end
local function add_present_subj(base)
local stems = base.output_stems
local function addit(slot, stems, ending)
add3(base, "pres_sub_" .. slot, stems, ending)
end
-- Regular -ar verb: [[amar]]: ami, amis, ami, amem, ameu, amin
-- Regular -re verb: [[batre]]: bati, batis, bati, batem, bateu, batin (same as -ar verb)
-- Regular -ir verb, no -eix- infix: [[dormir]]: dormi, dormis, dormi, dormim, dormiu, dormin
-- Regular -ir verb, -eix- infix: [[imprimir]]: imprimeixi, imprimeixis, imprimeixi, imprimim, imprimiu, imprimeixin
-- Stem changing in 123s/3p vs. 12p:
-- * -eix- infix (-eix- in all stressed forms: 123s/3p of pres ind/sub, 2s imp)
-- * [[collir]]: culli, cullis, culli, collim, colliu, cullin (cull- in all stressed forms)
-- * [[cabre]]: càpiga, càpigues, càpiga, capiguem, capigueu, càpiguen (also different endings)
addit("1s", stems.pres_sub_stressed, "")
insert_forms(base, "pres_sub_2s", a_to_e(base, stems.pres_sub_stressed, "s"))
addit("3s", stems.pres_sub_stressed, "")
addit("1p", stems.pres_sub_unstressed, "m")
addit("2p", stems.pres_sub_unstressed, "u")
insert_forms(base, "pres_sub_3p", a_to_e(base, stems.pres_sub_stressed, "n"))
end
local function add_finite_non_present(base)
local stems = base.output_stems
local function add_tense(slot, stem, s1, s2, s3, p1, p2, p3)
add_single_stem_tense(base, slot, stem, s1, s2, s3, p1, p2, p3)
end
add_tense("impf", stems.impf1, "a", "es", "a", nil, nil, "en")
add_tense("impf", stems.impf2, nil, nil, nil, "em", "eu", nil)
-- pret_1s ends in -í regardless of the normal vowel of the stem.
insert_forms(base, "pret_1s", map_general(stems.pret, function(form)
local stem_base, conj_vowel = rmatch(form, "^(.*)(" .. V .. ")$")
if not stem_base then
error(("Internal error: Preterite stem '%s' doesn't end in vowel"):format(form))
end
if rfind(conj_vowel, front_vowel_c) then
stem_base = com.front_to_back(stem_base)
end
-- Use combine_stem_ending() to handle back-to-front conversions, e.g. pegà -> peguí for [[pegar]] and ensure
-- that the prefix gets added.
return combine_stem_ending(base, stem_base, "í", "is full word") end))
-- * at the beginning of the ending means to remove an accent from the last vowel of the preterite stem.
add_tense("pret", stems.pret, nil, "*res", "", "rem", "reu", "*ren")
-- * at the beginning of the ending means to remove an accent from the last vowel of the imperfect subjunctive stem.
add_tense("impf_sub", stems.impf_sub, "s", "*ssis", "s", "ssim", "ssiu", "*ssin")
add_tense("fut", stems.fut, "é", "às", "à", "em", "eu", "an")
add_tense("cond", stems.cond, "*a", "*es", "*a", "em", "eu", "*en")
end
local function add_non_finite_forms(base)
local stems = base.output_stems
local function addit(slot, stems, ending, footnotes)
add3(base, slot, stems, ending, footnotes)
end
insert_form(base, "infinitive", {form = base.orig_verb})
-- Also insert "infinitive + reflexive pronoun" combinations if we're handling a reflexive verb. See comment below
-- for "gerund + reflexive pronoun" combinations.
if base.refl then
for _, persnum in ipairs(person_number_list) do
insert_form(base, "infinitive_" .. persnum, {form = base.orig_verb})
end
end
-- Gerunds don't have an umlaut over the i in cases like 'abduint' of 'abduir' (not '#abduïnt').
local pres_unstressed_no_umlaut = map_general(stems.pres_unstressed, function(form)
return rsub(form, "ï$", "i")
end)
addit("gerund", pres_unstressed_no_umlaut, "nt")
-- Also insert "gerund + reflexive pronoun" combinations if we're handling a reflexive verb. We insert exactly the
-- same form as for the bare gerund; later on in add_reflexive_or_fixed_clitic_to_forms(), we add the appropriate
-- clitic pronouns. It's important not to do this for non-reflexive verbs, because in that case, the clitic
-- pronouns won't be added, and {{ca-verb form of}} will wrongly consider all these combinations as possible
-- inflections of the bare gerund. Thanks to [[User:JeffDoozan]] for this bug fix.
if base.refl then
for _, persnum in ipairs(person_number_list) do
addit("gerund_" .. persnum, pres_unstressed_no_umlaut, "nt")
end
end
addit("pp_ms", stems.pp, "")
if not base.pp_inv then
addit("pp_fs", stems.pp, "a")
-- make_plural() handles the complexities of e.g. 'vist' of [[veure]] -> 'vistos'/'vists' and 'romàs' of
-- [[romandre]] -> 'romasos'. We need to use flatmap_general() because make_plural() may return more than one
-- plural, and we need to use map_general() on the result, applying combine_stem_ending(), to ensure that
-- prefixes get properly added and plurals like 'amads' of stem 'amad' of [[amar]] get converted to 'amats'.
insert_forms(base, "pp_mp", map_general(flatmap_general(stems.pp, function(form)
-- Remove any # indicating that an accent will be dropped; it will be dropped in any case by make_plural().
form = form:gsub("#$", "")
return com.make_plural(form, "m")
end), function(form)
return combine_stem_ending(base, form, "", "is full word")
end))
addit("pp_fp", stems.pp, "es")
end
end
local function add_imperatives(base)
if base.noimp then
return
end
-- Copy pres3s to imperative since they are almost always the same.
insert_forms(base, "imp_2s", iut.map_forms(base.forms.pres_3s, function(form) return form end))
-- Copy pres2p to imperative plural since they are almost always the same.
insert_forms(base, "imp_2p", iut.map_forms(base.forms.pres_2p, function(form) return form end))
-- Copy subjunctives to imperatives.
for _, persnum in ipairs({"3s", "1p", "3p"}) do
local from = "pres_sub_" .. persnum
local to = "imp_" .. persnum
insert_forms(base, to, iut.map_forms(base.forms[from], function(form) return form end))
end
end
local function fix_double_umlauts(base)
for slot, forms in pairs(base.forms) do
for _, form in ipairs(forms) do
form.form = form.form:gsub("üï", "uï")
end
end
end
local function process_slot_overrides(base, filter_slot, reflexive_only)
local overrides = reflexive_only and base.basic_reflexive_only_overrides or base.basic_overrides
for slot, forms in pairs(overrides) do
if not filter_slot or filter_slot(slot) then
add3(base, slot, forms, "", nil, "allow overrides")
end
end
end
local function link_clitic(clitic)
return (clitic:gsub("([^ %-]+)", "[[%1]]"))
end
-- Prefix `form` with `clitic`, adding fixed text `between` between them. Add links as appropriate unless the user
-- requested no links. Check whether form already has brackets (as will be the case if the form has a fixed clitic).
local function prefix_clitic_to_form(base, clitic, between, form)
if base.alternant_multiword_spec.args.noautolinkverb then
return clitic .. between .. form
else
local clitic_pref = link_clitic(clitic) .. between
if form:find("%[%[") then
return clitic_pref .. form
else
return clitic_pref .. "[[" .. form .. "]]"
end
end
end
-- Suffix `form` with `clitic`. Add links as appropriate unless the user requested no links. Check whether form already
-- has brackets (as will be the case if the form has a fixed clitic).
local function suffix_clitic_to_form(base, clitic, form)
local autolink = not base.alternant_multiword_spec.args.noautolinkverb
if base.alternant_multiword_spec.args.noautolinkverb then
return form .. clitic
else
local clitic_suf = link_clitic(clitic)
if form:find("%[%[") then
return form .. clitic_suf
else
return "[[" .. form .. "]]" .. clitic_suf
end
end
end
-- Add a reflexive pronoun or fixed clitic (FIXME: not working), as appropriate to the base forms that were generated.
-- `do_joined` means to do only the forms where the pronoun is joined to the end of the form; otherwise, do only the
-- forms where it is not joined and precedes the form.
local function add_reflexive_or_fixed_clitic_to_forms(base, do_reflexive, do_joined)
for _, slotaccel in ipairs(base.alternant_multiword_spec.verb_slots_basic) do
local slot, accel = unpack(slotaccel)
local persnum
if slot:find("[123]") then
persnum = slot:match("^.*_(.-)$")
else
persnum = "3s"
end
local function get_proclitic(form)
--if not do_reflexive then
-- return base.clitic
if form:find("^[aeiouh]") then
return proclitic_elided_person_number_to_reflexive_pronoun[persnum]
else
return proclitic_non_elided_person_number_to_reflexive_pronoun[persnum]
end
end
local function get_enclitic(form)
--if not do_reflexive then
-- return base.clitic
if rfind(form, C .. "$") or rfind(form, V .. "[iu]$") and not form:find("[gq]ui$") then
return enclitic_non_elided_person_number_to_reflexive_pronoun[persnum]
else
return enclitic_elided_person_number_to_reflexive_pronoun[persnum]
end
end
if base.forms[slot] then
if do_reflexive and slot:find("^pp_") or slot == "infinitive_linked" then
-- do nothing with reflexive past participles or with infinitive linked (handled at the end)
elseif slot:find("^neg_imp_") then
error("Internal error: Should not have forms set for negative imperative at this stage")
else
local slot_has_suffixed_clitic = slot:find("infinitive") or slot:find("gerund") or slot:find("^imp_")
-- Maybe generate non-reflexive parts and separated syntactic variants for use in
-- {{ca-verb form of}}. See comment in add_slots() above `need_special_verb_form_of_slots`.
-- Check for do_joined so we only run this code once.
if do_reflexive and do_joined and base.alternant_multiword_spec.source_template == "ca-verb form of" and
-- Skip personal variants of infinitives and gerunds so we don't think [[arrependendo]] is a
-- non-reflexive equivalent of [[arrependendo-me]].
not slot:find("infinitive_") and not slot:find("gerund_") then
-- Clone the forms because we will be destructively modifying them just below, adding the reflexive
-- pronoun.
insert_forms(base, slot .. "_non_reflexive", mw.clone(base.forms[slot]))
if slot_has_suffixed_clitic then
insert_forms(base, slot .. "_variant", iut.map_forms(base.forms[slot], function(form)
return prefix_clitic_to_form(base, get_proclitic(form), "... ", form)
end))
end
end
if slot_has_suffixed_clitic then
if do_joined then
-- Add clitic after form.
for _, form in ipairs(base.forms[slot]) do
form.form = suffix_clitic_to_form(base, get_enclitic(form.form), form.form)
end
end
elseif not do_joined then
-- Add clitic before form.
for _, form in ipairs(base.forms[slot]) do
form.form = prefix_clitic_to_form(base, get_proclitic(form.form), "", form.form)
end
end
end
end
end
end
local function handle_infinitive_linked(base)
-- Compute linked versions of potential lemma slots, for use in {{ca-verb}}.
-- We substitute the original lemma (before removing links) for forms that
-- are the same as the lemma, if the original lemma has links.
for _, slot in ipairs({"infinitive"}) do
insert_forms(base, slot .. "_linked", iut.map_forms(base.forms[slot], function(form)
if form == base.lemma and rfind(base.linked_lemma, "%[%[") then
return base.linked_lemma
else
return form
end
end))
end
end
local function generate_negative_imperatives(base)
if base.noimp then
return
end
-- Copy subjunctives to negative imperatives, preceded by "no".
for _, persnum in ipairs(neg_imp_person_number_list) do
local from = "pres_sub_" .. persnum
local to = "neg_imp_" .. persnum
insert_forms(base, to, iut.map_forms(base.forms[from], function(form)
if base.alternant_multiword_spec.args.noautolinkverb then
return "no " .. form
elseif form:find("%[%[") then
-- already linked, e.g. when reflexive
return "[[no]] " .. form
else
return "[[no]] [[" .. form .. "]]"
end
end))
end
end
-- Process specs given by the user using 'addnote[SLOTSPEC][FOOTNOTE][FOOTNOTE][...]'.
local function process_addnote_specs(base)
for _, spec in ipairs(base.addnote_specs) do
for _, slot_spec in ipairs(spec.slot_specs) do
slot_spec = "^" .. slot_spec .. "$"
for slot, forms in pairs(base.forms) do
if rfind(slot, slot_spec) then
-- To save on memory, side-effect the existing forms.
for _, form in ipairs(forms) do
form.footnotes = iut.combine_footnotes(form.footnotes, spec.footnotes)
end
end
end
end
end
end
local function add_missing_links_to_forms(base)
-- Any forms without links should get them now. Redundant ones will be stripped later.
for slot, forms in pairs(base.forms) do
for _, form in ipairs(forms) do
if not form.form:find("%[%[") then
form.form = "[[" .. form.form .. "]]"
end
end
end
end
local function conjugate_verb(base)
construct_stems(base)
add_present_indic(base)
add_present_subj(base)
add_finite_non_present(base)
add_non_finite_forms(base)
fix_double_umlauts(base)
-- do non-reflexive non-imperative slot overrides
process_slot_overrides(base, function(slot)
return not slot:find("^imp_") and not slot:find("^neg_imp_")
end)
-- This should happen after process_slot_overrides() in case a derived slot is based on an override
-- (as with the imp_3s of [[dar]], [[estar]]).
add_imperatives(base)
-- do non-reflexive positive imperative slot overrides
process_slot_overrides(base, function(slot)
return slot:find("^imp_")
end)
-- We need to add joined reflexives, then joined and non-joined clitics, then non-joined reflexives, so we get
-- [[arrepéndete]] but [[no]] [[te]] [[arrependas]].
if base.refl then
add_reflexive_or_fixed_clitic_to_forms(base, "do reflexive", "do joined")
process_slot_overrides(base, nil, "do reflexive") -- do reflexive-only slot overrides
add_reflexive_or_fixed_clitic_to_forms(base, "do reflexive", false)
end
-- This should happen after add_reflexive_or_fixed_clitic_to_forms() so negative imperatives get the reflexive pronoun
-- and clitic in them.
generate_negative_imperatives(base)
-- do non-reflexive negative imperative slot overrides
-- FIXME: What about reflexive negative imperatives?
process_slot_overrides(base, function(slot)
return slot:find("^neg_imp_")
end)
-- This should happen before add_missing_links_to_forms() so that the comparison `form == base.lemma`
-- in handle_infinitive_linked() works correctly and compares unlinked forms to unlinked forms.
handle_infinitive_linked(base)
process_addnote_specs(base)
if not base.alternant_multiword_spec.args.noautolinkverb then
add_missing_links_to_forms(base)
end
end
local function parse_indicator_spec(angle_bracket_spec)
-- Store the original angle bracket spec so we can reconstruct the overall conj spec with the lemma(s) in them.
local base = {
angle_bracket_spec = angle_bracket_spec,
user_basic_overrides = {},
user_stems = {},
addnote_specs = {},
}
local function parse_err(msg)
error(msg .. ": " .. angle_bracket_spec)
end
local function fetch_footnotes(separated_group)
local footnotes
for j = 2, #separated_group - 1, 2 do
if separated_group[j + 1] ~= "" then
parse_err("Extraneous text after bracketed footnotes: '" .. table.concat(separated_group) .. "'")
end
if not footnotes then
footnotes = {}
end
table.insert(footnotes, separated_group[j])
end
return footnotes
end
local inside = angle_bracket_spec:match("^<(.*)>$")
assert(inside)
if inside == "" then
return base
end
local segments = put.parse_balanced_segment_run(inside, "[", "]")
local dot_separated_groups = put.split_alternating_runs(segments, "%.")
for i, dot_separated_group in ipairs(dot_separated_groups) do
local first_element = dot_separated_group[1]
if first_element == "addnote" then
local spec_and_footnotes = fetch_footnotes(dot_separated_group)
if #spec_and_footnotes < 2 then
parse_err("Spec with 'addnote' should be of the form 'addnote[SLOTSPEC][FOOTNOTE][FOOTNOTE][...]'")
end
local slot_spec = table.remove(spec_and_footnotes, 1)
local slot_spec_inside = rmatch(slot_spec, "^%[(.*)%]$")
if not slot_spec_inside then
parse_err("Internal error: slot_spec " .. slot_spec .. " should be surrounded with brackets")
end
local slot_specs = rsplit(slot_spec_inside, ",")
-- FIXME: Here, [[Module:it-verb]] called strip_spaces(). Generally we don't do this. Should we?
table.insert(base.addnote_specs, {slot_specs = slot_specs, footnotes = spec_and_footnotes})
elseif indicator_flags[first_element] then
if #dot_separated_group > 1 then
parse_err("No footnotes allowed with '" .. first_element .. "' spec")
end
if base[first_element] then
parse_err("Spec '" .. first_element .. "' specified twice")
end
base[first_element] = true
elseif first_element:find("^var:") then
if #dot_separated_group > 1 then
parse_err(("Can't attach footnotes to 'var:' spec '%s'"):format(first_element))
end
base.var = first_element:match("^var:(.*)$")
elseif first_element:find(":") then
local colon_separated_groups = put.split_alternating_runs(dot_separated_group, "%s*:%s*")
local first_element = colon_separated_groups[1][1]
if #colon_separated_groups[1] > 1 then
parse_err("Can't attach footnotes directly to '" .. first_element .. "' spec; attach them to the " ..
"colon-separated values following the initial colon")
end
if overridable_stems[first_element] then
if base.user_stems[first_element] then
parse_err("Overridable stem '" .. first_element .. "' specified twice")
end
table.remove(colon_separated_groups, 1)
base.user_stems[first_element] = overridable_stems[first_element](colon_separated_groups,
{prefix = first_element, base = base, parse_err = parse_err, fetch_footnotes = fetch_footnotes})
else -- assume a basic override; we validate further later when the possible slots are available
if base.user_basic_overrides[first_element] then
parse_err("Basic override '" .. first_element .. "' specified twice")
end
table.remove(colon_separated_groups, 1)
base.user_basic_overrides[first_element] = allow_multiple_values_for_override(colon_separated_groups,
{prefix = first_element, base = base, parse_err = parse_err, fetch_footnotes = fetch_footnotes},
"is form override")
end
else
parse_err("Unrecognized spec '" .. first_element .. "'")
end
end
return base
end
-- Normalize all lemmas, substituting the pagename for blank lemmas and adding links to multiword lemmas.
local function normalize_all_lemmas(alternant_multiword_spec, head)
-- (1) Add links to all before and after text. Remember the original text so we can reconstruct the verb spec later.
if not alternant_multiword_spec.args.noautolinktext then
iut.add_links_to_before_and_after_text(alternant_multiword_spec, "remember original")
end
-- (2) Remove any links from the lemma, but remember the original form so we can use it below in the 'lemma_linked'
-- form.
iut.map_word_specs(alternant_multiword_spec, function(base)
if base.lemma == "" then
base.lemma = head
end
base.user_specified_lemma = base.lemma
base.lemma = m_links.remove_links(base.lemma)
local refl_verb = base.lemma
local verb, refl = rmatch(refl_verb, "^(.-)%-(se)$")
if not verb then
verb, refl = rmatch(refl_verb, "^(.-)('s)$")
end
if not verb then
verb, refl = refl_verb, nil
end
base.user_specified_verb = verb
base.refl = refl
base.verb = base.user_specified_verb
local linked_lemma
if alternant_multiword_spec.args.noautolinkverb or base.user_specified_lemma:find("%[%[") then
linked_lemma = base.user_specified_lemma
elseif base.refl then
-- Reconstruct the linked lemma with separate links around base verb, reflexive pronoun and clitic.
linked_lemma = base.user_specified_verb == base.verb and "[[" .. base.user_specified_verb .. "]]" or
"[[" .. base.verb .. "|" .. base.user_specified_verb .. "]]"
linked_lemma = linked_lemma .. (refl and "-[[" .. refl .. "]]" or "")
else
-- Add links to the lemma so the user doesn't specifically need to, since we preserve links in multiword
-- lemmas and include links in non-lemma forms rather than allowing the entire form to be a link.
linked_lemma = iut.add_links(base.user_specified_lemma)
end
base.linked_lemma = linked_lemma
end)
end
local function detect_indicator_spec(base)
if (base.only3s and 1 or 0) + (base.only3sp and 1 or 0) + (base.only3p and 1 or 0) > 1 then
error("Only one of 'only3s', 'only3sp' and 'only3p' can be specified")
end
base.forms = {}
base.input_stems = {}
base.basic_overrides = {}
base.basic_reflexive_only_overrides = {}
base.orig_verb = base.verb -- in case of a 'like = "..."' redirect
if not base.no_built_in then
local function match_built_in_spec(verb, built_in_spec)
local prefix, non_prefixed_verb
if type(built_in_spec.match) == "function" then
prefix, non_prefixed_verb = built_in_spec.match(verb)
elseif built_in_spec.match:find("^%^") and rsub(built_in_spec.match, "^%^", "") == verb then
-- begins with ^, for exact match, and matches
prefix, non_prefixed_verb = "", verb
else
prefix, non_prefixed_verb = rmatch(verb, "^(.*)(" .. built_in_spec.match .. ")$")
end
return prefix, non_prefixed_verb
end
local function find_built_in(verb, var)
for _, built_in_spec in ipairs(built_in_conjugations) do
local prefix, non_prefixed_verb = match_built_in_spec(verb, built_in_spec)
if prefix then
if not built_in_spec.var then
if var then
error(("Can't specify a variant spec 'var:%s' with verb '%s'"):format(var, verb))
end
return prefix, non_prefixed_verb, built_in_spec
elseif not var then
local possible_vars = {}
for _, built_in_spec in ipairs(built_in_conjugations) do
local prefix, non_prefixed_verb = match_built_in_spec(verb, built_in_spec)
if prefix then
table.insert(possible_vars, built_in_spec.var)
end
end
error(("For verb '%s', must specify a variant using 'var:...'; possible values are %s"):format(
verb, table.concat(possible_vars, ", ")))
elseif built_in_spec.var == var then
return prefix, non_prefixed_verb, built_in_spec
end
end
end
return nil
end
local prefix, non_prefixed_verb, built_in_spec = find_built_in(base.verb, base.var)
if prefix then
-- we found a built-in verb
if built_in_spec.like then
-- we found a redirect to another verb that has the same conjugation, just a different infinitive
base.verb = prefix .. built_in_spec.like
local new_prefix, new_non_prefixed_verb, new_built_in_spec = find_built_in(base.verb, built_in_spec.likevar)
if new_prefix then
-- redirected to another built-in verb
base.prefix = new_prefix
base.non_prefixed_verb = new_non_prefixed_verb
built_in_spec = new_built_in_spec
else
built_in_spec = nil
end
else
base.prefix = prefix
base.non_prefixed_verb = non_prefixed_verb
end
end
if built_in_spec then
-- we found a built-in verb, possibly redirecting to another built-in verb
for stem, forms in pairs(built_in_spec.forms) do
if type(forms) == "function" then
forms = forms(base, base.prefix)
end
if stem:find("^refl_") then
stem = stem:gsub("^refl_", "")
if not base.alternant_multiword_spec.verb_slots_basic_map[stem] then
error("Internal error: setting for 'refl_" .. stem .. "' does not refer to a basic verb slot")
end
base.basic_reflexive_only_overrides[stem] = forms
elseif base.alternant_multiword_spec.verb_slots_basic_map[stem] then
-- an individual form override of a basic form
base.basic_overrides[stem] = forms
else
base.input_stems[stem] = forms
end
end
end
end
-- Override built-in-verb stems and overrides with user-specified ones.
for stem, values in pairs(base.user_stems) do
base.input_stems[stem] = values
end
for override, values in pairs(base.user_basic_overrides) do
if not base.alternant_multiword_spec.verb_slots_basic_map[override] then
error("Unrecognized override '" .. override .. "': " .. base.angle_bracket_spec)
end
base.basic_overrides[override] = values
end
base.prefix = base.prefix or ""
base.non_prefixed_verb = base.non_prefixed_verb or base.verb
local inf_stem, suffix = rmatch(base.non_prefixed_verb, "^(.*)(re)$")
if not inf_stem then
inf_stem, suffix = rmatch(base.non_prefixed_verb, "^(.*)([aeiu]r)$")
end
if not inf_stem then
error("Unrecognized infinitive: " .. base.verb)
end
-- Remove accents from e.g. [[parèixer]], [[córrer]].
inf_stem = com.remove_accents(inf_stem)
-- Save full infinitive stem for use in future and conditional.
base.inf_stem = (inf_stem .. suffix):gsub("e$", "")
local stem = inf_stem
if suffix == "re" then
-- verbs in -ldre, -ndre have stem without the d
stem = stem:gsub("([ln])d$", "%1")
elseif suffix == "ur" then
stem = stem .. "u"
end
base.conj_vowel = (suffix == "re" or suffix == "ur") and "e" or suffix:gsub("r$", "")
-- If the stem is followed by a front vowel, convert it to its "back" form before calling combine_stem_ending(),
-- which expects the "back" form of the stem and may convert it back to the "front" form. Don't do this conversion
-- for ï so we leave [[arguïr]] (underlyingly 'argüïr') as 'argu' ("back" form), which becomes 'argü' ("front" form)
-- before front vowel ï and we end up with base.stem containing the underlying form 'argüï'. We remove the first of
-- two umlauts in a row in a postprocessing step (fix_double_umlauts()).
if rfind(suffix, "^[ei]") then
stem = com.front_to_back(stem)
end
-- Use combine_stem_ending() so we get ï if necessary.
base.stem = combine_stem_ending(base, stem, base.conj_vowel, false, "dont include prefix")
-- Propagate built-in-verb indicator flags to `base` and combine with user-specified flags.
for indicator_flag, _ in pairs(indicator_flags) do
base[indicator_flag] = base[indicator_flag] or base.input_stems[indicator_flag]
end
end
local function detect_all_indicator_specs(alternant_multiword_spec)
-- Propagate some settings up; some are used internally, others by [[Module:pt-headword]].
iut.map_word_specs(alternant_multiword_spec, function(base)
-- Internal indicator flags. Do these before calling detect_indicator_spec() because add_slots() uses them.
for _, prop in ipairs { "refl", "clitic" } do
if base[prop] then
alternant_multiword_spec[prop] = true
end
end
base.alternant_multiword_spec = alternant_multiword_spec
end)
add_slots(alternant_multiword_spec)
iut.map_word_specs(alternant_multiword_spec, function(base)
detect_indicator_spec(base)
-- User-specified indicator flags. Do these after calling detect_indicator_spec() because the latter may set these
-- indicators for built-in verbs.
for prop, _ in pairs(indicator_flags) do
if base[prop] then
alternant_multiword_spec[prop] = true
end
end
end)
end
local function add_categories_and_annotation(alternant_multiword_spec, base, multiword_lemma)
local function insert_ann(anntype, value)
m_table.insertIfNot(alternant_multiword_spec.annotation[anntype], value)
end
local function insert_cat(cat, also_when_multiword)
-- Don't place multiword terms in categories like 'Catalan verbs ending in -ar' to avoid spamming the
-- categories with such terms.
if also_when_multiword or not multiword_lemma then
m_table.insertIfNot(alternant_multiword_spec.categories, cat .. "ภาษากาตาลา")
end
end
if check_for_red_links and alternant_multiword_spec.source_template == "ca-conj" and multiword_lemma then
for _, slot_and_accel in ipairs(alternant_multiword_spec.all_verb_slots) do
local slot = slot_and_accel[1]
local forms = base.forms[slot]
local must_break = false
if forms then
for _, form in ipairs(forms) do
if not form.form:find("%[%[") then
local title = mw.title.new(form.form)
if title and not title.exists then
insert_cat("verbs with red links in their inflection tables")
must_break = true
break
end
end
end
end
if must_break then
break
end
end
end
map_general(base.output_stems.stem, function(stem)
local stem_base, conj_vowel = split_conj_vowel(stem)
local need_no_eix_infix = true
if conj_vowel ~= base.conj_vowel then
insert_ann("conj", "[[ภาคผนวก:คำกริยาภาษากาตาลา#คำกริยาไม่ปรกติ|การผันรูปผสม]]")
insert_cat("mixed conjugation verbs")
elseif conj_vowel == "a" then
insert_ann("conj", "[[ภาคผนวก:คำกริยาภาษากาตาลา#การผันรูปที่หนึ่ง|การผันรูปที่หนึ่ง]]")
insert_cat("first conjugation verbs")
elseif conj_vowel == "e" then
insert_ann("conj", "[[ภาคผนวก:คำกริยาภาษากาตาลา#การผันรูปที่สอง|การผันรูปที่สอง]]")
insert_cat("second conjugation verbs")
elseif conj_vowel == "i" then
insert_ann("conj", "[[ภาคผนวก:คำกริยาภาษากาตาลา#การผันรูปที่สาม|การผันรูปที่สาม]]")
insert_cat("third conjugation verbs")
need_no_eix_infix = false
map_general(base.output_stems.eix_infix, function(form)
if form == "+" then
insert_ann("eix_infix", "with ''-eix-''")
insert_cat("third conjugation verbs with -eix-")
elseif form == "-" then
insert_ann("eix_infix", "without ''-eix-''")
insert_cat("third conjugation verbs without -eix-")
end
end)
else
error(("Internal error: Stem '%s' doesn't end in conjugation vowel a/e/i and split_conj_vowel() didn't catch it"
):format(stem))
end
if need_no_eix_infix then
insert_ann("eix_infix", "no infix")
end
end)
if base.input_stems.g_infix then
insert_ann("g_infix", "with velar infix")
insert_cat("verbs with velar infix")
else
insert_ann("g_infix", "no infix")
end
if base.output_stems.irreg then
insert_ann("irreg", "ไม่ปรกติ")
insert_cat("คำกริยาไม่ปรกติ")
else
insert_ann("irreg", "ปรกติ")
end
if base.only3s then
insert_ann("defective", "อบุรุษ")
insert_cat("คำอบุรุษกริยา")
elseif base.only3sp then
insert_ann("defective", "บุรุษที่สามเท่านั้น")
insert_cat("คำกริยาบุรุษที่สามเท่านั้น")
elseif base.only3p then
insert_ann("defective", "บุรุษที่สามพหูพจน์เท่านั้น")
insert_cat("คำกริยาบุรุษที่สามพหูพจน์เท่านั้น")
elseif base.no_pres_stressed then
insert_ann("defective", "บกพร่อง")
insert_cat("คำกริยาบกพร่อง")
else
insert_ann("defective", "บุรุษปรกติ")
end
--if base.clitic then
-- insert_cat("verbs with lexical clitics")
--end
if base.refl then
insert_cat("คำกริยาสะท้อน")
end
local stem_base, conj_vowel = split_conj_vowel(base.stem)
local cons_alt
if conj_vowel == "i" and base.output_stems.eix_infix == "+" then
-- no alternations in verbs like [[afligir]] because all endings are front
elseif stem_base:find("ç$") then
cons_alt = "ç-c"
elseif stem_base:find("c$") then
cons_alt = "c-qu"
elseif stem_base:find("g$") then
cons_alt = "g-gu"
elseif stem_base:find("gu$") then
cons_alt = "gu-gü"
elseif stem_base:find("j$") then
cons_alt = "j-g"
elseif stem_base:find("qu$") then
cons_alt = "qu-qü"
end
if cons_alt then
local desc = "สลับ " .. cons_alt
insert_ann("cons_alt", desc)
--insert_cat("คำกริยาที่" .. desc)
m_table.insertIfNot(alternant_multiword_spec.categories, "คำกริยาภาษากาตาลาที่" .. desc)
else
insert_ann("cons_alt", "ไม่สลับพยัญชนะ")
end
end
-- Compute the categories to add the verb to, as well as the annotation to display in the
-- conjugation title bar. We combine the code to do these functions as both categories and
-- title bar contain similar information.
local function compute_categories_and_annotation(alternant_multiword_spec)
alternant_multiword_spec.categories = {}
local ann = {}
alternant_multiword_spec.annotation = ann
ann.conj = {}
ann.g_infix = {}
ann.eix_infix = {}
ann.irreg = {}
ann.defective = {}
ann.cons_alt = {}
local multiword_lemma = false
for _, form in ipairs(alternant_multiword_spec.forms.infinitive) do
if form.form:find(" ") then
multiword_lemma = true
break
end
end
iut.map_word_specs(alternant_multiword_spec, function(base)
add_categories_and_annotation(alternant_multiword_spec, base, multiword_lemma)
end)
local ann_parts = {}
local conj = table.concat(ann.conj, " or ")
if conj ~= "" then
table.insert(ann_parts, conj)
end
local eix_infix = table.concat(ann.eix_infix, " or ")
if eix_infix ~= "" and eix_infix ~= "no infix" then
table.insert(ann_parts, eix_infix)
end
local irreg = table.concat(ann.irreg, " or ")
if irreg ~= "" and irreg ~= "regular" then
table.insert(ann_parts, irreg)
end
local g_infix = table.concat(ann.g_infix, " or ")
if g_infix ~= "" and g_infix ~= "no infix" then
table.insert(ann_parts, g_infix)
end
local defective = table.concat(ann.defective, " or ")
if defective ~= "" and defective ~= "regular" then
table.insert(ann_parts, defective)
end
local cons_alt = table.concat(ann.cons_alt, " or ")
if cons_alt ~= "" and cons_alt ~= "non-alternating" then
table.insert(ann_parts, cons_alt)
end
alternant_multiword_spec.annotation = table.concat(ann_parts, ", ")
end
local function show_forms(alternant_multiword_spec)
local lemmas = alternant_multiword_spec.forms.infinitive
alternant_multiword_spec.lemmas = lemmas -- save for later use in make_table()
local reconstructed_verb_spec = iut.reconstruct_original_spec(alternant_multiword_spec)
local function transform_accel_obj(slot, formobj, accel_obj)
-- No accelerators for negative imperatives, which are always multiword and derived directly from the
-- present subjunctive.
if slot:find("^neg_imp") then
return nil
end
if accel_obj then
accel_obj.form = "verb-form-" .. reconstructed_verb_spec
end
return accel_obj
end
local props = {
lang = lang,
lemmas = lemmas,
transform_accel_obj = transform_accel_obj,
slot_list = alternant_multiword_spec.verb_slots_basic,
}
iut.show_forms(alternant_multiword_spec.forms, props)
alternant_multiword_spec.footnote_basic = alternant_multiword_spec.forms.footnote
end
local notes_template = [=[
<div class="roa-footnote-outer-div" style="width:100%;">
<div class="roa-footnote-inner-div">
{footnote}
</div></div>
]=]
local basic_table = [=[
{description}<div class="NavFrame">
<div class="NavHead"> การผันรูปของ {title}</div>
<div class="NavContent">
{\op}| class="roa-inflection-table" data-toggle-category="inflection"
|-
! colspan="3" class="roa-nonfinite-header" | <span title="infinitiu">รูปกริยากลาง</span>
| colspan="5" | {infinitive}
|-
! colspan="3" class="roa-nonfinite-header" | <span title="gerundi">รูปกริยาเป็นนาม</span>
| colspan="5" | {gerund}
|-
! rowspan="3" colspan="2" class="roa-nonfinite-header" | <span title="participi passat">รูปกริยาขยายอดีตกาล</span>
| colspan="2" class="roa-nonfinite-header" |
! colspan="2" class="roa-nonfinite-header" | เพศชาย
! colspan="2" class="roa-nonfinite-header" | เพศหญิง
|-
! colspan="2" class="roa-nonfinite-header" | เอกพจน์
| colspan="2" | {pp_ms}
| colspan="2" | {pp_fs}
|-
! colspan="2" class="roa-nonfinite-header" | พหูพจน์
| colspan="2" | {pp_mp}
| colspan="2" | {pp_fp}
|-
! colspan="2" rowspan="2" class="roa-person-number-header" | บุรุษ
! colspan="3" class="roa-person-number-header" | เอกพจน์
! colspan="3" class="roa-person-number-header" | พหูพจน์
|-
! class="roa-person-number-header" style="width:12.5%;" | บุรุษที่หนึ่ง
! class="roa-person-number-header" style="width:12.5%;" | บุรุษที่สอง
! class="roa-person-number-header" style="width:12.5%;" | บุรุษที่สาม
! class="roa-person-number-header" style="width:12.5%;" | บุรุษที่หนึ่ง
! class="roa-person-number-header" style="width:12.5%;" | บุรุษที่สอง
! class="roa-person-number-header" style="width:12.5%;" | บุรุษที่สาม
|-
! rowspan="6" class="roa-indicative-left-rail" | <span title="indicatiu">มาลาบอกเล่า</span>
! class="roa-indicative-left-rail" |
! class="roa-indicative-left-rail" | <<jo>>
! class="roa-indicative-left-rail" | <<tu>>
! class="roa-indicative-left-rail" | <<ell>>/<<ella>><br /><<vostè>>
! class="roa-indicative-left-rail" | <<nosaltres>><br /><<nós>>
! class="roa-indicative-left-rail" | <<vosaltres>><br /><<vós>>
! class="roa-indicative-left-rail" | <<ells>>/<<elles>><br /><<vostès>>
|-
! class="roa-indicative-left-rail" style="height:3em;" | <span title="present">ปัจจุบันกาล</span>
| {pres_1s}
| {pres_2s}
| {pres_3s}
| {pres_1p}
| {pres_2p}
| {pres_3p}
|-
! class="roa-indicative-left-rail" style="height:3em;" | <span title="imperfet">ไม่สมบูรณ์</span>
| {impf_1s}
| {impf_2s}
| {impf_3s}
| {impf_1p}
| {impf_2p}
| {impf_3p}
|-
! class="roa-indicative-left-rail" style="height:3em;" | <span title="futur">อนาคตกาล</span>
| {fut_1s}
| {fut_2s}
| {fut_3s}
| {fut_1p}
| {fut_2p}
| {fut_3p}
|-
! class="roa-indicative-left-rail" style="height:3em;" | <span title="passat">อดีตกาลสิ้นสุด (สมบูรณ์)</span>
| {pret_1s}
| {pret_2s}
| {pret_3s}
| {pret_1p}
| {pret_2p}
| {pret_3p}
|-
! class="roa-indicative-left-rail" style="height:3em;" | <span title="condicional">มาลาเงื่อนไข</span>
| {cond_1s}
| {cond_2s}
| {cond_3s}
| {cond_1p}
| {cond_2p}
| {cond_3p}
|-
! class="roa-subjunctive-left-rail" rowspan="3" | <span title="subjuntiu">มาลาสมมุติ</span>
! class="roa-subjunctive-left-rail" |
! class="roa-subjunctive-left-rail" | <<jo>>
! class="roa-subjunctive-left-rail" | <<tu>>
! class="roa-subjunctive-left-rail" | <<ell>>/<<ella>><br /><<vostè>>
! class="roa-subjunctive-left-rail" | <<nosaltres>><br /><<nós>>
! class="roa-subjunctive-left-rail" | <<vosaltres>><br /><<vós>>
! class="roa-subjunctive-left-rail" | <<ells>>/<<elles>><br /><<vostès>>
|-
! class="roa-subjunctive-left-rail" style="height:3em;" | <span title="present">ปัจจุบันกาล</span>
| {pres_sub_1s}
| {pres_sub_2s}
| {pres_sub_3s}
| {pres_sub_1p}
| {pres_sub_2p}
| {pres_sub_3p}
|-
! class="roa-subjunctive-left-rail" style="height:3em;" rowspan="1" | <span title="imperfet">ไม่สมบูรณ์</span>
| {impf_sub_1s}
| {impf_sub_2s}
| {impf_sub_3s}
| {impf_sub_1p}
| {impf_sub_2p}
| {impf_sub_3p}
|-
! rowspan="3" class="roa-imperative-left-rail" style="height:3em;" | <span title="imperatiu">มาลาสั่ง</span>
! class="roa-imperative-left-rail" |
! class="roa-imperative-left-rail" | —
! class="roa-imperative-left-rail" | <<tu>>
! class="roa-imperative-left-rail" | <<vostè>>
! class="roa-imperative-left-rail" | <<nosaltres>>
! class="roa-imperative-left-rail" | <<vosaltres>><br /><<vós>>
! class="roa-imperative-left-rail" | <<vostès>>
|-
! class="roa-imperative-left-rail" style="height:3em;" | <span title="afirmatiu">เชิงยืนยัน</span>
| —
| {imp_2s}
| {imp_3s}
| {imp_1p}
| {imp_2p}
| {imp_3p}
|-
! class="roa-imperative-left-rail" style="height:3em;" | <span title="negatiu">เชิงปฏิเสธ</span> (<<no>>)
| —
| {neg_imp_2s}
| {neg_imp_3s}
| {neg_imp_1p}
| {neg_imp_2p}
| {neg_imp_3p}
|{\cl}{notes_clause}</div></div>]=]
local function make_table(alternant_multiword_spec)
local forms = alternant_multiword_spec.forms
forms.title = link_term(alternant_multiword_spec.lemmas[1].form, nil, "term")
local ann_parts = {}
if alternant_multiword_spec.annotation ~= "" then
table.insert(ann_parts, alternant_multiword_spec.annotation)
end
if alternant_multiword_spec.args.titlenote then
table.insert(ann_parts, alternant_multiword_spec.args.titlenote)
end
local annotation = table.concat(ann_parts, ", ")
if annotation ~= "" then
forms.title = forms.title .. " (" .. annotation .. ")"
end
forms.description = ""
-- Format the table.
forms.footnote = alternant_multiword_spec.footnote_basic
forms.notes_clause = forms.footnote ~= "" and m_string_utilities.format(notes_template, forms) or ""
local table_with_pronouns = rsub(basic_table, "<<([^<>|]-)|([^<>|]-)>>", link_term)
local table_with_pronouns = rsub(table_with_pronouns, "<<(.-)>>", link_term)
return require("Module:TemplateStyles")("Module:roa-verb/style.css") ..
m_string_utilities.format(table_with_pronouns, forms)
end
-- Externally callable function to parse and conjugate a verb given user-specified arguments.
-- Return value is WORD_SPEC, an object where the conjugated forms are in `WORD_SPEC.forms`
-- for each slot. If there are no values for a slot, the slot key will be missing. The value
-- for a given slot is a list of objects {form=FORM, footnotes=FOOTNOTES}.
function export.do_generate_forms(args, source_template, headword_head)
local PAGENAME = mw.title.getCurrentTitle().text
local function in_template_space()
return mw.title.getCurrentTitle().nsText == "แม่แบบ"
end
-- Determine the verb spec we're being asked to generate the conjugation of. This may be taken from the
-- current page title or the value of |pagename=; but not when called from {{ca-verb form of}}, where the
-- page title is a non-lemma form. Note that the verb spec may omit the infinitive; e.g. it may be "<i-e>".
-- For this reason, we use the value of `pagename` computed here down below, when calling normalize_all_lemmas().
local pagename = source_template ~= "ca-verb form of" and args.pagename or PAGENAME
local head = headword_head or pagename
local arg1 = args[1]
if not arg1 then
if (pagename == "ca-conj" or pagename == "ca-verb" or pagename == "ca-verb form of") and in_template_space() then
arg1 = "amar<>"
else
arg1 = "<>"
end
end
-- When called from {{ca-verb form of}}, determine the non-lemma form whose inflections we're being asked to
-- determine. This normally comes from the page title or the value of |pagename=.
local verb_form_of_form
if source_template == "ca-verb form of" then
verb_form_of_form = args.pagename
if not verb_form_of_form then
if PAGENAME == "ca-verb form of" and in_template_space() then
verb_form_of_form = "ami"
else
verb_form_of_form = PAGENAME
end
end
end
local incorporated_headword_head_into_lemma = false
if arg1:find("^<.*>$") then -- missing lemma
if head:find(" ") then
-- If multiword lemma, try to add arg spec after the first word.
-- Try to preserve the brackets in the part after the verb, but don't do it
-- if there aren't the same number of left and right brackets in the verb
-- (which means the verb was linked as part of a larger expression).
local refl_clitic_verb, post = rmatch(head, "^(.-)( .*)$")
local left_brackets = rsub(refl_clitic_verb, "[^%[]", "")
local right_brackets = rsub(refl_clitic_verb, "[^%]]", "")
if #left_brackets == #right_brackets then
arg1 = iut.remove_redundant_links(refl_clitic_verb) .. arg1 .. post
incorporated_headword_head_into_lemma = true
else
-- Try again using the form without links.
local linkless_head = m_links.remove_links(head)
if linkless_head:find(" ") then
refl_clitic_verb, post = rmatch(linkless_head, "^(.-)( .*)$")
arg1 = refl_clitic_verb .. arg1 .. post
else
error("Unable to incorporate <...> spec into explicit head due to a multiword linked verb or " ..
"unbalanced brackets; please include <> explicitly: " .. arg1)
end
end
else
-- Will be incorporated through `head` below in the call to normalize_all_lemmas().
incorporated_headword_head_into_lemma = true
end
end
local function split_bracketed_runs_into_words(bracketed_runs)
return put.split_alternating_runs(bracketed_runs, " ", "preserve splitchar")
end
local parse_props = {
parse_indicator_spec = parse_indicator_spec,
-- Split words only on spaces, not on hyphens, because that messes up reflexive verb parsing.
split_bracketed_runs_into_words = split_bracketed_runs_into_words,
allow_default_indicator = true,
allow_blank_lemma = true,
}
local alternant_multiword_spec = iut.parse_inflected_text(arg1, parse_props)
alternant_multiword_spec.pos = pos or "verbs"
alternant_multiword_spec.args = args
alternant_multiword_spec.source_template = source_template
alternant_multiword_spec.verb_form_of_form = verb_form_of_form
alternant_multiword_spec.incorporated_headword_head_into_lemma = incorporated_headword_head_into_lemma
normalize_all_lemmas(alternant_multiword_spec, head)
detect_all_indicator_specs(alternant_multiword_spec)
local inflect_props = {
slot_list = alternant_multiword_spec.all_verb_slots,
inflect_word_spec = conjugate_verb,
-- We add links around the generated verbal forms rather than allow the entire multiword
-- expression to be a link, so ensure that user-specified links get included as well.
include_user_specified_links = true,
}
iut.inflect_multiword_or_alternant_multiword_spec(alternant_multiword_spec, inflect_props)
-- Remove redundant brackets around entire forms.
for slot, forms in pairs(alternant_multiword_spec.forms) do
for _, form in ipairs(forms) do
form.form = iut.remove_redundant_links(form.form)
end
end
compute_categories_and_annotation(alternant_multiword_spec)
if args.json and source_template == "ca-conj" then
return require("Module:JSON").toJSON(alternant_multiword_spec.forms)
end
return alternant_multiword_spec
end
-- Entry point for {{ca-conj}}. Template-callable function to parse and conjugate a verb given
-- user-specified arguments and generate a displayable table of the conjugated forms.
function export.show(frame)
local parent_args = frame:getParent().args
local params = {
[1] = {},
["titlenote"] = {},
["noautolinktext"] = {type = "boolean"},
["noautolinkverb"] = {type = "boolean"},
["pagename"] = {}, -- for testing/documentation pages
["json"] = {type = "boolean"}, -- for bot use
}
local args = require("Module:parameters").process(parent_args, params)
local alternant_multiword_spec = export.do_generate_forms(args, "ca-conj")
if type(alternant_multiword_spec) == "string" then
-- JSON return value
return alternant_multiword_spec
end
show_forms(alternant_multiword_spec)
return make_table(alternant_multiword_spec) ..
require("Module:utilities").format_categories(alternant_multiword_spec.categories, lang, nil, nil, force_cat)
end
return export
0aoehuk7rmiar3yg102qvpn7gln3vtt
escollir
0
248069
5729390
5385741
2026-07-20T07:52:06Z
Octahedron80
267
/* การผันรูป */
5729390
wikitext
text/x-wiki
== ภาษากาตาลา ==
=== รากศัพท์ ===
จาก{{affix|ca|es-|collir}}, อาจจาก {{inh|ca|la-vul|*excolligere}}, จาก{{der|ca|la|ex-}} + {{m|la|colligo|colligere|t=รวบรวม}}. เทียบกับ{{cog|gl|escoller}}, {{cog|es|escoger}}, {{cog|pt|escolher}}, {{cog|ast|escoyer}}, {{cog|ext|escogel}}.
=== การออกเสียง ===
* {{ca-IPA}}
* {{rhymes|i(ɾ)|lang=ca}}
=== คำกริยา ===
{{ca-verb|pres_1_sg=escullo}}
# [[เลือก]]
# [[เลือกตั้ง]]
==== การผันรูป ====
{{ca-conj}}
==== คำพ้องความ ====
* {{l|ca|triar}}
* {{l|ca|elegir}}
==== ลูกคำ ====
* {{l|ca|escolliment}}
2le5t7z8m07tz5izj5hczivf4lsiymx
5729391
5729390
2026-07-20T07:53:52Z
Octahedron80
267
/* ภาษากาตาลา */
5729391
wikitext
text/x-wiki
== ภาษากาตาลา ==
=== รากศัพท์ ===
จาก{{af|ca|es-|collir}}, หรือเป็นไปได้ว่าจาก{{inh|ca|la-vul|*excolligere}}, จาก{{der|ca|la|ex-}} + {{m|la|colligo|colligere|t=รวบรวม}}; เทียบ{{cog|gl|escoller}}, {{cog|es|escoger}}, {{cog|pt|escolher}}, {{cog|ast|escoyer}}, {{cog|ext|escogel}}
=== การออกเสียง ===
* {{ca-IPA}}
* {{audio|ca|LL-Q7026 (cat)-Unjoanqualsevol-escollir.wav|a=Catalonia}}
* {{rhymes|ca|i(ɾ)|s=3}}
=== คำกริยา ===
{{ca-verb}}
# [[เลือก]]
# [[เลือกตั้ง]]
==== การผันรูป ====
{{ca-conj}}
==== คำพ้องความ ====
* {{l|ca|triar}}
* {{l|ca|elegir}}
==== ลูกคำ ====
* {{l|ca|escolliment}}
* {{l|ca|reescollir}}
==== อ่านเพิ่ม ====
* {{R:ca:IEC2}}
hybk0x735is98jzqiylc1iuqfkh208h
ແພບ
0
248479
5729258
1548361
2026-07-20T04:19:39Z
Alifshinobi
397
/* ภาษาลาว */
5729258
wikitext
text/x-wiki
== ภาษาลาว ==
=== รากศัพท์ ===
ร่วมเชื้อสายกับ{{cog|th|แฟบ}}, {{cog|nod|ᨻᩯ᩠ᨷ}}, {{cog|kkh|ᨽᩮ᩠ᨷ}}, {{cog|khb|ᦶᦗᧇ}}, {{cog|shn|ၽႅပ်ႉ}}
=== การออกเสียง ===
{{lo-pron}}
=== คำคุณศัพท์ ===
{{lo-adj}}
# [[แบน]]
#: {{syn|lo|ແປ}}
# [[บาง]]
#: {{syn|lo|ບາງ}}
j5bdmkjr5pkjdlt48wqlafzrmu590lg
5729259
5729258
2026-07-20T04:20:28Z
Alifshinobi
397
/* ภาษาลาว */
5729259
wikitext
text/x-wiki
== ภาษาลาว ==
=== รากศัพท์ ===
มีรากศัพท์เดียวกับคำว่า {{l|lo|ແຟບ}}; ร่วมเชื้อสายกับ{{cog|th|แฟบ}}, {{cog|nod|ᨻᩯ᩠ᨷ}}, {{cog|kkh|ᨽᩮ᩠ᨷ}}, {{cog|khb|ᦶᦗᧇ}}, {{cog|shn|ၽႅပ်ႉ}}
=== การออกเสียง ===
{{lo-pron}}
=== คำคุณศัพท์ ===
{{lo-adj}}
# [[แบน]]
#: {{syn|lo|ແປ}}
# [[บาง]]
#: {{syn|lo|ບາງ}}
cg2ywba5ya6hfct7tlte5n4pz527zpe
ບຽນ
0
256291
5729198
1574497
2026-07-20T03:30:07Z
Alifshinobi
397
/* ภาษาลาว */
5729198
wikitext
text/x-wiki
== ภาษาลาว ==
=== รากศัพท์ ===
ร่วมเชื้อสายกับ{{cog|th|เบียน}}, {{cog|nod|ᨷ᩠ᨿᩁ}}
=== การออกเสียง ===
{{lo-pron}}
=== คำกริยา ===
{{lo-verb}}
# {{lb|lo|สกรรม}} [[เบียน]]
#: {{syn|lo|ຂົ່ມເຫງ|ຄັ້ນ|ບີບ}}
68vbpahtmcbh2et9gpwrhvb28qw0bkp
link
0
257191
5729016
2001188
2026-07-19T16:04:07Z
ZilentFyld
6541
5729016
wikitext
text/x-wiki
== ภาษาอังกฤษ ==
{{lexitronimport}}
=== การออกเสียง{{botenimport}} ===
* {{IPA|en|/lɪŋk/}}
* {{audio|en|en-us-link.ogg|a=US}}
* {{rhymes|ɪŋk|lang=en}}
=== คำนาม ===
{{en-noun}}{{botenimport}}
# ข้อลูกโซ่
# สิ่งที่เชื่อมต่อ
# หน่วยความยาว เท่ากับ 7.92
# หน่วยระบบสื่อสาร
# คบไฟ
=== คำกริยา ===
{{en-verb}}{{botenimport}}
# {{lb|en|อกรรม}} เชื่อม
# {{lb|en|สกรรม}} เชื่อม
== ภาษาเยอรมัน ==
=== รากศัพท์ ===
จาก{{inh|de|gmh|linc}}, {{m|gmh|lënc}}, จาก{{inh|de|goh|*link}}, {{m|goh|lënk|t=ซ้าย}}. เปรียบเทียบกับ{{cog|goh|lënka|t=มือซ้าย}}
=== การออกเสียง ===
* {{IPA|de|/lɪŋk/}}
* {{audio|de|De-link.ogg|a=Germany (Berlin)}}
=== คำคุณศัพท์ ===
{{de-adj|comp.sup:+est:+st}}
# {{lb|de|only|_|attributive|_|and|_|not comparable}} [[ซ้าย]]
#: {{uxi|de|auf der '''linken''' Seite|t=ทางด้าน'''ซ้าย'''}}
#: {{uxi|de|ihr '''linker''' Fuß|t=เท้า'''ซ้าย'''ของหล่อน}}
# {{lb|de|colloquial}} [[ไม่]][[น่า]][[ไว้วางใจ]] {{gloss|มีพิรุธ, ไม่ถูกต้อง, เสื่อมเสียชื่อเสียง, น่าสงสัย}}
# {{lb|de|colloquial}} [[เจ้าเล่ห์]], [[ฉลาดแกมโกง]]
==== การผันรูป ====
{{de-adecl|comp.sup:+est:+st}}
=== อ่านเพิ่ม ===
* {{R:de:Duden}}
* {{R:de:DWDS}}
io4niv0f11anaw52ec9edx2dq2pentx
ແກວດ
0
258259
5729057
2189816
2026-07-20T01:26:14Z
Alifshinobi
397
/* รากศัพท์ */
5729057
wikitext
text/x-wiki
{{also/auto}}
== ภาษาลาว ==
=== รากศัพท์ ===
ร่วมเชื้อสายกับ{{cog|tts|แกวด}}, {{cog|nod|ᨠ᩠ᩅᩯᨯ,ᨡ᩠ᩅᩯᨯ}}
=== การออกเสียง ===
{{lo-pron}}
=== คำกริยา ===
{{lo-verb}}
# {{lb|lo|สกรรม}} [[กำหนด]], [[หมาย]], [[จำ]][[ไว้]]
#: {{syn|lo|ກຳໜົດ|ໝາຍ}}
==== ลูกคำ ====
{{col4|lo
|ແກວດກົດໝາຍ
}}
1ra2i1rrxug456gol9meuxqrwyd1p8y
ᩃ᩵ᩣ᩠ᨿ
0
262655
5729166
4757587
2026-07-20T02:55:48Z
Alifshinobi
397
/* ภาษาคำเมือง */
5729166
wikitext
text/x-wiki
{{also/auto}}
== ภาษาเขิน ==
=== รากศัพท์ ===
ร่วมเชื้อสายกับ{{cog|nod|ᩃ᩵ᩣ᩠ᨿ}}, {{cog|lo|ລ່າຍ}}, {{cog|khb|ᦟᦻᧈ}}
=== การออกเสียง ===
* {{IPA|kkh|/laːj˨˨/|a=เชียงตุง}}
=== คำกริยา ===
{{kkh-verb}}
# {{lb|kkh|สกรรม}} [[อำ]], [[หลอก]], [[พราง]]
==== คำพ้องความ ====
{{col4|kkh
|ᨻᩮ᩠ᨯ
|ᩋᩴᩣ
|ᩉ᩠ᩃᩬᨠ
|ᨻᩕᩣ᩠ᨦ
}}
=== อ้างอิง ===
{{รายการอ้างอิง}}
* ᨩᩣ᩠ᨿᨪᩮᨩᩮ᩠ᨾ. (n.d.). ''ᩋᨽᩥᨵᩤᨶᩈᩢ᩠ᨷᩅᩰᩉᩣ᩠ᩁᨸᩖᩯᨽᩣᩈᩣᨡᩨ᩠ᨶ''.
== ภาษาคำเมือง ==
=== รูปแบบอื่น ===
{{nod-alt|~=ล่าย}}
=== รากศัพท์ ===
ร่วมเชื้อสายกับ{{cog|kkh|ᩃ᩵ᩣ᩠ᨿ}}, {{cog|lo|ລ່າຍ}}, {{cog|khb|ᦟᦻᧈ}}
=== การออกเสียง ===
* {{IPA|nod|/laːj˦˨/|a=เชียงใหม่}}
=== คำกริยา ===
{{nod-verb}}
# [[อำ]], [[หลอก]], [[พราง]]
#: {{syn|nod|ᨧᩩ|ᩋᩣᩴ|ᩉᩖᩬᨠ|ᨻᩕᩣ᩠ᨦ}}
rmmru76x0vmc6gehafpreg5blsih3w8
5729167
5729166
2026-07-20T02:56:08Z
Alifshinobi
397
/* คำพ้องความ */
5729167
wikitext
text/x-wiki
{{also/auto}}
== ภาษาเขิน ==
=== รากศัพท์ ===
ร่วมเชื้อสายกับ{{cog|nod|ᩃ᩵ᩣ᩠ᨿ}}, {{cog|lo|ລ່າຍ}}, {{cog|khb|ᦟᦻᧈ}}
=== การออกเสียง ===
* {{IPA|kkh|/laːj˨˨/|a=เชียงตุง}}
=== คำกริยา ===
{{kkh-verb}}
# {{lb|kkh|สกรรม}} [[อำ]], [[หลอก]], [[พราง]]
==== คำพ้องความ ====
{{col4|kkh
|ᨻᩮ᩠ᨯ
|ᩋᩣᩴ
|ᩉᩖᩬᨠ
|ᨻᩕᩣ᩠ᨦ
}}
=== อ้างอิง ===
{{รายการอ้างอิง}}
* ᨩᩣ᩠ᨿᨪᩮᨩᩮ᩠ᨾ. (n.d.). ''ᩋᨽᩥᨵᩤᨶᩈᩢ᩠ᨷᩅᩰᩉᩣ᩠ᩁᨸᩖᩯᨽᩣᩈᩣᨡᩨ᩠ᨶ''.
== ภาษาคำเมือง ==
=== รูปแบบอื่น ===
{{nod-alt|~=ล่าย}}
=== รากศัพท์ ===
ร่วมเชื้อสายกับ{{cog|kkh|ᩃ᩵ᩣ᩠ᨿ}}, {{cog|lo|ລ່າຍ}}, {{cog|khb|ᦟᦻᧈ}}
=== การออกเสียง ===
* {{IPA|nod|/laːj˦˨/|a=เชียงใหม่}}
=== คำกริยา ===
{{nod-verb}}
# [[อำ]], [[หลอก]], [[พราง]]
#: {{syn|nod|ᨧᩩ|ᩋᩣᩴ|ᩉᩖᩬᨠ|ᨻᩕᩣ᩠ᨦ}}
58unzis82b6b55oaresgwvw3mj4yt2i
5729168
5729167
2026-07-20T02:57:16Z
Alifshinobi
397
/* คำกริยา */
5729168
wikitext
text/x-wiki
{{also/auto}}
== ภาษาเขิน ==
=== รากศัพท์ ===
ร่วมเชื้อสายกับ{{cog|nod|ᩃ᩵ᩣ᩠ᨿ}}, {{cog|lo|ລ່າຍ}}, {{cog|khb|ᦟᦻᧈ}}
=== การออกเสียง ===
* {{IPA|kkh|/laːj˨˨/|a=เชียงตุง}}
=== คำกริยา ===
{{kkh-verb}}
# {{lb|kkh|สกรรม}} [[อำ]], [[หลอก]], [[พราง]]
==== คำพ้องความ ====
{{col4|kkh
|ᨻᩮ᩠ᨯ
|ᩋᩣᩴ
|ᩉᩖᩬᨠ
|ᨻᩕᩣ᩠ᨦ
}}
=== อ้างอิง ===
{{รายการอ้างอิง}}
* ᨩᩣ᩠ᨿᨪᩮᨩᩮ᩠ᨾ. (n.d.). ''ᩋᨽᩥᨵᩤᨶᩈᩢ᩠ᨷᩅᩰᩉᩣ᩠ᩁᨸᩖᩯᨽᩣᩈᩣᨡᩨ᩠ᨶ''.
== ภาษาคำเมือง ==
=== รูปแบบอื่น ===
{{nod-alt|~=ล่าย}}
=== รากศัพท์ ===
ร่วมเชื้อสายกับ{{cog|kkh|ᩃ᩵ᩣ᩠ᨿ}}, {{cog|lo|ລ່າຍ}}, {{cog|khb|ᦟᦻᧈ}}
=== การออกเสียง ===
* {{IPA|nod|/laːj˦˨/|a=เชียงใหม่}}
=== คำกริยา ===
{{nod-verb}}
# {{lb|nod|สกรรม}} [[หลอกลวง]]
#: {{syn|nod|ᨧᩩ|ᩉᩖᩬᨠ}}
# {{lb|nod|สกรรม}} [[อำ]], [[พราง]]
#: {{syn|nod|ᨻᩕᩣ᩠ᨦ|ᩋᩣᩴ}}
h19lbij1u6t0zl6sdzhp6tmcrk4nupz
ᨲ᩠ᨿ᩵ᩅ
0
285300
5729034
5721678
2026-07-19T22:46:28Z
Alifshinobi
397
/* ภาษาคำเมือง */
5729034
wikitext
text/x-wiki
== ภาษาคำเมือง ==
=== รูปแบบอื่น ===
{{nod-alt|l=เตี่ยว|s=เต่ว}}
=== รากศัพท์ ===
ร่วมเชื้อสายกับ{{cog|th|เตี่ยว}}, {{cog|lo|ຕ່ຽວ,ກະຕ່ຽວ}}, {{cog|tts|เตี่ยว}} หรือ {{m|tts|กะเตี่ยว}}, {{cog|kkh|ᨲ᩠ᨿ᩵ᩴ}}, {{cog|khb|ᦵᦎᧁᧈ}}, {{cog|shn|တဵဝ်ႇ}}
=== การออกเสียง ===
* {{IPA|nod|/tew˨˩/|a=เชียงใหม่}}
=== คำนาม ===
{{nod-noun}}
# [[กางเกง]]
#: {{syn|nod|ᨠᩰᩫ᩠ᨶ}}
{{topics|nod|เครื่องนุ่งห่ม}}
t3mbia7svp2gf59ooalyytulth4hppj
มอดูล:de-verb
828
293778
5729199
5688358
2026-07-20T03:33:35Z
Octahedron80
267
5729199
Scribunto
text/plain
local export = {}
--[=[
Authorship: Ben Wing <benwing2>
]=]
--[=[
TERMINOLOGY:
-- "slot" = A particular combination of tense/mood/person/number/etc.
Example slot names for verbs are "pres_1s" (present first singular) and
"subc_subii_3p" (subordinate-clause subjunctive II third plural).
Each slot is filled with zero or more forms.
-- "form" = The conjugated German form representing the value of a given slot.
-- "lemma" = The dictionary form of a given German term. For German, always the infinitive.
]=]
--[=[
FIXME:
1. Handle fensterln. (DONE)
2. Handle spie- past tense of speien. (DONE)
3. Make sure rathen, verheirathen work. (DONE)
4. Modify einfix to better handle managen, framen. (DONE)
5. Use variant codes so variant imperatives with and without -e match up in conjoined verbs e.g. [[ausschneiden und einfügen]].
6. In conjoined verbs e.g. [[ausschneiden und einfügen]], don't repeat auxiliaries.
7. Support 'nosplitprefix' meaning that no forms exist where the prefix is split form the main verb, e.g.
[[voreinstellen]]. (DONE)
--]=]
local lang = require("Module:languages").getByCode("de")
local m_string_utilities = require("Module:string utilities")
local m_links = require("Module:links")
local m_table = require("Module:table")
local iut = require("Module:inflection utilities")
local put = require("Module:parse utilities")
local rfind = m_string_utilities.find
local rmatch = m_string_utilities.match
local rsplit = m_string_utilities.split
local lcfirst = m_string_utilities.lcfirst
local function link_term(term, face)
return m_links.full_link({ lang = lang, term = term }, face)
end
local vowel = "aeiouyäëïöüÿáéíóúýàèìòùỳâêîôûŷãẽĩõũỹ"
local vowel_c = "[" .. vowel .. "]"
local not_vowel_c = "[^" .. vowel .. "]"
local function ends_in_dt(stem)
return stem:find("[dt]h?$")
end
local inseparable_prefixes = {
"be", "emp", "ent", "er", "ge", "miss", "miß", "ver", "zer",
-- can also be separable
"durch", "hinter", "über", "um", "unter", "voll", "wider", "wieder",
}
local wuerde = link_term("würde", "term")
local past_subjunctive_single_word_preferred = m_table.listToSet {
"haben", "sein", "können", "müssen", "dürfen", "mögen", "sollen", "wollen", "werden"
}
local past_subjunctive_single_word_preferred_footnote = "[แนะนำให้ใช้, เลี่ยงรูปประกอบ " .. wuerde .. "]"
local past_subjunctive_single_word_often_used = m_table.listToSet {
"bleiben", "brauchen", "bringen", "fallen", "finden", "geben", "gehen", "halten", "heißen", "heissen",
"kommen", "laufen", "lassen", "liegen", "nehmen", "sehen", "stehen", "tun", "thun", "wissen"
}
local past_subjunctive_single_word_often_used_footnote = "[พบได้ทั้งรูปนี้และรูปประกอบ " .. wuerde .. "]"
local past_subjunctive_single_word_rare_footnote = "[พบได้น้อยมากยกเว้นในบริบทที่เป็นทางการมาก, แนะนำให้ใช้รูปประกอบ " .. wuerde .. "]"
local schst_footnote = "[ใช้ได้ในลักษณะเป็นทางการในออสเตรีย, ใช้ในภาษาปากในทุกพื้นที่ที่พูดภาษาเยอรมัน]"
local all_persons_numbers = {
["1s"] = "1|s",
["2s"] = "2|s",
["3s"] = "3|s",
["1p"] = "1|p",
["2p"] = "2|p",
["3p"] = "3|p",
}
local person_number_list = { "1s", "2s", "3s", "1p", "2p", "3p", }
local persnum_to_index = {}
for k, v in pairs(person_number_list) do
persnum_to_index[v] = k
end
local imp_person_number_list = { "2s", "2p", }
local verb_slots_basic = {
{"infinitive", "inf"},
{"infinitive_linked", "inf"},
{"pres_part", "pres|part"},
{"perf_part", "past|part"},
{"zu_infinitive", "zu"}, -- will be handled specially by [[Module:accel/de]]
{"aux", "-"},
}
local verb_slots_subordinate_clause = {
}
local verb_slots_composed = {
}
-- Add entries for a slot with person/number variants.
-- `verb_slots` is the table to add to.
-- `slot_prefix` is the prefix of the slot, typically specifying the tense/aspect.
-- `tag_suffix` is the set of inflection tags to add after the person/number tags,
-- or "-" to use "-" as the inflection tags (which indicates that no accelerator entry
-- should be generated).
local function add_slot_personal(verb_slots, slot_prefix, tag_suffix)
for persnum, persnum_tag in pairs(all_persons_numbers) do
local slot = slot_prefix .. "_" .. persnum
if tag_suffix == "-" then
table.insert(verb_slots, {slot, "-"})
else
table.insert(verb_slots, {slot, persnum_tag .. "|" .. tag_suffix})
end
end
end
add_slot_personal(verb_slots_basic, "pres", "pres")
add_slot_personal(verb_slots_basic, "subi", "sub:I")
add_slot_personal(verb_slots_basic, "pret", "pret")
add_slot_personal(verb_slots_basic, "subii", "sub:II")
table.insert(verb_slots_basic, {"imp_2s", "s|imp"})
table.insert(verb_slots_basic, {"imp_2p", "p|imp"})
add_slot_personal(verb_slots_subordinate_clause, "subc_pres", "dep|pres")
add_slot_personal(verb_slots_subordinate_clause, "subc_subi", "dep|sub:I")
add_slot_personal(verb_slots_subordinate_clause, "subc_pret", "dep|pret")
add_slot_personal(verb_slots_subordinate_clause, "subc_subii", "dep|sub:II")
add_slot_personal(verb_slots_composed, "perf_ind", "-")
add_slot_personal(verb_slots_composed, "perf_sub", "-")
add_slot_personal(verb_slots_composed, "plup_ind", "-")
add_slot_personal(verb_slots_composed, "plup_sub", "-")
table.insert(verb_slots_composed, {"futi_inf", "-"})
add_slot_personal(verb_slots_composed, "futi_subi", "-")
add_slot_personal(verb_slots_composed, "futi_ind", "-")
add_slot_personal(verb_slots_composed, "futi_subii", "-")
table.insert(verb_slots_composed, {"futii_inf", "-"})
add_slot_personal(verb_slots_composed, "futii_subi", "-")
add_slot_personal(verb_slots_composed, "futii_ind", "-")
add_slot_personal(verb_slots_composed, "futii_subii", "-")
local all_verb_slots = {}
for _, slot_and_accel in ipairs(verb_slots_basic) do
table.insert(all_verb_slots, slot_and_accel)
end
for _, slot_and_accel in ipairs(verb_slots_subordinate_clause) do
table.insert(all_verb_slots, slot_and_accel)
end
for _, slot_and_accel in ipairs(verb_slots_composed) do
table.insert(all_verb_slots, slot_and_accel)
end
local pronouns = { "ich", "du", "er", "wir", "ihr", "sie", }
local irreg_verbs = {
["haben"] = {
["pres"] = { "habe", "hast", "hat", "haben", "habt", "haben", },
["pret"] = { "hatte", "hattest", "hatte", "hatten", "hattet", "hatten", },
["subi"] = { "habe", "habest", "habe", "haben", "habet", "haben", },
["subii"] = { "hätte", "hättest", "hätte", "hätten", "hättet", "hätten", },
["imp"] = { {"hab", "habe"}, "habt", },
["presp"] = "habend",
["pp"] = "habt",
},
["sein"] = {
["pres"] = { "bin", "bist", "ist", "sind", "seid", "sind", },
["pret"] = { "war", "warst", "war", "waren", "wart", "waren", },
["subi"] = { "sei", {"seist", "seiest"}, "sei", "seien", "seiet", "seien", },
["subii"] = { "wäre", {"wärst", "wärest"}, "wäre", "wären", {"wärt", "wäret"}, "wären", },
["imp"] = { "sei", "seid", },
["presp"] = "seiend",
["pp"] = "wesen",
},
["tun"] = {
["pres"] = { "tue", "tust", "tut", "tun", "tut", "tun", },
["pret"] = { "tat", {"tatest", "tatst"}, "tat", "taten", "tatet", "taten", },
["subi"] = { "tue", "tuest", "tue", "tuen", "tuet", "tuen", },
["subii"] = { "täte", "tätest", "täte", "täten", "tätet", "täten", },
["imp"] = { {"tu", "tue"}, "tut", },
["presp"] = "tuend",
["pp"] = "tan",
},
-- FIXME, maybe we should construct this automatically from "tun".
["thun"] = {
["pres"] = { "thue", "thust", "thut", "thun", "thut", "thun", },
["pret"] = { "that", {"thatest", "thatst"}, "that", "thaten", "thatet", "thaten", },
["subi"] = { "thue", "thuest", "thue", "thuen", "thuet", "thuen", },
["subii"] = { "thäte", "thätest", "thäte", "thäten", "thätet", "thäten", },
["imp"] = { {"thu", "thue"}, "thut", },
["presp"] = "thuend",
["pp"] = "than",
},
["werden"] = {
["pres"] = { "werde", "wirst", "wird", "werden", "werdet", "werden", },
["pret"] = {
{"wurde", {form = "ward", footnotes = {"[โบราณ]"}}},
{"wurdest", {form = "wardst", footnotes = {"[โบราณ]"}}},
{"wurde", {form = "ward", footnotes = {"[โบราณ]"}}},
"wurden",
"wurdet",
"wurden",
},
["subi"] = { "werde", "werdest", "werde", "werden", "werdet", "werden", },
["subii"] = { "würde", "würdest", "würde", "würden", "würdet", "würden", },
["imp"] = { {"werd", "werde"}, "werdet", },
["presp"] = "werdend",
["pp"] = "worden",
},
}
local reflexive_possessive_forms = {
["sein"] = {"mein", "dein", "sein", "unser", "euer", "ihr"},
["seine"] = {"meine", "deine", "seine", "unsere", "eure", "ihre"},
["seinen"] = {"meinen", "deinen", "seinen", "unseren", "euren", "ihren"},
["seinem"] = {"meinem", "deinem", "seinem", "unserem", "eurem", "ihrem"},
["seiner"] = {"meiner", "deiner", "seiner", "unserer", "eurer", "ihrer"},
["seines"] = {"meines", "deines", "seines", "unseses", "eures", "ihres"},
}
local reflexive_case_forms = {
["accpron"] = {"mich", "dich", "sich", "uns", "euch", "sich"},
["datpron"] = {"mir", "dir", "sich", "uns", "euch", "sich"},
}
local function skip_slot(base, slot)
if not slot:find("[123]") then
-- Don't skip non-personal slots.
return false
end
if base.nofinite then
return true
end
if base.nosplitprefix then
-- Verbs that don't allow split prefixes, e.g. [[voreinstellen]], don't have forms where the prefix is
-- split from the main verb, including the present, preterite, subjunctive I and II and imperative (but
-- not the subordinate clause equivalents).
return slot:find("^pre[st]") or slot:find("^subi") or slot:find("^imp_")
end
if base.only3s and not slot:find("3s") or
base.only3sp and not slot:find("3[sp]") then
return true
end
return false
end
local function strip_spaces(text)
return text:gsub("^%s*(.-)%s*", "%1")
end
local function escape_sein_sich_indicators(arg1)
if not arg1:find("pron>") then
return arg1
end
local segments = put.parse_balanced_segment_run(arg1, "<", ">")
-- Loop over every other segment. The even-numbered segments are angle-bracket specs while
-- the odd-numbered segments are the text between them.
for i = 2, #segments - 1, 2 do
if segments[i] == "<accpron>" then
segments[i] = "⦃⦃accpron⦄⦄"
elseif segments[i] == "<datpron>" then
segments[i] = "⦃⦃datpron⦄⦄"
elseif segments[i] == "<pron>" then
segments[i] = "⦃⦃pron⦄⦄"
end
end
return table.concat(segments)
end
local function undo_escape_form(form)
-- assign to var to throw away second value
local newform = form:gsub("⦃⦃", "<"):gsub("⦄⦄", ">")
return newform
end
local function remove_sein_sich_indicators(form)
-- assign to var to throw away second value
local newform = form:gsub("⦃⦃.-⦄⦄", "")
return newform
end
local function replace_sein_sich_indicators(slot, form)
if not form:find("⦃") then
return form
end
local persnum = slot:match("^.*_([123][sp])$")
local index
if persnum then
index = persnum_to_index[persnum]
else
index = 3
end
form = form:gsub("sich(%]*)⦃⦃accpron⦄⦄", function(brackets)
return reflexive_case_forms.accpron[index] .. brackets
end)
form = form:gsub("sich(%]*)⦃⦃datpron⦄⦄", function(brackets)
return reflexive_case_forms.datpron[index] .. brackets
end)
form = form:gsub("(seine?[mnrs]?)(%]*)⦃⦃pron⦄⦄", function(sein_form, brackets)
if reflexive_possessive_forms[sein_form] then
return reflexive_possessive_forms[sein_form][index] .. brackets
else
error("Unrecognized sein-form '" .. sein_form .. "' in slot " .. slot .. ": " .. undo_escape_form(form))
end
end)
form = form:gsub("sein%]%]e?[mnrs]?⦃⦃pron⦄⦄", function(sein_ending)
local sein_form = "sein" .. sein_ending
if reflexive_possessive_forms[sein_form] then
return reflexive_possessive_forms["sein"][index] .. "|" .. reflexive_possessive_forms[sein_form][index] .. "]]"
else
error("Unrecognized sein-form '" .. sein_form .. "' in slot " .. slot .. ": " .. undo_escape_form(form))
end
end)
if form:find("⦃⦃") or form:find("⦄⦄") then
error("Unrecognized pronoun substitution in slot " .. slot .. ": " .. undo_escape_form(form))
end
return form
end
local function combine_stem_ending(slot, stem, ending)
local ending_with_pound = ending .. "#"
if ending_with_pound:find("^st[ #]") then
if rfind(stem, "[sxzß]$") then
ending = ending:gsub("^s", "")
elseif stem:find("st$") then
-- bersten
ending = ending:gsub("^st", "")
end
elseif ending_with_pound:find("^t[ #]") and stem:find("th?$") then
ending = ending:gsub("^t", "")
end
return replace_sein_sich_indicators(slot, stem .. ending)
end
local function add(base, slot, stems, endings, footnotes)
if skip_slot(base, slot) then
return
end
local function do_combine_stem_ending(stem, ending)
return combine_stem_ending(slot, stem, ending)
end
iut.add_forms(base.forms, slot, stems, endings, do_combine_stem_ending, nil, nil,
iut.combine_footnotes(footnotes, base.all_footnotes))
end
local function add_multi(base, slot, stems_and_endings, footnotes)
if skip_slot(base, slot) then
return
end
local function do_combine_stem_ending(stem, ending)
return combine_stem_ending(slot, stem, ending)
end
iut.add_multiple_forms(base.forms, slot, stems_and_endings, do_combine_stem_ending, nil, nil,
iut.combine_footnotes(footnotes, base.all_footnotes))
end
local function add3(base, slot, stems1, stems2, endings, footnotes)
return add_multi(base, slot, {stems1, stems2, endings}, footnotes)
end
local function add4(base, slot, stems1, stems2, stems3, endings, footnotes)
return add_multi(base, slot, {stems1, stems2, stems3, endings}, footnotes)
end
local function add5(base, slot, stems1, stems2, stems3, stems4, endings, footnotes)
return add_multi(base, slot, {stems1, stems2, stems3, stems4, endings}, footnotes)
end
local function get_subii_note(base)
if base.from_headword then
-- don't include autogenerated note if from_headword, so it doesn't end up in the headword qualifiers
return nil
end
if past_subjunctive_single_word_preferred[base.base_verb] then
return {past_subjunctive_single_word_preferred_footnote}
elseif past_subjunctive_single_word_often_used[base.base_verb] then
return {past_subjunctive_single_word_often_used_footnote}
end
return {past_subjunctive_single_word_rare_footnote}
end
local function add_zu_infinitive(base)
if base.any_pre_pref then
local zu
if base.pre_pref == "" or base.pre_pref:find(" $") then
zu = "zu "
else
zu = "zu"
end
add(base, "zu_infinitive", base.pre_pref .. zu, base.bare_infinitive)
end
end
local function add_present(base, pretpres)
local stems = base.infstem
local stems23 = base.pres_23 or stems
local function doadd(slot_pref, form_pref)
-- Do forms based off the infinitive stem.
for _, stemform in ipairs(stems) do
local prefixed_stem = form_pref .. stemform.form
local syncopated_stem = base.unstressed_el_er and prefixed_stem:gsub("e([lr])$", "%1")
local function addit(slot, stem, ending, footnotes)
add(base, slot_pref .. slot, stem, ending .. (slot_pref == "" and base.post_pref or ""),
iut.combine_footnotes(footnotes, stemform.footnotes))
end
-- first singular present indicative
if not pretpres then -- pres_1s for preterite-present verbs used pres23 stem
if base.unstressed_el_er then
addit("pres_1s", syncopated_stem, "e")
addit("pres_1s", prefixed_stem, "e")
addit("pres_1s", prefixed_stem, "")
else
addit("pres_1s", prefixed_stem, "e")
end
end
-- plural present indicative
local e_in_2p = ends_in_dt(prefixed_stem) or base.unstressed_e_infix
if e_in_2p then
addit("pres_2p", prefixed_stem, "et")
else
addit("pres_2p", prefixed_stem, "t")
end
if base.unstressed_el_er or base.unstressed_erl then
addit("pres_1p", prefixed_stem, "n")
addit("pres_3p", prefixed_stem, "n")
else
addit("pres_1p", prefixed_stem, "en")
addit("pres_3p", prefixed_stem, "en")
end
-- subjunctive I
addit("subi_1s", prefixed_stem, "e")
addit("subi_2s", prefixed_stem, "est")
addit("subi_3s", prefixed_stem, "e")
addit("subi_2p", prefixed_stem, "et")
if base.unstressed_el_er then
addit("subi_1s", syncopated_stem, "e")
addit("subi_2s", syncopated_stem, "est")
addit("subi_3s", syncopated_stem, "e")
addit("subi_2p", syncopated_stem, "et")
end
if base.unstressed_el_er then
addit("subi_1p", prefixed_stem, "n")
addit("subi_3p", prefixed_stem, "n")
else
addit("subi_1p", prefixed_stem, "en")
addit("subi_3p", prefixed_stem, "en")
end
-- imperative plural; most preterite-present verbs don't have it, and [[wissen]] is handled below
if slot_pref == "" and not pretpres then
if e_in_2p then
addit("imp_2p", prefixed_stem, "et")
else
addit("imp_2p", prefixed_stem, "t")
end
end
end
-- Do forms based off of pres23 stem (also includes pres_1sg in preterite-present verbs).
for _, stem23form in ipairs(stems23) do
local prefixed_stem23 = form_pref .. stem23form.form
local function addit(slot, stem, ending, footnotes)
add(base, slot_pref .. slot, stem, ending .. (slot_pref == "" and base.post_pref or ""),
iut.combine_footnotes(footnotes, stem23form.footnotes))
end
if pretpres then
-- Totally different code for preterite-present singular and imperative.
addit("pres_1s", prefixed_stem23, "")
addit("pres_2s", prefixed_stem23, "st")
addit("pres_3s", prefixed_stem23, "")
if slot_pref == "" and base.base_verb == "wissen" then
-- Only [[wissen]] among the preterite-present verbs has an imperative.
addit("imp_2s", "wiss", "e")
-- dewikt mentions 'wisset' as an alternative, but not in Duden
addit("imp_2p", "wiss", "t")
end
else
-- Normal code path.
local stem23_is_same_as_stem
for _, stemform in ipairs(stems) do
if stemform.form == stem23form.form then
stem23_is_same_as_stem = true
break
end
end
-- present 2/3 singular
local e_in_23s = base.unstressed_e_infix or stem23_is_same_as_stem and ends_in_dt(prefixed_stem23)
if e_in_23s then
addit("pres_2s", prefixed_stem23, "est")
addit("pres_3s", prefixed_stem23, "et")
else
addit("pres_2s", prefixed_stem23, "st")
if prefixed_stem23:find("sch$") then
addit("pres_2s", prefixed_stem23, "t",
not base.from_headword and {schst_footnote} or nil)
end
addit("pres_3s", prefixed_stem23, "t")
end
-- imperative singular; this may or may not be based off the pres23 stem
-- Specifically, if the pres23 stem is different from the infinitive stem and does not have an ä or ö
-- in it ([[fahren]], er [[fährt]] but imperative [[fahr]]/[[fahre]]; [[stoßen]], er [[stößt]] but
-- imperative [[stoß]]/[[stoße]]), use it. Don't add -e unless '.longimp' is given (for [[sehen]], with
-- imperatives [[sieh]] and [[siehe]]; but normally [[geben]] with imperative only [[gib]], similarly
-- for [[treten]], [[gelten]], [[bergen]], [[etc.]]). In all other cases, use the infinitive stem, and
-- under normal circumstances include two variants, without -e and with -e. We include only the variant
-- with -e if '.e' is given ([[atmen]], [[zeichnen]], etc.), and we include only the variant without -e
-- if '.shortimp' is given (unclear if this is needed for any verb).
if slot_pref == "" then
if not rfind(prefixed_stem23, "[äö]") and not stem23_is_same_as_stem then
addit("imp_2s", prefixed_stem23, "")
if base.longimp then
addit("imp_2s", prefixed_stem23, "e")
end
else
assert(form_pref == "")
for _, stemform in ipairs(stems) do
local function addimp(stem, ending)
add(base, "imp_2s", stem, ending .. base.post_pref, stemform.footnotes)
end
local stem = stemform.form
if base.unstressed_el_er then
local syncopated_stem = stem:gsub("e([lr])$", "%1")
addimp(syncopated_stem, "e")
end
if base.unstressed_e_infix then
addimp(stem, "e")
elseif base.shortimp then
addimp(stem, "")
else
addimp(stem, "")
addimp(stem, "e")
end
end
end
end
end
end
end
-- Do the basic forms
doadd("", "")
-- Also do the subordinate clause forms if any alternants have a prefix.
if base.any_pre_pref then
doadd("subc_", base.pre_pref)
end
-- Do the miscellaneous non-finite forms
add3(base, "pres_part", base.pre_pref, base.bare_infinitive, "d")
add_zu_infinitive(base)
end
-- Add the past forms and/or subjunctive II forms. `is_past` should be true if we're conjugating the past tense
-- (not the past subjunctive), in which case the stems in `stem` should be the actual 1s/3s forms, ending in -te
-- or -de if weak. If `is_past` is false, we're conjugating the past subjunctive. In that case, the stems passed
-- in should include -e if that needs to be preserved in all forms (specifically, for [[spie]] past of [[speien]];
-- syncopated #'spist' is not allowed). (In practice, we chop off the final -e of explicitly user-specified past
-- subjunctive forms and otherwise pass in the actual past tense. This means that user-specified past subjunctives
-- in -te (e.g. [[brächte]]) will be passed in as 'brächt' but past subjunctives defaulted from the past tense
-- will be passed in e.g. as 'lachte'. This works because for stems in -t and -d, the result is the same.)
local function add_past_or_subii(base, slot_pref, stems, is_past)
local function doadd(full_slot_pref, form_pref)
for _, stemform in ipairs(stems) do
local prefixed_stem = form_pref .. stemform.form
local ends_in_e = prefixed_stem:find("e$")
-- Normally, the weak past tense ends in -te and the strong past does not end in -e. An exception is
-- [[spie]] (past tense of [[speien]]), which will be treated as weak (superseded spellings like
-- 'spieen' will not be generated).
local is_strong = is_past and not ends_in_e
prefixed_stem = prefixed_stem:gsub("e$", "")
local stem_ends_in_dt = ends_in_dt(prefixed_stem)
local function addit(slot, ending, footnotes)
local subii_footnotes
if full_slot_pref:find("subii") then
subii_footnotes = get_subii_note(base)
end
add(base, full_slot_pref .. slot, prefixed_stem, ending .. (full_slot_pref == slot_pref and base.post_pref or ""),
iut.combine_footnotes(subii_footnotes, iut.combine_footnotes(footnotes, stemform.footnotes)))
end
if is_strong then
addit("1s", "")
addit("3s", "")
if not stem_ends_in_dt then
if rfind(prefixed_stem, "[sxzß]$") then
addit("2s", "est")
end
addit("2s", "st")
addit("2p", "t")
else
-- bitten -> batest or batst, similarly for laden, raten, etc.
addit("2s", "est")
if not prefixed_stem:find("st$") then
-- bersten
addit("2s", "st")
end
addit("2p", "et")
end
else
-- Weak past and past subjunctive have same endings when ending in -d or -t (always the case for weak past).
addit("1s", "e")
addit("3s", "e")
if not stem_ends_in_dt and not ends_in_e then
addit("2s", "est") -- more formal; FIXME: should we footnote this?
addit("2p", "et") -- more formal; FIXME: should we footnote this?
addit("2s", "st")
addit("2p", "t")
else
addit("2s", "est")
addit("2p", "et")
end
end
-- Both pasts, as well as past subjunctive, have same endings in 1p and 3p.
addit("1p", "en")
addit("3p", "en")
end
end
-- Do the basic forms
doadd(slot_pref, "")
-- Also do the subordinate clause forms if any alternants have a prefix.
if base.any_pre_pref then
doadd("subc_" .. slot_pref, base.pre_pref)
end
end
local conjs = {}
conjs["normal"] = function(base)
add_present(base)
add_past_or_subii(base, "pret_", base.past, "past")
add_past_or_subii(base, "subii_", base.past_sub or base.past)
end
conjs["pretpres"] = function(base)
add_present(base, "pretpres")
add_past_or_subii(base, "pret_", base.past, "past")
add_past_or_subii(base, "subii_", base.past_sub or base.past)
end
conjs["irreg"] = function(base)
local function doadd(slot_pref)
local function addit(slot, forms, footnotes)
if slot_pref == "" then
add3(base, slot, base.insep_prefix, forms, base.post_pref, footnotes)
else
add(base, slot_pref .. slot, base.pre_pref .. base.insep_prefix, forms, footnotes)
end
end
-- Do present, preterite, subjunctive I and II.
for _, slot_tense in ipairs({"pres", "pret", "subi", "subii"}) do
for index, forms in ipairs(base.irregverbobj[slot_tense]) do
local persnum = person_number_list[index]
local footnotes
if slot_tense == "subii" then
footnotes = get_subii_note(base)
end
addit(slot_tense .. "_" .. persnum, forms, footnotes)
end
end
-- Do imperative.
if slot_pref == "" then
for index, forms in ipairs(base.irregverbobj["imp"]) do
local persnum = imp_person_number_list[index]
addit("imp_" .. persnum, forms)
end
end
end
-- Do the basic forms
doadd("")
-- Also do the subordinate clause forms if any alternants have a prefix.
if base.any_pre_pref then
doadd("subc_")
end
-- Do the miscellaneous non-finite forms
iut.add_multiple_forms(base, "pp", {base.ge_prefix, base.insep_prefix, base.irregverbobj["pp"]},
-- We don't want to use combine_stem_ending because we want sein-sich indicators to be left alone,
-- so they get replaced later when constructing composed forms.
function(stem, ending) return stem .. ending end)
add(base, "perf_part", base.pre_pref, base.pp)
-- only [[werden]] by itself; not [[loswerden]], [[fertigwerden]], etc.
if base.lemma == "werden" then
iut.insert_form(base.forms, "perf_part", {form = "worden", footnotes = {"[เมื่อเป็นคำกริยาช่วย]"}})
end
add(base, "pres_part", base.pre_pref .. base.insep_prefix, base.irregverbobj["presp"])
add_zu_infinitive(base)
end
local function add_composed_forms(base)
local function add_composed(tense_mood, index, persnum, auxforms, participle, suffix, footnotes)
local pers_auxforms = iut.convert_to_general_list_form(auxforms[index])
local linked_pers_auxforms = iut.map_forms(pers_auxforms, function(form) return "[[" .. form .. "]] " end)
add4(base, tense_mood .. "_" .. persnum, linked_pers_auxforms, "[[" .. base.pre_pref, participle, "]]" .. suffix, footnotes)
end
local function add_composed_perf(tense_mood, index, persnum, haben_auxforms, sein_auxforms, haben_suffix, sein_suffix)
for _, auxform in ipairs(base.aux) do
if auxform.form == "haben" then
add_composed(tense_mood, index, persnum, haben_auxforms, base.pp, haben_suffix, auxform.footnotes)
end
if auxform.form == "sein" then
add_composed(tense_mood, index, persnum, sein_auxforms, base.pp, sein_suffix, auxform.footnotes)
end
end
end
local haben_forms = irreg_verbs["haben"]
local sein_forms = irreg_verbs["sein"]
local werden_forms = irreg_verbs["werden"]
for index, persnum in ipairs(person_number_list) do
add_composed_perf("perf_ind", index, persnum, haben_forms["pres"], sein_forms["pres"], "", "")
add_composed_perf("perf_sub", index, persnum, haben_forms["subi"], sein_forms["subi"], "", "")
add_composed_perf("plup_ind", index, persnum, haben_forms["pret"], sein_forms["pret"], "", "")
add_composed_perf("plup_sub", index, persnum, haben_forms["subii"], sein_forms["subii"], "", "")
for _, mood in ipairs({"ind", "subi", "subii"}) do
local tense = mood == "ind" and "pres" or mood
add_composed("futi_" .. mood, index, persnum, werden_forms[tense], base.bare_infinitive, "")
add_composed_perf("futii_" .. mood, index, persnum, werden_forms[tense], werden_forms[tense], " [[haben]]", " [[sein]]")
end
end
add3(base, "futi_inf", "[[" .. base.pre_pref, base.bare_infinitive, "]] [[werden]]")
add5(base, "futii_inf", "[[" .. base.pre_pref, base.pp, "]] [[", base.aux, "]] [[werden]]")
end
local function handle_derived_slots(base)
-- Compute linked versions of potential lemma slots, for use in {{de-verb}}.
-- We substitute the original lemma (before removing links) for forms that
-- are the same as the lemma, if the original lemma has links.
for _, slot in ipairs({"infinitive"}) do
iut.insert_forms(base.forms, slot .. "_linked", iut.map_forms(base.forms[slot], function(form)
if form == base.lemma and rfind(base.linked_lemma, "%[%[") then
return base.linked_lemma
else
return form
end
end))
end
end
local function conjugate_verb(base)
if not conjs[base.conj] then
error("Internal error: Unrecognized conjugation type '" .. base.conj .. "'")
end
conjs[base.conj](base)
add_composed_forms(base)
-- No overrides implemented currently.
-- process_slot_overrides(base)
handle_derived_slots(base)
end
local function parse_indicator_spec(angle_bracket_spec)
local base = {}
local function parse_err(msg)
error(msg .. ": " .. angle_bracket_spec)
end
local function fetch_footnotes(separated_group)
local footnotes
for j = 2, #separated_group - 1, 2 do
if separated_group[j + 1] ~= "" then
parse_err("Extraneous text after bracketed footnotes: '" .. table.concat(separated_group) .. "'")
end
if not footnotes then
footnotes = {}
end
table.insert(footnotes, separated_group[j])
end
return footnotes
end
local function fetch_specs(comma_separated_group, transform_form)
if not comma_separated_group then
return {{}}
end
local specs = {}
local colon_separated_groups = put.split_alternating_runs(comma_separated_group, ":")
for _, colon_separated_group in ipairs(colon_separated_groups) do
local form = colon_separated_group[1]
if transform_form then
form = transform_form(form)
end
table.insert(specs, {form = form, footnotes = fetch_footnotes(colon_separated_group)})
end
return specs
end
local inside = angle_bracket_spec:match("^<(.*)>$")
assert(inside)
if inside == "" then
return base
end
local segments = put.parse_balanced_segment_run(inside, "[", "]")
local dot_separated_groups = put.split_alternating_runs(segments, "%.")
for i, dot_separated_group in ipairs(dot_separated_groups) do
local comma_separated_groups = put.split_alternating_runs(dot_separated_group, "%s*[,#]%s*", "preserve splitchar")
local first_element = comma_separated_groups[1][1]
if first_element == "haben" or first_element == "sein" then
for j = 1, #comma_separated_groups, 2 do
if j > 1 and strip_spaces(comma_separated_groups[j - 1][1]) ~= "," then
parse_err("Separator of # not allowed with haben or sein")
end
local aux = comma_separated_groups[j][1]
if aux ~= "haben" and aux ~= "sein" then
parse_err("Unrecognized auxiliary '" .. aux .. "'")
end
if base.aux then
for _, existing_aux in ipairs(base.aux) do
if existing_aux.form == aux then
parse_err("Auxiliary '" .. aux .. "' specified twice")
end
end
else
base.aux = {}
end
table.insert(base.aux, {form = aux, footnotes = fetch_footnotes(comma_separated_groups[j])})
end
elseif first_element == "-ge" or first_element == "+ge" then
for j = 1, #comma_separated_groups, 2 do
if j > 1 and strip_spaces(comma_separated_groups[j - 1][1]) ~= "," then
parse_err("Separator of # not allowed with +ge or -ge")
end
local prefix = comma_separated_groups[j][1]
if prefix ~= "+ge" and prefix ~= "-ge" then
parse_err("Unrecognized ge- prefix '" .. prefix .. "'")
end
local ge_prefix
if prefix == "+ge" then
ge_prefix = "ge"
else
ge_prefix = ""
end
if base.ge_prefix then
for _, existing_prefix in ipairs(base.ge_prefix) do
if existing_prefix.form == ge_prefix then
parse_err("Ge- prefix '" .. prefix .. "' specified twice")
end
end
else
base.ge_prefix = {}
end
table.insert(base.ge_prefix, {form = ge_prefix, footnotes = fetch_footnotes(comma_separated_groups[j])})
end
elseif #comma_separated_groups > 1 then
-- principal parts specified
if base.past then
parse_err("Can't specify principal parts twice")
end
assert(#comma_separated_groups[2] == 1)
local past_index
local first_separator = strip_spaces(comma_separated_groups[2][1])
if first_separator == "#" then
-- present 3rd singular specified
base.pres_23 = fetch_specs(comma_separated_groups[1], function(form)
local stem
if base.conj == "pretpres" then
stem = form
else
stem = form:match("^(.-)%-$")
if not stem then
stem = form:match("^(.-)e?t$")
end
end
if stem then
return stem
else
parse_err("Present 3sg form '" .. form .. "' should end in - (for the stem) or -t")
end
end)
past_index = 3
else
past_index = 1
end
base.past = fetch_specs(comma_separated_groups[past_index], function(form)
return form
end)
if #comma_separated_groups < past_index + 2 then
parse_err("Missing past participle spec")
end
assert(#comma_separated_groups[past_index + 1] == 1)
if strip_spaces(comma_separated_groups[past_index + 1][1]) ~= "," then
parse_err("Only first separator can be a #")
end
base.pp = fetch_specs(comma_separated_groups[past_index + 2], function(form)
if form:find("e[nd]$") or form:find("t$") then
return form
else
parse_err("Past participle '" .. form .. "' should end in -en, -t, or -ed")
end
end)
if #comma_separated_groups > past_index + 2 then
assert(#comma_separated_groups[past_index + 3] == 1)
if strip_spaces(comma_separated_groups[past_index + 3][1]) ~= "," then
parse_err("Only first separator can be a #")
end
base.past_sub = fetch_specs(comma_separated_groups[past_index + 4], function(form)
local stem = form:match("^(.-)e$")
if not stem then
parse_err("Past subjunctive '" .. form .. "' should end in -e")
end
return stem
end)
if #comma_separated_groups > past_index + 4 then
parse_err("Too many specs given")
end
end
elseif first_element == "pretpres" or first_element == "irreg" then
if #comma_separated_groups[1] > 1 then
parse_err("No footnotes allowed with '" .. first_element .. "' spec")
end
if base.conj then
parse_err("Conjugation specified as '" .. first_element .. "' but already specified or autodetermined as '" .. base.conj .. "'")
end
base.conj = first_element
elseif first_element == "einfix" or first_element == "-einfix" then
if #comma_separated_groups[1] > 1 then
parse_err("No footnotes allowed with '" .. first_element .. "' spec")
end
base.unstressed_e_infix = first_element == "einfix"
elseif first_element == "shortimp" or first_element == "longimp" or
first_element == "only3s" or first_element == "only3sp" or
first_element == "nofinite" or first_element == "nosplitprefix" then
if #comma_separated_groups[1] > 1 then
parse_err("No footnotes allowed with '" .. first_element .. "' spec")
end
base[first_element] = true
elseif first_element == "" or first_element == "inf" then
local footnotes = fetch_footnotes(comma_separated_groups[1])
if not footnotes then
parse_err("Empty spec and 'inf' spec without footnotes not allowed")
end
if first_element == "inf" then
base.infstem_footnotes = footnotes
else
base.all_footnotes = footnotes
end
else
parse_err("Unrecognized spec '" .. comma_separated_groups[1][1] .. "'")
end
end
return base
end
-- Normalize all lemmas, splitting off separable prefixes and substituting the pagename for blank lemmas.
local function normalize_all_lemmas(alternant_multiword_spec, from_headword, pagename)
local any_pre_pref
iut.map_word_specs(alternant_multiword_spec, function(base)
if base.lemma == "" then
base.lemma = pagename
end
if base.lemma:find("_") and not base.lemma:find("%[%[") then
-- If lemma is multiword and has no links, add links automatically.
base.lemma= "[[" .. base.lemma:gsub("_", "]]_[[") .. "]]"
end
base.orig_lemma = base.lemma
base.orig_lemma_no_links = m_links.remove_links(base.lemma)
-- Normalize the linked lemma by removing dot, underscore, and <pron> and such indicators.
base.linked_lemma = remove_sein_sich_indicators(base.lemma:gsub("%.", ""):gsub("_", " "))
base.lemma = m_links.remove_links(base.linked_lemma)
local lemma = base.orig_lemma_no_links
base.pre_pref, base.post_pref = "", ""
local prefix, verb = lemma:match("^(.*)_(.-)$")
if prefix then
prefix = prefix:gsub("_", " ") -- in case of multiple preceding words
base.pre_pref = base.pre_pref .. prefix .. " "
base.post_pref = base.post_pref .. " " .. prefix
else
verb = lemma
end
prefix, base.base_verb = verb:match("^(.*)%.(.-)$")
if prefix then
-- Lowercase the separable prefixes (but not postfixes) to allow for specified infinitive `Rad.fahren`,
-- which becomes actual infinitive [[radfahren]] but 'ich fahre Rad' etc.
local prefix_parts = rsplit(prefix, "%.")
for i, prefix_part in ipairs(prefix_parts) do
prefix_parts[i] = lcfirst(prefix_part)
end
-- There may be multiple separable prefixes (e.g. [[wiedergutmachen]], ich mache wieder gut)
base.pre_pref = base.pre_pref .. table.concat(prefix_parts)
base.post_pref = base.post_pref .. " " .. prefix:gsub("%.", " ")
else
base.base_verb = verb
end
if base.pre_pref ~= "" then
any_pre_pref = true
end
if base.only3s then
alternant_multiword_spec.only3s = true
end
if base.only3sp then
alternant_multiword_spec.only3sp = true
end
-- Remove <pron> indicators and such.
local reconstructed_lemma = remove_sein_sich_indicators(base.pre_pref .. base.base_verb)
base.lemma = reconstructed_lemma
base.from_headword = from_headword
end)
if any_pre_pref then
iut.map_word_specs(alternant_multiword_spec, function(base)
base.any_pre_pref = true
end)
end
if alternant_multiword_spec.only3s then
iut.map_word_specs(alternant_multiword_spec, function(base)
if not base.only3s then
error("If some alternants specify 'only3s', all must")
end
end)
end
if alternant_multiword_spec.only3sp then
iut.map_word_specs(alternant_multiword_spec, function(base)
if not base.only3sp then
error("If some alternants specify 'only3sp', all must")
end
end)
end
end
local function detect_verb_type(base, verb_types)
local this_verb_types = {}
local function set_verb_type()
base.verb_types = this_verb_types
if verb_types then
for _, verb_type in ipairs(this_verb_types) do
m_table.insertIfNot(verb_types, verb_type)
end
end
end
if base.conj == "pretpres" then
m_table.insertIfNot(this_verb_types, "pretpres")
set_verb_type()
return
elseif base.conj == "irreg" then
m_table.insertIfNot(this_verb_types, "irreg")
set_verb_type()
return
end
local infstem = m_table.deepCopy(base.infstem)
local past = m_table.deepCopy(base.past)
local pp = m_table.deepCopy(base.pp)
local function matches_forms(forms, expected, ending_to_chop)
expected = expected:gsub("C", not_vowel_c) .. "$"
local seen = false
for _, form in ipairs(forms) do
local stem
if ending_to_chop then
stem = rmatch(form.form, "^(.*)" .. ending_to_chop .. "$")
else
stem = form.form
end
if stem and rfind("#" .. stem, expected) then
seen = true
form.seen = form.seen or "maybe"
end
end
return seen
end
local function reset_maybes(forms, value)
for _, form in ipairs(forms) do
if form.seen == "maybe" then
form.seen = value
end
end
end
local function reset_all_maybes(value)
reset_maybes(infstem, value)
reset_maybes(past, value)
reset_maybes(pp, value)
end
local function has_unseen_weak_pp()
for _, form in ipairs(pp) do
if not form.seen and form.form:find("[dt]$") then
return true
end
end
return false
end
local function has_unseen_strong_pp()
for _, form in ipairs(pp) do
if not form.seen and form.form:find("n$") then
return true
end
end
return false
end
local function check(verbtype, infre, pastre, ppre, exclude)
if exclude then
for _, form in ipairs(infstem) do
if exclude(form.form) then
return
end
end
end
if matches_forms(infstem, infre) and
matches_forms(past, pastre) and
matches_forms(pp, ppre, "en") then
m_table.insertIfNot(this_verb_types, verbtype)
reset_all_maybes(true)
else
reset_all_maybes(false)
end
end
local function check_strong()
check("1", "Ce[iy]C*", "CieC*", "Cie?C*") -- beigen, bleiben, gedeihen, leihen, meiden, preisen, reiben, reihen,
-- scheiden, scheinen, schreiben, schreien, schweigen, speiben, speien, speisen, steigen, treiben, weisen,
-- zeihen; use 'Cie?C*' for past participle to handle 'schrien', 'spien'
check("1", "Ce[iy]C*", "CiC*", "CiC*") -- beißen/beissen/beyßen/beyssen, bleichen, fleißen/fleissen, gleichen,
-- gleiten, greifen, kneifen, kreischen, leiden, pfeifen, reißen/reissen, reiten, scheißen/scheissen,
-- schleichen, schleifen, schleißen/schleissen, schmeißen/schmeissen, schneiden/schneyden, schreiten,
-- spleißen/spleissen, streichen, streiten, weichen
check("2", "CieC*", "CoC*", "CoC*") -- biegen, bieten, fliegen, fliehen, fließen/fliessen, frieren,
-- genießen/geniessen, gießen/giessen, kiesen, kriechen, riechen, schieben, schießen/schiessen, schliefen,
-- schließen/schliessen, sieden, sprießen/spriessen, stieben, triefen, verdrießen/verdriessen, verlieren,
-- wiegen, ziehen
check("2", "CauC*", "CoC*", "CoC*") -- krauchen, saufen, saugen
check("2", "CüC", "CoC", "CoC") -- lügen, trügen
local function exclude_nehmen_sprechen(form)
-- need to exclude nehmen, stehlen, befehlen/empfehlen, sprechen, brechen, stechen
return rfind(form, vowel_c .. "ch$") or rfind(form, vowel_c .. "h" .. not_vowel_c .. "$")
end
check("3", "C[ei]CC+", "CaCC+", "C[ou]CC+", exclude_nehmen_sprechen) -- [with e, + o in pp]: bergen, bersten,
-- gelten, helfen, schelten, sterben, verderben, werben, werfen; [with i, + u in pp]: binden, brinnen, dringen,
-- finden, gelingen, klingen, misslingen, ringen, schlingen, schwinden, schwingen, singen, sinken, springen,
-- stinken, trinken, winden, wringen, zwingen; [with i, + o in pp]: rinnen, gewinnen, schwimmen, sinnen,
-- spinnen
check("3", "C[eiaö]CC+", "CoCC+", "CoCC+", exclude_nehmen_sprechen)
-- [with e]: dreschen, fechten, flechten, melken, quellen, schmelzen, schwellen; [with i]: glimmen, klimmen;
-- [with a]: schallen (geschallt), erschallen; [with ö]: erlöschen
check("3", "quell", "quoll", "quoll") -- need to special-case quellen due to u preceding e
check("3", "schind", "schund", "schund") -- need to special-case due to 'u' in past
check("4", "C[eäo]C*", "Cah?Ch?", "CoC*") -- [with e]: befehlen, brechen, schrecken, nehmen, sprechen, stechen,
-- stecken (gesteckt), stehlen, treffen; [with ä]: gebären; [with o]: kommen
check("4", "C[äe]C", "Coh?C", "Coh?C", function(form) return form:find("heb$") end)
-- [with ä]: gären, wägen, schwären; [with e]: bewegen, weben, scheren (but not heben)
check("5", "C[ei]C*", "CaC", "CeC*") -- [with e, one C]: geben, genesen, geschehen, lesen, meßen, sehen, treten;
-- [with e, two C]: essen, fressen, messen, vergessen; [with i, two C]: bitten, sitzen
check("5", "C[ei]C*", "Cass", "Cess") -- essen, fressen, messen, sitzen in Swiss spelling
check("5", "CieC", "CaC", "CeC") -- liegen
check("6", "CaC*", "CuC*", "CaC*") -- backen, fragen (gefragt), graben, laden, mahlen, schaffen, schlagen,
-- tragen, wachsen, waschen
check("6", "heb", "h[ou]b", "hob") -- we need to special-case this because heben (class 6 per Wikipedia) has the
-- exact same vowels as weben (class 4 per Wikipedia)
check("6", "schwör", "schw[ou]r", "schwor") -- only strong verb with these vowels
check("7", "CaC*", "CieC*", "CaC*") -- blasen, braten, fallen, halten, lassen, raten/rathen, schlafen
check("7", "C[aäe]C*", "CiC*", "CaC*") -- [with a]: fangen; [with ä]: hängen; [with e]: gehen
check("7", "Ce[iy]C*", "CieC*", "Ce[iy]C*") -- heißen/heissen/heyßen/heyssen
check("7", "CauC*", "CieC*", "CauC*") -- hauen, laufen
check("7", "CoC*", "CieC*", "CoC*") -- stoßen/stossen
check("7", "CuC*", "CieC*", "CuC*") -- rufen
end
for _, form in ipairs(past) do
local past_stem = form.form:match("^(.*)te$")
-- matches_forms() expects a Lua pattern so we need to escape special pattern chars (e.g. * in [[f*cken]])
past_stem = past_stem and m_string_utilities.pattern_escape(past_stem) or nil
if past_stem then
if matches_forms(infstem, "#" .. past_stem) then
-- Need to run matches_forms() on all possibilities even if earlier ones match,
-- to mark the seen forms correctly.
local matches_pp = matches_forms(pp, "#" .. past_stem .. "t")
matches_pp = matches_forms(pp, "#ge" .. past_stem .. "t") or matches_pp
if matches_pp then
m_table.insertIfNot(this_verb_types, "weak")
form.seen = true
reset_all_maybes(true)
else
reset_all_maybes(false)
end
end
end
if not form.seen and form.form:find("ete$") then
if matches_forms(infstem, "#" .. past_stem:gsub("e$", "")) then
-- Need to run matches_forms() on all possibilities even if earlier ones match,
-- to mark the seen forms correctly.
local matches_pp = matches_forms(pp, "#" .. past_stem .. "t")
matches_pp = matches_forms(pp, "#ge" .. past_stem .. "t") or matches_pp
matches_pp = matches_forms(pp, "#" .. past_stem .. "d") or matches_pp
matches_pp = matches_forms(pp, "#ge" .. past_stem .. "d") or matches_pp
if matches_pp then
m_table.insertIfNot(this_verb_types, "weak")
form.seen = true
reset_all_maybes(true)
else
reset_all_maybes(false)
end
end
end
if past_stem and not form.seen then
if not has_unseen_weak_pp() and has_unseen_strong_pp() then
m_table.insertIfNot(this_verb_types, "mixed")
else
m_table.insertIfNot(this_verb_types, "irregweak")
end
matches_forms(pp, "#" .. past_stem .. "t")
matches_forms(pp, "#ge" .. past_stem .. "t")
form.seen = true
reset_all_maybes(true)
end
if not form.seen then
check_strong()
end
if not form.seen then
if not has_unseen_strong_pp() and has_unseen_weak_pp() then
m_table.insertIfNot(this_verb_types, "mixed")
else
m_table.insertIfNot(this_verb_types, "irregstrong")
end
end
end
for _, form in ipairs(pp) do
if not form.seen then
if form.form:find("n$") then
if m_table.contains(this_verb_types, "strong") then
m_table.insertIfNot(this_verb_types, "irregstrong")
elseif m_table.contains(this_verb_types, "weak") then
m_table.insertIfNot(this_verb_types, "mixed")
end
elseif form.form:find("[dt]$") then
if m_table.contains(this_verb_types, "weak") then
m_table.insertIfNot(this_verb_types, "irregweak")
elseif m_table.contains(this_verb_types, "strong") then
m_table.insertIfNot(this_verb_types, "mixed")
end
end
end
end
base.verb_types = this_verb_types
if verb_types then
for _, verb_type in ipairs(this_verb_types) do
m_table.insertIfNot(verb_types, verb_type)
end
end
set_verb_type()
end
local function detect_indicator_spec(base)
base.forms = {}
base.aux = base.aux or {{form = "haben"}}
base.bare_infinitive = {{form = base.base_verb, footnotes = base.infstem_footnotes}}
add(base, "infinitive", base.pre_pref, base.bare_infinitive)
if base.only3s and base.only3sp then
error("'only3s' and 'only3sp' cannot both be specified")
end
if base.conj == "irreg" then
for irregverb, verbobj in pairs(irreg_verbs) do
base.insep_prefix = base.base_verb:match("^(.-)" .. irregverb .. "$")
if base.insep_prefix then
base.irregverb = irregverb
base.irregverbobj = verbobj
if not base.ge_prefix then
if base.insep_prefix ~= "" then
base.ge_prefix = {{form = ""}}
else
base.ge_prefix = {{form = "ge"}}
end
end
return
end
end
error("Unrecognized irregular base verb '" .. base.base_verb .. "'")
end
-- The following applies to everything but 'irreg' verbs.
local infstem, infroot = base.base_verb:match("^((.*)e[lr])n$")
if infstem then
base.unstressed_el_er = true
else
infstem, infroot = base.base_verb:match("^((.*)erl)n$") -- [[fensterln]]
if infstem then
base.unstressed_erl = true
else
infstem = base.base_verb:match("^(.*)en$")
infroot = infstem
if not infstem then
error("Unrecognized infinitive, should end in -en, -eln, -ern or -erln: '" .. base.base_verb .. "'")
end
end
end
base.infstem = {{form = infstem, footnotes = base.infstem_footnotes}}
if base.unstressed_e_infix == nil then
-- Autodetect whether we need an -e- infix in the pres_2s and pres_3s ([[atmen]], [[eignen]], etc.).
-- Almost all such cases have -Cmen or -Cnen where C is a consonant other than r or l and other than the
-- following m or n (hence [[meinen]], [[lernen]], [[filmen]], [[schwimmen]] should be excluded); we also
-- need to exclue -Vhmen and -Vhnen ([[wohnen]], [[rühmen]]), but not -Chmen and -Chnen ([[zeichnen]]).
if base.base_verb:find("[mn]en$") and not base.base_verb:find("([mn])%1en$") and
not rfind(base.base_verb, vowel_c .. "[hrl]?[mn]en$") then
base.unstressed_e_infix = true
end
end
if not base.conj then
base.conj = "normal"
end
if base.conj == "normal" then
local weak_past
if not base.past then
if base.unstressed_e_infix or ends_in_dt(infstem) then
weak_past = infstem .. "et"
else
weak_past = infstem .. "t"
end
base.past = {{form = weak_past .. "e"}}
end
if not base.pp then
if not weak_past then
error("Internal error: past was explicitly given but not past participle")
end
if not base.ge_prefix then
local no_ge
for _, insep_prefix in ipairs(inseparable_prefixes) do
-- There must be a vowel following the inseparable prefix; excludes beben, bechern, belfern, bellen, bessern,
-- beten, betteln, betten, erben, erden, ernten, erzen, entern, gecken, gehren, gellen, gerben, geten, missen,
-- zergen, zerren, etc.
if rfind(infroot, "^" .. insep_prefix .. ".*" .. vowel_c .. ".*") and
-- Exclude cases like beigen, beichten, beugen, beulen, geifern; this also wrongly excludes
-- beirren, which needs -ge.
not rfind(infroot, "^[bg]e[iu]" .. not_vowel_c .. "*$") then
no_ge = true
break
end
-- Check for -ier preceded by a vowel (excludes bieren, frieren, gieren, schmieren, stieren, zieren, etc.)
if not base.unstressed_el_er and not base.unstressed_erl and rfind(infroot, "^.*" .. vowel_c .. ".*ier$") then
no_ge = true
break
end
end
if no_ge then
base.ge_prefix = {{form = ""}}
else
base.ge_prefix = {{form = "ge"}}
end
end
base.pp = iut.map_forms(base.ge_prefix, function(form)
if base.unstressed_el_er or base.unstressed_erl then
return form .. base.base_verb:gsub("n$", "") .. "t"
else
return form .. weak_past
end
end)
end
else
if not base.pp then
error("For '" .. base.conj .. "' type verbs, past participle must be explicitly given")
end
end
add(base, "perf_part", base.pre_pref, base.pp)
end
local function detect_all_indicator_specs(alternant_multiword_spec)
iut.map_word_specs(alternant_multiword_spec, function(base)
detect_indicator_spec(base)
detect_verb_type(base)
end)
end
-- Set the overall auxiliary or auxiliaries. We can't do this using the normal inflection
-- code as it will produce e.g. '[[haben]] und [[haben]]' for conjoined verbs.
local function compute_auxiliary(alternant_multiword_spec)
iut.map_word_specs(alternant_multiword_spec, function(base)
iut.insert_forms(alternant_multiword_spec.forms, "aux", base.aux)
end)
end
function export.process_verb_classes(classes)
local class_descs = {}
local cats = {}
local function insert_desc(desc)
m_table.insertIfNot(class_descs, desc)
end
local function insert_cat(cat)
m_table.insertIfNot(cats, cat .. "ภาษาเยอรมัน")
end
for _, class in ipairs(classes) do
if class == "weak" then
insert_desc("[[ภาคผนวก:อภิธานศัพท์#คำกริยาอ่อน|อ่อน]]")
insert_cat("คำกริยาอ่อน")
elseif class == "irregweak" then
insert_desc("[[ภาคผนวก:อภิธานศัพท์#คำกริยาอ่อน|อ่อน]], [[ภาคผนวก:อภิธานศัพท์#ไม่ปรกติ|ไม่ปรกติ]]")
insert_cat("คำกริยาอ่อน")
insert_cat("คำกริยาอ่อนไม่ปรกติ")
elseif class == "pretpres" then
insert_desc("[[Appendix:Glossary#preterite-present verb|preterite-present]]")
insert_cat("preterite-present verbs")
elseif class == "irreg" then
insert_desc("[[ภาคผนวก:อภิธานศัพท์#ไม่ปรกติ|ไม่ปรกติ]]")
insert_cat("คำกริยาไม่ปรกติ")
elseif class == "mixed" then
insert_desc("คำกริยาผสม")
insert_cat("คำกริยาผสม")
elseif class == "irregstrong" then
insert_desc("[[ภาคผนวก:อภิธานศัพท์#คำกริยาแข็ง|แข็ง]], [[ภาคผนวก:อภิธานศัพท์#ไม่ปรกติ|ไม่ปรกติ]]")
insert_cat("คำกริยาแข็ง")
insert_cat("คำกริยาแข็งไม่ปรกติ")
elseif class:find("^[1-7]$") then
insert_desc("[[ภาคผนวก:อภิธานศัพท์#คำกริยาแข็ง|แข็ง]], กลุ่ม " .. class)
insert_cat("คำกริยาแข็ง")
insert_cat("คำกริยาแข็งกลุ่ม " .. class .. " ")
else
error("คำกริยาไม่ทราบกลุ่ม '" .. class .. "'")
end
end
return class_descs, cats
end
local function add_categories_and_annotation(alternant_multiword_spec, base, from_headword, manual)
local function insert_cat(full_cat)
m_table.insertIfNot(alternant_multiword_spec.categories, full_cat)
end
if not from_headword then
for _, slot_and_accel in ipairs(all_verb_slots) do
local slot = slot_and_accel[1]
local forms = base.forms[slot]
local must_break = false
if forms then
for _, form in ipairs(forms) do
if not form.form:find("%[%[") then
local title = mw.title.new(form.form)
if title and not title.exists then
insert_cat("คำกริยาที่มีลิงก์แดงในตารางการผันรูปภาษาเยอรมัน")
must_break = true
break
end
end
end
end
if must_break then
break
end
end
end
if manual then
return
end
local class_descs, cats = export.process_verb_classes(base.verb_types)
for _, desc in ipairs(class_descs) do
m_table.insertIfNot(alternant_multiword_spec.verb_types, desc)
end
-- Don't place multiword terms in categories like 'German class 4 strong verbs' to avoid spamming the
-- categories with such terms.
if from_headword and not base.lemma:find(" ") then
for _, cat in ipairs(cats) do
insert_cat(cat)
end
end
for _, aux in ipairs(base.aux) do
m_table.insertIfNot(alternant_multiword_spec.auxiliaries, link_term(aux.form, "term"))
if from_headword and not base.lemma:find(" ") then -- see above
insert_cat("คำกริยาภาษาเยอรมันที่ใช้คำกริยาช่วย " .. aux.form)
-- Set flags for use below in adding 'German verbs using haben and sein as auxiliary'
alternant_multiword_spec["saw_" .. aux.form] = true
end
end
end
-- Compute the categories to add the verb to, as well as the annotation to display in the
-- conjugation title bar. We combine the code to do these functions as both categories and
-- title bar contain similar information.
local function compute_categories_and_annotation(alternant_multiword_spec, from_headword, manual)
alternant_multiword_spec.categories = {}
alternant_multiword_spec.verb_types = {}
alternant_multiword_spec.auxiliaries = {}
iut.map_word_specs(alternant_multiword_spec, function(base)
add_categories_and_annotation(alternant_multiword_spec, base, from_headword)
end)
if manual then
alternant_multiword_spec.annotation = ""
return
end
local ann_parts = {}
table.insert(ann_parts, table.concat(alternant_multiword_spec.verb_types, " หรือ "))
if #alternant_multiword_spec.auxiliaries > 0 then
table.insert(ann_parts, ", คำกริยาช่วย " .. table.concat(alternant_multiword_spec.auxiliaries, " หรือ "))
end
if from_headword and alternant_multiword_spec.saw_haben and alternant_multiword_spec.saw_sein then
m_table.insertIfNot(alternant_multiword_spec.categories, "คำกริยาภาษาเยอรมันที่ใช้คำกริยาช่วย haben และ sein")
end
alternant_multiword_spec.annotation = table.concat(ann_parts)
end
local function show_forms(alternant_multiword_spec)
local lemmas = iut.map_forms(alternant_multiword_spec.forms.infinitive,
remove_sein_sich_indicators)
alternant_multiword_spec.lemmas = lemmas -- save for later use in make_table()
local linked_pronouns = {}
for index, pronoun in ipairs(pronouns) do
-- use 'es' instead of 'er' for 3s-only verbs
if index == 3 and alternant_multiword_spec.only3s then
linked_pronouns[index] = link_term("es")
else
linked_pronouns[index] = link_term(pronoun)
end
end
local dass = link_term("dass") .. " "
local function generate_link(data)
local link = m_links.full_link {
lang = lang, term = data.form.formval_for_link, tr = "-", accel = data.form.accel_obj
}
local footnote_text = iut.get_footnote_text(data.form.footnotes, data.footnote_obj)
local persnum = data.slot:match("^imp_(2[sp])$")
if persnum then
link = link .. " (" .. linked_pronouns[persnum_to_index[persnum]] .. ")"
else
persnum = data.slot:match("^.*_([123][sp])$")
if persnum then
link = linked_pronouns[persnum_to_index[persnum]] .. " " .. link
end
if data.slot:find("^subc_") then
link = dass .. link
end
end
return link .. footnote_text
end
local function join_spans(data)
if data.slot == "aux" then
return table.concat(data.formval_spans, " หรือ ")
else
return table.concat(data.formval_spans, "<br />")
end
end
local props = {
lang = lang,
lemmas = lemmas,
generate_link = generate_link,
join_spans = join_spans,
}
props.slot_list = verb_slots_basic
iut.show_forms(alternant_multiword_spec.forms, props)
alternant_multiword_spec.footnote_basic = alternant_multiword_spec.forms.footnote
props.slot_list = verb_slots_subordinate_clause
iut.show_forms(alternant_multiword_spec.forms, props)
alternant_multiword_spec.footnote_subordinate_clause = alternant_multiword_spec.forms.footnote
props.slot_list = verb_slots_composed
iut.show_forms(alternant_multiword_spec.forms, props)
alternant_multiword_spec.footnote_composed = alternant_multiword_spec.forms.footnote
end
local notes_template = [=[
<div style="width:100%;text-align:left;background:var(--wikt-palette-grey-blue-1,#d9ebff)">
<div style="display:inline-block;text-align:left;padding-left:1em;padding-right:1em">
{footnote}
</div></div>
]=]
local zu_infinitive_table = [=[
|-
! colspan=2 style="background:var(--wikt-palette-grey-2,#d0d0d0)" | รูปกริยากลาง zu
| colspan=4 data-accel-col=1 | {zu_infinitive}
]=]
local basic_table = [=[
<div class="NavFrame" style="">
<div class="NavHead" style="">การผันรูปของ {title}</div>
<div class="NavContent">
{\op}| style="border: 1px solid var(--wikt-palette-black,#000000); border-collapse:collapse; background:var(--wikt-palette-white,#fafafa); text-align:center; width:100%" class="inflection-table"
|-
! colspan=2 style="background:var(--wikt-palette-grey-2,#d0d0d0)" | <span title="Infinitiv">รูปกริยากลาง</span>
| colspan=4 data-accel-col=1 | {infinitive}
|-
! colspan=2 style="background:var(--wikt-palette-grey-2,#d0d0d0)" | <span title="Partizip I (Partizip Präsens)">รูปกริยาขยายปัจจุบันกาล</span>
| colspan=4 data-accel-col=20 | {pres_part}
|-
! colspan=2 style="background:var(--wikt-palette-grey-2,#d0d0d0)" | <span title="Partizip II (Partizip Perfekt)">รูปกริยาขยายอดีตกาล</span>
| colspan=4 data-accel-col=20 | {perf_part}
{zu_infinitive_table}|-
! colspan=2 style="background:var(--wikt-palette-grey-2,#d0d0d0)" | <span title="Hilfsverb">คำกริยาช่วย</span>
| colspan=4 | {aux}
|-
| rowspan=2 style="background:var(--wikt-palette-grey-indigo-3,#a0ade3)" |
! colspan=2 style="background:var(--wikt-palette-grey-indigo-3,#a0ade3)" | <span title="Indikativ">มาลาบอกเล่า</span>
| rowspan=2 style="background:var(--wikt-palette-grey-indigo-3,#a0ade3)" |
! colspan=2 style="background:var(--wikt-palette-grey-indigo-3,#a0ade3)" | <span title="Konjunktiv">มาลาสมมุติ</span>
|-
! style="background:var(--wikt-palette-grey-indigo-3,#a0ade3)" | เอกพจน์
! style="background:var(--wikt-palette-grey-indigo-3,#a0ade3)" | พหูพจน์
! style="background:var(--wikt-palette-grey-indigo-3,#a0ade3)" | เอกพจน์
! style="background:var(--wikt-palette-grey-indigo-3,#a0ade3)" | พหูพจน์
|-
! rowspan=3 style="background:var(--wikt-palette-grey-blue-3,#c0cfe4); width:7em" | <span title="Präsens">ปัจจุบันกาล</span>
| data-accel-col=2 | {pres_1s}
| data-accel-col=3 | {pres_1p}
! rowspan=3 style="background:var(--wikt-palette-grey-blue-3,#c0cfe4); width:7em" | <span title="Konjunktiv I (Konjunktiv Präsens)">I</span>
| data-accel-col=10 | {subi_1s}
| data-accel-col=11 | {subi_1p}
|-
| data-accel-col=2 | {pres_2s}
| data-accel-col=3 | {pres_2p}
| data-accel-col=10 | {subi_2s}
| data-accel-col=11 | {subi_2p}
|-
| data-accel-col=2 | {pres_3s}
| data-accel-col=3 | {pres_3p}
| data-accel-col=10 | {subi_3s}
| data-accel-col=11 | {subi_3p}
|-
| colspan=6 style="background:var(--wikt-palette-grey-2,#d5d5d5); height: .25em" |
|-
! rowspan=3 style="background:var(--wikt-palette-grey-blue-3,#c0cfe4)" | <span title="Präteritum">อดีตกาลสิ้นสุด</span>
| data-accel-col=6 | {pret_1s}
| data-accel-col=7 | {pret_1p}
! rowspan=3 style="background:var(--wikt-palette-grey-blue-3,#c0cfe4)" | <span title="Konjunktiv II (Konjunktiv Präteritum)">II</span>
| data-accel-col=14 | {subii_1s}
| data-accel-col=15 | {subii_1p}
|-
| data-accel-col=6 | {pret_2s}
| data-accel-col=7 | {pret_2p}
| data-accel-col=14 | {subii_2s}
| data-accel-col=15 | {subii_2p}
|-
| data-accel-col=6 | {pret_3s}
| data-accel-col=7 | {pret_3p}
| data-accel-col=14 | {subii_3s}
| data-accel-col=15 | {subii_3p}
|-
| colspan=6 style="background:var(--wikt-palette-grey-2,#d5d5d5); height: .25em" |
|-
! style="background:var(--wikt-palette-grey-blue-3,#c0cfe4)" | <span title="Imperativ">มาลาสั่ง</span>
| data-accel-col=18 | {imp_2s}
| data-accel-col=19 | {imp_2p}
| colspan=3 style="background:var(--wikt-palette-grey-1,#e0e0e0)" |
|{\cl}{notes_clause}</div></div>
]=]
local subordinate_clause_table = [=[
<div class="NavFrame" style="">
<div class="NavHead" style="">รูปกริยา {title} เมื่ออยู่ในอนุประโยค</div>
<div class="NavContent">
{\op}| style="border: 1px solid var(--wikt-palette-black,#000000); border-collapse:collapse; background:var(--wikt-palette-white,#fafafa); text-align:center; width:100%" class="inflection-table"
|-
| style="background:var(--wikt-palette-grey-indigo-3,#a0ade3)" |
! colspan=2 style="background:var(--wikt-palette-grey-indigo-3,#a0ade3)" | <span title="Indikativ">มาลาบอกเล่า</span>
| style="background:var(--wikt-palette-grey-indigo-3,#a0ade3)" |
! colspan=2 style="background:var(--wikt-palette-grey-indigo-3,#a0ade3)" | <span title="Konjunktiv">มาลาสมมุติ</span>
|-
! rowspan=3 style="background:var(--wikt-palette-grey-blue-3,#c0cfe4); width:7em" | <span title="Präsens">ปัจจุบันกาล</span>
| data-accel-col=4 | {subc_pres_1s}
| data-accel-col=5 | {subc_pres_1p}
! rowspan=3 style="background:var(--wikt-palette-grey-blue-3,#c0cfe4); width:7em" | <span title="Konjunktiv I (Konjunktiv Präsens)">I</span>
| data-accel-col=12 | {subc_subi_1s}
| data-accel-col=13 | {subc_subi_1p}
|-
| data-accel-col=4 | {subc_pres_2s}
| data-accel-col=5 | {subc_pres_2p}
| data-accel-col=12 | {subc_subi_2s}
| data-accel-col=13 | {subc_subi_2p}
|-
| data-accel-col=4 | {subc_pres_3s}
| data-accel-col=5 | {subc_pres_3p}
| data-accel-col=12 | {subc_subi_3s}
| data-accel-col=13 | {subc_subi_3p}
|-
| colspan=6 style="background:var(--wikt-palette-grey-2,#d5d5d5); height: .25em" |
|-
! rowspan=3 style="background:var(--wikt-palette-grey-blue-3,#c0cfe4)" | <span title="Präteritum">อดีตกาลสิ้นสุด</span>
| data-accel-col=8 | {subc_pret_1s}
| data-accel-col=9 | {subc_pret_1p}
! rowspan=3 style="background:var(--wikt-palette-grey-blue-3,#c0cfe4)" | <span title="Konjunktiv II (Konjunktiv Präteritum)">II</span>
| data-accel-col=16 | {subc_subii_1s}
| data-accel-col=17 | {subc_subii_1p}
|-
| data-accel-col=8 | {subc_pret_2s}
| data-accel-col=9 | {subc_pret_2p}
| data-accel-col=16 | {subc_subii_2s}
| data-accel-col=17 | {subc_subii_2p}
|-
| data-accel-col=8 | {subc_pret_3s}
| data-accel-col=9 | {subc_pret_3p}
| data-accel-col=16 | {subc_subii_3s}
| data-accel-col=17 | {subc_subii_3p}
|{\cl}{notes_clause}</div></div>
]=]
local composed_table = [=[
<div class="NavFrame" style="">
<div class="NavHead" style="">รูปประกอบของคำกริยา {title}</div>
<div class="NavContent">
{\op}| style="border: 1px solid var(--wikt-palette-black,#000000); border-collapse:collapse; background:var(--wikt-palette-white,#fafafa); text-align:center; width:100%" class="inflection-table"
|-
! colspan=6 style="background:var(--wikt-palette-grey-green-4,#99cc99)" | <span title="Perfekt">สมบูรณ์</span>
|-
! style="background:var(--wikt-palette-grey-green-4,#99cc99)" |
! style="background:var(--wikt-palette-grey-green-4,#99cc99)" | เอกพจน์
! style="background:var(--wikt-palette-grey-green-4,#99cc99)" | พหูพจน์
! style="background:var(--wikt-palette-grey-green-4,#99cc99)" |
! style="background:var(--wikt-palette-grey-green-4,#99cc99)" | เอกพจน์
! style="background:var(--wikt-palette-grey-green-4,#99cc99)" | พหูพจน์
|-
! rowspan=3 style="background:var(--wikt-palette-grey-green-2,#cfedcc); width:7em" | <span title="Indikativ">มาลาบอกเล่า</span>
| {perf_ind_1s}
| {perf_ind_1p}
! rowspan=3 style="background:var(--wikt-palette-grey-green-2,#cfedcc); width:7em" | <span title="Konjunktiv">มาลาสมมุติ</span>
| {perf_sub_1s}
| {perf_sub_1p}
|-
| {perf_ind_2s}
| {perf_ind_2p}
| {perf_sub_2s}
| {perf_sub_2p}
|-
| {perf_ind_3s}
| {perf_ind_3p}
| {perf_sub_3s}
| {perf_sub_3p}
|-
! colspan=6 style="background:var(--wikt-palette-grey-green-4,#99CC99)" | <span title="Plusquamperfekt">อภิสมบูรณ์</span>
|-
! rowspan=3 style="background:var(--wikt-palette-grey-green-2,#cfedcc)" | <span title="Indikativ">มาลาบอกเล่า</span>
| {plup_ind_1s}
| {plup_ind_1p}
! rowspan=3 style="background:var(--wikt-palette-grey-green-2,#cfedcc)" | <span title="Konjunktiv">มาลาสมมุติ</span>
| {plup_sub_1s}
| {plup_sub_1p}
|-
| {plup_ind_2s}
| {plup_ind_2p}
| {plup_sub_2s}
| {plup_sub_2p}
|-
| {plup_ind_3s}
| {plup_ind_3p}
| {plup_sub_3s}
| {plup_sub_3p}
|-
! colspan=6 style="background:var(--wikt-palette-grey-indigo-4,#9999DF)" | <span title="Futur I">อนาคตกาล I</span>
|-
! rowspan=3 style="background:var(--wikt-palette-grey-indigo-2,#ccccff)" | <span title="Infinitiv">รูปกริยากลาง</span>
| rowspan=3 colspan=2 | {futi_inf}
! rowspan=3 style="background:var(--wikt-palette-grey-indigo-2,#ccccff)" | <span title="Konjunktiv I (Konjunktiv Präsens)">มาลาสมมุติ I</span>
| {futi_subi_1s}
| {futi_subi_1p}
|-
| {futi_subi_2s}
| {futi_subi_2p}
|-
| {futi_subi_3s}
| {futi_subi_3p}
|-
! colspan=6 style="background:var(--wikt-palette-grey-2,#d5d5d5); height: .25em" |
|-
! rowspan=3 style="background:var(--wikt-palette-grey-indigo-2,#ccccff)" | <span title="Indikativ">มาลาบอกเล่า</span>
| {futi_ind_1s}
| {futi_ind_1p}
! rowspan=3 style="background:var(--wikt-palette-grey-indigo-2,#ccccff)" | <span title="Konjunktiv II (Konjunktiv Präteritum)">มาลาสมมุติ II</span>
| {futi_subii_1s}
| {futi_subii_1p}
|-
| {futi_ind_2s}
| {futi_ind_2p}
| {futi_subii_2s}
| {futi_subii_2p}
|-
| {futi_ind_3s}
| {futi_ind_3p}
| {futi_subii_3s}
| {futi_subii_3p}
|-
! colspan=6 style="background:var(--wikt-palette-grey-indigo-4,#9999DF)" | <span title="Futur II">อนาคตกาล II</span>
|-
! rowspan=3 style="background:var(--wikt-palette-grey-indigo-2,#ccccff)" | <span title="Infinitiv">รูปกริยากลาง</span>
| rowspan=3 colspan=2 | {futii_inf}
! rowspan=3 style="background:var(--wikt-palette-grey-indigo-2,#ccccff)" | <span title="Konjunktiv I (Konjunktiv Präsens)">มาลาสมมุติ I</span>
| {futii_subi_1s}
| {futii_subi_1p}
|-
| {futii_subi_2s}
| {futii_subi_2p}
|-
| {futii_subi_3s}
| {futii_subi_3p}
|-
! colspan=6 style="background:var(--wikt-palette-grey-2,#d5d5d5); height: .25em" |
|-
! rowspan=3 style="background:var(--wikt-palette-grey-indigo-2,#ccccff)" | <span title="Indikativ">มาลาบอกเล่า</span>
| {futii_ind_1s}
| {futii_ind_1p}
! rowspan=3 style="background:var(--wikt-palette-grey-indigo-2,#ccccff)" | <span title="Konjunktiv II (Konjunktiv Präteritum)">มาลาสมมุติ II</span>
| {futii_subii_1s}
| {futii_subii_1p}
|-
| {futii_ind_2s}
| {futii_ind_2p}
| {futii_subii_2s}
| {futii_subii_2p}
|-
| {futii_ind_3s}
| {futii_ind_3p}
| {futii_subii_3s}
| {futii_subii_3p}
|{\cl}{notes_clause}</div></div>]=]
local function make_table(alternant_multiword_spec)
local forms = alternant_multiword_spec.forms
forms.title = link_term(alternant_multiword_spec.lemmas[1].form, "term")
if alternant_multiword_spec.annotation ~= "" then
forms.title = forms.title .. " (" .. alternant_multiword_spec.annotation .. ")"
end
-- Maybe format the subordinate clause table.
local formatted_subordinate_clause_table
if forms.subc_pres_3s ~= "—" then -- use 3s in case of only3s verb
forms.zu_infinitive_table = m_string_utilities.format(zu_infinitive_table, forms)
forms.footnote = alternant_multiword_spec.footnote_subordinate_clause
forms.notes_clause = forms.footnote ~= "" and m_string_utilities.format(notes_template, forms) or ""
formatted_subordinate_clause_table = m_string_utilities.format(subordinate_clause_table, forms)
else
forms.zu_infinitive_table = ""
formatted_subordinate_clause_table = ""
end
-- Format the basic table.
forms.footnote = alternant_multiword_spec.footnote_basic
forms.notes_clause = forms.footnote ~= "" and m_string_utilities.format(notes_template, forms) or ""
local formatted_basic_table = m_string_utilities.format(basic_table, forms)
-- Format the composed table.
forms.footnote = alternant_multiword_spec.footnote_composed
forms.notes_clause = forms.footnote ~= "" and m_string_utilities.format(notes_template, forms) or ""
local formatted_composed_table = m_string_utilities.format(composed_table, forms)
-- Paste them together.
return formatted_basic_table .. formatted_subordinate_clause_table .. formatted_composed_table
end
-- Externally callable function to parse and conjugate a verb given user-specified arguments.
-- Return value is WORD_SPEC, an object where the conjugated forms are in `WORD_SPEC.forms`
-- for each slot. If there are no values for a slot, the slot key will be missing. The value
-- for a given slot is a list of objects {form=FORM, footnotes=FOOTNOTES}.
function export.do_generate_forms(parent_args, from_headword, def)
local params = {
[1] = true,
pagename = true,
json = {type = "boolean"}, -- for bot use
}
if from_headword then
params["lemma"] = {list = true}
params["id"] = true
end
local args = require("Module:parameters").process(parent_args, params)
local pagename = args.pagename or mw.loadData("Module:headword/data").pagename
if not args[1] then
if pagename == "de-conj" or pagename == "de-verb" then
args[1] = def or "aus.fahren<fährt#fuhr,gefahren,führe.haben,sein>"
else
args[1] = pagename
-- If pagename has spaces in it, add links around each word
if args[1]:find(" ") then
args[1] = "[[" .. args[1]:gsub(" ", "]] [[") .. "]]"
end
end
end
local parse_props = {
parse_indicator_spec = parse_indicator_spec,
lang = lang,
allow_default_indicator = true,
allow_blank_lemma = true,
}
local escaped_arg1 = escape_sein_sich_indicators(args[1])
local alternant_multiword_spec = iut.parse_inflected_text(escaped_arg1, parse_props)
alternant_multiword_spec.pos = "คำกริยา"
alternant_multiword_spec.args = args
normalize_all_lemmas(alternant_multiword_spec, from_headword, pagename)
detect_all_indicator_specs(alternant_multiword_spec)
local inflect_props = {
slot_list = all_verb_slots,
lang = lang,
inflect_word_spec = conjugate_verb,
-- We add links around the generated verbal forms rather than allow the entire multiword
-- expression to be a link, so ensure that user-specified links get included as well.
include_user_specified_links = true,
}
iut.inflect_multiword_or_alternant_multiword_spec(alternant_multiword_spec, inflect_props)
compute_auxiliary(alternant_multiword_spec)
compute_categories_and_annotation(alternant_multiword_spec, from_headword)
if args.json then
return require("Module:JSON").toJSON(alternant_multiword_spec)
end
return alternant_multiword_spec
end
-- Entry point for {{de-conj}}. Template-callable function to parse and conjugate a verb given
-- user-specified arguments and generate a displayable table of the conjugated forms.
function export.show(frame)
local parent_args = frame:getParent().args
local alternant_multiword_spec = export.do_generate_forms(parent_args)
if type(alternant_multiword_spec) == "string" then -- json=1 specified
return alternant_multiword_spec
end
show_forms(alternant_multiword_spec)
return make_table(alternant_multiword_spec) .. require("Module:utilities").format_categories(alternant_multiword_spec.categories, lang)
end
local numbered_params = {
-- required params
[1] = "infinitive",
[2] = "pres_part",
[3] = "perf_part",
[4] = "aux",
[5] = "pres_1s",
[6] = "pres_2s",
[7] = "pres_3s",
[8] = "pres_1p",
[9] = "pres_2p",
[10] = "pres_3p",
[11] = "pret_1s",
[12] = "pret_2s",
[13] = "pret_3s",
[14] = "pret_1p",
[15] = "pret_2p",
[16] = "pret_3p",
[17] = "subi_1s",
[18] = "subi_2s",
[19] = "subi_3s",
[20] = "subi_1p",
[21] = "subi_2p",
[22] = "subi_3p",
[23] = "subii_1s",
[24] = "subii_2s",
[25] = "subii_3s",
[26] = "subii_1p",
[27] = "subii_2p",
[28] = "subii_3p",
[29] = "imp_2s",
[30] = "imp_2p",
-- [31] formerly the 2nd variant of imp_2s; now no longer allowed (use comma-separated 29=)
-- [32] formerly indicated whether the 2nd variant of imp_2s was present
-- optional params
[33] = "subc_pres_1s",
[34] = "subc_pres_2s",
[35] = "subc_pres_3s",
[36] = "subc_pres_1p",
[37] = "subc_pres_2p",
[38] = "subc_pres_3p",
[39] = "subc_pret_1s",
[40] = "subc_pret_2s",
[41] = "subc_pret_3s",
[42] = "subc_pret_1p",
[43] = "subc_pret_2p",
[44] = "subc_pret_3p",
[45] = "subc_subi_1s",
[46] = "subc_subi_2s",
[47] = "subc_subi_3s",
[48] = "subc_subi_1p",
[49] = "subc_subi_2p",
[50] = "subc_subi_3p",
[51] = "subc_subii_1s",
[52] = "subc_subii_2s",
[53] = "subc_subii_3s",
[54] = "subc_subii_1p",
[55] = "subc_subii_2p",
[56] = "subc_subii_3p",
[57] = "zu_infinitive",
}
local max_required_param = 30
-- Externally callable function to parse and conjugate a verb where all forms are given manually.
-- Return value is WORD_SPEC, an object where the conjugated forms are in `WORD_SPEC.forms`
-- for each slot. If there are no values for a slot, the slot key will be missing. The value
-- for a given slot is a list of objects {form=FORM, footnotes=FOOTNOTES}.
function export.do_generate_forms_manual(parent_args)
local params = {
json = {type = "boolean"},
}
for paramnum, _ in pairs(numbered_params) do
params[paramnum] = {required = paramnum <= max_required_param}
end
local args = require("Module:parameters").process(parent_args, params)
local base = {
forms = {},
manual = true,
}
local function process_numbered_param(paramnum)
local argval = args[paramnum]
if paramnum == 4 then
if argval == "h" then
base.aux = {{form = "haben"}}
elseif argval == "s" then
base.aux = {{form = "sein"}}
elseif argval == "hs" then
base.aux = {{form = "haben"}, {form = "sein"}}
elseif argval == "sh" then
base.aux = {{form = "sein"}, {form = "haben"}}
elseif not argval then
error("Missing auxiliary in 4=")
else
error("Unrecognized auxiliary 4=" .. argval)
end
elseif argval and argval ~= "-" then
local split_vals = rsplit(argval, "%s*,%s*")
for _, val in ipairs(split_vals) do
-- FIXME! This won't work with commas or brackets in footnotes.
-- To fix this, use functions from [[Module:inflection utilities]].
local form, footnote = val:match("^(.-)%s*(%[[^%]%[]-%])$")
local footnotes
if form then
footnotes = {footnote}
else
form = val
end
local slot = numbered_params[paramnum]
--if slot:find("subii") then
-- local subii_footnotes = get_subii_note(base)
-- footnotes = iut.combine_footnotes(subii_footnotes, footnotes)
--end
iut.insert_form(base.forms, slot, {form = form, footnotes = footnotes})
end
end
end
-- Do the infinitive first as we need to reference it in subjunctive II footnotes.
process_numbered_param(1)
for paramnum, _ in pairs(numbered_params) do
if paramnum ~= 1 then
process_numbered_param(paramnum)
end
end
add_composed_forms(base)
compute_categories_and_annotation(base, nil, "manual")
return base, args.json
end
-- Entry point for {{de-conj-table}}. Template-callable function to parse and conjugate a verb given
-- manually-specified inflections and generate a displayable table of the conjugated forms.
function export.show_manual(frame)
local parent_args = frame:getParent().args
local base, json = export.do_generate_forms_manual(parent_args)
if json then
return require("Module:JSON").toJSON(base)
end
show_forms(base)
return make_table(base) .. require("Module:utilities").format_categories(base.categories, lang)
end
return export
nkio4f9ce0qknlc5tdjwqqf73eenm4y
5729210
5729199
2026-07-20T03:45:52Z
Octahedron80
267
5729210
Scribunto
text/plain
local export = {}
--[=[
Authorship: Ben Wing <benwing2>
]=]
--[=[
TERMINOLOGY:
-- "slot" = A particular combination of tense/mood/person/number/etc.
Example slot names for verbs are "pres_1s" (present first singular) and
"subc_subii_3p" (subordinate-clause subjunctive II third plural).
Each slot is filled with zero or more forms.
-- "form" = The conjugated German form representing the value of a given slot.
-- "lemma" = The dictionary form of a given German term. For German, always the infinitive.
]=]
--[=[
FIXME:
1. Handle fensterln. (DONE)
2. Handle spie- past tense of speien. (DONE)
3. Make sure rathen, verheirathen work. (DONE)
4. Modify einfix to better handle managen, framen. (DONE)
5. Use variant codes so variant imperatives with and without -e match up in conjoined verbs e.g. [[ausschneiden und einfügen]].
6. In conjoined verbs e.g. [[ausschneiden und einfügen]], don't repeat auxiliaries.
7. Support 'nosplitprefix' meaning that no forms exist where the prefix is split form the main verb, e.g.
[[voreinstellen]]. (DONE)
--]=]
local lang = require("Module:languages").getByCode("de")
local m_string_utilities = require("Module:string utilities")
local m_links = require("Module:links")
local m_table = require("Module:table")
local iut = require("Module:inflection utilities")
local put = require("Module:parse utilities")
local rfind = m_string_utilities.find
local rmatch = m_string_utilities.match
local rsplit = m_string_utilities.split
local lcfirst = m_string_utilities.lcfirst
local function link_term(term, face)
return m_links.full_link({ lang = lang, term = term }, face)
end
local vowel = "aeiouyäëïöüÿáéíóúýàèìòùỳâêîôûŷãẽĩõũỹ"
local vowel_c = "[" .. vowel .. "]"
local not_vowel_c = "[^" .. vowel .. "]"
local function ends_in_dt(stem)
return stem:find("[dt]h?$")
end
local inseparable_prefixes = {
"be", "emp", "ent", "er", "ge", "miss", "miß", "ver", "zer",
-- can also be separable
"durch", "hinter", "über", "um", "unter", "voll", "wider", "wieder",
}
local wuerde = link_term("würde", "term")
local past_subjunctive_single_word_preferred = m_table.listToSet {
"haben", "sein", "können", "müssen", "dürfen", "mögen", "sollen", "wollen", "werden"
}
local past_subjunctive_single_word_preferred_footnote = "[แนะนำให้ใช้, เลี่ยงรูปประกอบ " .. wuerde .. "]"
local past_subjunctive_single_word_often_used = m_table.listToSet {
"bleiben", "brauchen", "bringen", "fallen", "finden", "geben", "gehen", "halten", "heißen", "heissen",
"kommen", "laufen", "lassen", "liegen", "nehmen", "sehen", "stehen", "tun", "thun", "wissen"
}
local past_subjunctive_single_word_often_used_footnote = "[พบได้ทั้งรูปนี้และรูปประกอบ " .. wuerde .. "]"
local past_subjunctive_single_word_rare_footnote = "[พบได้น้อยมากยกเว้นในบริบทที่เป็นทางการมาก, แนะนำให้ใช้รูปประกอบ " .. wuerde .. "]"
local schst_footnote = "[ใช้ได้ในลักษณะเป็นทางการในออสเตรีย, ใช้ในภาษาปากในทุกพื้นที่ที่พูดภาษาเยอรมัน]"
local all_persons_numbers = {
["1s"] = "1|s",
["2s"] = "2|s",
["3s"] = "3|s",
["1p"] = "1|p",
["2p"] = "2|p",
["3p"] = "3|p",
}
local person_number_list = { "1s", "2s", "3s", "1p", "2p", "3p", }
local persnum_to_index = {}
for k, v in pairs(person_number_list) do
persnum_to_index[v] = k
end
local imp_person_number_list = { "2s", "2p", }
local verb_slots_basic = {
{"infinitive", "inf"},
{"infinitive_linked", "inf"},
{"pres_part", "pres|part"},
{"perf_part", "past|part"},
{"zu_infinitive", "zu"}, -- will be handled specially by [[Module:accel/de]]
{"aux", "-"},
}
local verb_slots_subordinate_clause = {
}
local verb_slots_composed = {
}
-- Add entries for a slot with person/number variants.
-- `verb_slots` is the table to add to.
-- `slot_prefix` is the prefix of the slot, typically specifying the tense/aspect.
-- `tag_suffix` is the set of inflection tags to add after the person/number tags,
-- or "-" to use "-" as the inflection tags (which indicates that no accelerator entry
-- should be generated).
local function add_slot_personal(verb_slots, slot_prefix, tag_suffix)
for persnum, persnum_tag in pairs(all_persons_numbers) do
local slot = slot_prefix .. "_" .. persnum
if tag_suffix == "-" then
table.insert(verb_slots, {slot, "-"})
else
table.insert(verb_slots, {slot, persnum_tag .. "|" .. tag_suffix})
end
end
end
add_slot_personal(verb_slots_basic, "pres", "pres")
add_slot_personal(verb_slots_basic, "subi", "sub:I")
add_slot_personal(verb_slots_basic, "pret", "pret")
add_slot_personal(verb_slots_basic, "subii", "sub:II")
table.insert(verb_slots_basic, {"imp_2s", "s|imp"})
table.insert(verb_slots_basic, {"imp_2p", "p|imp"})
add_slot_personal(verb_slots_subordinate_clause, "subc_pres", "dep|pres")
add_slot_personal(verb_slots_subordinate_clause, "subc_subi", "dep|sub:I")
add_slot_personal(verb_slots_subordinate_clause, "subc_pret", "dep|pret")
add_slot_personal(verb_slots_subordinate_clause, "subc_subii", "dep|sub:II")
add_slot_personal(verb_slots_composed, "perf_ind", "-")
add_slot_personal(verb_slots_composed, "perf_sub", "-")
add_slot_personal(verb_slots_composed, "plup_ind", "-")
add_slot_personal(verb_slots_composed, "plup_sub", "-")
table.insert(verb_slots_composed, {"futi_inf", "-"})
add_slot_personal(verb_slots_composed, "futi_subi", "-")
add_slot_personal(verb_slots_composed, "futi_ind", "-")
add_slot_personal(verb_slots_composed, "futi_subii", "-")
table.insert(verb_slots_composed, {"futii_inf", "-"})
add_slot_personal(verb_slots_composed, "futii_subi", "-")
add_slot_personal(verb_slots_composed, "futii_ind", "-")
add_slot_personal(verb_slots_composed, "futii_subii", "-")
local all_verb_slots = {}
for _, slot_and_accel in ipairs(verb_slots_basic) do
table.insert(all_verb_slots, slot_and_accel)
end
for _, slot_and_accel in ipairs(verb_slots_subordinate_clause) do
table.insert(all_verb_slots, slot_and_accel)
end
for _, slot_and_accel in ipairs(verb_slots_composed) do
table.insert(all_verb_slots, slot_and_accel)
end
local pronouns = { "ich", "du", "er", "wir", "ihr", "sie", }
local irreg_verbs = {
["haben"] = {
["pres"] = { "habe", "hast", "hat", "haben", "habt", "haben", },
["pret"] = { "hatte", "hattest", "hatte", "hatten", "hattet", "hatten", },
["subi"] = { "habe", "habest", "habe", "haben", "habet", "haben", },
["subii"] = { "hätte", "hättest", "hätte", "hätten", "hättet", "hätten", },
["imp"] = { {"hab", "habe"}, "habt", },
["presp"] = "habend",
["pp"] = "habt",
},
["sein"] = {
["pres"] = { "bin", "bist", "ist", "sind", "seid", "sind", },
["pret"] = { "war", "warst", "war", "waren", "wart", "waren", },
["subi"] = { "sei", {"seist", "seiest"}, "sei", "seien", "seiet", "seien", },
["subii"] = { "wäre", {"wärst", "wärest"}, "wäre", "wären", {"wärt", "wäret"}, "wären", },
["imp"] = { "sei", "seid", },
["presp"] = "seiend",
["pp"] = "wesen",
},
["tun"] = {
["pres"] = { "tue", "tust", "tut", "tun", "tut", "tun", },
["pret"] = { "tat", {"tatest", "tatst"}, "tat", "taten", "tatet", "taten", },
["subi"] = { "tue", "tuest", "tue", "tuen", "tuet", "tuen", },
["subii"] = { "täte", "tätest", "täte", "täten", "tätet", "täten", },
["imp"] = { {"tu", "tue"}, "tut", },
["presp"] = "tuend",
["pp"] = "tan",
},
-- FIXME, maybe we should construct this automatically from "tun".
["thun"] = {
["pres"] = { "thue", "thust", "thut", "thun", "thut", "thun", },
["pret"] = { "that", {"thatest", "thatst"}, "that", "thaten", "thatet", "thaten", },
["subi"] = { "thue", "thuest", "thue", "thuen", "thuet", "thuen", },
["subii"] = { "thäte", "thätest", "thäte", "thäten", "thätet", "thäten", },
["imp"] = { {"thu", "thue"}, "thut", },
["presp"] = "thuend",
["pp"] = "than",
},
["werden"] = {
["pres"] = { "werde", "wirst", "wird", "werden", "werdet", "werden", },
["pret"] = {
{"wurde", {form = "ward", footnotes = {"[โบราณ]"}}},
{"wurdest", {form = "wardst", footnotes = {"[โบราณ]"}}},
{"wurde", {form = "ward", footnotes = {"[โบราณ]"}}},
"wurden",
"wurdet",
"wurden",
},
["subi"] = { "werde", "werdest", "werde", "werden", "werdet", "werden", },
["subii"] = { "würde", "würdest", "würde", "würden", "würdet", "würden", },
["imp"] = { {"werd", "werde"}, "werdet", },
["presp"] = "werdend",
["pp"] = "worden",
},
}
local reflexive_possessive_forms = {
["sein"] = {"mein", "dein", "sein", "unser", "euer", "ihr"},
["seine"] = {"meine", "deine", "seine", "unsere", "eure", "ihre"},
["seinen"] = {"meinen", "deinen", "seinen", "unseren", "euren", "ihren"},
["seinem"] = {"meinem", "deinem", "seinem", "unserem", "eurem", "ihrem"},
["seiner"] = {"meiner", "deiner", "seiner", "unserer", "eurer", "ihrer"},
["seines"] = {"meines", "deines", "seines", "unseses", "eures", "ihres"},
}
local reflexive_case_forms = {
["accpron"] = {"mich", "dich", "sich", "uns", "euch", "sich"},
["datpron"] = {"mir", "dir", "sich", "uns", "euch", "sich"},
}
local function skip_slot(base, slot)
if not slot:find("[123]") then
-- Don't skip non-personal slots.
return false
end
if base.nofinite then
return true
end
if base.nosplitprefix then
-- Verbs that don't allow split prefixes, e.g. [[voreinstellen]], don't have forms where the prefix is
-- split from the main verb, including the present, preterite, subjunctive I and II and imperative (but
-- not the subordinate clause equivalents).
return slot:find("^pre[st]") or slot:find("^subi") or slot:find("^imp_")
end
if base.only3s and not slot:find("3s") or
base.only3sp and not slot:find("3[sp]") then
return true
end
return false
end
local function strip_spaces(text)
return text:gsub("^%s*(.-)%s*", "%1")
end
local function escape_sein_sich_indicators(arg1)
if not arg1:find("pron>") then
return arg1
end
local segments = put.parse_balanced_segment_run(arg1, "<", ">")
-- Loop over every other segment. The even-numbered segments are angle-bracket specs while
-- the odd-numbered segments are the text between them.
for i = 2, #segments - 1, 2 do
if segments[i] == "<accpron>" then
segments[i] = "⦃⦃accpron⦄⦄"
elseif segments[i] == "<datpron>" then
segments[i] = "⦃⦃datpron⦄⦄"
elseif segments[i] == "<pron>" then
segments[i] = "⦃⦃pron⦄⦄"
end
end
return table.concat(segments)
end
local function undo_escape_form(form)
-- assign to var to throw away second value
local newform = form:gsub("⦃⦃", "<"):gsub("⦄⦄", ">")
return newform
end
local function remove_sein_sich_indicators(form)
-- assign to var to throw away second value
local newform = form:gsub("⦃⦃.-⦄⦄", "")
return newform
end
local function replace_sein_sich_indicators(slot, form)
if not form:find("⦃") then
return form
end
local persnum = slot:match("^.*_([123][sp])$")
local index
if persnum then
index = persnum_to_index[persnum]
else
index = 3
end
form = form:gsub("sich(%]*)⦃⦃accpron⦄⦄", function(brackets)
return reflexive_case_forms.accpron[index] .. brackets
end)
form = form:gsub("sich(%]*)⦃⦃datpron⦄⦄", function(brackets)
return reflexive_case_forms.datpron[index] .. brackets
end)
form = form:gsub("(seine?[mnrs]?)(%]*)⦃⦃pron⦄⦄", function(sein_form, brackets)
if reflexive_possessive_forms[sein_form] then
return reflexive_possessive_forms[sein_form][index] .. brackets
else
error("Unrecognized sein-form '" .. sein_form .. "' in slot " .. slot .. ": " .. undo_escape_form(form))
end
end)
form = form:gsub("sein%]%]e?[mnrs]?⦃⦃pron⦄⦄", function(sein_ending)
local sein_form = "sein" .. sein_ending
if reflexive_possessive_forms[sein_form] then
return reflexive_possessive_forms["sein"][index] .. "|" .. reflexive_possessive_forms[sein_form][index] .. "]]"
else
error("Unrecognized sein-form '" .. sein_form .. "' in slot " .. slot .. ": " .. undo_escape_form(form))
end
end)
if form:find("⦃⦃") or form:find("⦄⦄") then
error("Unrecognized pronoun substitution in slot " .. slot .. ": " .. undo_escape_form(form))
end
return form
end
local function combine_stem_ending(slot, stem, ending)
local ending_with_pound = ending .. "#"
if ending_with_pound:find("^st[ #]") then
if rfind(stem, "[sxzß]$") then
ending = ending:gsub("^s", "")
elseif stem:find("st$") then
-- bersten
ending = ending:gsub("^st", "")
end
elseif ending_with_pound:find("^t[ #]") and stem:find("th?$") then
ending = ending:gsub("^t", "")
end
return replace_sein_sich_indicators(slot, stem .. ending)
end
local function add(base, slot, stems, endings, footnotes)
if skip_slot(base, slot) then
return
end
local function do_combine_stem_ending(stem, ending)
return combine_stem_ending(slot, stem, ending)
end
iut.add_forms(base.forms, slot, stems, endings, do_combine_stem_ending, nil, nil,
iut.combine_footnotes(footnotes, base.all_footnotes))
end
local function add_multi(base, slot, stems_and_endings, footnotes)
if skip_slot(base, slot) then
return
end
local function do_combine_stem_ending(stem, ending)
return combine_stem_ending(slot, stem, ending)
end
iut.add_multiple_forms(base.forms, slot, stems_and_endings, do_combine_stem_ending, nil, nil,
iut.combine_footnotes(footnotes, base.all_footnotes))
end
local function add3(base, slot, stems1, stems2, endings, footnotes)
return add_multi(base, slot, {stems1, stems2, endings}, footnotes)
end
local function add4(base, slot, stems1, stems2, stems3, endings, footnotes)
return add_multi(base, slot, {stems1, stems2, stems3, endings}, footnotes)
end
local function add5(base, slot, stems1, stems2, stems3, stems4, endings, footnotes)
return add_multi(base, slot, {stems1, stems2, stems3, stems4, endings}, footnotes)
end
local function get_subii_note(base)
if base.from_headword then
-- don't include autogenerated note if from_headword, so it doesn't end up in the headword qualifiers
return nil
end
if past_subjunctive_single_word_preferred[base.base_verb] then
return {past_subjunctive_single_word_preferred_footnote}
elseif past_subjunctive_single_word_often_used[base.base_verb] then
return {past_subjunctive_single_word_often_used_footnote}
end
return {past_subjunctive_single_word_rare_footnote}
end
local function add_zu_infinitive(base)
if base.any_pre_pref then
local zu
if base.pre_pref == "" or base.pre_pref:find(" $") then
zu = "zu "
else
zu = "zu"
end
add(base, "zu_infinitive", base.pre_pref .. zu, base.bare_infinitive)
end
end
local function add_present(base, pretpres)
local stems = base.infstem
local stems23 = base.pres_23 or stems
local function doadd(slot_pref, form_pref)
-- Do forms based off the infinitive stem.
for _, stemform in ipairs(stems) do
local prefixed_stem = form_pref .. stemform.form
local syncopated_stem = base.unstressed_el_er and prefixed_stem:gsub("e([lr])$", "%1")
local function addit(slot, stem, ending, footnotes)
add(base, slot_pref .. slot, stem, ending .. (slot_pref == "" and base.post_pref or ""),
iut.combine_footnotes(footnotes, stemform.footnotes))
end
-- first singular present indicative
if not pretpres then -- pres_1s for preterite-present verbs used pres23 stem
if base.unstressed_el_er then
addit("pres_1s", syncopated_stem, "e")
addit("pres_1s", prefixed_stem, "e")
addit("pres_1s", prefixed_stem, "")
else
addit("pres_1s", prefixed_stem, "e")
end
end
-- plural present indicative
local e_in_2p = ends_in_dt(prefixed_stem) or base.unstressed_e_infix
if e_in_2p then
addit("pres_2p", prefixed_stem, "et")
else
addit("pres_2p", prefixed_stem, "t")
end
if base.unstressed_el_er or base.unstressed_erl then
addit("pres_1p", prefixed_stem, "n")
addit("pres_3p", prefixed_stem, "n")
else
addit("pres_1p", prefixed_stem, "en")
addit("pres_3p", prefixed_stem, "en")
end
-- subjunctive I
addit("subi_1s", prefixed_stem, "e")
addit("subi_2s", prefixed_stem, "est")
addit("subi_3s", prefixed_stem, "e")
addit("subi_2p", prefixed_stem, "et")
if base.unstressed_el_er then
addit("subi_1s", syncopated_stem, "e")
addit("subi_2s", syncopated_stem, "est")
addit("subi_3s", syncopated_stem, "e")
addit("subi_2p", syncopated_stem, "et")
end
if base.unstressed_el_er then
addit("subi_1p", prefixed_stem, "n")
addit("subi_3p", prefixed_stem, "n")
else
addit("subi_1p", prefixed_stem, "en")
addit("subi_3p", prefixed_stem, "en")
end
-- imperative plural; most preterite-present verbs don't have it, and [[wissen]] is handled below
if slot_pref == "" and not pretpres then
if e_in_2p then
addit("imp_2p", prefixed_stem, "et")
else
addit("imp_2p", prefixed_stem, "t")
end
end
end
-- Do forms based off of pres23 stem (also includes pres_1sg in preterite-present verbs).
for _, stem23form in ipairs(stems23) do
local prefixed_stem23 = form_pref .. stem23form.form
local function addit(slot, stem, ending, footnotes)
add(base, slot_pref .. slot, stem, ending .. (slot_pref == "" and base.post_pref or ""),
iut.combine_footnotes(footnotes, stem23form.footnotes))
end
if pretpres then
-- Totally different code for preterite-present singular and imperative.
addit("pres_1s", prefixed_stem23, "")
addit("pres_2s", prefixed_stem23, "st")
addit("pres_3s", prefixed_stem23, "")
if slot_pref == "" and base.base_verb == "wissen" then
-- Only [[wissen]] among the preterite-present verbs has an imperative.
addit("imp_2s", "wiss", "e")
-- dewikt mentions 'wisset' as an alternative, but not in Duden
addit("imp_2p", "wiss", "t")
end
else
-- Normal code path.
local stem23_is_same_as_stem
for _, stemform in ipairs(stems) do
if stemform.form == stem23form.form then
stem23_is_same_as_stem = true
break
end
end
-- present 2/3 singular
local e_in_23s = base.unstressed_e_infix or stem23_is_same_as_stem and ends_in_dt(prefixed_stem23)
if e_in_23s then
addit("pres_2s", prefixed_stem23, "est")
addit("pres_3s", prefixed_stem23, "et")
else
addit("pres_2s", prefixed_stem23, "st")
if prefixed_stem23:find("sch$") then
addit("pres_2s", prefixed_stem23, "t",
not base.from_headword and {schst_footnote} or nil)
end
addit("pres_3s", prefixed_stem23, "t")
end
-- imperative singular; this may or may not be based off the pres23 stem
-- Specifically, if the pres23 stem is different from the infinitive stem and does not have an ä or ö
-- in it ([[fahren]], er [[fährt]] but imperative [[fahr]]/[[fahre]]; [[stoßen]], er [[stößt]] but
-- imperative [[stoß]]/[[stoße]]), use it. Don't add -e unless '.longimp' is given (for [[sehen]], with
-- imperatives [[sieh]] and [[siehe]]; but normally [[geben]] with imperative only [[gib]], similarly
-- for [[treten]], [[gelten]], [[bergen]], [[etc.]]). In all other cases, use the infinitive stem, and
-- under normal circumstances include two variants, without -e and with -e. We include only the variant
-- with -e if '.e' is given ([[atmen]], [[zeichnen]], etc.), and we include only the variant without -e
-- if '.shortimp' is given (unclear if this is needed for any verb).
if slot_pref == "" then
if not rfind(prefixed_stem23, "[äö]") and not stem23_is_same_as_stem then
addit("imp_2s", prefixed_stem23, "")
if base.longimp then
addit("imp_2s", prefixed_stem23, "e")
end
else
assert(form_pref == "")
for _, stemform in ipairs(stems) do
local function addimp(stem, ending)
add(base, "imp_2s", stem, ending .. base.post_pref, stemform.footnotes)
end
local stem = stemform.form
if base.unstressed_el_er then
local syncopated_stem = stem:gsub("e([lr])$", "%1")
addimp(syncopated_stem, "e")
end
if base.unstressed_e_infix then
addimp(stem, "e")
elseif base.shortimp then
addimp(stem, "")
else
addimp(stem, "")
addimp(stem, "e")
end
end
end
end
end
end
end
-- Do the basic forms
doadd("", "")
-- Also do the subordinate clause forms if any alternants have a prefix.
if base.any_pre_pref then
doadd("subc_", base.pre_pref)
end
-- Do the miscellaneous non-finite forms
add3(base, "pres_part", base.pre_pref, base.bare_infinitive, "d")
add_zu_infinitive(base)
end
-- Add the past forms and/or subjunctive II forms. `is_past` should be true if we're conjugating the past tense
-- (not the past subjunctive), in which case the stems in `stem` should be the actual 1s/3s forms, ending in -te
-- or -de if weak. If `is_past` is false, we're conjugating the past subjunctive. In that case, the stems passed
-- in should include -e if that needs to be preserved in all forms (specifically, for [[spie]] past of [[speien]];
-- syncopated #'spist' is not allowed). (In practice, we chop off the final -e of explicitly user-specified past
-- subjunctive forms and otherwise pass in the actual past tense. This means that user-specified past subjunctives
-- in -te (e.g. [[brächte]]) will be passed in as 'brächt' but past subjunctives defaulted from the past tense
-- will be passed in e.g. as 'lachte'. This works because for stems in -t and -d, the result is the same.)
local function add_past_or_subii(base, slot_pref, stems, is_past)
local function doadd(full_slot_pref, form_pref)
for _, stemform in ipairs(stems) do
local prefixed_stem = form_pref .. stemform.form
local ends_in_e = prefixed_stem:find("e$")
-- Normally, the weak past tense ends in -te and the strong past does not end in -e. An exception is
-- [[spie]] (past tense of [[speien]]), which will be treated as weak (superseded spellings like
-- 'spieen' will not be generated).
local is_strong = is_past and not ends_in_e
prefixed_stem = prefixed_stem:gsub("e$", "")
local stem_ends_in_dt = ends_in_dt(prefixed_stem)
local function addit(slot, ending, footnotes)
local subii_footnotes
if full_slot_pref:find("subii") then
subii_footnotes = get_subii_note(base)
end
add(base, full_slot_pref .. slot, prefixed_stem, ending .. (full_slot_pref == slot_pref and base.post_pref or ""),
iut.combine_footnotes(subii_footnotes, iut.combine_footnotes(footnotes, stemform.footnotes)))
end
if is_strong then
addit("1s", "")
addit("3s", "")
if not stem_ends_in_dt then
if rfind(prefixed_stem, "[sxzß]$") then
addit("2s", "est")
end
addit("2s", "st")
addit("2p", "t")
else
-- bitten -> batest or batst, similarly for laden, raten, etc.
addit("2s", "est")
if not prefixed_stem:find("st$") then
-- bersten
addit("2s", "st")
end
addit("2p", "et")
end
else
-- Weak past and past subjunctive have same endings when ending in -d or -t (always the case for weak past).
addit("1s", "e")
addit("3s", "e")
if not stem_ends_in_dt and not ends_in_e then
addit("2s", "est") -- more formal; FIXME: should we footnote this?
addit("2p", "et") -- more formal; FIXME: should we footnote this?
addit("2s", "st")
addit("2p", "t")
else
addit("2s", "est")
addit("2p", "et")
end
end
-- Both pasts, as well as past subjunctive, have same endings in 1p and 3p.
addit("1p", "en")
addit("3p", "en")
end
end
-- Do the basic forms
doadd(slot_pref, "")
-- Also do the subordinate clause forms if any alternants have a prefix.
if base.any_pre_pref then
doadd("subc_" .. slot_pref, base.pre_pref)
end
end
local conjs = {}
conjs["normal"] = function(base)
add_present(base)
add_past_or_subii(base, "pret_", base.past, "past")
add_past_or_subii(base, "subii_", base.past_sub or base.past)
end
conjs["pretpres"] = function(base)
add_present(base, "pretpres")
add_past_or_subii(base, "pret_", base.past, "past")
add_past_or_subii(base, "subii_", base.past_sub or base.past)
end
conjs["irreg"] = function(base)
local function doadd(slot_pref)
local function addit(slot, forms, footnotes)
if slot_pref == "" then
add3(base, slot, base.insep_prefix, forms, base.post_pref, footnotes)
else
add(base, slot_pref .. slot, base.pre_pref .. base.insep_prefix, forms, footnotes)
end
end
-- Do present, preterite, subjunctive I and II.
for _, slot_tense in ipairs({"pres", "pret", "subi", "subii"}) do
for index, forms in ipairs(base.irregverbobj[slot_tense]) do
local persnum = person_number_list[index]
local footnotes
if slot_tense == "subii" then
footnotes = get_subii_note(base)
end
addit(slot_tense .. "_" .. persnum, forms, footnotes)
end
end
-- Do imperative.
if slot_pref == "" then
for index, forms in ipairs(base.irregverbobj["imp"]) do
local persnum = imp_person_number_list[index]
addit("imp_" .. persnum, forms)
end
end
end
-- Do the basic forms
doadd("")
-- Also do the subordinate clause forms if any alternants have a prefix.
if base.any_pre_pref then
doadd("subc_")
end
-- Do the miscellaneous non-finite forms
iut.add_multiple_forms(base, "pp", {base.ge_prefix, base.insep_prefix, base.irregverbobj["pp"]},
-- We don't want to use combine_stem_ending because we want sein-sich indicators to be left alone,
-- so they get replaced later when constructing composed forms.
function(stem, ending) return stem .. ending end)
add(base, "perf_part", base.pre_pref, base.pp)
-- only [[werden]] by itself; not [[loswerden]], [[fertigwerden]], etc.
if base.lemma == "werden" then
iut.insert_form(base.forms, "perf_part", {form = "worden", footnotes = {"[เมื่อเป็นคำกริยาช่วย]"}})
end
add(base, "pres_part", base.pre_pref .. base.insep_prefix, base.irregverbobj["presp"])
add_zu_infinitive(base)
end
local function add_composed_forms(base)
local function add_composed(tense_mood, index, persnum, auxforms, participle, suffix, footnotes)
local pers_auxforms = iut.convert_to_general_list_form(auxforms[index])
local linked_pers_auxforms = iut.map_forms(pers_auxforms, function(form) return "[[" .. form .. "]] " end)
add4(base, tense_mood .. "_" .. persnum, linked_pers_auxforms, "[[" .. base.pre_pref, participle, "]]" .. suffix, footnotes)
end
local function add_composed_perf(tense_mood, index, persnum, haben_auxforms, sein_auxforms, haben_suffix, sein_suffix)
for _, auxform in ipairs(base.aux) do
if auxform.form == "haben" then
add_composed(tense_mood, index, persnum, haben_auxforms, base.pp, haben_suffix, auxform.footnotes)
end
if auxform.form == "sein" then
add_composed(tense_mood, index, persnum, sein_auxforms, base.pp, sein_suffix, auxform.footnotes)
end
end
end
local haben_forms = irreg_verbs["haben"]
local sein_forms = irreg_verbs["sein"]
local werden_forms = irreg_verbs["werden"]
for index, persnum in ipairs(person_number_list) do
add_composed_perf("perf_ind", index, persnum, haben_forms["pres"], sein_forms["pres"], "", "")
add_composed_perf("perf_sub", index, persnum, haben_forms["subi"], sein_forms["subi"], "", "")
add_composed_perf("plup_ind", index, persnum, haben_forms["pret"], sein_forms["pret"], "", "")
add_composed_perf("plup_sub", index, persnum, haben_forms["subii"], sein_forms["subii"], "", "")
for _, mood in ipairs({"ind", "subi", "subii"}) do
local tense = mood == "ind" and "pres" or mood
add_composed("futi_" .. mood, index, persnum, werden_forms[tense], base.bare_infinitive, "")
add_composed_perf("futii_" .. mood, index, persnum, werden_forms[tense], werden_forms[tense], " [[haben]]", " [[sein]]")
end
end
add3(base, "futi_inf", "[[" .. base.pre_pref, base.bare_infinitive, "]] [[werden]]")
add5(base, "futii_inf", "[[" .. base.pre_pref, base.pp, "]] [[", base.aux, "]] [[werden]]")
end
local function handle_derived_slots(base)
-- Compute linked versions of potential lemma slots, for use in {{de-verb}}.
-- We substitute the original lemma (before removing links) for forms that
-- are the same as the lemma, if the original lemma has links.
for _, slot in ipairs({"infinitive"}) do
iut.insert_forms(base.forms, slot .. "_linked", iut.map_forms(base.forms[slot], function(form)
if form == base.lemma and rfind(base.linked_lemma, "%[%[") then
return base.linked_lemma
else
return form
end
end))
end
end
local function conjugate_verb(base)
if not conjs[base.conj] then
error("Internal error: Unrecognized conjugation type '" .. base.conj .. "'")
end
conjs[base.conj](base)
add_composed_forms(base)
-- No overrides implemented currently.
-- process_slot_overrides(base)
handle_derived_slots(base)
end
local function parse_indicator_spec(angle_bracket_spec)
local base = {}
local function parse_err(msg)
error(msg .. ": " .. angle_bracket_spec)
end
local function fetch_footnotes(separated_group)
local footnotes
for j = 2, #separated_group - 1, 2 do
if separated_group[j + 1] ~= "" then
parse_err("Extraneous text after bracketed footnotes: '" .. table.concat(separated_group) .. "'")
end
if not footnotes then
footnotes = {}
end
table.insert(footnotes, separated_group[j])
end
return footnotes
end
local function fetch_specs(comma_separated_group, transform_form)
if not comma_separated_group then
return {{}}
end
local specs = {}
local colon_separated_groups = put.split_alternating_runs(comma_separated_group, ":")
for _, colon_separated_group in ipairs(colon_separated_groups) do
local form = colon_separated_group[1]
if transform_form then
form = transform_form(form)
end
table.insert(specs, {form = form, footnotes = fetch_footnotes(colon_separated_group)})
end
return specs
end
local inside = angle_bracket_spec:match("^<(.*)>$")
assert(inside)
if inside == "" then
return base
end
local segments = put.parse_balanced_segment_run(inside, "[", "]")
local dot_separated_groups = put.split_alternating_runs(segments, "%.")
for i, dot_separated_group in ipairs(dot_separated_groups) do
local comma_separated_groups = put.split_alternating_runs(dot_separated_group, "%s*[,#]%s*", "preserve splitchar")
local first_element = comma_separated_groups[1][1]
if first_element == "haben" or first_element == "sein" then
for j = 1, #comma_separated_groups, 2 do
if j > 1 and strip_spaces(comma_separated_groups[j - 1][1]) ~= "," then
parse_err("Separator of # not allowed with haben or sein")
end
local aux = comma_separated_groups[j][1]
if aux ~= "haben" and aux ~= "sein" then
parse_err("Unrecognized auxiliary '" .. aux .. "'")
end
if base.aux then
for _, existing_aux in ipairs(base.aux) do
if existing_aux.form == aux then
parse_err("Auxiliary '" .. aux .. "' specified twice")
end
end
else
base.aux = {}
end
table.insert(base.aux, {form = aux, footnotes = fetch_footnotes(comma_separated_groups[j])})
end
elseif first_element == "-ge" or first_element == "+ge" then
for j = 1, #comma_separated_groups, 2 do
if j > 1 and strip_spaces(comma_separated_groups[j - 1][1]) ~= "," then
parse_err("Separator of # not allowed with +ge or -ge")
end
local prefix = comma_separated_groups[j][1]
if prefix ~= "+ge" and prefix ~= "-ge" then
parse_err("Unrecognized ge- prefix '" .. prefix .. "'")
end
local ge_prefix
if prefix == "+ge" then
ge_prefix = "ge"
else
ge_prefix = ""
end
if base.ge_prefix then
for _, existing_prefix in ipairs(base.ge_prefix) do
if existing_prefix.form == ge_prefix then
parse_err("Ge- prefix '" .. prefix .. "' specified twice")
end
end
else
base.ge_prefix = {}
end
table.insert(base.ge_prefix, {form = ge_prefix, footnotes = fetch_footnotes(comma_separated_groups[j])})
end
elseif #comma_separated_groups > 1 then
-- principal parts specified
if base.past then
parse_err("Can't specify principal parts twice")
end
assert(#comma_separated_groups[2] == 1)
local past_index
local first_separator = strip_spaces(comma_separated_groups[2][1])
if first_separator == "#" then
-- present 3rd singular specified
base.pres_23 = fetch_specs(comma_separated_groups[1], function(form)
local stem
if base.conj == "pretpres" then
stem = form
else
stem = form:match("^(.-)%-$")
if not stem then
stem = form:match("^(.-)e?t$")
end
end
if stem then
return stem
else
parse_err("Present 3sg form '" .. form .. "' should end in - (for the stem) or -t")
end
end)
past_index = 3
else
past_index = 1
end
base.past = fetch_specs(comma_separated_groups[past_index], function(form)
return form
end)
if #comma_separated_groups < past_index + 2 then
parse_err("Missing past participle spec")
end
assert(#comma_separated_groups[past_index + 1] == 1)
if strip_spaces(comma_separated_groups[past_index + 1][1]) ~= "," then
parse_err("Only first separator can be a #")
end
base.pp = fetch_specs(comma_separated_groups[past_index + 2], function(form)
if form:find("e[nd]$") or form:find("t$") then
return form
else
parse_err("Past participle '" .. form .. "' should end in -en, -t, or -ed")
end
end)
if #comma_separated_groups > past_index + 2 then
assert(#comma_separated_groups[past_index + 3] == 1)
if strip_spaces(comma_separated_groups[past_index + 3][1]) ~= "," then
parse_err("Only first separator can be a #")
end
base.past_sub = fetch_specs(comma_separated_groups[past_index + 4], function(form)
local stem = form:match("^(.-)e$")
if not stem then
parse_err("Past subjunctive '" .. form .. "' should end in -e")
end
return stem
end)
if #comma_separated_groups > past_index + 4 then
parse_err("Too many specs given")
end
end
elseif first_element == "pretpres" or first_element == "irreg" then
if #comma_separated_groups[1] > 1 then
parse_err("No footnotes allowed with '" .. first_element .. "' spec")
end
if base.conj then
parse_err("Conjugation specified as '" .. first_element .. "' but already specified or autodetermined as '" .. base.conj .. "'")
end
base.conj = first_element
elseif first_element == "einfix" or first_element == "-einfix" then
if #comma_separated_groups[1] > 1 then
parse_err("No footnotes allowed with '" .. first_element .. "' spec")
end
base.unstressed_e_infix = first_element == "einfix"
elseif first_element == "shortimp" or first_element == "longimp" or
first_element == "only3s" or first_element == "only3sp" or
first_element == "nofinite" or first_element == "nosplitprefix" then
if #comma_separated_groups[1] > 1 then
parse_err("No footnotes allowed with '" .. first_element .. "' spec")
end
base[first_element] = true
elseif first_element == "" or first_element == "inf" then
local footnotes = fetch_footnotes(comma_separated_groups[1])
if not footnotes then
parse_err("Empty spec and 'inf' spec without footnotes not allowed")
end
if first_element == "inf" then
base.infstem_footnotes = footnotes
else
base.all_footnotes = footnotes
end
else
parse_err("Unrecognized spec '" .. comma_separated_groups[1][1] .. "'")
end
end
return base
end
-- Normalize all lemmas, splitting off separable prefixes and substituting the pagename for blank lemmas.
local function normalize_all_lemmas(alternant_multiword_spec, from_headword, pagename)
local any_pre_pref
iut.map_word_specs(alternant_multiword_spec, function(base)
if base.lemma == "" then
base.lemma = pagename
end
if base.lemma:find("_") and not base.lemma:find("%[%[") then
-- If lemma is multiword and has no links, add links automatically.
base.lemma= "[[" .. base.lemma:gsub("_", "]]_[[") .. "]]"
end
base.orig_lemma = base.lemma
base.orig_lemma_no_links = m_links.remove_links(base.lemma)
-- Normalize the linked lemma by removing dot, underscore, and <pron> and such indicators.
base.linked_lemma = remove_sein_sich_indicators(base.lemma:gsub("%.", ""):gsub("_", " "))
base.lemma = m_links.remove_links(base.linked_lemma)
local lemma = base.orig_lemma_no_links
base.pre_pref, base.post_pref = "", ""
local prefix, verb = lemma:match("^(.*)_(.-)$")
if prefix then
prefix = prefix:gsub("_", " ") -- in case of multiple preceding words
base.pre_pref = base.pre_pref .. prefix .. " "
base.post_pref = base.post_pref .. " " .. prefix
else
verb = lemma
end
prefix, base.base_verb = verb:match("^(.*)%.(.-)$")
if prefix then
-- Lowercase the separable prefixes (but not postfixes) to allow for specified infinitive `Rad.fahren`,
-- which becomes actual infinitive [[radfahren]] but 'ich fahre Rad' etc.
local prefix_parts = rsplit(prefix, "%.")
for i, prefix_part in ipairs(prefix_parts) do
prefix_parts[i] = lcfirst(prefix_part)
end
-- There may be multiple separable prefixes (e.g. [[wiedergutmachen]], ich mache wieder gut)
base.pre_pref = base.pre_pref .. table.concat(prefix_parts)
base.post_pref = base.post_pref .. " " .. prefix:gsub("%.", " ")
else
base.base_verb = verb
end
if base.pre_pref ~= "" then
any_pre_pref = true
end
if base.only3s then
alternant_multiword_spec.only3s = true
end
if base.only3sp then
alternant_multiword_spec.only3sp = true
end
-- Remove <pron> indicators and such.
local reconstructed_lemma = remove_sein_sich_indicators(base.pre_pref .. base.base_verb)
base.lemma = reconstructed_lemma
base.from_headword = from_headword
end)
if any_pre_pref then
iut.map_word_specs(alternant_multiword_spec, function(base)
base.any_pre_pref = true
end)
end
if alternant_multiword_spec.only3s then
iut.map_word_specs(alternant_multiword_spec, function(base)
if not base.only3s then
error("If some alternants specify 'only3s', all must")
end
end)
end
if alternant_multiword_spec.only3sp then
iut.map_word_specs(alternant_multiword_spec, function(base)
if not base.only3sp then
error("If some alternants specify 'only3sp', all must")
end
end)
end
end
local function detect_verb_type(base, verb_types)
local this_verb_types = {}
local function set_verb_type()
base.verb_types = this_verb_types
if verb_types then
for _, verb_type in ipairs(this_verb_types) do
m_table.insertIfNot(verb_types, verb_type)
end
end
end
if base.conj == "pretpres" then
m_table.insertIfNot(this_verb_types, "pretpres")
set_verb_type()
return
elseif base.conj == "irreg" then
m_table.insertIfNot(this_verb_types, "irreg")
set_verb_type()
return
end
local infstem = m_table.deepCopy(base.infstem)
local past = m_table.deepCopy(base.past)
local pp = m_table.deepCopy(base.pp)
local function matches_forms(forms, expected, ending_to_chop)
expected = expected:gsub("C", not_vowel_c) .. "$"
local seen = false
for _, form in ipairs(forms) do
local stem
if ending_to_chop then
stem = rmatch(form.form, "^(.*)" .. ending_to_chop .. "$")
else
stem = form.form
end
if stem and rfind("#" .. stem, expected) then
seen = true
form.seen = form.seen or "maybe"
end
end
return seen
end
local function reset_maybes(forms, value)
for _, form in ipairs(forms) do
if form.seen == "maybe" then
form.seen = value
end
end
end
local function reset_all_maybes(value)
reset_maybes(infstem, value)
reset_maybes(past, value)
reset_maybes(pp, value)
end
local function has_unseen_weak_pp()
for _, form in ipairs(pp) do
if not form.seen and form.form:find("[dt]$") then
return true
end
end
return false
end
local function has_unseen_strong_pp()
for _, form in ipairs(pp) do
if not form.seen and form.form:find("n$") then
return true
end
end
return false
end
local function check(verbtype, infre, pastre, ppre, exclude)
if exclude then
for _, form in ipairs(infstem) do
if exclude(form.form) then
return
end
end
end
if matches_forms(infstem, infre) and
matches_forms(past, pastre) and
matches_forms(pp, ppre, "en") then
m_table.insertIfNot(this_verb_types, verbtype)
reset_all_maybes(true)
else
reset_all_maybes(false)
end
end
local function check_strong()
check("1", "Ce[iy]C*", "CieC*", "Cie?C*") -- beigen, bleiben, gedeihen, leihen, meiden, preisen, reiben, reihen,
-- scheiden, scheinen, schreiben, schreien, schweigen, speiben, speien, speisen, steigen, treiben, weisen,
-- zeihen; use 'Cie?C*' for past participle to handle 'schrien', 'spien'
check("1", "Ce[iy]C*", "CiC*", "CiC*") -- beißen/beissen/beyßen/beyssen, bleichen, fleißen/fleissen, gleichen,
-- gleiten, greifen, kneifen, kreischen, leiden, pfeifen, reißen/reissen, reiten, scheißen/scheissen,
-- schleichen, schleifen, schleißen/schleissen, schmeißen/schmeissen, schneiden/schneyden, schreiten,
-- spleißen/spleissen, streichen, streiten, weichen
check("2", "CieC*", "CoC*", "CoC*") -- biegen, bieten, fliegen, fliehen, fließen/fliessen, frieren,
-- genießen/geniessen, gießen/giessen, kiesen, kriechen, riechen, schieben, schießen/schiessen, schliefen,
-- schließen/schliessen, sieden, sprießen/spriessen, stieben, triefen, verdrießen/verdriessen, verlieren,
-- wiegen, ziehen
check("2", "CauC*", "CoC*", "CoC*") -- krauchen, saufen, saugen
check("2", "CüC", "CoC", "CoC") -- lügen, trügen
local function exclude_nehmen_sprechen(form)
-- need to exclude nehmen, stehlen, befehlen/empfehlen, sprechen, brechen, stechen
return rfind(form, vowel_c .. "ch$") or rfind(form, vowel_c .. "h" .. not_vowel_c .. "$")
end
check("3", "C[ei]CC+", "CaCC+", "C[ou]CC+", exclude_nehmen_sprechen) -- [with e, + o in pp]: bergen, bersten,
-- gelten, helfen, schelten, sterben, verderben, werben, werfen; [with i, + u in pp]: binden, brinnen, dringen,
-- finden, gelingen, klingen, misslingen, ringen, schlingen, schwinden, schwingen, singen, sinken, springen,
-- stinken, trinken, winden, wringen, zwingen; [with i, + o in pp]: rinnen, gewinnen, schwimmen, sinnen,
-- spinnen
check("3", "C[eiaö]CC+", "CoCC+", "CoCC+", exclude_nehmen_sprechen)
-- [with e]: dreschen, fechten, flechten, melken, quellen, schmelzen, schwellen; [with i]: glimmen, klimmen;
-- [with a]: schallen (geschallt), erschallen; [with ö]: erlöschen
check("3", "quell", "quoll", "quoll") -- need to special-case quellen due to u preceding e
check("3", "schind", "schund", "schund") -- need to special-case due to 'u' in past
check("4", "C[eäo]C*", "Cah?Ch?", "CoC*") -- [with e]: befehlen, brechen, schrecken, nehmen, sprechen, stechen,
-- stecken (gesteckt), stehlen, treffen; [with ä]: gebären; [with o]: kommen
check("4", "C[äe]C", "Coh?C", "Coh?C", function(form) return form:find("heb$") end)
-- [with ä]: gären, wägen, schwären; [with e]: bewegen, weben, scheren (but not heben)
check("5", "C[ei]C*", "CaC", "CeC*") -- [with e, one C]: geben, genesen, geschehen, lesen, meßen, sehen, treten;
-- [with e, two C]: essen, fressen, messen, vergessen; [with i, two C]: bitten, sitzen
check("5", "C[ei]C*", "Cass", "Cess") -- essen, fressen, messen, sitzen in Swiss spelling
check("5", "CieC", "CaC", "CeC") -- liegen
check("6", "CaC*", "CuC*", "CaC*") -- backen, fragen (gefragt), graben, laden, mahlen, schaffen, schlagen,
-- tragen, wachsen, waschen
check("6", "heb", "h[ou]b", "hob") -- we need to special-case this because heben (class 6 per Wikipedia) has the
-- exact same vowels as weben (class 4 per Wikipedia)
check("6", "schwör", "schw[ou]r", "schwor") -- only strong verb with these vowels
check("7", "CaC*", "CieC*", "CaC*") -- blasen, braten, fallen, halten, lassen, raten/rathen, schlafen
check("7", "C[aäe]C*", "CiC*", "CaC*") -- [with a]: fangen; [with ä]: hängen; [with e]: gehen
check("7", "Ce[iy]C*", "CieC*", "Ce[iy]C*") -- heißen/heissen/heyßen/heyssen
check("7", "CauC*", "CieC*", "CauC*") -- hauen, laufen
check("7", "CoC*", "CieC*", "CoC*") -- stoßen/stossen
check("7", "CuC*", "CieC*", "CuC*") -- rufen
end
for _, form in ipairs(past) do
local past_stem = form.form:match("^(.*)te$")
-- matches_forms() expects a Lua pattern so we need to escape special pattern chars (e.g. * in [[f*cken]])
past_stem = past_stem and m_string_utilities.pattern_escape(past_stem) or nil
if past_stem then
if matches_forms(infstem, "#" .. past_stem) then
-- Need to run matches_forms() on all possibilities even if earlier ones match,
-- to mark the seen forms correctly.
local matches_pp = matches_forms(pp, "#" .. past_stem .. "t")
matches_pp = matches_forms(pp, "#ge" .. past_stem .. "t") or matches_pp
if matches_pp then
m_table.insertIfNot(this_verb_types, "weak")
form.seen = true
reset_all_maybes(true)
else
reset_all_maybes(false)
end
end
end
if not form.seen and form.form:find("ete$") then
if matches_forms(infstem, "#" .. past_stem:gsub("e$", "")) then
-- Need to run matches_forms() on all possibilities even if earlier ones match,
-- to mark the seen forms correctly.
local matches_pp = matches_forms(pp, "#" .. past_stem .. "t")
matches_pp = matches_forms(pp, "#ge" .. past_stem .. "t") or matches_pp
matches_pp = matches_forms(pp, "#" .. past_stem .. "d") or matches_pp
matches_pp = matches_forms(pp, "#ge" .. past_stem .. "d") or matches_pp
if matches_pp then
m_table.insertIfNot(this_verb_types, "weak")
form.seen = true
reset_all_maybes(true)
else
reset_all_maybes(false)
end
end
end
if past_stem and not form.seen then
if not has_unseen_weak_pp() and has_unseen_strong_pp() then
m_table.insertIfNot(this_verb_types, "mixed")
else
m_table.insertIfNot(this_verb_types, "irregweak")
end
matches_forms(pp, "#" .. past_stem .. "t")
matches_forms(pp, "#ge" .. past_stem .. "t")
form.seen = true
reset_all_maybes(true)
end
if not form.seen then
check_strong()
end
if not form.seen then
if not has_unseen_strong_pp() and has_unseen_weak_pp() then
m_table.insertIfNot(this_verb_types, "mixed")
else
m_table.insertIfNot(this_verb_types, "irregstrong")
end
end
end
for _, form in ipairs(pp) do
if not form.seen then
if form.form:find("n$") then
if m_table.contains(this_verb_types, "strong") then
m_table.insertIfNot(this_verb_types, "irregstrong")
elseif m_table.contains(this_verb_types, "weak") then
m_table.insertIfNot(this_verb_types, "mixed")
end
elseif form.form:find("[dt]$") then
if m_table.contains(this_verb_types, "weak") then
m_table.insertIfNot(this_verb_types, "irregweak")
elseif m_table.contains(this_verb_types, "strong") then
m_table.insertIfNot(this_verb_types, "mixed")
end
end
end
end
base.verb_types = this_verb_types
if verb_types then
for _, verb_type in ipairs(this_verb_types) do
m_table.insertIfNot(verb_types, verb_type)
end
end
set_verb_type()
end
local function detect_indicator_spec(base)
base.forms = {}
base.aux = base.aux or {{form = "haben"}}
base.bare_infinitive = {{form = base.base_verb, footnotes = base.infstem_footnotes}}
add(base, "infinitive", base.pre_pref, base.bare_infinitive)
if base.only3s and base.only3sp then
error("'only3s' and 'only3sp' cannot both be specified")
end
if base.conj == "irreg" then
for irregverb, verbobj in pairs(irreg_verbs) do
base.insep_prefix = base.base_verb:match("^(.-)" .. irregverb .. "$")
if base.insep_prefix then
base.irregverb = irregverb
base.irregverbobj = verbobj
if not base.ge_prefix then
if base.insep_prefix ~= "" then
base.ge_prefix = {{form = ""}}
else
base.ge_prefix = {{form = "ge"}}
end
end
return
end
end
error("Unrecognized irregular base verb '" .. base.base_verb .. "'")
end
-- The following applies to everything but 'irreg' verbs.
local infstem, infroot = base.base_verb:match("^((.*)e[lr])n$")
if infstem then
base.unstressed_el_er = true
else
infstem, infroot = base.base_verb:match("^((.*)erl)n$") -- [[fensterln]]
if infstem then
base.unstressed_erl = true
else
infstem = base.base_verb:match("^(.*)en$")
infroot = infstem
if not infstem then
error("Unrecognized infinitive, should end in -en, -eln, -ern or -erln: '" .. base.base_verb .. "'")
end
end
end
base.infstem = {{form = infstem, footnotes = base.infstem_footnotes}}
if base.unstressed_e_infix == nil then
-- Autodetect whether we need an -e- infix in the pres_2s and pres_3s ([[atmen]], [[eignen]], etc.).
-- Almost all such cases have -Cmen or -Cnen where C is a consonant other than r or l and other than the
-- following m or n (hence [[meinen]], [[lernen]], [[filmen]], [[schwimmen]] should be excluded); we also
-- need to exclue -Vhmen and -Vhnen ([[wohnen]], [[rühmen]]), but not -Chmen and -Chnen ([[zeichnen]]).
if base.base_verb:find("[mn]en$") and not base.base_verb:find("([mn])%1en$") and
not rfind(base.base_verb, vowel_c .. "[hrl]?[mn]en$") then
base.unstressed_e_infix = true
end
end
if not base.conj then
base.conj = "normal"
end
if base.conj == "normal" then
local weak_past
if not base.past then
if base.unstressed_e_infix or ends_in_dt(infstem) then
weak_past = infstem .. "et"
else
weak_past = infstem .. "t"
end
base.past = {{form = weak_past .. "e"}}
end
if not base.pp then
if not weak_past then
error("Internal error: past was explicitly given but not past participle")
end
if not base.ge_prefix then
local no_ge
for _, insep_prefix in ipairs(inseparable_prefixes) do
-- There must be a vowel following the inseparable prefix; excludes beben, bechern, belfern, bellen, bessern,
-- beten, betteln, betten, erben, erden, ernten, erzen, entern, gecken, gehren, gellen, gerben, geten, missen,
-- zergen, zerren, etc.
if rfind(infroot, "^" .. insep_prefix .. ".*" .. vowel_c .. ".*") and
-- Exclude cases like beigen, beichten, beugen, beulen, geifern; this also wrongly excludes
-- beirren, which needs -ge.
not rfind(infroot, "^[bg]e[iu]" .. not_vowel_c .. "*$") then
no_ge = true
break
end
-- Check for -ier preceded by a vowel (excludes bieren, frieren, gieren, schmieren, stieren, zieren, etc.)
if not base.unstressed_el_er and not base.unstressed_erl and rfind(infroot, "^.*" .. vowel_c .. ".*ier$") then
no_ge = true
break
end
end
if no_ge then
base.ge_prefix = {{form = ""}}
else
base.ge_prefix = {{form = "ge"}}
end
end
base.pp = iut.map_forms(base.ge_prefix, function(form)
if base.unstressed_el_er or base.unstressed_erl then
return form .. base.base_verb:gsub("n$", "") .. "t"
else
return form .. weak_past
end
end)
end
else
if not base.pp then
error("For '" .. base.conj .. "' type verbs, past participle must be explicitly given")
end
end
add(base, "perf_part", base.pre_pref, base.pp)
end
local function detect_all_indicator_specs(alternant_multiword_spec)
iut.map_word_specs(alternant_multiword_spec, function(base)
detect_indicator_spec(base)
detect_verb_type(base)
end)
end
-- Set the overall auxiliary or auxiliaries. We can't do this using the normal inflection
-- code as it will produce e.g. '[[haben]] und [[haben]]' for conjoined verbs.
local function compute_auxiliary(alternant_multiword_spec)
iut.map_word_specs(alternant_multiword_spec, function(base)
iut.insert_forms(alternant_multiword_spec.forms, "aux", base.aux)
end)
end
function export.process_verb_classes(classes)
local class_descs = {}
local cats = {}
local function insert_desc(desc)
m_table.insertIfNot(class_descs, desc)
end
local function insert_cat(cat)
m_table.insertIfNot(cats, cat .. "ภาษาเยอรมัน")
end
for _, class in ipairs(classes) do
if class == "weak" then
insert_desc("[[ภาคผนวก:อภิธานศัพท์#คำกริยาอ่อน|อ่อน]]")
insert_cat("คำกริยาอ่อน")
elseif class == "irregweak" then
insert_desc("[[ภาคผนวก:อภิธานศัพท์#คำกริยาอ่อน|อ่อน]], [[ภาคผนวก:อภิธานศัพท์#ไม่ปรกติ|ไม่ปรกติ]]")
insert_cat("คำกริยาอ่อน")
insert_cat("คำกริยาอ่อนไม่ปรกติ")
elseif class == "pretpres" then
insert_desc("[[ภาคผนวก:อภิธานศัพท์#คำกริยาอดีตกาลสิ้นสุด-ปัจจุบันกาล|อดีตกาลสิ้นสุด-ปัจจุบันกาล]]")
insert_cat("คำกริยาอดีตกาลสิ้นสุด-ปัจจุบันกาล")
elseif class == "irreg" then
insert_desc("[[ภาคผนวก:อภิธานศัพท์#ไม่ปรกติ|ไม่ปรกติ]]")
insert_cat("คำกริยาไม่ปรกติ")
elseif class == "mixed" then
insert_desc("คำกริยาผสม")
insert_cat("คำกริยาผสม")
elseif class == "irregstrong" then
insert_desc("[[ภาคผนวก:อภิธานศัพท์#คำกริยาแข็ง|แข็ง]], [[ภาคผนวก:อภิธานศัพท์#ไม่ปรกติ|ไม่ปรกติ]]")
insert_cat("คำกริยาแข็ง")
insert_cat("คำกริยาแข็งไม่ปรกติ")
elseif class:find("^[1-7]$") then
insert_desc("[[ภาคผนวก:อภิธานศัพท์#คำกริยาแข็ง|แข็ง]], กลุ่ม " .. class)
insert_cat("คำกริยาแข็ง")
insert_cat("คำกริยาแข็งกลุ่ม " .. class .. " ")
else
error("คำกริยาไม่ทราบกลุ่ม '" .. class .. "'")
end
end
return class_descs, cats
end
local function add_categories_and_annotation(alternant_multiword_spec, base, from_headword, manual)
local function insert_cat(full_cat)
m_table.insertIfNot(alternant_multiword_spec.categories, full_cat)
end
if not from_headword then
for _, slot_and_accel in ipairs(all_verb_slots) do
local slot = slot_and_accel[1]
local forms = base.forms[slot]
local must_break = false
if forms then
for _, form in ipairs(forms) do
if not form.form:find("%[%[") then
local title = mw.title.new(form.form)
if title and not title.exists then
insert_cat("คำกริยาที่มีลิงก์แดงในตารางการผันรูปภาษาเยอรมัน")
must_break = true
break
end
end
end
end
if must_break then
break
end
end
end
if manual then
return
end
local class_descs, cats = export.process_verb_classes(base.verb_types)
for _, desc in ipairs(class_descs) do
m_table.insertIfNot(alternant_multiword_spec.verb_types, desc)
end
-- Don't place multiword terms in categories like 'German class 4 strong verbs' to avoid spamming the
-- categories with such terms.
if from_headword and not base.lemma:find(" ") then
for _, cat in ipairs(cats) do
insert_cat(cat)
end
end
for _, aux in ipairs(base.aux) do
m_table.insertIfNot(alternant_multiword_spec.auxiliaries, link_term(aux.form, "term"))
if from_headword and not base.lemma:find(" ") then -- see above
insert_cat("คำกริยาภาษาเยอรมันที่ใช้คำกริยาช่วย " .. aux.form)
-- Set flags for use below in adding 'German verbs using haben and sein as auxiliary'
alternant_multiword_spec["saw_" .. aux.form] = true
end
end
end
-- Compute the categories to add the verb to, as well as the annotation to display in the
-- conjugation title bar. We combine the code to do these functions as both categories and
-- title bar contain similar information.
local function compute_categories_and_annotation(alternant_multiword_spec, from_headword, manual)
alternant_multiword_spec.categories = {}
alternant_multiword_spec.verb_types = {}
alternant_multiword_spec.auxiliaries = {}
iut.map_word_specs(alternant_multiword_spec, function(base)
add_categories_and_annotation(alternant_multiword_spec, base, from_headword)
end)
if manual then
alternant_multiword_spec.annotation = ""
return
end
local ann_parts = {}
table.insert(ann_parts, table.concat(alternant_multiword_spec.verb_types, " หรือ "))
if #alternant_multiword_spec.auxiliaries > 0 then
table.insert(ann_parts, ", คำกริยาช่วย " .. table.concat(alternant_multiword_spec.auxiliaries, " หรือ "))
end
if from_headword and alternant_multiword_spec.saw_haben and alternant_multiword_spec.saw_sein then
m_table.insertIfNot(alternant_multiword_spec.categories, "คำกริยาภาษาเยอรมันที่ใช้คำกริยาช่วย haben และ sein")
end
alternant_multiword_spec.annotation = table.concat(ann_parts)
end
local function show_forms(alternant_multiword_spec)
local lemmas = iut.map_forms(alternant_multiword_spec.forms.infinitive,
remove_sein_sich_indicators)
alternant_multiword_spec.lemmas = lemmas -- save for later use in make_table()
local linked_pronouns = {}
for index, pronoun in ipairs(pronouns) do
-- use 'es' instead of 'er' for 3s-only verbs
if index == 3 and alternant_multiword_spec.only3s then
linked_pronouns[index] = link_term("es")
else
linked_pronouns[index] = link_term(pronoun)
end
end
local dass = link_term("dass") .. " "
local function generate_link(data)
local link = m_links.full_link {
lang = lang, term = data.form.formval_for_link, tr = "-", accel = data.form.accel_obj
}
local footnote_text = iut.get_footnote_text(data.form.footnotes, data.footnote_obj)
local persnum = data.slot:match("^imp_(2[sp])$")
if persnum then
link = link .. " (" .. linked_pronouns[persnum_to_index[persnum]] .. ")"
else
persnum = data.slot:match("^.*_([123][sp])$")
if persnum then
link = linked_pronouns[persnum_to_index[persnum]] .. " " .. link
end
if data.slot:find("^subc_") then
link = dass .. link
end
end
return link .. footnote_text
end
local function join_spans(data)
if data.slot == "aux" then
return table.concat(data.formval_spans, " หรือ ")
else
return table.concat(data.formval_spans, "<br />")
end
end
local props = {
lang = lang,
lemmas = lemmas,
generate_link = generate_link,
join_spans = join_spans,
}
props.slot_list = verb_slots_basic
iut.show_forms(alternant_multiword_spec.forms, props)
alternant_multiword_spec.footnote_basic = alternant_multiword_spec.forms.footnote
props.slot_list = verb_slots_subordinate_clause
iut.show_forms(alternant_multiword_spec.forms, props)
alternant_multiword_spec.footnote_subordinate_clause = alternant_multiword_spec.forms.footnote
props.slot_list = verb_slots_composed
iut.show_forms(alternant_multiword_spec.forms, props)
alternant_multiword_spec.footnote_composed = alternant_multiword_spec.forms.footnote
end
local notes_template = [=[
<div style="width:100%;text-align:left;background:var(--wikt-palette-grey-blue-1,#d9ebff)">
<div style="display:inline-block;text-align:left;padding-left:1em;padding-right:1em">
{footnote}
</div></div>
]=]
local zu_infinitive_table = [=[
|-
! colspan=2 style="background:var(--wikt-palette-grey-2,#d0d0d0)" | รูปกริยากลาง zu
| colspan=4 data-accel-col=1 | {zu_infinitive}
]=]
local basic_table = [=[
<div class="NavFrame" style="">
<div class="NavHead" style="">การผันรูปของ {title}</div>
<div class="NavContent">
{\op}| style="border: 1px solid var(--wikt-palette-black,#000000); border-collapse:collapse; background:var(--wikt-palette-white,#fafafa); text-align:center; width:100%" class="inflection-table"
|-
! colspan=2 style="background:var(--wikt-palette-grey-2,#d0d0d0)" | <span title="Infinitiv">รูปกริยากลาง</span>
| colspan=4 data-accel-col=1 | {infinitive}
|-
! colspan=2 style="background:var(--wikt-palette-grey-2,#d0d0d0)" | <span title="Partizip I (Partizip Präsens)">รูปกริยาขยายปัจจุบันกาล</span>
| colspan=4 data-accel-col=20 | {pres_part}
|-
! colspan=2 style="background:var(--wikt-palette-grey-2,#d0d0d0)" | <span title="Partizip II (Partizip Perfekt)">รูปกริยาขยายอดีตกาล</span>
| colspan=4 data-accel-col=20 | {perf_part}
{zu_infinitive_table}|-
! colspan=2 style="background:var(--wikt-palette-grey-2,#d0d0d0)" | <span title="Hilfsverb">คำกริยาช่วย</span>
| colspan=4 | {aux}
|-
| rowspan=2 style="background:var(--wikt-palette-grey-indigo-3,#a0ade3)" |
! colspan=2 style="background:var(--wikt-palette-grey-indigo-3,#a0ade3)" | <span title="Indikativ">มาลาบอกเล่า</span>
| rowspan=2 style="background:var(--wikt-palette-grey-indigo-3,#a0ade3)" |
! colspan=2 style="background:var(--wikt-palette-grey-indigo-3,#a0ade3)" | <span title="Konjunktiv">มาลาสมมุติ</span>
|-
! style="background:var(--wikt-palette-grey-indigo-3,#a0ade3)" | เอกพจน์
! style="background:var(--wikt-palette-grey-indigo-3,#a0ade3)" | พหูพจน์
! style="background:var(--wikt-palette-grey-indigo-3,#a0ade3)" | เอกพจน์
! style="background:var(--wikt-palette-grey-indigo-3,#a0ade3)" | พหูพจน์
|-
! rowspan=3 style="background:var(--wikt-palette-grey-blue-3,#c0cfe4); width:7em" | <span title="Präsens">ปัจจุบันกาล</span>
| data-accel-col=2 | {pres_1s}
| data-accel-col=3 | {pres_1p}
! rowspan=3 style="background:var(--wikt-palette-grey-blue-3,#c0cfe4); width:7em" | <span title="Konjunktiv I (Konjunktiv Präsens)">I</span>
| data-accel-col=10 | {subi_1s}
| data-accel-col=11 | {subi_1p}
|-
| data-accel-col=2 | {pres_2s}
| data-accel-col=3 | {pres_2p}
| data-accel-col=10 | {subi_2s}
| data-accel-col=11 | {subi_2p}
|-
| data-accel-col=2 | {pres_3s}
| data-accel-col=3 | {pres_3p}
| data-accel-col=10 | {subi_3s}
| data-accel-col=11 | {subi_3p}
|-
| colspan=6 style="background:var(--wikt-palette-grey-2,#d5d5d5); height: .25em" |
|-
! rowspan=3 style="background:var(--wikt-palette-grey-blue-3,#c0cfe4)" | <span title="Präteritum">อดีตกาลสิ้นสุด</span>
| data-accel-col=6 | {pret_1s}
| data-accel-col=7 | {pret_1p}
! rowspan=3 style="background:var(--wikt-palette-grey-blue-3,#c0cfe4)" | <span title="Konjunktiv II (Konjunktiv Präteritum)">II</span>
| data-accel-col=14 | {subii_1s}
| data-accel-col=15 | {subii_1p}
|-
| data-accel-col=6 | {pret_2s}
| data-accel-col=7 | {pret_2p}
| data-accel-col=14 | {subii_2s}
| data-accel-col=15 | {subii_2p}
|-
| data-accel-col=6 | {pret_3s}
| data-accel-col=7 | {pret_3p}
| data-accel-col=14 | {subii_3s}
| data-accel-col=15 | {subii_3p}
|-
| colspan=6 style="background:var(--wikt-palette-grey-2,#d5d5d5); height: .25em" |
|-
! style="background:var(--wikt-palette-grey-blue-3,#c0cfe4)" | <span title="Imperativ">มาลาสั่ง</span>
| data-accel-col=18 | {imp_2s}
| data-accel-col=19 | {imp_2p}
| colspan=3 style="background:var(--wikt-palette-grey-1,#e0e0e0)" |
|{\cl}{notes_clause}</div></div>
]=]
local subordinate_clause_table = [=[
<div class="NavFrame" style="">
<div class="NavHead" style="">รูปกริยา {title} เมื่ออยู่ในอนุประโยค</div>
<div class="NavContent">
{\op}| style="border: 1px solid var(--wikt-palette-black,#000000); border-collapse:collapse; background:var(--wikt-palette-white,#fafafa); text-align:center; width:100%" class="inflection-table"
|-
| style="background:var(--wikt-palette-grey-indigo-3,#a0ade3)" |
! colspan=2 style="background:var(--wikt-palette-grey-indigo-3,#a0ade3)" | <span title="Indikativ">มาลาบอกเล่า</span>
| style="background:var(--wikt-palette-grey-indigo-3,#a0ade3)" |
! colspan=2 style="background:var(--wikt-palette-grey-indigo-3,#a0ade3)" | <span title="Konjunktiv">มาลาสมมุติ</span>
|-
! rowspan=3 style="background:var(--wikt-palette-grey-blue-3,#c0cfe4); width:7em" | <span title="Präsens">ปัจจุบันกาล</span>
| data-accel-col=4 | {subc_pres_1s}
| data-accel-col=5 | {subc_pres_1p}
! rowspan=3 style="background:var(--wikt-palette-grey-blue-3,#c0cfe4); width:7em" | <span title="Konjunktiv I (Konjunktiv Präsens)">I</span>
| data-accel-col=12 | {subc_subi_1s}
| data-accel-col=13 | {subc_subi_1p}
|-
| data-accel-col=4 | {subc_pres_2s}
| data-accel-col=5 | {subc_pres_2p}
| data-accel-col=12 | {subc_subi_2s}
| data-accel-col=13 | {subc_subi_2p}
|-
| data-accel-col=4 | {subc_pres_3s}
| data-accel-col=5 | {subc_pres_3p}
| data-accel-col=12 | {subc_subi_3s}
| data-accel-col=13 | {subc_subi_3p}
|-
| colspan=6 style="background:var(--wikt-palette-grey-2,#d5d5d5); height: .25em" |
|-
! rowspan=3 style="background:var(--wikt-palette-grey-blue-3,#c0cfe4)" | <span title="Präteritum">อดีตกาลสิ้นสุด</span>
| data-accel-col=8 | {subc_pret_1s}
| data-accel-col=9 | {subc_pret_1p}
! rowspan=3 style="background:var(--wikt-palette-grey-blue-3,#c0cfe4)" | <span title="Konjunktiv II (Konjunktiv Präteritum)">II</span>
| data-accel-col=16 | {subc_subii_1s}
| data-accel-col=17 | {subc_subii_1p}
|-
| data-accel-col=8 | {subc_pret_2s}
| data-accel-col=9 | {subc_pret_2p}
| data-accel-col=16 | {subc_subii_2s}
| data-accel-col=17 | {subc_subii_2p}
|-
| data-accel-col=8 | {subc_pret_3s}
| data-accel-col=9 | {subc_pret_3p}
| data-accel-col=16 | {subc_subii_3s}
| data-accel-col=17 | {subc_subii_3p}
|{\cl}{notes_clause}</div></div>
]=]
local composed_table = [=[
<div class="NavFrame" style="">
<div class="NavHead" style="">รูปประกอบของคำกริยา {title}</div>
<div class="NavContent">
{\op}| style="border: 1px solid var(--wikt-palette-black,#000000); border-collapse:collapse; background:var(--wikt-palette-white,#fafafa); text-align:center; width:100%" class="inflection-table"
|-
! colspan=6 style="background:var(--wikt-palette-grey-green-4,#99cc99)" | <span title="Perfekt">สมบูรณ์</span>
|-
! style="background:var(--wikt-palette-grey-green-4,#99cc99)" |
! style="background:var(--wikt-palette-grey-green-4,#99cc99)" | เอกพจน์
! style="background:var(--wikt-palette-grey-green-4,#99cc99)" | พหูพจน์
! style="background:var(--wikt-palette-grey-green-4,#99cc99)" |
! style="background:var(--wikt-palette-grey-green-4,#99cc99)" | เอกพจน์
! style="background:var(--wikt-palette-grey-green-4,#99cc99)" | พหูพจน์
|-
! rowspan=3 style="background:var(--wikt-palette-grey-green-2,#cfedcc); width:7em" | <span title="Indikativ">มาลาบอกเล่า</span>
| {perf_ind_1s}
| {perf_ind_1p}
! rowspan=3 style="background:var(--wikt-palette-grey-green-2,#cfedcc); width:7em" | <span title="Konjunktiv">มาลาสมมุติ</span>
| {perf_sub_1s}
| {perf_sub_1p}
|-
| {perf_ind_2s}
| {perf_ind_2p}
| {perf_sub_2s}
| {perf_sub_2p}
|-
| {perf_ind_3s}
| {perf_ind_3p}
| {perf_sub_3s}
| {perf_sub_3p}
|-
! colspan=6 style="background:var(--wikt-palette-grey-green-4,#99CC99)" | <span title="Plusquamperfekt">อภิสมบูรณ์</span>
|-
! rowspan=3 style="background:var(--wikt-palette-grey-green-2,#cfedcc)" | <span title="Indikativ">มาลาบอกเล่า</span>
| {plup_ind_1s}
| {plup_ind_1p}
! rowspan=3 style="background:var(--wikt-palette-grey-green-2,#cfedcc)" | <span title="Konjunktiv">มาลาสมมุติ</span>
| {plup_sub_1s}
| {plup_sub_1p}
|-
| {plup_ind_2s}
| {plup_ind_2p}
| {plup_sub_2s}
| {plup_sub_2p}
|-
| {plup_ind_3s}
| {plup_ind_3p}
| {plup_sub_3s}
| {plup_sub_3p}
|-
! colspan=6 style="background:var(--wikt-palette-grey-indigo-4,#9999DF)" | <span title="Futur I">อนาคตกาล I</span>
|-
! rowspan=3 style="background:var(--wikt-palette-grey-indigo-2,#ccccff)" | <span title="Infinitiv">รูปกริยากลาง</span>
| rowspan=3 colspan=2 | {futi_inf}
! rowspan=3 style="background:var(--wikt-palette-grey-indigo-2,#ccccff)" | <span title="Konjunktiv I (Konjunktiv Präsens)">มาลาสมมุติ I</span>
| {futi_subi_1s}
| {futi_subi_1p}
|-
| {futi_subi_2s}
| {futi_subi_2p}
|-
| {futi_subi_3s}
| {futi_subi_3p}
|-
! colspan=6 style="background:var(--wikt-palette-grey-2,#d5d5d5); height: .25em" |
|-
! rowspan=3 style="background:var(--wikt-palette-grey-indigo-2,#ccccff)" | <span title="Indikativ">มาลาบอกเล่า</span>
| {futi_ind_1s}
| {futi_ind_1p}
! rowspan=3 style="background:var(--wikt-palette-grey-indigo-2,#ccccff)" | <span title="Konjunktiv II (Konjunktiv Präteritum)">มาลาสมมุติ II</span>
| {futi_subii_1s}
| {futi_subii_1p}
|-
| {futi_ind_2s}
| {futi_ind_2p}
| {futi_subii_2s}
| {futi_subii_2p}
|-
| {futi_ind_3s}
| {futi_ind_3p}
| {futi_subii_3s}
| {futi_subii_3p}
|-
! colspan=6 style="background:var(--wikt-palette-grey-indigo-4,#9999DF)" | <span title="Futur II">อนาคตกาล II</span>
|-
! rowspan=3 style="background:var(--wikt-palette-grey-indigo-2,#ccccff)" | <span title="Infinitiv">รูปกริยากลาง</span>
| rowspan=3 colspan=2 | {futii_inf}
! rowspan=3 style="background:var(--wikt-palette-grey-indigo-2,#ccccff)" | <span title="Konjunktiv I (Konjunktiv Präsens)">มาลาสมมุติ I</span>
| {futii_subi_1s}
| {futii_subi_1p}
|-
| {futii_subi_2s}
| {futii_subi_2p}
|-
| {futii_subi_3s}
| {futii_subi_3p}
|-
! colspan=6 style="background:var(--wikt-palette-grey-2,#d5d5d5); height: .25em" |
|-
! rowspan=3 style="background:var(--wikt-palette-grey-indigo-2,#ccccff)" | <span title="Indikativ">มาลาบอกเล่า</span>
| {futii_ind_1s}
| {futii_ind_1p}
! rowspan=3 style="background:var(--wikt-palette-grey-indigo-2,#ccccff)" | <span title="Konjunktiv II (Konjunktiv Präteritum)">มาลาสมมุติ II</span>
| {futii_subii_1s}
| {futii_subii_1p}
|-
| {futii_ind_2s}
| {futii_ind_2p}
| {futii_subii_2s}
| {futii_subii_2p}
|-
| {futii_ind_3s}
| {futii_ind_3p}
| {futii_subii_3s}
| {futii_subii_3p}
|{\cl}{notes_clause}</div></div>]=]
local function make_table(alternant_multiword_spec)
local forms = alternant_multiword_spec.forms
forms.title = link_term(alternant_multiword_spec.lemmas[1].form, "term")
if alternant_multiword_spec.annotation ~= "" then
forms.title = forms.title .. " (" .. alternant_multiword_spec.annotation .. ")"
end
-- Maybe format the subordinate clause table.
local formatted_subordinate_clause_table
if forms.subc_pres_3s ~= "—" then -- use 3s in case of only3s verb
forms.zu_infinitive_table = m_string_utilities.format(zu_infinitive_table, forms)
forms.footnote = alternant_multiword_spec.footnote_subordinate_clause
forms.notes_clause = forms.footnote ~= "" and m_string_utilities.format(notes_template, forms) or ""
formatted_subordinate_clause_table = m_string_utilities.format(subordinate_clause_table, forms)
else
forms.zu_infinitive_table = ""
formatted_subordinate_clause_table = ""
end
-- Format the basic table.
forms.footnote = alternant_multiword_spec.footnote_basic
forms.notes_clause = forms.footnote ~= "" and m_string_utilities.format(notes_template, forms) or ""
local formatted_basic_table = m_string_utilities.format(basic_table, forms)
-- Format the composed table.
forms.footnote = alternant_multiword_spec.footnote_composed
forms.notes_clause = forms.footnote ~= "" and m_string_utilities.format(notes_template, forms) or ""
local formatted_composed_table = m_string_utilities.format(composed_table, forms)
-- Paste them together.
return formatted_basic_table .. formatted_subordinate_clause_table .. formatted_composed_table
end
-- Externally callable function to parse and conjugate a verb given user-specified arguments.
-- Return value is WORD_SPEC, an object where the conjugated forms are in `WORD_SPEC.forms`
-- for each slot. If there are no values for a slot, the slot key will be missing. The value
-- for a given slot is a list of objects {form=FORM, footnotes=FOOTNOTES}.
function export.do_generate_forms(parent_args, from_headword, def)
local params = {
[1] = true,
pagename = true,
json = {type = "boolean"}, -- for bot use
}
if from_headword then
params["lemma"] = {list = true}
params["id"] = true
end
local args = require("Module:parameters").process(parent_args, params)
local pagename = args.pagename or mw.loadData("Module:headword/data").pagename
if not args[1] then
if pagename == "de-conj" or pagename == "de-verb" then
args[1] = def or "aus.fahren<fährt#fuhr,gefahren,führe.haben,sein>"
else
args[1] = pagename
-- If pagename has spaces in it, add links around each word
if args[1]:find(" ") then
args[1] = "[[" .. args[1]:gsub(" ", "]] [[") .. "]]"
end
end
end
local parse_props = {
parse_indicator_spec = parse_indicator_spec,
lang = lang,
allow_default_indicator = true,
allow_blank_lemma = true,
}
local escaped_arg1 = escape_sein_sich_indicators(args[1])
local alternant_multiword_spec = iut.parse_inflected_text(escaped_arg1, parse_props)
alternant_multiword_spec.pos = "คำกริยา"
alternant_multiword_spec.args = args
normalize_all_lemmas(alternant_multiword_spec, from_headword, pagename)
detect_all_indicator_specs(alternant_multiword_spec)
local inflect_props = {
slot_list = all_verb_slots,
lang = lang,
inflect_word_spec = conjugate_verb,
-- We add links around the generated verbal forms rather than allow the entire multiword
-- expression to be a link, so ensure that user-specified links get included as well.
include_user_specified_links = true,
}
iut.inflect_multiword_or_alternant_multiword_spec(alternant_multiword_spec, inflect_props)
compute_auxiliary(alternant_multiword_spec)
compute_categories_and_annotation(alternant_multiword_spec, from_headword)
if args.json then
return require("Module:JSON").toJSON(alternant_multiword_spec)
end
return alternant_multiword_spec
end
-- Entry point for {{de-conj}}. Template-callable function to parse and conjugate a verb given
-- user-specified arguments and generate a displayable table of the conjugated forms.
function export.show(frame)
local parent_args = frame:getParent().args
local alternant_multiword_spec = export.do_generate_forms(parent_args)
if type(alternant_multiword_spec) == "string" then -- json=1 specified
return alternant_multiword_spec
end
show_forms(alternant_multiword_spec)
return make_table(alternant_multiword_spec) .. require("Module:utilities").format_categories(alternant_multiword_spec.categories, lang)
end
local numbered_params = {
-- required params
[1] = "infinitive",
[2] = "pres_part",
[3] = "perf_part",
[4] = "aux",
[5] = "pres_1s",
[6] = "pres_2s",
[7] = "pres_3s",
[8] = "pres_1p",
[9] = "pres_2p",
[10] = "pres_3p",
[11] = "pret_1s",
[12] = "pret_2s",
[13] = "pret_3s",
[14] = "pret_1p",
[15] = "pret_2p",
[16] = "pret_3p",
[17] = "subi_1s",
[18] = "subi_2s",
[19] = "subi_3s",
[20] = "subi_1p",
[21] = "subi_2p",
[22] = "subi_3p",
[23] = "subii_1s",
[24] = "subii_2s",
[25] = "subii_3s",
[26] = "subii_1p",
[27] = "subii_2p",
[28] = "subii_3p",
[29] = "imp_2s",
[30] = "imp_2p",
-- [31] formerly the 2nd variant of imp_2s; now no longer allowed (use comma-separated 29=)
-- [32] formerly indicated whether the 2nd variant of imp_2s was present
-- optional params
[33] = "subc_pres_1s",
[34] = "subc_pres_2s",
[35] = "subc_pres_3s",
[36] = "subc_pres_1p",
[37] = "subc_pres_2p",
[38] = "subc_pres_3p",
[39] = "subc_pret_1s",
[40] = "subc_pret_2s",
[41] = "subc_pret_3s",
[42] = "subc_pret_1p",
[43] = "subc_pret_2p",
[44] = "subc_pret_3p",
[45] = "subc_subi_1s",
[46] = "subc_subi_2s",
[47] = "subc_subi_3s",
[48] = "subc_subi_1p",
[49] = "subc_subi_2p",
[50] = "subc_subi_3p",
[51] = "subc_subii_1s",
[52] = "subc_subii_2s",
[53] = "subc_subii_3s",
[54] = "subc_subii_1p",
[55] = "subc_subii_2p",
[56] = "subc_subii_3p",
[57] = "zu_infinitive",
}
local max_required_param = 30
-- Externally callable function to parse and conjugate a verb where all forms are given manually.
-- Return value is WORD_SPEC, an object where the conjugated forms are in `WORD_SPEC.forms`
-- for each slot. If there are no values for a slot, the slot key will be missing. The value
-- for a given slot is a list of objects {form=FORM, footnotes=FOOTNOTES}.
function export.do_generate_forms_manual(parent_args)
local params = {
json = {type = "boolean"},
}
for paramnum, _ in pairs(numbered_params) do
params[paramnum] = {required = paramnum <= max_required_param}
end
local args = require("Module:parameters").process(parent_args, params)
local base = {
forms = {},
manual = true,
}
local function process_numbered_param(paramnum)
local argval = args[paramnum]
if paramnum == 4 then
if argval == "h" then
base.aux = {{form = "haben"}}
elseif argval == "s" then
base.aux = {{form = "sein"}}
elseif argval == "hs" then
base.aux = {{form = "haben"}, {form = "sein"}}
elseif argval == "sh" then
base.aux = {{form = "sein"}, {form = "haben"}}
elseif not argval then
error("Missing auxiliary in 4=")
else
error("Unrecognized auxiliary 4=" .. argval)
end
elseif argval and argval ~= "-" then
local split_vals = rsplit(argval, "%s*,%s*")
for _, val in ipairs(split_vals) do
-- FIXME! This won't work with commas or brackets in footnotes.
-- To fix this, use functions from [[Module:inflection utilities]].
local form, footnote = val:match("^(.-)%s*(%[[^%]%[]-%])$")
local footnotes
if form then
footnotes = {footnote}
else
form = val
end
local slot = numbered_params[paramnum]
--if slot:find("subii") then
-- local subii_footnotes = get_subii_note(base)
-- footnotes = iut.combine_footnotes(subii_footnotes, footnotes)
--end
iut.insert_form(base.forms, slot, {form = form, footnotes = footnotes})
end
end
end
-- Do the infinitive first as we need to reference it in subjunctive II footnotes.
process_numbered_param(1)
for paramnum, _ in pairs(numbered_params) do
if paramnum ~= 1 then
process_numbered_param(paramnum)
end
end
add_composed_forms(base)
compute_categories_and_annotation(base, nil, "manual")
return base, args.json
end
-- Entry point for {{de-conj-table}}. Template-callable function to parse and conjugate a verb given
-- manually-specified inflections and generate a displayable table of the conjugated forms.
function export.show_manual(frame)
local parent_args = frame:getParent().args
local base, json = export.do_generate_forms_manual(parent_args)
if json then
return require("Module:JSON").toJSON(base)
end
show_forms(base)
return make_table(base) .. require("Module:utilities").format_categories(base.categories, lang)
end
return export
ewybghnwvni9uj7s29t20exy8pcfice
ᩋᩩ᩠᩶ᨿ
0
295482
5729295
1953560
2026-07-20T05:29:16Z
Alifshinobi
397
/* ภาษาคำเมือง */
5729295
wikitext
text/x-wiki
== ภาษาคำเมือง ==
=== รูปแบบอื่น ===
{{nod-alt|l=อุ้ย|s=อุ๊ย}}
=== รากศัพท์ ===
ร่วมเชื้อสายกับ{{cog|kkh|ᨴᩪ᩠᩶ᨿ}}
=== การออกเสียง ===
* {{IPA|nod|/ʔuj˦˥/|a=เชียงใหม่}}
=== คำนาม ===
{{nod-noun|ᨤᩫ᩠ᨶ}}
# [[ปู่]], [[ย่า]], [[ตา]] [[หรือ]][[ยาย]]
#: {{syn|nod|ᨴᩩ᩠᩶ᨿ}}
{{topics|nod|ครอบครัว}}
d4sopg4qnj0p47v5g59xajnx20upn74
ᨠᩖᩬ᩠ᨿ
0
301699
5729036
1952759
2026-07-19T22:57:48Z
Alifshinobi
397
/* ภาษาคำเมือง */
5729036
wikitext
text/x-wiki
== ภาษาคำเมือง ==
=== รูปแบบอื่น ===
{{nod-alt|l=กลอย|s=ก๋อย}}
=== การออกเสียง ===
* {{IPA|nod|/kɔːj˨˦/|a=เชียงใหม่}}
=== คำนาม ===
{{nod-noun}}
# [[กลอย]] {{gloss|ชื่อไม้เถามีหนาม มีหัวกลมใหญ่อยู่ใต้ดิน หัวดิบมีพิษเบื่อเมา}}
{{topics|nod|พืช}}
py6kaolvldo8u3yt1l3y3fb1mtmdp1z
เต่าทอง
0
307477
5729381
1563772
2026-07-20T07:40:44Z
Alifshinobi
397
5729381
wikitext
text/x-wiki
== ภาษาไทย ==
{{wp}}
=== การออกเสียง ===
{{th-pron|เต่า-ทอง}}
=== รากศัพท์ 1 ===
{{com|th|เต่า|ทอง}}
==== คำนาม ====
{{th-noun|ตัว}}
# ชื่อแมลงพวกด้วงขนาดเล็กหลายชนิด หลายสกุล ในวงศ์ Chrysomelidae รูปร่างค่อนข้างกลม ลำตัวโค้งแบน ปีกแข็งใส โค้งนูน เมื่อหุบปีกจดกันด้านหลังทำให้มองคล้ายหลังเต่า ปีกมีลวดลายเหลือบสีทอง เรียก เต่าทอง เช่น ชนิด Aspidomorpha sanctaecrucis (Fabricius) ตัวยาวประมาณ 1 เซนติเมตร ชนิด Cassida circumdata (Herbst) ตัวยาวประมาณ 4 มิลลิเมตร
===== คำแปลภาษาอื่น =====
{{trans-top|แมลงพวกด้วงขนาดเล็ก}}
* ลาว: {{t+|lo|ແມງເຕົ່າທອງ}}
* อังกฤษ: {{t+|en|ladybug|tr=เลดีบัก}}, {{t+|en|ladybird|tr=เลดีเบิร์ด}}
{{trans-bottom}}
=== รากศัพท์ 2 ===
==== คำนาม ====
{{th-noun}}
# ชื่อเพลงไทย อัตรา ๒ ชั้น
# ชื่อเพลงเรื่องประเภทเพลงช้า
# ชื่อเพลงไทยประเภทเพลงโหมโรง
bd9xk1f21gfabebj7nt9dpq44dhr521
หยวก
0
307848
5729410
4893774
2026-07-20T08:44:44Z
Heavenchris
5375
5729410
wikitext
text/x-wiki
== ภาษาไทย ==
{{wp|พริกหยวก}}
=== การออกเสียง ===
{{th-pron|หฺยวก}}
=== รากศัพท์ 1 ===
{{inh+|th|tai-swe-pro|*ˀjuəkᴰᴸ³}} (Jonsson, 1991); ร่วมเชื้อสายกับ{{cog|nod|ᩀ᩠ᩅᨠ}}, {{cog|lo|ຢວກ}}, {{cog|khb|ᦷᦊᧅᧈ}}, {{cog|tdd|ᥕᥨᥐᥱ||ต้นกล้วยป่า}}, {{cog|phk|ယုက်}}, {{cog|aho|𑜊𑜤𑜀𑜫||หน่อกล้วย}}, {{cog|zzj|yueg}}
==== รูปแบบอื่น ====
* {{alt|th|*อยวก||เลิกใช้}}
==== คำนาม ====
{{th-noun}}
# [[ลำต้น]][[กล้วย]], [[ส่วน]][[ใน]][[หรือ]][[แกน]][[อ่อน]][[ของ]]ลำต้น[[เทียม]][[ของ]]กล้วย [[มี]][[สีขาว]] [[กิน]][[ได้]]
{{ตย|หั่นหยวกต้มกับรำให้หมูกิน}}
{{ตย|ต้มหยวก}}
{{ตย|แกงหยวก}}
==== คำคุณศัพท์ ====
{{th-adj|-}}
# [[ไม่]][[แข็ง]][[แน่น]]
{{ตย|มีดเล่มนี้คมมาก ตัดกิ่งไม้ได้ง่ายเหมือนฟันหยวก}}
# [[ใช้]][[เปรียบ]][[ผิว]][[ที่]][[ขาว]][[มาก]][[ว่า]] ขาว[[เหมือน]]หยวก
=== รากศัพท์ 2 ===
==== คำนาม ====
{{th-noun}}
# ({{lang|th|[[พริก]]}}~) [[ชื่อ]][[พริก]][[พันธุ์]][[หนึ่ง]]ของชนิด Capsicum annuum L. ใน[[วงศ์]] Solanaceae [[ผล]][[ใหญ่]][[ป้อม]] [[เมื่อ]][[อ่อน]][[สีเหลือง]][[อม]][[เขียว]]
ahxty5amcx5gd11ydr7iw3mgl1v0kzq
ᨶᩢ᩠ᨠ
0
309058
5729172
3325494
2026-07-20T03:01:32Z
~2026-32817-27
19068
5729172
wikitext
text/x-wiki
{{also/auto}}
== ภาษาคำเมือง ==
=== รูปแบบอื่น ===
{{nod-alt|~=นัก}}
=== การออกเสียง ===
* {{IPA|nod|/nak˦˥/|a=เชียงใหม่}}
=== รากศัพท์ 1 ===
ร่วมเชื้อสายกับ{{cog|th|นัก}}
==== คำคุณศัพท์ ====
{{nod-adj}}
# [[มาก]]
==== คำกริยาวิเศษณ์ ====
{{nod-adv}}
# [[มาก]], [[อย่าง]][[ยิ่ง]][[หรือ]][[หนัก]][[ไป]][[ใน]][[ทาง]][[ใด]][[ทาง]][[หนึ่ง]]
#: {{ux|nod|[[ᩉ᩠ᨶᩣ᩠ᩅ]]'''ᨶᩢ᩠ᨠ'''|'''หนาว'''มาก}}
=== รากศัพท์ 2 ===
ร่วมเชื้อสายกับ{{cog|th|นัก}}
==== อุปสรรค ====
{{head|nod|อุปสรรค}}
# {{lb|nod|หน่วยคำไม่อิสระ}} [[นัก]] {{gl|ผู้, ผู้ชำนาญการ}}
{{prefixsee|nod}}
=== อ้างอิง ===
{{รายการอ้างอิง}}
* ''พจนานุกรมภาษาล้านนา = The Lanna dictionary'' (พิมพ์ครั้งที่ 2). (พ.ศ. 2550). เชียงใหม่: สถาบันภาษา ศิลปะและวัฒนธรรม มหาวิทยาลัยราชภัฏเชียงใหม่.
8yc64x37afkyw9f0v0q20wteg2a8gi5
มอดูล:languages/data/2/extra
828
312282
5729129
5719181
2026-07-20T02:35:49Z
Octahedron80
267
5729129
Scribunto
text/plain
local m = {}
m["aa"] = {
aliases = {"กาฟาร์", "Afar", "Qafar"},
}
m["ab"] = {
aliases = {"อับคัซ", "อับฮัซ", "Abkhaz", "Abkhazian", "Abxazo"},
}
m["ae"] = {
aliases = {"เซนด์", "แบกเตรียเก่า", "Avestan", "Zend", "Old Bactrian"},
}
m["af"] = {
aliases = {"แอฟริคานส์", "Afrikaans"},
}
m["ak"] = {
aliases = {"Akan"},
varieties = {"Twi-Fante", "Twi", {"Fante", "Fanti"}, "Asante", "Akuapem"},
}
m["am"] = {
aliases = {"Amharic"},
}
m["an"] = {
aliases = {"Aragonese"},
}
m["ar"] = {
-- FIXME, some of the following are varieties but it's not clear which ones
aliases = {"อาหรับมาตรฐาน", "อาหรับวรรณกรรม", "Arabic", "Standard Arabic", "Literary Arabic", "High Arabic"},
varieties = {{"อาหรับมาตรฐานใหม่", "Modern Standard Arabic"}, {"อาหรับคลาสสิก", "Classical Arabic"}, {"อาหรับแบบยิว", "Judeo-Arabic"}},
}
m["as"] = {
aliases = {"Assamese", "Asamiya"},
}
m["av"] = {
aliases = {"Avar", "Avaric"},
}
m["ay"] = {
aliases = {"Aymara"},
varieties = {{"ไอย์มาราใต้", "Southern Aymara"}, {"ไอย์มารากลาง", "Central Aymara"}},
}
m["az"] = {
aliases = {"อาเซอรี", "อาซารี", "เติร์กแบบอาเซอรี", "เติร์กแบบอาเซอร์ไบจาน", "Azerbaijani", "Azeri", "Azari", "Azeri Turkic", "Azerbaijani Turkic"},
varieties = {
{"อาเซอร์ไบจานเหนือ", "North Azerbaijani"},
{"อาเซอร์ไบจานใต้", "South Azerbaijani"},
{"Afshar", "Afshari", "Afshar Azerbaijani", "Afchar"},
{"Qashqa'i", "Qashqai", "Kashkay"},
"Sonqor"
},
}
m["ba"] = {
aliases = {"บัชคีร์", "บัชคอร์", "Bashkir"},
}
m["be"] = {
aliases = {"รัสเซียขาว", "Belarusian", "Belorussian", "Belarusan", "Bielorussian", "Byelorussian", "Belarussian", "White Russian"},
}
m["bg"] = {
aliases = {"Bulgarian"},
}
m["bh"] = {
aliases = {"พิหารี", "Bihari"},
}
m["bi"] = {
aliases = {"Bislama"},
}
m["bm"] = {
aliases = {"Bambara", "Bamanankan"},
}
m["bn"] = {
aliases = {"เบงกาลี", "บังลา", "Bengali", "Bangla"},
}
m["bo"] = {
aliases = {"Tibetan"},
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"] = {
aliases = {"Breton"},
varieties = {{"Gwenedeg", "Vannetais"}, {"Kerneveg", "Cornouaillais"}, {"Leoneg", "Léonard"}, {"Tregerieg", "Trégorrois"}},
}
m["ca"] = {
aliases = {"คาตาลัน", "Catalan"},
-- don't list varieties here that are in [[Module:etymology languages/data]]
}
m["ce"] = {
aliases = {"Chechen"},
}
m["ch"] = {
aliases = {"Chamorro", "Chamoru"},
}
m["co"] = {
aliases = {"Corsican", "Corsu"},
}
m["cr"] = {
aliases = {"Cree"},
}
m["cs"] = {
aliases = {"Czech"},
}
m["cu"] = {
aliases = {"สลาวิกคริสตจักรเก่า", "Old Church Slavonic", "Old Church Slavic"},
}
m["cv"] = {
aliases = {"Chuvash"},
}
m["cy"] = {
aliases = {"Welsh"},
varieties = {"Cofi Welsh", {"Dyfedeg", "Dyfed Welsh", "Demetian"}, {"Gwenhwyseg", "Gwent Welsh", "Gwentian"}, {"Gwyndodeg", "Gwynedd Welsh", "Venedotian"}, "North Wales Welsh", {"Powyseg", "Powys Welsh", "Powysian"}, "South Wales Welsh", "Patagonian Welsh"},
}
m["da"] = {
aliases = {"เดนิช", "Danish"},
}
m["de"] = {
aliases = {"เยอรมันสูง", "เยอรมันสูงใหม่", "ด็อยทช์", "German", "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 = {"ดิเวฮิ", "Dhivehi", "Divehi", "Maldivian"},
varieties = {{"มาห์ล", "Mahal", "Mahl"}},
}
m["dz"] = {
aliases = {"Dzongkha"},
}
m["ee"] = {
aliases = {"Ewe"},
}
m["el"] = {
aliases = {"กรีกใหม่", "Greek", "Modern Greek", "Neo-Hellenic"},
}
m["en"] = {
aliases = {"อังกฤษใหม่", "English", "Modern English", "New English"},
varieties = {"Polari", "Yinglish"},
}
m["eo"] = {
aliases = {"Esperanto"},
}
m["es"] = {
aliases = {"คาสตีล", "Spanish", "Castilian"},
varieties = {{"Amazonian Spanish", "Amazonic Spanish"}, "Loreto-Ucayali Spanish"},
}
m["et"] = {
aliases = {"Estonian"},
}
m["eu"] = {
aliases = {"Basque", "Euskara"},
}
m["fa"] = {
aliases = {"ฟาร์ซี", "เปอร์เซียใหม่", "Persian", "Farsi", "New Persian", "Modern Persian"},
varieties = {{"Western Persian", "Iranian Persian"}, {"Eastern Persian", "Dari"}, {"Aimaq", "Aimak", "Aymaq", "Eimak"}},
}
m["ff"] = {
aliases = {"Fula", "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 = {"ฟินนิช", "ซูโอมี", "Finnish", "Suomi"},
}
m["fj"] = {
aliases = {"ฟิจิ", "Fijian"},
}
m["fo"] = {
aliases = {"Faroese", "Faeroese"},
}
m["fr"] = {
aliases = {"ฝรั่งเศสใหม่", "French", "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 = {"ฟรีเชีย", "West Frisian", "Western Frisian", "Frisian"},
}
m["ga"] = {
aliases = {"ไอร์แลนด์", "แกลิกแบบไอร์แลนด์", "Irish", "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 = {"Scottish Gaelic", "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"] = {
aliases = {"Galician"},
}
m["gn"] = {
aliases = {"Guaraní", "Guarani"},
}
m["gu"] = {
aliases = {"Gujarati"},
}
m["gv"] = {
aliases = {"แกลิกแบบเกาะแมน", "Manx", "Manx Gaelic"},
varieties = {"Northern Manx", "Southern Manx"},
}
m["ha"] = {
aliases = {"Hausa"},
}
m["he"] = {
aliases = {"อิฟริท", "Hebrew", "Ivrit"},
}
m["hi"] = {
aliases = {"ฮินดู", "Hindi"},
other_names = {"Hindavi"},
}
m["ho"] = {
aliases = {"Hiri Motu", "Pidgin Motu", "Police Motu"},
}
m["ht"] = {
aliases = {"ครีโอลไฮติ", "ไฮติครีโอล", "เฮติครีโอล", "ครีโอล", "Haitian Creole", "Creole", "Haitian", "Kreyòl"},
}
m["hu"] = {
aliases = {"มอยอร์", "Hungarian", "Magyar"},
}
m["hy"] = {
aliases = {"อาร์มีเนียใหม่", "Armenian", "Modern Armenian"},
varieties = {{"อาร์มีเนียตะวันออก", "Eastern Armenian"}, {"อาร์มีเนียตะวันตก", "Western Armenian"}},
}
m["hz"] = {
aliases = {"Herero"},
}
m["ia"] = {
aliases = {"Interlingua"},
}
m["id"] = {
aliases = {"มลายูแบบอินโดนีเซีย", "Indonesian"},
}
m["ie"] = {
aliases = {"ออกซิเดนทาล", "Interlingue", "Occidental"},
}
m["ig"] = {
aliases = {"Igbo"},
}
m["ii"] = {
aliases = {"อี๋แบบเสฉวน", "อี๋เหนือ", "อี๋แบบเหลียงซาน", "Sichuan Yi", "Nuosu", "Nosu", "Northern Yi", "Liangshan Yi"},
}
m["ik"] = {
aliases = {"Inupiak", "Iñupiaq", "Inupiatun"},
}
m["io"] = {
aliases = {"Ido"},
}
m["is"] = {
aliases = {"Icelandic"},
}
m["it"] = {
aliases = {"อิตาเลียน", "Italian"},
}
m["iu"] = {
aliases = {"Inuktitut"},
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 = {"ญี่ปุ่นใหม่", "Japanese", "Modern Japanese", "Nipponese", "Nihongo"},
}
m["jv"] = {
aliases = {"Javanese"},
}
m["ka"] = {
aliases = {"Georgian"},
varieties = {{"จอร์เจียแบบยิว", "Judeo-Georgian", "Kivruli", "Gruzinic"}},
}
m["kg"] = {
aliases = {"Kongo", "Kikongo"},
varieties = {"Koongo", "Laari", "San Salvador Kongo", "Yombe"},
}
m["ki"] = {
aliases = {"กีกูยู", "Kikuyu", "Gikuyu", "Gĩkũyũ"},
}
m["kj"] = {
aliases = {"Kuanyama", "Oshikwanyama"},
}
m["kk"] = {
aliases = {"คาซัคสถาน", "Kazakh"},
}
m["kl"] = {
aliases = {"กะลาลลิซุต", "Greenlandic", "Kalaallisut"},
}
m["km"] = {
aliases = {"กัมพูชา", "เขมรตอนกลาง", "เขมรใหม่", "Khmer", "Cambodian", "Central Khmer", "Modern Khmer"},
}
m["kn"] = {
aliases = {"กันนาดา", "Kannada"},
}
m["ko"] = {
aliases = {"เกาหลีใหม่", "Korean", "Modern Korean"},
}
m["kr"] = {
aliases = {"กานัวรี", "Kanuri"},
varieties = {"Kanembu", "Bilma Kanuri", "Central Kanuri", "Manga Kanuri", "Tumari Kanuri"},
}
m["ks"] = {
aliases = {"กัศมีร์", "Kashmiri", "Koshur"},
}
-- "kv" IS TREATED AS "koi", "kpv", SEE WT:LT
m["kw"] = {
aliases = {"คอร์นิช", "Cornish"},
}
m["ky"] = {
aliases = {"คีร์กีซสถาน", "Kyrgyz", "Kirghiz", "Kirgiz"},
}
m["la"] = {
aliases = {"ลาติน", "Latin"},
}
m["lb"] = {
aliases = {"Luxembourgish"},
}
m["lg"] = {
aliases = {"Luganda", "Ganda", "Oluganda"},
}
m["li"] = {
aliases = {"Limburgish", "Limburgan", "Limburgian", "Limburgic"},
}
m["ln"] = {
aliases = {"กาลา", "Lingala", "Ngala"},
}
m["lo"] = {
aliases = {"Lao", "Laotian"},
}
m["lt"] = {
aliases = {"Lithuanian"},
}
m["lu"] = {
}
m["lv"] = {
aliases = {"Latvian", "Lettish", "Lett"},
}
m["mg"] = {
aliases = {"Malagasy"},
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"] = {
aliases = {"Marshallese"},
}
m["mi"] = {
aliases = {"เมารี", "Maori", "Māori"},
}
m["mk"] = {
aliases = {"Macedonian"},
}
m["ml"] = {
aliases = {"มลยาลัม", "มาลายาลัม", "Malayalam"},
}
m["mn"] = {
aliases = {"Mongolian"},
varieties = {"Khalkha Mongolian"},
}
-- "mo" IS TREATED AS "ro", SEE WT:LT
m["mr"] = {
aliases = {"Marathi"},
}
m["ms"] = {
aliases = {"มาเลย์", "มลายู", "มลายูมาตรฐาน", "มลายูแบบมาเลเซีย", "Malay", "Malaysian", "Standard Malay"},
}
m["mt"] = {
aliases = {"Maltese"},
}
m["my"] = {
aliases = {"เมียนมา", "Burmese", "Myanmar"},
varieties = {"Mandalay Burmese", "Myeik Burmese", "Palaw Burmese", {"Rangoon Burmese", "Yangon Burmese"}, "Yaw Burmese"},
}
m["na"] = {
aliases = {"Nauruan", "Nauru"},
}
m["nb"] = {
aliases = {"บุ๊กมอล", "Norwegian Bokmål", "Bokmål"},
}
m["nd"] = {
aliases = {"North Ndebele"},
}
m["ne"] = {
aliases = {"เนปาลี", "Nepali", "Nepalese"},
varieties = {"Palpa"}, -- 3832956, former "plp", retired by ISO as spurious
}
m["ng"] = {
}
m["nl"] = {
aliases = {"Dutch"},
varieties = {{"เนเธอร์แลนด์", "Netherlandic"}, {"เฟลมิช", "Flemish"}}, -- FIXME, check this
}
m["nn"] = {
aliases = {"นอร์เวย์ใหม่", "นือนอสก์", "Norwegian Nynorsk", "New Norwegian", "Nynorsk"},
}
m["no"] = {
aliases = {"Norwegian"},
}
m["nr"] = {
aliases = {"South Ndebele"},
}
m["nv"] = {
aliases = {"Navajo", "Navaho", "Diné bizaad"},
}
m["ny"] = {
aliases = {"จีเจวา", "เชวา", "ชีเชวา", "Chichewa", "Chicheŵa", "Chinyanja", "Nyanja", "Chewa", "Cicewa", "Cewa", "Cinyanja"},
}
m["oc"] = {
aliases = {"อ็อกซิตัน", "Occitan"},
-- don't list varieties here that are in [[Module:etymology languages/data]]
}
m["oj"] = {
aliases = {"Ojibwe", "Ojibway", "Ojibwa"},
varieties = {{"Chippewa", "Ojibwemowin", "Southwestern Ojibwa"}},
}
m["om"] = {
aliases = {"Oromo"},
varieties = {"Orma", "Borana-Arsi-Guji Oromo", "West Central Oromo"},
}
m["or"] = {
aliases = {"โอเดีย", "Oriya", "Odia", "Oorya"},
}
m["os"] = {
aliases = {"Ossetian", "Ossete", "Ossetic"},
varieties = {"Digor", "Iron"},
}
m["pa"] = {
aliases = {"ปัญจาบี", "Punjabi", "Panjabi"},
}
m["pi"] = {
aliases = {"บาฬี", "ปาลิ", "ปาลี", "ปาฬิ", "ปาฬี", "Pali"},
}
m["pl"] = {
aliases = {"โปลิช", "Polish"},
}
m["ps"] = {
aliases = {"ปัชโต", "ปัชตุน", "ปุชโต", "ปัชตู", "อัฟกัน", "Pashto", "Pashtun", "Pushto", "Pashtu", "Afghani"},
varieties = {{"ปาทานตอนกลาง", "ปัชโตตอนกลาง", "Central Pashto"}, {"ปาทานเหนือ", "ปัชโตเหนือ", "Northern Pashto"}, {"ปาทานใต้", "ปัชโตใต้", "Southern Pashto"}, {"Pukhto", "Pakhto", "Pakkhto"}},
}
m["pt"] = {
aliases = {"โปรตุเกสใหม่", "Portuguese", "Modern Portuguese"},
}
m["qu"] = {
aliases = {"Quechua"},
}
m["rm"] = {
aliases = {"Romansch", "Romansh", "Rumantsch", "Romanche"},
}
m["ro"] = {
aliases = {"รูมาเนีย", "Romanian", "Daco-Romanian", "Roumanian", "Rumanian"},
}
m["ru"] = {
aliases = {"Russian"},
}
m["rw"] = {
-- don't list varieties here that are in [[Module:etymology languages/data]]
aliases = {"Rwanda-Rundi"},
varieties = {{"Ha", "Giha"}, "Hangaza", "Vinza", "Shubi"}, -- Deleted "Subi", which normally refers to a different language
}
m["sa"] = {
aliases = {"Sanskrit"},
}
m["sc"] = {
aliases = {"Sardinian"},
-- don't list varieties here that are in [[Module:etymology languages/data]]
}
m["sd"] = {
aliases = {"สินธี", "Sindhi"},
}
m["se"] = {
aliases = {"Northern Sami", "North Sami", "Northern Saami", "North Saami"},
}
m["sg"] = {
aliases = {"Sango"},
}
m["sh"] = {
aliases = {"Serbo-Croatian", "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 = {"Sinhalese", "Singhalese", "Sinhala"},
}
m["sk"] = {
aliases = {"Slovak"},
}
m["sl"] = {
aliases = {"สโลเวเนีย", "สโลวีน", "Slovene", "Slovenian"},
}
m["sm"] = {
aliases = {"Samoan"},
}
m["sn"] = {
aliases = {"Shona"},
}
m["so"] = {
aliases = {"Somali"},
}
m["sq"] = {
aliases = {"Albanian"},
-- don't list varieties here that are in [[Module:etymology languages/data]]
}
m["ss"] = {
aliases = {"สวาตี", "Swazi", "Swati"},
}
m["st"] = {
aliases = {"โซโท", "Sotho", "Sesotho", "Southern Sesotho", "Southern Sotho"},
}
m["su"] = {
aliases = {"Sundanese"},
}
m["sv"] = {
aliases = {"สวีดิช", "Swedish"},
}
m["sw"] = {
aliases = {"Swahili"},
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"] = {
aliases = {"Tamil"},
}
m["te"] = {
aliases = {"Telugu"},
}
m["tg"] = {
aliases = {"ทาจิกิสถาน", "เปอร์เซียแบบทาจิก", "Tajik", "Tadjik", "Tadzhik", "Tajiki", "Tajik Persian", "Tajiki Persian"},
}
m["th"] = {
aliases = {"สยาม", "ไทยกลาง", "Thai", "Siamese", "Central Thai"},
}
m["ti"] = {
aliases = {"ทิกรินยา", "Tigrinya"},
}
m["tk"] = {
aliases = {"เติร์กเมนิสถาน", "Turkmen"},
}
m["tl"] = {
aliases = {"Tagalog"},
}
m["tn"] = {
aliases = {"Tswana", "Setswana"},
}
m["to"] = {
aliases = {"ตองกา", "Tongan"},
}
m["tr"] = {
aliases = {"เติร์ก", "Turkish"},
}
m["ts"] = {
aliases = {"Xitsonga"},
}
m["tt"] = {
aliases = {"Tatar"},
}
-- "tw" IS TREATED AS "ak", SEE WT:LT
m["ty"] = {
aliases = {"Tahitian"},
}
m["ug"] = {
aliases = {"Uyghur", "Uigur", "Uighur", "Uygur"},
}
m["uk"] = {
aliases = {"Ukrainian"},
}
m["ur"] = {
aliases = {"Urdu"},
}
m["uz"] = {
aliases = {"อุซเบกิสถาน", "Uzbek"},
varieties = {{"อุซเบกเหนือ", "Norther Uzbek"}, {"อุซเบกใต้","Southern Uzbek"}},
}
m["ve"] = {
aliases = {"Venda"},
}
m["vi"] = {
aliases = {"ญวน", "อันนัม", "อนัม", "อนำ", "อานำ", "อานัม", "Vietnamese", "Annamese", "Annamite"},
}
m["vo"] = {
aliases = {"Volapük"},
}
m["wa"] = {
aliases = {"Walloon", "Liégeois", "Namurois", "Wallo-Picard", "Wallo-Lorrain"},
}
m["wo"] = {
aliases = {"Wolof"},
varieties = {"Gambian Wolof"}, -- the subsumed dialect 'wof'
}
m["xh"] = {
aliases = {"Xhosa"},
}
m["yi"] = {
aliases = {"อิดดิช", "Yiddish"},
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"] = {
aliases = {"Yoruba"},
}
m["za"] = {
aliases = {"Zhuang"},
-- 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"] = {
aliases = {"Chinese"},
}
m["zu"] = {
aliases = {"อีซีซูลู", "Zulu", "isiZulu"},
}
return m
rmm02isdmfn3lregojnjifpmkz45ado
มอดูล:languages/data/3/s/extra
828
312293
5729120
5726531
2026-07-20T02:24:29Z
Octahedron80
267
5729120
Scribunto
text/plain
local m = {}
m["saa"] = {
}
m["sab"] = {
aliases = {"Bugle", "Murire", "Muoy"},
varieties = {"Sabanero", {"Bokotá", "Bogota"}},
}
m["sac"] = {
varieties = {{"Sac", "Sauk"}, "Kickapoo", {"Mesquakie", "Meskwaki"}},
}
m["sad"] = {
}
m["sae"] = {
}
m["saf"] = {
}
m["sah"] = {
aliases = {"ยาคุต", "Yakut", "Sakha"},
}
m["saj"] = {
}
m["sak"] = {
aliases = {"Shake"},
}
m["sam"] = {
aliases = {"Samaritan"},
}
m["sao"] = {
}
m["saq"] = {
}
m["sar"] = {
aliases = {"Sarabeca", "Saraveka", "Sarave"},
}
m["sas"] = {
}
m["sat"] = {
aliases = {"สันถัล", "Santali"},
}
m["sau"] = {
}
m["sav"] = {
}
m["saw"] = {
}
m["sax"] = {
aliases = {"Saa"},
}
m["say"] = {
}
m["saz"] = {
}
m["sba"] = {
}
m["sbb"] = {
}
m["sbc"] = {
aliases = {"Kele (New Guinea)", "Kele (Papua New Guinea)", "Kele"},
}
m["sbd"] = {
}
m["sbe"] = {
aliases = {"Saliba"},
}
m["sbf"] = {
aliases = {"Mikeyir", "Mekeyir", "Mekeyer"},
}
m["sbg"] = {
}
m["sbh"] = {
-- I'm guessing these are varieties, since they represent the names of the two islands on which the language
-- (Sori-Harengan) is spoken.
varieties = {"Sori", "Harengan"},
}
m["sbi"] = {
}
m["sbj"] = {
}
m["sbk"] = {
}
m["sbl"] = {
}
m["sbm"] = {
}
m["sbn"] = {
}
m["sbo"] = {
}
m["sbp"] = {
}
m["sbq"] = {
}
m["sbr"] = {
}
m["sbs"] = {
}
m["sbt"] = {
}
m["sbu"] = {
}
m["sbv"] = {
}
m["sbw"] = {
}
m["sbx"] = {
}
m["sby"] = {
}
m["sbz"] = {
}
m["scb"] = {
}
m["sce"] = {
aliases = {"ซันตา", "Dongxiang", "Santa"},
}
m["scf"] = {
}
m["scg"] = {
}
m["sch"] = {
-- Alias vs. variety here is a guess; Wikipedia says "Sakachep also known as Khelma" and says the ethnicity is
-- "The Khelma, also known as the Sakachep" but Ethnologue also says "dialects are Khelma, Thangachep, and Sakachep"
-- which may be bogus.
aliases = {"Khelma"},
}
m["sci"] = {
}
m["sck"] = {
}
m["scl"] = {
-- These represent different valleys where the language is spoken, hence likely distinct dialects.
varieties = {"Gilgiti", "Astori", "Chilasi"},
}
m["scn"] = {
aliases = {"Sicilian"},
}
m["sco"] = {
aliases = {"สก็อต", "สกอตส์", "สก็อตส์", "Scots", "Lowland Scots"},
}
m["scp"] = {
aliases = {"Hyolmo", "Yohlmo", "Helambu Sherpa"},
-- Wikipedia says Syuba/Kagate (code skw) may be close enough to be a dialect. Langtang is mutually intelligible
-- with Yolmo but often considered a separate language; yet we don't have a code for it so I'm putting it as a
-- variety.
varieties = {"Melamchi Valley Yolmo", "Langtang", "Lamjung Yolmo", "Ilam Yolmo"},
}
m["scq"] = {
aliases = {"Sa'och", "Chung"},
}
m["scs"] = {
}
m["scu"] = {
}
m["scv"] = {
}
m["scw"] = {
}
m["scx"] = {
}
m["sda"] = {
}
m["sdb"] = {
aliases = {"Shabaki"},
}
m["sdc"] = {
aliases = {"Sassarese"},
}
m["sde"] = {
}
m["sdf"] = {
aliases = {"Sarliya"},
}
m["sdg"] = {
}
m["sdh"] = {
-- Kermanshahi can refer either to Southern Kurdish as a whole or to the prestige dialect. We distinct the latter
-- as Kermanshani with an n following ''Habib Borjian, “KERMANSHAH vii. Languages and Dialects,” Encyclopædia
-- Iranica, Vol. 16, Fasc. 3, New York, 2017, pp. 327-331.'' but this may not make a lot of sense.
aliases = {"Kermanshahi", "Kermanshahi Kurdish"},
-- We classify Laki as a separate language but it is often considered a dialect of Southern Kurdish.
varieties = {{"Kermanshani", "Kermanshani Kurdish"}, {"Kolya'i", "Kolyā'i"}, "Zangana", "Kalhori", {"Sanjābi", "Sanjabi"}, {"Feyli", "Fayli", "Ilāmi", "Ilami"}},
}
m["sdj"] = {
}
m["sdk"] = {
}
m["sdl"] = {
}
m["sdm"] = {
}
m["sdn"] = {
}
m["sdo"] = {
aliases = {"Bukar-Sadong"},
}
m["sdp"] = {
}
m["sdr"] = {
}
m["sds"] = {
aliases = {"Tunisian Berber"},
}
m["sdu"] = {
}
m["sdx"] = {
}
m["sea"] = {
aliases = {"Semai"},
}
-- seb is a duplicate code of spp
m["sec"] = {
}
m["sed"] = {
}
m["see"] = {
}
m["sef"] = {
}
m["seg"] = {
}
m["seh"] = {
varieties = {{"Malawi Sena", "Malawian Sena"}, {"Nuclear Sena", "Mozambican Sena"}}, -- includes [swk] for Malawian Sena, but [bwg] for Barwe is distinct
}
m["sei"] = {
}
m["sej"] = {
}
m["sek"] = {
aliases = {"Tsek'ene"},
varieties = {{"Kwadacha", "Kwadacha Sekani", "Kwadacha Tsek'ene"}},
}
m["sen"] = {
}
m["seo"] = {
}
m["sep"] = {
}
m["seq"] = {
}
m["ser"] = {
-- Wikipedia treats Kitanemuk as a separate language but it says it may have been a dialect (it is extinct).
varieties = {"Kitanemuk"},
}
m["ses"] = {
aliases = {"Koyraboro Senni Songhay", "Koyraboro Senni Songhai", "Koroboro Senni"},
-- other_names = {"Eastern Songhay"}, -- this is a geographic grouping of Songhay languages including Koyraboro Senni
}
m["set"] = {
}
m["seu"] = {
}
m["sev"] = {
}
m["sew"] = {
}
m["sey"] = {
}
m["sez"] = {
aliases = {"Senthang"},
}
m["sfb"] = {
}
m["sfe"] = {
}
m["sfm"] = {
}
m["sfs"] = {
}
m["sfw"] = {
}
m["sga"] = {
aliases = {"Old Irish"},
}
m["sgb"] = {
}
m["sgc"] = {
}
m["sgd"] = {
aliases = {"Surigaonon"},
}
m["sge"] = {
}
m["sgg"] = {
aliases = {"Swiss German Sign Language"},
}
m["sgh"] = {
}
m["sgi"] = {
}
m["sgk"] = {
}
m["sgm"] = {
}
m["sgp"] = {
}
m["sgr"] = {
aliases = {"Sangsari"},
}
m["sgs"] = {
}
m["sgt"] = {
aliases = {"Brokpa"},
}
m["sgu"] = {
}
m["sgw"] = {
}
m["sgx"] = {
}
m["sgy"] = {
-- FIXME: Sanglich is the name of the language as used in Tajikistan, while Sanglechi is the name as used in
-- Afghanistan. Hence they could be different dialects, but provisionally I'm classifying them as aliases.
aliases = {"Sanglich"},
-- "Warduji" may not exist at all
}
m["sgz"] = {
}
m["sha"] = {
}
m["shb"] = {
}
m["shc"] = {
}
m["shd"] = {
}
m["she"] = {
}
m["shg"] = {
aliases = {"Shwa", "Shwakhwe"},
}
m["shh"] = {
aliases = {"Shoshoni"},
varieties = {{"Gosiute", "Goshute"}, {"Eastern Shoshone", "Eastern Shoshoni"}, {"Western Shoshone", "Western Shoshoni"}, {"Northern Shoshone", "Northern Shoshoni"}},
}
m["shi"] = {
aliases = {"Tachelhit", "Chleuh", "Shilha", "Tashlhiyt", "Tashelhit Berber", "Tachelhit Berber", "Tashlhiyt Berber", "Soussian"},
}
m["shj"] = {
}
m["shk"] = {
}
m["shl"] = {
}
m["shm"] = {
}
m["shn"] = {
aliases = {"ฉาน", "กว๊ามไต๊", "กำไต", "Shan", "Kwam Tai", "Kam Tai", "Tai Yai"},
}
m["sho"] = {
}
m["shp"] = {
}
m["shq"] = {
}
m["shr"] = {
}
m["shs"] = {
}
m["sht"] = {
}
m["shu"] = {
}
m["shv"] = {
aliases = {"Jibbali"},
}
m["shw"] = {
}
m["shx"] = {
aliases = {"Ho Ne", "Ho Nte"},
}
m["shy"] = {
aliases = {"Shawiya Berber", "Chaouïa", "Tacawit"},
}
m["shz"] = {
}
m["sia"] = {
}
m["sib"] = {
}
m["sid"] = {
aliases = {"Sidamo", "Sidaama"},
}
m["sie"] = {
}
m["sif"] = {
}
m["sig"] = {
}
m["sih"] = {
}
m["sii"] = {
}
m["sij"] = {
}
m["sik"] = {
}
m["sil"] = {
}
m["sim"] = {
aliases = {"Mende", "Mende (New Guinea)"},
}
m["sip"] = {
aliases = {"ภูเตีย", "Sikkimese", "Bhutia", "Dranjongke", "Dranjoke", "Denjongka", "Denzongpeke", "Denzongke"},
}
m["siq"] = {
}
m["sir"] = {
}
m["sis"] = {
}
m["siu"] = {
}
m["siv"] = {
}
m["siw"] = {
}
m["six"] = {
aliases = {"Garia", "Kari"},
}
m["siy"] = {
}
m["siz"] = {
aliases = {"Siwa", "Siwan", "Siwa Berber"},
}
m["sja"] = {
}
m["sjb"] = {
}
m["sjd"] = {
aliases = {"Kildin Sami"},
}
m["sje"] = {
aliases = {"Pite Sami"},
}
m["sjg"] = {
}
m["sjk"] = {
}
m["sjl"] = {
-- Per Wikipedia, these are two languages. There is also a yet more divergent variety Bangru (Northern Miji).
varieties = {
{"Western Miji", "Dmay", "Dhammai", "Dhəmmai", "Sajalang", "Sajolang"},
{"Eastern Miji", "Namrai", "Nəmrai"},
}
}
m["sjm"] = {
}
m["sjn"] = {
aliases = {"Sindarin"},
}
m["sjo"] = {
aliases = {"Sibo", "Sibe", "Xibo"},
}
m["sjp"] = {
}
m["sjr"] = {
}
m["sjs"] = {
}
m["sjt"] = {
}
m["sju"] = {
}
m["sjw"] = {
}
m["ska"] = {
}
m["skb"] = {
aliases = {"Saek"},
}
m["skc"] = {
aliases = {"Sauk"},
}
m["skd"] = {
}
m["ske"] = {
aliases = {"Seke"},
}
m["skf"] = {
aliases = {"Mekens", "Mekem", "Amniapé"},
-- Glottolog refers to the third variety as Siokweriat corresponding to Koarategayat etc.
varieties = {{"Sakirabiá", "Sakïrabiát", "Sakiráp", "Sakurabiat"}, {"Koaratira", "Guaratira", "Kanoé"}, {"Koarategayat", "Guaratégaya", "Guarategaja", "Warategáya"}},
}
m["skh"] = {
}
m["ski"] = {
other_names = {"Sikanese"},
}
m["skj"] = { -- compare 'ths'
}
m["skk"] = {
}
m["skm"] = {
other_names = {"Kutong"},
}
m["skn"] = {
}
m["sko"] = {
}
m["skp"] = {
}
m["skq"] = {
}
m["skr"] = {
other_names = {"Siraiki", "Seraiki"},
}
m["sks"] = {
aliases = {"ไมอา", "มายา", "Maia", "Maya", "Banar", "Pila", "Saki", "Suaro", "Turutap", "Yakiba"},
}
m["skt"] = {
other_names = {"Kisakata", "Lesa", "Odual", "Saka", "Bai", "Kibai", "Bay", "Kibay", "Djia", "Dia", "Dja", "Kidjia", "Wadia", "Tuku", "Ketu", "Batow"},
}
m["sku"] = {
}
m["skv"] = {
}
m["skw"] = {
other_names = {"Skepi Dutch", "Skepi Dutch Creole", "Essequibo Dutch"},
}
m["skx"] = {
}
m["sky"] = {
aliases = {"Sikaiana", "Sikayana"},
}
m["skz"] = {
}
m["slc"] = {
other_names = {"Saliba", "Sáliba", "Saliva", "Sáliva"},
}
m["sld"] = {
}
m["sle"] = {
}
m["slf"] = {
other_names = {"Swiss Italian Sign Language"},
}
m["slg"] = {
}
m["slh"] = {
}
-- "sli" "Silesian German" IS SUBSUMED INTO "gmw-ecg" "East Central German"
m["slj"] = {
}
m["sll"] = {
}
m["slm"] = {
aliases = {"Pangutaran Sama", "Siyama"},
}
m["sln"] = {
}
m["slp"] = {
other_names = {"Solor", "Solorese"},
}
m["slq"] = {
}
m["slr"] = {
aliases = {"Salar"},
}
m["sls"] = {
}
m["slt"] = {
}
m["slu"] = {
}
m["slw"] = {
}
m["slx"] = {
}
m["sly"] = {
}
m["slz"] = {
}
m["sma"] = {
aliases = {"Southern Sami"},
}
m["smb"] = {
}
m["smc"] = {
}
m["smd"] = {
}
m["smf"] = {
}
m["smg"] = {
}
m["smh"] = {
}
m["smj"] = {
aliases = {"Lule Sami"},
}
m["smk"] = {
aliases = {"บีนูโบลีเนา", "Bolinao", "Binubolinao"},
}
m["sml"] = {
aliases = {"Central Sama"},
}
m["smm"] = {
}
m["smn"] = {
aliases = {"Inari Sami"},
}
m["smp"] = {
other_names = {"Samaritan"},
}
m["smq"] = {
}
m["smr"] = {
other_names = {"Simalur", "Devayan", "Defayan", "Simolol", "Simulul", "Simeuloë"},
}
m["sms"] = {
}
m["smt"] = {
}
m["smu"] = {
aliases = {"Somray"},
}
m["smv"] = {
}
m["smw"] = {
}
m["smx"] = {
}
m["smy"] = {
}
m["smz"] = {
}
m["snb"] = {
}
m["snc"] = {
}
m["sne"] = {
}
m["snf"] = {
}
m["sng"] = {
other_names = {"Sanga", "Luba-Sanga", "Sanga (Democratic Republic of Congo)", "Sanga (Democratic Republic of the Congo)"},
}
m["sni"] = {
}
m["snj"] = {
}
m["snk"] = {
}
m["snl"] = {
}
m["snm"] = {
}
m["snn"] = {
}
m["sno"] = {
}
m["snp"] = {
}
m["snq"] = {
other_names = {"Chango"},
}
m["snr"] = {
}
m["sns"] = {
}
m["snu"] = {
}
m["snv"] = {
}
m["snw"] = {
}
m["snx"] = {
}
m["sny"] = {
}
m["snz"] = {
other_names = {"Kow", "Sinsauru", "Asas"},
}
m["soa"] = {
aliases = {"ไทโซ่ง", "ลาวโซ่ง", "Thai Song", "Lao Song", "Song"},
}
m["sob"] = {
}
m["soc"] = {
other_names = {"So"},
}
m["sod"] = {
}
m["soe"] = {
}
m["sog"] = {
}
m["soh"] = {
other_names = {"Aka", "Sillok"},
}
m["soi"] = {
other_names = {"Sonaha", "Sonahaa", "Sunah", "Sunha"},
}
m["sok"] = {
}
m["sol"] = {
}
m["soo"] = {
other_names = {"Songo", "Tsong"},
}
m["sop"] = {
}
m["soq"] = {
}
m["sor"] = {
}
m["sos"] = {
other_names = {"Seeku", "Sembla", "Sambla"},
}
m["sou"] = {
aliases = {"ถิ่นใต้", "ไทยถิ่นใต้", "ตามโพร", "Southern Thai", "Dambro"},
}
m["sov"] = {
}
m["sow"] = {
}
m["sox"] = {
other_names = {"So", "Sso", "Shwo", "Fo"},
}
m["soy"] = {
}
m["soz"] = {
}
m["spb"] = {
other_names = {"Sepa"},
}
m["spc"] = {
other_names = {"Kaliana", "Kariana", "Kaliána", "Sapä́", "Sape"},
}
m["spd"] = {
}
m["spe"] = {
other_names = {"Sepa", "Sepa (Papua New Guinea)"},
}
m["spg"] = {
}
m["spi"] = {
}
m["spk"] = {
}
m["spl"] = {
}
m["spm"] = {
}
m["spn"] = {
}
m["spo"] = {
other_names = {"Montana Salish", "Salish", "Séliš", "Kalispel-Pend d'oreille", "Kalispel"},
}
m["spp"] = {
other_names = {"Suppire", "Supyire Senoufo", "Supyire Senufo", "Shempire Senoufo", "Shempire"},
}
m["spr"] = {
}
m["sps"] = {
}
m["spt"] = {
}
m["spu"] = {
}
m["spv"] = {
other_names = {"Kosali", "Koshali"},
}
m["spx"] = {
other_names = {"Old Sabellic", "Old Sabellian", "Middle Adriatic", "Central Adriatic"},
}
m["spy"] = {
}
m["sqa"] = {
}
m["sqh"] = {
}
m["sqk"] = {
}
m["sqm"] = {
}
m["sqn"] = {
}
m["sqo"] = {
}
m["sqq"] = {
}
m["sqr"] = {
}
m["sqs"] = {
}
m["sqt"] = {
aliases = {"Socotri"},
}
m["squ"] = {
}
m["sra"] = {
}
m["srb"] = {
}
m["sre"] = {
}
m["srf"] = {
}
m["srg"] = {
}
m["srh"] = {
}
m["sri"] = {
}
m["srk"] = {
aliases = {"Serudung"},
}
m["srl"] = {
}
m["srm"] = {
aliases = {"ซารามักกัน", "Saramaccan"},
}
m["srn"] = {
}
m["srq"] = {
}
m["srr"] = {
}
m["srs"] = {
aliases = {"Sarcee", "Sarsi", "Tsuu T'ina", "Tsu T'ina"},
}
m["srt"] = {
}
m["sru"] = {
other_names = {"Paíter", "Suruí-Paíter", "Suruí de Rondônia", "Suruí do Jiparaná"},
}
m["srv"] = {
}
m["srw"] = {
}
m["srx"] = {
}
m["sry"] = {
}
m["srz"] = {
}
m["ssb"] = {
}
m["ssc"] = {
}
m["ssd"] = {
}
m["sse"] = {
}
m["ssf"] = {
other_names = {"Sao"},
}
m["ssg"] = {
}
m["ssh"] = {
}
m["ssi"] = {
other_names = {"Bhilki"},
}
m["ssj"] = {
}
m["ssk"] = {
}
m["ssl"] = {
}
m["ssm"] = {
}
m["sso"] = {
}
m["ssp"] = {
}
m["ssq"] = {
}
m["ssr"] = {
other_names = {"Swiss French Sign Language"},
}
m["sss"] = {
}
m["sst"] = {
}
m["ssu"] = {
}
m["ssv"] = {
}
m["ssx"] = {
}
m["ssy"] = {
aliases = {"Saho"},
}
m["ssz"] = {
}
m["stb"] = {
}
m["std"] = {
}
m["ste"] = {
}
m["stf"] = {
}
m["stg"] = {
}
m["sth"] = {
other_names = {"Cant"},
}
m["sti"] = {
}
m["stj"] = {
}
m["stk"] = {
}
m["stm"] = {
}
m["stn"] = {
}
m["sto"] = {
}
m["stp"] = {
}
m["stq"] = {
aliases = {"Saterland Frisian"},
other_names = {"ฟรีเชียตะวันออก", "East Frisian", "Eastern Frisian"}, -- Saterland F is a dialect of East F; see [[WT:T:ASTQ]]
}
m["str"] = {
}
m["sts"] = {
}
m["stt"] = {
}
m["stu"] = {
}
m["stv"] = {
}
m["stw"] = {
}
m["sty"] = {
}
m["sua"] = {
}
m["sub"] = {
}
m["suc"] = {
}
m["sue"] = {
}
m["sug"] = {
}
m["sui"] = {
}
m["suk"] = {
}
m["suq"] = {
}
m["sur"] = {
other_names = {"Sura", "Mupun"},
}
m["sus"] = {
}
m["sut"] = {
}
m["suv"] = {
}
m["suw"] = {
}
m["sux"] = {
aliases = {"ซูเมเรียน", "สุเมเรียน", "Sumerian"},
}
m["suy"] = {
}
m["suz"] = {
}
m["sva"] = {
}
m["svb"] = {
}
m["svc"] = {
}
m["sve"] = {
}
m["svk"] = {
}
m["svm"] = {
aliases = {"Slavo-molisano", "Molise Slavic", "Molise Croatian"},
}
m["svs"] = {
}
m["svx"] = {
}
m["swb"] = {
}
m["swf"] = {
}
m["swg"] = {
}
m["swi"] = {
aliases = {"Sui", "Ai Sui", "Shui", "Sui Li", "Suipo"},
}
m["swj"] = {
}
m["swl"] = {
}
m["swm"] = {
}
m["swn"] = {
other_names = {"Sawknah", "Fezzan", "Fogaha"},
}
m["swo"] = {
}
m["swp"] = {
}
m["swq"] = {
}
m["swr"] = {
}
m["sws"] = {
}
m["swt"] = {
}
m["swu"] = {
}
m["sww"] = {
}
m["swx"] = {
other_names = {"Zuruahá", "Suruaha", "Suruwaha", "Zuruaha", "Índios do Coxodoá"},
}
m["swy"] = {
}
m["sxb"] = {
}
m["sxc"] = {
}
m["sxe"] = {
}
m["sxg"] = {
other_names = {"Shuhi", "Xumi"},
}
m["sxk"] = {
}
m["sxl"] = {
other_names = {"Selian"},
}
m["sxm"] = {
aliases = {"ซัมเร", "สำเร", "Samre"},
}
m["sxn"] = {
}
m["sxo"] = {
}
m["sxr"] = {
}
m["sxs"] = {
}
-- "sxu" "Upper Saxon" IS SUBSUMED INTO "gmw-ecg" "East Central German"
m["sxw"] = {
}
m["sya"] = {
}
m["syb"] = {
}
m["syc"] = {
aliases = {"Classical Syriac"},
}
m["syi"] = {
}
m["syk"] = {
}
m["syl"] = {
aliases = {"สิเลฏิ", "สิเลฏี", "สิลอฏิ", "Sylheti"},
}
m["sym"] = {
}
m["syn"] = {
}
m["syo"] = {
}
m["sys"] = {
}
m["syw"] = {
aliases = {"Syuba"},
}
m["syx"] = {
other_names = {"Shamay", "Samayi", "Samay", "Shamayi"},
}
m["syy"] = {
}
m["sza"] = {
}
m["szb"] = {
}
m["szc"] = {
}
m["szd"] = {
}
m["sze"] = {
}
m["szg"] = {
}
m["szl"] = {
aliases = {"โปแลนด์แบบไซลีเซีย", "Silesian", "Upper Silesian", "Silesian Polish", "Upper Silesian Polish"},
}
m["szn"] = {
}
m["szp"] = {
other_names = {"Inanwatan"},
}
m["szv"] = {
other_names = {"Isu", "Isu (Fako Division)", "Isuwu", "Suwu", "Subu"},
}
m["szw"] = {
other_names = {"Weda", "Weda-Sawai", "Kobe", "Faya-Mafa", "Messa-Dote"},
}
m["szy"] = {
aliases = {"Sakizaya"},
}
return m
0gd8lqte4a02v4oigkx86ya1lw5iiox
5729124
5729120
2026-07-20T02:32:10Z
Octahedron80
267
5729124
Scribunto
text/plain
local m = {}
m["saa"] = {
}
m["sab"] = {
aliases = {"Bugle", "Murire", "Muoy"},
varieties = {"Sabanero", {"Bokotá", "Bogota"}},
}
m["sac"] = {
varieties = {{"Sac", "Sauk"}, "Kickapoo", {"Mesquakie", "Meskwaki"}},
}
m["sad"] = {
}
m["sae"] = {
}
m["saf"] = {
}
m["sah"] = {
aliases = {"ยาคุต", "Yakut", "Sakha"},
}
m["saj"] = {
}
m["sak"] = {
aliases = {"Shake"},
}
m["sam"] = {
aliases = {"Samaritan"},
}
m["sao"] = {
}
m["saq"] = {
}
m["sar"] = {
aliases = {"Sarabeca", "Saraveka", "Sarave"},
}
m["sas"] = {
}
m["sat"] = {
aliases = {"สันถัล", "Santali"},
}
m["sau"] = {
}
m["sav"] = {
}
m["saw"] = {
}
m["sax"] = {
aliases = {"Saa"},
}
m["say"] = {
}
m["saz"] = {
}
m["sba"] = {
}
m["sbb"] = {
}
m["sbc"] = {
aliases = {"Kele (New Guinea)", "Kele (Papua New Guinea)", "Kele"},
}
m["sbd"] = {
}
m["sbe"] = {
aliases = {"Saliba"},
}
m["sbf"] = {
aliases = {"Mikeyir", "Mekeyir", "Mekeyer"},
}
m["sbg"] = {
}
m["sbh"] = {
-- I'm guessing these are varieties, since they represent the names of the two islands on which the language
-- (Sori-Harengan) is spoken.
varieties = {"Sori", "Harengan"},
}
m["sbi"] = {
}
m["sbj"] = {
}
m["sbk"] = {
}
m["sbl"] = {
}
m["sbm"] = {
}
m["sbn"] = {
}
m["sbo"] = {
}
m["sbp"] = {
}
m["sbq"] = {
}
m["sbr"] = {
}
m["sbs"] = {
}
m["sbt"] = {
}
m["sbu"] = {
}
m["sbv"] = {
}
m["sbw"] = {
}
m["sbx"] = {
}
m["sby"] = {
}
m["sbz"] = {
}
m["scb"] = {
}
m["sce"] = {
aliases = {"ซันตา", "Dongxiang", "Santa"},
}
m["scf"] = {
}
m["scg"] = {
}
m["sch"] = {
-- Alias vs. variety here is a guess; Wikipedia says "Sakachep also known as Khelma" and says the ethnicity is
-- "The Khelma, also known as the Sakachep" but Ethnologue also says "dialects are Khelma, Thangachep, and Sakachep"
-- which may be bogus.
aliases = {"Khelma"},
}
m["sci"] = {
}
m["sck"] = {
}
m["scl"] = {
-- These represent different valleys where the language is spoken, hence likely distinct dialects.
varieties = {"Gilgiti", "Astori", "Chilasi"},
}
m["scn"] = {
aliases = {"Sicilian"},
}
m["sco"] = {
aliases = {"สก็อต", "สกอตส์", "สก็อตส์", "Scots", "Lowland Scots"},
}
m["scp"] = {
aliases = {"Hyolmo", "Yohlmo", "Helambu Sherpa"},
-- Wikipedia says Syuba/Kagate (code skw) may be close enough to be a dialect. Langtang is mutually intelligible
-- with Yolmo but often considered a separate language; yet we don't have a code for it so I'm putting it as a
-- variety.
varieties = {"Melamchi Valley Yolmo", "Langtang", "Lamjung Yolmo", "Ilam Yolmo"},
}
m["scq"] = {
aliases = {"Sa'och", "Chung"},
}
m["scs"] = {
}
m["scu"] = {
}
m["scv"] = {
}
m["scw"] = {
}
m["scx"] = {
}
m["sda"] = {
}
m["sdb"] = {
aliases = {"Shabaki"},
}
m["sdc"] = {
aliases = {"Sassarese"},
}
m["sde"] = {
}
m["sdf"] = {
aliases = {"Sarliya"},
}
m["sdg"] = {
}
m["sdh"] = {
-- Kermanshahi can refer either to Southern Kurdish as a whole or to the prestige dialect. We distinct the latter
-- as Kermanshani with an n following ''Habib Borjian, “KERMANSHAH vii. Languages and Dialects,” Encyclopædia
-- Iranica, Vol. 16, Fasc. 3, New York, 2017, pp. 327-331.'' but this may not make a lot of sense.
aliases = {"Kermanshahi", "Kermanshahi Kurdish"},
-- We classify Laki as a separate language but it is often considered a dialect of Southern Kurdish.
varieties = {{"Kermanshani", "Kermanshani Kurdish"}, {"Kolya'i", "Kolyā'i"}, "Zangana", "Kalhori", {"Sanjābi", "Sanjabi"}, {"Feyli", "Fayli", "Ilāmi", "Ilami"}},
}
m["sdj"] = {
}
m["sdk"] = {
}
m["sdl"] = {
}
m["sdm"] = {
}
m["sdn"] = {
}
m["sdo"] = {
aliases = {"Bukar-Sadong"},
}
m["sdp"] = {
}
m["sdr"] = {
}
m["sds"] = {
aliases = {"Tunisian Berber"},
}
m["sdu"] = {
}
m["sdx"] = {
}
m["sea"] = {
aliases = {"Semai"},
}
-- seb is a duplicate code of spp
m["sec"] = {
}
m["sed"] = {
}
m["see"] = {
}
m["sef"] = {
}
m["seg"] = {
}
m["seh"] = {
varieties = {{"Malawi Sena", "Malawian Sena"}, {"Nuclear Sena", "Mozambican Sena"}}, -- includes [swk] for Malawian Sena, but [bwg] for Barwe is distinct
}
m["sei"] = {
}
m["sej"] = {
}
m["sek"] = {
aliases = {"Tsek'ene"},
varieties = {{"Kwadacha", "Kwadacha Sekani", "Kwadacha Tsek'ene"}},
}
m["sen"] = {
}
m["seo"] = {
}
m["sep"] = {
}
m["seq"] = {
}
m["ser"] = {
-- Wikipedia treats Kitanemuk as a separate language but it says it may have been a dialect (it is extinct).
varieties = {"Kitanemuk"},
}
m["ses"] = {
aliases = {"Koyraboro Senni Songhay", "Koyraboro Senni Songhai", "Koroboro Senni"},
-- other_names = {"Eastern Songhay"}, -- this is a geographic grouping of Songhay languages including Koyraboro Senni
}
m["set"] = {
}
m["seu"] = {
}
m["sev"] = {
}
m["sew"] = {
}
m["sey"] = {
}
m["sez"] = {
aliases = {"Senthang"},
}
m["sfb"] = {
}
m["sfe"] = {
}
m["sfm"] = {
}
m["sfs"] = {
}
m["sfw"] = {
}
m["sga"] = {
aliases = {"Old Irish"},
}
m["sgb"] = {
}
m["sgc"] = {
}
m["sgd"] = {
aliases = {"Surigaonon"},
}
m["sge"] = {
}
m["sgg"] = {
aliases = {"Swiss German Sign Language"},
}
m["sgh"] = {
}
m["sgi"] = {
}
m["sgk"] = {
}
m["sgm"] = {
}
m["sgp"] = {
}
m["sgr"] = {
aliases = {"Sangsari"},
}
m["sgs"] = {
}
m["sgt"] = {
aliases = {"Brokpa"},
}
m["sgu"] = {
}
m["sgw"] = {
}
m["sgx"] = {
}
m["sgy"] = {
-- FIXME: Sanglich is the name of the language as used in Tajikistan, while Sanglechi is the name as used in
-- Afghanistan. Hence they could be different dialects, but provisionally I'm classifying them as aliases.
aliases = {"Sanglich"},
-- "Warduji" may not exist at all
}
m["sgz"] = {
}
m["sha"] = {
}
m["shb"] = {
}
m["shc"] = {
}
m["shd"] = {
}
m["she"] = {
}
m["shg"] = {
aliases = {"Shwa", "Shwakhwe"},
}
m["shh"] = {
aliases = {"Shoshoni"},
varieties = {{"Gosiute", "Goshute"}, {"Eastern Shoshone", "Eastern Shoshoni"}, {"Western Shoshone", "Western Shoshoni"}, {"Northern Shoshone", "Northern Shoshoni"}},
}
m["shi"] = {
aliases = {"Tachelhit", "Chleuh", "Shilha", "Tashlhiyt", "Tashelhit Berber", "Tachelhit Berber", "Tashlhiyt Berber", "Soussian"},
}
m["shj"] = {
}
m["shk"] = {
}
m["shl"] = {
}
m["shm"] = {
}
m["shn"] = {
aliases = {"ฉาน", "กว๊ามไต๊", "กำไต", "Shan", "Kwam Tai", "Kam Tai", "Tai Yai"},
}
m["sho"] = {
}
m["shp"] = {
}
m["shq"] = {
}
m["shr"] = {
}
m["shs"] = {
}
m["sht"] = {
}
m["shu"] = {
}
m["shv"] = {
aliases = {"Jibbali"},
}
m["shw"] = {
}
m["shx"] = {
aliases = {"Ho Ne", "Ho Nte"},
}
m["shy"] = {
aliases = {"Shawiya Berber", "Chaouïa", "Tacawit"},
}
m["shz"] = {
}
m["sia"] = {
}
m["sib"] = {
}
m["sid"] = {
aliases = {"Sidamo", "Sidaama"},
}
m["sie"] = {
}
m["sif"] = {
}
m["sig"] = {
}
m["sih"] = {
}
m["sii"] = {
}
m["sij"] = {
}
m["sik"] = {
}
m["sil"] = {
}
m["sim"] = {
aliases = {"Mende", "Mende (New Guinea)"},
}
m["sip"] = {
aliases = {"ภูเตีย", "Sikkimese", "Bhutia", "Dranjongke", "Dranjoke", "Denjongka", "Denzongpeke", "Denzongke"},
}
m["siq"] = {
}
m["sir"] = {
}
m["sis"] = {
}
m["siu"] = {
}
m["siv"] = {
}
m["siw"] = {
}
m["six"] = {
aliases = {"Garia", "Kari"},
}
m["siy"] = {
}
m["siz"] = {
aliases = {"Siwa", "Siwan", "Siwa Berber"},
}
m["sja"] = {
}
m["sjb"] = {
}
m["sjd"] = {
aliases = {"Kildin Sami"},
}
m["sje"] = {
aliases = {"Pite Sami"},
}
m["sjg"] = {
}
m["sjk"] = {
}
m["sjl"] = {
-- Per Wikipedia, these are two languages. There is also a yet more divergent variety Bangru (Northern Miji).
varieties = {
{"Western Miji", "Dmay", "Dhammai", "Dhəmmai", "Sajalang", "Sajolang"},
{"Eastern Miji", "Namrai", "Nəmrai"},
}
}
m["sjm"] = {
}
m["sjn"] = {
aliases = {"Sindarin"},
}
m["sjo"] = {
aliases = {"Sibo", "Sibe", "Xibo"},
}
m["sjp"] = {
}
m["sjr"] = {
}
m["sjs"] = {
}
m["sjt"] = {
}
m["sju"] = {
}
m["sjw"] = {
}
m["ska"] = {
}
m["skb"] = {
aliases = {"Saek"},
}
m["skc"] = {
aliases = {"Sauk"},
}
m["skd"] = {
}
m["ske"] = {
aliases = {"Seke"},
}
m["skf"] = {
aliases = {"Mekens", "Mekem", "Amniapé"},
-- Glottolog refers to the third variety as Siokweriat corresponding to Koarategayat etc.
varieties = {{"Sakirabiá", "Sakïrabiát", "Sakiráp", "Sakurabiat"}, {"Koaratira", "Guaratira", "Kanoé"}, {"Koarategayat", "Guaratégaya", "Guarategaja", "Warategáya"}},
}
m["skh"] = {
}
m["ski"] = {
other_names = {"Sikanese"},
}
m["skj"] = { -- compare 'ths'
}
m["skk"] = {
}
m["skm"] = {
other_names = {"Kutong"},
}
m["skn"] = {
}
m["sko"] = {
}
m["skp"] = {
}
m["skq"] = {
}
m["skr"] = {
other_names = {"Siraiki", "Seraiki"},
}
m["sks"] = {
aliases = {"ไมอา", "มายา", "Maia", "Maya", "Banar", "Pila", "Saki", "Suaro", "Turutap", "Yakiba"},
}
m["skt"] = {
other_names = {"Kisakata", "Lesa", "Odual", "Saka", "Bai", "Kibai", "Bay", "Kibay", "Djia", "Dia", "Dja", "Kidjia", "Wadia", "Tuku", "Ketu", "Batow"},
}
m["sku"] = {
}
m["skv"] = {
}
m["skw"] = {
other_names = {"Skepi Dutch", "Skepi Dutch Creole", "Essequibo Dutch"},
}
m["skx"] = {
}
m["sky"] = {
aliases = {"Sikaiana", "Sikayana"},
}
m["skz"] = {
}
m["slc"] = {
other_names = {"Saliba", "Sáliba", "Saliva", "Sáliva"},
}
m["sld"] = {
}
m["sle"] = {
}
m["slf"] = {
other_names = {"Swiss Italian Sign Language"},
}
m["slg"] = {
}
m["slh"] = {
}
-- "sli" "Silesian German" IS SUBSUMED INTO "gmw-ecg" "East Central German"
m["slj"] = {
}
m["sll"] = {
}
m["slm"] = {
aliases = {"Pangutaran Sama", "Siyama"},
}
m["sln"] = {
}
m["slp"] = {
other_names = {"Solor", "Solorese"},
}
m["slq"] = {
}
m["slr"] = {
aliases = {"Salar"},
}
m["sls"] = {
}
m["slt"] = {
}
m["slu"] = {
}
m["slw"] = {
}
m["slx"] = {
}
m["sly"] = {
}
m["slz"] = {
}
m["sma"] = {
aliases = {"Southern Sami"},
}
m["smb"] = {
}
m["smc"] = {
}
m["smd"] = {
}
m["smf"] = {
}
m["smg"] = {
}
m["smh"] = {
}
m["smj"] = {
aliases = {"Lule Sami"},
}
m["smk"] = {
aliases = {"บีนูโบลีเนา", "Bolinao", "Binubolinao"},
}
m["sml"] = {
aliases = {"Central Sama"},
}
m["smm"] = {
}
m["smn"] = {
aliases = {"Inari Sami"},
}
m["smp"] = {
other_names = {"Samaritan"},
}
m["smq"] = {
}
m["smr"] = {
other_names = {"Simalur", "Devayan", "Defayan", "Simolol", "Simulul", "Simeuloë"},
}
m["sms"] = {
}
m["smt"] = {
}
m["smu"] = {
aliases = {"Somray"},
}
m["smv"] = {
}
m["smw"] = {
}
m["smx"] = {
}
m["smy"] = {
}
m["smz"] = {
}
m["snb"] = {
}
m["snc"] = {
}
m["sne"] = {
}
m["snf"] = {
}
m["sng"] = {
other_names = {"Sanga", "Luba-Sanga", "Sanga (Democratic Republic of Congo)", "Sanga (Democratic Republic of the Congo)"},
}
m["sni"] = {
}
m["snj"] = {
}
m["snk"] = {
}
m["snl"] = {
}
m["snm"] = {
}
m["snn"] = {
}
m["sno"] = {
}
m["snp"] = {
}
m["snq"] = {
other_names = {"Chango"},
}
m["snr"] = {
}
m["sns"] = {
}
m["snu"] = {
}
m["snv"] = {
}
m["snw"] = {
}
m["snx"] = {
}
m["sny"] = {
}
m["snz"] = {
other_names = {"Kow", "Sinsauru", "Asas"},
}
m["soa"] = {
aliases = {"ไทโซ่ง", "ลาวโซ่ง", "Thai Song", "Lao Song", "Song"},
}
m["sob"] = {
}
m["soc"] = {
other_names = {"So"},
}
m["sod"] = {
}
m["soe"] = {
}
m["sog"] = {
}
m["soh"] = {
other_names = {"Aka", "Sillok"},
}
m["soi"] = {
other_names = {"Sonaha", "Sonahaa", "Sunah", "Sunha"},
}
m["sok"] = {
}
m["sol"] = {
}
m["soo"] = {
other_names = {"Songo", "Tsong"},
}
m["sop"] = {
}
m["soq"] = {
}
m["sor"] = {
}
m["sos"] = {
other_names = {"Seeku", "Sembla", "Sambla"},
}
m["sou"] = {
aliases = {"ถิ่นใต้", "ไทยถิ่นใต้", "ตามโพร", "Southern Thai", "Dambro"},
}
m["sov"] = {
}
m["sow"] = {
}
m["sox"] = {
other_names = {"So", "Sso", "Shwo", "Fo"},
}
m["soy"] = {
}
m["soz"] = {
}
m["spb"] = {
other_names = {"Sepa"},
}
m["spc"] = {
other_names = {"Kaliana", "Kariana", "Kaliána", "Sapä́", "Sape"},
}
m["spd"] = {
}
m["spe"] = {
other_names = {"Sepa", "Sepa (Papua New Guinea)"},
}
m["spg"] = {
}
m["spi"] = {
}
m["spk"] = {
}
m["spl"] = {
}
m["spm"] = {
}
m["spn"] = {
}
m["spo"] = {
other_names = {"Montana Salish", "Salish", "Séliš", "Kalispel-Pend d'oreille", "Kalispel"},
}
m["spp"] = {
other_names = {"Suppire", "Supyire Senoufo", "Supyire Senufo", "Shempire Senoufo", "Shempire"},
}
m["spr"] = {
}
m["sps"] = {
}
m["spt"] = {
}
m["spu"] = {
}
m["spv"] = {
other_names = {"Kosali", "Koshali"},
}
m["spx"] = {
other_names = {"Old Sabellic", "Old Sabellian", "Middle Adriatic", "Central Adriatic"},
}
m["spy"] = {
}
m["sqa"] = {
}
m["sqh"] = {
}
m["sqk"] = {
}
m["sqm"] = {
}
m["sqn"] = {
}
m["sqo"] = {
}
m["sqq"] = {
}
m["sqr"] = {
}
m["sqs"] = {
}
m["sqt"] = {
aliases = {"Socotri"},
}
m["squ"] = {
}
m["sra"] = {
}
m["srb"] = {
}
m["sre"] = {
}
m["srf"] = {
}
m["srg"] = {
}
m["srh"] = {
}
m["sri"] = {
}
m["srk"] = {
aliases = {"Serudung"},
}
m["srl"] = {
}
m["srm"] = {
aliases = {"ซารามักกัน", "Saramaccan"},
}
m["srn"] = {
aliases = {"Sranan Tongo"},
}
m["srq"] = {
}
m["srr"] = {
}
m["srs"] = {
aliases = {"Sarcee", "Sarsi", "Tsuu T'ina", "Tsu T'ina"},
}
m["srt"] = {
}
m["sru"] = {
other_names = {"Paíter", "Suruí-Paíter", "Suruí de Rondônia", "Suruí do Jiparaná"},
}
m["srv"] = {
}
m["srw"] = {
}
m["srx"] = {
}
m["sry"] = {
}
m["srz"] = {
}
m["ssb"] = {
}
m["ssc"] = {
}
m["ssd"] = {
}
m["sse"] = {
}
m["ssf"] = {
other_names = {"Sao"},
}
m["ssg"] = {
}
m["ssh"] = {
}
m["ssi"] = {
other_names = {"Bhilki"},
}
m["ssj"] = {
}
m["ssk"] = {
}
m["ssl"] = {
}
m["ssm"] = {
}
m["sso"] = {
}
m["ssp"] = {
}
m["ssq"] = {
}
m["ssr"] = {
other_names = {"Swiss French Sign Language"},
}
m["sss"] = {
}
m["sst"] = {
}
m["ssu"] = {
}
m["ssv"] = {
}
m["ssx"] = {
}
m["ssy"] = {
aliases = {"Saho"},
}
m["ssz"] = {
}
m["stb"] = {
}
m["std"] = {
}
m["ste"] = {
}
m["stf"] = {
}
m["stg"] = {
}
m["sth"] = {
other_names = {"Cant"},
}
m["sti"] = {
}
m["stj"] = {
}
m["stk"] = {
}
m["stm"] = {
}
m["stn"] = {
}
m["sto"] = {
}
m["stp"] = {
}
m["stq"] = {
aliases = {"Saterland Frisian"},
other_names = {"ฟรีเชียตะวันออก", "East Frisian", "Eastern Frisian"}, -- Saterland F is a dialect of East F; see [[WT:T:ASTQ]]
}
m["str"] = {
}
m["sts"] = {
}
m["stt"] = {
}
m["stu"] = {
}
m["stv"] = {
}
m["stw"] = {
}
m["sty"] = {
}
m["sua"] = {
}
m["sub"] = {
}
m["suc"] = {
}
m["sue"] = {
}
m["sug"] = {
}
m["sui"] = {
}
m["suk"] = {
}
m["suq"] = {
}
m["sur"] = {
other_names = {"Sura", "Mupun"},
}
m["sus"] = {
}
m["sut"] = {
}
m["suv"] = {
}
m["suw"] = {
}
m["sux"] = {
aliases = {"ซูเมเรียน", "สุเมเรียน", "Sumerian"},
}
m["suy"] = {
}
m["suz"] = {
}
m["sva"] = {
}
m["svb"] = {
}
m["svc"] = {
}
m["sve"] = {
}
m["svk"] = {
}
m["svm"] = {
aliases = {"Slavo-molisano", "Molise Slavic", "Molise Croatian"},
}
m["svs"] = {
}
m["svx"] = {
}
m["swb"] = {
}
m["swf"] = {
}
m["swg"] = {
}
m["swi"] = {
aliases = {"Sui", "Ai Sui", "Shui", "Sui Li", "Suipo"},
}
m["swj"] = {
}
m["swl"] = {
}
m["swm"] = {
}
m["swn"] = {
other_names = {"Sawknah", "Fezzan", "Fogaha"},
}
m["swo"] = {
}
m["swp"] = {
}
m["swq"] = {
}
m["swr"] = {
}
m["sws"] = {
}
m["swt"] = {
}
m["swu"] = {
}
m["sww"] = {
}
m["swx"] = {
other_names = {"Zuruahá", "Suruaha", "Suruwaha", "Zuruaha", "Índios do Coxodoá"},
}
m["swy"] = {
}
m["sxb"] = {
}
m["sxc"] = {
}
m["sxe"] = {
}
m["sxg"] = {
other_names = {"Shuhi", "Xumi"},
}
m["sxk"] = {
}
m["sxl"] = {
other_names = {"Selian"},
}
m["sxm"] = {
aliases = {"ซัมเร", "สำเร", "Samre"},
}
m["sxn"] = {
}
m["sxo"] = {
}
m["sxr"] = {
}
m["sxs"] = {
}
-- "sxu" "Upper Saxon" IS SUBSUMED INTO "gmw-ecg" "East Central German"
m["sxw"] = {
}
m["sya"] = {
}
m["syb"] = {
}
m["syc"] = {
aliases = {"Classical Syriac"},
}
m["syi"] = {
}
m["syk"] = {
}
m["syl"] = {
aliases = {"สิเลฏิ", "สิเลฏี", "สิลอฏิ", "Sylheti"},
}
m["sym"] = {
}
m["syn"] = {
}
m["syo"] = {
}
m["sys"] = {
}
m["syw"] = {
aliases = {"Syuba"},
}
m["syx"] = {
other_names = {"Shamay", "Samayi", "Samay", "Shamayi"},
}
m["syy"] = {
}
m["sza"] = {
}
m["szb"] = {
}
m["szc"] = {
}
m["szd"] = {
}
m["sze"] = {
}
m["szg"] = {
}
m["szl"] = {
aliases = {"โปแลนด์แบบไซลีเซีย", "Silesian", "Upper Silesian", "Silesian Polish", "Upper Silesian Polish"},
}
m["szn"] = {
}
m["szp"] = {
other_names = {"Inanwatan"},
}
m["szv"] = {
other_names = {"Isu", "Isu (Fako Division)", "Isuwu", "Suwu", "Subu"},
}
m["szw"] = {
other_names = {"Weda", "Weda-Sawai", "Kobe", "Faya-Mafa", "Messa-Dote"},
}
m["szy"] = {
aliases = {"Sakizaya"},
}
return m
h6weror6ug25p17s7pdrvssczgnfo3k
มอดูล:languages/data/3/r/extra
828
312297
5729383
5726941
2026-07-20T07:42:23Z
Octahedron80
267
5729383
Scribunto
text/plain
local m = {}
m["raa"] = {
}
m["rab"] = {
other_names = {"Chamlinge", "Rodong", "Camling"},
}
m["rac"] = {
}
m["rad"] = {
aliases = {"Rade", "Rhade"},
}
m["raf"] = {
}
m["rag"] = {
other_names = {"Logoli", "Ragoli"},
}
m["rah"] = {
other_names = {"Maituri", "Rongdani", "Rava"},
}
m["rai"] = {
other_names = {"Ramoaina", "Ramuaaina", "Ramuaina", "Duke of York", "Aalawa", "Aalawaa", "Alawa", "Mioko"},
}
m["rak"] = {
other_names = {"Tulu", "Bohuai"},
}
m["ral"] = {
}
m["ram"] = {
other_names = {"Krahô", "Canela-Krahô"},
}
m["ran"] = {
other_names = {"Kimaam"},
}
m["rao"] = {
}
m["rap"] = {
aliases = {"ราปานุย", "Rapa Nui", "Rapanui", "Pascuense"},
}
m["raq"] = {
}
m["rar"] = {
aliases = {"Rarotongan", "มาวรีแบบหมู่เกาะคุก", "Cook Islands Maori", "Cook Islands Māori"},
}
m["ras"] = {
other_names = {"Tingal", "Tagale", "Tegele", "Tekele", "Togole", "Rashad", "Gom", "Kom"},
}
m["rat"] = {
}
m["rau"] = {
}
m["rav"] = {
}
m["raw"] = {
aliases = {"ราวาง", "Rawang"},
}
m["rax"] = {
}
m["ray"] = {
}
m["raz"] = {
}
m["rbb"] = {
}
m["rbk"] = {
other_names = {"Northern Bontok"},
}
m["rbl"] = {
}
m["rcf"] = {
}
m["rdb"] = {
}
m["rea"] = {
}
m["reb"] = {
}
m["ree"] = {
other_names = {"Lisum", "Ma'aging", "Long Badan", "Uma Daro", "Long Kehobo", "Uma Poh", "Uma Juman", "Long Murun", "Long Geng", "Lemena"},
}
m["reg"] = {
}
m["rei"] = {
}
m["rej"] = {
other_names = {"Rejangese"},
}
m["rel"] = {
}
m["rem"] = {
}
m["ren"] = {
}
m["rer"] = {
}
m["res"] = {
}
m["ret"] = {
other_names = {"Reta"},
}
m["rey"] = {
}
m["rga"] = {
}
m["rge"] = {
aliases = {"Romani Greek", "Hellenoromani"},
}
m["rgk"] = {
}
m["rgn"] = {
aliases = {"Romagnol", "Romagnolo"},
}
m["rgr"] = {
}
m["rgs"] = {
}
m["rgu"] = {
}
m["rhg"] = {
aliases = {"โรฮิงญา", "โรฮิงยา", "Rohingya"},
}
m["rhp"] = {
}
m["ria"] = {
other_names = {"Riang"},
}
m["rif"] = {
aliases = {"ตะริฟิต", "ริเฟียน", "ริฟเฟียน", "Tarifit", "Rifian", "Riffian", "Tamazight"},
}
m["ril"] = {
}
m["rim"] = {
}
m["rin"] = {
}
m["rir"] = {
}
m["rit"] = {
other_names = {"Ritharrŋu", "Ritharngu"},
}
m["riu"] = {
}
m["rjg"] = {
}
m["rji"] = {
}
m["rjs"] = {
aliases = {"ราชวังศี", "Rajbanshi"},
}
m["rka"] = {
}
m["rkb"] = {
other_names = {"Erikbatsa", "Aripaktsa", "Erikpatsa"},
}
m["rkh"] = {
}
m["rki"] = {
aliases = {"อาระกัน", "Rakhine", "Arakanese", "Ramree", "Yangbye", "Thandwe", "Chaungtha"},
}
m["rkm"] = {
}
m["rkt"] = {
other_names = {"Rangpuri"},
}
m["rkw"] = {
}
m["rma"] = {
}
m["rmb"] = {
}
m["rmc"] = {
}
m["rmd"] = {
}
m["rme"] = {
}
m["rmf"] = {
}
m["rmg"] = {
}
m["rmh"] = {
}
m["rmi"] = {
}
m["rmk"] = {
}
m["rml"] = {
}
m["rmm"] = {
}
m["rmn"] = {
}
m["rmo"] = {
other_names = {"Sinti Romani", "Sinti-Manouche", "Sinti"},
}
m["rmp"] = {
}
m["rmq"] = {
}
m["rms"] = {
}
m["rmt"] = {
}
m["rmu"] = {
}
m["rmv"] = {
}
m["rmw"] = {
other_names = {"Welsh Romany", "Kååle"},
}
m["rmx"] = {
}
m["rmy"] = {
}
m["rmz"] = {
}
m["rnd"] = {
aliases = {"Ruund", "Northern Lunda", "Uruund"},
}
m["rng"] = {
other_names = {"Xironga"},
}
m["rnl"] = {
}
m["rnn"] = {
}
m["rnp"] = {
}
m["rnw"] = {
}
m["rob"] = {
}
m["roc"] = {
}
m["rod"] = {
}
m["roe"] = {
}
m["rof"] = {
}
m["rog"] = {
}
m["rol"] = {
}
m["rom"] = {
aliases = {"ยิปซี", "Romani", "Gypsy"},
}
m["roo"] = {
}
m["rop"] = {
aliases = {"Kriol"},
}
m["ror"] = {
}
m["rou"] = {
}
m["row"] = {
}
m["rpn"] = {
}
m["rpt"] = {
}
m["rri"] = {
}
m["rro"] = {
}
m["rrt"] = {
}
m["rsb"] = {
}
m["rsl"] = {
aliases = {"Russian Sign Language"},
}
m["rsk"] = {
aliases = {"พันโนเนีย", "Pannonian Rusyn", "Pannonian", "Rusyn", "Ruthenian"},
}
m["rsm"] = {
}
m["rtc"] = {
other_names = {"Rungtu Chin", "Thaungtha"},
}
m["rth"] = {
}
m["rtm"] = {
}
m["rtw"] = {
}
m["rub"] = {
}
m["ruc"] = {
}
m["rue"] = {
aliases = {"คาร์พาเทีย", "Carpathian Rusyn", "Carpathian", "Rusyn", "Ruthenian", "Carpatho-Rusyn"},
}
m["ruf"] = {
}
m["rug"] = {
}
m["ruh"] = {
}
m["rui"] = {
}
m["ruk"] = {
}
m["ruo"] = {
aliases = {"Istro-Romanian"},
}
m["rup"] = {
}
m["ruq"] = {
}
m["rut"] = {
}
m["ruu"] = {
}
m["ruy"] = {
other_names = {"Mala"},
}
m["ruz"] = {
}
m["rwa"] = {
}
m["rwk"] = {
}
m["rwm"] = {
}
m["rwo"] = {
}
m["rxd"] = {
}
m["rxw"] = {
}
m["ryn"] = {
aliases = {"Northern Amami-Oshima"},
}
m["rys"] = {
aliases = {"Yaeyama"},
}
m["ryu"] = {
aliases = {"Okinawan"},
}
m["rzh"] = {
other_names = {"Rāziḥī", "Jabal Razih"},
}
return m
0ole6vj0w9n1h4ishxka7yba4kt37hz
มอดูล:es-verb
828
314624
5729353
5713274
2026-07-20T07:29:55Z
Octahedron80
267
5729353
Scribunto
text/plain
local export = {}
--[=[
Authorship: Ben Wing <benwing2>
]=]
--[=[
TERMINOLOGY:
-- "slot" = A particular combination of tense/mood/person/number/etc.
Example slot names for verbs are "pres_1s" (present indicative first-person singular), "pres_sub_2sv" (present
subjunctive second-person singular voseo form) "impf_sub_ra_3p" (imperfect subjunctive -ra form third-person
plural), "imp_1p_comb_lo" (imperative first-person plural combined with clitic [[lo]]).
Each slot is filled with zero or more forms.
-- "form" = The conjugated Spanish form representing the value of a given slot.
-- "lemma" = The dictionary form of a given Spanish term. For Spanish, always the infinitive.
]=]
--[=[
FIXME:
1. Implement no_pres_stressed for aterir, garantir. (NOTE: Per RAE, garantir used in all forms in Argentina/Uruguay.) [DONE]
2. Support concluyo. [DONE]
3. Fixes for veo -> ve vs. preveo -> prevé. [DONE]
4. Various more irregular verbs, e.g. predecir, redecir, bendecir, maldecir. [DONE]
5. Raising of e -> i, o -> u before -iendo, -ió, etc. occurs only in -ir verbs. [DONE]
6. Raising of e -> i, o -> u happens before subjunctive -amos, -áis in -ir verbs. [DONE]
7. Implement reflexive verbs. [DONE]
8. Implement categories. [DONE]
9. Implement show_forms. [DONE]
10. Reconcile stems.vowel_alt from irregular verbs with vowel_alt from indicators. May require
moving the irregular-verb handling code in construct_stems() into detect_indicator_spec(). [DONE]
11. Implement make_table. [DONE]
12. Vowel alternation should show u-ue (jugar), i-ie (adquirir), e-í (reír) alternations specially. [DONE]
13. Handle linking of multiword forms as is done in [[Module:es-headword]]. [DONE]
14. Implement comparison against previous module. [DONE]
15. Implement categorization of irregularities for individual tenses.
16. Support nocomb=1. [DONE]
17. (Possibly) display irregular forms in a different color, as with the old module.
18. (Possibly) display a "rule" description indicating the types of alternations.
19. Implement replace_reflexive_indicators(). [NOT DONE; SUPPORT REMOVED]
20. Implement verbs with attached clitics e.g. [[pasarlo]], [[corrérsela]]. [DONE]
21. When footnote + tú/vos notation, add a space before tú/vos.
22. Fix [[erguir]] so ie-i vowel alternation produces ye- at beginning of word, similarly for errar. Also allow
multiple vowel alternation specs in irregular verbs, for errar. Finally, ie should show as e-ye for errar
and as e-ye-i for erguir. [DONE]
23. Figure out why red links in combined forms show up as black not red.
24. Consider including alternative superseded forms of verbs like [[ciar]] (e.g. pret_3s = cio, ció with footnote).
25. Allow conjugation of suffixes e.g. -ir, -ecer; need to fix in [[Module:inflection utilities]]. [DONE]
26. Allow specification of stems esp. so that footnotes can be hung off them; use + for the default.
27. Don't remove monosyllabic accents when conjugating suffixes. [DONE]
28. If multiword expression with no <>, add <> after first word, as with [[Module:es-headword]]. [DONE]
29. (Possibly) link the parts of a reflexive or cliticized infinitive, as done in [[Module:es-headword]]. [DONE]
30. Final fixes to allow [[Module:es-headword]] to use this module. [DONE]
--]=]
local lang = require("Module:languages").getByCode("es")
local m_string_utilities = require("Module:string utilities")
local m_links = require("Module:links")
local m_table = require("Module:table")
local iut = require("Module:inflection utilities")
local com = require("Module:es-common")
local force_cat = false -- set to true for debugging
local check_for_red_links = false -- set to false for debugging
local rfind = mw.ustring.find
local rmatch = mw.ustring.match
local rsplit = mw.text.split
local rsub = com.rsub
local function link_term(term)
return m_links.full_link({ lang = lang, term = term }, "term")
end
local V = com.V -- vowel regex class
local AV = com.AV -- accented vowel regex class
local C = com.C -- consonant regex class
local fut_sub_note = "[ส่วนใหญ่เลิกใช้ ปัจจุบันใช้ในภาษากฎหมายเป็นหลัก]"
local pres_sub_voseo_note = "[" .. link_term("voseo") .. " ในอาร์เจนตินาและอุรุกวัย นิยมใช้รูป " ..
link_term("tú") .. " สำหรับมาลาสมมุติปัจจุบันกาล]"
local vowel_alternants = m_table.listToSet({"ie", "ie-i", "ye", "ye-i", "ue", "ue-u", "hue", "i", "í", "ú", "+"})
local vowel_alternant_to_desc = {
["ie"] = "e-ie",
["ie-i"] = "e-ie-i",
["ye"] = "e-ye",
["ye-i"] = "e-ye-i",
["ue"] = "o-ue",
["ue-u"] = "o-ue-u",
["hue"] = "o-hue",
["i"] = "e-i",
["í"] = "i-í",
["ú"] = "u-ú",
}
local raise_vowel = {["e"] = "i", ["o"] = "u"}
local all_persons_numbers = {
["1s"] = "1|s",
["2s"] = "2|s",
["2sv"] = "2|s|voseo",
["3s"] = "3|s",
["1p"] = "1|p",
["2p"] = "2|p",
["3p"] = "3|p",
}
local person_number_list_basic = {"1s", "2s", "3s", "1p", "2p", "3p"}
local person_number_list_voseo = {"1s", "2s", "2sv", "3s", "1p", "2p", "3p"}
local imp_person_number_list = {"2s", "2sv", "3s", "1p", "2p", "3p"}
local neg_imp_person_number_list = {"2s", "3s", "1p", "2p", "3p"}
person_number_to_reflexive_pronoun = {
["1s"] = "me",
["2s"] = "te",
["2sv"] = "te",
["3s"] = "se",
["1p"] = "nos",
["2p"] = "os",
["3p"] = "se",
}
local indicator_flags = m_table.listToSet {
"no_pres_stressed", "no_pres1_and_sub",
"only3s", "only3sp", "only3p",
"no_built_in",
}
-- Initialize all the slots for which we generate forms. The particular slots may depend on whether we're generating
-- combined slots (`not alternant_multiword_spec.nocomb`, which is always false if we're dealing with a verb with an
-- attached clitic, such as [[hincarla]], or a reflexive or partly-reflexive verb, where a partly-reflexive verb is
-- a conjoined term made up of two or more verbs, where some but not all are reflexive). It may also depend on whether
-- we're being requested to generate some double-combined forms, such as [[llevándoselo]]; see the comment below for
-- `verb_slot_double_combined_rows`.
local function add_slots(alternant_multiword_spec)
-- "Basic" slots: All slots that go into the regular table (not the combined-form table).
alternant_multiword_spec.verb_slots_basic = {
{"infinitive", "inf"},
{"infinitive_linked", "inf"},
{"gerund", "ger"},
{"pp_ms", "m|s|past|part"},
{"pp_fs", "f|s|past|part"},
{"pp_mp", "m|p|past|part"},
{"pp_fp", "f|p|past|part"},
}
-- Slots that go into the combined-form table, along with double-combined slots (e.g. [[llevándoselo]]) that are
-- requested for use with {{es-verb form of}}.
alternant_multiword_spec.verb_slots_combined = {}
-- Special slots used to handle non-reflexive parts of reflexive verbs in {{es-verb form of}}.
-- For example, for a reflexive-only verb like [[jambarse]], we want to be able to use {{es-verb form of}} on
-- [[jambe]] (which should mention that it is a part of 'me jambe', first-person singular present subjunctive, and
-- 'se jambe', third-person singular present subjunctive) or on [[jambamos]] (which should mention that it is a
-- part of 'nos jambamos', first-person plural present indicative or preterite). Similarly, we want to use
-- {{es-verb form of}} on [[jambando]] (which should mention that it is a part of 'se ... jambando', syntactic
-- variant of [[jambándose]], which is the gerund of [[jambarse]]). To do this, we need to be able to map
-- non-reflexive parts like [[jambe]], [[jambamos]], [[jambando]], etc. to their reflexive equivalent(s), to the
-- tag(s) of the equivalent(s), and, in the case of forms like [[jambando]], [[jambar]] and imperatives, to the
-- separated syntactic variant of the verb+clitic combination. We do this by creating slots for the non-reflexive
-- part equivalent of each basic reflexive slot, and for the separated syntactic-variant equivalent of each basic
-- reflexive slot that is formed of verb+clitic. We use slots in this way to deal with multiword lemmas. Note that
-- we run into difficulties mapping between reflexive verbs, non-reflexive part equivalents, and separated syntactic
-- variants if a slot contains more than one form. To handle this, if there are the same number of forms in two
-- slots we're trying to match up, we assume the forms match one-to-one; otherwise we don't match up the two slots
-- (which means {{es-verb form of}} won't work in this case, but such a case is extremely rare and not worth
-- worrying about). Alternatives that handle this "properly" are significantly more complicated and require
-- non-trivial modifications to [[Module:inflection utilities]].
local need_special_verb_form_of_slots = alternant_multiword_spec.source_template == "es-verb form of" and
alternant_multiword_spec.refl
if need_special_verb_form_of_slots then
alternant_multiword_spec.verb_slots_reflexive_verb_form_of = {
{"infinitive_non_reflexive", "-"},
{"infinitive_variant", "-"},
{"gerund_non_reflexive", "-"},
{"gerund_variant", "-"},
}
else
alternant_multiword_spec.verb_slots_reflexive_verb_form_of = {}
end
-- For generating combined forms, i.e. combinations of a basic form (specifically, infinitive, gerund or an
-- imperative form) with a clitic (or in some cases, two clitics). This is a list of lists of the form
-- {BASIC_SLOT, CLITICS} where BASIC_SLOT is the slot to add the clitic pronouns to (e.g. "gerund" or "imp_2s")
-- and CLITICS is a list of the clitic pronouns to add.
alternant_multiword_spec.verb_slot_combined_rows = {}
-- For generating double combined forms (e.g. [[llevándoselo]] or [[dámela]]). This is used by {{es-verb form of}}
-- when it detects that it is being requested to find the inflection tags for a double-combined form. The number of
-- double-combined forms is relatively large, so to optimize this, [[Module:es-inflections]] (which implements
-- {{es-verb form of}}) detects which two clitics are involved, and we only generate double-combined forms
-- involving those two clitics; this is specified using `double_combined_forms_to_include`, passed into
-- do_generate_forms(). The value of this field is a list of lists of the form {SINGLE_COMB_SLOT, CLITICS} where
-- SINGLE_COMB_SLOT is the single-combined slot to add the object clitic pronouns to (e.g. "gerund_comb_se" or
-- "imp_2s_comb_me") and CLITICS is a list of the clitic pronouns to add. CLITICS will normally be a length-one
-- list whose value is one of {"lo", "la", "le", "los", "las", "les"}.
alternant_multiword_spec.verb_slot_double_combined_rows = {}
-- Add entries for a slot with person/number variants.
-- `verb_slots` is the table to add to.
-- `slot_prefix` is the prefix of the slot, typically specifying the tense/aspect.
-- `tag_suffix` is a string listing the set of inflection tags to add after the person/number tags.
-- `person_number_list` is a list of the person/number slot suffixes to add to `slot_prefix`.
local function add_personal_slot(verb_slots, slot_prefix, tag_suffix, person_number_list)
for _, persnum in ipairs(person_number_list) do
local persnum_tag = all_persons_numbers[persnum]
local slot = slot_prefix .. "_" .. persnum
local accel = persnum_tag .. "|" .. tag_suffix
table.insert(verb_slots, {slot, accel})
end
end
-- Add a personal slot (i.e. a slot with person/number variants) to `verb_slots_basic`.
local function add_basic_personal_slot(slot_prefix, tag_suffix, person_number_list, no_special_verb_form_of_slot,
need_variant_slot)
add_personal_slot(alternant_multiword_spec.verb_slots_basic, slot_prefix, tag_suffix, person_number_list)
-- Add special slots for handling non-reflexive parts of reflexive verbs in {{es-verb form of}}.
-- See comment above in `need_special_verb_form_of_slots`.
if need_special_verb_form_of_slots and not no_special_verb_form_of_slot then
for _, persnum in ipairs(person_number_list) do
local persnum_tag = all_persons_numbers[persnum]
local basic_slot = slot_prefix .. "_" .. persnum
local accel = persnum_tag .. "|" .. tag_suffix
table.insert(alternant_multiword_spec.verb_slots_reflexive_verb_form_of, {basic_slot .. "_non_reflexive", "-"})
if need_variant_slot then
table.insert(alternant_multiword_spec.verb_slots_reflexive_verb_form_of, {basic_slot .. "_variant", "-"})
end
end
end
end
add_basic_personal_slot("pres", "pres|ind", person_number_list_voseo)
add_basic_personal_slot("impf", "impf|ind", person_number_list_basic)
add_basic_personal_slot("pret", "pret|ind", person_number_list_basic)
add_basic_personal_slot("fut", "fut|ind", person_number_list_basic)
add_basic_personal_slot("cond", "cond", person_number_list_basic)
add_basic_personal_slot("pres_sub", "pres|sub", person_number_list_voseo)
add_basic_personal_slot("impf_sub_ra", "impf|sub", person_number_list_basic)
add_basic_personal_slot("impf_sub_se", "impf|sub", person_number_list_basic)
add_basic_personal_slot("fut_sub", "fut|sub", person_number_list_basic)
-- Need variant slots because the imperative clitics are suffixed.
add_basic_personal_slot("imp", "imp", imp_person_number_list, nil, "need variant slot")
-- Don't need special non-reflexive-part slots because the negative imperative is multiword, of which the
-- individual words are 'no' + subjunctive.
add_basic_personal_slot("neg_imp", "neg|imp", neg_imp_person_number_list, "no special verb form of")
-- Don't need special non-reflexive-part slots because we don't want [[jambando]] mapping to [[jambándome]]
-- (only [[jambándose]]) or [[jambar]] mapping to [[jambarme]] (only [[jambarse]]).
add_basic_personal_slot("infinitive", "inf", person_number_list_basic, "no special verb form of")
add_basic_personal_slot("gerund", "ger", person_number_list_basic, "no special verb form of")
local third_person_object_clitics = {"lo", "la", "le", "los", "las", "les"}
-- Add combined-form slots.
if not alternant_multiword_spec.nocomb then
-- Add a row of slots representing the combination of a basic slot with a clitic. `basic_slot` is the basic slot
-- descriptor, `tag_prefix` is a string describing the inflection tags of the basic slot, and `personal_clitics`
-- is a list of the personal clitics ("me", "te", "se", "nos" or "os") to add to the basic slot.
local function add_combined_slot_row(basic_slot, tag_prefix, personal_clitics)
-- First, add each individual combined slot to `verb_slots_combined`.
local clitics_with_object = m_table.append(personal_clitics, third_person_object_clitics)
for _, clitic in ipairs(clitics_with_object) do
local slot = basic_slot .. "_comb_" .. clitic
-- You have to pass this through full_link() to get a Spanish-specific link
local accel = tag_prefix .. "|combined with [[" .. clitic .. "]]"
table.insert(alternant_multiword_spec.verb_slots_combined, {slot, accel})
end
-- Also, add the row to `verb_slot_combined_rows`.
table.insert(alternant_multiword_spec.verb_slot_combined_rows, {basic_slot, clitics_with_object})
-- Also do double-combined forms for a specific set of clitics, if requested. See the comment above
-- `verb_slot_double_combined_rows` above.
if alternant_multiword_spec.double_combined_forms_to_include then
for _, personal_clitic in ipairs(personal_clitics) do
for _, object_clitic in ipairs(third_person_object_clitics) do
for _, form_to_include in ipairs(alternant_multiword_spec.double_combined_forms_to_include) do
local to_include_personal_clitic, to_include_object_clitic = unpack(form_to_include)
if personal_clitic == to_include_personal_clitic and object_clitic == to_include_object_clitic then
local single_comb_slot = basic_slot .. "_comb_" .. personal_clitic
local slot = single_comb_slot .. "_" .. object_clitic
local accel = tag_prefix .. "|combined with [[" .. personal_clitic .. "]] and [[" ..
object_clitic .. "]]"
table.insert(alternant_multiword_spec.verb_slots_combined, {slot, accel})
table.insert(alternant_multiword_spec.verb_slot_double_combined_rows,
{single_comb_slot, {object_clitic}})
break
end
end
end
end
end
end
add_combined_slot_row("infinitive", "inf", {"me", "te", "se", "nos", "os"})
add_combined_slot_row("gerund", "gerund", {"me", "te", "se", "nos", "os"})
local function add_combined_imp_slot_row(persnum, personal_clitics)
add_combined_slot_row("imp_" .. persnum, all_persons_numbers[persnum] .. "|imp", personal_clitics)
end
add_combined_imp_slot_row("2s", {"me", "te", "nos"})
add_combined_imp_slot_row("2sv", {"me", "te", "nos"})
add_combined_imp_slot_row("3s", {"me", "se", "nos"})
add_combined_imp_slot_row("1p", {"te", "nos", "os"})
add_combined_imp_slot_row("2p", {"me", "nos", "os"})
add_combined_imp_slot_row("3p", {"me", "se", "nos"})
end
-- Generate the list of all slots.
alternant_multiword_spec.all_verb_slots = {}
for _, slot_and_accel in ipairs(alternant_multiword_spec.verb_slots_basic) do
table.insert(alternant_multiword_spec.all_verb_slots, slot_and_accel)
end
for _, slot_and_accel in ipairs(alternant_multiword_spec.verb_slots_combined) do
table.insert(alternant_multiword_spec.all_verb_slots, slot_and_accel)
end
for _, slot_and_accel in ipairs(alternant_multiword_spec.verb_slots_reflexive_verb_form_of) do
table.insert(alternant_multiword_spec.all_verb_slots, slot_and_accel)
end
alternant_multiword_spec.verb_slots_basic_map = {}
for _, slotaccel in ipairs(alternant_multiword_spec.verb_slots_basic) do
local slot, accel = unpack(slotaccel)
alternant_multiword_spec.verb_slots_basic_map[slot] = accel
end
alternant_multiword_spec.verb_slots_combined_map = {}
for _, slotaccel in ipairs(alternant_multiword_spec.verb_slots_combined) do
local slot, accel = unpack(slotaccel)
alternant_multiword_spec.verb_slots_combined_map[slot] = accel
end
end
-- Return true if `form` is accented and is likely monosyllabic. Used in remove_monosyllabic_accents(); if true, we
-- run the syllabification algorithm to determine the syllable count, and if monosyllabic, remove the accent. Also used
-- in conjunction with user-specified form overrides to add an asterisk to prevent accents from being removed.
local function may_need_monosyllabic_accent_removed(form)
return not rfind(form, "^%-") and rfind(form, AV) and not rfind(form, V .. C .. V)
end
local overridable_stems = {}
-- If `add_monosyllabic_asterisk` is given, add a * to accented forms that may be monosyllabic to prevent the accent
-- from being removed in remove_monosyllabic_accents().
local function allow_multiple_values_for_override(separated_groups, data, add_monosyllabic_asterisk)
local retvals = {}
for _, separated_group in ipairs(separated_groups) do
local footnotes = data.fetch_footnotes(separated_group)
local form = separated_group[1]
if add_monosyllabic_asterisk and may_need_monosyllabic_accent_removed(form) then
form = form .. "*"
end
-- Add suppress_prefix to prevent the built-in verb prefix from being added to the override.
local retval = {form = form, footnotes = footnotes, suppress_prefix = true}
table.insert(retvals, retval)
end
return retvals
end
local function simple_choice(choices)
return function(separated_groups, data)
if #separated_groups > 1 then
data.parse_err("For spec '" .. data.prefix .. ":', only one value currently allowed")
end
if #separated_groups[1] > 1 then
data.parse_err("For spec '" .. data.prefix .. ":', no footnotes currently allowed")
end
local choice = separated_groups[1][1]
if not m_table.contains(choices, choice) then
data.parse_err("For spec '" .. data.prefix .. ":', saw value '" .. choice .. "' but expected one of '" ..
table.concat(choices, ",") .. "'")
end
return choice
end
end
for _, overridable_stem in ipairs {
"pres_unstressed",
"pres_stressed",
"pres1_and_sub",
-- Don't include pres1; use pres_1s if you need to override just that form
"impf",
"full_impf",
"pret",
{"pret_conj", simple_choice({"irreg", "ar", "er", "ir"}) },
"fut",
"cond",
"pres_sub_stressed",
"pres_sub_unstressed",
"impf_sub_ra",
"impf_sub_se",
"fut_sub",
"pp",
} do
if type(overridable_stem) == "string" then
overridable_stems[overridable_stem] = allow_multiple_values_for_override
else
local stem, validator = unpack(overridable_stem)
overridable_stems[stem] = validator
end
end
local function match_against_verbs(ref_verb, prefixes)
return function(verb)
for _, prefix in ipairs(prefixes) do
if verb == prefix .. ref_verb then
return prefix, ref_verb
end
end
return nil
end
end
--[=[
Special cases for verbs:
diluviar, atardecer: impersonal; all finite non-3s forms are nonexistent or hypothetical. Handle using
'.only3s'.
empecer, atañer, concernir: all finite non-third-person forms are nonexistent or hypothetical. Handle using '.only3sp'.
desnacer: Former module claimed an irregular past participle 'desnato'. Verb is not in RAE at all and barely exists;
unlikely to have irregular past participle.
desposeer: Former module claimed an irregular past participle 'desposeso'. Not per RAE.
valer: Former module claimed an irregular imperative 'val'. Not per RAE.
manumitir: Former module claimed an irregular past participle 'manumiso'. Not per RAE.
raer: Former module claimed a pres 1sg rao. Not per RAE.
rehuir: Handle using +ú.
sustituir: Former module claimed an irregular past participle 'sustituto'. Not per RAE.
venir: Former module claimed an irregular clitic combination ven + nos -> venos. Not per native speakers.
---------
Verbs to check: rehuir (+ú), prohibir (+í), reunir (+ú)
---------
-ir verbs:
There are several types of vowel alternations:
1. No alternation. Includes some verbs in -e- and -o-, e.g. aterir(se) (no_pres_stressed), tra(n)sgredir
(pres_stressed forms rare), abolir (pres_stressed forms rare), colorir (no_pres_stressed), sumergir, divergir,
convergir, arrecir (no_pres_stressed), rostir, polir (obsolete), condir (obsolete), possibly ascondir (obsolete),
atordir (obsolete), sacodir (obsolete), sobrevendir (possible misspelling), empedernir (no_pres_stressed),
decebir (obsolete; possibly actually like concebir, i.e. decibo not decebo),
premir (obsolete), expremir (obsolete), exir (obsolete), escreuir (obsolete; fix conjugation), escrebir (obsolete),
agredir; sometimes the stressed forms are rare or disused. (Also embaír, desvaír are no_pres_stressed.)
2a. ie: Infinitive has -e-, changing to -ie- when stressed. No raising before i+V. Only hendir, cernir, discernir,
concernir (only3sp); discernir -> discierno, discerniendo, discernió, discernamos.
2b. ye: Infinitive has -e-, changing to -ye- when stressed. No raising before i+V. Does not occur (cf. errar).
3a. ie-i: Infinitive has -e- or -i-, changing to -ie- when stressed. Raising before i+V and 1p/2p pres subjunctive:
sentir -> siento, sintiendo, sintió, sintamos.
adquirir -> adquiero, adquiriendo, adquirió, adquiramos.
3b. ye-i: Infinitive has -e-, changing to -ye- when stressed. Raising before i+V and 1p/2p pres subjunctive.
Only erguir: erguir -> yergo, irguiendo, irguió, irgamos.
4. i: Infinitive has -e-, changing to -i- when stressed. Raising before i+V and 1p/2p pres subjunctive:
vestir -> visto, vistiendo, vistió, vistamos. Variant: ceñir -> ciño, ciñendo, ciñó, ciñamos.
NOTE: preterir (no_pres_stressed).
5. ue-u: Infinitive has -o-, changing to -ue- when stressed. Raising before i+V and 1p/2p pres subjunctive:
Only dormir, morir and compounds. dormir -> duermo, durmiendo, durmió, durmamos.
6. ue: This type would be parallel to 'ie' but doesn't appear to exist.
---------
Verbs to fix (extra forms need to be excised or deleted): The above verbs under type (1) -ir vowel alternations;
[[neviscar]] (impersonal), [[acaecer]] (third-person only), [[acontecer]] (third-person only),
[[cellisquear]] (impersonal), [[pintear]] (impersonal? other meaning "to play hookey" given, not in RAE),
[[diluviar]] (impersonal). [[desabrir]] (not like abrir, rare in pres_stressed/sub forms), [[jabrir]]
(not like abrir).
Verbs with existing errors:
* [[abeldar]]: (missing <ie>) [FORMS TO DELETE]
* [[acaecer]]: (used only in 3rd person) [DELETE ALL FIRST AND SECOND PERSON FORMS]
* [[acontecer]]: (used only in 3rd person) [DELETE ALL FIRST AND SECOND PERSON FORMS]
* [[anticuar]] (conjugated without ú) [FORMS TO DELETE]
* [[antojar]]: (used only in 3rd person) [DELETE ALL FIRST AND SECOND PERSON FORMS]
* [[aerografiar]]: (conjugated without í) [FORMS TO DELETE]
* [[afiliar]]: (conjugated with í/+ should be only +) [FORMS TO DELETE]
* [[agraviar]]: (wrongly has í) [FORMS TO DELETE]
* [[arrecir]]: (not given as no_pres_stressed) [FORMS TO DELETE]
* [[aserrar]]: (missing <ie>) [FORMS TO DELETE]
* [[aspaventar]]: (missing <ie>) [OK]
* [[atesar]]: (wrongly has ie) [FORMS TO DELETE]
* [[avalentar]]: (wrongly has ie) [FORMS TO DELETE]
* [[autorregularse]] (conjugated as non-reflexive) [OK]
* [[auxiliar]]: (conjugated with í/+ should be only +) [FORMS TO DELETE]
* [[balbucir]] (pres1_and_sub nonexistent) [DELETE PRES1_AND_SUB FORMS]
* [[caçar]] (conjugated as -zar) [OK]
* [[calefacer]] (extra form caleface) [FIX]
* [[cellisquear]]: (used only in 3rd person singular) [DELETE ALL FIRST AND SECOND PERSON FORMS, ALL 3RD PLURAL FORMS AND ALL PP NON-MS FORMS]
* [[chilenizar]] (conjugated with no cons alternation) [OK]
* [[colorir]]: (not given as no_pres_stressed) [FORMS TO DELETE]
* [[comisariar]] (conjugated without í) [FORMS TO DELETE]
* [[complacer]] (missing complega in imperative 3s) [OK]
* [[comprehender]] (conjugated as comprender) [OK]
* [[decebir]] (was conjugated without <i>) [FORMS TO DELETE]
* [[desafiliar]]: (conjugated with í/+ should be only +) [FORMS TO DELETE]
* [[desagregar]] (conjugated with no cons alternation) [FORMS TO DELETE]
* [[desairar]]: (conjugated with í should be only +) [FORMS TO DELETE]
* [[descordar]]: (missing <ue>) [FORMS TO DELETE]
* [[deseleccionar]] (conjugated as desseleccionar) [OK]
* [[desestacionalizar]] (conjugated with no cons alternation) [FORMS TO DELETE]
* [[desgonzar]] (conjugated with no cons alternation) [FORMS TO DELETE]
* [[desguinzar]] (conjugated with no cons alternation) [FORMS TO DELETE]
* [[deshacer]] (extra form deshace, desháceme etc.) [OK]
* [[desnacer]] (extra form desnato etc.) [DELETE PP FORMS]
* [[desposeer]] (extra form desposeso etc.) [DELETE PP FORMS]
* [[dezmar]]: (wrongly has ie) [FORMS TO DELETE]
* [[diluviar]]: (used only in 3rd person singular) [DELETE ALL FIRST AND SECOND PERSON FORMS, ALL 3RD PLURAL FORMS AND ALL PP NON-MS FORMS]
* [[draftear]] (extraneous param lang=es) [REMOVE PARAM]
* [[ejemplarizar]] (extraneous param compound=1) [compound -> combined]
* [[ejercitar]] (extraneous param compound=1) [compound -> combined]
* [[empecer]] (empezca has imperatives, 1s in its verb form entry) [FIX]
* [[encentar]]: (wrongly has ie) [OK]
* [[encubertar]]: (wrongly has ie) [FORMS TO DELETE]
* [[entrechocar]] (conjugated with no cons alternation) [FORMS TO DELETE]
* [[entredecir]] (imp_2s has entredice should be entredí; extra future/cond forms entredeciré etc.) [FORMS TO DELETE/FIX]
* [[escenografiar]]: (conjugated without í) [FORMS TO DELETE]
* [[estar]] (incorrect combined forms, e.g. éstela instead of estela) [OK]
* [[extasiar]]: (conjugated with í/+ should be only í) [FORMS TO DELETE]
* [[facer]] (extra form face, fáceme, etc.) [FIX]
* [[ferrar]]: (missing <ie>) [FORMS TO DELETE]
* [[gloriar]]: (conjugated with í/+ should be only í) [FORMS TO DELETE]
* [[hacer]] (extra form hace, háceme, etc.) [DELETE hácete]
* [[homogeneizar]] (extra form homogeneízo) [DELETE homogeneízo, homogeneízas, homogeneíza, homogeneízan, homogeneícen, homogeneícemos]
* [[incensar]]: (missing <ie>) [FORMS TO DELETE]
* [[ir]] (extraneous param aux=ser) [REMOVE PARAM]
* [[jacer]] (extra form jace, jáceme, etc.) [FIX]
* [[jarrear]] (extraneous param impersonal=yes)
* [[litografiar]]: (conjugated without í) [FORMS TO DELETE]
* [[manumitir]] (extra form manumiso, etc.) [FIX; is an adjective]
* [[mecanografiar]]: (conjugated without í) [FORMS TO DELETE]
* [[mordiscar]] (conjugated with no cons alternation) [FORMS TO DELETE]
* [[neviscar]]: (used only in 3rd person singular) [DELETE ALL FIRST AND SECOND PERSON FORMS, ALL 3RD PLURAL FORMS AND ALL PP NON-MS FORMS]
* [[obsipar]] (conjugated as obispar) [DELETE VERB]
* [[obstar]]: (used only in 3rd person) [DELETE ALL FIRST AND SECOND PERSON FORMS]
* [[orificar]] (conjugated as orificiar) [OK]
* [[complacer]], [[placer]] (missing plega in imperative 3s, etc.) [OK]
* [[prevaler]] (extra form preval, incorrect form prévalme etc.) [DELETE preval]
* [[preterir]]: (not given as no_pres_stressed) [FORMS TO DELETE]
* [[raer]] (extra form rao) [DELETE rao]
* [[rebordar]] (extraneous param lang=es) [REMOVE PARAM]
* [[redecir]] (incorrect imp_2s redice instead of redí) [FIX]
* [[reinstitucionalizar]] (conjugated with no cons alternation) [FORMS TO DELETE]
* [[reirse]] [DELETE]
* [[serigrafiar]]: (conjugated without í) [FORMS TO DELETE]
* [[sobresalir]] (incorrect combined forms e.g. sobrésalme) [OK]
* [[superpoblar]] (missing <ue>) [FORMS TO DELETE]
* [[sustituir]] (extra form sustituto, etc.) [OK]
* [[usucapir]]: (used only in inf and pp) [DELETE ALL FORMS BUT PP]
* [[valefacer]] (extra form valeface) [FIX]
* [[valer]] (extra form val, etc.) [OK]
* LOTS OF COMBINED FORMS OF VERBS IN -iar, -uar, -ai-, -au-, -ei-, -eu-, etc.
Example: afeitar (afeítate, afeítese, afeítense). Need a script to find them.
* [[acostar]]: normally <ue> but in meaning "arrive at the coast", <>
* [[adecuar]]: <+,ú>
* [[aerografiar]]: <í>
* [[aferrar]]: <+,ie[obsolete]>
* [[afiliar]]: <>
* [[aforar]]: in meaning "to gauge, to measure": <>; in meaning "otorgar fuero": <ue>
* [[arrecir]]: <no_pres_stressed>
* [[agraviar]]: <>
* [[agriar]]: <í,+>
* [[aserrar]]: <ie>
* [[asolar]]: in meaning "destroy": <ue,+>; in meaning "to dry up": <>
* [[aspaventar]]: <ie>
* [[atentar]]: in meaning "to commit a crime" does not have vowel alt
* [[atesar]]: <>; possibly <ie> in obsolete meaning "atiesar"
* [[atestar]]: in meaning "to pack": <ie,+>; in meaning "testify": <>
* [[autoevacuarse]]: <+,ú>
* [[auxiliar]]: <>
* [[avalentar]]: <>
* [[cimentar]]: <ie,+>
* [[colar]]: most meanings <ue> but "canonically confer (an ecclesiastical benefit)" <>
* [[colorir]]: <no_pres_stressed>
* [[comisariar]]: <í>
* [[desafiliar]]: <>
* [[desaforar]]: "to deprive of fuero": <ue,+[less common]>
* [[desairar]]: <>
* [[desolar]]: <ue,+>
* [[desmembrar]]: <ie,+>
* [[dezmar]]: <>
* [[ejecutoriar]]: <í,+>
* [[emparentar]]: <ie,+>
* [[encentar]]: <>
* [[encubertar]]: <>
* [[engrosar]]: <ue,+>
* [[escenografiar]]: <í>
* [[evacuar]]: <+,ú>
* [[expatriar]]: <í,+>
* [[extasiar]]: <í>
* [[ferrar]]: <ie>
* [[follar]]: <ue>
* [[gloriar]]: <í>
* [[hibernar]]: no vowel alt or e-ie; e-ie not in RAE, ask about it
* [[historiar]]: <í,+>
* [[incensar]]: <ie>
* [[invernar]]: <ie,+>
* [[licuar]]: <+,ú>
* [[litografiar]]: <í>
* [[mecanografiar]]: <í>
* [[paliar]]: <í,+>
* [[preterir]]: <i.no_pres_stressed>
* [[promiscuar]]: <+,ú>
* [[readecuar]]: <+,ú>
* [[repatriar]]: <í,+>
* [[retrocar]]: <ue,+>
* [[serigrafiar]]: <í>
* [[soterrar]]: <ie,+>
* [[superpoblar]]: <ue>
* [[templar]]: <+,ie[in some parts of Latin America]>
* [[vidriar]]: <í,+>
Second round of verbs to fix:
* [[apropriar]]: forms point to reflexive [FORMS TO FIX]
* [[autogobernarse]]: (missing <ie>) [FORMS TO DELETE]
* [[autorreproducirse]]: (wrongly had regular preterite and impf/fut sub) [FORMS TO DELETE]
* [[aventarse]]: (missing <ie>) [FORMS TO DELETE]
* [[aventar]]: forms point to reflexive [FORMS TO FIX]
* [[culiar]]: yo culio or culío? [VERIFY]
* [[desnacer]]: delete [[dasnatos]]
* [[poseer]]: delete [[posesa]], [[posesos]], [[posesas]]
* [[reproducir]]: (wrongly had regular preterite and impf/fut sub) [FORMS TO DELETE]
* [[trasgredir]]: (wrongly had <i>) [FORMS TO DELETE]
---------
Irregular conjugations.
Each entry is processed in turn and consists of an object with two fields:
1. match=: Specifies the irregular verbs that match this object.
2. forms=: Specifies the irregular stems and forms for these verbs.
The value of match= is either a string beginning with "^" (match only the specified verb), a string not beginning
with "^" (match any verb ending in that string), or a function that is passed in the verb and should return the
prefix of the verb if it matches, otherwise nil. The function match_against_verbs() is provided to facilitate matching
a set of verbs with a common ending and specific prefixes (e.g. [[andar]] and [[desandar]] but not [[mandar]], etc.).
The value of forms= is a table specifying stems and individual override forms. Each key of the table names either a
stem (e.g. `pres_stressed`), a stem property (e.g. `vowel_alt`) or an individual override form (e.g. `pres_1s`).
Each value of a stem can either be a string (a single stem), a list of strings, or a list of objects of the form
{form = STEM, footnotes = {FOONOTES}}. Each value of an individual override should be of exactly the same form except
that the strings specify full forms rather than stems. The values of a stem property depend on the specific property
but are generally strings or booleans.
In order to understand how the stem specifications work, it's important to understand the phonetic modifications done
by combine_stem_ending(). In general, the complexities of predictable stem and ending modifications are all handled
in this function. In particular:
1. Spelling-based modifications (c/z, g/gu, gu/gü, g/j) occur automatically as appropriate for the ending.
2. Raising of e -> i, o -> u in -ir verbs before an ending beginning with i + vowel, as well as in the 1p/2p forms of
the present subjunctive (dormir -> durmiendo, durmió, durmamos), are handled here. Raising happens only for -ir
verbs and only when the stem setting `raising_conj` is true (which is normally set to true when vowel alternations
`ie-i`, `ye-i`, `ue-u`, `i`, `í` or `ú` are specified).
3. Numerous modifications are automatically made before an ending beginning with i + vowel. These include:
a. final -i of stem absorbed: sonreír -> sonrió, sonriera, sonriendo;
b. in the preterite of irregular verbs (likewise for other tenses derived from the preterite stem, i.e. imperfect
and and future subjunctive), initial i absorbed after j and u (dijeron not #dijieron, likewise for condujeron,
trajeron; also fueron not #fuyeron). This happens only when stem setting `pret_conj` == "irreg"; this must be set
explicitly by irregular verbs. Does not apply everywhere because of cases like regular [[tejer]] (tejieron not
#tejeron), regular [[concluir]] (concluyeron not #conclueron).
c. initial i of ending -> y after vowel and word-initially: poseer -> poseyó, poseyera, poseyendo; ir -> yendo;
d. initial i of ending -> y after gü, which becomes gu: argüir -> arguyó, arguyera, arguyendo;
e. initial i of ending absorbed after ñ, ll, y: tañer -> tañó, tañera, tañendo; bullir -> bulló, bullera, bullendo
4. If the ending begins with (h)i, it gets an accent after a/e/i/o to prevent the two merging into a diphthong:
caer -> caíste, caímos; reír -> reíste, reímos (pres and pret). This does not apply after u, e.g.
concluir -> concluiste, concluimos.
5. In -uir verbs (i.e. -ir verbs with stem ending in -u), a y is added before endings beginning with a/e/o:
concluir -> concluyo, concluyen, concluya, concluyamos. Note that preterite concluyó, gerund concluyendo, etc.
are handled by a different rule above (3b).
The following stems are recognized:
-- pres_unstressed: The present indicative unstressed stem (2s voseo, 1p, 2p). Also controls the imperative 2p
and gerund. Defaults to the infinitive stem.
-- pres_stressed: The present indicative stressed stem (1s, 2s, 3s, 3p). Also controls the imperative 2s.
Default is empty if indicator `no_pres_stressed`, else a vowel alternation if such an indicator is given
(e.g. `ue`, `ì`), else the infinitive stem.
-- pres1_and_sub: Overriding stem for 1s present indicative and the entire subjunctive. Only set by irregular verbs
and by the indicator `no_pres_stressed` (since verbs of this sort, e.g. [[aterir]], are missing the entire
subjunctive as well as the forms with stressed root). Used by many irregular verbs, e.g. [[caer]], [[roer]],
[[salir]], [[tener]], [[valer]], [[venir]], etc. Some verbs set this and then supply an override for the pres_1sg
if it's irregular, e.g. [[saber]], with irregular subjunctive stem "sep-" and special 1s present indicative "sé*"
(the * indicates that the monosyllabic accent should not be removed).
-- pres1: Special stem for 1s present indicative. Normally, do not set this explicitly. If you need to specify an
irregular 1s present indicative, use the form override pres_1s= to specify the entire form. Defaults to
pres1_and_sub if given, else pres_stressed.
-- pres_sub_unstressed: The present subjunctive unstressed stem (1p, 2p, also 2s voseo for -ar verbs). Defaults to
pres1_and_sub if given, else the infinitive stem.
-- pres_sub_stressed: The present subjunctive stressed stem (1s, 2s, 3s, 1p, also 2s voseo for -er/-ir verbs). Defaults
to pres1.
-- impf: The imperfect stem. Defaults to the infinitive stem.
-- pret: The preterite stem. Defaults to the infinitive stem.
-- pret_conj: Determines the set of endings used in the preterite. Should be one of "ar", "er", "ir" or "irreg".
Defaults to the conjugation as determined from the infinitive.
-- fut: The future stem. Defaults to the infinitive stem.
-- cond: The conditional stem. Defaults to fut.
-- impf_sub_ra: The imperfect subjunctive -ra stem. Defaults to the preterite stem.
-- impf_sub_se: The imperfect subjunctive -se stem. Defaults to the preterite stem.
-- fut_sub: The future subjunctive stem. Defaults to the preterite stem.
-- pp: The past participle stem. Default is based on the verb conjugation: infinitive stem + "ad" for -ar verbs,
otherwise infinitive stem + "id".
]=]
local built_in_conjugations = {
{
-- andar, desandar
-- we don't want to match e.g. mandar.
match = match_against_verbs("andar", {"", "des"}),
forms = {pret = "anduv", pret_conj = "irreg"}
},
{
-- asir, desasir
match = "asir",
-- use 'asgu' because we're in a front environment; if we use 'asg', we'll get '#asjo'
forms = {pres1_and_sub = "asgu"}
},
{
-- abrir, cubrir and compounds
match = function(verb)
local prefix, base_verb = rmatch(verb, "^(.*)(brir)$")
-- Only match abrir, cubrir and compounds, and don't match desabrir/jabrir
if not prefix then
return nil
elseif not prefix:find("a$") and not prefix:find("cu$") then
return nil
elseif prefix == "desa" or prefix == "ja" then
return nil
else
return prefix, base_verb
end
end,
forms = {pp = "biert"}
},
{
match = "caber",
forms = {pres1_and_sub = "quep", pret = "cup", pret_conj = "irreg", fut = "cabr"}
},
{
-- caer, decaer, descaer, recaer
match = "caer",
-- use 'caigu' because we're in a front environment; if we use 'caig', we'll get '#caijo'
forms = {pres1_and_sub = "caigu"}
},
{
-- cocer, escocer, precocer, etc.
match = "cocer",
-- override cons_alt, otherwise the verb would be categorized as a c-zc alternating verb
forms = {vowel_alt = "ue", pres1 = "cuez", pres_sub_unstressed = "coz", cons_alt = "c-z"}, -- not cozco, as would normally be generated
},
{
-- dar, desdar
match = match_against_verbs("dar", {"", "des"}),
forms = {
-- we need to override various present indicative forms and add an accent for the compounds;
-- not needed for the simplex and in fact the accents will be removed in that case
pres_1s = "doy",
pres_2s = "dás",
pres_3s = "dá",
pres_2p = "dáis",
pres_3p = "dán",
pret = "d", pret_conj = "er",
pres_sub_1s = "dé*", -- * signals that the monosyllabic accent must remain
pres_sub_2s = "dés",
pres_sub_3s = "dé*",
pres_sub_2p = "déis",
pres_sub_3p = "dén",
imp_2s = "dá",
}
},
{
-- decir, redecir, entredecir
match = match_against_verbs("decir", {"", "re", "entre"}),
forms = {
-- for this and variant verbs in -decir, we set cons_alt to false because we don't want the
-- verb categorized as a c-zc alternating verb, which would happen by default
-- use 'digu' because we're in a front environment; if we use 'dig', we'll get '#dijo'
pres1_and_sub = "digu", vowel_alt = "i", cons_alt = false, pret = "dij", pret_conj = "irreg",
pp = "dich", fut = "dir",
imp_2s = "dí" -- need the accent for the compounds; it will be removed in the simplex
}
},
{
-- antedecir, interdecir
match = match_against_verbs("decir", {"ante", "inter"}),
forms = {
pres1_and_sub = "digu", vowel_alt = "i", cons_alt = false, pret = "dij", pret_conj = "irreg",
pp = "dich", fut = "dir" -- imp_2s regular
}
},
{
-- bendecir, maldecir
match = match_against_verbs("decir", {"ben", "mal"}),
forms = {
pres1_and_sub = "digu", vowel_alt = "i", cons_alt = false, pret = "dij", pret_conj = "irreg",
pp = {"decid", "dit"} -- imp_2s regular, fut regular
}
},
{
-- condecir, contradecir, desdecir, predecir, others?
match = "decir",
forms = {
pres1_and_sub = "digu", vowel_alt = "i", cons_alt = false, pret = "dij", pret_conj = "irreg",
pp = "dich", fut = {"decir", "dir"} -- imp_2s regular
}
},
{
-- conducir, producir, reducir, traducir, etc.
match = "ducir",
forms = {pret = "duj", pret_conj = "irreg"}
},
{
-- elegir, reelegir; not preelegir, per RAE
match = match_against_verbs("elegir", {"", "re"}),
forms = {vowel_alt = "i", pp = {"elegid", "elect"}}
},
{
-- erguir
match = "^erguir",
forms = {
vowel_alt = {"i", "ye-i"},
-- We would not need to make this verb irregular except for the alternative unstressed present subjunctive forms
-- in yerg-. We can't use pres_sub_unstressed = {"irgu", "yergu"} because the "i" and "ye-i" vowel alternations
-- are e->i raising in the unstressed present subjunctive and we wrongly get irgamos/yirgamos etc.
pres_sub_2sv = {"irgás", "yergás"},
pres_sub_1p = {"irgamos", "yergamos"},
pres_sub_2p = {"irgáis", "yergáis"},
},
},
{
match = "^estar",
forms = {
pres_1s = "estoy",
pres_2s = "estás",
pres_2sv = "estás",
pres_3s = "está",
pres_3p = "están",
pret = "estuv",
pret_conj = "irreg",
pres_sub_1s = "esté",
pres_sub_2s = "estés",
pres_sub_2sv = "estés",
pres_sub_3s = "esté",
pres_sub_3p = "estén",
imp_2s = "está",
imp_2sv = "está",
}
},
{
-- freír, refreír
match = "freír",
forms = {vowel_alt = "í", pp = {"freíd", "frit"}}
},
{
match = "garantir",
forms = {
pres_stressed = {{form = "garant", footnotes = {"[only used in Argentina and Uruguay]"}}},
pres1_and_sub = {{form = "garant", footnotes = {"[only used in Argentina and Uruguay]"}}},
}
},
{
match = "^haber",
forms = {
pres_1s = "he",
pres_2s = "has",
pres_2sv = "has",
pres_3s = {"ha", {form = "hay", footnotes = {"[used impersonally]"}}},
pres_1p = "hemos",
pres_3p = "han",
pres1_and_sub = "hay", -- only for subjunctive as we override pres_1s
pret = "hub",
pret_conj = "irreg",
imp_2s = {"habe", "he"},
imp_2sv = {"habe", "he"},
fut = "habr",
}
},
{
match = "satisfacer",
forms = {
-- see below for cons_alt setting and pres1_and_sub setting
pres1_and_sub = "satisfagu", cons_alt = false, pret = "satisfic", pret_conj = "irreg",
pp = "satisfech", fut = "satisfar", imp_2s = {"satisface", "satisfaz"}
}
},
{
match = match_against_verbs("hacer", {"contra", "re"}),
-- contrahacer/rehacer require an extra accent in the preterite (rehíce, rehízo).
forms = {
-- see below for cons_alt setting and pres1_and_sub setting
pres1_and_sub = "hagu", cons_alt = false,
pret = "hic", pret_1s = "híce", pret_3s = "hízo", pret_conj = "irreg",
pp = "hech", fut = "har", imp_2s = "haz"
}
},
{
-- hacer, deshacer, contrahacer, rehacer, facer, desfacer, jacer
match = function(verb) return rmatch(verb, "^(.*[hjf])(acer)$") end,
forms = {
-- for these verbs, we set cons_alt to false because we don't want the verb categorized as a
-- c-zc alternating verb, which would happen by default
-- use 'agu' because we're in a front environment; if we use 'ag', we'll get '#hajo'
pres1_and_sub = "agu", cons_alt = false, pret = "ic", pret_conj = "irreg", pp = "ech",
fut = "ar", imp_2s = "az"
}
},
{
-- imprimir, reimprimir
match = "imprimir",
forms = {pp = {"imprimid", "impres"}}
},
{
-- infecir
match = "infecir",
-- override cons_alt, otherwise the verb would be categorized as a c-zc alternating verb
forms = {vowel_alt = "i", pres1 = "infiz", pres_sub_unstressed = "infez", cons_alt = "c-z"}, -- not infizco, as would normally be generated
},
{
match = "infecir",
-- override cons_alt, otherwise the verb would be categorized as a c-zc alternating verb
forms = {pres1_and_sub = "infez", cons_alt = "c-z"}, -- not mezco, as would normally be generated
},
{
match = "^ir",
forms = {
pres_1s = "voy",
pres_2s = "vas",
pres_2sv = "vas",
pres_3s = "va",
pres_1p = "vamos",
pres_2p = "vais",
pres_3p = "van",
pres1_and_sub = "vay", -- only for subjunctive as we override pres_1s
full_impf = "ib",
impf_1p = "íbamos",
pret = "fu",
pret_conj = "irreg", -- this signals that fu + -ieron -> fueron not fuyeron
pret_1s = "fui",
pret_3s = "fue",
imp_2s = "ve",
imp_2sv = "andá",
imp_1p = {"vamos", "vayamos"},
refl_imp_2p = {"idos", "iros"},
imp_2p_comb_os = {"idos", "iros"},
}
},
{
-- mecer, remecer
-- we don't want to match e.g. adormecer, estremecer
match = match_against_verbs("mecer", {"re", ""}),
-- override cons_alt, otherwise the verb would be categorized as a c-zc alternating verb
forms = {pres1_and_sub = "mez", cons_alt = "c-z"}, -- not mezco, as would normally be generated
},
{
-- morir, desmorir, premorir
match = "morir",
forms = {vowel_alt = "ue-u", pp = "muert"},
},
{
-- oír, desoír, entreoír, trasoír
match = "oír",
-- use 'oigu' because we're in a front environment; if we use 'oig', we'll get '#oijo'
forms = {pres1_and_sub = "oigu"}
},
{
match = "olver", -- solver, volver, bolver and derivatives
forms = {vowel_alt = "ue", pp = "uelt"}
},
{
-- placer, desplacer
match = "placer",
forms = {
pret_3s = {"plació", {form = "plugo", footnotes = {"[archaic]"}}},
pret_3p = {"placieron", {form = "pluguieron", footnotes = {"[archaic]"}}},
pres_sub_3s = {"plazca", {form = "plega", footnotes = {"[archaic]"}}, {form = "plegue", footnotes = {"[archaic]"}}},
impf_sub_ra_3s = {"placiera", {form = "pluguiera", footnotes = {"[archaic]"}}},
impf_sub_ra_3p = {"placieran", {form = "pluguieran", footnotes = {"[archaic]"}}},
impf_sub_se_3s = {"placiese", {form = "pluguiese", footnotes = {"[archaic]"}}},
impf_sub_se_3p = {"placiesen", {form = "pluguiesen", footnotes = {"[archaic]"}}},
fut_sub_3s = {"placiere", {form = "pluguiere", footnotes = {"[archaic]"}}},
fut_sub_3p = {"placieren", {form = "pluguieren", footnotes = {"[archaic]"}}},
}
},
{
match = "poder",
forms = {vowel_alt = "ue", pret = "pud", pret_conj = "irreg", fut = "podr", gerund = "pudiendo"}
},
{
-- poner, componer, deponer, imponer, oponer, suponer, many others
match = "poner",
forms = {
-- use 'pongu' because we're in a front environment; if we use 'pong', we'll get '#ponjo'
pres1_and_sub = "pongu", pret = "pus", pret_conj = "irreg", fut = "pondr", pp = "puest",
imp_2s = "pón" -- need the accent for the compounds; it will be removed in the simplex
}
},
{
-- proveer, desproveer
match = "proveer",
forms = {pp = {"proveíd", "provist"}},
},
{
match = "pudrir",
forms = {pp = "podrid"}
},
{
-- querer, desquerer, malquerer
match = "querer",
forms = {vowel_alt = "ie", pret = "quis", pret_conj = "irreg", fut = "querr"}
},
{
match = "^raer",
-- use 'raigu' because we're in a front environment; if we use 'raig', we'll get '#raijo'
forms = {pres1_and_sub = {"raigu", "ray"}}
},
{
-- roer, corroer
match = "roer",
-- use 'roigu' because we're in a front environment; if we use 'roig', we'll get '#roijo'
forms = {pres1_and_sub = {"ro", "roigu", "roy"}}
},
{
-- romper, entrerromper, arromper, derromper; not corromper; FIXME: not sure about interromper (obsolete)
match = function(verb)
local prefix, base_verb = rmatch(verb, "^(.*)(romper)$")
-- Don't match corromper
if prefix == "cor" then
return nil
else
return prefix, base_verb
end
end,
forms = {pp = "rot"}
},
{
-- saber, resaber
match = "saber",
forms = {
pres_1s = "sé*", -- * signals that the monosyllabic accent must remain
pres1_and_sub = "sep", -- only for subjunctive as we override pres_1s
pret = "sup",
pret_conj = "irreg",
fut = "sabr",
}
},
{
match = "salir",
forms = {
-- use 'salgu' because we're in a front environment; if we use 'salg', we'll get '#saljo'
pres1_and_sub = "salgu", fut = "saldr", imp_2s = "sal",
-- These don't exist per the RAE.
imp_2s_comb_lo = {}, imp_2s_comb_los = {}, imp_2s_comb_la = {}, imp_2s_comb_las = {},
imp_2s_comb_le = {}, imp_2s_comb_les = {},
},
},
{
match = "scribir", -- escribir, describir, proscribir, etc.
forms = {pp = {"scrit", {form = "script", footnotes = {"[Argentina and Uruguay]"}}}}
},
{
match = "^ser",
forms = {
pres_1s = "soy",
pres_2s = "eres",
pres_2sv = "sos",
pres_3s = "es",
pres_1p = "somos",
pres_2p = "sois",
pres_3p = "son",
pres1_and_sub = "se", -- only for subjunctive as we override pres_1s
full_impf = "er",
impf_1p = "éramos",
pret = "fu",
pret_conj = "irreg", -- this signals that fu + -ieron -> fueron not fuyeron
pret_1s = "fui",
pret_3s = "fue",
fut = "ser",
imp_2s = "sé*", -- * signals that the monosyllabic accent must remain
imp_2sv = "sé*",
}
},
{
match = "^soler",
forms = {
vowel_alt = "ue",
fut = {{form = "soler", footnotes = {"[rare but acceptable]"}}},
fut_sub = {{form = "sol", footnotes = {"[rare but acceptable]"}}},
pp = {{form = "solid", footnotes = {"[rare but acceptable]"}}},
}
},
{
-- tener, abstener, contener, detener, obtener, sostener, and many others
match = "tener",
forms = {
-- use 'tengu' because we're in a front environment; if we use 'teng', we'll get '#tenjo'
pres1_and_sub = "tengu", vowel_alt = "ie", pret = "tuv", pret_conj = "irreg", fut = "tendr",
imp_2s = "tén" -- need the accent for the compounds; it will be removed in the simplex
}
},
{
-- traer, atraer, detraer, distraer, extraer, sustraer, and many others
match = "traer",
-- use 'traigu' because we're in a front environment; if we use 'traig', we'll get '#traijo'
forms = {pres1_and_sub = "traigu", pret = "traj", pret_conj = "irreg"}
},
{
-- valer, equivaler, prevaler
match = "valer",
-- use 'valgu' because we're in a front environment; if we use 'valg', we'll get '#valjo'
forms = {pres1_and_sub = "valgu", fut = "valdr"}
},
{
match = "venir",
forms = {
-- use 'vengu' because we're in a front environment; if we use 'veng', we'll get '#venjo'
pres1_and_sub = "vengu", vowel_alt = "ie-i", pret = "vin", pret_conj = "irreg",
-- uniquely for this verb, pres sub 2sv/1p/2p do not raise the vowel even though we are an
-- e-ie-i verb (contrast sentir -> sintamos/sintáis)
pres_sub_2sv = "vengás", pres_sub_1p = "vengamos", pres_sub_2p = "vengáis",
fut = "vendr", imp_2s = "vén" -- need the accent for the compounds; it will be removed in the simplex
}
},
{
-- We want to match antever etc. but not atrever etc. No way to avoid listing each verb.
match = match_against_verbs("ver", {"ante", "entre", "pre", "re", ""}),
forms = {
-- we need to override various present indicative forms and add an accent for the compounds;
-- not needed for the simplex and in fact the accents will be removed in that case
pres_2s = "vés",
pres_2sv = "vés",
pres_3s = "vé",
pres_2p = "véis",
pres_3p = "vén",
pres1_and_sub = "ve",
impf = "ve", pp = "vist",
imp_2s = "vé" -- need the accent for the compounds; it will be removed in the simplex
}
},
{
-- yacer, adyacer, subyacer
match = "yacer",
-- use 'yazqu/yazgu/yagu' because we're in a front environment; see 'decir' above
forms = {pres1_and_sub = {"yazqu", "yazgu", "yagu"}, imp_2s = {"yace", "yaz"}}
},
}
local reflexive_masc_forms = {
["su"] = {"mi", "tu", "su", "nuestro", "vuestro", "su"},
["sus"] = {"mis", "tus", "sus", "nuestros", "vuestros", "sus"},
["sí"] = {"mí", "ti", "sí", "nosotros", "vosotros", "sí"},
["consigo"] = {"conmigo", "contigo", "consigo", "con nosotros", "con vosotros", "consigo"},
}
local reflexive_fem_forms = {
["su"] = {"mi", "tu", "su", "nuestra", "vuestra", "su"},
["sus"] = {"mis", "tus", "sus", "nuestras", "vuestras", "sus"},
["sí"] = {"mí", "ti", "sí", "nosotras", "vosotras", "sí"},
["consigo"] = {"conmigo", "contigo", "consigo", "con nosotras", "con vosotras", "consigo"},
}
local reflexive_forms = {
["se"] = {"me", "te", "se", "nos", "os", "se"},
["suyo"] = {"mío", "tuyo", "suyo", "nuestro", "vuestro", "suyo"},
["suya"] = {"mía", "tuya", "suya", "nuestra", "vuestra", "suya"},
["suyos"] = {"míos", "tuyos", "suyos", "nuestros", "vuestros", "suyos"},
["suyas"] = {"mías", "tuyas", "suyas", "nuestras", "vuestras", "suyas"},
}
local function skip_slot(base, slot, allow_overrides)
if not allow_overrides and (base.basic_overrides[slot] or base.combined_overrides[slot] or
base.refl and base.basic_reflexive_only_overrides[slot]) then
-- Skip any slots for which there are overrides.
return true
end
if base.only3s and (slot:find("^pp_f") or slot:find("^pp_mp")) then
-- diluviar, atardecer, neviscar; impersonal verbs have only masc sing pp
return true
end
if not slot:find("[123]") then
-- Don't skip non-personal slots.
return false
end
if base.nofinite then
return true
end
if (base.only3s or base.only3sp or base.only3p) and (slot:find("^imp_") or slot:find("^neg_imp_")) then
return true
end
if base.only3s and not slot:find("3s") then
-- diluviar, atardecer, neviscar
return true
end
if base.only3sp and not slot:find("3[sp]") then
-- atañer, concernir
return true
end
if base.only3p and not slot:find("3p") then
-- [[caer cuatro gotas]], [[caer chuzos de punta]], [[entrarle los siete males]]
return true
end
return false
end
-- Add the `stem` to the `ending` for the given `slot` and apply any phonetic modifications.
-- `is_combining_ending` is true if `ending` is actually the ending (this function is also
-- called to combine prefix + stem). WARNING: This function is written very carefully; changes
-- to it can easily have unintended consequences.
local function combine_stem_ending(base, slot, stem, ending, is_combining_ending)
if not is_combining_ending then
return stem .. ending
end
if base.stems.raising_conj and (rfind(ending, "^i" .. V) or
slot == "pres_sub_1p" or slot == "pres_sub_2p" or slot == "pres_sub_2sv") then
-- need to raise e -> i, o -> u: dormir -> durmió, durmiera, durmiendo, durmamos
stem = rsub(stem, "([eo])(" .. C .. "*)$", function(vowel, rest) return raise_vowel[vowel] .. rest end)
-- also with stem ending in -gu or -qu (e.g. erguir -> irguió, irguiera, irguiendo, irgamos)
stem = rsub(stem, "([eo])(" .. C .. "*[gq]u)$", function(vowel, rest) return raise_vowel[vowel] .. rest end)
end
-- Lots of sound changes involving endings beginning with i + vowel
if rfind(ending, "^i" .. V) then
-- (1) final -i of stem absorbed: sonreír -> sonrió, sonriera, sonriendo; note that this rule may be fed
-- by the preceding one (stem sonre- raised to sonri-, then final i absorbed)
stem = stem:gsub("i$", "")
-- (2) In the preterite of irregular verbs (likewise for other tenses derived from the preterite stem, i.e.
-- imperfect and future subjunctive), initial i absorbed after j (dijeron not #dijieron, likewise for
-- condujeron, trajeron) and u (fueron not #fuyeron). Does not apply in regular verb tejer (tejieron not
-- #tejeron) and concluir (concluyeron not #conclueron).
if base.stems.pret_conj == "irreg" and rfind(stem, "[ju]$") then
ending = ending:gsub("^i", "")
end
-- (3) initial i -> y after vowel and word-initially: poseer -> poseyó, poseyera, poseyendo;
-- concluir -> concluyó, concluyera, concluyendo; ir -> yendo; but not conseguir/delinquir
if stem == "" or (rfind(stem, V .. "$") and not rfind(stem, "[gq]u$")) then
ending = ending:gsub("^i", "y")
end
-- (4) -gü + ie- -> -guye-: argüir -> arguyó, arguyera, arguyendo
if stem:find("gü$") then
-- transfer the y to the stem to avoid gü -> gu below in front/back conversions
stem = stem:gsub("ü$", "uy")
ending = ending:gsub("^i", "")
end
-- (5) initial i absorbed after ñ, ll, y: tañer -> tañó, tañera, tañendo; bullir -> bulló, bullera, bullendo
if rfind(stem, "[ñy]$") or rfind(stem, "ll$") then
ending = ending:gsub("^i", "")
end
end
-- If ending begins with i, it must get an accent after a/e/i/o to prevent the two merging into a diphthong:
-- caer -> caíste, caímos; reír -> reíste, reímos (pres and pret). This does not apply after u, e.g.
-- concluir -> concluiste, concluimos.
if ending:find("^i") and stem:find("[aeio]$") then
ending = ending:gsub("^i", "í")
end
-- If -oír/-uir (i.e. -ir with stem ending in -o/u, e.g. oír, concluir), a y must be added before endings
-- beginning with a/e/o. Check for base.stems.pret_conj == "irreg" to exclude stem fu- of [[ir]].
if base.conj == "ir" and rfind(ending, "^[aeoáéó]") and base.stems.pret_conj ~= "irreg" then
if rfind(stem, "[oú]$") then -- oír -> oye, rehuir -> rehúyo/rehúye (with indicator 'ú')
stem = stem .. "y"
elseif rfind(stem, "[^gq]u$") then -- concluir, but not conseguir or delinquir
stem = stem .. "y"
elseif stem:find("ü$") then -- argüir -> arguyendo
stem = stem:gsub("ü$", "uy")
end
end
-- Spelling changes in the stem; it depends on whether the stem given is the pre-front-vowel or
-- pre-back-vowel variant, as indicated by `frontback`. We want these front-back spelling changes to happen
-- between stem and ending, not between prefix and stem; the prefix may not have the same "front/backness"
-- as the stem.
local is_front = rfind(ending, "^[eiéí]")
if base.frontback == "front" and not is_front then
-- parecer -> parezco, conducir -> conduzco; use zqu to avoid triggering the following gsub();
-- the third line will replace zqu -> zc
if slot ~= "pret_3s" then -- exclude hice -> hizo (not #hizco)
stem = rsub(stem, "(" .. V .. ")c$", "%1zqu")
end
stem = stem:gsub("sc$", "squ") -- evanescer -> evanesco, fosforescer -> fosforesco
stem = stem:gsub("c$", "z") -- ejercer -> ejerzo, uncir -> unzo
stem = stem:gsub("qu$", "c") -- delinquir -> delinco, parecer -> parezqu- -> parezco
stem = stem:gsub("g$", "j") -- coger -> cojo, afligir -> aflijo
stem = stem:gsub("gu$", "g") -- distinguir -> distingo
stem = stem:gsub("gü$", "gu") -- may not occur; argüir -> arguyo handled above
elseif base.frontback == "back" and is_front then
stem = stem:gsub("gu$", "gü") -- averiguar -> averigüé
stem = stem:gsub("g$", "gu") -- cargar -> cargué
stem = stem:gsub("c$", "qu") -- marcar -> marqué
stem = rsub(stem, "[çz]$", "c") -- aderezar/adereçar -> aderecé
end
return stem .. ending
end
local function check_stems_for_suppress_prefix(slot, stems)
-- Check whether any or all stems have `suppress_prefix`.
local any_suppress_prefix = false
local any_not_suppress_prefix = false
if type(stems) == "table" then
if stems.suppress_prefix then
-- A single form object.
any_suppress_prefix = true
else
for _, stem in ipairs(stems) do
if type(stem) == "table" and stem.suppress_prefix then
any_suppress_prefix = true
else
any_not_suppress_prefix = true
end
end
end
else
any_not_suppress_prefix = true
end
if any_suppress_prefix and any_not_suppress_prefix then
-- This should never happen because suppress_prefix is set on user-specified stem and individual form
-- overrides, which should completely replace built-in overrides (which don't have suppress_prefix).
error("Internal error: For slot '" .. slot .. ", saw a mixture of suppress-prefix and non-suppress-prefix stems, and can't handle")
else
return any_suppress_prefix
end
end
local function add(base, slot, stems, endings, is_combining_ending, allow_overrides)
if skip_slot(base, slot, allow_overrides) then
return
end
local function do_combine_stem_ending(stem, ending)
return combine_stem_ending(base, slot, stem, ending, is_combining_ending)
end
iut.add_forms(base.forms, slot, stems, endings, do_combine_stem_ending, nil, nil, base.all_footnotes)
end
local function add3(base, slot, stems, endings, allow_overrides)
local suppress_prefix = base.prefix == "" or check_stems_for_suppress_prefix(slot, stems)
if suppress_prefix then
return add(base, slot, stems, endings, "is combining ending", allow_overrides)
end
if skip_slot(base, slot, allow_overrides) then
return
end
local is_combining_ending = false
local function do_combine_stem_ending(stem, ending)
return combine_stem_ending(base, slot, stem, ending, is_combining_ending)
end
-- Have to reimplement add_multiple_forms() ourselves due to the is_combining_ending
-- flag, which needs to be different when adding prefix to stems vs. stems to ending.
-- Otherwise we get e.g. #reímpreso instead of reimpreso.
local tempdest = {}
iut.add_forms(tempdest, slot, base.prefix, stems, do_combine_stem_ending)
is_combining_ending = true
iut.add_forms(base.forms, slot, tempdest[slot], endings, do_combine_stem_ending)
end
local function insert_form(base, slot, form)
if not skip_slot(base, slot) then
iut.insert_form(base.forms, slot, form)
end
end
local function insert_forms(base, slot, forms)
if not skip_slot(base, slot) then
iut.insert_forms(base.forms, slot, forms)
end
end
local function add_single_stem_tense(base, slot_pref, stems, s1, s2, s3, p1, p2, p3)
local function addit(slot, ending)
add3(base, slot_pref .. "_" .. slot, stems, ending)
end
addit("1s", s1)
addit("2s", s2)
addit("3s", s3)
addit("1p", p1)
addit("2p", p2)
addit("3p", p3)
end
local function add_present_indic(base)
local function addit(slot, stems, ending)
add3(base, "pres_" .. slot, stems, ending)
end
local s2, s2v, s3, p1, p2, p3
if base.conj == "ar" then
s2, s2v, s3, p1, p2, p3 = "as", "ás", "a", "amos", "áis", "an"
elseif base.conj == "er" then
s2, s2v, s3, p1, p2, p3 = "es", "és", "e", "emos", "éis", "en"
elseif base.conj == "ir" then
s2, s2v, s3, p1, p2, p3 = "es", "ís", "e", "imos", "ís", "en"
else
error("Internal error: Unrecognized conjugation " .. base.conj)
end
addit("1s", base.stems.pres1, "o")
addit("2s", base.stems.pres_stressed, s2)
addit("2sv", base.stems.pres_unstressed, s2v)
addit("3s", base.stems.pres_stressed, s3)
addit("1p", base.stems.pres_unstressed, p1)
addit("2p", base.stems.pres_unstressed, p2)
addit("3p", base.stems.pres_stressed, p3)
end
local function add_present_subj(base)
local function addit(slot, stems, ending)
add3(base, "pres_sub_" .. slot, stems, ending)
end
local s1, s2, s2v, s3, p1, p2, p3, voseo_stem
if base.conj == "ar" then
s1, s2, s2v, s3, p1, p2, p3 = "e", "es", "és", "e", "emos", "éis", "en"
else
s1, s2, s2v, s3, p1, p2, p3 = "a", "as", "ás", "a", "amos", "áis", "an"
end
addit("1s", base.stems.pres_sub_stressed, s1)
addit("2s", base.stems.pres_sub_stressed, s2)
addit("2sv", base.stems.pres_sub_unstressed, s2v)
addit("3s", base.stems.pres_sub_stressed, s3)
addit("1p", base.stems.pres_sub_unstressed, p1)
addit("2p", base.stems.pres_sub_unstressed, p2)
addit("3p", base.stems.pres_sub_stressed, p3)
end
local function add_imper(base)
local function addit(slot, stems, ending)
add3(base, "imp_" .. slot, stems, ending)
end
if base.conj == "ar" then
addit("2s", base.stems.pres_stressed, "a")
addit("2sv", base.stems.pres_unstressed, "á")
addit("2p", base.stems.pres_unstressed, "ad")
elseif base.conj == "er" then
addit("2s", base.stems.pres_stressed, "e")
addit("2sv", base.stems.pres_unstressed, "é")
addit("2p", base.stems.pres_unstressed, "ed")
elseif base.conj == "ir" then
addit("2s", base.stems.pres_stressed, "e")
addit("2sv", base.stems.pres_unstressed, "í")
addit("2p", base.stems.pres_unstressed, "id")
else
error("Internal error: Unrecognized conjugation " .. base.conj)
end
end
local function add_finite_non_present(base)
local function add_tense(slot, stem, s1, s2, s3, p1, p2, p3)
add_single_stem_tense(base, slot, stem, s1, s2, s3, p1, p2, p3)
end
local stems = base.stems
if stems.full_impf then
-- An override needs to be supplied for the impf_1p due to the accent on the stem.
add_tense("impf", stems.full_impf, "a", "as", "a", {}, "ais", "an")
elseif base.conj == "ar" then
add_tense("impf", stems.impf, "aba", "abas", "aba", "ábamos", "abais", "aban")
else
add_tense("impf", stems.impf, "ía", "ías", "ía", "íamos", "íais", "ían")
end
if stems.pret_conj == "irreg" then
add_tense("pret", stems.pret, "e", "iste", "o", "imos", "isteis", "ieron")
elseif stems.pret_conj == "ar" then
add_tense("pret", stems.pret, "é", "aste", "ó", "amos", "asteis", "aron")
else
add_tense("pret", stems.pret, "í", "iste", "ió", "imos", "isteis", "ieron")
end
if stems.pret_conj == "ar" then
add_tense("impf_sub_ra", stems.impf_sub_ra, "ara", "aras", "ara", "áramos", "arais", "aran")
add_tense("impf_sub_se", stems.impf_sub_se, "ase", "ases", "ase", "ásemos", "aseis", "asen")
add_tense("fut_sub", stems.fut_sub, "are", "ares", "are", "áremos", "areis", "aren")
else
add_tense("impf_sub_ra", stems.impf_sub_ra, "iera", "ieras", "iera", "iéramos", "ierais", "ieran")
add_tense("impf_sub_se", stems.impf_sub_se, "iese", "ieses", "iese", "iésemos", "ieseis", "iesen")
add_tense("fut_sub", stems.fut_sub, "iere", "ieres", "iere", "iéremos", "iereis", "ieren")
end
add_tense("fut", stems.fut, "é", "ás", "á", "emos", "éis", "án")
add_tense("cond", stems.cond, "ía", "ías", "ía", "íamos", "íais", "ían")
end
local function add_non_finite_forms(base)
local stems = base.stems
local function addit(slot, stems, ending)
add3(base, slot, stems, ending)
end
insert_form(base, "infinitive", {form = base.verb})
-- Also insert "infinitive + reflexive pronoun" combinations if we're handling a reflexive verb. See comment below for
-- "gerund + reflexive pronoun" combinations.
if base.refl then
for _, persnum in ipairs(person_number_list_basic) do
insert_form(base, "infinitive_" .. persnum, {form = base.verb})
end
end
local ger_ending = base.conj == "ar" and "ando" or "iendo"
addit("gerund", stems.pres_unstressed, ger_ending)
-- Also insert "gerund + reflexive pronoun" combinations if we're handling a reflexive verb. We insert exactly the same
-- form as for the bare gerund; later on in add_reflexive_or_fixed_clitic_to_forms(), we add the appropriate clitic
-- pronouns. It's important not to do this for non-reflexive verbs, because in that case, the clitic pronouns won't be
-- added, and {{es-verb form of}} will wrongly consider all these combinations as possible inflections of the bare
-- gerund. Thanks to [[User:JeffDoozan]] for this bug fix.
if base.refl then
for _, persnum in ipairs(person_number_list_basic) do
addit("gerund_" .. persnum, stems.pres_unstressed, ger_ending)
end
end
addit("pp_ms", stems.pp, "o")
addit("pp_fs", stems.pp, "a")
addit("pp_mp", stems.pp, "os")
addit("pp_fp", stems.pp, "as")
end
local function copy_subjunctives_to_imperatives(base)
-- Copy subjunctives to imperatives, unless there's an override for the given slot (as with the imp_1p of [[ir]]).
for _, persnum in ipairs({"3s", "1p", "3p"}) do
local from = "pres_sub_" .. persnum
local to = "imp_" .. persnum
insert_forms(base, to, iut.map_forms(base.forms[from], function(form) return form end))
end
end
-- Remove monosyllabic accents (e.g. the 3sg preterite of fiar is fio not #fió). Note that there are a
-- few monosyllabic verb forms that intentionally have an accent, to distinguish them from other words
-- with the same pronunciation. These are as follows:
-- (1) [[sé]] 1sg present indicative of [[saber]];
-- (2) [[sé]] 2sg imperative of [[ser]];
-- (3) [[dé]] 1sg and 3sg present subjunctive of [[dar]].
-- For these, a * is added, which indicates that the accent needs to remain. If we see such a *, we remove
-- it but otherwise leave the form alone.
local function remove_monosyllabic_accents(base)
for _, slotaccel in ipairs(base.alternant_multiword_spec.verb_slots_basic) do
local slot, accel = unpack(slotaccel)
if base.forms[slot] then
for _, form in ipairs(base.forms[slot]) do
if form.form:find("%*") then -- * means leave alone any accented vowel
form.form = form.form:gsub("%*", "")
elseif may_need_monosyllabic_accent_removed(form.form) then
-- Has an accented vowel and no VCV sequence and not a suffix; may be monosyllabic, in which
-- case we need to remove the accent. Check # of syllables and remove accent if only 1. Note
-- that the checks for accented vowel and VCV sequence are not strictly needed, but are
-- optimizations to avoid running the whole syllabification algorithm on every verb form.
local syllables = com.syllabify(form.form)
if #syllables == 1 then
form.form = com.remove_accent_from_syllable(syllables[1])
end
end
end
end
end
end
-- Add the appropriate clitic pronouns in `clitics` to the forms in `base_slot`. `store_cliticized_form` is a function
-- of three arguments (clitic, formobj, cliticized_form) and should store the cliticized form for the specified clitic
-- and form object.
local function add_forms_with_clitic(base, base_slot, clitics, store_cliticized_form)
if not base.forms[base_slot] then
-- This can happen, e.g. in only3s/only3sp/only3p verbs.
return
end
for _, formobj in ipairs(base.forms[base_slot]) do
-- Figure out the correct accenting of the verb when a clitic pronoun is attached to it. We may need to
-- add or remove an accent mark:
-- (1) No accent mark currently, none needed: infinitive sentar -> sentarlo; imperative singular ten -> tenlo;
-- (2) Accent mark currently, still needed: infinitive oír -> oírlo;
-- (3) No accent mark currently, accent needed: imperative singular siente -> siéntelo;
-- (4) Accent mark currently, not needed: imperative singular está -> estalo, sé -> selo.
local syllables = com.syllabify(formobj.form)
local sylno = com.stressed_syllable(syllables)
table.insert(syllables, "lo")
local needs_accent = com.accent_needed(syllables, sylno)
if needs_accent then
syllables[sylno] = com.add_accent_to_syllable(syllables[sylno])
else
syllables[sylno] = com.remove_accent_from_syllable(syllables[sylno])
end
table.remove(syllables) -- remove added clitic pronoun
local reaccented_form = table.concat(syllables)
for _, clitic in ipairs(clitics) do
local cliticized_form
-- Some further special cases.
if base_slot == "imp_1p" and (clitic == "nos" or clitic == "os") then
-- Final -s disappears: sintamos + nos -> sintámonos, sintamos + os -> sintámoos
cliticized_form = reaccented_form:gsub("s$", "") .. clitic
elseif base_slot == "imp_2p" and clitic == "os" then
-- Final -d disappears, which may cause an accent to be required:
-- haced + os -> haceos, sentid + os -> sentíos
if reaccented_form:find("id$") then
cliticized_form = reaccented_form:gsub("id$", "íos")
else
cliticized_form = reaccented_form:gsub("d$", "os")
end
else
cliticized_form = reaccented_form .. clitic
end
store_cliticized_form(clitic, formobj, cliticized_form)
end
end
end
-- Generate the combinations of verb form (infinitive, gerund or various imperatives) + clitic pronoun.
local function add_combined_forms(base)
for _, base_slot_and_clitics in ipairs(base.alternant_multiword_spec.verb_slot_combined_rows) do
local base_slot, clitics = unpack(base_slot_and_clitics)
add_forms_with_clitic(base, base_slot, clitics,
function(clitic, formobj, cliticized_form)
insert_form(base, base_slot .. "_comb_" .. clitic,
{form = cliticized_form, footnotes = formobj.footnotes})
end
)
end
for _, single_comb_slot_and_clitics in ipairs(base.alternant_multiword_spec.verb_slot_double_combined_rows) do
local single_comb_slot, clitics = unpack(single_comb_slot_and_clitics)
add_forms_with_clitic(base, single_comb_slot, clitics,
function(clitic, formobj, cliticized_form)
insert_form(base, single_comb_slot .. "_" .. clitic,
{form = cliticized_form, footnotes = formobj.footnotes})
end
)
end
end
local function process_slot_overrides(base, do_basic, reflexive_only)
local overrides = reflexive_only and base.basic_reflexive_only_overrides or
do_basic and base.basic_overrides or base.combined_overrides
for slot, forms in pairs(overrides) do
local suppress_prefix = base.prefix == "" or check_stems_for_suppress_prefix(slot, forms)
add(base, slot, suppress_prefix and "" or base.prefix, forms, false, "allow overrides")
end
end
-- Prefix `form` with `clitic`, adding fixed text `between` between them. Add links as appropriate unless the user
-- requested no links. Check whether form already has brackets (as will be the case if the form has a fixed clitic).
local function add_clitic_to_form(base, clitic, between, form)
if base.alternant_multiword_spec.args.noautolinkverb then
return clitic .. between .. form
else
local clitic_pref = "[[" .. clitic .. "]]" .. between
if form:find("%[%[") then
return clitic_pref .. form
else
return clitic_pref .. "[[" .. form .. "]]"
end
end
end
-- Add a reflexive pronoun or fixed clitic, e.g. [[lo]], as appropriate to the base form that were generated.
-- `do_joined` means to do only the forms where the pronoun is joined to the end of the form; otherwise, do only the
-- forms where it is not joined and precedes the form.
local function add_reflexive_or_fixed_clitic_to_forms(base, do_reflexive, do_joined)
for _, slotaccel in ipairs(base.alternant_multiword_spec.verb_slots_basic) do
local slot, accel = unpack(slotaccel)
local clitic
if not do_reflexive then
clitic = base.clitic
elseif slot:find("[123]") then
local persnum = slot:match("^.*_(.-)$")
clitic = person_number_to_reflexive_pronoun[persnum]
else
clitic = "se"
end
if base.forms[slot] then
if do_reflexive and slot:find("^pp_") or slot == "infinitive_linked" then
-- do nothing with reflexive past participles or with infinitive linked (handled at the end)
elseif slot:find("^neg_imp_") then
error("Internal error: Should not have forms set for negative imperative at this stage")
else
local slot_has_suffixed_clitic = slot:find("infinitive") or slot:find("gerund") or slot:find("^imp_")
-- Maybe generate non-reflexive parts and separated syntactic variants for use in {{es-verb form of}}.
-- See comment in add_slots() above `need_special_verb_form_of_slots`. Check for do_joined so we only
-- run this code once.
if do_reflexive and do_joined and base.alternant_multiword_spec.source_template == "es-verb form of" and
-- Skip personal variants of infinitives and gerunds so we don't think [[jambando]] is a
-- non-reflexive equivalent of [[jambándome]].
not slot:find("infinitive_") and not slot:find("gerund_") then
-- Clone the forms because we will be destructively modifying them just below, adding the reflexive
-- pronoun.
insert_forms(base, slot .. "_non_reflexive", mw.clone(base.forms[slot]))
if slot_has_suffixed_clitic then
insert_forms(base, slot .. "_variant", iut.map_forms(base.forms[slot], function(form)
return add_clitic_to_form(base, clitic, " ... ", form)
end))
end
end
if slot_has_suffixed_clitic then
if do_joined then
add_forms_with_clitic(base, slot, {clitic},
function(clitic, formobj, cliticized_form)
formobj.form = cliticized_form
end
)
end
elseif not do_joined then
-- Add clitic as separate word before all other forms.
for _, form in ipairs(base.forms[slot]) do
form.form = add_clitic_to_form(base, clitic, " ", form.form)
end
end
end
end
end
end
local function handle_infinitive_linked(base)
-- Compute linked versions of potential lemma slots, for use in {{es-verb}}.
-- We substitute the original lemma (before removing links) for forms that
-- are the same as the lemma, if the original lemma has links.
for _, slot in ipairs({"infinitive"}) do
insert_forms(base, slot .. "_linked", iut.map_forms(base.forms[slot], function(form)
if form == base.lemma and rfind(base.linked_lemma, "%[%[") then
return base.linked_lemma
else
return form
end
end))
end
end
local function generate_negative_imperatives(base)
-- Copy subjunctives to negative imperatives, preceded by "no".
for _, persnum in ipairs(neg_imp_person_number_list) do
local from = "pres_sub_" .. persnum
local to = "neg_imp_" .. persnum
insert_forms(base, to, iut.map_forms(base.forms[from], function(form)
if base.alternant_multiword_spec.args.noautolinkverb then
return "no " .. form
elseif form:find("%[%[") then
-- already linked, e.g. when reflexive
return "[[no]] " .. form
else
return "[[no]] [[" .. form .. "]]"
end
end))
end
end
-- Process specs given by the user using 'addnote[SLOTSPEC][FOOTNOTE][FOOTNOTE][...]'.
local function process_addnote_specs(base)
for _, spec in ipairs(base.addnote_specs) do
for _, slot_spec in ipairs(spec.slot_specs) do
slot_spec = "^" .. slot_spec .. "$"
for slot, forms in pairs(base.forms) do
if rfind(slot, slot_spec) then
-- To save on memory, side-effect the existing forms.
for _, form in ipairs(forms) do
form.footnotes = iut.combine_footnotes(form.footnotes, spec.footnotes)
end
end
end
end
end
end
local function add_missing_links_to_forms(base)
-- Any forms without links should get them now. Redundant ones will be stripped later.
for slot, forms in pairs(base.forms) do
for _, form in ipairs(forms) do
if not form.form:find("%[%[") then
form.form = "[[" .. form.form .. "]]"
end
end
end
end
local function conjugate_verb(base)
add_present_indic(base)
add_present_subj(base)
add_imper(base)
add_finite_non_present(base)
add_non_finite_forms(base)
-- This should happen before add_combined_forms() so overrides of basic forms end up part of the combined forms.
process_slot_overrides(base, "do basic") -- do basic slot overrides
-- This should happen after process_slot_overrides() in case a derived slot is based on an override (as with the
-- imp_3s of [[dar]], [[estar]]).
copy_subjunctives_to_imperatives(base)
-- This should happen after process_slot_overrides() because overrides may have accents in them that need to be
-- removed. (This happens e.g. for most present indicative forms of [[ver]], which have accents in them for the
-- prefixed derived verbs, but the accents shouldn't be present in the base verb.)
remove_monosyllabic_accents(base)
if not base.nocomb then
add_combined_forms(base)
end
-- We need to add joined reflexives, then joined and non-joined clitics, then non-joined reflexives, so we get
-- [[házmelo]] but [[no]] [[me]] [[lo]] [[haga]].
if base.refl then
-- This should happen after remove_monosyllabic_accents() so the * marking the preservation of monosyllabic
-- accents doesn't end up in the middle of a word.
add_reflexive_or_fixed_clitic_to_forms(base, "do reflexive", "do joined")
process_slot_overrides(base, "do basic", "do reflexive") -- do reflexive-only basic slot overrides
end
if base.clitic then
-- This should happen after reflexives are added.
add_reflexive_or_fixed_clitic_to_forms(base, false, "do joined")
add_reflexive_or_fixed_clitic_to_forms(base, false, false)
end
if base.refl then
add_reflexive_or_fixed_clitic_to_forms(base, "do reflexive", false)
end
-- This should happen after add_reflexive_or_fixed_clitic_to_forms() so negative imperatives get the reflexive pronoun
-- and clitic in them.
generate_negative_imperatives(base)
if not base.nocomb then
process_slot_overrides(base, false) -- do combined slot overrides
end
-- This should happen before add_missing_links_to_forms() so that the comparison `form == base.lemma`
-- in handle_infinitive_linked() works correctly and compares unlinked forms to unlinked forms.
handle_infinitive_linked(base)
process_addnote_specs(base)
if not base.alternant_multiword_spec.args.noautolinkverb then
add_missing_links_to_forms(base)
end
end
local function parse_indicator_spec(angle_bracket_spec)
-- Store the original angle bracket spec so we can reconstruct the overall conj spec with the lemma(s) in them.
local base = {
angle_bracket_spec = angle_bracket_spec,
user_basic_overrides = {},
user_stems = {},
addnote_specs = {},
}
local function parse_err(msg)
error(msg .. ": " .. angle_bracket_spec)
end
local function fetch_footnotes(separated_group)
local footnotes
for j = 2, #separated_group - 1, 2 do
if separated_group[j + 1] ~= "" then
parse_err("Extraneous text after bracketed footnotes: '" .. table.concat(separated_group) .. "'")
end
if not footnotes then
footnotes = {}
end
table.insert(footnotes, separated_group[j])
end
return footnotes
end
local inside = angle_bracket_spec:match("^<(.*)>$")
assert(inside)
if inside == "" then
return base
end
local segments = iut.parse_balanced_segment_run(inside, "[", "]")
local dot_separated_groups = iut.split_alternating_runs(segments, "%.")
for i, dot_separated_group in ipairs(dot_separated_groups) do
local first_element = dot_separated_group[1]
if first_element == "addnote" then
local spec_and_footnotes = fetch_footnotes(dot_separated_group)
if #spec_and_footnotes < 2 then
parse_err("Spec with 'addnote' should be of the form 'addnote[SLOTSPEC][FOOTNOTE][FOOTNOTE][...]'")
end
local slot_spec = table.remove(spec_and_footnotes, 1)
local slot_spec_inside = rmatch(slot_spec, "^%[(.*)%]$")
if not slot_spec_inside then
parse_err("Internal error: slot_spec " .. slot_spec .. " should be surrounded with brackets")
end
local slot_specs = rsplit(slot_spec_inside, ",")
-- FIXME: Here, [[Module:it-verb]] called strip_spaces(). Generally we don't do this. Should we?
table.insert(base.addnote_specs, {slot_specs = slot_specs, footnotes = spec_and_footnotes})
elseif indicator_flags[first_element] then
if #dot_separated_group > 1 then
parse_err("No footnotes allowed with '" .. first_element .. "' spec")
end
if base[first_element] then
parse_err("Spec '" .. first_element .. "' specified twice")
end
base[first_element] = true
elseif rfind(first_element, ":") then
local colon_separated_groups = iut.split_alternating_runs(dot_separated_group, "%s*:%s*")
local first_element = colon_separated_groups[1][1]
if #colon_separated_groups[1] > 1 then
parse_err("Can't attach footnotes directly to '" .. first_element .. "' spec; attach them to the " ..
"colon-separated values following the initial colon")
end
if overridable_stems[first_element] then
if base.user_stems[first_element] then
parse_err("Overridable stem '" .. first_element .. "' specified twice")
end
table.remove(colon_separated_groups, 1)
base.user_stems[first_element] = overridable_stems[first_element](colon_separated_groups,
{prefix = first_element, base = base, parse_err = parse_err, fetch_footnotes = fetch_footnotes})
else -- assume a basic override; we validate further later when the possible slots are available
if base.user_basic_overrides[first_element] then
parse_err("Basic override '" .. first_element .. "' specified twice")
end
table.remove(colon_separated_groups, 1)
base.user_basic_overrides[first_element] = allow_multiple_values_for_override(
colon_separated_groups,
{prefix = first_element, base = base, parse_err = parse_err, fetch_footnotes = fetch_footnotes},
"add monosyllabic asterisk"
)
end
else
local comma_separated_groups = iut.split_alternating_runs(dot_separated_group, "%s*,%s*")
for j = 1, #comma_separated_groups do
local alt = comma_separated_groups[j][1]
if not vowel_alternants[alt] then
if #comma_separated_groups == 1 then
parse_err("Unrecognized spec or vowel alternant '" .. alt .. "'")
else
parse_err("Unrecognized vowel alternant '" .. alt .. "'")
end
end
if base.vowel_alt then
for _, existing_alt in ipairs(base.vowel_alt) do
if existing_alt.form == alt then
parse_err("Vowel alternant '" .. alt .. "' specified twice")
end
end
else
base.vowel_alt = {}
end
table.insert(base.vowel_alt, {form = alt, footnotes = fetch_footnotes(comma_separated_groups[j])})
end
end
end
return base
end
-- Normalize all lemmas, substituting the pagename for blank lemmas and adding links to multiword lemmas.
local function normalize_all_lemmas(alternant_multiword_spec, pagename)
-- (1) Add links to all before and after text. Remember the original text so we can reconstruct the verb spec later.
if not alternant_multiword_spec.args.noautolinktext then
iut.add_links_to_before_and_after_text(alternant_multiword_spec, "remember original")
end
-- (2) Remove any links from the lemma, but remember the original form
-- so we can use it below in the 'lemma_linked' form.
iut.map_word_specs(alternant_multiword_spec, function(base)
if base.lemma == "" then
base.lemma = pagename
end
base.user_specified_lemma = base.lemma
base.lemma = m_links.remove_links(base.lemma)
local refl_verb, clitic = rmatch(base.lemma, "^(.-)(l[aeo]s?)$")
if not refl_verb then
refl_verb, clitic = base.lemma, nil
end
local verb, refl = rmatch(refl_verb, "^(.-)(se)$")
if not verb then
verb, refl = refl_verb, nil
end
base.user_specified_verb = verb
base.refl = refl
base.clitic = clitic
if base.refl and base.clitic then
-- We have to parse the verb suffix to see how to construct the base verb; e.g.
-- abrírsela -> abrir but oírsela -> oír. We parse the verb suffix again in all cases
-- in detect_indicator_spec(), after splitting off the prefix of irrregular verbs.
local actual_verb
local inf_stem, suffix = rmatch(base.user_specified_verb, "^(.*)([aáeéií]r)$")
if not inf_stem then
error("Unrecognized infinitive: " .. base.user_specified_verb)
end
if suffix == "ír" and inf_stem:find("[aeo]$") then
-- accent on suffix should remain
base.verb = base.user_specified_verb
else
base.verb = inf_stem .. com.remove_accent_from_syllable(suffix)
end
else
base.verb = base.user_specified_verb
end
local linked_lemma
if alternant_multiword_spec.args.noautolinkverb or base.user_specified_lemma:find("%[%[") then
linked_lemma = base.user_specified_lemma
elseif base.refl or base.clitic then
-- Reconstruct the linked lemma with separate links around base verb, reflexive pronoun and clitic.
linked_lemma = base.user_specified_verb == base.verb and "[[" .. base.user_specified_verb .. "]]" or
"[[" .. base.verb .. "|" .. base.user_specified_verb .. "]]"
linked_lemma = linked_lemma .. (refl and "[[" .. refl .. "]]" or "") ..
(clitic and "[[" .. clitic .. "]]" or "")
else
-- Add links to the lemma so the user doesn't specifically need to, since we preserve
-- links in multiword lemmas and include links in non-lemma forms rather than allowing
-- the entire form to be a link.
linked_lemma = iut.add_links(base.user_specified_lemma)
end
base.linked_lemma = linked_lemma
end)
end
local function construct_stems(base)
local stems = base.stems
stems.pres_unstressed = stems.pres_unstressed or base.inf_stem
stems.pres_stressed = stems.pres_stressed or
-- If no_pres_stressed given, pres_stressed stem should be empty so no forms are generated.
base.no_pres_stressed and {} or
base.vowel_alt or
base.inf_stem
stems.pres1_and_sub = stems.pres1_and_sub or
-- If no_pres_stressed given, the entire subjunctive is missing.
base.no_pres_stressed and {} or
-- If no_pres1_and_sub given, pres1 and entire subjunctive are missing.
base.no_pres1_and_sub and {} or
nil
stems.pres1 = stems.pres1 or stems.pres1_and_sub or stems.pres_stressed
stems.impf = stems.impf or base.inf_stem
stems.pret = stems.pret or base.inf_stem
stems.pret_conj = stems.pret_conj or base.conj
stems.fut = stems.fut or base.inf_stem .. base.conj
stems.cond = stems.cond or stems.fut
stems.pres_sub_stressed = stems.pres_sub_stressed or stems.pres1
stems.pres_sub_unstressed = stems.pres_sub_unstressed or stems.pres1_and_sub or stems.pres_unstressed
stems.impf_sub_ra = stems.impf_sub_ra or stems.pret
stems.impf_sub_se = stems.impf_sub_se or stems.pret
stems.fut_sub = stems.fut_sub or stems.pret
stems.pp = stems.pp or base.conj == "ar" and
combine_stem_ending(base, "pp_ms", base.inf_stem, "ad", "is combining ending") or
-- use combine_stem_ending esp. so we get reído, caído, etc.
combine_stem_ending(base, "pp_ms", base.inf_stem, "id", "is combining ending")
end
-- Make a list of the slots given in `list1` and optionally `list2`, with `prefix` added to the beginning of each slot
-- name. The elements of each list are of the form {SLOT, ACCEL}. Used for error messages.
local function construct_possible_slots(list1, list2, prefix)
list2 = list2 or {}
prefix = prefix or ""
local slots = {}
local function insert_list_slots(list)
for _, slotaccel in ipairs(list) do
local slot, accel = unpack(slotaccel)
table.insert(slots, prefix .. slot)
end
end
insert_list_slots(list1)
insert_list_slots(list2)
return m_table.serialCommaJoin(slots)
end
local function detect_indicator_spec(base)
base.forms = {}
base.non_reflexive_forms = {}
base.stems = {}
if (base.only3s and 1 or 0) + (base.only3sp and 1 or 0) + (base.only3p and 1 or 0) > 1 then
error("Only one of 'only3s', 'only3sp' and 'only3p' can be specified")
end
base.basic_overrides = {}
base.basic_reflexive_only_overrides = {}
base.combined_overrides = {}
if not base.no_built_in then
for _, built_in_conj in ipairs(built_in_conjugations) do
if type(built_in_conj.match) == "function" then
base.prefix, base.non_prefixed_verb = built_in_conj.match(base.verb)
elseif built_in_conj.match:find("^%^") and rsub(built_in_conj.match, "^%^", "") == base.verb then
-- begins with ^, for exact match, and matches
base.prefix, base.non_prefixed_verb = "", base.verb
else
base.prefix, base.non_prefixed_verb = rmatch(base.verb, "^(.*)(" .. built_in_conj.match .. ")$")
end
if base.prefix then
-- we found a built-in verb
base.irreg_verb = true
for stem, forms in pairs(built_in_conj.forms) do
if stem:find("^refl_") then
stem = stem:gsub("^refl_", "")
if not base.alternant_multiword_spec.verb_slots_basic_map[stem] then
error("Internal error: setting for 'refl_" .. stem .. "' does not refer to a basic verb slot")
end
base.basic_reflexive_only_overrides[stem] = forms
elseif base.alternant_multiword_spec.verb_slots_basic_map[stem] then
-- an individual form override of a basic form
base.basic_overrides[stem] = forms
elseif base.alternant_multiword_spec.verb_slots_combined_map[stem] then
-- an individual form override of a combined form
base.combined_overrides[stem] = forms
else
base.stems[stem] = forms
end
end
break
end
end
end
-- Override built-in-verb stems and overrides with user-specified ones.
for stem, values in pairs(base.user_stems) do
base.stems[stem] = values
end
for override, values in pairs(base.user_basic_overrides) do
if override:find("^refl_") then
if not base.refl then
error("Can't set reflexive-only override '" .. override .. "' on a non-reflexive verb")
end
override = override:gsub("^refl_", "")
if not base.alternant_multiword_spec.verb_slots_basic_map[override] then
error("Unrecognized reflexive-only override 'refl_" .. override .. "': possible slots are " ..
construct_possible_slots(base.alternant_multiword_spec.verb_slots_basic, nil, "refl_"))
end
base.basic_reflexive_only_overrides[override] = values
elseif base.alternant_multiword_spec.verb_slots_basic_map[override] then
base.basic_overrides[override] = values
elseif base.alternant_multiword_spec.verb_slots_combined_map[override] then
base.combined_overrides[override] = values
else
error("Unrecognized override '" .. override .. "': possible slots are " ..
construct_possible_slots(base.alternant_multiword_spec.verb_slots_basic,
base.alternant_multiword_spec.verb_slots_combined))
end
end
base.prefix = base.prefix or ""
base.non_prefixed_verb = base.non_prefixed_verb or base.verb
local inf_stem, suffix = rmatch(base.non_prefixed_verb, "^(.*)([aeií]r)$")
if not inf_stem then
error("Unrecognized infinitive: " .. base.verb)
end
base.inf_stem = inf_stem
suffix = suffix == "ír" and "ir" or suffix
base.conj = suffix
base.frontback = suffix == "ar" and "back" or "front"
if base.stems.vowel_alt then -- built-in verb with specified vowel alternation
if base.vowel_alt then
error(base.verb .. " is a recognized built-in verb, and should not have vowel alternations specified with it")
end
base.vowel_alt = iut.convert_to_general_list_form(base.stems.vowel_alt)
end
-- Propagate built-in-verb indicator flags to `base` and combine with user-specified flags.
for indicator_flag, _ in pairs(indicator_flags) do
base[indicator_flag] = base[indicator_flag] or base.stems[indicator_flag]
end
-- Convert vowel alternation indicators into stems.
if base.vowel_alt then
for _, altform in ipairs(base.vowel_alt) do
altform.alt = altform.form -- save original indicator
local alt = altform.alt
if base.conj == "ir" then
local raising = (
alt == "ie-i" or alt == "ye-i" or alt == "ue-u" or alt == "i" or alt == "í" or alt == "ú"
)
if base.stems.raising_conj == nil then
base.stems.raising_conj = raising
elseif base.stems.raising_conj ~= raising then
error("Can't currently support a mixture of raising (e.g. 'ie-i') and non-raising (e.g. 'ie') vowel alternations in -ir verbs")
end
end
if alt == "+" then
altform.form = base.inf_stem
else
local normalized_alt = alt
if alt == "ie-i" or alt == "ye-i" or alt == "ue-u" then
if base.conj ~= "ir" then
error("Vowel alternation '" .. alt .. "' only supported with -ir verbs")
end
-- ie-i is like i except for the vowel raising before i+V, similarly for ye-i, ue-u,
-- so convert appropriately.
normalized_alt = alt == "ie-i" and "ie" or alt == "ye-i" and "ye" or "ue"
end
local ret = com.apply_vowel_alternation(base.inf_stem, normalized_alt)
if ret.err then
error("To use '" .. alt .. "', present stem '" .. base.inf_stem .. "' " .. ret.err)
end
altform.form = ret.ret
end
end
end
end
local function detect_all_indicator_specs(alternant_multiword_spec)
-- Propagate some settings up; some are used internally, others by [[Module:es-headword]].
iut.map_word_specs(alternant_multiword_spec, function(base)
-- Internal indicator flags. Do these before calling detect_indicator_spec() because add_slots() uses them.
for _, prop in ipairs { "refl", "clitic" } do
if base[prop] then
alternant_multiword_spec[prop] = true
end
end
base.alternant_multiword_spec = alternant_multiword_spec
-- If reflexive or fixed clitic, don't include combined forms.
alternant_multiword_spec.nocomb = alternant_multiword_spec.nocomb or base.clitic or base.refl
end)
add_slots(alternant_multiword_spec)
iut.map_word_specs(alternant_multiword_spec, function(base)
base.nocomb = alternant_multiword_spec.args.nocomb
detect_indicator_spec(base)
-- User-specified indicator flags. Do these after calling detect_indicator_spec() because the latter may set these
-- indicators for built-in verbs.
for prop, _ in pairs(indicator_flags) do
if base[prop] then
alternant_multiword_spec[prop] = true
end
end
construct_stems(base)
end)
end
local function add_categories_and_annotation(alternant_multiword_spec, base, multiword_lemma)
local function insert_ann(anntype, value)
m_table.insertIfNot(alternant_multiword_spec.annotation[anntype], value)
end
local function insert_cat(cat, also_when_multiword)
-- Don't place multiword terms in categories like 'Spanish verbs ending in -ar' to avoid spamming the
-- categories with such terms.
if also_when_multiword or not multiword_lemma then
m_table.insertIfNot(alternant_multiword_spec.categories, cat .. "ภาษาสเปน")
end
end
if check_for_red_links and alternant_multiword_spec.source_template == "es-conj" and multiword_lemma then
for _, slot_and_accel in ipairs(alternant_multiword_spec.all_verb_slots) do
local slot = slot_and_accel[1]
local forms = base.forms[slot]
local must_break = false
if forms then
for _, form in ipairs(forms) do
if not form.form:find("%[%[") then
local title = mw.title.new(form.form)
if title and not title.exists then
insert_cat("verbs with red links in their inflection tables")
must_break = true
break
end
end
end
end
if must_break then
break
end
end
end
--insert_cat("คำกริยาที่ลงท้ายด้วย -" .. base.conj)
m_table.insertIfNot(alternant_multiword_spec.categories, "คำกริยาภาษาสเปนที่ลงท้ายด้วย -" .. base.conj)
if base.irreg_verb then
insert_ann("irreg", "ไม่ปรกติ")
insert_cat("คำกริยาไม่ปรกติ")
else
insert_ann("irreg", "ปรกติ")
end
if base.only3s then
insert_ann("defective", "อบุรุษ")
insert_cat("คำอบุรุษกริยา")
elseif base.only3sp then
insert_ann("defective", "บุรุษที่สามเท่านั้น")
insert_cat("คำกริยาบุรุษที่สามเท่านั้น")
elseif base.only3p then
insert_ann("defective", "บุรุษที่สามพหูพจน์เท่านั้น")
insert_cat("คำกริยาบุรุษที่สามพหูพจน์เท่านั้น")
elseif base.no_pres_stressed or base.no_pres1_and_sub then
insert_ann("defective", "บกพร่อง")
insert_cat("คำกริยาบกพร่อง")
else
insert_ann("defective", "บุรุษปรกติ")
end
if base.clitic then
insert_cat("verbs with lexical clitics")
end
if base.refl then
insert_cat("คำกริยาสะท้อน")
end
if not base.vowel_alt then
insert_ann("vowel_alt", "ไม่เปลี่ยนแปรสระ")
else
local inf_stem = base.inf_stem:gsub("[gq]u$", "x")
for _, alt in ipairs(base.vowel_alt) do
if alt.alt == "+" then
insert_ann("vowel_alt", "ไม่เปลี่ยนแปรสระ")
else
local desc
if alt.alt == "ue" and rfind(inf_stem, "u" .. C .. "*$") then
desc = "เปลี่ยนแปร u-ue" -- jugar
elseif alt.alt == "ie" and rfind(inf_stem, "i" .. C .. "*$") then
desc = "เปลี่ยนแปร i-ie" -- adquirir
elseif alt.alt == "í" and rfind(inf_stem, "e" .. C .. "*$") then
desc = "เปลี่ยนแปร e-í" -- reír, freír, etc.
else
desc = "เปลี่ยนแปร " .. vowel_alternant_to_desc[alt.alt]
end
insert_ann("vowel_alt", desc)
--insert_cat("คำกริยาที่" .. desc)
m_table.insertIfNot(alternant_multiword_spec.categories, "คำกริยาภาษาสเปนที่มีการ" .. desc)
end
end
end
local cons_alt = base.stems.cons_alt
if cons_alt == nil then
if base.conj == "ar" then
if base.inf_stem:find("z$") then
cons_alt = "c-z"
elseif base.inf_stem:find("ç$") then
cons_alt = "c-ç"
elseif base.inf_stem:find("c$") then
cons_alt = "c-qu"
elseif base.inf_stem:find("g$") then
cons_alt = "g-gu"
elseif base.inf_stem:find("gu$") then
cons_alt = "gu-gü"
end
else
if base.no_pres_stressed or base.no_pres1_and_sub then
cons_alt = nil -- no c-zc alternation in balbucir or arrecir
elseif rfind(base.inf_stem, V .. "c$") then
cons_alt = "c-zc"
elseif base.inf_stem:find("sc$") then
cons_alt = "แข็ง-อ่อน"
elseif base.inf_stem:find("c$") then
cons_alt = "c-z"
elseif base.inf_stem:find("qu$") then
cons_alt = "c-qu"
elseif base.inf_stem:find("g$") then
cons_alt = "g-j"
elseif base.inf_stem:find("gu$") then
cons_alt = "g-gu"
elseif base.inf_stem:find("gü$") then
cons_alt = "gu-gü"
end
end
end
if cons_alt then
local desc = "เปลี่ยนแปร" .. (cons_alt ~= "แข็ง-อ่อน" and " " or "") .. cons_alt
insert_ann("cons_alt", desc)
--insert_cat("คำกริยาที่" .. desc)
m_table.insertIfNot(alternant_multiword_spec.categories, "คำกริยาภาษาสเปนที่มีการ" .. desc)
else
insert_ann("cons_alt", "ไม่เปลี่ยนแปรพยัญชนะ")
end
end
-- Compute the categories to add the verb to, as well as the annotation to display in the
-- conjugation title bar. We combine the code to do these functions as both categories and
-- title bar contain similar information.
local function compute_categories_and_annotation(alternant_multiword_spec)
alternant_multiword_spec.categories = {}
local ann = {}
alternant_multiword_spec.annotation = ann
ann.irreg = {}
ann.defective = {}
ann.vowel_alt = {}
ann.cons_alt = {}
local multiword_lemma = false
for _, form in ipairs(alternant_multiword_spec.forms.infinitive) do
if form.form:find(" ") then
multiword_lemma = true
break
end
end
iut.map_word_specs(alternant_multiword_spec, function(base)
add_categories_and_annotation(alternant_multiword_spec, base, multiword_lemma)
end)
local ann_parts = {}
local irreg = table.concat(ann.irreg, " or ")
if irreg ~= "" and irreg ~= "regular" then
table.insert(ann_parts, irreg)
end
local defective = table.concat(ann.defective, " or ")
if defective ~= "" and defective ~= "regular" then
table.insert(ann_parts, defective)
end
local vowel_alt = table.concat(ann.vowel_alt, " or ")
if vowel_alt ~= "" and vowel_alt ~= "non-alternating" then
table.insert(ann_parts, vowel_alt)
end
local cons_alt = table.concat(ann.cons_alt, " or ")
if cons_alt ~= "" and cons_alt ~= "non-alternating" then
table.insert(ann_parts, cons_alt)
end
alternant_multiword_spec.annotation = table.concat(ann_parts, "; ")
end
local function show_forms(alternant_multiword_spec)
local lemmas = alternant_multiword_spec.forms.infinitive
alternant_multiword_spec.lemmas = lemmas -- save for later use in make_table()
local reconstructed_verb_spec = iut.reconstruct_original_spec(alternant_multiword_spec)
-- Initialize the footnotes with those for the future subjunctive and maybe the pres subjunctive
-- voseo usage. In the latter case, we only do it if there is a distinct pres subjunctive voseo form.
local function create_footnote_obj()
local obj = iut.create_footnote_obj()
iut.get_footnote_text({fut_sub_note}, obj)
-- Compute whether the tú and voseo variants are different, for each voseo variant.
-- We use this later in make_table().
for _, slot in ipairs({"pres_2s", "pres_sub_2s", "imp_2s"}) do
alternant_multiword_spec["separate_" .. slot .. "v"] = false
iut.map_word_specs(alternant_multiword_spec, function(base)
if not m_table.deepEquals(base.forms[slot], base.forms[slot .. "v"]) then
alternant_multiword_spec["separate_" .. slot .. "v"] = true
end
end)
end
if alternant_multiword_spec.separate_pres_sub_2sv then
iut.get_footnote_text({pres_sub_voseo_note}, obj)
end
return obj
end
local function transform_accel_obj(slot, formobj, accel_obj)
-- No accelerators for negative imperatives, which are always multiword and derived directly from the
-- present subjunctive.
if slot:find("^neg_imp") then
return nil
end
if accel_obj then
if slot:find("^pp_") then
accel_obj.form = slot
elseif slot == "gerund" then
accel_obj.form = "gerund-" .. reconstructed_verb_spec
else
accel_obj.form = "verb-form-" .. reconstructed_verb_spec
end
end
return accel_obj
end
local props = {
lang = lang,
lemmas = lemmas,
create_footnote_obj = create_footnote_obj,
transform_accel_obj = transform_accel_obj,
}
props.slot_list = alternant_multiword_spec.verb_slots_basic
iut.show_forms(alternant_multiword_spec.forms, props)
alternant_multiword_spec.footnote_basic = alternant_multiword_spec.forms.footnote
props.create_footnote_obj = nil
props.slot_list = alternant_multiword_spec.verb_slots_combined
iut.show_forms(alternant_multiword_spec.forms, props)
alternant_multiword_spec.footnote_combined = alternant_multiword_spec.forms.footnote
end
local notes_template = [=[
<div class="roa-footnote-outer-div" style="width:100%;">
<div class="roa-footnote-inner-div">
{footnote}
</div></div>
]=]
local pres_2sv_template = '<sup><sup>tú</sup></sup><br />{pres_2sv}<sup><sup>vos</sup></sup>'
local pres_sub_2sv_template = '<sup><sup>tú</sup></sup><br />{pres_sub_2sv}<sup><sup>vos<sup class="roa-red-superscript">2</sup></sup></sup>'
local imp_2sv_template = '<sup><sup>tú</sup></sup><br />{imp_2sv}<sup><sup>vos</sup></sup>'
local basic_table = [=[
{description}<div class="NavFrame">
<div class="NavHead" align=center> การผันรูปของ {title} (ดูที่ [[ภาคผนวก:คำกริยาภาษาสเปน]])</div>
<div class="NavContent">
{\op}| class="roa-inflection-table"
|-
! colspan="3" class="roa-nonfinite-header" | <span title="infinitivo">รูปกริยากลาง</span>
| colspan="5" | {infinitive}
|-
! colspan="3" class="roa-nonfinite-header" | <span title="gerundio">รูปกริยาเป็นนาม</span>
| colspan="5" | {gerund}
|-
! rowspan="3" colspan="2" class="roa-nonfinite-header" | <span title="participio (pasado)">รูปกริยาขยายอดีตกาล</span>
| colspan="2" class="roa-nonfinite-header" |
! colspan="2" class="roa-nonfinite-header" | <span title="masculino">เพศชาย</span>
! colspan="2" class="roa-nonfinite-header" | <span title="femenino">เพศหญิง</span>
|-
! colspan="2" class="roa-nonfinite-header" | เอกพจน์
| colspan="2" | {pp_ms}
| colspan="2" | {pp_fs}
|-
! colspan="2" class="roa-nonfinite-header" | พหูพจน์
| colspan="2" | {pp_mp}
| colspan="2" | {pp_fp}
|-
! colspan="2" rowspan="2" class="roa-person-number-header" |
! colspan="3" class="roa-person-number-header" | เอกพจน์
! colspan="3" class="roa-person-number-header" | พหูพจน์
|-
! class="roa-person-number-header" | บุรุษที่หนึ่ง
! class="roa-person-number-header" | บุรุษที่สอง
! class="roa-person-number-header" | บุรุษที่สาม
! class="roa-person-number-header" | บุรุษที่หนึ่ง
! class="roa-person-number-header" | บุรุษที่สอง
! class="roa-person-number-header" | บุรุษที่สาม
|-{reflexive_non_finite_clause}
! rowspan="6" class="roa-indicative-left-rail" | <span title="indicativo">มาลาบอกเล่า</span>
! class="roa-native-person-number-header" |
! class="roa-native-person-number-header" | yo
! class="roa-native-person-number-header" | tú<br />vos
! class="roa-native-person-number-header" | él/ella/ello<br />usted
! class="roa-native-person-number-header" | nosotros<br />nosotras
! class="roa-native-person-number-header" | vosotros<br />vosotras
! class="roa-native-person-number-header" | ellos/ellas<br />ustedes
|-
! class="roa-finite-header" | <span title="presente de indicativo">ปัจจุบันกาล</span>
| {pres_1s}
| {pres_2s}{pres_2sv_text}
| {pres_3s}
| {pres_1p}
| {pres_2p}
| {pres_3p}
|-
! class="roa-finite-header" | <span title="pretérito imperfecto (copréterito)">ไม่สมบูรณ์</span>
| {impf_1s}
| {impf_2s}
| {impf_3s}
| {impf_1p}
| {impf_2p}
| {impf_3p}
|-
! class="roa-finite-header" | <span title="pretérito perfecto simple (pretérito indefinido)">อดีตกาลสิ้นสุด (สมบูรณ์)</span>
| {pret_1s}
| {pret_2s}
| {pret_3s}
| {pret_1p}
| {pret_2p}
| {pret_3p}
|-
! class="roa-finite-header" | <span title="futuro simple (futuro imperfecto)">อนาคตกาล</span>
| {fut_1s}
| {fut_2s}
| {fut_3s}
| {fut_1p}
| {fut_2p}
| {fut_3p}
|-
! class="roa-finite-header" | <span title="condicional simple (pospretérito de modo indicativo)">มาลาเงื่อนไข</span>
| {cond_1s}
| {cond_2s}
| {cond_3s}
| {cond_1p}
| {cond_2p}
| {cond_3p}
|-
! class="roa-person-number-header" style="height:.75em" colspan="8" |
|-
! rowspan="5" class="roa-subjunctive-left-rail" | <span title="subjuntivo">มาลาสมมุติ</span>
! class="roa-native-person-number-header" |
! class="roa-native-person-number-header" | yo
! class="roa-native-person-number-header" | tú<br />vos
! class="roa-native-person-number-header" | él/ella/ello<br />usted
! class="roa-native-person-number-header" | nosotros<br />nosotras
! class="roa-native-person-number-header" | vosotros<br />vosotras
! class="roa-native-person-number-header" | ellos/ellas<br />ustedes
|-
! class="roa-finite-header" | <span title="presente de subjuntivo">ปัจจุบันกาล</span>
| {pres_sub_1s}
| {pres_sub_2s}{pres_sub_2sv_text}
| {pres_sub_3s}
| {pres_sub_1p}
| {pres_sub_2p}
| {pres_sub_3p}
|-
! class="roa-finite-header" | <span title="pretérito imperfecto de subjuntivo">ไม่สมบูรณ์</span><br />(ra)
| {impf_sub_ra_1s}
| {impf_sub_ra_2s}
| {impf_sub_ra_3s}
| {impf_sub_ra_1p}
| {impf_sub_ra_2p}
| {impf_sub_ra_3p}
|-
! class="roa-finite-header" | <span title="pretérito imperfecto de subjuntivo">ไม่สมบูรณ์</span><br />(se)
| {impf_sub_se_1s}
| {impf_sub_se_2s}
| {impf_sub_se_3s}
| {impf_sub_se_1p}
| {impf_sub_se_2p}
| {impf_sub_se_3p}
|-
! class="roa-finite-header" | <span title="futuro simple de subjuntivo (futuro de subjuntivo)">อนาคตกาล</span><sup class="roa-red-superscript">1</sup>
| {fut_sub_1s}
| {fut_sub_2s}
| {fut_sub_3s}
| {fut_sub_1p}
| {fut_sub_2p}
| {fut_sub_3p}
|-
! class="roa-person-number-header" style="height:.75em" colspan="8" |
|-
! rowspan="6" class="roa-imperative-left-rail" | <span title="imperativo">มาลาสั่ง</span>
! class="roa-native-person-number-header" |
! class="roa-native-person-number-header" | —
! class="roa-native-person-number-header" | tú<br />vos
! class="roa-native-person-number-header" | usted
! class="roa-native-person-number-header" | nosotros<br />nosotras
! class="roa-native-person-number-header" | vosotros<br />vosotras
! class="roa-native-person-number-header" | ustedes
|-
! class="roa-finite-header" | <span title="imperativo afirmativo">เชิงยืนยัน</span>
|
| {imp_2s}{imp_2sv_text}
| {imp_3s}
| {imp_1p}
| {imp_2p}
| {imp_3p}
|-
! class="roa-finite-header" | <span title="imperativo negativo">เชิงปฏิเสธ</span>
|
| {neg_imp_2s}
| {neg_imp_3s}
| {neg_imp_1p}
| {neg_imp_2p}
| {neg_imp_3p}
|{\cl}{notes_clause}</div></div>
]=]
local reflexive_non_finite_template = [=[
! rowspan="3" class="roa-nonfinite-header" | personal non-finite
! class="roa-native-person-number-header" |
! class="roa-native-person-number-header" | yo
! class="roa-native-person-number-header" | tú<br />vos
! class="roa-native-person-number-header" | él/ella/ello<br />usted
! class="roa-native-person-number-header" | nosotros<br />nosotras
! class="roa-native-person-number-header" | vosotros<br />vosotras
! class="roa-native-person-number-header" | ellos/ellas<br />ustedes
|-
! class="roa-finite-header" | <span title="infinitivo">รูปกริยากลาง</span>
| {infinitive_1s}
| {infinitive_2s}
| {infinitive_3s}
| {infinitive_1p}
| {infinitive_2p}
| {infinitive_3p}
|-
! class="roa-finite-header" | <span title="gerundio">รูปกริยาเป็นนาม</span>
| {gerund_1s}
| {gerund_2s}
| {gerund_3s}
| {gerund_1p}
| {gerund_2p}
| {gerund_3p}
|-
! class="roa-person-number-header" style="height:.75em" colspan="8" |
|-]=]
local combined_form_combined_tu_vos_template = [=[
! class="roa-person-number-header" style="height:.35em" colspan="8" |
|-
! rowspan="2" class="roa-combined-with-imperative" | with informal second-person singular ''tú/vos'' imperative {imp_2s}
! class="roa-finite-header" | สัมปทานการก
| {imp_2s_comb_me}
| {imp_2s_comb_te}
| {imp_2s_comb_le}
| {imp_2s_comb_nos}
| ''ไม่ใช้''
| {imp_2s_comb_les}
|-
! class="roa-finite-header" | กรรมการก
| {imp_2s_comb_me}
| {imp_2s_comb_te}
| {imp_2s_comb_lo}, {imp_2s_comb_la}
| {imp_2s_comb_nos}
| ''ไม่ใช้''
| {imp_2s_comb_los}, {imp_2s_comb_las}
|-]=]
local combined_form_separate_tu_vos_template = [=[
! class="roa-person-number-header" style="height:.35em" colspan="8" |
|-
! rowspan="2" class="roa-combined-with-imperative" | with informal second-person singular ''tú'' imperative {imp_2s}
! class="roa-finite-header" | สัมปทานการก
| {imp_2s_comb_me}
| {imp_2s_comb_te}
| {imp_2s_comb_le}
| {imp_2s_comb_nos}
| ''ไม่ใช้''
| {imp_2s_comb_les}
|-
! class="roa-finite-header" | กรรมการก
| {imp_2s_comb_me}
| {imp_2s_comb_te}
| {imp_2s_comb_lo}, {imp_2s_comb_la}
| {imp_2s_comb_nos}
| ''ไม่ใช้''
| {imp_2s_comb_los}, {imp_2s_comb_las}
|-
! class="roa-person-number-header" style="height:.35em" colspan="8" |
|-
! rowspan="2" class="roa-combined-with-imperative" | with informal second-person singular ''vos'' imperative {imp_2sv}
! class="roa-finite-header" | สัมปทานการก
| {imp_2sv_comb_me}
| {imp_2sv_comb_te}
| {imp_2sv_comb_le}
| {imp_2sv_comb_nos}
| ''ไม่ใช้''
| {imp_2sv_comb_les}
|-
! class="roa-finite-header" | กรรมการก
| {imp_2sv_comb_me}
| {imp_2sv_comb_te}
| {imp_2sv_comb_lo}, {imp_2sv_comb_la}
| {imp_2sv_comb_nos}
| ''ไม่ใช้''
| {imp_2sv_comb_los}, {imp_2sv_comb_las}
|-]=]
local combined_form_table = [=[
{description}<div class="NavFrame">
<div class="NavHead" align=center> รูปประสมของ {title} ที่เลือกมาบางส่วน</div>
<div class="NavContent">
รูปเหล่านี้สร้างขึ้นโดยอัตโนมัติและอาจไม่ได้ใช้งานจริง การใช้คำสรรพนามแตกต่างกันไปในแต่ละภูมิภาค
{\op}| class="inflection-table es-inflection-table"
|-
! colspan="2" rowspan="2" class="roa-person-number-header" |
! colspan="3" class="roa-person-number-header" | เอกพจน์
! colspan="3" class="roa-person-number-header" | พหูพจน์
|-
! class="roa-person-number-header" | บุรุษที่หนึ่ง
! class="roa-person-number-header" | บุรุษที่สอง
! class="roa-person-number-header" | บุรุษที่สาม
! class="roa-person-number-header" | บุรุษที่หนึ่ง
! class="roa-person-number-header" | บุรุษที่สอง
! class="roa-person-number-header" | บุรุษที่สาม
|-
! rowspan="2" class="roa-combined-with-infinitive" | with infinitive {infinitive}
! class="roa-finite-header" | สัมปทานการก
| {infinitive_comb_me}
| {infinitive_comb_te}
| {infinitive_comb_le}, {infinitive_comb_se}
| {infinitive_comb_nos}
| {infinitive_comb_os}
| {infinitive_comb_les}, {infinitive_comb_se}
|-
! class="roa-finite-header" | กรรมการก
| {infinitive_comb_me}
| {infinitive_comb_te}
| {infinitive_comb_lo}, {infinitive_comb_la}, {infinitive_comb_se}
| {infinitive_comb_nos}
| {infinitive_comb_os}
| {infinitive_comb_los}, {infinitive_comb_las}, {infinitive_comb_se}
|-
! class="roa-person-number-header" style="height:.35em" colspan="8" |
|-
! rowspan="2" class="roa-combined-with-gerund" | with gerund {gerund}
! class="roa-finite-header" | สัมปทานการก
| {gerund_comb_me}
| {gerund_comb_te}
| {gerund_comb_le}, {gerund_comb_se}
| {gerund_comb_nos}
| {gerund_comb_os}
| {gerund_comb_les}, {gerund_comb_se}
|-
! class="roa-finite-header" | กรรมการก
| {gerund_comb_me}
| {gerund_comb_te}
| {gerund_comb_lo}, {gerund_comb_la}, {gerund_comb_se}
| {gerund_comb_nos}
| {gerund_comb_os}
| {gerund_comb_los}, {gerund_comb_las}, {gerund_comb_se}
|-{tu_vos_clause}
! class="roa-person-number-header" style="height:.35em" colspan="8" |
|-
! rowspan="2" class="roa-combined-with-imperative" | with formal second-person singular imperative {imp_3s}
! class="roa-finite-header" | สัมปทานการก
| {imp_3s_comb_me}
| ''ไม่ใช้''
| {imp_3s_comb_le}, {imp_3s_comb_se}
| {imp_3s_comb_nos}
| ''ไม่ใช้''
| {imp_3s_comb_les}
|-
! class="roa-finite-header" | กรรมการก
| {imp_3s_comb_me}
| ''ไม่ใช้''
| {imp_3s_comb_lo}, {imp_3s_comb_la}, {imp_3s_comb_se}
| {imp_3s_comb_nos}
| ''ไม่ใช้''
| {imp_3s_comb_los}, {imp_3s_comb_las}
|-
! class="roa-person-number-header" style="height:.35em" colspan="8" |
|-
! rowspan="2" class="roa-combined-with-imperative" | with first-person plural imperative {imp_1p}
! class="roa-finite-header" | สัมปทานการก
| ''ไม่ใช้''
| {imp_1p_comb_te}
| {imp_1p_comb_le}
| {imp_1p_comb_nos}
| {imp_1p_comb_os}
| {imp_1p_comb_les}
|-
! class="roa-finite-header" | กรรมการก
| ''ไม่ใช้''
| {imp_1p_comb_te}
| {imp_1p_comb_lo}, {imp_1p_comb_la}
| {imp_1p_comb_nos}
| {imp_1p_comb_os}
| {imp_1p_comb_los}, {imp_1p_comb_las}
|-
! class="roa-person-number-header" style="height:.35em" colspan="8" |
|-
! rowspan="2" class="roa-combined-with-imperative" | with informal second-person plural imperative {imp_2p}
! class="roa-finite-header" | สัมปทานการก
| {imp_2p_comb_me}
| ''ไม่ใช้''
| {imp_2p_comb_le}
| {imp_2p_comb_nos}
| {imp_2p_comb_os}
| {imp_2p_comb_les}
|-
! class="roa-finite-header" | กรรมการก
| {imp_2p_comb_me}
| ''ไม่ใช้''
| {imp_2p_comb_lo}, {imp_2p_comb_la}
| {imp_2p_comb_nos}
| {imp_2p_comb_os}
| {imp_2p_comb_los}, {imp_2p_comb_las}
|-
! class="roa-person-number-header" style="height:.35em" colspan="8" |
|-
! rowspan="2" class="roa-combined-with-imperative" | with formal second-person plural imperative {imp_3p}
! class="roa-finite-header" | สัมปทานการก
| {imp_3p_comb_me}
| ''ไม่ใช้''
| {imp_3p_comb_le}
| {imp_3p_comb_nos}
| ''ไม่ใช้''
| {imp_3p_comb_les}, {imp_3p_comb_se}
|-
! class="roa-finite-header" | กรรมการก
| {imp_3p_comb_me}
| ''ไม่ใช้''
| {imp_3p_comb_lo}, {imp_3p_comb_la}
| {imp_3p_comb_nos}
| ''ไม่ใช้''
| {imp_3p_comb_los}, {imp_3p_comb_las}, {imp_3p_comb_se}
|{\cl}{notes_clause}</div></div>
]=]
local function make_table(alternant_multiword_spec)
local forms = alternant_multiword_spec.forms
forms.title = link_term(alternant_multiword_spec.lemmas[1].form)
if alternant_multiword_spec.annotation ~= "" then
forms.title = forms.title .. " (" .. alternant_multiword_spec.annotation .. ")"
end
forms.description = ""
-- Format the basic table.
forms.footnote = alternant_multiword_spec.footnote_basic
forms.reflexive_non_finite_clause = alternant_multiword_spec.refl and m_string_utilities.format(reflexive_non_finite_template, forms) or ""
forms.notes_clause = forms.footnote ~= "" and m_string_utilities.format(notes_template, forms) or ""
-- The separate_* values are computed in show_forms().
forms.pres_2sv_text = alternant_multiword_spec.separate_pres_2sv and m_string_utilities.format(pres_2sv_template, forms) or ""
forms.pres_sub_2sv_text = alternant_multiword_spec.separate_pres_sub_2sv and m_string_utilities.format(pres_sub_2sv_template, forms) or ""
forms.imp_2sv_text = alternant_multiword_spec.separate_imp_2sv and m_string_utilities.format(imp_2sv_template, forms) or ""
local formatted_basic_table = m_string_utilities.format(basic_table, forms)
-- Format the combined table.
local formatted_combined_table
if alternant_multiword_spec.refl or alternant_multiword_spec.args.nocomb or alternant_multiword_spec.clitic then
formatted_combined_table = ""
else
forms.footnote = alternant_multiword_spec.footnote_combined
forms.notes_clause = forms.footnote ~= "" and m_string_utilities.format(notes_template, forms) or ""
-- separate_imp_2sv is computed in show_forms().
local tu_vos_template = alternant_multiword_spec.separate_imp_2sv and combined_form_separate_tu_vos_template or
combined_form_combined_tu_vos_template
forms.tu_vos_clause = m_string_utilities.format(tu_vos_template, forms)
formatted_combined_table = m_string_utilities.format(combined_form_table, forms)
end
-- Paste them together.
return require("Module:TemplateStyles")("Module:roa-verb/style.css") .. formatted_basic_table .. formatted_combined_table
end
-- Externally callable function to parse and conjugate a verb given user-specified arguments.
-- Return value is WORD_SPEC, an object where the conjugated forms are in `WORD_SPEC.forms`
-- for each slot. If there are no values for a slot, the slot key will be missing. The value
-- for a given slot is a list of objects {form=FORM, footnotes=FOOTNOTES}.
function export.do_generate_forms(args, source_template, headword_head, double_combined_forms_to_include)
local PAGENAME = mw.title.getCurrentTitle().text
local function in_template_space()
return mw.title.getCurrentTitle().nsText == "แม่แบบ"
end
-- Determine the verb spec we're being asked to generate the conjugation of. This may be taken from the
-- current page title or the value of |pagename=; but not when called from {{es-verb form of}}, where the
-- page title is a non-lemma form. Note that the verb spec may omit the infinitive; e.g. it may be "<ue>".
-- For this reason, we use the value of `pagename` computed here down below, when calling normalize_all_lemmas().
local pagename = source_template ~= "es-verb form of" and args.pagename or PAGENAME
local head = headword_head or pagename
local arg1 = args[1]
if not arg1 then
if (pagename == "es-conj" or pagename == "es-verb") and in_template_space() then
arg1 = "licuar<+,ú>"
elseif pagename == "es-verb form of" and in_template_space() then
arg1 = "amar"
else
arg1 = "<>"
end
end
-- When called from {{es-verb form of}}, determine the non-lemma form whose inflections we're being asked to
-- determine. This normally comes from the page title or the value of |pagename=.
local verb_form_of_form
if source_template == "es-verb form of" then
verb_form_of_form = args.pagename
if not verb_form_of_form then
if PAGENAME == "es-verb form of" and in_template_space() then
verb_form_of_form = "ame"
else
verb_form_of_form = PAGENAME
end
end
end
local incorporated_headword_head_into_lemma = false
if arg1:find("^<.*>$") then -- missing lemma
if head:find(" ") then
-- If multiword lemma, try to add arg spec after the first word.
-- Try to preserve the brackets in the part after the verb, but don't do it
-- if there aren't the same number of left and right brackets in the verb
-- (which means the verb was linked as part of a larger expression).
local refl_clitic_verb, post = rmatch(head, "^(.-)( .*)$")
local left_brackets = rsub(refl_clitic_verb, "[^%[]", "")
local right_brackets = rsub(refl_clitic_verb, "[^%]]", "")
if #left_brackets == #right_brackets then
arg1 = iut.remove_redundant_links(refl_clitic_verb) .. arg1 .. post
incorporated_headword_head_into_lemma = true
else
-- Try again using the form without links.
local linkless_head = m_links.remove_links(head)
if linkless_head:find(" ") then
refl_clitic_verb, post = rmatch(linkless_head, "^(.-)( .*)$")
arg1 = refl_clitic_verb .. arg1 .. post
else
error("Unable to incorporate <...> spec into explicit head due to a multiword linked verb or " ..
"unbalanced brackets; please include <> explicitly: " .. arg1)
end
end
else
-- Will be incorporated through `head` below in the call to normalize_all_lemmas().
incorporated_headword_head_into_lemma = true
end
end
local parse_props = {
parse_indicator_spec = parse_indicator_spec,
allow_default_indicator = true,
allow_blank_lemma = true,
}
local alternant_multiword_spec = iut.parse_inflected_text(arg1, parse_props)
alternant_multiword_spec.pos = pos or "verbs"
alternant_multiword_spec.args = args
alternant_multiword_spec.source_template = source_template
alternant_multiword_spec.verb_form_of_form = verb_form_of_form
alternant_multiword_spec.incorporated_headword_head_into_lemma = incorporated_headword_head_into_lemma
-- Now determine if we need to generate any double-combined forms, and if so, which clitics are involved.
-- See the comment above the initialization of `verb_slot_double_combined_rows` above in add_slots().
if verb_form_of_form and rfind(verb_form_of_form, AV) then
-- All double-clitic forms have an explicit accent, so we check for this. In addition, all double-clitic forms
-- are of the form "(me|te|se|nos|os)(lo|la|le)s$". We have no alternations in Lua patterns, but we can exploit
-- the similarity of the clitics in question.
local single_comb_form, object_clitic = rmatch(verb_form_of_form, "^(.*)(l[aeo]s?)$")
if single_comb_form then
local personal_clitic = rmatch(single_comb_form, "^.*([mts]e)$")
if not personal_clitic then
personal_clitic = rmatch(single_comb_form, "^.-(n?os)$")
end
if personal_clitic then
if personal_clitic == "nos" then
-- "os" is a substring of "nos"; conceivably we could have a form ending in -n + os, and we don't
-- know whether to interpret as -n + os or - + nos.
alternant_multiword_spec.double_combined_forms_to_include =
{{"nos", object_clitic}, {"os", object_clitic}}
else
alternant_multiword_spec.double_combined_forms_to_include = {{personal_clitic, object_clitic}}
end
end
end
end
normalize_all_lemmas(alternant_multiword_spec, pagename)
detect_all_indicator_specs(alternant_multiword_spec)
local inflect_props = {
slot_list = alternant_multiword_spec.all_verb_slots,
inflect_word_spec = conjugate_verb,
-- We add links around the generated verbal forms rather than allow the entire multiword
-- expression to be a link, so ensure that user-specified links get included as well.
include_user_specified_links = true,
}
iut.inflect_multiword_or_alternant_multiword_spec(alternant_multiword_spec, inflect_props)
-- Remove redundant brackets around entire forms.
for slot, forms in pairs(alternant_multiword_spec.forms) do
for _, form in ipairs(forms) do
form.form = iut.remove_redundant_links(form.form)
end
end
compute_categories_and_annotation(alternant_multiword_spec)
if args.json and not from_headword and not from_verb_form_of then
-- There is a circular reference in `base.alternant_multiword_spec`, which points back to top level.
iut.map_word_specs(alternant_multiword_spec, function(base)
base.alternant_multiword_spec = nil
end)
return require("Module:JSON").toJSON(alternant_multiword_spec)
end
return alternant_multiword_spec
end
-- Entry point for {{es-conj}}. Template-callable function to parse and conjugate a verb given
-- user-specified arguments and generate a displayable table of the conjugated forms.
function export.show(frame)
local parent_args = frame:getParent().args
local params = {
[1] = {},
["nocomb"] = {type = "boolean"},
["noautolinktext"] = {type = "boolean"},
["noautolinkverb"] = {type = "boolean"},
["pagename"] = {}, -- for testing/documentation pages
["json"] = {type = "boolean"}, -- for bot use
}
local args = require("Module:parameters").process(parent_args, params)
local alternant_multiword_spec = export.do_generate_forms(args, "es-conj")
if type(alternant_multiword_spec) == "string" then
-- JSON return value
return alternant_multiword_spec
end
show_forms(alternant_multiword_spec)
return make_table(alternant_multiword_spec) ..
require("Module:utilities").format_categories(alternant_multiword_spec.categories, lang, nil, nil, force_cat)
end
return export
o4i1ubprsll68viyiqsevn5xzggph9c
มอดูล:pt-verb
828
326177
5729302
5703152
2026-07-20T05:36:44Z
Octahedron80
267
5729302
Scribunto
text/plain
local export = {}
--[=[
Authorship: Ben Wing <benwing2>
]=]
--[=[
TERMINOLOGY:
-- "slot" = A particular combination of tense/mood/person/number/etc.
Example slot names for verbs are "pres_1s" (present indicative first-person singular), "pres_sub_2s" (present
subjunctive second-person singular) "impf_sub_3p" (imperfect subjunctive third-person plural).
Each slot is filled with zero or more forms.
-- "form" = The conjugated Portuguese form representing the value of a given slot.
-- "lemma" = The dictionary form of a given Portuguese term. For Portuguese, always the infinitive.
]=]
--[=[
FIXME:
--"i-e" alternation doesn't work properly when the stem comes with a hiatus in it.
--]=]
local force_cat = false -- set to true for debugging
local check_for_red_links = false -- set to false for debugging
local lang = require("Module:languages").getByCode("pt")
local m_str_utils = require("Module:string utilities")
local m_links = require("Module:links")
local m_table = require("Module:table")
local iut = require("Module:inflection utilities")
local put = require("Module:parse utilities")
local com = require("Module:pt-common")
local format = m_str_utils.format
local remove_final_accent = com.remove_final_accent
local rfind = m_str_utils.find
local rmatch = m_str_utils.match
local rsplit = m_str_utils.split
local rsub = com.rsub
local u = m_str_utils.char
local unpack = unpack or table.unpack -- Lua 5.2 compatibility
local function link_term(term)
return m_links.full_link({ lang = lang, term = term }, "term")
end
local V = com.V -- vowel regex class
local AV = com.AV -- accented vowel regex class
local C = com.C -- consonant regex class
local AC = u(0x0301) -- acute = ́
local TEMPC1 = u(0xFFF1) -- temporary character used for consonant substitutions
local TEMP_MESOCLITIC_INSERTION_POINT = u(0xFFF2) -- temporary character used to mark the mesoclitic insertion point
local VAR_BR = u(0xFFF3) -- variant code for Brazil
local VAR_PT = u(0xFFF4) -- variant code for Portugal
local VAR_SUPERSEDED = u(0xFFF5) -- variant code for superseded forms
local VAR_NORMAL = u(0xFFF6) -- variant code for non-superseded forms
local all_var_codes = VAR_BR .. VAR_PT .. VAR_SUPERSEDED .. VAR_NORMAL
local var_codes_no_superseded = VAR_BR .. VAR_PT .. VAR_NORMAL
local var_code_c = "[" .. all_var_codes .. "]"
local var_code_no_superseded_c = "[" .. var_codes_no_superseded .. "]"
local not_var_code_c = "[^" .. all_var_codes .. "]"
-- Export variant codes for use in [[Module:pt-inflections]].
export.VAR_BR = VAR_BR
export.VAR_PT = VAR_PT
export.VAR_SUPERSEDED = VAR_SUPERSEDED
export.VAR_NORMAL = VAR_NORMAL
local short_pp_footnote = "[โดยปกติใช้กับคำกริยาช่วย " .. link_term("ser") .. " และ " .. link_term("estar") .. "]"
local long_pp_footnote = "[โดยปกติใช้กับคำกริยาช่วย " .. link_term("haver") .. " และ " .. link_term("ter") .. "]"
--[=[
Vowel alternations:
<i-e>: 'i' in pres1s and the whole present subjunctive; 'e' elsewhere when stressed. Generally 'e' otherwise when
unstressed. E.g. [[sentir]], [[conseguir]] (the latter additionally with 'gu-g' alternation).
<u-o>: 'u' in pres1s and the whole present subjunctive; 'o' elsewhere when stressed. Either 'o' or 'u' otherwise when
unstressed. E.g. [[dormir]], [[subir]].
<i>: 'i' whenever stressed (in the present singular and third plural) and throughout the whole present subjunctive.
Otherwise 'e'. E.g. [[progredir]], also [[premir]] per Priberam.
<u>: 'u' whenever stressed (in the present singular and third plural) and throughout the whole present subjunctive.
Otherwise 'o'. E.g. [[polir]], [[extorquir]] (the latter also <u-o>).
<í>: The last 'i' of the stem (excluding stem-final 'i') becomes 'í' when stressed. E.g.:
* [[proibir]] ('proíbo, proíbe(s), proíbem, proíba(s), proíbam')
* [[faiscar]] ('faísco, faísca(s), faíscam, faísque(s), faísquem' also with 'c-qu' alternation)
* [[homogeneizar]] ('homogeneízo', etc.)
* [[mobiliar]] ('mobílio', etc.; note here the final -i is ignored when determining which vowel to stress)
* [[tuitar]] ('tuíto', etc.)
<ú>: The last 'u' of the stem (excluding stem-final 'u') becomes 'ú' when stressed. E.g.:
* [[reunir]] ('reúno, reúne(s), reúnem, reúna(s), reúnam')
* [[esmiuçar]] ('esmiúço, esmiúça(s), esmiúça, esmiúce(s), esmiúcem' also with 'ç-c' alternation)
* [[reusar]] ('reúso, reúsa(s), reúsa, reúse(s), reúsem')
* [[saudar]] ('saúdo, saúda(s), saúda, saúde(s), saúdem')
]=]
local vowel_alternants = m_table.listToSet({"i-e", "i", "í", "u-o", "u", "ú", "ei", "+"})
local vowel_alternant_to_desc = {
["i-e"] = "การเปลี่ยนแปร ''i-e'' ในปัจจุบันกาลเอกพจน์",
["i"] = "''e'' กลายเป็น ''i'' เมื่อเน้น",
["í"] = "''i'' กลายเป็น ''í'' เมื่อเน้น",
["u-o"] = "การเปลี่ยนแปร ''u-o'' ในปัจจุบันกาลเอกพจน์",
["u"] = "''o'' กลายเป็น ''u'' เมื่อเน้น",
["ú"] = "''u'' กลายเป็น ''ú'' เมื่อเน้น",
["ei"] = "''i'' กลายเป็น ''ei'' เมื่อเน้น",
}
local vowel_alternant_to_cat = {
["i-e"] = "การเปลี่ยนแปร i-e ในปัจจุบันกาลเอกพจน์",
["i"] = " e กลายเป็น i เมื่อเน้น",
["í"] = " i กลายเป็น í เมื่อเน้น",
["u-o"] = "การเปลี่ยนแปร u-o ในปัจจุบันกาลเอกพจน์",
["u"] = " o กลายเป็น u เมื่อเน้น",
["ú"] = " u กลายเป็น ú เมื่อเน้น",
["ei"] = " i กลายเป็น ei เมื่อเน้น",
}
local all_persons_numbers = {
["1s"] = "1|s",
["2s"] = "2|s",
["3s"] = "3|s",
["1p"] = "1|p",
["2p"] = "2|p",
["3p"] = "3|p",
}
local person_number_list = {"1s", "2s", "3s", "1p", "2p", "3p"}
local imp_person_number_list = {"2s", "3s", "1p", "2p", "3p"}
local neg_imp_person_number_list = {"2s", "3s", "1p", "2p", "3p"}
person_number_to_reflexive_pronoun = {
["1s"] = "me",
["2s"] = "te",
["3s"] = "se",
["1p"] = "nos",
["2p"] = "vos",
["3p"] = "se",
}
local indicator_flags = m_table.listToSet {
"no_pres_stressed", "no_pres1_and_sub",
"only3s", "only3sp", "only3p",
"pp_inv", "irreg", "no_built_in", "e_ei_cat",
}
-- Remove any variant codes e.g. VAR_BR, VAR_PT, VAR_SUPERSEDED. Needs to be called from [[Module:pt-headword]] on the
-- output of do_generate_forms(). `keep_superseded` leaves VAR_SUPERSEDED; used in the `canonicalize` function of
-- show_forms() because we then process and remove it in `generate_forms`. FIXME: Use metadata for this once it's
-- supported in [[Module:inflection utilities]].
function export.remove_variant_codes(form, keep_superseded)
return rsub(form, keep_superseded and var_code_no_superseded_c or var_code_c, "")
end
-- Initialize all the slots for which we generate forms.
local function add_slots(alternant_multiword_spec)
-- "Basic" slots: All slots that go into the regular table (not the reflexive form-of table).
alternant_multiword_spec.verb_slots_basic = {
{"infinitive", "inf"},
{"infinitive_linked", "inf"},
{"gerund", "ger"},
{"short_pp_ms", "short|m|s|past|part"},
{"short_pp_fs", "short|f|s|past|part"},
{"short_pp_mp", "short|m|p|past|part"},
{"short_pp_fp", "short|f|p|past|part"},
{"pp_ms", "m|s|past|part"},
{"pp_fs", "f|s|past|part"},
{"pp_mp", "m|p|past|part"},
{"pp_fp", "f|p|past|part"},
}
-- Special slots used to handle non-reflexive parts of reflexive verbs in {{pt-verb form of}}.
-- For example, for a reflexive-only verb like [[esbaldar-se]], we want to be able to use {{pt-verb form of}} on
-- [[esbalde]] (which should mention that it is a part of 'me esbalde', first-person singular present subjunctive,
-- and 'se esbalde', third-person singular present subjunctive) or on [[esbaldamos]] (which should mention that it
-- is a part of 'esbaldamo-nos', first-person plural present indicative or preterite). Similarly, we want to use
-- {{pt-verb form of}} on [[esbaldando]] (which should mention that it is a part of 'se ... esbaldando', syntactic
-- variant of [[esbaldando-se]], which is the gerund of [[esbaldar-se]]). To do this, we need to be able to map
-- non-reflexive parts like [[esbalde]], [[esbaldamos]], [[esbaldando]], etc. to their reflexive equivalent(s), to
-- the tag(s) of the equivalent(s), and, in the case of forms like [[esbaldando]], [[esbaldar]] and imperatives, to
-- the separated syntactic variant of the verb+clitic combination. We do this by creating slots for the
-- non-reflexive part equivalent of each basic reflexive slot, and for the separated syntactic-variant equivalent
-- of each basic reflexive slot that is formed of verb+clitic. We use slots in this way to deal with multiword
-- lemmas. Note that we run into difficulties mapping between reflexive verbs, non-reflexive part equivalents, and
-- separated syntactic variants if a slot contains more than one form. To handle this, if there are the same number
-- of forms in two slots we're trying to match up, we assume the forms match one-to-one; otherwise we don't match up
-- the two slots (which means {{pt-verb form of}} won't work in this case, but such a case is extremely rare and not
-- worth worrying about). Alternatives that handle this "properly" are significantly more complicated and require
-- non-trivial modifications to [[Module:inflection utilities]].
local need_special_verb_form_of_slots = alternant_multiword_spec.source_template == "pt-verb form of" and
alternant_multiword_spec.refl
if need_special_verb_form_of_slots then
alternant_multiword_spec.verb_slots_reflexive_verb_form_of = {
{"infinitive_non_reflexive", "-"},
{"infinitive_variant", "-"},
{"gerund_non_reflexive", "-"},
{"gerund_variant", "-"},
}
else
alternant_multiword_spec.verb_slots_reflexive_verb_form_of = {}
end
-- Add entries for a slot with person/number variants.
-- `verb_slots` is the table to add to.
-- `slot_prefix` is the prefix of the slot, typically specifying the tense/aspect.
-- `tag_suffix` is a string listing the set of inflection tags to add after the person/number tags.
-- `person_number_list` is a list of the person/number slot suffixes to add to `slot_prefix`.
local function add_personal_slot(verb_slots, slot_prefix, tag_suffix, person_number_list)
for _, persnum in ipairs(person_number_list) do
local persnum_tag = all_persons_numbers[persnum]
local slot = slot_prefix .. "_" .. persnum
local accel = persnum_tag .. "|" .. tag_suffix
table.insert(verb_slots, {slot, accel})
end
end
-- Add a personal slot (i.e. a slot with person/number variants) to `verb_slots_basic`.
local function add_basic_personal_slot(slot_prefix, tag_suffix, person_number_list, no_special_verb_form_of_slot)
add_personal_slot(alternant_multiword_spec.verb_slots_basic, slot_prefix, tag_suffix, person_number_list)
-- Add special slots for handling non-reflexive parts of reflexive verbs in {{pt-verb form of}}.
-- See comment above in `need_special_verb_form_of_slots`.
if need_special_verb_form_of_slots and not no_special_verb_form_of_slot then
for _, persnum in ipairs(person_number_list) do
local persnum_tag = all_persons_numbers[persnum]
local basic_slot = slot_prefix .. "_" .. persnum
local accel = persnum_tag .. "|" .. tag_suffix
table.insert(alternant_multiword_spec.verb_slots_reflexive_verb_form_of, {basic_slot .. "_non_reflexive", "-"})
end
end
end
add_basic_personal_slot("pres", "pres|ind", person_number_list)
add_basic_personal_slot("impf", "impf|ind", person_number_list)
add_basic_personal_slot("pret", "pret|ind", person_number_list)
add_basic_personal_slot("plup", "plup|ind", person_number_list)
add_basic_personal_slot("fut", "fut|ind", person_number_list)
add_basic_personal_slot("cond", "cond", person_number_list)
add_basic_personal_slot("pres_sub", "pres|sub", person_number_list)
add_basic_personal_slot("impf_sub", "impf|sub", person_number_list)
add_basic_personal_slot("fut_sub", "fut|sub", person_number_list)
add_basic_personal_slot("imp", "imp", imp_person_number_list)
add_basic_personal_slot("pers_inf", "pers|inf", person_number_list)
-- Don't need special non-reflexive-part slots because the negative imperative is multiword, of which the
-- individual words are 'não' + subjunctive.
add_basic_personal_slot("neg_imp", "neg|imp", neg_imp_person_number_list, "no special verb form of")
-- Don't need special non-reflexive-part slots because we don't want [[esbaldando]] mapping to [[esbaldando-me]]
-- (only [[esbaldando-se]]) or [[esbaldar]] mapping to [[esbaldar-me]] (only [[esbaldar-se]]).
add_basic_personal_slot("infinitive", "inf", person_number_list, "no special verb form of")
add_basic_personal_slot("gerund", "ger", person_number_list, "no special verb form of")
-- Generate the list of all slots.
alternant_multiword_spec.all_verb_slots = {}
for _, slot_and_accel in ipairs(alternant_multiword_spec.verb_slots_basic) do
table.insert(alternant_multiword_spec.all_verb_slots, slot_and_accel)
end
for _, slot_and_accel in ipairs(alternant_multiword_spec.verb_slots_reflexive_verb_form_of) do
table.insert(alternant_multiword_spec.all_verb_slots, slot_and_accel)
end
alternant_multiword_spec.verb_slots_basic_map = {}
for _, slotaccel in ipairs(alternant_multiword_spec.verb_slots_basic) do
local slot, accel = unpack(slotaccel)
alternant_multiword_spec.verb_slots_basic_map[slot] = accel
end
end
local overridable_stems = {}
local function allow_multiple_values(separated_groups, data)
local retvals = {}
for _, separated_group in ipairs(separated_groups) do
local footnotes = data.fetch_footnotes(separated_group)
local retval = {form = separated_group[1], footnotes = footnotes}
table.insert(retvals, retval)
end
return retvals
end
local function simple_choice(choices)
return function(separated_groups, data)
if #separated_groups > 1 then
data.parse_err("For spec '" .. data.prefix .. ":', only one value currently allowed")
end
if #separated_groups[1] > 1 then
data.parse_err("For spec '" .. data.prefix .. ":', no footnotes currently allowed")
end
local choice = separated_groups[1][1]
if not m_table.contains(choices, choice) then
data.parse_err("For spec '" .. data.prefix .. ":', saw value '" .. choice .. "' but expected one of '" ..
table.concat(choices, ",") .. "'")
end
return choice
end
end
for _, overridable_stem in ipairs {
"pres_unstressed",
"pres_stressed",
"pres1_and_sub",
-- Don't include pres1; use pres_1s if you need to override just that form
"impf",
"full_impf",
"pret_base",
"pret",
{"pret_conj", simple_choice({"irreg", "ar", "er", "ir"}) },
"fut",
"cond",
"pres_sub_stressed",
"pres_sub_unstressed",
{"sub_conj", simple_choice({"ar", "er"}) },
"plup",
"impf_sub",
"fut_sub",
"pers_inf",
"pp",
"short_pp",
} do
if type(overridable_stem) == "string" then
overridable_stems[overridable_stem] = allow_multiple_values
else
local stem, validator = unpack(overridable_stem)
overridable_stems[stem] = validator
end
end
-- Useful as the value of the `match` property of a built-in verb. `main_verb_spec` is a Lua pattern that should match
-- the non-prefixed part of a verb, and `prefix_specs` is a list of Lua patterns that should match the prefixed part of
-- a verb. If a prefix spec is preceded by ^, it must match exactly at the beginning of the verb; otherwise, additional
-- prefixes (e.g. re-, des-) may precede. Return the prefix and main verb.
local function match_against_verbs(main_verb_spec, prefix_specs)
return function(verb)
for _, prefix_spec in ipairs(prefix_specs) do
if prefix_spec:find("^%^") then
-- must match exactly
prefix_spec = prefix_spec:gsub("^%^", "")
if prefix_spec == "" then
-- We can't use the second branch of the if-else statement because an empty () returns the current position
-- in rmatch().
local main_verb = rmatch(verb, "^(" .. main_verb_spec .. ")$")
if main_verb then
return "", main_verb
end
else
local prefix, main_verb = rmatch(verb, "^(" .. prefix_spec .. ")(" .. main_verb_spec .. ")$")
if prefix then
return prefix, main_verb
end
end
else
local prefix, main_verb = rmatch(verb, "^(.*" .. prefix_spec .. ")(" .. main_verb_spec .. ")$")
if prefix then
return prefix, main_verb
end
end
end
return nil
end
end
--[=[
Built-in (usually irregular) conjugations.
Each entry is processed in turn and consists of an object with two fields:
1. match=: Specifies the built-in verbs that match this object.
2. forms=: Specifies the built-in stems and forms for these verbs.
The value of match= is either a string beginning with "^" (match only the specified verb), a string not beginning
with "^" (match any verb ending in that string), or a function that is passed in the verb and should return the prefix
of the verb if it matches, otherwise nil. The function match_against_verbs() is provided to facilitate matching a set
of verbs with a common ending and specific prefixes (e.g. [[ter]] and [[ater]] but not [[abater]], etc.).
The value of forms= is a table specifying stems and individual override forms. Each key of the table names either a
stem (e.g. `pres_stressed`), a stem property (e.g. `vowel_alt`) or an individual override form (e.g. `pres_1s`).
Each value of a stem can either be a string (a single stem), a list of strings, or a list of objects of the form
{form = STEM, footnotes = {FOONOTES}}. Each value of an individual override should be of exactly the same form except
that the strings specify full forms rather than stems. The values of a stem property depend on the specific property
but are generally strings or booleans.
In order to understand how the stem specifications work, it's important to understand the phonetic modifications done
by combine_stem_ending(). In general, the complexities of predictable prefix, stem and ending modifications are all
handled in this function. In particular:
1. Spelling-based modifications (c/z, g/gu, gu/gü, g/j) occur automatically as appropriate for the ending.
2. If the stem begins with an acute accent, the accent is moved onto the last vowel of the prefix (for handling verbs
in -uar such as [[minguar]], pres_3s 'míngua').
3. If the ending begins with a double asterisk, this is a signal to conditionally delete the accent on the last letter
of the stem. "Conditionally" means we don't do it if the last two letters would form a diphthong without the accent
on the second one (e.g. in [[sair]], with stem 'saí'); but as an exception, we do delete the accent in stems
ending in -guí, -quí (e.g. in [[conseguir]]) because in this case the ui isn't a diphthong.
4. If the ending begins with an asterisk, this is a signal to delete the accent on the last letter of the stem, e.g.
fizé -> fizermos. Unlike for **, this removal is unconditional, so we get e.g. 'sairmos' not #'saírmos'.
5. If ending begins with i, it must get an accent after an unstressed vowel (in some but not all cases) to prevent the
two merging into a diphthong. See combine_stem_ending() for specifics.
The following stems are recognized:
-- pres_unstressed: The present indicative unstressed stem (1p, 2p). Also controls the imperative 2p
and gerund. Defaults to the infinitive stem (minus the ending -ar/-er/-ir/-or).
-- pres_stressed: The present indicative stressed stem (1s, 2s, 3s, 3p). Also controls the imperative 2s.
Default is empty if indicator `no_pres_stressed`, else a vowel alternation if such an indicator is given
(e.g. `ue`, `ì`), else the infinitive stem.
-- pres1_and_sub: Overriding stem for 1s present indicative and the entire subjunctive. Only set by irregular verbs
and by the indicators `no_pres_stressed` (e.g. [[precaver]]) and `no_pres1_and_sub` (since verbs of this sort,
e.g. [[puir]], are missing the entire subjunctive as well as the 1s present indicative). Used by many irregular
verbs, e.g. [[caber]], verbs in '-air', [[dizer]], [[ter]], [[valer]], etc. Some verbs set this and then supply an
override for the pres_1sg if it's irregular, e.g. [[saber]], with irregular subjunctive stem "saib-" and special
1s present indicative "sei".
-- pres1: Special stem for 1s present indicative. Normally, do not set this explicitly. If you need to specify an
irregular 1s present indicative, use the form override pres_1s= to specify the entire form. Defaults to
pres1_and_sub if given, else pres_stressed.
-- pres_sub_unstressed: The present subjunctive unstressed stem (1p, 2p). Defaults to pres1_and_sub if given, else the
infinitive stem.
-- pres_sub_stressed: The present subjunctive stressed stem (1s, 2s, 3s, 1p). Defaults to pres1.
-- sub_conj: Determines the set of endings used in the subjunctive. Should be one of "ar" or "er".
-- impf: The imperfect stem (not including the -av-/-i- stem suffix, which is determined by the conjugation). Defaults
to the infinitive stem.
-- full_impf: The full imperfect stem missing only the endings (-a, -as, -am, etc.). Used for verbs with irregular
imperfects such as [[ser]], [[ter]], [[vir]] and [[pôr]]. Overrides must be supplied for the impf_1p and impf_2p
due to these forms having an accent on the stem.
-- pret_base: The preterite stem (not including the -a-/-e-/-i- stem suffix). Defaults to the infinitive stem.
-- pret: The full preterite stem missing only the endings (-ste, -mos, etc.). Used for verbs with irregular preterites
(pret_conj == "irreg") such as [[fazer]], [[poder]], [[trazer]], etc. Overrides must be supplied for the pret_1s
and pret_3s. Defaults to `pret_base` + the accented conjugation vowel.
-- pret_conj: Determines the set of endings used in the preterite. Should be one of "ar", "er", "ir" or "irreg".
Defaults to the conjugation as determined from the infinitive. When pret_conj == "irreg", stem `pret` is used,
otherwise `pret_base`.
-- fut: The future stem. Defaults to the infinitive stem + the unaccented conjugation vowel.
-- cond: The conditional stem. Defaults to `fut`.
-- impf_sub: The imperfect subjunctive stem. Defaults to `pret`.
-- fut_sub: The future subjunctive stem. Defaults to `pret`.
-- plup: The pluperfect stem. Defaults to `pret`.
-- pers_inf: The personal infinitive stem. Defaults to the infinitive stem + the accented conjugation vowel.
-- pp: The masculine singular past participle. Default is based on the verb conjugation: infinitive stem + "ado" for
-ar verbs, otherwise infinitive stem + "ido".
-- short_pp: The short masculine singular past participle, for verbs with such a form. No default.
-- pp_inv: True if the past participle exists only in the masculine singular.
]=]
local built_in_conjugations = {
--------------------------------------------------------------------------------------------
-- -ar --
--------------------------------------------------------------------------------------------
-- Verbs not needing entries here:
--
-- (1) Verbs with short past participles: need to specify the short pp explicitly.
--
-- aceitar: use <short_pp:aceito[Brazil],aceite[Portugal]>
-- anexar, completar, expressar, expulsar, findar, fritar, ganhar, gastar, limpar, pagar, pasmar, pegar, soltar:
-- use <short_pp:anexo> etc.
-- assentar: use <short_pp:assente>
-- entregar: use <short_pp:entregue>
-- enxugar: use <short_pp:enxuto>
-- matar: use <short_pp:morto>
--
-- (2) Verbs with orthographic consonant alternations: handled automatically.
--
-- -car (brincar, buscar, pecar, trancar, etc.): automatically handled in combine_stem_ending()
-- -çar (alcançar, começar, laçar): automatically handled in combine_stem_ending()
-- -gar (apagar, cegar, esmagar, largar, navegar, resmungar, sugar, etc.): automatically handled in combine_stem_ending()
--
-- (3) Verbs with vowel alternations: need to specify the alternation explicitly unless it always happens, in
-- which case it's handled automatically through an entry below.
--
-- esmiuçar changing to esmiúço: use <ú>
-- faiscar changing to faísco: use <í>
-- -iar changing to -eio (ansiar, incendiar, mediar, odiar, remediar, etc.): use <ei>
-- -izar changing to -ízo (ajuizar, enraizar, homogeneizar, plebeizar, etc.): use <í>
-- mobiliar changing to mobílio: use <í>
-- reusar changing to reúso: use <ú>
-- saudar changing to saúdo: use <ú>
-- tuitar/retuitar changing to (re)tuíto: use <í>
{
-- dar, desdar
match = match_against_verbs("dar", {"^", "^des", "^re"}),
forms = {
pres_1s = "dou",
pres_2s = "dás",
pres_3s = "dá",
-- damos, dais regular
pres_3p = "dão",
pret = "dé", pret_conj = "irreg", pret_1s = "dei", pret_3s = "deu",
pres_sub_1s = "dê",
pres_sub_2s = "dês",
pres_sub_3s = "dê",
pres_sub_1p = {"demos", "dêmos"},
-- deis regular
pres_sub_3p = {"deem", VAR_SUPERSEDED .. "dêem"},
irreg = true,
}
},
{
-- -ear (frear, nomear, semear, etc.)
match = "ear",
forms = {
pres_stressed = "ei",
e_ei_cat = true,
}
},
{
-- estar
match = match_against_verbs("estar", {"^", "sob", "sobr"}),
forms = {
pres_1s = "estou",
pres_2s = "estás",
pres_3s = "está",
-- FIXME, estámos is claimed as an alternative pres_1p in the old conjugation data, but I believe this is garbage
pres_3p = "estão",
pres1_and_sub = "estej", -- only for subjunctive as we override pres_1s
sub_conj = "er",
pret = "estivé", pret_conj = "irreg", pret_1s = "estive", pret_3s = "esteve",
-- [[sobestar]], [[sobrestar]] are transitive so they have fully inflected past participles
pp_inv = function(base, prefix) return prefix == "" end,
irreg = true,
}
},
{
-- tar (clipping of estar)
match = "^tar",
forms = {
pres_1s = "tou",
pres_2s = "tás",
pres_3s = "tá",
pres_3p = "tão",
pres1_and_sub = "tej", -- only for subjunctive as we override pres_1s
sub_conj = "er",
pret = "tivé", pret_conj = "irreg", pret_1s = "tive", pret_3s = "teve",
--FIXME: Needs support for forms that are just "tar" to become "tá" instead in Brazil.
pp_inv = true,
irreg = true,
}
},
{
-- It appears that only [[resfolegar]] has proparoxytone forms, not [[folegar]] or [[tresfolegar]].
match = "^resfolegar",
forms = {
pres_stressed = {"resfóleg", "resfoleg"},
irreg = true,
}
},
{
-- aguar/desaguar/enxaguar, ambiguar/apaziguar/averiguar, minguar, cheguar?? (obsolete variant of [[chegar]])
match = "guar",
forms = {
-- combine_stem_ending() will move the acute accent backwards so it sits after the last vowel in [[minguar]]
pres_stressed = {{form = AC .. "gu", footnotes = {"[โปรตุเกสแบบบราซิล]"}}, {form = "gu", footnotes = {"[โปรตุเกสแบบยุโรป]"}}},
pres_sub_stressed = {
{form = AC .. "gu", footnotes = {"[โปรตุเกสแบบบราซิล]"}},
{form = "gu", footnotes = {"[โปรตุเกสแบบยุโรป]"}},
{form = AC .. VAR_SUPERSEDED .. "gü", footnotes = {"[โปรตุเกสแบบบราซิล]"}},
{form = VAR_SUPERSEDED .. "gú", footnotes = {"[โปรตุเกสแบบยุโรป]"}},
},
pres_sub_unstressed = {"gu", {form = VAR_SUPERSEDED .. "gü", footnotes = {"[โปรตุเกสแบบบราซิล]"}}},
pret_1s = {"guei", {form = VAR_SUPERSEDED .. "güei", footnotes = {"[โปรตุเกสแบบบราซิล]"}}},
}
},
{
-- adequar/readequar, antiquar/obliquar, apropinquar
match = "quar",
forms = {
-- combine_stem_ending() will move the acute accent backwards so it sits after the last vowel in [[apropinquar]]
pres_stressed = {{form = AC .. "qu", footnotes = {"[โปรตุเกสแบบบราซิล]"}}, {form = "qu", footnotes = {"[โปรตุเกสแบบยุโรป]"}}},
pres_sub_stressed = {
{form = AC .. "qu", footnotes = {"[โปรตุเกสแบบบราซิล]"}},
{form = "qu", footnotes = {"[โปรตุเกสแบบยุโรป]"}},
{form = AC .. VAR_SUPERSEDED .. "qü", footnotes = {"[โปรตุเกสแบบบราซิล]"}},
{form = VAR_SUPERSEDED .. "qú", footnotes = {"[โปรตุเกสแบบยุโรป]"}},
},
pres_sub_unstressed = {"qu", {form = VAR_SUPERSEDED .. "qü", footnotes = {"[โปรตุเกสแบบบราซิล]"}}},
pret_1s = {"quei", {form = VAR_SUPERSEDED .. "qüei", footnotes = {"[โปรตุเกสแบบบราซิล]"}}},
}
},
{
-- coar
match = "^coar",
forms = {
pres_1s = {"coo", {form = VAR_SUPERSEDED .. "côo", footnotes = {"[โปรตุเกสแบบบราซิล]"}}},
pres_2s = {"coas", VAR_SUPERSEDED .. "côas"},
pres_3s = {"coa", VAR_SUPERSEDED .. "côa"},
}
},
{
-- maquiar
match = "maquiar",
forms = {
pres_stressed = {"maqui", {form = "maquei", footnotes = {"[ไม่ทางการ, ไม่ควรใช้]"}}},
}
},
{
-- -oar (abençoar, coroar, enjoar, perdoar, etc.)
match = "oar",
forms = {
pres_1s = {"oo", {form = VAR_SUPERSEDED .. "ôo", footnotes = {"[โปรตุเกสแบบบราซิล]"}}},
}
},
{
-- -oiar (apoiar, boiar)
match = "oiar",
forms = {
pres_stressed = {"oi", {form = VAR_SUPERSEDED .. "ói", footnotes = {"[โปรตุเกสแบบบราซิล]"}}},
}
},
{
-- parar
match = "^parar",
forms = {
pres_3s = {"para", VAR_SUPERSEDED .. "pára"},
}
},
{
-- pelar
match = "^pelar",
forms = {
pres_1s = {"pelo", VAR_SUPERSEDED .. "pélo"},
pres_2s = {"pelas", VAR_SUPERSEDED .. "pélas"},
pres_3s = {"pela", VAR_SUPERSEDED .. "péla"},
}
},
--------------------------------------------------------------------------------------------
-- -er --
--------------------------------------------------------------------------------------------
-- Verbs not needing entries here:
--
-- precaver: use <no_pres_stressed>
-- -cer (verbs in -ecer, descer, vencer, etc.): automatically handled in combine_stem_ending()
-- -ger (proteger, reger, etc.): automatically handled in combine_stem_ending()
-- -guer (erguer/reerguer/soerguer): automatically handled in combine_stem_ending()
{
-- benzer
match = "benzer",
forms = {short_pp = "bento"}
},
{
-- caber
match = "caber",
forms = {
pres1_and_sub = "caib",
pret = "coubé", pret_1s = "coube", pret_3s = "coube", pret_conj = "irreg",
irreg = true,
}
},
{
-- crer, descrer
match = "crer",
forms = {
pres_2s = "crês", pres_3s = "crê",
pres_2p = "credes", pres_3p = {"creem", VAR_SUPERSEDED .. "crêem"},
pres1_and_sub = "crei",
irreg = true,
}
},
{
-- dizer, bendizer, condizer, contradizer, desdizer, maldizer, predizer, etc.
match = "dizer",
forms = {
-- use 'digu' because we're in a front environment; if we use 'dig', we'll get '#dijo'
pres1_and_sub = "digu", pres_3s = "diz",
pret = "dissé", pret_conj = "irreg", pret_1s = "disse", pret_3s = "disse", pp = "dito",
fut = "dir",
imp_2s = {"diz", "dize"}, -- per Infopédia
irreg = true,
}
},
{
-- eleger, reeleger
match = "eleger",
forms = {short_pp = "eleito"}
},
{
-- acender, prender; not desprender, etc.
match = match_against_verbs("ender", {"^ac", "^pr"}),
forms = {short_pp = "eso"}
},
{
-- fazer, afazer, contrafazer, desfazer, liquefazer, perfazer, putrefazer, rarefazer, refazer, satisfazer, tumefazer
match = "fazer",
forms = {
pres1_and_sub = "faç", pres_3s = "faz",
pret = "fizé", pret_conj = "irreg", pret_1s = "fiz", pret_3s = "fez", pp = "feito",
fut = "far",
imp_2s = {"faz", {form = "faze", footnotes = {"[Brazil only]"}}}, -- per Priberam
irreg = true,
}
},
{
match = "^haver",
forms = {
pres_1s = "hei",
pres_2s = "hás",
pres_3s = "há",
pres_1p = {"havemos", "hemos"},
pres_2p = {"haveis", "heis"},
pres_3p = "hão",
pres1_and_sub = "haj", -- only for subjunctive as we override pres_1s
pret = "houvé", pret_conj = "irreg", pret_1s = "houve", pret_3s = "houve",
imp_2p = "havei",
irreg = true,
}
},
-- reaver below under r-
{
-- jazer, adjazer
match = "jazer",
forms = {
pres_3s = "jaz",
imp_2s = {"jaz", "jaze"}, -- per Infopédia
irreg = true,
}
},
{
-- ler, reler, tresler; not excel(l)er, valer, etc.
match = match_against_verbs("ler", {"^", "^re", "tres"}),
forms = {
pres_2s = "lês", pres_3s = "lê",
pres_2p = "ledes", pres_3p = {"leem", VAR_SUPERSEDED .. "lêem"},
pres1_and_sub = "lei",
irreg = true,
}
},
{
-- morrer, desmorrer
match = "morrer",
forms = {short_pp = "morto"}
},
{
-- doer, moer/remoer, roer/corroer, soer
match = "oer",
forms = {
pres_1s = function(base, prefix)
return prefix ~= "s" and {"oo", VAR_SUPERSEDED .. "ôo"} or nil
end, pres_2s = "óis", pres_3s = "ói",
-- impf -ía etc., pret_1s -oí and pp -oído handled automatically in combine_stem_ending()
only3sp = function(base, prefix) return prefix == "d" end,
no_pres1_and_sub = function(base, prefix) return prefix == "s" end,
irreg = true,
}
},
{
-- perder
match = "perder",
forms = {
-- use 'perqu' because we're in a front environment; if we use 'perc', we'll get '#perço'
pres1_and_sub = "perqu",
irreg = true,
}
},
{
-- poder
match = "poder",
forms = {
pres1_and_sub = "poss",
pret = "pudé", pret_1s = "pude", pret_3s = "pôde", pret_conj = "irreg",
irreg = true,
}
},
{
-- prazer, aprazer, comprazer, desprazer
match = "prazer",
forms = {
pres_3s = "praz",
pret = "prouvé", pret_1s = "prouve", pret_3s = "prouve", pret_conj = "irreg",
only3sp = function(base, prefix) return not prefix:find("com$") end,
irreg = true,
}
},
-- prover below, just below ver
{
-- requerer; must precede querer
match = "requerer",
forms = {
-- old module claims alt pres_3s 'requere'; not in Priberam, Infopédia or conjugacao.com.br
pres_3s = "requer",
pres1_and_sub = "requeir",
imp_2s = {{form = "requere", footnotes = {"[Brazil only]"}}, "requer"}, -- per Priberam
-- regular preterite, unlike [[querer]]
irreg = true,
}
},
{
-- querer, desquerer, malquerer
match = "querer",
forms = {
-- old module claims alt pres_3s 'quere'; not in Priberam, Infopédia or conjugacao.com.br
pres_1s = "quero", pres_3s = "quer",
pres1_and_sub = "queir", -- only for subjunctive as we override pres_1s
pret = "quisé", pret_1s = "quis", pret_3s = "quis", pret_conj = "irreg",
imp_2s = {{form = "quere", footnotes = {"[Brazil only]"}}, {form = "quer", footnotes = {"[Brazil only]"}}}, -- per Priberam
irreg = true,
}
},
{
match = "reaver",
forms = {
no_pres_stressed = true,
pret = "reouvé", pret_conj = "irreg", pret_1s = "reouve", pret_3s = "reouve",
irreg = true,
}
},
{
-- saber, ressaber
match = "saber",
forms = {
pres_1s = "sei",
pres1_and_sub = "saib", -- only for subjunctive as we override pres_1s
pret = "soubé", pret_1s = "soube", pret_3s = "soube", pret_conj = "irreg",
irreg = true,
}
},
{
-- escrever/reescrever, circunscrever, descrever/redescrever, inscrever, prescrever, proscrever, subscrever,
-- transcrever, others?
match = "screver",
forms = {
pp = "scrito",
irreg = true,
}
},
{
-- suspender
match = "suspender",
forms = {short_pp = "suspenso"}
},
{
match = "^ser",
forms = {
pres_1s = "sou", pres_2s = "és", pres_3s = "é",
pres_1p = "somos", pres_2p = "sois", pres_3p = "são",
pres1_and_sub = "sej", -- only for subjunctive as we override pres_1s
full_impf = "er", impf_1p = "éramos", impf_2p = "éreis",
pret = "fô", pret_1s = "fui", pret_3s = "foi", pret_conj = "irreg",
imp_2s = "sê", imp_2p = "sede",
pp_inv = true,
irreg = true,
}
},
{
-- We want to match abster, conter, deter, etc. but not abater, cometer, etc. No way to avoid listing each verb.
match = match_against_verbs("ter", {"abs", "^a", "con", "de", "entre", "man", "ob", "^re", "sus", "^"}),
forms = {
pres_2s = function(base, prefix) return prefix == "" and "tens" or "téns" end,
pres_3s = function(base, prefix) return prefix == "" and "tem" or "tém" end,
pres_2p = "tendes", pres_3p = "têm",
pres1_and_sub = "tenh",
full_impf = "tinh", impf_1p = "tínhamos", impf_2p = "tínheis",
pret = "tivé", pret_1s = "tive", pret_3s = "teve", pret_conj = "irreg",
irreg = true,
}
},
{
match = "trazer",
forms = {
-- use 'tragu' because we're in a front environment; if we use 'trag', we'll get '#trajo'
pres1_and_sub = "tragu", pres_3s = "traz",
pret = "trouxé", pret_1s = "trouxe", pret_3s = "trouxe", pret_conj = "irreg",
fut = "trar",
irreg = true,
}
},
{
-- valer, desvaler, equivaler
match = "valer",
forms = {
pres1_and_sub = "valh",
irreg = true,
}
},
{
-- coerir, incoerir
--FIXME: This should be a part of the <i-e> section. It's an "i-e", but with accents to prevent a diphthong when it gets stressed.
match = "coerir",
forms = {
vowel_alt = "i-e",
pres1_and_sub = "coír",
pres_sub_unstressed = "coir",
}
},
{
-- We want to match antever etc. but not absolver, atrever etc. No way to avoid listing each verb.
match = match_against_verbs("ver", {"ante", "des", "entre", "pre", "^re", "^"}),
forms = {
pres_2s = "vês", pres_3s = "vê",
pres_2p = "vedes", pres_3p = {"veem", VAR_SUPERSEDED .. "vêem"},
pres1_and_sub = "vej",
pret = "ví", pret_1s = "vi", pret_3s = "viu", pret_conj = "irreg",
pp = "visto",
irreg = true,
}
},
{
-- [[prover]] and [[desprover]] have regular preterite and past participle
match = "prover",
forms = {
pres_2s = "provês", pres_3s = "provê",
pres_2p = "provedes", pres_3p = {"proveem", VAR_SUPERSEDED .. "provêem"},
pres1_and_sub = "provej",
irreg = true,
}
},
{
-- Only envolver, revolver. Not volver, desenvolver, devolver, evolver, etc.
match = match_against_verbs("volver", {"^en", "^re"}),
forms = {short_pp = "volto"},
},
--------------------------------------------------------------------------------------------
-- -ir --
--------------------------------------------------------------------------------------------
-- Verbs not needing entries here:
--
-- abolir: per Priberam: <no_pres1_and_sub> for Brazil, use <u-o> for Portugal
-- barrir: use <only3sp>
-- carpir, colorir, demolir: use <no_pres1_and_sub>
-- descolorir: per Priberam: <no_pres_stressed> for Brazil, use <no_pres1_and_sub> for Portugal
-- delir, espavorir, falir, florir, remir, renhir: use <no_pres_stressed>
-- empedernir: per Priberam: <no_pres_stressed> for Brazil, use <i-e> for Portugal
-- transir: per Priberam: <no_pres_stressed> for Brazil, regular for Portugal
-- aspergir, despir, flectir/deflectir/genuflectir/genufletir/reflectir/refletir, mentir/desmentir,
-- sentir/assentir/consentir/dissentir/pressentir/ressentir, convergir/divergir, aderir/adherir,
-- ferir/auferir/conferir/deferir/desferir/diferir/differir/inferir/interferir/preferir/proferir/referir/transferir,
-- gerir/digerir/ingerir/sugerir, preterir, competir/repetir, servir, advertir/animadvertir/divertir,
-- vestir/investir/revestir/travestir, seguir/conseguir/desconseguir/desseguir/perseguir/prosseguir: use <i-e>
-- inerir: use <i-e> (per Infopédia, and per Priberam for Brazil), use <i-e.only3sp> (per Priberam for Portugal)
-- compelir/expelir/impelir/repelir: per Priberam: use <i-e> for Brazil, <no_pres1_and_sub> for Portugal (Infopédia
-- says <i-e>); NOTE: old module claims short_pp 'repulso' but none of Priberam, Infopédia and conjugacao.com.br agree
-- dormir, engolir, tossir, subir, acudir/sacudir, fugir, sumir/consumir (NOT assumir/presumir/resumir): use <u-o>
-- polir/repolir (claimed in old module to have no pres stressed, but Priberam disagrees for both Brazil and
-- Portugal; Infopédia lists repolir as completely regular and not like polir, but I think that's an error): use
-- <u>
-- premir: per Priberam: use <no_pres1_and_sub> for Brazil, <i> for Portugal (for Portugal, Priberam says
-- primo/primes/prime, while Infopédia says primo/premes/preme; Priberam is probably more reliable)
-- extorquir/retorquir use <no_pres1_and_sub> for Brazil, <u-o,u> for Portugal
-- agredir/progredir/regredir/transgredir: use <i>
-- denegrir, prevenir: use <i>
-- eclodir: per Priberam: regular in Brazil, <u-o.only3sp> in Portugal (Infopédia says regular)
-- cerzir: per Priberam: use <i> for Brazil, use <i-e> for Portugal (Infopédia says <i-e,i>)
-- cergir: per Priberam: use <i-e> for Brazil, no conjugation given for Portugal (Infopédia says <i-e>)
-- proibir/coibir: use <í>
-- reunir: use <ú>
--
-- -cir alternations (aducir, ressarcir): automatically handled in combine_stem_ending()
-- -gir alternations (agir, dirigir, exigir): automatically handled in combine_stem_ending()
-- -guir alternations (e.g. conseguir): automatically handled in combine_stem_ending()
-- -quir alternations (e.g. extorquir): automatically handled in combine_stem_ending()
{
-- verbs in -air (cair, sair, trair and derivatives: decair/descair/recair, sobres(s)air,
-- abstrair/atrair/contrair/distrair/extrair/protrair/retrair/subtrair)
match = "air",
forms = {
pres1_and_sub = "ai", pres_2s = "ais", pres_3s = "ai",
-- all occurrences of accented í in endings handled in combine_stem_ending()
irreg = true,
}
},
{
-- abrir/desabrir/reabrir
match = "abrir",
forms = {pp = "aberto"}
},
{
-- cobrir/descobrir/encobrir/recobrir/redescobrir
match = "cobrir",
forms = {vowel_alt = "u-o", pp = "coberto"}
},
{
-- conduzir, produzir, reduzir, traduzir, etc.; luzir, reluzir, tremeluzir
match = "uzir",
forms = {
pres_3s = "uz",
imp_2s = {"uz", "uze"}, -- per Infopédia
irreg = true,
}
},
{
-- parir
match = "parir",
forms = {
pres1_and_sub = {{form = "pair", footnotes = {"[โบราณ, ปัจจุบันพบได้ยาก, บางครั้งไม่ควรใช้]"}}}, -- per Houaiss
irreg = true,
}
},
{
-- pedir, desimpedir, despedir, espedir, expedir, impedir
-- medir
-- comedir (per Priberam, no_pres_stressed in Brazil)
match = match_against_verbs("edir", {"m", "p"}),
forms = {
pres1_and_sub = "eç",
irreg = true,
}
},
{
-- explodir, implodir
match = "plodir",
forms = {
vowel_alt = {{form = "+", footnotes = {"[บราซิล]"}}, {form = "u-o", footnotes = {"[โปรตุเกส]"}}},
}
},
{
-- frigir
match = "frigir",
forms = {vowel_alt = "i-e", short_pp = "frito"},
},
{
-- inserir
match = "inserir",
forms = {vowel_alt = "i-e", short_pp = {form = "inserto", footnotes = {"[โปรตุเกสแบบยุโรปเท่านั้น]"}}},
},
{
-- ir
match = "^ir",
forms = {
pres_1s = "vou", pres_2s = "vais", pres_3s = "vai",
pres_1p = "vamos", pres_2p = "ides", pres_3p = "vão",
pres_sub_1s = "vá", pres_sub_2s = "vás", pres_sub_3s = "vá",
pres_sub_1p = "vamos", pres_sub_2p = "vades", pres_sub_3p = "vão",
pret = "fô", pret_1s = "fui", pret_3s = "foi", pret_conj = "irreg",
irreg = true,
}
},
{
-- emergir, imergir, submergir
match = "mergir",
forms = {vowel_alt = {"i-e", "+"}, short_pp = "merso"},
},
{
match = "ouvir",
forms = {
pres1_and_sub = {"ouç", "oiç"},
irreg = true,
}
},
{
-- exprimir, imprimir, comprimir (but not descomprimir per Priberam), deprimir, oprimir/opprimir (but not reprimir,
-- suprimir/supprimir per Priberam)
match = match_against_verbs("primir", {"^com", "ex", "im", "de", "^o", "op"}),
forms = {short_pp = "presso"}
},
{
-- rir, sorrir
match = match_against_verbs("rir", {"^", "sor"}),
forms = {
pres_2s = "ris", pres_3s = "ri", pres_2p = "rides", pres_3p = "riem",
pres1_and_sub = "ri",
irreg = true,
}
},
{
-- distinguir, extinguir
match = "tinguir",
forms = {
short_pp = "tinto",
-- gu/g alternations handled in combine_stem_ending()
}
},
{
-- delinquir, arguir/redarguir
-- NOTE: The following is based on delinquir, with arguir/redarguir by parallelism.
-- In Priberam, delinquir and arguir are exactly parallel, but in Infopédia they aren't; only delinquir has
-- alternatives like 'delínques'. I assume this is because forms like 'delínques' are Brazilian and
-- Infopédia is from Portugal, so their coverage of Brazilian forms may be inconsistent.
match = match_against_verbs("uir", {"delinq", "arg"}),
forms = {
-- use 'ü' because we're in a front environment; if we use 'u', we'll get '#delinco', '#argo'
pres1_and_sub = {{form = AC .. "ü", footnotes = {"[โปรตุเกสแบบบราซิล]"}}, {form = "ü", footnotes = {"[โปรตุเกสแบบยุโรป]"}}},
-- FIXME: verify. This is by partial parallelism with the present subjunctive of verbs in -quar (also a
-- front environment). Infopédia has 'delinquis ou delínques' and Priberam has 'delinqúis'.
pres_2s = {
{form = AC .. "ues", footnotes = {"[โปรตุเกสแบบบราซิล]"}},
{form = "uis", footnotes = {"[โปรตุเกสแบบยุโรป]"}},
-- This form should occur only with an infinitive 'delinqüir' etc.
-- {form = AC .. VAR_SUPERSEDED .. "ües", footnotes = {"[โปรตุเกสแบบบราซิล]"}},
{form = VAR_SUPERSEDED .. "úis", footnotes = {"[โปรตุเกสแบบยุโรป]"}},
},
-- Same as previous.
pres_3s = {
{form = AC .. "ue", footnotes = {"[โปรตุเกสแบบบราซิล]"}},
{form = "ui", footnotes = {"[โปรตุเกสแบบยุโรป]"}},
-- This form should occur only with an infinitive 'delinqüir' etc.
-- {form = AC .. VAR_SUPERSEDED .. "üe", footnotes = {"[โปรตุเกสแบบบราซิล]"}},
{form = VAR_SUPERSEDED .. "úi", footnotes = {"[โปรตุเกสแบบยุโรป]"}},
},
-- Infopédia has 'delinquem ou delínquem' and Priberam has 'delinqúem'.
pres_3p = {
{form = AC .. "uem", footnotes = {"[โปรตุเกสแบบบราซิล]"}},
{form = "uem", footnotes = {"[โปรตุเกสแบบยุโรป]"}},
-- This form should occur only with an infinitive 'delinqüir' etc.
-- {form = AC .. VAR_SUPERSEDED .. "üem", footnotes = {"[โปรตุเกสแบบบราซิล]"}},
{form = VAR_SUPERSEDED .. "úem", footnotes = {"[โปรตุเกสแบบยุโรป]"}},
},
-- FIXME: The old module also had several other alternative forms (given as [123]_alt, not identified as
-- obsolete):
-- impf: delinquia/delinquía, delinquias/delinquías, delinquia/delinquía, delinquíamos, delinquíeis, delinquiam/delinquíam
-- plup: delinquira/delinquíra, delinquiras/delinquíras, delinquira/delinquíra, delinquíramos, delinquíreis, delinquiram/delinquíram
-- pres_1p = delinquimos/delinquímos, pres_2p = delinquis/delinquís
-- pret = delinqui/delinquí, delinquiste/delinquíste, delinquiu, delinquimos/delinquímos, delinquistes/delinquístes, delinquiram/delinquíram
-- pers_inf = delinquir, delinquires, delinquir, delinquirmos, delinquirdes, delinquirem/delinquírem
-- fut_sub = delinquir, delinquires, delinquir, delinquirmos, delinquirdes, delinquirem/delinquírem
--
-- None of these alternative forms can be found in the Infopédia, Priberam, Collins or Reverso conjugation
-- tables, so their status is unclear, and I have omitted them.
}
},
{
-- verbs in -truir (construir, destruir, reconstruir) but not obstruir/desobstruir, instruir, which are handled
-- by the default -uir handler below
match = match_against_verbs("struir", {"con", "de"}),
forms = {
pres_2s = {"stróis", "struis"}, pres_3s = {"strói", "strui"}, pres_3p = {"stroem", "struem"},
-- all occurrences of accented í in endings handled in combine_stem_ending()
irreg = true,
}
},
{
-- verbs in -cluir (concluir, excluir, incluir): like -uir but has short_pp concluso etc. in Brazil
match = "cluir",
forms = {
pres_2s = "cluis", pres_3s = "clui",
-- all occurrences of accented í in endings handled in combine_stem_ending()
short_pp = {form = "cluso", footnotes = {"[Brazil only]"}},
}
},
{
-- puir, ruir: like -uir but defective in pres_1s, all pres sub
match = match_against_verbs("uir", {"^p", "^r"}),
forms = {
pres_2s = "uis", pres_3s = "ui",
-- all occurrences of accented í in endings handled in combine_stem_ending()
no_pres1_and_sub = true,
irreg = true,
}
},
{
-- remaining verbs in -uir (concluir/excluir/incluir/concruir/concruyr, abluir/diluir, afluir/fluir/influir,
-- aluir, anuir, atribuir/contribuir/distribuir/redistribuir/retribuir/substituir, coevoluir/evoluir,
-- constituir/destituir/instituir/reconstituir/restituir, derruir, diminuir, estatuir, fruir/usufruir, imbuir,
-- imiscuir, poluir, possuir, pruir
-- FIXME: old module lists short pp incluso for incluir that can't be verified, ask about this
-- FIXME: handle -uyr verbs?
match = function(verb)
-- Don't match -guir verbs (e.g. [[seguir]], [[conseguir]]) or -quir verbs (e.g. [[extorquir]])
if verb:find("guir$") or verb:find("quir$") then
return nil
else
return match_against_verbs("uir", {""})(verb)
end
end,
forms = {
pres_2s = "uis", pres_3s = "ui",
-- all occurrences of accented í in endings handled in combine_stem_ending()
irreg = true,
}
},
{
-- We want to match advir, convir, devir, etc. but not ouvir, servir, etc. No way to avoid listing each verb.
match = match_against_verbs("vir", {"ad", "^a", "con", "contra", "de", "^desa", "inter", "pro", "^re", "sobre", "^"}),
forms = {
pres_2s = function(base, prefix) return prefix == "" and "vens" or "véns" end,
pres_3s = function(base, prefix) return prefix == "" and "vem" or "vém" end,
pres_2p = "vindes", pres_3p = "vêm",
pres1_and_sub = "venh",
full_impf = "vinh", impf_1p = "vínhamos", impf_2p = "vínheis",
pret = "vié", pret_1s = "vim", pret_3s = "veio", pret_conj = "irreg",
pp = "vindo",
irreg = true,
}
},
--------------------------------------------------------------------------------------------
-- misc --
--------------------------------------------------------------------------------------------
{
-- pôr, antepor, apor, compor/decompor/descompor, contrapor, depor, dispor, expor, impor, interpor, justapor,
-- opor, pospor, propor, repor, sobrepor, supor/pressupor, transpor, superseded forms like [[decompôr]], others?
match = "p[oô]r",
forms = {
pres1_and_sub = "ponh",
pres_2s = "pões", pres_3s = "põe", pres_1p = "pomos", pres_2p = "pondes", pres_3p = "põem",
full_impf = "punh", impf_1p = "púnhamos", impf_2p = "púnheis",
pret = "pusé", pret_1s = "pus", pret_3s = "pôs", pret_conj = "irreg",
pers_inf = "po",
gerund = "pondo", pp = "posto",
irreg = true,
}
},
}
local function skip_slot(base, slot, allow_overrides)
if not allow_overrides and (base.basic_overrides[slot] or
base.refl and base.basic_reflexive_only_overrides[slot]) then
-- Skip any slots for which there are overrides.
return true
end
if base.only3s and (slot:find("^pp_f") or slot:find("^pp_mp")) then
-- diluviar, atardecer, neviscar; impersonal verbs have only masc sing pp
return true
end
if not slot:find("[123]") then
-- Don't skip non-personal slots.
return false
end
if base.nofinite then
return true
end
if (base.only3s or base.only3sp or base.only3p) and (slot:find("^imp_") or slot:find("^neg_imp_")) then
return true
end
if base.only3s and not slot:find("3s") then
-- diluviar, atardecer, neviscar
return true
end
if base.only3sp and not slot:find("3[sp]") then
-- atañer, concernir
return true
end
if base.only3p and not slot:find("3p") then
-- [[caer cuatro gotas]], [[caer chuzos de punta]], [[entrarle los siete males]]
return true
end
return false
end
-- Apply vowel alternations to stem.
local function apply_vowel_alternations(stem, alternations)
local alternation_stems = {}
local saw_pres1_and_sub = false
local saw_pres_stressed = false
-- Process alternations other than +.
for _, altobj in ipairs(alternations) do
local alt = altobj.form
local pres1_and_sub, pres_stressed, err
-- Treat final -gu, -qu as a consonant, so the previous vowel can alternate (e.g. conseguir -> consigo).
-- This means a verb in -guar can't have a u-ú alternation but I don't think there are any verbs like that.
stem = rsub(stem, "([gq])u$", "%1" .. TEMPC1)
if alt == "+" then
-- do nothing yet
elseif alt == "ei" then
local before_last_vowel = rmatch(stem, "^(.*)i$")
if not before_last_vowel then
err = "stem should end in -i"
else
pres1_and_sub = nil
pres_stressed = before_last_vowel .. "ei"
end
else
local before_last_vowel, last_vowel, after_last_vowel = rmatch(stem, "^(.*)(" .. V .. ")(.-[ui])$")
if not before_last_vowel then
before_last_vowel, last_vowel, after_last_vowel = rmatch(stem, "^(.*)(" .. V .. ")(.-)$")
end
if alt == "i-e" then
if last_vowel == "e" or last_vowel == "i" then
pres1_and_sub = before_last_vowel .. "i" .. after_last_vowel
if last_vowel == "i" then
pres_stressed = before_last_vowel .. "e" .. after_last_vowel
end
else
err = "should have -e- or -i- as the last vowel"
end
elseif alt == "i" then
if last_vowel == "e" then
pres1_and_sub = before_last_vowel .. "i" .. after_last_vowel
pres_stressed = pres1_and_sub
else
err = "should have -e- as the last vowel"
end
elseif alt == "u-o" then
if last_vowel == "o" or last_vowel == "u" then
pres1_and_sub = before_last_vowel .. "u" .. after_last_vowel
if last_vowel == "u" then
pres_stressed = before_last_vowel .. "o" .. after_last_vowel
end
else
err = "should have -o- or -u- as the last vowel"
end
elseif alt == "u" then
if last_vowel == "o" then
pres1_and_sub = before_last_vowel .. "u" .. after_last_vowel
pres_stressed = pres1_and_sub
else
err = "should have -o- as the last vowel"
end
elseif alt == "í" then
if last_vowel == "i" then
pres_stressed = before_last_vowel .. "í" .. after_last_vowel
else
err = "should have -i- as the last vowel"
end
elseif alt == "ú" then
if last_vowel == "u" then
pres_stressed = before_last_vowel .. "ú" .. after_last_vowel
else
err = "should have -u- as the last vowel"
end
else
error("Internal error: Unrecognized vowel alternation '" .. alt .. "'")
end
end
if pres1_and_sub then
pres1_and_sub = {form = pres1_and_sub:gsub(TEMPC1, "u"), footnotes = altobj.footnotes}
saw_pres1_and_sub = true
end
if pres_stressed then
pres_stressed = {form = pres_stressed:gsub(TEMPC1, "u"), footnotes = altobj.footnotes}
saw_pres_stressed = true
end
table.insert(alternation_stems, {
altobj = altobj,
pres1_and_sub = pres1_and_sub,
pres_stressed = pres_stressed,
err = err
})
end
-- Now do +. We check to see which stems are used by other alternations and specify those so any footnotes are
-- properly attached.
for _, alternation_stem in ipairs(alternation_stems) do
if alternation_stem.altobj.form == "+" then
local stemobj = {form = stem, footnotes = alternation_stem.altobj.footnotes}
alternation_stem.pres1_and_sub = saw_pres1_and_sub and stemobj or nil
alternation_stem.pres_stressed = saw_pres_stressed and stemobj or nil
end
end
return alternation_stems
end
-- Add the `stem` to the `ending` for the given `slot` and apply any phonetic modifications.
-- WARNING: This function is written very carefully; changes to it can easily have unintended consequences.
local function combine_stem_ending(base, slot, prefix, stem, ending, dont_include_prefix)
-- If the stem begins with an acute accent, this is a signal to move the accent onto the last vowel of the prefix.
-- Cf. míngua of minguar.
if stem:find("^" .. AC) then
stem = rsub(stem, "^" .. AC, "")
if dont_include_prefix then
error("Internal error: Can't handle acute accent at beginning of stem if dont_include_prefix is given")
end
prefix = rsub(prefix, "([aeiouyAEIOUY])([^aeiouyAEIOUY]*)$", "%1" .. AC .. "%2")
end
-- Use the full stem for checking for -gui ending and such, because 'stem' is just 'u' for [[arguir]],
-- [[delinquir]].
local full_stem = prefix .. stem
-- Include the prefix in the stem unless dont_include_prefix is given (used for the past participle stem).
if not dont_include_prefix then
stem = prefix .. stem
end
-- If the ending begins with a double asterisk, this is a signal to conditionally delete the accent on the last letter
-- of the stem. "Conditionally" means we don't do it if the last two letters would form a diphthong without the accent
-- on the second one (e.g. in [[sair]], with stem 'saí'); but as an exception, we do delete the accent in stems
-- ending in -guí, -quí (e.g. in [[conseguir]]) because in this case the ui isn't a diphthong.
if ending:find("^%*%*") then
ending = rsub(ending, "^%*%*", "")
if rfind(full_stem, "[gq]uí$") or not rfind(full_stem, V .. "[íú]$") then
stem = remove_final_accent(stem)
end
end
-- If the ending begins with an asterisk, this is a signal to delete the accent on the last letter of the stem.
-- E.g. fizé -> fizermos. Unlike for **, this removal is unconditional, so we get e.g. 'sairmos' not #'saírmos'.
if ending:find("^%*") then
ending = rsub(ending, "^%*", "")
stem = remove_final_accent(stem)
end
-- If ending begins with i, it must get an accent after an unstressed vowel (in some but not all cases) to prevent
-- the two merging into a diphthong:
-- * cair ->
-- * pres: caímos, caís;
-- * impf: all forms (caí-);
-- * pret: caí, caíste (but not caiu), caímos, caístes, caíram;
-- * plup: all forms (caír-);
-- * impf_sub: all forms (caíss-);
-- * fut_sub: caíres, caírem (but not cair, cairmos, cairdes)
-- * pp: caído (but not gerund caindo)
-- * atribuir, other verbs in -uir -> same pattern as for cair etc.
-- * roer ->
-- * pret: roí
-- * impf: all forms (roí-)
-- * pp: roído
if ending:find("^i") and full_stem:find("[aeiou]$") and not full_stem:find("[gq]u$") and ending ~= "ir" and
ending ~= "iu" and ending ~= "indo" and not ending:find("^ir[md]") then
ending = ending:gsub("^i", "í")
end
-- Spelling changes in the stem; it depends on whether the stem given is the pre-front-vowel or
-- pre-back-vowel variant, as indicated by `frontback`. We want these front-back spelling changes to happen
-- between stem and ending, not between prefix and stem; the prefix may not have the same "front/backness"
-- as the stem.
local is_front = rfind(ending, "^[eiéíê]")
if base.frontback == "front" and not is_front then
stem = stem:gsub("c$", "ç") -- conhecer -> conheço, vencer -> venço, descer -> desço
stem = stem:gsub("g$", "j") -- proteger -> protejo, fugir -> fujo
stem = stem:gsub("gu$", "g") -- distinguir -> distingo, conseguir -> consigo
stem = stem:gsub("qu$", "c") -- extorquir -> exturco
stem = stem:gsub("([gq])ü$", "%1u") -- argüir (superseded) -> arguo, delinqüir (superseded) -> delinquo
elseif base.frontback == "back" and is_front then
-- The following changes are all superseded so we don't do them:
-- averiguar -> averigüei, minguar -> mingüei; antiquar -> antiqüei, apropinquar -> apropinqüei
-- stem = stem:gsub("([gq])u$", "%1ü")
stem = stem:gsub("g$", "gu") -- cargar -> carguei, apagar -> apaguei
stem = stem:gsub("c$", "qu") -- marcar -> marquei
stem = stem:gsub("ç$", "c") -- começar -> comecei
-- j does not go to g here; desejar -> deseje not #desege
end
return stem .. ending
end
local function add3(base, slot, stems, endings, footnotes, allow_overrides)
if skip_slot(base, slot, allow_overrides) then
return
end
local function do_combine_stem_ending(stem, ending)
return combine_stem_ending(base, slot, base.prefix, stem, ending)
end
iut.add_forms(base.forms, slot, stems, endings, do_combine_stem_ending, nil, nil, footnotes)
end
local function insert_form(base, slot, form)
if not skip_slot(base, slot) then
iut.insert_form(base.forms, slot, form)
end
end
local function insert_forms(base, slot, forms)
if not skip_slot(base, slot) then
iut.insert_forms(base.forms, slot, forms)
end
end
local function add_single_stem_tense(base, slot_pref, stems, s1, s2, s3, p1, p2, p3)
local function addit(slot, ending)
add3(base, slot_pref .. "_" .. slot, stems, ending)
end
addit("1s", s1)
addit("2s", s2)
addit("3s", s3)
addit("1p", p1)
addit("2p", p2)
addit("3p", p3)
end
local function construct_stems(base, vowel_alt)
local stems = {}
stems.pres_unstressed = base.stems.pres_unstressed or base.inf_stem
stems.pres_stressed =
-- If no_pres_stressed given, pres_stressed stem should be empty so no forms are generated.
base.no_pres_stressed and {} or
base.stems.pres_stressed or
vowel_alt.pres_stressed or
base.inf_stem
stems.pres1_and_sub =
-- If no_pres_stressed given, the entire subjunctive is missing.
base.no_pres_stressed and {} or
-- If no_pres1_and_sub given, pres1 and entire subjunctive are missing.
base.no_pres1_and_sub and {} or
base.stems.pres1_and_sub or
vowel_alt.pres1_and_sub or
nil
stems.pres1 = base.stems.pres1 or stems.pres1_and_sub or stems.pres_stressed
stems.impf = base.stems.impf or base.inf_stem
stems.full_impf = base.stems.full_impf
stems.pret_base = base.stems.pret_base or base.inf_stem
stems.pret = base.stems.pret or iut.map_forms(iut.convert_to_general_list_form(stems.pret_base), function(form)
return form .. base.conj_vowel end)
stems.pret_conj = base.stems.pret_conj or base.conj
stems.fut = base.stems.fut or base.inf_stem .. base.conj
stems.cond = base.stems.cond or stems.fut
stems.pres_sub_stressed = base.stems.pres_sub_stressed or stems.pres1
stems.pres_sub_unstressed = base.stems.pres_sub_unstressed or stems.pres1_and_sub or stems.pres_unstressed
stems.sub_conj = base.stems.sub_conj or base.conj
stems.plup = base.stems.plup or stems.pret
stems.impf_sub = base.stems.impf_sub or stems.pret
stems.fut_sub = base.stems.fut_sub or stems.pret
stems.pers_inf = base.stems.pers_inf or base.inf_stem .. base.conj_vowel
stems.pp = base.stems.pp or base.conj == "ar" and
combine_stem_ending(base, "pp_ms", base.prefix, base.inf_stem, "ado", "dont include prefix") or
-- use combine_stem_ending esp. so we get roído, caído, etc.
combine_stem_ending(base, "pp_ms", base.prefix, base.inf_stem, "ido", "dont include prefix")
stems.pp_ms = stems.pp
local function masc_to_fem(form)
if rfind(form, "o$") then
return rsub(form, "o$", "a")
else
return form
end
end
stems.pp_fs = iut.map_forms(iut.convert_to_general_list_form(stems.pp_ms), masc_to_fem)
if base.stems.short_pp then
stems.short_pp_ms = base.stems.short_pp
stems.short_pp_fs = iut.map_forms(iut.convert_to_general_list_form(stems.short_pp_ms), masc_to_fem)
end
base.this_stems = stems
end
local function add_present_indic(base)
local stems = base.this_stems
local function addit(slot, stems, ending)
add3(base, "pres_" .. slot, stems, ending)
end
local s2, s3, p1, p2, p3
if base.conj == "ar" then
s2, s3, p1, p2, p3 = "as", "a", "amos", "ais", "am"
elseif base.conj == "er" or base.conj == "or" then -- verbs in -por have the present overridden
s2, s3, p1, p2, p3 = "es", "e", "emos", "eis", "em"
elseif base.conj == "ir" then
s2, s3, p1, p2, p3 = "es", "e", "imos", "is", "em"
else
error("Internal error: Unrecognized conjugation " .. base.conj)
end
addit("1s", stems.pres1, "o")
addit("2s", stems.pres_stressed, s2)
addit("3s", stems.pres_stressed, s3)
addit("1p", stems.pres_unstressed, p1)
addit("2p", stems.pres_unstressed, p2)
addit("3p", stems.pres_stressed, p3)
end
local function add_present_subj(base)
local stems = base.this_stems
local function addit(slot, stems, ending)
add3(base, "pres_sub_" .. slot, stems, ending)
end
local s1, s2, s3, p1, p2, p3
if stems.sub_conj == "ar" then
s1, s2, s3, p1, p2, p3 = "e", "es", "e", "emos", "eis", "em"
else
s1, s2, s3, p1, p2, p3 = "a", "as", "a", "amos", "ais", "am"
end
addit("1s", stems.pres_sub_stressed, s1)
addit("2s", stems.pres_sub_stressed, s2)
addit("3s", stems.pres_sub_stressed, s3)
addit("1p", stems.pres_sub_unstressed, p1)
addit("2p", stems.pres_sub_unstressed, p2)
addit("3p", stems.pres_sub_stressed, p3)
end
local function add_finite_non_present(base)
local stems = base.this_stems
local function add_tense(slot, stem, s1, s2, s3, p1, p2, p3)
add_single_stem_tense(base, slot, stem, s1, s2, s3, p1, p2, p3)
end
if stems.full_impf then
-- An override needs to be supplied for the impf_1p and impf_2p due to the written accent on the stem.
add_tense("impf", stems.full_impf, "a", "as", "a", {}, {}, "am")
elseif base.conj == "ar" then
add_tense("impf", stems.impf, "ava", "avas", "ava", "ávamos", "áveis", "avam")
else
add_tense("impf", stems.impf, "ia", "ias", "ia", "íamos", "íeis", "iam")
end
-- * at the beginning of the ending means to remove a final accent from the preterite stem.
if stems.pret_conj == "irreg" then
add_tense("pret", stems.pret, {}, "*ste", {}, "*mos", "*stes", "*ram")
elseif stems.pret_conj == "ar" then
add_tense("pret", stems.pret_base, "ei", "aste", "ou",
{{form = VAR_BR .. "amos", footnotes = {"[โปรตุเกสแบบบราซิล]"}}, {form = VAR_PT .. "ámos", footnotes = {"[โปรตุเกสแบบยุโรป]"}}}, "astes", "aram")
elseif stems.pret_conj == "er" then
add_tense("pret", stems.pret_base, "i", "este", "eu", "emos", "estes", "eram")
else
add_tense("pret", stems.pret_base, "i", "iste", "iu", "imos", "istes", "iram")
end
-- * at the beginning of the ending means to remove a final accent from the stem.
-- ** is similar but is "conditional" on a consonant preceding the final vowel.
add_tense("plup", stems.plup, "**ra", "**ras", "**ra", "ramos", "reis", "**ram")
add_tense("impf_sub", stems.impf_sub, "**sse", "**sses", "**sse", "ssemos", "sseis", "**ssem")
add_tense("fut_sub", stems.fut_sub, "*r", "**res", "*r", "*rmos", "*rdes", "**rem")
local mark = TEMP_MESOCLITIC_INSERTION_POINT
add_tense("fut", stems.fut, mark .. "ei", mark .. "ás", mark .. "á", mark .. "emos", mark .. "eis", mark .. "ão")
add_tense("cond", stems.cond, mark .. "ia", mark .. "ias", mark .. "ia", mark .. "íamos", mark .. "íeis", mark .. "iam")
-- Different stems for different parts of the personal infinitive to correctly handle forms of [[sair]] and [[pôr]].
add_tense("pers_inf", base.non_prefixed_verb, "", {}, "", {}, {}, {})
add_tense("pers_inf", stems.pers_inf, {}, "**res", {}, "*rmos", "*rdes", "**rem")
end
local function add_non_finite_forms(base)
local stems = base.this_stems
local function addit(slot, stems, ending, footnotes)
add3(base, slot, stems, ending, footnotes)
end
insert_form(base, "infinitive", {form = base.verb})
-- Also insert "infinitive + reflexive pronoun" combinations if we're handling a reflexive verb. See comment below for
-- "gerund + reflexive pronoun" combinations.
if base.refl then
for _, persnum in ipairs(person_number_list) do
insert_form(base, "infinitive_" .. persnum, {form = base.verb})
end
end
-- verbs in -por have the gerund overridden
local ger_ending = base.conj == "ar" and "ando" or base.conj == "er" and "endo" or "indo"
addit("gerund", stems.pres_unstressed, ger_ending)
-- Also insert "gerund + reflexive pronoun" combinations if we're handling a reflexive verb. We insert exactly the same
-- form as for the bare gerund; later on in add_reflexive_or_fixed_clitic_to_forms(), we add the appropriate clitic
-- pronouns. It's important not to do this for non-reflexive verbs, because in that case, the clitic pronouns won't be
-- added, and {{pt-verb form of}} will wrongly consider all these combinations as possible inflections of the bare
-- gerund. Thanks to [[User:JeffDoozan]] for this bug fix.
if base.refl then
for _, persnum in ipairs(person_number_list) do
addit("gerund_" .. persnum, stems.pres_unstressed, ger_ending)
end
end
-- Skip the long/short past participle footnotes if called from {{pt-verb}} so they don't show in the headword.
local long_pp_footnotes =
stems.short_pp_ms and base.alternant_multiword_spec.source_template ~= "pt-verb" and {long_pp_footnote} or nil
addit("pp_ms", stems.pp_ms, "", long_pp_footnotes)
if not base.pp_inv then
addit("pp_fs", stems.pp_fs, "", long_pp_footnotes)
addit("pp_mp", stems.pp_ms, "s", long_pp_footnotes)
addit("pp_fp", stems.pp_fs, "s", long_pp_footnotes)
end
if stems.short_pp_ms then
local short_pp_footnotes =
stems.short_pp_ms and base.alternant_multiword_spec.source_template ~= "pt-verb" and {short_pp_footnote} or nil
addit("short_pp_ms", stems.short_pp_ms, "", short_pp_footnotes)
if not base.pp_inv then
addit("short_pp_fs", stems.short_pp_fs, "", short_pp_footnotes)
addit("short_pp_mp", stems.short_pp_ms, "s", short_pp_footnotes)
addit("short_pp_fp", stems.short_pp_fs, "s", short_pp_footnotes)
end
end
end
local function copy_forms_to_imperatives(base)
-- Copy pres3s to imperative since they are almost always the same.
insert_forms(base, "imp_2s", iut.map_forms(base.forms.pres_3s, function(form) return form end))
if not skip_slot(base, "imp_2p") then
-- Copy pres2p to imperative 2p minus -s since they are almost always the same.
-- But not if there's an override, to avoid possibly throwing an error.
insert_forms(base, "imp_2p", iut.map_forms(base.forms.pres_2p, function(form)
if not form:find("s$") then
error("Can't derive second-person plural imperative from second-person plural present indicative " ..
"because form '" .. form .. "' doesn't end in -s")
end
return rsub(form, "s$", "")
end))
end
-- Copy subjunctives to imperatives, unless there's an override for the given slot (as with the imp_1p of [[ir]]).
for _, persnum in ipairs({"3s", "1p", "3p"}) do
local from = "pres_sub_" .. persnum
local to = "imp_" .. persnum
insert_forms(base, to, iut.map_forms(base.forms[from], function(form) return form end))
end
end
local function process_slot_overrides(base, filter_slot, reflexive_only)
local overrides = reflexive_only and base.basic_reflexive_only_overrides or base.basic_overrides
for slot, forms in pairs(overrides) do
if not filter_slot or filter_slot(slot) then
add3(base, slot, forms, "", nil, "allow overrides")
end
end
end
-- Prefix `form` with `clitic`, adding fixed text `between` between them. Add links as appropriate unless the user
-- requested no links. Check whether form already has brackets (as will be the case if the form has a fixed clitic).
local function prefix_clitic_to_form(base, clitic, between, form)
if base.alternant_multiword_spec.args.noautolinkverb then
return clitic .. between .. form
else
local clitic_pref = "[[" .. clitic .. "]]" .. between
if form:find("%[%[") then
return clitic_pref .. form
else
return clitic_pref .. "[[" .. form .. "]]"
end
end
end
-- Add the appropriate clitic pronouns in `clitics` to the forms in `base_slot`. `store_cliticized_form` is a function
-- of three arguments (clitic, formobj, cliticized_form) and should store the cliticized form for the specified clitic
-- and form object.
local function suffix_clitic_to_forms(base, base_slot, clitics, store_cliticized_form)
if not base.forms[base_slot] then
-- This can happen, e.g. in only3s/only3sp/only3p verbs.
return
end
local autolink = not base.alternant_multiword_spec.args.noautolinkverb
for _, formobj in ipairs(base.forms[base_slot]) do
for _, clitic in ipairs(clitics) do
local cliticized_form
if formobj.form:find(TEMP_MESOCLITIC_INSERTION_POINT) then
-- mesoclisis in future and conditional
local infinitive, suffix = rmatch(formobj.form, "^(.*)" .. TEMP_MESOCLITIC_INSERTION_POINT .. "(.*)$")
if not infinitive then
error("Internal error: Can't find mesoclitic insertion point in slot '" .. base_slot .. "', form '" ..
formobj.form .. "'")
end
local full_form = infinitive .. suffix
if autolink and not infinitive:find("%[%[") then
infinitive = "[[" .. infinitive .. "]]"
end
cliticized_form =
autolink and infinitive .. "-[[" .. clitic .. "]]-[[" .. full_form .. "|" .. suffix .. "]]" or
infinitive .. "-" .. clitic .. "-" .. suffix
else
local clitic_suffix = autolink and "-[[" .. clitic .. "]]" or "-" .. clitic
local form_needs_link = autolink and not formobj.form:find("%[%[")
if base_slot:find("1p$") then
-- Final -s disappears: esbaldávamos + nos -> esbaldávamo-nos, etc.
cliticized_form = formobj.form:gsub("s$", "")
if form_needs_link then
cliticized_form = "[[" .. formobj.form .. "|" .. cliticized_form .. "]]"
end
else
cliticized_form = formobj.form
if form_needs_link then
cliticized_form = "[[" .. cliticized_form .. "]]"
end
end
cliticized_form = cliticized_form .. clitic_suffix
end
store_cliticized_form(clitic, formobj, cliticized_form)
end
end
end
-- Add a reflexive pronoun or fixed clitic (FIXME: not working), as appropriate to the base forms that were generated.
-- `do_joined` means to do only the forms where the pronoun is joined to the end of the form; otherwise, do only the
-- forms where it is not joined and precedes the form.
local function add_reflexive_or_fixed_clitic_to_forms(base, do_reflexive, do_joined)
for _, slotaccel in ipairs(base.alternant_multiword_spec.verb_slots_basic) do
local slot, accel = unpack(slotaccel)
local clitic
if not do_reflexive then
clitic = base.clitic
elseif slot:find("[123]") then
local persnum = slot:match("^.*_(.-)$")
clitic = person_number_to_reflexive_pronoun[persnum]
else
clitic = "se"
end
if base.forms[slot] then
if do_reflexive and slot:find("^pp_") or slot == "infinitive_linked" then
-- do nothing with reflexive past participles or with infinitive linked (handled at the end)
elseif slot:find("^neg_imp_") then
error("Internal error: Should not have forms set for negative imperative at this stage")
else
local slot_has_suffixed_clitic = not slot:find("_sub")
-- Maybe generate non-reflexive parts and separated syntactic variants for use in {{pt-verb form of}}.
-- See comment in add_slots() above `need_special_verb_form_of_slots`. Check for do_joined so we only
-- run this code once.
if do_reflexive and do_joined and base.alternant_multiword_spec.source_template == "pt-verb form of" and
-- Skip personal variants of infinitives and gerunds so we don't think [[esbaldando]] is a
-- non-reflexive equivalent of [[esbaldando-me]].
not slot:find("infinitive_") and not slot:find("gerund_") then
-- Clone the forms because we will be destructively modifying them just below, adding the reflexive
-- pronoun.
insert_forms(base, slot .. "_non_reflexive", mw.clone(base.forms[slot]))
if slot_has_suffixed_clitic then
insert_forms(base, slot .. "_variant", iut.map_forms(base.forms[slot], function(form)
return prefix_clitic_to_form(base, clitic, " ... ", form)
end))
end
end
if slot_has_suffixed_clitic then
if do_joined then
suffix_clitic_to_forms(base, slot, {clitic},
function(clitic, formobj, cliticized_form)
formobj.form = cliticized_form
end
)
end
elseif not do_joined then
-- Add clitic as separate word before all other forms.
for _, form in ipairs(base.forms[slot]) do
form.form = prefix_clitic_to_form(base, clitic, " ", form.form)
end
end
end
end
end
end
local function handle_infinitive_linked(base)
-- Compute linked versions of potential lemma slots, for use in {{pt-verb}}.
-- We substitute the original lemma (before removing links) for forms that
-- are the same as the lemma, if the original lemma has links.
for _, slot in ipairs({"infinitive"}) do
insert_forms(base, slot .. "_linked", iut.map_forms(base.forms[slot], function(form)
if form == base.lemma and rfind(base.linked_lemma, "%[%[") then
return base.linked_lemma
else
return form
end
end))
end
end
local function generate_negative_imperatives(base)
-- Copy subjunctives to negative imperatives, preceded by "não".
for _, persnum in ipairs(neg_imp_person_number_list) do
local from = "pres_sub_" .. persnum
local to = "neg_imp_" .. persnum
insert_forms(base, to, iut.map_forms(base.forms[from], function(form)
if base.alternant_multiword_spec.args.noautolinkverb then
return "não " .. form
elseif form:find("%[%[") then
-- already linked, e.g. when reflexive
return "[[não]] " .. form
else
return "[[não]] [[" .. form .. "]]"
end
end))
end
end
-- Process specs given by the user using 'addnote[SLOTSPEC][FOOTNOTE][FOOTNOTE][...]'.
local function process_addnote_specs(base)
for _, spec in ipairs(base.addnote_specs) do
for _, slot_spec in ipairs(spec.slot_specs) do
slot_spec = "^" .. slot_spec .. "$"
for slot, forms in pairs(base.forms) do
if rfind(slot, slot_spec) then
-- To save on memory, side-effect the existing forms.
for _, form in ipairs(forms) do
form.footnotes = iut.combine_footnotes(form.footnotes, spec.footnotes)
end
end
end
end
end
end
local function add_missing_links_to_forms(base)
-- Any forms without links should get them now. Redundant ones will be stripped later.
for slot, forms in pairs(base.forms) do
for _, form in ipairs(forms) do
if not form.form:find("%[%[") then
form.form = "[[" .. form.form .. "]]"
end
end
end
end
-- Remove special characters added to future and conditional forms to indicate mesoclitic insertion points.
local function remove_mesoclitic_insertion_points(base)
for slot, forms in pairs(base.forms) do
if slot:find("^fut_") or slot:find("^cond_") then
for _, form in ipairs(forms) do
form.form = form.form:gsub(TEMP_MESOCLITIC_INSERTION_POINT, "")
end
end
end
end
-- If called from {{pt-verb}}, remove superseded forms; otherwise add a footnote indicating they are superseded.
local function process_superseded_forms(base)
if base.alternant_multiword_spec.source_template == "pt-verb" then
for slot, forms in pairs(base.forms) do
-- As an optimization, check if there are any superseded forms and don't do anything if not.
local saw_superseded = false
for _, form in ipairs(forms) do
if form.form:find(VAR_SUPERSEDED) then
saw_superseded = true
break
end
end
if saw_superseded then
base.forms[slot] = iut.flatmap_forms(base.forms[slot], function(form)
if form:find(VAR_SUPERSEDED) then
return {}
else
return {form}
end
end)
end
end
else
for slot, forms in pairs(base.forms) do
for _, form in ipairs(forms) do
if form.form:find(VAR_SUPERSEDED) then
form.footnotes = iut.combine_footnotes(form.footnotes, {"[superseded]"})
end
end
end
end
end
local function conjugate_verb(base)
for _, vowel_alt in ipairs(base.vowel_alt_stems) do
construct_stems(base, vowel_alt)
add_present_indic(base)
add_present_subj(base)
end
add_finite_non_present(base)
add_non_finite_forms(base)
-- do non-reflexive non-imperative slot overrides
process_slot_overrides(base, function(slot)
return not slot:find("^imp_") and not slot:find("^neg_imp_")
end)
-- This should happen after process_slot_overrides() in case a derived slot is based on an override
-- (as with the imp_3s of [[dar]], [[estar]]).
copy_forms_to_imperatives(base)
-- do non-reflexive positive imperative slot overrides
process_slot_overrides(base, function(slot)
return slot:find("^imp_")
end)
-- We need to add joined reflexives, then joined and non-joined clitics, then non-joined reflexives, so we get
-- [[esbalda-te]] but [[não]] [[te]] [[esbalde]].
if base.refl then
-- This should happen after remove_monosyllabic_accents() so the * marking the preservation of monosyllabic
-- accents doesn't end up in the middle of a word.
add_reflexive_or_fixed_clitic_to_forms(base, "do reflexive", "do joined")
process_slot_overrides(base, nil, "do reflexive") -- do reflexive-only slot overrides
add_reflexive_or_fixed_clitic_to_forms(base, "do reflexive", false)
end
-- This should happen after add_reflexive_or_fixed_clitic_to_forms() so negative imperatives get the reflexive pronoun
-- and clitic in them.
generate_negative_imperatives(base)
-- do non-reflexive negative imperative slot overrides
-- FIXME: What about reflexive negative imperatives?
process_slot_overrides(base, function(slot)
return slot:find("^neg_imp_")
end)
-- This should happen before add_missing_links_to_forms() so that the comparison `form == base.lemma`
-- in handle_infinitive_linked() works correctly and compares unlinked forms to unlinked forms.
handle_infinitive_linked(base)
process_addnote_specs(base)
if not base.alternant_multiword_spec.args.noautolinkverb then
add_missing_links_to_forms(base)
end
remove_mesoclitic_insertion_points(base)
process_superseded_forms(base)
end
local function parse_indicator_spec(angle_bracket_spec)
-- Store the original angle bracket spec so we can reconstruct the overall conj spec with the lemma(s) in them.
local base = {
angle_bracket_spec = angle_bracket_spec,
user_basic_overrides = {},
user_stems = {},
addnote_specs = {},
}
local function parse_err(msg)
error(msg .. ": " .. angle_bracket_spec)
end
local function fetch_footnotes(separated_group)
local footnotes
for j = 2, #separated_group - 1, 2 do
if separated_group[j + 1] ~= "" then
parse_err("Extraneous text after bracketed footnotes: '" .. table.concat(separated_group) .. "'")
end
if not footnotes then
footnotes = {}
end
table.insert(footnotes, separated_group[j])
end
return footnotes
end
local inside = angle_bracket_spec:match("^<(.*)>$")
assert(inside)
if inside == "" then
return base
end
local segments = put.parse_balanced_segment_run(inside, "[", "]")
local dot_separated_groups = put.split_alternating_runs(segments, "%.")
for i, dot_separated_group in ipairs(dot_separated_groups) do
local first_element = dot_separated_group[1]
if first_element == "addnote" then
local spec_and_footnotes = fetch_footnotes(dot_separated_group)
if #spec_and_footnotes < 2 then
parse_err("Spec with 'addnote' should be of the form 'addnote[SLOTSPEC][FOOTNOTE][FOOTNOTE][...]'")
end
local slot_spec = table.remove(spec_and_footnotes, 1)
local slot_spec_inside = rmatch(slot_spec, "^%[(.*)%]$")
if not slot_spec_inside then
parse_err("Internal error: slot_spec " .. slot_spec .. " should be surrounded with brackets")
end
local slot_specs = rsplit(slot_spec_inside, ",")
-- FIXME: Here, [[Module:it-verb]] called strip_spaces(). Generally we don't do this. Should we?
table.insert(base.addnote_specs, {slot_specs = slot_specs, footnotes = spec_and_footnotes})
elseif indicator_flags[first_element] then
if #dot_separated_group > 1 then
parse_err("No footnotes allowed with '" .. first_element .. "' spec")
end
if base[first_element] then
parse_err("Spec '" .. first_element .. "' specified twice")
end
base[first_element] = true
elseif rfind(first_element, ":") then
local colon_separated_groups = put.split_alternating_runs(dot_separated_group, "%s*:%s*")
local first_element = colon_separated_groups[1][1]
if #colon_separated_groups[1] > 1 then
parse_err("Can't attach footnotes directly to '" .. first_element .. "' spec; attach them to the " ..
"colon-separated values following the initial colon")
end
if overridable_stems[first_element] then
if base.user_stems[first_element] then
parse_err("Overridable stem '" .. first_element .. "' specified twice")
end
table.remove(colon_separated_groups, 1)
base.user_stems[first_element] = overridable_stems[first_element](colon_separated_groups,
{prefix = first_element, base = base, parse_err = parse_err, fetch_footnotes = fetch_footnotes})
else -- assume a basic override; we validate further later when the possible slots are available
if base.user_basic_overrides[first_element] then
parse_err("Basic override '" .. first_element .. "' specified twice")
end
table.remove(colon_separated_groups, 1)
base.user_basic_overrides[first_element] = allow_multiple_values(colon_separated_groups,
{prefix = first_element, base = base, parse_err = parse_err, fetch_footnotes = fetch_footnotes})
end
else
local comma_separated_groups = put.split_alternating_runs(dot_separated_group, "%s*,%s*")
for j = 1, #comma_separated_groups do
local alt = comma_separated_groups[j][1]
if not vowel_alternants[alt] then
if #comma_separated_groups == 1 then
parse_err("Unrecognized spec or vowel alternant '" .. alt .. "'")
else
parse_err("Unrecognized vowel alternant '" .. alt .. "'")
end
end
if base.vowel_alt then
for _, existing_alt in ipairs(base.vowel_alt) do
if existing_alt.form == alt then
parse_err("Vowel alternant '" .. alt .. "' specified twice")
end
end
else
base.vowel_alt = {}
end
table.insert(base.vowel_alt, {form = alt, footnotes = fetch_footnotes(comma_separated_groups[j])})
end
end
end
return base
end
-- Normalize all lemmas, substituting the pagename for blank lemmas and adding links to multiword lemmas.
local function normalize_all_lemmas(alternant_multiword_spec, head)
-- (1) Add links to all before and after text. Remember the original text so we can reconstruct the verb spec later.
if not alternant_multiword_spec.args.noautolinktext then
iut.add_links_to_before_and_after_text(alternant_multiword_spec, "remember original")
end
-- (2) Remove any links from the lemma, but remember the original form
-- so we can use it below in the 'lemma_linked' form.
iut.map_word_specs(alternant_multiword_spec, function(base)
if base.lemma == "" then
base.lemma = head
end
base.user_specified_lemma = base.lemma
base.lemma = m_links.remove_links(base.lemma)
local refl_verb = base.lemma
local verb, refl = rmatch(refl_verb, "^(.-)%-(se)$")
if not verb then
verb, refl = refl_verb, nil
end
base.user_specified_verb = verb
base.refl = refl
base.verb = base.user_specified_verb
local linked_lemma
if alternant_multiword_spec.args.noautolinkverb or base.user_specified_lemma:find("%[%[") then
linked_lemma = base.user_specified_lemma
elseif base.refl then
-- Reconstruct the linked lemma with separate links around base verb and reflexive pronoun.
linked_lemma = base.user_specified_verb == base.verb and "[[" .. base.user_specified_verb .. "]]" or
"[[" .. base.verb .. "|" .. base.user_specified_verb .. "]]"
linked_lemma = linked_lemma .. (refl and "-[[" .. refl .. "]]" or "")
else
-- Add links to the lemma so the user doesn't specifically need to, since we preserve
-- links in multiword lemmas and include links in non-lemma forms rather than allowing
-- the entire form to be a link.
linked_lemma = iut.add_links(base.user_specified_lemma)
end
base.linked_lemma = linked_lemma
end)
end
local function detect_indicator_spec(base)
if (base.only3s and 1 or 0) + (base.only3sp and 1 or 0) + (base.only3p and 1 or 0) > 1 then
error("Only one of 'only3s', 'only3sp' and 'only3p' can be specified")
end
base.forms = {}
base.stems = {}
base.basic_overrides = {}
base.basic_reflexive_only_overrides = {}
if not base.no_built_in then
for _, built_in_conj in ipairs(built_in_conjugations) do
if type(built_in_conj.match) == "function" then
base.prefix, base.non_prefixed_verb = built_in_conj.match(base.verb)
elseif built_in_conj.match:find("^%^") and rsub(built_in_conj.match, "^%^", "") == base.verb then
-- begins with ^, for exact match, and matches
base.prefix, base.non_prefixed_verb = "", base.verb
else
base.prefix, base.non_prefixed_verb = rmatch(base.verb, "^(.*)(" .. built_in_conj.match .. ")$")
end
if base.prefix then
-- we found a built-in verb
for stem, forms in pairs(built_in_conj.forms) do
if type(forms) == "function" then
forms = forms(base, base.prefix)
end
if stem:find("^refl_") then
stem = stem:gsub("^refl_", "")
if not base.alternant_multiword_spec.verb_slots_basic_map[stem] then
error("Internal error: setting for 'refl_" .. stem .. "' does not refer to a basic verb slot")
end
base.basic_reflexive_only_overrides[stem] = forms
elseif base.alternant_multiword_spec.verb_slots_basic_map[stem] then
-- an individual form override of a basic form
base.basic_overrides[stem] = forms
else
base.stems[stem] = forms
end
end
break
end
end
end
-- Override built-in-verb stems and overrides with user-specified ones.
for stem, values in pairs(base.user_stems) do
base.stems[stem] = values
end
for override, values in pairs(base.user_basic_overrides) do
if not base.alternant_multiword_spec.verb_slots_basic_map[override] then
error("Unrecognized override '" .. override .. "': " .. base.angle_bracket_spec)
end
base.basic_overrides[override] = values
end
base.prefix = base.prefix or ""
base.non_prefixed_verb = base.non_prefixed_verb or base.verb
local inf_stem, suffix = rmatch(base.non_prefixed_verb, "^(.*)([aeioô]r)$")
if not inf_stem then
error("Unrecognized infinitive: " .. base.verb)
end
base.inf_stem = inf_stem
suffix = suffix == "ôr" and "or" or suffix
base.conj = suffix
base.conj_vowel = suffix == "ar" and "á" or suffix == "ir" and "í" or "ê"
base.frontback = suffix == "ar" and "back" or "front"
if base.stems.vowel_alt then -- built-in verb with specified vowel alternation
if base.vowel_alt then
error(base.verb .. " is a recognized built-in verb, and should not have vowel alternations specified with it")
end
base.vowel_alt = iut.convert_to_general_list_form(base.stems.vowel_alt)
end
-- Propagate built-in-verb indicator flags to `base` and combine with user-specified flags.
for indicator_flag, _ in pairs(indicator_flags) do
base[indicator_flag] = base[indicator_flag] or base.stems[indicator_flag]
end
-- Convert vowel alternation indicators into stems.
local vowel_alt = base.vowel_alt or {{form = "+"}}
base.vowel_alt_stems = apply_vowel_alternations(base.inf_stem, vowel_alt)
for _, vowel_alt_stems in ipairs(base.vowel_alt_stems) do
if vowel_alt_stems.err then
error("To use '" .. vowel_alt_stems.altobj.form .. "', present stem '" .. base.prefix .. base.inf_stem .. "' " ..
vowel_alt_stems.err)
end
end
end
local function detect_all_indicator_specs(alternant_multiword_spec)
-- Propagate some settings up; some are used internally, others by [[Module:pt-headword]].
iut.map_word_specs(alternant_multiword_spec, function(base)
-- Internal indicator flags. Do these before calling detect_indicator_spec() because add_slots() uses them.
for _, prop in ipairs { "refl", "clitic" } do
if base[prop] then
alternant_multiword_spec[prop] = true
end
end
base.alternant_multiword_spec = alternant_multiword_spec
end)
add_slots(alternant_multiword_spec)
alternant_multiword_spec.vowel_alt = {}
iut.map_word_specs(alternant_multiword_spec, function(base)
detect_indicator_spec(base)
-- User-specified indicator flags. Do these after calling detect_indicator_spec() because the latter may set these
-- indicators for built-in verbs.
for prop, _ in pairs(indicator_flags) do
if base[prop] then
alternant_multiword_spec[prop] = true
end
end
-- Vowel alternants. Do these after calling detect_indicator_spec() because the latter sets base.vowel_alt for
-- built-in verbs.
if base.vowel_alt then
for _, altobj in ipairs(base.vowel_alt) do
m_table.insertIfNot(alternant_multiword_spec.vowel_alt, altobj.form)
end
end
end)
end
local function add_categories_and_annotation(alternant_multiword_spec, base, multiword_lemma)
local function insert_ann(anntype, value)
m_table.insertIfNot(alternant_multiword_spec.annotation[anntype], value)
end
local function insert_cat(cat, also_when_multiword)
-- Don't place multiword terms in categories like 'Portuguese verbs ending in -ar' to avoid spamming the
-- categories with such terms.
if also_when_multiword or not multiword_lemma then
m_table.insertIfNot(alternant_multiword_spec.categories, cat .. "ภาษาโปรตุเกส")
end
end
if check_for_red_links and alternant_multiword_spec.source_template == "pt-conj" and multiword_lemma then
for _, slot_and_accel in ipairs(alternant_multiword_spec.all_verb_slots) do
local slot = slot_and_accel[1]
local forms = base.forms[slot]
local must_break = false
if forms then
for _, form in ipairs(forms) do
if not form.form:find("%[%[") then
local title = mw.title.new(form.form)
if title and not title.exists then
insert_cat("verbs with red links in their inflection tables")
must_break = true
break
end
end
end
end
if must_break then
break
end
end
end
--insert_cat("คำกริยาที่ลงท้ายด้วย -" .. base.conj)
m_table.insertIfNot(alternant_multiword_spec.categories, "คำกริยาภาษาโปรตุเกสที่ลงท้ายด้วย -" .. base.conj)
if base.irreg then
insert_ann("irreg", "ไม่ปรกติ")
insert_cat("คำกริยาไม่ปรกติ")
else
insert_ann("irreg", "ปรกติ")
end
if base.only3s then
insert_ann("defective", "อบุรุษ")
insert_cat("คำอบุรุษกริยา")
elseif base.only3sp then
insert_ann("defective", "บุรุษที่สามเท่านั้น")
insert_cat("คำกริยาบุรุษที่สามเท่านั้น")
elseif base.only3p then
insert_ann("defective", "บุรุษที่สามพหูพจน์เท่านั้น")
insert_cat("คำกริยาบุรุษที่สามพหูพจน์เท่านั้น")
elseif base.no_pres_stressed or base.no_pres1_and_sub then
insert_ann("defective", "บกพร่อง")
insert_cat("คำกริยาบกพร่อง")
else
insert_ann("defective", "บุรุษปรกติ")
end
if base.stems.short_pp then
insert_ann("short_pp", "p.p.สั้นไม่ปรกติ")
insert_cat("verbs with irregular short past participle")
else
insert_ann("short_pp", "p.p.ปรกติ")
end
if base.clitic then
insert_cat("verbs with lexical clitics")
end
if base.refl then
insert_cat("คำกริยาสะท้อน")
end
if base.e_ei_cat then
insert_ann("vowel_alt", "''e'' กลายเป็น ''ei'' เมื่อเน้น")
--insert_cat("คำกริยาที่ e กลายเป็น ei เมื่อเน้น")
m_table.insertIfNot(alternant_multiword_spec.categories, "คำกริยาภาษาโปรตุเกสที่ e กลายเป็น ei เมื่อเน้น")
elseif not base.vowel_alt then
insert_ann("vowel_alt", "ไม่เปลี่ยนแปรสระ")
else
for _, alt in ipairs(base.vowel_alt) do
if alt.form == "+" then
insert_ann("vowel_alt", "ไม่เปลี่ยนแปรสระ")
else
insert_ann("vowel_alt", vowel_alternant_to_desc[alt.form])
--insert_cat("คำกริยาที่" .. vowel_alternant_to_cat[alt.form])
m_table.insertIfNot(alternant_multiword_spec.categories, "คำกริยาภาษาโปรตุเกสที่" .. vowel_alternant_to_cat[alt.form])
end
end
end
local cons_alt = base.stems.cons_alt
if cons_alt == nil then
if base.conj == "ar" then
if base.inf_stem:find("ç$") then
cons_alt = "c-ç"
elseif base.inf_stem:find("c$") then
cons_alt = "c-qu"
elseif base.inf_stem:find("g$") then
cons_alt = "g-gu"
end
else
if base.no_pres_stressed or base.no_pres1_and_sub then
cons_alt = nil -- no e.g. c-ç alternation in this case
elseif base.inf_stem:find("c$") then
cons_alt = "c-ç"
elseif base.inf_stem:find("qu$") then
cons_alt = "c-qu"
elseif base.inf_stem:find("g$") then
cons_alt = "g-j"
elseif base.inf_stem:find("gu$") then
cons_alt = "g-gu"
end
end
end
if cons_alt then
local desc = "เปลี่ยนแปร " .. cons_alt
insert_ann("cons_alt", desc)
--insert_cat("คำกริยาที่" .. desc)
m_table.insertIfNot(alternant_multiword_spec.categories, "คำกริยาภาษาโปรตุเกสที่" .. desc)
else
insert_ann("cons_alt", "ไม่เปลี่ยนแปรพยัญชนะ")
end
end
-- Compute the categories to add the verb to, as well as the annotation to display in the
-- conjugation title bar. We combine the code to do these functions as both categories and
-- title bar contain similar information.
local function compute_categories_and_annotation(alternant_multiword_spec)
alternant_multiword_spec.categories = {}
local ann = {}
alternant_multiword_spec.annotation = ann
ann.irreg = {}
ann.short_pp = {}
ann.defective = {}
ann.vowel_alt = {}
ann.cons_alt = {}
local multiword_lemma = false
for _, form in ipairs(alternant_multiword_spec.forms.infinitive) do
if form.form:find(" ") then
multiword_lemma = true
break
end
end
iut.map_word_specs(alternant_multiword_spec, function(base)
add_categories_and_annotation(alternant_multiword_spec, base, multiword_lemma)
end)
local ann_parts = {}
local irreg = table.concat(ann.irreg, " or ")
if irreg ~= "" and irreg ~= "regular" then
table.insert(ann_parts, irreg)
end
local short_pp = table.concat(ann.short_pp, " or ")
if short_pp ~= "" and short_pp ~= "regular" then
table.insert(ann_parts, short_pp)
end
local defective = table.concat(ann.defective, " or ")
if defective ~= "" and defective ~= "regular" then
table.insert(ann_parts, defective)
end
local vowel_alt = table.concat(ann.vowel_alt, " or ")
if vowel_alt ~= "" and vowel_alt ~= "non-alternating" then
table.insert(ann_parts, vowel_alt)
end
local cons_alt = table.concat(ann.cons_alt, " or ")
if cons_alt ~= "" and cons_alt ~= "non-alternating" then
table.insert(ann_parts, cons_alt)
end
alternant_multiword_spec.annotation = table.concat(ann_parts, "; ")
end
local function show_forms(alternant_multiword_spec)
local lemmas = alternant_multiword_spec.forms.infinitive
alternant_multiword_spec.lemmas = lemmas -- save for later use in make_table()
if alternant_multiword_spec.forms.short_pp_ms then
alternant_multiword_spec.has_short_pp = true
end
local reconstructed_verb_spec = iut.reconstruct_original_spec(alternant_multiword_spec)
local function transform_accel_obj(slot, formobj, accel_obj)
-- No accelerators for negative imperatives, which are always multiword and derived directly from the
-- present subjunctive.
if slot:find("^neg_imp") then
return nil
end
if accel_obj then
if slot:find("^pp_") then
accel_obj.form = slot
elseif slot == "gerund" then
accel_obj.form = "gerund-" .. reconstructed_verb_spec
else
accel_obj.form = "verb-form-" .. reconstructed_verb_spec
end
end
return accel_obj
end
-- Italicize superseded forms.
local function generate_link(data)
local formval_for_link = data.form.formval_for_link
if formval_for_link:find(VAR_SUPERSEDED) then
formval_for_link = formval_for_link:gsub(VAR_SUPERSEDED, "")
return m_links.full_link({lang = lang, term = formval_for_link, tr = "-", accel = data.form.accel_obj},
"term") .. iut.get_footnote_text(data.form.footnotes, data.footnote_obj)
end
end
local props = {
lang = lang,
lemmas = lemmas,
transform_accel_obj = transform_accel_obj,
canonicalize = function(form) return export.remove_variant_codes(form, "keep superseded") end,
generate_link = generate_link,
slot_list = alternant_multiword_spec.verb_slots_basic,
}
iut.show_forms(alternant_multiword_spec.forms, props)
alternant_multiword_spec.footnote_basic = alternant_multiword_spec.forms.footnote
end
local notes_template = [=[
<div class="roa-footnote-outer-div" style="width:100%;">
<div class="roa-footnote-inner-div">
{footnote}
</div></div>
]=]
local basic_table = [=[
{description}<div class="NavFrame">
<div class="NavHead" align="center"> การผันรูปของ {title} (ดูเพิ่ม [[ภาคผนวก:คำกริยาภาษาโปรตุเกส]])</div>
<div class="NavContent" align="left">
{\op}| class="roa-inflection-table" data-toggle-category="inflection"
|-
! class="roa-person-number-header" rowspan="2" |
! class="roa-person-number-header" colspan="3" | เอกพจน์
! class="roa-person-number-header" colspan="3" | พหูพจน์
|-
! class="roa-person-number-header" style="width:12.5%" | บุรุษที่หนึ่ง<br />(<<eu>>)
! class="roa-person-number-header" style="width:12.5%" | บุรุษที่สอง<br />(<<tu>>)
! class="roa-person-number-header" style="width:12.5%" | บุรุษที่สาม<br />(<<ele>> / <<ela>> / <<você>>)
! class="roa-person-number-header" style="width:12.5%" | บุรุษที่หนึ่ง<br />(<<nós>>)
! class="roa-person-number-header" style="width:12.5%" | บุรุษที่สอง<br />(<<vós>>)
! class="roa-person-number-header" style="width:12.5%" | บุรุษที่สาม<br />(<<eles>> / <<elas>> / <<vocês>>)
|-
! class="roa-nonfinite-header" colspan="7" | ''<span title="infinitivo">รูปกริยากลาง</span>''
|-
! class="roa-nonfinite-header" | '''<span title="infinitivo impessoal">คำอบุรุษกริยา</span>'''
| colspan="6" | {infinitive}
|-
! class="roa-nonfinite-header" | '''<span title="infinitivo pessoal">คำบุรุษกริยา</span>'''
| {pers_inf_1s}
| {pers_inf_2s}
| {pers_inf_3s}
| {pers_inf_1p}
| {pers_inf_2p}
| {pers_inf_3p}
|-
! class="roa-nonfinite-header" colspan="7" | ''<span title="gerúndio">รูปกริยาเป็นนาม</span>''
|-
| class="roa-nonfinite-header" |
| colspan="6" | {gerund}
|-{pp_clause}
! class="roa-indicative-left-rail" colspan="7" | ''<span title="indicativo">มาลาบอกเล่า</span>''
|-
! class="roa-indicative-left-rail" | <span title="presente">ปัจจุบันกาล</span>
| {pres_1s}
| {pres_2s}
| {pres_3s}
| {pres_1p}
| {pres_2p}
| {pres_3p}
|-
! class="roa-indicative-left-rail" | <span title="pretérito imperfeito">ไม่สมบูรณ์</span>
| {impf_1s}
| {impf_2s}
| {impf_3s}
| {impf_1p}
| {impf_2p}
| {impf_3p}
|-
! class="roa-indicative-left-rail" | <span title="pretérito perfeito">อดีตกาลสิ้นสุด (สมบูรณ์)</span>
| {pret_1s}
| {pret_2s}
| {pret_3s}
| {pret_1p}
| {pret_2p}
| {pret_3p}
|-
! class="roa-indicative-left-rail" | <span title="pretérito mais-que-perfeito simples">อภิสมบูรณ์</span>
| {plup_1s}
| {plup_2s}
| {plup_3s}
| {plup_1p}
| {plup_2p}
| {plup_3p}
|-
! class="roa-indicative-left-rail" | <span title="futuro do presente">อนาคตกาล</span>
| {fut_1s}
| {fut_2s}
| {fut_3s}
| {fut_1p}
| {fut_2p}
| {fut_3p}
|-
! class="roa-indicative-left-rail" | <span title="condicional / futuro do pretérito">มาลาเงื่อนไข</span>
| {cond_1s}
| {cond_2s}
| {cond_3s}
| {cond_1p}
| {cond_2p}
| {cond_3p}
|-
! class="roa-subjunctive-left-rail" colspan="7" | ''<span title="conjuntivo (pt) / subjuntivo (br)">มาลาสมมุติ</span>''
|-
! class="roa-subjunctive-left-rail" | <span title=" presente do conjuntivo (pt) / subjuntivo (br)">ปัจจุบันกาล</span>
| {pres_sub_1s}
| {pres_sub_2s}
| {pres_sub_3s}
| {pres_sub_1p}
| {pres_sub_2p}
| {pres_sub_3p}
|-
! class="roa-subjunctive-left-rail" | <span title="pretérito imperfeito do conjuntivo (pt) / subjuntivo (br)">ไม่สมบูรณ์</span>
| {impf_sub_1s}
| {impf_sub_2s}
| {impf_sub_3s}
| {impf_sub_1p}
| {impf_sub_2p}
| {impf_sub_3p}
|-
! class="roa-subjunctive-left-rail" | <span title="futuro do conjuntivo (pt) / subjuntivo (br)">อนาคตกาล</span>
| {fut_sub_1s}
| {fut_sub_2s}
| {fut_sub_3s}
| {fut_sub_1p}
| {fut_sub_2p}
| {fut_sub_3p}
|-
! class="roa-imperative-left-rail" colspan="7" | ''<span title="imperativo">มาลาสั่ง</span>''
|-
! class="roa-imperative-left-rail" | <span title="imperativo afirmativo">เชิงยืนยัน</span>
| rowspan="2" |
| {imp_2s}
| {imp_3s}
| {imp_1p}
| {imp_2p}
| {imp_3p}
|-
! class="roa-imperative-left-rail" | <span title="imperativo negativo">เชิงปฏิเสธ</span> (<<não>>)
| {neg_imp_2s}
| {neg_imp_3s}
| {neg_imp_1p}
| {neg_imp_2p}
| {neg_imp_3p}
|{\cl}{notes_clause}</div></div>]=]
local double_pp_template = [=[
! class="roa-nonfinite-header" colspan="7" | ''<span title="particípio irregular">รูปกริยาขยายอดีตกาลสั้น</span>''
|-
! class="roa-nonfinite-header" | เพศชาย
| colspan="3" | {short_pp_ms}
| colspan="3" | {short_pp_mp}
|-
! class="roa-nonfinite-header" | เพศหญิง
| colspan="3" | {short_pp_fs}
| colspan="3" | {short_pp_fp}
|-
! class="roa-nonfinite-header" colspan="7" | ''<span title="particípio regular">รูปกริยาขยายอดีตกาลยาว</span>''
|-
! class="roa-nonfinite-header" | เพศชาย
| colspan="3" | {pp_ms}
| colspan="3" | {pp_mp}
|-
! class="roa-nonfinite-header" | เพศหญิง
| colspan="3" | {pp_fs}
| colspan="3" | {pp_fp}
|-]=]
local single_pp_template = [=[
! class="roa-nonfinite-header" colspan="7" | ''<span title="particípio passado">รูปกริยาขยายอดีตกาล</span>''
|-
! class="roa-nonfinite-header" | เพศชาย
| colspan="3" | {pp_ms}
| colspan="3" | {pp_mp}
|-
! class="roa-nonfinite-header" | เพศหญิง
| colspan="3" | {pp_fs}
| colspan="3" | {pp_fp}
|-]=]
local function make_table(alternant_multiword_spec)
local forms = alternant_multiword_spec.forms
forms.title = link_term(alternant_multiword_spec.lemmas[1].form)
if alternant_multiword_spec.annotation ~= "" then
forms.title = forms.title .. " (" .. alternant_multiword_spec.annotation .. ")"
end
forms.description = ""
-- Format the table.
forms.footnote = alternant_multiword_spec.footnote_basic
forms.notes_clause = forms.footnote ~= "" and format(notes_template, forms) or ""
-- has_short_pp is computed in show_forms().
local pp_template = alternant_multiword_spec.has_short_pp and double_pp_template or single_pp_template
forms.pp_clause = format(pp_template, forms)
local table_with_pronouns = rsub(basic_table, "<<(.-)>>", link_term)
return require("Module:TemplateStyles")("Module:roa-verb/style.css") .. format(table_with_pronouns, forms)
end
-- Externally callable function to parse and conjugate a verb given user-specified arguments.
-- Return value is WORD_SPEC, an object where the conjugated forms are in `WORD_SPEC.forms`
-- for each slot. If there are no values for a slot, the slot key will be missing. The value
-- for a given slot is a list of objects {form=FORM, footnotes=FOOTNOTES}.
function export.do_generate_forms(args, source_template, headword_head)
local PAGENAME = mw.loadData("Module:headword/data").pagename
local function in_template_space()
return mw.title.getCurrentTitle().nsText == "แม่แบบ"
end
-- Determine the verb spec we're being asked to generate the conjugation of. This may be taken from the
-- current page title or the value of |pagename=; but not when called from {{pt-verb form of}}, where the
-- page title is a non-lemma form. Note that the verb spec may omit the infinitive; e.g. it may be "<i-e>".
-- For this reason, we use the value of `pagename` computed here down below, when calling normalize_all_lemmas().
local pagename = source_template ~= "pt-verb form of" and args.pagename or PAGENAME
local head = headword_head or pagename
local arg1 = args[1]
if not arg1 then
if (pagename == "pt-conj" or pagename == "pt-verb") and in_template_space() then
arg1 = "cergir<i-e,i>"
elseif pagename == "pt-verb form of" and in_template_space() then
arg1 = "amar"
else
arg1 = "<>"
end
end
-- When called from {{pt-verb form of}}, determine the non-lemma form whose inflections we're being asked to
-- determine. This normally comes from the page title or the value of |pagename=.
local verb_form_of_form
if source_template == "pt-verb form of" then
verb_form_of_form = args.pagename
if not verb_form_of_form then
if PAGENAME == "pt-verb form of" and in_template_space() then
verb_form_of_form = "ame"
else
verb_form_of_form = PAGENAME
end
end
end
local incorporated_headword_head_into_lemma = false
if arg1:find("^<.*>$") then -- missing lemma
if head:find(" ") then
-- If multiword lemma, try to add arg spec after the first word.
-- Try to preserve the brackets in the part after the verb, but don't do it
-- if there aren't the same number of left and right brackets in the verb
-- (which means the verb was linked as part of a larger expression).
local refl_clitic_verb, post = rmatch(head, "^(.-)( .*)$")
local left_brackets = rsub(refl_clitic_verb, "[^%[]", "")
local right_brackets = rsub(refl_clitic_verb, "[^%]]", "")
if #left_brackets == #right_brackets then
arg1 = iut.remove_redundant_links(refl_clitic_verb) .. arg1 .. post
incorporated_headword_head_into_lemma = true
else
-- Try again using the form without links.
local linkless_head = m_links.remove_links(head)
if linkless_head:find(" ") then
refl_clitic_verb, post = rmatch(linkless_head, "^(.-)( .*)$")
arg1 = refl_clitic_verb .. arg1 .. post
else
error("Unable to incorporate <...> spec into explicit head due to a multiword linked verb or " ..
"unbalanced brackets; please include <> explicitly: " .. arg1)
end
end
else
-- Will be incorporated through `head` below in the call to normalize_all_lemmas().
incorporated_headword_head_into_lemma = true
end
end
local function split_bracketed_runs_into_words(bracketed_runs)
return put.split_alternating_runs(bracketed_runs, " ", "preserve splitchar")
end
local parse_props = {
parse_indicator_spec = parse_indicator_spec,
-- Split words only on spaces, not on hyphens, because that messes up reflexive verb parsing.
split_bracketed_runs_into_words = split_bracketed_runs_into_words,
allow_default_indicator = true,
allow_blank_lemma = true,
}
local alternant_multiword_spec = iut.parse_inflected_text(arg1, parse_props)
alternant_multiword_spec.pos = pos or "verbs"
alternant_multiword_spec.args = args
alternant_multiword_spec.source_template = source_template
alternant_multiword_spec.verb_form_of_form = verb_form_of_form
alternant_multiword_spec.incorporated_headword_head_into_lemma = incorporated_headword_head_into_lemma
normalize_all_lemmas(alternant_multiword_spec, head)
detect_all_indicator_specs(alternant_multiword_spec)
local inflect_props = {
slot_list = alternant_multiword_spec.all_verb_slots,
inflect_word_spec = conjugate_verb,
get_variants = function(form) return rsub(form, not_var_code_c, "") end,
-- We add links around the generated verbal forms rather than allow the entire multiword
-- expression to be a link, so ensure that user-specified links get included as well.
include_user_specified_links = true,
}
iut.inflect_multiword_or_alternant_multiword_spec(alternant_multiword_spec, inflect_props)
-- Remove redundant brackets around entire forms.
for slot, forms in pairs(alternant_multiword_spec.forms) do
for _, form in ipairs(forms) do
form.form = iut.remove_redundant_links(form.form)
end
end
compute_categories_and_annotation(alternant_multiword_spec)
if args.json and source_template == "pt-conj" then
-- Remove variant codes to avoid causing problems with bots.
for slot, forms in pairs(alternant_multiword_spec.forms) do
for _, form in ipairs(forms) do
form.form = export.remove_variant_codes(form.form)
end
end
return require("Module:JSON").toJSON(alternant_multiword_spec.forms)
end
return alternant_multiword_spec
end
-- Entry point for {{pt-conj}}. Template-callable function to parse and conjugate a verb given
-- user-specified arguments and generate a displayable table of the conjugated forms.
function export.show(frame)
local parent_args = frame:getParent().args
local params = {
[1] = {},
["noautolinktext"] = {type = "boolean"},
["noautolinkverb"] = {type = "boolean"},
["pagename"] = {}, -- for testing/documentation pages
["json"] = {type = "boolean"}, -- for bot use
}
local args = require("Module:parameters").process(parent_args, params)
local alternant_multiword_spec = export.do_generate_forms(args, "pt-conj")
if type(alternant_multiword_spec) == "string" then
-- JSON return value
return alternant_multiword_spec
end
show_forms(alternant_multiword_spec)
return make_table(alternant_multiword_spec) ..
require("Module:utilities").format_categories(alternant_multiword_spec.categories, lang, nil, nil, force_cat)
end
return export
16aunb09lpiim5qt5ci3qjdf7ycldls
ເຕົ່າທອງ
0
327924
5729409
1760578
2026-07-20T08:09:22Z
Alifshinobi
397
/* คำนาม */
5729409
wikitext
text/x-wiki
== ภาษาลาว ==
=== รากศัพท์ ===
{{com|lo|ເຕົ່າ|ທອງ|t1=เต่า|t2=ทอง}}
=== การออกเสียง ===
{{lo-pron|ເຕົ່າ-ທອງ}}
=== คำนาม ===
{{lo-noun|ໂຕ}}
# {{lang|lo|([[ແມງ]]~)}} [[แมลง]][[เต่าทอง]]
=== อ้างอิง ===
{{รายการอ้างอิง}}
* ''SEAlang library Lao lexicography''. SEAlang Projects. http://sealang.net/lao/dictionary.htm
{{topics|lo|แมลง}}
3br0078oroqsbdpasl6ygc54khplzvv
แม่แบบ:ast-verb-ir
10
332252
5729444
1767334
2026-07-20T09:42:13Z
Octahedron80
267
5729444
wikitext
text/x-wiki
{{head|ast|คำกริยา|head={{{head|}}}<!--
-->|บุรุษที่หนึ่งเอกพจน์ปัจจุบันกาลมาลาบอกเล่า<!--
-->|{{{first singular|{{{stem|{{{2|{{{1|}}}}}}}}}o}}}<!--
-->|รูปกริยาขยายอดีตกาล<!--
-->|{{{participle|{{{stem|{{{1|}}}}}}íu}}}<!--
-->}}<noinclude>{{documentation}}</noinclude>
7fn9w7aaat7njoq0no9eb2cc3rwmeif
แม่แบบ:ast-conj-table
10
332254
5729350
1767339
2026-07-20T07:27:28Z
Octahedron80
267
5729350
wikitext
text/x-wiki
{{#invoke:checkparams|error}}<!-- Validate template parameters
--><templatestyles src="Module:roa-verb/style.css" /><div class="NavFrame">
<div class="NavHead" style="text-align: left">การผันรูปของ <i lang="ast">{{pagename}}</i></div>
<div class="NavContent">
{| class="roa-inflection-table" data-toggle-category="inflection"
|-
! colspan="2" class="roa-nonfinite-header" | รูปกริยากลาง
| colspan="6" style="text-align:center" | {{{infinitive}}}
|-
! colspan="2" class="roa-nonfinite-header" | รูปกริยาเป็นนาม
| colspan="6" style="text-align:center" | {{l|ast|{{{gerundive}}}}}
|-
! colspan="2" class="roa-nonfinite-header" | รูปกริยาขยาย
| colspan="6" style="text-align:center" | {{{part|{{g|m}} {{l|ast|{{{part_m}}}}}, {{g|f}} {{l|ast|{{{part_f}}}}}, {{g|n}} {{l|ast|{{{part_n}}}}}, {{g|m-p}} {{l|ast|{{{part_m-p}}}}}, {{g|f-p}} {{l|ast|{{{part_f-p}}}}}}}}
|- class="roa-person-number-header"
! colspan="2" | บุรุษ
! style="width:12.5%" | บุรุษที่หนึ่งเอกพจน์<br/>yo
! style="width:12.5%" | บุรุษที่สองเอกพจน์<br/>tu
! style="width:12.5%" | บุรุษที่สามเอกพจน์<br/>él/elli
! style="width:12.5%" | บุรุษที่หนึ่งพหูพจน์<br/>nosotros/nós
! style="width:12.5%" | บุรุษที่สองพหูพจน์<br/>vosotros/vós
! style="width:12.5%" | บุรุษที่สามพหูพจน์<br/>ellos
|-
! class="roa-indicative-left-rail" rowspan="6" | มาลาบอกเล่า
! class="roa-indicative-left-rail" style="height:3em;" | ปัจจุบันกาล
| {{l|ast|{{{pres_ind_1sg}}}}}
| {{l|ast|{{{pres_ind_2sg}}}}}
| {{l|ast|{{{pres_ind_3sg}}}}}
| {{l|ast|{{{pres_ind_1pl}}}}}
| {{l|ast|{{{pres_ind_2pl}}}}}
| {{l|ast|{{{pres_ind_3pl}}}}}
|-
! class="roa-indicative-left-rail" style="height:3em;" | ไม่สมบูรณ์
| {{l|ast|{{{impf_ind_1sg}}}}}
| {{l|ast|{{{impf_ind_2sg}}}}}
| {{l|ast|{{{impf_ind_3sg}}}}}
| {{l|ast|{{{impf_ind_1pl}}}}}
| {{l|ast|{{{impf_ind_2pl}}}}}
| {{l|ast|{{{impf_ind_3pl}}}}}
|-
! class="roa-indicative-left-rail" style="height:3em;" | อดีตกาลสิ้นสุด (สมบูรณ์)
| {{l|ast|{{{pret_ind_1sg}}}}}
| {{l|ast|{{{pret_ind_2sg}}}}}
| {{l|ast|{{{pret_ind_3sg}}}}}
| {{l|ast|{{{pret_ind_1pl}}}}}
| {{l|ast|{{{pret_ind_2pl}}}}}
| {{l|ast|{{{pret_ind_3pl}}}}}
|-
! class="roa-indicative-left-rail" style="height:3em;" | อภิสมบูรณ์
| {{l|ast|{{{plup_ind_1sg}}}}}
| {{l|ast|{{{plup_ind_2sg}}}}}
| {{l|ast|{{{plup_ind_3sg}}}}}
| {{l|ast|{{{plup_ind_1pl}}}}}
| {{l|ast|{{{plup_ind_2pl}}}}}
| {{l|ast|{{{plup_ind_3pl}}}}}
|-
! class="roa-indicative-left-rail" style="height:3em;" | อนาคตกาล
| {{l|ast|{{{futr_ind_1sg}}}}}
| {{l|ast|{{{futr_ind_2sg}}}}}
| {{l|ast|{{{futr_ind_3sg}}}}}
| {{l|ast|{{{futr_ind_1pl}}}}}
| {{l|ast|{{{futr_ind_2pl}}}}}
| {{l|ast|{{{futr_ind_3pl}}}}}
|-
! class="roa-indicative-left-rail" style="height:3em;" | มาลาเงื่อนไข
| {{l|ast|{{{cond_1sg}}}}}
| {{l|ast|{{{cond_2sg}}}}}
| {{l|ast|{{{cond_3sg}}}}}
| {{l|ast|{{{cond_1pl}}}}}
| {{l|ast|{{{cond_2pl}}}}}
| {{l|ast|{{{cond_3pl}}}}}
|-
! class="roa-subjunctive-left-rail" rowspan="2" | มาลาสมมุติ
! class="roa-subjunctive-left-rail" style="height:3em;" | ปัจจุบันกาล
| {{l|ast|{{{pres_sub_1sg}}}}}
| {{l|ast|{{{pres_sub_2sg}}}}}
| {{l|ast|{{{pres_sub_3sg}}}}}
| {{l|ast|{{{pres_sub_1pl}}}}}
| {{l|ast|{{{pres_sub_2pl}}}}}
| {{l|ast|{{{pres_sub_3pl}}}}}
|-
! class="roa-subjunctive-left-rail" style="height:3em;" | ไม่สมบูรณ์
| {{l|ast|{{{impf_sub_1sg}}}}}
| {{l|ast|{{{impf_sub_2sg}}}}}
| {{l|ast|{{{impf_sub_3sg}}}}}
| {{l|ast|{{{impf_sub_1pl}}}}}
| {{l|ast|{{{impf_sub_2pl}}}}}
| {{l|ast|{{{impf_sub_3pl}}}}}
|-
! class="roa-imperative-left-rail" colspan="2" style="height:3em;" | มาลาสั่ง
|
| {{l|ast|{{{impr_2sg}}}}}
|
|
| {{l|ast|{{{impr_2pl}}}}}
|
|}
</div></div><!--
--><noinclude>{{documentation}}<templatedata>
{
"params": {
"infinitive": {},
"gerundive": {},
"part": {},
"part_m": {},
"part_f": {},
"part_n": {},
"part_m-p": {},
"part_f-p": {},
"pres_ind_1sg": {},
"pres_ind_2sg": {},
"pres_ind_3sg": {},
"pres_ind_1pl": {},
"pres_ind_2pl": {},
"pres_ind_3pl": {},
"impf_ind_1sg": {},
"impf_ind_2sg": {},
"impf_ind_3sg": {},
"impf_ind_1pl": {},
"impf_ind_2pl": {},
"impf_ind_3pl": {},
"pret_ind_1sg": {},
"pret_ind_2sg": {},
"pret_ind_3sg": {},
"pret_ind_1pl": {},
"pret_ind_2pl": {},
"pret_ind_3pl": {},
"plup_ind_1sg": {},
"plup_ind_2sg": {},
"plup_ind_3sg": {},
"plup_ind_1pl": {},
"plup_ind_2pl": {},
"plup_ind_3pl": {},
"pres_sub_1sg": {},
"pres_sub_2sg": {},
"pres_sub_3sg": {},
"pres_sub_1pl": {},
"pres_sub_2pl": {},
"pres_sub_3pl": {},
"impf_sub_1sg": {},
"impf_sub_2sg": {},
"impf_sub_3sg": {},
"impf_sub_1pl": {},
"impf_sub_2pl": {},
"impf_sub_3pl": {},
"futr_ind_1sg": {},
"futr_ind_2sg": {},
"futr_ind_3sg": {},
"futr_ind_1pl": {},
"futr_ind_2pl": {},
"futr_ind_3pl": {},
"cond_1sg": {},
"cond_2sg": {},
"cond_3sg": {},
"cond_1pl": {},
"cond_2pl": {},
"cond_3pl": {},
"impr_2sg": {},
"impr_2pl": {}
}
}
</templatedata></noinclude>
ldt8tw6livjsakjjzmq0ko6zc8vbwxt
ขอก
0
334474
5729163
1893737
2026-07-20T02:51:49Z
Alifshinobi
397
/* ภาษาคำเมือง */
5729163
wikitext
text/x-wiki
== ภาษาไทย ==
=== การออกเสียง ===
{{th-pron|ขอก}}
=== คำนาม ===
{{th-noun}}
# [[เขต]], [[แดน]]
== ภาษาคำเมือง ==
=== การออกเสียง ===
* {{IPA|nod|/xɔːk˨˩/|a=เชียงใหม่}}
=== คำนาม ===
{{nod-noun}}
# {{altform|nod|ᨡᩬᨠ|t=[[เขต]], [[แดน]]; [[ขอบ]]}}
tvkvokiy6chruedo1571qzd10b469rx
ᩈ᩶ᩣ᩠ᨾ
0
335629
5729263
3325842
2026-07-20T04:26:50Z
Alifshinobi
397
/* รากศัพท์ 3 */
5729263
wikitext
text/x-wiki
{{also/auto}}
== ภาษาคำเมือง ==
=== รูปแบบอื่น ===
{{nod-alt|~=ส้าม}}
=== การออกเสียง ===
* {{IPA|nod|/saːm˦˦ʔ/|a=เชียงใหม่}}
=== รากศัพท์ 1 ===
==== คำกริยา ====
{{nod-verb}}
# [[ได้ใจ]], [[ย่าม]][[ใจ]]; [[พอใจ]]ที่จะได้รับอย่างที่เคยได้
=== รากศัพท์ 2 ===
==== คำกริยา ====
{{nod-verb}}
# [[บ้าเลือด]], [[บันดาล]][[โทสะ]]อย่างไม่กลัวตาย
=== รากศัพท์ 3 ===
ร่วมเชื้อสายกับ{{cog|khb|ᦉᦱᧄᧉ}}
==== คำกริยา ====
{{nod-verb}}
# {{lb|nod|อกรรม}} [[บ่น]], [[พร่ำ]]บ่น; [[กระจาย]][[เรื่อง]]
#: {{syn|nod|ᨧᩫ᩠᩵ᨾ|ᨪᩯ᩠᩵ᨾ}}
=== อ้างอิง ===
{{รายการอ้างอิง}}
* ''พจนานุกรมภาษาล้านนา = The Lanna dictionary'' (พิมพ์ครั้งที่ 2). (พ.ศ. 2550). เชียงใหม่: สถาบันภาษา ศิลปะและวัฒนธรรม มหาวิทยาลัยราชภัฏเชียงใหม่.
alhl38b3c3vswbydzwd55ii99a0work
มอดูล:gl-verb
828
336631
5729418
4933753
2026-07-20T09:13:45Z
Octahedron80
267
5729418
Scribunto
text/plain
--[=[
This module implements {{gl-conj}} and provides the underlying conjugation functions for {{gl-verb}}
(whose actual formatting is done in [[Module:gl-headword]]). This module uses the standard norm for
Galician spelling. See also [[Module:gl-reinteg-verb]], which implements the reintegrationist norm.
Authorship: Ben Wing <benwing2>
]=]
local export = {}
--[=[
TERMINOLOGY:
-- "slot" = A particular combination of tense/mood/person/number/etc.
Example slot names for verbs are "pres_1s" (present indicative first-person singular), "pres_sub_2s" (present
subjunctive second-person singular) "impf_sub_3p" (imperfect subjunctive third-person plural).
Each slot is filled with zero or more forms.
-- "form" = The conjugated Galician form representing the value of a given slot.
-- "lemma" = The dictionary form of a given Galician term. For Galician, always the infinitive.
]=]
--[=[
FIXME:
--]=]
local lang = require("Module:languages").getByCode("gl")
local m_string_utilities = require("Module:string utilities")
local m_links = require("Module:links")
local m_table = require("Module:table")
local iut = require("Module:inflection utilities")
local put = require("Module:parse utilities")
local com = require("Module:gl-common")
local force_cat = false -- set to true for debugging
local check_for_red_links = false -- set to false for debugging
local rfind = mw.ustring.find
local rmatch = mw.ustring.match
local rsplit = mw.text.split
local rsub = com.rsub
local u = mw.ustring.char
local unpack = unpack or table.unpack -- Lua 5.2 compatibility
local function link_term(term, display)
return m_links.full_link({ lang = lang, term = term, alt = display }, "term")
end
local V = com.V -- vowel regex class
local AV = com.AV -- accented vowel regex class
local C = com.C -- consonant regex class
local TEMPC1 = u(0xFFF1) -- temporary character used for consonant substitutions
local short_pp_footnote = "[usually used with auxiliary verbs " .. link_term("ser") .. " and " .. link_term("estar") .. "]"
local long_pp_footnote = "[usually used with auxiliary verbs " .. link_term("haber") .. " and " .. link_term("ter") .. "]"
--[=[
Vowel alternations:
<i-e>: 'i' in pres1s, imp2s and the whole present subjunctive; 'e' elsewhere when stressed. Generally 'e' otherwise
when unstressed. E.g. [[sentir]], [[conseguir]] (the latter additionally with 'gu-g' alternation).
<u-o>: 'u' in pres1s, imp2s and the whole present subjunctive; 'o' elsewhere when stressed. Generally 'u' otherwise
when unstressed. E.g. [[durmir]], [[subir]].
<i>: 'i' whenever stressed (in the present singular and third plural) and throughout the whole present subjunctive.
Otherwise 'e'. E.g. [[vestir]], [[pedir]].
<u>: 'u' whenever stressed (in the present singular and third plural) and throughout the whole present subjunctive.
Otherwise 'o'. There may be no such verbs in standard Galician.
<í>: The last 'i' of the stem) becomes 'í' when stressed. E.g.:
* [[faiscar]] (only3sp; faísca, faíscan, faísque, faísquen' also with 'c-qu' alternation), [[acainzar]],
[[avaiñar]], [[cainzar]], [[caiñar]], [[desenvaiñar]], [[envaiñar]], [[arremuiñar]], [[arrepuiñar]],
[[arruinar]], [[cuincar]], [[cuiñar]], [[muiñar]]
* verbs in -eizar and -aizar, e.g. [[europeizar]] ('europeízo, europeíce', etc. also with 'z-c' alternation)
* [[desenraizar]], [[enraizar]], [[hebraizar]], [[xudaizar]]
* [[europeizar]], [[homoxeneizar]]
* some verbs in -uizar:
* [[enxuizar]] (enxuízo, enxuíza, enxuíce, enxuícen, also with 'z-c' alternation), [[axuizar]]
* but not any in -guizar ([[arreguizar]], [[desgaleguizar]], [[empreguizar]], [[esguizar]], [[espreguizar]],
[[galeguizar]]) or -quizar ([[catequizar]], [[esnaquizar]], [[xerarquizar]])
* none in -aiar?
* not [[abraiar]], [[achaiar]], [[alfaiar]], [[amaiar]], [[arraiar]], [[atalaiar]], [[desmaiar]], [[encaiar]],
[[engraiar]], [[ensaiar]], [[espraiar]], [[faiar]], [[laiar]], [[maiar]], [[raiar]], [[salaiar]]
* unknown: [[craiar]]
* some verbs in -biar:
* [[adobiar]], [[asubiar]], [[espabiar]]
* but not [[arrubiar]], [[asoberbiar]] /e/?, [[cambiar]], [[descambiar]], [[enrabiar]], [[ensoberbiar]] /e/?,
[[entibiar]], [[gabiar]], [[gobiar]] /ɔ/, [[intercambiar]], [[rabiar]], [[recambiar]], [[sarabiar]] (only3s),
[[turbiar]]
* none in -ciar:
* not [[acariciar]], [[agraciar]], [[anunciar]], [[apreciar]] /e/?, [[asociar]] /ɔ/, [[auspiciar]],
[[autofinanciar]], [[aviciar]], [[axenciar]] /ɛ/, [[beneficiar]], [[comerciar]] /ɛ/, [[concienciar]] /ɛ/,
[[conferenciar]] /e/?, [[congraciar]], [[denunciar]], [[depreciar]] /e/?, [[desasociar]] /ɔ/, [[desenviciar]],
[[desgraciar]], [[desperdiciar]], [[diferenciar]] /e/?, [[dilixenciar]] /e/?, [[disociar]] /ɔ/, [[distanciar]],
[[divorciar]] /ɔ/, [[enranciar]], [[ensuciar]], [[enunciar]], [[enviciar]], [[escanciar]], [[especiar]] /?/,
[[evidenciar]] /e/?, [[financiar]], [[graciar]], [[influenciar]] /e/?, [[iniciar]], [[licenciar]] /ɛ/,
[[maliciar]], [[negociar]] /ɔ/, [[oficiar]], [[potenciar]] /e/?, [[prenunciar]], [[presenciar]] /e/?,
[[pronunciar]], [[propiciar]], [[quintaesenciar]] /e/?, [[reiniciar]], [[renunciar]], [[reverenciar]] /e/?,
[[saciar]], [[sentenciar]] /e/?, [[silenciar]] /e/?, [[viciar]]
* some verbs in -diar:
* [[adiar]], [[vadiar]]
* but not [[asediar]] /ɛ/, [[compendiar]] /ɛ/, [[custodiar]] /ɔ/, [[deslendiar]] /e/?, [[entremediar]] /e/?,
[[estipendiar]] /e/?, [[fastidiar]], [[incendiar]] /e/?, [[insidiar]], [[irradiar]], [[mediar]] /e/?,
[[odiar]] /ɔ/, [[parodiar]] /ɔ/, [[preludiar]], [[radiar]], [[remediar]] /ɛ/, [[repudiar]], [[salmodiar]] /ɔ/,
[[subsidiar]], [[vilipendiar]] /ɛ/
* some verbs in -fiar:
* [[afiar]], [[confiar]], [[desafiar]], [[desconfiar]], [[desenfiar]], [[enfiar]], [[esfiar]], [[esgrafiar]],
[[fiar]], [[porfiar]], probably [[sobrefiar]] (not indicated)
* but not [[atrofiar]] /ɔ/, [[hipertrofiar]] /ɔ/
* verbs in -guiar:
* [[guiar]], [[radioguiar]], [[teleguiar]]
* verbs in -hiar:
* [[chiar]], [[rechiar]], [[rechouchiar]]
* some verbs in -liar:
* [[aliar]] (alío, alía, alíe, alíen), [[ampliar]], [[avaliar]], [[desliar]], [[liar]]
* but not [[afiliar]] (afilio, afilia, afilie, afilien), [[auxiliar]], [[conciliar]], [[defoliar]],
[[domiciliar]], [[escoliar]], [[espoliar]], [[exfoliar]], [[exiliar]], [[interfoliar]], [[reconciliar]]
* [[paliar]] goes both ways: 'palio/palío', 'palia/palía', 'palie/palíe', 'palien/palíen'
* unknown: [[represaliar]]
* some verbs in -miar:
* [[gurrumiar]], [[miar]]
* but not [[agremiar]], [[amomiar]], [[encomiar]], [[premiar]], [[rumiar]]
* some verbs in -niar:
* [[agoniar]], [[desagoniar]]
* but not [[calumniar]], [[conxeniar]], [[herniar]], [[miniar]]
* none in -oiar?
* not [[aboiar]] /ɔ/, [[acoiar]] /ɔ/, [[apoiar]] /o/, [[arroiar]] /o/ (only3s), [[choiar]]/[[enchoiar]] /ɔ/,
[[enxoiar]] /ɔ/, [[loiar]] /o/
* some verbs in -piar:
* [[arrepiar]], [[espiar]], [[expiar]], [[piar]]
* but not [[apropiar]], [[copiar]], [[expropiar]], [[fotocopiar]], [[lurpiar]], [[principiar]], [[recopiar]],
[[tapiar]], [[xerocopiar]]
* some verbs in -quiar:
* [[esquiar]], [[maquiar]], [[remaquiar]], [[tosquiar]]
* but not [[obsequiar]]
* unknown: [[franquiar]]
* some verbs in -riar:
* [[arrefriar]], [[arriar]], [[avariar]], [[criar]], [[desvariar]], [[enriar]], [[escagarriar]], [[estriar]],
[[malcriar]], [[recriar]], [[variar]]
* but not [[anguriar]], [[asalariar]], [[cariar]] (only3sp), [[contrariar]], [[desmemoriar]], [[expatriar]],
[[gloriar]], [[historiar]], [[inventariar]], [[inxuriar]], [[leriar]], [[repatriar]], [[seriar]],
[[vangloriar]]
* some verbs in -siar:
* [[fantasiar]]
* but not [[anestesiar]], [[extasiar]]
* [[ansiar]] goes both ways: 'ansio/ansío', 'ansia/ansía', 'ansie/ansíe', 'ansien/ansíen'
* some verbs in -tiar:
* [[amnistiar]], [[desenfastiar]], [[enfastiar]]
* but not [[angustiar]], [[sitiar]]
* some verbs in -viar:
* [[ataviar]], [[aviar]], [[desataviar]], [[desviar]], [[enviar]], [[extraviar]], [[reenviar]]
* but not [[abreviar]], [[agraviar]], [[aliviar]], [[desagraviar]], [[diluviar]] (only3s), [[obviar]]
* some verbs in -xiar:
* [[vixiar]]
* but not [[asfixiar]], [[colexiar]] /e/, [[contaxiar]], [[desprestixiar]], [[eloxiar]], [[plaxiar]],
[[presaxiar]], [[prestixiar]], [[privilexiar]] /e/, [[refuxiar]]
<ú>: The last 'u' of the stem becomes 'ú' when stressed. E.g.:
* [[reunir]] ('reúno, reúne(s), reúnem, reúna(s), reúnan')
* [[esmiuzar]] ('esmiúzo, esmiúza(s), esmiúza, esmiúce(s), esmiúcen' also with 'z-c' alternation)
* [[saudar]] ('saúdo, saúda(s), saúda, saúde(s), saúden')
* [[auñar]], [[desembaular]], [[embaular]]
* [[afiuzar]], [[desafiuzar]], [[desmiudar]], [[desmiuzar]], [[enviuvar]], [[esmiuzar]] but not [[triunfar]]
* NOTE: It seems most or all verbs in -uar other than in -guar, -quar have stressed ú, so we make it the default.
]=]
local vowel_alternants = m_table.listToSet({"i-e", "i", "í", "u-o", "u", "ú", "+"})
local vowel_alternant_to_desc = {
["i-e"] = "''i-e'' alternation in present singular",
["i"] = "''e'' becomes ''i'' when stressed",
["í"] = "''i'' becomes ''í'' when stressed",
["u-o"] = "''u-o'' alternation in present singular",
["u"] = "''o'' becomes ''u'' when stressed",
["ú"] = "''u'' becomes ''ú'' when stressed",
}
local vowel_alternant_to_cat = {
["i-e"] = "i-e alternation in present singular",
["i"] = "e becoming i when stressed",
["í"] = "i becoming í when stressed",
["u-o"] = "u-o alternation in present singular",
["u"] = "o becoming u when stressed",
["ú"] = "u becoming ú when stressed",
}
local all_persons_numbers = {
["1s"] = "1|s",
["2s"] = "2|s",
["3s"] = "3|s",
["1p"] = "1|p",
["2p"] = "2|p",
["3p"] = "3|p",
}
local person_number_list = {"1s", "2s", "3s", "1p", "2p", "3p"}
local imp_person_number_list = {"2s", "3s", "1p", "2p", "3p"}
local neg_imp_person_number_list = {"2s", "3s", "1p", "2p", "3p"}
person_number_to_reflexive_pronoun = {
["1s"] = "me",
["2s"] = "te",
["3s"] = "se",
["1p"] = "nos",
["2p"] = "vos",
["3p"] = "se",
}
local indicator_flags = m_table.listToSet {
"no_pres_stressed", "no_pres1_and_sub",
"only3s", "only3sp", "only3p", "noimp",
"pp_inv", "irreg", "no_built_in",
}
-- Initialize all the slots for which we generate forms.
local function add_slots(alternant_multiword_spec)
-- "Basic" slots: All slots that go into the regular table (not the reflexive form-of table).
alternant_multiword_spec.verb_slots_basic = {
{"infinitive", "inf"},
{"infinitive_linked", "inf"},
{"gerund", "ger"},
{"short_pp_ms", "short|m|s|past|part"},
{"short_pp_fs", "short|f|s|past|part"},
{"short_pp_mp", "short|m|p|past|part"},
{"short_pp_fp", "short|f|p|past|part"},
{"pp_ms", "m|s|past|part"},
{"pp_fs", "f|s|past|part"},
{"pp_mp", "m|p|past|part"},
{"pp_fp", "f|p|past|part"},
}
-- Special slots used to handle non-reflexive parts of reflexive verbs in {{gl-verb form of}}. For example, for a
-- reflexive-only verb like [[arrepentirse]], we want to be able to use {{gl-verb form of}} on [[arrepinta]] (which
-- should mention that it is a part of 'me arrepinta', first-person singular present subjunctive, and
-- 'se arrepinta', third-person singular present subjunctive) or on [[arrepentimos]] (which should mention that it
-- is a part of 'arrepentímonos', first-person plural present indicative or preterite). Similarly, we want to use
-- {{gl-verb form of}} on [[arrepentindo]] (which should mention that it is a part of 'se ... arrepentindo',
-- syntactic variant of [[arrepentíndose]], which is the gerund of [[arrepentirse]]). To do this, we need to be
-- able to map non-reflexive parts like [[arrepinta]], [[arrepentimos]], [[arrepentindo]], etc. to their reflexive
-- equivalent(s), to the tag(s) of the equivalent(s), and, in the case of forms like [[arrepentindo]],
-- [[arrepentir]] and imperatives, to the separated syntactic variant of the verb+clitic combination. We do this by
-- creating slots for the non-reflexive part equivalent of each basic reflexive slot, and for the separated
-- syntactic-variant equivalent of each basic reflexive slot that is formed of verb+clitic. We use slots in this
-- way to deal with multiword lemmas. Note that we run into difficulties mapping between reflexive verbs,
-- non-reflexive part equivalents, and separated syntactic variants if a slot contains more than one form. To
-- handle this, if there are the same number of forms in two slots we're trying to match up, we assume the forms
-- match one-to-one; otherwise we don't match up the two slots (which means {{gl-verb form of}} won't work in this
-- case, but such a case is extremely rare and not worth worrying about). Alternatives that handle this "properly"
-- are significantly more complicated and require non-trivial modifications to [[Module:inflection utilities]].
local need_special_verb_form_of_slots = alternant_multiword_spec.source_template == "gl-verb form of" and
alternant_multiword_spec.refl
if need_special_verb_form_of_slots then
alternant_multiword_spec.verb_slots_reflexive_verb_form_of = {
{"infinitive_non_reflexive", "-"},
{"infinitive_variant", "-"},
{"gerund_non_reflexive", "-"},
{"gerund_variant", "-"},
}
else
alternant_multiword_spec.verb_slots_reflexive_verb_form_of = {}
end
-- Add entries for a slot with person/number variants.
-- `verb_slots` is the table to add to.
-- `slot_prefix` is the prefix of the slot, typically specifying the tense/aspect.
-- `tag_suffix` is a string listing the set of inflection tags to add after the person/number tags.
-- `person_number_list` is a list of the person/number slot suffixes to add to `slot_prefix`.
local function add_personal_slot(verb_slots, slot_prefix, tag_suffix, person_number_list)
for _, persnum in ipairs(person_number_list) do
local persnum_tag = all_persons_numbers[persnum]
local slot = slot_prefix .. "_" .. persnum
local accel = persnum_tag .. "|" .. tag_suffix
table.insert(verb_slots, {slot, accel})
end
end
-- Add a personal slot (i.e. a slot with person/number variants) to `verb_slots_basic`.
local function add_basic_personal_slot(slot_prefix, tag_suffix, person_number_list, no_special_verb_form_of_slot)
add_personal_slot(alternant_multiword_spec.verb_slots_basic, slot_prefix, tag_suffix, person_number_list)
-- Add special slots for handling non-reflexive parts of reflexive verbs in {{gl-verb form of}}.
-- See comment above in `need_special_verb_form_of_slots`.
if need_special_verb_form_of_slots and not no_special_verb_form_of_slot then
for _, persnum in ipairs(person_number_list) do
local persnum_tag = all_persons_numbers[persnum]
local basic_slot = slot_prefix .. "_" .. persnum
local accel = persnum_tag .. "|" .. tag_suffix
table.insert(alternant_multiword_spec.verb_slots_reflexive_verb_form_of, {basic_slot .. "_non_reflexive", "-"})
end
end
end
add_basic_personal_slot("pres", "pres|ind", person_number_list)
add_basic_personal_slot("impf", "impf|ind", person_number_list)
add_basic_personal_slot("pret", "pret|ind", person_number_list)
add_basic_personal_slot("plup", "plup|ind", person_number_list)
add_basic_personal_slot("fut", "fut|ind", person_number_list)
add_basic_personal_slot("cond", "cond", person_number_list)
add_basic_personal_slot("pres_sub", "pres|sub", person_number_list)
add_basic_personal_slot("impf_sub", "impf|sub", person_number_list)
add_basic_personal_slot("fut_sub", "fut|sub", person_number_list)
add_basic_personal_slot("imp", "imp", imp_person_number_list)
add_basic_personal_slot("pers_inf", "pers|inf", person_number_list)
-- Don't need special non-reflexive-part slots because the negative imperative is multiword, of which the
-- individual words are 'non' + subjunctive.
add_basic_personal_slot("neg_imp", "neg|imp", neg_imp_person_number_list, "no special verb form of")
-- Don't need special non-reflexive-part slots because we don't want [[arrependendo]] mapping to [[arrependendo-me]]
-- (only [[arrependendo-se]]) or [[arrepender]] mapping to [[arrepender-me]] (only [[arrepender-se]]).
add_basic_personal_slot("infinitive", "inf", person_number_list, "no special verb form of")
add_basic_personal_slot("gerund", "ger", person_number_list, "no special verb form of")
-- Generate the list of all slots.
alternant_multiword_spec.all_verb_slots = {}
for _, slot_and_accel in ipairs(alternant_multiword_spec.verb_slots_basic) do
table.insert(alternant_multiword_spec.all_verb_slots, slot_and_accel)
end
for _, slot_and_accel in ipairs(alternant_multiword_spec.verb_slots_reflexive_verb_form_of) do
table.insert(alternant_multiword_spec.all_verb_slots, slot_and_accel)
end
alternant_multiword_spec.verb_slots_basic_map = {}
for _, slotaccel in ipairs(alternant_multiword_spec.verb_slots_basic) do
local slot, accel = unpack(slotaccel)
alternant_multiword_spec.verb_slots_basic_map[slot] = accel
end
end
local overridable_stems = {}
local function allow_multiple_values(separated_groups, data)
local retvals = {}
for _, separated_group in ipairs(separated_groups) do
local footnotes = data.fetch_footnotes(separated_group)
local retval = {form = separated_group[1], footnotes = footnotes}
table.insert(retvals, retval)
end
return retvals
end
local function simple_choice(choices)
return function(separated_groups, data)
if #separated_groups > 1 then
data.parse_err("For spec '" .. data.prefix .. ":', only one value currently allowed")
end
if #separated_groups[1] > 1 then
data.parse_err("For spec '" .. data.prefix .. ":', no footnotes currently allowed")
end
local choice = separated_groups[1][1]
if not m_table.contains(choices, choice) then
data.parse_err("For spec '" .. data.prefix .. ":', saw value '" .. choice .. "' but expected one of '" ..
table.concat(choices, ",") .. "'")
end
return choice
end
end
for _, overridable_stem in ipairs {
"pres_unstressed",
"pres_stressed",
"pres1_and_sub",
-- Don't include pres1; use pres_1s if you need to override just that form
"impf",
"full_impf",
{"pret_conj", simple_choice({"irreg", "ar", "er", "ir"}) },
"pret_base",
"pret",
"short_pret",
"fut",
"cond",
"pres_sub_stressed",
"pres_sub_unstressed",
{"sub_conj", simple_choice({"ar", "er"}) },
"plup",
"impf_sub",
"fut_sub",
"pers_inf",
"pp",
"short_pp",
} do
if type(overridable_stem) == "string" then
overridable_stems[overridable_stem] = allow_multiple_values
else
local stem, validator = unpack(overridable_stem)
overridable_stems[stem] = validator
end
end
-- Useful as the value of the `match` property of a built-in verb. `main_verb_spec` is a Lua pattern that should match
-- the non-prefixed part of a verb, and `prefix_specs` is a list of Lua patterns that should match the prefixed part of
-- a verb. If a prefix spec is preceded by ^, it must match exactly at the beginning of the verb; otherwise, additional
-- prefixes (e.g. re-, des-) may precede. Return the prefix and main verb.
local function match_against_verbs(main_verb_spec, prefix_specs)
return function(verb)
for _, prefix_spec in ipairs(prefix_specs) do
if prefix_spec:find("^%^") then
-- must match exactly
prefix_spec = prefix_spec:gsub("^%^", "")
if prefix_spec == "" then
-- We can't use the second branch of the if-else statement because an empty () returns the current position
-- in rmatch().
local main_verb = rmatch(verb, "^(" .. main_verb_spec .. ")$")
if main_verb then
return "", main_verb
end
else
local prefix, main_verb = rmatch(verb, "^(" .. prefix_spec .. ")(" .. main_verb_spec .. ")$")
if prefix then
return prefix, main_verb
end
end
else
local prefix, main_verb = rmatch(verb, "^(.*" .. prefix_spec .. ")(" .. main_verb_spec .. ")$")
if prefix then
return prefix, main_verb
end
end
end
return nil
end
end
--[=[
Built-in (usually irregular) conjugations.
Each entry is processed in turn and consists of an object with two fields:
1. match=: Specifies the built-in verbs that match this object.
2. forms=: Specifies the built-in stems and forms for these verbs.
The value of match= is either a string beginning with "^" (match only the specified verb), a string not beginning
with "^" (match any verb ending in that string), or a function that is passed in the verb and should return the prefix
of the verb if it matches, otherwise nil. The function match_against_verbs() is provided to facilitate matching a set
of verbs with a common ending and specific prefixes (e.g. [[ter]] and [[ater]] but not [[abater]], etc.).
The value of forms= is a table specifying stems and individual override forms. Each key of the table names either a
stem (e.g. `pres_stressed`), a stem property (e.g. `vowel_alt`) or an individual override form (e.g. `pres_1s`).
Each value of a stem can either be a string (a single stem), a list of strings, or a list of objects of the form
{form = STEM, footnotes = {FOONOTES}}. Each value of an individual override should be of exactly the same form except
that the strings specify full forms rather than stems. The values of a stem property depend on the specific property
but are generally strings or booleans.
In order to understand how the stem specifications work, it's important to understand the phonetic modifications done
by combine_stem_ending(). In general, the complexities of predictable prefix, stem and ending modifications are all
handled in this function. In particular:
1. Spelling-based modifications (c/z, g/gu, gu/gü, g/j) occur automatically as appropriate for the ending.
2. If the stem begins with an acute accent, the accent is moved onto the last vowel of the prefix (for handling verbs
in -uar such as [[minguar]], pres_3s 'míngua').
3. If the ending begins with a double asterisk, this is a signal to conditionally delete the accent on the last letter
of the stem. "Conditionally" means we don't do it if the last two letters would form a diphthong without the accent
on the second one (e.g. in [[sair]], with stem 'saí'); but as an exception, we do delete the accent in stems
ending in -guí, -quí (e.g. in [[conseguir]]) because in this case the ui isn't a diphthong.
4. If the ending begins with an asterisk, this is a signal to delete the accent on the last letter of the stem, e.g.
fizé -> fizermos. Unlike for **, this removal is unconditional, so we get e.g. 'sairmos' not #'saírmos'.
5. If ending begins with i, it must get an accent after an unstressed vowel (in some but not all cases) to prevent the
two merging into a diphthong. See combine_stem_ending() for specifics.
The following stems are recognized:
-- pres_unstressed: The present indicative unstressed stem (1p, 2p). Also controls the imperative 2p
and gerund. Defaults to the infinitive stem (minus the ending -ar/-er/-ir/-or).
-- pres_stressed: The present indicative stressed stem (1s, 2s, 3s, 3p). Also controls the imperative 2s.
Default is empty if indicator `no_pres_stressed`, else a vowel alternation if such an indicator is given
(e.g. `ue`, `ì`), else the infinitive stem.
-- pres1_and_sub: Overriding stem for 1s present indicative and the entire subjunctive. Only set by irregular verbs
and by the indicators `no_pres_stressed` (e.g. [[precaver]]) and `no_pres1_and_sub` (since verbs of this sort,
e.g. [[puir]], are missing the entire subjunctive as well as the 1s present indicative). Used by many irregular
verbs, e.g. [[caber]], verbs in '-air', [[dizer]], [[ter]], [[valer]], etc. Some verbs set this and then supply an
override for the pres_1s if it's irregular, e.g. [[saber]], with irregular subjunctive stem "saib-" and special
1s present indicative "sei".
-- pres1: Special stem for 1s present indicative. Normally, do not set this explicitly. If you need to specify an
irregular 1s present indicative, use the form override pres_1s= to specify the entire form. Defaults to
pres1_and_sub if given, else pres_stressed.
-- pres_sub_unstressed: The present subjunctive unstressed stem (1p, 2p). Defaults to pres1_and_sub if given, else the
infinitive stem.
-- pres_sub_stressed: The present subjunctive stressed stem (1s, 2s, 3s, 1p). Defaults to pres1.
-- sub_conj: Determines the set of endings used in the subjunctive. Should be one of "ar" or "er".
-- impf: The imperfect stem (not including the -av-/-i- stem suffix, which is determined by the conjugation). Defaults
to the infinitive stem.
-- full_impf: The full imperfect stem missing only the endings (-a, -as, -am, etc.). Used for verbs with irregular
imperfects such as [[ser]], [[ter]], [[vir]] and [[pór]].
-- pret_conj: Determines the set of endings used in the preterite. Should be one of "ar", "er", "ir" or "irreg".
Defaults to the conjugation as determined from the infinitive. When pret_conj == "irreg", `pret` is used, otherwise
`pret_base`.
-- pret_base: The preterite stem (not including the -a-/-e-/-i- stem suffix). Defaults to the infinitive stem.
Only used when pret_conj ~= "irreg".
-- pret: The full preterite stem missing only the endings (-ste, -mos, etc.), e.g. 'fige', 'fo'. Only used for verbs
with irregular preterites (pret_conj == "irreg") such as [[facer]], [[poder]], [[traer]], etc. The pret_1s and
pret_3s are handled using the short_pret stem instead (pret_1s '-en', pret_3s '-o'). Defaults to `pret_base` + the
conjugation vowel.
-- short_pret: The short preterite stem, used with 1s and 3s endings (pret_1s '-en', pret_3s '-o'). Only used with
irregular preterites (pret_conj == "irreg"). Normally derived from pret by deleting the final vowel, and doesn't
need to be given explicitly.
-- fut: The future stem. Defaults to the infinitive stem + the conjugation vowel.
-- cond: The conditional stem. Defaults to `fut`.
-- impf_sub: The imperfect subjunctive stem. Defaults to `pret`.
-- fut_sub: The future subjunctive stem. Defaults to `pret`.
-- plup: The pluperfect stem. Defaults to `pret`.
-- pers_inf: The personal infinitive stem. Defaults to the infinitive stem + the conjugation vowel.
-- pp: The masculine singular past participle. Default is based on the verb conjugation: infinitive stem + '-ado' for
-ar verbs, otherwise infinitive stem + '-ido'.
-- short_pp: The short masculine singular past participle, for verbs with such a form. No default.
-- pp_inv: `true` if the past participle exists only in the masculine singular.
]=]
local built_in_conjugations = {
--------------------------------------------------------------------------------------------
-- -ar --
--------------------------------------------------------------------------------------------
-- Verbs not needing entries here:
--
-- (1) Verbs with short past participles: need to specify the short pp explicitly.
--
-- aceitar: use <short_pp:aceite>
-- anexar, completar, expressar, expulsar, findar, fritar, ganhar, gastar, limpar, pagar, pasmar, pegar, soltar:
-- use <short_pp:anexo> etc.
-- assentar: use <short_pp:assente>
-- entregar: use <short_pp:entregue>
-- enxugar: use <short_pp:enxuto>
-- matar: use <short_pp:morto>
--
-- (2) Verbs with orthographic consonant alternations: handled automatically.
--
-- -car (brincar, buscar, pecar, trancar, etc.): automatically handled in combine_stem_ending()
-- -zar (alcanzar, comezar, lazar): automatically handled in combine_stem_ending()
-- -gar (apagar, cegar, esmagar, largar, navegar, resmungar, sugar, etc.): automatically handled in combine_stem_ending()
-- -guar (iguar, minguar): automatically handled in combine_stem_ending()
--
-- (3) Verbs with vowel alternations: need to specify the alternation explicitly unless it always happens, in
-- which case it's handled automatically through an entry below.
--
-- esmiuzar changing to esmiúzo: use <ú>
-- faiscar changing to faísco: use <í>
-- -izar changing to -ízo (ajuizar, enraizar, homogeneizar, plebeizar, etc.): use <í>
-- reusar changing to reúso: use <ú>
-- saudar changing to saúdo: use <ú>
-- tuitar/retuitar changing to (re)tuíto: use <í>
{
-- dar
match = "^dar", -- [[desdar]] doesn't seem to exist; [[redar]] is regular and unrelated to [[dar]]
forms = {
pres_1s = "dou", pres_2s = "dás", pres_3s = "dá", pres_3p = "dán#",
pres1_and_sub = "de", -- only for subjunctive as we override pres_1s
sub_conj = "er",
pret_conj = "irreg", pret = "de", pret_1s = "dei", pret_3s = "deu", -- /dɛw/
irreg = true,
}
},
{
-- estar
match = "^estar", -- [[sobestar]] and [[sobrestar]] seem not to exist
forms = {
pres_1s = "estou", pres_2s = "estás", pres_3s = "está", pres_3p = "están",
pres1_and_sub = "este", -- only for subjunctive as we override pres_1s
sub_conj = "er",
pret_conj = "irreg", pret = "estive",
pp_inv = true, -- no [[sobestar]] or [[sobrestar]], which would be transitive
irreg = true,
}
},
{
-- verbs in -uar but not -guar
match = function(verb)
if verb:find("guar$") then
return nil
else
return match_against_verbs("uar", {""})(verb)
end
end,
forms = {
vowel_alt = "ú",
}
},
--------------------------------------------------------------------------------------------
-- -er --
--------------------------------------------------------------------------------------------
-- Verbs not needing entries here:
--
-- -cer (verbs in -ecer, vencer, etc.): automatically handled in combine_stem_ending()
-- -guer (erguer/soerguer): automatically handled in combine_stem_ending()
{
-- must be listed before -aer
match = "^traer",
forms = {
-- all occurrences of accented í and ï in endings handled in combine_stem_ending()
pres1_and_sub = "trai",
pret_conj = "irreg", pret = "trouxe",
irreg = true,
}
},
{
-- verbs in -aer (caer, raer, debaer, degraer, esvaer and derivatives of traer, but not traer itself:
-- acaer/decaer/recaer,
-- abstraer/atraer/contraer/descontraer/detraer/distraer/extraer/maltraer/retraer/retrotraer/subtraer)
match = "aer",
forms = {
-- all occurrences of accented í and ï in endings handled in combine_stem_ending()
pres1_and_sub = "ai",
irreg = true,
}
},
{
-- caber
match = "caber",
forms = {
pres1_and_sub = "caib",
pret_conj = "irreg", pret = "coube",
irreg = true,
}
},
{
-- crer, descrer
match = "crer",
forms = {
pres1_and_sub = "cre",
pres_2s = "crés#", pres_3s = "cré#", pres_3p = "crén#",
-- regular except the lack of accent in base verb
pret_1p = "crín#",
irreg = true,
}
},
{
-- acender, prender/aprender; not comprender/desprender/reprender, etc.
match = match_against_verbs("ender", {"^ac", "^pr", "^apr"}),
forms = {short_pp = "eso"},
},
{
-- erguer; but not soerguer
match = "^erguer",
forms = {short_pp = "ergueito"},
},
{
-- facer, afacer, contrafacer, desafacer, desfacer, perfacer, rarefacer, refacer, satisfacer, tumefacer
match = "facer",
forms = {
-- use 'fagu' because we're in a front environment; if we use 'fag', we'll get '#fajo'
pres1_and_sub = "fagu",
pres_2s = "fás#",
pres_3s = "fai",
pres_3p = "fán#",
pret_conj = "irreg", pret = "fixe",
pp = "feito",
fut = "far",
irreg = true,
cons_alt = false, -- avoid claiming we have a c-z alternation
}
},
{
match = "^haber",
forms = {
pres_1s = "hei",
pres_2s = "has",
pres_3s = {"ha", "hai"},
pres_3p = "han",
pres1_and_sub = "hax", -- only for subjunctive as we override pres_1s
pret_conj = "irreg", pret = "hoube",
noimp = true,
irreg = true,
}
},
{
-- ler, reler, trasler; not escoller, expeler, valer, etc.
match = match_against_verbs("ler", {"^", "^re", "tras"}),
forms = {
pres1_and_sub = "le",
pres_2s = "lés#", pres_3s = "lé#", pres_3p = "lén#",
-- regular except the lack of accent in base verb
pret_1p = "lín#",
irreg = true,
}
},
{
-- morrer, premorrer
match = "morrer",
forms = {pp = "morto"},
},
{
-- nacer; but not renacer
match = "^nacer",
forms = {short_pp = "nado"},
},
{
-- moer, but not remoer
match = "^moer",
forms = {
-- all occurrences of accented í and ï in endings handled in combine_stem_ending()
pres1_and_sub = "moi",
short_pp = "mudo", -- the main table says 'mundo' but the page for [[mundo]] says 'mudo' is "máis recomendable"
irreg = true,
}
},
{
-- choer/deschoer, doer/condoer, remoer, proer, roer/corroer
match = "oer",
forms = {
-- all occurrences of accented í and ï in endings handled in combine_stem_ending()
pres1_and_sub = "oi",
irreg = true,
}
},
{
-- coller, toller and derivatives (acoller, desacoller, desencoller, encoller, entrecoller, escoller, recoller;
-- destoller, entretoller)
match = "oller",
forms = {short_pp = "olleito"},
},
{
-- poder
match = "poder",
forms = {
pres1_and_sub = "poid", -- only for subjunctive as we override pres_1s
pres_1s = "podo", -- /ɔ/
pret_conj = "irreg", pret = "puide",
irreg = true,
}
},
{
-- poñer, antepoñer, apoñer/desapoñer, arrepoñer, compoñer/descompoñer/recompoñer, contrapoñer, depoñer,
-- dispoñer/indispoñer/predispoñer, empoñer, expoñer/sobreexpoñer/subexpoñer, impoñer/reimpoñer, interpoñer,
-- opoñer, pospoñer, propoñer, repoñer, sobrepoñer, superpoñer, supoñer/presupoñer, traspoñer, xustapoñer
match = "poñer",
forms = {
pres_2s = "pós#", pres_3s = "pón#",
pret_conj = "irreg", pret = "puxe",
pp = "posto",
irreg = true,
}
},
{
-- pracer, but not apracer, compracer, descompracer, despracer
match = "^pracer",
forms = {
pret_conj = "irreg", pret = "prougue",
irreg = true,
}
},
-- prover below, just below ver
{
-- querer
match = "querer",
forms = {
pres1_and_sub = "queir", -- only for subjunctive as we override pres_1s
pres_1s = "quero", -- /ɛ/
pret_conj = "irreg", pret = "quixe",
irreg = true,
}
},
{
-- romper; but not corromper, interromper, irromper or prorromper
match = "^romper",
forms = {short_pp = "roto"},
},
{
-- saber, ressaber
match = "saber",
forms = {
pres_1s = "sei",
pres1_and_sub = "saib", -- only for subjunctive as we override pres_1s
pret_conj = "irreg", pret = "soube",
irreg = true,
}
},
{
-- absolver, disolver, resolver
match = "solver",
forms = {short_pp = "solto"},
},
{
-- suspender; but not others in -pender
match = "suspender",
forms = {short_pp = "suspenso"},
},
{
match = "^ser",
forms = {
pres_1s = "son", pres_2s = "es", pres_3s = "é",
pres_1p = "somos", pres_2p = "sodes", pres_3p = "son",
pres1_and_sub = "sex", -- only for subjunctive as we override pres_1s
full_impf = "er",
pret_conj = "irreg", pret = "fo", pret_1s = "fun", pret_2s = "fuches", pret_3s = "foi",
imp_2s = "sé", imp_2p = "sede",
irreg = true,
}
},
{
-- We want to match abster, conter, deter, etc. but not abater, cometer, etc. No way to avoid listing each verb.
match = match_against_verbs("ter", {"abs", "^a", "con", "de", "entre", "man", "ob", "^re", "sos", "^"}),
forms = {
pres_2s = "tés#", pres_3s = "tén#", pres_2p = {"tendes", "tedes"}, pres_3p = "teñen",
pres1_and_sub = "teñ",
full_impf = "tiñ",
pret_conj = "irreg", pret = "tive",
irreg = true,
}
},
-- traer listed above at the beginning of the -er verbs
{
-- valer, equivaler
match = "valer",
forms = {
pres1_and_sub = "vall",
irreg = true,
}
},
{
-- We want to match antever etc. but not absolver, atrever etc. No way to avoid listing each verb.
-- NOTE: [[rever]] has two meanings, one with regular conjugation. Use <no_built_in> for this one.
match = match_against_verbs("ver", {"entre", "pre", "^re", "^"}),
forms = {
pres_2s = "vés#", pres_3s = "vé#", pres_3p = "vén#",
pres1_and_sub = "vex",
pret_conj = "irreg", pret = "vi", pret_1s = "vín#", pret_3s = "viu",
pp = "visto",
irreg = true,
}
},
{
-- [[prover]] has regular preterite and past participle
match = "^prover",
forms = {
pres_2s = "provés", pres_3s = "prové", pres_3p = "provén",
pres1_and_sub = "provex",
short_pp = "provisto",
irreg = true,
}
},
{
-- [[desprover]] has its own conjugation
match = "^desprover",
forms = {
pres_2s = "desprovés", pres_3s = "desprové", pres_3p = "desprovén",
pres1_and_sub = "desprove",
short_pp = "desprovisto",
irreg = true,
}
},
{
-- volver, avolver/desenvolver/devolver/envolver/revolver
match = "volver",
forms = {short_pp = "volto"},
},
--------------------------------------------------------------------------------------------
-- -ir --
--------------------------------------------------------------------------------------------
-- Verbs not needing entries here:
--
-- subir (NOT rubir), acudir/sacudir (NOT escudir, aludir/eludir), urdir/desurdir, xurdir/rexurdir,
-- engulir, pulir, bulir/rebulir, ulir, mulir (NOT escapulir), durmir, sumir/consumir/ensumir (NOT
-- asumir/reasumir/presumir/resumir/subsumir), cuspir/chuspir, sufrir, tusir, xunguir/conxunguir/desxunguir,
-- munguir, fuxir/muxir/ruxir: use <u-o>
-- [NOTE: imp_2s durme, consume/sume]
-- sosubir/susubir: use <u-o>? (archaic, not in RAG dictionary)
-- abolir: use <no_pres_stressed>
-- descolorir: use <no_pres_stressed>
-- empedernir: use <no_pres_stressed>
-- espir/despir, refletir, adherir, pedir/desapedir/despedir/expedir/impedir/reexpedir, medir/comedir/descomedir,
-- aferir/conferir/deferir/diferir/inferir/interferir/preferir/proferir/referir/transferir,
-- dixerir/enxerir/suxerir, preterir, competir/repetir, advertir/divertir, vestir/investir/revestir/travestir,
-- agredir/transgredir, espelir: use <i>
-- mentir/desmentir, sentir/asentir/consentir/disentir/presentir/resentir, ferir (but no derivatives), servir,
-- seguir/conseguir/perseguir/proseguir: use <i-e>
-- [NOTE: imp_2s minte]
-- denegrir: use <i.only3sp>
-- prohibir/coibir: regular
-- cumprir: use <no_built_in> in the meaning "fulfill"
-- reunir: use <ú>
-- argüír/redargüír: use <ú>?
--
-- -cir alternations (aducir, resarcir): automatically handled in combine_stem_ending()
-- -guir alternations (e.g. conseguir, cinguir, xunguir, tinguir): automatically handled in combine_stem_ending()
-- -quir alternations (e.g. delinquir): automatically handled in combine_stem_ending()
-- -güír alternations (e.g. argüír): automatically handled in combine_stem_ending()
{
-- saír/sobresaír
match = "aír",
forms = {
pres1_and_sub = "ai",
-- all occurrences of accented í and ï in endings handled in combine_stem_ending()
irreg = true,
}
},
{
-- abrir/desabrir/reabrir
match = "abrir",
forms = {pp = "aberto"},
},
{
-- aflixir
match = "aflixir",
-- FIXME: should this be {pp = {"aflicto", "aflixido"}}?
forms = {short_pp = "aflicto"},
},
{
-- cubrir/descubrir/encubrir/recubrir/redescubrir
match = "cubrir",
forms = {vowel_alt = "u-o", pp = "coberto"},
},
{
-- cumprir (only in the meaning "to be necessary"; otherwise use <no_built_in>)
match = "^cumprir",
forms = {
-- We could create a <u-ó> just for this verb but that seems overkill unless another such verb appears
pres_stressed = "cómpr",
pres1_and_sub = "cumpr",
},
},
{
-- dicir, bendicir, contradicir, desdicir, maldicir, predicir
-- FIXME: bendicir and maldicir can also be entirely regular. This could be handled like this:
-- ((bendicir<>,bendicir<no_built_in>))
match = "dicir",
forms = {
-- use 'digu' because we're in a front environment; if we use 'dig', we'll get '#dijo'
pres1_and_sub = "digu",
pres_2s = "dís#", pres_3s = "dí#", pres_3p = "dín#",
pret_conj = "irreg", pret = "dixe",
pp = function(base, prefix) return (prefix == "" or prefix == "des" or prefix == "pre") and "dito" or
{"dito", "dicido"} end,
pp = "dito",
fut = "dir",
irreg = true,
cons_alt = false, -- avoid claiming we have a c-z alternation
}
},
{
-- elixir, reelixir
match = "elixir",
-- FIXME: should this be {pp = {"electo", "elixido"}}?
forms = {short_pp = "electo"},
},
{
-- frixir/sofrixir, fritir/sofritir
match = "fri[xt]ir",
forms = {short_pp = "frito"},
},
{
-- inserir, reinserir
match = "inserir",
forms = {
vowel_alt = "i",
short_pp = "inserto",
},
},
{
-- ir
match = "^ir",
forms = {
pres_1s = "vou", pres_2s = "vas", pres_3s = "vai", pres_1p = "imos", pres_2p = "ides", pres_3p = "van",
pres1_and_sub = "vai", -- only for subjunctive as we override pres_1s
pret_conj = "irreg", pret = "fo", pret_1s = "fun", pret_2s = "fuches", pret_3s = "foi",
imp_1p = "vamos",
irreg = true,
}
},
{
-- oír, desoír, entreoír
match = "oír",
forms = {
-- all occurrences of accented í and ï in endings handled in combine_stem_ending()
pres1_and_sub = "oi", -- /ɔ/
irreg = true,
}
},
{
match = "ouvir",
forms = {
pres1_and_sub = "ouz",
irreg = true,
}
},
{
-- parir, malparir
match = "parir",
forms = {
pres1_and_sub = "pair",
irreg = true,
}
},
{
-- imprimir/reimprimir/sobreimprimir, but not comprimir/descomprimir, deprimir, oprimir, reprimir, suprimir
match = "imprimir",
forms = {short_pp = "impreso"}
},
{
-- rir, sorrir
match = match_against_verbs("rir", {"^", "sor"}),
forms = {
pres_2s = "ris#", pres_3s = "ri#", pres_3p = "rin#",
pret_1s = "rin#", -- regular except the lack of accent in base verb
pres1_and_sub = "rí",
irreg = true,
}
},
{
-- adscribir, circunscribir, describir, escribir/reescribir, inscribir, prescribir, proscribir, sobrescribir,
-- subscribir, transcribir
match = "scribir",
forms = {
pp = "scrito",
irreg = true,
}
},
{
-- concluír/recluír; not excluír/incluír/ocluír
match = match_against_verbs("cluír", {"con", "re"}),
forms = {
-- all occurrences of accented í and ï in endings handled in combine_stem_ending()
vowel_alt = "ú",
short_pp = "cluso",
}
},
{
-- posuír; not desposuír
match = "^posuír",
forms = {
-- all occurrences of accented í and ï in endings handled in combine_stem_ending()
vowel_alt = "ú",
short_pp = "poseso",
}
},
{
-- remaining verbs in -uír (excluír/incluír/ocluír, diluír,
-- afluír/confluír/difluír/fluír/efluír/influír/refluír, atuír/desatuír,
-- atribuír/contribuír/distribuír/redistribuír/retribuír/substituír,
-- constituír/destituír/instituír/prostituír/reconstituír/restituír,
-- construír/desobstruír/destruír/instruír/obstruír/reconstruír, derruír,
-- desposuír, diminuír, luír/esluír, estatuír, imbuír, inmiscuír, intuír, puír, pruír)
match = "[uü]ír", -- this won't match -guir verbs (e.g. [[conseguir]]) or -quir verbs (e.g. [[delinquir]])
forms = {
-- all occurrences of accented í and ï in endings handled in combine_stem_ending()
vowel_alt = "ú",
}
},
{
-- We want to match advir, convir, devir, etc. but not ouvir, servir, etc. No way to avoid listing each verb.
match = match_against_verbs("vir", {"ad", "^a", "con", "contra", "de", "^desa", "inter", "pre", "pro", "sobre", "^"}),
forms = {
pres_2s = "vés", pres_3s = "vén", pres_2p = {"vindes", "vides"}, pres_3p = "veñen",
pres1_and_sub = "veñ",
full_impf = "viñ",
pret_conj = "irreg", pret = "viñe", pret_1s = "vín#", pret_3s = "veu",
pp = "vindo",
-- FIXME! The following is as in the RAG tables but may be a typo and should be vén for [[vir]] like pres_3s
imp_2s = "vén#",
irreg = true,
}
},
--------------------------------------------------------------------------------------------
-- misc --
--------------------------------------------------------------------------------------------
{
-- pór, antepor, apor/desapor, arrepor, compor/descompor/recompor, contrapor, depor, dispor/indispor/predispor,
-- empor, expor/sobreexpor/subexpor, impor/reimpor, interpor, opor, pospor, propor, repor, sobrepor,
-- superpor, supor/presupor, traspor, xustapor
match = "p[oó]r",
forms = {
pres_2s = "pós#", pres_3s = "pón#", pres_1p = "pomos", pres_2p = "pondes", pres_3p = "pón#",
pres1_and_sub = "poñ",
full_impf = "puñ",
pret_conj = "irreg", pret = "puxe",
fut = "por",
pers_inf = "po",
pers_inf_1s = function(base, prefix) return prefix == "" and "pór" or "por" end,
pers_inf_3s = function(base, prefix) return prefix == "" and "pór" or "por" end,
gerund = "pondo", pp = "posto",
irreg = true,
}
},
}
local function skip_slot(base, slot, allow_overrides)
if not allow_overrides and (base.basic_overrides[slot] or
base.refl and base.basic_reflexive_only_overrides[slot]) then
-- Skip any slots for which there are overrides.
return true
end
if base.only3s and (slot:find("^pp_f") or slot:find("^pp_mp")) then
-- diluviar, atardecer, neviscar; impersonal verbs have only masc sing pp
return true
end
if not slot:find("[123]") then
-- Don't skip non-personal slots.
return false
end
if base.nofinite then
return true
end
if (base.noimp or base.only3s or base.only3sp or base.only3p) and (slot:find("^imp_") or slot:find("^neg_imp_")) then
return true
end
if base.only3s and not slot:find("3s") then
-- diluviar, atardecer, neviscar
return true
end
if base.only3sp and not slot:find("3[sp]") then
-- atañer, concernir
return true
end
if base.only3p and not slot:find("3p") then
-- [[caer cuatro gotas]], [[caer chuzos de punta]], [[entrarle los siete males]]
return true
end
return false
end
-- Apply vowel alternations to stem.
local function apply_vowel_alternations(stem, alternations)
local alternation_stems = {}
local saw_pres1_and_sub = false
local saw_pres_stressed = false
local saw_imp2s_override = false
local origstem = stem
-- Treat final -gu, -qu as a consonant, so the previous vowel can alternate (e.g. conseguir -> consigo).
-- This means a verb in -guar can't have a u-ú alternation but I don't think there are any verbs like that.
stem = rsub(stem, "([gq])u$", "%1" .. TEMPC1)
-- Process alternations other than +.
for _, altobj in ipairs(alternations) do
local alt = altobj.form
local pres1_and_sub, pres_stressed, imp2s_override, err
if alt == "+" then
-- do nothing yet
else
local before_last_vowel, last_vowel, after_last_vowel = rmatch(stem, "^(.*)(" .. V .. ")(.-)$")
if alt == "i-e" then
if last_vowel == "e" or last_vowel == "i" then
pres1_and_sub = before_last_vowel .. "i" .. after_last_vowel
imp2s_override = pres1_and_sub
if last_vowel == "i" then
pres_stressed = before_last_vowel .. "e" .. after_last_vowel
end
else
err = "should have -e- or -i- as the last vowel"
end
elseif alt == "i" then
if last_vowel == "e" then
pres1_and_sub = before_last_vowel .. "i" .. after_last_vowel
pres_stressed = pres1_and_sub
else
err = "should have -e- as the last vowel"
end
elseif alt == "u-o" then
if last_vowel == "o" or last_vowel == "u" then
pres1_and_sub = before_last_vowel .. "u" .. after_last_vowel
imp2s_override = pres1_and_sub
if last_vowel == "u" then
pres_stressed = before_last_vowel .. "o" .. after_last_vowel
end
else
err = "should have -o- or -u- as the last vowel"
end
elseif alt == "u" then
if last_vowel == "o" then
pres1_and_sub = before_last_vowel .. "u" .. after_last_vowel
pres_stressed = pres1_and_sub
else
err = "should have -o- as the last vowel"
end
elseif alt == "í" then
if last_vowel == "i" then
pres_stressed = before_last_vowel .. "í" .. after_last_vowel
else
err = "should have -i- as the last vowel"
end
elseif alt == "ú" then
if last_vowel == "u" or last_vowel == "ü" then
pres_stressed = before_last_vowel .. "ú" .. after_last_vowel
else
err = "should have -u- or -ü- as the last vowel"
end
else
error("Internal error: Unrecognized vowel alternation '" .. alt .. "'")
end
end
local function unapply_u_mod(val)
if val then
return {form = val:gsub(TEMPC1, "u"), footnotes = altobj.footnotes}, true
else
return nil, false
end
end
pres1_and_sub, saw_pres1_and_sub = unapply_u_mod(pres1_and_sub)
pres_stressed, saw_pres_stressed = unapply_u_mod(pres_stressed)
imp2s_override, saw_imp2s_override = unapply_u_mod(imp2s_override)
table.insert(alternation_stems, {
altobj = altobj,
pres1_and_sub = pres1_and_sub,
pres_stressed = pres_stressed,
imp2s_override = imp2s_override,
err = err
})
end
-- Now do +. We check to see which stems are used by other alternations and specify those so any footnotes are
-- properly attached.
for _, alternation_stem in ipairs(alternation_stems) do
if alternation_stem.altobj.form == "+" then
local stemobj = {form = origstem, footnotes = alternation_stem.altobj.footnotes}
alternation_stem.pres1_and_sub = saw_pres1_and_sub and stemobj or nil
alternation_stem.pres_stressed = saw_pres_stressed and stemobj or nil
alternation_stem.imp2s_override = saw_imp2s_override and stemobj or nil
end
end
return alternation_stems
end
-- Add the `stem` to the `ending` for the given `slot` and apply any phonetic modifications.
-- WARNING: This function is written very carefully; changes to it can easily have unintended consequences.
local function combine_stem_ending(base, slot, prefix, stem, ending, dont_include_prefix)
-- If the ending begins with an acute accent, it goes after the last vowel, but we don't have to do anything.
-- Use the full stem for checking for -gui ending and such, because 'stem' is just 'u' for [[arguir]],
-- [[delinquir]].
local full_stem = prefix .. stem
-- Include the prefix in the stem unless dont_include_prefix is given (used for the past participle stem).
if not dont_include_prefix then
stem = full_stem
end
-- If ending begins with i, it must get an accent after a/o/u to prevent the two merging into a diphthong:
-- caer -> caíches, caído; doer -> doíches, doído; concluír -> concluíches, concluído.
if ending:find("^i") and stem:find("[aouü]$") and not stem:find("[gq]u$") then
-- Special case for impf_1p/impf_2p, where the i is unstressed and changes into ï. FIXME: Maybe we should be
-- checking the slot value instead.
if ending == "iamos" or ending == "iades" then
ending = ending:gsub("^i", "ï")
else
ending = ending:gsub("^i", "í")
end
end
-- Spelling changes in the stem; it depends on whether the stem given is the pre-front-vowel or
-- pre-back-vowel variant, as indicated by `frontback`. We want these front-back spelling changes to happen
-- between stem and ending, not between prefix and stem; the prefix may not have the same "front/backness"
-- as the stem.
local is_front = rfind(ending, "^[eiéíï]")
if base.frontback == "front" and not is_front then
stem = stem:gsub("c$", "z") -- coñecer -> coñezo, vencer -> venzo, inmiscir -> inmiszo
stem = stem:gsub("gu$", "g") -- distinguir -> distingo, conseguir -> consigo
stem = stem:gsub("qu$", "c") -- delinquir -> delinco
stem = stem:gsub("gü$", "gu") -- argüír -> arguamos
elseif base.frontback == "back" and is_front then
stem = stem:gsub("gu$", "gü") -- iguar -> igüei
stem = stem:gsub("g$", "gu") -- cargar -> carguei, apagar -> apaguei
stem = stem:gsub("c$", "qu") -- marcar -> marquei
stem = rsub(stem, "z$", "c") -- aderezar -> aderecei
end
local retval = stem .. ending
if retval:find("#$") then -- remove final accent if no prefix
retval = retval:gsub("#$", "")
if prefix == "" then
retval = com.remove_final_accent(retval)
end
end
return retval
end
local function add3(base, slot, stems, endings, footnotes, allow_overrides)
if skip_slot(base, slot, allow_overrides) then
return
end
local function do_combine_stem_ending(stem, ending)
return combine_stem_ending(base, slot, base.prefix, stem, ending)
end
iut.add_forms(base.forms, slot, stems, endings, do_combine_stem_ending, nil, nil, footnotes)
end
local function insert_form(base, slot, form)
if not skip_slot(base, slot) then
iut.insert_form(base.forms, slot, form)
end
end
local function insert_forms(base, slot, forms)
if not skip_slot(base, slot) then
iut.insert_forms(base.forms, slot, forms)
end
end
local function add_single_stem_tense(base, slot_pref, stems, s1, s2, s3, p1, p2, p3)
local function addit(slot, ending)
add3(base, slot_pref .. "_" .. slot, stems, ending)
end
addit("1s", s1)
addit("2s", s2)
addit("3s", s3)
addit("1p", p1)
addit("2p", p2)
addit("3p", p3)
end
local function construct_stems(base, vowel_alt, imp_only)
local stems = {}
if imp_only then
stems.imp2s_override =
-- If no_pres_stressed given, there should be no imp_2s.
not base.no_pres_stressed and (
base.stems.imp2s_override or
vowel_alt.imp2s_override or
nil) or nil
base.this_stems = stems
return
end
local function combine(slot, stem, ending)
return combine_stem_ending(base, slot, base.prefix, stem, ending, "dont include prefix")
end
stems.pres_unstressed = base.stems.pres_unstressed or base.inf_stem
stems.pres_stressed =
-- If no_pres_stressed given, pres_stressed stem should be empty so no forms are generated.
base.no_pres_stressed and {} or
base.stems.pres_stressed or
vowel_alt.pres_stressed or
base.inf_stem
stems.pres1_and_sub =
-- If no_pres_stressed given, the entire subjunctive is missing.
base.no_pres_stressed and {} or
-- If no_pres1_and_sub given, pres1 and entire subjunctive are missing.
base.no_pres1_and_sub and {} or
base.stems.pres1_and_sub or
vowel_alt.pres1_and_sub or
nil
stems.pres1 = base.stems.pres1 or stems.pres1_and_sub or stems.pres_stressed
stems.impf = base.stems.impf or base.inf_stem
stems.full_impf = base.stems.full_impf
stems.pret_base = base.stems.pret_base or base.inf_stem
stems.pret_conj = base.stems.pret_conj or base.conj
stems.pret = base.stems.pret or iut.map_forms(iut.convert_to_general_list_form(stems.pret_base),
-- use combine_stem_ending esp. so we get saíra etc.
function(form) return combine("pret", form, base.conj_vowel) end)
stems.short_pret = base.stems.gl_short_pret or iut.map_forms(iut.convert_to_general_list_form(stems.pret),
function(form) return rsub(form, com.V .. "$", "") end)
stems.fut = base.stems.fut or base.inf_stem .. base.conj
stems.cond = base.stems.cond or stems.fut
stems.pres_sub_stressed = base.stems.pres_sub_stressed or stems.pres1
stems.pres_sub_unstressed = base.stems.pres_sub_unstressed or stems.pres1_and_sub or stems.pres_unstressed
stems.sub_conj = base.stems.sub_conj or base.conj
stems.plup = base.stems.plup or stems.pret
-- Needed for plup_1p and plup_2p if there's an accent in the regular pluperfect stem (as for [[saír]]).
stems.plup_unstressed = iut.map_forms(iut.convert_to_general_list_form(stems.plup), com.remove_final_accent)
stems.impf_sub = base.stems.impf_sub or stems.pret
-- Needed for impf_sub_1p and impf_sub_2p. We can't just add an acute accent because there may already be one
-- (as for [[saír]]).
stems.impf_sub_antepenult_stressed = iut.map_forms(iut.convert_to_general_list_form(stems.impf_sub), com.add_final_accent)
stems.fut_sub = base.stems.fut_sub or stems.pret
-- use combine_stem_ending esp. so we get saír, saírmos, etc.
stems.pers_inf = base.stems.pers_inf or combine("pers_inf", base.inf_stem, base.conj_vowel)
-- use combine_stem_ending esp. so we get roído, caído, etc.
stems.pp = base.stems.pp or combine("pp_ms", base.inf_stem, base.conj == "ar" and "ado" or "ido")
stems.pp_ms = stems.pp
local function masc_to_fem(form)
if rfind(form, "o$") then
return rsub(form, "o$", "a")
else
return form
end
end
stems.pp_fs = iut.map_forms(iut.convert_to_general_list_form(stems.pp_ms), masc_to_fem)
if base.stems.short_pp then
stems.short_pp_ms = base.stems.short_pp
stems.short_pp_fs = iut.map_forms(iut.convert_to_general_list_form(stems.short_pp_ms), masc_to_fem)
end
base.this_stems = stems
end
local function add_present_indic(base)
local stems = base.this_stems
local function addit(slot, stems, ending)
add3(base, "pres_" .. slot, stems, ending)
end
local s2, s3, p1, p2, p3
if base.conj == "ar" then
s2, s3, p1, p2, p3 = "as", "a", "amos", "ades", "an"
elseif base.conj == "er" or base.conj == "or" then -- verbs in -por have the present overridden
s2, s3, p1, p2, p3 = "es", "e", "emos", "edes", "en"
elseif base.conj == "ir" then
s2, s3, p1, p2, p3 = "es", "e", "imos", "ides", "en"
else
error("Internal error: Unrecognized conjugation " .. base.conj)
end
addit("1s", stems.pres1, "o")
addit("2s", stems.pres_stressed, s2)
addit("3s", stems.pres_stressed, s3)
addit("1p", stems.pres_unstressed, p1)
addit("2p", stems.pres_unstressed, p2)
addit("3p", stems.pres_stressed, p3)
end
local function add_present_subj(base)
local stems = base.this_stems
local function addit(slot, stems, ending)
add3(base, "pres_sub_" .. slot, stems, ending)
end
local s1, s2, s3, p1, p2, p3
if stems.sub_conj == "ar" then
s1, s2, s3, p1, p2, p3 = "e", "es", "e", "emos", "edes", "en"
else
s1, s2, s3, p1, p2, p3 = "a", "as", "a", "amos", "ades", "an"
end
addit("1s", stems.pres_sub_stressed, s1)
addit("2s", stems.pres_sub_stressed, s2)
addit("3s", stems.pres_sub_stressed, s3)
addit("1p", stems.pres_sub_unstressed, p1)
addit("2p", stems.pres_sub_unstressed, p2)
addit("3p", stems.pres_sub_stressed, p3)
end
local function add_finite_non_present(base)
local stems = base.this_stems
local function add_tense(slot, stem, s1, s2, s3, p1, p2, p3)
add_single_stem_tense(base, slot, stem, s1, s2, s3, p1, p2, p3)
end
if stems.full_impf then
add_tense("impf", stems.full_impf, "a", "as", "a", "amos", "ades", "an")
elseif base.conj == "ar" then
add_tense("impf", stems.impf, "aba", "abas", "aba", "abamos", "abades", "aban")
else
add_tense("impf", stems.impf, "ía", "ías", "ía", "iamos", "iades", "ían")
end
if stems.pret_conj == "irreg" then
add_tense("pret", stems.short_pret, "en", nil, "o")
add_tense("pret", stems.pret, nil, "ches", nil, "mos", "stes", "ron")
elseif stems.pret_conj == "ar" then
add_tense("pret", stems.pret_base, "ei", "aches", "ou", "amos", "astes", "aron")
elseif stems.pret_conj == "er" then
add_tense("pret", stems.pret_base, "ín", "iches", "eu", "emos", "estes", "eron")
else
add_tense("pret", stems.pret_base, "ín", "iches", "iu", "imos", "istes", "iron")
end
add_tense("plup", stems.plup, "ra", "ras", "ra", nil, nil, "ran")
add_tense("plup", stems.plup_unstressed, nil, nil, nil, "ramos", "rades", nil)
add_tense("impf_sub", stems.impf_sub, "se", "ses", "se", nil, nil, "sen")
add_tense("impf_sub", stems.impf_sub_antepenult_stressed, nil, nil, nil, "semos", "sedes", nil)
add_tense("fut_sub", stems.fut_sub, "r", "res", "r", "rmos", "rdes", "ren")
add_tense("fut", stems.fut, "ei", "ás", "á", "emos", "edes", "án")
add_tense("cond", stems.cond, "ía", "ías", "ía", "iamos", "iades", "ían")
-- [[pór]] needs overrides of the pers_inf_1s and pers_inf_3s.
add_tense("pers_inf", stems.pers_inf, "r", "res", "r", "rmos", "rdes", "ren")
end
local function add_non_finite_forms(base)
local stems = base.this_stems
local function addit(slot, stems, ending, footnotes)
add3(base, slot, stems, ending, footnotes)
end
insert_form(base, "infinitive", {form = base.verb})
-- Also insert "infinitive + reflexive pronoun" combinations if we're handling a reflexive verb. See comment below
-- for "gerund + reflexive pronoun" combinations.
if base.refl then
for _, persnum in ipairs(person_number_list) do
insert_form(base, "infinitive_" .. persnum, {form = base.verb})
end
end
-- verbs in -por have the gerund overridden
local ger_ending = base.conj == "ar" and "ando" or base.conj == "er" and "endo" or "indo"
addit("gerund", stems.pres_unstressed, ger_ending)
-- Also insert "gerund + reflexive pronoun" combinations if we're handling a reflexive verb. We insert exactly the
-- same form as for the bare gerund; later on in add_reflexive_or_fixed_clitic_to_forms(), we add the appropriate
-- clitic pronouns. It's important not to do this for non-reflexive verbs, because in that case, the clitic
-- pronouns won't be added, and {{gl-verb form of}} will wrongly consider all these combinations as possible
-- inflections of the bare gerund. Thanks to [[User:JeffDoozan]] for this bug fix.
if base.refl then
for _, persnum in ipairs(person_number_list) do
addit("gerund_" .. persnum, stems.pres_unstressed, ger_ending)
end
end
-- Skip the long/short past participle footnotes if called from {{gl-verb}} so they don't show in the headword.
local long_pp_footnotes =
stems.short_pp_ms and base.alternant_multiword_spec.source_template ~= "gl-verb" and {long_pp_footnote} or nil
addit("pp_ms", stems.pp_ms, "", long_pp_footnotes)
if not base.pp_inv then
addit("pp_fs", stems.pp_fs, "", long_pp_footnotes)
addit("pp_mp", stems.pp_ms, "s", long_pp_footnotes)
addit("pp_fp", stems.pp_fs, "s", long_pp_footnotes)
end
if stems.short_pp_ms then
local short_pp_footnotes =
stems.short_pp_ms and base.alternant_multiword_spec.source_template ~= "gl-verb" and {short_pp_footnote} or nil
addit("short_pp_ms", stems.short_pp_ms, "", short_pp_footnotes)
if not base.pp_inv then
addit("short_pp_fs", stems.short_pp_fs, "", short_pp_footnotes)
addit("short_pp_mp", stems.short_pp_ms, "s", short_pp_footnotes)
addit("short_pp_fp", stems.short_pp_fs, "s", short_pp_footnotes)
end
end
end
local function add_imperatives(base)
for _, vowel_alt in ipairs(base.vowel_alt_stems) do
construct_stems(base, vowel_alt, "imp only")
local stems = base.this_stems
if stems.imp2s_override then
add3(base, "imp_2s", stems.imp2s_override, base.conj == "ar" and "a" or "e")
else
-- Copy pres3s to imperative since they are almost always the same.
insert_forms(base, "imp_2s", iut.map_forms(base.forms.pres_3s, function(form) return form end))
end
end
if not skip_slot(base, "imp_2p") then
-- Copy pres2p to imperative 2p minus -s since they are almost always the same.
-- But not if there's an override, to avoid possibly throwing an error.
insert_forms(base, "imp_2p", iut.map_forms(base.forms.pres_2p, function(form)
local form_no_s = rmatch(form, "^(.*)s$")
if not form_no_s then
error("Can't derive second-person plural imperative from second-person plural present indicative " ..
"because form '" .. form .. "' doesn't end in -s")
end
return form_no_s
end))
end
-- Copy subjunctives to imperatives, unless there's an override for the given slot (as with the imp_1p of [[ir]]).
for _, persnum in ipairs({"3s", "1p", "3p"}) do
local from = "pres_sub_" .. persnum
local to = "imp_" .. persnum
insert_forms(base, to, iut.map_forms(base.forms[from], function(form) return form end))
end
end
local function process_slot_overrides(base, filter_slot, reflexive_only)
local overrides = reflexive_only and base.basic_reflexive_only_overrides or base.basic_overrides
for slot, forms in pairs(overrides) do
if not filter_slot or filter_slot(slot) then
add3(base, slot, forms, "", nil, "allow overrides")
end
end
end
-- Prefix `form` with `clitic`, adding fixed text `between` between them. Add links as appropriate unless the user
-- requested no links. Check whether form already has brackets (as will be the case if the form has a fixed clitic).
local function prefix_clitic_to_form(base, clitic, between, form)
if base.alternant_multiword_spec.args.noautolinkverb then
return clitic .. between .. form
else
local clitic_pref = "[[" .. clitic .. "]]" .. between
if form:find("%[%[") then
return clitic_pref .. form
else
return clitic_pref .. "[[" .. form .. "]]"
end
end
end
-- Add the appropriate clitic pronouns in `clitics` to the forms in `base_slot`. `store_cliticized_form` is a function
-- of three arguments (clitic, formobj, cliticized_form) and should store the cliticized form for the specified clitic
-- and form object.
local function suffix_clitic_to_forms(base, base_slot, clitics, store_cliticized_form)
if not base.forms[base_slot] then
-- This can happen, e.g. in only3s/only3sp/only3p verbs.
return
end
for _, formobj in ipairs(base.forms[base_slot]) do
-- Figure out the correct accenting of the verb when a clitic pronoun is attached to it. We may need to
-- add or remove an accent mark:
-- (1) No accent mark currently, none needed: infinitive sentar -> sentarse; imperative singular ten -> tente;
-- (2) Accent mark currently, still needed: infinitive concluír -> concluírse;
-- (3) No accent mark currently, accent needed: imperative singular sinte -> síntete;
-- (4) Accent mark currently, not needed: third singular sentirá -> sentirase, imperative singular dá -> date.
local syllables = com.syllabify(formobj.form)
local sylno = com.stressed_syllable(syllables)
table.insert(syllables, "lo") -- arbitrary stand-in
local needs_accent = com.accent_needed(syllables, sylno)
if needs_accent then
syllables[sylno] = com.add_accent_to_syllable(syllables[sylno])
else
syllables[sylno] = com.remove_accent_from_syllable(syllables[sylno])
end
table.remove(syllables) -- remove added clitic pronoun
local reaccented_form = table.concat(syllables)
for _, clitic in ipairs(clitics) do
local cliticized_form
-- Some further special cases.
if base_slot:find("_1p$") and clitic == "nos" then
-- Final -s disappears: sintamos + nos -> sintámonos
cliticized_form = reaccented_form:gsub("s$", "") .. clitic
elseif clitic:find("^[oa]s?$") then
if reaccented_form:find("[rs]$") then
cliticized_form = reaccented_form:gsub("[rs]$", "l") .. clitic
elseif reaccented_form:find(V .. "[iu]$") then
cliticized_form = reaccented_form .. "n" .. clitic
else
cliticized_form = reaccented_form .. clitic
end
else
cliticized_form = reaccented_form .. clitic
end
store_cliticized_form(clitic, formobj, cliticized_form)
end
end
end
-- Add a reflexive pronoun or fixed clitic (FIXME: not working), as appropriate to the base forms that were generated.
-- `do_joined` means to do only the forms where the pronoun is joined to the end of the form; otherwise, do only the
-- forms where it is not joined and precedes the form.
local function add_reflexive_or_fixed_clitic_to_forms(base, do_reflexive, do_joined)
for _, slotaccel in ipairs(base.alternant_multiword_spec.verb_slots_basic) do
local slot, accel = unpack(slotaccel)
local clitic
if not do_reflexive then
clitic = base.clitic
elseif slot:find("[123]") then
local persnum = slot:match("^.*_(.-)$")
clitic = person_number_to_reflexive_pronoun[persnum]
else
clitic = "se"
end
if base.forms[slot] then
if do_reflexive and slot:find("^pp_") or slot == "infinitive_linked" then
-- do nothing with reflexive past participles or with infinitive linked (handled at the end)
elseif slot:find("^neg_imp_") then
error("Internal error: Should not have forms set for negative imperative at this stage")
else
local slot_has_suffixed_clitic = not slot:find("_sub")
-- Maybe generate non-reflexive parts and separated syntactic variants for use in
-- {{gl-verb form of}}. See comment in add_slots() above `need_special_verb_form_of_slots`.
-- Check for do_joined so we only run this code once.
if do_reflexive and do_joined and base.alternant_multiword_spec.source_template == "gl-verb form of" and
-- Skip personal variants of infinitives and gerunds so we don't think [[arrependendo]] is a
-- non-reflexive equivalent of [[arrependendo-me]].
not slot:find("infinitive_") and not slot:find("gerund_") then
-- Clone the forms because we will be destructively modifying them just below, adding the reflexive
-- pronoun.
insert_forms(base, slot .. "_non_reflexive", mw.clone(base.forms[slot]))
if slot_has_suffixed_clitic then
insert_forms(base, slot .. "_variant", iut.map_forms(base.forms[slot], function(form)
return prefix_clitic_to_form(base, clitic, " ... ", form)
end))
end
end
if slot_has_suffixed_clitic then
if do_joined then
suffix_clitic_to_forms(base, slot, {clitic},
function(clitic, formobj, cliticized_form)
formobj.form = cliticized_form
end
)
end
elseif not do_joined then
-- Add clitic as separate word before all other forms.
for _, form in ipairs(base.forms[slot]) do
form.form = prefix_clitic_to_form(base, clitic, " ", form.form)
end
end
end
end
end
end
local function handle_infinitive_linked(base)
-- Compute linked versions of potential lemma slots, for use in {{gl-verb}}.
-- We substitute the original lemma (before removing links) for forms that
-- are the same as the lemma, if the original lemma has links.
for _, slot in ipairs({"infinitive"}) do
insert_forms(base, slot .. "_linked", iut.map_forms(base.forms[slot], function(form)
if form == base.lemma and rfind(base.linked_lemma, "%[%[") then
return base.linked_lemma
else
return form
end
end))
end
end
local function generate_negative_imperatives(base)
-- Copy subjunctives to negative imperatives, preceded by "non".
for _, persnum in ipairs(neg_imp_person_number_list) do
local from = "pres_sub_" .. persnum
local to = "neg_imp_" .. persnum
insert_forms(base, to, iut.map_forms(base.forms[from], function(form)
if base.alternant_multiword_spec.args.noautolinkverb then
return "non " .. form
elseif form:find("%[%[") then
-- already linked, e.g. when reflexive
return "[[non]] " .. form
else
return "[[non]] [[" .. form .. "]]"
end
end))
end
end
-- Process specs given by the user using 'addnote[SLOTSPEC][FOOTNOTE][FOOTNOTE][...]'.
local function process_addnote_specs(base)
for _, spec in ipairs(base.addnote_specs) do
for _, slot_spec in ipairs(spec.slot_specs) do
slot_spec = "^" .. slot_spec .. "$"
for slot, forms in pairs(base.forms) do
if rfind(slot, slot_spec) then
-- To save on memory, side-effect the existing forms.
for _, form in ipairs(forms) do
form.footnotes = iut.combine_footnotes(form.footnotes, spec.footnotes)
end
end
end
end
end
end
local function add_missing_links_to_forms(base)
-- Any forms without links should get them now. Redundant ones will be stripped later.
for slot, forms in pairs(base.forms) do
for _, form in ipairs(forms) do
if not form.form:find("%[%[") then
form.form = "[[" .. form.form .. "]]"
end
end
end
end
local function conjugate_verb(base)
for _, vowel_alt in ipairs(base.vowel_alt_stems) do
construct_stems(base, vowel_alt)
add_present_indic(base)
add_present_subj(base)
end
add_finite_non_present(base)
add_non_finite_forms(base)
-- do non-reflexive non-imperative slot overrides
process_slot_overrides(base, function(slot)
return not slot:find("^imp_") and not slot:find("^neg_imp_")
end)
-- This should happen after process_slot_overrides() in case a derived slot is based on an override
-- (as with the imp_3s of [[dar]], [[estar]]).
add_imperatives(base)
-- do non-reflexive positive imperative slot overrides
process_slot_overrides(base, function(slot)
return slot:find("^imp_")
end)
-- We need to add joined reflexives, then joined and non-joined clitics, then non-joined reflexives, so we get
-- [[arrepéndete]] but [[non]] [[te]] [[arrependas]].
if base.refl then
add_reflexive_or_fixed_clitic_to_forms(base, "do reflexive", "do joined")
process_slot_overrides(base, nil, "do reflexive") -- do reflexive-only slot overrides
add_reflexive_or_fixed_clitic_to_forms(base, "do reflexive", false)
end
-- This should happen after add_reflexive_or_fixed_clitic_to_forms() so negative imperatives get the reflexive pronoun
-- and clitic in them.
generate_negative_imperatives(base)
-- do non-reflexive negative imperative slot overrides
-- FIXME: What about reflexive negative imperatives?
process_slot_overrides(base, function(slot)
return slot:find("^neg_imp_")
end)
-- This should happen before add_missing_links_to_forms() so that the comparison `form == base.lemma`
-- in handle_infinitive_linked() works correctly and compares unlinked forms to unlinked forms.
handle_infinitive_linked(base)
process_addnote_specs(base)
if not base.alternant_multiword_spec.args.noautolinkverb then
add_missing_links_to_forms(base)
end
end
local function parse_indicator_spec(angle_bracket_spec)
-- Store the original angle bracket spec so we can reconstruct the overall conj spec with the lemma(s) in them.
local base = {
angle_bracket_spec = angle_bracket_spec,
user_basic_overrides = {},
user_stems = {},
addnote_specs = {},
}
local function parse_err(msg)
error(msg .. ": " .. angle_bracket_spec)
end
local function fetch_footnotes(separated_group)
local footnotes
for j = 2, #separated_group - 1, 2 do
if separated_group[j + 1] ~= "" then
parse_err("Extraneous text after bracketed footnotes: '" .. table.concat(separated_group) .. "'")
end
if not footnotes then
footnotes = {}
end
table.insert(footnotes, separated_group[j])
end
return footnotes
end
local inside = angle_bracket_spec:match("^<(.*)>$")
assert(inside)
if inside == "" then
return base
end
local segments = put.parse_balanced_segment_run(inside, "[", "]")
local dot_separated_groups = put.split_alternating_runs(segments, "%.")
for i, dot_separated_group in ipairs(dot_separated_groups) do
local first_element = dot_separated_group[1]
if first_element == "addnote" then
local spec_and_footnotes = fetch_footnotes(dot_separated_group)
if #spec_and_footnotes < 2 then
parse_err("Spec with 'addnote' should be of the form 'addnote[SLOTSPEC][FOOTNOTE][FOOTNOTE][...]'")
end
local slot_spec = table.remove(spec_and_footnotes, 1)
local slot_spec_inside = rmatch(slot_spec, "^%[(.*)%]$")
if not slot_spec_inside then
parse_err("Internal error: slot_spec " .. slot_spec .. " should be surrounded with brackets")
end
local slot_specs = rsplit(slot_spec_inside, ",")
-- FIXME: Here, [[Module:it-verb]] called strip_spaces(). Generally we don't do this. Should we?
table.insert(base.addnote_specs, {slot_specs = slot_specs, footnotes = spec_and_footnotes})
elseif indicator_flags[first_element] then
if #dot_separated_group > 1 then
parse_err("No footnotes allowed with '" .. first_element .. "' spec")
end
if base[first_element] then
parse_err("Spec '" .. first_element .. "' specified twice")
end
base[first_element] = true
elseif rfind(first_element, ":") then
local colon_separated_groups = put.split_alternating_runs(dot_separated_group, "%s*:%s*")
local first_element = colon_separated_groups[1][1]
if #colon_separated_groups[1] > 1 then
parse_err("Can't attach footnotes directly to '" .. first_element .. "' spec; attach them to the " ..
"colon-separated values following the initial colon")
end
if overridable_stems[first_element] then
if base.user_stems[first_element] then
parse_err("Overridable stem '" .. first_element .. "' specified twice")
end
table.remove(colon_separated_groups, 1)
base.user_stems[first_element] = overridable_stems[first_element](colon_separated_groups,
{prefix = first_element, base = base, parse_err = parse_err, fetch_footnotes = fetch_footnotes})
else -- assume a basic override; we validate further later when the possible slots are available
if base.user_basic_overrides[first_element] then
parse_err("Basic override '" .. first_element .. "' specified twice")
end
table.remove(colon_separated_groups, 1)
base.user_basic_overrides[first_element] = allow_multiple_values(colon_separated_groups,
{prefix = first_element, base = base, parse_err = parse_err, fetch_footnotes = fetch_footnotes})
end
else
local comma_separated_groups = put.split_alternating_runs(dot_separated_group, "%s*,%s*")
for j = 1, #comma_separated_groups do
local alt = comma_separated_groups[j][1]
if not vowel_alternants[alt] then
if #comma_separated_groups == 1 then
parse_err("Unrecognized spec or vowel alternant '" .. alt .. "'")
else
parse_err("Unrecognized vowel alternant '" .. alt .. "'")
end
end
if base.vowel_alt then
for _, existing_alt in ipairs(base.vowel_alt) do
if existing_alt.form == alt then
parse_err("Vowel alternant '" .. alt .. "' specified twice")
end
end
else
base.vowel_alt = {}
end
table.insert(base.vowel_alt, {form = alt, footnotes = fetch_footnotes(comma_separated_groups[j])})
end
end
end
return base
end
-- Normalize all lemmas, substituting the pagename for blank lemmas and adding links to multiword lemmas.
local function normalize_all_lemmas(alternant_multiword_spec, head)
-- (1) Add links to all before and after text. Remember the original text so we can reconstruct the verb spec later.
if not alternant_multiword_spec.args.noautolinktext then
iut.add_links_to_before_and_after_text(alternant_multiword_spec, "remember original")
end
-- (2) Remove any links from the lemma, but remember the original form
-- so we can use it below in the 'lemma_linked' form.
iut.map_word_specs(alternant_multiword_spec, function(base)
if base.lemma == "" then
base.lemma = head
end
base.user_specified_lemma = base.lemma
base.lemma = m_links.remove_links(base.lemma)
local refl_verb = base.lemma
local verb, refl = rmatch(refl_verb, "^(.-)(se)$")
if not verb then
verb, refl = refl_verb, nil
end
base.user_specified_verb = verb
base.refl = refl
base.verb = base.user_specified_verb
local linked_lemma
if alternant_multiword_spec.args.noautolinkverb or base.user_specified_lemma:find("%[%[") then
linked_lemma = base.user_specified_lemma
elseif base.refl then
-- Reconstruct the linked lemma with separate links around base verb, reflexive pronoun and clitic.
linked_lemma = base.user_specified_verb == base.verb and "[[" .. base.user_specified_verb .. "]]" or
"[[" .. base.verb .. "|" .. base.user_specified_verb .. "]]"
linked_lemma = linked_lemma .. (refl and "[[" .. refl .. "]]" or "")
else
-- Add links to the lemma so the user doesn't specifically need to, since we preserve
-- links in multiword lemmas and include links in non-lemma forms rather than allowing
-- the entire form to be a link.
linked_lemma = iut.add_links(base.user_specified_lemma)
end
base.linked_lemma = linked_lemma
end)
end
local function detect_indicator_spec(base)
if (base.only3s and 1 or 0) + (base.only3sp and 1 or 0) + (base.only3p and 1 or 0) > 1 then
error("Only one of 'only3s', 'only3sp' and 'only3p' can be specified")
end
base.forms = {}
base.stems = {}
base.basic_overrides = {}
base.basic_reflexive_only_overrides = {}
if not base.no_built_in then
for _, built_in_conj in ipairs(built_in_conjugations) do
if type(built_in_conj.match) == "function" then
base.prefix, base.non_prefixed_verb = built_in_conj.match(base.verb)
elseif built_in_conj.match:find("^%^") and rsub(built_in_conj.match, "^%^", "") == base.verb then
-- begins with ^, for exact match, and matches
base.prefix, base.non_prefixed_verb = "", base.verb
else
base.prefix, base.non_prefixed_verb = rmatch(base.verb, "^(.*)(" .. built_in_conj.match .. ")$")
end
if base.prefix then
-- we found a built-in verb
for stem, forms in pairs(built_in_conj.forms) do
if type(forms) == "function" then
forms = forms(base, base.prefix)
end
if stem:find("^refl_") then
stem = stem:gsub("^refl_", "")
if not base.alternant_multiword_spec.verb_slots_basic_map[stem] then
error("Internal error: setting for 'refl_" .. stem .. "' does not refer to a basic verb slot")
end
base.basic_reflexive_only_overrides[stem] = forms
elseif base.alternant_multiword_spec.verb_slots_basic_map[stem] then
-- an individual form override of a basic form
base.basic_overrides[stem] = forms
else
base.stems[stem] = forms
end
end
break
end
end
end
-- Override built-in-verb stems and overrides with user-specified ones.
for stem, values in pairs(base.user_stems) do
base.stems[stem] = values
end
for override, values in pairs(base.user_basic_overrides) do
if not base.alternant_multiword_spec.verb_slots_basic_map[override] then
error("Unrecognized override '" .. override .. "': " .. base.angle_bracket_spec)
end
base.basic_overrides[override] = values
end
base.prefix = base.prefix or ""
base.non_prefixed_verb = base.non_prefixed_verb or base.verb
local inf_stem, suffix = rmatch(base.non_prefixed_verb, "^(.*)([aeiíoó]r)$")
if not inf_stem then
error("Unrecognized infinitive: " .. base.verb)
end
base.inf_stem = inf_stem
suffix = suffix == "ór" and "or" or suffix == "ír" and "ir" or suffix
base.conj = suffix
base.conj_vowel = suffix == "ar" and "a" or suffix == "ir" and "i" or "e"
base.frontback = suffix == "ar" and "back" or "front"
if base.stems.vowel_alt then -- built-in verb with specified vowel alternation
if base.vowel_alt then
error(base.verb .. " is a recognized built-in verb, and should not have vowel alternations specified with it")
end
base.vowel_alt = iut.convert_to_general_list_form(base.stems.vowel_alt)
end
-- Propagate built-in-verb indicator flags to `base` and combine with user-specified flags.
for indicator_flag, _ in pairs(indicator_flags) do
base[indicator_flag] = base[indicator_flag] or base.stems[indicator_flag]
end
-- Convert vowel alternation indicators into stems.
local vowel_alt = base.vowel_alt or {{form = "+"}}
base.vowel_alt_stems = apply_vowel_alternations(base.inf_stem, vowel_alt)
for _, vowel_alt_stems in ipairs(base.vowel_alt_stems) do
if vowel_alt_stems.err then
error("To use '" .. vowel_alt_stems.altobj.form .. "', present stem '" .. base.prefix .. base.inf_stem .. "' " ..
vowel_alt_stems.err)
end
end
end
local function detect_all_indicator_specs(alternant_multiword_spec)
-- Propagate some settings up; some are used internally, others by [[Module:gl-headword]].
iut.map_word_specs(alternant_multiword_spec, function(base)
-- Internal indicator flags. Do these before calling detect_indicator_spec() because add_slots() uses them.
for _, prop in ipairs { "refl", "clitic" } do
if base[prop] then
alternant_multiword_spec[prop] = true
end
end
base.alternant_multiword_spec = alternant_multiword_spec
end)
add_slots(alternant_multiword_spec)
alternant_multiword_spec.vowel_alt = {}
iut.map_word_specs(alternant_multiword_spec, function(base)
detect_indicator_spec(base)
-- User-specified indicator flags. Do these after calling detect_indicator_spec() because the latter may set these
-- indicators for built-in verbs.
for prop, _ in pairs(indicator_flags) do
if base[prop] then
alternant_multiword_spec[prop] = true
end
end
-- Vowel alternants. Do these after calling detect_indicator_spec() because the latter sets base.vowel_alt for
-- built-in verbs.
if base.vowel_alt then
for _, altobj in ipairs(base.vowel_alt) do
m_table.insertIfNot(alternant_multiword_spec.vowel_alt, altobj.form)
end
end
end)
end
local function add_categories_and_annotation(alternant_multiword_spec, base, multiword_lemma)
local function insert_ann(anntype, value)
m_table.insertIfNot(alternant_multiword_spec.annotation[anntype], value)
end
local function insert_cat(cat, also_when_multiword)
-- Don't place multiword terms in categories like 'Galician verbs ending in -ar' to avoid spamming the
-- categories with such terms.
if also_when_multiword or not multiword_lemma then
m_table.insertIfNot(alternant_multiword_spec.categories, "Galician " .. cat)
end
end
if check_for_red_links and alternant_multiword_spec.source_template == "gl-conj" and multiword_lemma then
for _, slot_and_accel in ipairs(alternant_multiword_spec.all_verb_slots) do
local slot = slot_and_accel[1]
local forms = base.forms[slot]
local must_break = false
if forms then
for _, form in ipairs(forms) do
if not form.form:find("%[%[") then
local title = mw.title.new(form.form)
if title and not title.exists then
insert_cat("verbs with red links in their inflection tables")
must_break = true
break
end
end
end
end
if must_break then
break
end
end
end
if(base.conj == "or") then
insert_cat("verbs ending in -er")
else
insert_cat("verbs ending in -" .. base.conj)
end
if base.irreg then
insert_ann("irreg", "irregular")
insert_cat("irregular verbs")
else
insert_ann("irreg", "regular")
end
if base.only3s then
insert_ann("defective", "impersonal")
insert_cat("impersonal verbs")
elseif base.only3sp then
insert_ann("defective", "third-person only")
insert_cat("third-person-only verbs")
elseif base.only3p then
insert_ann("defective", "third-person plural only")
insert_cat("third-person-plural-only verbs")
elseif base.no_pres_stressed or base.no_pres1_and_sub then
insert_ann("defective", "defective")
insert_cat("defective verbs")
else
insert_ann("defective", "regular")
end
if base.stems.short_pp then
insert_ann("short_pp", "irregular short past participle")
insert_cat("verbs with irregular short past participle")
else
insert_ann("short_pp", "regular")
end
if base.clitic then
insert_cat("verbs with lexical clitics")
end
if base.refl then
insert_cat("reflexive verbs")
end
if not base.vowel_alt then
insert_ann("vowel_alt", "non-alternating")
else
for _, alt in ipairs(base.vowel_alt) do
if alt.form == "+" then
insert_ann("vowel_alt", "non-alternating")
else
insert_ann("vowel_alt", vowel_alternant_to_desc[alt.form])
insert_cat("verbs with " .. vowel_alternant_to_cat[alt.form])
end
end
end
local cons_alt = base.stems.cons_alt
if cons_alt == nil then
if base.conj == "ar" then
if base.inf_stem:find("z$") then
cons_alt = "c-z"
elseif base.inf_stem:find("c$") then
cons_alt = "c-qu"
elseif base.inf_stem:find("g$") then
cons_alt = "g-gu"
elseif base.inf_stem:find("gu$") then
cons_alt = "gu-gü"
end
else
if base.no_pres_stressed or base.no_pres1_and_sub then
cons_alt = nil -- no e.g. c-z alternation in this case
elseif base.inf_stem:find("c$") then
cons_alt = "c-z"
elseif base.inf_stem:find("qu$") then
cons_alt = "c-qu"
elseif base.inf_stem:find("gu$") then
cons_alt = "g-gu"
elseif base.inf_stem:find("gü$") then
cons_alt = "gu-gü"
end
end
end
if cons_alt then
local desc = cons_alt .. " alternation"
insert_ann("cons_alt", desc)
insert_cat("verbs with " .. desc)
else
insert_ann("cons_alt", "non-alternating")
end
end
-- Compute the categories to add the verb to, as well as the annotation to display in the
-- conjugation title bar. We combine the code to do these functions as both categories and
-- title bar contain similar information.
local function compute_categories_and_annotation(alternant_multiword_spec)
alternant_multiword_spec.categories = {}
local ann = {}
alternant_multiword_spec.annotation = ann
ann.irreg = {}
ann.short_pp = {}
ann.defective = {}
ann.vowel_alt = {}
ann.cons_alt = {}
local multiword_lemma = false
for _, form in ipairs(alternant_multiword_spec.forms.infinitive) do
if form.form:find(" ") then
multiword_lemma = true
break
end
end
iut.map_word_specs(alternant_multiword_spec, function(base)
add_categories_and_annotation(alternant_multiword_spec, base, multiword_lemma)
end)
local ann_parts = {}
local irreg = table.concat(ann.irreg, " or ")
if irreg ~= "" and irreg ~= "regular" then
table.insert(ann_parts, irreg)
end
local short_pp = table.concat(ann.short_pp, " or ")
if short_pp ~= "" and short_pp ~= "regular" then
table.insert(ann_parts, short_pp)
end
local defective = table.concat(ann.defective, " or ")
if defective ~= "" and defective ~= "regular" then
table.insert(ann_parts, defective)
end
local vowel_alt = table.concat(ann.vowel_alt, " or ")
if vowel_alt ~= "" and vowel_alt ~= "non-alternating" then
table.insert(ann_parts, vowel_alt)
end
local cons_alt = table.concat(ann.cons_alt, " or ")
if cons_alt ~= "" and cons_alt ~= "non-alternating" then
table.insert(ann_parts, cons_alt)
end
alternant_multiword_spec.annotation = table.concat(ann_parts, "; ")
end
local function show_forms(alternant_multiword_spec)
local lemmas = alternant_multiword_spec.forms.infinitive
alternant_multiword_spec.lemmas = lemmas -- save for later use in make_table()
if alternant_multiword_spec.forms.short_pp_ms then
alternant_multiword_spec.has_short_pp = true
end
local reconstructed_verb_spec = iut.reconstruct_original_spec(alternant_multiword_spec)
local function transform_accel_obj(slot, formobj, accel_obj)
-- No accelerators for negative imperatives, which are always multiword and derived directly from the
-- present subjunctive.
if slot:find("^neg_imp") then
return nil
end
if accel_obj then
if slot:find("^pp_") then
accel_obj.form = slot
elseif slot == "gerund" then
accel_obj.form = "gerund-" .. reconstructed_verb_spec
else
accel_obj.form = "verb-form-" .. reconstructed_verb_spec
end
end
return accel_obj
end
local props = {
lang = lang,
lemmas = lemmas,
transform_accel_obj = transform_accel_obj,
slot_list = alternant_multiword_spec.verb_slots_basic,
}
iut.show_forms(alternant_multiword_spec.forms, props)
alternant_multiword_spec.footnote_basic = alternant_multiword_spec.forms.footnote
end
local notes_template = [=[
<div class="roa-footnote-outer-div" style="width:100%;">
<div class="roa-footnote-inner-div">
{footnote}
</div></div>
]=]
local basic_table = [=[
{description}<div class="NavFrame">
<div class="NavHead" align=center> การผันรูปของ {title}</div>
<div class="NavContent" align="left">
{\op}| class="roa-inflection-table" data-toggle-category="inflection"
|-
! class="roa-person-number-header" rowspan="2" |
! class="roa-person-number-header" colspan="3" | เอกพจน์
! class="roa-person-number-header" colspan="3" | พหูพจน์
|-
! class="roa-person-number-header" style="width:12.5%" | บุรุษที่หนึ่ง<br />(<<eu>>)
! class="roa-person-number-header" style="width:12.5%" | บุรุษที่สอง<br />(<<ti>>)
! class="roa-person-number-header" style="width:12.5%" | บุรุษที่สาม<br />(<<el>> / <<ela>> / <<vostede|Vde.>>)
! class="roa-person-number-header" style="width:12.5%" | บุรุษที่หนึ่ง<br />(<<nós>>)
! class="roa-person-number-header" style="width:12.5%" | บุรุษที่สอง<br />(<<vós>>)
! class="roa-person-number-header" style="width:12.5%" | บุรุษที่สาม<br />(<<eles>> / <<elas>> / <<vostedes|Vdes.>>)
|-
| class="roa-nonfinite-header" colspan="7" | ''<span title="infinitivo">รูปกริยากลาง</span>''
|-
| class="roa-nonfinite-header" | '''<span title="infinitivo impersoal">คำอบุรุษกริยา</span>'''
| colspan="6" | {infinitive}
|-
| class="roa-nonfinite-header" | '''<span title="infinitivo conxugado">คำบุรุษกริยา</span>'''
| {pers_inf_1s}
| {pers_inf_2s}
| {pers_inf_3s}
| {pers_inf_1p}
| {pers_inf_2p}
| {pers_inf_3p}
|-
| class="roa-nonfinite-header" colspan="7" | ''<span title="xerundio">รูปกริยาเป็นนาม</span>''
|-
| class="roa-nonfinite-header" |
| colspan="6" | {gerund}
|-{pp_clause}
! class="roa-indicative-left-rail" colspan="7" | ''<span title="indicativo">มาลาบอกเล่า</span>''
|-
! class="roa-indicative-left-rail" | <span title="presente">ปัจจุบันกาล</span>
| {pres_1s}
| {pres_2s}
| {pres_3s}
| {pres_1p}
| {pres_2p}
| {pres_3p}
|-
! class="roa-indicative-left-rail" | <span title="pretérito imperfecto">ไม่สมบูรณ์</span>
| {impf_1s}
| {impf_2s}
| {impf_3s}
| {impf_1p}
| {impf_2p}
| {impf_3p}
|-
! class="roa-indicative-left-rail" | <span title="pretérito perfecto">อดีตกาลสิ้นสุด (สมบูรณ์)</span>
| {pret_1s}
| {pret_2s}
| {pret_3s}
| {pret_1p}
| {pret_2p}
| {pret_3p}
|-
! class="roa-indicative-left-rail" | <span title="pretérito pluscuamperfecto">อภิสมบูรณ์</span>
| {plup_1s}
| {plup_2s}
| {plup_3s}
| {plup_1p}
| {plup_2p}
| {plup_3p}
|-
! class="roa-indicative-left-rail" | <span title="futuro do presente">อนาคตกาล</span>
| {fut_1s}
| {fut_2s}
| {fut_3s}
| {fut_1p}
| {fut_2p}
| {fut_3p}
|-
! class="roa-indicative-left-rail" | <span title="condicional">มาลาเงื่อนไข</span>
| {cond_1s}
| {cond_2s}
| {cond_3s}
| {cond_1p}
| {cond_2p}
| {cond_3p}
|-
! class="roa-subjunctive-left-rail" colspan="7" | ''<span title="subxuntivo">มาลาสมมุติ</span>''
|-
! class="roa-subjunctive-left-rail" | <span title=" presente do subxuntivo">ปัจจุบันกาล</span>
| {pres_sub_1s}
| {pres_sub_2s}
| {pres_sub_3s}
| {pres_sub_1p}
| {pres_sub_2p}
| {pres_sub_3p}
|-
! class="roa-subjunctive-left-rail" | <span title="pretérito imperfecto do subxuntivo">ไม่สมบูรณ์</span>
| {impf_sub_1s}
| {impf_sub_2s}
| {impf_sub_3s}
| {impf_sub_1p}
| {impf_sub_2p}
| {impf_sub_3p}
|-
! class="roa-subjunctive-left-rail" | <span title="futuro do subxuntivo">อนาคตกาล</span>
| {fut_sub_1s}
| {fut_sub_2s}
| {fut_sub_3s}
| {fut_sub_1p}
| {fut_sub_2p}
| {fut_sub_3p}
|-
! class="roa-imperative-left-rail" colspan="7" | ''<span title="imperativo">มาลาสั่ง</span>''
|-
! class="roa-imperative-left-rail" | <span title="imperativo afirmativo">เชิงยืนยัน</span>
| rowspan="2" |
| {imp_2s}
| {imp_3s}
| {imp_1p}
| {imp_2p}
| {imp_3p}
|-
! class="roa-imperative-left-rail" | <span title="imperativo negativo">เชิงปฏิเสธ</span> (<<non>>)
| {neg_imp_2s}
| {neg_imp_3s}
| {neg_imp_1p}
| {neg_imp_2p}
| {neg_imp_3p}
|{\cl}{notes_clause}</div></div>
]=]
local double_pp_template = [=[
! class="roa-nonfinite-header" colspan="7" | ''<span title="participio irregular">รูปกริยาขยายอดีตกาลสั้น</span>''
|-
! class="roa-nonfinite-header" | เพศชาย
| colspan="3" | {short_pp_ms}
| colspan="3" | {short_pp_mp}
|-
! class="roa-nonfinite-header" | เพศหญิง
| colspan="3" | {short_pp_fs}
| colspan="3" | {short_pp_fp}
|-
! class="roa-nonfinite-header" colspan="7" | ''<span title="participio regular">รูปกริยาขยายอดีตกาลยาว</span>''
|-
! class="roa-nonfinite-header" | เพศชาย
| colspan="3" | {pp_ms}
| colspan="3" | {pp_mp}
|-
! class="roa-nonfinite-header" | เพศหญิง
| colspan="3" | {pp_fs}
| colspan="3" | {pp_fp}
|-]=]
local single_pp_template = [=[
! class="roa-nonfinite-header" colspan="7" | ''<span title="participio pasado">รูปกริยาขยายอดีตกาล</span>''
|-
! class="roa-nonfinite-header" | เพศชาย
| colspan="3" | {pp_ms}
| colspan="3" | {pp_mp}
|-
! class="roa-nonfinite-header" | เพศหญิง
| colspan="3" | {pp_fs}
| colspan="3" | {pp_fp}
|-]=]
local function make_table(alternant_multiword_spec)
local forms = alternant_multiword_spec.forms
forms.title = link_term(alternant_multiword_spec.lemmas[1].form)
if alternant_multiword_spec.annotation ~= "" then
forms.title = forms.title .. " (" .. alternant_multiword_spec.annotation .. ")"
end
forms.description = ""
-- Format the table.
forms.footnote = alternant_multiword_spec.footnote_basic
forms.notes_clause = forms.footnote ~= "" and m_string_utilities.format(notes_template, forms) or ""
-- has_short_pp is computed in show_forms().
local pp_template = alternant_multiword_spec.has_short_pp and double_pp_template or single_pp_template
forms.pp_clause = m_string_utilities.format(pp_template, forms)
local table_with_pronouns = rsub(basic_table, "<<([^<>|]-)|([^<>|]-)>>", link_term)
local table_with_pronouns = rsub(table_with_pronouns, "<<(.-)>>", link_term)
return require("Module:TemplateStyles")("Module:roa-verb/style.css") .. m_string_utilities.format(table_with_pronouns, forms)
end
-- Externally callable function to parse and conjugate a verb given user-specified arguments.
-- Return value is WORD_SPEC, an object where the conjugated forms are in `WORD_SPEC.forms`
-- for each slot. If there are no values for a slot, the slot key will be missing. The value
-- for a given slot is a list of objects {form=FORM, footnotes=FOOTNOTES}.
function export.do_generate_forms(args, source_template, headword_head)
local PAGENAME = mw.loadData("Module:headword/data").pagename
local function in_template_space()
return mw.title.getCurrentTitle().nsText == "แม่แบบ"
end
-- Determine the verb spec we're being asked to generate the conjugation of. This may be taken from the
-- current page title or the value of |pagename=; but not when called from {{gl-verb form of}}, where the
-- page title is a non-lemma form. Note that the verb spec may omit the infinitive; e.g. it may be "<i-e>".
-- For this reason, we use the value of `pagename` computed here down below, when calling normalize_all_lemmas().
local pagename = source_template ~= "gl-verb form of" and args.pagename or PAGENAME
local head = headword_head or pagename
local arg1 = args[1]
if not arg1 then
if (pagename == "gl-conj" or pagename == "gl-verb") and in_template_space() then
arg1 = "paliar<í,+>"
elseif pagename == "gl-verb form of" and in_template_space() then
arg1 = "amar"
else
arg1 = "<>"
end
end
-- When called from {{gl-verb form of}}, determine the non-lemma form whose inflections we're being asked to
-- determine. This normally comes from the page title or the value of |pagename=.
local verb_form_of_form
if source_template == "gl-verb form of" then
verb_form_of_form = args.pagename
if not verb_form_of_form then
if PAGENAME == "gl-verb form of" and in_template_space() then
verb_form_of_form = "ame"
else
verb_form_of_form = PAGENAME
end
end
end
local incorporated_headword_head_into_lemma = false
if arg1:find("^<.*>$") then -- missing lemma
if head:find(" ") then
-- If multiword lemma, try to add arg spec after the first word.
-- Try to preserve the brackets in the part after the verb, but don't do it
-- if there aren't the same number of left and right brackets in the verb
-- (which means the verb was linked as part of a larger expression).
local refl_clitic_verb, post = rmatch(head, "^(.-)( .*)$")
local left_brackets = rsub(refl_clitic_verb, "[^%[]", "")
local right_brackets = rsub(refl_clitic_verb, "[^%]]", "")
if #left_brackets == #right_brackets then
arg1 = iut.remove_redundant_links(refl_clitic_verb) .. arg1 .. post
incorporated_headword_head_into_lemma = true
else
-- Try again using the form without links.
local linkless_head = m_links.remove_links(head)
if linkless_head:find(" ") then
refl_clitic_verb, post = rmatch(linkless_head, "^(.-)( .*)$")
arg1 = refl_clitic_verb .. arg1 .. post
else
error("Unable to incorporate <...> spec into explicit head due to a multiword linked verb or " ..
"unbalanced brackets; please include <> explicitly: " .. arg1)
end
end
else
-- Will be incorporated through `head` below in the call to normalize_all_lemmas().
incorporated_headword_head_into_lemma = true
end
end
local function split_bracketed_runs_into_words(bracketed_runs)
return put.split_alternating_runs(bracketed_runs, " ", "preserve splitchar")
end
local parse_props = {
parse_indicator_spec = parse_indicator_spec,
-- Split words only on spaces, not on hyphens, because that messes up reflexive verb parsing.
split_bracketed_runs_into_words = split_bracketed_runs_into_words,
allow_default_indicator = true,
allow_blank_lemma = true,
}
local alternant_multiword_spec = iut.parse_inflected_text(arg1, parse_props)
alternant_multiword_spec.pos = pos or "verbs"
alternant_multiword_spec.args = args
alternant_multiword_spec.source_template = source_template
alternant_multiword_spec.verb_form_of_form = verb_form_of_form
alternant_multiword_spec.incorporated_headword_head_into_lemma = incorporated_headword_head_into_lemma
normalize_all_lemmas(alternant_multiword_spec, head)
detect_all_indicator_specs(alternant_multiword_spec)
local inflect_props = {
slot_list = alternant_multiword_spec.all_verb_slots,
inflect_word_spec = conjugate_verb,
-- We add links around the generated verbal forms rather than allow the entire multiword
-- expression to be a link, so ensure that user-specified links get included as well.
include_user_specified_links = true,
}
iut.inflect_multiword_or_alternant_multiword_spec(alternant_multiword_spec, inflect_props)
-- Remove redundant brackets around entire forms.
for slot, forms in pairs(alternant_multiword_spec.forms) do
for _, form in ipairs(forms) do
form.form = iut.remove_redundant_links(form.form)
end
end
compute_categories_and_annotation(alternant_multiword_spec)
if args.json and source_template == "gl-conj" then
return require("Module:JSON").toJSON(alternant_multiword_spec.forms)
end
return alternant_multiword_spec
end
-- Entry point for {{gl-conj}}. Template-callable function to parse and conjugate a verb given
-- user-specified arguments and generate a displayable table of the conjugated forms.
function export.show(frame)
local parent_args = frame:getParent().args
local params = {
[1] = {},
["noautolinktext"] = {type = "boolean"},
["noautolinkverb"] = {type = "boolean"},
["pagename"] = {}, -- for testing/documentation pages
["json"] = {type = "boolean"}, -- for bot use
}
local args = require("Module:parameters").process(parent_args, params)
local alternant_multiword_spec = export.do_generate_forms(args, "gl-conj")
if type(alternant_multiword_spec) == "string" then
-- JSON return value
return alternant_multiword_spec
end
show_forms(alternant_multiword_spec)
return make_table(alternant_multiword_spec) ..
require("Module:utilities").format_categories(alternant_multiword_spec.categories, lang, nil, nil, force_cat)
end
return export
7l0ov7iq9tgh824enjf44wjt7evemm8
5729420
5729418
2026-07-20T09:18:08Z
Octahedron80
267
5729420
Scribunto
text/plain
--[=[
This module implements {{gl-conj}} and provides the underlying conjugation functions for {{gl-verb}}
(whose actual formatting is done in [[Module:gl-headword]]). This module uses the standard norm for
Galician spelling. See also [[Module:gl-reinteg-verb]], which implements the reintegrationist norm.
Authorship: Ben Wing <benwing2>
]=]
local export = {}
--[=[
TERMINOLOGY:
-- "slot" = A particular combination of tense/mood/person/number/etc.
Example slot names for verbs are "pres_1s" (present indicative first-person singular), "pres_sub_2s" (present
subjunctive second-person singular) "impf_sub_3p" (imperfect subjunctive third-person plural).
Each slot is filled with zero or more forms.
-- "form" = The conjugated Galician form representing the value of a given slot.
-- "lemma" = The dictionary form of a given Galician term. For Galician, always the infinitive.
]=]
--[=[
FIXME:
--]=]
local lang = require("Module:languages").getByCode("gl")
local m_string_utilities = require("Module:string utilities")
local m_links = require("Module:links")
local m_table = require("Module:table")
local iut = require("Module:inflection utilities")
local put = require("Module:parse utilities")
local com = require("Module:gl-common")
local force_cat = false -- set to true for debugging
local check_for_red_links = false -- set to false for debugging
local rfind = mw.ustring.find
local rmatch = mw.ustring.match
local rsplit = mw.text.split
local rsub = com.rsub
local u = mw.ustring.char
local unpack = unpack or table.unpack -- Lua 5.2 compatibility
local function link_term(term, display)
return m_links.full_link({ lang = lang, term = term, alt = display }, "term")
end
local V = com.V -- vowel regex class
local AV = com.AV -- accented vowel regex class
local C = com.C -- consonant regex class
local TEMPC1 = u(0xFFF1) -- temporary character used for consonant substitutions
local short_pp_footnote = "[usually used with auxiliary verbs " .. link_term("ser") .. " and " .. link_term("estar") .. "]"
local long_pp_footnote = "[usually used with auxiliary verbs " .. link_term("haber") .. " and " .. link_term("ter") .. "]"
--[=[
Vowel alternations:
<i-e>: 'i' in pres1s, imp2s and the whole present subjunctive; 'e' elsewhere when stressed. Generally 'e' otherwise
when unstressed. E.g. [[sentir]], [[conseguir]] (the latter additionally with 'gu-g' alternation).
<u-o>: 'u' in pres1s, imp2s and the whole present subjunctive; 'o' elsewhere when stressed. Generally 'u' otherwise
when unstressed. E.g. [[durmir]], [[subir]].
<i>: 'i' whenever stressed (in the present singular and third plural) and throughout the whole present subjunctive.
Otherwise 'e'. E.g. [[vestir]], [[pedir]].
<u>: 'u' whenever stressed (in the present singular and third plural) and throughout the whole present subjunctive.
Otherwise 'o'. There may be no such verbs in standard Galician.
<í>: The last 'i' of the stem) becomes 'í' when stressed. E.g.:
* [[faiscar]] (only3sp; faísca, faíscan, faísque, faísquen' also with 'c-qu' alternation), [[acainzar]],
[[avaiñar]], [[cainzar]], [[caiñar]], [[desenvaiñar]], [[envaiñar]], [[arremuiñar]], [[arrepuiñar]],
[[arruinar]], [[cuincar]], [[cuiñar]], [[muiñar]]
* verbs in -eizar and -aizar, e.g. [[europeizar]] ('europeízo, europeíce', etc. also with 'z-c' alternation)
* [[desenraizar]], [[enraizar]], [[hebraizar]], [[xudaizar]]
* [[europeizar]], [[homoxeneizar]]
* some verbs in -uizar:
* [[enxuizar]] (enxuízo, enxuíza, enxuíce, enxuícen, also with 'z-c' alternation), [[axuizar]]
* but not any in -guizar ([[arreguizar]], [[desgaleguizar]], [[empreguizar]], [[esguizar]], [[espreguizar]],
[[galeguizar]]) or -quizar ([[catequizar]], [[esnaquizar]], [[xerarquizar]])
* none in -aiar?
* not [[abraiar]], [[achaiar]], [[alfaiar]], [[amaiar]], [[arraiar]], [[atalaiar]], [[desmaiar]], [[encaiar]],
[[engraiar]], [[ensaiar]], [[espraiar]], [[faiar]], [[laiar]], [[maiar]], [[raiar]], [[salaiar]]
* unknown: [[craiar]]
* some verbs in -biar:
* [[adobiar]], [[asubiar]], [[espabiar]]
* but not [[arrubiar]], [[asoberbiar]] /e/?, [[cambiar]], [[descambiar]], [[enrabiar]], [[ensoberbiar]] /e/?,
[[entibiar]], [[gabiar]], [[gobiar]] /ɔ/, [[intercambiar]], [[rabiar]], [[recambiar]], [[sarabiar]] (only3s),
[[turbiar]]
* none in -ciar:
* not [[acariciar]], [[agraciar]], [[anunciar]], [[apreciar]] /e/?, [[asociar]] /ɔ/, [[auspiciar]],
[[autofinanciar]], [[aviciar]], [[axenciar]] /ɛ/, [[beneficiar]], [[comerciar]] /ɛ/, [[concienciar]] /ɛ/,
[[conferenciar]] /e/?, [[congraciar]], [[denunciar]], [[depreciar]] /e/?, [[desasociar]] /ɔ/, [[desenviciar]],
[[desgraciar]], [[desperdiciar]], [[diferenciar]] /e/?, [[dilixenciar]] /e/?, [[disociar]] /ɔ/, [[distanciar]],
[[divorciar]] /ɔ/, [[enranciar]], [[ensuciar]], [[enunciar]], [[enviciar]], [[escanciar]], [[especiar]] /?/,
[[evidenciar]] /e/?, [[financiar]], [[graciar]], [[influenciar]] /e/?, [[iniciar]], [[licenciar]] /ɛ/,
[[maliciar]], [[negociar]] /ɔ/, [[oficiar]], [[potenciar]] /e/?, [[prenunciar]], [[presenciar]] /e/?,
[[pronunciar]], [[propiciar]], [[quintaesenciar]] /e/?, [[reiniciar]], [[renunciar]], [[reverenciar]] /e/?,
[[saciar]], [[sentenciar]] /e/?, [[silenciar]] /e/?, [[viciar]]
* some verbs in -diar:
* [[adiar]], [[vadiar]]
* but not [[asediar]] /ɛ/, [[compendiar]] /ɛ/, [[custodiar]] /ɔ/, [[deslendiar]] /e/?, [[entremediar]] /e/?,
[[estipendiar]] /e/?, [[fastidiar]], [[incendiar]] /e/?, [[insidiar]], [[irradiar]], [[mediar]] /e/?,
[[odiar]] /ɔ/, [[parodiar]] /ɔ/, [[preludiar]], [[radiar]], [[remediar]] /ɛ/, [[repudiar]], [[salmodiar]] /ɔ/,
[[subsidiar]], [[vilipendiar]] /ɛ/
* some verbs in -fiar:
* [[afiar]], [[confiar]], [[desafiar]], [[desconfiar]], [[desenfiar]], [[enfiar]], [[esfiar]], [[esgrafiar]],
[[fiar]], [[porfiar]], probably [[sobrefiar]] (not indicated)
* but not [[atrofiar]] /ɔ/, [[hipertrofiar]] /ɔ/
* verbs in -guiar:
* [[guiar]], [[radioguiar]], [[teleguiar]]
* verbs in -hiar:
* [[chiar]], [[rechiar]], [[rechouchiar]]
* some verbs in -liar:
* [[aliar]] (alío, alía, alíe, alíen), [[ampliar]], [[avaliar]], [[desliar]], [[liar]]
* but not [[afiliar]] (afilio, afilia, afilie, afilien), [[auxiliar]], [[conciliar]], [[defoliar]],
[[domiciliar]], [[escoliar]], [[espoliar]], [[exfoliar]], [[exiliar]], [[interfoliar]], [[reconciliar]]
* [[paliar]] goes both ways: 'palio/palío', 'palia/palía', 'palie/palíe', 'palien/palíen'
* unknown: [[represaliar]]
* some verbs in -miar:
* [[gurrumiar]], [[miar]]
* but not [[agremiar]], [[amomiar]], [[encomiar]], [[premiar]], [[rumiar]]
* some verbs in -niar:
* [[agoniar]], [[desagoniar]]
* but not [[calumniar]], [[conxeniar]], [[herniar]], [[miniar]]
* none in -oiar?
* not [[aboiar]] /ɔ/, [[acoiar]] /ɔ/, [[apoiar]] /o/, [[arroiar]] /o/ (only3s), [[choiar]]/[[enchoiar]] /ɔ/,
[[enxoiar]] /ɔ/, [[loiar]] /o/
* some verbs in -piar:
* [[arrepiar]], [[espiar]], [[expiar]], [[piar]]
* but not [[apropiar]], [[copiar]], [[expropiar]], [[fotocopiar]], [[lurpiar]], [[principiar]], [[recopiar]],
[[tapiar]], [[xerocopiar]]
* some verbs in -quiar:
* [[esquiar]], [[maquiar]], [[remaquiar]], [[tosquiar]]
* but not [[obsequiar]]
* unknown: [[franquiar]]
* some verbs in -riar:
* [[arrefriar]], [[arriar]], [[avariar]], [[criar]], [[desvariar]], [[enriar]], [[escagarriar]], [[estriar]],
[[malcriar]], [[recriar]], [[variar]]
* but not [[anguriar]], [[asalariar]], [[cariar]] (only3sp), [[contrariar]], [[desmemoriar]], [[expatriar]],
[[gloriar]], [[historiar]], [[inventariar]], [[inxuriar]], [[leriar]], [[repatriar]], [[seriar]],
[[vangloriar]]
* some verbs in -siar:
* [[fantasiar]]
* but not [[anestesiar]], [[extasiar]]
* [[ansiar]] goes both ways: 'ansio/ansío', 'ansia/ansía', 'ansie/ansíe', 'ansien/ansíen'
* some verbs in -tiar:
* [[amnistiar]], [[desenfastiar]], [[enfastiar]]
* but not [[angustiar]], [[sitiar]]
* some verbs in -viar:
* [[ataviar]], [[aviar]], [[desataviar]], [[desviar]], [[enviar]], [[extraviar]], [[reenviar]]
* but not [[abreviar]], [[agraviar]], [[aliviar]], [[desagraviar]], [[diluviar]] (only3s), [[obviar]]
* some verbs in -xiar:
* [[vixiar]]
* but not [[asfixiar]], [[colexiar]] /e/, [[contaxiar]], [[desprestixiar]], [[eloxiar]], [[plaxiar]],
[[presaxiar]], [[prestixiar]], [[privilexiar]] /e/, [[refuxiar]]
<ú>: The last 'u' of the stem becomes 'ú' when stressed. E.g.:
* [[reunir]] ('reúno, reúne(s), reúnem, reúna(s), reúnan')
* [[esmiuzar]] ('esmiúzo, esmiúza(s), esmiúza, esmiúce(s), esmiúcen' also with 'z-c' alternation)
* [[saudar]] ('saúdo, saúda(s), saúda, saúde(s), saúden')
* [[auñar]], [[desembaular]], [[embaular]]
* [[afiuzar]], [[desafiuzar]], [[desmiudar]], [[desmiuzar]], [[enviuvar]], [[esmiuzar]] but not [[triunfar]]
* NOTE: It seems most or all verbs in -uar other than in -guar, -quar have stressed ú, so we make it the default.
]=]
local vowel_alternants = m_table.listToSet({"i-e", "i", "í", "u-o", "u", "ú", "+"})
local vowel_alternant_to_desc = {
["i-e"] = "''i-e'' alternation in present singular",
["i"] = "''e'' becomes ''i'' when stressed",
["í"] = "''i'' becomes ''í'' when stressed",
["u-o"] = "''u-o'' alternation in present singular",
["u"] = "''o'' becomes ''u'' when stressed",
["ú"] = "''u'' becomes ''ú'' when stressed",
}
local vowel_alternant_to_cat = {
["i-e"] = "i-e alternation in present singular",
["i"] = "e becoming i when stressed",
["í"] = "i becoming í when stressed",
["u-o"] = "u-o alternation in present singular",
["u"] = "o becoming u when stressed",
["ú"] = "u becoming ú when stressed",
}
local all_persons_numbers = {
["1s"] = "1|s",
["2s"] = "2|s",
["3s"] = "3|s",
["1p"] = "1|p",
["2p"] = "2|p",
["3p"] = "3|p",
}
local person_number_list = {"1s", "2s", "3s", "1p", "2p", "3p"}
local imp_person_number_list = {"2s", "3s", "1p", "2p", "3p"}
local neg_imp_person_number_list = {"2s", "3s", "1p", "2p", "3p"}
person_number_to_reflexive_pronoun = {
["1s"] = "me",
["2s"] = "te",
["3s"] = "se",
["1p"] = "nos",
["2p"] = "vos",
["3p"] = "se",
}
local indicator_flags = m_table.listToSet {
"no_pres_stressed", "no_pres1_and_sub",
"only3s", "only3sp", "only3p", "noimp",
"pp_inv", "irreg", "no_built_in",
}
-- Initialize all the slots for which we generate forms.
local function add_slots(alternant_multiword_spec)
-- "Basic" slots: All slots that go into the regular table (not the reflexive form-of table).
alternant_multiword_spec.verb_slots_basic = {
{"infinitive", "inf"},
{"infinitive_linked", "inf"},
{"gerund", "ger"},
{"short_pp_ms", "short|m|s|past|part"},
{"short_pp_fs", "short|f|s|past|part"},
{"short_pp_mp", "short|m|p|past|part"},
{"short_pp_fp", "short|f|p|past|part"},
{"pp_ms", "m|s|past|part"},
{"pp_fs", "f|s|past|part"},
{"pp_mp", "m|p|past|part"},
{"pp_fp", "f|p|past|part"},
}
-- Special slots used to handle non-reflexive parts of reflexive verbs in {{gl-verb form of}}. For example, for a
-- reflexive-only verb like [[arrepentirse]], we want to be able to use {{gl-verb form of}} on [[arrepinta]] (which
-- should mention that it is a part of 'me arrepinta', first-person singular present subjunctive, and
-- 'se arrepinta', third-person singular present subjunctive) or on [[arrepentimos]] (which should mention that it
-- is a part of 'arrepentímonos', first-person plural present indicative or preterite). Similarly, we want to use
-- {{gl-verb form of}} on [[arrepentindo]] (which should mention that it is a part of 'se ... arrepentindo',
-- syntactic variant of [[arrepentíndose]], which is the gerund of [[arrepentirse]]). To do this, we need to be
-- able to map non-reflexive parts like [[arrepinta]], [[arrepentimos]], [[arrepentindo]], etc. to their reflexive
-- equivalent(s), to the tag(s) of the equivalent(s), and, in the case of forms like [[arrepentindo]],
-- [[arrepentir]] and imperatives, to the separated syntactic variant of the verb+clitic combination. We do this by
-- creating slots for the non-reflexive part equivalent of each basic reflexive slot, and for the separated
-- syntactic-variant equivalent of each basic reflexive slot that is formed of verb+clitic. We use slots in this
-- way to deal with multiword lemmas. Note that we run into difficulties mapping between reflexive verbs,
-- non-reflexive part equivalents, and separated syntactic variants if a slot contains more than one form. To
-- handle this, if there are the same number of forms in two slots we're trying to match up, we assume the forms
-- match one-to-one; otherwise we don't match up the two slots (which means {{gl-verb form of}} won't work in this
-- case, but such a case is extremely rare and not worth worrying about). Alternatives that handle this "properly"
-- are significantly more complicated and require non-trivial modifications to [[Module:inflection utilities]].
local need_special_verb_form_of_slots = alternant_multiword_spec.source_template == "gl-verb form of" and
alternant_multiword_spec.refl
if need_special_verb_form_of_slots then
alternant_multiword_spec.verb_slots_reflexive_verb_form_of = {
{"infinitive_non_reflexive", "-"},
{"infinitive_variant", "-"},
{"gerund_non_reflexive", "-"},
{"gerund_variant", "-"},
}
else
alternant_multiword_spec.verb_slots_reflexive_verb_form_of = {}
end
-- Add entries for a slot with person/number variants.
-- `verb_slots` is the table to add to.
-- `slot_prefix` is the prefix of the slot, typically specifying the tense/aspect.
-- `tag_suffix` is a string listing the set of inflection tags to add after the person/number tags.
-- `person_number_list` is a list of the person/number slot suffixes to add to `slot_prefix`.
local function add_personal_slot(verb_slots, slot_prefix, tag_suffix, person_number_list)
for _, persnum in ipairs(person_number_list) do
local persnum_tag = all_persons_numbers[persnum]
local slot = slot_prefix .. "_" .. persnum
local accel = persnum_tag .. "|" .. tag_suffix
table.insert(verb_slots, {slot, accel})
end
end
-- Add a personal slot (i.e. a slot with person/number variants) to `verb_slots_basic`.
local function add_basic_personal_slot(slot_prefix, tag_suffix, person_number_list, no_special_verb_form_of_slot)
add_personal_slot(alternant_multiword_spec.verb_slots_basic, slot_prefix, tag_suffix, person_number_list)
-- Add special slots for handling non-reflexive parts of reflexive verbs in {{gl-verb form of}}.
-- See comment above in `need_special_verb_form_of_slots`.
if need_special_verb_form_of_slots and not no_special_verb_form_of_slot then
for _, persnum in ipairs(person_number_list) do
local persnum_tag = all_persons_numbers[persnum]
local basic_slot = slot_prefix .. "_" .. persnum
local accel = persnum_tag .. "|" .. tag_suffix
table.insert(alternant_multiword_spec.verb_slots_reflexive_verb_form_of, {basic_slot .. "_non_reflexive", "-"})
end
end
end
add_basic_personal_slot("pres", "pres|ind", person_number_list)
add_basic_personal_slot("impf", "impf|ind", person_number_list)
add_basic_personal_slot("pret", "pret|ind", person_number_list)
add_basic_personal_slot("plup", "plup|ind", person_number_list)
add_basic_personal_slot("fut", "fut|ind", person_number_list)
add_basic_personal_slot("cond", "cond", person_number_list)
add_basic_personal_slot("pres_sub", "pres|sub", person_number_list)
add_basic_personal_slot("impf_sub", "impf|sub", person_number_list)
add_basic_personal_slot("fut_sub", "fut|sub", person_number_list)
add_basic_personal_slot("imp", "imp", imp_person_number_list)
add_basic_personal_slot("pers_inf", "pers|inf", person_number_list)
-- Don't need special non-reflexive-part slots because the negative imperative is multiword, of which the
-- individual words are 'non' + subjunctive.
add_basic_personal_slot("neg_imp", "neg|imp", neg_imp_person_number_list, "no special verb form of")
-- Don't need special non-reflexive-part slots because we don't want [[arrependendo]] mapping to [[arrependendo-me]]
-- (only [[arrependendo-se]]) or [[arrepender]] mapping to [[arrepender-me]] (only [[arrepender-se]]).
add_basic_personal_slot("infinitive", "inf", person_number_list, "no special verb form of")
add_basic_personal_slot("gerund", "ger", person_number_list, "no special verb form of")
-- Generate the list of all slots.
alternant_multiword_spec.all_verb_slots = {}
for _, slot_and_accel in ipairs(alternant_multiword_spec.verb_slots_basic) do
table.insert(alternant_multiword_spec.all_verb_slots, slot_and_accel)
end
for _, slot_and_accel in ipairs(alternant_multiword_spec.verb_slots_reflexive_verb_form_of) do
table.insert(alternant_multiword_spec.all_verb_slots, slot_and_accel)
end
alternant_multiword_spec.verb_slots_basic_map = {}
for _, slotaccel in ipairs(alternant_multiword_spec.verb_slots_basic) do
local slot, accel = unpack(slotaccel)
alternant_multiword_spec.verb_slots_basic_map[slot] = accel
end
end
local overridable_stems = {}
local function allow_multiple_values(separated_groups, data)
local retvals = {}
for _, separated_group in ipairs(separated_groups) do
local footnotes = data.fetch_footnotes(separated_group)
local retval = {form = separated_group[1], footnotes = footnotes}
table.insert(retvals, retval)
end
return retvals
end
local function simple_choice(choices)
return function(separated_groups, data)
if #separated_groups > 1 then
data.parse_err("For spec '" .. data.prefix .. ":', only one value currently allowed")
end
if #separated_groups[1] > 1 then
data.parse_err("For spec '" .. data.prefix .. ":', no footnotes currently allowed")
end
local choice = separated_groups[1][1]
if not m_table.contains(choices, choice) then
data.parse_err("For spec '" .. data.prefix .. ":', saw value '" .. choice .. "' but expected one of '" ..
table.concat(choices, ",") .. "'")
end
return choice
end
end
for _, overridable_stem in ipairs {
"pres_unstressed",
"pres_stressed",
"pres1_and_sub",
-- Don't include pres1; use pres_1s if you need to override just that form
"impf",
"full_impf",
{"pret_conj", simple_choice({"irreg", "ar", "er", "ir"}) },
"pret_base",
"pret",
"short_pret",
"fut",
"cond",
"pres_sub_stressed",
"pres_sub_unstressed",
{"sub_conj", simple_choice({"ar", "er"}) },
"plup",
"impf_sub",
"fut_sub",
"pers_inf",
"pp",
"short_pp",
} do
if type(overridable_stem) == "string" then
overridable_stems[overridable_stem] = allow_multiple_values
else
local stem, validator = unpack(overridable_stem)
overridable_stems[stem] = validator
end
end
-- Useful as the value of the `match` property of a built-in verb. `main_verb_spec` is a Lua pattern that should match
-- the non-prefixed part of a verb, and `prefix_specs` is a list of Lua patterns that should match the prefixed part of
-- a verb. If a prefix spec is preceded by ^, it must match exactly at the beginning of the verb; otherwise, additional
-- prefixes (e.g. re-, des-) may precede. Return the prefix and main verb.
local function match_against_verbs(main_verb_spec, prefix_specs)
return function(verb)
for _, prefix_spec in ipairs(prefix_specs) do
if prefix_spec:find("^%^") then
-- must match exactly
prefix_spec = prefix_spec:gsub("^%^", "")
if prefix_spec == "" then
-- We can't use the second branch of the if-else statement because an empty () returns the current position
-- in rmatch().
local main_verb = rmatch(verb, "^(" .. main_verb_spec .. ")$")
if main_verb then
return "", main_verb
end
else
local prefix, main_verb = rmatch(verb, "^(" .. prefix_spec .. ")(" .. main_verb_spec .. ")$")
if prefix then
return prefix, main_verb
end
end
else
local prefix, main_verb = rmatch(verb, "^(.*" .. prefix_spec .. ")(" .. main_verb_spec .. ")$")
if prefix then
return prefix, main_verb
end
end
end
return nil
end
end
--[=[
Built-in (usually irregular) conjugations.
Each entry is processed in turn and consists of an object with two fields:
1. match=: Specifies the built-in verbs that match this object.
2. forms=: Specifies the built-in stems and forms for these verbs.
The value of match= is either a string beginning with "^" (match only the specified verb), a string not beginning
with "^" (match any verb ending in that string), or a function that is passed in the verb and should return the prefix
of the verb if it matches, otherwise nil. The function match_against_verbs() is provided to facilitate matching a set
of verbs with a common ending and specific prefixes (e.g. [[ter]] and [[ater]] but not [[abater]], etc.).
The value of forms= is a table specifying stems and individual override forms. Each key of the table names either a
stem (e.g. `pres_stressed`), a stem property (e.g. `vowel_alt`) or an individual override form (e.g. `pres_1s`).
Each value of a stem can either be a string (a single stem), a list of strings, or a list of objects of the form
{form = STEM, footnotes = {FOONOTES}}. Each value of an individual override should be of exactly the same form except
that the strings specify full forms rather than stems. The values of a stem property depend on the specific property
but are generally strings or booleans.
In order to understand how the stem specifications work, it's important to understand the phonetic modifications done
by combine_stem_ending(). In general, the complexities of predictable prefix, stem and ending modifications are all
handled in this function. In particular:
1. Spelling-based modifications (c/z, g/gu, gu/gü, g/j) occur automatically as appropriate for the ending.
2. If the stem begins with an acute accent, the accent is moved onto the last vowel of the prefix (for handling verbs
in -uar such as [[minguar]], pres_3s 'míngua').
3. If the ending begins with a double asterisk, this is a signal to conditionally delete the accent on the last letter
of the stem. "Conditionally" means we don't do it if the last two letters would form a diphthong without the accent
on the second one (e.g. in [[sair]], with stem 'saí'); but as an exception, we do delete the accent in stems
ending in -guí, -quí (e.g. in [[conseguir]]) because in this case the ui isn't a diphthong.
4. If the ending begins with an asterisk, this is a signal to delete the accent on the last letter of the stem, e.g.
fizé -> fizermos. Unlike for **, this removal is unconditional, so we get e.g. 'sairmos' not #'saírmos'.
5. If ending begins with i, it must get an accent after an unstressed vowel (in some but not all cases) to prevent the
two merging into a diphthong. See combine_stem_ending() for specifics.
The following stems are recognized:
-- pres_unstressed: The present indicative unstressed stem (1p, 2p). Also controls the imperative 2p
and gerund. Defaults to the infinitive stem (minus the ending -ar/-er/-ir/-or).
-- pres_stressed: The present indicative stressed stem (1s, 2s, 3s, 3p). Also controls the imperative 2s.
Default is empty if indicator `no_pres_stressed`, else a vowel alternation if such an indicator is given
(e.g. `ue`, `ì`), else the infinitive stem.
-- pres1_and_sub: Overriding stem for 1s present indicative and the entire subjunctive. Only set by irregular verbs
and by the indicators `no_pres_stressed` (e.g. [[precaver]]) and `no_pres1_and_sub` (since verbs of this sort,
e.g. [[puir]], are missing the entire subjunctive as well as the 1s present indicative). Used by many irregular
verbs, e.g. [[caber]], verbs in '-air', [[dizer]], [[ter]], [[valer]], etc. Some verbs set this and then supply an
override for the pres_1s if it's irregular, e.g. [[saber]], with irregular subjunctive stem "saib-" and special
1s present indicative "sei".
-- pres1: Special stem for 1s present indicative. Normally, do not set this explicitly. If you need to specify an
irregular 1s present indicative, use the form override pres_1s= to specify the entire form. Defaults to
pres1_and_sub if given, else pres_stressed.
-- pres_sub_unstressed: The present subjunctive unstressed stem (1p, 2p). Defaults to pres1_and_sub if given, else the
infinitive stem.
-- pres_sub_stressed: The present subjunctive stressed stem (1s, 2s, 3s, 1p). Defaults to pres1.
-- sub_conj: Determines the set of endings used in the subjunctive. Should be one of "ar" or "er".
-- impf: The imperfect stem (not including the -av-/-i- stem suffix, which is determined by the conjugation). Defaults
to the infinitive stem.
-- full_impf: The full imperfect stem missing only the endings (-a, -as, -am, etc.). Used for verbs with irregular
imperfects such as [[ser]], [[ter]], [[vir]] and [[pór]].
-- pret_conj: Determines the set of endings used in the preterite. Should be one of "ar", "er", "ir" or "irreg".
Defaults to the conjugation as determined from the infinitive. When pret_conj == "irreg", `pret` is used, otherwise
`pret_base`.
-- pret_base: The preterite stem (not including the -a-/-e-/-i- stem suffix). Defaults to the infinitive stem.
Only used when pret_conj ~= "irreg".
-- pret: The full preterite stem missing only the endings (-ste, -mos, etc.), e.g. 'fige', 'fo'. Only used for verbs
with irregular preterites (pret_conj == "irreg") such as [[facer]], [[poder]], [[traer]], etc. The pret_1s and
pret_3s are handled using the short_pret stem instead (pret_1s '-en', pret_3s '-o'). Defaults to `pret_base` + the
conjugation vowel.
-- short_pret: The short preterite stem, used with 1s and 3s endings (pret_1s '-en', pret_3s '-o'). Only used with
irregular preterites (pret_conj == "irreg"). Normally derived from pret by deleting the final vowel, and doesn't
need to be given explicitly.
-- fut: The future stem. Defaults to the infinitive stem + the conjugation vowel.
-- cond: The conditional stem. Defaults to `fut`.
-- impf_sub: The imperfect subjunctive stem. Defaults to `pret`.
-- fut_sub: The future subjunctive stem. Defaults to `pret`.
-- plup: The pluperfect stem. Defaults to `pret`.
-- pers_inf: The personal infinitive stem. Defaults to the infinitive stem + the conjugation vowel.
-- pp: The masculine singular past participle. Default is based on the verb conjugation: infinitive stem + '-ado' for
-ar verbs, otherwise infinitive stem + '-ido'.
-- short_pp: The short masculine singular past participle, for verbs with such a form. No default.
-- pp_inv: `true` if the past participle exists only in the masculine singular.
]=]
local built_in_conjugations = {
--------------------------------------------------------------------------------------------
-- -ar --
--------------------------------------------------------------------------------------------
-- Verbs not needing entries here:
--
-- (1) Verbs with short past participles: need to specify the short pp explicitly.
--
-- aceitar: use <short_pp:aceite>
-- anexar, completar, expressar, expulsar, findar, fritar, ganhar, gastar, limpar, pagar, pasmar, pegar, soltar:
-- use <short_pp:anexo> etc.
-- assentar: use <short_pp:assente>
-- entregar: use <short_pp:entregue>
-- enxugar: use <short_pp:enxuto>
-- matar: use <short_pp:morto>
--
-- (2) Verbs with orthographic consonant alternations: handled automatically.
--
-- -car (brincar, buscar, pecar, trancar, etc.): automatically handled in combine_stem_ending()
-- -zar (alcanzar, comezar, lazar): automatically handled in combine_stem_ending()
-- -gar (apagar, cegar, esmagar, largar, navegar, resmungar, sugar, etc.): automatically handled in combine_stem_ending()
-- -guar (iguar, minguar): automatically handled in combine_stem_ending()
--
-- (3) Verbs with vowel alternations: need to specify the alternation explicitly unless it always happens, in
-- which case it's handled automatically through an entry below.
--
-- esmiuzar changing to esmiúzo: use <ú>
-- faiscar changing to faísco: use <í>
-- -izar changing to -ízo (ajuizar, enraizar, homogeneizar, plebeizar, etc.): use <í>
-- reusar changing to reúso: use <ú>
-- saudar changing to saúdo: use <ú>
-- tuitar/retuitar changing to (re)tuíto: use <í>
{
-- dar
match = "^dar", -- [[desdar]] doesn't seem to exist; [[redar]] is regular and unrelated to [[dar]]
forms = {
pres_1s = "dou", pres_2s = "dás", pres_3s = "dá", pres_3p = "dán#",
pres1_and_sub = "de", -- only for subjunctive as we override pres_1s
sub_conj = "er",
pret_conj = "irreg", pret = "de", pret_1s = "dei", pret_3s = "deu", -- /dɛw/
irreg = true,
}
},
{
-- estar
match = "^estar", -- [[sobestar]] and [[sobrestar]] seem not to exist
forms = {
pres_1s = "estou", pres_2s = "estás", pres_3s = "está", pres_3p = "están",
pres1_and_sub = "este", -- only for subjunctive as we override pres_1s
sub_conj = "er",
pret_conj = "irreg", pret = "estive",
pp_inv = true, -- no [[sobestar]] or [[sobrestar]], which would be transitive
irreg = true,
}
},
{
-- verbs in -uar but not -guar
match = function(verb)
if verb:find("guar$") then
return nil
else
return match_against_verbs("uar", {""})(verb)
end
end,
forms = {
vowel_alt = "ú",
}
},
--------------------------------------------------------------------------------------------
-- -er --
--------------------------------------------------------------------------------------------
-- Verbs not needing entries here:
--
-- -cer (verbs in -ecer, vencer, etc.): automatically handled in combine_stem_ending()
-- -guer (erguer/soerguer): automatically handled in combine_stem_ending()
{
-- must be listed before -aer
match = "^traer",
forms = {
-- all occurrences of accented í and ï in endings handled in combine_stem_ending()
pres1_and_sub = "trai",
pret_conj = "irreg", pret = "trouxe",
irreg = true,
}
},
{
-- verbs in -aer (caer, raer, debaer, degraer, esvaer and derivatives of traer, but not traer itself:
-- acaer/decaer/recaer,
-- abstraer/atraer/contraer/descontraer/detraer/distraer/extraer/maltraer/retraer/retrotraer/subtraer)
match = "aer",
forms = {
-- all occurrences of accented í and ï in endings handled in combine_stem_ending()
pres1_and_sub = "ai",
irreg = true,
}
},
{
-- caber
match = "caber",
forms = {
pres1_and_sub = "caib",
pret_conj = "irreg", pret = "coube",
irreg = true,
}
},
{
-- crer, descrer
match = "crer",
forms = {
pres1_and_sub = "cre",
pres_2s = "crés#", pres_3s = "cré#", pres_3p = "crén#",
-- regular except the lack of accent in base verb
pret_1p = "crín#",
irreg = true,
}
},
{
-- acender, prender/aprender; not comprender/desprender/reprender, etc.
match = match_against_verbs("ender", {"^ac", "^pr", "^apr"}),
forms = {short_pp = "eso"},
},
{
-- erguer; but not soerguer
match = "^erguer",
forms = {short_pp = "ergueito"},
},
{
-- facer, afacer, contrafacer, desafacer, desfacer, perfacer, rarefacer, refacer, satisfacer, tumefacer
match = "facer",
forms = {
-- use 'fagu' because we're in a front environment; if we use 'fag', we'll get '#fajo'
pres1_and_sub = "fagu",
pres_2s = "fás#",
pres_3s = "fai",
pres_3p = "fán#",
pret_conj = "irreg", pret = "fixe",
pp = "feito",
fut = "far",
irreg = true,
cons_alt = false, -- avoid claiming we have a c-z alternation
}
},
{
match = "^haber",
forms = {
pres_1s = "hei",
pres_2s = "has",
pres_3s = {"ha", "hai"},
pres_3p = "han",
pres1_and_sub = "hax", -- only for subjunctive as we override pres_1s
pret_conj = "irreg", pret = "hoube",
noimp = true,
irreg = true,
}
},
{
-- ler, reler, trasler; not escoller, expeler, valer, etc.
match = match_against_verbs("ler", {"^", "^re", "tras"}),
forms = {
pres1_and_sub = "le",
pres_2s = "lés#", pres_3s = "lé#", pres_3p = "lén#",
-- regular except the lack of accent in base verb
pret_1p = "lín#",
irreg = true,
}
},
{
-- morrer, premorrer
match = "morrer",
forms = {pp = "morto"},
},
{
-- nacer; but not renacer
match = "^nacer",
forms = {short_pp = "nado"},
},
{
-- moer, but not remoer
match = "^moer",
forms = {
-- all occurrences of accented í and ï in endings handled in combine_stem_ending()
pres1_and_sub = "moi",
short_pp = "mudo", -- the main table says 'mundo' but the page for [[mundo]] says 'mudo' is "máis recomendable"
irreg = true,
}
},
{
-- choer/deschoer, doer/condoer, remoer, proer, roer/corroer
match = "oer",
forms = {
-- all occurrences of accented í and ï in endings handled in combine_stem_ending()
pres1_and_sub = "oi",
irreg = true,
}
},
{
-- coller, toller and derivatives (acoller, desacoller, desencoller, encoller, entrecoller, escoller, recoller;
-- destoller, entretoller)
match = "oller",
forms = {short_pp = "olleito"},
},
{
-- poder
match = "poder",
forms = {
pres1_and_sub = "poid", -- only for subjunctive as we override pres_1s
pres_1s = "podo", -- /ɔ/
pret_conj = "irreg", pret = "puide",
irreg = true,
}
},
{
-- poñer, antepoñer, apoñer/desapoñer, arrepoñer, compoñer/descompoñer/recompoñer, contrapoñer, depoñer,
-- dispoñer/indispoñer/predispoñer, empoñer, expoñer/sobreexpoñer/subexpoñer, impoñer/reimpoñer, interpoñer,
-- opoñer, pospoñer, propoñer, repoñer, sobrepoñer, superpoñer, supoñer/presupoñer, traspoñer, xustapoñer
match = "poñer",
forms = {
pres_2s = "pós#", pres_3s = "pón#",
pret_conj = "irreg", pret = "puxe",
pp = "posto",
irreg = true,
}
},
{
-- pracer, but not apracer, compracer, descompracer, despracer
match = "^pracer",
forms = {
pret_conj = "irreg", pret = "prougue",
irreg = true,
}
},
-- prover below, just below ver
{
-- querer
match = "querer",
forms = {
pres1_and_sub = "queir", -- only for subjunctive as we override pres_1s
pres_1s = "quero", -- /ɛ/
pret_conj = "irreg", pret = "quixe",
irreg = true,
}
},
{
-- romper; but not corromper, interromper, irromper or prorromper
match = "^romper",
forms = {short_pp = "roto"},
},
{
-- saber, ressaber
match = "saber",
forms = {
pres_1s = "sei",
pres1_and_sub = "saib", -- only for subjunctive as we override pres_1s
pret_conj = "irreg", pret = "soube",
irreg = true,
}
},
{
-- absolver, disolver, resolver
match = "solver",
forms = {short_pp = "solto"},
},
{
-- suspender; but not others in -pender
match = "suspender",
forms = {short_pp = "suspenso"},
},
{
match = "^ser",
forms = {
pres_1s = "son", pres_2s = "es", pres_3s = "é",
pres_1p = "somos", pres_2p = "sodes", pres_3p = "son",
pres1_and_sub = "sex", -- only for subjunctive as we override pres_1s
full_impf = "er",
pret_conj = "irreg", pret = "fo", pret_1s = "fun", pret_2s = "fuches", pret_3s = "foi",
imp_2s = "sé", imp_2p = "sede",
irreg = true,
}
},
{
-- We want to match abster, conter, deter, etc. but not abater, cometer, etc. No way to avoid listing each verb.
match = match_against_verbs("ter", {"abs", "^a", "con", "de", "entre", "man", "ob", "^re", "sos", "^"}),
forms = {
pres_2s = "tés#", pres_3s = "tén#", pres_2p = {"tendes", "tedes"}, pres_3p = "teñen",
pres1_and_sub = "teñ",
full_impf = "tiñ",
pret_conj = "irreg", pret = "tive",
irreg = true,
}
},
-- traer listed above at the beginning of the -er verbs
{
-- valer, equivaler
match = "valer",
forms = {
pres1_and_sub = "vall",
irreg = true,
}
},
{
-- We want to match antever etc. but not absolver, atrever etc. No way to avoid listing each verb.
-- NOTE: [[rever]] has two meanings, one with regular conjugation. Use <no_built_in> for this one.
match = match_against_verbs("ver", {"entre", "pre", "^re", "^"}),
forms = {
pres_2s = "vés#", pres_3s = "vé#", pres_3p = "vén#",
pres1_and_sub = "vex",
pret_conj = "irreg", pret = "vi", pret_1s = "vín#", pret_3s = "viu",
pp = "visto",
irreg = true,
}
},
{
-- [[prover]] has regular preterite and past participle
match = "^prover",
forms = {
pres_2s = "provés", pres_3s = "prové", pres_3p = "provén",
pres1_and_sub = "provex",
short_pp = "provisto",
irreg = true,
}
},
{
-- [[desprover]] has its own conjugation
match = "^desprover",
forms = {
pres_2s = "desprovés", pres_3s = "desprové", pres_3p = "desprovén",
pres1_and_sub = "desprove",
short_pp = "desprovisto",
irreg = true,
}
},
{
-- volver, avolver/desenvolver/devolver/envolver/revolver
match = "volver",
forms = {short_pp = "volto"},
},
--------------------------------------------------------------------------------------------
-- -ir --
--------------------------------------------------------------------------------------------
-- Verbs not needing entries here:
--
-- subir (NOT rubir), acudir/sacudir (NOT escudir, aludir/eludir), urdir/desurdir, xurdir/rexurdir,
-- engulir, pulir, bulir/rebulir, ulir, mulir (NOT escapulir), durmir, sumir/consumir/ensumir (NOT
-- asumir/reasumir/presumir/resumir/subsumir), cuspir/chuspir, sufrir, tusir, xunguir/conxunguir/desxunguir,
-- munguir, fuxir/muxir/ruxir: use <u-o>
-- [NOTE: imp_2s durme, consume/sume]
-- sosubir/susubir: use <u-o>? (archaic, not in RAG dictionary)
-- abolir: use <no_pres_stressed>
-- descolorir: use <no_pres_stressed>
-- empedernir: use <no_pres_stressed>
-- espir/despir, refletir, adherir, pedir/desapedir/despedir/expedir/impedir/reexpedir, medir/comedir/descomedir,
-- aferir/conferir/deferir/diferir/inferir/interferir/preferir/proferir/referir/transferir,
-- dixerir/enxerir/suxerir, preterir, competir/repetir, advertir/divertir, vestir/investir/revestir/travestir,
-- agredir/transgredir, espelir: use <i>
-- mentir/desmentir, sentir/asentir/consentir/disentir/presentir/resentir, ferir (but no derivatives), servir,
-- seguir/conseguir/perseguir/proseguir: use <i-e>
-- [NOTE: imp_2s minte]
-- denegrir: use <i.only3sp>
-- prohibir/coibir: regular
-- cumprir: use <no_built_in> in the meaning "fulfill"
-- reunir: use <ú>
-- argüír/redargüír: use <ú>?
--
-- -cir alternations (aducir, resarcir): automatically handled in combine_stem_ending()
-- -guir alternations (e.g. conseguir, cinguir, xunguir, tinguir): automatically handled in combine_stem_ending()
-- -quir alternations (e.g. delinquir): automatically handled in combine_stem_ending()
-- -güír alternations (e.g. argüír): automatically handled in combine_stem_ending()
{
-- saír/sobresaír
match = "aír",
forms = {
pres1_and_sub = "ai",
-- all occurrences of accented í and ï in endings handled in combine_stem_ending()
irreg = true,
}
},
{
-- abrir/desabrir/reabrir
match = "abrir",
forms = {pp = "aberto"},
},
{
-- aflixir
match = "aflixir",
-- FIXME: should this be {pp = {"aflicto", "aflixido"}}?
forms = {short_pp = "aflicto"},
},
{
-- cubrir/descubrir/encubrir/recubrir/redescubrir
match = "cubrir",
forms = {vowel_alt = "u-o", pp = "coberto"},
},
{
-- cumprir (only in the meaning "to be necessary"; otherwise use <no_built_in>)
match = "^cumprir",
forms = {
-- We could create a <u-ó> just for this verb but that seems overkill unless another such verb appears
pres_stressed = "cómpr",
pres1_and_sub = "cumpr",
},
},
{
-- dicir, bendicir, contradicir, desdicir, maldicir, predicir
-- FIXME: bendicir and maldicir can also be entirely regular. This could be handled like this:
-- ((bendicir<>,bendicir<no_built_in>))
match = "dicir",
forms = {
-- use 'digu' because we're in a front environment; if we use 'dig', we'll get '#dijo'
pres1_and_sub = "digu",
pres_2s = "dís#", pres_3s = "dí#", pres_3p = "dín#",
pret_conj = "irreg", pret = "dixe",
pp = function(base, prefix) return (prefix == "" or prefix == "des" or prefix == "pre") and "dito" or
{"dito", "dicido"} end,
pp = "dito",
fut = "dir",
irreg = true,
cons_alt = false, -- avoid claiming we have a c-z alternation
}
},
{
-- elixir, reelixir
match = "elixir",
-- FIXME: should this be {pp = {"electo", "elixido"}}?
forms = {short_pp = "electo"},
},
{
-- frixir/sofrixir, fritir/sofritir
match = "fri[xt]ir",
forms = {short_pp = "frito"},
},
{
-- inserir, reinserir
match = "inserir",
forms = {
vowel_alt = "i",
short_pp = "inserto",
},
},
{
-- ir
match = "^ir",
forms = {
pres_1s = "vou", pres_2s = "vas", pres_3s = "vai", pres_1p = "imos", pres_2p = "ides", pres_3p = "van",
pres1_and_sub = "vai", -- only for subjunctive as we override pres_1s
pret_conj = "irreg", pret = "fo", pret_1s = "fun", pret_2s = "fuches", pret_3s = "foi",
imp_1p = "vamos",
irreg = true,
}
},
{
-- oír, desoír, entreoír
match = "oír",
forms = {
-- all occurrences of accented í and ï in endings handled in combine_stem_ending()
pres1_and_sub = "oi", -- /ɔ/
irreg = true,
}
},
{
match = "ouvir",
forms = {
pres1_and_sub = "ouz",
irreg = true,
}
},
{
-- parir, malparir
match = "parir",
forms = {
pres1_and_sub = "pair",
irreg = true,
}
},
{
-- imprimir/reimprimir/sobreimprimir, but not comprimir/descomprimir, deprimir, oprimir, reprimir, suprimir
match = "imprimir",
forms = {short_pp = "impreso"}
},
{
-- rir, sorrir
match = match_against_verbs("rir", {"^", "sor"}),
forms = {
pres_2s = "ris#", pres_3s = "ri#", pres_3p = "rin#",
pret_1s = "rin#", -- regular except the lack of accent in base verb
pres1_and_sub = "rí",
irreg = true,
}
},
{
-- adscribir, circunscribir, describir, escribir/reescribir, inscribir, prescribir, proscribir, sobrescribir,
-- subscribir, transcribir
match = "scribir",
forms = {
pp = "scrito",
irreg = true,
}
},
{
-- concluír/recluír; not excluír/incluír/ocluír
match = match_against_verbs("cluír", {"con", "re"}),
forms = {
-- all occurrences of accented í and ï in endings handled in combine_stem_ending()
vowel_alt = "ú",
short_pp = "cluso",
}
},
{
-- posuír; not desposuír
match = "^posuír",
forms = {
-- all occurrences of accented í and ï in endings handled in combine_stem_ending()
vowel_alt = "ú",
short_pp = "poseso",
}
},
{
-- remaining verbs in -uír (excluír/incluír/ocluír, diluír,
-- afluír/confluír/difluír/fluír/efluír/influír/refluír, atuír/desatuír,
-- atribuír/contribuír/distribuír/redistribuír/retribuír/substituír,
-- constituír/destituír/instituír/prostituír/reconstituír/restituír,
-- construír/desobstruír/destruír/instruír/obstruír/reconstruír, derruír,
-- desposuír, diminuír, luír/esluír, estatuír, imbuír, inmiscuír, intuír, puír, pruír)
match = "[uü]ír", -- this won't match -guir verbs (e.g. [[conseguir]]) or -quir verbs (e.g. [[delinquir]])
forms = {
-- all occurrences of accented í and ï in endings handled in combine_stem_ending()
vowel_alt = "ú",
}
},
{
-- We want to match advir, convir, devir, etc. but not ouvir, servir, etc. No way to avoid listing each verb.
match = match_against_verbs("vir", {"ad", "^a", "con", "contra", "de", "^desa", "inter", "pre", "pro", "sobre", "^"}),
forms = {
pres_2s = "vés", pres_3s = "vén", pres_2p = {"vindes", "vides"}, pres_3p = "veñen",
pres1_and_sub = "veñ",
full_impf = "viñ",
pret_conj = "irreg", pret = "viñe", pret_1s = "vín#", pret_3s = "veu",
pp = "vindo",
-- FIXME! The following is as in the RAG tables but may be a typo and should be vén for [[vir]] like pres_3s
imp_2s = "vén#",
irreg = true,
}
},
--------------------------------------------------------------------------------------------
-- misc --
--------------------------------------------------------------------------------------------
{
-- pór, antepor, apor/desapor, arrepor, compor/descompor/recompor, contrapor, depor, dispor/indispor/predispor,
-- empor, expor/sobreexpor/subexpor, impor/reimpor, interpor, opor, pospor, propor, repor, sobrepor,
-- superpor, supor/presupor, traspor, xustapor
match = "p[oó]r",
forms = {
pres_2s = "pós#", pres_3s = "pón#", pres_1p = "pomos", pres_2p = "pondes", pres_3p = "pón#",
pres1_and_sub = "poñ",
full_impf = "puñ",
pret_conj = "irreg", pret = "puxe",
fut = "por",
pers_inf = "po",
pers_inf_1s = function(base, prefix) return prefix == "" and "pór" or "por" end,
pers_inf_3s = function(base, prefix) return prefix == "" and "pór" or "por" end,
gerund = "pondo", pp = "posto",
irreg = true,
}
},
}
local function skip_slot(base, slot, allow_overrides)
if not allow_overrides and (base.basic_overrides[slot] or
base.refl and base.basic_reflexive_only_overrides[slot]) then
-- Skip any slots for which there are overrides.
return true
end
if base.only3s and (slot:find("^pp_f") or slot:find("^pp_mp")) then
-- diluviar, atardecer, neviscar; impersonal verbs have only masc sing pp
return true
end
if not slot:find("[123]") then
-- Don't skip non-personal slots.
return false
end
if base.nofinite then
return true
end
if (base.noimp or base.only3s or base.only3sp or base.only3p) and (slot:find("^imp_") or slot:find("^neg_imp_")) then
return true
end
if base.only3s and not slot:find("3s") then
-- diluviar, atardecer, neviscar
return true
end
if base.only3sp and not slot:find("3[sp]") then
-- atañer, concernir
return true
end
if base.only3p and not slot:find("3p") then
-- [[caer cuatro gotas]], [[caer chuzos de punta]], [[entrarle los siete males]]
return true
end
return false
end
-- Apply vowel alternations to stem.
local function apply_vowel_alternations(stem, alternations)
local alternation_stems = {}
local saw_pres1_and_sub = false
local saw_pres_stressed = false
local saw_imp2s_override = false
local origstem = stem
-- Treat final -gu, -qu as a consonant, so the previous vowel can alternate (e.g. conseguir -> consigo).
-- This means a verb in -guar can't have a u-ú alternation but I don't think there are any verbs like that.
stem = rsub(stem, "([gq])u$", "%1" .. TEMPC1)
-- Process alternations other than +.
for _, altobj in ipairs(alternations) do
local alt = altobj.form
local pres1_and_sub, pres_stressed, imp2s_override, err
if alt == "+" then
-- do nothing yet
else
local before_last_vowel, last_vowel, after_last_vowel = rmatch(stem, "^(.*)(" .. V .. ")(.-)$")
if alt == "i-e" then
if last_vowel == "e" or last_vowel == "i" then
pres1_and_sub = before_last_vowel .. "i" .. after_last_vowel
imp2s_override = pres1_and_sub
if last_vowel == "i" then
pres_stressed = before_last_vowel .. "e" .. after_last_vowel
end
else
err = "should have -e- or -i- as the last vowel"
end
elseif alt == "i" then
if last_vowel == "e" then
pres1_and_sub = before_last_vowel .. "i" .. after_last_vowel
pres_stressed = pres1_and_sub
else
err = "should have -e- as the last vowel"
end
elseif alt == "u-o" then
if last_vowel == "o" or last_vowel == "u" then
pres1_and_sub = before_last_vowel .. "u" .. after_last_vowel
imp2s_override = pres1_and_sub
if last_vowel == "u" then
pres_stressed = before_last_vowel .. "o" .. after_last_vowel
end
else
err = "should have -o- or -u- as the last vowel"
end
elseif alt == "u" then
if last_vowel == "o" then
pres1_and_sub = before_last_vowel .. "u" .. after_last_vowel
pres_stressed = pres1_and_sub
else
err = "should have -o- as the last vowel"
end
elseif alt == "í" then
if last_vowel == "i" then
pres_stressed = before_last_vowel .. "í" .. after_last_vowel
else
err = "should have -i- as the last vowel"
end
elseif alt == "ú" then
if last_vowel == "u" or last_vowel == "ü" then
pres_stressed = before_last_vowel .. "ú" .. after_last_vowel
else
err = "should have -u- or -ü- as the last vowel"
end
else
error("Internal error: Unrecognized vowel alternation '" .. alt .. "'")
end
end
local function unapply_u_mod(val)
if val then
return {form = val:gsub(TEMPC1, "u"), footnotes = altobj.footnotes}, true
else
return nil, false
end
end
pres1_and_sub, saw_pres1_and_sub = unapply_u_mod(pres1_and_sub)
pres_stressed, saw_pres_stressed = unapply_u_mod(pres_stressed)
imp2s_override, saw_imp2s_override = unapply_u_mod(imp2s_override)
table.insert(alternation_stems, {
altobj = altobj,
pres1_and_sub = pres1_and_sub,
pres_stressed = pres_stressed,
imp2s_override = imp2s_override,
err = err
})
end
-- Now do +. We check to see which stems are used by other alternations and specify those so any footnotes are
-- properly attached.
for _, alternation_stem in ipairs(alternation_stems) do
if alternation_stem.altobj.form == "+" then
local stemobj = {form = origstem, footnotes = alternation_stem.altobj.footnotes}
alternation_stem.pres1_and_sub = saw_pres1_and_sub and stemobj or nil
alternation_stem.pres_stressed = saw_pres_stressed and stemobj or nil
alternation_stem.imp2s_override = saw_imp2s_override and stemobj or nil
end
end
return alternation_stems
end
-- Add the `stem` to the `ending` for the given `slot` and apply any phonetic modifications.
-- WARNING: This function is written very carefully; changes to it can easily have unintended consequences.
local function combine_stem_ending(base, slot, prefix, stem, ending, dont_include_prefix)
-- If the ending begins with an acute accent, it goes after the last vowel, but we don't have to do anything.
-- Use the full stem for checking for -gui ending and such, because 'stem' is just 'u' for [[arguir]],
-- [[delinquir]].
local full_stem = prefix .. stem
-- Include the prefix in the stem unless dont_include_prefix is given (used for the past participle stem).
if not dont_include_prefix then
stem = full_stem
end
-- If ending begins with i, it must get an accent after a/o/u to prevent the two merging into a diphthong:
-- caer -> caíches, caído; doer -> doíches, doído; concluír -> concluíches, concluído.
if ending:find("^i") and stem:find("[aouü]$") and not stem:find("[gq]u$") then
-- Special case for impf_1p/impf_2p, where the i is unstressed and changes into ï. FIXME: Maybe we should be
-- checking the slot value instead.
if ending == "iamos" or ending == "iades" then
ending = ending:gsub("^i", "ï")
else
ending = ending:gsub("^i", "í")
end
end
-- Spelling changes in the stem; it depends on whether the stem given is the pre-front-vowel or
-- pre-back-vowel variant, as indicated by `frontback`. We want these front-back spelling changes to happen
-- between stem and ending, not between prefix and stem; the prefix may not have the same "front/backness"
-- as the stem.
local is_front = rfind(ending, "^[eiéíï]")
if base.frontback == "front" and not is_front then
stem = stem:gsub("c$", "z") -- coñecer -> coñezo, vencer -> venzo, inmiscir -> inmiszo
stem = stem:gsub("gu$", "g") -- distinguir -> distingo, conseguir -> consigo
stem = stem:gsub("qu$", "c") -- delinquir -> delinco
stem = stem:gsub("gü$", "gu") -- argüír -> arguamos
elseif base.frontback == "back" and is_front then
stem = stem:gsub("gu$", "gü") -- iguar -> igüei
stem = stem:gsub("g$", "gu") -- cargar -> carguei, apagar -> apaguei
stem = stem:gsub("c$", "qu") -- marcar -> marquei
stem = rsub(stem, "z$", "c") -- aderezar -> aderecei
end
local retval = stem .. ending
if retval:find("#$") then -- remove final accent if no prefix
retval = retval:gsub("#$", "")
if prefix == "" then
retval = com.remove_final_accent(retval)
end
end
return retval
end
local function add3(base, slot, stems, endings, footnotes, allow_overrides)
if skip_slot(base, slot, allow_overrides) then
return
end
local function do_combine_stem_ending(stem, ending)
return combine_stem_ending(base, slot, base.prefix, stem, ending)
end
iut.add_forms(base.forms, slot, stems, endings, do_combine_stem_ending, nil, nil, footnotes)
end
local function insert_form(base, slot, form)
if not skip_slot(base, slot) then
iut.insert_form(base.forms, slot, form)
end
end
local function insert_forms(base, slot, forms)
if not skip_slot(base, slot) then
iut.insert_forms(base.forms, slot, forms)
end
end
local function add_single_stem_tense(base, slot_pref, stems, s1, s2, s3, p1, p2, p3)
local function addit(slot, ending)
add3(base, slot_pref .. "_" .. slot, stems, ending)
end
addit("1s", s1)
addit("2s", s2)
addit("3s", s3)
addit("1p", p1)
addit("2p", p2)
addit("3p", p3)
end
local function construct_stems(base, vowel_alt, imp_only)
local stems = {}
if imp_only then
stems.imp2s_override =
-- If no_pres_stressed given, there should be no imp_2s.
not base.no_pres_stressed and (
base.stems.imp2s_override or
vowel_alt.imp2s_override or
nil) or nil
base.this_stems = stems
return
end
local function combine(slot, stem, ending)
return combine_stem_ending(base, slot, base.prefix, stem, ending, "dont include prefix")
end
stems.pres_unstressed = base.stems.pres_unstressed or base.inf_stem
stems.pres_stressed =
-- If no_pres_stressed given, pres_stressed stem should be empty so no forms are generated.
base.no_pres_stressed and {} or
base.stems.pres_stressed or
vowel_alt.pres_stressed or
base.inf_stem
stems.pres1_and_sub =
-- If no_pres_stressed given, the entire subjunctive is missing.
base.no_pres_stressed and {} or
-- If no_pres1_and_sub given, pres1 and entire subjunctive are missing.
base.no_pres1_and_sub and {} or
base.stems.pres1_and_sub or
vowel_alt.pres1_and_sub or
nil
stems.pres1 = base.stems.pres1 or stems.pres1_and_sub or stems.pres_stressed
stems.impf = base.stems.impf or base.inf_stem
stems.full_impf = base.stems.full_impf
stems.pret_base = base.stems.pret_base or base.inf_stem
stems.pret_conj = base.stems.pret_conj or base.conj
stems.pret = base.stems.pret or iut.map_forms(iut.convert_to_general_list_form(stems.pret_base),
-- use combine_stem_ending esp. so we get saíra etc.
function(form) return combine("pret", form, base.conj_vowel) end)
stems.short_pret = base.stems.gl_short_pret or iut.map_forms(iut.convert_to_general_list_form(stems.pret),
function(form) return rsub(form, com.V .. "$", "") end)
stems.fut = base.stems.fut or base.inf_stem .. base.conj
stems.cond = base.stems.cond or stems.fut
stems.pres_sub_stressed = base.stems.pres_sub_stressed or stems.pres1
stems.pres_sub_unstressed = base.stems.pres_sub_unstressed or stems.pres1_and_sub or stems.pres_unstressed
stems.sub_conj = base.stems.sub_conj or base.conj
stems.plup = base.stems.plup or stems.pret
-- Needed for plup_1p and plup_2p if there's an accent in the regular pluperfect stem (as for [[saír]]).
stems.plup_unstressed = iut.map_forms(iut.convert_to_general_list_form(stems.plup), com.remove_final_accent)
stems.impf_sub = base.stems.impf_sub or stems.pret
-- Needed for impf_sub_1p and impf_sub_2p. We can't just add an acute accent because there may already be one
-- (as for [[saír]]).
stems.impf_sub_antepenult_stressed = iut.map_forms(iut.convert_to_general_list_form(stems.impf_sub), com.add_final_accent)
stems.fut_sub = base.stems.fut_sub or stems.pret
-- use combine_stem_ending esp. so we get saír, saírmos, etc.
stems.pers_inf = base.stems.pers_inf or combine("pers_inf", base.inf_stem, base.conj_vowel)
-- use combine_stem_ending esp. so we get roído, caído, etc.
stems.pp = base.stems.pp or combine("pp_ms", base.inf_stem, base.conj == "ar" and "ado" or "ido")
stems.pp_ms = stems.pp
local function masc_to_fem(form)
if rfind(form, "o$") then
return rsub(form, "o$", "a")
else
return form
end
end
stems.pp_fs = iut.map_forms(iut.convert_to_general_list_form(stems.pp_ms), masc_to_fem)
if base.stems.short_pp then
stems.short_pp_ms = base.stems.short_pp
stems.short_pp_fs = iut.map_forms(iut.convert_to_general_list_form(stems.short_pp_ms), masc_to_fem)
end
base.this_stems = stems
end
local function add_present_indic(base)
local stems = base.this_stems
local function addit(slot, stems, ending)
add3(base, "pres_" .. slot, stems, ending)
end
local s2, s3, p1, p2, p3
if base.conj == "ar" then
s2, s3, p1, p2, p3 = "as", "a", "amos", "ades", "an"
elseif base.conj == "er" or base.conj == "or" then -- verbs in -por have the present overridden
s2, s3, p1, p2, p3 = "es", "e", "emos", "edes", "en"
elseif base.conj == "ir" then
s2, s3, p1, p2, p3 = "es", "e", "imos", "ides", "en"
else
error("Internal error: Unrecognized conjugation " .. base.conj)
end
addit("1s", stems.pres1, "o")
addit("2s", stems.pres_stressed, s2)
addit("3s", stems.pres_stressed, s3)
addit("1p", stems.pres_unstressed, p1)
addit("2p", stems.pres_unstressed, p2)
addit("3p", stems.pres_stressed, p3)
end
local function add_present_subj(base)
local stems = base.this_stems
local function addit(slot, stems, ending)
add3(base, "pres_sub_" .. slot, stems, ending)
end
local s1, s2, s3, p1, p2, p3
if stems.sub_conj == "ar" then
s1, s2, s3, p1, p2, p3 = "e", "es", "e", "emos", "edes", "en"
else
s1, s2, s3, p1, p2, p3 = "a", "as", "a", "amos", "ades", "an"
end
addit("1s", stems.pres_sub_stressed, s1)
addit("2s", stems.pres_sub_stressed, s2)
addit("3s", stems.pres_sub_stressed, s3)
addit("1p", stems.pres_sub_unstressed, p1)
addit("2p", stems.pres_sub_unstressed, p2)
addit("3p", stems.pres_sub_stressed, p3)
end
local function add_finite_non_present(base)
local stems = base.this_stems
local function add_tense(slot, stem, s1, s2, s3, p1, p2, p3)
add_single_stem_tense(base, slot, stem, s1, s2, s3, p1, p2, p3)
end
if stems.full_impf then
add_tense("impf", stems.full_impf, "a", "as", "a", "amos", "ades", "an")
elseif base.conj == "ar" then
add_tense("impf", stems.impf, "aba", "abas", "aba", "abamos", "abades", "aban")
else
add_tense("impf", stems.impf, "ía", "ías", "ía", "iamos", "iades", "ían")
end
if stems.pret_conj == "irreg" then
add_tense("pret", stems.short_pret, "en", nil, "o")
add_tense("pret", stems.pret, nil, "ches", nil, "mos", "stes", "ron")
elseif stems.pret_conj == "ar" then
add_tense("pret", stems.pret_base, "ei", "aches", "ou", "amos", "astes", "aron")
elseif stems.pret_conj == "er" then
add_tense("pret", stems.pret_base, "ín", "iches", "eu", "emos", "estes", "eron")
else
add_tense("pret", stems.pret_base, "ín", "iches", "iu", "imos", "istes", "iron")
end
add_tense("plup", stems.plup, "ra", "ras", "ra", nil, nil, "ran")
add_tense("plup", stems.plup_unstressed, nil, nil, nil, "ramos", "rades", nil)
add_tense("impf_sub", stems.impf_sub, "se", "ses", "se", nil, nil, "sen")
add_tense("impf_sub", stems.impf_sub_antepenult_stressed, nil, nil, nil, "semos", "sedes", nil)
add_tense("fut_sub", stems.fut_sub, "r", "res", "r", "rmos", "rdes", "ren")
add_tense("fut", stems.fut, "ei", "ás", "á", "emos", "edes", "án")
add_tense("cond", stems.cond, "ía", "ías", "ía", "iamos", "iades", "ían")
-- [[pór]] needs overrides of the pers_inf_1s and pers_inf_3s.
add_tense("pers_inf", stems.pers_inf, "r", "res", "r", "rmos", "rdes", "ren")
end
local function add_non_finite_forms(base)
local stems = base.this_stems
local function addit(slot, stems, ending, footnotes)
add3(base, slot, stems, ending, footnotes)
end
insert_form(base, "infinitive", {form = base.verb})
-- Also insert "infinitive + reflexive pronoun" combinations if we're handling a reflexive verb. See comment below
-- for "gerund + reflexive pronoun" combinations.
if base.refl then
for _, persnum in ipairs(person_number_list) do
insert_form(base, "infinitive_" .. persnum, {form = base.verb})
end
end
-- verbs in -por have the gerund overridden
local ger_ending = base.conj == "ar" and "ando" or base.conj == "er" and "endo" or "indo"
addit("gerund", stems.pres_unstressed, ger_ending)
-- Also insert "gerund + reflexive pronoun" combinations if we're handling a reflexive verb. We insert exactly the
-- same form as for the bare gerund; later on in add_reflexive_or_fixed_clitic_to_forms(), we add the appropriate
-- clitic pronouns. It's important not to do this for non-reflexive verbs, because in that case, the clitic
-- pronouns won't be added, and {{gl-verb form of}} will wrongly consider all these combinations as possible
-- inflections of the bare gerund. Thanks to [[User:JeffDoozan]] for this bug fix.
if base.refl then
for _, persnum in ipairs(person_number_list) do
addit("gerund_" .. persnum, stems.pres_unstressed, ger_ending)
end
end
-- Skip the long/short past participle footnotes if called from {{gl-verb}} so they don't show in the headword.
local long_pp_footnotes =
stems.short_pp_ms and base.alternant_multiword_spec.source_template ~= "gl-verb" and {long_pp_footnote} or nil
addit("pp_ms", stems.pp_ms, "", long_pp_footnotes)
if not base.pp_inv then
addit("pp_fs", stems.pp_fs, "", long_pp_footnotes)
addit("pp_mp", stems.pp_ms, "s", long_pp_footnotes)
addit("pp_fp", stems.pp_fs, "s", long_pp_footnotes)
end
if stems.short_pp_ms then
local short_pp_footnotes =
stems.short_pp_ms and base.alternant_multiword_spec.source_template ~= "gl-verb" and {short_pp_footnote} or nil
addit("short_pp_ms", stems.short_pp_ms, "", short_pp_footnotes)
if not base.pp_inv then
addit("short_pp_fs", stems.short_pp_fs, "", short_pp_footnotes)
addit("short_pp_mp", stems.short_pp_ms, "s", short_pp_footnotes)
addit("short_pp_fp", stems.short_pp_fs, "s", short_pp_footnotes)
end
end
end
local function add_imperatives(base)
for _, vowel_alt in ipairs(base.vowel_alt_stems) do
construct_stems(base, vowel_alt, "imp only")
local stems = base.this_stems
if stems.imp2s_override then
add3(base, "imp_2s", stems.imp2s_override, base.conj == "ar" and "a" or "e")
else
-- Copy pres3s to imperative since they are almost always the same.
insert_forms(base, "imp_2s", iut.map_forms(base.forms.pres_3s, function(form) return form end))
end
end
if not skip_slot(base, "imp_2p") then
-- Copy pres2p to imperative 2p minus -s since they are almost always the same.
-- But not if there's an override, to avoid possibly throwing an error.
insert_forms(base, "imp_2p", iut.map_forms(base.forms.pres_2p, function(form)
local form_no_s = rmatch(form, "^(.*)s$")
if not form_no_s then
error("Can't derive second-person plural imperative from second-person plural present indicative " ..
"because form '" .. form .. "' doesn't end in -s")
end
return form_no_s
end))
end
-- Copy subjunctives to imperatives, unless there's an override for the given slot (as with the imp_1p of [[ir]]).
for _, persnum in ipairs({"3s", "1p", "3p"}) do
local from = "pres_sub_" .. persnum
local to = "imp_" .. persnum
insert_forms(base, to, iut.map_forms(base.forms[from], function(form) return form end))
end
end
local function process_slot_overrides(base, filter_slot, reflexive_only)
local overrides = reflexive_only and base.basic_reflexive_only_overrides or base.basic_overrides
for slot, forms in pairs(overrides) do
if not filter_slot or filter_slot(slot) then
add3(base, slot, forms, "", nil, "allow overrides")
end
end
end
-- Prefix `form` with `clitic`, adding fixed text `between` between them. Add links as appropriate unless the user
-- requested no links. Check whether form already has brackets (as will be the case if the form has a fixed clitic).
local function prefix_clitic_to_form(base, clitic, between, form)
if base.alternant_multiword_spec.args.noautolinkverb then
return clitic .. between .. form
else
local clitic_pref = "[[" .. clitic .. "]]" .. between
if form:find("%[%[") then
return clitic_pref .. form
else
return clitic_pref .. "[[" .. form .. "]]"
end
end
end
-- Add the appropriate clitic pronouns in `clitics` to the forms in `base_slot`. `store_cliticized_form` is a function
-- of three arguments (clitic, formobj, cliticized_form) and should store the cliticized form for the specified clitic
-- and form object.
local function suffix_clitic_to_forms(base, base_slot, clitics, store_cliticized_form)
if not base.forms[base_slot] then
-- This can happen, e.g. in only3s/only3sp/only3p verbs.
return
end
for _, formobj in ipairs(base.forms[base_slot]) do
-- Figure out the correct accenting of the verb when a clitic pronoun is attached to it. We may need to
-- add or remove an accent mark:
-- (1) No accent mark currently, none needed: infinitive sentar -> sentarse; imperative singular ten -> tente;
-- (2) Accent mark currently, still needed: infinitive concluír -> concluírse;
-- (3) No accent mark currently, accent needed: imperative singular sinte -> síntete;
-- (4) Accent mark currently, not needed: third singular sentirá -> sentirase, imperative singular dá -> date.
local syllables = com.syllabify(formobj.form)
local sylno = com.stressed_syllable(syllables)
table.insert(syllables, "lo") -- arbitrary stand-in
local needs_accent = com.accent_needed(syllables, sylno)
if needs_accent then
syllables[sylno] = com.add_accent_to_syllable(syllables[sylno])
else
syllables[sylno] = com.remove_accent_from_syllable(syllables[sylno])
end
table.remove(syllables) -- remove added clitic pronoun
local reaccented_form = table.concat(syllables)
for _, clitic in ipairs(clitics) do
local cliticized_form
-- Some further special cases.
if base_slot:find("_1p$") and clitic == "nos" then
-- Final -s disappears: sintamos + nos -> sintámonos
cliticized_form = reaccented_form:gsub("s$", "") .. clitic
elseif clitic:find("^[oa]s?$") then
if reaccented_form:find("[rs]$") then
cliticized_form = reaccented_form:gsub("[rs]$", "l") .. clitic
elseif reaccented_form:find(V .. "[iu]$") then
cliticized_form = reaccented_form .. "n" .. clitic
else
cliticized_form = reaccented_form .. clitic
end
else
cliticized_form = reaccented_form .. clitic
end
store_cliticized_form(clitic, formobj, cliticized_form)
end
end
end
-- Add a reflexive pronoun or fixed clitic (FIXME: not working), as appropriate to the base forms that were generated.
-- `do_joined` means to do only the forms where the pronoun is joined to the end of the form; otherwise, do only the
-- forms where it is not joined and precedes the form.
local function add_reflexive_or_fixed_clitic_to_forms(base, do_reflexive, do_joined)
for _, slotaccel in ipairs(base.alternant_multiword_spec.verb_slots_basic) do
local slot, accel = unpack(slotaccel)
local clitic
if not do_reflexive then
clitic = base.clitic
elseif slot:find("[123]") then
local persnum = slot:match("^.*_(.-)$")
clitic = person_number_to_reflexive_pronoun[persnum]
else
clitic = "se"
end
if base.forms[slot] then
if do_reflexive and slot:find("^pp_") or slot == "infinitive_linked" then
-- do nothing with reflexive past participles or with infinitive linked (handled at the end)
elseif slot:find("^neg_imp_") then
error("Internal error: Should not have forms set for negative imperative at this stage")
else
local slot_has_suffixed_clitic = not slot:find("_sub")
-- Maybe generate non-reflexive parts and separated syntactic variants for use in
-- {{gl-verb form of}}. See comment in add_slots() above `need_special_verb_form_of_slots`.
-- Check for do_joined so we only run this code once.
if do_reflexive and do_joined and base.alternant_multiword_spec.source_template == "gl-verb form of" and
-- Skip personal variants of infinitives and gerunds so we don't think [[arrependendo]] is a
-- non-reflexive equivalent of [[arrependendo-me]].
not slot:find("infinitive_") and not slot:find("gerund_") then
-- Clone the forms because we will be destructively modifying them just below, adding the reflexive
-- pronoun.
insert_forms(base, slot .. "_non_reflexive", mw.clone(base.forms[slot]))
if slot_has_suffixed_clitic then
insert_forms(base, slot .. "_variant", iut.map_forms(base.forms[slot], function(form)
return prefix_clitic_to_form(base, clitic, " ... ", form)
end))
end
end
if slot_has_suffixed_clitic then
if do_joined then
suffix_clitic_to_forms(base, slot, {clitic},
function(clitic, formobj, cliticized_form)
formobj.form = cliticized_form
end
)
end
elseif not do_joined then
-- Add clitic as separate word before all other forms.
for _, form in ipairs(base.forms[slot]) do
form.form = prefix_clitic_to_form(base, clitic, " ", form.form)
end
end
end
end
end
end
local function handle_infinitive_linked(base)
-- Compute linked versions of potential lemma slots, for use in {{gl-verb}}.
-- We substitute the original lemma (before removing links) for forms that
-- are the same as the lemma, if the original lemma has links.
for _, slot in ipairs({"infinitive"}) do
insert_forms(base, slot .. "_linked", iut.map_forms(base.forms[slot], function(form)
if form == base.lemma and rfind(base.linked_lemma, "%[%[") then
return base.linked_lemma
else
return form
end
end))
end
end
local function generate_negative_imperatives(base)
-- Copy subjunctives to negative imperatives, preceded by "non".
for _, persnum in ipairs(neg_imp_person_number_list) do
local from = "pres_sub_" .. persnum
local to = "neg_imp_" .. persnum
insert_forms(base, to, iut.map_forms(base.forms[from], function(form)
if base.alternant_multiword_spec.args.noautolinkverb then
return "non " .. form
elseif form:find("%[%[") then
-- already linked, e.g. when reflexive
return "[[non]] " .. form
else
return "[[non]] [[" .. form .. "]]"
end
end))
end
end
-- Process specs given by the user using 'addnote[SLOTSPEC][FOOTNOTE][FOOTNOTE][...]'.
local function process_addnote_specs(base)
for _, spec in ipairs(base.addnote_specs) do
for _, slot_spec in ipairs(spec.slot_specs) do
slot_spec = "^" .. slot_spec .. "$"
for slot, forms in pairs(base.forms) do
if rfind(slot, slot_spec) then
-- To save on memory, side-effect the existing forms.
for _, form in ipairs(forms) do
form.footnotes = iut.combine_footnotes(form.footnotes, spec.footnotes)
end
end
end
end
end
end
local function add_missing_links_to_forms(base)
-- Any forms without links should get them now. Redundant ones will be stripped later.
for slot, forms in pairs(base.forms) do
for _, form in ipairs(forms) do
if not form.form:find("%[%[") then
form.form = "[[" .. form.form .. "]]"
end
end
end
end
local function conjugate_verb(base)
for _, vowel_alt in ipairs(base.vowel_alt_stems) do
construct_stems(base, vowel_alt)
add_present_indic(base)
add_present_subj(base)
end
add_finite_non_present(base)
add_non_finite_forms(base)
-- do non-reflexive non-imperative slot overrides
process_slot_overrides(base, function(slot)
return not slot:find("^imp_") and not slot:find("^neg_imp_")
end)
-- This should happen after process_slot_overrides() in case a derived slot is based on an override
-- (as with the imp_3s of [[dar]], [[estar]]).
add_imperatives(base)
-- do non-reflexive positive imperative slot overrides
process_slot_overrides(base, function(slot)
return slot:find("^imp_")
end)
-- We need to add joined reflexives, then joined and non-joined clitics, then non-joined reflexives, so we get
-- [[arrepéndete]] but [[non]] [[te]] [[arrependas]].
if base.refl then
add_reflexive_or_fixed_clitic_to_forms(base, "do reflexive", "do joined")
process_slot_overrides(base, nil, "do reflexive") -- do reflexive-only slot overrides
add_reflexive_or_fixed_clitic_to_forms(base, "do reflexive", false)
end
-- This should happen after add_reflexive_or_fixed_clitic_to_forms() so negative imperatives get the reflexive pronoun
-- and clitic in them.
generate_negative_imperatives(base)
-- do non-reflexive negative imperative slot overrides
-- FIXME: What about reflexive negative imperatives?
process_slot_overrides(base, function(slot)
return slot:find("^neg_imp_")
end)
-- This should happen before add_missing_links_to_forms() so that the comparison `form == base.lemma`
-- in handle_infinitive_linked() works correctly and compares unlinked forms to unlinked forms.
handle_infinitive_linked(base)
process_addnote_specs(base)
if not base.alternant_multiword_spec.args.noautolinkverb then
add_missing_links_to_forms(base)
end
end
local function parse_indicator_spec(angle_bracket_spec)
-- Store the original angle bracket spec so we can reconstruct the overall conj spec with the lemma(s) in them.
local base = {
angle_bracket_spec = angle_bracket_spec,
user_basic_overrides = {},
user_stems = {},
addnote_specs = {},
}
local function parse_err(msg)
error(msg .. ": " .. angle_bracket_spec)
end
local function fetch_footnotes(separated_group)
local footnotes
for j = 2, #separated_group - 1, 2 do
if separated_group[j + 1] ~= "" then
parse_err("Extraneous text after bracketed footnotes: '" .. table.concat(separated_group) .. "'")
end
if not footnotes then
footnotes = {}
end
table.insert(footnotes, separated_group[j])
end
return footnotes
end
local inside = angle_bracket_spec:match("^<(.*)>$")
assert(inside)
if inside == "" then
return base
end
local segments = put.parse_balanced_segment_run(inside, "[", "]")
local dot_separated_groups = put.split_alternating_runs(segments, "%.")
for i, dot_separated_group in ipairs(dot_separated_groups) do
local first_element = dot_separated_group[1]
if first_element == "addnote" then
local spec_and_footnotes = fetch_footnotes(dot_separated_group)
if #spec_and_footnotes < 2 then
parse_err("Spec with 'addnote' should be of the form 'addnote[SLOTSPEC][FOOTNOTE][FOOTNOTE][...]'")
end
local slot_spec = table.remove(spec_and_footnotes, 1)
local slot_spec_inside = rmatch(slot_spec, "^%[(.*)%]$")
if not slot_spec_inside then
parse_err("Internal error: slot_spec " .. slot_spec .. " should be surrounded with brackets")
end
local slot_specs = rsplit(slot_spec_inside, ",")
-- FIXME: Here, [[Module:it-verb]] called strip_spaces(). Generally we don't do this. Should we?
table.insert(base.addnote_specs, {slot_specs = slot_specs, footnotes = spec_and_footnotes})
elseif indicator_flags[first_element] then
if #dot_separated_group > 1 then
parse_err("No footnotes allowed with '" .. first_element .. "' spec")
end
if base[first_element] then
parse_err("Spec '" .. first_element .. "' specified twice")
end
base[first_element] = true
elseif rfind(first_element, ":") then
local colon_separated_groups = put.split_alternating_runs(dot_separated_group, "%s*:%s*")
local first_element = colon_separated_groups[1][1]
if #colon_separated_groups[1] > 1 then
parse_err("Can't attach footnotes directly to '" .. first_element .. "' spec; attach them to the " ..
"colon-separated values following the initial colon")
end
if overridable_stems[first_element] then
if base.user_stems[first_element] then
parse_err("Overridable stem '" .. first_element .. "' specified twice")
end
table.remove(colon_separated_groups, 1)
base.user_stems[first_element] = overridable_stems[first_element](colon_separated_groups,
{prefix = first_element, base = base, parse_err = parse_err, fetch_footnotes = fetch_footnotes})
else -- assume a basic override; we validate further later when the possible slots are available
if base.user_basic_overrides[first_element] then
parse_err("Basic override '" .. first_element .. "' specified twice")
end
table.remove(colon_separated_groups, 1)
base.user_basic_overrides[first_element] = allow_multiple_values(colon_separated_groups,
{prefix = first_element, base = base, parse_err = parse_err, fetch_footnotes = fetch_footnotes})
end
else
local comma_separated_groups = put.split_alternating_runs(dot_separated_group, "%s*,%s*")
for j = 1, #comma_separated_groups do
local alt = comma_separated_groups[j][1]
if not vowel_alternants[alt] then
if #comma_separated_groups == 1 then
parse_err("Unrecognized spec or vowel alternant '" .. alt .. "'")
else
parse_err("Unrecognized vowel alternant '" .. alt .. "'")
end
end
if base.vowel_alt then
for _, existing_alt in ipairs(base.vowel_alt) do
if existing_alt.form == alt then
parse_err("Vowel alternant '" .. alt .. "' specified twice")
end
end
else
base.vowel_alt = {}
end
table.insert(base.vowel_alt, {form = alt, footnotes = fetch_footnotes(comma_separated_groups[j])})
end
end
end
return base
end
-- Normalize all lemmas, substituting the pagename for blank lemmas and adding links to multiword lemmas.
local function normalize_all_lemmas(alternant_multiword_spec, head)
-- (1) Add links to all before and after text. Remember the original text so we can reconstruct the verb spec later.
if not alternant_multiword_spec.args.noautolinktext then
iut.add_links_to_before_and_after_text(alternant_multiword_spec, "remember original")
end
-- (2) Remove any links from the lemma, but remember the original form
-- so we can use it below in the 'lemma_linked' form.
iut.map_word_specs(alternant_multiword_spec, function(base)
if base.lemma == "" then
base.lemma = head
end
base.user_specified_lemma = base.lemma
base.lemma = m_links.remove_links(base.lemma)
local refl_verb = base.lemma
local verb, refl = rmatch(refl_verb, "^(.-)(se)$")
if not verb then
verb, refl = refl_verb, nil
end
base.user_specified_verb = verb
base.refl = refl
base.verb = base.user_specified_verb
local linked_lemma
if alternant_multiword_spec.args.noautolinkverb or base.user_specified_lemma:find("%[%[") then
linked_lemma = base.user_specified_lemma
elseif base.refl then
-- Reconstruct the linked lemma with separate links around base verb, reflexive pronoun and clitic.
linked_lemma = base.user_specified_verb == base.verb and "[[" .. base.user_specified_verb .. "]]" or
"[[" .. base.verb .. "|" .. base.user_specified_verb .. "]]"
linked_lemma = linked_lemma .. (refl and "[[" .. refl .. "]]" or "")
else
-- Add links to the lemma so the user doesn't specifically need to, since we preserve
-- links in multiword lemmas and include links in non-lemma forms rather than allowing
-- the entire form to be a link.
linked_lemma = iut.add_links(base.user_specified_lemma)
end
base.linked_lemma = linked_lemma
end)
end
local function detect_indicator_spec(base)
if (base.only3s and 1 or 0) + (base.only3sp and 1 or 0) + (base.only3p and 1 or 0) > 1 then
error("Only one of 'only3s', 'only3sp' and 'only3p' can be specified")
end
base.forms = {}
base.stems = {}
base.basic_overrides = {}
base.basic_reflexive_only_overrides = {}
if not base.no_built_in then
for _, built_in_conj in ipairs(built_in_conjugations) do
if type(built_in_conj.match) == "function" then
base.prefix, base.non_prefixed_verb = built_in_conj.match(base.verb)
elseif built_in_conj.match:find("^%^") and rsub(built_in_conj.match, "^%^", "") == base.verb then
-- begins with ^, for exact match, and matches
base.prefix, base.non_prefixed_verb = "", base.verb
else
base.prefix, base.non_prefixed_verb = rmatch(base.verb, "^(.*)(" .. built_in_conj.match .. ")$")
end
if base.prefix then
-- we found a built-in verb
for stem, forms in pairs(built_in_conj.forms) do
if type(forms) == "function" then
forms = forms(base, base.prefix)
end
if stem:find("^refl_") then
stem = stem:gsub("^refl_", "")
if not base.alternant_multiword_spec.verb_slots_basic_map[stem] then
error("Internal error: setting for 'refl_" .. stem .. "' does not refer to a basic verb slot")
end
base.basic_reflexive_only_overrides[stem] = forms
elseif base.alternant_multiword_spec.verb_slots_basic_map[stem] then
-- an individual form override of a basic form
base.basic_overrides[stem] = forms
else
base.stems[stem] = forms
end
end
break
end
end
end
-- Override built-in-verb stems and overrides with user-specified ones.
for stem, values in pairs(base.user_stems) do
base.stems[stem] = values
end
for override, values in pairs(base.user_basic_overrides) do
if not base.alternant_multiword_spec.verb_slots_basic_map[override] then
error("Unrecognized override '" .. override .. "': " .. base.angle_bracket_spec)
end
base.basic_overrides[override] = values
end
base.prefix = base.prefix or ""
base.non_prefixed_verb = base.non_prefixed_verb or base.verb
local inf_stem, suffix = rmatch(base.non_prefixed_verb, "^(.*)([aeiíoó]r)$")
if not inf_stem then
error("Unrecognized infinitive: " .. base.verb)
end
base.inf_stem = inf_stem
suffix = suffix == "ór" and "or" or suffix == "ír" and "ir" or suffix
base.conj = suffix
base.conj_vowel = suffix == "ar" and "a" or suffix == "ir" and "i" or "e"
base.frontback = suffix == "ar" and "back" or "front"
if base.stems.vowel_alt then -- built-in verb with specified vowel alternation
if base.vowel_alt then
error(base.verb .. " is a recognized built-in verb, and should not have vowel alternations specified with it")
end
base.vowel_alt = iut.convert_to_general_list_form(base.stems.vowel_alt)
end
-- Propagate built-in-verb indicator flags to `base` and combine with user-specified flags.
for indicator_flag, _ in pairs(indicator_flags) do
base[indicator_flag] = base[indicator_flag] or base.stems[indicator_flag]
end
-- Convert vowel alternation indicators into stems.
local vowel_alt = base.vowel_alt or {{form = "+"}}
base.vowel_alt_stems = apply_vowel_alternations(base.inf_stem, vowel_alt)
for _, vowel_alt_stems in ipairs(base.vowel_alt_stems) do
if vowel_alt_stems.err then
error("To use '" .. vowel_alt_stems.altobj.form .. "', present stem '" .. base.prefix .. base.inf_stem .. "' " ..
vowel_alt_stems.err)
end
end
end
local function detect_all_indicator_specs(alternant_multiword_spec)
-- Propagate some settings up; some are used internally, others by [[Module:gl-headword]].
iut.map_word_specs(alternant_multiword_spec, function(base)
-- Internal indicator flags. Do these before calling detect_indicator_spec() because add_slots() uses them.
for _, prop in ipairs { "refl", "clitic" } do
if base[prop] then
alternant_multiword_spec[prop] = true
end
end
base.alternant_multiword_spec = alternant_multiword_spec
end)
add_slots(alternant_multiword_spec)
alternant_multiword_spec.vowel_alt = {}
iut.map_word_specs(alternant_multiword_spec, function(base)
detect_indicator_spec(base)
-- User-specified indicator flags. Do these after calling detect_indicator_spec() because the latter may set these
-- indicators for built-in verbs.
for prop, _ in pairs(indicator_flags) do
if base[prop] then
alternant_multiword_spec[prop] = true
end
end
-- Vowel alternants. Do these after calling detect_indicator_spec() because the latter sets base.vowel_alt for
-- built-in verbs.
if base.vowel_alt then
for _, altobj in ipairs(base.vowel_alt) do
m_table.insertIfNot(alternant_multiword_spec.vowel_alt, altobj.form)
end
end
end)
end
local function add_categories_and_annotation(alternant_multiword_spec, base, multiword_lemma)
local function insert_ann(anntype, value)
m_table.insertIfNot(alternant_multiword_spec.annotation[anntype], value)
end
local function insert_cat(cat, also_when_multiword)
-- Don't place multiword terms in categories like 'Galician verbs ending in -ar' to avoid spamming the
-- categories with such terms.
if also_when_multiword or not multiword_lemma then
m_table.insertIfNot(alternant_multiword_spec.categories, "Galician " .. cat)
end
end
if check_for_red_links and alternant_multiword_spec.source_template == "gl-conj" and multiword_lemma then
for _, slot_and_accel in ipairs(alternant_multiword_spec.all_verb_slots) do
local slot = slot_and_accel[1]
local forms = base.forms[slot]
local must_break = false
if forms then
for _, form in ipairs(forms) do
if not form.form:find("%[%[") then
local title = mw.title.new(form.form)
if title and not title.exists then
insert_cat("verbs with red links in their inflection tables")
must_break = true
break
end
end
end
end
if must_break then
break
end
end
end
if(base.conj == "or") then
insert_cat("verbs ending in -er")
else
insert_cat("verbs ending in -" .. base.conj)
end
if base.irreg then
insert_ann("irreg", "irregular")
insert_cat("irregular verbs")
else
insert_ann("irreg", "regular")
end
if base.only3s then
insert_ann("defective", "impersonal")
insert_cat("impersonal verbs")
elseif base.only3sp then
insert_ann("defective", "third-person only")
insert_cat("third-person-only verbs")
elseif base.only3p then
insert_ann("defective", "third-person plural only")
insert_cat("third-person-plural-only verbs")
elseif base.no_pres_stressed or base.no_pres1_and_sub then
insert_ann("defective", "defective")
insert_cat("defective verbs")
else
insert_ann("defective", "regular")
end
if base.stems.short_pp then
insert_ann("short_pp", "irregular short past participle")
insert_cat("verbs with irregular short past participle")
else
insert_ann("short_pp", "regular")
end
if base.clitic then
insert_cat("verbs with lexical clitics")
end
if base.refl then
insert_cat("reflexive verbs")
end
if not base.vowel_alt then
insert_ann("vowel_alt", "non-alternating")
else
for _, alt in ipairs(base.vowel_alt) do
if alt.form == "+" then
insert_ann("vowel_alt", "non-alternating")
else
insert_ann("vowel_alt", vowel_alternant_to_desc[alt.form])
insert_cat("verbs with " .. vowel_alternant_to_cat[alt.form])
end
end
end
local cons_alt = base.stems.cons_alt
if cons_alt == nil then
if base.conj == "ar" then
if base.inf_stem:find("z$") then
cons_alt = "c-z"
elseif base.inf_stem:find("c$") then
cons_alt = "c-qu"
elseif base.inf_stem:find("g$") then
cons_alt = "g-gu"
elseif base.inf_stem:find("gu$") then
cons_alt = "gu-gü"
end
else
if base.no_pres_stressed or base.no_pres1_and_sub then
cons_alt = nil -- no e.g. c-z alternation in this case
elseif base.inf_stem:find("c$") then
cons_alt = "c-z"
elseif base.inf_stem:find("qu$") then
cons_alt = "c-qu"
elseif base.inf_stem:find("gu$") then
cons_alt = "g-gu"
elseif base.inf_stem:find("gü$") then
cons_alt = "gu-gü"
end
end
end
if cons_alt then
local desc = cons_alt .. " alternation"
insert_ann("cons_alt", desc)
insert_cat("verbs with " .. desc)
else
insert_ann("cons_alt", "non-alternating")
end
end
-- Compute the categories to add the verb to, as well as the annotation to display in the
-- conjugation title bar. We combine the code to do these functions as both categories and
-- title bar contain similar information.
local function compute_categories_and_annotation(alternant_multiword_spec)
alternant_multiword_spec.categories = {}
local ann = {}
alternant_multiword_spec.annotation = ann
ann.irreg = {}
ann.short_pp = {}
ann.defective = {}
ann.vowel_alt = {}
ann.cons_alt = {}
local multiword_lemma = false
for _, form in ipairs(alternant_multiword_spec.forms.infinitive) do
if form.form:find(" ") then
multiword_lemma = true
break
end
end
iut.map_word_specs(alternant_multiword_spec, function(base)
add_categories_and_annotation(alternant_multiword_spec, base, multiword_lemma)
end)
local ann_parts = {}
local irreg = table.concat(ann.irreg, " or ")
if irreg ~= "" and irreg ~= "regular" then
table.insert(ann_parts, irreg)
end
local short_pp = table.concat(ann.short_pp, " or ")
if short_pp ~= "" and short_pp ~= "regular" then
table.insert(ann_parts, short_pp)
end
local defective = table.concat(ann.defective, " or ")
if defective ~= "" and defective ~= "regular" then
table.insert(ann_parts, defective)
end
local vowel_alt = table.concat(ann.vowel_alt, " or ")
if vowel_alt ~= "" and vowel_alt ~= "non-alternating" then
table.insert(ann_parts, vowel_alt)
end
local cons_alt = table.concat(ann.cons_alt, " or ")
if cons_alt ~= "" and cons_alt ~= "non-alternating" then
table.insert(ann_parts, cons_alt)
end
alternant_multiword_spec.annotation = table.concat(ann_parts, "; ")
end
local function show_forms(alternant_multiword_spec)
local lemmas = alternant_multiword_spec.forms.infinitive
alternant_multiword_spec.lemmas = lemmas -- save for later use in make_table()
if alternant_multiword_spec.forms.short_pp_ms then
alternant_multiword_spec.has_short_pp = true
end
local reconstructed_verb_spec = iut.reconstruct_original_spec(alternant_multiword_spec)
local function transform_accel_obj(slot, formobj, accel_obj)
-- No accelerators for negative imperatives, which are always multiword and derived directly from the
-- present subjunctive.
if slot:find("^neg_imp") then
return nil
end
if accel_obj then
if slot:find("^pp_") then
accel_obj.form = slot
elseif slot == "gerund" then
accel_obj.form = "gerund-" .. reconstructed_verb_spec
else
accel_obj.form = "verb-form-" .. reconstructed_verb_spec
end
end
return accel_obj
end
local props = {
lang = lang,
lemmas = lemmas,
transform_accel_obj = transform_accel_obj,
slot_list = alternant_multiword_spec.verb_slots_basic,
}
iut.show_forms(alternant_multiword_spec.forms, props)
alternant_multiword_spec.footnote_basic = alternant_multiword_spec.forms.footnote
end
local notes_template = [=[
<div class="roa-footnote-outer-div" style="width:100%;">
<div class="roa-footnote-inner-div">
{footnote}
</div></div>
]=]
local basic_table = [=[
{description}<div class="NavFrame">
<div class="NavHead" align=center> การผันรูปของ {title}</div>
<div class="NavContent" align="left">
{\op}| class="roa-inflection-table" data-toggle-category="inflection"
|-
! class="roa-person-number-header" rowspan="2" |
! class="roa-person-number-header" colspan="3" | เอกพจน์
! class="roa-person-number-header" colspan="3" | พหูพจน์
|-
! class="roa-person-number-header" style="width:12.5%" | บุรุษที่หนึ่ง<br />(<<eu>>)
! class="roa-person-number-header" style="width:12.5%" | บุรุษที่สอง<br />(<<ti>>)
! class="roa-person-number-header" style="width:12.5%" | บุรุษที่สาม<br />(<<el>> / <<ela>> / <<vostede|Vde.>>)
! class="roa-person-number-header" style="width:12.5%" | บุรุษที่หนึ่ง<br />(<<nós>>)
! class="roa-person-number-header" style="width:12.5%" | บุรุษที่สอง<br />(<<vós>>)
! class="roa-person-number-header" style="width:12.5%" | บุรุษที่สาม<br />(<<eles>> / <<elas>> / <<vostedes|Vdes.>>)
|-
! class="roa-nonfinite-header" colspan="7" | ''<span title="infinitivo">รูปกริยากลาง</span>''
|-
| class="roa-nonfinite-header" | '''<span title="infinitivo impersoal">คำอบุรุษกริยา</span>'''
| colspan="6" | {infinitive}
|-
| class="roa-nonfinite-header" | '''<span title="infinitivo conxugado">คำบุรุษกริยา</span>'''
| {pers_inf_1s}
| {pers_inf_2s}
| {pers_inf_3s}
| {pers_inf_1p}
| {pers_inf_2p}
| {pers_inf_3p}
|-
! class="roa-nonfinite-header" colspan="7" | ''<span title="xerundio">รูปกริยาเป็นนาม</span>''
|-
| class="roa-nonfinite-header" |
| colspan="6" | {gerund}
|-{pp_clause}
! class="roa-indicative-left-rail" colspan="7" | ''<span title="indicativo">มาลาบอกเล่า</span>''
|-
! class="roa-indicative-left-rail" | <span title="presente">ปัจจุบันกาล</span>
| {pres_1s}
| {pres_2s}
| {pres_3s}
| {pres_1p}
| {pres_2p}
| {pres_3p}
|-
! class="roa-indicative-left-rail" | <span title="pretérito imperfecto">ไม่สมบูรณ์</span>
| {impf_1s}
| {impf_2s}
| {impf_3s}
| {impf_1p}
| {impf_2p}
| {impf_3p}
|-
! class="roa-indicative-left-rail" | <span title="pretérito perfecto">อดีตกาลสิ้นสุด (สมบูรณ์)</span>
| {pret_1s}
| {pret_2s}
| {pret_3s}
| {pret_1p}
| {pret_2p}
| {pret_3p}
|-
! class="roa-indicative-left-rail" | <span title="pretérito pluscuamperfecto">อภิสมบูรณ์</span>
| {plup_1s}
| {plup_2s}
| {plup_3s}
| {plup_1p}
| {plup_2p}
| {plup_3p}
|-
! class="roa-indicative-left-rail" | <span title="futuro do presente">อนาคตกาล</span>
| {fut_1s}
| {fut_2s}
| {fut_3s}
| {fut_1p}
| {fut_2p}
| {fut_3p}
|-
! class="roa-indicative-left-rail" | <span title="condicional">มาลาเงื่อนไข</span>
| {cond_1s}
| {cond_2s}
| {cond_3s}
| {cond_1p}
| {cond_2p}
| {cond_3p}
|-
! class="roa-subjunctive-left-rail" colspan="7" | ''<span title="subxuntivo">มาลาสมมุติ</span>''
|-
! class="roa-subjunctive-left-rail" | <span title=" presente do subxuntivo">ปัจจุบันกาล</span>
| {pres_sub_1s}
| {pres_sub_2s}
| {pres_sub_3s}
| {pres_sub_1p}
| {pres_sub_2p}
| {pres_sub_3p}
|-
! class="roa-subjunctive-left-rail" | <span title="pretérito imperfecto do subxuntivo">ไม่สมบูรณ์</span>
| {impf_sub_1s}
| {impf_sub_2s}
| {impf_sub_3s}
| {impf_sub_1p}
| {impf_sub_2p}
| {impf_sub_3p}
|-
! class="roa-subjunctive-left-rail" | <span title="futuro do subxuntivo">อนาคตกาล</span>
| {fut_sub_1s}
| {fut_sub_2s}
| {fut_sub_3s}
| {fut_sub_1p}
| {fut_sub_2p}
| {fut_sub_3p}
|-
! class="roa-imperative-left-rail" colspan="7" | ''<span title="imperativo">มาลาสั่ง</span>''
|-
! class="roa-imperative-left-rail" | <span title="imperativo afirmativo">เชิงยืนยัน</span>
| rowspan="2" |
| {imp_2s}
| {imp_3s}
| {imp_1p}
| {imp_2p}
| {imp_3p}
|-
! class="roa-imperative-left-rail" | <span title="imperativo negativo">เชิงปฏิเสธ</span> (<<non>>)
| {neg_imp_2s}
| {neg_imp_3s}
| {neg_imp_1p}
| {neg_imp_2p}
| {neg_imp_3p}
|{\cl}{notes_clause}</div></div>
]=]
local double_pp_template = [=[
! class="roa-nonfinite-header" colspan="7" | ''<span title="participio irregular">รูปกริยาขยายอดีตกาลสั้น</span>''
|-
! class="roa-nonfinite-header" | เพศชาย
| colspan="3" | {short_pp_ms}
| colspan="3" | {short_pp_mp}
|-
! class="roa-nonfinite-header" | เพศหญิง
| colspan="3" | {short_pp_fs}
| colspan="3" | {short_pp_fp}
|-
! class="roa-nonfinite-header" colspan="7" | ''<span title="participio regular">รูปกริยาขยายอดีตกาลยาว</span>''
|-
! class="roa-nonfinite-header" | เพศชาย
| colspan="3" | {pp_ms}
| colspan="3" | {pp_mp}
|-
! class="roa-nonfinite-header" | เพศหญิง
| colspan="3" | {pp_fs}
| colspan="3" | {pp_fp}
|-]=]
local single_pp_template = [=[
! class="roa-nonfinite-header" colspan="7" | ''<span title="participio pasado">รูปกริยาขยายอดีตกาล</span>''
|-
! class="roa-nonfinite-header" | เพศชาย
| colspan="3" | {pp_ms}
| colspan="3" | {pp_mp}
|-
! class="roa-nonfinite-header" | เพศหญิง
| colspan="3" | {pp_fs}
| colspan="3" | {pp_fp}
|-]=]
local function make_table(alternant_multiword_spec)
local forms = alternant_multiword_spec.forms
forms.title = link_term(alternant_multiword_spec.lemmas[1].form)
if alternant_multiword_spec.annotation ~= "" then
forms.title = forms.title .. " (" .. alternant_multiword_spec.annotation .. ")"
end
forms.description = ""
-- Format the table.
forms.footnote = alternant_multiword_spec.footnote_basic
forms.notes_clause = forms.footnote ~= "" and m_string_utilities.format(notes_template, forms) or ""
-- has_short_pp is computed in show_forms().
local pp_template = alternant_multiword_spec.has_short_pp and double_pp_template or single_pp_template
forms.pp_clause = m_string_utilities.format(pp_template, forms)
local table_with_pronouns = rsub(basic_table, "<<([^<>|]-)|([^<>|]-)>>", link_term)
local table_with_pronouns = rsub(table_with_pronouns, "<<(.-)>>", link_term)
return require("Module:TemplateStyles")("Module:roa-verb/style.css") .. m_string_utilities.format(table_with_pronouns, forms)
end
-- Externally callable function to parse and conjugate a verb given user-specified arguments.
-- Return value is WORD_SPEC, an object where the conjugated forms are in `WORD_SPEC.forms`
-- for each slot. If there are no values for a slot, the slot key will be missing. The value
-- for a given slot is a list of objects {form=FORM, footnotes=FOOTNOTES}.
function export.do_generate_forms(args, source_template, headword_head)
local PAGENAME = mw.loadData("Module:headword/data").pagename
local function in_template_space()
return mw.title.getCurrentTitle().nsText == "แม่แบบ"
end
-- Determine the verb spec we're being asked to generate the conjugation of. This may be taken from the
-- current page title or the value of |pagename=; but not when called from {{gl-verb form of}}, where the
-- page title is a non-lemma form. Note that the verb spec may omit the infinitive; e.g. it may be "<i-e>".
-- For this reason, we use the value of `pagename` computed here down below, when calling normalize_all_lemmas().
local pagename = source_template ~= "gl-verb form of" and args.pagename or PAGENAME
local head = headword_head or pagename
local arg1 = args[1]
if not arg1 then
if (pagename == "gl-conj" or pagename == "gl-verb") and in_template_space() then
arg1 = "paliar<í,+>"
elseif pagename == "gl-verb form of" and in_template_space() then
arg1 = "amar"
else
arg1 = "<>"
end
end
-- When called from {{gl-verb form of}}, determine the non-lemma form whose inflections we're being asked to
-- determine. This normally comes from the page title or the value of |pagename=.
local verb_form_of_form
if source_template == "gl-verb form of" then
verb_form_of_form = args.pagename
if not verb_form_of_form then
if PAGENAME == "gl-verb form of" and in_template_space() then
verb_form_of_form = "ame"
else
verb_form_of_form = PAGENAME
end
end
end
local incorporated_headword_head_into_lemma = false
if arg1:find("^<.*>$") then -- missing lemma
if head:find(" ") then
-- If multiword lemma, try to add arg spec after the first word.
-- Try to preserve the brackets in the part after the verb, but don't do it
-- if there aren't the same number of left and right brackets in the verb
-- (which means the verb was linked as part of a larger expression).
local refl_clitic_verb, post = rmatch(head, "^(.-)( .*)$")
local left_brackets = rsub(refl_clitic_verb, "[^%[]", "")
local right_brackets = rsub(refl_clitic_verb, "[^%]]", "")
if #left_brackets == #right_brackets then
arg1 = iut.remove_redundant_links(refl_clitic_verb) .. arg1 .. post
incorporated_headword_head_into_lemma = true
else
-- Try again using the form without links.
local linkless_head = m_links.remove_links(head)
if linkless_head:find(" ") then
refl_clitic_verb, post = rmatch(linkless_head, "^(.-)( .*)$")
arg1 = refl_clitic_verb .. arg1 .. post
else
error("Unable to incorporate <...> spec into explicit head due to a multiword linked verb or " ..
"unbalanced brackets; please include <> explicitly: " .. arg1)
end
end
else
-- Will be incorporated through `head` below in the call to normalize_all_lemmas().
incorporated_headword_head_into_lemma = true
end
end
local function split_bracketed_runs_into_words(bracketed_runs)
return put.split_alternating_runs(bracketed_runs, " ", "preserve splitchar")
end
local parse_props = {
parse_indicator_spec = parse_indicator_spec,
-- Split words only on spaces, not on hyphens, because that messes up reflexive verb parsing.
split_bracketed_runs_into_words = split_bracketed_runs_into_words,
allow_default_indicator = true,
allow_blank_lemma = true,
}
local alternant_multiword_spec = iut.parse_inflected_text(arg1, parse_props)
alternant_multiword_spec.pos = pos or "verbs"
alternant_multiword_spec.args = args
alternant_multiword_spec.source_template = source_template
alternant_multiword_spec.verb_form_of_form = verb_form_of_form
alternant_multiword_spec.incorporated_headword_head_into_lemma = incorporated_headword_head_into_lemma
normalize_all_lemmas(alternant_multiword_spec, head)
detect_all_indicator_specs(alternant_multiword_spec)
local inflect_props = {
slot_list = alternant_multiword_spec.all_verb_slots,
inflect_word_spec = conjugate_verb,
-- We add links around the generated verbal forms rather than allow the entire multiword
-- expression to be a link, so ensure that user-specified links get included as well.
include_user_specified_links = true,
}
iut.inflect_multiword_or_alternant_multiword_spec(alternant_multiword_spec, inflect_props)
-- Remove redundant brackets around entire forms.
for slot, forms in pairs(alternant_multiword_spec.forms) do
for _, form in ipairs(forms) do
form.form = iut.remove_redundant_links(form.form)
end
end
compute_categories_and_annotation(alternant_multiword_spec)
if args.json and source_template == "gl-conj" then
return require("Module:JSON").toJSON(alternant_multiword_spec.forms)
end
return alternant_multiword_spec
end
-- Entry point for {{gl-conj}}. Template-callable function to parse and conjugate a verb given
-- user-specified arguments and generate a displayable table of the conjugated forms.
function export.show(frame)
local parent_args = frame:getParent().args
local params = {
[1] = {},
["noautolinktext"] = {type = "boolean"},
["noautolinkverb"] = {type = "boolean"},
["pagename"] = {}, -- for testing/documentation pages
["json"] = {type = "boolean"}, -- for bot use
}
local args = require("Module:parameters").process(parent_args, params)
local alternant_multiword_spec = export.do_generate_forms(args, "gl-conj")
if type(alternant_multiword_spec) == "string" then
-- JSON return value
return alternant_multiword_spec
end
show_forms(alternant_multiword_spec)
return make_table(alternant_multiword_spec) ..
require("Module:utilities").format_categories(alternant_multiword_spec.categories, lang, nil, nil, force_cat)
end
return export
9g68txkljp9j9kpfxwp1vuhsqv7mhvb
แม่แบบ:ast-verb-ar
10
336641
5729256
1902742
2026-07-20T04:16:45Z
Octahedron80
267
5729256
wikitext
text/x-wiki
{{head|ast|คำกริยา|head={{{head|}}}<!--
-->|บุรุษที่หนึ่งเอกพจน์ปัจจุบันกาลมาลาบอกเล่า<!--
-->|{{{first singular|{{{stem|{{{2|{{{1|}}}}}}}}}o}}}<!--
-->|รูปกริยาขยายอดีตกาล<!--
-->|{{{participle|{{{stem|{{{1|}}}}}}áu}}}<!--
-->}}<noinclude>{{documentation}}</noinclude>
5uafqdewqduikjql0qs4d3lsg96yckx
มอดูล:ast-conj/data
828
336642
5729216
1902744
2026-07-20T03:54:08Z
Octahedron80
267
5729216
Scribunto
text/plain
local inflections = {}
inflections["ar"] = function(args, data)
args[4] = args[4] or args[3] or args[2] or args[1]
args[3] = args[3] or args[1]
args[2] = args[2] or args[1]
data.forms.infinitive = {args[1] .. "ar"}
data.forms.gerund = {args[1] .. "ando"}
data.forms.part_m = {args[1] .. "áu"}
data.forms.part_f = {args[1] .. "ada"}
data.forms.part_n = {args[1] .. "ao"}
data.forms["part_m-p"] = {args[1] .. "aos"}
data.forms["part_f-p"] = {args[1] .. "aes"}
data.forms.pres_ind_1sg = {args[2] .. "o"}
data.forms.pres_ind_2sg = {args[4] .. "es"}
data.forms.pres_ind_3sg = {args[2] .. "a"}
data.forms.pres_ind_1pl = {args[1] .. "amos"}
data.forms.pres_ind_2pl = {args[1] .. "áis"}
data.forms.pres_ind_3pl = {args[4] .. "en"}
data.forms.impf_ind_1sg = {args[1] .. "aba"}
data.forms.impf_ind_2sg = {args[1] .. "abes"}
data.forms.impf_ind_3sg = {args[1] .. "aba"}
data.forms.impf_ind_1pl = {args[1] .. "ábemos", args[1] .. "ábamos"}
data.forms.impf_ind_2pl = {args[1] .. "abeis", args[1] .. "abais"}
data.forms.impf_ind_3pl = {args[1] .. "aben"}
data.forms.pret_ind_1sg = {args[3] .. "é"}
data.forms.pret_ind_2sg = {args[1] .. "asti", args[3] .. "esti"}
data.forms.pret_ind_3sg = {args[1] .. "ó"}
data.forms.pret_ind_1pl = {args[3] .. "emos"}
data.forms.pret_ind_2pl = {args[1] .. "astis", args[3] .. "estis"}
data.forms.pret_ind_3pl = {args[1] .. "aron"}
data.forms.plup_ind_1sg = {args[1] .. "are", args[1] .. "ara"}
data.forms.plup_ind_2sg = {args[1] .. "ares", args[1] .. "aras"}
data.forms.plup_ind_3sg = {args[1] .. "are", args[1] .. "ara"}
data.forms.plup_ind_1pl = {args[1] .. "áremos", args[1] .. "áramos"}
data.forms.plup_ind_2pl = {args[1] .. "areis", args[1] .. "arais"}
data.forms.plup_ind_3pl = {args[1] .. "aren", args[1] .. "aran"}
data.forms.futr_ind_1sg = {args[1] .. "aré"}
data.forms.futr_ind_2sg = {args[1] .. "arás"}
data.forms.futr_ind_3sg = {args[1] .. "ará"}
data.forms.futr_ind_1pl = {args[1] .. "aremos"}
data.forms.futr_ind_2pl = {args[1] .. "aréis"}
data.forms.futr_ind_3pl = {args[1] .. "arán"}
data.forms.cond_ind_1sg = {args[1] .. "aría"}
data.forms.cond_ind_2sg = {args[1] .. "aríes"}
data.forms.cond_ind_3sg = {args[1] .. "aría"}
data.forms.cond_ind_1pl = {args[1] .. "aríemos", args[1] .. "aríamos"}
data.forms.cond_ind_2pl = {args[1] .. "aríeis", args[1] .. "aríais"}
data.forms.cond_ind_3pl = {args[1] .. "aríen"}
data.forms.pres_sub_1sg = {args[4] .. "e"}
data.forms.pres_sub_2sg = {args[4] .. "es", args[2] .. "as"}
data.forms.pres_sub_3sg = {args[4] .. "e"}
data.forms.pres_sub_1pl = {args[3] .. "emos"}
data.forms.pres_sub_2pl = {args[3] .. "éis"}
data.forms.pres_sub_3pl = {args[4] .. "en", args[2] .. "an"}
data.forms.impf_sub_1sg = {args[1] .. "are", args[1] .. "ara"}
data.forms.impf_sub_2sg = {args[1] .. "ares", args[1] .. "aras"}
data.forms.impf_sub_3sg = {args[1] .. "are", args[1] .. "ara"}
data.forms.impf_sub_1pl = {args[1] .. "áremos", args[1] .. "áramos"}
data.forms.impf_sub_2pl = {args[1] .. "areis", args[1] .. "arais"}
data.forms.impf_sub_3pl = {args[1] .. "aren", args[1] .. "aran"}
data.forms.impr_2sg = {args[2] .. "a"}
data.forms.impr_2pl = {args[1] .. "ái"}
end
inflections["er"] = function(args, data)
data.forms.infinitive = {args[1] .. "er"}
data.forms.gerund = {args[1] .. "iendo"}
data.forms.part_m = {args[1] .. "íu"}
data.forms.part_f = {args[1] .. "ida"}
data.forms.part_n = {args[1] .. "ío"}
data.forms["part_m-p"] = {args[1] .. "íos"}
data.forms["part_f-p"] = {args[1] .. "íes"}
data.forms.pres_ind_1sg = {args[1] .. "o"}
data.forms.pres_ind_2sg = {args[1] .. "es"}
data.forms.pres_ind_3sg = {args[1] .. "e"}
data.forms.pres_ind_1pl = {args[1] .. "emos"}
data.forms.pres_ind_2pl = {args[1] .. "éis"}
data.forms.pres_ind_3pl = {args[1] .. "en"}
data.forms.impf_ind_1sg = {args[1] .. "ía"}
data.forms.impf_ind_2sg = {args[1] .. "íes"}
data.forms.impf_ind_3sg = {args[1] .. "ía"}
data.forms.impf_ind_1pl = {args[1] .. "íemos"}
data.forms.impf_ind_2pl = {args[1] .. "íeis"}
data.forms.impf_ind_3pl = {args[1] .. "íen"}
data.forms.pret_ind_1sg = {args[1] .. "í"}
data.forms.pret_ind_2sg = {args[1] .. "iesti"}
data.forms.pret_ind_3sg = {args[1] .. "ió"}
data.forms.pret_ind_1pl = {args[1] .. "iemos"}
data.forms.pret_ind_2pl = {args[1] .. "iestis"}
data.forms.pret_ind_3pl = {args[1] .. "ieron"}
data.forms.plup_ind_1sg = {args[1] .. "iere"}
data.forms.plup_ind_2sg = {args[1] .. "ieras"}
data.forms.plup_ind_3sg = {args[1] .. "iere"}
data.forms.plup_ind_1pl = {args[1] .. "iéremos"}
data.forms.plup_ind_2pl = {args[1] .. "iereis"}
data.forms.plup_ind_3pl = {args[1] .. "ieran"}
data.forms.futr_ind_1sg = {args[1] .. "eré"}
data.forms.futr_ind_2sg = {args[1] .. "erás"}
data.forms.futr_ind_3sg = {args[1] .. "erá"}
data.forms.futr_ind_1pl = {args[1] .. "eremos"}
data.forms.futr_ind_2pl = {args[1] .. "eréis"}
data.forms.futr_ind_3pl = {args[1] .. "erán"}
data.forms.cond_ind_1sg = {args[1] .. "ería"}
data.forms.cond_ind_2sg = {args[1] .. "eríes"}
data.forms.cond_ind_3sg = {args[1] .. "ería"}
data.forms.cond_ind_1pl = {args[1] .. "eríemos", args[1] .. "eríamos"}
data.forms.cond_ind_2pl = {args[1] .. "eríeis", args[1] .. "eríais"}
data.forms.cond_ind_3pl = {args[1] .. "eríen"}
data.forms.pres_sub_1sg = {args[1] .. "a"}
data.forms.pres_sub_2sg = {args[1] .. "as"}
data.forms.pres_sub_3sg = {args[1] .. "a"}
data.forms.pres_sub_1pl = {args[1] .. "amos"}
data.forms.pres_sub_2pl = {args[1] .. "áis"}
data.forms.pres_sub_3pl = {args[1] .. "an"}
data.forms.impf_sub_1sg = {args[1] .. "iere"}
data.forms.impf_sub_2sg = {args[1] .. "ieras"}
data.forms.impf_sub_3sg = {args[1] .. "iere"}
data.forms.impf_sub_1pl = {args[1] .. "iéremos"}
data.forms.impf_sub_2pl = {args[1] .. "iereis"}
data.forms.impf_sub_3pl = {args[1] .. "ieran"}
data.forms.impr_2sg = {args[1] .. "i"}
data.forms.impr_2pl = {args[1] .. "éi"}
end
inflections["ir"] = function(args, data)
data.forms.infinitive = {args[1] .. "ir"}
data.forms.gerund = {args[1] .. "iendo"}
data.forms.part_m = {args[1] .. "íu"}
data.forms.part_f = {args[1] .. "ida"}
data.forms.part_n = {args[1] .. "ío"}
data.forms["part_m-p"] = {args[1] .. "íos"}
data.forms["part_f-p"] = {args[1] .. "íes"}
data.forms.pres_ind_1sg = {args[1] .. "o"}
data.forms.pres_ind_2sg = {args[1] .. "es"}
data.forms.pres_ind_3sg = {args[1] .. "e"}
data.forms.pres_ind_1pl = {args[1] .. "imos"}
data.forms.pres_ind_2pl = {args[1] .. "ís"}
data.forms.pres_ind_3pl = {args[1] .. "en"}
data.forms.impf_ind_1sg = {args[1] .. "ía"}
data.forms.impf_ind_2sg = {args[1] .. "íes"}
data.forms.impf_ind_3sg = {args[1] .. "ía"}
data.forms.impf_ind_1pl = {args[1] .. "íemos", args[1] .. "íamos"}
data.forms.impf_ind_2pl = {args[1] .. "íeis", args[1] .. "íais"}
data.forms.impf_ind_3pl = {args[1] .. "íen"}
data.forms.pret_ind_1sg = {args[1] .. "í"}
data.forms.pret_ind_2sg = {args[1] .. "iesti", args[1] .. "isti"}
data.forms.pret_ind_3sg = {args[1] .. "ió"}
data.forms.pret_ind_1pl = {args[1] .. "iemos", args[1] .. "imos"}
data.forms.pret_ind_2pl = {args[1] .. "iestis", args[1] .. "istis"}
data.forms.pret_ind_3pl = {args[1] .. "ieron"}
data.forms.plup_ind_1sg = {args[1] .. "iere", args[1] .. "iera"}
data.forms.plup_ind_2sg = {args[1] .. "ieres", args[1] .. "ieras"}
data.forms.plup_ind_3sg = {args[1] .. "iere", args[1] .. "iera"}
data.forms.plup_ind_1pl = {args[1] .. "iéremos", args[1] .. "iéramos"}
data.forms.plup_ind_2pl = {args[1] .. "iereis", args[1] .. "ierais"}
data.forms.plup_ind_3pl = {args[1] .. "ieren", args[1] .. "ieran"}
data.forms.futr_ind_1sg = {args[1] .. "iré"}
data.forms.futr_ind_2sg = {args[1] .. "irás"}
data.forms.futr_ind_3sg = {args[1] .. "irá"}
data.forms.futr_ind_1pl = {args[1] .. "iremos"}
data.forms.futr_ind_2pl = {args[1] .. "iréis"}
data.forms.futr_ind_3pl = {args[1] .. "irán"}
data.forms.cond_ind_1sg = {args[1] .. "iría"}
data.forms.cond_ind_2sg = {args[1] .. "iríes"}
data.forms.cond_ind_3sg = {args[1] .. "iría"}
data.forms.cond_ind_1pl = {args[1] .. "iríemos", args[1] .. "iríamos"}
data.forms.cond_ind_2pl = {args[1] .. "iríeis", args[1] .. "iríais"}
data.forms.cond_ind_3pl = {args[1] .. "iríen"}
data.forms.pres_sub_1sg = {args[1] .. "a"}
data.forms.pres_sub_2sg = {args[1] .. "as"}
data.forms.pres_sub_3sg = {args[1] .. "a"}
data.forms.pres_sub_1pl = {args[1] .. "amos"}
data.forms.pres_sub_2pl = {args[1] .. "áis"}
data.forms.pres_sub_3pl = {args[1] .. "an"}
data.forms.impf_sub_1sg = {args[1] .. "iere", args[1] .. "iera"}
data.forms.impf_sub_2sg = {args[1] .. "ieres", args[1] .. "ieras"}
data.forms.impf_sub_3sg = {args[1] .. "iere", args[1] .. "iera"}
data.forms.impf_sub_1pl = {args[1] .. "iéremos", args[1] .. "iéramos"}
data.forms.impf_sub_2pl = {args[1] .. "iereis", args[1] .. "ierais"}
data.forms.impf_sub_3pl = {args[1] .. "ieren", args[1] .. "ieran"}
data.forms.impr_2sg = {args[1] .. "i"}
data.forms.impr_2pl = {args[1] .. "íi"}
end
inflections["cir"] = function(args, data)
data.forms.infinitive = {args[1] .. "cir"}
data.forms.gerund = {args[1] .. "ciendo"}
data.forms.part_m = {args[1] .. "cíu"}
data.forms.part_f = {args[1] .. "cida"}
data.forms.part_n = {args[1] .. "cío"}
data.forms["part_m-p"] = {args[1] .. "cíos"}
data.forms["part_f-p"] = {args[1] .. "cíes"}
data.forms.pres_ind_1sg = {args[1] .. "zo"}
data.forms.pres_ind_2sg = {args[1] .. "ces"}
data.forms.pres_ind_3sg = {args[1] .. "z"}
data.forms.pres_ind_1pl = {args[1] .. "cimos"}
data.forms.pres_ind_2pl = {args[1] .. "cís"}
data.forms.pres_ind_3pl = {args[1] .. "cen"}
data.forms.impf_ind_1sg = {args[1] .. "cía"}
data.forms.impf_ind_2sg = {args[1] .. "cíes"}
data.forms.impf_ind_3sg = {args[1] .. "cía"}
data.forms.impf_ind_1pl = {args[1] .. "cíemos"}
data.forms.impf_ind_2pl = {args[1] .. "cíeis"}
data.forms.impf_ind_3pl = {args[1] .. "cíen"}
data.forms.pret_ind_1sg = {args[1] .. "cí"}
data.forms.pret_ind_2sg = {args[1] .. "ciesti"}
data.forms.pret_ind_3sg = {args[1] .. "ció"}
data.forms.pret_ind_1pl = {args[1] .. "ciemos"}
data.forms.pret_ind_2pl = {args[1] .. "ciestis"}
data.forms.pret_ind_3pl = {args[1] .. "cieron"}
data.forms.plup_ind_1sg = {args[1] .. "ciere"}
data.forms.plup_ind_2sg = {args[1] .. "cieres"}
data.forms.plup_ind_3sg = {args[1] .. "ciere"}
data.forms.plup_ind_1pl = {args[1] .. "ciéremos"}
data.forms.plup_ind_2pl = {args[1] .. "ciereis"}
data.forms.plup_ind_3pl = {args[1] .. "cieren"}
data.forms.futr_ind_1sg = {args[1] .. "ciré"}
data.forms.futr_ind_2sg = {args[1] .. "cirás"}
data.forms.futr_ind_3sg = {args[1] .. "cirá"}
data.forms.futr_ind_1pl = {args[1] .. "ciremos"}
data.forms.futr_ind_2pl = {args[1] .. "ciréis"}
data.forms.futr_ind_3pl = {args[1] .. "cirán"}
data.forms.cond_ind_1sg = {args[1] .. "ciría"}
data.forms.cond_ind_2sg = {args[1] .. "ciríes"}
data.forms.cond_ind_3sg = {args[1] .. "ciría"}
data.forms.cond_ind_1pl = {args[1] .. "ciríemos", args[1] .. "ciríamos"}
data.forms.cond_ind_2pl = {args[1] .. "ciríeis", args[1] .. "ciríais"}
data.forms.cond_ind_3pl = {args[1] .. "ciríen"}
data.forms.pres_sub_1sg = {args[1] .. "za"}
data.forms.pres_sub_2sg = {args[1] .. "zas"}
data.forms.pres_sub_3sg = {args[1] .. "za"}
data.forms.pres_sub_1pl = {args[1] .. "zamos"}
data.forms.pres_sub_2pl = {args[1] .. "záis"}
data.forms.pres_sub_3pl = {args[1] .. "zan"}
data.forms.impf_sub_1sg = {args[1] .. "ciere"}
data.forms.impf_sub_2sg = {args[1] .. "cieres"}
data.forms.impf_sub_3sg = {args[1] .. "ciere"}
data.forms.impf_sub_1pl = {args[1] .. "ciéremos"}
data.forms.impf_sub_2pl = {args[1] .. "ciereis"}
data.forms.impf_sub_3pl = {args[1] .. "cieren"}
data.forms.impr_2sg = {args[1] .. "z"}
data.forms.impr_2pl = {args[1] .. "cíi"}
end
inflections["ensugar"] = function(args, data)
inflections["ar"]({"ensug"}, data)
table.insert(data.forms.part_m, "ensuchu")
table.insert(data.forms.part_f, "ensucha")
table.insert(data.forms.part_n, "ensucho")
table.insert(data.forms["part_m-p"], "ensuchos")
table.insert(data.forms["part_f-p"], "ensuchas")
data.forms.pres_ind_2sg = {"ensugues"}
data.forms.pres_ind_3pl = {"ensuguen"}
data.forms.pres_sub_1sg = {"ensugue"}
data.forms.pres_sub_2sg = {"ensugues", "ensugas"}
data.forms.pres_sub_3sg = {"ensugue"}
data.forms.pres_sub_1pl = {"ensuguemos"}
data.forms.pres_sub_2pl = {"ensuguéis"}
data.forms.pres_sub_3pl = {"ensuguen", "ensugan"}
table.insert(data.categories, "คำกริยาไม่ปรกติภาษาอัสตูเรียส")
end
inflections["coyer"] = function(args, data)
inflections["ar"]({"coy"}, data)
data.forms.pres_ind_1sg = {"cueyo"}
data.forms.pres_ind_2sg = {"cueyes"}
data.forms.pres_ind_3sg = {"cueye"}
data.forms.pres_ind_3pl = {"cueyen"}
data.forms.pres_sub_1sg = {"cueya"}
data.forms.pres_sub_2sg = {"cueyas"}
data.forms.pres_sub_3sg = {"cueya"}
data.forms.pres_sub_3pl = {"cueyan"}
table.insert(data.forms.impr_2sg, "cueyi")
table.insert(data.categories, "คำกริยาไม่ปรกติภาษาอัสตูเรียส")
end
inflections["facer"] = function(args, data)
data.forms.infinitive = {"facer", "faer"}
data.forms.gerund = {"faciendo", "fayendo"}
data.forms.part_m = {"fechu"}
data.forms.part_f = {"fecha"}
data.forms.part_n = {"fecho"}
data.forms["part_m-p"] = {"fechos"}
data.forms["part_f-p"] = {"feches"}
data.forms.pres_ind_1sg = {"fago", "faigo"}
data.forms.pres_ind_2sg = {"faes"}
data.forms.pres_ind_3sg = {"fai"}
data.forms.pres_ind_1pl = {"facemos", "faemos"}
data.forms.pres_ind_2pl = {"facéis", "faéis"}
data.forms.pres_ind_3pl = {"faen"}
data.forms.impf_ind_1sg = {"facía", "faía"}
data.forms.impf_ind_2sg = {"facíes", "faíes"}
data.forms.impf_ind_3sg = {"facía", "faía"}
data.forms.impf_ind_1pl = {"facíemos", "facíamos", "faíemos", "faíamos"}
data.forms.impf_ind_2pl = {"facíeis", "facíais", "faíeis", "faíais"}
data.forms.impf_ind_3pl = {"facíen", "faíen"}
data.forms.pret_ind_1sg = {"fici", "fixi"}
data.forms.pret_ind_2sg = {"ficisti", "ficesti", "fixisti", "fixesti"}
data.forms.pret_ind_3sg = {"fizo", "fixo"}
data.forms.pret_ind_1pl = {"ficimos", "ficemos", "fiximos", "fixemos"}
data.forms.pret_ind_2pl = {"ficistis", "ficestis", "fixistis", "fixestis"}
data.forms.pret_ind_3pl = {"ficieron", "fixieron"}
data.forms.plup_ind_1sg = {"ficiere", "ficiera", "fixiere", "fixiera"}
data.forms.plup_ind_2sg = {"ficieres", "ficieras", "fixiere", "fixiera"}
data.forms.plup_ind_3sg = {"ficiere", "ficiera", "fixiere", "fixiera"}
data.forms.plup_ind_1pl = {"ficiéremos", "fixiéramos", "fixiéremos", "fixiéramos"}
data.forms.plup_ind_2pl = {"ficiereis", "ficierais", "fixiereis", "fixierais"}
data.forms.plup_ind_3pl = {"ficieren", "ficieran", "fixieren", "fixieran"}
data.forms.futr_ind_1sg = {"fadré", "fairé"}
data.forms.futr_ind_2sg = {"fadrás", "fairás"}
data.forms.futr_ind_3sg = {"fadrá", "fairá"}
data.forms.futr_ind_1pl = {"fadremos", "fairemos"}
data.forms.futr_ind_2pl = {"fadréis", "fairéis"}
data.forms.futr_ind_3pl = {"fadrán", "fairán"}
data.forms.cond_ind_1sg = {"fadría", "fairía"}
data.forms.cond_ind_2sg = {"fadríes", "fairíes"}
data.forms.cond_ind_3sg = {"fadría", "fairía"}
data.forms.cond_ind_1pl = {"fadríemos", "fadríamos", "fairíemos", "fairíamos"}
data.forms.cond_ind_2pl = {"fadríeis", "fadríais", "fairíeis", "fairíais"}
data.forms.cond_ind_3pl = {"fadríen", "fairíen"}
data.forms.pres_sub_1sg = {"faga", "faiga"}
data.forms.pres_sub_2sg = {"fagas", "faigas"}
data.forms.pres_sub_3sg = {"faga", "faiga"}
data.forms.pres_sub_1pl = {"fagamos", "faigamos"}
data.forms.pres_sub_2pl = {"fagáis", "faigáis"}
data.forms.pres_sub_3pl = {"fagan", "faigan"}
data.forms.impf_sub_1sg = {"ficiere", "ficiera", "fixiere", "fixiera"}
data.forms.impf_sub_2sg = {"ficieres", "ficieras", "fixiere", "fixiera"}
data.forms.impf_sub_3sg = {"ficiere", "ficiera", "fixiere", "fixiera"}
data.forms.impf_sub_1pl = {"ficiéremos", "ficiéramos", "fixiéremos", "fixiéramos"}
data.forms.impf_sub_2pl = {"ficiereis", "ficierais", "fixiereis", "fixierais"}
data.forms.impf_sub_3pl = {"ficieren", "ficieran", "fixieren", "fixieran"}
data.forms.impr_2sg = {"fai"}
data.forms.impr_2pl = {"facéi", "faéi"}
table.insert(data.categories, "คำกริยาไม่ปรกติภาษาอัสตูเรียส")
end
inflections["poder"] = function(args, data)
data.forms.infinitive = {"poder"}
data.forms.gerund = {"pudiendo"}
data.forms.part_m = {"podíu"}
data.forms.part_f = {"podida"}
data.forms.part_n = {"podío"}
data.forms["part_m-p"] = {"podíos"}
data.forms["part_f-p"] = {"podíes"}
data.forms.pres_ind_1sg = {"puedo", "pueo"}
data.forms.pres_ind_2sg = {"puedes", "pues"}
data.forms.pres_ind_3sg = {"pue"}
data.forms.pres_ind_1pl = {"podemos"}
data.forms.pres_ind_2pl = {"podéis"}
data.forms.pres_ind_3pl = {"pueden", "puen"}
data.forms.impf_ind_1sg = {"podía"}
data.forms.impf_ind_2sg = {"podíes"}
data.forms.impf_ind_3sg = {"podía"}
data.forms.impf_ind_1pl = {"podíemos", "podíamos"}
data.forms.impf_ind_2pl = {"podíeis", "podíais"}
data.forms.impf_ind_3pl = {"podíen"}
data.forms.pret_ind_1sg = {"pudi"}
data.forms.pret_ind_2sg = {"pudisti", "pudiesti"}
data.forms.pret_ind_3sg = {"pudo"}
data.forms.pret_ind_1pl = {"pudimos", "pudiemos"}
data.forms.pret_ind_2pl = {"pudistis", "pudiestis"}
data.forms.pret_ind_3pl = {"pudieron"}
data.forms.plup_ind_1sg = {"pudiere", "pudiera"}
data.forms.plup_ind_2sg = {"pudieres", "pudieras"}
data.forms.plup_ind_3sg = {"pudiere", "pudiera"}
data.forms.plup_ind_1pl = {"pudiéremos", "pudiéramos"}
data.forms.plup_ind_2pl = {"pudiereis", "pudierais"}
data.forms.plup_ind_3pl = {"pudieren", "pudieran"}
data.forms.futr_ind_1sg = {"podré"}
data.forms.futr_ind_2sg = {"podrás"}
data.forms.futr_ind_3sg = {"podrá"}
data.forms.futr_ind_1pl = {"podremos"}
data.forms.futr_ind_2pl = {"podréis"}
data.forms.futr_ind_3pl = {"podrán"}
data.forms.cond_ind_1sg = {"podría"}
data.forms.cond_ind_2sg = {"podríes"}
data.forms.cond_ind_3sg = {"podría"}
data.forms.cond_ind_1pl = {"podríemos", "podríamos"}
data.forms.cond_ind_2pl = {"podríeis", "podríais"}
data.forms.cond_ind_3pl = {"podríen"}
data.forms.pres_sub_1sg = {"pueda", "puea"}
data.forms.pres_sub_2sg = {"puedas", "pueas"}
data.forms.pres_sub_3sg = {"pueda", "puea"}
data.forms.pres_sub_1pl = {"podamos"}
data.forms.pres_sub_2pl = {"podáis"}
data.forms.pres_sub_3pl = {"puedan", "puean"}
data.forms.impf_sub_1sg = {"pudiere", "pudiera"}
data.forms.impf_sub_2sg = {"pudieres", "pudieras"}
data.forms.impf_sub_3sg = {"pudiere", "pudiera"}
data.forms.impf_sub_1pl = {"pudiéremos", "pudiéramos"}
data.forms.impf_sub_2pl = {"pudiereis", "pudierais"}
data.forms.impf_sub_3pl = {"pudieren", "pudieran"}
data.forms.impr_2sg = {"pue"}
data.forms.impr_2pl = {"podéi"}
table.insert(data.categories, "คำกริยาไม่ปรกติภาษาอัสตูเรียส")
end
inflections["poner"] = function(args, data)
data.forms.infinitive = {"poder"}
data.forms.gerund = {"poniendo"}
data.forms.part_m = {"puestu"}
data.forms.part_f = {"puesta"}
data.forms.part_n = {"puesto"}
data.forms["part_m-p"] = {"puestos"}
data.forms["part_f-p"] = {"puestes"}
data.forms.pres_ind_1sg = {"pongo"}
data.forms.pres_ind_2sg = {"pones"}
data.forms.pres_ind_3sg = {"pon"}
data.forms.pres_ind_1pl = {"ponemos"}
data.forms.pres_ind_2pl = {"ponéis"}
data.forms.pres_ind_3pl = {"ponen"}
data.forms.impf_ind_1sg = {"ponía"}
data.forms.impf_ind_2sg = {"poníes"}
data.forms.impf_ind_3sg = {"ponía"}
data.forms.impf_ind_1pl = {"poníemos", "poníamos"}
data.forms.impf_ind_2pl = {"poníeis", "poníais"}
data.forms.impf_ind_3pl = {"poníen"}
data.forms.pret_ind_1sg = {"punxi"}
data.forms.pret_ind_2sg = {"punxesti", "punxisti"}
data.forms.pret_ind_3sg = {"punxo"}
data.forms.pret_ind_1pl = {"punxemos", "punximos"}
data.forms.pret_ind_2pl = {"punxestis", "punxistis"}
data.forms.pret_ind_3pl = {"punxeron"}
data.forms.plup_ind_1sg = {"punxere", "punxera"}
data.forms.plup_ind_2sg = {"punxeres", "punxeras"}
data.forms.plup_ind_3sg = {"punxere", "punxera"}
data.forms.plup_ind_1pl = {"punxéremos", "punxéramos"}
data.forms.plup_ind_2pl = {"punxereis", "punxerais"}
data.forms.plup_ind_3pl = {"punxeren", "punxeran"}
data.forms.futr_ind_1sg = {"pondré"}
data.forms.futr_ind_2sg = {"pondrás"}
data.forms.futr_ind_3sg = {"pondrá"}
data.forms.futr_ind_1pl = {"pondremos"}
data.forms.futr_ind_2pl = {"pondréis"}
data.forms.futr_ind_3pl = {"pondrán"}
data.forms.cond_ind_1sg = {"pondría"}
data.forms.cond_ind_2sg = {"pondríes"}
data.forms.cond_ind_3sg = {"pondría"}
data.forms.cond_ind_1pl = {"pondríemos", "pondríamos"}
data.forms.cond_ind_2pl = {"pondríeis", "pondríais"}
data.forms.cond_ind_3pl = {"pondríen"}
data.forms.pres_sub_1sg = {"ponga"}
data.forms.pres_sub_2sg = {"pongas"}
data.forms.pres_sub_3sg = {"ponga"}
data.forms.pres_sub_1pl = {"pongamos"}
data.forms.pres_sub_2pl = {"pongáis"}
data.forms.pres_sub_3pl = {"pongan"}
data.forms.impf_sub_1sg = {"punxere", "punxera"}
data.forms.impf_sub_2sg = {"punxeres", "punxeras"}
data.forms.impf_sub_3sg = {"punxere", "punxera"}
data.forms.impf_sub_1pl = {"punxéremos", "punxéramos"}
data.forms.impf_sub_2pl = {"punxereis", "punxerais"}
data.forms.impf_sub_3pl = {"punxeren", "punxeran"}
data.forms.impr_2sg = {"pon"}
data.forms.impr_2pl = {"ponéi"}
table.insert(data.categories, "คำกริยาไม่ปรกติภาษาอัสตูเรียส")
end
inflections["querer"] = function(args, data)
data.forms.infinitive = {"querer"}
data.forms.gerund = {"queriendo"}
data.forms.part_m = {"queríu"}
data.forms.part_f = {"querida"}
data.forms.part_n = {"querío"}
data.forms["part_m-p"] = {"queríos"}
data.forms["part_f-p"] = {"queríes"}
data.forms.pres_ind_1sg = {"quiero"}
data.forms.pres_ind_2sg = {"quies"}
data.forms.pres_ind_3sg = {"quier"}
data.forms.pres_ind_1pl = {"queremos"}
data.forms.pres_ind_2pl = {"queréis"}
data.forms.pres_ind_3pl = {"quieren"}
data.forms.impf_ind_1sg = {"quería"}
data.forms.impf_ind_2sg = {"queríes"}
data.forms.impf_ind_3sg = {"quería"}
data.forms.impf_ind_1pl = {"queríemos", "queríamos"}
data.forms.impf_ind_2pl = {"queríeis", "queríais"}
data.forms.impf_ind_3pl = {"queríen"}
data.forms.pret_ind_1sg = {"quixi"}
data.forms.pret_ind_2sg = {"quixesti", "quixisti"}
data.forms.pret_ind_3sg = {"quixo"}
data.forms.pret_ind_1pl = {"quixemos", "quiximos"}
data.forms.pret_ind_2pl = {"quixestis", "quixistis"}
data.forms.pret_ind_3pl = {"quixeron"}
data.forms.plup_ind_1sg = {"quixere", "quixera"}
data.forms.plup_ind_2sg = {"quixeres", "quixeras"}
data.forms.plup_ind_3sg = {"quixere", "quixera"}
data.forms.plup_ind_1pl = {"quixéremos", "quixéramos"}
data.forms.plup_ind_2pl = {"quixereis", "quixerais"}
data.forms.plup_ind_3pl = {"quixeren", "quixeran"}
data.forms.futr_ind_1sg = {"quedré"}
data.forms.futr_ind_2sg = {"quedrás"}
data.forms.futr_ind_3sg = {"quedrá"}
data.forms.futr_ind_1pl = {"quedremos"}
data.forms.futr_ind_2pl = {"quedréis"}
data.forms.futr_ind_3pl = {"quedrán"}
data.forms.cond_ind_1sg = {"quedría"}
data.forms.cond_ind_2sg = {"quedríes"}
data.forms.cond_ind_3sg = {"quedría"}
data.forms.cond_ind_1pl = {"quedríemos", "quedríamos"}
data.forms.cond_ind_2pl = {"quedríeis", "quedríais"}
data.forms.cond_ind_3pl = {"quedríen"}
data.forms.pres_sub_1sg = {"quiera"}
data.forms.pres_sub_2sg = {"quieras"}
data.forms.pres_sub_3sg = {"quiera"}
data.forms.pres_sub_1pl = {"queramos"}
data.forms.pres_sub_2pl = {"queráis"}
data.forms.pres_sub_3pl = {"quieran"}
data.forms.impf_sub_1sg = {"quixere", "quixera"}
data.forms.impf_sub_2sg = {"quixeres", "quixeras"}
data.forms.impf_sub_3sg = {"quixere", "quixera"}
data.forms.impf_sub_1pl = {"quixéremos", "quixéramos"}
data.forms.impf_sub_2pl = {"quixereis", "quixerais"}
data.forms.impf_sub_3pl = {"quixeren", "quixeran"}
data.forms.impr_2sg = {"quier"}
data.forms.impr_2pl = {"queréi"}
table.insert(data.categories, "คำกริยาไม่ปรกติภาษาอัสตูเรียส")
end
inflections["ser"] = function(args, data)
data.forms.infinitive = {"ser"}
data.forms.gerund = {"siendo"}
data.forms.part_all = {"sío"}
data.forms.pres_ind_1sg = {"soi", "so"}
data.forms.pres_ind_2sg = {"yes"}
data.forms.pres_ind_3sg = {"ye"}
data.forms.pres_ind_1pl = {"somos"}
data.forms.pres_ind_2pl = {"sois"}
data.forms.pres_ind_3pl = {"son"}
data.forms.impf_ind_1sg = {"yera"}
data.forms.impf_ind_2sg = {"yeres"}
data.forms.impf_ind_3sg = {"yera"}
data.forms.impf_ind_1pl = {"yéremos", "yéramos"}
data.forms.impf_ind_2pl = {"yereis", "yerais"}
data.forms.impf_ind_3pl = {"yeren"}
data.forms.pret_ind_1sg = {"fui"}
data.forms.pret_ind_2sg = {"fuesti", "fuisti"}
data.forms.pret_ind_3sg = {"foi"}
data.forms.pret_ind_1pl = {"fuemos", "fuimos"}
data.forms.pret_ind_2pl = {"fuestis", "fuistis"}
data.forms.pret_ind_3pl = {"fueron"}
data.forms.plup_ind_1sg = {"fuere", "fuera"}
data.forms.plup_ind_2sg = {"fueres", "fueras"}
data.forms.plup_ind_3sg = {"fuere", "fuera"}
data.forms.plup_ind_1pl = {"fuéremos", "fuéramos"}
data.forms.plup_ind_2pl = {"fuereis", "fuerais"}
data.forms.plup_ind_3pl = {"fueren", "fueran"}
data.forms.futr_ind_1sg = {"seré"}
data.forms.futr_ind_2sg = {"serás"}
data.forms.futr_ind_3sg = {"será"}
data.forms.futr_ind_1pl = {"seremos"}
data.forms.futr_ind_2pl = {"seréis"}
data.forms.futr_ind_3pl = {"serán"}
data.forms.cond_ind_1sg = {"sería"}
data.forms.cond_ind_2sg = {"seríes"}
data.forms.cond_ind_3sg = {"sería"}
data.forms.cond_ind_1pl = {"seríemos", "seríamos"}
data.forms.cond_ind_2pl = {"seríeis", "seríais"}
data.forms.cond_ind_3pl = {"seríen"}
data.forms.pres_sub_1sg = {"seya"}
data.forms.pres_sub_2sg = {"seyas"}
data.forms.pres_sub_3sg = {"seya"}
data.forms.pres_sub_1pl = {"seyamos"}
data.forms.pres_sub_2pl = {"seyáis"}
data.forms.pres_sub_3pl = {"seyan"}
data.forms.impf_sub_1sg = {"fuere", "fuera"}
data.forms.impf_sub_2sg = {"fueres", "fueras"}
data.forms.impf_sub_3sg = {"fuere", "fuera"}
data.forms.impf_sub_1pl = {"fuéremos", "fuéramos"}
data.forms.impf_sub_2pl = {"fuereis", "fuerais"}
data.forms.impf_sub_3pl = {"fueren", "fueran"}
data.forms.impr_2sg = {"sé"}
data.forms.impr_2pl = {"sei"}
table.insert(data.categories, "คำกริยาไม่ปรกติภาษาอัสตูเรียส")
table.insert(data.categories, "คำกริยาเสริมต่างรูปภาษาอัสตูเรียส") -- suppletion = การเสริมต่างรูป
end
inflections["tar"] = function(args, data)
data.forms.infinitive = {"tar"}
data.forms.gerund = {"tando"}
data.forms.part_all = {"tao"}
data.forms.pres_ind_1sg = {"to", "toi"}
data.forms.pres_ind_2sg = {"tas"}
data.forms.pres_ind_3sg = {"ta"}
data.forms.pres_ind_1pl = {"tamos"}
data.forms.pres_ind_2pl = {"táis"}
data.forms.pres_ind_3pl = {"tán"}
data.forms.impf_ind_1sg = {"taba"}
data.forms.impf_ind_2sg = {"tabes"}
data.forms.impf_ind_3sg = {"taba"}
data.forms.impf_ind_1pl = {"tabemos", "tabamos"}
data.forms.impf_ind_2pl = {"tabeis", "tabais"}
data.forms.impf_ind_3pl = {"taben"}
data.forms.pret_ind_1sg = {"tuvi", "tevi"}
data.forms.pret_ind_2sg = {"tuvisti", "tuviesti"}
data.forms.pret_ind_3sg = {"tuvo", "tevo"}
data.forms.pret_ind_1pl = {"tuvimos", "tuviemos"}
data.forms.pret_ind_2pl = {"tuvistis", "tuviestis"}
data.forms.pret_ind_3pl = {"tuvieron"}
data.forms.plup_ind_1sg = {"tuviere", "tuviera"}
data.forms.plup_ind_2sg = {"tuvieres", "tuvieras"}
data.forms.plup_ind_3sg = {"tuviere", "tuviera"}
data.forms.plup_ind_1pl = {"tuviéremos", "tuviéramos"}
data.forms.plup_ind_2pl = {"tuviereis", "tuvierais"}
data.forms.plup_ind_3pl = {"tuvieren", "tuvieran"}
data.forms.futr_ind_1sg = {"taré"}
data.forms.futr_ind_2sg = {"tarás"}
data.forms.futr_ind_3sg = {"tará"}
data.forms.futr_ind_1pl = {"taremos"}
data.forms.futr_ind_2pl = {"taréis"}
data.forms.futr_ind_3pl = {"tarán"}
data.forms.cond_ind_1sg = {"taría"}
data.forms.cond_ind_2sg = {"taríes"}
data.forms.cond_ind_3sg = {"taría"}
data.forms.cond_ind_1pl = {"taríemos", "taríamos"}
data.forms.cond_ind_2pl = {"taríeis", "taríais"}
data.forms.cond_ind_3pl = {"taríen"}
data.forms.pres_sub_1sg = {"tea"}
data.forms.pres_sub_2sg = {"teas"}
data.forms.pres_sub_3sg = {"tea"}
data.forms.pres_sub_1pl = {"teamos"}
data.forms.pres_sub_2pl = {"teáis"}
data.forms.pres_sub_3pl = {"tean"}
data.forms.impf_sub_1sg = {"tuviere", "tuviera"}
data.forms.impf_sub_2sg = {"tuvieres", "tuvieras"}
data.forms.impf_sub_3sg = {"tuviere", "tuviera"}
data.forms.impf_sub_1pl = {"tuviéremos", "tuviéramos"}
data.forms.impf_sub_2pl = {"tuviereis", "tuvierais"}
data.forms.impf_sub_3pl = {"tuvieren", "tuvieran"}
data.forms.impr_2sg = {"ta"}
data.forms.impr_2pl = {"tái"}
table.insert(data.categories, "คำกริยาไม่ปรกติภาษาอัสตูเรียส")
end
inflections["tener"] = function(args, data)
data.forms.infinitive = {"tener"}
data.forms.gerund = {"teniendo"}
data.forms.part_m = {"teníu"}
data.forms.part_f = {"tenida"}
data.forms.part_n = {"tenío"}
data.forms["part_m-p"] = {"teníos"}
data.forms["part_f-p"] = {"teníes"}
data.forms.pres_ind_1sg = {"tengo", "teo", "to"}
data.forms.pres_ind_2sg = {"tienes"}
data.forms.pres_ind_3sg = {"tien"}
data.forms.pres_ind_1pl = {"tenemos"}
data.forms.pres_ind_2pl = {"tenéis"}
data.forms.pres_ind_3pl = {"tienen"}
data.forms.impf_ind_1sg = {"tenía"}
data.forms.impf_ind_2sg = {"teníes"}
data.forms.impf_ind_3sg = {"tenía"}
data.forms.impf_ind_1pl = {"teníemos", "teníamos"}
data.forms.impf_ind_2pl = {"teníeis", "teníais"}
data.forms.impf_ind_3pl = {"teníen"}
data.forms.pret_ind_1sg = {"tuvi", "tevi"}
data.forms.pret_ind_2sg = {"tuvisti", "tuviesti"}
data.forms.pret_ind_3sg = {"tuvo", "tevo"}
data.forms.pret_ind_1pl = {"tuvimos", "tuviemos"}
data.forms.pret_ind_2pl = {"tuvistis", "tuviestis"}
data.forms.pret_ind_3pl = {"tuvieron"}
data.forms.plup_ind_1sg = {"tuviere", "tuviera"}
data.forms.plup_ind_2sg = {"tuvieres", "tuvieras"}
data.forms.plup_ind_3sg = {"tuviere", "tuviera"}
data.forms.plup_ind_1pl = {"tuviéremos", "tuviéramos"}
data.forms.plup_ind_2pl = {"tuviereis", "tuvierais"}
data.forms.plup_ind_3pl = {"tuvieren", "tuvieran"}
data.forms.futr_ind_1sg = {"tendré"}
data.forms.futr_ind_2sg = {"tendrás"}
data.forms.futr_ind_3sg = {"tendrá"}
data.forms.futr_ind_1pl = {"tendremos"}
data.forms.futr_ind_2pl = {"tendréis"}
data.forms.futr_ind_3pl = {"tendrán"}
data.forms.cond_ind_1sg = {"tendría"}
data.forms.cond_ind_2sg = {"tendríes"}
data.forms.cond_ind_3sg = {"tendría"}
data.forms.cond_ind_1pl = {"tendríemos", "tendríamos"}
data.forms.cond_ind_2pl = {"tendríeis", "tendríais"}
data.forms.cond_ind_3pl = {"tendríen"}
data.forms.pres_sub_1sg = {"tenga"}
data.forms.pres_sub_2sg = {"tengas"}
data.forms.pres_sub_3sg = {"tenga"}
data.forms.pres_sub_1pl = {"tengamos"}
data.forms.pres_sub_2pl = {"tengáis"}
data.forms.pres_sub_3pl = {"tengan"}
data.forms.impf_sub_1sg = {"tuviere", "tuviera"}
data.forms.impf_sub_2sg = {"tuvieres", "tuvieras"}
data.forms.impf_sub_3sg = {"tuviere", "tuviera"}
data.forms.impf_sub_1pl = {"tuviéremos", "tuviéramos"}
data.forms.impf_sub_2pl = {"tuviereis", "tuvierais"}
data.forms.impf_sub_3pl = {"tuvieren", "tuvieran"}
data.forms.impr_2sg = {"ten"}
data.forms.impr_2pl = {"tenéi"}
table.insert(data.categories, "คำกริยาไม่ปรกติภาษาอัสตูเรียส")
end
inflections["trayer"] = function(args, data)
data.forms.infinitive = {"trayer", "traer"}
data.forms.gerund = {"trayendo"}
data.forms.part_m = {"trayíu", "traíu"}
data.forms.part_f = {"trayida", "traída"}
data.forms.part_n = {"trayío", "traío"}
data.forms["part_m-p"] = {"trayíos", "traíos"}
data.forms["part_f-p"] = {"trayíes", "traíes"}
data.forms.pres_ind_1sg = {"trayo", "traigo"}
data.forms.pres_ind_2sg = {"trayes", "traes"}
data.forms.pres_ind_3sg = {"traye", "trai"}
data.forms.pres_ind_1pl = {"trayíemos", "trayíamos", "traíemos", "traíamos"}
data.forms.pres_ind_2pl = {"trayíeis", "trayíais", "traíeis", "traíais"}
data.forms.pres_ind_3pl = {"trayen", "traen"}
data.forms.impf_ind_1sg = {"trayía", "traía"}
data.forms.impf_ind_2sg = {"trayíes", "traíes"}
data.forms.impf_ind_3sg = {"trayía", "traía"}
data.forms.impf_ind_1pl = {"trayíemos", "trayíamos", "traíemos", "traíamos"}
data.forms.impf_ind_2pl = {"trayíeis", "trayíais", "traíeis", "traíais"}
data.forms.impf_ind_3pl = {"trayíen", "traíen"}
data.forms.pret_ind_1sg = {"traxí"}
data.forms.pret_ind_2sg = {"traxisti", "traxesti"}
data.forms.pret_ind_3sg = {"traxo"}
data.forms.pret_ind_1pl = {"traximos", "traxemos"}
data.forms.pret_ind_2pl = {"traxistis", "traxestis"}
data.forms.pret_ind_3pl = {"traxeron"}
data.forms.plup_ind_1sg = {"traxere", "traxera"}
data.forms.plup_ind_2sg = {"traxeres", "traxeras"}
data.forms.plup_ind_3sg = {"traxere", "traxera"}
data.forms.plup_ind_1pl = {"traxéremos", "traxéramos"}
data.forms.plup_ind_2pl = {"traxereis", "traxerais"}
data.forms.plup_ind_3pl = {"traxeren", "traxeran"}
data.forms.futr_ind_1sg = {"trayeré", "traeré"}
data.forms.futr_ind_2sg = {"trayerás", "traerás"}
data.forms.futr_ind_3sg = {"trayerá", "traerá"}
data.forms.futr_ind_1pl = {"trayeremos", "traeremos"}
data.forms.futr_ind_2pl = {"trayeréis", "traeréis"}
data.forms.futr_ind_3pl = {"trayerán", "traerán"}
data.forms.cond_ind_1sg = {"trayería", "traería"}
data.forms.cond_ind_2sg = {"trayeríes", "traeríes"}
data.forms.cond_ind_3sg = {"trayería", "traería"}
data.forms.cond_ind_1pl = {"trayeríemos", "trayeríamos", "traeríemos", "traeríamos"}
data.forms.cond_ind_2pl = {"trayeríeis", "trayeríais", "traeríeis", "traeríais"}
data.forms.cond_ind_3pl = {"trayeríen", "traeríen"}
data.forms.pres_sub_1sg = {"traya", "traiga"}
data.forms.pres_sub_2sg = {"trayas", "traigas"}
data.forms.pres_sub_3sg = {"traya", "traiga"}
data.forms.pres_sub_1pl = {"trayamos", "traigamos"}
data.forms.pres_sub_2pl = {"trayáis", "traigáis"}
data.forms.pres_sub_3pl = {"trayan", "traigan"}
data.forms.impf_sub_1sg = {"traxere", "traxera"}
data.forms.impf_sub_2sg = {"traxeres", "traxeras"}
data.forms.impf_sub_3sg = {"traxere", "traxera"}
data.forms.impf_sub_1pl = {"traxéremos", "traxéramos"}
data.forms.impf_sub_2pl = {"traxereis", "traxerais"}
data.forms.impf_sub_3pl = {"traxeren", "traxeran"}
data.forms.impr_2sg = {"trai"}
data.forms.impr_2pl = {"trayéi", "traéi"}
table.insert(data.categories, "คำกริยาไม่ปรกติภาษาอัสตูเรียส")
end
return inflections
qybc63fk19fsaow51os1p6tqcc5nnnq
มอดูล:ast-conj
828
336643
5729213
1902748
2026-07-20T03:49:15Z
Octahedron80
267
5729213
Scribunto
text/plain
local m_gen_num = require("Module:gender and number")
local m_links = require("Module:links")
local m_utilities = require("Module:utilities")
local m_infl = require("Module:ast-conj/data")
local lang = require("Module:languages").getByCode("ast")
local export = {}
-- Shows forms with links, or a dash if empty
local function show_form(subforms)
if not subforms then
return "—"
elseif type(subforms) ~= "table" then
error("a non-table value was given in the list of inflected forms.")
elseif #subforms == 0 then
return "—"
end
local ret = {}
-- Go over each subform and insert links
for key, subform in ipairs(subforms) do
table.insert(ret, m_links.full_link({lang = lang, term = subform}))
end
return table.concat(ret, ", ")
end
-- Shows the table with the given forms
local function make_table(data)
local ret = {[=[<div class="NavFrame">
<div class="NavHead" style="text-align: left">การผันรูปของ ]=]}
table.insert(ret, m_links.full_link({lang = lang, alt = data.forms.infinitive[1]}, "term") .. "</div>\n")
table.insert(ret, [=[<div class="NavContent">
{| style="background:#F0F0F0;width:100%" class="inflection-table"
|-
! colspan="2" style="background:#e2e4c0" | รูปกริยากลาง
| colspan="6" align="center" | ]=])
table.insert(ret, show_form(data.forms.infinitive) .. "\n")
table.insert(ret, [=[|-
! colspan="2" style="background:#e2e4c0" | รูปกริยาเป็นนาม
| colspan="6" align="center" | ]=])
table.insert(ret, show_form(data.forms.gerund) .. "\n")
table.insert(ret, [=[|-
! colspan="2" style="background:#e2e4c0" | รูปกริยาขยายอดีตกาล
| colspan="6" align="center" | ]=])
if not data.forms.part_all then
table.insert(ret, m_gen_num.format_list({"m"}) .. " " .. show_form(data.forms.part_m) .. ", ")
table.insert(ret, m_gen_num.format_list({"f"}) .. " " .. show_form(data.forms.part_f) .. ", ")
table.insert(ret, m_gen_num.format_list({"n"}) .. " " .. show_form(data.forms.part_n) .. ", ")
table.insert(ret, m_gen_num.format_list({"m-p"}) .. " " .. show_form(data.forms["part_m-p"]) .. ", ")
table.insert(ret, m_gen_num.format_list({"f-p"}) .. " " .. show_form(data.forms["part_f-p"]) .. "\n")
else
table.insert(ret, show_form(data.forms.part_all) .. "\n")
end
table.insert(ret, [=[
|- style="background:#C0C0C0"
! colspan="2" | person
! style="width:12.5%" | บุรุษที่หนึ่งเอกพจน์<br/>yo
! style="width:12.5%" | บุรุษที่สองเอกพจน์<br/>tu
! style="width:12.5%" | บุรุษที่สามเอกพจน์<br/>él/elli
! style="width:12.5%" | บุรุษที่หนึ่งพหูพจน์<br/>nosotros/nós
! style="width:12.5%" | บุรุษที่สองพหูพจน์<br/>vosotros/vós
! style="width:12.5%" | บุรุษที่สามพหูพจน์<br/>ellos
|-
! style="background:#c0cfe4" rowspan="6" | มาลาบอกเล่า
! style="height:3em;background:#c0cfe4" | ปัจจุบันกาล
]=])
table.insert(ret, "| " .. show_form(data.forms.pres_ind_1sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.pres_ind_2sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.pres_ind_3sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.pres_ind_1pl) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.pres_ind_2pl) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.pres_ind_3pl) .. "\n")
table.insert(ret, [=[
|-
! style="height:3em;background:#c0cfe4" | ไม่สมบูรณ์
]=])
table.insert(ret, "| " .. show_form(data.forms.impf_ind_1sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.impf_ind_2sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.impf_ind_3sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.impf_ind_1pl) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.impf_ind_2pl) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.impf_ind_3pl) .. "\n")
table.insert(ret, [=[
|-
! style="height:3em;background:#c0cfe4" | อดีตกาลสิ้นสุด
]=])
table.insert(ret, "| " .. show_form(data.forms.pret_ind_1sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.pret_ind_2sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.pret_ind_3sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.pret_ind_1pl) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.pret_ind_2pl) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.pret_ind_3pl) .. "\n")
table.insert(ret, [=[
|-
! style="height:3em;background:#c0cfe4" | อภิสมบูรณ์
]=])
table.insert(ret, "| " .. show_form(data.forms.plup_ind_1sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.plup_ind_2sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.plup_ind_3sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.plup_ind_1pl) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.plup_ind_2pl) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.plup_ind_3pl) .. "\n")
table.insert(ret, [=[
|-
! style="height:3em;background:#c0cfe4" | อนาคตกาล
]=])
table.insert(ret, "| " .. show_form(data.forms.futr_ind_1sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.futr_ind_2sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.futr_ind_3sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.futr_ind_1pl) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.futr_ind_2pl) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.futr_ind_3pl) .. "\n")
table.insert(ret, [=[
|-
! style="height:3em;background:#c0cfe4" | มาลาเงื่อนไข
]=])
table.insert(ret, "| " .. show_form(data.forms.cond_ind_1sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.cond_ind_2sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.cond_ind_3sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.cond_ind_1pl) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.cond_ind_2pl) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.cond_ind_3pl) .. "\n")
table.insert(ret, [=[
|-
! style="background:#c0e4c0" rowspan="2" | มาลาสมมุติ
! style="height:3em;background:#c0e4c0" | ปัจจุบันกาล
]=])
table.insert(ret, "| " .. show_form(data.forms.pres_sub_1sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.pres_sub_2sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.pres_sub_3sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.pres_sub_1pl) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.pres_sub_2pl) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.pres_sub_3pl) .. "\n")
table.insert(ret, [=[
|-
! style="height:3em;background:#c0e4c0" | ไม่สมบูรณ์
]=])
table.insert(ret, "| " .. show_form(data.forms.impf_sub_1sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.impf_sub_2sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.impf_sub_3sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.impf_sub_1pl) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.impf_sub_2pl) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.impf_sub_3pl) .. "\n")
table.insert(ret, [=[
|-
! style="height:3em;background:#e4d4c0" colspan="2" | มาลาสั่ง
| —
| ]=])
table.insert(ret, show_form(data.forms.impr_2sg) .. "\n")
table.insert(ret, [=[
| —
| —
| ]=])
table.insert(ret, show_form(data.forms.impr_2pl) .. "\n")
table.insert(ret, [=[
| —
|}
</div></div>]=])
return table.concat(ret)
end
-- Main entry point
function export.show(frame)
local args = frame:getParent().args
-- Create the forms
local data = {forms = {}, categories = {}, refl = false}
-- Find what type of verb is it (hard-coded in the template).
-- m_gen_numerate standard conjugated forms for each type of verb,
local infl_type = frame.args["conj"]
if not args[1] then args[1] = "{{{1}}}" end
--[[ Provisional code to prevent arg 2 from being blank, to avoid
the following forms from ending up as blank stems with their
inflectional endings in cases where this is invoked with only
args 1 and 3:
* 1st sg. ind. (would result in "o")
* 3rd sg. ind. (would result in "a")
* 2nd. sg. imp. (would result in "a")
]]--
if (args[2] == "" or not args[2]) then args[2] = args[1] end
if not infl_type then
data.forms.infinitive = {args["inf"]}; if data.forms.infinitive[1] == "" then data.forms.infinitive = nil end
elseif m_infl[infl_type] then
m_infl[infl_type](args, data)
else
error("Verb type " .. infl_type .. " not supported.")
end
return make_table(data) .. m_utilities.format_categories(data.categories, lang)
end
return export
k1hy8lzg2ti1heq69qnfave9m8yl6zs
5729215
5729213
2026-07-20T03:50:28Z
Octahedron80
267
5729215
Scribunto
text/plain
local m_gen_num = require("Module:gender and number")
local m_links = require("Module:links")
local m_utilities = require("Module:utilities")
local m_infl = require("Module:ast-conj/data")
local lang = require("Module:languages").getByCode("ast")
local export = {}
-- Shows forms with links, or a dash if empty
local function show_form(subforms)
if not subforms then
return "—"
elseif type(subforms) ~= "table" then
error("a non-table value was given in the list of inflected forms.")
elseif #subforms == 0 then
return "—"
end
local ret = {}
-- Go over each subform and insert links
for key, subform in ipairs(subforms) do
table.insert(ret, m_links.full_link({lang = lang, term = subform}))
end
return table.concat(ret, ", ")
end
-- Shows the table with the given forms
local function make_table(data)
local ret = {[=[<div class="NavFrame">
<div class="NavHead" style="text-align: left">การผันรูปของ ]=]}
table.insert(ret, m_links.full_link({lang = lang, alt = data.forms.infinitive[1]}, "term") .. "</div>\n")
table.insert(ret, [=[<div class="NavContent">
{| style="background:#F0F0F0;width:100%" class="inflection-table"
|-
! colspan="2" style="background:#e2e4c0" | รูปกริยากลาง
| colspan="6" align="center" | ]=])
table.insert(ret, show_form(data.forms.infinitive) .. "\n")
table.insert(ret, [=[|-
! colspan="2" style="background:#e2e4c0" | รูปกริยาเป็นนาม
| colspan="6" align="center" | ]=])
table.insert(ret, show_form(data.forms.gerund) .. "\n")
table.insert(ret, [=[|-
! colspan="2" style="background:#e2e4c0" | รูปกริยาขยายอดีตกาล
| colspan="6" align="center" | ]=])
if not data.forms.part_all then
table.insert(ret, m_gen_num.format_list({"m"}) .. " " .. show_form(data.forms.part_m) .. ", ")
table.insert(ret, m_gen_num.format_list({"f"}) .. " " .. show_form(data.forms.part_f) .. ", ")
table.insert(ret, m_gen_num.format_list({"n"}) .. " " .. show_form(data.forms.part_n) .. ", ")
table.insert(ret, m_gen_num.format_list({"m-p"}) .. " " .. show_form(data.forms["part_m-p"]) .. ", ")
table.insert(ret, m_gen_num.format_list({"f-p"}) .. " " .. show_form(data.forms["part_f-p"]) .. "\n")
else
table.insert(ret, show_form(data.forms.part_all) .. "\n")
end
table.insert(ret, [=[
|- style="background:#C0C0C0"
! colspan="2" | บุรุษ
! style="width:12.5%" | บุรุษที่หนึ่งเอกพจน์<br/>yo
! style="width:12.5%" | บุรุษที่สองเอกพจน์<br/>tu
! style="width:12.5%" | บุรุษที่สามเอกพจน์<br/>él/elli
! style="width:12.5%" | บุรุษที่หนึ่งพหูพจน์<br/>nosotros/nós
! style="width:12.5%" | บุรุษที่สองพหูพจน์<br/>vosotros/vós
! style="width:12.5%" | บุรุษที่สามพหูพจน์<br/>ellos
|-
! style="background:#c0cfe4" rowspan="6" | มาลาบอกเล่า
! style="height:3em;background:#c0cfe4" | ปัจจุบันกาล
]=])
table.insert(ret, "| " .. show_form(data.forms.pres_ind_1sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.pres_ind_2sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.pres_ind_3sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.pres_ind_1pl) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.pres_ind_2pl) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.pres_ind_3pl) .. "\n")
table.insert(ret, [=[
|-
! style="height:3em;background:#c0cfe4" | ไม่สมบูรณ์
]=])
table.insert(ret, "| " .. show_form(data.forms.impf_ind_1sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.impf_ind_2sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.impf_ind_3sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.impf_ind_1pl) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.impf_ind_2pl) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.impf_ind_3pl) .. "\n")
table.insert(ret, [=[
|-
! style="height:3em;background:#c0cfe4" | อดีตกาลสิ้นสุด
]=])
table.insert(ret, "| " .. show_form(data.forms.pret_ind_1sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.pret_ind_2sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.pret_ind_3sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.pret_ind_1pl) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.pret_ind_2pl) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.pret_ind_3pl) .. "\n")
table.insert(ret, [=[
|-
! style="height:3em;background:#c0cfe4" | อภิสมบูรณ์
]=])
table.insert(ret, "| " .. show_form(data.forms.plup_ind_1sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.plup_ind_2sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.plup_ind_3sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.plup_ind_1pl) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.plup_ind_2pl) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.plup_ind_3pl) .. "\n")
table.insert(ret, [=[
|-
! style="height:3em;background:#c0cfe4" | อนาคตกาล
]=])
table.insert(ret, "| " .. show_form(data.forms.futr_ind_1sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.futr_ind_2sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.futr_ind_3sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.futr_ind_1pl) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.futr_ind_2pl) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.futr_ind_3pl) .. "\n")
table.insert(ret, [=[
|-
! style="height:3em;background:#c0cfe4" | มาลาเงื่อนไข
]=])
table.insert(ret, "| " .. show_form(data.forms.cond_ind_1sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.cond_ind_2sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.cond_ind_3sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.cond_ind_1pl) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.cond_ind_2pl) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.cond_ind_3pl) .. "\n")
table.insert(ret, [=[
|-
! style="background:#c0e4c0" rowspan="2" | มาลาสมมุติ
! style="height:3em;background:#c0e4c0" | ปัจจุบันกาล
]=])
table.insert(ret, "| " .. show_form(data.forms.pres_sub_1sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.pres_sub_2sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.pres_sub_3sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.pres_sub_1pl) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.pres_sub_2pl) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.pres_sub_3pl) .. "\n")
table.insert(ret, [=[
|-
! style="height:3em;background:#c0e4c0" | ไม่สมบูรณ์
]=])
table.insert(ret, "| " .. show_form(data.forms.impf_sub_1sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.impf_sub_2sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.impf_sub_3sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.impf_sub_1pl) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.impf_sub_2pl) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.impf_sub_3pl) .. "\n")
table.insert(ret, [=[
|-
! style="height:3em;background:#e4d4c0" colspan="2" | มาลาสั่ง
| —
| ]=])
table.insert(ret, show_form(data.forms.impr_2sg) .. "\n")
table.insert(ret, [=[
| —
| —
| ]=])
table.insert(ret, show_form(data.forms.impr_2pl) .. "\n")
table.insert(ret, [=[
| —
|}
</div></div>]=])
return table.concat(ret)
end
-- Main entry point
function export.show(frame)
local args = frame:getParent().args
-- Create the forms
local data = {forms = {}, categories = {}, refl = false}
-- Find what type of verb is it (hard-coded in the template).
-- m_gen_numerate standard conjugated forms for each type of verb,
local infl_type = frame.args["conj"]
if not args[1] then args[1] = "{{{1}}}" end
--[[ Provisional code to prevent arg 2 from being blank, to avoid
the following forms from ending up as blank stems with their
inflectional endings in cases where this is invoked with only
args 1 and 3:
* 1st sg. ind. (would result in "o")
* 3rd sg. ind. (would result in "a")
* 2nd. sg. imp. (would result in "a")
]]--
if (args[2] == "" or not args[2]) then args[2] = args[1] end
if not infl_type then
data.forms.infinitive = {args["inf"]}; if data.forms.infinitive[1] == "" then data.forms.infinitive = nil end
elseif m_infl[infl_type] then
m_infl[infl_type](args, data)
else
error("Verb type " .. infl_type .. " not supported.")
end
return make_table(data) .. m_utilities.format_categories(data.categories, lang)
end
return export
tvzl0e6s7pvz7bqw8ngr4o1f7oh5n1f
5729217
5729215
2026-07-20T03:59:26Z
Octahedron80
267
5729217
Scribunto
text/plain
local m_gen_num = require("Module:gender and number")
local m_links = require("Module:links")
local m_utilities = require("Module:utilities")
local m_infl = require("Module:ast-conj/data")
local lang = require("Module:languages").getByCode("ast")
local export = {}
-- Shows forms with links, or a dash if empty
local function show_form(subforms)
if not subforms then
return "—"
elseif type(subforms) ~= "table" then
error("a non-table value was given in the list of inflected forms.")
elseif #subforms == 0 then
return "—"
end
local ret = {}
-- Go over each subform and insert links
for key, subform in ipairs(subforms) do
table.insert(ret, m_links.full_link({lang = lang, term = subform}))
end
return table.concat(ret, ", ")
end
-- Shows the table with the given forms
local function make_table(data)
local ret = {[=[<div class="NavFrame">
<div class="NavHead" align="center">การผันรูปของ ]=]}
table.insert(ret, m_links.full_link({lang = lang, alt = data.forms.infinitive[1]}, "term") .. "</div>\n")
table.insert(ret, [=[<div class="NavContent" align="left">
{| class="roa-inflection-table" data-toggle-category="inflection"
|-
! class="roa-nonfinite-header" colspan="2" | รูปกริยากลาง
| colspan="6" | ]=])
table.insert(ret, show_form(data.forms.infinitive) .. "\n")
table.insert(ret, [=[|-
! class="roa-nonfinite-header" colspan="2" | รูปกริยาเป็นนาม
| colspan="6" | ]=])
table.insert(ret, show_form(data.forms.gerund) .. "\n")
table.insert(ret, [=[|-
! class="roa-nonfinite-header" colspan="2" | รูปกริยาขยายอดีตกาล
| colspan="6" | ]=])
if not data.forms.part_all then
table.insert(ret, m_gen_num.format_list({"m"}) .. " " .. show_form(data.forms.part_m) .. ", ")
table.insert(ret, m_gen_num.format_list({"f"}) .. " " .. show_form(data.forms.part_f) .. ", ")
table.insert(ret, m_gen_num.format_list({"n"}) .. " " .. show_form(data.forms.part_n) .. ", ")
table.insert(ret, m_gen_num.format_list({"m-p"}) .. " " .. show_form(data.forms["part_m-p"]) .. ", ")
table.insert(ret, m_gen_num.format_list({"f-p"}) .. " " .. show_form(data.forms["part_f-p"]) .. "\n")
else
table.insert(ret, show_form(data.forms.part_all) .. "\n")
end
table.insert(ret, [=[
|- class="roa-person-number-header"
! colspan="2" | บุรุษ
! style="width:12.5%" | บุรุษที่หนึ่งเอกพจน์<br/>yo
! style="width:12.5%" | บุรุษที่สองเอกพจน์<br/>tu
! style="width:12.5%" | บุรุษที่สามเอกพจน์<br/>él/elli
! style="width:12.5%" | บุรุษที่หนึ่งพหูพจน์<br/>nosotros/nós
! style="width:12.5%" | บุรุษที่สองพหูพจน์<br/>vosotros/vós
! style="width:12.5%" | บุรุษที่สามพหูพจน์<br/>ellos
|-
! class="roa-indicative-left-rail" rowspan="6" | มาลาบอกเล่า
! class="roa-indicative-left-rail" style="height:3em;" | ปัจจุบันกาล
]=])
table.insert(ret, "| " .. show_form(data.forms.pres_ind_1sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.pres_ind_2sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.pres_ind_3sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.pres_ind_1pl) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.pres_ind_2pl) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.pres_ind_3pl) .. "\n")
table.insert(ret, [=[
|-
! class="roa-indicative-left-rail" style="height:3em;" | ไม่สมบูรณ์
]=])
table.insert(ret, "| " .. show_form(data.forms.impf_ind_1sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.impf_ind_2sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.impf_ind_3sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.impf_ind_1pl) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.impf_ind_2pl) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.impf_ind_3pl) .. "\n")
table.insert(ret, [=[
|-
! class="roa-indicative-left-rail" style="height:3em;" | อดีตกาลสิ้นสุด
]=])
table.insert(ret, "| " .. show_form(data.forms.pret_ind_1sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.pret_ind_2sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.pret_ind_3sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.pret_ind_1pl) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.pret_ind_2pl) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.pret_ind_3pl) .. "\n")
table.insert(ret, [=[
|-
! class="roa-indicative-left-rail" style="height:3em;" | อภิสมบูรณ์
]=])
table.insert(ret, "| " .. show_form(data.forms.plup_ind_1sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.plup_ind_2sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.plup_ind_3sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.plup_ind_1pl) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.plup_ind_2pl) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.plup_ind_3pl) .. "\n")
table.insert(ret, [=[
|-
! class="roa-indicative-left-rail" style="height:3em;" | อนาคตกาล
]=])
table.insert(ret, "| " .. show_form(data.forms.futr_ind_1sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.futr_ind_2sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.futr_ind_3sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.futr_ind_1pl) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.futr_ind_2pl) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.futr_ind_3pl) .. "\n")
table.insert(ret, [=[
|-
! class="roa-indicative-left-rail" style="height:3em;" | มาลาเงื่อนไข
]=])
table.insert(ret, "| " .. show_form(data.forms.cond_ind_1sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.cond_ind_2sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.cond_ind_3sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.cond_ind_1pl) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.cond_ind_2pl) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.cond_ind_3pl) .. "\n")
table.insert(ret, [=[
|-
! class="roa-subjunctive-left-rail" rowspan="2" | มาลาสมมุติ
! class="roa-subjunctive-left-rail" style="height:3em;" | ปัจจุบันกาล
]=])
table.insert(ret, "| " .. show_form(data.forms.pres_sub_1sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.pres_sub_2sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.pres_sub_3sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.pres_sub_1pl) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.pres_sub_2pl) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.pres_sub_3pl) .. "\n")
table.insert(ret, [=[
|-
! class="roa-subjunctive-left-rail" style="height:3em;" | ไม่สมบูรณ์
]=])
table.insert(ret, "| " .. show_form(data.forms.impf_sub_1sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.impf_sub_2sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.impf_sub_3sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.impf_sub_1pl) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.impf_sub_2pl) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.impf_sub_3pl) .. "\n")
table.insert(ret, [=[
|-
! class="roa-imperative-left-rail" style="height:3em;" colspan="2" | มาลาสั่ง
| —
| ]=])
table.insert(ret, show_form(data.forms.impr_2sg) .. "\n")
table.insert(ret, [=[
| —
| —
| ]=])
table.insert(ret, show_form(data.forms.impr_2pl) .. "\n")
table.insert(ret, [=[
| —
|}
</div></div>]=])
return require("Module:TemplateStyles")("Module:roa-verb/style.css") .. table.concat(ret)
end
-- Main entry point
function export.show(frame)
local args = frame:getParent().args
-- Create the forms
local data = {forms = {}, categories = {}, refl = false}
-- Find what type of verb is it (hard-coded in the template).
-- m_gen_numerate standard conjugated forms for each type of verb,
local infl_type = frame.args["conj"]
if not args[1] then args[1] = "{{{1}}}" end
--[[ Provisional code to prevent arg 2 from being blank, to avoid
the following forms from ending up as blank stems with their
inflectional endings in cases where this is invoked with only
args 1 and 3:
* 1st sg. ind. (would result in "o")
* 3rd sg. ind. (would result in "a")
* 2nd. sg. imp. (would result in "a")
]]--
if (args[2] == "" or not args[2]) then args[2] = args[1] end
if not infl_type then
data.forms.infinitive = {args["inf"]}; if data.forms.infinitive[1] == "" then data.forms.infinitive = nil end
elseif m_infl[infl_type] then
m_infl[infl_type](args, data)
else
error("Verb type " .. infl_type .. " not supported.")
end
return make_table(data) .. m_utilities.format_categories(data.categories, lang)
end
return export
bseu0w8a8umozvjwqhe3yap0ex0eva9
5729294
5729217
2026-07-20T05:29:12Z
Octahedron80
267
5729294
Scribunto
text/plain
local m_gen_num = require("Module:gender and number")
local m_links = require("Module:links")
local m_utilities = require("Module:utilities")
local m_infl = require("Module:ast-conj/data")
local lang = require("Module:languages").getByCode("ast")
local export = {}
-- Shows forms with links, or a dash if empty
local function show_form(subforms)
if not subforms then
return "—"
elseif type(subforms) ~= "table" then
error("a non-table value was given in the list of inflected forms.")
elseif #subforms == 0 then
return "—"
end
local ret = {}
-- Go over each subform and insert links
for key, subform in ipairs(subforms) do
table.insert(ret, m_links.full_link({lang = lang, term = subform}))
end
return table.concat(ret, ", ")
end
-- Shows the table with the given forms
local function make_table(data)
local ret = {[=[<div class="NavFrame">
<div class="NavHead" align="center">การผันรูปของ ]=]}
table.insert(ret, m_links.full_link({lang = lang, alt = data.forms.infinitive[1]}, "term") .. "</div>\n")
table.insert(ret, [=[<div class="NavContent" align="left">
{| class="roa-inflection-table" data-toggle-category="inflection"
|-
! class="roa-nonfinite-header" colspan="2" | รูปกริยากลาง
| colspan="6" | ]=])
table.insert(ret, show_form(data.forms.infinitive) .. "\n")
table.insert(ret, [=[|-
! class="roa-nonfinite-header" colspan="2" | รูปกริยาเป็นนาม
| colspan="6" | ]=])
table.insert(ret, show_form(data.forms.gerund) .. "\n")
table.insert(ret, [=[|-
! class="roa-nonfinite-header" colspan="2" | รูปกริยาขยายอดีตกาล
| colspan="6" | ]=])
if not data.forms.part_all then
table.insert(ret, m_gen_num.format_list({"m"}) .. " " .. show_form(data.forms.part_m) .. ", ")
table.insert(ret, m_gen_num.format_list({"f"}) .. " " .. show_form(data.forms.part_f) .. ", ")
table.insert(ret, m_gen_num.format_list({"n"}) .. " " .. show_form(data.forms.part_n) .. ", ")
table.insert(ret, m_gen_num.format_list({"m-p"}) .. " " .. show_form(data.forms["part_m-p"]) .. ", ")
table.insert(ret, m_gen_num.format_list({"f-p"}) .. " " .. show_form(data.forms["part_f-p"]) .. "\n")
else
table.insert(ret, show_form(data.forms.part_all) .. "\n")
end
table.insert(ret, [=[
|- class="roa-person-number-header"
! colspan="2" | บุรุษ
! style="width:12.5%" | บุรุษที่หนึ่งเอกพจน์<br/>yo
! style="width:12.5%" | บุรุษที่สองเอกพจน์<br/>tu
! style="width:12.5%" | บุรุษที่สามเอกพจน์<br/>él/elli
! style="width:12.5%" | บุรุษที่หนึ่งพหูพจน์<br/>nosotros/nós
! style="width:12.5%" | บุรุษที่สองพหูพจน์<br/>vosotros/vós
! style="width:12.5%" | บุรุษที่สามพหูพจน์<br/>ellos
|-
! class="roa-indicative-left-rail" rowspan="6" | มาลาบอกเล่า
! class="roa-indicative-left-rail" style="height:3em;" | ปัจจุบันกาล
]=])
table.insert(ret, "| " .. show_form(data.forms.pres_ind_1sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.pres_ind_2sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.pres_ind_3sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.pres_ind_1pl) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.pres_ind_2pl) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.pres_ind_3pl) .. "\n")
table.insert(ret, [=[
|-
! class="roa-indicative-left-rail" style="height:3em;" | ไม่สมบูรณ์
]=])
table.insert(ret, "| " .. show_form(data.forms.impf_ind_1sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.impf_ind_2sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.impf_ind_3sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.impf_ind_1pl) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.impf_ind_2pl) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.impf_ind_3pl) .. "\n")
table.insert(ret, [=[
|-
! class="roa-indicative-left-rail" style="height:3em;" | อดีตกาลสิ้นสุด (สมบูรณ์)
]=])
table.insert(ret, "| " .. show_form(data.forms.pret_ind_1sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.pret_ind_2sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.pret_ind_3sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.pret_ind_1pl) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.pret_ind_2pl) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.pret_ind_3pl) .. "\n")
table.insert(ret, [=[
|-
! class="roa-indicative-left-rail" style="height:3em;" | อภิสมบูรณ์
]=])
table.insert(ret, "| " .. show_form(data.forms.plup_ind_1sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.plup_ind_2sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.plup_ind_3sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.plup_ind_1pl) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.plup_ind_2pl) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.plup_ind_3pl) .. "\n")
table.insert(ret, [=[
|-
! class="roa-indicative-left-rail" style="height:3em;" | อนาคตกาล
]=])
table.insert(ret, "| " .. show_form(data.forms.futr_ind_1sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.futr_ind_2sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.futr_ind_3sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.futr_ind_1pl) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.futr_ind_2pl) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.futr_ind_3pl) .. "\n")
table.insert(ret, [=[
|-
! class="roa-indicative-left-rail" style="height:3em;" | มาลาเงื่อนไข
]=])
table.insert(ret, "| " .. show_form(data.forms.cond_ind_1sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.cond_ind_2sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.cond_ind_3sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.cond_ind_1pl) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.cond_ind_2pl) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.cond_ind_3pl) .. "\n")
table.insert(ret, [=[
|-
! class="roa-subjunctive-left-rail" rowspan="2" | มาลาสมมุติ
! class="roa-subjunctive-left-rail" style="height:3em;" | ปัจจุบันกาล
]=])
table.insert(ret, "| " .. show_form(data.forms.pres_sub_1sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.pres_sub_2sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.pres_sub_3sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.pres_sub_1pl) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.pres_sub_2pl) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.pres_sub_3pl) .. "\n")
table.insert(ret, [=[
|-
! class="roa-subjunctive-left-rail" style="height:3em;" | ไม่สมบูรณ์
]=])
table.insert(ret, "| " .. show_form(data.forms.impf_sub_1sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.impf_sub_2sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.impf_sub_3sg) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.impf_sub_1pl) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.impf_sub_2pl) .. "\n")
table.insert(ret, "| " .. show_form(data.forms.impf_sub_3pl) .. "\n")
table.insert(ret, [=[
|-
! class="roa-imperative-left-rail" style="height:3em;" colspan="2" | มาลาสั่ง
| —
| ]=])
table.insert(ret, show_form(data.forms.impr_2sg) .. "\n")
table.insert(ret, [=[
| —
| —
| ]=])
table.insert(ret, show_form(data.forms.impr_2pl) .. "\n")
table.insert(ret, [=[
| —
|}
</div></div>]=])
return require("Module:TemplateStyles")("Module:roa-verb/style.css") .. table.concat(ret)
end
-- Main entry point
function export.show(frame)
local args = frame:getParent().args
-- Create the forms
local data = {forms = {}, categories = {}, refl = false}
-- Find what type of verb is it (hard-coded in the template).
-- m_gen_numerate standard conjugated forms for each type of verb,
local infl_type = frame.args["conj"]
if not args[1] then args[1] = "{{{1}}}" end
--[[ Provisional code to prevent arg 2 from being blank, to avoid
the following forms from ending up as blank stems with their
inflectional endings in cases where this is invoked with only
args 1 and 3:
* 1st sg. ind. (would result in "o")
* 3rd sg. ind. (would result in "a")
* 2nd. sg. imp. (would result in "a")
]]--
if (args[2] == "" or not args[2]) then args[2] = args[1] end
if not infl_type then
data.forms.infinitive = {args["inf"]}; if data.forms.infinitive[1] == "" then data.forms.infinitive = nil end
elseif m_infl[infl_type] then
m_infl[infl_type](args, data)
else
error("Verb type " .. infl_type .. " not supported.")
end
return make_table(data) .. m_utilities.format_categories(data.categories, lang)
end
return export
pzs1hg6wvagedyk1uioy8cn18fmyja9
มอดูล:gl-reinteg-verb
828
339118
5729289
4933751
2026-07-20T05:18:55Z
Octahedron80
267
5729289
Scribunto
text/plain
--[=[
This module implements {{gl-reinteg-conj}} and provides the underlying conjugation functions for {{gl-reinteg-verb}},
as well as for {{gl-verb}} when invoked with |reinteg=1. The actual formatting of both {{gl-reinteg-verb}} and
{{gl-verb}} happens in [[Module:gl-headword]]. This module uses the [[Appendix:Reintegrationism|reintegrationst]] norm
for Galician spelling. See also [[Module:gl-verb]], which implements the standard norm.
Authorship: Ben Wing <benwing2>, MedK <medk1>
]=]
local export = {}
--[=[
TERMINOLOGY:
-- "slot" = A particular combination of tense/mood/person/number/etc.
Example slot names for verbs are "pres_1s" (present indicative first-person singular), "pres_sub_2s" (present
subjunctive second-person singular) "impf_sub_3p" (imperfect subjunctive third-person plural).
Each slot is filled with zero or more forms.
-- "form" = The conjugated Galician form representing the value of a given slot.
-- "lemma" = The dictionary form of a given Galician term. For Galician, always the infinitive.
]=]
--[=[
FIXME:
--]=]
local lang = require("Module:languages").getByCode("gl")
local m_string_utilities = require("Module:string utilities")
local m_links = require("Module:links")
local m_table = require("Module:table")
local iut = require("Module:inflection utilities")
local com = require("Module:gl-reinteg-common")
local force_cat = false -- set to true for debugging
local check_for_red_links = false -- set to false for debugging
local rfind = mw.ustring.find
local rmatch = mw.ustring.match
local rsplit = mw.text.split
local rsub = com.rsub
local u = mw.ustring.char
local function link_term(term)
return m_links.full_link({ lang = lang, term = term }, "term")
end
local V = com.V -- vowel regex class
local AV = com.AV -- accented vowel regex class
local C = com.C -- consonant regex class
local AC = u(0x0301) -- acute = ́
local TEMPC1 = u(0xFFF1) -- temporary character used for consonant substitutions
local TEMP_MESOCLITIC_INSERTION_POINT = u(0xFFF2) -- temporary character used to mark the mesoclitic insertion point
-- Variant codes and the like.
-- NOTE: These codes should be *PREFIXED* onto stems and *SUFFIXED* onto endings. That way they won't interfere in the
-- operation of combine_stem_ending().
--
-- GL_TYPE = "Galician-type", PT_TYPE = "Portuguese-type". GL_TYPE stems cannot combine with PT_TYPE endings and
-- vice-versa. GL_ONLY_TYPE = "Galician-only type"; GL_ONLY_TYPE stems can only combine with endings specifically
-- marked as GL_TYPE.
local GL_TYPE = u(0xFFF3)
local GL_ONLY_TYPE = u(0xFFF4)
local PT_TYPE = u(0xFFF5)
-- ALTVAR = Less-recommended variants listed at the bottom of the Estraviz conjugation tables rather than in the main
-- table. We list these in the main table but with a footnote indicating they are less-recommended alternatives, and
-- italicize them to visually set them apart.
local ALTVAR = u(0xFFF6)
local GL_ALTVAR = GL_TYPE .. ALTVAR
local GL_ONLY_ALTVAR = GL_ONLY_TYPE .. ALTVAR
local var_codes_no_altvar = GL_TYPE .. GL_ONLY_TYPE .. PT_TYPE
local all_var_codes = var_codes_no_altvar .. ALTVAR
local var_code_c = "[" .. all_var_codes .. "]"
local var_code_no_altvar_c = "[" .. var_codes_no_altvar .. "]"
local not_var_code_c = "[^" .. all_var_codes .. "]"
-- Export variant codes for use in [[Module:pt-gl-inflections]].
export.GL_TYPE = GL_TYPE
export.GL_ONLY_TYPE = GL_ONLY_TYPE
export.PT_TYPE = PT_TYPE
export.ALTVAR = ALTVAR
local short_pp_footnote = "[usually used with auxiliary verbs " .. link_term("ser") .. " and " .. link_term("estar") .. "]"
local long_pp_footnote = "[usually used with auxiliary verbs " .. link_term("haver") .. " and " .. link_term("ter") .. "]"
--[=[
Vowel alternations:
<i-e>: 'i' in pres1s and the whole present subjunctive; 'e' elsewhere when stressed. Generally 'e' otherwise when
unstressed. E.g. [[sentir]], [[conseguir]] (the latter additionally with 'gu-g' alternation).
<u-o>: 'u' in pres1s and the whole present subjunctive; 'o' elsewhere when stressed. Either 'o' or 'u' otherwise when
unstressed. E.g. [[dormir]], [[subir]].
<i>: 'i' whenever stressed (in the present singular and third plural) and throughout the whole present subjunctive.
Otherwise 'e'. E.g. [[progredir]], [[premir]].
<u>: 'u' whenever stressed (in the present singular and third plural) and throughout the whole present subjunctive.
Otherwise 'o'. E.g. [[polir]], [[extorquir]] (the latter also <u-o>).
<í>: The last 'i' of the stem (excluding stem-final 'i') becomes 'í' when stressed. E.g.:
* [[proibir]] ('proíbo, proíbe(s), proíbem, proíba(s), proíbam')
* [[faiscar]] ('faísco, faísca(s), faíscam, faísque(s), faísquem' also with 'c-qu' alternation)
* [[homogeneizar]] ('homogeneízo', etc.)
* [[mobiliar]] ('mobílio', etc.; note here the final -i is ignored when determining which vowel to stress)
* [[tuitar]] ('tuíto', etc.)
<ú>: The last 'u' of the stem (excluding stem-final 'u') becomes 'ú' when stressed. E.g.:
* [[reunir]] ('reúno, reúne(s), reúnem, reúna(s), reúnam')
* [[esmiuçar]] ('esmiúço, esmiúça(s), esmiúça, esmiúce(s), esmiúcem' also with 'ç-c' alternation)
* [[reusar]] ('reúso, reúsa(s), reúsa, reúse(s), reúsem')
* [[saudar]] ('saúdo, saúda(s), saúda, saúde(s), saúdem')
]=]
local vowel_alternants = m_table.listToSet({"i-e", "i", "í", "u-o", "u", "ú", "ei", "+"})
local vowel_alternant_to_desc = {
["i-e"] = "''i-e'' alternation in present singular",
["i"] = "''e'' becomes ''i'' when stressed",
["í"] = "''i'' becomes ''í'' when stressed",
["u-o"] = "''u-o'' alternation in present singular",
["u"] = "''o'' becomes ''u'' when stressed",
["ú"] = "''u'' becomes ''ú'' when stressed",
["ei"] = "''i'' becomes ''ei'' when stressed",
}
local vowel_alternant_to_cat = {
["i-e"] = "i-e alternation in present singular",
["i"] = "e becoming i when stressed",
["í"] = "i becoming í when stressed",
["u-o"] = "u-o alternation in present singular",
["u"] = "o becoming u when stressed",
["ú"] = "u becoming ú when stressed",
["ei"] = "i becoming ei when stressed",
}
local all_persons_numbers = {
["1s"] = "1|s",
["2s"] = "2|s",
["3s"] = "3|s",
["1p"] = "1|p",
["2p"] = "2|p",
["3p"] = "3|p",
}
local person_number_list = {"1s", "2s", "3s", "1p", "2p", "3p"}
local imp_person_number_list = {"2s", "3s", "1p", "2p", "3p"}
local neg_imp_person_number_list = {"2s", "3s", "1p", "2p", "3p"}
person_number_to_reflexive_pronoun = {
["1s"] = "me",
["2s"] = "te",
["3s"] = "se",
["1p"] = "nos",
["2p"] = "vos",
["3p"] = "se",
}
local indicator_flags = m_table.listToSet {
"no_pres_stressed", "no_pres1_and_sub",
"only3s", "only3sp", "only3p",
"pp_inv", "irreg", "no_built_in", "e_ei_cat",
}
-- Remove any variant codes e.g. GL_TYPE, PT_TYPE, ALTVAR. Needs to be called from [[Module:gl-reinteg-headword]] on the
-- output of do_generate_forms(). `keep_altvar` leaves ALTVAR; used in the `canonicalize` function of show_forms()
-- because we then process and remove it in `generate_forms`. FIXME: Use metadata for this once it's supported in
-- [[Module:inflection utilities]].
function export.remove_variant_codes(form, keep_altvar)
return rsub(form, keep_altvar and var_code_no_altvar_c or var_code_c, "")
end
-- Initialize all the slots for which we generate forms.
local function add_slots(alternant_multiword_spec)
-- "Basic" slots: All slots that go into the regular table (not the reflexive form-of table).
alternant_multiword_spec.verb_slots_basic = {
{"infinitive", "inf"},
{"infinitive_linked", "inf"},
{"gerund", "ger"},
{"short_pp_ms", "short|m|s|past|part"},
{"short_pp_fs", "short|f|s|past|part"},
{"short_pp_mp", "short|m|p|past|part"},
{"short_pp_fp", "short|f|p|past|part"},
{"pp_ms", "m|s|past|part"},
{"pp_fs", "f|s|past|part"},
{"pp_mp", "m|p|past|part"},
{"pp_fp", "f|p|past|part"},
}
-- Special slots used to handle non-reflexive parts of reflexive verbs in {{gl-reinteg-verb form of}}. For example,
-- for a reflexive-only verb like [[arrepender-se]], we want to be able to use {{gl-reinteg-verb form of}} on
-- [[arrependa]] (which should mention that it is a part of 'me arrependa', first-person singular present
-- subjunctive, and 'se arrependa', third-person singular present subjunctive) or on [[arrependemos]] (which should
-- mention that it is a part of 'arrependemo-nos', first-person plural present indicative or preterite). Similarly,
-- we want to use {{gl-reinteg-verb form of}} on [[arrependendo]] (which should mention that it is a part of
-- 'se ... arrependendo', syntactic variant of [[arrependendo-se]], which is the gerund of [[arrepender-se]]). To
-- do this, we need to be able to map non-reflexive parts like [[arrependa]], [[arrependemos]], [[arrependendo]],
-- etc. to their reflexive equivalent(s), to the tag(s) of the equivalent(s), and, in the case of forms like
-- [[arrependendo]], [[arrepender]] and imperatives, to the separated syntactic variant of the verb+clitic
-- combination. We do this by creating slots for the non-reflexive part equivalent of each basic reflexive slot,
-- and for the separated syntactic-variant equivalent of each basic reflexive slot that is formed of verb+clitic.
-- We use slots in this way to deal with multiword lemmas. Note that we run into difficulties mapping between
-- reflexive verbs, non-reflexive part equivalents, and separated syntactic variants if a slot contains more than
-- one form. To handle this, if there are the same number of forms in two slots we're trying to match up, we assume
-- the forms match one-to-one; otherwise we don't match up the two slots (which means {{gl-reinteg-verb form of}} won't
-- work in this case, but such a case is extremely rare and not worth worrying about). Alternatives that handle
-- this "properly" are significantly more complicated and require non-trivial modifications to
-- [[Module:inflection utilities]].
local need_special_verb_form_of_slots = alternant_multiword_spec.source_template == "gl-reinteg-verb form of" and
alternant_multiword_spec.refl
if need_special_verb_form_of_slots then
alternant_multiword_spec.verb_slots_reflexive_verb_form_of = {
{"infinitive_non_reflexive", "-"},
{"infinitive_variant", "-"},
{"gerund_non_reflexive", "-"},
{"gerund_variant", "-"},
}
else
alternant_multiword_spec.verb_slots_reflexive_verb_form_of = {}
end
-- Add entries for a slot with person/number variants.
-- `verb_slots` is the table to add to.
-- `slot_prefix` is the prefix of the slot, typically specifying the tense/aspect.
-- `tag_suffix` is a string listing the set of inflection tags to add after the person/number tags.
-- `person_number_list` is a list of the person/number slot suffixes to add to `slot_prefix`.
local function add_personal_slot(verb_slots, slot_prefix, tag_suffix, person_number_list)
for _, persnum in ipairs(person_number_list) do
local persnum_tag = all_persons_numbers[persnum]
local slot = slot_prefix .. "_" .. persnum
local accel = persnum_tag .. "|" .. tag_suffix
table.insert(verb_slots, {slot, accel})
end
end
-- Add a personal slot (i.e. a slot with person/number variants) to `verb_slots_basic`.
local function add_basic_personal_slot(slot_prefix, tag_suffix, person_number_list, no_special_verb_form_of_slot)
add_personal_slot(alternant_multiword_spec.verb_slots_basic, slot_prefix, tag_suffix, person_number_list)
-- Add special slots for handling non-reflexive parts of reflexive verbs in {{gl-reinteg-verb form of}}.
-- See comment above in `need_special_verb_form_of_slots`.
if need_special_verb_form_of_slots and not no_special_verb_form_of_slot then
for _, persnum in ipairs(person_number_list) do
local persnum_tag = all_persons_numbers[persnum]
local basic_slot = slot_prefix .. "_" .. persnum
local accel = persnum_tag .. "|" .. tag_suffix
table.insert(alternant_multiword_spec.verb_slots_reflexive_verb_form_of, {basic_slot .. "_non_reflexive", "-"})
end
end
end
add_basic_personal_slot("pres", "pres|ind", person_number_list)
add_basic_personal_slot("impf", "impf|ind", person_number_list)
add_basic_personal_slot("pret", "pret|ind", person_number_list)
add_basic_personal_slot("plup", "plup|ind", person_number_list)
add_basic_personal_slot("fut", "fut|ind", person_number_list)
add_basic_personal_slot("cond", "cond", person_number_list)
add_basic_personal_slot("pres_sub", "pres|sub", person_number_list)
add_basic_personal_slot("impf_sub", "impf|sub", person_number_list)
add_basic_personal_slot("fut_sub", "fut|sub", person_number_list)
add_basic_personal_slot("imp", "imp", imp_person_number_list)
add_basic_personal_slot("pers_inf", "pers|inf", person_number_list)
-- Don't need special non-reflexive-part slots because the negative imperative is multiword, of which the
-- individual words are 'nom' + subjunctive.
add_basic_personal_slot("neg_imp", "neg|imp", neg_imp_person_number_list, "no special verb form of")
-- Don't need special non-reflexive-part slots because we don't want [[arrependendo]] mapping to [[arrependendo-me]]
-- (only [[arrependendo-se]]) or [[arrepender]] mapping to [[arrepender-me]] (only [[arrepender-se]]).
add_basic_personal_slot("infinitive", "inf", person_number_list, "no special verb form of")
add_basic_personal_slot("gerund", "ger", person_number_list, "no special verb form of")
-- Generate the list of all slots.
alternant_multiword_spec.all_verb_slots = {}
for _, slot_and_accel in ipairs(alternant_multiword_spec.verb_slots_basic) do
table.insert(alternant_multiword_spec.all_verb_slots, slot_and_accel)
end
for _, slot_and_accel in ipairs(alternant_multiword_spec.verb_slots_reflexive_verb_form_of) do
table.insert(alternant_multiword_spec.all_verb_slots, slot_and_accel)
end
alternant_multiword_spec.verb_slots_basic_map = {}
for _, slotaccel in ipairs(alternant_multiword_spec.verb_slots_basic) do
local slot, accel = unpack(slotaccel)
alternant_multiword_spec.verb_slots_basic_map[slot] = accel
end
end
local overridable_stems = {}
local function allow_multiple_values(separated_groups, data)
local retvals = {}
for _, separated_group in ipairs(separated_groups) do
local footnotes = data.fetch_footnotes(separated_group)
local retval = {form = separated_group[1], footnotes = footnotes}
table.insert(retvals, retval)
end
return retvals
end
local function simple_choice(choices)
return function(separated_groups, data)
if #separated_groups > 1 then
data.parse_err("For spec '" .. data.prefix .. ":', only one value currently allowed")
end
if #separated_groups[1] > 1 then
data.parse_err("For spec '" .. data.prefix .. ":', no footnotes currently allowed")
end
local choice = separated_groups[1][1]
if not m_table.contains(choices, choice) then
data.parse_err("For spec '" .. data.prefix .. ":', saw value '" .. choice .. "' but expected one of '" ..
table.concat(choices, ",") .. "'")
end
return choice
end
end
for _, overridable_stem in ipairs {
"pres_unstressed",
"pres_stressed",
"pres1_and_sub",
-- Don't include pres1; use pres_1s if you need to override just that form
"impf",
"full_impf",
{"pret_conj", simple_choice({"irreg", "ar", "er", "ir"}) },
"pret_base",
"pret",
"gl_short_pret",
"pt_pret_1s",
"pt_pret_3s",
"fut",
"cond",
"pres_sub_stressed",
"pres_sub_unstressed",
{"sub_conj", simple_choice({"ar", "er"}) },
"plup",
"impf_sub",
"fut_sub",
"pers_inf",
"pp",
"short_pp",
} do
if type(overridable_stem) == "string" then
overridable_stems[overridable_stem] = allow_multiple_values
else
local stem, validator = unpack(overridable_stem)
overridable_stems[stem] = validator
end
end
-- Useful as the value of the `match` property of a built-in verb. `main_verb_spec` is a Lua pattern that should match
-- the non-prefixed part of a verb, and `prefix_specs` is a list of Lua patterns that should match the prefixed part of
-- a verb. If a prefix spec is preceded by ^, it must match exactly at the beginning of the verb; otherwise, additional
-- prefixes (e.g. re-, des-) may precede. Return the prefix and main verb.
local function match_against_verbs(main_verb_spec, prefix_specs)
return function(verb)
for _, prefix_spec in ipairs(prefix_specs) do
if prefix_spec:find("^%^") then
-- must match exactly
prefix_spec = prefix_spec:gsub("^%^", "")
if prefix_spec == "" then
-- We can't use the second branch of the if-else statement because an empty () returns the current position
-- in rmatch().
local main_verb = rmatch(verb, "^(" .. main_verb_spec .. ")$")
if main_verb then
return "", main_verb
end
else
local prefix, main_verb = rmatch(verb, "^(" .. prefix_spec .. ")(" .. main_verb_spec .. ")$")
if prefix then
return prefix, main_verb
end
end
else
local prefix, main_verb = rmatch(verb, "^(.*" .. prefix_spec .. ")(" .. main_verb_spec .. ")$")
if prefix then
return prefix, main_verb
end
end
end
return nil
end
end
--[=[
Built-in (usually irregular) conjugations.
Each entry is processed in turn and consists of an object with two fields:
1. match=: Specifies the built-in verbs that match this object.
2. forms=: Specifies the built-in stems and forms for these verbs.
The value of match= is either a string beginning with "^" (match only the specified verb), a string not beginning
with "^" (match any verb ending in that string), or a function that is passed in the verb and should return the prefix
of the verb if it matches, otherwise nil. The function match_against_verbs() is provided to facilitate matching a set
of verbs with a common ending and specific prefixes (e.g. [[ter]] and [[ater]] but not [[abater]], etc.).
The value of forms= is a table specifying stems and individual override forms. Each key of the table names either a
stem (e.g. `pres_stressed`), a stem property (e.g. `vowel_alt`) or an individual override form (e.g. `pres_1s`).
Each value of a stem can either be a string (a single stem), a list of strings, or a list of objects of the form
{form = STEM, footnotes = {FOONOTES}}. Each value of an individual override should be of exactly the same form except
that the strings specify full forms rather than stems. The values of a stem property depend on the specific property
but are generally strings or booleans.
In order to understand how the stem specifications work, it's important to understand the phonetic modifications done
by combine_stem_ending(). In general, the complexities of predictable prefix, stem and ending modifications are all
handled in this function. In particular:
1. Spelling-based modifications (c/z, g/gu, gu/gü, g/j) occur automatically as appropriate for the ending.
2. If the stem begins with an acute accent, the accent is moved onto the last vowel of the prefix (for handling verbs
in -uar such as [[minguar]], pres_3s 'míngua').
3. If the ending begins with a double asterisk, this is a signal to conditionally delete the accent on the last letter
of the stem. "Conditionally" means we don't do it if the last two letters would form a diphthong without the accent
on the second one (e.g. in [[sair]], with stem 'saí'); but as an exception, we do delete the accent in stems
ending in -guí, -quí (e.g. in [[conseguir]]) because in this case the ui isn't a diphthong.
4. If the ending begins with an asterisk, this is a signal to delete the accent on the last letter of the stem, e.g.
fizé -> fizermos. Unlike for **, this removal is unconditional, so we get e.g. 'sairmos' not #'saírmos'.
5. If ending begins with i, it must get an accent after an unstressed vowel (in some but not all cases) to prevent the
two merging into a diphthong. See combine_stem_ending() for specifics.
The following stems are recognized:
-- pres_unstressed: The present indicative unstressed stem (1p, 2p). Also controls the imperative 2p
and gerund. Defaults to the infinitive stem (minus the ending -ar/-er/-ir/-or).
-- pres_stressed: The present indicative stressed stem (1s, 2s, 3s, 3p). Also controls the imperative 2s.
Default is empty if indicator `no_pres_stressed`, else a vowel alternation if such an indicator is given
(e.g. `ue`, `ì`), else the infinitive stem.
-- pres1_and_sub: Overriding stem for 1s present indicative and the entire subjunctive. Only set by irregular verbs
and by the indicators `no_pres_stressed` (e.g. [[precaver]]) and `no_pres1_and_sub` (since verbs of this sort,
e.g. [[puir]], are missing the entire subjunctive as well as the 1s present indicative). Used by many irregular
verbs, e.g. [[caber]], verbs in '-air', [[dizer]], [[ter]], [[valer]], etc. Some verbs set this and then supply an
override for the pres_1sg if it's irregular, e.g. [[saber]], with irregular subjunctive stem "saib-" and special
1s present indicative "sei".
-- pres1: Special stem for 1s present indicative. Normally, do not set this explicitly. If you need to specify an
irregular 1s present indicative, use the form override pres_1s= to specify the entire form. Defaults to
pres1_and_sub if given, else pres_stressed.
-- pres_sub_unstressed: The present subjunctive unstressed stem (1p, 2p). Defaults to pres1_and_sub if given, else the
infinitive stem.
-- pres_sub_stressed: The present subjunctive stressed stem (1s, 2s, 3s, 1p). Defaults to pres1.
-- sub_conj: Determines the set of endings used in the subjunctive. Should be one of "ar" or "er".
-- impf: The imperfect stem (not including the -av-/-i- stem suffix, which is determined by the conjugation). Defaults
to the infinitive stem.
-- full_impf: The full imperfect stem missing only the endings (-a, -as, -am, etc.). Used for verbs with irregular
imperfects such as [[ser]], [[ter]], [[vir]] and [[pôr]]. Needs to include an accent on the stressed vowel, which
will automatically be removed when not needed.
-- pret_conj: Determines the set of endings used in the preterite. Should be one of "ar", "er", "ir" or "irreg".
Defaults to the conjugation as determined from the infinitive. When pret_conj == "irreg", `pret` is used, otherwise
`pret_base`.
-- pret_base: The preterite stem (not including the -a-/-e-/-i- stem suffix). Defaults to the infinitive stem.
Only used when pret_conj ~= "irreg".
-- pret: The full preterite stem missing only the endings (-ste, -mos, etc.). Needs to include the accent on the final
vowel that occurs in some forms, e.g. 'figé' for [[fazer]], 'fô' for [[ser]]; the accent will automatically be
removed when not needed. Only used for verbs with irregular preterites (pret_conj == "irreg") such as [[fazer]],
[[poder]], [[trazer]], etc. The pret_1s and pret_3s are handled using the gl_short_pret stem instead for
"Galician"-ending forms (pret_1s '-em', pret_3s '-o') and using pt_pret_1s and pt_pret_3s for "Portuguese"-ending
forms. Defaults to `pret_base` + the accented conjugation vowel.
-- gl_short_pret: The short preterite stem, used with "Galician" 1s and 3s endings (pret_1s '-em', pret_3s '-o'). Only
used with irregular preterites (pret_conj == "irreg"). Normally derived from gl_pret by deleting the final vowel,
and doesn't need to be given explicitly.
-- pt_pret_1s: The "Portuguese" pret_1s form. In addition to this, the "Galician" pret_1s form will be included, formed
from gl_short_pret by adding '-em'. Does not need to be given if an override for pret_1s is supplied.
-- pt_pret_3s: The "Portuguese" pret_3s form. In addition to this, the "Galician" pret_3s form will be included, formed
from gl_short_pret by adding '-o' (which may cause the preceding consonant to shift to preserve the sound). Does
not need to be given if an override for pret_3s is supplied.
-- fut: The future stem. Defaults to the infinitive stem + the unaccented conjugation vowel.
-- cond: The conditional stem. Defaults to `fut`.
-- impf_sub: The imperfect subjunctive stem. Needs to include the accent on the final vowel that occurs in some forms;
see `pret` for more information. Defaults to `pret`.
-- fut_sub: The future subjunctive stem. Needs to include the accent on the final vowel that occurs in some forms; see
`gl_pret` for more information. Defaults to the merger of `gl_pret` and `pt_pret`.
-- plup: The pluperfect stem. Needs to include the accent on the final vowel that occurs in some forms; see `pret` for
more information. Defaults to `pret`.
-- pers_inf: The personal infinitive stem. Defaults to the infinitive stem + the accented conjugation vowel.
-- pp: The masculine singular past participle. Default is based on the verb conjugation: infinitive stem + '-ado' for
-ar verbs, otherwise infinitive stem + '-ido'.
-- short_pp: The short masculine singular past participle, for verbs with such a form. No default.
-- pp_inv: `true` if the past participle exists only in the masculine singular.
]=]
local built_in_conjugations = {
--------------------------------------------------------------------------------------------
-- -ar --
--------------------------------------------------------------------------------------------
-- Verbs not needing entries here:
--
-- (1) Verbs with short past participles: need to specify the short pp explicitly.
--
-- aceitar: use <short_pp:aceite>
-- anexar, completar, expressar, expulsar, findar, fritar, ganhar, gastar, limpar, pagar, pasmar, pegar, soltar:
-- use <short_pp:anexo> etc.
-- assentar: use <short_pp:assente>
-- entregar: use <short_pp:entregue>
-- enxugar: use <short_pp:enxuto>
-- matar: use <short_pp:morto>
--
-- (2) Verbs with orthographic consonant alternations: handled automatically.
--
-- -car (brincar, buscar, pecar, trancar, etc.): automatically handled in combine_stem_ending()
-- -çar (alcançar, começar, laçar): automatically handled in combine_stem_ending()
-- -gar (apagar, cegar, esmagar, largar, navegar, resmungar, sugar, etc.): automatically handled in combine_stem_ending()
--
-- (3) Verbs with vowel alternations: need to specify the alternation explicitly unless it always happens, in
-- which case it's handled automatically through an entry below.
--
-- esmiuçar changing to esmiúço: use <ú>
-- faiscar changing to faísco: use <í>
-- -iar changing to -eio (ansiar, incendiar, mediar, odiar, remediar, etc.): use <ei>
-- -izar changing to -ízo (ajuizar, enraizar, homogeneizar, plebeizar, etc.): use <í>
-- mobiliar changing to mobílio: use <í>
-- reusar changing to reúso: use <ú>
-- saudar changing to saúdo: use <ú>
-- tuitar/retuitar changing to (re)tuíto: use <í>
{
-- dar, desdar
match = match_against_verbs("dar", {"^", "^des", "^re"}),
forms = {
pres_1s = "dou",
pres_2s = "dás",
pres_3s = "dá",
-- damos, dades/dais regular
pres_3p = {GL_TYPE .. "dam", PT_TYPE .. "dão"},
pret_conj = "irreg", pret = "dé", pret_1s = "dei", pret_3s = "deu",
pres_sub_1s = "dê",
pres_sub_2s = "dês",
pres_sub_3s = "dê",
-- demos, dedes/deis regular
pres_sub_3p = {GL_TYPE .. "dem", PT_TYPE .. "deem"},
irreg = true,
}
},
{
-- -ear (frear, nomear, semear, etc.)
match = "ear",
forms = {
pres_stressed = {"ei", GL_ALTVAR .. "e"},
e_ei_cat = true,
}
},
{
-- estar
match = match_against_verbs("estar", {"^", "sob", "sobr"}),
forms = {
pres_1s = "estou",
pres_2s = "estás",
pres_3s = "está",
pres_3p = {GL_TYPE .. "estám", PT_TYPE .. "estão"},
pres1_and_sub = "estej", -- only for subjunctive as we override pres_1s
sub_conj = "er",
pret_conj = "irreg", pret = "estivé", pt_pret_1s = "estive", pt_pret_3s = "esteve",
-- [[sobestar]], [[sobrestar]] are transitive so they have fully inflected past participles
pp_inv = function(base, prefix) return prefix == "" end,
irreg = true,
}
},
--------------------------------------------------------------------------------------------
-- -er --
--------------------------------------------------------------------------------------------
-- Verbs not needing entries here:
--
-- precaver: use <no_pres_stressed>
-- -cer (verbs in -ecer, descer, vencer, etc.): automatically handled in combine_stem_ending()
-- -ger (proteger, reger, etc.): automatically handled in combine_stem_ending()
-- -guer (erguer/reerguer/soerguer): automatically handled in combine_stem_ending()
{
-- benzer
match = "benzer",
forms = {short_pp = "bento"}
},
{
-- caber
match = "caber",
forms = {
pres1_and_sub = "caib",
pret_conj = "irreg", pret = "coubé", pt_pret_1s = "coube", pt_pret_3s = "coube",
irreg = true,
}
},
{
-- crer, descrer
match = "crer",
forms = {
pres_2s = "crês", pres_3s = "crê",
pres_2p = "credes", pres_3p = {GL_TYPE .. "crem", PT_TYPE .. "creem"},
pres1_and_sub = {"crei", GL_ALTVAR .. "cre"},
irreg = true,
}
},
{
-- dizer, bendizer, condizer, contradizer, desdizer, maldizer, predizer, etc.
match = "dizer",
forms = {
-- use 'digu' because we're in a front environment; if we use 'dig', we'll get '#dijo'
pres1_and_sub = "digu",
pres_2s = {GL_TYPE .. "dis", PT_TYPE .. "dizes"},
pres_3s = {GL_TYPE .. "di", PT_TYPE .. "diz"},
pres_3p = {GL_TYPE .. "dim", PT_TYPE .. "dizem"},
pret_conj = "irreg", pret = {GL_TYPE .. "dixé", PT_TYPE .. "dissé"},
pt_pret_1s = "disse", pt_pret_3s = "disse",
pp = "dito",
fut = "dir",
irreg = true,
}
},
{
-- eleger, reeleger
match = "eleger",
forms = {short_pp = "eleito"}
},
{
-- acender, prender; not desprender, etc.
match = match_against_verbs("ender", {"^ac", "^pr"}),
forms = {short_pp = "eso"}
},
{
-- fazer, afazer, contrafazer, desfazer, liquefazer, perfazer, putrefazer, rarefazer, refazer, satisfazer, tumefazer
match = "fazer",
forms = {
-- use 'fagu' because we're in a front environment; if we use 'fag', we'll get '#fajo'
pres1_and_sub = {GL_TYPE .. "fagu", PT_TYPE .. "faç"},
pres_2s = {GL_TYPE .. "fás", PT_TYPE .. "fazes"},
pres_3s = {GL_TYPE .. "fai", PT_TYPE .. "faz"},
pres_3p = {GL_TYPE .. "fam", PT_TYPE .. "fazem"},
pret_conj = "irreg", pret = {GL_TYPE .. "figé", PT_TYPE .. "fizé", GL_ONLY_ALTVAR .. "fizé"},
pt_pret_1s = "fiz", pt_pret_3s = "fez",
pp = "feito",
fut = "far",
irreg = true,
}
},
{
match = "^haver",
forms = {
pres_1s = "hei",
pres_2s = "hás",
pres_3s = {"há", {form = GL_ALTVAR .. "hai", footnotes = {"[also impersonal]"}}},
pres_3p = {GL_TYPE .. "ham", PT_TYPE .. "hão"},
pres1_and_sub = "haj", -- only for subjunctive as we override pres_1s
pret_conj = "irreg", pret = "houvé", pt_pret_1s = "houve", pt_pret_3s = "houve",
imp_2s = "há",
irreg = true,
}
},
-- reaver below under r-
{
-- jazer, adjazer
match = "jazer",
forms = {
pres_3s = "jaz",
irreg = true,
}
},
{
-- ler, reler, tresler; not excel(l)er, valer, etc.
match = match_against_verbs("ler", {"^", "^re", "tres"}),
forms = {
pres_2s = "lês", pres_3s = "lê",
pres_2p = "ledes", pres_3p = {GL_TYPE .. "lem", PT_TYPE .. "leem"},
pres1_and_sub = {"lei", GL_ALTVAR .. "le"},
irreg = true,
}
},
{
-- morrer, desmorrer
match = "morrer",
forms = {short_pp = "morto"}
},
{
-- moer, but not remoer
match = "^moer",
forms = {
pres_2s = "móis", pres_3s = "mói",
-- impf -ía etc., pret_1s -oí and pp -oído handled automatically in combine_stem_ending()
pres1_and_sub = {"mo", GL_ALTVAR .. "moi"},
short_pp = "mudo",
irreg = true,
}
},
{
-- doer, remoer, roer/corroer, soer
match = "oer",
forms = {
pres_2s = "óis", pres_3s = "ói",
-- impf -ía etc., pret_1s -oí and pp -oído handled automatically in combine_stem_ending()
pres1_and_sub = {"o", GL_ALTVAR .. "oi"},
irreg = true,
}
},
{
-- perder
match = "perder",
forms = {
-- use 'perqu' because we're in a front environment; if we use 'perc', we'll get '#perço'
-- we don't tag these forms GL_TYPE or PT_TYPE because both occur with both endings -ais/-ades
pres1_and_sub = {"perd", "perqu"},
irreg = true,
}
},
{
-- poder
match = "poder",
forms = {
pres1_and_sub = {GL_TYPE .. "pod", PT_TYPE .. "poss"},
pret_conj = "irreg", pret = "pudé", pt_pret_1s = "pude", pt_pret_3s = "pôde",
irreg = true,
}
},
{
-- prazer, aprazer, comprazer, desprazer
-- FIXME: comprazer also has regular preterite
match = "prazer",
forms = {
pres_3s = "praz",
pret_conj = "irreg", pret = "prouvé", pt_pret_1s = "prouve", pt_pret_3s = "prouve",
only3sp = function(base, prefix) return prefix == "a" end,
imp_2s = {GL_TYPE .. "praze", PT_TYPE .. "praz"},
irreg = true,
}
},
-- prover below, just below ver
{
-- requerer; must precede querer
match = "requerer",
forms = {
pres_3s = "requer",
pres1_and_sub = "requeir",
imp_2s = {"requer"},
-- regular preterite, unlike [[querer]]
irreg = true,
}
},
{
-- querer, desquerer, malquerer
match = "querer",
forms = {
pres_1s = "quero", pres_3s = "quer",
pres1_and_sub = "queir", -- only for subjunctive as we override pres_1s
pret_conj = "irreg", pret = {GL_TYPE .. "quigé", PT_TYPE .. "quisé"},
pt_pret_1s = "quis", pt_pret_3s = "quis",
irreg = true,
}
},
{
match = "reaver",
forms = {
pres_1s = "reei",
pres_2s = "reás",
pres_3s = "reá",
pres_3p = {GL_TYPE .. "ream", PT_TYPE .. "reão"},
pres1_and_sub = "reaj", -- only for subjunctive as we override pres_1s
pret_conj = "irreg", pret = "reouvé", pt_pret_1s = "reouve", pt_pret_3s = "reouve",
irreg = true,
}
},
{
-- saber, ressaber
match = "saber",
forms = {
pres_1s = "sei",
pres1_and_sub = "saib", -- only for subjunctive as we override pres_1s
pret_conj = "irreg", pret = "soubé", pt_pret_1s = "soube", pt_pret_3s = "soube",
irreg = true,
}
},
{
-- escrever/reescrever, circunscrever, descrever/redescrever, inscrever, prescrever, proscrever, subscrever,
-- transcrever, others?
match = "screver",
forms = {
pp = "scrito",
irreg = true,
}
},
{
-- suspender
match = "suspender",
forms = {short_pp = "suspenso"}
},
{
match = "^ser",
forms = {
pres_1s = "sou", pres_2s = "és", pres_3s = "é",
pres_1p = "somos", pres_2p = {GL_TYPE .. "sodes", PT_TYPE .. "sois"},
pres_3p = {GL_TYPE .. "som", PT_TYPE .. "são"},
pres1_and_sub = "sej", -- only for subjunctive as we override pres_1s
full_impf = "ér",
pret_conj = "irreg", pret = "fô", pret_1s = {GL_TYPE .. "fum", PT_TYPE .. "fui"}, pret_3s = "foi",
imp_2s = "sê", imp_2p = "sede",
pp_inv = true,
irreg = true,
}
},
{
-- We want to match abster, conter, deter, etc. but not abater, cometer, etc. No way to avoid listing each verb.
match = match_against_verbs("ter", {"abs", "^a", "con", "de", "entre", "man", "ob", "^re", "sus", "^"}),
forms = {
-- FIXME, Estraviz says 'contens', 'detens' etc. but that may be a typo
pres_2s = function(base, prefix) return {GL_TYPE .. "tés", PT_TYPE .. (prefix == "" and "tens" or "téns")} end,
-- FIXME, Estraviz says 'contem', 'detem' etc. but that may be a typo
pres_3s = function(base, prefix) return prefix == "" and "tem" or "tém" end,
pres_2p = "tendes", pres_3p = {GL_TYPE .. "tenhem", PT_TYPE .. "têm", GL_ALTVAR .. "tém"},
pres1_and_sub = "tenh",
full_impf = "tính",
pret_conj = "irreg", pret = "tivé", pt_pret_1s = "tive", pt_pret_3s = "teve",
irreg = true,
}
},
{
match = "trazer",
forms = {
-- use 'tragu' because we're in a front environment; if we use 'trag', we'll get '#trajo'
pres1_and_sub = "tragu", pres_3s = "traz",
pret_conj = "irreg", pret = "trouxé", pt_pret_1s = "trouxe", pt_pret_3s = "trouxe",
fut = "trar",
irreg = true,
}
},
{
match = "traguer",
forms = {
pret_conj = "irreg", pret = "trouxé", pt_pret_1s = "trouxe", pt_pret_3s = "trouxe",
irreg = true,
}
},
{
-- valer, desvaler, equivaler
match = "valer",
forms = {
pres1_and_sub = "valh",
irreg = true,
}
},
{
-- We want to match antever etc. but not absolver, atrever etc. No way to avoid listing each verb.
match = match_against_verbs("ver", {"ante", "entre", "pre", "^re", "^"}),
forms = {
pres_2s = "vês", pres_3s = "vê",
pres_2p = "vedes",
pres_3p = function(base, prefix) return {GL_TYPE .. (prefix == "" and "vem" or "vêm"), PT_TYPE .. "veem"} end,
pres1_and_sub = "vej",
pret_conj = "irreg", pret = "ví", pret_1s = {GL_TYPE .. "vim", PT_TYPE .. "vi"}, pret_3s = "viu",
pp = "visto",
irreg = true,
}
},
{
-- [[prover]] and [[desprover]] have regular preterite and past participle
match = "prover",
forms = {
pres_2s = "provês", pres_3s = "provê",
-- FIXME: Estraviz says 'provem' but that may be a typo
pres_2p = "provedes", pres_3p = {GL_TYPE .. "provêm", PT_TYPE .. "proveem"},
pres1_and_sub = "provej",
irreg = true,
}
},
{
-- volver, devolver, envolver, revolver, etc.
match = "volver",
forms = {short_pp = "volto"},
},
--------------------------------------------------------------------------------------------
-- -ir --
--------------------------------------------------------------------------------------------
-- Verbs not needing entries here:
--
-- abolir: use <u-o>
-- barrir: use <only3sp>
-- carpir, colorir, demolir: use <no_pres1_and_sub>
-- descolorir: use <no_pres1_and_sub>
-- delir, espavorir, falir, florir, remir, renhir: use <no_pres_stressed>
-- empedernir: use <i-e>
-- transir: regular
-- aspergir, despir, flectir/deflectir/genuflectir/genufletir/reflectir/refletir, mentir/desmentir,
-- sentir/assentir/consentir/dissentir/pressentir/ressentir, convergir/divergir, aderir/adherir,
-- ferir/auferir/conferir/deferir/desferir/diferir/differir/inferir/interferir/preferir/proferir/referir/transferir,
-- gerir/digerir/ingerir/sugerir, preterir, competir/repetir, servir, advertir/animadvertir/divertir,
-- vestir/investir/revestir/travestir, seguir/conseguir/desconseguir/desseguir/perseguir/prosseguir: use <i-e>
-- inerir: use <i-e>
-- compelir/expelir/impelir/repelir: use <i-e>
-- dormir, engolir, tossir, subir, acudir/sacudir, fugir, sumir/consumir (NOT assumir/presumir/resumir): use <u-o>
-- polir/repolir: use <u>
-- premir: use <i>
-- extorquir/retorquir: <u-o,u>
-- agredir/progredir/regredir/transgredir: use <i>
-- denegrir, prevenir: use <i>
-- eclodir: use <u-o>
-- cerzir: use <i-e>
-- proibir/coibir: use <í>
-- reunir: use <ú>
-- parir/malparir: use <no_pres_stressed>
-- explodir/implodir: use <u-o>
--
-- -cir alternations (aducir, ressarcir): automatically handled in combine_stem_ending()
-- -gir alternations (agir, dirigir, exigir): automatically handled in combine_stem_ending()
-- -guir alternations (e.g. conseguir): automatically handled in combine_stem_ending()
-- -quir alternations (e.g. extorquir): automatically handled in combine_stem_ending()
{
-- verbs in -air (cair, sair, trair and derivatives: decair/descair/recair, sobres(s)air,
-- abstrair/atrair/contrair/distrair/extrair/protrair/retrair/subtrair)
match = "air",
forms = {
pres1_and_sub = "ai", pres_2s = "ais", pres_3s = "ai",
-- all occurrences of accented í in endings handled in combine_stem_ending()
irreg = true,
}
},
{
-- abrir/desabrir/reabrir
match = "abrir",
forms = {pp = "aberto"}
},
{
-- cobrir/descobrir/encobrir/recobrir/redescobrir
match = "cobrir",
forms = {vowel_alt = "u-o", pp = "coberto"}
},
{
-- conduzir, produzir, reduzir, traduzir, etc.; luzir, reluzir, tremeluzir
match = "uzir",
forms = {
pres_3s = "uz",
-- FIXME, is this correct?
imp_2s = "uze",
irreg = true,
}
},
{
-- pedir, desimpedir, despedir, espedir, expedir, impedir
-- medir
-- comedir
match = match_against_verbs("edir", {"m", "p"}),
forms = {
pres1_and_sub = {GL_TYPE .. "id", PT_TYPE .. "eç"},
irreg = true,
}
},
{
-- frigir
match = "frigir",
forms = {vowel_alt = "i-e", short_pp = "frito"},
},
{
-- inserir
match = "inserir",
forms = {vowel_alt = "i-e"},
},
{
-- ir
match = "^ir",
forms = {
pres_1s = "vou", pres_2s = {GL_TYPE .. "vás", PT_TYPE .. "vais"}, pres_3s = "vai",
pres_1p = {GL_TYPE .. "imos", PT_TYPE .. "vamos"}, pres_2p = "ides",
pres_3p = {GL_TYPE .. "vam", PT_TYPE .. "vão"},
pres_sub_1s = {GL_TYPE .. "vaia", PT_TYPE .. "vá"},
pres_sub_2s = {GL_TYPE .. "vaias", PT_TYPE .. "vás"},
pres_sub_3s = {GL_TYPE .. "vaia", PT_TYPE .. "vá"},
pres_sub_1p = {GL_TYPE .. "vaiamos", PT_TYPE .. "vamos"},
pres_sub_2p = {GL_TYPE .. "vaiades", PT_TYPE .. "vades"},
pres_sub_3p = {GL_TYPE .. "vaiam", PT_TYPE .. "vão"},
pret_conj = "irreg", pret = "fô", pret_1s = {GL_TYPE .. "fum", PT_TYPE .. "fui"}, pret_3s = "foi",
irreg = true,
}
},
{
-- emergir, imergir, submergir
match = "mergir",
forms = {vowel_alt = "i-e", short_pp = "merso"},
},
{
match = "ouvir",
forms = {
pres1_and_sub = {"ouç", ALTVAR .. "oiç"},
irreg = true,
}
},
{
-- exprimir, imprimir, comprimir (but not descomprimir per Priberam), deprimir, oprimir/opprimir (but not reprimir,
-- suprimir/supprimir per Priberam)
match = match_against_verbs("primir", {"^com", "ex", "im", "de", "^o", "op"}),
forms = {short_pp = "presso"}
},
{
-- rir, sorrir
match = match_against_verbs("rir", {"^", "sor"}),
forms = {
pres_2s = "ris", pres_3s = "ri", pres_2p = "rides", pres_3p = {GL_TYPE .. "rim", PT_TYPE .. "riem"},
pres1_and_sub = "ri",
irreg = true,
}
},
{
-- distinguir, extinguir
match = "tinguir",
forms = {
short_pp = "tinto",
-- gu/g alternations handled in combine_stem_ending()
}
},
{
-- verbs in -truir (construir, destruir, reconstruir) but not obstruir/desobstruir, instruir, which are handled
-- by the default -uir handler below
match = match_against_verbs("struir", {"con", "de"}),
forms = {
pres_2s = {"stróis", ALTVAR .. "struis"}, pres_3s = {"strói", ALTVAR .. "strui"},
pres_3p = {"stroem", ALTVAR .. "struem"},
-- all occurrences of accented í in endings handled in combine_stem_ending()
irreg = true,
}
},
{
-- remaining verbs in -uir (concluir/excluir/incluir/concruir/concruyr, abluir/diluir, afluir/fluir/influir,
-- aluir, anuir, atribuir/contribuir/distribuir/redistribuir/retribuir/substituir, coevoluir/evoluir,
-- constituir/destituir/instituir/reconstituir/restituir, derruir, diminuir, estatuir, fruir/usufruir, imbuir,
-- imiscuir, poluir, possuir, puir, pruir, ruir
-- FIXME: old module lists short pp incluso for incluir that can't be verified, ask about this
-- FIXME: handle -uyr verbs?
match = function(verb)
-- Don't match -guir verbs (e.g. [[seguir]], [[conseguir]]) or -quir verbs (e.g. [[extorquir]])
if verb:find("guir$") or verb:find("quir$") then
return nil
else
return match_against_verbs("uir", {""})(verb)
end
end,
forms = {
pres_2s = "uis", pres_3s = "ui",
-- all occurrences of accented í in endings handled in combine_stem_ending()
irreg = true,
}
},
{
-- We want to match advir, convir, devir, etc. but not ouvir, servir, etc. No way to avoid listing each verb.
match = match_against_verbs("vir", {"ad", "^a", "con", "contra", "de", "^desa", "inter", "pro", "^re", "sobre", "^"}),
forms = {
-- FIXME, Estraviz says 'convens', 'devens' etc. but that may be a typo
pres_2s = function(base, prefix) return {GL_TYPE .. "vés", PT_TYPE .. (prefix == "" and "vens" or "véns")} end,
-- FIXME, Estraviz says 'convem', 'devem' etc. but that may be a typo
pres_3s = function(base, prefix) return prefix == "" and "vem" or "vém" end,
pres_2p = "vindes", pres_3p = {GL_TYPE .. "venhem", PT_TYPE .. "vêm", GL_ALTVAR .. "vém"},
pres1_and_sub = "venh",
full_impf = "vính",
pret_conj = "irreg", pret = {GL_TYPE .. "vinhé", PT_TYPE .. "vié"},
pret_1s = "vim", pret_3s = {GL_TYPE .. "véu", PT_TYPE .. "veio"},
pp = "vindo",
irreg = true,
}
},
--------------------------------------------------------------------------------------------
-- misc --
--------------------------------------------------------------------------------------------
{
-- pôr, antepor, apor, compor/decompor/descompor, contrapor, depor, dispor, expor, impor, interpor, justapor,
-- opor, pospor, propor, repor, sobrepor, supor/pressupor, transpor, decompor, others?
match = "p[oô]r",
forms = {
pres1_and_sub = "ponh",
pres_2s = {GL_TYPE .. "pós", PT_TYPE .. "pões", GL_ALTVAR .. "pons"},
pres_3s = {GL_TYPE .. "pom", PT_TYPE .. "põe"},
pres_1p = "pomos", pres_2p = "pondes",
pres_3p = {GL_TYPE .. "ponhem", PT_TYPE .. "põem", GL_ALTVAR .. "póm"},
full_impf = "púnh",
pret_conj = "irreg", pret = {GL_TYPE .. "pugé", PT_TYPE .. "pusé"}, pt_pret_1s = "pus", pt_pret_3s = "pôs",
pers_inf = "po",
gerund = "pondo", pp = "posto",
irreg = true,
}
},
}
local function skip_slot(base, slot, allow_overrides)
if not allow_overrides and (base.basic_overrides[slot] or
base.refl and base.basic_reflexive_only_overrides[slot]) then
-- Skip any slots for which there are overrides.
return true
end
if base.only3s and (slot:find("^pp_f") or slot:find("^pp_mp")) then
-- diluviar, atardecer, neviscar; impersonal verbs have only masc sing pp
return true
end
if not slot:find("[123]") then
-- Don't skip non-personal slots.
return false
end
if base.nofinite then
return true
end
if (base.only3s or base.only3sp or base.only3p) and (slot:find("^imp_") or slot:find("^neg_imp_")) then
return true
end
if base.only3s and not slot:find("3s") then
-- diluviar, atardecer, neviscar
return true
end
if base.only3sp and not slot:find("3[sp]") then
-- atañer, concernir
return true
end
if base.only3p and not slot:find("3p") then
-- [[caer cuatro gotas]], [[caer chuzos de punta]], [[entrarle los siete males]]
return true
end
return false
end
-- Apply vowel alternations to stem.
local function apply_vowel_alternations(stem, alternations)
local alternation_stems = {}
local saw_pres1_and_sub = false
local saw_pres_stressed = false
-- Process alternations other than +.
for _, altobj in ipairs(alternations) do
local alt = altobj.form
local pres1_and_sub, pres_stressed, err
-- Treat final -gu, -qu as a consonant, so the previous vowel can alternate (e.g. conseguir -> consigo).
-- This means a verb in -guar can't have a u-ú alternation but I don't think there are any verbs like that.
stem = rsub(stem, "([gq])u$", "%1" .. TEMPC1)
if alt == "+" then
-- do nothing yet
elseif alt == "ei" then
local before_last_vowel = rmatch(stem, "^(.*)i$")
if not before_last_vowel then
err = "stem should end in -i"
else
pres1_and_sub = nil
pres_stressed = before_last_vowel .. "ei"
end
else
local before_last_vowel, last_vowel, after_last_vowel = rmatch(stem, "^(.*)(" .. V .. ")(.-[ui])$")
if not before_last_vowel then
before_last_vowel, last_vowel, after_last_vowel = rmatch(stem, "^(.*)(" .. V .. ")(.-)$")
end
if alt == "i-e" then
if last_vowel == "e" or last_vowel == "i" then
pres1_and_sub = before_last_vowel .. "i" .. after_last_vowel
if last_vowel == "i" then
pres_stressed = before_last_vowel .. "e" .. after_last_vowel
end
else
err = "should have -e- or -i- as the last vowel"
end
elseif alt == "i" then
if last_vowel == "e" then
pres1_and_sub = before_last_vowel .. "i" .. after_last_vowel
pres_stressed = pres1_and_sub
else
err = "should have -e- as the last vowel"
end
elseif alt == "u-o" then
if last_vowel == "o" or last_vowel == "u" then
pres1_and_sub = before_last_vowel .. "u" .. after_last_vowel
if last_vowel == "u" then
pres_stressed = before_last_vowel .. "o" .. after_last_vowel
end
else
err = "should have -o- or -u- as the last vowel"
end
elseif alt == "u" then
if last_vowel == "o" then
pres1_and_sub = before_last_vowel .. "u" .. after_last_vowel
pres_stressed = pres1_and_sub
else
err = "should have -o- as the last vowel"
end
elseif alt == "í" then
if last_vowel == "i" then
pres_stressed = before_last_vowel .. "í" .. after_last_vowel
else
err = "should have -i- as the last vowel"
end
elseif alt == "ú" then
if last_vowel == "u" then
pres_stressed = before_last_vowel .. "ú" .. after_last_vowel
else
err = "should have -u- as the last vowel"
end
else
error("Internal error: Unrecognized vowel alternation '" .. alt .. "'")
end
end
if pres1_and_sub then
pres1_and_sub = {form = pres1_and_sub:gsub(TEMPC1, "u"), footnotes = altobj.footnotes}
saw_pres1_and_sub = true
end
if pres_stressed then
pres_stressed = {form = pres_stressed:gsub(TEMPC1, "u"), footnotes = altobj.footnotes}
saw_pres_stressed = true
end
table.insert(alternation_stems, {
altobj = altobj,
pres1_and_sub = pres1_and_sub,
pres_stressed = pres_stressed,
err = err
})
end
-- Now do +. We check to see which stems are used by other alternations and specify those so any footnotes are
-- properly attached.
for _, alternation_stem in ipairs(alternation_stems) do
if alternation_stem.altobj.form == "+" then
local stemobj = {form = stem, footnotes = alternation_stem.altobj.footnotes}
alternation_stem.pres1_and_sub = saw_pres1_and_sub and stemobj or nil
alternation_stem.pres_stressed = saw_pres_stressed and stemobj or nil
end
end
return alternation_stems
end
-- Add the `stem` to the `ending` for the given `slot` and apply any phonetic modifications.
-- WARNING: This function is written very carefully; changes to it can easily have unintended consequences.
local function combine_stem_ending(base, slot, prefix, stem, ending, dont_include_prefix)
-- If the stem begins with an acute accent, this is a signal to move the accent onto the last vowel of the prefix.
-- Cf. míngua of minguar.
if stem:find("^" .. AC) then
stem = rsub(stem, "^" .. AC, "")
if dont_include_prefix then
error("Internal error: Can't handle acute accent at beginning of stem if dont_include_prefix is given")
end
prefix = rsub(prefix, "([aeiouyAEIOUY])([^aeiouyAEIOUY]*)$", "%1" .. AC .. "%2")
end
-- Use the full stem for checking for -gui ending and such, because 'stem' is just 'u' for [[arguir]],
-- [[delinquir]].
local full_stem = prefix .. stem
-- Include the prefix in the stem unless dont_include_prefix is given (used for the past participle stem).
if not dont_include_prefix then
stem = full_stem
end
-- If the ending begins with a double asterisk, this is a signal to conditionally delete the accent on the last letter
-- of the stem. "Conditionally" means we don't do it if the last two letters would form a diphthong without the accent
-- on the second one (e.g. in [[sair]], with stem 'saí'); but as an exception, we do delete the accent in stems
-- ending in -guí, -quí (e.g. in [[conseguir]]) because in this case the ui isn't a diphthong.
if ending:find("^%*%*") then
ending = rsub(ending, "^%*%*", "")
if rfind(full_stem, "[gq]uí$") or not rfind(full_stem, V .. "[íú]$") then
stem = com.remove_final_accent(stem)
end
end
-- If the ending begins with an asterisk, this is a signal to delete the accent on the last letter of the stem.
-- E.g. fizé -> fizermos. Unlike for **, this removal is unconditional, so we get e.g. 'sairmos' not #'saírmos'.
if ending:find("^%*") then
ending = rsub(ending, "^%*", "")
stem = com.remove_final_accent(stem)
end
-- If ending begins with i, it must get an accent after an unstressed vowel (in some but not all cases) to prevent
-- the two merging into a diphthong:
-- * cair ->
-- * pres: caímos, caís;
-- * impf: all forms (caí-);
-- * pret: caí (but not caim), caíste (but not caiu), caímos, caístes, caíram;
-- * plup: all forms (caír-);
-- * impf_sub: all forms (caíss-);
-- * fut_sub: caíres, caírem (but not cair, cairmos, cairdes)
-- * pp: caído (but not gerund caindo)
-- * atribuir, other verbs in -uir -> same pattern as for cair etc.
-- * roer ->
-- * pret: roí (but not roim)
-- * impf: all forms (roí-)
-- * pp: roído
-- Don't let variant codes derail the following checks. Note that variant codes are properly added to the end of
-- the ending, so checks against the beginning of the ending work even in their presence, but not checks against
-- the full ending.
local cleaned_ending = export.remove_variant_codes(ending)
if cleaned_ending:find("^i") and full_stem:find("[aeiou]$") and not full_stem:find("[gq]u$") and
not cleaned_ending:find("^i[rum]$") and cleaned_ending ~= "indo" and not cleaned_ending:find("^ir[md]") then
ending = ending:gsub("^i", "í")
end
-- Spelling changes in the stem; it depends on whether the stem given is the pre-front-vowel or
-- pre-back-vowel variant, as indicated by `frontback`. We want these front-back spelling changes to happen
-- between stem and ending, not between prefix and stem; the prefix may not have the same "front/backness"
-- as the stem.
local is_front = rfind(ending, "^[eiéíê]")
if base.frontback == "front" and not is_front then
stem = stem:gsub("c$", "ç") -- conhecer -> conheço, vencer -> venço, descer -> desço
stem = stem:gsub("g$", "j") -- proteger -> protejo, fugir -> fujo
stem = stem:gsub("gu$", "g") -- distinguir -> distingo, conseguir -> consigo
stem = stem:gsub("qu$", "c") -- extorquir -> exturco
stem = stem:gsub("([gq])ü$", "%1u") -- argüir (superseded) -> arguo, delinqüir (superseded) -> delinquo
elseif base.frontback == "back" and is_front then
-- The following changes are all superseded so we don't do them:
-- averiguar -> averigüei, minguar -> mingüei; antiquar -> antiqüei, apropinquar -> apropinqüei
-- stem = stem:gsub("([gq])u$", "%1ü")
stem = stem:gsub("g$", "gu") -- cargar -> carguei, apagar -> apaguei
stem = stem:gsub("c$", "qu") -- marcar -> marquei
stem = stem:gsub("ç$", "c") -- começar -> comecei
-- j does not go to g here; desejar -> deseje not #desege
end
local retval = stem .. ending
if retval:find(GL_TYPE) and retval:find(PT_TYPE) or retval:find(GL_ONLY_TYPE) and not retval:find(GL_TYPE) then
-- Reject clashes in "Galician"-type and "Portuguese"-type forms, e.g. '#vós dixéreis' or '#vós dissérades'.
return nil
end
return retval
end
local function add3(base, slot, stems, endings, footnotes, allow_overrides)
if skip_slot(base, slot, allow_overrides) then
return
end
local function do_combine_stem_ending(stem, ending)
return combine_stem_ending(base, slot, base.prefix, stem, ending)
end
iut.add_forms(base.forms, slot, stems, endings, do_combine_stem_ending, nil, nil, footnotes)
end
local function insert_form(base, slot, form)
if not skip_slot(base, slot) then
iut.insert_form(base.forms, slot, form)
end
end
local function insert_forms(base, slot, forms)
if not skip_slot(base, slot) then
iut.insert_forms(base.forms, slot, forms)
end
end
local function add_single_stem_tense(base, slot_pref, stems, s1, s2, s3, p1, p2, p3)
local function addit(slot, ending)
add3(base, slot_pref .. "_" .. slot, stems, ending)
end
addit("1s", s1)
addit("2s", s2)
addit("3s", s3)
addit("1p", p1)
addit("2p", p2)
addit("3p", p3)
end
local function construct_stems(base, vowel_alt)
local stems = {}
stems.pres_unstressed = base.stems.pres_unstressed or base.inf_stem
stems.pres_stressed =
-- If no_pres_stressed given, pres_stressed stem should be empty so no forms are generated.
base.no_pres_stressed and {} or
base.stems.pres_stressed or
vowel_alt.pres_stressed or
base.inf_stem
stems.pres1_and_sub =
-- If no_pres_stressed given, the entire subjunctive is missing.
base.no_pres_stressed and {} or
-- If no_pres1_and_sub given, pres1 and entire subjunctive are missing.
base.no_pres1_and_sub and {} or
base.stems.pres1_and_sub or
vowel_alt.pres1_and_sub or
nil
stems.pres1 = base.stems.pres1 or stems.pres1_and_sub or stems.pres_stressed
stems.impf = base.stems.impf or base.inf_stem
stems.full_impf = base.stems.full_impf
stems.pret_base = base.stems.pret_base or base.inf_stem
stems.pret_conj = base.stems.pret_conj or base.conj
stems.pret = base.stems.pret or iut.map_forms(iut.convert_to_general_list_form(stems.pret_base),
function(form) return form .. base.conj_vowel end)
stems.gl_short_pret = base.stems.gl_short_pret or iut.map_forms(iut.convert_to_general_list_form(stems.pret),
function(form) return rsub(form, com.V .. "$", "") end)
stems.pt_pret_1s = base.stems.pt_pret_1s
stems.pt_pret_3s = base.stems.pt_pret_3s
stems.fut = base.stems.fut or base.inf_stem .. base.conj
stems.cond = base.stems.cond or stems.fut
stems.pres_sub_stressed = base.stems.pres_sub_stressed or stems.pres1
stems.pres_sub_unstressed = base.stems.pres_sub_unstressed or stems.pres1_and_sub or stems.pres_unstressed
stems.sub_conj = base.stems.sub_conj or base.conj
stems.plup = base.stems.plup or stems.pret
stems.impf_sub = base.stems.impf_sub or stems.pret
stems.fut_sub = base.stems.fut_sub or stems.pret
stems.pers_inf = base.stems.pers_inf or base.inf_stem .. base.conj_vowel
stems.pp = base.stems.pp or base.conj == "ar" and
combine_stem_ending(base, "pp_ms", base.prefix, base.inf_stem, "ado", "dont include prefix") or
-- use combine_stem_ending esp. so we get roído, caído, etc.
combine_stem_ending(base, "pp_ms", base.prefix, base.inf_stem, "ido", "dont include prefix")
stems.pp_ms = stems.pp
local function masc_to_fem(form)
if rfind(form, "o$") then
return rsub(form, "o$", "a")
else
return form
end
end
stems.pp_fs = iut.map_forms(iut.convert_to_general_list_form(stems.pp_ms), masc_to_fem)
if base.stems.short_pp then
stems.short_pp_ms = base.stems.short_pp
stems.short_pp_fs = iut.map_forms(iut.convert_to_general_list_form(stems.short_pp_ms), masc_to_fem)
end
base.this_stems = stems
end
local function add_present_indic(base)
local stems = base.this_stems
local function addit(slot, stems, ending)
add3(base, "pres_" .. slot, stems, ending)
end
local s2, s3, p1, p2, p3
if base.conj == "ar" then
s2, s3, p1, p2, p3 = "as", "a", "amos", {"ades" .. GL_TYPE, "ais" .. PT_TYPE}, "am"
elseif base.conj == "er" or base.conj == "or" then -- verbs in -por have the present overridden
s2, s3, p1, p2, p3 = "es", "e", "emos", {"edes" .. GL_TYPE, "eis" .. PT_TYPE}, "em"
elseif base.conj == "ir" then
s2, s3, p1, p2, p3 = "es", "e", "imos", {"ides" .. GL_TYPE, "is" .. PT_TYPE}, "em"
else
error("Internal error: Unrecognized conjugation " .. base.conj)
end
addit("1s", stems.pres1, "o")
addit("2s", stems.pres_stressed, s2)
addit("3s", stems.pres_stressed, s3)
addit("1p", stems.pres_unstressed, p1)
addit("2p", stems.pres_unstressed, p2)
addit("3p", stems.pres_stressed, p3)
end
local function add_present_subj(base)
local stems = base.this_stems
local function addit(slot, stems, ending)
add3(base, "pres_sub_" .. slot, stems, ending)
end
local s1, s2, s3, p1, p2, p3
if stems.sub_conj == "ar" then
s1, s2, s3, p1, p2, p3 = "e", "es", "e", "emos", {"edes" .. GL_TYPE, "eis" .. PT_TYPE}, "em"
else
s1, s2, s3, p1, p2, p3 = "a", "as", "a", "amos", {"ades" .. GL_TYPE, "ais" .. PT_TYPE}, "am"
end
addit("1s", stems.pres_sub_stressed, s1)
addit("2s", stems.pres_sub_stressed, s2)
addit("3s", stems.pres_sub_stressed, s3)
addit("1p", stems.pres_sub_unstressed, p1)
addit("2p", stems.pres_sub_unstressed, p2)
addit("3p", stems.pres_sub_stressed, p3)
end
local function add_finite_non_present(base)
local stems = base.this_stems
local function add_tense(slot, stem, s1, s2, s3, p1, p2, p3)
add_single_stem_tense(base, slot, stem, s1, s2, s3, p1, p2, p3)
end
-- * at the beginning of the ending means to remove an accent from the last vowel of the imperfect stem.
if stems.full_impf then
add_tense("impf", stems.full_impf, "*a", "*as", "*a", "amos",
{"ades" .. GL_TYPE, "eis" .. PT_TYPE, "ais" .. GL_ALTVAR}, "*am")
elseif base.conj == "ar" then
add_tense("impf", stems.impf, "ava", "avas", "ava", "ávamos",
{"ávades" .. GL_TYPE, "áveis" .. PT_TYPE, "ávais" .. GL_ALTVAR}, "avam")
else
add_tense("impf", stems.impf, "ia", "ias", "ia", "íamos",
{"íades" .. GL_TYPE, "íeis" .. PT_TYPE, "íais" .. GL_ALTVAR}, "iam")
end
-- * at the beginning of the ending means to remove a final accent from the preterite stem.
if stems.pret_conj == "irreg" then
add_tense("pret", stems.gl_short_pret, "em" .. GL_TYPE, nil, "o" .. GL_TYPE)
add_tense("pret", stems.pret, nil, {"*ste", "*che" .. GL_ALTVAR}, nil, "*mos", "*stes",
{"rom" .. GL_TYPE, "*ram" .. PT_TYPE})
add_tense("pret", stems.pt_pret_1s, PT_TYPE)
add_tense("pret", stems.pt_pret_3s, nil, nil, PT_TYPE)
elseif stems.pret_conj == "ar" then
add_tense("pret", stems.pret_base, "ei", {"aste", "ache" .. GL_ALTVAR}, "ou", "amos", "astes",
{"árom" .. GL_TYPE, "aram" .. PT_TYPE})
elseif stems.pret_conj == "er" then
add_tense("pret", stems.pret_base, {"im" .. GL_TYPE, "i" .. PT_TYPE}, {"este", "eche" .. GL_ALTVAR}, "eu",
"emos", "estes", {"êrom" .. GL_TYPE, "eram" .. PT_TYPE})
else
add_tense("pret", stems.pret_base, {"im" .. GL_TYPE, "i" .. PT_TYPE}, {"iste", "iche" .. GL_ALTVAR}, "iu",
"imos", "istes", {"írom" .. GL_TYPE, "iram" .. PT_TYPE})
end
-- * at the beginning of the ending means to remove a final accent from the stem.
-- ** is similar but is "conditional" on a consonant preceding the final vowel.
add_tense("plup", stems.plup, "**ra", "**ras", "**ra", "ramos",
{"rades" .. GL_TYPE, "reis" .. PT_TYPE, "rais" .. GL_ALTVAR}, "**ram")
add_tense("impf_sub", stems.impf_sub, "**sse", "**sses", "**sse", "ssemos",
{"ssedes" .. GL_TYPE, "sseis" .. PT_TYPE}, "**ssem")
add_tense("fut_sub", stems.fut_sub, "*r", "**res", "*r", "*rmos", "*rdes", "**rem")
if base.refl then
local mark = TEMP_MESOCLITIC_INSERTION_POINT
add_tense("fut", stems.fut,
{"ei" .. GL_TYPE, mark .. "ei" .. PT_TYPE}, {"ás" .. GL_TYPE, mark .. "ás" .. PT_TYPE},
{"á" .. GL_TYPE, mark .. "á" .. PT_TYPE}, {"emos" .. GL_TYPE, mark .. "emos" .. PT_TYPE},
{"edes" .. GL_TYPE, mark .. "eis" .. PT_TYPE}, {"ám" .. GL_TYPE, mark .. "ão" .. PT_TYPE}
)
add_tense("cond", stems.cond,
{"ia" .. GL_TYPE, mark .. "ia" .. PT_TYPE}, {"ias" .. GL_TYPE, mark .. "ias" .. PT_TYPE},
{"ia" .. GL_TYPE, mark .. "ia" .. PT_TYPE}, {"íamos" .. GL_TYPE, mark .. "íamos" .. PT_TYPE},
-- FIXME, is GL_ALTVAR correct for the mesoclitic variant of -íais?
{"íades" .. GL_TYPE, mark .. "íeis" .. PT_TYPE, "íais" .. GL_ALTVAR, mark .. "íais" .. GL_ALTVAR},
{"iam" .. GL_TYPE, mark .. "iam" .. PT_TYPE})
else
-- Don't insert forms with the mesoclitic insertion point to avoid duplication in non-reflexive verbs.
add_tense("fut", stems.fut, "ei", "ás", "á", "emos", {"edes" .. GL_TYPE, "eis" .. PT_TYPE},
{"ám" .. GL_TYPE, "ão" .. PT_TYPE})
add_tense("cond", stems.cond, "ia", "ias", "ia", "íamos",
-- FIXME, is GL_ALTVAR correct for the mesoclitic variant of -íais?
{"íades" .. GL_TYPE, "íeis" .. PT_TYPE, "íais" .. GL_ALTVAR}, "iam")
end
-- Different stems for different parts of the personal infinitive to correctly handle forms of [[sair]] and [[pôr]].
add_tense("pers_inf", base.non_prefixed_verb, "", nil, "")
add_tense("pers_inf", stems.pers_inf, nil, "**res", nil, "*rmos", "*rdes", "**rem")
end
local function add_non_finite_forms(base)
local stems = base.this_stems
local function addit(slot, stems, ending, footnotes)
add3(base, slot, stems, ending, footnotes)
end
insert_form(base, "infinitive", {form = base.verb})
-- Also insert "infinitive + reflexive pronoun" combinations if we're handling a reflexive verb. See comment below for
-- "gerund + reflexive pronoun" combinations.
if base.refl then
for _, persnum in ipairs(person_number_list) do
insert_form(base, "infinitive_" .. persnum, {form = base.verb})
end
end
-- verbs in -por have the gerund overridden
local ger_ending = base.conj == "ar" and "ando" or base.conj == "er" and "endo" or "indo"
addit("gerund", stems.pres_unstressed, ger_ending)
-- Also insert "gerund + reflexive pronoun" combinations if we're handling a reflexive verb. We insert exactly the same
-- form as for the bare gerund; later on in add_reflexive_or_fixed_clitic_to_forms(), we add the appropriate clitic
-- pronouns. It's important not to do this for non-reflexive verbs, because in that case, the clitic pronouns won't be
-- added, and {{gl-reinteg-verb form of}} will wrongly consider all these combinations as possible inflections of the bare
-- gerund. Thanks to [[User:JeffDoozan]] for this bug fix.
if base.refl then
for _, persnum in ipairs(person_number_list) do
addit("gerund_" .. persnum, stems.pres_unstressed, ger_ending)
end
end
-- Skip the long/short past participle footnotes if called from {{gl-reinteg-verb}} so they don't show in the headword.
local long_pp_footnotes =
stems.short_pp_ms and base.alternant_multiword_spec.source_template ~= "gl-reinteg-verb" and {long_pp_footnote} or nil
addit("pp_ms", stems.pp_ms, "", long_pp_footnotes)
if not base.pp_inv then
addit("pp_fs", stems.pp_fs, "", long_pp_footnotes)
addit("pp_mp", stems.pp_ms, "s", long_pp_footnotes)
addit("pp_fp", stems.pp_fs, "s", long_pp_footnotes)
end
if stems.short_pp_ms then
local short_pp_footnotes =
stems.short_pp_ms and base.alternant_multiword_spec.source_template ~= "gl-reinteg-verb" and {short_pp_footnote} or nil
addit("short_pp_ms", stems.short_pp_ms, "", short_pp_footnotes)
if not base.pp_inv then
addit("short_pp_fs", stems.short_pp_fs, "", short_pp_footnotes)
addit("short_pp_mp", stems.short_pp_ms, "s", short_pp_footnotes)
addit("short_pp_fp", stems.short_pp_fs, "s", short_pp_footnotes)
end
end
end
local function copy_forms_to_imperatives(base)
-- Copy pres3s to imperative since they are almost always the same.
insert_forms(base, "imp_2s", iut.map_forms(base.forms.pres_3s, function(form) return form end))
if not skip_slot(base, "imp_2p") then
-- Copy pres2p to imperative 2p minus -s since they are almost always the same.
-- But not if there's an override, to avoid possibly throwing an error.
insert_forms(base, "imp_2p", iut.map_forms(base.forms.pres_2p, function(form)
local form_no_s, var_codes = rmatch(form, "^(.*)s(" .. var_code_c .. "*)$")
if not form_no_s then
error("Can't derive second-person plural imperative from second-person plural present indicative " ..
"because form '" .. form .. "' doesn't end in -s")
end
return form_no_s .. var_codes
end))
end
-- Copy subjunctives to imperatives, unless there's an override for the given slot (as with the imp_1p of [[ir]]).
for _, persnum in ipairs({"3s", "1p", "3p"}) do
local from = "pres_sub_" .. persnum
local to = "imp_" .. persnum
insert_forms(base, to, iut.map_forms(base.forms[from], function(form) return form end))
end
end
local function process_slot_overrides(base, filter_slot, reflexive_only)
local overrides = reflexive_only and base.basic_reflexive_only_overrides or base.basic_overrides
for slot, forms in pairs(overrides) do
if not filter_slot or filter_slot(slot) then
add3(base, slot, forms, "", nil, "allow overrides")
end
end
end
-- Prefix `form` with `clitic`, adding fixed text `between` between them. Add links as appropriate unless the user
-- requested no links. Check whether form already has brackets (as will be the case if the form has a fixed clitic).
local function prefix_clitic_to_form(base, clitic, between, form)
if base.alternant_multiword_spec.args.noautolinkverb then
return clitic .. between .. form
else
local clitic_pref = "[[" .. clitic .. "]]" .. between
if form:find("%[%[") then
return clitic_pref .. form
else
return clitic_pref .. "[[" .. form .. "]]"
end
end
end
-- Add the appropriate clitic pronouns in `clitics` to the forms in `base_slot`. `store_cliticized_form` is a function
-- of three arguments (clitic, formobj, cliticized_form) and should store the cliticized form for the specified clitic
-- and form object.
local function suffix_clitic_to_forms(base, base_slot, clitics, store_cliticized_form)
if not base.forms[base_slot] then
-- This can happen, e.g. in only3s/only3sp/only3p verbs.
return
end
local autolink = not base.alternant_multiword_spec.args.noautolinkverb
for _, formobj in ipairs(base.forms[base_slot]) do
for _, clitic in ipairs(clitics) do
local cliticized_form
if formobj.form:find(TEMP_MESOCLITIC_INSERTION_POINT) then
-- mesoclisis in future and conditional
local infinitive, suffix = rmatch(formobj.form, "^(.*)" .. TEMP_MESOCLITIC_INSERTION_POINT .. "(.*)$")
if not infinitive then
error("Internal error: Can't find mesoclitic insertion point in slot '" .. base_slot .. "', form '" ..
formobj.form .. "'")
end
local full_form = infinitive .. suffix
if autolink and not infinitive:find("%[%[") then
infinitive = "[[" .. infinitive .. "]]"
end
cliticized_form =
autolink and infinitive .. "-[[" .. clitic .. "]]-[[" .. full_form .. "|" .. suffix .. "]]" or
infinitive .. "-" .. clitic .. "-" .. suffix
else
local clitic_suffix = autolink and "-[[" .. clitic .. "]]" or "-" .. clitic
local form_needs_link = autolink and not formobj.form:find("%[%[")
if base_slot:find("1p$") then
-- Final -s disappears: arrependíamos + nos -> arrependíamo-nos, etc.
cliticized_form = formobj.form:gsub("s$", "")
if form_needs_link then
cliticized_form = "[[" .. formobj.form .. "|" .. cliticized_form .. "]]"
end
else
cliticized_form = formobj.form
if form_needs_link then
cliticized_form = "[[" .. cliticized_form .. "]]"
end
end
cliticized_form = cliticized_form .. clitic_suffix
end
store_cliticized_form(clitic, formobj, cliticized_form)
end
end
end
-- Add a reflexive pronoun or fixed clitic (FIXME: not working), as appropriate to the base forms that were generated.
-- `do_joined` means to do only the forms where the pronoun is joined to the end of the form; otherwise, do only the
-- forms where it is not joined and precedes the form.
local function add_reflexive_or_fixed_clitic_to_forms(base, do_reflexive, do_joined)
for _, slotaccel in ipairs(base.alternant_multiword_spec.verb_slots_basic) do
local slot, accel = unpack(slotaccel)
local clitic
if not do_reflexive then
clitic = base.clitic
elseif slot:find("[123]") then
local persnum = slot:match("^.*_(.-)$")
clitic = person_number_to_reflexive_pronoun[persnum]
else
clitic = "se"
end
if base.forms[slot] then
if do_reflexive and slot:find("^pp_") or slot == "infinitive_linked" then
-- do nothing with reflexive past participles or with infinitive linked (handled at the end)
elseif slot:find("^neg_imp_") then
error("Internal error: Should not have forms set for negative imperative at this stage")
else
local slot_has_suffixed_clitic = not slot:find("_sub")
-- Maybe generate non-reflexive parts and separated syntactic variants for use in
-- {{gl-reinteg-verb form of}}. See comment in add_slots() above `need_special_verb_form_of_slots`.
-- Check for do_joined so we only run this code once.
if do_reflexive and do_joined and base.alternant_multiword_spec.source_template == "gl-reinteg-verb form of" and
-- Skip personal variants of infinitives and gerunds so we don't think [[arrependendo]] is a
-- non-reflexive equivalent of [[arrependendo-me]].
not slot:find("infinitive_") and not slot:find("gerund_") then
-- Clone the forms because we will be destructively modifying them just below, adding the reflexive
-- pronoun.
insert_forms(base, slot .. "_non_reflexive", mw.clone(base.forms[slot]))
if slot_has_suffixed_clitic then
insert_forms(base, slot .. "_variant", iut.map_forms(base.forms[slot], function(form)
return prefix_clitic_to_form(base, clitic, " ... ", form)
end))
end
end
if slot_has_suffixed_clitic then
if do_joined then
suffix_clitic_to_forms(base, slot, {clitic},
function(clitic, formobj, cliticized_form)
formobj.form = cliticized_form
end
)
end
elseif not do_joined then
-- Add clitic as separate word before all other forms.
for _, form in ipairs(base.forms[slot]) do
form.form = prefix_clitic_to_form(base, clitic, " ", form.form)
end
end
end
end
end
end
local function handle_infinitive_linked(base)
-- Compute linked versions of potential lemma slots, for use in {{gl-reinteg-verb}}.
-- We substitute the original lemma (before removing links) for forms that
-- are the same as the lemma, if the original lemma has links.
for _, slot in ipairs({"infinitive"}) do
insert_forms(base, slot .. "_linked", iut.map_forms(base.forms[slot], function(form)
if form == base.lemma and rfind(base.linked_lemma, "%[%[") then
return base.linked_lemma
else
return form
end
end))
end
end
local function generate_negative_imperatives(base)
-- Copy subjunctives to negative imperatives, preceded by "nom".
for _, persnum in ipairs(neg_imp_person_number_list) do
local from = "pres_sub_" .. persnum
local to = "neg_imp_" .. persnum
insert_forms(base, to, iut.map_forms(base.forms[from], function(form)
if base.alternant_multiword_spec.args.noautolinkverb then
return "nom " .. form
elseif form:find("%[%[") then
-- already linked, e.g. when reflexive
return "[[nom]] " .. form
else
return "[[nom]] [[" .. form .. "]]"
end
end))
end
end
-- Process specs given by the user using 'addnote[SLOTSPEC][FOOTNOTE][FOOTNOTE][...]'.
local function process_addnote_specs(base)
for _, spec in ipairs(base.addnote_specs) do
for _, slot_spec in ipairs(spec.slot_specs) do
slot_spec = "^" .. slot_spec .. "$"
for slot, forms in pairs(base.forms) do
if rfind(slot, slot_spec) then
-- To save on memory, side-effect the existing forms.
for _, form in ipairs(forms) do
form.footnotes = iut.combine_footnotes(form.footnotes, spec.footnotes)
end
end
end
end
end
end
local function add_missing_links_to_forms(base)
-- Any forms without links should get them now. Redundant ones will be stripped later.
for slot, forms in pairs(base.forms) do
for _, form in ipairs(forms) do
if not form.form:find("%[%[") then
form.form = "[[" .. form.form .. "]]"
end
end
end
end
-- Remove special characters added to future and conditional forms to indicate mesoclitic insertion points.
local function remove_mesoclitic_insertion_points(base)
for slot, forms in pairs(base.forms) do
if slot:find("^fut_") or slot:find("^cond_") then
for _, form in ipairs(forms) do
form.form = form.form:gsub(TEMP_MESOCLITIC_INSERTION_POINT, "")
end
end
end
end
-- If called from {{gl-reinteg-verb}}, remove less-recommended variants; otherwise add a footnote indicating they are
-- less recommended, and sort them last.
local function process_altvar_forms(base)
for slot, forms in pairs(base.forms) do
-- As an optimization, check if there are any less-recommended forms and don't do anything if not.
local saw_altvar = false
for _, form in ipairs(forms) do
if form.form:find(ALTVAR) then
saw_altvar = true
break
end
end
if saw_altvar then
if base.alternant_multiword_spec.source_template == "gl-reinteg-verb" then
base.forms[slot] = iut.flatmap_forms(base.forms[slot], function(form)
if form:find(ALTVAR) then
return {}
else
return {form}
end
end)
else
local existing_forms = base.forms[slot]
base.forms[slot] = {}
for _, formobj in ipairs(existing_forms) do
if not formobj.form:find(ALTVAR) then
iut.insert_form(base.forms, slot, formobj)
end
end
for _, formobj in ipairs(existing_forms) do
if formobj.form:find(ALTVAR) then
formobj.footnotes = iut.combine_footnotes(formobj.footnotes, {"[less recommended]"})
iut.insert_form(base.forms, slot, formobj)
end
end
end
end
end
end
local function conjugate_verb(base)
for _, vowel_alt in ipairs(base.vowel_alt_stems) do
construct_stems(base, vowel_alt)
add_present_indic(base)
add_present_subj(base)
end
add_finite_non_present(base)
add_non_finite_forms(base)
-- do non-reflexive non-imperative slot overrides
process_slot_overrides(base, function(slot)
return not slot:find("^imp_") and not slot:find("^neg_imp_")
end)
-- This should happen after process_slot_overrides() in case a derived slot is based on an override
-- (as with the imp_3s of [[dar]], [[estar]]).
copy_forms_to_imperatives(base)
-- do non-reflexive positive imperative slot overrides
process_slot_overrides(base, function(slot)
return slot:find("^imp_")
end)
-- We need to add joined reflexives, then joined and non-joined clitics, then non-joined reflexives, so we get
-- [[arrepende-te]] but [[nom]] [[te]] [[arrependas]].
if base.refl then
add_reflexive_or_fixed_clitic_to_forms(base, "do reflexive", "do joined")
process_slot_overrides(base, nil, "do reflexive") -- do reflexive-only slot overrides
add_reflexive_or_fixed_clitic_to_forms(base, "do reflexive", false)
end
-- This should happen after add_reflexive_or_fixed_clitic_to_forms() so negative imperatives get the reflexive pronoun
-- and clitic in them.
generate_negative_imperatives(base)
-- do non-reflexive negative imperative slot overrides
-- FIXME: What about reflexive negative imperatives?
process_slot_overrides(base, function(slot)
return slot:find("^neg_imp_")
end)
-- This should happen before add_missing_links_to_forms() so that the comparison `form == base.lemma`
-- in handle_infinitive_linked() works correctly and compares unlinked forms to unlinked forms.
handle_infinitive_linked(base)
process_addnote_specs(base)
if not base.alternant_multiword_spec.args.noautolinkverb then
add_missing_links_to_forms(base)
end
remove_mesoclitic_insertion_points(base)
process_altvar_forms(base)
end
local function parse_indicator_spec(angle_bracket_spec)
-- Store the original angle bracket spec so we can reconstruct the overall conj spec with the lemma(s) in them.
local base = {
angle_bracket_spec = angle_bracket_spec,
user_basic_overrides = {},
user_stems = {},
addnote_specs = {},
}
local function parse_err(msg)
error(msg .. ": " .. angle_bracket_spec)
end
local function fetch_footnotes(separated_group)
local footnotes
for j = 2, #separated_group - 1, 2 do
if separated_group[j + 1] ~= "" then
parse_err("Extraneous text after bracketed footnotes: '" .. table.concat(separated_group) .. "'")
end
if not footnotes then
footnotes = {}
end
table.insert(footnotes, separated_group[j])
end
return footnotes
end
local inside = angle_bracket_spec:match("^<(.*)>$")
assert(inside)
if inside == "" then
return base
end
local segments = iut.parse_balanced_segment_run(inside, "[", "]")
local dot_separated_groups = iut.split_alternating_runs(segments, "%.")
for i, dot_separated_group in ipairs(dot_separated_groups) do
local first_element = dot_separated_group[1]
if first_element == "addnote" then
local spec_and_footnotes = fetch_footnotes(dot_separated_group)
if #spec_and_footnotes < 2 then
parse_err("Spec with 'addnote' should be of the form 'addnote[SLOTSPEC][FOOTNOTE][FOOTNOTE][...]'")
end
local slot_spec = table.remove(spec_and_footnotes, 1)
local slot_spec_inside = rmatch(slot_spec, "^%[(.*)%]$")
if not slot_spec_inside then
parse_err("Internal error: slot_spec " .. slot_spec .. " should be surrounded with brackets")
end
local slot_specs = rsplit(slot_spec_inside, ",")
-- FIXME: Here, [[Module:it-verb]] called strip_spaces(). Generally we don't do this. Should we?
table.insert(base.addnote_specs, {slot_specs = slot_specs, footnotes = spec_and_footnotes})
elseif indicator_flags[first_element] then
if #dot_separated_group > 1 then
parse_err("No footnotes allowed with '" .. first_element .. "' spec")
end
if base[first_element] then
parse_err("Spec '" .. first_element .. "' specified twice")
end
base[first_element] = true
elseif rfind(first_element, ":") then
local colon_separated_groups = iut.split_alternating_runs(dot_separated_group, "%s*:%s*")
local first_element = colon_separated_groups[1][1]
if #colon_separated_groups[1] > 1 then
parse_err("Can't attach footnotes directly to '" .. first_element .. "' spec; attach them to the " ..
"colon-separated values following the initial colon")
end
if overridable_stems[first_element] then
if base.user_stems[first_element] then
parse_err("Overridable stem '" .. first_element .. "' specified twice")
end
table.remove(colon_separated_groups, 1)
base.user_stems[first_element] = overridable_stems[first_element](colon_separated_groups,
{prefix = first_element, base = base, parse_err = parse_err, fetch_footnotes = fetch_footnotes})
else -- assume a basic override; we validate further later when the possible slots are available
if base.user_basic_overrides[first_element] then
parse_err("Basic override '" .. first_element .. "' specified twice")
end
table.remove(colon_separated_groups, 1)
base.user_basic_overrides[first_element] = allow_multiple_values(colon_separated_groups,
{prefix = first_element, base = base, parse_err = parse_err, fetch_footnotes = fetch_footnotes})
end
else
local comma_separated_groups = iut.split_alternating_runs(dot_separated_group, "%s*,%s*")
for j = 1, #comma_separated_groups do
local alt = comma_separated_groups[j][1]
if not vowel_alternants[alt] then
if #comma_separated_groups == 1 then
parse_err("Unrecognized spec or vowel alternant '" .. alt .. "'")
else
parse_err("Unrecognized vowel alternant '" .. alt .. "'")
end
end
if base.vowel_alt then
for _, existing_alt in ipairs(base.vowel_alt) do
if existing_alt.form == alt then
parse_err("Vowel alternant '" .. alt .. "' specified twice")
end
end
else
base.vowel_alt = {}
end
table.insert(base.vowel_alt, {form = alt, footnotes = fetch_footnotes(comma_separated_groups[j])})
end
end
end
return base
end
-- Reconstruct the overall verb spec from the output of iut.parse_inflected_text(), so we can use it in
-- [[Module:accel/gl]].
function export.reconstruct_verb_spec(alternant_multiword_spec)
local parts = {}
for _, alternant_or_word_spec in ipairs(alternant_multiword_spec.alternant_or_word_specs) do
table.insert(parts, alternant_or_word_spec.user_specified_before_text)
if alternant_or_word_spec.alternants then
table.insert(parts, "((")
for i, multiword_spec in ipairs(alternant_or_word_spec.alternants) do
if i > 1 then
table.insert(parts, ",")
end
for _, word_spec in ipairs(multiword_spec.word_specs) do
table.insert(parts, word_spec.user_specified_before_text)
table.insert(parts, word_spec.user_specified_lemma)
table.insert(parts, word_spec.angle_bracket_spec)
end
table.insert(parts, multiword_spec.user_specified_post_text)
end
table.insert(parts, "))")
else
table.insert(parts, alternant_or_word_spec.user_specified_lemma)
table.insert(parts, alternant_or_word_spec.angle_bracket_spec)
end
end
table.insert(parts, alternant_multiword_spec.user_specified_post_text)
-- As a special case, if we see e.g. "amar<>", remove the <>. Don't do this if there are spaces or alternants.
local retval = table.concat(parts)
if not retval:find(" ") and not retval:find("%(%(") then
local retval_no_angle_brackets = retval:match("^(.*)<>$")
if retval_no_angle_brackets then
return retval_no_angle_brackets
end
end
return retval
end
-- Normalize all lemmas, substituting the pagename for blank lemmas and adding links to multiword lemmas.
local function normalize_all_lemmas(alternant_multiword_spec, head)
-- (1) Add links to all before and after text. Remember the original text so we can reconstruct the verb spec later.
if not alternant_multiword_spec.args.noautolinktext then
for _, alternant_or_word_spec in ipairs(alternant_multiword_spec.alternant_or_word_specs) do
alternant_or_word_spec.user_specified_before_text = alternant_or_word_spec.before_text
alternant_or_word_spec.before_text = com.add_links(alternant_or_word_spec.before_text)
if alternant_or_word_spec.alternants then
for _, multiword_spec in ipairs(alternant_or_word_spec.alternants) do
for _, word_spec in ipairs(multiword_spec.word_specs) do
word_spec.user_specified_before_text = word_spec.before_text
word_spec.before_text = com.add_links(word_spec.before_text)
end
multiword_spec.user_specified_post_text = multiword_spec.post_text
multiword_spec.post_text = com.add_links(multiword_spec.post_text)
end
end
end
alternant_multiword_spec.user_specified_post_text = alternant_multiword_spec.post_text
alternant_multiword_spec.post_text = com.add_links(alternant_multiword_spec.post_text)
end
-- (2) Remove any links from the lemma, but remember the original form
-- so we can use it below in the 'lemma_linked' form.
iut.map_word_specs(alternant_multiword_spec, function(base)
if base.lemma == "" then
base.lemma = head
end
base.user_specified_lemma = base.lemma
base.lemma = m_links.remove_links(base.lemma)
local refl_verb = base.lemma
local verb, refl = rmatch(refl_verb, "^(.-)%-(se)$")
if not verb then
verb, refl = refl_verb, nil
end
base.user_specified_verb = verb
base.refl = refl
base.verb = base.user_specified_verb
local linked_lemma
if alternant_multiword_spec.args.noautolinkverb or base.user_specified_lemma:find("%[%[") then
linked_lemma = base.user_specified_lemma
elseif base.refl then
-- Reconstruct the linked lemma with separate links around base verb and reflexive pronoun.
linked_lemma = base.user_specified_verb == base.verb and "[[" .. base.user_specified_verb .. "]]" or
"[[" .. base.verb .. "|" .. base.user_specified_verb .. "]]"
linked_lemma = linked_lemma .. (refl and "-[[" .. refl .. "]]" or "")
else
-- Add links to the lemma so the user doesn't specifically need to, since we preserve
-- links in multiword lemmas and include links in non-lemma forms rather than allowing
-- the entire form to be a link.
linked_lemma = com.add_links(base.user_specified_lemma)
end
base.linked_lemma = linked_lemma
end)
end
local function detect_indicator_spec(base)
if (base.only3s and 1 or 0) + (base.only3sp and 1 or 0) + (base.only3p and 1 or 0) > 1 then
error("Only one of 'only3s', 'only3sp' and 'only3p' can be specified")
end
base.forms = {}
base.stems = {}
base.basic_overrides = {}
base.basic_reflexive_only_overrides = {}
if not base.no_built_in then
for _, built_in_conj in ipairs(built_in_conjugations) do
if type(built_in_conj.match) == "function" then
base.prefix, base.non_prefixed_verb = built_in_conj.match(base.verb)
elseif built_in_conj.match:find("^%^") and rsub(built_in_conj.match, "^%^", "") == base.verb then
-- begins with ^, for exact match, and matches
base.prefix, base.non_prefixed_verb = "", base.verb
else
base.prefix, base.non_prefixed_verb = rmatch(base.verb, "^(.*)(" .. built_in_conj.match .. ")$")
end
if base.prefix then
-- we found a built-in verb
for stem, forms in pairs(built_in_conj.forms) do
if type(forms) == "function" then
forms = forms(base, base.prefix)
end
if stem:find("^refl_") then
stem = stem:gsub("^refl_", "")
if not base.alternant_multiword_spec.verb_slots_basic_map[stem] then
error("Internal error: setting for 'refl_" .. stem .. "' does not refer to a basic verb slot")
end
base.basic_reflexive_only_overrides[stem] = forms
elseif base.alternant_multiword_spec.verb_slots_basic_map[stem] then
-- an individual form override of a basic form
base.basic_overrides[stem] = forms
else
base.stems[stem] = forms
end
end
break
end
end
end
-- Override built-in-verb stems and overrides with user-specified ones.
for stem, values in pairs(base.user_stems) do
base.stems[stem] = values
end
for override, values in pairs(base.user_basic_overrides) do
if not base.alternant_multiword_spec.verb_slots_basic_map[override] then
error("Unrecognized override '" .. override .. "': " .. base.angle_bracket_spec)
end
base.basic_overrides[override] = values
end
base.prefix = base.prefix or ""
base.non_prefixed_verb = base.non_prefixed_verb or base.verb
local inf_stem, suffix = rmatch(base.non_prefixed_verb, "^(.*)([aeioô]r)$")
if not inf_stem then
error("Unrecognized infinitive: " .. base.verb)
end
base.inf_stem = inf_stem
suffix = suffix == "ôr" and "or" or suffix
base.conj = suffix
base.conj_vowel = suffix == "ar" and "á" or suffix == "ir" and "í" or "ê"
base.frontback = suffix == "ar" and "back" or "front"
if base.stems.vowel_alt then -- built-in verb with specified vowel alternation
if base.vowel_alt then
error(base.verb .. " is a recognized built-in verb, and should not have vowel alternations specified with it")
end
base.vowel_alt = iut.convert_to_general_list_form(base.stems.vowel_alt)
end
-- Propagate built-in-verb indicator flags to `base` and combine with user-specified flags.
for indicator_flag, _ in pairs(indicator_flags) do
base[indicator_flag] = base[indicator_flag] or base.stems[indicator_flag]
end
-- Convert vowel alternation indicators into stems.
local vowel_alt = base.vowel_alt or {{form = "+"}}
base.vowel_alt_stems = apply_vowel_alternations(base.inf_stem, vowel_alt)
for _, vowel_alt_stems in ipairs(base.vowel_alt_stems) do
if vowel_alt_stems.err then
error("To use '" .. vowel_alt_stems.altobj.form .. "', present stem '" .. base.prefix .. base.inf_stem .. "' " ..
vowel_alt_stems.err)
end
end
end
local function detect_all_indicator_specs(alternant_multiword_spec)
-- Propagate some settings up; some are used internally, others by [[Module:gl-headword]].
iut.map_word_specs(alternant_multiword_spec, function(base)
-- Internal indicator flags. Do these before calling detect_indicator_spec() because add_slots() uses them.
for _, prop in ipairs { "refl", "clitic" } do
if base[prop] then
alternant_multiword_spec[prop] = true
end
end
base.alternant_multiword_spec = alternant_multiword_spec
end)
add_slots(alternant_multiword_spec)
alternant_multiword_spec.vowel_alt = {}
iut.map_word_specs(alternant_multiword_spec, function(base)
detect_indicator_spec(base)
-- User-specified indicator flags. Do these after calling detect_indicator_spec() because the latter may set these
-- indicators for built-in verbs.
for prop, _ in pairs(indicator_flags) do
if base[prop] then
alternant_multiword_spec[prop] = true
end
end
-- Vowel alternants. Do these after calling detect_indicator_spec() because the latter sets base.vowel_alt for
-- built-in verbs.
if base.vowel_alt then
for _, altobj in ipairs(base.vowel_alt) do
m_table.insertIfNot(alternant_multiword_spec.vowel_alt, altobj.form)
end
end
end)
end
local function add_categories_and_annotation(alternant_multiword_spec, base, multiword_lemma)
local function insert_ann(anntype, value)
m_table.insertIfNot(alternant_multiword_spec.annotation[anntype], value)
end
local function insert_cat(cat, also_when_multiword)
-- Don't place multiword terms in categories like 'Galician verbs ending in -ar' to avoid spamming the
-- categories with such terms.
if also_when_multiword or not multiword_lemma then
m_table.insertIfNot(alternant_multiword_spec.categories, "Galician " .. cat)
end
end
if check_for_red_links and alternant_multiword_spec.source_template == "gl-reinteg-conj" and multiword_lemma then
for _, slot_and_accel in ipairs(alternant_multiword_spec.all_verb_slots) do
local slot = slot_and_accel[1]
local forms = base.forms[slot]
local must_break = false
if forms then
for _, form in ipairs(forms) do
if not form.form:find("%[%[") then
local title = mw.title.new(form.form)
if title and not title.exists then
insert_cat("verbs with red links in their inflection tables")
must_break = true
break
end
end
end
end
if must_break then
break
end
end
end
if(base.conj == "or") then
insert_cat("verbs ending in -er")
else
insert_cat("verbs ending in -" .. base.conj)
end
if base.irreg then
insert_ann("irreg", "irregular")
insert_cat("irregular verbs")
else
insert_ann("irreg", "regular")
end
if base.only3s then
insert_ann("defective", "impersonal")
insert_cat("impersonal verbs")
elseif base.only3sp then
insert_ann("defective", "third-person only")
insert_cat("third-person-only verbs")
elseif base.only3p then
insert_ann("defective", "third-person plural only")
insert_cat("third-person-plural-only verbs")
elseif base.no_pres_stressed or base.no_pres1_and_sub then
insert_ann("defective", "defective")
insert_cat("defective verbs")
else
insert_ann("defective", "regular")
end
if base.stems.short_pp then
insert_ann("short_pp", "irregular short past participle")
insert_cat("verbs with irregular short past participle")
else
insert_ann("short_pp", "regular")
end
if base.clitic then
insert_cat("verbs with lexical clitics")
end
if base.refl then
insert_cat("reflexive verbs")
end
if base.e_ei_cat then
insert_ann("vowel_alt", "''e'' may become ''ei'' when stressed")
insert_cat("verbs with e becoming ei when stressed")
elseif not base.vowel_alt then
insert_ann("vowel_alt", "non-alternating")
else
for _, alt in ipairs(base.vowel_alt) do
if alt.form == "+" then
insert_ann("vowel_alt", "non-alternating")
else
insert_ann("vowel_alt", vowel_alternant_to_desc[alt.form])
insert_cat("verbs with " .. vowel_alternant_to_cat[alt.form])
end
end
end
local cons_alt = base.stems.cons_alt
if cons_alt == nil then
if base.conj == "ar" then
if base.inf_stem:find("ç$") then
cons_alt = "c-ç"
elseif base.inf_stem:find("c$") then
cons_alt = "c-qu"
elseif base.inf_stem:find("g$") then
cons_alt = "g-gu"
end
else
if base.no_pres_stressed or base.no_pres1_and_sub then
cons_alt = nil -- no e.g. c-ç alternation in this case
elseif base.inf_stem:find("c$") then
cons_alt = "c-ç"
elseif base.inf_stem:find("qu$") then
cons_alt = "c-qu"
elseif base.inf_stem:find("g$") then
cons_alt = "g-j"
elseif base.inf_stem:find("gu$") then
cons_alt = "g-gu"
end
end
end
if cons_alt then
local desc = cons_alt .. " alternation"
insert_ann("cons_alt", desc)
insert_cat("verbs with " .. desc)
else
insert_ann("cons_alt", "non-alternating")
end
end
-- Compute the categories to add the verb to, as well as the annotation to display in the
-- conjugation title bar. We combine the code to do these functions as both categories and
-- title bar contain similar information.
local function compute_categories_and_annotation(alternant_multiword_spec)
alternant_multiword_spec.categories = {}
local ann = {}
alternant_multiword_spec.annotation = ann
ann.irreg = {}
ann.short_pp = {}
ann.defective = {}
ann.vowel_alt = {}
ann.cons_alt = {}
local multiword_lemma = false
for _, form in ipairs(alternant_multiword_spec.forms.infinitive) do
if form.form:find(" ") then
multiword_lemma = true
break
end
end
iut.map_word_specs(alternant_multiword_spec, function(base)
add_categories_and_annotation(alternant_multiword_spec, base, multiword_lemma)
end)
local ann_parts = {}
local irreg = table.concat(ann.irreg, " or ")
if irreg ~= "" and irreg ~= "regular" then
table.insert(ann_parts, irreg)
end
local short_pp = table.concat(ann.short_pp, " or ")
if short_pp ~= "" and short_pp ~= "regular" then
table.insert(ann_parts, short_pp)
end
local defective = table.concat(ann.defective, " or ")
if defective ~= "" and defective ~= "regular" then
table.insert(ann_parts, defective)
end
local vowel_alt = table.concat(ann.vowel_alt, " or ")
if vowel_alt ~= "" and vowel_alt ~= "non-alternating" then
table.insert(ann_parts, vowel_alt)
end
local cons_alt = table.concat(ann.cons_alt, " or ")
if cons_alt ~= "" and cons_alt ~= "non-alternating" then
table.insert(ann_parts, cons_alt)
end
alternant_multiword_spec.annotation = table.concat(ann_parts, "; ")
end
local function show_forms(alternant_multiword_spec)
local lemmas = alternant_multiword_spec.forms.infinitive
alternant_multiword_spec.lemmas = lemmas -- save for later use in make_table()
if alternant_multiword_spec.forms.short_pp_ms then
alternant_multiword_spec.has_short_pp = true
end
local reconstructed_verb_spec = export.reconstruct_verb_spec(alternant_multiword_spec)
local function transform_accel_obj(slot, formobj, accel_obj)
-- No accelerators for negative imperatives, which are always multiword and derived directly from the
-- present subjunctive.
if slot:find("^neg_imp") then
return nil
end
if accel_obj then
if slot:find("^pp_") then
accel_obj.form = slot
elseif slot == "gerund" then
accel_obj.form = "reinteg-gerund-" .. reconstructed_verb_spec
else
accel_obj.form = "reinteg-verb-form-" .. reconstructed_verb_spec
end
end
return accel_obj
end
-- Italicize less-recommended forms.
local function generate_link(slot, form, origentry, accel_obj)
if origentry:find(ALTVAR) then
origentry = rsub(origentry, ALTVAR, "")
return m_links.full_link({lang = lang, term = origentry, tr = "-", accel = accel_obj}, "term")
end
end
local props = {
lang = lang,
lemmas = lemmas,
transform_accel_obj = transform_accel_obj,
canonicalize = function(form) return export.remove_variant_codes(form, "keep altvar") end,
generate_link = generate_link,
slot_list = alternant_multiword_spec.verb_slots_basic,
}
iut.show_forms(alternant_multiword_spec.forms, props)
alternant_multiword_spec.footnote_basic = alternant_multiword_spec.forms.footnote
end
local notes_template = [=[
<div style="width:100%;text-align:left;background:#d9ebff">
<div style="display:inline-block;text-align:left;padding-left:1em;padding-right:1em">
{footnote}
</div></div>
]=]
local basic_table = [=[
{description}<div class="NavFrame">
<div class="NavHead" align=center> Reintegrated conjugation of {title} (See [[Appendix:Reintegrationism]])</div>
<div class="NavContent" align="left">
{\op}| class="inflection-table" style="background:#F6F6F6; text-align: left; border: 1px solid #999999;" cellpadding="3" cellspacing="0"
|-
! style="border: 1px solid #999999; background:#B0B0B0" rowspan="2" |
! style="border: 1px solid #999999; background:#D0D0D0" colspan="3" | เอกพจน์
! style="border: 1px solid #999999; background:#D0D0D0" colspan="3" | พหูพจน์
|-
! style="border: 1px solid #999999; background:#D0D0D0; width:12.5%" | บุรุษที่หนึ่ง<br />(<<eu>>)
! style="border: 1px solid #999999; background:#D0D0D0; width:12.5%" | บุรุษที่สอง<br />(<<ti>> / <<tu>>)
! style="border: 1px solid #999999; background:#D0D0D0; width:12.5%" | บุรุษที่สาม<br />(<<ele>> / <<ela>> / <<você>>)
! style="border: 1px solid #999999; background:#D0D0D0; width:12.5%" | บุรุษที่หนึ่ง<br />(<<nós>>)
! style="border: 1px solid #999999; background:#D0D0D0; width:12.5%" | บุรุษที่สอง<br />(<<vós>>)
! style="border: 1px solid #999999; background:#D0D0D0; width:12.5%" | บุรุษที่สาม<br />(<<eles>> / <<elas>> / <<vocês>>)
|-
! style="border: 1px solid #999999; background:#c498ff" colspan="7" | ''<span title="infinitivo">รูปกริยากลาง</span>''
|-
! style="border: 1px solid #999999; background:#a478df" | '''<span title="infinitivo impessoal">คำอบุรุษกริยา</span>'''
| style="border: 1px solid #999999; vertical-align: top;" colspan="6" | {infinitive}
|-
! style="border: 1px solid #999999; background:#a478df" | '''<span title="infinitivo flexionado">คำบุรุษกริยา</span>'''
| style="border: 1px solid #999999; vertical-align: top;" | {pers_inf_1s}
| style="border: 1px solid #999999; vertical-align: top;" | {pers_inf_2s}
| style="border: 1px solid #999999; vertical-align: top;" | {pers_inf_3s}
| style="border: 1px solid #999999; vertical-align: top;" | {pers_inf_1p}
| style="border: 1px solid #999999; vertical-align: top;" | {pers_inf_2p}
| style="border: 1px solid #999999; vertical-align: top;" | {pers_inf_3p}
|-
! style="border: 1px solid #999999; background:#98ffc4" colspan="7" | ''<span title="gerúndio">รูปกริยาเป็นนาม</span>''
|-
| style="border: 1px solid #999999; background:#78dfa4" |
| style="border: 1px solid #999999; vertical-align: top;" colspan="6" | {gerund}
|-{pp_clause}
! style="border: 1px solid #999999; background:#d0dff4" colspan="7" | ''<span title="indicativo">มาลาบอกเล่า</span>''
|-
! style="border: 1px solid #999999; background:#b0bfd4" | <span title="presente">ปัจจุบันกาล</span>
| style="border: 1px solid #999999; vertical-align: top;" | {pres_1s}
| style="border: 1px solid #999999; vertical-align: top;" | {pres_2s}
| style="border: 1px solid #999999; vertical-align: top;" | {pres_3s}
| style="border: 1px solid #999999; vertical-align: top;" | {pres_1p}
| style="border: 1px solid #999999; vertical-align: top;" | {pres_2p}
| style="border: 1px solid #999999; vertical-align: top;" | {pres_3p}
|-
! style="border: 1px solid #999999; background:#b0bfd4" | <span title="pretérito imperfeito">ไม่สมบูรณ์</span>
| style="border: 1px solid #999999; vertical-align: top;" | {impf_1s}
| style="border: 1px solid #999999; vertical-align: top;" | {impf_2s}
| style="border: 1px solid #999999; vertical-align: top;" | {impf_3s}
| style="border: 1px solid #999999; vertical-align: top;" | {impf_1p}
| style="border: 1px solid #999999; vertical-align: top;" | {impf_2p}
| style="border: 1px solid #999999; vertical-align: top;" | {impf_3p}
|-
! style="border: 1px solid #999999; background:#b0bfd4" | <span title="pretérito perfeito">อดีตกาลสิ้นสุด<br>(สมบูรณ์)</span>
| style="border: 1px solid #999999; vertical-align: top;" | {pret_1s}
| style="border: 1px solid #999999; vertical-align: top;" | {pret_2s}
| style="border: 1px solid #999999; vertical-align: top;" | {pret_3s}
| style="border: 1px solid #999999; vertical-align: top;" | {pret_1p}
| style="border: 1px solid #999999; vertical-align: top;" | {pret_2p}
| style="border: 1px solid #999999; vertical-align: top;" | {pret_3p}
|-
! style="border: 1px solid #999999; background:#b0bfd4" | <span title="pretérito mais-que-perfeito simples">อภิสมบูรณ์</span>
| style="border: 1px solid #999999; vertical-align: top;" | {plup_1s}
| style="border: 1px solid #999999; vertical-align: top;" | {plup_2s}
| style="border: 1px solid #999999; vertical-align: top;" | {plup_3s}
| style="border: 1px solid #999999; vertical-align: top;" | {plup_1p}
| style="border: 1px solid #999999; vertical-align: top;" | {plup_2p}
| style="border: 1px solid #999999; vertical-align: top;" | {plup_3p}
|-
! style="border: 1px solid #999999; background:#b0bfd4" | <span title="futuro do presente">อนาคตกาล</span>
| style="border: 1px solid #999999; vertical-align: top;" | {fut_1s}
| style="border: 1px solid #999999; vertical-align: top;" | {fut_2s}
| style="border: 1px solid #999999; vertical-align: top;" | {fut_3s}
| style="border: 1px solid #999999; vertical-align: top;" | {fut_1p}
| style="border: 1px solid #999999; vertical-align: top;" | {fut_2p}
| style="border: 1px solid #999999; vertical-align: top;" | {fut_3p}
|-
! style="border: 1px solid #999999; background:#b0bfd4" | <span title="condicional">มาลาเงื่อนไข</span>
| style="border: 1px solid #999999; vertical-align: top;" | {cond_1s}
| style="border: 1px solid #999999; vertical-align: top;" | {cond_2s}
| style="border: 1px solid #999999; vertical-align: top;" | {cond_3s}
| style="border: 1px solid #999999; vertical-align: top;" | {cond_1p}
| style="border: 1px solid #999999; vertical-align: top;" | {cond_2p}
| style="border: 1px solid #999999; vertical-align: top;" | {cond_3p}
|-
! style="border: 1px solid #999999; background:#d0f4d0" colspan="7" | ''<span title="conjuntivo">มาลาสมมุติ</span>''
|-
! style="border: 1px solid #999999; background:#b0d4b0" | <span title=" presente do conjuntivo">ปัจจุบันกาล</span>
| style="border: 1px solid #999999; vertical-align: top;" | {pres_sub_1s}
| style="border: 1px solid #999999; vertical-align: top;" | {pres_sub_2s}
| style="border: 1px solid #999999; vertical-align: top;" | {pres_sub_3s}
| style="border: 1px solid #999999; vertical-align: top;" | {pres_sub_1p}
| style="border: 1px solid #999999; vertical-align: top;" | {pres_sub_2p}
| style="border: 1px solid #999999; vertical-align: top;" | {pres_sub_3p}
|-
! style="border: 1px solid #999999; background:#b0d4b0" | <span title="pretérito imperfeito do conjuntivo">ไม่สมบูรณ์</span>
| style="border: 1px solid #999999; vertical-align: top;" | {impf_sub_1s}
| style="border: 1px solid #999999; vertical-align: top;" | {impf_sub_2s}
| style="border: 1px solid #999999; vertical-align: top;" | {impf_sub_3s}
| style="border: 1px solid #999999; vertical-align: top;" | {impf_sub_1p}
| style="border: 1px solid #999999; vertical-align: top;" | {impf_sub_2p}
| style="border: 1px solid #999999; vertical-align: top;" | {impf_sub_3p}
|-
! style="border: 1px solid #999999; background:#b0d4b0" | <span title="futuro do conjuntivo">อนาคตกาล</span>
| style="border: 1px solid #999999; vertical-align: top;" | {fut_sub_1s}
| style="border: 1px solid #999999; vertical-align: top;" | {fut_sub_2s}
| style="border: 1px solid #999999; vertical-align: top;" | {fut_sub_3s}
| style="border: 1px solid #999999; vertical-align: top;" | {fut_sub_1p}
| style="border: 1px solid #999999; vertical-align: top;" | {fut_sub_2p}
| style="border: 1px solid #999999; vertical-align: top;" | {fut_sub_3p}
|-
! style="border: 1px solid #999999; background:#f4e4d0" colspan="7" | ''<span title="imperativo">มาลาสั่ง</span>''
|-
! style="border: 1px solid #999999; background:#d4c4b0" | <span title="imperativo afirmativo">เชิงยืนยัน</span>
| style="border: 1px solid #999999; vertical-align: top;" rowspan="2" |
| style="border: 1px solid #999999; vertical-align: top;" | {imp_2s}
| style="border: 1px solid #999999; vertical-align: top;" | {imp_3s}
| style="border: 1px solid #999999; vertical-align: top;" | {imp_1p}
| style="border: 1px solid #999999; vertical-align: top;" | {imp_2p}
| style="border: 1px solid #999999; vertical-align: top;" | {imp_3p}
|-
! style="border: 1px solid #999999; background:#d4c4b0" | <span title="imperativo negativo">เชิงปฏิเสธ</span> (<<nom>>)
| style="border: 1px solid #999999; vertical-align: top;" | {neg_imp_2s}
| style="border: 1px solid #999999; vertical-align: top;" | {neg_imp_3s}
| style="border: 1px solid #999999; vertical-align: top;" | {neg_imp_1p}
| style="border: 1px solid #999999; vertical-align: top;" | {neg_imp_2p}
| style="border: 1px solid #999999; vertical-align: top;" | {neg_imp_3p}
|{\cl}{notes_clause}</div></div>
]=]
local double_pp_template = [=[
! style="border: 1px solid #999999; background:#ffc498" colspan="7" | ''<span title="particípio irregular">Short past participle</span>''
|-
! style="border: 1px solid #999999; background:#dfa478" | Masculine
| style="border: 1px solid #999999; vertical-align: top;" colspan="3" | {short_pp_ms}
| style="border: 1px solid #999999; vertical-align: top;" colspan="3" | {short_pp_mp}
|-
! style="border: 1px solid #999999; background:#dfa478" | Feminine
| style="border: 1px solid #999999; vertical-align: top;" colspan="3" | {short_pp_fs}
| style="border: 1px solid #999999; vertical-align: top;" colspan="3" | {short_pp_fp}
|-
! style="border: 1px solid #999999; background:#ffc498" colspan="7" | ''<span title="particípio regular">Long past participle</span>''
|-
! style="border: 1px solid #999999; background:#dfa478" | Masculine
| style="border: 1px solid #999999; vertical-align: top;" colspan="3" | {pp_ms}
| style="border: 1px solid #999999; vertical-align: top;" colspan="3" | {pp_mp}
|-
! style="border: 1px solid #999999; background:#dfa478" | Feminine
| style="border: 1px solid #999999; vertical-align: top;" colspan="3" | {pp_fs}
| style="border: 1px solid #999999; vertical-align: top;" colspan="3" | {pp_fp}
|-]=]
local single_pp_template = [=[
! style="border: 1px solid #999999; background:#ffc498" colspan="7" | ''<span title="particípio passado">Past participle</span>''
|-
! style="border: 1px solid #999999; background:#dfa478" | Masculine
| style="border: 1px solid #999999; vertical-align: top;" colspan="3" | {pp_ms}
| style="border: 1px solid #999999; vertical-align: top;" colspan="3" | {pp_mp}
|-
! style="border: 1px solid #999999; background:#dfa478" | Feminine
| style="border: 1px solid #999999; vertical-align: top;" colspan="3" | {pp_fs}
| style="border: 1px solid #999999; vertical-align: top;" colspan="3" | {pp_fp}
|-]=]
local function make_table(alternant_multiword_spec)
local forms = alternant_multiword_spec.forms
forms.title = link_term(alternant_multiword_spec.lemmas[1].form)
if alternant_multiword_spec.annotation ~= "" then
forms.title = forms.title .. " (" .. alternant_multiword_spec.annotation .. ")"
end
forms.description = ""
-- Format the table.
forms.footnote = alternant_multiword_spec.footnote_basic
forms.notes_clause = forms.footnote ~= "" and m_string_utilities.format(notes_template, forms) or ""
-- has_short_pp is computed in show_forms().
local pp_template = alternant_multiword_spec.has_short_pp and double_pp_template or single_pp_template
forms.pp_clause = m_string_utilities.format(pp_template, forms)
local table_with_pronouns = rsub(basic_table, "<<(.-)>>", link_term)
return m_string_utilities.format(table_with_pronouns, forms)
end
-- Externally callable function to parse and conjugate a verb given user-specified arguments.
-- Return value is WORD_SPEC, an object where the conjugated forms are in `WORD_SPEC.forms`
-- for each slot. If there are no values for a slot, the slot key will be missing. The value
-- for a given slot is a list of objects {form=FORM, footnotes=FOOTNOTES}.
function export.do_generate_forms(args, source_template, headword_head)
local PAGENAME = mw.title.getCurrentTitle().text
local function in_template_space()
return mw.title.getCurrentTitle().nsText == "แม่แบบ"
end
-- Determine the verb spec we're being asked to generate the conjugation of. This may be taken from the
-- current page title or the value of |pagename=; but not when called from {{gl-reinteg-verb form of}}, where the
-- page title is a non-lemma form. Note that the verb spec may omit the infinitive; e.g. it may be "<i-e>".
-- For this reason, we use the value of `pagename` computed here down below, when calling normalize_all_lemmas().
local pagename = source_template ~= "gl-reinteg-verb form of" and args.pagename or PAGENAME
local head = headword_head or pagename
local arg1 = args[1]
if not arg1 then
if (pagename == "gl-reinteg-conj" or pagename == "gl-reinteg-verb") and in_template_space() then
arg1 = "traguer"
elseif pagename == "gl-reinteg-verb form of" and in_template_space() then
arg1 = "amar"
else
arg1 = "<>"
end
end
-- When called from {{gl-reinteg-verb form of}}, determine the non-lemma form whose inflections we're being asked to
-- determine. This normally comes from the page title or the value of |pagename=.
local verb_form_of_form
if source_template == "gl-reinteg-verb form of" then
verb_form_of_form = args.pagename
if not verb_form_of_form then
if PAGENAME == "gl-reinteg-verb form of" and in_template_space() then
verb_form_of_form = "ame"
else
verb_form_of_form = PAGENAME
end
end
end
local incorporated_headword_head_into_lemma = false
if arg1:find("^<.*>$") then -- missing lemma
if head:find(" ") then
-- If multiword lemma, try to add arg spec after the first word.
-- Try to preserve the brackets in the part after the verb, but don't do it
-- if there aren't the same number of left and right brackets in the verb
-- (which means the verb was linked as part of a larger expression).
local refl_clitic_verb, post = rmatch(head, "^(.-)( .*)$")
local left_brackets = rsub(refl_clitic_verb, "[^%[]", "")
local right_brackets = rsub(refl_clitic_verb, "[^%]]", "")
if #left_brackets == #right_brackets then
arg1 = iut.remove_redundant_links(refl_clitic_verb) .. arg1 .. post
incorporated_headword_head_into_lemma = true
else
-- Try again using the form without links.
local linkless_head = m_links.remove_links(head)
if linkless_head:find(" ") then
refl_clitic_verb, post = rmatch(linkless_head, "^(.-)( .*)$")
arg1 = refl_clitic_verb .. arg1 .. post
else
error("Unable to incorporate <...> spec into explicit head due to a multiword linked verb or " ..
"unbalanced brackets; please include <> explicitly: " .. arg1)
end
end
else
-- Will be incorporated through `head` below in the call to normalize_all_lemmas().
incorporated_headword_head_into_lemma = true
end
end
local function split_bracketed_runs_into_words(bracketed_runs)
return iut.split_alternating_runs(bracketed_runs, " ", "preserve splitchar")
end
local parse_props = {
parse_indicator_spec = parse_indicator_spec,
-- Split words only on spaces, not on hyphens, because that messes up reflexive verb parsing.
split_bracketed_runs_into_words = split_bracketed_runs_into_words,
allow_default_indicator = true,
allow_blank_lemma = true,
}
local alternant_multiword_spec = iut.parse_inflected_text(arg1, parse_props)
alternant_multiword_spec.pos = pos or "verbs"
alternant_multiword_spec.args = args
alternant_multiword_spec.source_template = source_template
alternant_multiword_spec.verb_form_of_form = verb_form_of_form
alternant_multiword_spec.incorporated_headword_head_into_lemma = incorporated_headword_head_into_lemma
normalize_all_lemmas(alternant_multiword_spec, head)
detect_all_indicator_specs(alternant_multiword_spec)
local inflect_props = {
slot_list = alternant_multiword_spec.all_verb_slots,
inflect_word_spec = conjugate_verb,
get_variants = function(form) return rsub(form, not_var_code_c, "") end,
-- We add links around the generated verbal forms rather than allow the entire multiword
-- expression to be a link, so ensure that user-specified links get included as well.
include_user_specified_links = true,
}
iut.inflect_multiword_or_alternant_multiword_spec(alternant_multiword_spec, inflect_props)
-- Remove redundant brackets around entire forms.
for slot, forms in pairs(alternant_multiword_spec.forms) do
for _, form in ipairs(forms) do
form.form = com.strip_redundant_links(form.form)
end
end
compute_categories_and_annotation(alternant_multiword_spec)
if args.json and source_template == "gl-reinteg-conj" then
return export.remove_variant_codes(require("Module:JSON").toJSON(alternant_multiword_spec.forms))
end
return alternant_multiword_spec
end
-- Entry point for {{gl-reinteg-conj}}. Template-callable function to parse and conjugate a verb given
-- user-specified arguments and generate a displayable table of the conjugated forms.
function export.show(frame)
local parent_args = frame:getParent().args
local params = {
[1] = {},
["noautolinktext"] = {type = "boolean"},
["noautolinkverb"] = {type = "boolean"},
["pagename"] = {}, -- for testing/documentation pages
["json"] = {type = "boolean"}, -- for bot use
}
local args = require("Module:parameters").process(parent_args, params)
local alternant_multiword_spec = export.do_generate_forms(parent_args, "gl-reinteg-conj")
if type(alternant_multiword_spec) == "string" then
-- JSON return value
return alternant_multiword_spec
end
show_forms(alternant_multiword_spec)
return make_table(alternant_multiword_spec) ..
require("Module:utilities").format_categories(alternant_multiword_spec.categories, lang, nil, nil, force_cat)
end
return export
gih1fc15nbjxw3gq8amujc21qbu398r
5729291
5729289
2026-07-20T05:26:31Z
Octahedron80
267
5729291
Scribunto
text/plain
--[=[
This module implements {{gl-reinteg-conj}} and provides the underlying conjugation functions for {{gl-reinteg-verb}},
as well as for {{gl-verb}} when invoked with |reinteg=1. The actual formatting of both {{gl-reinteg-verb}} and
{{gl-verb}} happens in [[Module:gl-headword]]. This module uses the [[Appendix:Reintegrationism|reintegrationist]] norm
for Galician spelling. See also [[Module:gl-verb]], which implements the standard norm.
Authorship: Ben Wing <benwing2>, MedK <medk1>
]=]
local export = {}
--[=[
TERMINOLOGY:
-- "slot" = A particular combination of tense/mood/person/number/etc.
Example slot names for verbs are "pres_1s" (present indicative first-person singular), "pres_sub_2s" (present
subjunctive second-person singular) "impf_sub_3p" (imperfect subjunctive third-person plural).
Each slot is filled with zero or more forms.
-- "form" = The conjugated Galician form representing the value of a given slot.
-- "lemma" = The dictionary form of a given Galician term. For Galician, always the infinitive.
]=]
--[=[
FIXME:
--]=]
local lang = require("Module:languages").getByCode("gl")
local m_string_utilities = require("Module:string utilities")
local m_links = require("Module:links")
local m_table = require("Module:table")
local iut = require("Module:inflection utilities")
local put = require("Module:parse utilities")
local com = require("Module:gl-reinteg-common")
local force_cat = false -- set to true for debugging
local check_for_red_links = false -- set to false for debugging
local rfind = mw.ustring.find
local rmatch = mw.ustring.match
local rsplit = mw.text.split
local rsub = com.rsub
local u = mw.ustring.char
local unpack = unpack or table.unpack -- Lua 5.2 compatibility
local function link_term(term)
return m_links.full_link({ lang = lang, term = term }, "term")
end
local V = com.V -- vowel regex class
local AV = com.AV -- accented vowel regex class
local C = com.C -- consonant regex class
local AC = u(0x0301) -- acute = ́
local TEMPC1 = u(0xFFF1) -- temporary character used for consonant substitutions
local TEMP_MESOCLITIC_INSERTION_POINT = u(0xFFF2) -- temporary character used to mark the mesoclitic insertion point
-- Variant codes and the like.
-- NOTE: These codes should be *PREFIXED* onto stems and *SUFFIXED* onto endings. That way they won't interfere in the
-- operation of combine_stem_ending().
--
-- GL_TYPE = "Galician-type", PT_TYPE = "Portuguese-type". GL_TYPE stems cannot combine with PT_TYPE endings and
-- vice-versa. GL_ONLY_TYPE = "Galician-only type"; GL_ONLY_TYPE stems can only combine with endings specifically
-- marked as GL_TYPE.
local GL_TYPE = u(0xFFF3)
local GL_ONLY_TYPE = u(0xFFF4)
local PT_TYPE = u(0xFFF5)
-- ALTVAR = Less-recommended variants listed at the bottom of the Estraviz conjugation tables rather than in the main
-- table. We list these in the main table but with a footnote indicating they are less-recommended alternatives, and
-- italicize them to visually set them apart.
local ALTVAR = u(0xFFF6)
local GL_ALTVAR = GL_TYPE .. ALTVAR
local GL_ONLY_ALTVAR = GL_ONLY_TYPE .. ALTVAR
local var_codes_no_altvar = GL_TYPE .. GL_ONLY_TYPE .. PT_TYPE
local all_var_codes = var_codes_no_altvar .. ALTVAR
local var_code_c = "[" .. all_var_codes .. "]"
local var_code_no_altvar_c = "[" .. var_codes_no_altvar .. "]"
local not_var_code_c = "[^" .. all_var_codes .. "]"
-- Export variant codes for use in [[Module:pt-gl-inflections]].
export.GL_TYPE = GL_TYPE
export.GL_ONLY_TYPE = GL_ONLY_TYPE
export.PT_TYPE = PT_TYPE
export.ALTVAR = ALTVAR
local short_pp_footnote = "[usually used with auxiliary verbs " .. link_term("ser") .. " and " .. link_term("estar") .. "]"
local long_pp_footnote = "[usually used with auxiliary verbs " .. link_term("haver") .. " and " .. link_term("ter") .. "]"
--[=[
Vowel alternations:
<i-e>: 'i' in pres1s and the whole present subjunctive; 'e' elsewhere when stressed. Generally 'e' otherwise when
unstressed. E.g. [[sentir]], [[conseguir]] (the latter additionally with 'gu-g' alternation).
<u-o>: 'u' in pres1s and the whole present subjunctive; 'o' elsewhere when stressed. Either 'o' or 'u' otherwise when
unstressed. E.g. [[dormir]], [[subir]].
<i>: 'i' whenever stressed (in the present singular and third plural) and throughout the whole present subjunctive.
Otherwise 'e'. E.g. [[progredir]], [[premir]].
<u>: 'u' whenever stressed (in the present singular and third plural) and throughout the whole present subjunctive.
Otherwise 'o'. E.g. [[polir]], [[extorquir]] (the latter also <u-o>).
<í>: The last 'i' of the stem (excluding stem-final 'i') becomes 'í' when stressed. E.g.:
* [[proibir]] ('proíbo, proíbe(s), proíbem, proíba(s), proíbam')
* [[faiscar]] ('faísco, faísca(s), faíscam, faísque(s), faísquem' also with 'c-qu' alternation)
* [[homogeneizar]] ('homogeneízo', etc.)
* [[mobiliar]] ('mobílio', etc.; note here the final -i is ignored when determining which vowel to stress)
* [[tuitar]] ('tuíto', etc.)
<ú>: The last 'u' of the stem (excluding stem-final 'u') becomes 'ú' when stressed. E.g.:
* [[reunir]] ('reúno, reúne(s), reúnem, reúna(s), reúnam')
* [[esmiuçar]] ('esmiúço, esmiúça(s), esmiúça, esmiúce(s), esmiúcem' also with 'ç-c' alternation)
* [[reusar]] ('reúso, reúsa(s), reúsa, reúse(s), reúsem')
* [[saudar]] ('saúdo, saúda(s), saúda, saúde(s), saúdem')
]=]
local vowel_alternants = m_table.listToSet({"i-e", "i", "í", "u-o", "u", "ú", "ei", "+"})
local vowel_alternant_to_desc = {
["i-e"] = "''i-e'' alternation in present singular",
["i"] = "''e'' becomes ''i'' when stressed",
["í"] = "''i'' becomes ''í'' when stressed",
["u-o"] = "''u-o'' alternation in present singular",
["u"] = "''o'' becomes ''u'' when stressed",
["ú"] = "''u'' becomes ''ú'' when stressed",
["ei"] = "''i'' becomes ''ei'' when stressed",
}
local vowel_alternant_to_cat = {
["i-e"] = "i-e alternation in present singular",
["i"] = "e becoming i when stressed",
["í"] = "i becoming í when stressed",
["u-o"] = "u-o alternation in present singular",
["u"] = "o becoming u when stressed",
["ú"] = "u becoming ú when stressed",
["ei"] = "i becoming ei when stressed",
}
local all_persons_numbers = {
["1s"] = "1|s",
["2s"] = "2|s",
["3s"] = "3|s",
["1p"] = "1|p",
["2p"] = "2|p",
["3p"] = "3|p",
}
local person_number_list = {"1s", "2s", "3s", "1p", "2p", "3p"}
local imp_person_number_list = {"2s", "3s", "1p", "2p", "3p"}
local neg_imp_person_number_list = {"2s", "3s", "1p", "2p", "3p"}
person_number_to_reflexive_pronoun = {
["1s"] = "me",
["2s"] = "te",
["3s"] = "se",
["1p"] = "nos",
["2p"] = "vos",
["3p"] = "se",
}
local indicator_flags = m_table.listToSet {
"no_pres_stressed", "no_pres1_and_sub",
"only3s", "only3sp", "only3p",
"pp_inv", "irreg", "no_built_in", "e_ei_cat",
}
-- Remove any variant codes e.g. GL_TYPE, PT_TYPE, ALTVAR. Needs to be called from [[Module:gl-reinteg-headword]] on the
-- output of do_generate_forms(). `keep_altvar` leaves ALTVAR; used in the `canonicalize` function of show_forms()
-- because we then process and remove it in `generate_forms`. FIXME: Use metadata for this once it's supported in
-- [[Module:inflection utilities]].
function export.remove_variant_codes(form, keep_altvar)
return rsub(form, keep_altvar and var_code_no_altvar_c or var_code_c, "")
end
-- Initialize all the slots for which we generate forms.
local function add_slots(alternant_multiword_spec)
-- "Basic" slots: All slots that go into the regular table (not the reflexive form-of table).
alternant_multiword_spec.verb_slots_basic = {
{"infinitive", "inf"},
{"infinitive_linked", "inf"},
{"gerund", "ger"},
{"short_pp_ms", "short|m|s|past|part"},
{"short_pp_fs", "short|f|s|past|part"},
{"short_pp_mp", "short|m|p|past|part"},
{"short_pp_fp", "short|f|p|past|part"},
{"pp_ms", "m|s|past|part"},
{"pp_fs", "f|s|past|part"},
{"pp_mp", "m|p|past|part"},
{"pp_fp", "f|p|past|part"},
}
-- Special slots used to handle non-reflexive parts of reflexive verbs in {{gl-reinteg-verb form of}}. For example,
-- for a reflexive-only verb like [[arrepender-se]], we want to be able to use {{gl-reinteg-verb form of}} on
-- [[arrependa]] (which should mention that it is a part of 'me arrependa', first-person singular present
-- subjunctive, and 'se arrependa', third-person singular present subjunctive) or on [[arrependemos]] (which should
-- mention that it is a part of 'arrependemo-nos', first-person plural present indicative or preterite). Similarly,
-- we want to use {{gl-reinteg-verb form of}} on [[arrependendo]] (which should mention that it is a part of
-- 'se ... arrependendo', syntactic variant of [[arrependendo-se]], which is the gerund of [[arrepender-se]]). To
-- do this, we need to be able to map non-reflexive parts like [[arrependa]], [[arrependemos]], [[arrependendo]],
-- etc. to their reflexive equivalent(s), to the tag(s) of the equivalent(s), and, in the case of forms like
-- [[arrependendo]], [[arrepender]] and imperatives, to the separated syntactic variant of the verb+clitic
-- combination. We do this by creating slots for the non-reflexive part equivalent of each basic reflexive slot,
-- and for the separated syntactic-variant equivalent of each basic reflexive slot that is formed of verb+clitic.
-- We use slots in this way to deal with multiword lemmas. Note that we run into difficulties mapping between
-- reflexive verbs, non-reflexive part equivalents, and separated syntactic variants if a slot contains more than
-- one form. To handle this, if there are the same number of forms in two slots we're trying to match up, we assume
-- the forms match one-to-one; otherwise we don't match up the two slots (which means {{gl-reinteg-verb form of}} won't
-- work in this case, but such a case is extremely rare and not worth worrying about). Alternatives that handle
-- this "properly" are significantly more complicated and require non-trivial modifications to
-- [[Module:inflection utilities]].
local need_special_verb_form_of_slots = alternant_multiword_spec.source_template == "gl-reinteg-verb form of" and
alternant_multiword_spec.refl
if need_special_verb_form_of_slots then
alternant_multiword_spec.verb_slots_reflexive_verb_form_of = {
{"infinitive_non_reflexive", "-"},
{"infinitive_variant", "-"},
{"gerund_non_reflexive", "-"},
{"gerund_variant", "-"},
}
else
alternant_multiword_spec.verb_slots_reflexive_verb_form_of = {}
end
-- Add entries for a slot with person/number variants.
-- `verb_slots` is the table to add to.
-- `slot_prefix` is the prefix of the slot, typically specifying the tense/aspect.
-- `tag_suffix` is a string listing the set of inflection tags to add after the person/number tags.
-- `person_number_list` is a list of the person/number slot suffixes to add to `slot_prefix`.
local function add_personal_slot(verb_slots, slot_prefix, tag_suffix, person_number_list)
for _, persnum in ipairs(person_number_list) do
local persnum_tag = all_persons_numbers[persnum]
local slot = slot_prefix .. "_" .. persnum
local accel = persnum_tag .. "|" .. tag_suffix
table.insert(verb_slots, {slot, accel})
end
end
-- Add a personal slot (i.e. a slot with person/number variants) to `verb_slots_basic`.
local function add_basic_personal_slot(slot_prefix, tag_suffix, person_number_list, no_special_verb_form_of_slot)
add_personal_slot(alternant_multiword_spec.verb_slots_basic, slot_prefix, tag_suffix, person_number_list)
-- Add special slots for handling non-reflexive parts of reflexive verbs in {{gl-reinteg-verb form of}}.
-- See comment above in `need_special_verb_form_of_slots`.
if need_special_verb_form_of_slots and not no_special_verb_form_of_slot then
for _, persnum in ipairs(person_number_list) do
local persnum_tag = all_persons_numbers[persnum]
local basic_slot = slot_prefix .. "_" .. persnum
local accel = persnum_tag .. "|" .. tag_suffix
table.insert(alternant_multiword_spec.verb_slots_reflexive_verb_form_of, {basic_slot .. "_non_reflexive", "-"})
end
end
end
add_basic_personal_slot("pres", "pres|ind", person_number_list)
add_basic_personal_slot("impf", "impf|ind", person_number_list)
add_basic_personal_slot("pret", "pret|ind", person_number_list)
add_basic_personal_slot("plup", "plup|ind", person_number_list)
add_basic_personal_slot("fut", "fut|ind", person_number_list)
add_basic_personal_slot("cond", "cond", person_number_list)
add_basic_personal_slot("pres_sub", "pres|sub", person_number_list)
add_basic_personal_slot("impf_sub", "impf|sub", person_number_list)
add_basic_personal_slot("fut_sub", "fut|sub", person_number_list)
add_basic_personal_slot("imp", "imp", imp_person_number_list)
add_basic_personal_slot("pers_inf", "pers|inf", person_number_list)
-- Don't need special non-reflexive-part slots because the negative imperative is multiword, of which the
-- individual words are 'nom' + subjunctive.
add_basic_personal_slot("neg_imp", "neg|imp", neg_imp_person_number_list, "no special verb form of")
-- Don't need special non-reflexive-part slots because we don't want [[arrependendo]] mapping to [[arrependendo-me]]
-- (only [[arrependendo-se]]) or [[arrepender]] mapping to [[arrepender-me]] (only [[arrepender-se]]).
add_basic_personal_slot("infinitive", "inf", person_number_list, "no special verb form of")
add_basic_personal_slot("gerund", "ger", person_number_list, "no special verb form of")
-- Generate the list of all slots.
alternant_multiword_spec.all_verb_slots = {}
for _, slot_and_accel in ipairs(alternant_multiword_spec.verb_slots_basic) do
table.insert(alternant_multiword_spec.all_verb_slots, slot_and_accel)
end
for _, slot_and_accel in ipairs(alternant_multiword_spec.verb_slots_reflexive_verb_form_of) do
table.insert(alternant_multiword_spec.all_verb_slots, slot_and_accel)
end
alternant_multiword_spec.verb_slots_basic_map = {}
for _, slotaccel in ipairs(alternant_multiword_spec.verb_slots_basic) do
local slot, accel = unpack(slotaccel)
alternant_multiword_spec.verb_slots_basic_map[slot] = accel
end
end
local overridable_stems = {}
local function allow_multiple_values(separated_groups, data)
local retvals = {}
for _, separated_group in ipairs(separated_groups) do
local footnotes = data.fetch_footnotes(separated_group)
local retval = {form = separated_group[1], footnotes = footnotes}
table.insert(retvals, retval)
end
return retvals
end
local function simple_choice(choices)
return function(separated_groups, data)
if #separated_groups > 1 then
data.parse_err("For spec '" .. data.prefix .. ":', only one value currently allowed")
end
if #separated_groups[1] > 1 then
data.parse_err("For spec '" .. data.prefix .. ":', no footnotes currently allowed")
end
local choice = separated_groups[1][1]
if not m_table.contains(choices, choice) then
data.parse_err("For spec '" .. data.prefix .. ":', saw value '" .. choice .. "' but expected one of '" ..
table.concat(choices, ",") .. "'")
end
return choice
end
end
for _, overridable_stem in ipairs {
"pres_unstressed",
"pres_stressed",
"pres1_and_sub",
-- Don't include pres1; use pres_1s if you need to override just that form
"impf",
"full_impf",
{"pret_conj", simple_choice({"irreg", "ar", "er", "ir"}) },
"pret_base",
"pret",
"gl_short_pret",
"pt_pret_1s",
"pt_pret_3s",
"fut",
"cond",
"pres_sub_stressed",
"pres_sub_unstressed",
{"sub_conj", simple_choice({"ar", "er"}) },
"plup",
"impf_sub",
"fut_sub",
"pers_inf",
"pp",
"short_pp",
} do
if type(overridable_stem) == "string" then
overridable_stems[overridable_stem] = allow_multiple_values
else
local stem, validator = unpack(overridable_stem)
overridable_stems[stem] = validator
end
end
-- Useful as the value of the `match` property of a built-in verb. `main_verb_spec` is a Lua pattern that should match
-- the non-prefixed part of a verb, and `prefix_specs` is a list of Lua patterns that should match the prefixed part of
-- a verb. If a prefix spec is preceded by ^, it must match exactly at the beginning of the verb; otherwise, additional
-- prefixes (e.g. re-, des-) may precede. Return the prefix and main verb.
local function match_against_verbs(main_verb_spec, prefix_specs)
return function(verb)
for _, prefix_spec in ipairs(prefix_specs) do
if prefix_spec:find("^%^") then
-- must match exactly
prefix_spec = prefix_spec:gsub("^%^", "")
if prefix_spec == "" then
-- We can't use the second branch of the if-else statement because an empty () returns the current position
-- in rmatch().
local main_verb = rmatch(verb, "^(" .. main_verb_spec .. ")$")
if main_verb then
return "", main_verb
end
else
local prefix, main_verb = rmatch(verb, "^(" .. prefix_spec .. ")(" .. main_verb_spec .. ")$")
if prefix then
return prefix, main_verb
end
end
else
local prefix, main_verb = rmatch(verb, "^(.*" .. prefix_spec .. ")(" .. main_verb_spec .. ")$")
if prefix then
return prefix, main_verb
end
end
end
return nil
end
end
--[=[
Built-in (usually irregular) conjugations.
Each entry is processed in turn and consists of an object with two fields:
1. match=: Specifies the built-in verbs that match this object.
2. forms=: Specifies the built-in stems and forms for these verbs.
The value of match= is either a string beginning with "^" (match only the specified verb), a string not beginning
with "^" (match any verb ending in that string), or a function that is passed in the verb and should return the prefix
of the verb if it matches, otherwise nil. The function match_against_verbs() is provided to facilitate matching a set
of verbs with a common ending and specific prefixes (e.g. [[ter]] and [[ater]] but not [[abater]], etc.).
The value of forms= is a table specifying stems and individual override forms. Each key of the table names either a
stem (e.g. `pres_stressed`), a stem property (e.g. `vowel_alt`) or an individual override form (e.g. `pres_1s`).
Each value of a stem can either be a string (a single stem), a list of strings, or a list of objects of the form
{form = STEM, footnotes = {FOONOTES}}. Each value of an individual override should be of exactly the same form except
that the strings specify full forms rather than stems. The values of a stem property depend on the specific property
but are generally strings or booleans.
In order to understand how the stem specifications work, it's important to understand the phonetic modifications done
by combine_stem_ending(). In general, the complexities of predictable prefix, stem and ending modifications are all
handled in this function. In particular:
1. Spelling-based modifications (c/z, g/gu, gu/gü, g/j) occur automatically as appropriate for the ending.
2. If the stem begins with an acute accent, the accent is moved onto the last vowel of the prefix (for handling verbs
in -uar such as [[minguar]], pres_3s 'míngua').
3. If the ending begins with a double asterisk, this is a signal to conditionally delete the accent on the last letter
of the stem. "Conditionally" means we don't do it if the last two letters would form a diphthong without the accent
on the second one (e.g. in [[sair]], with stem 'saí'); but as an exception, we do delete the accent in stems
ending in -guí, -quí (e.g. in [[conseguir]]) because in this case the ui isn't a diphthong.
4. If the ending begins with an asterisk, this is a signal to delete the accent on the last letter of the stem, e.g.
fizé -> fizermos. Unlike for **, this removal is unconditional, so we get e.g. 'sairmos' not #'saírmos'.
5. If ending begins with i, it must get an accent after an unstressed vowel (in some but not all cases) to prevent the
two merging into a diphthong. See combine_stem_ending() for specifics.
The following stems are recognized:
-- pres_unstressed: The present indicative unstressed stem (1p, 2p). Also controls the imperative 2p
and gerund. Defaults to the infinitive stem (minus the ending -ar/-er/-ir/-or).
-- pres_stressed: The present indicative stressed stem (1s, 2s, 3s, 3p). Also controls the imperative 2s.
Default is empty if indicator `no_pres_stressed`, else a vowel alternation if such an indicator is given
(e.g. `ue`, `ì`), else the infinitive stem.
-- pres1_and_sub: Overriding stem for 1s present indicative and the entire subjunctive. Only set by irregular verbs
and by the indicators `no_pres_stressed` (e.g. [[precaver]]) and `no_pres1_and_sub` (since verbs of this sort,
e.g. [[puir]], are missing the entire subjunctive as well as the 1s present indicative). Used by many irregular
verbs, e.g. [[caber]], verbs in '-air', [[dizer]], [[ter]], [[valer]], etc. Some verbs set this and then supply an
override for the pres_1sg if it's irregular, e.g. [[saber]], with irregular subjunctive stem "saib-" and special
1s present indicative "sei".
-- pres1: Special stem for 1s present indicative. Normally, do not set this explicitly. If you need to specify an
irregular 1s present indicative, use the form override pres_1s= to specify the entire form. Defaults to
pres1_and_sub if given, else pres_stressed.
-- pres_sub_unstressed: The present subjunctive unstressed stem (1p, 2p). Defaults to pres1_and_sub if given, else the
infinitive stem.
-- pres_sub_stressed: The present subjunctive stressed stem (1s, 2s, 3s, 1p). Defaults to pres1.
-- sub_conj: Determines the set of endings used in the subjunctive. Should be one of "ar" or "er".
-- impf: The imperfect stem (not including the -av-/-i- stem suffix, which is determined by the conjugation). Defaults
to the infinitive stem.
-- full_impf: The full imperfect stem missing only the endings (-a, -as, -am, etc.). Used for verbs with irregular
imperfects such as [[ser]], [[ter]], [[vir]] and [[pôr]]. Needs to include an accent on the stressed vowel, which
will automatically be removed when not needed.
-- pret_conj: Determines the set of endings used in the preterite. Should be one of "ar", "er", "ir" or "irreg".
Defaults to the conjugation as determined from the infinitive. When pret_conj == "irreg", `pret` is used, otherwise
`pret_base`.
-- pret_base: The preterite stem (not including the -a-/-e-/-i- stem suffix). Defaults to the infinitive stem.
Only used when pret_conj ~= "irreg".
-- pret: The full preterite stem missing only the endings (-ste, -mos, etc.). Needs to include the accent on the final
vowel that occurs in some forms, e.g. 'figé' for [[fazer]], 'fô' for [[ser]]; the accent will automatically be
removed when not needed. Only used for verbs with irregular preterites (pret_conj == "irreg") such as [[fazer]],
[[poder]], [[trazer]], etc. The pret_1s and pret_3s are handled using the gl_short_pret stem instead for
"Galician"-ending forms (pret_1s '-em', pret_3s '-o') and using pt_pret_1s and pt_pret_3s for "Portuguese"-ending
forms. Defaults to `pret_base` + the accented conjugation vowel.
-- gl_short_pret: The short preterite stem, used with "Galician" 1s and 3s endings (pret_1s '-em', pret_3s '-o'). Only
used with irregular preterites (pret_conj == "irreg"). Normally derived from gl_pret by deleting the final vowel,
and doesn't need to be given explicitly.
-- pt_pret_1s: The "Portuguese" pret_1s form. In addition to this, the "Galician" pret_1s form will be included, formed
from gl_short_pret by adding '-em'. Does not need to be given if an override for pret_1s is supplied.
-- pt_pret_3s: The "Portuguese" pret_3s form. In addition to this, the "Galician" pret_3s form will be included, formed
from gl_short_pret by adding '-o' (which may cause the preceding consonant to shift to preserve the sound). Does
not need to be given if an override for pret_3s is supplied.
-- fut: The future stem. Defaults to the infinitive stem + the unaccented conjugation vowel.
-- cond: The conditional stem. Defaults to `fut`.
-- impf_sub: The imperfect subjunctive stem. Needs to include the accent on the final vowel that occurs in some forms;
see `pret` for more information. Defaults to `pret`.
-- fut_sub: The future subjunctive stem. Needs to include the accent on the final vowel that occurs in some forms; see
`gl_pret` for more information. Defaults to the merger of `gl_pret` and `pt_pret`.
-- plup: The pluperfect stem. Needs to include the accent on the final vowel that occurs in some forms; see `pret` for
more information. Defaults to `pret`.
-- pers_inf: The personal infinitive stem. Defaults to the infinitive stem + the accented conjugation vowel.
-- pp: The masculine singular past participle. Default is based on the verb conjugation: infinitive stem + '-ado' for
-ar verbs, otherwise infinitive stem + '-ido'.
-- short_pp: The short masculine singular past participle, for verbs with such a form. No default.
-- pp_inv: `true` if the past participle exists only in the masculine singular.
]=]
local built_in_conjugations = {
--------------------------------------------------------------------------------------------
-- -ar --
--------------------------------------------------------------------------------------------
-- Verbs not needing entries here:
--
-- (1) Verbs with short past participles: need to specify the short pp explicitly.
--
-- aceitar: use <short_pp:aceite>
-- anexar, completar, expressar, expulsar, findar, fritar, ganhar, gastar, limpar, pagar, pasmar, pegar, soltar:
-- use <short_pp:anexo> etc.
-- assentar: use <short_pp:assente>
-- entregar: use <short_pp:entregue>
-- enxugar: use <short_pp:enxuto>
-- matar: use <short_pp:morto>
--
-- (2) Verbs with orthographic consonant alternations: handled automatically.
--
-- -car (brincar, buscar, pecar, trancar, etc.): automatically handled in combine_stem_ending()
-- -çar (alcançar, começar, laçar): automatically handled in combine_stem_ending()
-- -gar (apagar, cegar, esmagar, largar, navegar, resmungar, sugar, etc.): automatically handled in combine_stem_ending()
--
-- (3) Verbs with vowel alternations: need to specify the alternation explicitly unless it always happens, in
-- which case it's handled automatically through an entry below.
--
-- esmiuçar changing to esmiúço: use <ú>
-- faiscar changing to faísco: use <í>
-- -iar changing to -eio (ansiar, incendiar, mediar, odiar, remediar, etc.): use <ei>
-- -izar changing to -ízo (ajuizar, enraizar, homogeneizar, plebeizar, etc.): use <í>
-- mobiliar changing to mobílio: use <í>
-- reusar changing to reúso: use <ú>
-- saudar changing to saúdo: use <ú>
-- tuitar/retuitar changing to (re)tuíto: use <í>
{
-- dar, desdar
match = match_against_verbs("dar", {"^", "^des", "^re"}),
forms = {
pres_1s = "dou",
pres_2s = "dás",
pres_3s = "dá",
-- damos, dades/dais regular
pres_3p = {GL_TYPE .. "dam", PT_TYPE .. "dão"},
pret_conj = "irreg", pret = "dé", pret_1s = "dei", pret_3s = "deu",
pres_sub_1s = "dê",
pres_sub_2s = "dês",
pres_sub_3s = "dê",
-- demos, dedes/deis regular
pres_sub_3p = {GL_TYPE .. "dem", PT_TYPE .. "deem"},
irreg = true,
}
},
{
-- -ear (frear, nomear, semear, etc.)
match = "ear",
forms = {
pres_stressed = {"ei", GL_ALTVAR .. "e"},
e_ei_cat = true,
}
},
{
-- estar
match = match_against_verbs("estar", {"^", "sob", "sobr"}),
forms = {
pres_1s = "estou",
pres_2s = "estás",
pres_3s = "está",
pres_3p = {GL_TYPE .. "estám", PT_TYPE .. "estão"},
pres1_and_sub = "estej", -- only for subjunctive as we override pres_1s
sub_conj = "er",
pret_conj = "irreg", pret = "estivé", pt_pret_1s = "estive", pt_pret_3s = "esteve",
-- [[sobestar]], [[sobrestar]] are transitive so they have fully inflected past participles
pp_inv = function(base, prefix) return prefix == "" end,
irreg = true,
}
},
--------------------------------------------------------------------------------------------
-- -er --
--------------------------------------------------------------------------------------------
-- Verbs not needing entries here:
--
-- precaver: use <no_pres_stressed>
-- -cer (verbs in -ecer, descer, vencer, etc.): automatically handled in combine_stem_ending()
-- -ger (proteger, reger, etc.): automatically handled in combine_stem_ending()
-- -guer (erguer/reerguer/soerguer): automatically handled in combine_stem_ending()
{
-- benzer
match = "benzer",
forms = {short_pp = "bento"}
},
{
-- caber
match = "caber",
forms = {
pres1_and_sub = "caib",
pret_conj = "irreg", pret = "coubé", pt_pret_1s = "coube", pt_pret_3s = "coube",
irreg = true,
}
},
{
-- crer, descrer
match = "crer",
forms = {
pres_2s = "crês", pres_3s = "crê",
pres_2p = "credes", pres_3p = {GL_TYPE .. "crem", PT_TYPE .. "creem"},
pres1_and_sub = {"crei", GL_ALTVAR .. "cre"},
irreg = true,
}
},
{
-- dizer, bendizer, condizer, contradizer, desdizer, maldizer, predizer, etc.
match = "dizer",
forms = {
-- use 'digu' because we're in a front environment; if we use 'dig', we'll get '#dijo'
pres1_and_sub = "digu",
pres_2s = {GL_TYPE .. "dis", PT_TYPE .. "dizes"},
pres_3s = {GL_TYPE .. "di", PT_TYPE .. "diz"},
pres_3p = {GL_TYPE .. "dim", PT_TYPE .. "dizem"},
pret_conj = "irreg", pret = {GL_TYPE .. "dixé", PT_TYPE .. "dissé"},
pt_pret_1s = "disse", pt_pret_3s = "disse",
pp = "dito",
fut = "dir",
irreg = true,
}
},
{
-- eleger, reeleger
match = "eleger",
forms = {short_pp = "eleito"}
},
{
-- acender, prender; not desprender, etc.
match = match_against_verbs("ender", {"^ac", "^pr"}),
forms = {short_pp = "eso"}
},
{
-- fazer, afazer, contrafazer, desfazer, liquefazer, perfazer, putrefazer, rarefazer, refazer, satisfazer, tumefazer
match = "fazer",
forms = {
-- use 'fagu' because we're in a front environment; if we use 'fag', we'll get '#fajo'
pres1_and_sub = {GL_TYPE .. "fagu", PT_TYPE .. "faç"},
pres_2s = {GL_TYPE .. "fás", PT_TYPE .. "fazes"},
pres_3s = {GL_TYPE .. "fai", PT_TYPE .. "faz"},
pres_3p = {GL_TYPE .. "fam", PT_TYPE .. "fazem"},
pret_conj = "irreg", pret = {GL_TYPE .. "figé", PT_TYPE .. "fizé", GL_ONLY_ALTVAR .. "fizé"},
pt_pret_1s = "fiz", pt_pret_3s = "fez",
pp = "feito",
fut = "far",
irreg = true,
}
},
{
match = "^haver",
forms = {
pres_1s = "hei",
pres_2s = "hás",
pres_3s = {"há", {form = GL_ALTVAR .. "hai", footnotes = {"[also impersonal]"}}},
pres_3p = {GL_TYPE .. "ham", PT_TYPE .. "hão"},
pres1_and_sub = "haj", -- only for subjunctive as we override pres_1s
pret_conj = "irreg", pret = "houvé", pt_pret_1s = "houve", pt_pret_3s = "houve",
imp_2s = "há",
irreg = true,
}
},
-- reaver below under r-
{
-- jazer, adjazer
match = "jazer",
forms = {
pres_3s = "jaz",
irreg = true,
}
},
{
-- ler, reler, tresler; not excel(l)er, valer, etc.
match = match_against_verbs("ler", {"^", "^re", "tres"}),
forms = {
pres_2s = "lês", pres_3s = "lê",
pres_2p = "ledes", pres_3p = {GL_TYPE .. "lem", PT_TYPE .. "leem"},
pres1_and_sub = {"lei", GL_ALTVAR .. "le"},
irreg = true,
}
},
{
-- morrer, desmorrer
match = "morrer",
forms = {short_pp = "morto"}
},
{
-- moer, but not remoer
match = "^moer",
forms = {
pres_2s = "móis", pres_3s = "mói",
-- impf -ía etc., pret_1s -oí and pp -oído handled automatically in combine_stem_ending()
pres1_and_sub = {"mo", GL_ALTVAR .. "moi"},
short_pp = "mudo",
irreg = true,
}
},
{
-- doer, remoer, roer/corroer, soer
match = "oer",
forms = {
pres_2s = "óis", pres_3s = "ói",
-- impf -ía etc., pret_1s -oí and pp -oído handled automatically in combine_stem_ending()
pres1_and_sub = {"o", GL_ALTVAR .. "oi"},
irreg = true,
}
},
{
-- perder
match = "perder",
forms = {
-- use 'perqu' because we're in a front environment; if we use 'perc', we'll get '#perço'
-- we don't tag these forms GL_TYPE or PT_TYPE because both occur with both endings -ais/-ades
pres1_and_sub = {"perd", "perqu"},
irreg = true,
}
},
{
-- poder
match = "poder",
forms = {
pres1_and_sub = {GL_TYPE .. "pod", PT_TYPE .. "poss"},
pret_conj = "irreg", pret = "pudé", pt_pret_1s = "pude", pt_pret_3s = "pôde",
irreg = true,
}
},
{
-- prazer, aprazer, comprazer, desprazer
-- FIXME: comprazer also has regular preterite
match = "prazer",
forms = {
pres_3s = "praz",
pret_conj = "irreg", pret = "prouvé", pt_pret_1s = "prouve", pt_pret_3s = "prouve",
only3sp = function(base, prefix) return prefix == "a" end,
imp_2s = {GL_TYPE .. "praze", PT_TYPE .. "praz"},
irreg = true,
}
},
-- prover below, just below ver
{
-- requerer; must precede querer
match = "requerer",
forms = {
pres_3s = "requer",
pres1_and_sub = "requeir",
imp_2s = {"requer"},
-- regular preterite, unlike [[querer]]
irreg = true,
}
},
{
-- querer, desquerer, malquerer
match = "querer",
forms = {
pres_1s = "quero", pres_3s = "quer",
pres1_and_sub = "queir", -- only for subjunctive as we override pres_1s
pret_conj = "irreg", pret = {GL_TYPE .. "quigé", PT_TYPE .. "quisé"},
pt_pret_1s = "quis", pt_pret_3s = "quis",
irreg = true,
}
},
{
match = "reaver",
forms = {
pres_1s = "reei",
pres_2s = "reás",
pres_3s = "reá",
pres_3p = {GL_TYPE .. "ream", PT_TYPE .. "reão"},
pres1_and_sub = "reaj", -- only for subjunctive as we override pres_1s
pret_conj = "irreg", pret = "reouvé", pt_pret_1s = "reouve", pt_pret_3s = "reouve",
irreg = true,
}
},
{
-- saber, ressaber
match = "saber",
forms = {
pres_1s = "sei",
pres1_and_sub = "saib", -- only for subjunctive as we override pres_1s
pret_conj = "irreg", pret = "soubé", pt_pret_1s = "soube", pt_pret_3s = "soube",
irreg = true,
}
},
{
-- escrever/reescrever, circunscrever, descrever/redescrever, inscrever, prescrever, proscrever, subscrever,
-- transcrever, others?
match = "screver",
forms = {
pp = "scrito",
irreg = true,
}
},
{
-- suspender
match = "suspender",
forms = {short_pp = "suspenso"}
},
{
match = "^ser",
forms = {
pres_1s = "sou", pres_2s = "és", pres_3s = "é",
pres_1p = "somos", pres_2p = {GL_TYPE .. "sodes", PT_TYPE .. "sois"},
pres_3p = {GL_TYPE .. "som", PT_TYPE .. "são"},
pres1_and_sub = "sej", -- only for subjunctive as we override pres_1s
full_impf = "ér",
pret_conj = "irreg", pret = "fô", pret_1s = {GL_TYPE .. "fum", PT_TYPE .. "fui"}, pret_3s = "foi",
imp_2s = "sê", imp_2p = "sede",
pp_inv = true,
irreg = true,
}
},
{
-- We want to match abster, conter, deter, etc. but not abater, cometer, etc. No way to avoid listing each verb.
match = match_against_verbs("ter", {"abs", "^a", "con", "de", "entre", "man", "ob", "^re", "sus", "^"}),
forms = {
-- FIXME, Estraviz says 'contens', 'detens' etc. but that may be a typo
pres_2s = function(base, prefix) return {GL_TYPE .. "tés", PT_TYPE .. (prefix == "" and "tens" or "téns")} end,
-- FIXME, Estraviz says 'contem', 'detem' etc. but that may be a typo
pres_3s = function(base, prefix) return prefix == "" and "tem" or "tém" end,
pres_2p = "tendes", pres_3p = {GL_TYPE .. "tenhem", PT_TYPE .. "têm", GL_ALTVAR .. "tém"},
pres1_and_sub = "tenh",
full_impf = "tính",
pret_conj = "irreg", pret = "tivé", pt_pret_1s = "tive", pt_pret_3s = "teve",
irreg = true,
}
},
{
match = "trazer",
forms = {
-- use 'tragu' because we're in a front environment; if we use 'trag', we'll get '#trajo'
pres1_and_sub = "tragu", pres_3s = "traz",
pret_conj = "irreg", pret = "trouxé", pt_pret_1s = "trouxe", pt_pret_3s = "trouxe",
fut = "trar",
irreg = true,
}
},
{
match = "traguer",
forms = {
pret_conj = "irreg", pret = "trouxé", pt_pret_1s = "trouxe", pt_pret_3s = "trouxe",
irreg = true,
}
},
{
-- valer, desvaler, equivaler
match = "valer",
forms = {
pres1_and_sub = "valh",
irreg = true,
}
},
{
-- We want to match antever etc. but not absolver, atrever etc. No way to avoid listing each verb.
match = match_against_verbs("ver", {"ante", "entre", "pre", "^re", "^"}),
forms = {
pres_2s = "vês", pres_3s = "vê",
pres_2p = "vedes",
pres_3p = function(base, prefix) return {GL_TYPE .. (prefix == "" and "vem" or "vêm"), PT_TYPE .. "veem"} end,
pres1_and_sub = "vej",
pret_conj = "irreg", pret = "ví", pret_1s = {GL_TYPE .. "vim", PT_TYPE .. "vi"}, pret_3s = "viu",
pp = "visto",
irreg = true,
}
},
{
-- [[prover]] and [[desprover]] have regular preterite and past participle
match = "prover",
forms = {
pres_2s = "provês", pres_3s = "provê",
-- FIXME: Estraviz says 'provem' but that may be a typo
pres_2p = "provedes", pres_3p = {GL_TYPE .. "provêm", PT_TYPE .. "proveem"},
pres1_and_sub = "provej",
irreg = true,
}
},
{
-- volver, devolver, envolver, revolver, etc.
match = "volver",
forms = {short_pp = "volto"},
},
--------------------------------------------------------------------------------------------
-- -ir --
--------------------------------------------------------------------------------------------
-- Verbs not needing entries here:
--
-- abolir: use <u-o>
-- barrir: use <only3sp>
-- carpir, colorir, demolir: use <no_pres1_and_sub>
-- descolorir: use <no_pres1_and_sub>
-- delir, espavorir, falir, florir, remir, renhir: use <no_pres_stressed>
-- empedernir: use <i-e>
-- transir: regular
-- aspergir, despir, flectir/deflectir/genuflectir/genufletir/reflectir/refletir, mentir/desmentir,
-- sentir/assentir/consentir/dissentir/pressentir/ressentir, convergir/divergir, aderir/adherir,
-- ferir/auferir/conferir/deferir/desferir/diferir/differir/inferir/interferir/preferir/proferir/referir/transferir,
-- gerir/digerir/ingerir/sugerir, preterir, competir/repetir, servir, advertir/animadvertir/divertir,
-- vestir/investir/revestir/travestir, seguir/conseguir/desconseguir/desseguir/perseguir/prosseguir: use <i-e>
-- inerir: use <i-e>
-- compelir/expelir/impelir/repelir: use <i-e>
-- dormir, engolir, tossir, subir, acudir/sacudir, fugir, sumir/consumir (NOT assumir/presumir/resumir): use <u-o>
-- polir/repolir: use <u>
-- premir: use <i>
-- extorquir/retorquir: <u-o,u>
-- agredir/progredir/regredir/transgredir: use <i>
-- denegrir, prevenir: use <i>
-- eclodir: use <u-o>
-- cerzir: use <i-e>
-- proibir/coibir: use <í>
-- reunir: use <ú>
-- parir/malparir: use <no_pres_stressed>
-- explodir/implodir: use <u-o>
--
-- -cir alternations (aducir, ressarcir): automatically handled in combine_stem_ending()
-- -gir alternations (agir, dirigir, exigir): automatically handled in combine_stem_ending()
-- -guir alternations (e.g. conseguir): automatically handled in combine_stem_ending()
-- -quir alternations (e.g. extorquir): automatically handled in combine_stem_ending()
{
-- verbs in -air (cair, sair, trair and derivatives: decair/descair/recair, sobres(s)air,
-- abstrair/atrair/contrair/distrair/extrair/protrair/retrair/subtrair)
match = "air",
forms = {
pres1_and_sub = "ai", pres_2s = "ais", pres_3s = "ai",
-- all occurrences of accented í in endings handled in combine_stem_ending()
irreg = true,
}
},
{
-- abrir/desabrir/reabrir
match = "abrir",
forms = {pp = "aberto"}
},
{
-- cobrir/descobrir/encobrir/recobrir/redescobrir
match = "cobrir",
forms = {vowel_alt = "u-o", pp = "coberto"}
},
{
-- conduzir, produzir, reduzir, traduzir, etc.; luzir, reluzir, tremeluzir
match = "uzir",
forms = {
pres_3s = "uz",
-- FIXME, is this correct?
imp_2s = "uze",
irreg = true,
}
},
{
-- pedir, desimpedir, despedir, espedir, expedir, impedir
-- medir
-- comedir
match = match_against_verbs("edir", {"m", "p"}),
forms = {
pres1_and_sub = {GL_TYPE .. "id", PT_TYPE .. "eç"},
irreg = true,
}
},
{
-- frigir
match = "frigir",
forms = {vowel_alt = "i-e", short_pp = "frito"},
},
{
-- inserir
match = "inserir",
forms = {vowel_alt = "i-e"},
},
{
-- ir
match = "^ir",
forms = {
pres_1s = "vou", pres_2s = {GL_TYPE .. "vás", PT_TYPE .. "vais"}, pres_3s = "vai",
pres_1p = {GL_TYPE .. "imos", PT_TYPE .. "vamos"}, pres_2p = "ides",
pres_3p = {GL_TYPE .. "vam", PT_TYPE .. "vão"},
pres_sub_1s = {GL_TYPE .. "vaia", PT_TYPE .. "vá"},
pres_sub_2s = {GL_TYPE .. "vaias", PT_TYPE .. "vás"},
pres_sub_3s = {GL_TYPE .. "vaia", PT_TYPE .. "vá"},
pres_sub_1p = {GL_TYPE .. "vaiamos", PT_TYPE .. "vamos"},
pres_sub_2p = {GL_TYPE .. "vaiades", PT_TYPE .. "vades"},
pres_sub_3p = {GL_TYPE .. "vaiam", PT_TYPE .. "vão"},
pret_conj = "irreg", pret = "fô", pret_1s = {GL_TYPE .. "fum", PT_TYPE .. "fui"}, pret_3s = "foi",
irreg = true,
}
},
{
-- emergir, imergir, submergir
match = "mergir",
forms = {vowel_alt = "i-e", short_pp = "merso"},
},
{
match = "ouvir",
forms = {
pres1_and_sub = {"ouç", ALTVAR .. "oiç"},
irreg = true,
}
},
{
-- exprimir, imprimir, comprimir (but not descomprimir per Priberam), deprimir, oprimir/opprimir (but not reprimir,
-- suprimir/supprimir per Priberam)
match = match_against_verbs("primir", {"^com", "ex", "im", "de", "^o", "op"}),
forms = {short_pp = "presso"}
},
{
-- rir, sorrir
match = match_against_verbs("rir", {"^", "sor"}),
forms = {
pres_2s = "ris", pres_3s = "ri", pres_2p = "rides", pres_3p = {GL_TYPE .. "rim", PT_TYPE .. "riem"},
pres1_and_sub = "ri",
irreg = true,
}
},
{
-- distinguir, extinguir
match = "tinguir",
forms = {
short_pp = "tinto",
-- gu/g alternations handled in combine_stem_ending()
}
},
{
-- verbs in -truir (construir, destruir, reconstruir) but not obstruir/desobstruir, instruir, which are handled
-- by the default -uir handler below
match = match_against_verbs("struir", {"con", "de"}),
forms = {
pres_2s = {"stróis", ALTVAR .. "struis"}, pres_3s = {"strói", ALTVAR .. "strui"},
pres_3p = {"stroem", ALTVAR .. "struem"},
-- all occurrences of accented í in endings handled in combine_stem_ending()
irreg = true,
}
},
{
-- remaining verbs in -uir (concluir/excluir/incluir/concruir/concruyr, abluir/diluir, afluir/fluir/influir,
-- aluir, anuir, atribuir/contribuir/distribuir/redistribuir/retribuir/substituir, coevoluir/evoluir,
-- constituir/destituir/instituir/reconstituir/restituir, derruir, diminuir, estatuir, fruir/usufruir, imbuir,
-- imiscuir, poluir, possuir, puir, pruir, ruir
-- FIXME: old module lists short pp incluso for incluir that can't be verified, ask about this
-- FIXME: handle -uyr verbs?
match = function(verb)
-- Don't match -guir verbs (e.g. [[seguir]], [[conseguir]]) or -quir verbs (e.g. [[extorquir]])
if verb:find("guir$") or verb:find("quir$") then
return nil
else
return match_against_verbs("uir", {""})(verb)
end
end,
forms = {
pres_2s = "uis", pres_3s = "ui",
-- all occurrences of accented í in endings handled in combine_stem_ending()
irreg = true,
}
},
{
-- We want to match advir, convir, devir, etc. but not ouvir, servir, etc. No way to avoid listing each verb.
match = match_against_verbs("vir", {"ad", "^a", "con", "contra", "de", "^desa", "inter", "pro", "^re", "sobre", "^"}),
forms = {
-- FIXME, Estraviz says 'convens', 'devens' etc. but that may be a typo
pres_2s = function(base, prefix) return {GL_TYPE .. "vés", PT_TYPE .. (prefix == "" and "vens" or "véns")} end,
-- FIXME, Estraviz says 'convem', 'devem' etc. but that may be a typo
pres_3s = function(base, prefix) return prefix == "" and "vem" or "vém" end,
pres_2p = "vindes", pres_3p = {GL_TYPE .. "venhem", PT_TYPE .. "vêm", GL_ALTVAR .. "vém"},
pres1_and_sub = "venh",
full_impf = "vính",
pret_conj = "irreg", pret = {GL_TYPE .. "vinhé", PT_TYPE .. "vié"},
pret_1s = "vim", pret_3s = {GL_TYPE .. "véu", PT_TYPE .. "veio"},
pp = "vindo",
irreg = true,
}
},
--------------------------------------------------------------------------------------------
-- misc --
--------------------------------------------------------------------------------------------
{
-- pôr, antepor, apor, compor/decompor/descompor, contrapor, depor, dispor, expor, impor, interpor, justapor,
-- opor, pospor, propor, repor, sobrepor, supor/pressupor, transpor, decompor, others?
match = "p[oô]r",
forms = {
pres1_and_sub = "ponh",
pres_2s = {GL_TYPE .. "pós", PT_TYPE .. "pões", GL_ALTVAR .. "pons"},
pres_3s = {GL_TYPE .. "pom", PT_TYPE .. "põe"},
pres_1p = "pomos", pres_2p = "pondes",
pres_3p = {GL_TYPE .. "ponhem", PT_TYPE .. "põem", GL_ALTVAR .. "póm"},
full_impf = "púnh",
pret_conj = "irreg", pret = {GL_TYPE .. "pugé", PT_TYPE .. "pusé"}, pt_pret_1s = "pus", pt_pret_3s = "pôs",
pers_inf = "po",
gerund = "pondo", pp = "posto",
irreg = true,
}
},
}
local function skip_slot(base, slot, allow_overrides)
if not allow_overrides and (base.basic_overrides[slot] or
base.refl and base.basic_reflexive_only_overrides[slot]) then
-- Skip any slots for which there are overrides.
return true
end
if base.only3s and (slot:find("^pp_f") or slot:find("^pp_mp")) then
-- diluviar, atardecer, neviscar; impersonal verbs have only masc sing pp
return true
end
if not slot:find("[123]") then
-- Don't skip non-personal slots.
return false
end
if base.nofinite then
return true
end
if (base.only3s or base.only3sp or base.only3p) and (slot:find("^imp_") or slot:find("^neg_imp_")) then
return true
end
if base.only3s and not slot:find("3s") then
-- diluviar, atardecer, neviscar
return true
end
if base.only3sp and not slot:find("3[sp]") then
-- atañer, concernir
return true
end
if base.only3p and not slot:find("3p") then
-- [[caer cuatro gotas]], [[caer chuzos de punta]], [[entrarle los siete males]]
return true
end
return false
end
-- Apply vowel alternations to stem.
local function apply_vowel_alternations(stem, alternations)
local alternation_stems = {}
local saw_pres1_and_sub = false
local saw_pres_stressed = false
-- Process alternations other than +.
for _, altobj in ipairs(alternations) do
local alt = altobj.form
local pres1_and_sub, pres_stressed, err
-- Treat final -gu, -qu as a consonant, so the previous vowel can alternate (e.g. conseguir -> consigo).
-- This means a verb in -guar can't have a u-ú alternation but I don't think there are any verbs like that.
stem = rsub(stem, "([gq])u$", "%1" .. TEMPC1)
if alt == "+" then
-- do nothing yet
elseif alt == "ei" then
local before_last_vowel = rmatch(stem, "^(.*)i$")
if not before_last_vowel then
err = "stem should end in -i"
else
pres1_and_sub = nil
pres_stressed = before_last_vowel .. "ei"
end
else
local before_last_vowel, last_vowel, after_last_vowel = rmatch(stem, "^(.*)(" .. V .. ")(.-[ui])$")
if not before_last_vowel then
before_last_vowel, last_vowel, after_last_vowel = rmatch(stem, "^(.*)(" .. V .. ")(.-)$")
end
if alt == "i-e" then
if last_vowel == "e" or last_vowel == "i" then
pres1_and_sub = before_last_vowel .. "i" .. after_last_vowel
if last_vowel == "i" then
pres_stressed = before_last_vowel .. "e" .. after_last_vowel
end
else
err = "should have -e- or -i- as the last vowel"
end
elseif alt == "i" then
if last_vowel == "e" then
pres1_and_sub = before_last_vowel .. "i" .. after_last_vowel
pres_stressed = pres1_and_sub
else
err = "should have -e- as the last vowel"
end
elseif alt == "u-o" then
if last_vowel == "o" or last_vowel == "u" then
pres1_and_sub = before_last_vowel .. "u" .. after_last_vowel
if last_vowel == "u" then
pres_stressed = before_last_vowel .. "o" .. after_last_vowel
end
else
err = "should have -o- or -u- as the last vowel"
end
elseif alt == "u" then
if last_vowel == "o" then
pres1_and_sub = before_last_vowel .. "u" .. after_last_vowel
pres_stressed = pres1_and_sub
else
err = "should have -o- as the last vowel"
end
elseif alt == "í" then
if last_vowel == "i" then
pres_stressed = before_last_vowel .. "í" .. after_last_vowel
else
err = "should have -i- as the last vowel"
end
elseif alt == "ú" then
if last_vowel == "u" then
pres_stressed = before_last_vowel .. "ú" .. after_last_vowel
else
err = "should have -u- as the last vowel"
end
else
error("Internal error: Unrecognized vowel alternation '" .. alt .. "'")
end
end
if pres1_and_sub then
pres1_and_sub = {form = pres1_and_sub:gsub(TEMPC1, "u"), footnotes = altobj.footnotes}
saw_pres1_and_sub = true
end
if pres_stressed then
pres_stressed = {form = pres_stressed:gsub(TEMPC1, "u"), footnotes = altobj.footnotes}
saw_pres_stressed = true
end
table.insert(alternation_stems, {
altobj = altobj,
pres1_and_sub = pres1_and_sub,
pres_stressed = pres_stressed,
err = err
})
end
-- Now do +. We check to see which stems are used by other alternations and specify those so any footnotes are
-- properly attached.
for _, alternation_stem in ipairs(alternation_stems) do
if alternation_stem.altobj.form == "+" then
local stemobj = {form = stem, footnotes = alternation_stem.altobj.footnotes}
alternation_stem.pres1_and_sub = saw_pres1_and_sub and stemobj or nil
alternation_stem.pres_stressed = saw_pres_stressed and stemobj or nil
end
end
return alternation_stems
end
-- Add the `stem` to the `ending` for the given `slot` and apply any phonetic modifications.
-- WARNING: This function is written very carefully; changes to it can easily have unintended consequences.
local function combine_stem_ending(base, slot, prefix, stem, ending, dont_include_prefix)
-- If the stem begins with an acute accent, this is a signal to move the accent onto the last vowel of the prefix.
-- Cf. míngua of minguar.
if stem:find("^" .. AC) then
stem = rsub(stem, "^" .. AC, "")
if dont_include_prefix then
error("Internal error: Can't handle acute accent at beginning of stem if dont_include_prefix is given")
end
prefix = rsub(prefix, "([aeiouyAEIOUY])([^aeiouyAEIOUY]*)$", "%1" .. AC .. "%2")
end
-- Use the full stem for checking for -gui ending and such, because 'stem' is just 'u' for [[arguir]],
-- [[delinquir]].
local full_stem = prefix .. stem
-- Include the prefix in the stem unless dont_include_prefix is given (used for the past participle stem).
if not dont_include_prefix then
stem = full_stem
end
-- If the ending begins with a double asterisk, this is a signal to conditionally delete the accent on the last letter
-- of the stem. "Conditionally" means we don't do it if the last two letters would form a diphthong without the accent
-- on the second one (e.g. in [[sair]], with stem 'saí'); but as an exception, we do delete the accent in stems
-- ending in -guí, -quí (e.g. in [[conseguir]]) because in this case the ui isn't a diphthong.
if ending:find("^%*%*") then
ending = rsub(ending, "^%*%*", "")
if rfind(full_stem, "[gq]uí$") or not rfind(full_stem, V .. "[íú]$") then
stem = com.remove_final_accent(stem)
end
end
-- If the ending begins with an asterisk, this is a signal to delete the accent on the last letter of the stem.
-- E.g. fizé -> fizermos. Unlike for **, this removal is unconditional, so we get e.g. 'sairmos' not #'saírmos'.
if ending:find("^%*") then
ending = rsub(ending, "^%*", "")
stem = com.remove_final_accent(stem)
end
-- If ending begins with i, it must get an accent after an unstressed vowel (in some but not all cases) to prevent
-- the two merging into a diphthong:
-- * cair ->
-- * pres: caímos, caís;
-- * impf: all forms (caí-);
-- * pret: caí (but not caim), caíste (but not caiu), caímos, caístes, caíram;
-- * plup: all forms (caír-);
-- * impf_sub: all forms (caíss-);
-- * fut_sub: caíres, caírem (but not cair, cairmos, cairdes)
-- * pp: caído (but not gerund caindo)
-- * atribuir, other verbs in -uir -> same pattern as for cair etc.
-- * roer ->
-- * pret: roí (but not roim)
-- * impf: all forms (roí-)
-- * pp: roído
-- Don't let variant codes derail the following checks. Note that variant codes are properly added to the end of
-- the ending, so checks against the beginning of the ending work even in their presence, but not checks against
-- the full ending.
local cleaned_ending = export.remove_variant_codes(ending)
if cleaned_ending:find("^i") and full_stem:find("[aeiou]$") and not full_stem:find("[gq]u$") and
not cleaned_ending:find("^i[rum]$") and cleaned_ending ~= "indo" and not cleaned_ending:find("^ir[md]") then
ending = ending:gsub("^i", "í")
end
-- Spelling changes in the stem; it depends on whether the stem given is the pre-front-vowel or
-- pre-back-vowel variant, as indicated by `frontback`. We want these front-back spelling changes to happen
-- between stem and ending, not between prefix and stem; the prefix may not have the same "front/backness"
-- as the stem.
local is_front = rfind(ending, "^[eiéíê]")
if base.frontback == "front" and not is_front then
stem = stem:gsub("c$", "ç") -- conhecer -> conheço, vencer -> venço, descer -> desço
stem = stem:gsub("g$", "j") -- proteger -> protejo, fugir -> fujo
stem = stem:gsub("gu$", "g") -- distinguir -> distingo, conseguir -> consigo
stem = stem:gsub("qu$", "c") -- extorquir -> exturco
stem = stem:gsub("([gq])ü$", "%1u") -- argüir (superseded) -> arguo, delinqüir (superseded) -> delinquo
elseif base.frontback == "back" and is_front then
-- The following changes are all superseded so we don't do them:
-- averiguar -> averigüei, minguar -> mingüei; antiquar -> antiqüei, apropinquar -> apropinqüei
-- stem = stem:gsub("([gq])u$", "%1ü")
stem = stem:gsub("g$", "gu") -- cargar -> carguei, apagar -> apaguei
stem = stem:gsub("c$", "qu") -- marcar -> marquei
stem = stem:gsub("ç$", "c") -- começar -> comecei
-- j does not go to g here; desejar -> deseje not #desege
end
local retval = stem .. ending
if retval:find(GL_TYPE) and retval:find(PT_TYPE) or retval:find(GL_ONLY_TYPE) and not retval:find(GL_TYPE) then
-- Reject clashes in "Galician"-type and "Portuguese"-type forms, e.g. '#vós dixéreis' or '#vós dissérades'.
return nil
end
return retval
end
local function add3(base, slot, stems, endings, footnotes, allow_overrides)
if skip_slot(base, slot, allow_overrides) then
return
end
local function do_combine_stem_ending(stem, ending)
return combine_stem_ending(base, slot, base.prefix, stem, ending)
end
iut.add_forms(base.forms, slot, stems, endings, do_combine_stem_ending, nil, nil, footnotes)
end
local function insert_form(base, slot, form)
if not skip_slot(base, slot) then
iut.insert_form(base.forms, slot, form)
end
end
local function insert_forms(base, slot, forms)
if not skip_slot(base, slot) then
iut.insert_forms(base.forms, slot, forms)
end
end
local function add_single_stem_tense(base, slot_pref, stems, s1, s2, s3, p1, p2, p3)
local function addit(slot, ending)
add3(base, slot_pref .. "_" .. slot, stems, ending)
end
addit("1s", s1)
addit("2s", s2)
addit("3s", s3)
addit("1p", p1)
addit("2p", p2)
addit("3p", p3)
end
local function construct_stems(base, vowel_alt)
local stems = {}
stems.pres_unstressed = base.stems.pres_unstressed or base.inf_stem
stems.pres_stressed =
-- If no_pres_stressed given, pres_stressed stem should be empty so no forms are generated.
base.no_pres_stressed and {} or
base.stems.pres_stressed or
vowel_alt.pres_stressed or
base.inf_stem
stems.pres1_and_sub =
-- If no_pres_stressed given, the entire subjunctive is missing.
base.no_pres_stressed and {} or
-- If no_pres1_and_sub given, pres1 and entire subjunctive are missing.
base.no_pres1_and_sub and {} or
base.stems.pres1_and_sub or
vowel_alt.pres1_and_sub or
nil
stems.pres1 = base.stems.pres1 or stems.pres1_and_sub or stems.pres_stressed
stems.impf = base.stems.impf or base.inf_stem
stems.full_impf = base.stems.full_impf
stems.pret_base = base.stems.pret_base or base.inf_stem
stems.pret_conj = base.stems.pret_conj or base.conj
stems.pret = base.stems.pret or iut.map_forms(iut.convert_to_general_list_form(stems.pret_base),
function(form) return form .. base.conj_vowel end)
stems.gl_short_pret = base.stems.gl_short_pret or iut.map_forms(iut.convert_to_general_list_form(stems.pret),
function(form) return rsub(form, com.V .. "$", "") end)
stems.pt_pret_1s = base.stems.pt_pret_1s
stems.pt_pret_3s = base.stems.pt_pret_3s
stems.fut = base.stems.fut or base.inf_stem .. base.conj
stems.cond = base.stems.cond or stems.fut
stems.pres_sub_stressed = base.stems.pres_sub_stressed or stems.pres1
stems.pres_sub_unstressed = base.stems.pres_sub_unstressed or stems.pres1_and_sub or stems.pres_unstressed
stems.sub_conj = base.stems.sub_conj or base.conj
stems.plup = base.stems.plup or stems.pret
stems.impf_sub = base.stems.impf_sub or stems.pret
stems.fut_sub = base.stems.fut_sub or stems.pret
stems.pers_inf = base.stems.pers_inf or base.inf_stem .. base.conj_vowel
stems.pp = base.stems.pp or base.conj == "ar" and
combine_stem_ending(base, "pp_ms", base.prefix, base.inf_stem, "ado", "dont include prefix") or
-- use combine_stem_ending esp. so we get roído, caído, etc.
combine_stem_ending(base, "pp_ms", base.prefix, base.inf_stem, "ido", "dont include prefix")
stems.pp_ms = stems.pp
local function masc_to_fem(form)
if rfind(form, "o$") then
return rsub(form, "o$", "a")
else
return form
end
end
stems.pp_fs = iut.map_forms(iut.convert_to_general_list_form(stems.pp_ms), masc_to_fem)
if base.stems.short_pp then
stems.short_pp_ms = base.stems.short_pp
stems.short_pp_fs = iut.map_forms(iut.convert_to_general_list_form(stems.short_pp_ms), masc_to_fem)
end
base.this_stems = stems
end
local function add_present_indic(base)
local stems = base.this_stems
local function addit(slot, stems, ending)
add3(base, "pres_" .. slot, stems, ending)
end
local s2, s3, p1, p2, p3
if base.conj == "ar" then
s2, s3, p1, p2, p3 = "as", "a", "amos", {"ades" .. GL_TYPE, "ais" .. PT_TYPE}, "am"
elseif base.conj == "er" or base.conj == "or" then -- verbs in -por have the present overridden
s2, s3, p1, p2, p3 = "es", "e", "emos", {"edes" .. GL_TYPE, "eis" .. PT_TYPE}, "em"
elseif base.conj == "ir" then
s2, s3, p1, p2, p3 = "es", "e", "imos", {"ides" .. GL_TYPE, "is" .. PT_TYPE}, "em"
else
error("Internal error: Unrecognized conjugation " .. base.conj)
end
addit("1s", stems.pres1, "o")
addit("2s", stems.pres_stressed, s2)
addit("3s", stems.pres_stressed, s3)
addit("1p", stems.pres_unstressed, p1)
addit("2p", stems.pres_unstressed, p2)
addit("3p", stems.pres_stressed, p3)
end
local function add_present_subj(base)
local stems = base.this_stems
local function addit(slot, stems, ending)
add3(base, "pres_sub_" .. slot, stems, ending)
end
local s1, s2, s3, p1, p2, p3
if stems.sub_conj == "ar" then
s1, s2, s3, p1, p2, p3 = "e", "es", "e", "emos", {"edes" .. GL_TYPE, "eis" .. PT_TYPE}, "em"
else
s1, s2, s3, p1, p2, p3 = "a", "as", "a", "amos", {"ades" .. GL_TYPE, "ais" .. PT_TYPE}, "am"
end
addit("1s", stems.pres_sub_stressed, s1)
addit("2s", stems.pres_sub_stressed, s2)
addit("3s", stems.pres_sub_stressed, s3)
addit("1p", stems.pres_sub_unstressed, p1)
addit("2p", stems.pres_sub_unstressed, p2)
addit("3p", stems.pres_sub_stressed, p3)
end
local function add_finite_non_present(base)
local stems = base.this_stems
local function add_tense(slot, stem, s1, s2, s3, p1, p2, p3)
add_single_stem_tense(base, slot, stem, s1, s2, s3, p1, p2, p3)
end
-- * at the beginning of the ending means to remove an accent from the last vowel of the imperfect stem.
if stems.full_impf then
add_tense("impf", stems.full_impf, "*a", "*as", "*a", "amos",
{"ades" .. GL_TYPE, "eis" .. PT_TYPE, "ais" .. GL_ALTVAR}, "*am")
elseif base.conj == "ar" then
add_tense("impf", stems.impf, "ava", "avas", "ava", "ávamos",
{"ávades" .. GL_TYPE, "áveis" .. PT_TYPE, "ávais" .. GL_ALTVAR}, "avam")
else
add_tense("impf", stems.impf, "ia", "ias", "ia", "íamos",
{"íades" .. GL_TYPE, "íeis" .. PT_TYPE, "íais" .. GL_ALTVAR}, "iam")
end
-- * at the beginning of the ending means to remove a final accent from the preterite stem.
if stems.pret_conj == "irreg" then
add_tense("pret", stems.gl_short_pret, "em" .. GL_TYPE, nil, "o" .. GL_TYPE)
add_tense("pret", stems.pret, nil, {"*ste", "*che" .. GL_ALTVAR}, nil, "*mos", "*stes",
{"rom" .. GL_TYPE, "*ram" .. PT_TYPE})
add_tense("pret", stems.pt_pret_1s, PT_TYPE)
add_tense("pret", stems.pt_pret_3s, nil, nil, PT_TYPE)
elseif stems.pret_conj == "ar" then
add_tense("pret", stems.pret_base, "ei", {"aste", "ache" .. GL_ALTVAR}, "ou", "amos", "astes",
{"árom" .. GL_TYPE, "aram" .. PT_TYPE})
elseif stems.pret_conj == "er" then
add_tense("pret", stems.pret_base, {"im" .. GL_TYPE, "i" .. PT_TYPE}, {"este", "eche" .. GL_ALTVAR}, "eu",
"emos", "estes", {"êrom" .. GL_TYPE, "eram" .. PT_TYPE})
else
add_tense("pret", stems.pret_base, {"im" .. GL_TYPE, "i" .. PT_TYPE}, {"iste", "iche" .. GL_ALTVAR}, "iu",
"imos", "istes", {"írom" .. GL_TYPE, "iram" .. PT_TYPE})
end
-- * at the beginning of the ending means to remove a final accent from the stem.
-- ** is similar but is "conditional" on a consonant preceding the final vowel.
add_tense("plup", stems.plup, "**ra", "**ras", "**ra", "ramos",
{"rades" .. GL_TYPE, "reis" .. PT_TYPE, "rais" .. GL_ALTVAR}, "**ram")
add_tense("impf_sub", stems.impf_sub, "**sse", "**sses", "**sse", "ssemos",
{"ssedes" .. GL_TYPE, "sseis" .. PT_TYPE}, "**ssem")
add_tense("fut_sub", stems.fut_sub, "*r", "**res", "*r", "*rmos", "*rdes", "**rem")
if base.refl then
local mark = TEMP_MESOCLITIC_INSERTION_POINT
add_tense("fut", stems.fut,
{"ei" .. GL_TYPE, mark .. "ei" .. PT_TYPE}, {"ás" .. GL_TYPE, mark .. "ás" .. PT_TYPE},
{"á" .. GL_TYPE, mark .. "á" .. PT_TYPE}, {"emos" .. GL_TYPE, mark .. "emos" .. PT_TYPE},
{"edes" .. GL_TYPE, mark .. "eis" .. PT_TYPE}, {"ám" .. GL_TYPE, mark .. "ão" .. PT_TYPE}
)
add_tense("cond", stems.cond,
{"ia" .. GL_TYPE, mark .. "ia" .. PT_TYPE}, {"ias" .. GL_TYPE, mark .. "ias" .. PT_TYPE},
{"ia" .. GL_TYPE, mark .. "ia" .. PT_TYPE}, {"íamos" .. GL_TYPE, mark .. "íamos" .. PT_TYPE},
-- FIXME, is GL_ALTVAR correct for the mesoclitic variant of -íais?
{"íades" .. GL_TYPE, mark .. "íeis" .. PT_TYPE, "íais" .. GL_ALTVAR, mark .. "íais" .. GL_ALTVAR},
{"iam" .. GL_TYPE, mark .. "iam" .. PT_TYPE})
else
-- Don't insert forms with the mesoclitic insertion point to avoid duplication in non-reflexive verbs.
add_tense("fut", stems.fut, "ei", "ás", "á", "emos", {"edes" .. GL_TYPE, "eis" .. PT_TYPE},
{"ám" .. GL_TYPE, "ão" .. PT_TYPE})
add_tense("cond", stems.cond, "ia", "ias", "ia", "íamos",
-- FIXME, is GL_ALTVAR correct for the mesoclitic variant of -íais?
{"íades" .. GL_TYPE, "íeis" .. PT_TYPE, "íais" .. GL_ALTVAR}, "iam")
end
-- Different stems for different parts of the personal infinitive to correctly handle forms of [[sair]] and [[pôr]].
add_tense("pers_inf", base.non_prefixed_verb, "", nil, "")
add_tense("pers_inf", stems.pers_inf, nil, "**res", nil, "*rmos", "*rdes", "**rem")
end
local function add_non_finite_forms(base)
local stems = base.this_stems
local function addit(slot, stems, ending, footnotes)
add3(base, slot, stems, ending, footnotes)
end
insert_form(base, "infinitive", {form = base.verb})
-- Also insert "infinitive + reflexive pronoun" combinations if we're handling a reflexive verb. See comment below for
-- "gerund + reflexive pronoun" combinations.
if base.refl then
for _, persnum in ipairs(person_number_list) do
insert_form(base, "infinitive_" .. persnum, {form = base.verb})
end
end
-- verbs in -por have the gerund overridden
local ger_ending = base.conj == "ar" and "ando" or base.conj == "er" and "endo" or "indo"
addit("gerund", stems.pres_unstressed, ger_ending)
-- Also insert "gerund + reflexive pronoun" combinations if we're handling a reflexive verb. We insert exactly the same
-- form as for the bare gerund; later on in add_reflexive_or_fixed_clitic_to_forms(), we add the appropriate clitic
-- pronouns. It's important not to do this for non-reflexive verbs, because in that case, the clitic pronouns won't be
-- added, and {{gl-reinteg-verb form of}} will wrongly consider all these combinations as possible inflections of the bare
-- gerund. Thanks to [[User:JeffDoozan]] for this bug fix.
if base.refl then
for _, persnum in ipairs(person_number_list) do
addit("gerund_" .. persnum, stems.pres_unstressed, ger_ending)
end
end
-- Skip the long/short past participle footnotes if called from {{gl-reinteg-verb}} so they don't show in the headword.
local long_pp_footnotes =
stems.short_pp_ms and base.alternant_multiword_spec.source_template ~= "gl-reinteg-verb" and {long_pp_footnote} or nil
addit("pp_ms", stems.pp_ms, "", long_pp_footnotes)
if not base.pp_inv then
addit("pp_fs", stems.pp_fs, "", long_pp_footnotes)
addit("pp_mp", stems.pp_ms, "s", long_pp_footnotes)
addit("pp_fp", stems.pp_fs, "s", long_pp_footnotes)
end
if stems.short_pp_ms then
local short_pp_footnotes =
stems.short_pp_ms and base.alternant_multiword_spec.source_template ~= "gl-reinteg-verb" and {short_pp_footnote} or nil
addit("short_pp_ms", stems.short_pp_ms, "", short_pp_footnotes)
if not base.pp_inv then
addit("short_pp_fs", stems.short_pp_fs, "", short_pp_footnotes)
addit("short_pp_mp", stems.short_pp_ms, "s", short_pp_footnotes)
addit("short_pp_fp", stems.short_pp_fs, "s", short_pp_footnotes)
end
end
end
local function copy_forms_to_imperatives(base)
-- Copy pres3s to imperative since they are almost always the same.
insert_forms(base, "imp_2s", iut.map_forms(base.forms.pres_3s, function(form) return form end))
if not skip_slot(base, "imp_2p") then
-- Copy pres2p to imperative 2p minus -s since they are almost always the same.
-- But not if there's an override, to avoid possibly throwing an error.
insert_forms(base, "imp_2p", iut.map_forms(base.forms.pres_2p, function(form)
local form_no_s, var_codes = rmatch(form, "^(.*)s(" .. var_code_c .. "*)$")
if not form_no_s then
error("Can't derive second-person plural imperative from second-person plural present indicative " ..
"because form '" .. form .. "' doesn't end in -s")
end
return form_no_s .. var_codes
end))
end
-- Copy subjunctives to imperatives, unless there's an override for the given slot (as with the imp_1p of [[ir]]).
for _, persnum in ipairs({"3s", "1p", "3p"}) do
local from = "pres_sub_" .. persnum
local to = "imp_" .. persnum
insert_forms(base, to, iut.map_forms(base.forms[from], function(form) return form end))
end
end
local function process_slot_overrides(base, filter_slot, reflexive_only)
local overrides = reflexive_only and base.basic_reflexive_only_overrides or base.basic_overrides
for slot, forms in pairs(overrides) do
if not filter_slot or filter_slot(slot) then
add3(base, slot, forms, "", nil, "allow overrides")
end
end
end
-- Prefix `form` with `clitic`, adding fixed text `between` between them. Add links as appropriate unless the user
-- requested no links. Check whether form already has brackets (as will be the case if the form has a fixed clitic).
local function prefix_clitic_to_form(base, clitic, between, form)
if base.alternant_multiword_spec.args.noautolinkverb then
return clitic .. between .. form
else
local clitic_pref = "[[" .. clitic .. "]]" .. between
if form:find("%[%[") then
return clitic_pref .. form
else
return clitic_pref .. "[[" .. form .. "]]"
end
end
end
-- Add the appropriate clitic pronouns in `clitics` to the forms in `base_slot`. `store_cliticized_form` is a function
-- of three arguments (clitic, formobj, cliticized_form) and should store the cliticized form for the specified clitic
-- and form object.
local function suffix_clitic_to_forms(base, base_slot, clitics, store_cliticized_form)
if not base.forms[base_slot] then
-- This can happen, e.g. in only3s/only3sp/only3p verbs.
return
end
local autolink = not base.alternant_multiword_spec.args.noautolinkverb
for _, formobj in ipairs(base.forms[base_slot]) do
for _, clitic in ipairs(clitics) do
local cliticized_form
if formobj.form:find(TEMP_MESOCLITIC_INSERTION_POINT) then
-- mesoclisis in future and conditional
local infinitive, suffix = rmatch(formobj.form, "^(.*)" .. TEMP_MESOCLITIC_INSERTION_POINT .. "(.*)$")
if not infinitive then
error("Internal error: Can't find mesoclitic insertion point in slot '" .. base_slot .. "', form '" ..
formobj.form .. "'")
end
local full_form = infinitive .. suffix
if autolink and not infinitive:find("%[%[") then
infinitive = "[[" .. infinitive .. "]]"
end
cliticized_form =
autolink and infinitive .. "-[[" .. clitic .. "]]-[[" .. full_form .. "|" .. suffix .. "]]" or
infinitive .. "-" .. clitic .. "-" .. suffix
else
local clitic_suffix = autolink and "-[[" .. clitic .. "]]" or "-" .. clitic
local form_needs_link = autolink and not formobj.form:find("%[%[")
if base_slot:find("1p$") then
-- Final -s disappears: arrependíamos + nos -> arrependíamo-nos, etc.
cliticized_form = formobj.form:gsub("s$", "")
if form_needs_link then
cliticized_form = "[[" .. formobj.form .. "|" .. cliticized_form .. "]]"
end
else
cliticized_form = formobj.form
if form_needs_link then
cliticized_form = "[[" .. cliticized_form .. "]]"
end
end
cliticized_form = cliticized_form .. clitic_suffix
end
store_cliticized_form(clitic, formobj, cliticized_form)
end
end
end
-- Add a reflexive pronoun or fixed clitic (FIXME: not working), as appropriate to the base forms that were generated.
-- `do_joined` means to do only the forms where the pronoun is joined to the end of the form; otherwise, do only the
-- forms where it is not joined and precedes the form.
local function add_reflexive_or_fixed_clitic_to_forms(base, do_reflexive, do_joined)
for _, slotaccel in ipairs(base.alternant_multiword_spec.verb_slots_basic) do
local slot, accel = unpack(slotaccel)
local clitic
if not do_reflexive then
clitic = base.clitic
elseif slot:find("[123]") then
local persnum = slot:match("^.*_(.-)$")
clitic = person_number_to_reflexive_pronoun[persnum]
else
clitic = "se"
end
if base.forms[slot] then
if do_reflexive and slot:find("^pp_") or slot == "infinitive_linked" then
-- do nothing with reflexive past participles or with infinitive linked (handled at the end)
elseif slot:find("^neg_imp_") then
error("Internal error: Should not have forms set for negative imperative at this stage")
else
local slot_has_suffixed_clitic = not slot:find("_sub")
-- Maybe generate non-reflexive parts and separated syntactic variants for use in
-- {{gl-reinteg-verb form of}}. See comment in add_slots() above `need_special_verb_form_of_slots`.
-- Check for do_joined so we only run this code once.
if do_reflexive and do_joined and base.alternant_multiword_spec.source_template == "gl-reinteg-verb form of" and
-- Skip personal variants of infinitives and gerunds so we don't think [[arrependendo]] is a
-- non-reflexive equivalent of [[arrependendo-me]].
not slot:find("infinitive_") and not slot:find("gerund_") then
-- Clone the forms because we will be destructively modifying them just below, adding the reflexive
-- pronoun.
insert_forms(base, slot .. "_non_reflexive", mw.clone(base.forms[slot]))
if slot_has_suffixed_clitic then
insert_forms(base, slot .. "_variant", iut.map_forms(base.forms[slot], function(form)
return prefix_clitic_to_form(base, clitic, " ... ", form)
end))
end
end
if slot_has_suffixed_clitic then
if do_joined then
suffix_clitic_to_forms(base, slot, {clitic},
function(clitic, formobj, cliticized_form)
formobj.form = cliticized_form
end
)
end
elseif not do_joined then
-- Add clitic as separate word before all other forms.
for _, form in ipairs(base.forms[slot]) do
form.form = prefix_clitic_to_form(base, clitic, " ", form.form)
end
end
end
end
end
end
local function handle_infinitive_linked(base)
-- Compute linked versions of potential lemma slots, for use in {{gl-reinteg-verb}}.
-- We substitute the original lemma (before removing links) for forms that
-- are the same as the lemma, if the original lemma has links.
for _, slot in ipairs({"infinitive"}) do
insert_forms(base, slot .. "_linked", iut.map_forms(base.forms[slot], function(form)
if form == base.lemma and rfind(base.linked_lemma, "%[%[") then
return base.linked_lemma
else
return form
end
end))
end
end
local function generate_negative_imperatives(base)
-- Copy subjunctives to negative imperatives, preceded by "nom".
for _, persnum in ipairs(neg_imp_person_number_list) do
local from = "pres_sub_" .. persnum
local to = "neg_imp_" .. persnum
insert_forms(base, to, iut.map_forms(base.forms[from], function(form)
if base.alternant_multiword_spec.args.noautolinkverb then
return "nom " .. form
elseif form:find("%[%[") then
-- already linked, e.g. when reflexive
return "[[nom]] " .. form
else
return "[[nom]] [[" .. form .. "]]"
end
end))
end
end
-- Process specs given by the user using 'addnote[SLOTSPEC][FOOTNOTE][FOOTNOTE][...]'.
local function process_addnote_specs(base)
for _, spec in ipairs(base.addnote_specs) do
for _, slot_spec in ipairs(spec.slot_specs) do
slot_spec = "^" .. slot_spec .. "$"
for slot, forms in pairs(base.forms) do
if rfind(slot, slot_spec) then
-- To save on memory, side-effect the existing forms.
for _, form in ipairs(forms) do
form.footnotes = iut.combine_footnotes(form.footnotes, spec.footnotes)
end
end
end
end
end
end
local function add_missing_links_to_forms(base)
-- Any forms without links should get them now. Redundant ones will be stripped later.
for slot, forms in pairs(base.forms) do
for _, form in ipairs(forms) do
if not form.form:find("%[%[") then
form.form = "[[" .. form.form .. "]]"
end
end
end
end
-- Remove special characters added to future and conditional forms to indicate mesoclitic insertion points.
local function remove_mesoclitic_insertion_points(base)
for slot, forms in pairs(base.forms) do
if slot:find("^fut_") or slot:find("^cond_") then
for _, form in ipairs(forms) do
form.form = form.form:gsub(TEMP_MESOCLITIC_INSERTION_POINT, "")
end
end
end
end
-- If called from {{gl-reinteg-verb}}, remove less-recommended variants; otherwise add a footnote indicating they are
-- less recommended, and sort them last.
local function process_altvar_forms(base)
for slot, forms in pairs(base.forms) do
-- As an optimization, check if there are any less-recommended forms and don't do anything if not.
local saw_altvar = false
for _, form in ipairs(forms) do
if form.form:find(ALTVAR) then
saw_altvar = true
break
end
end
if saw_altvar then
if base.alternant_multiword_spec.source_template == "gl-reinteg-verb" then
base.forms[slot] = iut.flatmap_forms(base.forms[slot], function(form)
if form:find(ALTVAR) then
return {}
else
return {form}
end
end)
else
local existing_forms = base.forms[slot]
base.forms[slot] = {}
for _, formobj in ipairs(existing_forms) do
if not formobj.form:find(ALTVAR) then
iut.insert_form(base.forms, slot, formobj)
end
end
for _, formobj in ipairs(existing_forms) do
if formobj.form:find(ALTVAR) then
formobj.footnotes = iut.combine_footnotes(formobj.footnotes, {"[less recommended]"})
iut.insert_form(base.forms, slot, formobj)
end
end
end
end
end
end
local function conjugate_verb(base)
for _, vowel_alt in ipairs(base.vowel_alt_stems) do
construct_stems(base, vowel_alt)
add_present_indic(base)
add_present_subj(base)
end
add_finite_non_present(base)
add_non_finite_forms(base)
-- do non-reflexive non-imperative slot overrides
process_slot_overrides(base, function(slot)
return not slot:find("^imp_") and not slot:find("^neg_imp_")
end)
-- This should happen after process_slot_overrides() in case a derived slot is based on an override
-- (as with the imp_3s of [[dar]], [[estar]]).
copy_forms_to_imperatives(base)
-- do non-reflexive positive imperative slot overrides
process_slot_overrides(base, function(slot)
return slot:find("^imp_")
end)
-- We need to add joined reflexives, then joined and non-joined clitics, then non-joined reflexives, so we get
-- [[arrepende-te]] but [[nom]] [[te]] [[arrependas]].
if base.refl then
add_reflexive_or_fixed_clitic_to_forms(base, "do reflexive", "do joined")
process_slot_overrides(base, nil, "do reflexive") -- do reflexive-only slot overrides
add_reflexive_or_fixed_clitic_to_forms(base, "do reflexive", false)
end
-- This should happen after add_reflexive_or_fixed_clitic_to_forms() so negative imperatives get the reflexive pronoun
-- and clitic in them.
generate_negative_imperatives(base)
-- do non-reflexive negative imperative slot overrides
-- FIXME: What about reflexive negative imperatives?
process_slot_overrides(base, function(slot)
return slot:find("^neg_imp_")
end)
-- This should happen before add_missing_links_to_forms() so that the comparison `form == base.lemma`
-- in handle_infinitive_linked() works correctly and compares unlinked forms to unlinked forms.
handle_infinitive_linked(base)
process_addnote_specs(base)
if not base.alternant_multiword_spec.args.noautolinkverb then
add_missing_links_to_forms(base)
end
remove_mesoclitic_insertion_points(base)
process_altvar_forms(base)
end
local function parse_indicator_spec(angle_bracket_spec)
-- Store the original angle bracket spec so we can reconstruct the overall conj spec with the lemma(s) in them.
local base = {
angle_bracket_spec = angle_bracket_spec,
user_basic_overrides = {},
user_stems = {},
addnote_specs = {},
}
local function parse_err(msg)
error(msg .. ": " .. angle_bracket_spec)
end
local function fetch_footnotes(separated_group)
local footnotes
for j = 2, #separated_group - 1, 2 do
if separated_group[j + 1] ~= "" then
parse_err("Extraneous text after bracketed footnotes: '" .. table.concat(separated_group) .. "'")
end
if not footnotes then
footnotes = {}
end
table.insert(footnotes, separated_group[j])
end
return footnotes
end
local inside = angle_bracket_spec:match("^<(.*)>$")
assert(inside)
if inside == "" then
return base
end
local segments = put.parse_balanced_segment_run(inside, "[", "]")
local dot_separated_groups = put.split_alternating_runs(segments, "%.")
for i, dot_separated_group in ipairs(dot_separated_groups) do
local first_element = dot_separated_group[1]
if first_element == "addnote" then
local spec_and_footnotes = fetch_footnotes(dot_separated_group)
if #spec_and_footnotes < 2 then
parse_err("Spec with 'addnote' should be of the form 'addnote[SLOTSPEC][FOOTNOTE][FOOTNOTE][...]'")
end
local slot_spec = table.remove(spec_and_footnotes, 1)
local slot_spec_inside = rmatch(slot_spec, "^%[(.*)%]$")
if not slot_spec_inside then
parse_err("Internal error: slot_spec " .. slot_spec .. " should be surrounded with brackets")
end
local slot_specs = rsplit(slot_spec_inside, ",")
-- FIXME: Here, [[Module:it-verb]] called strip_spaces(). Generally we don't do this. Should we?
table.insert(base.addnote_specs, {slot_specs = slot_specs, footnotes = spec_and_footnotes})
elseif indicator_flags[first_element] then
if #dot_separated_group > 1 then
parse_err("No footnotes allowed with '" .. first_element .. "' spec")
end
if base[first_element] then
parse_err("Spec '" .. first_element .. "' specified twice")
end
base[first_element] = true
elseif rfind(first_element, ":") then
local colon_separated_groups = put.split_alternating_runs(dot_separated_group, "%s*:%s*")
local first_element = colon_separated_groups[1][1]
if #colon_separated_groups[1] > 1 then
parse_err("Can't attach footnotes directly to '" .. first_element .. "' spec; attach them to the " ..
"colon-separated values following the initial colon")
end
if overridable_stems[first_element] then
if base.user_stems[first_element] then
parse_err("Overridable stem '" .. first_element .. "' specified twice")
end
table.remove(colon_separated_groups, 1)
base.user_stems[first_element] = overridable_stems[first_element](colon_separated_groups,
{prefix = first_element, base = base, parse_err = parse_err, fetch_footnotes = fetch_footnotes})
else -- assume a basic override; we validate further later when the possible slots are available
if base.user_basic_overrides[first_element] then
parse_err("Basic override '" .. first_element .. "' specified twice")
end
table.remove(colon_separated_groups, 1)
base.user_basic_overrides[first_element] = allow_multiple_values(colon_separated_groups,
{prefix = first_element, base = base, parse_err = parse_err, fetch_footnotes = fetch_footnotes})
end
else
local comma_separated_groups = put.split_alternating_runs(dot_separated_group, "%s*,%s*")
for j = 1, #comma_separated_groups do
local alt = comma_separated_groups[j][1]
if not vowel_alternants[alt] then
if #comma_separated_groups == 1 then
parse_err("Unrecognized spec or vowel alternant '" .. alt .. "'")
else
parse_err("Unrecognized vowel alternant '" .. alt .. "'")
end
end
if base.vowel_alt then
for _, existing_alt in ipairs(base.vowel_alt) do
if existing_alt.form == alt then
parse_err("Vowel alternant '" .. alt .. "' specified twice")
end
end
else
base.vowel_alt = {}
end
table.insert(base.vowel_alt, {form = alt, footnotes = fetch_footnotes(comma_separated_groups[j])})
end
end
end
return base
end
-- Normalize all lemmas, substituting the pagename for blank lemmas and adding links to multiword lemmas.
local function normalize_all_lemmas(alternant_multiword_spec, head)
-- (1) Add links to all before and after text. Remember the original text so we can reconstruct the verb spec later.
if not alternant_multiword_spec.args.noautolinktext then
iut.add_links_to_before_and_after_text(alternant_multiword_spec, "remember original")
end
-- (2) Remove any links from the lemma, but remember the original form
-- so we can use it below in the 'lemma_linked' form.
iut.map_word_specs(alternant_multiword_spec, function(base)
if base.lemma == "" then
base.lemma = head
end
base.user_specified_lemma = base.lemma
base.lemma = m_links.remove_links(base.lemma)
local refl_verb = base.lemma
local verb, refl = rmatch(refl_verb, "^(.-)%-(se)$")
if not verb then
verb, refl = refl_verb, nil
end
base.user_specified_verb = verb
base.refl = refl
base.verb = base.user_specified_verb
local linked_lemma
if alternant_multiword_spec.args.noautolinkverb or base.user_specified_lemma:find("%[%[") then
linked_lemma = base.user_specified_lemma
elseif base.refl then
-- Reconstruct the linked lemma with separate links around base verb and reflexive pronoun.
linked_lemma = base.user_specified_verb == base.verb and "[[" .. base.user_specified_verb .. "]]" or
"[[" .. base.verb .. "|" .. base.user_specified_verb .. "]]"
linked_lemma = linked_lemma .. (refl and "-[[" .. refl .. "]]" or "")
else
-- Add links to the lemma so the user doesn't specifically need to, since we preserve
-- links in multiword lemmas and include links in non-lemma forms rather than allowing
-- the entire form to be a link.
linked_lemma = iut.add_links(base.user_specified_lemma)
end
base.linked_lemma = linked_lemma
end)
end
local function detect_indicator_spec(base)
if (base.only3s and 1 or 0) + (base.only3sp and 1 or 0) + (base.only3p and 1 or 0) > 1 then
error("Only one of 'only3s', 'only3sp' and 'only3p' can be specified")
end
base.forms = {}
base.stems = {}
base.basic_overrides = {}
base.basic_reflexive_only_overrides = {}
if not base.no_built_in then
for _, built_in_conj in ipairs(built_in_conjugations) do
if type(built_in_conj.match) == "function" then
base.prefix, base.non_prefixed_verb = built_in_conj.match(base.verb)
elseif built_in_conj.match:find("^%^") and rsub(built_in_conj.match, "^%^", "") == base.verb then
-- begins with ^, for exact match, and matches
base.prefix, base.non_prefixed_verb = "", base.verb
else
base.prefix, base.non_prefixed_verb = rmatch(base.verb, "^(.*)(" .. built_in_conj.match .. ")$")
end
if base.prefix then
-- we found a built-in verb
for stem, forms in pairs(built_in_conj.forms) do
if type(forms) == "function" then
forms = forms(base, base.prefix)
end
if stem:find("^refl_") then
stem = stem:gsub("^refl_", "")
if not base.alternant_multiword_spec.verb_slots_basic_map[stem] then
error("Internal error: setting for 'refl_" .. stem .. "' does not refer to a basic verb slot")
end
base.basic_reflexive_only_overrides[stem] = forms
elseif base.alternant_multiword_spec.verb_slots_basic_map[stem] then
-- an individual form override of a basic form
base.basic_overrides[stem] = forms
else
base.stems[stem] = forms
end
end
break
end
end
end
-- Override built-in-verb stems and overrides with user-specified ones.
for stem, values in pairs(base.user_stems) do
base.stems[stem] = values
end
for override, values in pairs(base.user_basic_overrides) do
if not base.alternant_multiword_spec.verb_slots_basic_map[override] then
error("Unrecognized override '" .. override .. "': " .. base.angle_bracket_spec)
end
base.basic_overrides[override] = values
end
base.prefix = base.prefix or ""
base.non_prefixed_verb = base.non_prefixed_verb or base.verb
local inf_stem, suffix = rmatch(base.non_prefixed_verb, "^(.*)([aeioô]r)$")
if not inf_stem then
error("Unrecognized infinitive: " .. base.verb)
end
base.inf_stem = inf_stem
suffix = suffix == "ôr" and "or" or suffix
base.conj = suffix
base.conj_vowel = suffix == "ar" and "á" or suffix == "ir" and "í" or "ê"
base.frontback = suffix == "ar" and "back" or "front"
if base.stems.vowel_alt then -- built-in verb with specified vowel alternation
if base.vowel_alt then
error(base.verb .. " is a recognized built-in verb, and should not have vowel alternations specified with it")
end
base.vowel_alt = iut.convert_to_general_list_form(base.stems.vowel_alt)
end
-- Propagate built-in-verb indicator flags to `base` and combine with user-specified flags.
for indicator_flag, _ in pairs(indicator_flags) do
base[indicator_flag] = base[indicator_flag] or base.stems[indicator_flag]
end
-- Convert vowel alternation indicators into stems.
local vowel_alt = base.vowel_alt or {{form = "+"}}
base.vowel_alt_stems = apply_vowel_alternations(base.inf_stem, vowel_alt)
for _, vowel_alt_stems in ipairs(base.vowel_alt_stems) do
if vowel_alt_stems.err then
error("To use '" .. vowel_alt_stems.altobj.form .. "', present stem '" .. base.prefix .. base.inf_stem .. "' " ..
vowel_alt_stems.err)
end
end
end
local function detect_all_indicator_specs(alternant_multiword_spec)
-- Propagate some settings up; some are used internally, others by [[Module:gl-headword]].
iut.map_word_specs(alternant_multiword_spec, function(base)
-- Internal indicator flags. Do these before calling detect_indicator_spec() because add_slots() uses them.
for _, prop in ipairs { "refl", "clitic" } do
if base[prop] then
alternant_multiword_spec[prop] = true
end
end
base.alternant_multiword_spec = alternant_multiword_spec
end)
add_slots(alternant_multiword_spec)
alternant_multiword_spec.vowel_alt = {}
iut.map_word_specs(alternant_multiword_spec, function(base)
detect_indicator_spec(base)
-- User-specified indicator flags. Do these after calling detect_indicator_spec() because the latter may set these
-- indicators for built-in verbs.
for prop, _ in pairs(indicator_flags) do
if base[prop] then
alternant_multiword_spec[prop] = true
end
end
-- Vowel alternants. Do these after calling detect_indicator_spec() because the latter sets base.vowel_alt for
-- built-in verbs.
if base.vowel_alt then
for _, altobj in ipairs(base.vowel_alt) do
m_table.insertIfNot(alternant_multiword_spec.vowel_alt, altobj.form)
end
end
end)
end
local function add_categories_and_annotation(alternant_multiword_spec, base, multiword_lemma)
local function insert_ann(anntype, value)
m_table.insertIfNot(alternant_multiword_spec.annotation[anntype], value)
end
local function insert_cat(cat, also_when_multiword)
-- Don't place multiword terms in categories like 'Galician verbs ending in -ar' to avoid spamming the
-- categories with such terms.
if also_when_multiword or not multiword_lemma then
m_table.insertIfNot(alternant_multiword_spec.categories, "Galician " .. cat)
end
end
if check_for_red_links and alternant_multiword_spec.source_template == "gl-reinteg-conj" and multiword_lemma then
for _, slot_and_accel in ipairs(alternant_multiword_spec.all_verb_slots) do
local slot = slot_and_accel[1]
local forms = base.forms[slot]
local must_break = false
if forms then
for _, form in ipairs(forms) do
if not form.form:find("%[%[") then
local title = mw.title.new(form.form)
if title and not title.exists then
insert_cat("verbs with red links in their inflection tables")
must_break = true
break
end
end
end
end
if must_break then
break
end
end
end
if(base.conj == "or") then
insert_cat("verbs ending in -er")
else
insert_cat("verbs ending in -" .. base.conj)
end
if base.irreg then
insert_ann("irreg", "irregular")
insert_cat("irregular verbs")
else
insert_ann("irreg", "regular")
end
if base.only3s then
insert_ann("defective", "impersonal")
insert_cat("impersonal verbs")
elseif base.only3sp then
insert_ann("defective", "third-person only")
insert_cat("third-person-only verbs")
elseif base.only3p then
insert_ann("defective", "third-person plural only")
insert_cat("third-person-plural-only verbs")
elseif base.no_pres_stressed or base.no_pres1_and_sub then
insert_ann("defective", "defective")
insert_cat("defective verbs")
else
insert_ann("defective", "regular")
end
if base.stems.short_pp then
insert_ann("short_pp", "irregular short past participle")
insert_cat("verbs with irregular short past participle")
else
insert_ann("short_pp", "regular")
end
if base.clitic then
insert_cat("verbs with lexical clitics")
end
if base.refl then
insert_cat("reflexive verbs")
end
if base.e_ei_cat then
insert_ann("vowel_alt", "''e'' may become ''ei'' when stressed")
insert_cat("verbs with e becoming ei when stressed")
elseif not base.vowel_alt then
insert_ann("vowel_alt", "non-alternating")
else
for _, alt in ipairs(base.vowel_alt) do
if alt.form == "+" then
insert_ann("vowel_alt", "non-alternating")
else
insert_ann("vowel_alt", vowel_alternant_to_desc[alt.form])
insert_cat("verbs with " .. vowel_alternant_to_cat[alt.form])
end
end
end
local cons_alt = base.stems.cons_alt
if cons_alt == nil then
if base.conj == "ar" then
if base.inf_stem:find("ç$") then
cons_alt = "c-ç"
elseif base.inf_stem:find("c$") then
cons_alt = "c-qu"
elseif base.inf_stem:find("g$") then
cons_alt = "g-gu"
end
else
if base.no_pres_stressed or base.no_pres1_and_sub then
cons_alt = nil -- no e.g. c-ç alternation in this case
elseif base.inf_stem:find("c$") then
cons_alt = "c-ç"
elseif base.inf_stem:find("qu$") then
cons_alt = "c-qu"
elseif base.inf_stem:find("g$") then
cons_alt = "g-j"
elseif base.inf_stem:find("gu$") then
cons_alt = "g-gu"
end
end
end
if cons_alt then
local desc = cons_alt .. " alternation"
insert_ann("cons_alt", desc)
insert_cat("verbs with " .. desc)
else
insert_ann("cons_alt", "non-alternating")
end
end
-- Compute the categories to add the verb to, as well as the annotation to display in the
-- conjugation title bar. We combine the code to do these functions as both categories and
-- title bar contain similar information.
local function compute_categories_and_annotation(alternant_multiword_spec)
alternant_multiword_spec.categories = {}
local ann = {}
alternant_multiword_spec.annotation = ann
ann.irreg = {}
ann.short_pp = {}
ann.defective = {}
ann.vowel_alt = {}
ann.cons_alt = {}
local multiword_lemma = false
for _, form in ipairs(alternant_multiword_spec.forms.infinitive) do
if form.form:find(" ") then
multiword_lemma = true
break
end
end
iut.map_word_specs(alternant_multiword_spec, function(base)
add_categories_and_annotation(alternant_multiword_spec, base, multiword_lemma)
end)
local ann_parts = {}
local irreg = table.concat(ann.irreg, " or ")
if irreg ~= "" and irreg ~= "regular" then
table.insert(ann_parts, irreg)
end
local short_pp = table.concat(ann.short_pp, " or ")
if short_pp ~= "" and short_pp ~= "regular" then
table.insert(ann_parts, short_pp)
end
local defective = table.concat(ann.defective, " or ")
if defective ~= "" and defective ~= "regular" then
table.insert(ann_parts, defective)
end
local vowel_alt = table.concat(ann.vowel_alt, " or ")
if vowel_alt ~= "" and vowel_alt ~= "non-alternating" then
table.insert(ann_parts, vowel_alt)
end
local cons_alt = table.concat(ann.cons_alt, " or ")
if cons_alt ~= "" and cons_alt ~= "non-alternating" then
table.insert(ann_parts, cons_alt)
end
alternant_multiword_spec.annotation = table.concat(ann_parts, "; ")
end
local function show_forms(alternant_multiword_spec)
local lemmas = alternant_multiword_spec.forms.infinitive
alternant_multiword_spec.lemmas = lemmas -- save for later use in make_table()
if alternant_multiword_spec.forms.short_pp_ms then
alternant_multiword_spec.has_short_pp = true
end
local reconstructed_verb_spec = iut.reconstruct_original_spec(alternant_multiword_spec)
local function transform_accel_obj(slot, formobj, accel_obj)
-- No accelerators for negative imperatives, which are always multiword and derived directly from the
-- present subjunctive.
if slot:find("^neg_imp") then
return nil
end
if accel_obj then
if slot:find("^pp_") then
accel_obj.form = slot
elseif slot == "gerund" then
accel_obj.form = "reinteg-gerund-" .. reconstructed_verb_spec
else
accel_obj.form = "reinteg-verb-form-" .. reconstructed_verb_spec
end
end
return accel_obj
end
-- Italicize less-recommended forms.
local function generate_link(data)
local formval_for_link = data.form.formval_for_link
if formval_for_link:find(ALTVAR) then
formval_for_link = formval_for_link:gsub(ALTVAR, "")
return m_links.full_link({lang = lang, term = formval_for_link, tr = "-", accel = data.form.accel_obj},
"term") .. iut.get_footnote_text(data.form.footnotes, data.footnote_obj)
end
end
local props = {
lang = lang,
lemmas = lemmas,
transform_accel_obj = transform_accel_obj,
canonicalize = function(form) return export.remove_variant_codes(form, "keep altvar") end,
generate_link = generate_link,
slot_list = alternant_multiword_spec.verb_slots_basic,
}
iut.show_forms(alternant_multiword_spec.forms, props)
alternant_multiword_spec.footnote_basic = alternant_multiword_spec.forms.footnote
end
local notes_template = [=[
<div class="roa-footnote-outer-div" style="width:100%;">
<div class="roa-footnote-inner-div">
{footnote}
</div></div>
]=]
local basic_table = [=[
{description}<div class="NavFrame">
<div class="NavHead" align=center> Reintegrated conjugation of {title} (See [[Appendix:Reintegrationism]])</div>
<div class="NavContent" align="left">
{\op}| class="roa-inflection-table" data-toggle-category="inflection"
|-
! class="roa-person-number-header" rowspan="2" |
! class="roa-person-number-header" colspan="3" | เอกพจน์
! class="roa-person-number-header" colspan="3" | พหูพจน์
|-
! class="roa-person-number-header" style="width:12.5%" | บุรุษที่หนึ่ง<br />(<<eu>>)
! class="roa-person-number-header" style="width:12.5%" | บุรุษที่สอง<br />(<<ti>> / <<tu>>)
! class="roa-person-number-header" style="width:12.5%" | บุรุษที่สาม<br />(<<ele>> / <<ela>> / <<você>>)
! class="roa-person-number-header" style="width:12.5%" | บุรุษที่หนึ่ง<br />(<<nós>>)
! class="roa-person-number-header" style="width:12.5%" | บุรุษที่สอง<br />(<<vós>>)
! class="roa-person-number-header" style="width:12.5%" | บุรุษที่สาม<br />(<<eles>> / <<elas>> / <<vocês>>)
|-
! class="roa-nonfinite-header" colspan="7" | ''<span title="infinitivo">รูปกริยากลาง</span>''
|-
! class="roa-nonfinite-header" | '''<span title="infinitivo impessoal">คำอบุรุษกริยา</span>'''
| colspan="6" | {infinitive}
|-
! class="roa-nonfinite-header" | '''<span title="infinitivo flexionado">คำบุรุษกริยา</span>'''
| {pers_inf_1s}
| {pers_inf_2s}
| {pers_inf_3s}
| {pers_inf_1p}
| {pers_inf_2p}
| {pers_inf_3p}
|-
! class="roa-nonfinite-header" colspan="7" | ''<span title="gerúndio">รูปกริยาเป็นนาม</span>''
|-
| class="roa-nonfinite-header" |
| colspan="6" | {gerund}
|-{pp_clause}
! style="border: 1px solid #999999; background:#d0dff4" colspan="7" | ''<span title="indicativo">มาลาบอกเล่า</span>''
|-
! class="roa-indicative-left-rail" | <span title="presente">ปัจจุบันกาล</span>
| {pres_1s}
| {pres_2s}
| {pres_3s}
| {pres_1p}
| {pres_2p}
| {pres_3p}
|-
! class="roa-indicative-left-rail" | <span title="pretérito imperfeito">ไม่สมบูรณ์</span>
| {impf_1s}
| {impf_2s}
| {impf_3s}
| {impf_1p}
| {impf_2p}
| {impf_3p}
|-
! class="roa-indicative-left-rail" | <span title="pretérito perfeito">อดีตกาลสิ้นสุด<br>(สมบูรณ์)</span>
| {pret_1s}
| {pret_2s}
| {pret_3s}
| {pret_1p}
| {pret_2p}
| {pret_3p}
|-
! class="roa-indicative-left-rail" | <span title="pretérito mais-que-perfeito simples">อภิสมบูรณ์</span>
| {plup_1s}
| {plup_2s}
| {plup_3s}
| {plup_1p}
| {plup_2p}
| {plup_3p}
|-
! class="roa-indicative-left-rail" | <span title="futuro do presente">อนาคตกาล</span>
| {fut_1s}
| {fut_2s}
| {fut_3s}
| {fut_1p}
| {fut_2p}
| {fut_3p}
|-
! class="roa-indicative-left-rail" | <span title="condicional">มาลาเงื่อนไข</span>
| {cond_1s}
| {cond_2s}
| {cond_3s}
| {cond_1p}
| {cond_2p}
| {cond_3p}
|-
! class="roa-subjunctive-left-rail" colspan="7" | ''<span title="conjuntivo">มาลาสมมุติ</span>''
|-
! class="roa-subjunctive-left-rail" | <span title=" presente do conjuntivo">ปัจจุบันกาล</span>
| {pres_sub_1s}
| {pres_sub_2s}
| {pres_sub_3s}
| {pres_sub_1p}
| {pres_sub_2p}
| {pres_sub_3p}
|-
! class="roa-subjunctive-left-rail" | <span title="pretérito imperfeito do conjuntivo">ไม่สมบูรณ์</span>
| {impf_sub_1s}
| {impf_sub_2s}
| {impf_sub_3s}
| {impf_sub_1p}
| {impf_sub_2p}
| {impf_sub_3p}
|-
! class="roa-subjunctive-left-rail" | <span title="futuro do conjuntivo">อนาคตกาล</span>
| {fut_sub_1s}
| {fut_sub_2s}
| {fut_sub_3s}
| {fut_sub_1p}
| {fut_sub_2p}
| {fut_sub_3p}
|-
! class="roa-imperative-left-rail" colspan="7" | ''<span title="imperativo">มาลาสั่ง</span>''
|-
! class="roa-imperative-left-rail" | <span title="imperativo afirmativo">เชิงยืนยัน</span>
| rowspan="2" |
| {imp_2s}
| {imp_3s}
| {imp_1p}
| {imp_2p}
| {imp_3p}
|-
! class="roa-imperative-left-rail" | <span title="imperativo negativo">เชิงปฏิเสธ</span> (<<nom>>)
| {neg_imp_2s}
| {neg_imp_3s}
| {neg_imp_1p}
| {neg_imp_2p}
| {neg_imp_3p}
|{\cl}{notes_clause}</div></div>
]=]
local double_pp_template = [=[
! class="roa-nonfinite-header" colspan="7" | ''<span title="particípio irregular">รูปกริยาขยายอดีตกาลสั้น</span>''
|-
! class="roa-nonfinite-header" | เพศชาย
| colspan="3" | {short_pp_ms}
| colspan="3" | {short_pp_mp}
|-
! class="roa-nonfinite-header" | เพศหญิง
| colspan="3" | {short_pp_fs}
| colspan="3" | {short_pp_fp}
|-
! class="roa-nonfinite-header" colspan="7" | ''<span title="particípio regular">รูปกริยาขยายอดีตกาลยาว</span>''
|-
! class="roa-nonfinite-header" | เพศชาย
| colspan="3" | {pp_ms}
| colspan="3" | {pp_mp}
|-
! class="roa-nonfinite-header" | เพศหญิง
| colspan="3" | {pp_fs}
| colspan="3" | {pp_fp}
|-]=]
local single_pp_template = [=[
! class="roa-nonfinite-header" colspan="7" | ''<span title="particípio passado">รูปกริยาขยายอดีตกาล</span>''
|-
! class="roa-nonfinite-header" | เพศชาย
| colspan="3" | {pp_ms}
| colspan="3" | {pp_mp}
|-
! class="roa-nonfinite-header" | เพศหญิง
| colspan="3" | {pp_fs}
| colspan="3" | {pp_fp}
|-]=]
local function make_table(alternant_multiword_spec)
local forms = alternant_multiword_spec.forms
forms.title = link_term(alternant_multiword_spec.lemmas[1].form)
if alternant_multiword_spec.annotation ~= "" then
forms.title = forms.title .. " (" .. alternant_multiword_spec.annotation .. ")"
end
forms.description = ""
-- Format the table.
forms.footnote = alternant_multiword_spec.footnote_basic
forms.notes_clause = forms.footnote ~= "" and m_string_utilities.format(notes_template, forms) or ""
-- has_short_pp is computed in show_forms().
local pp_template = alternant_multiword_spec.has_short_pp and double_pp_template or single_pp_template
forms.pp_clause = m_string_utilities.format(pp_template, forms)
local table_with_pronouns = rsub(basic_table, "<<(.-)>>", link_term)
return require("Module:TemplateStyles")("Module:roa-verb/style.css") .. m_string_utilities.format(table_with_pronouns, forms)
end
-- Externally callable function to parse and conjugate a verb given user-specified arguments.
-- Return value is WORD_SPEC, an object where the conjugated forms are in `WORD_SPEC.forms`
-- for each slot. If there are no values for a slot, the slot key will be missing. The value
-- for a given slot is a list of objects {form=FORM, footnotes=FOOTNOTES}.
function export.do_generate_forms(args, source_template, headword_head)
local PAGENAME = mw.loadData("Module:headword/data").pagename
local function in_template_space()
return mw.title.getCurrentTitle().nsText == "แม่แบบ"
end
-- Determine the verb spec we're being asked to generate the conjugation of. This may be taken from the
-- current page title or the value of |pagename=; but not when called from {{gl-reinteg-verb form of}}, where the
-- page title is a non-lemma form. Note that the verb spec may omit the infinitive; e.g. it may be "<i-e>".
-- For this reason, we use the value of `pagename` computed here down below, when calling normalize_all_lemmas().
local pagename = source_template ~= "gl-reinteg-verb form of" and args.pagename or PAGENAME
local head = headword_head or pagename
local arg1 = args[1]
if not arg1 then
if (pagename == "gl-reinteg-conj" or pagename == "gl-reinteg-verb") and in_template_space() then
arg1 = "traguer"
elseif pagename == "gl-reinteg-verb form of" and in_template_space() then
arg1 = "amar"
else
arg1 = "<>"
end
end
-- When called from {{gl-reinteg-verb form of}}, determine the non-lemma form whose inflections we're being asked to
-- determine. This normally comes from the page title or the value of |pagename=.
local verb_form_of_form
if source_template == "gl-reinteg-verb form of" then
verb_form_of_form = args.pagename
if not verb_form_of_form then
if PAGENAME == "gl-reinteg-verb form of" and in_template_space() then
verb_form_of_form = "ame"
else
verb_form_of_form = PAGENAME
end
end
end
local incorporated_headword_head_into_lemma = false
if arg1:find("^<.*>$") then -- missing lemma
if head:find(" ") then
-- If multiword lemma, try to add arg spec after the first word.
-- Try to preserve the brackets in the part after the verb, but don't do it
-- if there aren't the same number of left and right brackets in the verb
-- (which means the verb was linked as part of a larger expression).
local refl_clitic_verb, post = rmatch(head, "^(.-)( .*)$")
local left_brackets = rsub(refl_clitic_verb, "[^%[]", "")
local right_brackets = rsub(refl_clitic_verb, "[^%]]", "")
if #left_brackets == #right_brackets then
arg1 = iut.remove_redundant_links(refl_clitic_verb) .. arg1 .. post
incorporated_headword_head_into_lemma = true
else
-- Try again using the form without links.
local linkless_head = m_links.remove_links(head)
if linkless_head:find(" ") then
refl_clitic_verb, post = rmatch(linkless_head, "^(.-)( .*)$")
arg1 = refl_clitic_verb .. arg1 .. post
else
error("Unable to incorporate <...> spec into explicit head due to a multiword linked verb or " ..
"unbalanced brackets; please include <> explicitly: " .. arg1)
end
end
else
-- Will be incorporated through `head` below in the call to normalize_all_lemmas().
incorporated_headword_head_into_lemma = true
end
end
local function split_bracketed_runs_into_words(bracketed_runs)
return put.split_alternating_runs(bracketed_runs, " ", "preserve splitchar")
end
local parse_props = {
parse_indicator_spec = parse_indicator_spec,
-- Split words only on spaces, not on hyphens, because that messes up reflexive verb parsing.
split_bracketed_runs_into_words = split_bracketed_runs_into_words,
allow_default_indicator = true,
allow_blank_lemma = true,
}
local alternant_multiword_spec = iut.parse_inflected_text(arg1, parse_props)
alternant_multiword_spec.pos = pos or "verbs"
alternant_multiword_spec.args = args
alternant_multiword_spec.source_template = source_template
alternant_multiword_spec.verb_form_of_form = verb_form_of_form
alternant_multiword_spec.incorporated_headword_head_into_lemma = incorporated_headword_head_into_lemma
normalize_all_lemmas(alternant_multiword_spec, head)
detect_all_indicator_specs(alternant_multiword_spec)
local inflect_props = {
slot_list = alternant_multiword_spec.all_verb_slots,
inflect_word_spec = conjugate_verb,
get_variants = function(form) return rsub(form, not_var_code_c, "") end,
-- We add links around the generated verbal forms rather than allow the entire multiword
-- expression to be a link, so ensure that user-specified links get included as well.
include_user_specified_links = true,
}
iut.inflect_multiword_or_alternant_multiword_spec(alternant_multiword_spec, inflect_props)
-- Remove redundant brackets around entire forms.
for slot, forms in pairs(alternant_multiword_spec.forms) do
for _, form in ipairs(forms) do
form.form = iut.remove_redundant_links(form.form)
end
end
compute_categories_and_annotation(alternant_multiword_spec)
if args.json and source_template == "gl-reinteg-conj" then
-- Remove variant codes to avoid causing problems with bots.
for slot, forms in pairs(alternant_multiword_spec.forms) do
for _, form in ipairs(forms) do
form.form = export.remove_variant_codes(form.form)
end
end
return require("Module:JSON").toJSON(alternant_multiword_spec.forms)
end
return alternant_multiword_spec
end
-- Entry point for {{gl-reinteg-conj}}. Template-callable function to parse and conjugate a verb given
-- user-specified arguments and generate a displayable table of the conjugated forms.
function export.show(frame)
local parent_args = frame:getParent().args
local params = {
[1] = {},
["noautolinktext"] = {type = "boolean"},
["noautolinkverb"] = {type = "boolean"},
["pagename"] = {}, -- for testing/documentation pages
["json"] = {type = "boolean"}, -- for bot use
}
local args = require("Module:parameters").process(parent_args, params)
local alternant_multiword_spec = export.do_generate_forms(parent_args, "gl-reinteg-conj")
if type(alternant_multiword_spec) == "string" then
-- JSON return value
return alternant_multiword_spec
end
show_forms(alternant_multiword_spec)
return make_table(alternant_multiword_spec) ..
require("Module:utilities").format_categories(alternant_multiword_spec.categories, lang, nil, nil, force_cat)
end
return export
gxeutmsepgynyr6i7ffn4bxywb2bgdm
5729292
5729291
2026-07-20T05:27:52Z
Octahedron80
267
5729292
Scribunto
text/plain
--[=[
This module implements {{gl-reinteg-conj}} and provides the underlying conjugation functions for {{gl-reinteg-verb}},
as well as for {{gl-verb}} when invoked with |reinteg=1. The actual formatting of both {{gl-reinteg-verb}} and
{{gl-verb}} happens in [[Module:gl-headword]]. This module uses the [[Appendix:Reintegrationism|reintegrationist]] norm
for Galician spelling. See also [[Module:gl-verb]], which implements the standard norm.
Authorship: Ben Wing <benwing2>, MedK <medk1>
]=]
local export = {}
--[=[
TERMINOLOGY:
-- "slot" = A particular combination of tense/mood/person/number/etc.
Example slot names for verbs are "pres_1s" (present indicative first-person singular), "pres_sub_2s" (present
subjunctive second-person singular) "impf_sub_3p" (imperfect subjunctive third-person plural).
Each slot is filled with zero or more forms.
-- "form" = The conjugated Galician form representing the value of a given slot.
-- "lemma" = The dictionary form of a given Galician term. For Galician, always the infinitive.
]=]
--[=[
FIXME:
--]=]
local lang = require("Module:languages").getByCode("gl")
local m_string_utilities = require("Module:string utilities")
local m_links = require("Module:links")
local m_table = require("Module:table")
local iut = require("Module:inflection utilities")
local put = require("Module:parse utilities")
local com = require("Module:gl-reinteg-common")
local force_cat = false -- set to true for debugging
local check_for_red_links = false -- set to false for debugging
local rfind = mw.ustring.find
local rmatch = mw.ustring.match
local rsplit = mw.text.split
local rsub = com.rsub
local u = mw.ustring.char
local unpack = unpack or table.unpack -- Lua 5.2 compatibility
local function link_term(term)
return m_links.full_link({ lang = lang, term = term }, "term")
end
local V = com.V -- vowel regex class
local AV = com.AV -- accented vowel regex class
local C = com.C -- consonant regex class
local AC = u(0x0301) -- acute = ́
local TEMPC1 = u(0xFFF1) -- temporary character used for consonant substitutions
local TEMP_MESOCLITIC_INSERTION_POINT = u(0xFFF2) -- temporary character used to mark the mesoclitic insertion point
-- Variant codes and the like.
-- NOTE: These codes should be *PREFIXED* onto stems and *SUFFIXED* onto endings. That way they won't interfere in the
-- operation of combine_stem_ending().
--
-- GL_TYPE = "Galician-type", PT_TYPE = "Portuguese-type". GL_TYPE stems cannot combine with PT_TYPE endings and
-- vice-versa. GL_ONLY_TYPE = "Galician-only type"; GL_ONLY_TYPE stems can only combine with endings specifically
-- marked as GL_TYPE.
local GL_TYPE = u(0xFFF3)
local GL_ONLY_TYPE = u(0xFFF4)
local PT_TYPE = u(0xFFF5)
-- ALTVAR = Less-recommended variants listed at the bottom of the Estraviz conjugation tables rather than in the main
-- table. We list these in the main table but with a footnote indicating they are less-recommended alternatives, and
-- italicize them to visually set them apart.
local ALTVAR = u(0xFFF6)
local GL_ALTVAR = GL_TYPE .. ALTVAR
local GL_ONLY_ALTVAR = GL_ONLY_TYPE .. ALTVAR
local var_codes_no_altvar = GL_TYPE .. GL_ONLY_TYPE .. PT_TYPE
local all_var_codes = var_codes_no_altvar .. ALTVAR
local var_code_c = "[" .. all_var_codes .. "]"
local var_code_no_altvar_c = "[" .. var_codes_no_altvar .. "]"
local not_var_code_c = "[^" .. all_var_codes .. "]"
-- Export variant codes for use in [[Module:pt-gl-inflections]].
export.GL_TYPE = GL_TYPE
export.GL_ONLY_TYPE = GL_ONLY_TYPE
export.PT_TYPE = PT_TYPE
export.ALTVAR = ALTVAR
local short_pp_footnote = "[usually used with auxiliary verbs " .. link_term("ser") .. " and " .. link_term("estar") .. "]"
local long_pp_footnote = "[usually used with auxiliary verbs " .. link_term("haver") .. " and " .. link_term("ter") .. "]"
--[=[
Vowel alternations:
<i-e>: 'i' in pres1s and the whole present subjunctive; 'e' elsewhere when stressed. Generally 'e' otherwise when
unstressed. E.g. [[sentir]], [[conseguir]] (the latter additionally with 'gu-g' alternation).
<u-o>: 'u' in pres1s and the whole present subjunctive; 'o' elsewhere when stressed. Either 'o' or 'u' otherwise when
unstressed. E.g. [[dormir]], [[subir]].
<i>: 'i' whenever stressed (in the present singular and third plural) and throughout the whole present subjunctive.
Otherwise 'e'. E.g. [[progredir]], [[premir]].
<u>: 'u' whenever stressed (in the present singular and third plural) and throughout the whole present subjunctive.
Otherwise 'o'. E.g. [[polir]], [[extorquir]] (the latter also <u-o>).
<í>: The last 'i' of the stem (excluding stem-final 'i') becomes 'í' when stressed. E.g.:
* [[proibir]] ('proíbo, proíbe(s), proíbem, proíba(s), proíbam')
* [[faiscar]] ('faísco, faísca(s), faíscam, faísque(s), faísquem' also with 'c-qu' alternation)
* [[homogeneizar]] ('homogeneízo', etc.)
* [[mobiliar]] ('mobílio', etc.; note here the final -i is ignored when determining which vowel to stress)
* [[tuitar]] ('tuíto', etc.)
<ú>: The last 'u' of the stem (excluding stem-final 'u') becomes 'ú' when stressed. E.g.:
* [[reunir]] ('reúno, reúne(s), reúnem, reúna(s), reúnam')
* [[esmiuçar]] ('esmiúço, esmiúça(s), esmiúça, esmiúce(s), esmiúcem' also with 'ç-c' alternation)
* [[reusar]] ('reúso, reúsa(s), reúsa, reúse(s), reúsem')
* [[saudar]] ('saúdo, saúda(s), saúda, saúde(s), saúdem')
]=]
local vowel_alternants = m_table.listToSet({"i-e", "i", "í", "u-o", "u", "ú", "ei", "+"})
local vowel_alternant_to_desc = {
["i-e"] = "''i-e'' alternation in present singular",
["i"] = "''e'' becomes ''i'' when stressed",
["í"] = "''i'' becomes ''í'' when stressed",
["u-o"] = "''u-o'' alternation in present singular",
["u"] = "''o'' becomes ''u'' when stressed",
["ú"] = "''u'' becomes ''ú'' when stressed",
["ei"] = "''i'' becomes ''ei'' when stressed",
}
local vowel_alternant_to_cat = {
["i-e"] = "i-e alternation in present singular",
["i"] = "e becoming i when stressed",
["í"] = "i becoming í when stressed",
["u-o"] = "u-o alternation in present singular",
["u"] = "o becoming u when stressed",
["ú"] = "u becoming ú when stressed",
["ei"] = "i becoming ei when stressed",
}
local all_persons_numbers = {
["1s"] = "1|s",
["2s"] = "2|s",
["3s"] = "3|s",
["1p"] = "1|p",
["2p"] = "2|p",
["3p"] = "3|p",
}
local person_number_list = {"1s", "2s", "3s", "1p", "2p", "3p"}
local imp_person_number_list = {"2s", "3s", "1p", "2p", "3p"}
local neg_imp_person_number_list = {"2s", "3s", "1p", "2p", "3p"}
person_number_to_reflexive_pronoun = {
["1s"] = "me",
["2s"] = "te",
["3s"] = "se",
["1p"] = "nos",
["2p"] = "vos",
["3p"] = "se",
}
local indicator_flags = m_table.listToSet {
"no_pres_stressed", "no_pres1_and_sub",
"only3s", "only3sp", "only3p",
"pp_inv", "irreg", "no_built_in", "e_ei_cat",
}
-- Remove any variant codes e.g. GL_TYPE, PT_TYPE, ALTVAR. Needs to be called from [[Module:gl-reinteg-headword]] on the
-- output of do_generate_forms(). `keep_altvar` leaves ALTVAR; used in the `canonicalize` function of show_forms()
-- because we then process and remove it in `generate_forms`. FIXME: Use metadata for this once it's supported in
-- [[Module:inflection utilities]].
function export.remove_variant_codes(form, keep_altvar)
return rsub(form, keep_altvar and var_code_no_altvar_c or var_code_c, "")
end
-- Initialize all the slots for which we generate forms.
local function add_slots(alternant_multiword_spec)
-- "Basic" slots: All slots that go into the regular table (not the reflexive form-of table).
alternant_multiword_spec.verb_slots_basic = {
{"infinitive", "inf"},
{"infinitive_linked", "inf"},
{"gerund", "ger"},
{"short_pp_ms", "short|m|s|past|part"},
{"short_pp_fs", "short|f|s|past|part"},
{"short_pp_mp", "short|m|p|past|part"},
{"short_pp_fp", "short|f|p|past|part"},
{"pp_ms", "m|s|past|part"},
{"pp_fs", "f|s|past|part"},
{"pp_mp", "m|p|past|part"},
{"pp_fp", "f|p|past|part"},
}
-- Special slots used to handle non-reflexive parts of reflexive verbs in {{gl-reinteg-verb form of}}. For example,
-- for a reflexive-only verb like [[arrepender-se]], we want to be able to use {{gl-reinteg-verb form of}} on
-- [[arrependa]] (which should mention that it is a part of 'me arrependa', first-person singular present
-- subjunctive, and 'se arrependa', third-person singular present subjunctive) or on [[arrependemos]] (which should
-- mention that it is a part of 'arrependemo-nos', first-person plural present indicative or preterite). Similarly,
-- we want to use {{gl-reinteg-verb form of}} on [[arrependendo]] (which should mention that it is a part of
-- 'se ... arrependendo', syntactic variant of [[arrependendo-se]], which is the gerund of [[arrepender-se]]). To
-- do this, we need to be able to map non-reflexive parts like [[arrependa]], [[arrependemos]], [[arrependendo]],
-- etc. to their reflexive equivalent(s), to the tag(s) of the equivalent(s), and, in the case of forms like
-- [[arrependendo]], [[arrepender]] and imperatives, to the separated syntactic variant of the verb+clitic
-- combination. We do this by creating slots for the non-reflexive part equivalent of each basic reflexive slot,
-- and for the separated syntactic-variant equivalent of each basic reflexive slot that is formed of verb+clitic.
-- We use slots in this way to deal with multiword lemmas. Note that we run into difficulties mapping between
-- reflexive verbs, non-reflexive part equivalents, and separated syntactic variants if a slot contains more than
-- one form. To handle this, if there are the same number of forms in two slots we're trying to match up, we assume
-- the forms match one-to-one; otherwise we don't match up the two slots (which means {{gl-reinteg-verb form of}} won't
-- work in this case, but such a case is extremely rare and not worth worrying about). Alternatives that handle
-- this "properly" are significantly more complicated and require non-trivial modifications to
-- [[Module:inflection utilities]].
local need_special_verb_form_of_slots = alternant_multiword_spec.source_template == "gl-reinteg-verb form of" and
alternant_multiword_spec.refl
if need_special_verb_form_of_slots then
alternant_multiword_spec.verb_slots_reflexive_verb_form_of = {
{"infinitive_non_reflexive", "-"},
{"infinitive_variant", "-"},
{"gerund_non_reflexive", "-"},
{"gerund_variant", "-"},
}
else
alternant_multiword_spec.verb_slots_reflexive_verb_form_of = {}
end
-- Add entries for a slot with person/number variants.
-- `verb_slots` is the table to add to.
-- `slot_prefix` is the prefix of the slot, typically specifying the tense/aspect.
-- `tag_suffix` is a string listing the set of inflection tags to add after the person/number tags.
-- `person_number_list` is a list of the person/number slot suffixes to add to `slot_prefix`.
local function add_personal_slot(verb_slots, slot_prefix, tag_suffix, person_number_list)
for _, persnum in ipairs(person_number_list) do
local persnum_tag = all_persons_numbers[persnum]
local slot = slot_prefix .. "_" .. persnum
local accel = persnum_tag .. "|" .. tag_suffix
table.insert(verb_slots, {slot, accel})
end
end
-- Add a personal slot (i.e. a slot with person/number variants) to `verb_slots_basic`.
local function add_basic_personal_slot(slot_prefix, tag_suffix, person_number_list, no_special_verb_form_of_slot)
add_personal_slot(alternant_multiword_spec.verb_slots_basic, slot_prefix, tag_suffix, person_number_list)
-- Add special slots for handling non-reflexive parts of reflexive verbs in {{gl-reinteg-verb form of}}.
-- See comment above in `need_special_verb_form_of_slots`.
if need_special_verb_form_of_slots and not no_special_verb_form_of_slot then
for _, persnum in ipairs(person_number_list) do
local persnum_tag = all_persons_numbers[persnum]
local basic_slot = slot_prefix .. "_" .. persnum
local accel = persnum_tag .. "|" .. tag_suffix
table.insert(alternant_multiword_spec.verb_slots_reflexive_verb_form_of, {basic_slot .. "_non_reflexive", "-"})
end
end
end
add_basic_personal_slot("pres", "pres|ind", person_number_list)
add_basic_personal_slot("impf", "impf|ind", person_number_list)
add_basic_personal_slot("pret", "pret|ind", person_number_list)
add_basic_personal_slot("plup", "plup|ind", person_number_list)
add_basic_personal_slot("fut", "fut|ind", person_number_list)
add_basic_personal_slot("cond", "cond", person_number_list)
add_basic_personal_slot("pres_sub", "pres|sub", person_number_list)
add_basic_personal_slot("impf_sub", "impf|sub", person_number_list)
add_basic_personal_slot("fut_sub", "fut|sub", person_number_list)
add_basic_personal_slot("imp", "imp", imp_person_number_list)
add_basic_personal_slot("pers_inf", "pers|inf", person_number_list)
-- Don't need special non-reflexive-part slots because the negative imperative is multiword, of which the
-- individual words are 'nom' + subjunctive.
add_basic_personal_slot("neg_imp", "neg|imp", neg_imp_person_number_list, "no special verb form of")
-- Don't need special non-reflexive-part slots because we don't want [[arrependendo]] mapping to [[arrependendo-me]]
-- (only [[arrependendo-se]]) or [[arrepender]] mapping to [[arrepender-me]] (only [[arrepender-se]]).
add_basic_personal_slot("infinitive", "inf", person_number_list, "no special verb form of")
add_basic_personal_slot("gerund", "ger", person_number_list, "no special verb form of")
-- Generate the list of all slots.
alternant_multiword_spec.all_verb_slots = {}
for _, slot_and_accel in ipairs(alternant_multiword_spec.verb_slots_basic) do
table.insert(alternant_multiword_spec.all_verb_slots, slot_and_accel)
end
for _, slot_and_accel in ipairs(alternant_multiword_spec.verb_slots_reflexive_verb_form_of) do
table.insert(alternant_multiword_spec.all_verb_slots, slot_and_accel)
end
alternant_multiword_spec.verb_slots_basic_map = {}
for _, slotaccel in ipairs(alternant_multiword_spec.verb_slots_basic) do
local slot, accel = unpack(slotaccel)
alternant_multiword_spec.verb_slots_basic_map[slot] = accel
end
end
local overridable_stems = {}
local function allow_multiple_values(separated_groups, data)
local retvals = {}
for _, separated_group in ipairs(separated_groups) do
local footnotes = data.fetch_footnotes(separated_group)
local retval = {form = separated_group[1], footnotes = footnotes}
table.insert(retvals, retval)
end
return retvals
end
local function simple_choice(choices)
return function(separated_groups, data)
if #separated_groups > 1 then
data.parse_err("For spec '" .. data.prefix .. ":', only one value currently allowed")
end
if #separated_groups[1] > 1 then
data.parse_err("For spec '" .. data.prefix .. ":', no footnotes currently allowed")
end
local choice = separated_groups[1][1]
if not m_table.contains(choices, choice) then
data.parse_err("For spec '" .. data.prefix .. ":', saw value '" .. choice .. "' but expected one of '" ..
table.concat(choices, ",") .. "'")
end
return choice
end
end
for _, overridable_stem in ipairs {
"pres_unstressed",
"pres_stressed",
"pres1_and_sub",
-- Don't include pres1; use pres_1s if you need to override just that form
"impf",
"full_impf",
{"pret_conj", simple_choice({"irreg", "ar", "er", "ir"}) },
"pret_base",
"pret",
"gl_short_pret",
"pt_pret_1s",
"pt_pret_3s",
"fut",
"cond",
"pres_sub_stressed",
"pres_sub_unstressed",
{"sub_conj", simple_choice({"ar", "er"}) },
"plup",
"impf_sub",
"fut_sub",
"pers_inf",
"pp",
"short_pp",
} do
if type(overridable_stem) == "string" then
overridable_stems[overridable_stem] = allow_multiple_values
else
local stem, validator = unpack(overridable_stem)
overridable_stems[stem] = validator
end
end
-- Useful as the value of the `match` property of a built-in verb. `main_verb_spec` is a Lua pattern that should match
-- the non-prefixed part of a verb, and `prefix_specs` is a list of Lua patterns that should match the prefixed part of
-- a verb. If a prefix spec is preceded by ^, it must match exactly at the beginning of the verb; otherwise, additional
-- prefixes (e.g. re-, des-) may precede. Return the prefix and main verb.
local function match_against_verbs(main_verb_spec, prefix_specs)
return function(verb)
for _, prefix_spec in ipairs(prefix_specs) do
if prefix_spec:find("^%^") then
-- must match exactly
prefix_spec = prefix_spec:gsub("^%^", "")
if prefix_spec == "" then
-- We can't use the second branch of the if-else statement because an empty () returns the current position
-- in rmatch().
local main_verb = rmatch(verb, "^(" .. main_verb_spec .. ")$")
if main_verb then
return "", main_verb
end
else
local prefix, main_verb = rmatch(verb, "^(" .. prefix_spec .. ")(" .. main_verb_spec .. ")$")
if prefix then
return prefix, main_verb
end
end
else
local prefix, main_verb = rmatch(verb, "^(.*" .. prefix_spec .. ")(" .. main_verb_spec .. ")$")
if prefix then
return prefix, main_verb
end
end
end
return nil
end
end
--[=[
Built-in (usually irregular) conjugations.
Each entry is processed in turn and consists of an object with two fields:
1. match=: Specifies the built-in verbs that match this object.
2. forms=: Specifies the built-in stems and forms for these verbs.
The value of match= is either a string beginning with "^" (match only the specified verb), a string not beginning
with "^" (match any verb ending in that string), or a function that is passed in the verb and should return the prefix
of the verb if it matches, otherwise nil. The function match_against_verbs() is provided to facilitate matching a set
of verbs with a common ending and specific prefixes (e.g. [[ter]] and [[ater]] but not [[abater]], etc.).
The value of forms= is a table specifying stems and individual override forms. Each key of the table names either a
stem (e.g. `pres_stressed`), a stem property (e.g. `vowel_alt`) or an individual override form (e.g. `pres_1s`).
Each value of a stem can either be a string (a single stem), a list of strings, or a list of objects of the form
{form = STEM, footnotes = {FOONOTES}}. Each value of an individual override should be of exactly the same form except
that the strings specify full forms rather than stems. The values of a stem property depend on the specific property
but are generally strings or booleans.
In order to understand how the stem specifications work, it's important to understand the phonetic modifications done
by combine_stem_ending(). In general, the complexities of predictable prefix, stem and ending modifications are all
handled in this function. In particular:
1. Spelling-based modifications (c/z, g/gu, gu/gü, g/j) occur automatically as appropriate for the ending.
2. If the stem begins with an acute accent, the accent is moved onto the last vowel of the prefix (for handling verbs
in -uar such as [[minguar]], pres_3s 'míngua').
3. If the ending begins with a double asterisk, this is a signal to conditionally delete the accent on the last letter
of the stem. "Conditionally" means we don't do it if the last two letters would form a diphthong without the accent
on the second one (e.g. in [[sair]], with stem 'saí'); but as an exception, we do delete the accent in stems
ending in -guí, -quí (e.g. in [[conseguir]]) because in this case the ui isn't a diphthong.
4. If the ending begins with an asterisk, this is a signal to delete the accent on the last letter of the stem, e.g.
fizé -> fizermos. Unlike for **, this removal is unconditional, so we get e.g. 'sairmos' not #'saírmos'.
5. If ending begins with i, it must get an accent after an unstressed vowel (in some but not all cases) to prevent the
two merging into a diphthong. See combine_stem_ending() for specifics.
The following stems are recognized:
-- pres_unstressed: The present indicative unstressed stem (1p, 2p). Also controls the imperative 2p
and gerund. Defaults to the infinitive stem (minus the ending -ar/-er/-ir/-or).
-- pres_stressed: The present indicative stressed stem (1s, 2s, 3s, 3p). Also controls the imperative 2s.
Default is empty if indicator `no_pres_stressed`, else a vowel alternation if such an indicator is given
(e.g. `ue`, `ì`), else the infinitive stem.
-- pres1_and_sub: Overriding stem for 1s present indicative and the entire subjunctive. Only set by irregular verbs
and by the indicators `no_pres_stressed` (e.g. [[precaver]]) and `no_pres1_and_sub` (since verbs of this sort,
e.g. [[puir]], are missing the entire subjunctive as well as the 1s present indicative). Used by many irregular
verbs, e.g. [[caber]], verbs in '-air', [[dizer]], [[ter]], [[valer]], etc. Some verbs set this and then supply an
override for the pres_1sg if it's irregular, e.g. [[saber]], with irregular subjunctive stem "saib-" and special
1s present indicative "sei".
-- pres1: Special stem for 1s present indicative. Normally, do not set this explicitly. If you need to specify an
irregular 1s present indicative, use the form override pres_1s= to specify the entire form. Defaults to
pres1_and_sub if given, else pres_stressed.
-- pres_sub_unstressed: The present subjunctive unstressed stem (1p, 2p). Defaults to pres1_and_sub if given, else the
infinitive stem.
-- pres_sub_stressed: The present subjunctive stressed stem (1s, 2s, 3s, 1p). Defaults to pres1.
-- sub_conj: Determines the set of endings used in the subjunctive. Should be one of "ar" or "er".
-- impf: The imperfect stem (not including the -av-/-i- stem suffix, which is determined by the conjugation). Defaults
to the infinitive stem.
-- full_impf: The full imperfect stem missing only the endings (-a, -as, -am, etc.). Used for verbs with irregular
imperfects such as [[ser]], [[ter]], [[vir]] and [[pôr]]. Needs to include an accent on the stressed vowel, which
will automatically be removed when not needed.
-- pret_conj: Determines the set of endings used in the preterite. Should be one of "ar", "er", "ir" or "irreg".
Defaults to the conjugation as determined from the infinitive. When pret_conj == "irreg", `pret` is used, otherwise
`pret_base`.
-- pret_base: The preterite stem (not including the -a-/-e-/-i- stem suffix). Defaults to the infinitive stem.
Only used when pret_conj ~= "irreg".
-- pret: The full preterite stem missing only the endings (-ste, -mos, etc.). Needs to include the accent on the final
vowel that occurs in some forms, e.g. 'figé' for [[fazer]], 'fô' for [[ser]]; the accent will automatically be
removed when not needed. Only used for verbs with irregular preterites (pret_conj == "irreg") such as [[fazer]],
[[poder]], [[trazer]], etc. The pret_1s and pret_3s are handled using the gl_short_pret stem instead for
"Galician"-ending forms (pret_1s '-em', pret_3s '-o') and using pt_pret_1s and pt_pret_3s for "Portuguese"-ending
forms. Defaults to `pret_base` + the accented conjugation vowel.
-- gl_short_pret: The short preterite stem, used with "Galician" 1s and 3s endings (pret_1s '-em', pret_3s '-o'). Only
used with irregular preterites (pret_conj == "irreg"). Normally derived from gl_pret by deleting the final vowel,
and doesn't need to be given explicitly.
-- pt_pret_1s: The "Portuguese" pret_1s form. In addition to this, the "Galician" pret_1s form will be included, formed
from gl_short_pret by adding '-em'. Does not need to be given if an override for pret_1s is supplied.
-- pt_pret_3s: The "Portuguese" pret_3s form. In addition to this, the "Galician" pret_3s form will be included, formed
from gl_short_pret by adding '-o' (which may cause the preceding consonant to shift to preserve the sound). Does
not need to be given if an override for pret_3s is supplied.
-- fut: The future stem. Defaults to the infinitive stem + the unaccented conjugation vowel.
-- cond: The conditional stem. Defaults to `fut`.
-- impf_sub: The imperfect subjunctive stem. Needs to include the accent on the final vowel that occurs in some forms;
see `pret` for more information. Defaults to `pret`.
-- fut_sub: The future subjunctive stem. Needs to include the accent on the final vowel that occurs in some forms; see
`gl_pret` for more information. Defaults to the merger of `gl_pret` and `pt_pret`.
-- plup: The pluperfect stem. Needs to include the accent on the final vowel that occurs in some forms; see `pret` for
more information. Defaults to `pret`.
-- pers_inf: The personal infinitive stem. Defaults to the infinitive stem + the accented conjugation vowel.
-- pp: The masculine singular past participle. Default is based on the verb conjugation: infinitive stem + '-ado' for
-ar verbs, otherwise infinitive stem + '-ido'.
-- short_pp: The short masculine singular past participle, for verbs with such a form. No default.
-- pp_inv: `true` if the past participle exists only in the masculine singular.
]=]
local built_in_conjugations = {
--------------------------------------------------------------------------------------------
-- -ar --
--------------------------------------------------------------------------------------------
-- Verbs not needing entries here:
--
-- (1) Verbs with short past participles: need to specify the short pp explicitly.
--
-- aceitar: use <short_pp:aceite>
-- anexar, completar, expressar, expulsar, findar, fritar, ganhar, gastar, limpar, pagar, pasmar, pegar, soltar:
-- use <short_pp:anexo> etc.
-- assentar: use <short_pp:assente>
-- entregar: use <short_pp:entregue>
-- enxugar: use <short_pp:enxuto>
-- matar: use <short_pp:morto>
--
-- (2) Verbs with orthographic consonant alternations: handled automatically.
--
-- -car (brincar, buscar, pecar, trancar, etc.): automatically handled in combine_stem_ending()
-- -çar (alcançar, começar, laçar): automatically handled in combine_stem_ending()
-- -gar (apagar, cegar, esmagar, largar, navegar, resmungar, sugar, etc.): automatically handled in combine_stem_ending()
--
-- (3) Verbs with vowel alternations: need to specify the alternation explicitly unless it always happens, in
-- which case it's handled automatically through an entry below.
--
-- esmiuçar changing to esmiúço: use <ú>
-- faiscar changing to faísco: use <í>
-- -iar changing to -eio (ansiar, incendiar, mediar, odiar, remediar, etc.): use <ei>
-- -izar changing to -ízo (ajuizar, enraizar, homogeneizar, plebeizar, etc.): use <í>
-- mobiliar changing to mobílio: use <í>
-- reusar changing to reúso: use <ú>
-- saudar changing to saúdo: use <ú>
-- tuitar/retuitar changing to (re)tuíto: use <í>
{
-- dar, desdar
match = match_against_verbs("dar", {"^", "^des", "^re"}),
forms = {
pres_1s = "dou",
pres_2s = "dás",
pres_3s = "dá",
-- damos, dades/dais regular
pres_3p = {GL_TYPE .. "dam", PT_TYPE .. "dão"},
pret_conj = "irreg", pret = "dé", pret_1s = "dei", pret_3s = "deu",
pres_sub_1s = "dê",
pres_sub_2s = "dês",
pres_sub_3s = "dê",
-- demos, dedes/deis regular
pres_sub_3p = {GL_TYPE .. "dem", PT_TYPE .. "deem"},
irreg = true,
}
},
{
-- -ear (frear, nomear, semear, etc.)
match = "ear",
forms = {
pres_stressed = {"ei", GL_ALTVAR .. "e"},
e_ei_cat = true,
}
},
{
-- estar
match = match_against_verbs("estar", {"^", "sob", "sobr"}),
forms = {
pres_1s = "estou",
pres_2s = "estás",
pres_3s = "está",
pres_3p = {GL_TYPE .. "estám", PT_TYPE .. "estão"},
pres1_and_sub = "estej", -- only for subjunctive as we override pres_1s
sub_conj = "er",
pret_conj = "irreg", pret = "estivé", pt_pret_1s = "estive", pt_pret_3s = "esteve",
-- [[sobestar]], [[sobrestar]] are transitive so they have fully inflected past participles
pp_inv = function(base, prefix) return prefix == "" end,
irreg = true,
}
},
--------------------------------------------------------------------------------------------
-- -er --
--------------------------------------------------------------------------------------------
-- Verbs not needing entries here:
--
-- precaver: use <no_pres_stressed>
-- -cer (verbs in -ecer, descer, vencer, etc.): automatically handled in combine_stem_ending()
-- -ger (proteger, reger, etc.): automatically handled in combine_stem_ending()
-- -guer (erguer/reerguer/soerguer): automatically handled in combine_stem_ending()
{
-- benzer
match = "benzer",
forms = {short_pp = "bento"}
},
{
-- caber
match = "caber",
forms = {
pres1_and_sub = "caib",
pret_conj = "irreg", pret = "coubé", pt_pret_1s = "coube", pt_pret_3s = "coube",
irreg = true,
}
},
{
-- crer, descrer
match = "crer",
forms = {
pres_2s = "crês", pres_3s = "crê",
pres_2p = "credes", pres_3p = {GL_TYPE .. "crem", PT_TYPE .. "creem"},
pres1_and_sub = {"crei", GL_ALTVAR .. "cre"},
irreg = true,
}
},
{
-- dizer, bendizer, condizer, contradizer, desdizer, maldizer, predizer, etc.
match = "dizer",
forms = {
-- use 'digu' because we're in a front environment; if we use 'dig', we'll get '#dijo'
pres1_and_sub = "digu",
pres_2s = {GL_TYPE .. "dis", PT_TYPE .. "dizes"},
pres_3s = {GL_TYPE .. "di", PT_TYPE .. "diz"},
pres_3p = {GL_TYPE .. "dim", PT_TYPE .. "dizem"},
pret_conj = "irreg", pret = {GL_TYPE .. "dixé", PT_TYPE .. "dissé"},
pt_pret_1s = "disse", pt_pret_3s = "disse",
pp = "dito",
fut = "dir",
irreg = true,
}
},
{
-- eleger, reeleger
match = "eleger",
forms = {short_pp = "eleito"}
},
{
-- acender, prender; not desprender, etc.
match = match_against_verbs("ender", {"^ac", "^pr"}),
forms = {short_pp = "eso"}
},
{
-- fazer, afazer, contrafazer, desfazer, liquefazer, perfazer, putrefazer, rarefazer, refazer, satisfazer, tumefazer
match = "fazer",
forms = {
-- use 'fagu' because we're in a front environment; if we use 'fag', we'll get '#fajo'
pres1_and_sub = {GL_TYPE .. "fagu", PT_TYPE .. "faç"},
pres_2s = {GL_TYPE .. "fás", PT_TYPE .. "fazes"},
pres_3s = {GL_TYPE .. "fai", PT_TYPE .. "faz"},
pres_3p = {GL_TYPE .. "fam", PT_TYPE .. "fazem"},
pret_conj = "irreg", pret = {GL_TYPE .. "figé", PT_TYPE .. "fizé", GL_ONLY_ALTVAR .. "fizé"},
pt_pret_1s = "fiz", pt_pret_3s = "fez",
pp = "feito",
fut = "far",
irreg = true,
}
},
{
match = "^haver",
forms = {
pres_1s = "hei",
pres_2s = "hás",
pres_3s = {"há", {form = GL_ALTVAR .. "hai", footnotes = {"[also impersonal]"}}},
pres_3p = {GL_TYPE .. "ham", PT_TYPE .. "hão"},
pres1_and_sub = "haj", -- only for subjunctive as we override pres_1s
pret_conj = "irreg", pret = "houvé", pt_pret_1s = "houve", pt_pret_3s = "houve",
imp_2s = "há",
irreg = true,
}
},
-- reaver below under r-
{
-- jazer, adjazer
match = "jazer",
forms = {
pres_3s = "jaz",
irreg = true,
}
},
{
-- ler, reler, tresler; not excel(l)er, valer, etc.
match = match_against_verbs("ler", {"^", "^re", "tres"}),
forms = {
pres_2s = "lês", pres_3s = "lê",
pres_2p = "ledes", pres_3p = {GL_TYPE .. "lem", PT_TYPE .. "leem"},
pres1_and_sub = {"lei", GL_ALTVAR .. "le"},
irreg = true,
}
},
{
-- morrer, desmorrer
match = "morrer",
forms = {short_pp = "morto"}
},
{
-- moer, but not remoer
match = "^moer",
forms = {
pres_2s = "móis", pres_3s = "mói",
-- impf -ía etc., pret_1s -oí and pp -oído handled automatically in combine_stem_ending()
pres1_and_sub = {"mo", GL_ALTVAR .. "moi"},
short_pp = "mudo",
irreg = true,
}
},
{
-- doer, remoer, roer/corroer, soer
match = "oer",
forms = {
pres_2s = "óis", pres_3s = "ói",
-- impf -ía etc., pret_1s -oí and pp -oído handled automatically in combine_stem_ending()
pres1_and_sub = {"o", GL_ALTVAR .. "oi"},
irreg = true,
}
},
{
-- perder
match = "perder",
forms = {
-- use 'perqu' because we're in a front environment; if we use 'perc', we'll get '#perço'
-- we don't tag these forms GL_TYPE or PT_TYPE because both occur with both endings -ais/-ades
pres1_and_sub = {"perd", "perqu"},
irreg = true,
}
},
{
-- poder
match = "poder",
forms = {
pres1_and_sub = {GL_TYPE .. "pod", PT_TYPE .. "poss"},
pret_conj = "irreg", pret = "pudé", pt_pret_1s = "pude", pt_pret_3s = "pôde",
irreg = true,
}
},
{
-- prazer, aprazer, comprazer, desprazer
-- FIXME: comprazer also has regular preterite
match = "prazer",
forms = {
pres_3s = "praz",
pret_conj = "irreg", pret = "prouvé", pt_pret_1s = "prouve", pt_pret_3s = "prouve",
only3sp = function(base, prefix) return prefix == "a" end,
imp_2s = {GL_TYPE .. "praze", PT_TYPE .. "praz"},
irreg = true,
}
},
-- prover below, just below ver
{
-- requerer; must precede querer
match = "requerer",
forms = {
pres_3s = "requer",
pres1_and_sub = "requeir",
imp_2s = {"requer"},
-- regular preterite, unlike [[querer]]
irreg = true,
}
},
{
-- querer, desquerer, malquerer
match = "querer",
forms = {
pres_1s = "quero", pres_3s = "quer",
pres1_and_sub = "queir", -- only for subjunctive as we override pres_1s
pret_conj = "irreg", pret = {GL_TYPE .. "quigé", PT_TYPE .. "quisé"},
pt_pret_1s = "quis", pt_pret_3s = "quis",
irreg = true,
}
},
{
match = "reaver",
forms = {
pres_1s = "reei",
pres_2s = "reás",
pres_3s = "reá",
pres_3p = {GL_TYPE .. "ream", PT_TYPE .. "reão"},
pres1_and_sub = "reaj", -- only for subjunctive as we override pres_1s
pret_conj = "irreg", pret = "reouvé", pt_pret_1s = "reouve", pt_pret_3s = "reouve",
irreg = true,
}
},
{
-- saber, ressaber
match = "saber",
forms = {
pres_1s = "sei",
pres1_and_sub = "saib", -- only for subjunctive as we override pres_1s
pret_conj = "irreg", pret = "soubé", pt_pret_1s = "soube", pt_pret_3s = "soube",
irreg = true,
}
},
{
-- escrever/reescrever, circunscrever, descrever/redescrever, inscrever, prescrever, proscrever, subscrever,
-- transcrever, others?
match = "screver",
forms = {
pp = "scrito",
irreg = true,
}
},
{
-- suspender
match = "suspender",
forms = {short_pp = "suspenso"}
},
{
match = "^ser",
forms = {
pres_1s = "sou", pres_2s = "és", pres_3s = "é",
pres_1p = "somos", pres_2p = {GL_TYPE .. "sodes", PT_TYPE .. "sois"},
pres_3p = {GL_TYPE .. "som", PT_TYPE .. "são"},
pres1_and_sub = "sej", -- only for subjunctive as we override pres_1s
full_impf = "ér",
pret_conj = "irreg", pret = "fô", pret_1s = {GL_TYPE .. "fum", PT_TYPE .. "fui"}, pret_3s = "foi",
imp_2s = "sê", imp_2p = "sede",
pp_inv = true,
irreg = true,
}
},
{
-- We want to match abster, conter, deter, etc. but not abater, cometer, etc. No way to avoid listing each verb.
match = match_against_verbs("ter", {"abs", "^a", "con", "de", "entre", "man", "ob", "^re", "sus", "^"}),
forms = {
-- FIXME, Estraviz says 'contens', 'detens' etc. but that may be a typo
pres_2s = function(base, prefix) return {GL_TYPE .. "tés", PT_TYPE .. (prefix == "" and "tens" or "téns")} end,
-- FIXME, Estraviz says 'contem', 'detem' etc. but that may be a typo
pres_3s = function(base, prefix) return prefix == "" and "tem" or "tém" end,
pres_2p = "tendes", pres_3p = {GL_TYPE .. "tenhem", PT_TYPE .. "têm", GL_ALTVAR .. "tém"},
pres1_and_sub = "tenh",
full_impf = "tính",
pret_conj = "irreg", pret = "tivé", pt_pret_1s = "tive", pt_pret_3s = "teve",
irreg = true,
}
},
{
match = "trazer",
forms = {
-- use 'tragu' because we're in a front environment; if we use 'trag', we'll get '#trajo'
pres1_and_sub = "tragu", pres_3s = "traz",
pret_conj = "irreg", pret = "trouxé", pt_pret_1s = "trouxe", pt_pret_3s = "trouxe",
fut = "trar",
irreg = true,
}
},
{
match = "traguer",
forms = {
pret_conj = "irreg", pret = "trouxé", pt_pret_1s = "trouxe", pt_pret_3s = "trouxe",
irreg = true,
}
},
{
-- valer, desvaler, equivaler
match = "valer",
forms = {
pres1_and_sub = "valh",
irreg = true,
}
},
{
-- We want to match antever etc. but not absolver, atrever etc. No way to avoid listing each verb.
match = match_against_verbs("ver", {"ante", "entre", "pre", "^re", "^"}),
forms = {
pres_2s = "vês", pres_3s = "vê",
pres_2p = "vedes",
pres_3p = function(base, prefix) return {GL_TYPE .. (prefix == "" and "vem" or "vêm"), PT_TYPE .. "veem"} end,
pres1_and_sub = "vej",
pret_conj = "irreg", pret = "ví", pret_1s = {GL_TYPE .. "vim", PT_TYPE .. "vi"}, pret_3s = "viu",
pp = "visto",
irreg = true,
}
},
{
-- [[prover]] and [[desprover]] have regular preterite and past participle
match = "prover",
forms = {
pres_2s = "provês", pres_3s = "provê",
-- FIXME: Estraviz says 'provem' but that may be a typo
pres_2p = "provedes", pres_3p = {GL_TYPE .. "provêm", PT_TYPE .. "proveem"},
pres1_and_sub = "provej",
irreg = true,
}
},
{
-- volver, devolver, envolver, revolver, etc.
match = "volver",
forms = {short_pp = "volto"},
},
--------------------------------------------------------------------------------------------
-- -ir --
--------------------------------------------------------------------------------------------
-- Verbs not needing entries here:
--
-- abolir: use <u-o>
-- barrir: use <only3sp>
-- carpir, colorir, demolir: use <no_pres1_and_sub>
-- descolorir: use <no_pres1_and_sub>
-- delir, espavorir, falir, florir, remir, renhir: use <no_pres_stressed>
-- empedernir: use <i-e>
-- transir: regular
-- aspergir, despir, flectir/deflectir/genuflectir/genufletir/reflectir/refletir, mentir/desmentir,
-- sentir/assentir/consentir/dissentir/pressentir/ressentir, convergir/divergir, aderir/adherir,
-- ferir/auferir/conferir/deferir/desferir/diferir/differir/inferir/interferir/preferir/proferir/referir/transferir,
-- gerir/digerir/ingerir/sugerir, preterir, competir/repetir, servir, advertir/animadvertir/divertir,
-- vestir/investir/revestir/travestir, seguir/conseguir/desconseguir/desseguir/perseguir/prosseguir: use <i-e>
-- inerir: use <i-e>
-- compelir/expelir/impelir/repelir: use <i-e>
-- dormir, engolir, tossir, subir, acudir/sacudir, fugir, sumir/consumir (NOT assumir/presumir/resumir): use <u-o>
-- polir/repolir: use <u>
-- premir: use <i>
-- extorquir/retorquir: <u-o,u>
-- agredir/progredir/regredir/transgredir: use <i>
-- denegrir, prevenir: use <i>
-- eclodir: use <u-o>
-- cerzir: use <i-e>
-- proibir/coibir: use <í>
-- reunir: use <ú>
-- parir/malparir: use <no_pres_stressed>
-- explodir/implodir: use <u-o>
--
-- -cir alternations (aducir, ressarcir): automatically handled in combine_stem_ending()
-- -gir alternations (agir, dirigir, exigir): automatically handled in combine_stem_ending()
-- -guir alternations (e.g. conseguir): automatically handled in combine_stem_ending()
-- -quir alternations (e.g. extorquir): automatically handled in combine_stem_ending()
{
-- verbs in -air (cair, sair, trair and derivatives: decair/descair/recair, sobres(s)air,
-- abstrair/atrair/contrair/distrair/extrair/protrair/retrair/subtrair)
match = "air",
forms = {
pres1_and_sub = "ai", pres_2s = "ais", pres_3s = "ai",
-- all occurrences of accented í in endings handled in combine_stem_ending()
irreg = true,
}
},
{
-- abrir/desabrir/reabrir
match = "abrir",
forms = {pp = "aberto"}
},
{
-- cobrir/descobrir/encobrir/recobrir/redescobrir
match = "cobrir",
forms = {vowel_alt = "u-o", pp = "coberto"}
},
{
-- conduzir, produzir, reduzir, traduzir, etc.; luzir, reluzir, tremeluzir
match = "uzir",
forms = {
pres_3s = "uz",
-- FIXME, is this correct?
imp_2s = "uze",
irreg = true,
}
},
{
-- pedir, desimpedir, despedir, espedir, expedir, impedir
-- medir
-- comedir
match = match_against_verbs("edir", {"m", "p"}),
forms = {
pres1_and_sub = {GL_TYPE .. "id", PT_TYPE .. "eç"},
irreg = true,
}
},
{
-- frigir
match = "frigir",
forms = {vowel_alt = "i-e", short_pp = "frito"},
},
{
-- inserir
match = "inserir",
forms = {vowel_alt = "i-e"},
},
{
-- ir
match = "^ir",
forms = {
pres_1s = "vou", pres_2s = {GL_TYPE .. "vás", PT_TYPE .. "vais"}, pres_3s = "vai",
pres_1p = {GL_TYPE .. "imos", PT_TYPE .. "vamos"}, pres_2p = "ides",
pres_3p = {GL_TYPE .. "vam", PT_TYPE .. "vão"},
pres_sub_1s = {GL_TYPE .. "vaia", PT_TYPE .. "vá"},
pres_sub_2s = {GL_TYPE .. "vaias", PT_TYPE .. "vás"},
pres_sub_3s = {GL_TYPE .. "vaia", PT_TYPE .. "vá"},
pres_sub_1p = {GL_TYPE .. "vaiamos", PT_TYPE .. "vamos"},
pres_sub_2p = {GL_TYPE .. "vaiades", PT_TYPE .. "vades"},
pres_sub_3p = {GL_TYPE .. "vaiam", PT_TYPE .. "vão"},
pret_conj = "irreg", pret = "fô", pret_1s = {GL_TYPE .. "fum", PT_TYPE .. "fui"}, pret_3s = "foi",
irreg = true,
}
},
{
-- emergir, imergir, submergir
match = "mergir",
forms = {vowel_alt = "i-e", short_pp = "merso"},
},
{
match = "ouvir",
forms = {
pres1_and_sub = {"ouç", ALTVAR .. "oiç"},
irreg = true,
}
},
{
-- exprimir, imprimir, comprimir (but not descomprimir per Priberam), deprimir, oprimir/opprimir (but not reprimir,
-- suprimir/supprimir per Priberam)
match = match_against_verbs("primir", {"^com", "ex", "im", "de", "^o", "op"}),
forms = {short_pp = "presso"}
},
{
-- rir, sorrir
match = match_against_verbs("rir", {"^", "sor"}),
forms = {
pres_2s = "ris", pres_3s = "ri", pres_2p = "rides", pres_3p = {GL_TYPE .. "rim", PT_TYPE .. "riem"},
pres1_and_sub = "ri",
irreg = true,
}
},
{
-- distinguir, extinguir
match = "tinguir",
forms = {
short_pp = "tinto",
-- gu/g alternations handled in combine_stem_ending()
}
},
{
-- verbs in -truir (construir, destruir, reconstruir) but not obstruir/desobstruir, instruir, which are handled
-- by the default -uir handler below
match = match_against_verbs("struir", {"con", "de"}),
forms = {
pres_2s = {"stróis", ALTVAR .. "struis"}, pres_3s = {"strói", ALTVAR .. "strui"},
pres_3p = {"stroem", ALTVAR .. "struem"},
-- all occurrences of accented í in endings handled in combine_stem_ending()
irreg = true,
}
},
{
-- remaining verbs in -uir (concluir/excluir/incluir/concruir/concruyr, abluir/diluir, afluir/fluir/influir,
-- aluir, anuir, atribuir/contribuir/distribuir/redistribuir/retribuir/substituir, coevoluir/evoluir,
-- constituir/destituir/instituir/reconstituir/restituir, derruir, diminuir, estatuir, fruir/usufruir, imbuir,
-- imiscuir, poluir, possuir, puir, pruir, ruir
-- FIXME: old module lists short pp incluso for incluir that can't be verified, ask about this
-- FIXME: handle -uyr verbs?
match = function(verb)
-- Don't match -guir verbs (e.g. [[seguir]], [[conseguir]]) or -quir verbs (e.g. [[extorquir]])
if verb:find("guir$") or verb:find("quir$") then
return nil
else
return match_against_verbs("uir", {""})(verb)
end
end,
forms = {
pres_2s = "uis", pres_3s = "ui",
-- all occurrences of accented í in endings handled in combine_stem_ending()
irreg = true,
}
},
{
-- We want to match advir, convir, devir, etc. but not ouvir, servir, etc. No way to avoid listing each verb.
match = match_against_verbs("vir", {"ad", "^a", "con", "contra", "de", "^desa", "inter", "pro", "^re", "sobre", "^"}),
forms = {
-- FIXME, Estraviz says 'convens', 'devens' etc. but that may be a typo
pres_2s = function(base, prefix) return {GL_TYPE .. "vés", PT_TYPE .. (prefix == "" and "vens" or "véns")} end,
-- FIXME, Estraviz says 'convem', 'devem' etc. but that may be a typo
pres_3s = function(base, prefix) return prefix == "" and "vem" or "vém" end,
pres_2p = "vindes", pres_3p = {GL_TYPE .. "venhem", PT_TYPE .. "vêm", GL_ALTVAR .. "vém"},
pres1_and_sub = "venh",
full_impf = "vính",
pret_conj = "irreg", pret = {GL_TYPE .. "vinhé", PT_TYPE .. "vié"},
pret_1s = "vim", pret_3s = {GL_TYPE .. "véu", PT_TYPE .. "veio"},
pp = "vindo",
irreg = true,
}
},
--------------------------------------------------------------------------------------------
-- misc --
--------------------------------------------------------------------------------------------
{
-- pôr, antepor, apor, compor/decompor/descompor, contrapor, depor, dispor, expor, impor, interpor, justapor,
-- opor, pospor, propor, repor, sobrepor, supor/pressupor, transpor, decompor, others?
match = "p[oô]r",
forms = {
pres1_and_sub = "ponh",
pres_2s = {GL_TYPE .. "pós", PT_TYPE .. "pões", GL_ALTVAR .. "pons"},
pres_3s = {GL_TYPE .. "pom", PT_TYPE .. "põe"},
pres_1p = "pomos", pres_2p = "pondes",
pres_3p = {GL_TYPE .. "ponhem", PT_TYPE .. "põem", GL_ALTVAR .. "póm"},
full_impf = "púnh",
pret_conj = "irreg", pret = {GL_TYPE .. "pugé", PT_TYPE .. "pusé"}, pt_pret_1s = "pus", pt_pret_3s = "pôs",
pers_inf = "po",
gerund = "pondo", pp = "posto",
irreg = true,
}
},
}
local function skip_slot(base, slot, allow_overrides)
if not allow_overrides and (base.basic_overrides[slot] or
base.refl and base.basic_reflexive_only_overrides[slot]) then
-- Skip any slots for which there are overrides.
return true
end
if base.only3s and (slot:find("^pp_f") or slot:find("^pp_mp")) then
-- diluviar, atardecer, neviscar; impersonal verbs have only masc sing pp
return true
end
if not slot:find("[123]") then
-- Don't skip non-personal slots.
return false
end
if base.nofinite then
return true
end
if (base.only3s or base.only3sp or base.only3p) and (slot:find("^imp_") or slot:find("^neg_imp_")) then
return true
end
if base.only3s and not slot:find("3s") then
-- diluviar, atardecer, neviscar
return true
end
if base.only3sp and not slot:find("3[sp]") then
-- atañer, concernir
return true
end
if base.only3p and not slot:find("3p") then
-- [[caer cuatro gotas]], [[caer chuzos de punta]], [[entrarle los siete males]]
return true
end
return false
end
-- Apply vowel alternations to stem.
local function apply_vowel_alternations(stem, alternations)
local alternation_stems = {}
local saw_pres1_and_sub = false
local saw_pres_stressed = false
-- Process alternations other than +.
for _, altobj in ipairs(alternations) do
local alt = altobj.form
local pres1_and_sub, pres_stressed, err
-- Treat final -gu, -qu as a consonant, so the previous vowel can alternate (e.g. conseguir -> consigo).
-- This means a verb in -guar can't have a u-ú alternation but I don't think there are any verbs like that.
stem = rsub(stem, "([gq])u$", "%1" .. TEMPC1)
if alt == "+" then
-- do nothing yet
elseif alt == "ei" then
local before_last_vowel = rmatch(stem, "^(.*)i$")
if not before_last_vowel then
err = "stem should end in -i"
else
pres1_and_sub = nil
pres_stressed = before_last_vowel .. "ei"
end
else
local before_last_vowel, last_vowel, after_last_vowel = rmatch(stem, "^(.*)(" .. V .. ")(.-[ui])$")
if not before_last_vowel then
before_last_vowel, last_vowel, after_last_vowel = rmatch(stem, "^(.*)(" .. V .. ")(.-)$")
end
if alt == "i-e" then
if last_vowel == "e" or last_vowel == "i" then
pres1_and_sub = before_last_vowel .. "i" .. after_last_vowel
if last_vowel == "i" then
pres_stressed = before_last_vowel .. "e" .. after_last_vowel
end
else
err = "should have -e- or -i- as the last vowel"
end
elseif alt == "i" then
if last_vowel == "e" then
pres1_and_sub = before_last_vowel .. "i" .. after_last_vowel
pres_stressed = pres1_and_sub
else
err = "should have -e- as the last vowel"
end
elseif alt == "u-o" then
if last_vowel == "o" or last_vowel == "u" then
pres1_and_sub = before_last_vowel .. "u" .. after_last_vowel
if last_vowel == "u" then
pres_stressed = before_last_vowel .. "o" .. after_last_vowel
end
else
err = "should have -o- or -u- as the last vowel"
end
elseif alt == "u" then
if last_vowel == "o" then
pres1_and_sub = before_last_vowel .. "u" .. after_last_vowel
pres_stressed = pres1_and_sub
else
err = "should have -o- as the last vowel"
end
elseif alt == "í" then
if last_vowel == "i" then
pres_stressed = before_last_vowel .. "í" .. after_last_vowel
else
err = "should have -i- as the last vowel"
end
elseif alt == "ú" then
if last_vowel == "u" then
pres_stressed = before_last_vowel .. "ú" .. after_last_vowel
else
err = "should have -u- as the last vowel"
end
else
error("Internal error: Unrecognized vowel alternation '" .. alt .. "'")
end
end
if pres1_and_sub then
pres1_and_sub = {form = pres1_and_sub:gsub(TEMPC1, "u"), footnotes = altobj.footnotes}
saw_pres1_and_sub = true
end
if pres_stressed then
pres_stressed = {form = pres_stressed:gsub(TEMPC1, "u"), footnotes = altobj.footnotes}
saw_pres_stressed = true
end
table.insert(alternation_stems, {
altobj = altobj,
pres1_and_sub = pres1_and_sub,
pres_stressed = pres_stressed,
err = err
})
end
-- Now do +. We check to see which stems are used by other alternations and specify those so any footnotes are
-- properly attached.
for _, alternation_stem in ipairs(alternation_stems) do
if alternation_stem.altobj.form == "+" then
local stemobj = {form = stem, footnotes = alternation_stem.altobj.footnotes}
alternation_stem.pres1_and_sub = saw_pres1_and_sub and stemobj or nil
alternation_stem.pres_stressed = saw_pres_stressed and stemobj or nil
end
end
return alternation_stems
end
-- Add the `stem` to the `ending` for the given `slot` and apply any phonetic modifications.
-- WARNING: This function is written very carefully; changes to it can easily have unintended consequences.
local function combine_stem_ending(base, slot, prefix, stem, ending, dont_include_prefix)
-- If the stem begins with an acute accent, this is a signal to move the accent onto the last vowel of the prefix.
-- Cf. míngua of minguar.
if stem:find("^" .. AC) then
stem = rsub(stem, "^" .. AC, "")
if dont_include_prefix then
error("Internal error: Can't handle acute accent at beginning of stem if dont_include_prefix is given")
end
prefix = rsub(prefix, "([aeiouyAEIOUY])([^aeiouyAEIOUY]*)$", "%1" .. AC .. "%2")
end
-- Use the full stem for checking for -gui ending and such, because 'stem' is just 'u' for [[arguir]],
-- [[delinquir]].
local full_stem = prefix .. stem
-- Include the prefix in the stem unless dont_include_prefix is given (used for the past participle stem).
if not dont_include_prefix then
stem = full_stem
end
-- If the ending begins with a double asterisk, this is a signal to conditionally delete the accent on the last letter
-- of the stem. "Conditionally" means we don't do it if the last two letters would form a diphthong without the accent
-- on the second one (e.g. in [[sair]], with stem 'saí'); but as an exception, we do delete the accent in stems
-- ending in -guí, -quí (e.g. in [[conseguir]]) because in this case the ui isn't a diphthong.
if ending:find("^%*%*") then
ending = rsub(ending, "^%*%*", "")
if rfind(full_stem, "[gq]uí$") or not rfind(full_stem, V .. "[íú]$") then
stem = com.remove_final_accent(stem)
end
end
-- If the ending begins with an asterisk, this is a signal to delete the accent on the last letter of the stem.
-- E.g. fizé -> fizermos. Unlike for **, this removal is unconditional, so we get e.g. 'sairmos' not #'saírmos'.
if ending:find("^%*") then
ending = rsub(ending, "^%*", "")
stem = com.remove_final_accent(stem)
end
-- If ending begins with i, it must get an accent after an unstressed vowel (in some but not all cases) to prevent
-- the two merging into a diphthong:
-- * cair ->
-- * pres: caímos, caís;
-- * impf: all forms (caí-);
-- * pret: caí (but not caim), caíste (but not caiu), caímos, caístes, caíram;
-- * plup: all forms (caír-);
-- * impf_sub: all forms (caíss-);
-- * fut_sub: caíres, caírem (but not cair, cairmos, cairdes)
-- * pp: caído (but not gerund caindo)
-- * atribuir, other verbs in -uir -> same pattern as for cair etc.
-- * roer ->
-- * pret: roí (but not roim)
-- * impf: all forms (roí-)
-- * pp: roído
-- Don't let variant codes derail the following checks. Note that variant codes are properly added to the end of
-- the ending, so checks against the beginning of the ending work even in their presence, but not checks against
-- the full ending.
local cleaned_ending = export.remove_variant_codes(ending)
if cleaned_ending:find("^i") and full_stem:find("[aeiou]$") and not full_stem:find("[gq]u$") and
not cleaned_ending:find("^i[rum]$") and cleaned_ending ~= "indo" and not cleaned_ending:find("^ir[md]") then
ending = ending:gsub("^i", "í")
end
-- Spelling changes in the stem; it depends on whether the stem given is the pre-front-vowel or
-- pre-back-vowel variant, as indicated by `frontback`. We want these front-back spelling changes to happen
-- between stem and ending, not between prefix and stem; the prefix may not have the same "front/backness"
-- as the stem.
local is_front = rfind(ending, "^[eiéíê]")
if base.frontback == "front" and not is_front then
stem = stem:gsub("c$", "ç") -- conhecer -> conheço, vencer -> venço, descer -> desço
stem = stem:gsub("g$", "j") -- proteger -> protejo, fugir -> fujo
stem = stem:gsub("gu$", "g") -- distinguir -> distingo, conseguir -> consigo
stem = stem:gsub("qu$", "c") -- extorquir -> exturco
stem = stem:gsub("([gq])ü$", "%1u") -- argüir (superseded) -> arguo, delinqüir (superseded) -> delinquo
elseif base.frontback == "back" and is_front then
-- The following changes are all superseded so we don't do them:
-- averiguar -> averigüei, minguar -> mingüei; antiquar -> antiqüei, apropinquar -> apropinqüei
-- stem = stem:gsub("([gq])u$", "%1ü")
stem = stem:gsub("g$", "gu") -- cargar -> carguei, apagar -> apaguei
stem = stem:gsub("c$", "qu") -- marcar -> marquei
stem = stem:gsub("ç$", "c") -- começar -> comecei
-- j does not go to g here; desejar -> deseje not #desege
end
local retval = stem .. ending
if retval:find(GL_TYPE) and retval:find(PT_TYPE) or retval:find(GL_ONLY_TYPE) and not retval:find(GL_TYPE) then
-- Reject clashes in "Galician"-type and "Portuguese"-type forms, e.g. '#vós dixéreis' or '#vós dissérades'.
return nil
end
return retval
end
local function add3(base, slot, stems, endings, footnotes, allow_overrides)
if skip_slot(base, slot, allow_overrides) then
return
end
local function do_combine_stem_ending(stem, ending)
return combine_stem_ending(base, slot, base.prefix, stem, ending)
end
iut.add_forms(base.forms, slot, stems, endings, do_combine_stem_ending, nil, nil, footnotes)
end
local function insert_form(base, slot, form)
if not skip_slot(base, slot) then
iut.insert_form(base.forms, slot, form)
end
end
local function insert_forms(base, slot, forms)
if not skip_slot(base, slot) then
iut.insert_forms(base.forms, slot, forms)
end
end
local function add_single_stem_tense(base, slot_pref, stems, s1, s2, s3, p1, p2, p3)
local function addit(slot, ending)
add3(base, slot_pref .. "_" .. slot, stems, ending)
end
addit("1s", s1)
addit("2s", s2)
addit("3s", s3)
addit("1p", p1)
addit("2p", p2)
addit("3p", p3)
end
local function construct_stems(base, vowel_alt)
local stems = {}
stems.pres_unstressed = base.stems.pres_unstressed or base.inf_stem
stems.pres_stressed =
-- If no_pres_stressed given, pres_stressed stem should be empty so no forms are generated.
base.no_pres_stressed and {} or
base.stems.pres_stressed or
vowel_alt.pres_stressed or
base.inf_stem
stems.pres1_and_sub =
-- If no_pres_stressed given, the entire subjunctive is missing.
base.no_pres_stressed and {} or
-- If no_pres1_and_sub given, pres1 and entire subjunctive are missing.
base.no_pres1_and_sub and {} or
base.stems.pres1_and_sub or
vowel_alt.pres1_and_sub or
nil
stems.pres1 = base.stems.pres1 or stems.pres1_and_sub or stems.pres_stressed
stems.impf = base.stems.impf or base.inf_stem
stems.full_impf = base.stems.full_impf
stems.pret_base = base.stems.pret_base or base.inf_stem
stems.pret_conj = base.stems.pret_conj or base.conj
stems.pret = base.stems.pret or iut.map_forms(iut.convert_to_general_list_form(stems.pret_base),
function(form) return form .. base.conj_vowel end)
stems.gl_short_pret = base.stems.gl_short_pret or iut.map_forms(iut.convert_to_general_list_form(stems.pret),
function(form) return rsub(form, com.V .. "$", "") end)
stems.pt_pret_1s = base.stems.pt_pret_1s
stems.pt_pret_3s = base.stems.pt_pret_3s
stems.fut = base.stems.fut or base.inf_stem .. base.conj
stems.cond = base.stems.cond or stems.fut
stems.pres_sub_stressed = base.stems.pres_sub_stressed or stems.pres1
stems.pres_sub_unstressed = base.stems.pres_sub_unstressed or stems.pres1_and_sub or stems.pres_unstressed
stems.sub_conj = base.stems.sub_conj or base.conj
stems.plup = base.stems.plup or stems.pret
stems.impf_sub = base.stems.impf_sub or stems.pret
stems.fut_sub = base.stems.fut_sub or stems.pret
stems.pers_inf = base.stems.pers_inf or base.inf_stem .. base.conj_vowel
stems.pp = base.stems.pp or base.conj == "ar" and
combine_stem_ending(base, "pp_ms", base.prefix, base.inf_stem, "ado", "dont include prefix") or
-- use combine_stem_ending esp. so we get roído, caído, etc.
combine_stem_ending(base, "pp_ms", base.prefix, base.inf_stem, "ido", "dont include prefix")
stems.pp_ms = stems.pp
local function masc_to_fem(form)
if rfind(form, "o$") then
return rsub(form, "o$", "a")
else
return form
end
end
stems.pp_fs = iut.map_forms(iut.convert_to_general_list_form(stems.pp_ms), masc_to_fem)
if base.stems.short_pp then
stems.short_pp_ms = base.stems.short_pp
stems.short_pp_fs = iut.map_forms(iut.convert_to_general_list_form(stems.short_pp_ms), masc_to_fem)
end
base.this_stems = stems
end
local function add_present_indic(base)
local stems = base.this_stems
local function addit(slot, stems, ending)
add3(base, "pres_" .. slot, stems, ending)
end
local s2, s3, p1, p2, p3
if base.conj == "ar" then
s2, s3, p1, p2, p3 = "as", "a", "amos", {"ades" .. GL_TYPE, "ais" .. PT_TYPE}, "am"
elseif base.conj == "er" or base.conj == "or" then -- verbs in -por have the present overridden
s2, s3, p1, p2, p3 = "es", "e", "emos", {"edes" .. GL_TYPE, "eis" .. PT_TYPE}, "em"
elseif base.conj == "ir" then
s2, s3, p1, p2, p3 = "es", "e", "imos", {"ides" .. GL_TYPE, "is" .. PT_TYPE}, "em"
else
error("Internal error: Unrecognized conjugation " .. base.conj)
end
addit("1s", stems.pres1, "o")
addit("2s", stems.pres_stressed, s2)
addit("3s", stems.pres_stressed, s3)
addit("1p", stems.pres_unstressed, p1)
addit("2p", stems.pres_unstressed, p2)
addit("3p", stems.pres_stressed, p3)
end
local function add_present_subj(base)
local stems = base.this_stems
local function addit(slot, stems, ending)
add3(base, "pres_sub_" .. slot, stems, ending)
end
local s1, s2, s3, p1, p2, p3
if stems.sub_conj == "ar" then
s1, s2, s3, p1, p2, p3 = "e", "es", "e", "emos", {"edes" .. GL_TYPE, "eis" .. PT_TYPE}, "em"
else
s1, s2, s3, p1, p2, p3 = "a", "as", "a", "amos", {"ades" .. GL_TYPE, "ais" .. PT_TYPE}, "am"
end
addit("1s", stems.pres_sub_stressed, s1)
addit("2s", stems.pres_sub_stressed, s2)
addit("3s", stems.pres_sub_stressed, s3)
addit("1p", stems.pres_sub_unstressed, p1)
addit("2p", stems.pres_sub_unstressed, p2)
addit("3p", stems.pres_sub_stressed, p3)
end
local function add_finite_non_present(base)
local stems = base.this_stems
local function add_tense(slot, stem, s1, s2, s3, p1, p2, p3)
add_single_stem_tense(base, slot, stem, s1, s2, s3, p1, p2, p3)
end
-- * at the beginning of the ending means to remove an accent from the last vowel of the imperfect stem.
if stems.full_impf then
add_tense("impf", stems.full_impf, "*a", "*as", "*a", "amos",
{"ades" .. GL_TYPE, "eis" .. PT_TYPE, "ais" .. GL_ALTVAR}, "*am")
elseif base.conj == "ar" then
add_tense("impf", stems.impf, "ava", "avas", "ava", "ávamos",
{"ávades" .. GL_TYPE, "áveis" .. PT_TYPE, "ávais" .. GL_ALTVAR}, "avam")
else
add_tense("impf", stems.impf, "ia", "ias", "ia", "íamos",
{"íades" .. GL_TYPE, "íeis" .. PT_TYPE, "íais" .. GL_ALTVAR}, "iam")
end
-- * at the beginning of the ending means to remove a final accent from the preterite stem.
if stems.pret_conj == "irreg" then
add_tense("pret", stems.gl_short_pret, "em" .. GL_TYPE, nil, "o" .. GL_TYPE)
add_tense("pret", stems.pret, nil, {"*ste", "*che" .. GL_ALTVAR}, nil, "*mos", "*stes",
{"rom" .. GL_TYPE, "*ram" .. PT_TYPE})
add_tense("pret", stems.pt_pret_1s, PT_TYPE)
add_tense("pret", stems.pt_pret_3s, nil, nil, PT_TYPE)
elseif stems.pret_conj == "ar" then
add_tense("pret", stems.pret_base, "ei", {"aste", "ache" .. GL_ALTVAR}, "ou", "amos", "astes",
{"árom" .. GL_TYPE, "aram" .. PT_TYPE})
elseif stems.pret_conj == "er" then
add_tense("pret", stems.pret_base, {"im" .. GL_TYPE, "i" .. PT_TYPE}, {"este", "eche" .. GL_ALTVAR}, "eu",
"emos", "estes", {"êrom" .. GL_TYPE, "eram" .. PT_TYPE})
else
add_tense("pret", stems.pret_base, {"im" .. GL_TYPE, "i" .. PT_TYPE}, {"iste", "iche" .. GL_ALTVAR}, "iu",
"imos", "istes", {"írom" .. GL_TYPE, "iram" .. PT_TYPE})
end
-- * at the beginning of the ending means to remove a final accent from the stem.
-- ** is similar but is "conditional" on a consonant preceding the final vowel.
add_tense("plup", stems.plup, "**ra", "**ras", "**ra", "ramos",
{"rades" .. GL_TYPE, "reis" .. PT_TYPE, "rais" .. GL_ALTVAR}, "**ram")
add_tense("impf_sub", stems.impf_sub, "**sse", "**sses", "**sse", "ssemos",
{"ssedes" .. GL_TYPE, "sseis" .. PT_TYPE}, "**ssem")
add_tense("fut_sub", stems.fut_sub, "*r", "**res", "*r", "*rmos", "*rdes", "**rem")
if base.refl then
local mark = TEMP_MESOCLITIC_INSERTION_POINT
add_tense("fut", stems.fut,
{"ei" .. GL_TYPE, mark .. "ei" .. PT_TYPE}, {"ás" .. GL_TYPE, mark .. "ás" .. PT_TYPE},
{"á" .. GL_TYPE, mark .. "á" .. PT_TYPE}, {"emos" .. GL_TYPE, mark .. "emos" .. PT_TYPE},
{"edes" .. GL_TYPE, mark .. "eis" .. PT_TYPE}, {"ám" .. GL_TYPE, mark .. "ão" .. PT_TYPE}
)
add_tense("cond", stems.cond,
{"ia" .. GL_TYPE, mark .. "ia" .. PT_TYPE}, {"ias" .. GL_TYPE, mark .. "ias" .. PT_TYPE},
{"ia" .. GL_TYPE, mark .. "ia" .. PT_TYPE}, {"íamos" .. GL_TYPE, mark .. "íamos" .. PT_TYPE},
-- FIXME, is GL_ALTVAR correct for the mesoclitic variant of -íais?
{"íades" .. GL_TYPE, mark .. "íeis" .. PT_TYPE, "íais" .. GL_ALTVAR, mark .. "íais" .. GL_ALTVAR},
{"iam" .. GL_TYPE, mark .. "iam" .. PT_TYPE})
else
-- Don't insert forms with the mesoclitic insertion point to avoid duplication in non-reflexive verbs.
add_tense("fut", stems.fut, "ei", "ás", "á", "emos", {"edes" .. GL_TYPE, "eis" .. PT_TYPE},
{"ám" .. GL_TYPE, "ão" .. PT_TYPE})
add_tense("cond", stems.cond, "ia", "ias", "ia", "íamos",
-- FIXME, is GL_ALTVAR correct for the mesoclitic variant of -íais?
{"íades" .. GL_TYPE, "íeis" .. PT_TYPE, "íais" .. GL_ALTVAR}, "iam")
end
-- Different stems for different parts of the personal infinitive to correctly handle forms of [[sair]] and [[pôr]].
add_tense("pers_inf", base.non_prefixed_verb, "", nil, "")
add_tense("pers_inf", stems.pers_inf, nil, "**res", nil, "*rmos", "*rdes", "**rem")
end
local function add_non_finite_forms(base)
local stems = base.this_stems
local function addit(slot, stems, ending, footnotes)
add3(base, slot, stems, ending, footnotes)
end
insert_form(base, "infinitive", {form = base.verb})
-- Also insert "infinitive + reflexive pronoun" combinations if we're handling a reflexive verb. See comment below for
-- "gerund + reflexive pronoun" combinations.
if base.refl then
for _, persnum in ipairs(person_number_list) do
insert_form(base, "infinitive_" .. persnum, {form = base.verb})
end
end
-- verbs in -por have the gerund overridden
local ger_ending = base.conj == "ar" and "ando" or base.conj == "er" and "endo" or "indo"
addit("gerund", stems.pres_unstressed, ger_ending)
-- Also insert "gerund + reflexive pronoun" combinations if we're handling a reflexive verb. We insert exactly the same
-- form as for the bare gerund; later on in add_reflexive_or_fixed_clitic_to_forms(), we add the appropriate clitic
-- pronouns. It's important not to do this for non-reflexive verbs, because in that case, the clitic pronouns won't be
-- added, and {{gl-reinteg-verb form of}} will wrongly consider all these combinations as possible inflections of the bare
-- gerund. Thanks to [[User:JeffDoozan]] for this bug fix.
if base.refl then
for _, persnum in ipairs(person_number_list) do
addit("gerund_" .. persnum, stems.pres_unstressed, ger_ending)
end
end
-- Skip the long/short past participle footnotes if called from {{gl-reinteg-verb}} so they don't show in the headword.
local long_pp_footnotes =
stems.short_pp_ms and base.alternant_multiword_spec.source_template ~= "gl-reinteg-verb" and {long_pp_footnote} or nil
addit("pp_ms", stems.pp_ms, "", long_pp_footnotes)
if not base.pp_inv then
addit("pp_fs", stems.pp_fs, "", long_pp_footnotes)
addit("pp_mp", stems.pp_ms, "s", long_pp_footnotes)
addit("pp_fp", stems.pp_fs, "s", long_pp_footnotes)
end
if stems.short_pp_ms then
local short_pp_footnotes =
stems.short_pp_ms and base.alternant_multiword_spec.source_template ~= "gl-reinteg-verb" and {short_pp_footnote} or nil
addit("short_pp_ms", stems.short_pp_ms, "", short_pp_footnotes)
if not base.pp_inv then
addit("short_pp_fs", stems.short_pp_fs, "", short_pp_footnotes)
addit("short_pp_mp", stems.short_pp_ms, "s", short_pp_footnotes)
addit("short_pp_fp", stems.short_pp_fs, "s", short_pp_footnotes)
end
end
end
local function copy_forms_to_imperatives(base)
-- Copy pres3s to imperative since they are almost always the same.
insert_forms(base, "imp_2s", iut.map_forms(base.forms.pres_3s, function(form) return form end))
if not skip_slot(base, "imp_2p") then
-- Copy pres2p to imperative 2p minus -s since they are almost always the same.
-- But not if there's an override, to avoid possibly throwing an error.
insert_forms(base, "imp_2p", iut.map_forms(base.forms.pres_2p, function(form)
local form_no_s, var_codes = rmatch(form, "^(.*)s(" .. var_code_c .. "*)$")
if not form_no_s then
error("Can't derive second-person plural imperative from second-person plural present indicative " ..
"because form '" .. form .. "' doesn't end in -s")
end
return form_no_s .. var_codes
end))
end
-- Copy subjunctives to imperatives, unless there's an override for the given slot (as with the imp_1p of [[ir]]).
for _, persnum in ipairs({"3s", "1p", "3p"}) do
local from = "pres_sub_" .. persnum
local to = "imp_" .. persnum
insert_forms(base, to, iut.map_forms(base.forms[from], function(form) return form end))
end
end
local function process_slot_overrides(base, filter_slot, reflexive_only)
local overrides = reflexive_only and base.basic_reflexive_only_overrides or base.basic_overrides
for slot, forms in pairs(overrides) do
if not filter_slot or filter_slot(slot) then
add3(base, slot, forms, "", nil, "allow overrides")
end
end
end
-- Prefix `form` with `clitic`, adding fixed text `between` between them. Add links as appropriate unless the user
-- requested no links. Check whether form already has brackets (as will be the case if the form has a fixed clitic).
local function prefix_clitic_to_form(base, clitic, between, form)
if base.alternant_multiword_spec.args.noautolinkverb then
return clitic .. between .. form
else
local clitic_pref = "[[" .. clitic .. "]]" .. between
if form:find("%[%[") then
return clitic_pref .. form
else
return clitic_pref .. "[[" .. form .. "]]"
end
end
end
-- Add the appropriate clitic pronouns in `clitics` to the forms in `base_slot`. `store_cliticized_form` is a function
-- of three arguments (clitic, formobj, cliticized_form) and should store the cliticized form for the specified clitic
-- and form object.
local function suffix_clitic_to_forms(base, base_slot, clitics, store_cliticized_form)
if not base.forms[base_slot] then
-- This can happen, e.g. in only3s/only3sp/only3p verbs.
return
end
local autolink = not base.alternant_multiword_spec.args.noautolinkverb
for _, formobj in ipairs(base.forms[base_slot]) do
for _, clitic in ipairs(clitics) do
local cliticized_form
if formobj.form:find(TEMP_MESOCLITIC_INSERTION_POINT) then
-- mesoclisis in future and conditional
local infinitive, suffix = rmatch(formobj.form, "^(.*)" .. TEMP_MESOCLITIC_INSERTION_POINT .. "(.*)$")
if not infinitive then
error("Internal error: Can't find mesoclitic insertion point in slot '" .. base_slot .. "', form '" ..
formobj.form .. "'")
end
local full_form = infinitive .. suffix
if autolink and not infinitive:find("%[%[") then
infinitive = "[[" .. infinitive .. "]]"
end
cliticized_form =
autolink and infinitive .. "-[[" .. clitic .. "]]-[[" .. full_form .. "|" .. suffix .. "]]" or
infinitive .. "-" .. clitic .. "-" .. suffix
else
local clitic_suffix = autolink and "-[[" .. clitic .. "]]" or "-" .. clitic
local form_needs_link = autolink and not formobj.form:find("%[%[")
if base_slot:find("1p$") then
-- Final -s disappears: arrependíamos + nos -> arrependíamo-nos, etc.
cliticized_form = formobj.form:gsub("s$", "")
if form_needs_link then
cliticized_form = "[[" .. formobj.form .. "|" .. cliticized_form .. "]]"
end
else
cliticized_form = formobj.form
if form_needs_link then
cliticized_form = "[[" .. cliticized_form .. "]]"
end
end
cliticized_form = cliticized_form .. clitic_suffix
end
store_cliticized_form(clitic, formobj, cliticized_form)
end
end
end
-- Add a reflexive pronoun or fixed clitic (FIXME: not working), as appropriate to the base forms that were generated.
-- `do_joined` means to do only the forms where the pronoun is joined to the end of the form; otherwise, do only the
-- forms where it is not joined and precedes the form.
local function add_reflexive_or_fixed_clitic_to_forms(base, do_reflexive, do_joined)
for _, slotaccel in ipairs(base.alternant_multiword_spec.verb_slots_basic) do
local slot, accel = unpack(slotaccel)
local clitic
if not do_reflexive then
clitic = base.clitic
elseif slot:find("[123]") then
local persnum = slot:match("^.*_(.-)$")
clitic = person_number_to_reflexive_pronoun[persnum]
else
clitic = "se"
end
if base.forms[slot] then
if do_reflexive and slot:find("^pp_") or slot == "infinitive_linked" then
-- do nothing with reflexive past participles or with infinitive linked (handled at the end)
elseif slot:find("^neg_imp_") then
error("Internal error: Should not have forms set for negative imperative at this stage")
else
local slot_has_suffixed_clitic = not slot:find("_sub")
-- Maybe generate non-reflexive parts and separated syntactic variants for use in
-- {{gl-reinteg-verb form of}}. See comment in add_slots() above `need_special_verb_form_of_slots`.
-- Check for do_joined so we only run this code once.
if do_reflexive and do_joined and base.alternant_multiword_spec.source_template == "gl-reinteg-verb form of" and
-- Skip personal variants of infinitives and gerunds so we don't think [[arrependendo]] is a
-- non-reflexive equivalent of [[arrependendo-me]].
not slot:find("infinitive_") and not slot:find("gerund_") then
-- Clone the forms because we will be destructively modifying them just below, adding the reflexive
-- pronoun.
insert_forms(base, slot .. "_non_reflexive", mw.clone(base.forms[slot]))
if slot_has_suffixed_clitic then
insert_forms(base, slot .. "_variant", iut.map_forms(base.forms[slot], function(form)
return prefix_clitic_to_form(base, clitic, " ... ", form)
end))
end
end
if slot_has_suffixed_clitic then
if do_joined then
suffix_clitic_to_forms(base, slot, {clitic},
function(clitic, formobj, cliticized_form)
formobj.form = cliticized_form
end
)
end
elseif not do_joined then
-- Add clitic as separate word before all other forms.
for _, form in ipairs(base.forms[slot]) do
form.form = prefix_clitic_to_form(base, clitic, " ", form.form)
end
end
end
end
end
end
local function handle_infinitive_linked(base)
-- Compute linked versions of potential lemma slots, for use in {{gl-reinteg-verb}}.
-- We substitute the original lemma (before removing links) for forms that
-- are the same as the lemma, if the original lemma has links.
for _, slot in ipairs({"infinitive"}) do
insert_forms(base, slot .. "_linked", iut.map_forms(base.forms[slot], function(form)
if form == base.lemma and rfind(base.linked_lemma, "%[%[") then
return base.linked_lemma
else
return form
end
end))
end
end
local function generate_negative_imperatives(base)
-- Copy subjunctives to negative imperatives, preceded by "nom".
for _, persnum in ipairs(neg_imp_person_number_list) do
local from = "pres_sub_" .. persnum
local to = "neg_imp_" .. persnum
insert_forms(base, to, iut.map_forms(base.forms[from], function(form)
if base.alternant_multiword_spec.args.noautolinkverb then
return "nom " .. form
elseif form:find("%[%[") then
-- already linked, e.g. when reflexive
return "[[nom]] " .. form
else
return "[[nom]] [[" .. form .. "]]"
end
end))
end
end
-- Process specs given by the user using 'addnote[SLOTSPEC][FOOTNOTE][FOOTNOTE][...]'.
local function process_addnote_specs(base)
for _, spec in ipairs(base.addnote_specs) do
for _, slot_spec in ipairs(spec.slot_specs) do
slot_spec = "^" .. slot_spec .. "$"
for slot, forms in pairs(base.forms) do
if rfind(slot, slot_spec) then
-- To save on memory, side-effect the existing forms.
for _, form in ipairs(forms) do
form.footnotes = iut.combine_footnotes(form.footnotes, spec.footnotes)
end
end
end
end
end
end
local function add_missing_links_to_forms(base)
-- Any forms without links should get them now. Redundant ones will be stripped later.
for slot, forms in pairs(base.forms) do
for _, form in ipairs(forms) do
if not form.form:find("%[%[") then
form.form = "[[" .. form.form .. "]]"
end
end
end
end
-- Remove special characters added to future and conditional forms to indicate mesoclitic insertion points.
local function remove_mesoclitic_insertion_points(base)
for slot, forms in pairs(base.forms) do
if slot:find("^fut_") or slot:find("^cond_") then
for _, form in ipairs(forms) do
form.form = form.form:gsub(TEMP_MESOCLITIC_INSERTION_POINT, "")
end
end
end
end
-- If called from {{gl-reinteg-verb}}, remove less-recommended variants; otherwise add a footnote indicating they are
-- less recommended, and sort them last.
local function process_altvar_forms(base)
for slot, forms in pairs(base.forms) do
-- As an optimization, check if there are any less-recommended forms and don't do anything if not.
local saw_altvar = false
for _, form in ipairs(forms) do
if form.form:find(ALTVAR) then
saw_altvar = true
break
end
end
if saw_altvar then
if base.alternant_multiword_spec.source_template == "gl-reinteg-verb" then
base.forms[slot] = iut.flatmap_forms(base.forms[slot], function(form)
if form:find(ALTVAR) then
return {}
else
return {form}
end
end)
else
local existing_forms = base.forms[slot]
base.forms[slot] = {}
for _, formobj in ipairs(existing_forms) do
if not formobj.form:find(ALTVAR) then
iut.insert_form(base.forms, slot, formobj)
end
end
for _, formobj in ipairs(existing_forms) do
if formobj.form:find(ALTVAR) then
formobj.footnotes = iut.combine_footnotes(formobj.footnotes, {"[less recommended]"})
iut.insert_form(base.forms, slot, formobj)
end
end
end
end
end
end
local function conjugate_verb(base)
for _, vowel_alt in ipairs(base.vowel_alt_stems) do
construct_stems(base, vowel_alt)
add_present_indic(base)
add_present_subj(base)
end
add_finite_non_present(base)
add_non_finite_forms(base)
-- do non-reflexive non-imperative slot overrides
process_slot_overrides(base, function(slot)
return not slot:find("^imp_") and not slot:find("^neg_imp_")
end)
-- This should happen after process_slot_overrides() in case a derived slot is based on an override
-- (as with the imp_3s of [[dar]], [[estar]]).
copy_forms_to_imperatives(base)
-- do non-reflexive positive imperative slot overrides
process_slot_overrides(base, function(slot)
return slot:find("^imp_")
end)
-- We need to add joined reflexives, then joined and non-joined clitics, then non-joined reflexives, so we get
-- [[arrepende-te]] but [[nom]] [[te]] [[arrependas]].
if base.refl then
add_reflexive_or_fixed_clitic_to_forms(base, "do reflexive", "do joined")
process_slot_overrides(base, nil, "do reflexive") -- do reflexive-only slot overrides
add_reflexive_or_fixed_clitic_to_forms(base, "do reflexive", false)
end
-- This should happen after add_reflexive_or_fixed_clitic_to_forms() so negative imperatives get the reflexive pronoun
-- and clitic in them.
generate_negative_imperatives(base)
-- do non-reflexive negative imperative slot overrides
-- FIXME: What about reflexive negative imperatives?
process_slot_overrides(base, function(slot)
return slot:find("^neg_imp_")
end)
-- This should happen before add_missing_links_to_forms() so that the comparison `form == base.lemma`
-- in handle_infinitive_linked() works correctly and compares unlinked forms to unlinked forms.
handle_infinitive_linked(base)
process_addnote_specs(base)
if not base.alternant_multiword_spec.args.noautolinkverb then
add_missing_links_to_forms(base)
end
remove_mesoclitic_insertion_points(base)
process_altvar_forms(base)
end
local function parse_indicator_spec(angle_bracket_spec)
-- Store the original angle bracket spec so we can reconstruct the overall conj spec with the lemma(s) in them.
local base = {
angle_bracket_spec = angle_bracket_spec,
user_basic_overrides = {},
user_stems = {},
addnote_specs = {},
}
local function parse_err(msg)
error(msg .. ": " .. angle_bracket_spec)
end
local function fetch_footnotes(separated_group)
local footnotes
for j = 2, #separated_group - 1, 2 do
if separated_group[j + 1] ~= "" then
parse_err("Extraneous text after bracketed footnotes: '" .. table.concat(separated_group) .. "'")
end
if not footnotes then
footnotes = {}
end
table.insert(footnotes, separated_group[j])
end
return footnotes
end
local inside = angle_bracket_spec:match("^<(.*)>$")
assert(inside)
if inside == "" then
return base
end
local segments = put.parse_balanced_segment_run(inside, "[", "]")
local dot_separated_groups = put.split_alternating_runs(segments, "%.")
for i, dot_separated_group in ipairs(dot_separated_groups) do
local first_element = dot_separated_group[1]
if first_element == "addnote" then
local spec_and_footnotes = fetch_footnotes(dot_separated_group)
if #spec_and_footnotes < 2 then
parse_err("Spec with 'addnote' should be of the form 'addnote[SLOTSPEC][FOOTNOTE][FOOTNOTE][...]'")
end
local slot_spec = table.remove(spec_and_footnotes, 1)
local slot_spec_inside = rmatch(slot_spec, "^%[(.*)%]$")
if not slot_spec_inside then
parse_err("Internal error: slot_spec " .. slot_spec .. " should be surrounded with brackets")
end
local slot_specs = rsplit(slot_spec_inside, ",")
-- FIXME: Here, [[Module:it-verb]] called strip_spaces(). Generally we don't do this. Should we?
table.insert(base.addnote_specs, {slot_specs = slot_specs, footnotes = spec_and_footnotes})
elseif indicator_flags[first_element] then
if #dot_separated_group > 1 then
parse_err("No footnotes allowed with '" .. first_element .. "' spec")
end
if base[first_element] then
parse_err("Spec '" .. first_element .. "' specified twice")
end
base[first_element] = true
elseif rfind(first_element, ":") then
local colon_separated_groups = put.split_alternating_runs(dot_separated_group, "%s*:%s*")
local first_element = colon_separated_groups[1][1]
if #colon_separated_groups[1] > 1 then
parse_err("Can't attach footnotes directly to '" .. first_element .. "' spec; attach them to the " ..
"colon-separated values following the initial colon")
end
if overridable_stems[first_element] then
if base.user_stems[first_element] then
parse_err("Overridable stem '" .. first_element .. "' specified twice")
end
table.remove(colon_separated_groups, 1)
base.user_stems[first_element] = overridable_stems[first_element](colon_separated_groups,
{prefix = first_element, base = base, parse_err = parse_err, fetch_footnotes = fetch_footnotes})
else -- assume a basic override; we validate further later when the possible slots are available
if base.user_basic_overrides[first_element] then
parse_err("Basic override '" .. first_element .. "' specified twice")
end
table.remove(colon_separated_groups, 1)
base.user_basic_overrides[first_element] = allow_multiple_values(colon_separated_groups,
{prefix = first_element, base = base, parse_err = parse_err, fetch_footnotes = fetch_footnotes})
end
else
local comma_separated_groups = put.split_alternating_runs(dot_separated_group, "%s*,%s*")
for j = 1, #comma_separated_groups do
local alt = comma_separated_groups[j][1]
if not vowel_alternants[alt] then
if #comma_separated_groups == 1 then
parse_err("Unrecognized spec or vowel alternant '" .. alt .. "'")
else
parse_err("Unrecognized vowel alternant '" .. alt .. "'")
end
end
if base.vowel_alt then
for _, existing_alt in ipairs(base.vowel_alt) do
if existing_alt.form == alt then
parse_err("Vowel alternant '" .. alt .. "' specified twice")
end
end
else
base.vowel_alt = {}
end
table.insert(base.vowel_alt, {form = alt, footnotes = fetch_footnotes(comma_separated_groups[j])})
end
end
end
return base
end
-- Normalize all lemmas, substituting the pagename for blank lemmas and adding links to multiword lemmas.
local function normalize_all_lemmas(alternant_multiword_spec, head)
-- (1) Add links to all before and after text. Remember the original text so we can reconstruct the verb spec later.
if not alternant_multiword_spec.args.noautolinktext then
iut.add_links_to_before_and_after_text(alternant_multiword_spec, "remember original")
end
-- (2) Remove any links from the lemma, but remember the original form
-- so we can use it below in the 'lemma_linked' form.
iut.map_word_specs(alternant_multiword_spec, function(base)
if base.lemma == "" then
base.lemma = head
end
base.user_specified_lemma = base.lemma
base.lemma = m_links.remove_links(base.lemma)
local refl_verb = base.lemma
local verb, refl = rmatch(refl_verb, "^(.-)%-(se)$")
if not verb then
verb, refl = refl_verb, nil
end
base.user_specified_verb = verb
base.refl = refl
base.verb = base.user_specified_verb
local linked_lemma
if alternant_multiword_spec.args.noautolinkverb or base.user_specified_lemma:find("%[%[") then
linked_lemma = base.user_specified_lemma
elseif base.refl then
-- Reconstruct the linked lemma with separate links around base verb and reflexive pronoun.
linked_lemma = base.user_specified_verb == base.verb and "[[" .. base.user_specified_verb .. "]]" or
"[[" .. base.verb .. "|" .. base.user_specified_verb .. "]]"
linked_lemma = linked_lemma .. (refl and "-[[" .. refl .. "]]" or "")
else
-- Add links to the lemma so the user doesn't specifically need to, since we preserve
-- links in multiword lemmas and include links in non-lemma forms rather than allowing
-- the entire form to be a link.
linked_lemma = iut.add_links(base.user_specified_lemma)
end
base.linked_lemma = linked_lemma
end)
end
local function detect_indicator_spec(base)
if (base.only3s and 1 or 0) + (base.only3sp and 1 or 0) + (base.only3p and 1 or 0) > 1 then
error("Only one of 'only3s', 'only3sp' and 'only3p' can be specified")
end
base.forms = {}
base.stems = {}
base.basic_overrides = {}
base.basic_reflexive_only_overrides = {}
if not base.no_built_in then
for _, built_in_conj in ipairs(built_in_conjugations) do
if type(built_in_conj.match) == "function" then
base.prefix, base.non_prefixed_verb = built_in_conj.match(base.verb)
elseif built_in_conj.match:find("^%^") and rsub(built_in_conj.match, "^%^", "") == base.verb then
-- begins with ^, for exact match, and matches
base.prefix, base.non_prefixed_verb = "", base.verb
else
base.prefix, base.non_prefixed_verb = rmatch(base.verb, "^(.*)(" .. built_in_conj.match .. ")$")
end
if base.prefix then
-- we found a built-in verb
for stem, forms in pairs(built_in_conj.forms) do
if type(forms) == "function" then
forms = forms(base, base.prefix)
end
if stem:find("^refl_") then
stem = stem:gsub("^refl_", "")
if not base.alternant_multiword_spec.verb_slots_basic_map[stem] then
error("Internal error: setting for 'refl_" .. stem .. "' does not refer to a basic verb slot")
end
base.basic_reflexive_only_overrides[stem] = forms
elseif base.alternant_multiword_spec.verb_slots_basic_map[stem] then
-- an individual form override of a basic form
base.basic_overrides[stem] = forms
else
base.stems[stem] = forms
end
end
break
end
end
end
-- Override built-in-verb stems and overrides with user-specified ones.
for stem, values in pairs(base.user_stems) do
base.stems[stem] = values
end
for override, values in pairs(base.user_basic_overrides) do
if not base.alternant_multiword_spec.verb_slots_basic_map[override] then
error("Unrecognized override '" .. override .. "': " .. base.angle_bracket_spec)
end
base.basic_overrides[override] = values
end
base.prefix = base.prefix or ""
base.non_prefixed_verb = base.non_prefixed_verb or base.verb
local inf_stem, suffix = rmatch(base.non_prefixed_verb, "^(.*)([aeioô]r)$")
if not inf_stem then
error("Unrecognized infinitive: " .. base.verb)
end
base.inf_stem = inf_stem
suffix = suffix == "ôr" and "or" or suffix
base.conj = suffix
base.conj_vowel = suffix == "ar" and "á" or suffix == "ir" and "í" or "ê"
base.frontback = suffix == "ar" and "back" or "front"
if base.stems.vowel_alt then -- built-in verb with specified vowel alternation
if base.vowel_alt then
error(base.verb .. " is a recognized built-in verb, and should not have vowel alternations specified with it")
end
base.vowel_alt = iut.convert_to_general_list_form(base.stems.vowel_alt)
end
-- Propagate built-in-verb indicator flags to `base` and combine with user-specified flags.
for indicator_flag, _ in pairs(indicator_flags) do
base[indicator_flag] = base[indicator_flag] or base.stems[indicator_flag]
end
-- Convert vowel alternation indicators into stems.
local vowel_alt = base.vowel_alt or {{form = "+"}}
base.vowel_alt_stems = apply_vowel_alternations(base.inf_stem, vowel_alt)
for _, vowel_alt_stems in ipairs(base.vowel_alt_stems) do
if vowel_alt_stems.err then
error("To use '" .. vowel_alt_stems.altobj.form .. "', present stem '" .. base.prefix .. base.inf_stem .. "' " ..
vowel_alt_stems.err)
end
end
end
local function detect_all_indicator_specs(alternant_multiword_spec)
-- Propagate some settings up; some are used internally, others by [[Module:gl-headword]].
iut.map_word_specs(alternant_multiword_spec, function(base)
-- Internal indicator flags. Do these before calling detect_indicator_spec() because add_slots() uses them.
for _, prop in ipairs { "refl", "clitic" } do
if base[prop] then
alternant_multiword_spec[prop] = true
end
end
base.alternant_multiword_spec = alternant_multiword_spec
end)
add_slots(alternant_multiword_spec)
alternant_multiword_spec.vowel_alt = {}
iut.map_word_specs(alternant_multiword_spec, function(base)
detect_indicator_spec(base)
-- User-specified indicator flags. Do these after calling detect_indicator_spec() because the latter may set these
-- indicators for built-in verbs.
for prop, _ in pairs(indicator_flags) do
if base[prop] then
alternant_multiword_spec[prop] = true
end
end
-- Vowel alternants. Do these after calling detect_indicator_spec() because the latter sets base.vowel_alt for
-- built-in verbs.
if base.vowel_alt then
for _, altobj in ipairs(base.vowel_alt) do
m_table.insertIfNot(alternant_multiword_spec.vowel_alt, altobj.form)
end
end
end)
end
local function add_categories_and_annotation(alternant_multiword_spec, base, multiword_lemma)
local function insert_ann(anntype, value)
m_table.insertIfNot(alternant_multiword_spec.annotation[anntype], value)
end
local function insert_cat(cat, also_when_multiword)
-- Don't place multiword terms in categories like 'Galician verbs ending in -ar' to avoid spamming the
-- categories with such terms.
if also_when_multiword or not multiword_lemma then
m_table.insertIfNot(alternant_multiword_spec.categories, "Galician " .. cat)
end
end
if check_for_red_links and alternant_multiword_spec.source_template == "gl-reinteg-conj" and multiword_lemma then
for _, slot_and_accel in ipairs(alternant_multiword_spec.all_verb_slots) do
local slot = slot_and_accel[1]
local forms = base.forms[slot]
local must_break = false
if forms then
for _, form in ipairs(forms) do
if not form.form:find("%[%[") then
local title = mw.title.new(form.form)
if title and not title.exists then
insert_cat("verbs with red links in their inflection tables")
must_break = true
break
end
end
end
end
if must_break then
break
end
end
end
if(base.conj == "or") then
insert_cat("verbs ending in -er")
else
insert_cat("verbs ending in -" .. base.conj)
end
if base.irreg then
insert_ann("irreg", "irregular")
insert_cat("irregular verbs")
else
insert_ann("irreg", "regular")
end
if base.only3s then
insert_ann("defective", "impersonal")
insert_cat("impersonal verbs")
elseif base.only3sp then
insert_ann("defective", "third-person only")
insert_cat("third-person-only verbs")
elseif base.only3p then
insert_ann("defective", "third-person plural only")
insert_cat("third-person-plural-only verbs")
elseif base.no_pres_stressed or base.no_pres1_and_sub then
insert_ann("defective", "defective")
insert_cat("defective verbs")
else
insert_ann("defective", "regular")
end
if base.stems.short_pp then
insert_ann("short_pp", "irregular short past participle")
insert_cat("verbs with irregular short past participle")
else
insert_ann("short_pp", "regular")
end
if base.clitic then
insert_cat("verbs with lexical clitics")
end
if base.refl then
insert_cat("reflexive verbs")
end
if base.e_ei_cat then
insert_ann("vowel_alt", "''e'' may become ''ei'' when stressed")
insert_cat("verbs with e becoming ei when stressed")
elseif not base.vowel_alt then
insert_ann("vowel_alt", "non-alternating")
else
for _, alt in ipairs(base.vowel_alt) do
if alt.form == "+" then
insert_ann("vowel_alt", "non-alternating")
else
insert_ann("vowel_alt", vowel_alternant_to_desc[alt.form])
insert_cat("verbs with " .. vowel_alternant_to_cat[alt.form])
end
end
end
local cons_alt = base.stems.cons_alt
if cons_alt == nil then
if base.conj == "ar" then
if base.inf_stem:find("ç$") then
cons_alt = "c-ç"
elseif base.inf_stem:find("c$") then
cons_alt = "c-qu"
elseif base.inf_stem:find("g$") then
cons_alt = "g-gu"
end
else
if base.no_pres_stressed or base.no_pres1_and_sub then
cons_alt = nil -- no e.g. c-ç alternation in this case
elseif base.inf_stem:find("c$") then
cons_alt = "c-ç"
elseif base.inf_stem:find("qu$") then
cons_alt = "c-qu"
elseif base.inf_stem:find("g$") then
cons_alt = "g-j"
elseif base.inf_stem:find("gu$") then
cons_alt = "g-gu"
end
end
end
if cons_alt then
local desc = cons_alt .. " alternation"
insert_ann("cons_alt", desc)
insert_cat("verbs with " .. desc)
else
insert_ann("cons_alt", "non-alternating")
end
end
-- Compute the categories to add the verb to, as well as the annotation to display in the
-- conjugation title bar. We combine the code to do these functions as both categories and
-- title bar contain similar information.
local function compute_categories_and_annotation(alternant_multiword_spec)
alternant_multiword_spec.categories = {}
local ann = {}
alternant_multiword_spec.annotation = ann
ann.irreg = {}
ann.short_pp = {}
ann.defective = {}
ann.vowel_alt = {}
ann.cons_alt = {}
local multiword_lemma = false
for _, form in ipairs(alternant_multiword_spec.forms.infinitive) do
if form.form:find(" ") then
multiword_lemma = true
break
end
end
iut.map_word_specs(alternant_multiword_spec, function(base)
add_categories_and_annotation(alternant_multiword_spec, base, multiword_lemma)
end)
local ann_parts = {}
local irreg = table.concat(ann.irreg, " or ")
if irreg ~= "" and irreg ~= "regular" then
table.insert(ann_parts, irreg)
end
local short_pp = table.concat(ann.short_pp, " or ")
if short_pp ~= "" and short_pp ~= "regular" then
table.insert(ann_parts, short_pp)
end
local defective = table.concat(ann.defective, " or ")
if defective ~= "" and defective ~= "regular" then
table.insert(ann_parts, defective)
end
local vowel_alt = table.concat(ann.vowel_alt, " or ")
if vowel_alt ~= "" and vowel_alt ~= "non-alternating" then
table.insert(ann_parts, vowel_alt)
end
local cons_alt = table.concat(ann.cons_alt, " or ")
if cons_alt ~= "" and cons_alt ~= "non-alternating" then
table.insert(ann_parts, cons_alt)
end
alternant_multiword_spec.annotation = table.concat(ann_parts, "; ")
end
local function show_forms(alternant_multiword_spec)
local lemmas = alternant_multiword_spec.forms.infinitive
alternant_multiword_spec.lemmas = lemmas -- save for later use in make_table()
if alternant_multiword_spec.forms.short_pp_ms then
alternant_multiword_spec.has_short_pp = true
end
local reconstructed_verb_spec = iut.reconstruct_original_spec(alternant_multiword_spec)
local function transform_accel_obj(slot, formobj, accel_obj)
-- No accelerators for negative imperatives, which are always multiword and derived directly from the
-- present subjunctive.
if slot:find("^neg_imp") then
return nil
end
if accel_obj then
if slot:find("^pp_") then
accel_obj.form = slot
elseif slot == "gerund" then
accel_obj.form = "reinteg-gerund-" .. reconstructed_verb_spec
else
accel_obj.form = "reinteg-verb-form-" .. reconstructed_verb_spec
end
end
return accel_obj
end
-- Italicize less-recommended forms.
local function generate_link(data)
local formval_for_link = data.form.formval_for_link
if formval_for_link:find(ALTVAR) then
formval_for_link = formval_for_link:gsub(ALTVAR, "")
return m_links.full_link({lang = lang, term = formval_for_link, tr = "-", accel = data.form.accel_obj},
"term") .. iut.get_footnote_text(data.form.footnotes, data.footnote_obj)
end
end
local props = {
lang = lang,
lemmas = lemmas,
transform_accel_obj = transform_accel_obj,
canonicalize = function(form) return export.remove_variant_codes(form, "keep altvar") end,
generate_link = generate_link,
slot_list = alternant_multiword_spec.verb_slots_basic,
}
iut.show_forms(alternant_multiword_spec.forms, props)
alternant_multiword_spec.footnote_basic = alternant_multiword_spec.forms.footnote
end
local notes_template = [=[
<div class="roa-footnote-outer-div" style="width:100%;">
<div class="roa-footnote-inner-div">
{footnote}
</div></div>
]=]
local basic_table = [=[
{description}<div class="NavFrame">
<div class="NavHead" align=center> Reintegrated conjugation of {title} (See [[Appendix:Reintegrationism]])</div>
<div class="NavContent" align="left">
{\op}| class="roa-inflection-table" data-toggle-category="inflection"
|-
! class="roa-person-number-header" rowspan="2" |
! class="roa-person-number-header" colspan="3" | เอกพจน์
! class="roa-person-number-header" colspan="3" | พหูพจน์
|-
! class="roa-person-number-header" style="width:12.5%" | บุรุษที่หนึ่ง<br />(<<eu>>)
! class="roa-person-number-header" style="width:12.5%" | บุรุษที่สอง<br />(<<ti>> / <<tu>>)
! class="roa-person-number-header" style="width:12.5%" | บุรุษที่สาม<br />(<<ele>> / <<ela>> / <<você>>)
! class="roa-person-number-header" style="width:12.5%" | บุรุษที่หนึ่ง<br />(<<nós>>)
! class="roa-person-number-header" style="width:12.5%" | บุรุษที่สอง<br />(<<vós>>)
! class="roa-person-number-header" style="width:12.5%" | บุรุษที่สาม<br />(<<eles>> / <<elas>> / <<vocês>>)
|-
! class="roa-nonfinite-header" colspan="7" | ''<span title="infinitivo">รูปกริยากลาง</span>''
|-
! class="roa-nonfinite-header" | '''<span title="infinitivo impessoal">คำอบุรุษกริยา</span>'''
| colspan="6" | {infinitive}
|-
! class="roa-nonfinite-header" | '''<span title="infinitivo flexionado">คำบุรุษกริยา</span>'''
| {pers_inf_1s}
| {pers_inf_2s}
| {pers_inf_3s}
| {pers_inf_1p}
| {pers_inf_2p}
| {pers_inf_3p}
|-
! class="roa-nonfinite-header" colspan="7" | ''<span title="gerúndio">รูปกริยาเป็นนาม</span>''
|-
| class="roa-nonfinite-header" |
| colspan="6" | {gerund}
|-{pp_clause}
! style="border: 1px solid #999999; background:#d0dff4" colspan="7" | ''<span title="indicativo">มาลาบอกเล่า</span>''
|-
! class="roa-indicative-left-rail" | <span title="presente">ปัจจุบันกาล</span>
| {pres_1s}
| {pres_2s}
| {pres_3s}
| {pres_1p}
| {pres_2p}
| {pres_3p}
|-
! class="roa-indicative-left-rail" | <span title="pretérito imperfeito">ไม่สมบูรณ์</span>
| {impf_1s}
| {impf_2s}
| {impf_3s}
| {impf_1p}
| {impf_2p}
| {impf_3p}
|-
! class="roa-indicative-left-rail" | <span title="pretérito perfeito">อดีตกาลสิ้นสุด (สมบูรณ์)</span>
| {pret_1s}
| {pret_2s}
| {pret_3s}
| {pret_1p}
| {pret_2p}
| {pret_3p}
|-
! class="roa-indicative-left-rail" | <span title="pretérito mais-que-perfeito simples">อภิสมบูรณ์</span>
| {plup_1s}
| {plup_2s}
| {plup_3s}
| {plup_1p}
| {plup_2p}
| {plup_3p}
|-
! class="roa-indicative-left-rail" | <span title="futuro do presente">อนาคตกาล</span>
| {fut_1s}
| {fut_2s}
| {fut_3s}
| {fut_1p}
| {fut_2p}
| {fut_3p}
|-
! class="roa-indicative-left-rail" | <span title="condicional">มาลาเงื่อนไข</span>
| {cond_1s}
| {cond_2s}
| {cond_3s}
| {cond_1p}
| {cond_2p}
| {cond_3p}
|-
! class="roa-subjunctive-left-rail" colspan="7" | ''<span title="conjuntivo">มาลาสมมุติ</span>''
|-
! class="roa-subjunctive-left-rail" | <span title=" presente do conjuntivo">ปัจจุบันกาล</span>
| {pres_sub_1s}
| {pres_sub_2s}
| {pres_sub_3s}
| {pres_sub_1p}
| {pres_sub_2p}
| {pres_sub_3p}
|-
! class="roa-subjunctive-left-rail" | <span title="pretérito imperfeito do conjuntivo">ไม่สมบูรณ์</span>
| {impf_sub_1s}
| {impf_sub_2s}
| {impf_sub_3s}
| {impf_sub_1p}
| {impf_sub_2p}
| {impf_sub_3p}
|-
! class="roa-subjunctive-left-rail" | <span title="futuro do conjuntivo">อนาคตกาล</span>
| {fut_sub_1s}
| {fut_sub_2s}
| {fut_sub_3s}
| {fut_sub_1p}
| {fut_sub_2p}
| {fut_sub_3p}
|-
! class="roa-imperative-left-rail" colspan="7" | ''<span title="imperativo">มาลาสั่ง</span>''
|-
! class="roa-imperative-left-rail" | <span title="imperativo afirmativo">เชิงยืนยัน</span>
| rowspan="2" |
| {imp_2s}
| {imp_3s}
| {imp_1p}
| {imp_2p}
| {imp_3p}
|-
! class="roa-imperative-left-rail" | <span title="imperativo negativo">เชิงปฏิเสธ</span> (<<nom>>)
| {neg_imp_2s}
| {neg_imp_3s}
| {neg_imp_1p}
| {neg_imp_2p}
| {neg_imp_3p}
|{\cl}{notes_clause}</div></div>
]=]
local double_pp_template = [=[
! class="roa-nonfinite-header" colspan="7" | ''<span title="particípio irregular">รูปกริยาขยายอดีตกาลสั้น</span>''
|-
! class="roa-nonfinite-header" | เพศชาย
| colspan="3" | {short_pp_ms}
| colspan="3" | {short_pp_mp}
|-
! class="roa-nonfinite-header" | เพศหญิง
| colspan="3" | {short_pp_fs}
| colspan="3" | {short_pp_fp}
|-
! class="roa-nonfinite-header" colspan="7" | ''<span title="particípio regular">รูปกริยาขยายอดีตกาลยาว</span>''
|-
! class="roa-nonfinite-header" | เพศชาย
| colspan="3" | {pp_ms}
| colspan="3" | {pp_mp}
|-
! class="roa-nonfinite-header" | เพศหญิง
| colspan="3" | {pp_fs}
| colspan="3" | {pp_fp}
|-]=]
local single_pp_template = [=[
! class="roa-nonfinite-header" colspan="7" | ''<span title="particípio passado">รูปกริยาขยายอดีตกาล</span>''
|-
! class="roa-nonfinite-header" | เพศชาย
| colspan="3" | {pp_ms}
| colspan="3" | {pp_mp}
|-
! class="roa-nonfinite-header" | เพศหญิง
| colspan="3" | {pp_fs}
| colspan="3" | {pp_fp}
|-]=]
local function make_table(alternant_multiword_spec)
local forms = alternant_multiword_spec.forms
forms.title = link_term(alternant_multiword_spec.lemmas[1].form)
if alternant_multiword_spec.annotation ~= "" then
forms.title = forms.title .. " (" .. alternant_multiword_spec.annotation .. ")"
end
forms.description = ""
-- Format the table.
forms.footnote = alternant_multiword_spec.footnote_basic
forms.notes_clause = forms.footnote ~= "" and m_string_utilities.format(notes_template, forms) or ""
-- has_short_pp is computed in show_forms().
local pp_template = alternant_multiword_spec.has_short_pp and double_pp_template or single_pp_template
forms.pp_clause = m_string_utilities.format(pp_template, forms)
local table_with_pronouns = rsub(basic_table, "<<(.-)>>", link_term)
return require("Module:TemplateStyles")("Module:roa-verb/style.css") .. m_string_utilities.format(table_with_pronouns, forms)
end
-- Externally callable function to parse and conjugate a verb given user-specified arguments.
-- Return value is WORD_SPEC, an object where the conjugated forms are in `WORD_SPEC.forms`
-- for each slot. If there are no values for a slot, the slot key will be missing. The value
-- for a given slot is a list of objects {form=FORM, footnotes=FOOTNOTES}.
function export.do_generate_forms(args, source_template, headword_head)
local PAGENAME = mw.loadData("Module:headword/data").pagename
local function in_template_space()
return mw.title.getCurrentTitle().nsText == "แม่แบบ"
end
-- Determine the verb spec we're being asked to generate the conjugation of. This may be taken from the
-- current page title or the value of |pagename=; but not when called from {{gl-reinteg-verb form of}}, where the
-- page title is a non-lemma form. Note that the verb spec may omit the infinitive; e.g. it may be "<i-e>".
-- For this reason, we use the value of `pagename` computed here down below, when calling normalize_all_lemmas().
local pagename = source_template ~= "gl-reinteg-verb form of" and args.pagename or PAGENAME
local head = headword_head or pagename
local arg1 = args[1]
if not arg1 then
if (pagename == "gl-reinteg-conj" or pagename == "gl-reinteg-verb") and in_template_space() then
arg1 = "traguer"
elseif pagename == "gl-reinteg-verb form of" and in_template_space() then
arg1 = "amar"
else
arg1 = "<>"
end
end
-- When called from {{gl-reinteg-verb form of}}, determine the non-lemma form whose inflections we're being asked to
-- determine. This normally comes from the page title or the value of |pagename=.
local verb_form_of_form
if source_template == "gl-reinteg-verb form of" then
verb_form_of_form = args.pagename
if not verb_form_of_form then
if PAGENAME == "gl-reinteg-verb form of" and in_template_space() then
verb_form_of_form = "ame"
else
verb_form_of_form = PAGENAME
end
end
end
local incorporated_headword_head_into_lemma = false
if arg1:find("^<.*>$") then -- missing lemma
if head:find(" ") then
-- If multiword lemma, try to add arg spec after the first word.
-- Try to preserve the brackets in the part after the verb, but don't do it
-- if there aren't the same number of left and right brackets in the verb
-- (which means the verb was linked as part of a larger expression).
local refl_clitic_verb, post = rmatch(head, "^(.-)( .*)$")
local left_brackets = rsub(refl_clitic_verb, "[^%[]", "")
local right_brackets = rsub(refl_clitic_verb, "[^%]]", "")
if #left_brackets == #right_brackets then
arg1 = iut.remove_redundant_links(refl_clitic_verb) .. arg1 .. post
incorporated_headword_head_into_lemma = true
else
-- Try again using the form without links.
local linkless_head = m_links.remove_links(head)
if linkless_head:find(" ") then
refl_clitic_verb, post = rmatch(linkless_head, "^(.-)( .*)$")
arg1 = refl_clitic_verb .. arg1 .. post
else
error("Unable to incorporate <...> spec into explicit head due to a multiword linked verb or " ..
"unbalanced brackets; please include <> explicitly: " .. arg1)
end
end
else
-- Will be incorporated through `head` below in the call to normalize_all_lemmas().
incorporated_headword_head_into_lemma = true
end
end
local function split_bracketed_runs_into_words(bracketed_runs)
return put.split_alternating_runs(bracketed_runs, " ", "preserve splitchar")
end
local parse_props = {
parse_indicator_spec = parse_indicator_spec,
-- Split words only on spaces, not on hyphens, because that messes up reflexive verb parsing.
split_bracketed_runs_into_words = split_bracketed_runs_into_words,
allow_default_indicator = true,
allow_blank_lemma = true,
}
local alternant_multiword_spec = iut.parse_inflected_text(arg1, parse_props)
alternant_multiword_spec.pos = pos or "verbs"
alternant_multiword_spec.args = args
alternant_multiword_spec.source_template = source_template
alternant_multiword_spec.verb_form_of_form = verb_form_of_form
alternant_multiword_spec.incorporated_headword_head_into_lemma = incorporated_headword_head_into_lemma
normalize_all_lemmas(alternant_multiword_spec, head)
detect_all_indicator_specs(alternant_multiword_spec)
local inflect_props = {
slot_list = alternant_multiword_spec.all_verb_slots,
inflect_word_spec = conjugate_verb,
get_variants = function(form) return rsub(form, not_var_code_c, "") end,
-- We add links around the generated verbal forms rather than allow the entire multiword
-- expression to be a link, so ensure that user-specified links get included as well.
include_user_specified_links = true,
}
iut.inflect_multiword_or_alternant_multiword_spec(alternant_multiword_spec, inflect_props)
-- Remove redundant brackets around entire forms.
for slot, forms in pairs(alternant_multiword_spec.forms) do
for _, form in ipairs(forms) do
form.form = iut.remove_redundant_links(form.form)
end
end
compute_categories_and_annotation(alternant_multiword_spec)
if args.json and source_template == "gl-reinteg-conj" then
-- Remove variant codes to avoid causing problems with bots.
for slot, forms in pairs(alternant_multiword_spec.forms) do
for _, form in ipairs(forms) do
form.form = export.remove_variant_codes(form.form)
end
end
return require("Module:JSON").toJSON(alternant_multiword_spec.forms)
end
return alternant_multiword_spec
end
-- Entry point for {{gl-reinteg-conj}}. Template-callable function to parse and conjugate a verb given
-- user-specified arguments and generate a displayable table of the conjugated forms.
function export.show(frame)
local parent_args = frame:getParent().args
local params = {
[1] = {},
["noautolinktext"] = {type = "boolean"},
["noautolinkverb"] = {type = "boolean"},
["pagename"] = {}, -- for testing/documentation pages
["json"] = {type = "boolean"}, -- for bot use
}
local args = require("Module:parameters").process(parent_args, params)
local alternant_multiword_spec = export.do_generate_forms(parent_args, "gl-reinteg-conj")
if type(alternant_multiword_spec) == "string" then
-- JSON return value
return alternant_multiword_spec
end
show_forms(alternant_multiword_spec)
return make_table(alternant_multiword_spec) ..
require("Module:utilities").format_categories(alternant_multiword_spec.categories, lang, nil, nil, force_cat)
end
return export
jb4vg0fjj4csk03wt35dodg3wjzkooi
5729315
5729292
2026-07-20T05:41:01Z
Octahedron80
267
5729315
Scribunto
text/plain
--[=[
This module implements {{gl-reinteg-conj}} and provides the underlying conjugation functions for {{gl-reinteg-verb}},
as well as for {{gl-verb}} when invoked with |reinteg=1. The actual formatting of both {{gl-reinteg-verb}} and
{{gl-verb}} happens in [[Module:gl-headword]]. This module uses the [[Appendix:Reintegrationism|reintegrationist]] norm
for Galician spelling. See also [[Module:gl-verb]], which implements the standard norm.
Authorship: Ben Wing <benwing2>, MedK <medk1>
]=]
local export = {}
--[=[
TERMINOLOGY:
-- "slot" = A particular combination of tense/mood/person/number/etc.
Example slot names for verbs are "pres_1s" (present indicative first-person singular), "pres_sub_2s" (present
subjunctive second-person singular) "impf_sub_3p" (imperfect subjunctive third-person plural).
Each slot is filled with zero or more forms.
-- "form" = The conjugated Galician form representing the value of a given slot.
-- "lemma" = The dictionary form of a given Galician term. For Galician, always the infinitive.
]=]
--[=[
FIXME:
--]=]
local lang = require("Module:languages").getByCode("gl")
local m_string_utilities = require("Module:string utilities")
local m_links = require("Module:links")
local m_table = require("Module:table")
local iut = require("Module:inflection utilities")
local put = require("Module:parse utilities")
local com = require("Module:gl-reinteg-common")
local force_cat = false -- set to true for debugging
local check_for_red_links = false -- set to false for debugging
local rfind = mw.ustring.find
local rmatch = mw.ustring.match
local rsplit = mw.text.split
local rsub = com.rsub
local u = mw.ustring.char
local unpack = unpack or table.unpack -- Lua 5.2 compatibility
local function link_term(term)
return m_links.full_link({ lang = lang, term = term }, "term")
end
local V = com.V -- vowel regex class
local AV = com.AV -- accented vowel regex class
local C = com.C -- consonant regex class
local AC = u(0x0301) -- acute = ́
local TEMPC1 = u(0xFFF1) -- temporary character used for consonant substitutions
local TEMP_MESOCLITIC_INSERTION_POINT = u(0xFFF2) -- temporary character used to mark the mesoclitic insertion point
-- Variant codes and the like.
-- NOTE: These codes should be *PREFIXED* onto stems and *SUFFIXED* onto endings. That way they won't interfere in the
-- operation of combine_stem_ending().
--
-- GL_TYPE = "Galician-type", PT_TYPE = "Portuguese-type". GL_TYPE stems cannot combine with PT_TYPE endings and
-- vice-versa. GL_ONLY_TYPE = "Galician-only type"; GL_ONLY_TYPE stems can only combine with endings specifically
-- marked as GL_TYPE.
local GL_TYPE = u(0xFFF3)
local GL_ONLY_TYPE = u(0xFFF4)
local PT_TYPE = u(0xFFF5)
-- ALTVAR = Less-recommended variants listed at the bottom of the Estraviz conjugation tables rather than in the main
-- table. We list these in the main table but with a footnote indicating they are less-recommended alternatives, and
-- italicize them to visually set them apart.
local ALTVAR = u(0xFFF6)
local GL_ALTVAR = GL_TYPE .. ALTVAR
local GL_ONLY_ALTVAR = GL_ONLY_TYPE .. ALTVAR
local var_codes_no_altvar = GL_TYPE .. GL_ONLY_TYPE .. PT_TYPE
local all_var_codes = var_codes_no_altvar .. ALTVAR
local var_code_c = "[" .. all_var_codes .. "]"
local var_code_no_altvar_c = "[" .. var_codes_no_altvar .. "]"
local not_var_code_c = "[^" .. all_var_codes .. "]"
-- Export variant codes for use in [[Module:pt-gl-inflections]].
export.GL_TYPE = GL_TYPE
export.GL_ONLY_TYPE = GL_ONLY_TYPE
export.PT_TYPE = PT_TYPE
export.ALTVAR = ALTVAR
local short_pp_footnote = "[usually used with auxiliary verbs " .. link_term("ser") .. " and " .. link_term("estar") .. "]"
local long_pp_footnote = "[usually used with auxiliary verbs " .. link_term("haver") .. " and " .. link_term("ter") .. "]"
--[=[
Vowel alternations:
<i-e>: 'i' in pres1s and the whole present subjunctive; 'e' elsewhere when stressed. Generally 'e' otherwise when
unstressed. E.g. [[sentir]], [[conseguir]] (the latter additionally with 'gu-g' alternation).
<u-o>: 'u' in pres1s and the whole present subjunctive; 'o' elsewhere when stressed. Either 'o' or 'u' otherwise when
unstressed. E.g. [[dormir]], [[subir]].
<i>: 'i' whenever stressed (in the present singular and third plural) and throughout the whole present subjunctive.
Otherwise 'e'. E.g. [[progredir]], [[premir]].
<u>: 'u' whenever stressed (in the present singular and third plural) and throughout the whole present subjunctive.
Otherwise 'o'. E.g. [[polir]], [[extorquir]] (the latter also <u-o>).
<í>: The last 'i' of the stem (excluding stem-final 'i') becomes 'í' when stressed. E.g.:
* [[proibir]] ('proíbo, proíbe(s), proíbem, proíba(s), proíbam')
* [[faiscar]] ('faísco, faísca(s), faíscam, faísque(s), faísquem' also with 'c-qu' alternation)
* [[homogeneizar]] ('homogeneízo', etc.)
* [[mobiliar]] ('mobílio', etc.; note here the final -i is ignored when determining which vowel to stress)
* [[tuitar]] ('tuíto', etc.)
<ú>: The last 'u' of the stem (excluding stem-final 'u') becomes 'ú' when stressed. E.g.:
* [[reunir]] ('reúno, reúne(s), reúnem, reúna(s), reúnam')
* [[esmiuçar]] ('esmiúço, esmiúça(s), esmiúça, esmiúce(s), esmiúcem' also with 'ç-c' alternation)
* [[reusar]] ('reúso, reúsa(s), reúsa, reúse(s), reúsem')
* [[saudar]] ('saúdo, saúda(s), saúda, saúde(s), saúdem')
]=]
local vowel_alternants = m_table.listToSet({"i-e", "i", "í", "u-o", "u", "ú", "ei", "+"})
local vowel_alternant_to_desc = {
["i-e"] = "''i-e'' alternation in present singular",
["i"] = "''e'' becomes ''i'' when stressed",
["í"] = "''i'' becomes ''í'' when stressed",
["u-o"] = "''u-o'' alternation in present singular",
["u"] = "''o'' becomes ''u'' when stressed",
["ú"] = "''u'' becomes ''ú'' when stressed",
["ei"] = "''i'' becomes ''ei'' when stressed",
}
local vowel_alternant_to_cat = {
["i-e"] = "i-e alternation in present singular",
["i"] = "e becoming i when stressed",
["í"] = "i becoming í when stressed",
["u-o"] = "u-o alternation in present singular",
["u"] = "o becoming u when stressed",
["ú"] = "u becoming ú when stressed",
["ei"] = "i becoming ei when stressed",
}
local all_persons_numbers = {
["1s"] = "1|s",
["2s"] = "2|s",
["3s"] = "3|s",
["1p"] = "1|p",
["2p"] = "2|p",
["3p"] = "3|p",
}
local person_number_list = {"1s", "2s", "3s", "1p", "2p", "3p"}
local imp_person_number_list = {"2s", "3s", "1p", "2p", "3p"}
local neg_imp_person_number_list = {"2s", "3s", "1p", "2p", "3p"}
person_number_to_reflexive_pronoun = {
["1s"] = "me",
["2s"] = "te",
["3s"] = "se",
["1p"] = "nos",
["2p"] = "vos",
["3p"] = "se",
}
local indicator_flags = m_table.listToSet {
"no_pres_stressed", "no_pres1_and_sub",
"only3s", "only3sp", "only3p",
"pp_inv", "irreg", "no_built_in", "e_ei_cat",
}
-- Remove any variant codes e.g. GL_TYPE, PT_TYPE, ALTVAR. Needs to be called from [[Module:gl-reinteg-headword]] on the
-- output of do_generate_forms(). `keep_altvar` leaves ALTVAR; used in the `canonicalize` function of show_forms()
-- because we then process and remove it in `generate_forms`. FIXME: Use metadata for this once it's supported in
-- [[Module:inflection utilities]].
function export.remove_variant_codes(form, keep_altvar)
return rsub(form, keep_altvar and var_code_no_altvar_c or var_code_c, "")
end
-- Initialize all the slots for which we generate forms.
local function add_slots(alternant_multiword_spec)
-- "Basic" slots: All slots that go into the regular table (not the reflexive form-of table).
alternant_multiword_spec.verb_slots_basic = {
{"infinitive", "inf"},
{"infinitive_linked", "inf"},
{"gerund", "ger"},
{"short_pp_ms", "short|m|s|past|part"},
{"short_pp_fs", "short|f|s|past|part"},
{"short_pp_mp", "short|m|p|past|part"},
{"short_pp_fp", "short|f|p|past|part"},
{"pp_ms", "m|s|past|part"},
{"pp_fs", "f|s|past|part"},
{"pp_mp", "m|p|past|part"},
{"pp_fp", "f|p|past|part"},
}
-- Special slots used to handle non-reflexive parts of reflexive verbs in {{gl-reinteg-verb form of}}. For example,
-- for a reflexive-only verb like [[arrepender-se]], we want to be able to use {{gl-reinteg-verb form of}} on
-- [[arrependa]] (which should mention that it is a part of 'me arrependa', first-person singular present
-- subjunctive, and 'se arrependa', third-person singular present subjunctive) or on [[arrependemos]] (which should
-- mention that it is a part of 'arrependemo-nos', first-person plural present indicative or preterite). Similarly,
-- we want to use {{gl-reinteg-verb form of}} on [[arrependendo]] (which should mention that it is a part of
-- 'se ... arrependendo', syntactic variant of [[arrependendo-se]], which is the gerund of [[arrepender-se]]). To
-- do this, we need to be able to map non-reflexive parts like [[arrependa]], [[arrependemos]], [[arrependendo]],
-- etc. to their reflexive equivalent(s), to the tag(s) of the equivalent(s), and, in the case of forms like
-- [[arrependendo]], [[arrepender]] and imperatives, to the separated syntactic variant of the verb+clitic
-- combination. We do this by creating slots for the non-reflexive part equivalent of each basic reflexive slot,
-- and for the separated syntactic-variant equivalent of each basic reflexive slot that is formed of verb+clitic.
-- We use slots in this way to deal with multiword lemmas. Note that we run into difficulties mapping between
-- reflexive verbs, non-reflexive part equivalents, and separated syntactic variants if a slot contains more than
-- one form. To handle this, if there are the same number of forms in two slots we're trying to match up, we assume
-- the forms match one-to-one; otherwise we don't match up the two slots (which means {{gl-reinteg-verb form of}} won't
-- work in this case, but such a case is extremely rare and not worth worrying about). Alternatives that handle
-- this "properly" are significantly more complicated and require non-trivial modifications to
-- [[Module:inflection utilities]].
local need_special_verb_form_of_slots = alternant_multiword_spec.source_template == "gl-reinteg-verb form of" and
alternant_multiword_spec.refl
if need_special_verb_form_of_slots then
alternant_multiword_spec.verb_slots_reflexive_verb_form_of = {
{"infinitive_non_reflexive", "-"},
{"infinitive_variant", "-"},
{"gerund_non_reflexive", "-"},
{"gerund_variant", "-"},
}
else
alternant_multiword_spec.verb_slots_reflexive_verb_form_of = {}
end
-- Add entries for a slot with person/number variants.
-- `verb_slots` is the table to add to.
-- `slot_prefix` is the prefix of the slot, typically specifying the tense/aspect.
-- `tag_suffix` is a string listing the set of inflection tags to add after the person/number tags.
-- `person_number_list` is a list of the person/number slot suffixes to add to `slot_prefix`.
local function add_personal_slot(verb_slots, slot_prefix, tag_suffix, person_number_list)
for _, persnum in ipairs(person_number_list) do
local persnum_tag = all_persons_numbers[persnum]
local slot = slot_prefix .. "_" .. persnum
local accel = persnum_tag .. "|" .. tag_suffix
table.insert(verb_slots, {slot, accel})
end
end
-- Add a personal slot (i.e. a slot with person/number variants) to `verb_slots_basic`.
local function add_basic_personal_slot(slot_prefix, tag_suffix, person_number_list, no_special_verb_form_of_slot)
add_personal_slot(alternant_multiword_spec.verb_slots_basic, slot_prefix, tag_suffix, person_number_list)
-- Add special slots for handling non-reflexive parts of reflexive verbs in {{gl-reinteg-verb form of}}.
-- See comment above in `need_special_verb_form_of_slots`.
if need_special_verb_form_of_slots and not no_special_verb_form_of_slot then
for _, persnum in ipairs(person_number_list) do
local persnum_tag = all_persons_numbers[persnum]
local basic_slot = slot_prefix .. "_" .. persnum
local accel = persnum_tag .. "|" .. tag_suffix
table.insert(alternant_multiword_spec.verb_slots_reflexive_verb_form_of, {basic_slot .. "_non_reflexive", "-"})
end
end
end
add_basic_personal_slot("pres", "pres|ind", person_number_list)
add_basic_personal_slot("impf", "impf|ind", person_number_list)
add_basic_personal_slot("pret", "pret|ind", person_number_list)
add_basic_personal_slot("plup", "plup|ind", person_number_list)
add_basic_personal_slot("fut", "fut|ind", person_number_list)
add_basic_personal_slot("cond", "cond", person_number_list)
add_basic_personal_slot("pres_sub", "pres|sub", person_number_list)
add_basic_personal_slot("impf_sub", "impf|sub", person_number_list)
add_basic_personal_slot("fut_sub", "fut|sub", person_number_list)
add_basic_personal_slot("imp", "imp", imp_person_number_list)
add_basic_personal_slot("pers_inf", "pers|inf", person_number_list)
-- Don't need special non-reflexive-part slots because the negative imperative is multiword, of which the
-- individual words are 'nom' + subjunctive.
add_basic_personal_slot("neg_imp", "neg|imp", neg_imp_person_number_list, "no special verb form of")
-- Don't need special non-reflexive-part slots because we don't want [[arrependendo]] mapping to [[arrependendo-me]]
-- (only [[arrependendo-se]]) or [[arrepender]] mapping to [[arrepender-me]] (only [[arrepender-se]]).
add_basic_personal_slot("infinitive", "inf", person_number_list, "no special verb form of")
add_basic_personal_slot("gerund", "ger", person_number_list, "no special verb form of")
-- Generate the list of all slots.
alternant_multiword_spec.all_verb_slots = {}
for _, slot_and_accel in ipairs(alternant_multiword_spec.verb_slots_basic) do
table.insert(alternant_multiword_spec.all_verb_slots, slot_and_accel)
end
for _, slot_and_accel in ipairs(alternant_multiword_spec.verb_slots_reflexive_verb_form_of) do
table.insert(alternant_multiword_spec.all_verb_slots, slot_and_accel)
end
alternant_multiword_spec.verb_slots_basic_map = {}
for _, slotaccel in ipairs(alternant_multiword_spec.verb_slots_basic) do
local slot, accel = unpack(slotaccel)
alternant_multiword_spec.verb_slots_basic_map[slot] = accel
end
end
local overridable_stems = {}
local function allow_multiple_values(separated_groups, data)
local retvals = {}
for _, separated_group in ipairs(separated_groups) do
local footnotes = data.fetch_footnotes(separated_group)
local retval = {form = separated_group[1], footnotes = footnotes}
table.insert(retvals, retval)
end
return retvals
end
local function simple_choice(choices)
return function(separated_groups, data)
if #separated_groups > 1 then
data.parse_err("For spec '" .. data.prefix .. ":', only one value currently allowed")
end
if #separated_groups[1] > 1 then
data.parse_err("For spec '" .. data.prefix .. ":', no footnotes currently allowed")
end
local choice = separated_groups[1][1]
if not m_table.contains(choices, choice) then
data.parse_err("For spec '" .. data.prefix .. ":', saw value '" .. choice .. "' but expected one of '" ..
table.concat(choices, ",") .. "'")
end
return choice
end
end
for _, overridable_stem in ipairs {
"pres_unstressed",
"pres_stressed",
"pres1_and_sub",
-- Don't include pres1; use pres_1s if you need to override just that form
"impf",
"full_impf",
{"pret_conj", simple_choice({"irreg", "ar", "er", "ir"}) },
"pret_base",
"pret",
"gl_short_pret",
"pt_pret_1s",
"pt_pret_3s",
"fut",
"cond",
"pres_sub_stressed",
"pres_sub_unstressed",
{"sub_conj", simple_choice({"ar", "er"}) },
"plup",
"impf_sub",
"fut_sub",
"pers_inf",
"pp",
"short_pp",
} do
if type(overridable_stem) == "string" then
overridable_stems[overridable_stem] = allow_multiple_values
else
local stem, validator = unpack(overridable_stem)
overridable_stems[stem] = validator
end
end
-- Useful as the value of the `match` property of a built-in verb. `main_verb_spec` is a Lua pattern that should match
-- the non-prefixed part of a verb, and `prefix_specs` is a list of Lua patterns that should match the prefixed part of
-- a verb. If a prefix spec is preceded by ^, it must match exactly at the beginning of the verb; otherwise, additional
-- prefixes (e.g. re-, des-) may precede. Return the prefix and main verb.
local function match_against_verbs(main_verb_spec, prefix_specs)
return function(verb)
for _, prefix_spec in ipairs(prefix_specs) do
if prefix_spec:find("^%^") then
-- must match exactly
prefix_spec = prefix_spec:gsub("^%^", "")
if prefix_spec == "" then
-- We can't use the second branch of the if-else statement because an empty () returns the current position
-- in rmatch().
local main_verb = rmatch(verb, "^(" .. main_verb_spec .. ")$")
if main_verb then
return "", main_verb
end
else
local prefix, main_verb = rmatch(verb, "^(" .. prefix_spec .. ")(" .. main_verb_spec .. ")$")
if prefix then
return prefix, main_verb
end
end
else
local prefix, main_verb = rmatch(verb, "^(.*" .. prefix_spec .. ")(" .. main_verb_spec .. ")$")
if prefix then
return prefix, main_verb
end
end
end
return nil
end
end
--[=[
Built-in (usually irregular) conjugations.
Each entry is processed in turn and consists of an object with two fields:
1. match=: Specifies the built-in verbs that match this object.
2. forms=: Specifies the built-in stems and forms for these verbs.
The value of match= is either a string beginning with "^" (match only the specified verb), a string not beginning
with "^" (match any verb ending in that string), or a function that is passed in the verb and should return the prefix
of the verb if it matches, otherwise nil. The function match_against_verbs() is provided to facilitate matching a set
of verbs with a common ending and specific prefixes (e.g. [[ter]] and [[ater]] but not [[abater]], etc.).
The value of forms= is a table specifying stems and individual override forms. Each key of the table names either a
stem (e.g. `pres_stressed`), a stem property (e.g. `vowel_alt`) or an individual override form (e.g. `pres_1s`).
Each value of a stem can either be a string (a single stem), a list of strings, or a list of objects of the form
{form = STEM, footnotes = {FOONOTES}}. Each value of an individual override should be of exactly the same form except
that the strings specify full forms rather than stems. The values of a stem property depend on the specific property
but are generally strings or booleans.
In order to understand how the stem specifications work, it's important to understand the phonetic modifications done
by combine_stem_ending(). In general, the complexities of predictable prefix, stem and ending modifications are all
handled in this function. In particular:
1. Spelling-based modifications (c/z, g/gu, gu/gü, g/j) occur automatically as appropriate for the ending.
2. If the stem begins with an acute accent, the accent is moved onto the last vowel of the prefix (for handling verbs
in -uar such as [[minguar]], pres_3s 'míngua').
3. If the ending begins with a double asterisk, this is a signal to conditionally delete the accent on the last letter
of the stem. "Conditionally" means we don't do it if the last two letters would form a diphthong without the accent
on the second one (e.g. in [[sair]], with stem 'saí'); but as an exception, we do delete the accent in stems
ending in -guí, -quí (e.g. in [[conseguir]]) because in this case the ui isn't a diphthong.
4. If the ending begins with an asterisk, this is a signal to delete the accent on the last letter of the stem, e.g.
fizé -> fizermos. Unlike for **, this removal is unconditional, so we get e.g. 'sairmos' not #'saírmos'.
5. If ending begins with i, it must get an accent after an unstressed vowel (in some but not all cases) to prevent the
two merging into a diphthong. See combine_stem_ending() for specifics.
The following stems are recognized:
-- pres_unstressed: The present indicative unstressed stem (1p, 2p). Also controls the imperative 2p
and gerund. Defaults to the infinitive stem (minus the ending -ar/-er/-ir/-or).
-- pres_stressed: The present indicative stressed stem (1s, 2s, 3s, 3p). Also controls the imperative 2s.
Default is empty if indicator `no_pres_stressed`, else a vowel alternation if such an indicator is given
(e.g. `ue`, `ì`), else the infinitive stem.
-- pres1_and_sub: Overriding stem for 1s present indicative and the entire subjunctive. Only set by irregular verbs
and by the indicators `no_pres_stressed` (e.g. [[precaver]]) and `no_pres1_and_sub` (since verbs of this sort,
e.g. [[puir]], are missing the entire subjunctive as well as the 1s present indicative). Used by many irregular
verbs, e.g. [[caber]], verbs in '-air', [[dizer]], [[ter]], [[valer]], etc. Some verbs set this and then supply an
override for the pres_1sg if it's irregular, e.g. [[saber]], with irregular subjunctive stem "saib-" and special
1s present indicative "sei".
-- pres1: Special stem for 1s present indicative. Normally, do not set this explicitly. If you need to specify an
irregular 1s present indicative, use the form override pres_1s= to specify the entire form. Defaults to
pres1_and_sub if given, else pres_stressed.
-- pres_sub_unstressed: The present subjunctive unstressed stem (1p, 2p). Defaults to pres1_and_sub if given, else the
infinitive stem.
-- pres_sub_stressed: The present subjunctive stressed stem (1s, 2s, 3s, 1p). Defaults to pres1.
-- sub_conj: Determines the set of endings used in the subjunctive. Should be one of "ar" or "er".
-- impf: The imperfect stem (not including the -av-/-i- stem suffix, which is determined by the conjugation). Defaults
to the infinitive stem.
-- full_impf: The full imperfect stem missing only the endings (-a, -as, -am, etc.). Used for verbs with irregular
imperfects such as [[ser]], [[ter]], [[vir]] and [[pôr]]. Needs to include an accent on the stressed vowel, which
will automatically be removed when not needed.
-- pret_conj: Determines the set of endings used in the preterite. Should be one of "ar", "er", "ir" or "irreg".
Defaults to the conjugation as determined from the infinitive. When pret_conj == "irreg", `pret` is used, otherwise
`pret_base`.
-- pret_base: The preterite stem (not including the -a-/-e-/-i- stem suffix). Defaults to the infinitive stem.
Only used when pret_conj ~= "irreg".
-- pret: The full preterite stem missing only the endings (-ste, -mos, etc.). Needs to include the accent on the final
vowel that occurs in some forms, e.g. 'figé' for [[fazer]], 'fô' for [[ser]]; the accent will automatically be
removed when not needed. Only used for verbs with irregular preterites (pret_conj == "irreg") such as [[fazer]],
[[poder]], [[trazer]], etc. The pret_1s and pret_3s are handled using the gl_short_pret stem instead for
"Galician"-ending forms (pret_1s '-em', pret_3s '-o') and using pt_pret_1s and pt_pret_3s for "Portuguese"-ending
forms. Defaults to `pret_base` + the accented conjugation vowel.
-- gl_short_pret: The short preterite stem, used with "Galician" 1s and 3s endings (pret_1s '-em', pret_3s '-o'). Only
used with irregular preterites (pret_conj == "irreg"). Normally derived from gl_pret by deleting the final vowel,
and doesn't need to be given explicitly.
-- pt_pret_1s: The "Portuguese" pret_1s form. In addition to this, the "Galician" pret_1s form will be included, formed
from gl_short_pret by adding '-em'. Does not need to be given if an override for pret_1s is supplied.
-- pt_pret_3s: The "Portuguese" pret_3s form. In addition to this, the "Galician" pret_3s form will be included, formed
from gl_short_pret by adding '-o' (which may cause the preceding consonant to shift to preserve the sound). Does
not need to be given if an override for pret_3s is supplied.
-- fut: The future stem. Defaults to the infinitive stem + the unaccented conjugation vowel.
-- cond: The conditional stem. Defaults to `fut`.
-- impf_sub: The imperfect subjunctive stem. Needs to include the accent on the final vowel that occurs in some forms;
see `pret` for more information. Defaults to `pret`.
-- fut_sub: The future subjunctive stem. Needs to include the accent on the final vowel that occurs in some forms; see
`gl_pret` for more information. Defaults to the merger of `gl_pret` and `pt_pret`.
-- plup: The pluperfect stem. Needs to include the accent on the final vowel that occurs in some forms; see `pret` for
more information. Defaults to `pret`.
-- pers_inf: The personal infinitive stem. Defaults to the infinitive stem + the accented conjugation vowel.
-- pp: The masculine singular past participle. Default is based on the verb conjugation: infinitive stem + '-ado' for
-ar verbs, otherwise infinitive stem + '-ido'.
-- short_pp: The short masculine singular past participle, for verbs with such a form. No default.
-- pp_inv: `true` if the past participle exists only in the masculine singular.
]=]
local built_in_conjugations = {
--------------------------------------------------------------------------------------------
-- -ar --
--------------------------------------------------------------------------------------------
-- Verbs not needing entries here:
--
-- (1) Verbs with short past participles: need to specify the short pp explicitly.
--
-- aceitar: use <short_pp:aceite>
-- anexar, completar, expressar, expulsar, findar, fritar, ganhar, gastar, limpar, pagar, pasmar, pegar, soltar:
-- use <short_pp:anexo> etc.
-- assentar: use <short_pp:assente>
-- entregar: use <short_pp:entregue>
-- enxugar: use <short_pp:enxuto>
-- matar: use <short_pp:morto>
--
-- (2) Verbs with orthographic consonant alternations: handled automatically.
--
-- -car (brincar, buscar, pecar, trancar, etc.): automatically handled in combine_stem_ending()
-- -çar (alcançar, começar, laçar): automatically handled in combine_stem_ending()
-- -gar (apagar, cegar, esmagar, largar, navegar, resmungar, sugar, etc.): automatically handled in combine_stem_ending()
--
-- (3) Verbs with vowel alternations: need to specify the alternation explicitly unless it always happens, in
-- which case it's handled automatically through an entry below.
--
-- esmiuçar changing to esmiúço: use <ú>
-- faiscar changing to faísco: use <í>
-- -iar changing to -eio (ansiar, incendiar, mediar, odiar, remediar, etc.): use <ei>
-- -izar changing to -ízo (ajuizar, enraizar, homogeneizar, plebeizar, etc.): use <í>
-- mobiliar changing to mobílio: use <í>
-- reusar changing to reúso: use <ú>
-- saudar changing to saúdo: use <ú>
-- tuitar/retuitar changing to (re)tuíto: use <í>
{
-- dar, desdar
match = match_against_verbs("dar", {"^", "^des", "^re"}),
forms = {
pres_1s = "dou",
pres_2s = "dás",
pres_3s = "dá",
-- damos, dades/dais regular
pres_3p = {GL_TYPE .. "dam", PT_TYPE .. "dão"},
pret_conj = "irreg", pret = "dé", pret_1s = "dei", pret_3s = "deu",
pres_sub_1s = "dê",
pres_sub_2s = "dês",
pres_sub_3s = "dê",
-- demos, dedes/deis regular
pres_sub_3p = {GL_TYPE .. "dem", PT_TYPE .. "deem"},
irreg = true,
}
},
{
-- -ear (frear, nomear, semear, etc.)
match = "ear",
forms = {
pres_stressed = {"ei", GL_ALTVAR .. "e"},
e_ei_cat = true,
}
},
{
-- estar
match = match_against_verbs("estar", {"^", "sob", "sobr"}),
forms = {
pres_1s = "estou",
pres_2s = "estás",
pres_3s = "está",
pres_3p = {GL_TYPE .. "estám", PT_TYPE .. "estão"},
pres1_and_sub = "estej", -- only for subjunctive as we override pres_1s
sub_conj = "er",
pret_conj = "irreg", pret = "estivé", pt_pret_1s = "estive", pt_pret_3s = "esteve",
-- [[sobestar]], [[sobrestar]] are transitive so they have fully inflected past participles
pp_inv = function(base, prefix) return prefix == "" end,
irreg = true,
}
},
--------------------------------------------------------------------------------------------
-- -er --
--------------------------------------------------------------------------------------------
-- Verbs not needing entries here:
--
-- precaver: use <no_pres_stressed>
-- -cer (verbs in -ecer, descer, vencer, etc.): automatically handled in combine_stem_ending()
-- -ger (proteger, reger, etc.): automatically handled in combine_stem_ending()
-- -guer (erguer/reerguer/soerguer): automatically handled in combine_stem_ending()
{
-- benzer
match = "benzer",
forms = {short_pp = "bento"}
},
{
-- caber
match = "caber",
forms = {
pres1_and_sub = "caib",
pret_conj = "irreg", pret = "coubé", pt_pret_1s = "coube", pt_pret_3s = "coube",
irreg = true,
}
},
{
-- crer, descrer
match = "crer",
forms = {
pres_2s = "crês", pres_3s = "crê",
pres_2p = "credes", pres_3p = {GL_TYPE .. "crem", PT_TYPE .. "creem"},
pres1_and_sub = {"crei", GL_ALTVAR .. "cre"},
irreg = true,
}
},
{
-- dizer, bendizer, condizer, contradizer, desdizer, maldizer, predizer, etc.
match = "dizer",
forms = {
-- use 'digu' because we're in a front environment; if we use 'dig', we'll get '#dijo'
pres1_and_sub = "digu",
pres_2s = {GL_TYPE .. "dis", PT_TYPE .. "dizes"},
pres_3s = {GL_TYPE .. "di", PT_TYPE .. "diz"},
pres_3p = {GL_TYPE .. "dim", PT_TYPE .. "dizem"},
pret_conj = "irreg", pret = {GL_TYPE .. "dixé", PT_TYPE .. "dissé"},
pt_pret_1s = "disse", pt_pret_3s = "disse",
pp = "dito",
fut = "dir",
irreg = true,
}
},
{
-- eleger, reeleger
match = "eleger",
forms = {short_pp = "eleito"}
},
{
-- acender, prender; not desprender, etc.
match = match_against_verbs("ender", {"^ac", "^pr"}),
forms = {short_pp = "eso"}
},
{
-- fazer, afazer, contrafazer, desfazer, liquefazer, perfazer, putrefazer, rarefazer, refazer, satisfazer, tumefazer
match = "fazer",
forms = {
-- use 'fagu' because we're in a front environment; if we use 'fag', we'll get '#fajo'
pres1_and_sub = {GL_TYPE .. "fagu", PT_TYPE .. "faç"},
pres_2s = {GL_TYPE .. "fás", PT_TYPE .. "fazes"},
pres_3s = {GL_TYPE .. "fai", PT_TYPE .. "faz"},
pres_3p = {GL_TYPE .. "fam", PT_TYPE .. "fazem"},
pret_conj = "irreg", pret = {GL_TYPE .. "figé", PT_TYPE .. "fizé", GL_ONLY_ALTVAR .. "fizé"},
pt_pret_1s = "fiz", pt_pret_3s = "fez",
pp = "feito",
fut = "far",
irreg = true,
}
},
{
match = "^haver",
forms = {
pres_1s = "hei",
pres_2s = "hás",
pres_3s = {"há", {form = GL_ALTVAR .. "hai", footnotes = {"[also impersonal]"}}},
pres_3p = {GL_TYPE .. "ham", PT_TYPE .. "hão"},
pres1_and_sub = "haj", -- only for subjunctive as we override pres_1s
pret_conj = "irreg", pret = "houvé", pt_pret_1s = "houve", pt_pret_3s = "houve",
imp_2s = "há",
irreg = true,
}
},
-- reaver below under r-
{
-- jazer, adjazer
match = "jazer",
forms = {
pres_3s = "jaz",
irreg = true,
}
},
{
-- ler, reler, tresler; not excel(l)er, valer, etc.
match = match_against_verbs("ler", {"^", "^re", "tres"}),
forms = {
pres_2s = "lês", pres_3s = "lê",
pres_2p = "ledes", pres_3p = {GL_TYPE .. "lem", PT_TYPE .. "leem"},
pres1_and_sub = {"lei", GL_ALTVAR .. "le"},
irreg = true,
}
},
{
-- morrer, desmorrer
match = "morrer",
forms = {short_pp = "morto"}
},
{
-- moer, but not remoer
match = "^moer",
forms = {
pres_2s = "móis", pres_3s = "mói",
-- impf -ía etc., pret_1s -oí and pp -oído handled automatically in combine_stem_ending()
pres1_and_sub = {"mo", GL_ALTVAR .. "moi"},
short_pp = "mudo",
irreg = true,
}
},
{
-- doer, remoer, roer/corroer, soer
match = "oer",
forms = {
pres_2s = "óis", pres_3s = "ói",
-- impf -ía etc., pret_1s -oí and pp -oído handled automatically in combine_stem_ending()
pres1_and_sub = {"o", GL_ALTVAR .. "oi"},
irreg = true,
}
},
{
-- perder
match = "perder",
forms = {
-- use 'perqu' because we're in a front environment; if we use 'perc', we'll get '#perço'
-- we don't tag these forms GL_TYPE or PT_TYPE because both occur with both endings -ais/-ades
pres1_and_sub = {"perd", "perqu"},
irreg = true,
}
},
{
-- poder
match = "poder",
forms = {
pres1_and_sub = {GL_TYPE .. "pod", PT_TYPE .. "poss"},
pret_conj = "irreg", pret = "pudé", pt_pret_1s = "pude", pt_pret_3s = "pôde",
irreg = true,
}
},
{
-- prazer, aprazer, comprazer, desprazer
-- FIXME: comprazer also has regular preterite
match = "prazer",
forms = {
pres_3s = "praz",
pret_conj = "irreg", pret = "prouvé", pt_pret_1s = "prouve", pt_pret_3s = "prouve",
only3sp = function(base, prefix) return prefix == "a" end,
imp_2s = {GL_TYPE .. "praze", PT_TYPE .. "praz"},
irreg = true,
}
},
-- prover below, just below ver
{
-- requerer; must precede querer
match = "requerer",
forms = {
pres_3s = "requer",
pres1_and_sub = "requeir",
imp_2s = {"requer"},
-- regular preterite, unlike [[querer]]
irreg = true,
}
},
{
-- querer, desquerer, malquerer
match = "querer",
forms = {
pres_1s = "quero", pres_3s = "quer",
pres1_and_sub = "queir", -- only for subjunctive as we override pres_1s
pret_conj = "irreg", pret = {GL_TYPE .. "quigé", PT_TYPE .. "quisé"},
pt_pret_1s = "quis", pt_pret_3s = "quis",
irreg = true,
}
},
{
match = "reaver",
forms = {
pres_1s = "reei",
pres_2s = "reás",
pres_3s = "reá",
pres_3p = {GL_TYPE .. "ream", PT_TYPE .. "reão"},
pres1_and_sub = "reaj", -- only for subjunctive as we override pres_1s
pret_conj = "irreg", pret = "reouvé", pt_pret_1s = "reouve", pt_pret_3s = "reouve",
irreg = true,
}
},
{
-- saber, ressaber
match = "saber",
forms = {
pres_1s = "sei",
pres1_and_sub = "saib", -- only for subjunctive as we override pres_1s
pret_conj = "irreg", pret = "soubé", pt_pret_1s = "soube", pt_pret_3s = "soube",
irreg = true,
}
},
{
-- escrever/reescrever, circunscrever, descrever/redescrever, inscrever, prescrever, proscrever, subscrever,
-- transcrever, others?
match = "screver",
forms = {
pp = "scrito",
irreg = true,
}
},
{
-- suspender
match = "suspender",
forms = {short_pp = "suspenso"}
},
{
match = "^ser",
forms = {
pres_1s = "sou", pres_2s = "és", pres_3s = "é",
pres_1p = "somos", pres_2p = {GL_TYPE .. "sodes", PT_TYPE .. "sois"},
pres_3p = {GL_TYPE .. "som", PT_TYPE .. "são"},
pres1_and_sub = "sej", -- only for subjunctive as we override pres_1s
full_impf = "ér",
pret_conj = "irreg", pret = "fô", pret_1s = {GL_TYPE .. "fum", PT_TYPE .. "fui"}, pret_3s = "foi",
imp_2s = "sê", imp_2p = "sede",
pp_inv = true,
irreg = true,
}
},
{
-- We want to match abster, conter, deter, etc. but not abater, cometer, etc. No way to avoid listing each verb.
match = match_against_verbs("ter", {"abs", "^a", "con", "de", "entre", "man", "ob", "^re", "sus", "^"}),
forms = {
-- FIXME, Estraviz says 'contens', 'detens' etc. but that may be a typo
pres_2s = function(base, prefix) return {GL_TYPE .. "tés", PT_TYPE .. (prefix == "" and "tens" or "téns")} end,
-- FIXME, Estraviz says 'contem', 'detem' etc. but that may be a typo
pres_3s = function(base, prefix) return prefix == "" and "tem" or "tém" end,
pres_2p = "tendes", pres_3p = {GL_TYPE .. "tenhem", PT_TYPE .. "têm", GL_ALTVAR .. "tém"},
pres1_and_sub = "tenh",
full_impf = "tính",
pret_conj = "irreg", pret = "tivé", pt_pret_1s = "tive", pt_pret_3s = "teve",
irreg = true,
}
},
{
match = "trazer",
forms = {
-- use 'tragu' because we're in a front environment; if we use 'trag', we'll get '#trajo'
pres1_and_sub = "tragu", pres_3s = "traz",
pret_conj = "irreg", pret = "trouxé", pt_pret_1s = "trouxe", pt_pret_3s = "trouxe",
fut = "trar",
irreg = true,
}
},
{
match = "traguer",
forms = {
pret_conj = "irreg", pret = "trouxé", pt_pret_1s = "trouxe", pt_pret_3s = "trouxe",
irreg = true,
}
},
{
-- valer, desvaler, equivaler
match = "valer",
forms = {
pres1_and_sub = "valh",
irreg = true,
}
},
{
-- We want to match antever etc. but not absolver, atrever etc. No way to avoid listing each verb.
match = match_against_verbs("ver", {"ante", "entre", "pre", "^re", "^"}),
forms = {
pres_2s = "vês", pres_3s = "vê",
pres_2p = "vedes",
pres_3p = function(base, prefix) return {GL_TYPE .. (prefix == "" and "vem" or "vêm"), PT_TYPE .. "veem"} end,
pres1_and_sub = "vej",
pret_conj = "irreg", pret = "ví", pret_1s = {GL_TYPE .. "vim", PT_TYPE .. "vi"}, pret_3s = "viu",
pp = "visto",
irreg = true,
}
},
{
-- [[prover]] and [[desprover]] have regular preterite and past participle
match = "prover",
forms = {
pres_2s = "provês", pres_3s = "provê",
-- FIXME: Estraviz says 'provem' but that may be a typo
pres_2p = "provedes", pres_3p = {GL_TYPE .. "provêm", PT_TYPE .. "proveem"},
pres1_and_sub = "provej",
irreg = true,
}
},
{
-- volver, devolver, envolver, revolver, etc.
match = "volver",
forms = {short_pp = "volto"},
},
--------------------------------------------------------------------------------------------
-- -ir --
--------------------------------------------------------------------------------------------
-- Verbs not needing entries here:
--
-- abolir: use <u-o>
-- barrir: use <only3sp>
-- carpir, colorir, demolir: use <no_pres1_and_sub>
-- descolorir: use <no_pres1_and_sub>
-- delir, espavorir, falir, florir, remir, renhir: use <no_pres_stressed>
-- empedernir: use <i-e>
-- transir: regular
-- aspergir, despir, flectir/deflectir/genuflectir/genufletir/reflectir/refletir, mentir/desmentir,
-- sentir/assentir/consentir/dissentir/pressentir/ressentir, convergir/divergir, aderir/adherir,
-- ferir/auferir/conferir/deferir/desferir/diferir/differir/inferir/interferir/preferir/proferir/referir/transferir,
-- gerir/digerir/ingerir/sugerir, preterir, competir/repetir, servir, advertir/animadvertir/divertir,
-- vestir/investir/revestir/travestir, seguir/conseguir/desconseguir/desseguir/perseguir/prosseguir: use <i-e>
-- inerir: use <i-e>
-- compelir/expelir/impelir/repelir: use <i-e>
-- dormir, engolir, tossir, subir, acudir/sacudir, fugir, sumir/consumir (NOT assumir/presumir/resumir): use <u-o>
-- polir/repolir: use <u>
-- premir: use <i>
-- extorquir/retorquir: <u-o,u>
-- agredir/progredir/regredir/transgredir: use <i>
-- denegrir, prevenir: use <i>
-- eclodir: use <u-o>
-- cerzir: use <i-e>
-- proibir/coibir: use <í>
-- reunir: use <ú>
-- parir/malparir: use <no_pres_stressed>
-- explodir/implodir: use <u-o>
--
-- -cir alternations (aducir, ressarcir): automatically handled in combine_stem_ending()
-- -gir alternations (agir, dirigir, exigir): automatically handled in combine_stem_ending()
-- -guir alternations (e.g. conseguir): automatically handled in combine_stem_ending()
-- -quir alternations (e.g. extorquir): automatically handled in combine_stem_ending()
{
-- verbs in -air (cair, sair, trair and derivatives: decair/descair/recair, sobres(s)air,
-- abstrair/atrair/contrair/distrair/extrair/protrair/retrair/subtrair)
match = "air",
forms = {
pres1_and_sub = "ai", pres_2s = "ais", pres_3s = "ai",
-- all occurrences of accented í in endings handled in combine_stem_ending()
irreg = true,
}
},
{
-- abrir/desabrir/reabrir
match = "abrir",
forms = {pp = "aberto"}
},
{
-- cobrir/descobrir/encobrir/recobrir/redescobrir
match = "cobrir",
forms = {vowel_alt = "u-o", pp = "coberto"}
},
{
-- conduzir, produzir, reduzir, traduzir, etc.; luzir, reluzir, tremeluzir
match = "uzir",
forms = {
pres_3s = "uz",
-- FIXME, is this correct?
imp_2s = "uze",
irreg = true,
}
},
{
-- pedir, desimpedir, despedir, espedir, expedir, impedir
-- medir
-- comedir
match = match_against_verbs("edir", {"m", "p"}),
forms = {
pres1_and_sub = {GL_TYPE .. "id", PT_TYPE .. "eç"},
irreg = true,
}
},
{
-- frigir
match = "frigir",
forms = {vowel_alt = "i-e", short_pp = "frito"},
},
{
-- inserir
match = "inserir",
forms = {vowel_alt = "i-e"},
},
{
-- ir
match = "^ir",
forms = {
pres_1s = "vou", pres_2s = {GL_TYPE .. "vás", PT_TYPE .. "vais"}, pres_3s = "vai",
pres_1p = {GL_TYPE .. "imos", PT_TYPE .. "vamos"}, pres_2p = "ides",
pres_3p = {GL_TYPE .. "vam", PT_TYPE .. "vão"},
pres_sub_1s = {GL_TYPE .. "vaia", PT_TYPE .. "vá"},
pres_sub_2s = {GL_TYPE .. "vaias", PT_TYPE .. "vás"},
pres_sub_3s = {GL_TYPE .. "vaia", PT_TYPE .. "vá"},
pres_sub_1p = {GL_TYPE .. "vaiamos", PT_TYPE .. "vamos"},
pres_sub_2p = {GL_TYPE .. "vaiades", PT_TYPE .. "vades"},
pres_sub_3p = {GL_TYPE .. "vaiam", PT_TYPE .. "vão"},
pret_conj = "irreg", pret = "fô", pret_1s = {GL_TYPE .. "fum", PT_TYPE .. "fui"}, pret_3s = "foi",
irreg = true,
}
},
{
-- emergir, imergir, submergir
match = "mergir",
forms = {vowel_alt = "i-e", short_pp = "merso"},
},
{
match = "ouvir",
forms = {
pres1_and_sub = {"ouç", ALTVAR .. "oiç"},
irreg = true,
}
},
{
-- exprimir, imprimir, comprimir (but not descomprimir per Priberam), deprimir, oprimir/opprimir (but not reprimir,
-- suprimir/supprimir per Priberam)
match = match_against_verbs("primir", {"^com", "ex", "im", "de", "^o", "op"}),
forms = {short_pp = "presso"}
},
{
-- rir, sorrir
match = match_against_verbs("rir", {"^", "sor"}),
forms = {
pres_2s = "ris", pres_3s = "ri", pres_2p = "rides", pres_3p = {GL_TYPE .. "rim", PT_TYPE .. "riem"},
pres1_and_sub = "ri",
irreg = true,
}
},
{
-- distinguir, extinguir
match = "tinguir",
forms = {
short_pp = "tinto",
-- gu/g alternations handled in combine_stem_ending()
}
},
{
-- verbs in -truir (construir, destruir, reconstruir) but not obstruir/desobstruir, instruir, which are handled
-- by the default -uir handler below
match = match_against_verbs("struir", {"con", "de"}),
forms = {
pres_2s = {"stróis", ALTVAR .. "struis"}, pres_3s = {"strói", ALTVAR .. "strui"},
pres_3p = {"stroem", ALTVAR .. "struem"},
-- all occurrences of accented í in endings handled in combine_stem_ending()
irreg = true,
}
},
{
-- remaining verbs in -uir (concluir/excluir/incluir/concruir/concruyr, abluir/diluir, afluir/fluir/influir,
-- aluir, anuir, atribuir/contribuir/distribuir/redistribuir/retribuir/substituir, coevoluir/evoluir,
-- constituir/destituir/instituir/reconstituir/restituir, derruir, diminuir, estatuir, fruir/usufruir, imbuir,
-- imiscuir, poluir, possuir, puir, pruir, ruir
-- FIXME: old module lists short pp incluso for incluir that can't be verified, ask about this
-- FIXME: handle -uyr verbs?
match = function(verb)
-- Don't match -guir verbs (e.g. [[seguir]], [[conseguir]]) or -quir verbs (e.g. [[extorquir]])
if verb:find("guir$") or verb:find("quir$") then
return nil
else
return match_against_verbs("uir", {""})(verb)
end
end,
forms = {
pres_2s = "uis", pres_3s = "ui",
-- all occurrences of accented í in endings handled in combine_stem_ending()
irreg = true,
}
},
{
-- We want to match advir, convir, devir, etc. but not ouvir, servir, etc. No way to avoid listing each verb.
match = match_against_verbs("vir", {"ad", "^a", "con", "contra", "de", "^desa", "inter", "pro", "^re", "sobre", "^"}),
forms = {
-- FIXME, Estraviz says 'convens', 'devens' etc. but that may be a typo
pres_2s = function(base, prefix) return {GL_TYPE .. "vés", PT_TYPE .. (prefix == "" and "vens" or "véns")} end,
-- FIXME, Estraviz says 'convem', 'devem' etc. but that may be a typo
pres_3s = function(base, prefix) return prefix == "" and "vem" or "vém" end,
pres_2p = "vindes", pres_3p = {GL_TYPE .. "venhem", PT_TYPE .. "vêm", GL_ALTVAR .. "vém"},
pres1_and_sub = "venh",
full_impf = "vính",
pret_conj = "irreg", pret = {GL_TYPE .. "vinhé", PT_TYPE .. "vié"},
pret_1s = "vim", pret_3s = {GL_TYPE .. "véu", PT_TYPE .. "veio"},
pp = "vindo",
irreg = true,
}
},
--------------------------------------------------------------------------------------------
-- misc --
--------------------------------------------------------------------------------------------
{
-- pôr, antepor, apor, compor/decompor/descompor, contrapor, depor, dispor, expor, impor, interpor, justapor,
-- opor, pospor, propor, repor, sobrepor, supor/pressupor, transpor, decompor, others?
match = "p[oô]r",
forms = {
pres1_and_sub = "ponh",
pres_2s = {GL_TYPE .. "pós", PT_TYPE .. "pões", GL_ALTVAR .. "pons"},
pres_3s = {GL_TYPE .. "pom", PT_TYPE .. "põe"},
pres_1p = "pomos", pres_2p = "pondes",
pres_3p = {GL_TYPE .. "ponhem", PT_TYPE .. "põem", GL_ALTVAR .. "póm"},
full_impf = "púnh",
pret_conj = "irreg", pret = {GL_TYPE .. "pugé", PT_TYPE .. "pusé"}, pt_pret_1s = "pus", pt_pret_3s = "pôs",
pers_inf = "po",
gerund = "pondo", pp = "posto",
irreg = true,
}
},
}
local function skip_slot(base, slot, allow_overrides)
if not allow_overrides and (base.basic_overrides[slot] or
base.refl and base.basic_reflexive_only_overrides[slot]) then
-- Skip any slots for which there are overrides.
return true
end
if base.only3s and (slot:find("^pp_f") or slot:find("^pp_mp")) then
-- diluviar, atardecer, neviscar; impersonal verbs have only masc sing pp
return true
end
if not slot:find("[123]") then
-- Don't skip non-personal slots.
return false
end
if base.nofinite then
return true
end
if (base.only3s or base.only3sp or base.only3p) and (slot:find("^imp_") or slot:find("^neg_imp_")) then
return true
end
if base.only3s and not slot:find("3s") then
-- diluviar, atardecer, neviscar
return true
end
if base.only3sp and not slot:find("3[sp]") then
-- atañer, concernir
return true
end
if base.only3p and not slot:find("3p") then
-- [[caer cuatro gotas]], [[caer chuzos de punta]], [[entrarle los siete males]]
return true
end
return false
end
-- Apply vowel alternations to stem.
local function apply_vowel_alternations(stem, alternations)
local alternation_stems = {}
local saw_pres1_and_sub = false
local saw_pres_stressed = false
-- Process alternations other than +.
for _, altobj in ipairs(alternations) do
local alt = altobj.form
local pres1_and_sub, pres_stressed, err
-- Treat final -gu, -qu as a consonant, so the previous vowel can alternate (e.g. conseguir -> consigo).
-- This means a verb in -guar can't have a u-ú alternation but I don't think there are any verbs like that.
stem = rsub(stem, "([gq])u$", "%1" .. TEMPC1)
if alt == "+" then
-- do nothing yet
elseif alt == "ei" then
local before_last_vowel = rmatch(stem, "^(.*)i$")
if not before_last_vowel then
err = "stem should end in -i"
else
pres1_and_sub = nil
pres_stressed = before_last_vowel .. "ei"
end
else
local before_last_vowel, last_vowel, after_last_vowel = rmatch(stem, "^(.*)(" .. V .. ")(.-[ui])$")
if not before_last_vowel then
before_last_vowel, last_vowel, after_last_vowel = rmatch(stem, "^(.*)(" .. V .. ")(.-)$")
end
if alt == "i-e" then
if last_vowel == "e" or last_vowel == "i" then
pres1_and_sub = before_last_vowel .. "i" .. after_last_vowel
if last_vowel == "i" then
pres_stressed = before_last_vowel .. "e" .. after_last_vowel
end
else
err = "should have -e- or -i- as the last vowel"
end
elseif alt == "i" then
if last_vowel == "e" then
pres1_and_sub = before_last_vowel .. "i" .. after_last_vowel
pres_stressed = pres1_and_sub
else
err = "should have -e- as the last vowel"
end
elseif alt == "u-o" then
if last_vowel == "o" or last_vowel == "u" then
pres1_and_sub = before_last_vowel .. "u" .. after_last_vowel
if last_vowel == "u" then
pres_stressed = before_last_vowel .. "o" .. after_last_vowel
end
else
err = "should have -o- or -u- as the last vowel"
end
elseif alt == "u" then
if last_vowel == "o" then
pres1_and_sub = before_last_vowel .. "u" .. after_last_vowel
pres_stressed = pres1_and_sub
else
err = "should have -o- as the last vowel"
end
elseif alt == "í" then
if last_vowel == "i" then
pres_stressed = before_last_vowel .. "í" .. after_last_vowel
else
err = "should have -i- as the last vowel"
end
elseif alt == "ú" then
if last_vowel == "u" then
pres_stressed = before_last_vowel .. "ú" .. after_last_vowel
else
err = "should have -u- as the last vowel"
end
else
error("Internal error: Unrecognized vowel alternation '" .. alt .. "'")
end
end
if pres1_and_sub then
pres1_and_sub = {form = pres1_and_sub:gsub(TEMPC1, "u"), footnotes = altobj.footnotes}
saw_pres1_and_sub = true
end
if pres_stressed then
pres_stressed = {form = pres_stressed:gsub(TEMPC1, "u"), footnotes = altobj.footnotes}
saw_pres_stressed = true
end
table.insert(alternation_stems, {
altobj = altobj,
pres1_and_sub = pres1_and_sub,
pres_stressed = pres_stressed,
err = err
})
end
-- Now do +. We check to see which stems are used by other alternations and specify those so any footnotes are
-- properly attached.
for _, alternation_stem in ipairs(alternation_stems) do
if alternation_stem.altobj.form == "+" then
local stemobj = {form = stem, footnotes = alternation_stem.altobj.footnotes}
alternation_stem.pres1_and_sub = saw_pres1_and_sub and stemobj or nil
alternation_stem.pres_stressed = saw_pres_stressed and stemobj or nil
end
end
return alternation_stems
end
-- Add the `stem` to the `ending` for the given `slot` and apply any phonetic modifications.
-- WARNING: This function is written very carefully; changes to it can easily have unintended consequences.
local function combine_stem_ending(base, slot, prefix, stem, ending, dont_include_prefix)
-- If the stem begins with an acute accent, this is a signal to move the accent onto the last vowel of the prefix.
-- Cf. míngua of minguar.
if stem:find("^" .. AC) then
stem = rsub(stem, "^" .. AC, "")
if dont_include_prefix then
error("Internal error: Can't handle acute accent at beginning of stem if dont_include_prefix is given")
end
prefix = rsub(prefix, "([aeiouyAEIOUY])([^aeiouyAEIOUY]*)$", "%1" .. AC .. "%2")
end
-- Use the full stem for checking for -gui ending and such, because 'stem' is just 'u' for [[arguir]],
-- [[delinquir]].
local full_stem = prefix .. stem
-- Include the prefix in the stem unless dont_include_prefix is given (used for the past participle stem).
if not dont_include_prefix then
stem = full_stem
end
-- If the ending begins with a double asterisk, this is a signal to conditionally delete the accent on the last letter
-- of the stem. "Conditionally" means we don't do it if the last two letters would form a diphthong without the accent
-- on the second one (e.g. in [[sair]], with stem 'saí'); but as an exception, we do delete the accent in stems
-- ending in -guí, -quí (e.g. in [[conseguir]]) because in this case the ui isn't a diphthong.
if ending:find("^%*%*") then
ending = rsub(ending, "^%*%*", "")
if rfind(full_stem, "[gq]uí$") or not rfind(full_stem, V .. "[íú]$") then
stem = com.remove_final_accent(stem)
end
end
-- If the ending begins with an asterisk, this is a signal to delete the accent on the last letter of the stem.
-- E.g. fizé -> fizermos. Unlike for **, this removal is unconditional, so we get e.g. 'sairmos' not #'saírmos'.
if ending:find("^%*") then
ending = rsub(ending, "^%*", "")
stem = com.remove_final_accent(stem)
end
-- If ending begins with i, it must get an accent after an unstressed vowel (in some but not all cases) to prevent
-- the two merging into a diphthong:
-- * cair ->
-- * pres: caímos, caís;
-- * impf: all forms (caí-);
-- * pret: caí (but not caim), caíste (but not caiu), caímos, caístes, caíram;
-- * plup: all forms (caír-);
-- * impf_sub: all forms (caíss-);
-- * fut_sub: caíres, caírem (but not cair, cairmos, cairdes)
-- * pp: caído (but not gerund caindo)
-- * atribuir, other verbs in -uir -> same pattern as for cair etc.
-- * roer ->
-- * pret: roí (but not roim)
-- * impf: all forms (roí-)
-- * pp: roído
-- Don't let variant codes derail the following checks. Note that variant codes are properly added to the end of
-- the ending, so checks against the beginning of the ending work even in their presence, but not checks against
-- the full ending.
local cleaned_ending = export.remove_variant_codes(ending)
if cleaned_ending:find("^i") and full_stem:find("[aeiou]$") and not full_stem:find("[gq]u$") and
not cleaned_ending:find("^i[rum]$") and cleaned_ending ~= "indo" and not cleaned_ending:find("^ir[md]") then
ending = ending:gsub("^i", "í")
end
-- Spelling changes in the stem; it depends on whether the stem given is the pre-front-vowel or
-- pre-back-vowel variant, as indicated by `frontback`. We want these front-back spelling changes to happen
-- between stem and ending, not between prefix and stem; the prefix may not have the same "front/backness"
-- as the stem.
local is_front = rfind(ending, "^[eiéíê]")
if base.frontback == "front" and not is_front then
stem = stem:gsub("c$", "ç") -- conhecer -> conheço, vencer -> venço, descer -> desço
stem = stem:gsub("g$", "j") -- proteger -> protejo, fugir -> fujo
stem = stem:gsub("gu$", "g") -- distinguir -> distingo, conseguir -> consigo
stem = stem:gsub("qu$", "c") -- extorquir -> exturco
stem = stem:gsub("([gq])ü$", "%1u") -- argüir (superseded) -> arguo, delinqüir (superseded) -> delinquo
elseif base.frontback == "back" and is_front then
-- The following changes are all superseded so we don't do them:
-- averiguar -> averigüei, minguar -> mingüei; antiquar -> antiqüei, apropinquar -> apropinqüei
-- stem = stem:gsub("([gq])u$", "%1ü")
stem = stem:gsub("g$", "gu") -- cargar -> carguei, apagar -> apaguei
stem = stem:gsub("c$", "qu") -- marcar -> marquei
stem = stem:gsub("ç$", "c") -- começar -> comecei
-- j does not go to g here; desejar -> deseje not #desege
end
local retval = stem .. ending
if retval:find(GL_TYPE) and retval:find(PT_TYPE) or retval:find(GL_ONLY_TYPE) and not retval:find(GL_TYPE) then
-- Reject clashes in "Galician"-type and "Portuguese"-type forms, e.g. '#vós dixéreis' or '#vós dissérades'.
return nil
end
return retval
end
local function add3(base, slot, stems, endings, footnotes, allow_overrides)
if skip_slot(base, slot, allow_overrides) then
return
end
local function do_combine_stem_ending(stem, ending)
return combine_stem_ending(base, slot, base.prefix, stem, ending)
end
iut.add_forms(base.forms, slot, stems, endings, do_combine_stem_ending, nil, nil, footnotes)
end
local function insert_form(base, slot, form)
if not skip_slot(base, slot) then
iut.insert_form(base.forms, slot, form)
end
end
local function insert_forms(base, slot, forms)
if not skip_slot(base, slot) then
iut.insert_forms(base.forms, slot, forms)
end
end
local function add_single_stem_tense(base, slot_pref, stems, s1, s2, s3, p1, p2, p3)
local function addit(slot, ending)
add3(base, slot_pref .. "_" .. slot, stems, ending)
end
addit("1s", s1)
addit("2s", s2)
addit("3s", s3)
addit("1p", p1)
addit("2p", p2)
addit("3p", p3)
end
local function construct_stems(base, vowel_alt)
local stems = {}
stems.pres_unstressed = base.stems.pres_unstressed or base.inf_stem
stems.pres_stressed =
-- If no_pres_stressed given, pres_stressed stem should be empty so no forms are generated.
base.no_pres_stressed and {} or
base.stems.pres_stressed or
vowel_alt.pres_stressed or
base.inf_stem
stems.pres1_and_sub =
-- If no_pres_stressed given, the entire subjunctive is missing.
base.no_pres_stressed and {} or
-- If no_pres1_and_sub given, pres1 and entire subjunctive are missing.
base.no_pres1_and_sub and {} or
base.stems.pres1_and_sub or
vowel_alt.pres1_and_sub or
nil
stems.pres1 = base.stems.pres1 or stems.pres1_and_sub or stems.pres_stressed
stems.impf = base.stems.impf or base.inf_stem
stems.full_impf = base.stems.full_impf
stems.pret_base = base.stems.pret_base or base.inf_stem
stems.pret_conj = base.stems.pret_conj or base.conj
stems.pret = base.stems.pret or iut.map_forms(iut.convert_to_general_list_form(stems.pret_base),
function(form) return form .. base.conj_vowel end)
stems.gl_short_pret = base.stems.gl_short_pret or iut.map_forms(iut.convert_to_general_list_form(stems.pret),
function(form) return rsub(form, com.V .. "$", "") end)
stems.pt_pret_1s = base.stems.pt_pret_1s
stems.pt_pret_3s = base.stems.pt_pret_3s
stems.fut = base.stems.fut or base.inf_stem .. base.conj
stems.cond = base.stems.cond or stems.fut
stems.pres_sub_stressed = base.stems.pres_sub_stressed or stems.pres1
stems.pres_sub_unstressed = base.stems.pres_sub_unstressed or stems.pres1_and_sub or stems.pres_unstressed
stems.sub_conj = base.stems.sub_conj or base.conj
stems.plup = base.stems.plup or stems.pret
stems.impf_sub = base.stems.impf_sub or stems.pret
stems.fut_sub = base.stems.fut_sub or stems.pret
stems.pers_inf = base.stems.pers_inf or base.inf_stem .. base.conj_vowel
stems.pp = base.stems.pp or base.conj == "ar" and
combine_stem_ending(base, "pp_ms", base.prefix, base.inf_stem, "ado", "dont include prefix") or
-- use combine_stem_ending esp. so we get roído, caído, etc.
combine_stem_ending(base, "pp_ms", base.prefix, base.inf_stem, "ido", "dont include prefix")
stems.pp_ms = stems.pp
local function masc_to_fem(form)
if rfind(form, "o$") then
return rsub(form, "o$", "a")
else
return form
end
end
stems.pp_fs = iut.map_forms(iut.convert_to_general_list_form(stems.pp_ms), masc_to_fem)
if base.stems.short_pp then
stems.short_pp_ms = base.stems.short_pp
stems.short_pp_fs = iut.map_forms(iut.convert_to_general_list_form(stems.short_pp_ms), masc_to_fem)
end
base.this_stems = stems
end
local function add_present_indic(base)
local stems = base.this_stems
local function addit(slot, stems, ending)
add3(base, "pres_" .. slot, stems, ending)
end
local s2, s3, p1, p2, p3
if base.conj == "ar" then
s2, s3, p1, p2, p3 = "as", "a", "amos", {"ades" .. GL_TYPE, "ais" .. PT_TYPE}, "am"
elseif base.conj == "er" or base.conj == "or" then -- verbs in -por have the present overridden
s2, s3, p1, p2, p3 = "es", "e", "emos", {"edes" .. GL_TYPE, "eis" .. PT_TYPE}, "em"
elseif base.conj == "ir" then
s2, s3, p1, p2, p3 = "es", "e", "imos", {"ides" .. GL_TYPE, "is" .. PT_TYPE}, "em"
else
error("Internal error: Unrecognized conjugation " .. base.conj)
end
addit("1s", stems.pres1, "o")
addit("2s", stems.pres_stressed, s2)
addit("3s", stems.pres_stressed, s3)
addit("1p", stems.pres_unstressed, p1)
addit("2p", stems.pres_unstressed, p2)
addit("3p", stems.pres_stressed, p3)
end
local function add_present_subj(base)
local stems = base.this_stems
local function addit(slot, stems, ending)
add3(base, "pres_sub_" .. slot, stems, ending)
end
local s1, s2, s3, p1, p2, p3
if stems.sub_conj == "ar" then
s1, s2, s3, p1, p2, p3 = "e", "es", "e", "emos", {"edes" .. GL_TYPE, "eis" .. PT_TYPE}, "em"
else
s1, s2, s3, p1, p2, p3 = "a", "as", "a", "amos", {"ades" .. GL_TYPE, "ais" .. PT_TYPE}, "am"
end
addit("1s", stems.pres_sub_stressed, s1)
addit("2s", stems.pres_sub_stressed, s2)
addit("3s", stems.pres_sub_stressed, s3)
addit("1p", stems.pres_sub_unstressed, p1)
addit("2p", stems.pres_sub_unstressed, p2)
addit("3p", stems.pres_sub_stressed, p3)
end
local function add_finite_non_present(base)
local stems = base.this_stems
local function add_tense(slot, stem, s1, s2, s3, p1, p2, p3)
add_single_stem_tense(base, slot, stem, s1, s2, s3, p1, p2, p3)
end
-- * at the beginning of the ending means to remove an accent from the last vowel of the imperfect stem.
if stems.full_impf then
add_tense("impf", stems.full_impf, "*a", "*as", "*a", "amos",
{"ades" .. GL_TYPE, "eis" .. PT_TYPE, "ais" .. GL_ALTVAR}, "*am")
elseif base.conj == "ar" then
add_tense("impf", stems.impf, "ava", "avas", "ava", "ávamos",
{"ávades" .. GL_TYPE, "áveis" .. PT_TYPE, "ávais" .. GL_ALTVAR}, "avam")
else
add_tense("impf", stems.impf, "ia", "ias", "ia", "íamos",
{"íades" .. GL_TYPE, "íeis" .. PT_TYPE, "íais" .. GL_ALTVAR}, "iam")
end
-- * at the beginning of the ending means to remove a final accent from the preterite stem.
if stems.pret_conj == "irreg" then
add_tense("pret", stems.gl_short_pret, "em" .. GL_TYPE, nil, "o" .. GL_TYPE)
add_tense("pret", stems.pret, nil, {"*ste", "*che" .. GL_ALTVAR}, nil, "*mos", "*stes",
{"rom" .. GL_TYPE, "*ram" .. PT_TYPE})
add_tense("pret", stems.pt_pret_1s, PT_TYPE)
add_tense("pret", stems.pt_pret_3s, nil, nil, PT_TYPE)
elseif stems.pret_conj == "ar" then
add_tense("pret", stems.pret_base, "ei", {"aste", "ache" .. GL_ALTVAR}, "ou", "amos", "astes",
{"árom" .. GL_TYPE, "aram" .. PT_TYPE})
elseif stems.pret_conj == "er" then
add_tense("pret", stems.pret_base, {"im" .. GL_TYPE, "i" .. PT_TYPE}, {"este", "eche" .. GL_ALTVAR}, "eu",
"emos", "estes", {"êrom" .. GL_TYPE, "eram" .. PT_TYPE})
else
add_tense("pret", stems.pret_base, {"im" .. GL_TYPE, "i" .. PT_TYPE}, {"iste", "iche" .. GL_ALTVAR}, "iu",
"imos", "istes", {"írom" .. GL_TYPE, "iram" .. PT_TYPE})
end
-- * at the beginning of the ending means to remove a final accent from the stem.
-- ** is similar but is "conditional" on a consonant preceding the final vowel.
add_tense("plup", stems.plup, "**ra", "**ras", "**ra", "ramos",
{"rades" .. GL_TYPE, "reis" .. PT_TYPE, "rais" .. GL_ALTVAR}, "**ram")
add_tense("impf_sub", stems.impf_sub, "**sse", "**sses", "**sse", "ssemos",
{"ssedes" .. GL_TYPE, "sseis" .. PT_TYPE}, "**ssem")
add_tense("fut_sub", stems.fut_sub, "*r", "**res", "*r", "*rmos", "*rdes", "**rem")
if base.refl then
local mark = TEMP_MESOCLITIC_INSERTION_POINT
add_tense("fut", stems.fut,
{"ei" .. GL_TYPE, mark .. "ei" .. PT_TYPE}, {"ás" .. GL_TYPE, mark .. "ás" .. PT_TYPE},
{"á" .. GL_TYPE, mark .. "á" .. PT_TYPE}, {"emos" .. GL_TYPE, mark .. "emos" .. PT_TYPE},
{"edes" .. GL_TYPE, mark .. "eis" .. PT_TYPE}, {"ám" .. GL_TYPE, mark .. "ão" .. PT_TYPE}
)
add_tense("cond", stems.cond,
{"ia" .. GL_TYPE, mark .. "ia" .. PT_TYPE}, {"ias" .. GL_TYPE, mark .. "ias" .. PT_TYPE},
{"ia" .. GL_TYPE, mark .. "ia" .. PT_TYPE}, {"íamos" .. GL_TYPE, mark .. "íamos" .. PT_TYPE},
-- FIXME, is GL_ALTVAR correct for the mesoclitic variant of -íais?
{"íades" .. GL_TYPE, mark .. "íeis" .. PT_TYPE, "íais" .. GL_ALTVAR, mark .. "íais" .. GL_ALTVAR},
{"iam" .. GL_TYPE, mark .. "iam" .. PT_TYPE})
else
-- Don't insert forms with the mesoclitic insertion point to avoid duplication in non-reflexive verbs.
add_tense("fut", stems.fut, "ei", "ás", "á", "emos", {"edes" .. GL_TYPE, "eis" .. PT_TYPE},
{"ám" .. GL_TYPE, "ão" .. PT_TYPE})
add_tense("cond", stems.cond, "ia", "ias", "ia", "íamos",
-- FIXME, is GL_ALTVAR correct for the mesoclitic variant of -íais?
{"íades" .. GL_TYPE, "íeis" .. PT_TYPE, "íais" .. GL_ALTVAR}, "iam")
end
-- Different stems for different parts of the personal infinitive to correctly handle forms of [[sair]] and [[pôr]].
add_tense("pers_inf", base.non_prefixed_verb, "", nil, "")
add_tense("pers_inf", stems.pers_inf, nil, "**res", nil, "*rmos", "*rdes", "**rem")
end
local function add_non_finite_forms(base)
local stems = base.this_stems
local function addit(slot, stems, ending, footnotes)
add3(base, slot, stems, ending, footnotes)
end
insert_form(base, "infinitive", {form = base.verb})
-- Also insert "infinitive + reflexive pronoun" combinations if we're handling a reflexive verb. See comment below for
-- "gerund + reflexive pronoun" combinations.
if base.refl then
for _, persnum in ipairs(person_number_list) do
insert_form(base, "infinitive_" .. persnum, {form = base.verb})
end
end
-- verbs in -por have the gerund overridden
local ger_ending = base.conj == "ar" and "ando" or base.conj == "er" and "endo" or "indo"
addit("gerund", stems.pres_unstressed, ger_ending)
-- Also insert "gerund + reflexive pronoun" combinations if we're handling a reflexive verb. We insert exactly the same
-- form as for the bare gerund; later on in add_reflexive_or_fixed_clitic_to_forms(), we add the appropriate clitic
-- pronouns. It's important not to do this for non-reflexive verbs, because in that case, the clitic pronouns won't be
-- added, and {{gl-reinteg-verb form of}} will wrongly consider all these combinations as possible inflections of the bare
-- gerund. Thanks to [[User:JeffDoozan]] for this bug fix.
if base.refl then
for _, persnum in ipairs(person_number_list) do
addit("gerund_" .. persnum, stems.pres_unstressed, ger_ending)
end
end
-- Skip the long/short past participle footnotes if called from {{gl-reinteg-verb}} so they don't show in the headword.
local long_pp_footnotes =
stems.short_pp_ms and base.alternant_multiword_spec.source_template ~= "gl-reinteg-verb" and {long_pp_footnote} or nil
addit("pp_ms", stems.pp_ms, "", long_pp_footnotes)
if not base.pp_inv then
addit("pp_fs", stems.pp_fs, "", long_pp_footnotes)
addit("pp_mp", stems.pp_ms, "s", long_pp_footnotes)
addit("pp_fp", stems.pp_fs, "s", long_pp_footnotes)
end
if stems.short_pp_ms then
local short_pp_footnotes =
stems.short_pp_ms and base.alternant_multiword_spec.source_template ~= "gl-reinteg-verb" and {short_pp_footnote} or nil
addit("short_pp_ms", stems.short_pp_ms, "", short_pp_footnotes)
if not base.pp_inv then
addit("short_pp_fs", stems.short_pp_fs, "", short_pp_footnotes)
addit("short_pp_mp", stems.short_pp_ms, "s", short_pp_footnotes)
addit("short_pp_fp", stems.short_pp_fs, "s", short_pp_footnotes)
end
end
end
local function copy_forms_to_imperatives(base)
-- Copy pres3s to imperative since they are almost always the same.
insert_forms(base, "imp_2s", iut.map_forms(base.forms.pres_3s, function(form) return form end))
if not skip_slot(base, "imp_2p") then
-- Copy pres2p to imperative 2p minus -s since they are almost always the same.
-- But not if there's an override, to avoid possibly throwing an error.
insert_forms(base, "imp_2p", iut.map_forms(base.forms.pres_2p, function(form)
local form_no_s, var_codes = rmatch(form, "^(.*)s(" .. var_code_c .. "*)$")
if not form_no_s then
error("Can't derive second-person plural imperative from second-person plural present indicative " ..
"because form '" .. form .. "' doesn't end in -s")
end
return form_no_s .. var_codes
end))
end
-- Copy subjunctives to imperatives, unless there's an override for the given slot (as with the imp_1p of [[ir]]).
for _, persnum in ipairs({"3s", "1p", "3p"}) do
local from = "pres_sub_" .. persnum
local to = "imp_" .. persnum
insert_forms(base, to, iut.map_forms(base.forms[from], function(form) return form end))
end
end
local function process_slot_overrides(base, filter_slot, reflexive_only)
local overrides = reflexive_only and base.basic_reflexive_only_overrides or base.basic_overrides
for slot, forms in pairs(overrides) do
if not filter_slot or filter_slot(slot) then
add3(base, slot, forms, "", nil, "allow overrides")
end
end
end
-- Prefix `form` with `clitic`, adding fixed text `between` between them. Add links as appropriate unless the user
-- requested no links. Check whether form already has brackets (as will be the case if the form has a fixed clitic).
local function prefix_clitic_to_form(base, clitic, between, form)
if base.alternant_multiword_spec.args.noautolinkverb then
return clitic .. between .. form
else
local clitic_pref = "[[" .. clitic .. "]]" .. between
if form:find("%[%[") then
return clitic_pref .. form
else
return clitic_pref .. "[[" .. form .. "]]"
end
end
end
-- Add the appropriate clitic pronouns in `clitics` to the forms in `base_slot`. `store_cliticized_form` is a function
-- of three arguments (clitic, formobj, cliticized_form) and should store the cliticized form for the specified clitic
-- and form object.
local function suffix_clitic_to_forms(base, base_slot, clitics, store_cliticized_form)
if not base.forms[base_slot] then
-- This can happen, e.g. in only3s/only3sp/only3p verbs.
return
end
local autolink = not base.alternant_multiword_spec.args.noautolinkverb
for _, formobj in ipairs(base.forms[base_slot]) do
for _, clitic in ipairs(clitics) do
local cliticized_form
if formobj.form:find(TEMP_MESOCLITIC_INSERTION_POINT) then
-- mesoclisis in future and conditional
local infinitive, suffix = rmatch(formobj.form, "^(.*)" .. TEMP_MESOCLITIC_INSERTION_POINT .. "(.*)$")
if not infinitive then
error("Internal error: Can't find mesoclitic insertion point in slot '" .. base_slot .. "', form '" ..
formobj.form .. "'")
end
local full_form = infinitive .. suffix
if autolink and not infinitive:find("%[%[") then
infinitive = "[[" .. infinitive .. "]]"
end
cliticized_form =
autolink and infinitive .. "-[[" .. clitic .. "]]-[[" .. full_form .. "|" .. suffix .. "]]" or
infinitive .. "-" .. clitic .. "-" .. suffix
else
local clitic_suffix = autolink and "-[[" .. clitic .. "]]" or "-" .. clitic
local form_needs_link = autolink and not formobj.form:find("%[%[")
if base_slot:find("1p$") then
-- Final -s disappears: arrependíamos + nos -> arrependíamo-nos, etc.
cliticized_form = formobj.form:gsub("s$", "")
if form_needs_link then
cliticized_form = "[[" .. formobj.form .. "|" .. cliticized_form .. "]]"
end
else
cliticized_form = formobj.form
if form_needs_link then
cliticized_form = "[[" .. cliticized_form .. "]]"
end
end
cliticized_form = cliticized_form .. clitic_suffix
end
store_cliticized_form(clitic, formobj, cliticized_form)
end
end
end
-- Add a reflexive pronoun or fixed clitic (FIXME: not working), as appropriate to the base forms that were generated.
-- `do_joined` means to do only the forms where the pronoun is joined to the end of the form; otherwise, do only the
-- forms where it is not joined and precedes the form.
local function add_reflexive_or_fixed_clitic_to_forms(base, do_reflexive, do_joined)
for _, slotaccel in ipairs(base.alternant_multiword_spec.verb_slots_basic) do
local slot, accel = unpack(slotaccel)
local clitic
if not do_reflexive then
clitic = base.clitic
elseif slot:find("[123]") then
local persnum = slot:match("^.*_(.-)$")
clitic = person_number_to_reflexive_pronoun[persnum]
else
clitic = "se"
end
if base.forms[slot] then
if do_reflexive and slot:find("^pp_") or slot == "infinitive_linked" then
-- do nothing with reflexive past participles or with infinitive linked (handled at the end)
elseif slot:find("^neg_imp_") then
error("Internal error: Should not have forms set for negative imperative at this stage")
else
local slot_has_suffixed_clitic = not slot:find("_sub")
-- Maybe generate non-reflexive parts and separated syntactic variants for use in
-- {{gl-reinteg-verb form of}}. See comment in add_slots() above `need_special_verb_form_of_slots`.
-- Check for do_joined so we only run this code once.
if do_reflexive and do_joined and base.alternant_multiword_spec.source_template == "gl-reinteg-verb form of" and
-- Skip personal variants of infinitives and gerunds so we don't think [[arrependendo]] is a
-- non-reflexive equivalent of [[arrependendo-me]].
not slot:find("infinitive_") and not slot:find("gerund_") then
-- Clone the forms because we will be destructively modifying them just below, adding the reflexive
-- pronoun.
insert_forms(base, slot .. "_non_reflexive", mw.clone(base.forms[slot]))
if slot_has_suffixed_clitic then
insert_forms(base, slot .. "_variant", iut.map_forms(base.forms[slot], function(form)
return prefix_clitic_to_form(base, clitic, " ... ", form)
end))
end
end
if slot_has_suffixed_clitic then
if do_joined then
suffix_clitic_to_forms(base, slot, {clitic},
function(clitic, formobj, cliticized_form)
formobj.form = cliticized_form
end
)
end
elseif not do_joined then
-- Add clitic as separate word before all other forms.
for _, form in ipairs(base.forms[slot]) do
form.form = prefix_clitic_to_form(base, clitic, " ", form.form)
end
end
end
end
end
end
local function handle_infinitive_linked(base)
-- Compute linked versions of potential lemma slots, for use in {{gl-reinteg-verb}}.
-- We substitute the original lemma (before removing links) for forms that
-- are the same as the lemma, if the original lemma has links.
for _, slot in ipairs({"infinitive"}) do
insert_forms(base, slot .. "_linked", iut.map_forms(base.forms[slot], function(form)
if form == base.lemma and rfind(base.linked_lemma, "%[%[") then
return base.linked_lemma
else
return form
end
end))
end
end
local function generate_negative_imperatives(base)
-- Copy subjunctives to negative imperatives, preceded by "nom".
for _, persnum in ipairs(neg_imp_person_number_list) do
local from = "pres_sub_" .. persnum
local to = "neg_imp_" .. persnum
insert_forms(base, to, iut.map_forms(base.forms[from], function(form)
if base.alternant_multiword_spec.args.noautolinkverb then
return "nom " .. form
elseif form:find("%[%[") then
-- already linked, e.g. when reflexive
return "[[nom]] " .. form
else
return "[[nom]] [[" .. form .. "]]"
end
end))
end
end
-- Process specs given by the user using 'addnote[SLOTSPEC][FOOTNOTE][FOOTNOTE][...]'.
local function process_addnote_specs(base)
for _, spec in ipairs(base.addnote_specs) do
for _, slot_spec in ipairs(spec.slot_specs) do
slot_spec = "^" .. slot_spec .. "$"
for slot, forms in pairs(base.forms) do
if rfind(slot, slot_spec) then
-- To save on memory, side-effect the existing forms.
for _, form in ipairs(forms) do
form.footnotes = iut.combine_footnotes(form.footnotes, spec.footnotes)
end
end
end
end
end
end
local function add_missing_links_to_forms(base)
-- Any forms without links should get them now. Redundant ones will be stripped later.
for slot, forms in pairs(base.forms) do
for _, form in ipairs(forms) do
if not form.form:find("%[%[") then
form.form = "[[" .. form.form .. "]]"
end
end
end
end
-- Remove special characters added to future and conditional forms to indicate mesoclitic insertion points.
local function remove_mesoclitic_insertion_points(base)
for slot, forms in pairs(base.forms) do
if slot:find("^fut_") or slot:find("^cond_") then
for _, form in ipairs(forms) do
form.form = form.form:gsub(TEMP_MESOCLITIC_INSERTION_POINT, "")
end
end
end
end
-- If called from {{gl-reinteg-verb}}, remove less-recommended variants; otherwise add a footnote indicating they are
-- less recommended, and sort them last.
local function process_altvar_forms(base)
for slot, forms in pairs(base.forms) do
-- As an optimization, check if there are any less-recommended forms and don't do anything if not.
local saw_altvar = false
for _, form in ipairs(forms) do
if form.form:find(ALTVAR) then
saw_altvar = true
break
end
end
if saw_altvar then
if base.alternant_multiword_spec.source_template == "gl-reinteg-verb" then
base.forms[slot] = iut.flatmap_forms(base.forms[slot], function(form)
if form:find(ALTVAR) then
return {}
else
return {form}
end
end)
else
local existing_forms = base.forms[slot]
base.forms[slot] = {}
for _, formobj in ipairs(existing_forms) do
if not formobj.form:find(ALTVAR) then
iut.insert_form(base.forms, slot, formobj)
end
end
for _, formobj in ipairs(existing_forms) do
if formobj.form:find(ALTVAR) then
formobj.footnotes = iut.combine_footnotes(formobj.footnotes, {"[less recommended]"})
iut.insert_form(base.forms, slot, formobj)
end
end
end
end
end
end
local function conjugate_verb(base)
for _, vowel_alt in ipairs(base.vowel_alt_stems) do
construct_stems(base, vowel_alt)
add_present_indic(base)
add_present_subj(base)
end
add_finite_non_present(base)
add_non_finite_forms(base)
-- do non-reflexive non-imperative slot overrides
process_slot_overrides(base, function(slot)
return not slot:find("^imp_") and not slot:find("^neg_imp_")
end)
-- This should happen after process_slot_overrides() in case a derived slot is based on an override
-- (as with the imp_3s of [[dar]], [[estar]]).
copy_forms_to_imperatives(base)
-- do non-reflexive positive imperative slot overrides
process_slot_overrides(base, function(slot)
return slot:find("^imp_")
end)
-- We need to add joined reflexives, then joined and non-joined clitics, then non-joined reflexives, so we get
-- [[arrepende-te]] but [[nom]] [[te]] [[arrependas]].
if base.refl then
add_reflexive_or_fixed_clitic_to_forms(base, "do reflexive", "do joined")
process_slot_overrides(base, nil, "do reflexive") -- do reflexive-only slot overrides
add_reflexive_or_fixed_clitic_to_forms(base, "do reflexive", false)
end
-- This should happen after add_reflexive_or_fixed_clitic_to_forms() so negative imperatives get the reflexive pronoun
-- and clitic in them.
generate_negative_imperatives(base)
-- do non-reflexive negative imperative slot overrides
-- FIXME: What about reflexive negative imperatives?
process_slot_overrides(base, function(slot)
return slot:find("^neg_imp_")
end)
-- This should happen before add_missing_links_to_forms() so that the comparison `form == base.lemma`
-- in handle_infinitive_linked() works correctly and compares unlinked forms to unlinked forms.
handle_infinitive_linked(base)
process_addnote_specs(base)
if not base.alternant_multiword_spec.args.noautolinkverb then
add_missing_links_to_forms(base)
end
remove_mesoclitic_insertion_points(base)
process_altvar_forms(base)
end
local function parse_indicator_spec(angle_bracket_spec)
-- Store the original angle bracket spec so we can reconstruct the overall conj spec with the lemma(s) in them.
local base = {
angle_bracket_spec = angle_bracket_spec,
user_basic_overrides = {},
user_stems = {},
addnote_specs = {},
}
local function parse_err(msg)
error(msg .. ": " .. angle_bracket_spec)
end
local function fetch_footnotes(separated_group)
local footnotes
for j = 2, #separated_group - 1, 2 do
if separated_group[j + 1] ~= "" then
parse_err("Extraneous text after bracketed footnotes: '" .. table.concat(separated_group) .. "'")
end
if not footnotes then
footnotes = {}
end
table.insert(footnotes, separated_group[j])
end
return footnotes
end
local inside = angle_bracket_spec:match("^<(.*)>$")
assert(inside)
if inside == "" then
return base
end
local segments = put.parse_balanced_segment_run(inside, "[", "]")
local dot_separated_groups = put.split_alternating_runs(segments, "%.")
for i, dot_separated_group in ipairs(dot_separated_groups) do
local first_element = dot_separated_group[1]
if first_element == "addnote" then
local spec_and_footnotes = fetch_footnotes(dot_separated_group)
if #spec_and_footnotes < 2 then
parse_err("Spec with 'addnote' should be of the form 'addnote[SLOTSPEC][FOOTNOTE][FOOTNOTE][...]'")
end
local slot_spec = table.remove(spec_and_footnotes, 1)
local slot_spec_inside = rmatch(slot_spec, "^%[(.*)%]$")
if not slot_spec_inside then
parse_err("Internal error: slot_spec " .. slot_spec .. " should be surrounded with brackets")
end
local slot_specs = rsplit(slot_spec_inside, ",")
-- FIXME: Here, [[Module:it-verb]] called strip_spaces(). Generally we don't do this. Should we?
table.insert(base.addnote_specs, {slot_specs = slot_specs, footnotes = spec_and_footnotes})
elseif indicator_flags[first_element] then
if #dot_separated_group > 1 then
parse_err("No footnotes allowed with '" .. first_element .. "' spec")
end
if base[first_element] then
parse_err("Spec '" .. first_element .. "' specified twice")
end
base[first_element] = true
elseif rfind(first_element, ":") then
local colon_separated_groups = put.split_alternating_runs(dot_separated_group, "%s*:%s*")
local first_element = colon_separated_groups[1][1]
if #colon_separated_groups[1] > 1 then
parse_err("Can't attach footnotes directly to '" .. first_element .. "' spec; attach them to the " ..
"colon-separated values following the initial colon")
end
if overridable_stems[first_element] then
if base.user_stems[first_element] then
parse_err("Overridable stem '" .. first_element .. "' specified twice")
end
table.remove(colon_separated_groups, 1)
base.user_stems[first_element] = overridable_stems[first_element](colon_separated_groups,
{prefix = first_element, base = base, parse_err = parse_err, fetch_footnotes = fetch_footnotes})
else -- assume a basic override; we validate further later when the possible slots are available
if base.user_basic_overrides[first_element] then
parse_err("Basic override '" .. first_element .. "' specified twice")
end
table.remove(colon_separated_groups, 1)
base.user_basic_overrides[first_element] = allow_multiple_values(colon_separated_groups,
{prefix = first_element, base = base, parse_err = parse_err, fetch_footnotes = fetch_footnotes})
end
else
local comma_separated_groups = put.split_alternating_runs(dot_separated_group, "%s*,%s*")
for j = 1, #comma_separated_groups do
local alt = comma_separated_groups[j][1]
if not vowel_alternants[alt] then
if #comma_separated_groups == 1 then
parse_err("Unrecognized spec or vowel alternant '" .. alt .. "'")
else
parse_err("Unrecognized vowel alternant '" .. alt .. "'")
end
end
if base.vowel_alt then
for _, existing_alt in ipairs(base.vowel_alt) do
if existing_alt.form == alt then
parse_err("Vowel alternant '" .. alt .. "' specified twice")
end
end
else
base.vowel_alt = {}
end
table.insert(base.vowel_alt, {form = alt, footnotes = fetch_footnotes(comma_separated_groups[j])})
end
end
end
return base
end
-- Normalize all lemmas, substituting the pagename for blank lemmas and adding links to multiword lemmas.
local function normalize_all_lemmas(alternant_multiword_spec, head)
-- (1) Add links to all before and after text. Remember the original text so we can reconstruct the verb spec later.
if not alternant_multiword_spec.args.noautolinktext then
iut.add_links_to_before_and_after_text(alternant_multiword_spec, "remember original")
end
-- (2) Remove any links from the lemma, but remember the original form
-- so we can use it below in the 'lemma_linked' form.
iut.map_word_specs(alternant_multiword_spec, function(base)
if base.lemma == "" then
base.lemma = head
end
base.user_specified_lemma = base.lemma
base.lemma = m_links.remove_links(base.lemma)
local refl_verb = base.lemma
local verb, refl = rmatch(refl_verb, "^(.-)%-(se)$")
if not verb then
verb, refl = refl_verb, nil
end
base.user_specified_verb = verb
base.refl = refl
base.verb = base.user_specified_verb
local linked_lemma
if alternant_multiword_spec.args.noautolinkverb or base.user_specified_lemma:find("%[%[") then
linked_lemma = base.user_specified_lemma
elseif base.refl then
-- Reconstruct the linked lemma with separate links around base verb and reflexive pronoun.
linked_lemma = base.user_specified_verb == base.verb and "[[" .. base.user_specified_verb .. "]]" or
"[[" .. base.verb .. "|" .. base.user_specified_verb .. "]]"
linked_lemma = linked_lemma .. (refl and "-[[" .. refl .. "]]" or "")
else
-- Add links to the lemma so the user doesn't specifically need to, since we preserve
-- links in multiword lemmas and include links in non-lemma forms rather than allowing
-- the entire form to be a link.
linked_lemma = iut.add_links(base.user_specified_lemma)
end
base.linked_lemma = linked_lemma
end)
end
local function detect_indicator_spec(base)
if (base.only3s and 1 or 0) + (base.only3sp and 1 or 0) + (base.only3p and 1 or 0) > 1 then
error("Only one of 'only3s', 'only3sp' and 'only3p' can be specified")
end
base.forms = {}
base.stems = {}
base.basic_overrides = {}
base.basic_reflexive_only_overrides = {}
if not base.no_built_in then
for _, built_in_conj in ipairs(built_in_conjugations) do
if type(built_in_conj.match) == "function" then
base.prefix, base.non_prefixed_verb = built_in_conj.match(base.verb)
elseif built_in_conj.match:find("^%^") and rsub(built_in_conj.match, "^%^", "") == base.verb then
-- begins with ^, for exact match, and matches
base.prefix, base.non_prefixed_verb = "", base.verb
else
base.prefix, base.non_prefixed_verb = rmatch(base.verb, "^(.*)(" .. built_in_conj.match .. ")$")
end
if base.prefix then
-- we found a built-in verb
for stem, forms in pairs(built_in_conj.forms) do
if type(forms) == "function" then
forms = forms(base, base.prefix)
end
if stem:find("^refl_") then
stem = stem:gsub("^refl_", "")
if not base.alternant_multiword_spec.verb_slots_basic_map[stem] then
error("Internal error: setting for 'refl_" .. stem .. "' does not refer to a basic verb slot")
end
base.basic_reflexive_only_overrides[stem] = forms
elseif base.alternant_multiword_spec.verb_slots_basic_map[stem] then
-- an individual form override of a basic form
base.basic_overrides[stem] = forms
else
base.stems[stem] = forms
end
end
break
end
end
end
-- Override built-in-verb stems and overrides with user-specified ones.
for stem, values in pairs(base.user_stems) do
base.stems[stem] = values
end
for override, values in pairs(base.user_basic_overrides) do
if not base.alternant_multiword_spec.verb_slots_basic_map[override] then
error("Unrecognized override '" .. override .. "': " .. base.angle_bracket_spec)
end
base.basic_overrides[override] = values
end
base.prefix = base.prefix or ""
base.non_prefixed_verb = base.non_prefixed_verb or base.verb
local inf_stem, suffix = rmatch(base.non_prefixed_verb, "^(.*)([aeioô]r)$")
if not inf_stem then
error("Unrecognized infinitive: " .. base.verb)
end
base.inf_stem = inf_stem
suffix = suffix == "ôr" and "or" or suffix
base.conj = suffix
base.conj_vowel = suffix == "ar" and "á" or suffix == "ir" and "í" or "ê"
base.frontback = suffix == "ar" and "back" or "front"
if base.stems.vowel_alt then -- built-in verb with specified vowel alternation
if base.vowel_alt then
error(base.verb .. " is a recognized built-in verb, and should not have vowel alternations specified with it")
end
base.vowel_alt = iut.convert_to_general_list_form(base.stems.vowel_alt)
end
-- Propagate built-in-verb indicator flags to `base` and combine with user-specified flags.
for indicator_flag, _ in pairs(indicator_flags) do
base[indicator_flag] = base[indicator_flag] or base.stems[indicator_flag]
end
-- Convert vowel alternation indicators into stems.
local vowel_alt = base.vowel_alt or {{form = "+"}}
base.vowel_alt_stems = apply_vowel_alternations(base.inf_stem, vowel_alt)
for _, vowel_alt_stems in ipairs(base.vowel_alt_stems) do
if vowel_alt_stems.err then
error("To use '" .. vowel_alt_stems.altobj.form .. "', present stem '" .. base.prefix .. base.inf_stem .. "' " ..
vowel_alt_stems.err)
end
end
end
local function detect_all_indicator_specs(alternant_multiword_spec)
-- Propagate some settings up; some are used internally, others by [[Module:gl-headword]].
iut.map_word_specs(alternant_multiword_spec, function(base)
-- Internal indicator flags. Do these before calling detect_indicator_spec() because add_slots() uses them.
for _, prop in ipairs { "refl", "clitic" } do
if base[prop] then
alternant_multiword_spec[prop] = true
end
end
base.alternant_multiword_spec = alternant_multiword_spec
end)
add_slots(alternant_multiword_spec)
alternant_multiword_spec.vowel_alt = {}
iut.map_word_specs(alternant_multiword_spec, function(base)
detect_indicator_spec(base)
-- User-specified indicator flags. Do these after calling detect_indicator_spec() because the latter may set these
-- indicators for built-in verbs.
for prop, _ in pairs(indicator_flags) do
if base[prop] then
alternant_multiword_spec[prop] = true
end
end
-- Vowel alternants. Do these after calling detect_indicator_spec() because the latter sets base.vowel_alt for
-- built-in verbs.
if base.vowel_alt then
for _, altobj in ipairs(base.vowel_alt) do
m_table.insertIfNot(alternant_multiword_spec.vowel_alt, altobj.form)
end
end
end)
end
local function add_categories_and_annotation(alternant_multiword_spec, base, multiword_lemma)
local function insert_ann(anntype, value)
m_table.insertIfNot(alternant_multiword_spec.annotation[anntype], value)
end
local function insert_cat(cat, also_when_multiword)
-- Don't place multiword terms in categories like 'Galician verbs ending in -ar' to avoid spamming the
-- categories with such terms.
if also_when_multiword or not multiword_lemma then
m_table.insertIfNot(alternant_multiword_spec.categories, "Galician " .. cat)
end
end
if check_for_red_links and alternant_multiword_spec.source_template == "gl-reinteg-conj" and multiword_lemma then
for _, slot_and_accel in ipairs(alternant_multiword_spec.all_verb_slots) do
local slot = slot_and_accel[1]
local forms = base.forms[slot]
local must_break = false
if forms then
for _, form in ipairs(forms) do
if not form.form:find("%[%[") then
local title = mw.title.new(form.form)
if title and not title.exists then
insert_cat("verbs with red links in their inflection tables")
must_break = true
break
end
end
end
end
if must_break then
break
end
end
end
if(base.conj == "or") then
insert_cat("verbs ending in -er")
else
insert_cat("verbs ending in -" .. base.conj)
end
if base.irreg then
insert_ann("irreg", "irregular")
insert_cat("irregular verbs")
else
insert_ann("irreg", "regular")
end
if base.only3s then
insert_ann("defective", "impersonal")
insert_cat("impersonal verbs")
elseif base.only3sp then
insert_ann("defective", "third-person only")
insert_cat("third-person-only verbs")
elseif base.only3p then
insert_ann("defective", "third-person plural only")
insert_cat("third-person-plural-only verbs")
elseif base.no_pres_stressed or base.no_pres1_and_sub then
insert_ann("defective", "defective")
insert_cat("defective verbs")
else
insert_ann("defective", "regular")
end
if base.stems.short_pp then
insert_ann("short_pp", "irregular short past participle")
insert_cat("verbs with irregular short past participle")
else
insert_ann("short_pp", "regular")
end
if base.clitic then
insert_cat("verbs with lexical clitics")
end
if base.refl then
insert_cat("reflexive verbs")
end
if base.e_ei_cat then
insert_ann("vowel_alt", "''e'' may become ''ei'' when stressed")
insert_cat("verbs with e becoming ei when stressed")
elseif not base.vowel_alt then
insert_ann("vowel_alt", "non-alternating")
else
for _, alt in ipairs(base.vowel_alt) do
if alt.form == "+" then
insert_ann("vowel_alt", "non-alternating")
else
insert_ann("vowel_alt", vowel_alternant_to_desc[alt.form])
insert_cat("verbs with " .. vowel_alternant_to_cat[alt.form])
end
end
end
local cons_alt = base.stems.cons_alt
if cons_alt == nil then
if base.conj == "ar" then
if base.inf_stem:find("ç$") then
cons_alt = "c-ç"
elseif base.inf_stem:find("c$") then
cons_alt = "c-qu"
elseif base.inf_stem:find("g$") then
cons_alt = "g-gu"
end
else
if base.no_pres_stressed or base.no_pres1_and_sub then
cons_alt = nil -- no e.g. c-ç alternation in this case
elseif base.inf_stem:find("c$") then
cons_alt = "c-ç"
elseif base.inf_stem:find("qu$") then
cons_alt = "c-qu"
elseif base.inf_stem:find("g$") then
cons_alt = "g-j"
elseif base.inf_stem:find("gu$") then
cons_alt = "g-gu"
end
end
end
if cons_alt then
local desc = cons_alt .. " alternation"
insert_ann("cons_alt", desc)
insert_cat("verbs with " .. desc)
else
insert_ann("cons_alt", "non-alternating")
end
end
-- Compute the categories to add the verb to, as well as the annotation to display in the
-- conjugation title bar. We combine the code to do these functions as both categories and
-- title bar contain similar information.
local function compute_categories_and_annotation(alternant_multiword_spec)
alternant_multiword_spec.categories = {}
local ann = {}
alternant_multiword_spec.annotation = ann
ann.irreg = {}
ann.short_pp = {}
ann.defective = {}
ann.vowel_alt = {}
ann.cons_alt = {}
local multiword_lemma = false
for _, form in ipairs(alternant_multiword_spec.forms.infinitive) do
if form.form:find(" ") then
multiword_lemma = true
break
end
end
iut.map_word_specs(alternant_multiword_spec, function(base)
add_categories_and_annotation(alternant_multiword_spec, base, multiword_lemma)
end)
local ann_parts = {}
local irreg = table.concat(ann.irreg, " or ")
if irreg ~= "" and irreg ~= "regular" then
table.insert(ann_parts, irreg)
end
local short_pp = table.concat(ann.short_pp, " or ")
if short_pp ~= "" and short_pp ~= "regular" then
table.insert(ann_parts, short_pp)
end
local defective = table.concat(ann.defective, " or ")
if defective ~= "" and defective ~= "regular" then
table.insert(ann_parts, defective)
end
local vowel_alt = table.concat(ann.vowel_alt, " or ")
if vowel_alt ~= "" and vowel_alt ~= "non-alternating" then
table.insert(ann_parts, vowel_alt)
end
local cons_alt = table.concat(ann.cons_alt, " or ")
if cons_alt ~= "" and cons_alt ~= "non-alternating" then
table.insert(ann_parts, cons_alt)
end
alternant_multiword_spec.annotation = table.concat(ann_parts, "; ")
end
local function show_forms(alternant_multiword_spec)
local lemmas = alternant_multiword_spec.forms.infinitive
alternant_multiword_spec.lemmas = lemmas -- save for later use in make_table()
if alternant_multiword_spec.forms.short_pp_ms then
alternant_multiword_spec.has_short_pp = true
end
local reconstructed_verb_spec = iut.reconstruct_original_spec(alternant_multiword_spec)
local function transform_accel_obj(slot, formobj, accel_obj)
-- No accelerators for negative imperatives, which are always multiword and derived directly from the
-- present subjunctive.
if slot:find("^neg_imp") then
return nil
end
if accel_obj then
if slot:find("^pp_") then
accel_obj.form = slot
elseif slot == "gerund" then
accel_obj.form = "reinteg-gerund-" .. reconstructed_verb_spec
else
accel_obj.form = "reinteg-verb-form-" .. reconstructed_verb_spec
end
end
return accel_obj
end
-- Italicize less-recommended forms.
local function generate_link(data)
local formval_for_link = data.form.formval_for_link
if formval_for_link:find(ALTVAR) then
formval_for_link = formval_for_link:gsub(ALTVAR, "")
return m_links.full_link({lang = lang, term = formval_for_link, tr = "-", accel = data.form.accel_obj},
"term") .. iut.get_footnote_text(data.form.footnotes, data.footnote_obj)
end
end
local props = {
lang = lang,
lemmas = lemmas,
transform_accel_obj = transform_accel_obj,
canonicalize = function(form) return export.remove_variant_codes(form, "keep altvar") end,
generate_link = generate_link,
slot_list = alternant_multiword_spec.verb_slots_basic,
}
iut.show_forms(alternant_multiword_spec.forms, props)
alternant_multiword_spec.footnote_basic = alternant_multiword_spec.forms.footnote
end
local notes_template = [=[
<div class="roa-footnote-outer-div" style="width:100%;">
<div class="roa-footnote-inner-div">
{footnote}
</div></div>
]=]
local basic_table = [=[
{description}<div class="NavFrame">
<div class="NavHead" align=center> การผันรูปบูรณาการใหม่ของ {title} (See [[Appendix:Reintegrationism]])</div>
<div class="NavContent" align="left">
{\op}| class="roa-inflection-table" data-toggle-category="inflection"
|-
! class="roa-person-number-header" rowspan="2" |
! class="roa-person-number-header" colspan="3" | เอกพจน์
! class="roa-person-number-header" colspan="3" | พหูพจน์
|-
! class="roa-person-number-header" style="width:12.5%" | บุรุษที่หนึ่ง<br />(<<eu>>)
! class="roa-person-number-header" style="width:12.5%" | บุรุษที่สอง<br />(<<ti>> / <<tu>>)
! class="roa-person-number-header" style="width:12.5%" | บุรุษที่สาม<br />(<<ele>> / <<ela>> / <<você>>)
! class="roa-person-number-header" style="width:12.5%" | บุรุษที่หนึ่ง<br />(<<nós>>)
! class="roa-person-number-header" style="width:12.5%" | บุรุษที่สอง<br />(<<vós>>)
! class="roa-person-number-header" style="width:12.5%" | บุรุษที่สาม<br />(<<eles>> / <<elas>> / <<vocês>>)
|-
! class="roa-nonfinite-header" colspan="7" | ''<span title="infinitivo">รูปกริยากลาง</span>''
|-
! class="roa-nonfinite-header" | '''<span title="infinitivo impessoal">คำอบุรุษกริยา</span>'''
| colspan="6" | {infinitive}
|-
! class="roa-nonfinite-header" | '''<span title="infinitivo flexionado">คำบุรุษกริยา</span>'''
| {pers_inf_1s}
| {pers_inf_2s}
| {pers_inf_3s}
| {pers_inf_1p}
| {pers_inf_2p}
| {pers_inf_3p}
|-
! class="roa-nonfinite-header" colspan="7" | ''<span title="gerúndio">รูปกริยาเป็นนาม</span>''
|-
| class="roa-nonfinite-header" |
| colspan="6" | {gerund}
|-{pp_clause}
! style="border: 1px solid #999999; background:#d0dff4" colspan="7" | ''<span title="indicativo">มาลาบอกเล่า</span>''
|-
! class="roa-indicative-left-rail" | <span title="presente">ปัจจุบันกาล</span>
| {pres_1s}
| {pres_2s}
| {pres_3s}
| {pres_1p}
| {pres_2p}
| {pres_3p}
|-
! class="roa-indicative-left-rail" | <span title="pretérito imperfeito">ไม่สมบูรณ์</span>
| {impf_1s}
| {impf_2s}
| {impf_3s}
| {impf_1p}
| {impf_2p}
| {impf_3p}
|-
! class="roa-indicative-left-rail" | <span title="pretérito perfeito">อดีตกาลสิ้นสุด (สมบูรณ์)</span>
| {pret_1s}
| {pret_2s}
| {pret_3s}
| {pret_1p}
| {pret_2p}
| {pret_3p}
|-
! class="roa-indicative-left-rail" | <span title="pretérito mais-que-perfeito simples">อภิสมบูรณ์</span>
| {plup_1s}
| {plup_2s}
| {plup_3s}
| {plup_1p}
| {plup_2p}
| {plup_3p}
|-
! class="roa-indicative-left-rail" | <span title="futuro do presente">อนาคตกาล</span>
| {fut_1s}
| {fut_2s}
| {fut_3s}
| {fut_1p}
| {fut_2p}
| {fut_3p}
|-
! class="roa-indicative-left-rail" | <span title="condicional">มาลาเงื่อนไข</span>
| {cond_1s}
| {cond_2s}
| {cond_3s}
| {cond_1p}
| {cond_2p}
| {cond_3p}
|-
! class="roa-subjunctive-left-rail" colspan="7" | ''<span title="conjuntivo">มาลาสมมุติ</span>''
|-
! class="roa-subjunctive-left-rail" | <span title=" presente do conjuntivo">ปัจจุบันกาล</span>
| {pres_sub_1s}
| {pres_sub_2s}
| {pres_sub_3s}
| {pres_sub_1p}
| {pres_sub_2p}
| {pres_sub_3p}
|-
! class="roa-subjunctive-left-rail" | <span title="pretérito imperfeito do conjuntivo">ไม่สมบูรณ์</span>
| {impf_sub_1s}
| {impf_sub_2s}
| {impf_sub_3s}
| {impf_sub_1p}
| {impf_sub_2p}
| {impf_sub_3p}
|-
! class="roa-subjunctive-left-rail" | <span title="futuro do conjuntivo">อนาคตกาล</span>
| {fut_sub_1s}
| {fut_sub_2s}
| {fut_sub_3s}
| {fut_sub_1p}
| {fut_sub_2p}
| {fut_sub_3p}
|-
! class="roa-imperative-left-rail" colspan="7" | ''<span title="imperativo">มาลาสั่ง</span>''
|-
! class="roa-imperative-left-rail" | <span title="imperativo afirmativo">เชิงยืนยัน</span>
| rowspan="2" |
| {imp_2s}
| {imp_3s}
| {imp_1p}
| {imp_2p}
| {imp_3p}
|-
! class="roa-imperative-left-rail" | <span title="imperativo negativo">เชิงปฏิเสธ</span> (<<nom>>)
| {neg_imp_2s}
| {neg_imp_3s}
| {neg_imp_1p}
| {neg_imp_2p}
| {neg_imp_3p}
|{\cl}{notes_clause}</div></div>
]=]
local double_pp_template = [=[
! class="roa-nonfinite-header" colspan="7" | ''<span title="particípio irregular">รูปกริยาขยายอดีตกาลสั้น</span>''
|-
! class="roa-nonfinite-header" | เพศชาย
| colspan="3" | {short_pp_ms}
| colspan="3" | {short_pp_mp}
|-
! class="roa-nonfinite-header" | เพศหญิง
| colspan="3" | {short_pp_fs}
| colspan="3" | {short_pp_fp}
|-
! class="roa-nonfinite-header" colspan="7" | ''<span title="particípio regular">รูปกริยาขยายอดีตกาลยาว</span>''
|-
! class="roa-nonfinite-header" | เพศชาย
| colspan="3" | {pp_ms}
| colspan="3" | {pp_mp}
|-
! class="roa-nonfinite-header" | เพศหญิง
| colspan="3" | {pp_fs}
| colspan="3" | {pp_fp}
|-]=]
local single_pp_template = [=[
! class="roa-nonfinite-header" colspan="7" | ''<span title="particípio passado">รูปกริยาขยายอดีตกาล</span>''
|-
! class="roa-nonfinite-header" | เพศชาย
| colspan="3" | {pp_ms}
| colspan="3" | {pp_mp}
|-
! class="roa-nonfinite-header" | เพศหญิง
| colspan="3" | {pp_fs}
| colspan="3" | {pp_fp}
|-]=]
local function make_table(alternant_multiword_spec)
local forms = alternant_multiword_spec.forms
forms.title = link_term(alternant_multiword_spec.lemmas[1].form)
if alternant_multiword_spec.annotation ~= "" then
forms.title = forms.title .. " (" .. alternant_multiword_spec.annotation .. ")"
end
forms.description = ""
-- Format the table.
forms.footnote = alternant_multiword_spec.footnote_basic
forms.notes_clause = forms.footnote ~= "" and m_string_utilities.format(notes_template, forms) or ""
-- has_short_pp is computed in show_forms().
local pp_template = alternant_multiword_spec.has_short_pp and double_pp_template or single_pp_template
forms.pp_clause = m_string_utilities.format(pp_template, forms)
local table_with_pronouns = rsub(basic_table, "<<(.-)>>", link_term)
return require("Module:TemplateStyles")("Module:roa-verb/style.css") .. m_string_utilities.format(table_with_pronouns, forms)
end
-- Externally callable function to parse and conjugate a verb given user-specified arguments.
-- Return value is WORD_SPEC, an object where the conjugated forms are in `WORD_SPEC.forms`
-- for each slot. If there are no values for a slot, the slot key will be missing. The value
-- for a given slot is a list of objects {form=FORM, footnotes=FOOTNOTES}.
function export.do_generate_forms(args, source_template, headword_head)
local PAGENAME = mw.loadData("Module:headword/data").pagename
local function in_template_space()
return mw.title.getCurrentTitle().nsText == "แม่แบบ"
end
-- Determine the verb spec we're being asked to generate the conjugation of. This may be taken from the
-- current page title or the value of |pagename=; but not when called from {{gl-reinteg-verb form of}}, where the
-- page title is a non-lemma form. Note that the verb spec may omit the infinitive; e.g. it may be "<i-e>".
-- For this reason, we use the value of `pagename` computed here down below, when calling normalize_all_lemmas().
local pagename = source_template ~= "gl-reinteg-verb form of" and args.pagename or PAGENAME
local head = headword_head or pagename
local arg1 = args[1]
if not arg1 then
if (pagename == "gl-reinteg-conj" or pagename == "gl-reinteg-verb") and in_template_space() then
arg1 = "traguer"
elseif pagename == "gl-reinteg-verb form of" and in_template_space() then
arg1 = "amar"
else
arg1 = "<>"
end
end
-- When called from {{gl-reinteg-verb form of}}, determine the non-lemma form whose inflections we're being asked to
-- determine. This normally comes from the page title or the value of |pagename=.
local verb_form_of_form
if source_template == "gl-reinteg-verb form of" then
verb_form_of_form = args.pagename
if not verb_form_of_form then
if PAGENAME == "gl-reinteg-verb form of" and in_template_space() then
verb_form_of_form = "ame"
else
verb_form_of_form = PAGENAME
end
end
end
local incorporated_headword_head_into_lemma = false
if arg1:find("^<.*>$") then -- missing lemma
if head:find(" ") then
-- If multiword lemma, try to add arg spec after the first word.
-- Try to preserve the brackets in the part after the verb, but don't do it
-- if there aren't the same number of left and right brackets in the verb
-- (which means the verb was linked as part of a larger expression).
local refl_clitic_verb, post = rmatch(head, "^(.-)( .*)$")
local left_brackets = rsub(refl_clitic_verb, "[^%[]", "")
local right_brackets = rsub(refl_clitic_verb, "[^%]]", "")
if #left_brackets == #right_brackets then
arg1 = iut.remove_redundant_links(refl_clitic_verb) .. arg1 .. post
incorporated_headword_head_into_lemma = true
else
-- Try again using the form without links.
local linkless_head = m_links.remove_links(head)
if linkless_head:find(" ") then
refl_clitic_verb, post = rmatch(linkless_head, "^(.-)( .*)$")
arg1 = refl_clitic_verb .. arg1 .. post
else
error("Unable to incorporate <...> spec into explicit head due to a multiword linked verb or " ..
"unbalanced brackets; please include <> explicitly: " .. arg1)
end
end
else
-- Will be incorporated through `head` below in the call to normalize_all_lemmas().
incorporated_headword_head_into_lemma = true
end
end
local function split_bracketed_runs_into_words(bracketed_runs)
return put.split_alternating_runs(bracketed_runs, " ", "preserve splitchar")
end
local parse_props = {
parse_indicator_spec = parse_indicator_spec,
-- Split words only on spaces, not on hyphens, because that messes up reflexive verb parsing.
split_bracketed_runs_into_words = split_bracketed_runs_into_words,
allow_default_indicator = true,
allow_blank_lemma = true,
}
local alternant_multiword_spec = iut.parse_inflected_text(arg1, parse_props)
alternant_multiword_spec.pos = pos or "verbs"
alternant_multiword_spec.args = args
alternant_multiword_spec.source_template = source_template
alternant_multiword_spec.verb_form_of_form = verb_form_of_form
alternant_multiword_spec.incorporated_headword_head_into_lemma = incorporated_headword_head_into_lemma
normalize_all_lemmas(alternant_multiword_spec, head)
detect_all_indicator_specs(alternant_multiword_spec)
local inflect_props = {
slot_list = alternant_multiword_spec.all_verb_slots,
inflect_word_spec = conjugate_verb,
get_variants = function(form) return rsub(form, not_var_code_c, "") end,
-- We add links around the generated verbal forms rather than allow the entire multiword
-- expression to be a link, so ensure that user-specified links get included as well.
include_user_specified_links = true,
}
iut.inflect_multiword_or_alternant_multiword_spec(alternant_multiword_spec, inflect_props)
-- Remove redundant brackets around entire forms.
for slot, forms in pairs(alternant_multiword_spec.forms) do
for _, form in ipairs(forms) do
form.form = iut.remove_redundant_links(form.form)
end
end
compute_categories_and_annotation(alternant_multiword_spec)
if args.json and source_template == "gl-reinteg-conj" then
-- Remove variant codes to avoid causing problems with bots.
for slot, forms in pairs(alternant_multiword_spec.forms) do
for _, form in ipairs(forms) do
form.form = export.remove_variant_codes(form.form)
end
end
return require("Module:JSON").toJSON(alternant_multiword_spec.forms)
end
return alternant_multiword_spec
end
-- Entry point for {{gl-reinteg-conj}}. Template-callable function to parse and conjugate a verb given
-- user-specified arguments and generate a displayable table of the conjugated forms.
function export.show(frame)
local parent_args = frame:getParent().args
local params = {
[1] = {},
["noautolinktext"] = {type = "boolean"},
["noautolinkverb"] = {type = "boolean"},
["pagename"] = {}, -- for testing/documentation pages
["json"] = {type = "boolean"}, -- for bot use
}
local args = require("Module:parameters").process(parent_args, params)
local alternant_multiword_spec = export.do_generate_forms(parent_args, "gl-reinteg-conj")
if type(alternant_multiword_spec) == "string" then
-- JSON return value
return alternant_multiword_spec
end
show_forms(alternant_multiword_spec)
return make_table(alternant_multiword_spec) ..
require("Module:utilities").format_categories(alternant_multiword_spec.categories, lang, nil, nil, force_cat)
end
return export
9114rd8iwk3ewqxvfo62wac09stl5eq
5729419
5729315
2026-07-20T09:16:20Z
Octahedron80
267
5729419
Scribunto
text/plain
--[=[
This module implements {{gl-reinteg-conj}} and provides the underlying conjugation functions for {{gl-reinteg-verb}},
as well as for {{gl-verb}} when invoked with |reinteg=1. The actual formatting of both {{gl-reinteg-verb}} and
{{gl-verb}} happens in [[Module:gl-headword]]. This module uses the [[Appendix:Reintegrationism|reintegrationist]] norm
for Galician spelling. See also [[Module:gl-verb]], which implements the standard norm.
Authorship: Ben Wing <benwing2>, MedK <medk1>
]=]
local export = {}
--[=[
TERMINOLOGY:
-- "slot" = A particular combination of tense/mood/person/number/etc.
Example slot names for verbs are "pres_1s" (present indicative first-person singular), "pres_sub_2s" (present
subjunctive second-person singular) "impf_sub_3p" (imperfect subjunctive third-person plural).
Each slot is filled with zero or more forms.
-- "form" = The conjugated Galician form representing the value of a given slot.
-- "lemma" = The dictionary form of a given Galician term. For Galician, always the infinitive.
]=]
--[=[
FIXME:
--]=]
local lang = require("Module:languages").getByCode("gl")
local m_string_utilities = require("Module:string utilities")
local m_links = require("Module:links")
local m_table = require("Module:table")
local iut = require("Module:inflection utilities")
local put = require("Module:parse utilities")
local com = require("Module:gl-reinteg-common")
local force_cat = false -- set to true for debugging
local check_for_red_links = false -- set to false for debugging
local rfind = mw.ustring.find
local rmatch = mw.ustring.match
local rsplit = mw.text.split
local rsub = com.rsub
local u = mw.ustring.char
local unpack = unpack or table.unpack -- Lua 5.2 compatibility
local function link_term(term)
return m_links.full_link({ lang = lang, term = term }, "term")
end
local V = com.V -- vowel regex class
local AV = com.AV -- accented vowel regex class
local C = com.C -- consonant regex class
local AC = u(0x0301) -- acute = ́
local TEMPC1 = u(0xFFF1) -- temporary character used for consonant substitutions
local TEMP_MESOCLITIC_INSERTION_POINT = u(0xFFF2) -- temporary character used to mark the mesoclitic insertion point
-- Variant codes and the like.
-- NOTE: These codes should be *PREFIXED* onto stems and *SUFFIXED* onto endings. That way they won't interfere in the
-- operation of combine_stem_ending().
--
-- GL_TYPE = "Galician-type", PT_TYPE = "Portuguese-type". GL_TYPE stems cannot combine with PT_TYPE endings and
-- vice-versa. GL_ONLY_TYPE = "Galician-only type"; GL_ONLY_TYPE stems can only combine with endings specifically
-- marked as GL_TYPE.
local GL_TYPE = u(0xFFF3)
local GL_ONLY_TYPE = u(0xFFF4)
local PT_TYPE = u(0xFFF5)
-- ALTVAR = Less-recommended variants listed at the bottom of the Estraviz conjugation tables rather than in the main
-- table. We list these in the main table but with a footnote indicating they are less-recommended alternatives, and
-- italicize them to visually set them apart.
local ALTVAR = u(0xFFF6)
local GL_ALTVAR = GL_TYPE .. ALTVAR
local GL_ONLY_ALTVAR = GL_ONLY_TYPE .. ALTVAR
local var_codes_no_altvar = GL_TYPE .. GL_ONLY_TYPE .. PT_TYPE
local all_var_codes = var_codes_no_altvar .. ALTVAR
local var_code_c = "[" .. all_var_codes .. "]"
local var_code_no_altvar_c = "[" .. var_codes_no_altvar .. "]"
local not_var_code_c = "[^" .. all_var_codes .. "]"
-- Export variant codes for use in [[Module:pt-gl-inflections]].
export.GL_TYPE = GL_TYPE
export.GL_ONLY_TYPE = GL_ONLY_TYPE
export.PT_TYPE = PT_TYPE
export.ALTVAR = ALTVAR
local short_pp_footnote = "[usually used with auxiliary verbs " .. link_term("ser") .. " and " .. link_term("estar") .. "]"
local long_pp_footnote = "[usually used with auxiliary verbs " .. link_term("haver") .. " and " .. link_term("ter") .. "]"
--[=[
Vowel alternations:
<i-e>: 'i' in pres1s and the whole present subjunctive; 'e' elsewhere when stressed. Generally 'e' otherwise when
unstressed. E.g. [[sentir]], [[conseguir]] (the latter additionally with 'gu-g' alternation).
<u-o>: 'u' in pres1s and the whole present subjunctive; 'o' elsewhere when stressed. Either 'o' or 'u' otherwise when
unstressed. E.g. [[dormir]], [[subir]].
<i>: 'i' whenever stressed (in the present singular and third plural) and throughout the whole present subjunctive.
Otherwise 'e'. E.g. [[progredir]], [[premir]].
<u>: 'u' whenever stressed (in the present singular and third plural) and throughout the whole present subjunctive.
Otherwise 'o'. E.g. [[polir]], [[extorquir]] (the latter also <u-o>).
<í>: The last 'i' of the stem (excluding stem-final 'i') becomes 'í' when stressed. E.g.:
* [[proibir]] ('proíbo, proíbe(s), proíbem, proíba(s), proíbam')
* [[faiscar]] ('faísco, faísca(s), faíscam, faísque(s), faísquem' also with 'c-qu' alternation)
* [[homogeneizar]] ('homogeneízo', etc.)
* [[mobiliar]] ('mobílio', etc.; note here the final -i is ignored when determining which vowel to stress)
* [[tuitar]] ('tuíto', etc.)
<ú>: The last 'u' of the stem (excluding stem-final 'u') becomes 'ú' when stressed. E.g.:
* [[reunir]] ('reúno, reúne(s), reúnem, reúna(s), reúnam')
* [[esmiuçar]] ('esmiúço, esmiúça(s), esmiúça, esmiúce(s), esmiúcem' also with 'ç-c' alternation)
* [[reusar]] ('reúso, reúsa(s), reúsa, reúse(s), reúsem')
* [[saudar]] ('saúdo, saúda(s), saúda, saúde(s), saúdem')
]=]
local vowel_alternants = m_table.listToSet({"i-e", "i", "í", "u-o", "u", "ú", "ei", "+"})
local vowel_alternant_to_desc = {
["i-e"] = "''i-e'' alternation in present singular",
["i"] = "''e'' becomes ''i'' when stressed",
["í"] = "''i'' becomes ''í'' when stressed",
["u-o"] = "''u-o'' alternation in present singular",
["u"] = "''o'' becomes ''u'' when stressed",
["ú"] = "''u'' becomes ''ú'' when stressed",
["ei"] = "''i'' becomes ''ei'' when stressed",
}
local vowel_alternant_to_cat = {
["i-e"] = "i-e alternation in present singular",
["i"] = "e becoming i when stressed",
["í"] = "i becoming í when stressed",
["u-o"] = "u-o alternation in present singular",
["u"] = "o becoming u when stressed",
["ú"] = "u becoming ú when stressed",
["ei"] = "i becoming ei when stressed",
}
local all_persons_numbers = {
["1s"] = "1|s",
["2s"] = "2|s",
["3s"] = "3|s",
["1p"] = "1|p",
["2p"] = "2|p",
["3p"] = "3|p",
}
local person_number_list = {"1s", "2s", "3s", "1p", "2p", "3p"}
local imp_person_number_list = {"2s", "3s", "1p", "2p", "3p"}
local neg_imp_person_number_list = {"2s", "3s", "1p", "2p", "3p"}
person_number_to_reflexive_pronoun = {
["1s"] = "me",
["2s"] = "te",
["3s"] = "se",
["1p"] = "nos",
["2p"] = "vos",
["3p"] = "se",
}
local indicator_flags = m_table.listToSet {
"no_pres_stressed", "no_pres1_and_sub",
"only3s", "only3sp", "only3p",
"pp_inv", "irreg", "no_built_in", "e_ei_cat",
}
-- Remove any variant codes e.g. GL_TYPE, PT_TYPE, ALTVAR. Needs to be called from [[Module:gl-reinteg-headword]] on the
-- output of do_generate_forms(). `keep_altvar` leaves ALTVAR; used in the `canonicalize` function of show_forms()
-- because we then process and remove it in `generate_forms`. FIXME: Use metadata for this once it's supported in
-- [[Module:inflection utilities]].
function export.remove_variant_codes(form, keep_altvar)
return rsub(form, keep_altvar and var_code_no_altvar_c or var_code_c, "")
end
-- Initialize all the slots for which we generate forms.
local function add_slots(alternant_multiword_spec)
-- "Basic" slots: All slots that go into the regular table (not the reflexive form-of table).
alternant_multiword_spec.verb_slots_basic = {
{"infinitive", "inf"},
{"infinitive_linked", "inf"},
{"gerund", "ger"},
{"short_pp_ms", "short|m|s|past|part"},
{"short_pp_fs", "short|f|s|past|part"},
{"short_pp_mp", "short|m|p|past|part"},
{"short_pp_fp", "short|f|p|past|part"},
{"pp_ms", "m|s|past|part"},
{"pp_fs", "f|s|past|part"},
{"pp_mp", "m|p|past|part"},
{"pp_fp", "f|p|past|part"},
}
-- Special slots used to handle non-reflexive parts of reflexive verbs in {{gl-reinteg-verb form of}}. For example,
-- for a reflexive-only verb like [[arrepender-se]], we want to be able to use {{gl-reinteg-verb form of}} on
-- [[arrependa]] (which should mention that it is a part of 'me arrependa', first-person singular present
-- subjunctive, and 'se arrependa', third-person singular present subjunctive) or on [[arrependemos]] (which should
-- mention that it is a part of 'arrependemo-nos', first-person plural present indicative or preterite). Similarly,
-- we want to use {{gl-reinteg-verb form of}} on [[arrependendo]] (which should mention that it is a part of
-- 'se ... arrependendo', syntactic variant of [[arrependendo-se]], which is the gerund of [[arrepender-se]]). To
-- do this, we need to be able to map non-reflexive parts like [[arrependa]], [[arrependemos]], [[arrependendo]],
-- etc. to their reflexive equivalent(s), to the tag(s) of the equivalent(s), and, in the case of forms like
-- [[arrependendo]], [[arrepender]] and imperatives, to the separated syntactic variant of the verb+clitic
-- combination. We do this by creating slots for the non-reflexive part equivalent of each basic reflexive slot,
-- and for the separated syntactic-variant equivalent of each basic reflexive slot that is formed of verb+clitic.
-- We use slots in this way to deal with multiword lemmas. Note that we run into difficulties mapping between
-- reflexive verbs, non-reflexive part equivalents, and separated syntactic variants if a slot contains more than
-- one form. To handle this, if there are the same number of forms in two slots we're trying to match up, we assume
-- the forms match one-to-one; otherwise we don't match up the two slots (which means {{gl-reinteg-verb form of}} won't
-- work in this case, but such a case is extremely rare and not worth worrying about). Alternatives that handle
-- this "properly" are significantly more complicated and require non-trivial modifications to
-- [[Module:inflection utilities]].
local need_special_verb_form_of_slots = alternant_multiword_spec.source_template == "gl-reinteg-verb form of" and
alternant_multiword_spec.refl
if need_special_verb_form_of_slots then
alternant_multiword_spec.verb_slots_reflexive_verb_form_of = {
{"infinitive_non_reflexive", "-"},
{"infinitive_variant", "-"},
{"gerund_non_reflexive", "-"},
{"gerund_variant", "-"},
}
else
alternant_multiword_spec.verb_slots_reflexive_verb_form_of = {}
end
-- Add entries for a slot with person/number variants.
-- `verb_slots` is the table to add to.
-- `slot_prefix` is the prefix of the slot, typically specifying the tense/aspect.
-- `tag_suffix` is a string listing the set of inflection tags to add after the person/number tags.
-- `person_number_list` is a list of the person/number slot suffixes to add to `slot_prefix`.
local function add_personal_slot(verb_slots, slot_prefix, tag_suffix, person_number_list)
for _, persnum in ipairs(person_number_list) do
local persnum_tag = all_persons_numbers[persnum]
local slot = slot_prefix .. "_" .. persnum
local accel = persnum_tag .. "|" .. tag_suffix
table.insert(verb_slots, {slot, accel})
end
end
-- Add a personal slot (i.e. a slot with person/number variants) to `verb_slots_basic`.
local function add_basic_personal_slot(slot_prefix, tag_suffix, person_number_list, no_special_verb_form_of_slot)
add_personal_slot(alternant_multiword_spec.verb_slots_basic, slot_prefix, tag_suffix, person_number_list)
-- Add special slots for handling non-reflexive parts of reflexive verbs in {{gl-reinteg-verb form of}}.
-- See comment above in `need_special_verb_form_of_slots`.
if need_special_verb_form_of_slots and not no_special_verb_form_of_slot then
for _, persnum in ipairs(person_number_list) do
local persnum_tag = all_persons_numbers[persnum]
local basic_slot = slot_prefix .. "_" .. persnum
local accel = persnum_tag .. "|" .. tag_suffix
table.insert(alternant_multiword_spec.verb_slots_reflexive_verb_form_of, {basic_slot .. "_non_reflexive", "-"})
end
end
end
add_basic_personal_slot("pres", "pres|ind", person_number_list)
add_basic_personal_slot("impf", "impf|ind", person_number_list)
add_basic_personal_slot("pret", "pret|ind", person_number_list)
add_basic_personal_slot("plup", "plup|ind", person_number_list)
add_basic_personal_slot("fut", "fut|ind", person_number_list)
add_basic_personal_slot("cond", "cond", person_number_list)
add_basic_personal_slot("pres_sub", "pres|sub", person_number_list)
add_basic_personal_slot("impf_sub", "impf|sub", person_number_list)
add_basic_personal_slot("fut_sub", "fut|sub", person_number_list)
add_basic_personal_slot("imp", "imp", imp_person_number_list)
add_basic_personal_slot("pers_inf", "pers|inf", person_number_list)
-- Don't need special non-reflexive-part slots because the negative imperative is multiword, of which the
-- individual words are 'nom' + subjunctive.
add_basic_personal_slot("neg_imp", "neg|imp", neg_imp_person_number_list, "no special verb form of")
-- Don't need special non-reflexive-part slots because we don't want [[arrependendo]] mapping to [[arrependendo-me]]
-- (only [[arrependendo-se]]) or [[arrepender]] mapping to [[arrepender-me]] (only [[arrepender-se]]).
add_basic_personal_slot("infinitive", "inf", person_number_list, "no special verb form of")
add_basic_personal_slot("gerund", "ger", person_number_list, "no special verb form of")
-- Generate the list of all slots.
alternant_multiword_spec.all_verb_slots = {}
for _, slot_and_accel in ipairs(alternant_multiword_spec.verb_slots_basic) do
table.insert(alternant_multiword_spec.all_verb_slots, slot_and_accel)
end
for _, slot_and_accel in ipairs(alternant_multiword_spec.verb_slots_reflexive_verb_form_of) do
table.insert(alternant_multiword_spec.all_verb_slots, slot_and_accel)
end
alternant_multiword_spec.verb_slots_basic_map = {}
for _, slotaccel in ipairs(alternant_multiword_spec.verb_slots_basic) do
local slot, accel = unpack(slotaccel)
alternant_multiword_spec.verb_slots_basic_map[slot] = accel
end
end
local overridable_stems = {}
local function allow_multiple_values(separated_groups, data)
local retvals = {}
for _, separated_group in ipairs(separated_groups) do
local footnotes = data.fetch_footnotes(separated_group)
local retval = {form = separated_group[1], footnotes = footnotes}
table.insert(retvals, retval)
end
return retvals
end
local function simple_choice(choices)
return function(separated_groups, data)
if #separated_groups > 1 then
data.parse_err("For spec '" .. data.prefix .. ":', only one value currently allowed")
end
if #separated_groups[1] > 1 then
data.parse_err("For spec '" .. data.prefix .. ":', no footnotes currently allowed")
end
local choice = separated_groups[1][1]
if not m_table.contains(choices, choice) then
data.parse_err("For spec '" .. data.prefix .. ":', saw value '" .. choice .. "' but expected one of '" ..
table.concat(choices, ",") .. "'")
end
return choice
end
end
for _, overridable_stem in ipairs {
"pres_unstressed",
"pres_stressed",
"pres1_and_sub",
-- Don't include pres1; use pres_1s if you need to override just that form
"impf",
"full_impf",
{"pret_conj", simple_choice({"irreg", "ar", "er", "ir"}) },
"pret_base",
"pret",
"gl_short_pret",
"pt_pret_1s",
"pt_pret_3s",
"fut",
"cond",
"pres_sub_stressed",
"pres_sub_unstressed",
{"sub_conj", simple_choice({"ar", "er"}) },
"plup",
"impf_sub",
"fut_sub",
"pers_inf",
"pp",
"short_pp",
} do
if type(overridable_stem) == "string" then
overridable_stems[overridable_stem] = allow_multiple_values
else
local stem, validator = unpack(overridable_stem)
overridable_stems[stem] = validator
end
end
-- Useful as the value of the `match` property of a built-in verb. `main_verb_spec` is a Lua pattern that should match
-- the non-prefixed part of a verb, and `prefix_specs` is a list of Lua patterns that should match the prefixed part of
-- a verb. If a prefix spec is preceded by ^, it must match exactly at the beginning of the verb; otherwise, additional
-- prefixes (e.g. re-, des-) may precede. Return the prefix and main verb.
local function match_against_verbs(main_verb_spec, prefix_specs)
return function(verb)
for _, prefix_spec in ipairs(prefix_specs) do
if prefix_spec:find("^%^") then
-- must match exactly
prefix_spec = prefix_spec:gsub("^%^", "")
if prefix_spec == "" then
-- We can't use the second branch of the if-else statement because an empty () returns the current position
-- in rmatch().
local main_verb = rmatch(verb, "^(" .. main_verb_spec .. ")$")
if main_verb then
return "", main_verb
end
else
local prefix, main_verb = rmatch(verb, "^(" .. prefix_spec .. ")(" .. main_verb_spec .. ")$")
if prefix then
return prefix, main_verb
end
end
else
local prefix, main_verb = rmatch(verb, "^(.*" .. prefix_spec .. ")(" .. main_verb_spec .. ")$")
if prefix then
return prefix, main_verb
end
end
end
return nil
end
end
--[=[
Built-in (usually irregular) conjugations.
Each entry is processed in turn and consists of an object with two fields:
1. match=: Specifies the built-in verbs that match this object.
2. forms=: Specifies the built-in stems and forms for these verbs.
The value of match= is either a string beginning with "^" (match only the specified verb), a string not beginning
with "^" (match any verb ending in that string), or a function that is passed in the verb and should return the prefix
of the verb if it matches, otherwise nil. The function match_against_verbs() is provided to facilitate matching a set
of verbs with a common ending and specific prefixes (e.g. [[ter]] and [[ater]] but not [[abater]], etc.).
The value of forms= is a table specifying stems and individual override forms. Each key of the table names either a
stem (e.g. `pres_stressed`), a stem property (e.g. `vowel_alt`) or an individual override form (e.g. `pres_1s`).
Each value of a stem can either be a string (a single stem), a list of strings, or a list of objects of the form
{form = STEM, footnotes = {FOONOTES}}. Each value of an individual override should be of exactly the same form except
that the strings specify full forms rather than stems. The values of a stem property depend on the specific property
but are generally strings or booleans.
In order to understand how the stem specifications work, it's important to understand the phonetic modifications done
by combine_stem_ending(). In general, the complexities of predictable prefix, stem and ending modifications are all
handled in this function. In particular:
1. Spelling-based modifications (c/z, g/gu, gu/gü, g/j) occur automatically as appropriate for the ending.
2. If the stem begins with an acute accent, the accent is moved onto the last vowel of the prefix (for handling verbs
in -uar such as [[minguar]], pres_3s 'míngua').
3. If the ending begins with a double asterisk, this is a signal to conditionally delete the accent on the last letter
of the stem. "Conditionally" means we don't do it if the last two letters would form a diphthong without the accent
on the second one (e.g. in [[sair]], with stem 'saí'); but as an exception, we do delete the accent in stems
ending in -guí, -quí (e.g. in [[conseguir]]) because in this case the ui isn't a diphthong.
4. If the ending begins with an asterisk, this is a signal to delete the accent on the last letter of the stem, e.g.
fizé -> fizermos. Unlike for **, this removal is unconditional, so we get e.g. 'sairmos' not #'saírmos'.
5. If ending begins with i, it must get an accent after an unstressed vowel (in some but not all cases) to prevent the
two merging into a diphthong. See combine_stem_ending() for specifics.
The following stems are recognized:
-- pres_unstressed: The present indicative unstressed stem (1p, 2p). Also controls the imperative 2p
and gerund. Defaults to the infinitive stem (minus the ending -ar/-er/-ir/-or).
-- pres_stressed: The present indicative stressed stem (1s, 2s, 3s, 3p). Also controls the imperative 2s.
Default is empty if indicator `no_pres_stressed`, else a vowel alternation if such an indicator is given
(e.g. `ue`, `ì`), else the infinitive stem.
-- pres1_and_sub: Overriding stem for 1s present indicative and the entire subjunctive. Only set by irregular verbs
and by the indicators `no_pres_stressed` (e.g. [[precaver]]) and `no_pres1_and_sub` (since verbs of this sort,
e.g. [[puir]], are missing the entire subjunctive as well as the 1s present indicative). Used by many irregular
verbs, e.g. [[caber]], verbs in '-air', [[dizer]], [[ter]], [[valer]], etc. Some verbs set this and then supply an
override for the pres_1sg if it's irregular, e.g. [[saber]], with irregular subjunctive stem "saib-" and special
1s present indicative "sei".
-- pres1: Special stem for 1s present indicative. Normally, do not set this explicitly. If you need to specify an
irregular 1s present indicative, use the form override pres_1s= to specify the entire form. Defaults to
pres1_and_sub if given, else pres_stressed.
-- pres_sub_unstressed: The present subjunctive unstressed stem (1p, 2p). Defaults to pres1_and_sub if given, else the
infinitive stem.
-- pres_sub_stressed: The present subjunctive stressed stem (1s, 2s, 3s, 1p). Defaults to pres1.
-- sub_conj: Determines the set of endings used in the subjunctive. Should be one of "ar" or "er".
-- impf: The imperfect stem (not including the -av-/-i- stem suffix, which is determined by the conjugation). Defaults
to the infinitive stem.
-- full_impf: The full imperfect stem missing only the endings (-a, -as, -am, etc.). Used for verbs with irregular
imperfects such as [[ser]], [[ter]], [[vir]] and [[pôr]]. Needs to include an accent on the stressed vowel, which
will automatically be removed when not needed.
-- pret_conj: Determines the set of endings used in the preterite. Should be one of "ar", "er", "ir" or "irreg".
Defaults to the conjugation as determined from the infinitive. When pret_conj == "irreg", `pret` is used, otherwise
`pret_base`.
-- pret_base: The preterite stem (not including the -a-/-e-/-i- stem suffix). Defaults to the infinitive stem.
Only used when pret_conj ~= "irreg".
-- pret: The full preterite stem missing only the endings (-ste, -mos, etc.). Needs to include the accent on the final
vowel that occurs in some forms, e.g. 'figé' for [[fazer]], 'fô' for [[ser]]; the accent will automatically be
removed when not needed. Only used for verbs with irregular preterites (pret_conj == "irreg") such as [[fazer]],
[[poder]], [[trazer]], etc. The pret_1s and pret_3s are handled using the gl_short_pret stem instead for
"Galician"-ending forms (pret_1s '-em', pret_3s '-o') and using pt_pret_1s and pt_pret_3s for "Portuguese"-ending
forms. Defaults to `pret_base` + the accented conjugation vowel.
-- gl_short_pret: The short preterite stem, used with "Galician" 1s and 3s endings (pret_1s '-em', pret_3s '-o'). Only
used with irregular preterites (pret_conj == "irreg"). Normally derived from gl_pret by deleting the final vowel,
and doesn't need to be given explicitly.
-- pt_pret_1s: The "Portuguese" pret_1s form. In addition to this, the "Galician" pret_1s form will be included, formed
from gl_short_pret by adding '-em'. Does not need to be given if an override for pret_1s is supplied.
-- pt_pret_3s: The "Portuguese" pret_3s form. In addition to this, the "Galician" pret_3s form will be included, formed
from gl_short_pret by adding '-o' (which may cause the preceding consonant to shift to preserve the sound). Does
not need to be given if an override for pret_3s is supplied.
-- fut: The future stem. Defaults to the infinitive stem + the unaccented conjugation vowel.
-- cond: The conditional stem. Defaults to `fut`.
-- impf_sub: The imperfect subjunctive stem. Needs to include the accent on the final vowel that occurs in some forms;
see `pret` for more information. Defaults to `pret`.
-- fut_sub: The future subjunctive stem. Needs to include the accent on the final vowel that occurs in some forms; see
`gl_pret` for more information. Defaults to the merger of `gl_pret` and `pt_pret`.
-- plup: The pluperfect stem. Needs to include the accent on the final vowel that occurs in some forms; see `pret` for
more information. Defaults to `pret`.
-- pers_inf: The personal infinitive stem. Defaults to the infinitive stem + the accented conjugation vowel.
-- pp: The masculine singular past participle. Default is based on the verb conjugation: infinitive stem + '-ado' for
-ar verbs, otherwise infinitive stem + '-ido'.
-- short_pp: The short masculine singular past participle, for verbs with such a form. No default.
-- pp_inv: `true` if the past participle exists only in the masculine singular.
]=]
local built_in_conjugations = {
--------------------------------------------------------------------------------------------
-- -ar --
--------------------------------------------------------------------------------------------
-- Verbs not needing entries here:
--
-- (1) Verbs with short past participles: need to specify the short pp explicitly.
--
-- aceitar: use <short_pp:aceite>
-- anexar, completar, expressar, expulsar, findar, fritar, ganhar, gastar, limpar, pagar, pasmar, pegar, soltar:
-- use <short_pp:anexo> etc.
-- assentar: use <short_pp:assente>
-- entregar: use <short_pp:entregue>
-- enxugar: use <short_pp:enxuto>
-- matar: use <short_pp:morto>
--
-- (2) Verbs with orthographic consonant alternations: handled automatically.
--
-- -car (brincar, buscar, pecar, trancar, etc.): automatically handled in combine_stem_ending()
-- -çar (alcançar, começar, laçar): automatically handled in combine_stem_ending()
-- -gar (apagar, cegar, esmagar, largar, navegar, resmungar, sugar, etc.): automatically handled in combine_stem_ending()
--
-- (3) Verbs with vowel alternations: need to specify the alternation explicitly unless it always happens, in
-- which case it's handled automatically through an entry below.
--
-- esmiuçar changing to esmiúço: use <ú>
-- faiscar changing to faísco: use <í>
-- -iar changing to -eio (ansiar, incendiar, mediar, odiar, remediar, etc.): use <ei>
-- -izar changing to -ízo (ajuizar, enraizar, homogeneizar, plebeizar, etc.): use <í>
-- mobiliar changing to mobílio: use <í>
-- reusar changing to reúso: use <ú>
-- saudar changing to saúdo: use <ú>
-- tuitar/retuitar changing to (re)tuíto: use <í>
{
-- dar, desdar
match = match_against_verbs("dar", {"^", "^des", "^re"}),
forms = {
pres_1s = "dou",
pres_2s = "dás",
pres_3s = "dá",
-- damos, dades/dais regular
pres_3p = {GL_TYPE .. "dam", PT_TYPE .. "dão"},
pret_conj = "irreg", pret = "dé", pret_1s = "dei", pret_3s = "deu",
pres_sub_1s = "dê",
pres_sub_2s = "dês",
pres_sub_3s = "dê",
-- demos, dedes/deis regular
pres_sub_3p = {GL_TYPE .. "dem", PT_TYPE .. "deem"},
irreg = true,
}
},
{
-- -ear (frear, nomear, semear, etc.)
match = "ear",
forms = {
pres_stressed = {"ei", GL_ALTVAR .. "e"},
e_ei_cat = true,
}
},
{
-- estar
match = match_against_verbs("estar", {"^", "sob", "sobr"}),
forms = {
pres_1s = "estou",
pres_2s = "estás",
pres_3s = "está",
pres_3p = {GL_TYPE .. "estám", PT_TYPE .. "estão"},
pres1_and_sub = "estej", -- only for subjunctive as we override pres_1s
sub_conj = "er",
pret_conj = "irreg", pret = "estivé", pt_pret_1s = "estive", pt_pret_3s = "esteve",
-- [[sobestar]], [[sobrestar]] are transitive so they have fully inflected past participles
pp_inv = function(base, prefix) return prefix == "" end,
irreg = true,
}
},
--------------------------------------------------------------------------------------------
-- -er --
--------------------------------------------------------------------------------------------
-- Verbs not needing entries here:
--
-- precaver: use <no_pres_stressed>
-- -cer (verbs in -ecer, descer, vencer, etc.): automatically handled in combine_stem_ending()
-- -ger (proteger, reger, etc.): automatically handled in combine_stem_ending()
-- -guer (erguer/reerguer/soerguer): automatically handled in combine_stem_ending()
{
-- benzer
match = "benzer",
forms = {short_pp = "bento"}
},
{
-- caber
match = "caber",
forms = {
pres1_and_sub = "caib",
pret_conj = "irreg", pret = "coubé", pt_pret_1s = "coube", pt_pret_3s = "coube",
irreg = true,
}
},
{
-- crer, descrer
match = "crer",
forms = {
pres_2s = "crês", pres_3s = "crê",
pres_2p = "credes", pres_3p = {GL_TYPE .. "crem", PT_TYPE .. "creem"},
pres1_and_sub = {"crei", GL_ALTVAR .. "cre"},
irreg = true,
}
},
{
-- dizer, bendizer, condizer, contradizer, desdizer, maldizer, predizer, etc.
match = "dizer",
forms = {
-- use 'digu' because we're in a front environment; if we use 'dig', we'll get '#dijo'
pres1_and_sub = "digu",
pres_2s = {GL_TYPE .. "dis", PT_TYPE .. "dizes"},
pres_3s = {GL_TYPE .. "di", PT_TYPE .. "diz"},
pres_3p = {GL_TYPE .. "dim", PT_TYPE .. "dizem"},
pret_conj = "irreg", pret = {GL_TYPE .. "dixé", PT_TYPE .. "dissé"},
pt_pret_1s = "disse", pt_pret_3s = "disse",
pp = "dito",
fut = "dir",
irreg = true,
}
},
{
-- eleger, reeleger
match = "eleger",
forms = {short_pp = "eleito"}
},
{
-- acender, prender; not desprender, etc.
match = match_against_verbs("ender", {"^ac", "^pr"}),
forms = {short_pp = "eso"}
},
{
-- fazer, afazer, contrafazer, desfazer, liquefazer, perfazer, putrefazer, rarefazer, refazer, satisfazer, tumefazer
match = "fazer",
forms = {
-- use 'fagu' because we're in a front environment; if we use 'fag', we'll get '#fajo'
pres1_and_sub = {GL_TYPE .. "fagu", PT_TYPE .. "faç"},
pres_2s = {GL_TYPE .. "fás", PT_TYPE .. "fazes"},
pres_3s = {GL_TYPE .. "fai", PT_TYPE .. "faz"},
pres_3p = {GL_TYPE .. "fam", PT_TYPE .. "fazem"},
pret_conj = "irreg", pret = {GL_TYPE .. "figé", PT_TYPE .. "fizé", GL_ONLY_ALTVAR .. "fizé"},
pt_pret_1s = "fiz", pt_pret_3s = "fez",
pp = "feito",
fut = "far",
irreg = true,
}
},
{
match = "^haver",
forms = {
pres_1s = "hei",
pres_2s = "hás",
pres_3s = {"há", {form = GL_ALTVAR .. "hai", footnotes = {"[also impersonal]"}}},
pres_3p = {GL_TYPE .. "ham", PT_TYPE .. "hão"},
pres1_and_sub = "haj", -- only for subjunctive as we override pres_1s
pret_conj = "irreg", pret = "houvé", pt_pret_1s = "houve", pt_pret_3s = "houve",
imp_2s = "há",
irreg = true,
}
},
-- reaver below under r-
{
-- jazer, adjazer
match = "jazer",
forms = {
pres_3s = "jaz",
irreg = true,
}
},
{
-- ler, reler, tresler; not excel(l)er, valer, etc.
match = match_against_verbs("ler", {"^", "^re", "tres"}),
forms = {
pres_2s = "lês", pres_3s = "lê",
pres_2p = "ledes", pres_3p = {GL_TYPE .. "lem", PT_TYPE .. "leem"},
pres1_and_sub = {"lei", GL_ALTVAR .. "le"},
irreg = true,
}
},
{
-- morrer, desmorrer
match = "morrer",
forms = {short_pp = "morto"}
},
{
-- moer, but not remoer
match = "^moer",
forms = {
pres_2s = "móis", pres_3s = "mói",
-- impf -ía etc., pret_1s -oí and pp -oído handled automatically in combine_stem_ending()
pres1_and_sub = {"mo", GL_ALTVAR .. "moi"},
short_pp = "mudo",
irreg = true,
}
},
{
-- doer, remoer, roer/corroer, soer
match = "oer",
forms = {
pres_2s = "óis", pres_3s = "ói",
-- impf -ía etc., pret_1s -oí and pp -oído handled automatically in combine_stem_ending()
pres1_and_sub = {"o", GL_ALTVAR .. "oi"},
irreg = true,
}
},
{
-- perder
match = "perder",
forms = {
-- use 'perqu' because we're in a front environment; if we use 'perc', we'll get '#perço'
-- we don't tag these forms GL_TYPE or PT_TYPE because both occur with both endings -ais/-ades
pres1_and_sub = {"perd", "perqu"},
irreg = true,
}
},
{
-- poder
match = "poder",
forms = {
pres1_and_sub = {GL_TYPE .. "pod", PT_TYPE .. "poss"},
pret_conj = "irreg", pret = "pudé", pt_pret_1s = "pude", pt_pret_3s = "pôde",
irreg = true,
}
},
{
-- prazer, aprazer, comprazer, desprazer
-- FIXME: comprazer also has regular preterite
match = "prazer",
forms = {
pres_3s = "praz",
pret_conj = "irreg", pret = "prouvé", pt_pret_1s = "prouve", pt_pret_3s = "prouve",
only3sp = function(base, prefix) return prefix == "a" end,
imp_2s = {GL_TYPE .. "praze", PT_TYPE .. "praz"},
irreg = true,
}
},
-- prover below, just below ver
{
-- requerer; must precede querer
match = "requerer",
forms = {
pres_3s = "requer",
pres1_and_sub = "requeir",
imp_2s = {"requer"},
-- regular preterite, unlike [[querer]]
irreg = true,
}
},
{
-- querer, desquerer, malquerer
match = "querer",
forms = {
pres_1s = "quero", pres_3s = "quer",
pres1_and_sub = "queir", -- only for subjunctive as we override pres_1s
pret_conj = "irreg", pret = {GL_TYPE .. "quigé", PT_TYPE .. "quisé"},
pt_pret_1s = "quis", pt_pret_3s = "quis",
irreg = true,
}
},
{
match = "reaver",
forms = {
pres_1s = "reei",
pres_2s = "reás",
pres_3s = "reá",
pres_3p = {GL_TYPE .. "ream", PT_TYPE .. "reão"},
pres1_and_sub = "reaj", -- only for subjunctive as we override pres_1s
pret_conj = "irreg", pret = "reouvé", pt_pret_1s = "reouve", pt_pret_3s = "reouve",
irreg = true,
}
},
{
-- saber, ressaber
match = "saber",
forms = {
pres_1s = "sei",
pres1_and_sub = "saib", -- only for subjunctive as we override pres_1s
pret_conj = "irreg", pret = "soubé", pt_pret_1s = "soube", pt_pret_3s = "soube",
irreg = true,
}
},
{
-- escrever/reescrever, circunscrever, descrever/redescrever, inscrever, prescrever, proscrever, subscrever,
-- transcrever, others?
match = "screver",
forms = {
pp = "scrito",
irreg = true,
}
},
{
-- suspender
match = "suspender",
forms = {short_pp = "suspenso"}
},
{
match = "^ser",
forms = {
pres_1s = "sou", pres_2s = "és", pres_3s = "é",
pres_1p = "somos", pres_2p = {GL_TYPE .. "sodes", PT_TYPE .. "sois"},
pres_3p = {GL_TYPE .. "som", PT_TYPE .. "são"},
pres1_and_sub = "sej", -- only for subjunctive as we override pres_1s
full_impf = "ér",
pret_conj = "irreg", pret = "fô", pret_1s = {GL_TYPE .. "fum", PT_TYPE .. "fui"}, pret_3s = "foi",
imp_2s = "sê", imp_2p = "sede",
pp_inv = true,
irreg = true,
}
},
{
-- We want to match abster, conter, deter, etc. but not abater, cometer, etc. No way to avoid listing each verb.
match = match_against_verbs("ter", {"abs", "^a", "con", "de", "entre", "man", "ob", "^re", "sus", "^"}),
forms = {
-- FIXME, Estraviz says 'contens', 'detens' etc. but that may be a typo
pres_2s = function(base, prefix) return {GL_TYPE .. "tés", PT_TYPE .. (prefix == "" and "tens" or "téns")} end,
-- FIXME, Estraviz says 'contem', 'detem' etc. but that may be a typo
pres_3s = function(base, prefix) return prefix == "" and "tem" or "tém" end,
pres_2p = "tendes", pres_3p = {GL_TYPE .. "tenhem", PT_TYPE .. "têm", GL_ALTVAR .. "tém"},
pres1_and_sub = "tenh",
full_impf = "tính",
pret_conj = "irreg", pret = "tivé", pt_pret_1s = "tive", pt_pret_3s = "teve",
irreg = true,
}
},
{
match = "trazer",
forms = {
-- use 'tragu' because we're in a front environment; if we use 'trag', we'll get '#trajo'
pres1_and_sub = "tragu", pres_3s = "traz",
pret_conj = "irreg", pret = "trouxé", pt_pret_1s = "trouxe", pt_pret_3s = "trouxe",
fut = "trar",
irreg = true,
}
},
{
match = "traguer",
forms = {
pret_conj = "irreg", pret = "trouxé", pt_pret_1s = "trouxe", pt_pret_3s = "trouxe",
irreg = true,
}
},
{
-- valer, desvaler, equivaler
match = "valer",
forms = {
pres1_and_sub = "valh",
irreg = true,
}
},
{
-- We want to match antever etc. but not absolver, atrever etc. No way to avoid listing each verb.
match = match_against_verbs("ver", {"ante", "entre", "pre", "^re", "^"}),
forms = {
pres_2s = "vês", pres_3s = "vê",
pres_2p = "vedes",
pres_3p = function(base, prefix) return {GL_TYPE .. (prefix == "" and "vem" or "vêm"), PT_TYPE .. "veem"} end,
pres1_and_sub = "vej",
pret_conj = "irreg", pret = "ví", pret_1s = {GL_TYPE .. "vim", PT_TYPE .. "vi"}, pret_3s = "viu",
pp = "visto",
irreg = true,
}
},
{
-- [[prover]] and [[desprover]] have regular preterite and past participle
match = "prover",
forms = {
pres_2s = "provês", pres_3s = "provê",
-- FIXME: Estraviz says 'provem' but that may be a typo
pres_2p = "provedes", pres_3p = {GL_TYPE .. "provêm", PT_TYPE .. "proveem"},
pres1_and_sub = "provej",
irreg = true,
}
},
{
-- volver, devolver, envolver, revolver, etc.
match = "volver",
forms = {short_pp = "volto"},
},
--------------------------------------------------------------------------------------------
-- -ir --
--------------------------------------------------------------------------------------------
-- Verbs not needing entries here:
--
-- abolir: use <u-o>
-- barrir: use <only3sp>
-- carpir, colorir, demolir: use <no_pres1_and_sub>
-- descolorir: use <no_pres1_and_sub>
-- delir, espavorir, falir, florir, remir, renhir: use <no_pres_stressed>
-- empedernir: use <i-e>
-- transir: regular
-- aspergir, despir, flectir/deflectir/genuflectir/genufletir/reflectir/refletir, mentir/desmentir,
-- sentir/assentir/consentir/dissentir/pressentir/ressentir, convergir/divergir, aderir/adherir,
-- ferir/auferir/conferir/deferir/desferir/diferir/differir/inferir/interferir/preferir/proferir/referir/transferir,
-- gerir/digerir/ingerir/sugerir, preterir, competir/repetir, servir, advertir/animadvertir/divertir,
-- vestir/investir/revestir/travestir, seguir/conseguir/desconseguir/desseguir/perseguir/prosseguir: use <i-e>
-- inerir: use <i-e>
-- compelir/expelir/impelir/repelir: use <i-e>
-- dormir, engolir, tossir, subir, acudir/sacudir, fugir, sumir/consumir (NOT assumir/presumir/resumir): use <u-o>
-- polir/repolir: use <u>
-- premir: use <i>
-- extorquir/retorquir: <u-o,u>
-- agredir/progredir/regredir/transgredir: use <i>
-- denegrir, prevenir: use <i>
-- eclodir: use <u-o>
-- cerzir: use <i-e>
-- proibir/coibir: use <í>
-- reunir: use <ú>
-- parir/malparir: use <no_pres_stressed>
-- explodir/implodir: use <u-o>
--
-- -cir alternations (aducir, ressarcir): automatically handled in combine_stem_ending()
-- -gir alternations (agir, dirigir, exigir): automatically handled in combine_stem_ending()
-- -guir alternations (e.g. conseguir): automatically handled in combine_stem_ending()
-- -quir alternations (e.g. extorquir): automatically handled in combine_stem_ending()
{
-- verbs in -air (cair, sair, trair and derivatives: decair/descair/recair, sobres(s)air,
-- abstrair/atrair/contrair/distrair/extrair/protrair/retrair/subtrair)
match = "air",
forms = {
pres1_and_sub = "ai", pres_2s = "ais", pres_3s = "ai",
-- all occurrences of accented í in endings handled in combine_stem_ending()
irreg = true,
}
},
{
-- abrir/desabrir/reabrir
match = "abrir",
forms = {pp = "aberto"}
},
{
-- cobrir/descobrir/encobrir/recobrir/redescobrir
match = "cobrir",
forms = {vowel_alt = "u-o", pp = "coberto"}
},
{
-- conduzir, produzir, reduzir, traduzir, etc.; luzir, reluzir, tremeluzir
match = "uzir",
forms = {
pres_3s = "uz",
-- FIXME, is this correct?
imp_2s = "uze",
irreg = true,
}
},
{
-- pedir, desimpedir, despedir, espedir, expedir, impedir
-- medir
-- comedir
match = match_against_verbs("edir", {"m", "p"}),
forms = {
pres1_and_sub = {GL_TYPE .. "id", PT_TYPE .. "eç"},
irreg = true,
}
},
{
-- frigir
match = "frigir",
forms = {vowel_alt = "i-e", short_pp = "frito"},
},
{
-- inserir
match = "inserir",
forms = {vowel_alt = "i-e"},
},
{
-- ir
match = "^ir",
forms = {
pres_1s = "vou", pres_2s = {GL_TYPE .. "vás", PT_TYPE .. "vais"}, pres_3s = "vai",
pres_1p = {GL_TYPE .. "imos", PT_TYPE .. "vamos"}, pres_2p = "ides",
pres_3p = {GL_TYPE .. "vam", PT_TYPE .. "vão"},
pres_sub_1s = {GL_TYPE .. "vaia", PT_TYPE .. "vá"},
pres_sub_2s = {GL_TYPE .. "vaias", PT_TYPE .. "vás"},
pres_sub_3s = {GL_TYPE .. "vaia", PT_TYPE .. "vá"},
pres_sub_1p = {GL_TYPE .. "vaiamos", PT_TYPE .. "vamos"},
pres_sub_2p = {GL_TYPE .. "vaiades", PT_TYPE .. "vades"},
pres_sub_3p = {GL_TYPE .. "vaiam", PT_TYPE .. "vão"},
pret_conj = "irreg", pret = "fô", pret_1s = {GL_TYPE .. "fum", PT_TYPE .. "fui"}, pret_3s = "foi",
irreg = true,
}
},
{
-- emergir, imergir, submergir
match = "mergir",
forms = {vowel_alt = "i-e", short_pp = "merso"},
},
{
match = "ouvir",
forms = {
pres1_and_sub = {"ouç", ALTVAR .. "oiç"},
irreg = true,
}
},
{
-- exprimir, imprimir, comprimir (but not descomprimir per Priberam), deprimir, oprimir/opprimir (but not reprimir,
-- suprimir/supprimir per Priberam)
match = match_against_verbs("primir", {"^com", "ex", "im", "de", "^o", "op"}),
forms = {short_pp = "presso"}
},
{
-- rir, sorrir
match = match_against_verbs("rir", {"^", "sor"}),
forms = {
pres_2s = "ris", pres_3s = "ri", pres_2p = "rides", pres_3p = {GL_TYPE .. "rim", PT_TYPE .. "riem"},
pres1_and_sub = "ri",
irreg = true,
}
},
{
-- distinguir, extinguir
match = "tinguir",
forms = {
short_pp = "tinto",
-- gu/g alternations handled in combine_stem_ending()
}
},
{
-- verbs in -truir (construir, destruir, reconstruir) but not obstruir/desobstruir, instruir, which are handled
-- by the default -uir handler below
match = match_against_verbs("struir", {"con", "de"}),
forms = {
pres_2s = {"stróis", ALTVAR .. "struis"}, pres_3s = {"strói", ALTVAR .. "strui"},
pres_3p = {"stroem", ALTVAR .. "struem"},
-- all occurrences of accented í in endings handled in combine_stem_ending()
irreg = true,
}
},
{
-- remaining verbs in -uir (concluir/excluir/incluir/concruir/concruyr, abluir/diluir, afluir/fluir/influir,
-- aluir, anuir, atribuir/contribuir/distribuir/redistribuir/retribuir/substituir, coevoluir/evoluir,
-- constituir/destituir/instituir/reconstituir/restituir, derruir, diminuir, estatuir, fruir/usufruir, imbuir,
-- imiscuir, poluir, possuir, puir, pruir, ruir
-- FIXME: old module lists short pp incluso for incluir that can't be verified, ask about this
-- FIXME: handle -uyr verbs?
match = function(verb)
-- Don't match -guir verbs (e.g. [[seguir]], [[conseguir]]) or -quir verbs (e.g. [[extorquir]])
if verb:find("guir$") or verb:find("quir$") then
return nil
else
return match_against_verbs("uir", {""})(verb)
end
end,
forms = {
pres_2s = "uis", pres_3s = "ui",
-- all occurrences of accented í in endings handled in combine_stem_ending()
irreg = true,
}
},
{
-- We want to match advir, convir, devir, etc. but not ouvir, servir, etc. No way to avoid listing each verb.
match = match_against_verbs("vir", {"ad", "^a", "con", "contra", "de", "^desa", "inter", "pro", "^re", "sobre", "^"}),
forms = {
-- FIXME, Estraviz says 'convens', 'devens' etc. but that may be a typo
pres_2s = function(base, prefix) return {GL_TYPE .. "vés", PT_TYPE .. (prefix == "" and "vens" or "véns")} end,
-- FIXME, Estraviz says 'convem', 'devem' etc. but that may be a typo
pres_3s = function(base, prefix) return prefix == "" and "vem" or "vém" end,
pres_2p = "vindes", pres_3p = {GL_TYPE .. "venhem", PT_TYPE .. "vêm", GL_ALTVAR .. "vém"},
pres1_and_sub = "venh",
full_impf = "vính",
pret_conj = "irreg", pret = {GL_TYPE .. "vinhé", PT_TYPE .. "vié"},
pret_1s = "vim", pret_3s = {GL_TYPE .. "véu", PT_TYPE .. "veio"},
pp = "vindo",
irreg = true,
}
},
--------------------------------------------------------------------------------------------
-- misc --
--------------------------------------------------------------------------------------------
{
-- pôr, antepor, apor, compor/decompor/descompor, contrapor, depor, dispor, expor, impor, interpor, justapor,
-- opor, pospor, propor, repor, sobrepor, supor/pressupor, transpor, decompor, others?
match = "p[oô]r",
forms = {
pres1_and_sub = "ponh",
pres_2s = {GL_TYPE .. "pós", PT_TYPE .. "pões", GL_ALTVAR .. "pons"},
pres_3s = {GL_TYPE .. "pom", PT_TYPE .. "põe"},
pres_1p = "pomos", pres_2p = "pondes",
pres_3p = {GL_TYPE .. "ponhem", PT_TYPE .. "põem", GL_ALTVAR .. "póm"},
full_impf = "púnh",
pret_conj = "irreg", pret = {GL_TYPE .. "pugé", PT_TYPE .. "pusé"}, pt_pret_1s = "pus", pt_pret_3s = "pôs",
pers_inf = "po",
gerund = "pondo", pp = "posto",
irreg = true,
}
},
}
local function skip_slot(base, slot, allow_overrides)
if not allow_overrides and (base.basic_overrides[slot] or
base.refl and base.basic_reflexive_only_overrides[slot]) then
-- Skip any slots for which there are overrides.
return true
end
if base.only3s and (slot:find("^pp_f") or slot:find("^pp_mp")) then
-- diluviar, atardecer, neviscar; impersonal verbs have only masc sing pp
return true
end
if not slot:find("[123]") then
-- Don't skip non-personal slots.
return false
end
if base.nofinite then
return true
end
if (base.only3s or base.only3sp or base.only3p) and (slot:find("^imp_") or slot:find("^neg_imp_")) then
return true
end
if base.only3s and not slot:find("3s") then
-- diluviar, atardecer, neviscar
return true
end
if base.only3sp and not slot:find("3[sp]") then
-- atañer, concernir
return true
end
if base.only3p and not slot:find("3p") then
-- [[caer cuatro gotas]], [[caer chuzos de punta]], [[entrarle los siete males]]
return true
end
return false
end
-- Apply vowel alternations to stem.
local function apply_vowel_alternations(stem, alternations)
local alternation_stems = {}
local saw_pres1_and_sub = false
local saw_pres_stressed = false
-- Process alternations other than +.
for _, altobj in ipairs(alternations) do
local alt = altobj.form
local pres1_and_sub, pres_stressed, err
-- Treat final -gu, -qu as a consonant, so the previous vowel can alternate (e.g. conseguir -> consigo).
-- This means a verb in -guar can't have a u-ú alternation but I don't think there are any verbs like that.
stem = rsub(stem, "([gq])u$", "%1" .. TEMPC1)
if alt == "+" then
-- do nothing yet
elseif alt == "ei" then
local before_last_vowel = rmatch(stem, "^(.*)i$")
if not before_last_vowel then
err = "stem should end in -i"
else
pres1_and_sub = nil
pres_stressed = before_last_vowel .. "ei"
end
else
local before_last_vowel, last_vowel, after_last_vowel = rmatch(stem, "^(.*)(" .. V .. ")(.-[ui])$")
if not before_last_vowel then
before_last_vowel, last_vowel, after_last_vowel = rmatch(stem, "^(.*)(" .. V .. ")(.-)$")
end
if alt == "i-e" then
if last_vowel == "e" or last_vowel == "i" then
pres1_and_sub = before_last_vowel .. "i" .. after_last_vowel
if last_vowel == "i" then
pres_stressed = before_last_vowel .. "e" .. after_last_vowel
end
else
err = "should have -e- or -i- as the last vowel"
end
elseif alt == "i" then
if last_vowel == "e" then
pres1_and_sub = before_last_vowel .. "i" .. after_last_vowel
pres_stressed = pres1_and_sub
else
err = "should have -e- as the last vowel"
end
elseif alt == "u-o" then
if last_vowel == "o" or last_vowel == "u" then
pres1_and_sub = before_last_vowel .. "u" .. after_last_vowel
if last_vowel == "u" then
pres_stressed = before_last_vowel .. "o" .. after_last_vowel
end
else
err = "should have -o- or -u- as the last vowel"
end
elseif alt == "u" then
if last_vowel == "o" then
pres1_and_sub = before_last_vowel .. "u" .. after_last_vowel
pres_stressed = pres1_and_sub
else
err = "should have -o- as the last vowel"
end
elseif alt == "í" then
if last_vowel == "i" then
pres_stressed = before_last_vowel .. "í" .. after_last_vowel
else
err = "should have -i- as the last vowel"
end
elseif alt == "ú" then
if last_vowel == "u" then
pres_stressed = before_last_vowel .. "ú" .. after_last_vowel
else
err = "should have -u- as the last vowel"
end
else
error("Internal error: Unrecognized vowel alternation '" .. alt .. "'")
end
end
if pres1_and_sub then
pres1_and_sub = {form = pres1_and_sub:gsub(TEMPC1, "u"), footnotes = altobj.footnotes}
saw_pres1_and_sub = true
end
if pres_stressed then
pres_stressed = {form = pres_stressed:gsub(TEMPC1, "u"), footnotes = altobj.footnotes}
saw_pres_stressed = true
end
table.insert(alternation_stems, {
altobj = altobj,
pres1_and_sub = pres1_and_sub,
pres_stressed = pres_stressed,
err = err
})
end
-- Now do +. We check to see which stems are used by other alternations and specify those so any footnotes are
-- properly attached.
for _, alternation_stem in ipairs(alternation_stems) do
if alternation_stem.altobj.form == "+" then
local stemobj = {form = stem, footnotes = alternation_stem.altobj.footnotes}
alternation_stem.pres1_and_sub = saw_pres1_and_sub and stemobj or nil
alternation_stem.pres_stressed = saw_pres_stressed and stemobj or nil
end
end
return alternation_stems
end
-- Add the `stem` to the `ending` for the given `slot` and apply any phonetic modifications.
-- WARNING: This function is written very carefully; changes to it can easily have unintended consequences.
local function combine_stem_ending(base, slot, prefix, stem, ending, dont_include_prefix)
-- If the stem begins with an acute accent, this is a signal to move the accent onto the last vowel of the prefix.
-- Cf. míngua of minguar.
if stem:find("^" .. AC) then
stem = rsub(stem, "^" .. AC, "")
if dont_include_prefix then
error("Internal error: Can't handle acute accent at beginning of stem if dont_include_prefix is given")
end
prefix = rsub(prefix, "([aeiouyAEIOUY])([^aeiouyAEIOUY]*)$", "%1" .. AC .. "%2")
end
-- Use the full stem for checking for -gui ending and such, because 'stem' is just 'u' for [[arguir]],
-- [[delinquir]].
local full_stem = prefix .. stem
-- Include the prefix in the stem unless dont_include_prefix is given (used for the past participle stem).
if not dont_include_prefix then
stem = full_stem
end
-- If the ending begins with a double asterisk, this is a signal to conditionally delete the accent on the last letter
-- of the stem. "Conditionally" means we don't do it if the last two letters would form a diphthong without the accent
-- on the second one (e.g. in [[sair]], with stem 'saí'); but as an exception, we do delete the accent in stems
-- ending in -guí, -quí (e.g. in [[conseguir]]) because in this case the ui isn't a diphthong.
if ending:find("^%*%*") then
ending = rsub(ending, "^%*%*", "")
if rfind(full_stem, "[gq]uí$") or not rfind(full_stem, V .. "[íú]$") then
stem = com.remove_final_accent(stem)
end
end
-- If the ending begins with an asterisk, this is a signal to delete the accent on the last letter of the stem.
-- E.g. fizé -> fizermos. Unlike for **, this removal is unconditional, so we get e.g. 'sairmos' not #'saírmos'.
if ending:find("^%*") then
ending = rsub(ending, "^%*", "")
stem = com.remove_final_accent(stem)
end
-- If ending begins with i, it must get an accent after an unstressed vowel (in some but not all cases) to prevent
-- the two merging into a diphthong:
-- * cair ->
-- * pres: caímos, caís;
-- * impf: all forms (caí-);
-- * pret: caí (but not caim), caíste (but not caiu), caímos, caístes, caíram;
-- * plup: all forms (caír-);
-- * impf_sub: all forms (caíss-);
-- * fut_sub: caíres, caírem (but not cair, cairmos, cairdes)
-- * pp: caído (but not gerund caindo)
-- * atribuir, other verbs in -uir -> same pattern as for cair etc.
-- * roer ->
-- * pret: roí (but not roim)
-- * impf: all forms (roí-)
-- * pp: roído
-- Don't let variant codes derail the following checks. Note that variant codes are properly added to the end of
-- the ending, so checks against the beginning of the ending work even in their presence, but not checks against
-- the full ending.
local cleaned_ending = export.remove_variant_codes(ending)
if cleaned_ending:find("^i") and full_stem:find("[aeiou]$") and not full_stem:find("[gq]u$") and
not cleaned_ending:find("^i[rum]$") and cleaned_ending ~= "indo" and not cleaned_ending:find("^ir[md]") then
ending = ending:gsub("^i", "í")
end
-- Spelling changes in the stem; it depends on whether the stem given is the pre-front-vowel or
-- pre-back-vowel variant, as indicated by `frontback`. We want these front-back spelling changes to happen
-- between stem and ending, not between prefix and stem; the prefix may not have the same "front/backness"
-- as the stem.
local is_front = rfind(ending, "^[eiéíê]")
if base.frontback == "front" and not is_front then
stem = stem:gsub("c$", "ç") -- conhecer -> conheço, vencer -> venço, descer -> desço
stem = stem:gsub("g$", "j") -- proteger -> protejo, fugir -> fujo
stem = stem:gsub("gu$", "g") -- distinguir -> distingo, conseguir -> consigo
stem = stem:gsub("qu$", "c") -- extorquir -> exturco
stem = stem:gsub("([gq])ü$", "%1u") -- argüir (superseded) -> arguo, delinqüir (superseded) -> delinquo
elseif base.frontback == "back" and is_front then
-- The following changes are all superseded so we don't do them:
-- averiguar -> averigüei, minguar -> mingüei; antiquar -> antiqüei, apropinquar -> apropinqüei
-- stem = stem:gsub("([gq])u$", "%1ü")
stem = stem:gsub("g$", "gu") -- cargar -> carguei, apagar -> apaguei
stem = stem:gsub("c$", "qu") -- marcar -> marquei
stem = stem:gsub("ç$", "c") -- começar -> comecei
-- j does not go to g here; desejar -> deseje not #desege
end
local retval = stem .. ending
if retval:find(GL_TYPE) and retval:find(PT_TYPE) or retval:find(GL_ONLY_TYPE) and not retval:find(GL_TYPE) then
-- Reject clashes in "Galician"-type and "Portuguese"-type forms, e.g. '#vós dixéreis' or '#vós dissérades'.
return nil
end
return retval
end
local function add3(base, slot, stems, endings, footnotes, allow_overrides)
if skip_slot(base, slot, allow_overrides) then
return
end
local function do_combine_stem_ending(stem, ending)
return combine_stem_ending(base, slot, base.prefix, stem, ending)
end
iut.add_forms(base.forms, slot, stems, endings, do_combine_stem_ending, nil, nil, footnotes)
end
local function insert_form(base, slot, form)
if not skip_slot(base, slot) then
iut.insert_form(base.forms, slot, form)
end
end
local function insert_forms(base, slot, forms)
if not skip_slot(base, slot) then
iut.insert_forms(base.forms, slot, forms)
end
end
local function add_single_stem_tense(base, slot_pref, stems, s1, s2, s3, p1, p2, p3)
local function addit(slot, ending)
add3(base, slot_pref .. "_" .. slot, stems, ending)
end
addit("1s", s1)
addit("2s", s2)
addit("3s", s3)
addit("1p", p1)
addit("2p", p2)
addit("3p", p3)
end
local function construct_stems(base, vowel_alt)
local stems = {}
stems.pres_unstressed = base.stems.pres_unstressed or base.inf_stem
stems.pres_stressed =
-- If no_pres_stressed given, pres_stressed stem should be empty so no forms are generated.
base.no_pres_stressed and {} or
base.stems.pres_stressed or
vowel_alt.pres_stressed or
base.inf_stem
stems.pres1_and_sub =
-- If no_pres_stressed given, the entire subjunctive is missing.
base.no_pres_stressed and {} or
-- If no_pres1_and_sub given, pres1 and entire subjunctive are missing.
base.no_pres1_and_sub and {} or
base.stems.pres1_and_sub or
vowel_alt.pres1_and_sub or
nil
stems.pres1 = base.stems.pres1 or stems.pres1_and_sub or stems.pres_stressed
stems.impf = base.stems.impf or base.inf_stem
stems.full_impf = base.stems.full_impf
stems.pret_base = base.stems.pret_base or base.inf_stem
stems.pret_conj = base.stems.pret_conj or base.conj
stems.pret = base.stems.pret or iut.map_forms(iut.convert_to_general_list_form(stems.pret_base),
function(form) return form .. base.conj_vowel end)
stems.gl_short_pret = base.stems.gl_short_pret or iut.map_forms(iut.convert_to_general_list_form(stems.pret),
function(form) return rsub(form, com.V .. "$", "") end)
stems.pt_pret_1s = base.stems.pt_pret_1s
stems.pt_pret_3s = base.stems.pt_pret_3s
stems.fut = base.stems.fut or base.inf_stem .. base.conj
stems.cond = base.stems.cond or stems.fut
stems.pres_sub_stressed = base.stems.pres_sub_stressed or stems.pres1
stems.pres_sub_unstressed = base.stems.pres_sub_unstressed or stems.pres1_and_sub or stems.pres_unstressed
stems.sub_conj = base.stems.sub_conj or base.conj
stems.plup = base.stems.plup or stems.pret
stems.impf_sub = base.stems.impf_sub or stems.pret
stems.fut_sub = base.stems.fut_sub or stems.pret
stems.pers_inf = base.stems.pers_inf or base.inf_stem .. base.conj_vowel
stems.pp = base.stems.pp or base.conj == "ar" and
combine_stem_ending(base, "pp_ms", base.prefix, base.inf_stem, "ado", "dont include prefix") or
-- use combine_stem_ending esp. so we get roído, caído, etc.
combine_stem_ending(base, "pp_ms", base.prefix, base.inf_stem, "ido", "dont include prefix")
stems.pp_ms = stems.pp
local function masc_to_fem(form)
if rfind(form, "o$") then
return rsub(form, "o$", "a")
else
return form
end
end
stems.pp_fs = iut.map_forms(iut.convert_to_general_list_form(stems.pp_ms), masc_to_fem)
if base.stems.short_pp then
stems.short_pp_ms = base.stems.short_pp
stems.short_pp_fs = iut.map_forms(iut.convert_to_general_list_form(stems.short_pp_ms), masc_to_fem)
end
base.this_stems = stems
end
local function add_present_indic(base)
local stems = base.this_stems
local function addit(slot, stems, ending)
add3(base, "pres_" .. slot, stems, ending)
end
local s2, s3, p1, p2, p3
if base.conj == "ar" then
s2, s3, p1, p2, p3 = "as", "a", "amos", {"ades" .. GL_TYPE, "ais" .. PT_TYPE}, "am"
elseif base.conj == "er" or base.conj == "or" then -- verbs in -por have the present overridden
s2, s3, p1, p2, p3 = "es", "e", "emos", {"edes" .. GL_TYPE, "eis" .. PT_TYPE}, "em"
elseif base.conj == "ir" then
s2, s3, p1, p2, p3 = "es", "e", "imos", {"ides" .. GL_TYPE, "is" .. PT_TYPE}, "em"
else
error("Internal error: Unrecognized conjugation " .. base.conj)
end
addit("1s", stems.pres1, "o")
addit("2s", stems.pres_stressed, s2)
addit("3s", stems.pres_stressed, s3)
addit("1p", stems.pres_unstressed, p1)
addit("2p", stems.pres_unstressed, p2)
addit("3p", stems.pres_stressed, p3)
end
local function add_present_subj(base)
local stems = base.this_stems
local function addit(slot, stems, ending)
add3(base, "pres_sub_" .. slot, stems, ending)
end
local s1, s2, s3, p1, p2, p3
if stems.sub_conj == "ar" then
s1, s2, s3, p1, p2, p3 = "e", "es", "e", "emos", {"edes" .. GL_TYPE, "eis" .. PT_TYPE}, "em"
else
s1, s2, s3, p1, p2, p3 = "a", "as", "a", "amos", {"ades" .. GL_TYPE, "ais" .. PT_TYPE}, "am"
end
addit("1s", stems.pres_sub_stressed, s1)
addit("2s", stems.pres_sub_stressed, s2)
addit("3s", stems.pres_sub_stressed, s3)
addit("1p", stems.pres_sub_unstressed, p1)
addit("2p", stems.pres_sub_unstressed, p2)
addit("3p", stems.pres_sub_stressed, p3)
end
local function add_finite_non_present(base)
local stems = base.this_stems
local function add_tense(slot, stem, s1, s2, s3, p1, p2, p3)
add_single_stem_tense(base, slot, stem, s1, s2, s3, p1, p2, p3)
end
-- * at the beginning of the ending means to remove an accent from the last vowel of the imperfect stem.
if stems.full_impf then
add_tense("impf", stems.full_impf, "*a", "*as", "*a", "amos",
{"ades" .. GL_TYPE, "eis" .. PT_TYPE, "ais" .. GL_ALTVAR}, "*am")
elseif base.conj == "ar" then
add_tense("impf", stems.impf, "ava", "avas", "ava", "ávamos",
{"ávades" .. GL_TYPE, "áveis" .. PT_TYPE, "ávais" .. GL_ALTVAR}, "avam")
else
add_tense("impf", stems.impf, "ia", "ias", "ia", "íamos",
{"íades" .. GL_TYPE, "íeis" .. PT_TYPE, "íais" .. GL_ALTVAR}, "iam")
end
-- * at the beginning of the ending means to remove a final accent from the preterite stem.
if stems.pret_conj == "irreg" then
add_tense("pret", stems.gl_short_pret, "em" .. GL_TYPE, nil, "o" .. GL_TYPE)
add_tense("pret", stems.pret, nil, {"*ste", "*che" .. GL_ALTVAR}, nil, "*mos", "*stes",
{"rom" .. GL_TYPE, "*ram" .. PT_TYPE})
add_tense("pret", stems.pt_pret_1s, PT_TYPE)
add_tense("pret", stems.pt_pret_3s, nil, nil, PT_TYPE)
elseif stems.pret_conj == "ar" then
add_tense("pret", stems.pret_base, "ei", {"aste", "ache" .. GL_ALTVAR}, "ou", "amos", "astes",
{"árom" .. GL_TYPE, "aram" .. PT_TYPE})
elseif stems.pret_conj == "er" then
add_tense("pret", stems.pret_base, {"im" .. GL_TYPE, "i" .. PT_TYPE}, {"este", "eche" .. GL_ALTVAR}, "eu",
"emos", "estes", {"êrom" .. GL_TYPE, "eram" .. PT_TYPE})
else
add_tense("pret", stems.pret_base, {"im" .. GL_TYPE, "i" .. PT_TYPE}, {"iste", "iche" .. GL_ALTVAR}, "iu",
"imos", "istes", {"írom" .. GL_TYPE, "iram" .. PT_TYPE})
end
-- * at the beginning of the ending means to remove a final accent from the stem.
-- ** is similar but is "conditional" on a consonant preceding the final vowel.
add_tense("plup", stems.plup, "**ra", "**ras", "**ra", "ramos",
{"rades" .. GL_TYPE, "reis" .. PT_TYPE, "rais" .. GL_ALTVAR}, "**ram")
add_tense("impf_sub", stems.impf_sub, "**sse", "**sses", "**sse", "ssemos",
{"ssedes" .. GL_TYPE, "sseis" .. PT_TYPE}, "**ssem")
add_tense("fut_sub", stems.fut_sub, "*r", "**res", "*r", "*rmos", "*rdes", "**rem")
if base.refl then
local mark = TEMP_MESOCLITIC_INSERTION_POINT
add_tense("fut", stems.fut,
{"ei" .. GL_TYPE, mark .. "ei" .. PT_TYPE}, {"ás" .. GL_TYPE, mark .. "ás" .. PT_TYPE},
{"á" .. GL_TYPE, mark .. "á" .. PT_TYPE}, {"emos" .. GL_TYPE, mark .. "emos" .. PT_TYPE},
{"edes" .. GL_TYPE, mark .. "eis" .. PT_TYPE}, {"ám" .. GL_TYPE, mark .. "ão" .. PT_TYPE}
)
add_tense("cond", stems.cond,
{"ia" .. GL_TYPE, mark .. "ia" .. PT_TYPE}, {"ias" .. GL_TYPE, mark .. "ias" .. PT_TYPE},
{"ia" .. GL_TYPE, mark .. "ia" .. PT_TYPE}, {"íamos" .. GL_TYPE, mark .. "íamos" .. PT_TYPE},
-- FIXME, is GL_ALTVAR correct for the mesoclitic variant of -íais?
{"íades" .. GL_TYPE, mark .. "íeis" .. PT_TYPE, "íais" .. GL_ALTVAR, mark .. "íais" .. GL_ALTVAR},
{"iam" .. GL_TYPE, mark .. "iam" .. PT_TYPE})
else
-- Don't insert forms with the mesoclitic insertion point to avoid duplication in non-reflexive verbs.
add_tense("fut", stems.fut, "ei", "ás", "á", "emos", {"edes" .. GL_TYPE, "eis" .. PT_TYPE},
{"ám" .. GL_TYPE, "ão" .. PT_TYPE})
add_tense("cond", stems.cond, "ia", "ias", "ia", "íamos",
-- FIXME, is GL_ALTVAR correct for the mesoclitic variant of -íais?
{"íades" .. GL_TYPE, "íeis" .. PT_TYPE, "íais" .. GL_ALTVAR}, "iam")
end
-- Different stems for different parts of the personal infinitive to correctly handle forms of [[sair]] and [[pôr]].
add_tense("pers_inf", base.non_prefixed_verb, "", nil, "")
add_tense("pers_inf", stems.pers_inf, nil, "**res", nil, "*rmos", "*rdes", "**rem")
end
local function add_non_finite_forms(base)
local stems = base.this_stems
local function addit(slot, stems, ending, footnotes)
add3(base, slot, stems, ending, footnotes)
end
insert_form(base, "infinitive", {form = base.verb})
-- Also insert "infinitive + reflexive pronoun" combinations if we're handling a reflexive verb. See comment below for
-- "gerund + reflexive pronoun" combinations.
if base.refl then
for _, persnum in ipairs(person_number_list) do
insert_form(base, "infinitive_" .. persnum, {form = base.verb})
end
end
-- verbs in -por have the gerund overridden
local ger_ending = base.conj == "ar" and "ando" or base.conj == "er" and "endo" or "indo"
addit("gerund", stems.pres_unstressed, ger_ending)
-- Also insert "gerund + reflexive pronoun" combinations if we're handling a reflexive verb. We insert exactly the same
-- form as for the bare gerund; later on in add_reflexive_or_fixed_clitic_to_forms(), we add the appropriate clitic
-- pronouns. It's important not to do this for non-reflexive verbs, because in that case, the clitic pronouns won't be
-- added, and {{gl-reinteg-verb form of}} will wrongly consider all these combinations as possible inflections of the bare
-- gerund. Thanks to [[User:JeffDoozan]] for this bug fix.
if base.refl then
for _, persnum in ipairs(person_number_list) do
addit("gerund_" .. persnum, stems.pres_unstressed, ger_ending)
end
end
-- Skip the long/short past participle footnotes if called from {{gl-reinteg-verb}} so they don't show in the headword.
local long_pp_footnotes =
stems.short_pp_ms and base.alternant_multiword_spec.source_template ~= "gl-reinteg-verb" and {long_pp_footnote} or nil
addit("pp_ms", stems.pp_ms, "", long_pp_footnotes)
if not base.pp_inv then
addit("pp_fs", stems.pp_fs, "", long_pp_footnotes)
addit("pp_mp", stems.pp_ms, "s", long_pp_footnotes)
addit("pp_fp", stems.pp_fs, "s", long_pp_footnotes)
end
if stems.short_pp_ms then
local short_pp_footnotes =
stems.short_pp_ms and base.alternant_multiword_spec.source_template ~= "gl-reinteg-verb" and {short_pp_footnote} or nil
addit("short_pp_ms", stems.short_pp_ms, "", short_pp_footnotes)
if not base.pp_inv then
addit("short_pp_fs", stems.short_pp_fs, "", short_pp_footnotes)
addit("short_pp_mp", stems.short_pp_ms, "s", short_pp_footnotes)
addit("short_pp_fp", stems.short_pp_fs, "s", short_pp_footnotes)
end
end
end
local function copy_forms_to_imperatives(base)
-- Copy pres3s to imperative since they are almost always the same.
insert_forms(base, "imp_2s", iut.map_forms(base.forms.pres_3s, function(form) return form end))
if not skip_slot(base, "imp_2p") then
-- Copy pres2p to imperative 2p minus -s since they are almost always the same.
-- But not if there's an override, to avoid possibly throwing an error.
insert_forms(base, "imp_2p", iut.map_forms(base.forms.pres_2p, function(form)
local form_no_s, var_codes = rmatch(form, "^(.*)s(" .. var_code_c .. "*)$")
if not form_no_s then
error("Can't derive second-person plural imperative from second-person plural present indicative " ..
"because form '" .. form .. "' doesn't end in -s")
end
return form_no_s .. var_codes
end))
end
-- Copy subjunctives to imperatives, unless there's an override for the given slot (as with the imp_1p of [[ir]]).
for _, persnum in ipairs({"3s", "1p", "3p"}) do
local from = "pres_sub_" .. persnum
local to = "imp_" .. persnum
insert_forms(base, to, iut.map_forms(base.forms[from], function(form) return form end))
end
end
local function process_slot_overrides(base, filter_slot, reflexive_only)
local overrides = reflexive_only and base.basic_reflexive_only_overrides or base.basic_overrides
for slot, forms in pairs(overrides) do
if not filter_slot or filter_slot(slot) then
add3(base, slot, forms, "", nil, "allow overrides")
end
end
end
-- Prefix `form` with `clitic`, adding fixed text `between` between them. Add links as appropriate unless the user
-- requested no links. Check whether form already has brackets (as will be the case if the form has a fixed clitic).
local function prefix_clitic_to_form(base, clitic, between, form)
if base.alternant_multiword_spec.args.noautolinkverb then
return clitic .. between .. form
else
local clitic_pref = "[[" .. clitic .. "]]" .. between
if form:find("%[%[") then
return clitic_pref .. form
else
return clitic_pref .. "[[" .. form .. "]]"
end
end
end
-- Add the appropriate clitic pronouns in `clitics` to the forms in `base_slot`. `store_cliticized_form` is a function
-- of three arguments (clitic, formobj, cliticized_form) and should store the cliticized form for the specified clitic
-- and form object.
local function suffix_clitic_to_forms(base, base_slot, clitics, store_cliticized_form)
if not base.forms[base_slot] then
-- This can happen, e.g. in only3s/only3sp/only3p verbs.
return
end
local autolink = not base.alternant_multiword_spec.args.noautolinkverb
for _, formobj in ipairs(base.forms[base_slot]) do
for _, clitic in ipairs(clitics) do
local cliticized_form
if formobj.form:find(TEMP_MESOCLITIC_INSERTION_POINT) then
-- mesoclisis in future and conditional
local infinitive, suffix = rmatch(formobj.form, "^(.*)" .. TEMP_MESOCLITIC_INSERTION_POINT .. "(.*)$")
if not infinitive then
error("Internal error: Can't find mesoclitic insertion point in slot '" .. base_slot .. "', form '" ..
formobj.form .. "'")
end
local full_form = infinitive .. suffix
if autolink and not infinitive:find("%[%[") then
infinitive = "[[" .. infinitive .. "]]"
end
cliticized_form =
autolink and infinitive .. "-[[" .. clitic .. "]]-[[" .. full_form .. "|" .. suffix .. "]]" or
infinitive .. "-" .. clitic .. "-" .. suffix
else
local clitic_suffix = autolink and "-[[" .. clitic .. "]]" or "-" .. clitic
local form_needs_link = autolink and not formobj.form:find("%[%[")
if base_slot:find("1p$") then
-- Final -s disappears: arrependíamos + nos -> arrependíamo-nos, etc.
cliticized_form = formobj.form:gsub("s$", "")
if form_needs_link then
cliticized_form = "[[" .. formobj.form .. "|" .. cliticized_form .. "]]"
end
else
cliticized_form = formobj.form
if form_needs_link then
cliticized_form = "[[" .. cliticized_form .. "]]"
end
end
cliticized_form = cliticized_form .. clitic_suffix
end
store_cliticized_form(clitic, formobj, cliticized_form)
end
end
end
-- Add a reflexive pronoun or fixed clitic (FIXME: not working), as appropriate to the base forms that were generated.
-- `do_joined` means to do only the forms where the pronoun is joined to the end of the form; otherwise, do only the
-- forms where it is not joined and precedes the form.
local function add_reflexive_or_fixed_clitic_to_forms(base, do_reflexive, do_joined)
for _, slotaccel in ipairs(base.alternant_multiword_spec.verb_slots_basic) do
local slot, accel = unpack(slotaccel)
local clitic
if not do_reflexive then
clitic = base.clitic
elseif slot:find("[123]") then
local persnum = slot:match("^.*_(.-)$")
clitic = person_number_to_reflexive_pronoun[persnum]
else
clitic = "se"
end
if base.forms[slot] then
if do_reflexive and slot:find("^pp_") or slot == "infinitive_linked" then
-- do nothing with reflexive past participles or with infinitive linked (handled at the end)
elseif slot:find("^neg_imp_") then
error("Internal error: Should not have forms set for negative imperative at this stage")
else
local slot_has_suffixed_clitic = not slot:find("_sub")
-- Maybe generate non-reflexive parts and separated syntactic variants for use in
-- {{gl-reinteg-verb form of}}. See comment in add_slots() above `need_special_verb_form_of_slots`.
-- Check for do_joined so we only run this code once.
if do_reflexive and do_joined and base.alternant_multiword_spec.source_template == "gl-reinteg-verb form of" and
-- Skip personal variants of infinitives and gerunds so we don't think [[arrependendo]] is a
-- non-reflexive equivalent of [[arrependendo-me]].
not slot:find("infinitive_") and not slot:find("gerund_") then
-- Clone the forms because we will be destructively modifying them just below, adding the reflexive
-- pronoun.
insert_forms(base, slot .. "_non_reflexive", mw.clone(base.forms[slot]))
if slot_has_suffixed_clitic then
insert_forms(base, slot .. "_variant", iut.map_forms(base.forms[slot], function(form)
return prefix_clitic_to_form(base, clitic, " ... ", form)
end))
end
end
if slot_has_suffixed_clitic then
if do_joined then
suffix_clitic_to_forms(base, slot, {clitic},
function(clitic, formobj, cliticized_form)
formobj.form = cliticized_form
end
)
end
elseif not do_joined then
-- Add clitic as separate word before all other forms.
for _, form in ipairs(base.forms[slot]) do
form.form = prefix_clitic_to_form(base, clitic, " ", form.form)
end
end
end
end
end
end
local function handle_infinitive_linked(base)
-- Compute linked versions of potential lemma slots, for use in {{gl-reinteg-verb}}.
-- We substitute the original lemma (before removing links) for forms that
-- are the same as the lemma, if the original lemma has links.
for _, slot in ipairs({"infinitive"}) do
insert_forms(base, slot .. "_linked", iut.map_forms(base.forms[slot], function(form)
if form == base.lemma and rfind(base.linked_lemma, "%[%[") then
return base.linked_lemma
else
return form
end
end))
end
end
local function generate_negative_imperatives(base)
-- Copy subjunctives to negative imperatives, preceded by "nom".
for _, persnum in ipairs(neg_imp_person_number_list) do
local from = "pres_sub_" .. persnum
local to = "neg_imp_" .. persnum
insert_forms(base, to, iut.map_forms(base.forms[from], function(form)
if base.alternant_multiword_spec.args.noautolinkverb then
return "nom " .. form
elseif form:find("%[%[") then
-- already linked, e.g. when reflexive
return "[[nom]] " .. form
else
return "[[nom]] [[" .. form .. "]]"
end
end))
end
end
-- Process specs given by the user using 'addnote[SLOTSPEC][FOOTNOTE][FOOTNOTE][...]'.
local function process_addnote_specs(base)
for _, spec in ipairs(base.addnote_specs) do
for _, slot_spec in ipairs(spec.slot_specs) do
slot_spec = "^" .. slot_spec .. "$"
for slot, forms in pairs(base.forms) do
if rfind(slot, slot_spec) then
-- To save on memory, side-effect the existing forms.
for _, form in ipairs(forms) do
form.footnotes = iut.combine_footnotes(form.footnotes, spec.footnotes)
end
end
end
end
end
end
local function add_missing_links_to_forms(base)
-- Any forms without links should get them now. Redundant ones will be stripped later.
for slot, forms in pairs(base.forms) do
for _, form in ipairs(forms) do
if not form.form:find("%[%[") then
form.form = "[[" .. form.form .. "]]"
end
end
end
end
-- Remove special characters added to future and conditional forms to indicate mesoclitic insertion points.
local function remove_mesoclitic_insertion_points(base)
for slot, forms in pairs(base.forms) do
if slot:find("^fut_") or slot:find("^cond_") then
for _, form in ipairs(forms) do
form.form = form.form:gsub(TEMP_MESOCLITIC_INSERTION_POINT, "")
end
end
end
end
-- If called from {{gl-reinteg-verb}}, remove less-recommended variants; otherwise add a footnote indicating they are
-- less recommended, and sort them last.
local function process_altvar_forms(base)
for slot, forms in pairs(base.forms) do
-- As an optimization, check if there are any less-recommended forms and don't do anything if not.
local saw_altvar = false
for _, form in ipairs(forms) do
if form.form:find(ALTVAR) then
saw_altvar = true
break
end
end
if saw_altvar then
if base.alternant_multiword_spec.source_template == "gl-reinteg-verb" then
base.forms[slot] = iut.flatmap_forms(base.forms[slot], function(form)
if form:find(ALTVAR) then
return {}
else
return {form}
end
end)
else
local existing_forms = base.forms[slot]
base.forms[slot] = {}
for _, formobj in ipairs(existing_forms) do
if not formobj.form:find(ALTVAR) then
iut.insert_form(base.forms, slot, formobj)
end
end
for _, formobj in ipairs(existing_forms) do
if formobj.form:find(ALTVAR) then
formobj.footnotes = iut.combine_footnotes(formobj.footnotes, {"[less recommended]"})
iut.insert_form(base.forms, slot, formobj)
end
end
end
end
end
end
local function conjugate_verb(base)
for _, vowel_alt in ipairs(base.vowel_alt_stems) do
construct_stems(base, vowel_alt)
add_present_indic(base)
add_present_subj(base)
end
add_finite_non_present(base)
add_non_finite_forms(base)
-- do non-reflexive non-imperative slot overrides
process_slot_overrides(base, function(slot)
return not slot:find("^imp_") and not slot:find("^neg_imp_")
end)
-- This should happen after process_slot_overrides() in case a derived slot is based on an override
-- (as with the imp_3s of [[dar]], [[estar]]).
copy_forms_to_imperatives(base)
-- do non-reflexive positive imperative slot overrides
process_slot_overrides(base, function(slot)
return slot:find("^imp_")
end)
-- We need to add joined reflexives, then joined and non-joined clitics, then non-joined reflexives, so we get
-- [[arrepende-te]] but [[nom]] [[te]] [[arrependas]].
if base.refl then
add_reflexive_or_fixed_clitic_to_forms(base, "do reflexive", "do joined")
process_slot_overrides(base, nil, "do reflexive") -- do reflexive-only slot overrides
add_reflexive_or_fixed_clitic_to_forms(base, "do reflexive", false)
end
-- This should happen after add_reflexive_or_fixed_clitic_to_forms() so negative imperatives get the reflexive pronoun
-- and clitic in them.
generate_negative_imperatives(base)
-- do non-reflexive negative imperative slot overrides
-- FIXME: What about reflexive negative imperatives?
process_slot_overrides(base, function(slot)
return slot:find("^neg_imp_")
end)
-- This should happen before add_missing_links_to_forms() so that the comparison `form == base.lemma`
-- in handle_infinitive_linked() works correctly and compares unlinked forms to unlinked forms.
handle_infinitive_linked(base)
process_addnote_specs(base)
if not base.alternant_multiword_spec.args.noautolinkverb then
add_missing_links_to_forms(base)
end
remove_mesoclitic_insertion_points(base)
process_altvar_forms(base)
end
local function parse_indicator_spec(angle_bracket_spec)
-- Store the original angle bracket spec so we can reconstruct the overall conj spec with the lemma(s) in them.
local base = {
angle_bracket_spec = angle_bracket_spec,
user_basic_overrides = {},
user_stems = {},
addnote_specs = {},
}
local function parse_err(msg)
error(msg .. ": " .. angle_bracket_spec)
end
local function fetch_footnotes(separated_group)
local footnotes
for j = 2, #separated_group - 1, 2 do
if separated_group[j + 1] ~= "" then
parse_err("Extraneous text after bracketed footnotes: '" .. table.concat(separated_group) .. "'")
end
if not footnotes then
footnotes = {}
end
table.insert(footnotes, separated_group[j])
end
return footnotes
end
local inside = angle_bracket_spec:match("^<(.*)>$")
assert(inside)
if inside == "" then
return base
end
local segments = put.parse_balanced_segment_run(inside, "[", "]")
local dot_separated_groups = put.split_alternating_runs(segments, "%.")
for i, dot_separated_group in ipairs(dot_separated_groups) do
local first_element = dot_separated_group[1]
if first_element == "addnote" then
local spec_and_footnotes = fetch_footnotes(dot_separated_group)
if #spec_and_footnotes < 2 then
parse_err("Spec with 'addnote' should be of the form 'addnote[SLOTSPEC][FOOTNOTE][FOOTNOTE][...]'")
end
local slot_spec = table.remove(spec_and_footnotes, 1)
local slot_spec_inside = rmatch(slot_spec, "^%[(.*)%]$")
if not slot_spec_inside then
parse_err("Internal error: slot_spec " .. slot_spec .. " should be surrounded with brackets")
end
local slot_specs = rsplit(slot_spec_inside, ",")
-- FIXME: Here, [[Module:it-verb]] called strip_spaces(). Generally we don't do this. Should we?
table.insert(base.addnote_specs, {slot_specs = slot_specs, footnotes = spec_and_footnotes})
elseif indicator_flags[first_element] then
if #dot_separated_group > 1 then
parse_err("No footnotes allowed with '" .. first_element .. "' spec")
end
if base[first_element] then
parse_err("Spec '" .. first_element .. "' specified twice")
end
base[first_element] = true
elseif rfind(first_element, ":") then
local colon_separated_groups = put.split_alternating_runs(dot_separated_group, "%s*:%s*")
local first_element = colon_separated_groups[1][1]
if #colon_separated_groups[1] > 1 then
parse_err("Can't attach footnotes directly to '" .. first_element .. "' spec; attach them to the " ..
"colon-separated values following the initial colon")
end
if overridable_stems[first_element] then
if base.user_stems[first_element] then
parse_err("Overridable stem '" .. first_element .. "' specified twice")
end
table.remove(colon_separated_groups, 1)
base.user_stems[first_element] = overridable_stems[first_element](colon_separated_groups,
{prefix = first_element, base = base, parse_err = parse_err, fetch_footnotes = fetch_footnotes})
else -- assume a basic override; we validate further later when the possible slots are available
if base.user_basic_overrides[first_element] then
parse_err("Basic override '" .. first_element .. "' specified twice")
end
table.remove(colon_separated_groups, 1)
base.user_basic_overrides[first_element] = allow_multiple_values(colon_separated_groups,
{prefix = first_element, base = base, parse_err = parse_err, fetch_footnotes = fetch_footnotes})
end
else
local comma_separated_groups = put.split_alternating_runs(dot_separated_group, "%s*,%s*")
for j = 1, #comma_separated_groups do
local alt = comma_separated_groups[j][1]
if not vowel_alternants[alt] then
if #comma_separated_groups == 1 then
parse_err("Unrecognized spec or vowel alternant '" .. alt .. "'")
else
parse_err("Unrecognized vowel alternant '" .. alt .. "'")
end
end
if base.vowel_alt then
for _, existing_alt in ipairs(base.vowel_alt) do
if existing_alt.form == alt then
parse_err("Vowel alternant '" .. alt .. "' specified twice")
end
end
else
base.vowel_alt = {}
end
table.insert(base.vowel_alt, {form = alt, footnotes = fetch_footnotes(comma_separated_groups[j])})
end
end
end
return base
end
-- Normalize all lemmas, substituting the pagename for blank lemmas and adding links to multiword lemmas.
local function normalize_all_lemmas(alternant_multiword_spec, head)
-- (1) Add links to all before and after text. Remember the original text so we can reconstruct the verb spec later.
if not alternant_multiword_spec.args.noautolinktext then
iut.add_links_to_before_and_after_text(alternant_multiword_spec, "remember original")
end
-- (2) Remove any links from the lemma, but remember the original form
-- so we can use it below in the 'lemma_linked' form.
iut.map_word_specs(alternant_multiword_spec, function(base)
if base.lemma == "" then
base.lemma = head
end
base.user_specified_lemma = base.lemma
base.lemma = m_links.remove_links(base.lemma)
local refl_verb = base.lemma
local verb, refl = rmatch(refl_verb, "^(.-)%-(se)$")
if not verb then
verb, refl = refl_verb, nil
end
base.user_specified_verb = verb
base.refl = refl
base.verb = base.user_specified_verb
local linked_lemma
if alternant_multiword_spec.args.noautolinkverb or base.user_specified_lemma:find("%[%[") then
linked_lemma = base.user_specified_lemma
elseif base.refl then
-- Reconstruct the linked lemma with separate links around base verb and reflexive pronoun.
linked_lemma = base.user_specified_verb == base.verb and "[[" .. base.user_specified_verb .. "]]" or
"[[" .. base.verb .. "|" .. base.user_specified_verb .. "]]"
linked_lemma = linked_lemma .. (refl and "-[[" .. refl .. "]]" or "")
else
-- Add links to the lemma so the user doesn't specifically need to, since we preserve
-- links in multiword lemmas and include links in non-lemma forms rather than allowing
-- the entire form to be a link.
linked_lemma = iut.add_links(base.user_specified_lemma)
end
base.linked_lemma = linked_lemma
end)
end
local function detect_indicator_spec(base)
if (base.only3s and 1 or 0) + (base.only3sp and 1 or 0) + (base.only3p and 1 or 0) > 1 then
error("Only one of 'only3s', 'only3sp' and 'only3p' can be specified")
end
base.forms = {}
base.stems = {}
base.basic_overrides = {}
base.basic_reflexive_only_overrides = {}
if not base.no_built_in then
for _, built_in_conj in ipairs(built_in_conjugations) do
if type(built_in_conj.match) == "function" then
base.prefix, base.non_prefixed_verb = built_in_conj.match(base.verb)
elseif built_in_conj.match:find("^%^") and rsub(built_in_conj.match, "^%^", "") == base.verb then
-- begins with ^, for exact match, and matches
base.prefix, base.non_prefixed_verb = "", base.verb
else
base.prefix, base.non_prefixed_verb = rmatch(base.verb, "^(.*)(" .. built_in_conj.match .. ")$")
end
if base.prefix then
-- we found a built-in verb
for stem, forms in pairs(built_in_conj.forms) do
if type(forms) == "function" then
forms = forms(base, base.prefix)
end
if stem:find("^refl_") then
stem = stem:gsub("^refl_", "")
if not base.alternant_multiword_spec.verb_slots_basic_map[stem] then
error("Internal error: setting for 'refl_" .. stem .. "' does not refer to a basic verb slot")
end
base.basic_reflexive_only_overrides[stem] = forms
elseif base.alternant_multiword_spec.verb_slots_basic_map[stem] then
-- an individual form override of a basic form
base.basic_overrides[stem] = forms
else
base.stems[stem] = forms
end
end
break
end
end
end
-- Override built-in-verb stems and overrides with user-specified ones.
for stem, values in pairs(base.user_stems) do
base.stems[stem] = values
end
for override, values in pairs(base.user_basic_overrides) do
if not base.alternant_multiword_spec.verb_slots_basic_map[override] then
error("Unrecognized override '" .. override .. "': " .. base.angle_bracket_spec)
end
base.basic_overrides[override] = values
end
base.prefix = base.prefix or ""
base.non_prefixed_verb = base.non_prefixed_verb or base.verb
local inf_stem, suffix = rmatch(base.non_prefixed_verb, "^(.*)([aeioô]r)$")
if not inf_stem then
error("Unrecognized infinitive: " .. base.verb)
end
base.inf_stem = inf_stem
suffix = suffix == "ôr" and "or" or suffix
base.conj = suffix
base.conj_vowel = suffix == "ar" and "á" or suffix == "ir" and "í" or "ê"
base.frontback = suffix == "ar" and "back" or "front"
if base.stems.vowel_alt then -- built-in verb with specified vowel alternation
if base.vowel_alt then
error(base.verb .. " is a recognized built-in verb, and should not have vowel alternations specified with it")
end
base.vowel_alt = iut.convert_to_general_list_form(base.stems.vowel_alt)
end
-- Propagate built-in-verb indicator flags to `base` and combine with user-specified flags.
for indicator_flag, _ in pairs(indicator_flags) do
base[indicator_flag] = base[indicator_flag] or base.stems[indicator_flag]
end
-- Convert vowel alternation indicators into stems.
local vowel_alt = base.vowel_alt or {{form = "+"}}
base.vowel_alt_stems = apply_vowel_alternations(base.inf_stem, vowel_alt)
for _, vowel_alt_stems in ipairs(base.vowel_alt_stems) do
if vowel_alt_stems.err then
error("To use '" .. vowel_alt_stems.altobj.form .. "', present stem '" .. base.prefix .. base.inf_stem .. "' " ..
vowel_alt_stems.err)
end
end
end
local function detect_all_indicator_specs(alternant_multiword_spec)
-- Propagate some settings up; some are used internally, others by [[Module:gl-headword]].
iut.map_word_specs(alternant_multiword_spec, function(base)
-- Internal indicator flags. Do these before calling detect_indicator_spec() because add_slots() uses them.
for _, prop in ipairs { "refl", "clitic" } do
if base[prop] then
alternant_multiword_spec[prop] = true
end
end
base.alternant_multiword_spec = alternant_multiword_spec
end)
add_slots(alternant_multiword_spec)
alternant_multiword_spec.vowel_alt = {}
iut.map_word_specs(alternant_multiword_spec, function(base)
detect_indicator_spec(base)
-- User-specified indicator flags. Do these after calling detect_indicator_spec() because the latter may set these
-- indicators for built-in verbs.
for prop, _ in pairs(indicator_flags) do
if base[prop] then
alternant_multiword_spec[prop] = true
end
end
-- Vowel alternants. Do these after calling detect_indicator_spec() because the latter sets base.vowel_alt for
-- built-in verbs.
if base.vowel_alt then
for _, altobj in ipairs(base.vowel_alt) do
m_table.insertIfNot(alternant_multiword_spec.vowel_alt, altobj.form)
end
end
end)
end
local function add_categories_and_annotation(alternant_multiword_spec, base, multiword_lemma)
local function insert_ann(anntype, value)
m_table.insertIfNot(alternant_multiword_spec.annotation[anntype], value)
end
local function insert_cat(cat, also_when_multiword)
-- Don't place multiword terms in categories like 'Galician verbs ending in -ar' to avoid spamming the
-- categories with such terms.
if also_when_multiword or not multiword_lemma then
m_table.insertIfNot(alternant_multiword_spec.categories, "Galician " .. cat)
end
end
if check_for_red_links and alternant_multiword_spec.source_template == "gl-reinteg-conj" and multiword_lemma then
for _, slot_and_accel in ipairs(alternant_multiword_spec.all_verb_slots) do
local slot = slot_and_accel[1]
local forms = base.forms[slot]
local must_break = false
if forms then
for _, form in ipairs(forms) do
if not form.form:find("%[%[") then
local title = mw.title.new(form.form)
if title and not title.exists then
insert_cat("verbs with red links in their inflection tables")
must_break = true
break
end
end
end
end
if must_break then
break
end
end
end
if(base.conj == "or") then
insert_cat("verbs ending in -er")
else
insert_cat("verbs ending in -" .. base.conj)
end
if base.irreg then
insert_ann("irreg", "irregular")
insert_cat("irregular verbs")
else
insert_ann("irreg", "regular")
end
if base.only3s then
insert_ann("defective", "impersonal")
insert_cat("impersonal verbs")
elseif base.only3sp then
insert_ann("defective", "third-person only")
insert_cat("third-person-only verbs")
elseif base.only3p then
insert_ann("defective", "third-person plural only")
insert_cat("third-person-plural-only verbs")
elseif base.no_pres_stressed or base.no_pres1_and_sub then
insert_ann("defective", "defective")
insert_cat("defective verbs")
else
insert_ann("defective", "regular")
end
if base.stems.short_pp then
insert_ann("short_pp", "irregular short past participle")
insert_cat("verbs with irregular short past participle")
else
insert_ann("short_pp", "regular")
end
if base.clitic then
insert_cat("verbs with lexical clitics")
end
if base.refl then
insert_cat("reflexive verbs")
end
if base.e_ei_cat then
insert_ann("vowel_alt", "''e'' may become ''ei'' when stressed")
insert_cat("verbs with e becoming ei when stressed")
elseif not base.vowel_alt then
insert_ann("vowel_alt", "non-alternating")
else
for _, alt in ipairs(base.vowel_alt) do
if alt.form == "+" then
insert_ann("vowel_alt", "non-alternating")
else
insert_ann("vowel_alt", vowel_alternant_to_desc[alt.form])
insert_cat("verbs with " .. vowel_alternant_to_cat[alt.form])
end
end
end
local cons_alt = base.stems.cons_alt
if cons_alt == nil then
if base.conj == "ar" then
if base.inf_stem:find("ç$") then
cons_alt = "c-ç"
elseif base.inf_stem:find("c$") then
cons_alt = "c-qu"
elseif base.inf_stem:find("g$") then
cons_alt = "g-gu"
end
else
if base.no_pres_stressed or base.no_pres1_and_sub then
cons_alt = nil -- no e.g. c-ç alternation in this case
elseif base.inf_stem:find("c$") then
cons_alt = "c-ç"
elseif base.inf_stem:find("qu$") then
cons_alt = "c-qu"
elseif base.inf_stem:find("g$") then
cons_alt = "g-j"
elseif base.inf_stem:find("gu$") then
cons_alt = "g-gu"
end
end
end
if cons_alt then
local desc = cons_alt .. " alternation"
insert_ann("cons_alt", desc)
insert_cat("verbs with " .. desc)
else
insert_ann("cons_alt", "non-alternating")
end
end
-- Compute the categories to add the verb to, as well as the annotation to display in the
-- conjugation title bar. We combine the code to do these functions as both categories and
-- title bar contain similar information.
local function compute_categories_and_annotation(alternant_multiword_spec)
alternant_multiword_spec.categories = {}
local ann = {}
alternant_multiword_spec.annotation = ann
ann.irreg = {}
ann.short_pp = {}
ann.defective = {}
ann.vowel_alt = {}
ann.cons_alt = {}
local multiword_lemma = false
for _, form in ipairs(alternant_multiword_spec.forms.infinitive) do
if form.form:find(" ") then
multiword_lemma = true
break
end
end
iut.map_word_specs(alternant_multiword_spec, function(base)
add_categories_and_annotation(alternant_multiword_spec, base, multiword_lemma)
end)
local ann_parts = {}
local irreg = table.concat(ann.irreg, " or ")
if irreg ~= "" and irreg ~= "regular" then
table.insert(ann_parts, irreg)
end
local short_pp = table.concat(ann.short_pp, " or ")
if short_pp ~= "" and short_pp ~= "regular" then
table.insert(ann_parts, short_pp)
end
local defective = table.concat(ann.defective, " or ")
if defective ~= "" and defective ~= "regular" then
table.insert(ann_parts, defective)
end
local vowel_alt = table.concat(ann.vowel_alt, " or ")
if vowel_alt ~= "" and vowel_alt ~= "non-alternating" then
table.insert(ann_parts, vowel_alt)
end
local cons_alt = table.concat(ann.cons_alt, " or ")
if cons_alt ~= "" and cons_alt ~= "non-alternating" then
table.insert(ann_parts, cons_alt)
end
alternant_multiword_spec.annotation = table.concat(ann_parts, "; ")
end
local function show_forms(alternant_multiword_spec)
local lemmas = alternant_multiword_spec.forms.infinitive
alternant_multiword_spec.lemmas = lemmas -- save for later use in make_table()
if alternant_multiword_spec.forms.short_pp_ms then
alternant_multiword_spec.has_short_pp = true
end
local reconstructed_verb_spec = iut.reconstruct_original_spec(alternant_multiword_spec)
local function transform_accel_obj(slot, formobj, accel_obj)
-- No accelerators for negative imperatives, which are always multiword and derived directly from the
-- present subjunctive.
if slot:find("^neg_imp") then
return nil
end
if accel_obj then
if slot:find("^pp_") then
accel_obj.form = slot
elseif slot == "gerund" then
accel_obj.form = "reinteg-gerund-" .. reconstructed_verb_spec
else
accel_obj.form = "reinteg-verb-form-" .. reconstructed_verb_spec
end
end
return accel_obj
end
-- Italicize less-recommended forms.
local function generate_link(data)
local formval_for_link = data.form.formval_for_link
if formval_for_link:find(ALTVAR) then
formval_for_link = formval_for_link:gsub(ALTVAR, "")
return m_links.full_link({lang = lang, term = formval_for_link, tr = "-", accel = data.form.accel_obj},
"term") .. iut.get_footnote_text(data.form.footnotes, data.footnote_obj)
end
end
local props = {
lang = lang,
lemmas = lemmas,
transform_accel_obj = transform_accel_obj,
canonicalize = function(form) return export.remove_variant_codes(form, "keep altvar") end,
generate_link = generate_link,
slot_list = alternant_multiword_spec.verb_slots_basic,
}
iut.show_forms(alternant_multiword_spec.forms, props)
alternant_multiword_spec.footnote_basic = alternant_multiword_spec.forms.footnote
end
local notes_template = [=[
<div class="roa-footnote-outer-div" style="width:100%;">
<div class="roa-footnote-inner-div">
{footnote}
</div></div>
]=]
local basic_table = [=[
{description}<div class="NavFrame">
<div class="NavHead" align=center> การผันรูปบูรณาการใหม่ของ {title} (See [[Appendix:Reintegrationism]])</div>
<div class="NavContent" align="left">
{\op}| class="roa-inflection-table" data-toggle-category="inflection"
|-
! class="roa-person-number-header" rowspan="2" |
! class="roa-person-number-header" colspan="3" | เอกพจน์
! class="roa-person-number-header" colspan="3" | พหูพจน์
|-
! class="roa-person-number-header" style="width:12.5%" | บุรุษที่หนึ่ง<br />(<<eu>>)
! class="roa-person-number-header" style="width:12.5%" | บุรุษที่สอง<br />(<<ti>> / <<tu>>)
! class="roa-person-number-header" style="width:12.5%" | บุรุษที่สาม<br />(<<ele>> / <<ela>> / <<você>>)
! class="roa-person-number-header" style="width:12.5%" | บุรุษที่หนึ่ง<br />(<<nós>>)
! class="roa-person-number-header" style="width:12.5%" | บุรุษที่สอง<br />(<<vós>>)
! class="roa-person-number-header" style="width:12.5%" | บุรุษที่สาม<br />(<<eles>> / <<elas>> / <<vocês>>)
|-
! class="roa-nonfinite-header" colspan="7" | ''<span title="infinitivo">รูปกริยากลาง</span>''
|-
! class="roa-nonfinite-header" | '''<span title="infinitivo impessoal">คำอบุรุษกริยา</span>'''
| colspan="6" | {infinitive}
|-
! class="roa-nonfinite-header" | '''<span title="infinitivo flexionado">คำบุรุษกริยา</span>'''
| {pers_inf_1s}
| {pers_inf_2s}
| {pers_inf_3s}
| {pers_inf_1p}
| {pers_inf_2p}
| {pers_inf_3p}
|-
! class="roa-nonfinite-header" colspan="7" | ''<span title="gerúndio">รูปกริยาเป็นนาม</span>''
|-
| class="roa-nonfinite-header" |
| colspan="6" | {gerund}
|-{pp_clause}
! class="roa-indicative-left-rail" colspan="7" | ''<span title="indicativo">มาลาบอกเล่า</span>''
|-
! class="roa-indicative-left-rail" | <span title="presente">ปัจจุบันกาล</span>
| {pres_1s}
| {pres_2s}
| {pres_3s}
| {pres_1p}
| {pres_2p}
| {pres_3p}
|-
! class="roa-indicative-left-rail" | <span title="pretérito imperfeito">ไม่สมบูรณ์</span>
| {impf_1s}
| {impf_2s}
| {impf_3s}
| {impf_1p}
| {impf_2p}
| {impf_3p}
|-
! class="roa-indicative-left-rail" | <span title="pretérito perfeito">อดีตกาลสิ้นสุด (สมบูรณ์)</span>
| {pret_1s}
| {pret_2s}
| {pret_3s}
| {pret_1p}
| {pret_2p}
| {pret_3p}
|-
! class="roa-indicative-left-rail" | <span title="pretérito mais-que-perfeito simples">อภิสมบูรณ์</span>
| {plup_1s}
| {plup_2s}
| {plup_3s}
| {plup_1p}
| {plup_2p}
| {plup_3p}
|-
! class="roa-indicative-left-rail" | <span title="futuro do presente">อนาคตกาล</span>
| {fut_1s}
| {fut_2s}
| {fut_3s}
| {fut_1p}
| {fut_2p}
| {fut_3p}
|-
! class="roa-indicative-left-rail" | <span title="condicional">มาลาเงื่อนไข</span>
| {cond_1s}
| {cond_2s}
| {cond_3s}
| {cond_1p}
| {cond_2p}
| {cond_3p}
|-
! class="roa-subjunctive-left-rail" colspan="7" | ''<span title="conjuntivo">มาลาสมมุติ</span>''
|-
! class="roa-subjunctive-left-rail" | <span title=" presente do conjuntivo">ปัจจุบันกาล</span>
| {pres_sub_1s}
| {pres_sub_2s}
| {pres_sub_3s}
| {pres_sub_1p}
| {pres_sub_2p}
| {pres_sub_3p}
|-
! class="roa-subjunctive-left-rail" | <span title="pretérito imperfeito do conjuntivo">ไม่สมบูรณ์</span>
| {impf_sub_1s}
| {impf_sub_2s}
| {impf_sub_3s}
| {impf_sub_1p}
| {impf_sub_2p}
| {impf_sub_3p}
|-
! class="roa-subjunctive-left-rail" | <span title="futuro do conjuntivo">อนาคตกาล</span>
| {fut_sub_1s}
| {fut_sub_2s}
| {fut_sub_3s}
| {fut_sub_1p}
| {fut_sub_2p}
| {fut_sub_3p}
|-
! class="roa-imperative-left-rail" colspan="7" | ''<span title="imperativo">มาลาสั่ง</span>''
|-
! class="roa-imperative-left-rail" | <span title="imperativo afirmativo">เชิงยืนยัน</span>
| rowspan="2" |
| {imp_2s}
| {imp_3s}
| {imp_1p}
| {imp_2p}
| {imp_3p}
|-
! class="roa-imperative-left-rail" | <span title="imperativo negativo">เชิงปฏิเสธ</span> (<<nom>>)
| {neg_imp_2s}
| {neg_imp_3s}
| {neg_imp_1p}
| {neg_imp_2p}
| {neg_imp_3p}
|{\cl}{notes_clause}</div></div>
]=]
local double_pp_template = [=[
! class="roa-nonfinite-header" colspan="7" | ''<span title="particípio irregular">รูปกริยาขยายอดีตกาลสั้น</span>''
|-
! class="roa-nonfinite-header" | เพศชาย
| colspan="3" | {short_pp_ms}
| colspan="3" | {short_pp_mp}
|-
! class="roa-nonfinite-header" | เพศหญิง
| colspan="3" | {short_pp_fs}
| colspan="3" | {short_pp_fp}
|-
! class="roa-nonfinite-header" colspan="7" | ''<span title="particípio regular">รูปกริยาขยายอดีตกาลยาว</span>''
|-
! class="roa-nonfinite-header" | เพศชาย
| colspan="3" | {pp_ms}
| colspan="3" | {pp_mp}
|-
! class="roa-nonfinite-header" | เพศหญิง
| colspan="3" | {pp_fs}
| colspan="3" | {pp_fp}
|-]=]
local single_pp_template = [=[
! class="roa-nonfinite-header" colspan="7" | ''<span title="particípio passado">รูปกริยาขยายอดีตกาล</span>''
|-
! class="roa-nonfinite-header" | เพศชาย
| colspan="3" | {pp_ms}
| colspan="3" | {pp_mp}
|-
! class="roa-nonfinite-header" | เพศหญิง
| colspan="3" | {pp_fs}
| colspan="3" | {pp_fp}
|-]=]
local function make_table(alternant_multiword_spec)
local forms = alternant_multiword_spec.forms
forms.title = link_term(alternant_multiword_spec.lemmas[1].form)
if alternant_multiword_spec.annotation ~= "" then
forms.title = forms.title .. " (" .. alternant_multiword_spec.annotation .. ")"
end
forms.description = ""
-- Format the table.
forms.footnote = alternant_multiword_spec.footnote_basic
forms.notes_clause = forms.footnote ~= "" and m_string_utilities.format(notes_template, forms) or ""
-- has_short_pp is computed in show_forms().
local pp_template = alternant_multiword_spec.has_short_pp and double_pp_template or single_pp_template
forms.pp_clause = m_string_utilities.format(pp_template, forms)
local table_with_pronouns = rsub(basic_table, "<<(.-)>>", link_term)
return require("Module:TemplateStyles")("Module:roa-verb/style.css") .. m_string_utilities.format(table_with_pronouns, forms)
end
-- Externally callable function to parse and conjugate a verb given user-specified arguments.
-- Return value is WORD_SPEC, an object where the conjugated forms are in `WORD_SPEC.forms`
-- for each slot. If there are no values for a slot, the slot key will be missing. The value
-- for a given slot is a list of objects {form=FORM, footnotes=FOOTNOTES}.
function export.do_generate_forms(args, source_template, headword_head)
local PAGENAME = mw.loadData("Module:headword/data").pagename
local function in_template_space()
return mw.title.getCurrentTitle().nsText == "แม่แบบ"
end
-- Determine the verb spec we're being asked to generate the conjugation of. This may be taken from the
-- current page title or the value of |pagename=; but not when called from {{gl-reinteg-verb form of}}, where the
-- page title is a non-lemma form. Note that the verb spec may omit the infinitive; e.g. it may be "<i-e>".
-- For this reason, we use the value of `pagename` computed here down below, when calling normalize_all_lemmas().
local pagename = source_template ~= "gl-reinteg-verb form of" and args.pagename or PAGENAME
local head = headword_head or pagename
local arg1 = args[1]
if not arg1 then
if (pagename == "gl-reinteg-conj" or pagename == "gl-reinteg-verb") and in_template_space() then
arg1 = "traguer"
elseif pagename == "gl-reinteg-verb form of" and in_template_space() then
arg1 = "amar"
else
arg1 = "<>"
end
end
-- When called from {{gl-reinteg-verb form of}}, determine the non-lemma form whose inflections we're being asked to
-- determine. This normally comes from the page title or the value of |pagename=.
local verb_form_of_form
if source_template == "gl-reinteg-verb form of" then
verb_form_of_form = args.pagename
if not verb_form_of_form then
if PAGENAME == "gl-reinteg-verb form of" and in_template_space() then
verb_form_of_form = "ame"
else
verb_form_of_form = PAGENAME
end
end
end
local incorporated_headword_head_into_lemma = false
if arg1:find("^<.*>$") then -- missing lemma
if head:find(" ") then
-- If multiword lemma, try to add arg spec after the first word.
-- Try to preserve the brackets in the part after the verb, but don't do it
-- if there aren't the same number of left and right brackets in the verb
-- (which means the verb was linked as part of a larger expression).
local refl_clitic_verb, post = rmatch(head, "^(.-)( .*)$")
local left_brackets = rsub(refl_clitic_verb, "[^%[]", "")
local right_brackets = rsub(refl_clitic_verb, "[^%]]", "")
if #left_brackets == #right_brackets then
arg1 = iut.remove_redundant_links(refl_clitic_verb) .. arg1 .. post
incorporated_headword_head_into_lemma = true
else
-- Try again using the form without links.
local linkless_head = m_links.remove_links(head)
if linkless_head:find(" ") then
refl_clitic_verb, post = rmatch(linkless_head, "^(.-)( .*)$")
arg1 = refl_clitic_verb .. arg1 .. post
else
error("Unable to incorporate <...> spec into explicit head due to a multiword linked verb or " ..
"unbalanced brackets; please include <> explicitly: " .. arg1)
end
end
else
-- Will be incorporated through `head` below in the call to normalize_all_lemmas().
incorporated_headword_head_into_lemma = true
end
end
local function split_bracketed_runs_into_words(bracketed_runs)
return put.split_alternating_runs(bracketed_runs, " ", "preserve splitchar")
end
local parse_props = {
parse_indicator_spec = parse_indicator_spec,
-- Split words only on spaces, not on hyphens, because that messes up reflexive verb parsing.
split_bracketed_runs_into_words = split_bracketed_runs_into_words,
allow_default_indicator = true,
allow_blank_lemma = true,
}
local alternant_multiword_spec = iut.parse_inflected_text(arg1, parse_props)
alternant_multiword_spec.pos = pos or "verbs"
alternant_multiword_spec.args = args
alternant_multiword_spec.source_template = source_template
alternant_multiword_spec.verb_form_of_form = verb_form_of_form
alternant_multiword_spec.incorporated_headword_head_into_lemma = incorporated_headword_head_into_lemma
normalize_all_lemmas(alternant_multiword_spec, head)
detect_all_indicator_specs(alternant_multiword_spec)
local inflect_props = {
slot_list = alternant_multiword_spec.all_verb_slots,
inflect_word_spec = conjugate_verb,
get_variants = function(form) return rsub(form, not_var_code_c, "") end,
-- We add links around the generated verbal forms rather than allow the entire multiword
-- expression to be a link, so ensure that user-specified links get included as well.
include_user_specified_links = true,
}
iut.inflect_multiword_or_alternant_multiword_spec(alternant_multiword_spec, inflect_props)
-- Remove redundant brackets around entire forms.
for slot, forms in pairs(alternant_multiword_spec.forms) do
for _, form in ipairs(forms) do
form.form = iut.remove_redundant_links(form.form)
end
end
compute_categories_and_annotation(alternant_multiword_spec)
if args.json and source_template == "gl-reinteg-conj" then
-- Remove variant codes to avoid causing problems with bots.
for slot, forms in pairs(alternant_multiword_spec.forms) do
for _, form in ipairs(forms) do
form.form = export.remove_variant_codes(form.form)
end
end
return require("Module:JSON").toJSON(alternant_multiword_spec.forms)
end
return alternant_multiword_spec
end
-- Entry point for {{gl-reinteg-conj}}. Template-callable function to parse and conjugate a verb given
-- user-specified arguments and generate a displayable table of the conjugated forms.
function export.show(frame)
local parent_args = frame:getParent().args
local params = {
[1] = {},
["noautolinktext"] = {type = "boolean"},
["noautolinkverb"] = {type = "boolean"},
["pagename"] = {}, -- for testing/documentation pages
["json"] = {type = "boolean"}, -- for bot use
}
local args = require("Module:parameters").process(parent_args, params)
local alternant_multiword_spec = export.do_generate_forms(parent_args, "gl-reinteg-conj")
if type(alternant_multiword_spec) == "string" then
-- JSON return value
return alternant_multiword_spec
end
show_forms(alternant_multiword_spec)
return make_table(alternant_multiword_spec) ..
require("Module:utilities").format_categories(alternant_multiword_spec.categories, lang, nil, nil, force_cat)
end
return export
go8phokshii8o1lehha2syo45r82lgj
มอดูล:etymon/categories
828
2297439
5729433
5684447
2026-07-20T09:31:15Z
Octahedron80
267
5729433
Scribunto
text/plain
local export = {}
local loader = require("Module:module loader")
local M = loader.init({
require = {
etymology = "Module:etymology",
affix = "Module:affix",
etymology_specialized = "Module:etymology/specialized",
},
loadData = {
data = "Module:etymon/data",
},
})
-- Evaluate whether a keyword is transitive for a given term
local function is_transitive(transitive_mode, page_lang, term_lang)
if transitive_mode == M.data.TRANSITIVE.ALWAYS then
return true
elseif transitive_mode == M.data.TRANSITIVE.NEVER then
return false
elseif transitive_mode == M.data.TRANSITIVE.CROSS_LANG then
return page_lang:getCode() ~= term_lang:getCode()
elseif transitive_mode == M.data.TRANSITIVE.CROSS_LANG_NO_INTERNAL_SOURCE then
return page_lang:getCode() ~= term_lang:getCode()
end
error("Unknown transitive mode: " .. tostring(transitive_mode))
end
-- Get keyword config with language-specific overrides
local function get_keyword_config(keyword, lang_exc)
local base_config = M.data.keywords[keyword]
if not base_config then
return nil -- Invalid keyword
end
local overrides = lang_exc and lang_exc.keyword_overrides and lang_exc.keyword_overrides[keyword]
if not overrides then
return base_config
end
-- Merge overrides into base config
local merged = {}
for k, v in pairs(base_config) do
merged[k] = v
end
for k, v in pairs(overrides) do
merged[k] = v
end
return merged
end
function export.get_cat_name(source)
local _, cat_name = M.etymology.get_display_and_cat_name(source, true)
return cat_name
end
-- Normalize affix type aliases
local aftype_aliases = {
["pre"] = "อุปสรรค",
["suf"] = "ปัจจัย",
["in"] = "อาคม",
["inter"] = "หน่วยคำเติมเชื่อม",
["circum"] = "หน่วยคำเติมคร่อม",
["naf"] = "ไม่ใช่หน่วยคำเติม",
["root"] = "ไม่ใช่หน่วยคำเติม",
["prefix"] = "อุปสรรค",
["suffix"] = "ปัจจัย",
["infix"] = "อาคม",
["interfix"] = "หน่วยคำเติมเชื่อม",
["circumfix"] = "หน่วยคำเติมคร่อม",
["non-affix"] = "ไม่ใช่หน่วยคำเติม",
["ราก"] = "ไม่ใช่หน่วยคำเติม",
}
-- Collect affix categories from top-level group containers
local function collect_affix_categories(node, page_lang, available_etymon_ids, senseid_parent_etymon, lang_exc)
local parts = {}
local part_index = 1
for _, container in ipairs(node.children or {}) do
local config = container.keyword_info
if config and config.affix_categories then
for _, term in ipairs(container.terms or {}) do
if not term.unknown_term then
local part_data = {
term = term.title,
tr = term.tr,
ts = term.ts,
alt = term.alt,
itemno = part_index,
orig_index = part_index
}
-- Determine affix type: explicit aftype > pos=root > auto-detect
local aftype = term.aftype
if aftype then
aftype = aftype_aliases[aftype] or aftype
part_data.type = aftype
elseif term.args and term.args.pos and (term.args.pos == "root" or term.args.pos == "ราก") then
part_data.type = "ไม่ใช่หน่วยคำเติม"
end
if term.lang:getCode() ~= page_lang:getCode() then
part_data.lang = term.lang
end
local target_ids = available_etymon_ids[term.target_key]
local has_multiple_ids = target_ids and #target_ids > 1
local id_exists_in_disambiguation = false
local matched_id = nil
-- Count available senseids for the target page
local senseid_count = 0
local target_prefix = term.target_key .. ":"
if senseid_parent_etymon then
for key, _ in pairs(senseid_parent_etymon) do
if key:sub(1, #target_prefix) == target_prefix then
senseid_count = senseid_count + 1
end
end
end
local has_multiple_senseids = senseid_count > 1
if term.id then
-- Check if user provided a valid senseid
local senseid_key = term.target_key .. ":" .. term.id
if senseid_parent_etymon and senseid_parent_etymon[senseid_key] then
if has_multiple_senseids then
-- Ambiguous senseid: use senseid
matched_id = term.id
id_exists_in_disambiguation = true
elseif has_multiple_ids then
-- Unique senseid but ambiguous etymon: use etymon ID
matched_id = term.etymon_id or term.id
id_exists_in_disambiguation = true
end
else
-- Check if user provided a valid etymon ID
if has_multiple_ids and target_ids then
for _, id_data in ipairs(target_ids) do
local stored_id = type(id_data) == "table" and id_data.id or id_data
if stored_id == term.id then
-- Ambiguous etymon: use etymon ID
id_exists_in_disambiguation = true
matched_id = term.id
break
end
end
end
-- Fallback: check resolved etymon_id (e.g. from previous steps)
if not id_exists_in_disambiguation and has_multiple_ids and term.etymon_id and target_ids then
for _, id_data in ipairs(target_ids) do
local stored_id = type(id_data) == "table" and id_data.id or id_data
if stored_id == term.etymon_id then
id_exists_in_disambiguation = true
matched_id = term.etymon_id
break
end
end
end
end
end
-- Use the matched ID if found
if term.override or id_exists_in_disambiguation then
part_data.id = matched_id or term.id
end
table.insert(parts, part_data)
part_index = part_index + 1
end
end
end
end
if #parts == 0 then return {} end
local affix_data = {
lang = page_lang,
parts = parts,
pos = "ศัพท์",
sort_key = nil
}
local affix_categories = M.affix.get_affix_categories_only(affix_data)
local result = {}
for _, cat in ipairs(affix_categories) do
if type(cat) == "table" then
table.insert(result, cat.cat)
else
table.insert(result, cat)
end
end
return result
end
-- Add borrowing-related categories (top-level only)
local function collect_borrowing_categories(categories, page_lang, term, config)
if config.borrowing_type == "borrowed" then
local temp_categories = {}
M.etymology.insert_borrowed_cat(temp_categories, page_lang, term.lang)
for _, cat in ipairs(temp_categories) do
categories[cat] = true
end
end
if config.specialized_borrowing then
local result = M.etymology_specialized.specialized_borrowing {
bortype = config.specialized_borrowing,
lang = page_lang,
sources = { term.lang },
terms = { { lang = term.lang, term = "-" } },
notext = true,
nocat = false,
}
for cat_name in result:gmatch("%[%[Category:([^%]]+)%]%]") do
categories[cat_name] = true
end
end
end
-- Add source-based derivation categories (top-level only)
local function collect_source_derivation_categories(categories, page_lang, term, config)
if not config.source_category_type then
return
end
local temp_categories = {}
M.etymology.insert_source_cat_get_display {
lang = page_lang,
source = term.lang,
categories = temp_categories,
borrowing_type = config.source_category_type,
nocat = false,
}
for _, cat in ipairs(temp_categories) do
categories[cat] = true
end
end
-- Add source language categories
local function collect_source_categories(categories, page_lang, term, chain, get_norm_lang_func)
if page_lang:getCode() == get_norm_lang_func(term.lang):getCode() then
return
end
local temp_categories = {}
M.etymology.insert_source_cat_get_display {
lang = page_lang,
source = get_norm_lang_func(term.lang),
categories = temp_categories,
nocat = false,
}
for _, cat in ipairs(temp_categories) do
categories[cat] = true
end
if chain.inherited then
temp_categories = {}
M.etymology.insert_source_cat_get_display {
lang = page_lang,
source = get_norm_lang_func(term.lang),
categories = temp_categories,
borrowing_type = "สืบทอด",
nocat = false,
}
for _, cat in ipairs(temp_categories) do
categories[cat] = true
end
end
end
-- Add root/word categories
local function collect_pos_categories(categories, page_lang, root_title, term, available_etymon_ids, chain,
get_norm_lang_func, lang_exc, keyword)
local pos_types = { root = "ราก", word = "คำ" }
-- Determine pos: from term's postype, keyword's pos_override, or args.pos
local pos
local config = get_keyword_config(keyword, lang_exc)
if term.postype then
-- Term-level postype modifier takes highest priority
pos = term.postype
elseif config and config.pos_override then
pos = config.pos_override
elseif type(term.args) == "table" and term.args.pos then
pos = term.args.pos
end
local pos_type = pos_types[pos]
if not pos_type or term.unknown_term then
return
end
-- Skip root/word categories for descendants of affix groups
-- if pos_type then
-- return
-- end
local same_language = get_norm_lang_func(page_lang):getFullCode() == get_norm_lang_func(term.lang):getFullCode()
-- Skip self-references
if same_language and root_title == term.title then
return
end
-- Use makeEntryName to strip diacritics for category names
local entry_name = term.lang:makeEntryName(term.title)
local lang_name = page_lang:getCanonicalName()
local cat_name
if chain.passed_through then
local etymon_lang_name = export.get_cat_name(term.lang)
cat_name = lang_name .. " terms derived from the " .. etymon_lang_name .. " " .. pos_type .. " " .. entry_name
else
cat_name = lang_name .. " terms belonging to the " .. pos_type .. " " .. entry_name
end
-- Add ID disambiguation if needed (for roots/words: use etymon_id if resolved via senseid, otherwise use id)
local target_ids = available_etymon_ids[term.target_key]
local effective_id = term.etymon_id or term.id -- etymon_id if senseid, otherwise id is already an etymon id
if target_ids and effective_id then
local same_pos_count = 0
for _, id_data in ipairs(target_ids) do
if type(id_data) == "table" and id_data.pos == pos then
same_pos_count = same_pos_count + 1
end
end
if same_pos_count > 1 then
cat_name = cat_name .. " (" .. effective_id .. ")"
end
end
categories[cat_name] = true
end
-- Compute chain state for a term based on parent chain and keyword config
-- Hyphen patterns for affix detection (regular hyphen + script-specific)
local AFFIX_HYPHEN_PATTERN = "[%-%־ـ᠊]" -- regular hyphen, Hebrew maqqef, Arabic tatweel, Mongolian hyphen
-- Check if a term is an actual affix (not a non-affix member of an affix group)
local function is_actual_affix(term)
-- Check explicit aftype modifier
if term.aftype then
local normalized = aftype_aliases[term.aftype] or term.aftype
return normalized ~= "ไม่ใช่หน่วยคำเติม"
end
-- Check if pos=root (treated as non-affix)
if term.args and term.args.pos and (term.args.pos == "root" or term.args.pos == "ราก") then
return false
end
-- Auto-detect by hyphen: prefix ends with -, suffix starts with -, etc.
if term.title then
local title = term.title
-- Strip leading * for reconstructed terms before checking hyphens
title = title:gsub("^%*", "")
-- Check for hyphens at start or end (handles script-specific hyphens too)
if title:match("^" .. AFFIX_HYPHEN_PATTERN) or title:match(AFFIX_HYPHEN_PATTERN .. "$") then
return true
end
end
-- Default: not an affix
return false
end
local function compute_category_chain(parent_chain, config, page_lang, term_lang, get_norm_lang_func, parent_term_lang, term)
-- Track if we're inside an actual affix (for suppressing root categories on descendants)
-- Only set if the term is an actual affix (prefix, suffix, etc.), not a non-affix member
local inside_affix = parent_chain.inside_affix
if config.affix_categories and term and is_actual_affix(term) then
inside_affix = true
end
-- If no_child_categories is set, disable everything
if config.no_child_categories then
return {
passed_through = parent_chain.passed_through or page_lang:getCode() ~= get_norm_lang_func(term_lang):getCode(),
inherited = false,
source = false,
pos = false,
recurse = false,
inside_affix = inside_affix,
}
end
local term_is_transitive = is_transitive(config.transitive, page_lang, term_lang)
local new_source = parent_chain.source and term_is_transitive
-- For CROSS_LANG_NO_INTERNAL_SOURCE: track internal derivation language context
-- Check if this term is internal relative to parent term's language (if parent_term_lang provided)
-- or relative to page language (if no parent_term_lang)
local internal_lang = parent_chain.internal_lang
local is_internal_in_context = false
if config.transitive == M.data.TRANSITIVE.CROSS_LANG_NO_INTERNAL_SOURCE then
local check_lang = parent_term_lang or page_lang
local term_lang_code = get_norm_lang_func(term_lang):getCode()
local check_lang_code = get_norm_lang_func(check_lang):getCode()
if internal_lang then
-- Already in an internal derivation context: check if this term is also internal
is_internal_in_context = term_lang_code == internal_lang
else
-- Check if this term is internal relative to parent term (or page if no parent)
is_internal_in_context = term_lang_code == check_lang_code
end
end
-- Source chain behavior for CROSS_LANG_NO_INTERNAL_SOURCE
if config.transitive == M.data.TRANSITIVE.CROSS_LANG_NO_INTERNAL_SOURCE then
if is_internal_in_context then
-- Internal derivation
new_source = false
internal_lang = get_norm_lang_func(term_lang):getCode()
else
-- Cross-language
new_source = parent_chain.source and term_is_transitive
internal_lang = nil
end
end
local new_pos = parent_chain.pos
return {
passed_through = parent_chain.passed_through or page_lang:getCode() ~= get_norm_lang_func(term_lang):getCode(),
inherited = parent_chain.inherited and config.inherited_chain,
source = new_source,
pos = new_pos,
internal_lang = internal_lang,
recurse = new_source or new_pos,
inside_affix = inside_affix,
}
end
function export.render(opts)
opts = opts or {}
local data_tree = opts.data_tree
local page_lang = opts.page_lang
local available_etymon_ids = opts.available_etymon_ids
local senseid_parent_etymon = opts.senseid_parent_etymon
local get_norm_lang_func = opts.get_norm_lang_func
local lang_exc = opts.lang_exc
local categories = {}
local seen = {}
local lang_name = page_lang:getCanonicalName()
local root_title = data_tree.title
-- Collect the tree recursively
local function collect(node, parent_chain, is_toplevel)
-- Avoid processing same node twice
if not node.unknown_term and node.title then
local key = node.lang:getFullCode() .. ":" .. (node.title or "") .. ":" .. (node.id or "")
if seen[key] then return end
seen[key] = true
end
-- Collect affix categories at top level only
if is_toplevel then
local affix_cats = collect_affix_categories(node, page_lang, available_etymon_ids, senseid_parent_etymon, lang_exc)
for _, cat in ipairs(affix_cats) do
categories[lang_name .. " " .. cat] = true
end
end
-- Process each container
for _, container in ipairs(node.children or {}) do
local keyword = container.keyword
local config = get_keyword_config(keyword, lang_exc)
-- Skip invalid keywords
if config then
-- Process each term in the container
for _, term in ipairs(container.terms or {}) do
local term_chain = compute_category_chain(parent_chain, config, page_lang, term.lang, get_norm_lang_func, node.lang, term)
local no_child_categories = config.no_child_categories == true
local term_is_transitive = is_transitive(config.transitive, page_lang, term.lang)
-- Top-level only processing
if is_toplevel then
-- Missing/ambiguous etymon tracking
if not term.unknown_term and (term.status == M.data.STATUS.MISSING or term.status == M.data.STATUS.REDLINK) then
categories[lang_name .. " entries referencing missing etymons"] = true
end
if not term.unknown_term and term.status == M.data.STATUS.AMBIGUOUS then
categories[lang_name .. " entries referencing ambiguous etymons"] = true
end
-- Top-level category (e.g., "undefined derivations")
if config.toplevel_category then
categories[lang_name .. " " .. config.toplevel_category] = true
end
-- Borrowing categories (bor, lbor, slbor, ubor, obor)
if config.borrowing_type or config.specialized_borrowing then
collect_borrowing_categories(categories, page_lang, term, config)
end
-- Borrowing categories from <bor>, <lbor>, or <slbor> modifiers on :af terms
if keyword == "af" then
if term.bor then
local bor_config = { borrowing_type = "borrowed" }
collect_borrowing_categories(categories, page_lang, term, bor_config)
elseif term.lbor then
local bor_config = { specialized_borrowing = "learned" }
collect_borrowing_categories(categories, page_lang, term, bor_config)
elseif term.slbor then
local bor_config = { specialized_borrowing = "semi-learned" }
collect_borrowing_categories(categories, page_lang, term, bor_config)
end
end
-- Source-based derivation categories (sl, calque, pcal)
if config.source_category_type then
collect_source_derivation_categories(categories, page_lang, term, config)
end
-- Skip all child categorisation if no_child_categories is set
if not no_child_categories then
-- Source categories only if transitive
if term_is_transitive then
collect_source_categories(categories, page_lang, term, term_chain, get_norm_lang_func)
end
-- Pos categories always (unless no_child_categories)
collect_pos_categories(categories, page_lang, root_title, term, available_etymon_ids, term_chain,
get_norm_lang_func, lang_exc, keyword)
end
else
-- Below top level, respect the parent chain
if parent_chain.source then
collect_source_categories(categories, page_lang, term, term_chain, get_norm_lang_func)
end
if parent_chain.pos then
collect_pos_categories(categories, page_lang, root_title, term, available_etymon_ids, term_chain,
get_norm_lang_func, lang_exc, keyword)
end
end
-- Recurse into term's children if needed and status allows
if term_chain.recurse and (term.status == M.data.STATUS.OK or term.status == M.data.STATUS.INLINE) then
collect(term, term_chain, false)
end
end
end
end
end
-- Initial chain state
local initial_chain = {
passed_through = false,
inherited = true,
source = true,
pos = true,
internal_lang = nil,
recurse = true,
inside_affix = false,
}
collect(data_tree, initial_chain, true)
local cat_list = {}
for cat in pairs(categories) do
table.insert(cat_list, cat)
end
return cat_list
end
return export
t4cjrvne2trml96osi7twmn9k16ts00
5729434
5729433
2026-07-20T09:33:30Z
Octahedron80
267
5729434
Scribunto
text/plain
local export = {}
local loader = require("Module:module loader")
local M = loader.init({
require = {
etymology = "Module:etymology",
affix = "Module:affix",
etymology_specialized = "Module:etymology/specialized",
},
loadData = {
data = "Module:etymon/data",
},
})
-- Evaluate whether a keyword is transitive for a given term
local function is_transitive(transitive_mode, page_lang, term_lang)
if transitive_mode == M.data.TRANSITIVE.ALWAYS then
return true
elseif transitive_mode == M.data.TRANSITIVE.NEVER then
return false
elseif transitive_mode == M.data.TRANSITIVE.CROSS_LANG then
return page_lang:getCode() ~= term_lang:getCode()
elseif transitive_mode == M.data.TRANSITIVE.CROSS_LANG_NO_INTERNAL_SOURCE then
return page_lang:getCode() ~= term_lang:getCode()
end
error("Unknown transitive mode: " .. tostring(transitive_mode))
end
-- Get keyword config with language-specific overrides
local function get_keyword_config(keyword, lang_exc)
local base_config = M.data.keywords[keyword]
if not base_config then
return nil -- Invalid keyword
end
local overrides = lang_exc and lang_exc.keyword_overrides and lang_exc.keyword_overrides[keyword]
if not overrides then
return base_config
end
-- Merge overrides into base config
local merged = {}
for k, v in pairs(base_config) do
merged[k] = v
end
for k, v in pairs(overrides) do
merged[k] = v
end
return merged
end
function export.get_cat_name(source)
local _, cat_name = M.etymology.get_display_and_cat_name(source, true)
return cat_name
end
-- Normalize affix type aliases
local aftype_aliases = {
["pre"] = "อุปสรรค",
["suf"] = "ปัจจัย",
["in"] = "อาคม",
["inter"] = "หน่วยคำเติมเชื่อม",
["circum"] = "หน่วยคำเติมคร่อม",
["naf"] = "ไม่ใช่หน่วยคำเติม",
["root"] = "ไม่ใช่หน่วยคำเติม",
["prefix"] = "อุปสรรค",
["suffix"] = "ปัจจัย",
["infix"] = "อาคม",
["interfix"] = "หน่วยคำเติมเชื่อม",
["circumfix"] = "หน่วยคำเติมคร่อม",
["non-affix"] = "ไม่ใช่หน่วยคำเติม",
["ราก"] = "ไม่ใช่หน่วยคำเติม",
}
-- Collect affix categories from top-level group containers
local function collect_affix_categories(node, page_lang, available_etymon_ids, senseid_parent_etymon, lang_exc)
local parts = {}
local part_index = 1
for _, container in ipairs(node.children or {}) do
local config = container.keyword_info
if config and config.affix_categories then
for _, term in ipairs(container.terms or {}) do
if not term.unknown_term then
local part_data = {
term = term.title,
tr = term.tr,
ts = term.ts,
alt = term.alt,
itemno = part_index,
orig_index = part_index
}
-- Determine affix type: explicit aftype > pos=root > auto-detect
local aftype = term.aftype
if aftype then
aftype = aftype_aliases[aftype] or aftype
part_data.type = aftype
elseif term.args and term.args.pos and (term.args.pos == "root" or term.args.pos == "ราก") then
part_data.type = "ไม่ใช่หน่วยคำเติม"
end
if term.lang:getCode() ~= page_lang:getCode() then
part_data.lang = term.lang
end
local target_ids = available_etymon_ids[term.target_key]
local has_multiple_ids = target_ids and #target_ids > 1
local id_exists_in_disambiguation = false
local matched_id = nil
-- Count available senseids for the target page
local senseid_count = 0
local target_prefix = term.target_key .. ":"
if senseid_parent_etymon then
for key, _ in pairs(senseid_parent_etymon) do
if key:sub(1, #target_prefix) == target_prefix then
senseid_count = senseid_count + 1
end
end
end
local has_multiple_senseids = senseid_count > 1
if term.id then
-- Check if user provided a valid senseid
local senseid_key = term.target_key .. ":" .. term.id
if senseid_parent_etymon and senseid_parent_etymon[senseid_key] then
if has_multiple_senseids then
-- Ambiguous senseid: use senseid
matched_id = term.id
id_exists_in_disambiguation = true
elseif has_multiple_ids then
-- Unique senseid but ambiguous etymon: use etymon ID
matched_id = term.etymon_id or term.id
id_exists_in_disambiguation = true
end
else
-- Check if user provided a valid etymon ID
if has_multiple_ids and target_ids then
for _, id_data in ipairs(target_ids) do
local stored_id = type(id_data) == "table" and id_data.id or id_data
if stored_id == term.id then
-- Ambiguous etymon: use etymon ID
id_exists_in_disambiguation = true
matched_id = term.id
break
end
end
end
-- Fallback: check resolved etymon_id (e.g. from previous steps)
if not id_exists_in_disambiguation and has_multiple_ids and term.etymon_id and target_ids then
for _, id_data in ipairs(target_ids) do
local stored_id = type(id_data) == "table" and id_data.id or id_data
if stored_id == term.etymon_id then
id_exists_in_disambiguation = true
matched_id = term.etymon_id
break
end
end
end
end
end
-- Use the matched ID if found
if term.override or id_exists_in_disambiguation then
part_data.id = matched_id or term.id
end
table.insert(parts, part_data)
part_index = part_index + 1
end
end
end
end
if #parts == 0 then return {} end
local affix_data = {
lang = page_lang,
parts = parts,
pos = "ศัพท์",
sort_key = nil
}
local affix_categories = M.affix.get_affix_categories_only(affix_data)
local result = {}
for _, cat in ipairs(affix_categories) do
if type(cat) == "table" then
table.insert(result, cat.cat)
else
table.insert(result, cat)
end
end
return result
end
-- Add borrowing-related categories (top-level only)
local function collect_borrowing_categories(categories, page_lang, term, config)
if config.borrowing_type == "ยืมมา" then
local temp_categories = {}
M.etymology.insert_borrowed_cat(temp_categories, page_lang, term.lang)
for _, cat in ipairs(temp_categories) do
categories[cat] = true
end
end
if config.specialized_borrowing then
local result = M.etymology_specialized.specialized_borrowing {
bortype = config.specialized_borrowing,
lang = page_lang,
sources = { term.lang },
terms = { { lang = term.lang, term = "-" } },
notext = true,
nocat = false,
}
for cat_name in result:gmatch("%[%[Category:([^%]]+)%]%]") do
categories[cat_name] = true
end
end
end
-- Add source-based derivation categories (top-level only)
local function collect_source_derivation_categories(categories, page_lang, term, config)
if not config.source_category_type then
return
end
local temp_categories = {}
M.etymology.insert_source_cat_get_display {
lang = page_lang,
source = term.lang,
categories = temp_categories,
borrowing_type = config.source_category_type,
nocat = false,
}
for _, cat in ipairs(temp_categories) do
categories[cat] = true
end
end
-- Add source language categories
local function collect_source_categories(categories, page_lang, term, chain, get_norm_lang_func)
if page_lang:getCode() == get_norm_lang_func(term.lang):getCode() then
return
end
local temp_categories = {}
M.etymology.insert_source_cat_get_display {
lang = page_lang,
source = get_norm_lang_func(term.lang),
categories = temp_categories,
nocat = false,
}
for _, cat in ipairs(temp_categories) do
categories[cat] = true
end
if chain.inherited then
temp_categories = {}
M.etymology.insert_source_cat_get_display {
lang = page_lang,
source = get_norm_lang_func(term.lang),
categories = temp_categories,
borrowing_type = "สืบทอด",
nocat = false,
}
for _, cat in ipairs(temp_categories) do
categories[cat] = true
end
end
end
-- Add root/word categories
local function collect_pos_categories(categories, page_lang, root_title, term, available_etymon_ids, chain,
get_norm_lang_func, lang_exc, keyword)
local pos_types = { root = "ราก", word = "คำ" }
-- Determine pos: from term's postype, keyword's pos_override, or args.pos
local pos
local config = get_keyword_config(keyword, lang_exc)
if term.postype then
-- Term-level postype modifier takes highest priority
pos = term.postype
elseif config and config.pos_override then
pos = config.pos_override
elseif type(term.args) == "table" and term.args.pos then
pos = term.args.pos
end
local pos_type = pos_types[pos]
if not pos_type or term.unknown_term then
return
end
-- Skip root/word categories for descendants of affix groups
-- if pos_type then
-- return
-- end
local same_language = get_norm_lang_func(page_lang):getFullCode() == get_norm_lang_func(term.lang):getFullCode()
-- Skip self-references
if same_language and root_title == term.title then
return
end
-- Use makeEntryName to strip diacritics for category names
local entry_name = term.lang:makeEntryName(term.title)
local lang_name = page_lang:getCanonicalName()
local cat_name
if chain.passed_through then
local etymon_lang_name = export.get_cat_name(term.lang)
cat_name = lang_name .. " terms derived from the " .. etymon_lang_name .. " " .. pos_type .. " " .. entry_name
else
cat_name = lang_name .. " terms belonging to the " .. pos_type .. " " .. entry_name
end
-- Add ID disambiguation if needed (for roots/words: use etymon_id if resolved via senseid, otherwise use id)
local target_ids = available_etymon_ids[term.target_key]
local effective_id = term.etymon_id or term.id -- etymon_id if senseid, otherwise id is already an etymon id
if target_ids and effective_id then
local same_pos_count = 0
for _, id_data in ipairs(target_ids) do
if type(id_data) == "table" and id_data.pos == pos then
same_pos_count = same_pos_count + 1
end
end
if same_pos_count > 1 then
cat_name = cat_name .. " (" .. effective_id .. ")"
end
end
categories[cat_name] = true
end
-- Compute chain state for a term based on parent chain and keyword config
-- Hyphen patterns for affix detection (regular hyphen + script-specific)
local AFFIX_HYPHEN_PATTERN = "[%-%־ـ᠊]" -- regular hyphen, Hebrew maqqef, Arabic tatweel, Mongolian hyphen
-- Check if a term is an actual affix (not a non-affix member of an affix group)
local function is_actual_affix(term)
-- Check explicit aftype modifier
if term.aftype then
local normalized = aftype_aliases[term.aftype] or term.aftype
return normalized ~= "ไม่ใช่หน่วยคำเติม"
end
-- Check if pos=root (treated as non-affix)
if term.args and term.args.pos and (term.args.pos == "root" or term.args.pos == "ราก") then
return false
end
-- Auto-detect by hyphen: prefix ends with -, suffix starts with -, etc.
if term.title then
local title = term.title
-- Strip leading * for reconstructed terms before checking hyphens
title = title:gsub("^%*", "")
-- Check for hyphens at start or end (handles script-specific hyphens too)
if title:match("^" .. AFFIX_HYPHEN_PATTERN) or title:match(AFFIX_HYPHEN_PATTERN .. "$") then
return true
end
end
-- Default: not an affix
return false
end
local function compute_category_chain(parent_chain, config, page_lang, term_lang, get_norm_lang_func, parent_term_lang, term)
-- Track if we're inside an actual affix (for suppressing root categories on descendants)
-- Only set if the term is an actual affix (prefix, suffix, etc.), not a non-affix member
local inside_affix = parent_chain.inside_affix
if config.affix_categories and term and is_actual_affix(term) then
inside_affix = true
end
-- If no_child_categories is set, disable everything
if config.no_child_categories then
return {
passed_through = parent_chain.passed_through or page_lang:getCode() ~= get_norm_lang_func(term_lang):getCode(),
inherited = false,
source = false,
pos = false,
recurse = false,
inside_affix = inside_affix,
}
end
local term_is_transitive = is_transitive(config.transitive, page_lang, term_lang)
local new_source = parent_chain.source and term_is_transitive
-- For CROSS_LANG_NO_INTERNAL_SOURCE: track internal derivation language context
-- Check if this term is internal relative to parent term's language (if parent_term_lang provided)
-- or relative to page language (if no parent_term_lang)
local internal_lang = parent_chain.internal_lang
local is_internal_in_context = false
if config.transitive == M.data.TRANSITIVE.CROSS_LANG_NO_INTERNAL_SOURCE then
local check_lang = parent_term_lang or page_lang
local term_lang_code = get_norm_lang_func(term_lang):getCode()
local check_lang_code = get_norm_lang_func(check_lang):getCode()
if internal_lang then
-- Already in an internal derivation context: check if this term is also internal
is_internal_in_context = term_lang_code == internal_lang
else
-- Check if this term is internal relative to parent term (or page if no parent)
is_internal_in_context = term_lang_code == check_lang_code
end
end
-- Source chain behavior for CROSS_LANG_NO_INTERNAL_SOURCE
if config.transitive == M.data.TRANSITIVE.CROSS_LANG_NO_INTERNAL_SOURCE then
if is_internal_in_context then
-- Internal derivation
new_source = false
internal_lang = get_norm_lang_func(term_lang):getCode()
else
-- Cross-language
new_source = parent_chain.source and term_is_transitive
internal_lang = nil
end
end
local new_pos = parent_chain.pos
return {
passed_through = parent_chain.passed_through or page_lang:getCode() ~= get_norm_lang_func(term_lang):getCode(),
inherited = parent_chain.inherited and config.inherited_chain,
source = new_source,
pos = new_pos,
internal_lang = internal_lang,
recurse = new_source or new_pos,
inside_affix = inside_affix,
}
end
function export.render(opts)
opts = opts or {}
local data_tree = opts.data_tree
local page_lang = opts.page_lang
local available_etymon_ids = opts.available_etymon_ids
local senseid_parent_etymon = opts.senseid_parent_etymon
local get_norm_lang_func = opts.get_norm_lang_func
local lang_exc = opts.lang_exc
local categories = {}
local seen = {}
local lang_name = page_lang:getCanonicalName()
local root_title = data_tree.title
-- Collect the tree recursively
local function collect(node, parent_chain, is_toplevel)
-- Avoid processing same node twice
if not node.unknown_term and node.title then
local key = node.lang:getFullCode() .. ":" .. (node.title or "") .. ":" .. (node.id or "")
if seen[key] then return end
seen[key] = true
end
-- Collect affix categories at top level only
if is_toplevel then
local affix_cats = collect_affix_categories(node, page_lang, available_etymon_ids, senseid_parent_etymon, lang_exc)
for _, cat in ipairs(affix_cats) do
categories[lang_name .. " " .. cat] = true
end
end
-- Process each container
for _, container in ipairs(node.children or {}) do
local keyword = container.keyword
local config = get_keyword_config(keyword, lang_exc)
-- Skip invalid keywords
if config then
-- Process each term in the container
for _, term in ipairs(container.terms or {}) do
local term_chain = compute_category_chain(parent_chain, config, page_lang, term.lang, get_norm_lang_func, node.lang, term)
local no_child_categories = config.no_child_categories == true
local term_is_transitive = is_transitive(config.transitive, page_lang, term.lang)
-- Top-level only processing
if is_toplevel then
-- Missing/ambiguous etymon tracking
if not term.unknown_term and (term.status == M.data.STATUS.MISSING or term.status == M.data.STATUS.REDLINK) then
categories[lang_name .. " entries referencing missing etymons"] = true
end
if not term.unknown_term and term.status == M.data.STATUS.AMBIGUOUS then
categories[lang_name .. " entries referencing ambiguous etymons"] = true
end
-- Top-level category (e.g., "undefined derivations")
if config.toplevel_category then
categories[lang_name .. " " .. config.toplevel_category] = true
end
-- Borrowing categories (bor, lbor, slbor, ubor, obor)
if config.borrowing_type or config.specialized_borrowing then
collect_borrowing_categories(categories, page_lang, term, config)
end
-- Borrowing categories from <bor>, <lbor>, or <slbor> modifiers on :af terms
if keyword == "af" then
if term.bor then
local bor_config = { borrowing_type = "ยืมมา" }
collect_borrowing_categories(categories, page_lang, term, bor_config)
elseif term.lbor then
local bor_config = { specialized_borrowing = "learned" }
collect_borrowing_categories(categories, page_lang, term, bor_config)
elseif term.slbor then
local bor_config = { specialized_borrowing = "semi-learned" }
collect_borrowing_categories(categories, page_lang, term, bor_config)
end
end
-- Source-based derivation categories (sl, calque, pcal)
if config.source_category_type then
collect_source_derivation_categories(categories, page_lang, term, config)
end
-- Skip all child categorisation if no_child_categories is set
if not no_child_categories then
-- Source categories only if transitive
if term_is_transitive then
collect_source_categories(categories, page_lang, term, term_chain, get_norm_lang_func)
end
-- Pos categories always (unless no_child_categories)
collect_pos_categories(categories, page_lang, root_title, term, available_etymon_ids, term_chain,
get_norm_lang_func, lang_exc, keyword)
end
else
-- Below top level, respect the parent chain
if parent_chain.source then
collect_source_categories(categories, page_lang, term, term_chain, get_norm_lang_func)
end
if parent_chain.pos then
collect_pos_categories(categories, page_lang, root_title, term, available_etymon_ids, term_chain,
get_norm_lang_func, lang_exc, keyword)
end
end
-- Recurse into term's children if needed and status allows
if term_chain.recurse and (term.status == M.data.STATUS.OK or term.status == M.data.STATUS.INLINE) then
collect(term, term_chain, false)
end
end
end
end
end
-- Initial chain state
local initial_chain = {
passed_through = false,
inherited = true,
source = true,
pos = true,
internal_lang = nil,
recurse = true,
inside_affix = false,
}
collect(data_tree, initial_chain, true)
local cat_list = {}
for cat in pairs(categories) do
table.insert(cat_list, cat)
end
return cat_list
end
return export
htszofud5lrq6qfn20awv12aucvth4u
มอดูล:category tree/fam/gem
828
2300663
5729206
5688509
2026-07-20T03:42:42Z
Octahedron80
267
5729206
Scribunto
text/plain
local labels = {}
------- GERMANIC VERB CLASSES -------
labels["คำกริยาแข็ง"] = {
description = "{{{langname}}} verbs that do not use a dental suffix to mark the past tense and past participle, instead using vowel change ([[ablaut]]) and often a suffix ''-(e)n'' in the past participle.",
breadcrumb = "แข็ง",
parents = {"คำกริยา★แบ่งตามชนิดการผันรูป"},
}
labels["strong verbs"] = labels["คำกริยาแข็ง"]
labels["คำกริยาอ่อน"] = {
description = "{{{langname}}} verbs that display dental suffixes in their past tense conjugated forms.",
breadcrumb = "อ่อน",
parents = {"คำกริยา★แบ่งตามชนิดการผันรูป"},
}
labels["weak verbs"] = labels["คำกริยาอ่อน"]
labels["คำกริยาอดีตกาลสิ้นสุด-ปัจจุบันกาล"] = {
description = "{{{langname}}} verbs that inflect in the present tense like the past tense of strong verbs.",
breadcrumb = "อดีตกาลสิ้นสุด-ปัจจุบันกาล",
parents = {"คำกริยา★แบ่งตามชนิดการผันรูป"},
}
labels["preterite-present verbs"] = labels["คำกริยาอดีตกาลสิ้นสุด-ปัจจุบันกาล"]
labels["คำกริยาแข็งกลุ่ม 1"] = {
description = "Verbs where the [[ablaut]] vowel was followed by ''-y-'' in Proto-Indo-European.",
breadcrumb = "กลุ่ม 1",
parents = {{name = "คำกริยาแข็ง", sort = "1"}},
}
labels["class 1 strong verbs"] = labels["คำกริยาแข็งกลุ่ม 1"]
labels["คำกริยาอ่อนกลุ่ม 1"] = {
description = "Weak verbs of the first class.",
breadcrumb = "กลุ่ม 1",
parents = {{name = "คำกริยาอ่อน", sort = "1"}},
}
labels["class 1 weak verbs"] = labels["คำกริยาอ่อนกลุ่ม 1"]
labels["คำกริยาแข็งกลุ่ม 2"] = {
description = "Verbs where the [[ablaut]] vowel was followed by ''-w-'' in Proto-Indo-European.",
breadcrumb = "กลุ่ม 2",
parents = {{name = "คำกริยาแข็ง", sort = "2"}},
}
labels["class 2 strong verbs"] = labels["คำกริยาแข็งกลุ่ม 2"]
labels["คำกริยาแข็งกลุ่ม 2a"] = {
description = "Verbs where the [[ablaut]] vowel was *eu in Proto-Germanic.",
breadcrumb = "กลุ่ม 2a",
parents = {{name = "คำกริยาแข็งกลุ่ม 2", sort = "1"}},
}
labels["class 2a strong verbs"] = labels["คำกริยาแข็งกลุ่ม 2a"]
labels["คำกริยาแข็งกลุ่ม 2b"] = {
description = "Verbs where the [[ablaut]] vowel was *ū in Proto-Germanic.",
breadcrumb = "กลุ่ม 2b",
parents = {{name = "คำกริยาแข็งกลุ่ม 2", sort = "2"}},
}
labels["class 2b strong verbs"] = labels["คำกริยาแข็งกลุ่ม 2b"]
labels["คำกริยาอ่อนกลุ่ม 2"] = {
description = "Weak verbs of the second class.",
breadcrumb = "กลุ่ม 2",
parents = {{name = "คำกริยาอ่อน", sort = "2"}},
}
labels["class 2 weak verbs"] = labels["คำกริยาอ่อนกลุ่ม 2"]
labels["คำกริยาอ่อนกลุ่ม 3"] = {
description = "Weak verbs of the third class.",
breadcrumb = "กลุ่ม 3",
parents = {{name = "คำกริยาอ่อน", sort = "3"}},
}
labels["class 3 weak verbs"] = labels["คำกริยาอ่อนกลุ่ม 3"]
labels["คำกริยาแข็งกลุ่ม 3"] = {
description = "Verbs where the [[ablaut]] vowel was followed by a [[consonant cluster]] in Proto-Indo-European.",
breadcrumb = "กลุ่ม 3",
parents = {{name = "คำกริยาแข็ง", sort = "3"}},
}
labels["class 3 strong verbs"] = labels["คำกริยาแข็งกลุ่ม 3"]
labels["คำกริยาแข็งกลุ่ม 3a"] = {
description = "Verbs where the [[consonant cluster]] begins with a nasal consonant.",
breadcrumb = "กลุ่ม 3a",
parents = {{name = "คำกริยาแข็งกลุ่ม 3", sort = "1"}},
}
labels["class 3a strong verbs"] = labels["คำกริยาแข็งกลุ่ม 3a"]
labels["คำกริยาแข็งกลุ่ม 3b"] = {
description = "Verbs where the [[consonant cluster]] begins with a lateral consonant or velar fricative.",
breadcrumb = "กลุ่ม 3b",
parents = {{name = "คำกริยาแข็งกลุ่ม 3", sort = "2"}},
}
labels["class 3b strong verbs"] = labels["คำกริยาแข็งกลุ่ม 3b"]
labels["คำกริยาแข็งกลุ่ม 3c"] = {
description = "Verbs where the [[consonant cluster]] begins with a rhotic consonant.",
breadcrumb = "กลุ่ม 3c",
parents = {{name = "คำกริยาแข็งกลุ่ม 3", sort = "3"}},
}
labels["class 3c strong verbs"] = labels["คำกริยาแข็งกลุ่ม 3c"]
labels["คำกริยาแข็งกลุ่ม 4"] = {
description = "Verbs where the [[ablaut]] vowel was followed by a [[sonorant]] (''m'', ''n'', ''l'', ''r'') but no other consonant in Proto-Indo-European.",
breadcrumb = "กลุ่ม 4",
parents = {{name = "คำกริยาแข็ง", sort = "4"}},
}
labels["class 4 strong verbs"] = labels["คำกริยาแข็งกลุ่ม 4"]
labels["คำกริยาอ่อนกลุ่ม 4"] = {
description = "Weak verbs of the fourth class.",
breadcrumb = "กลุ่ม 4",
parents = {{name = "คำกริยาอ่อน", sort = "4"}},
}
labels["class 4 weak verbs"] = labels["คำกริยาอ่อนกลุ่ม 4"]
labels["คำกริยาแข็งกลุ่ม 5"] = {
description = "Verbs where the [[ablaut]] vowel was followed by [[consonant]] other than a [[sonorant]] in Proto-Indo-European.",
breadcrumb = "กลุ่ม 5",
parents = {{name = "คำกริยาแข็ง", sort = "5"}},
}
labels["class 5 strong verbs"] = labels["คำกริยาแข็งกลุ่ม 5"]
labels["คำกริยาแข็งกลุ่ม 6"] = {
description = "The Proto-Indo-European origin of this class is not securely known. It contains verbs with the stem vowel ''-a-'', except those where it is followed by a sonorant and another consonant (this combination was considered a diphthong in PIE and therefore belonged to class 7).",
breadcrumb = "กลุ่ม 6",
parents = {{name = "คำกริยาแข็ง", sort = "6"}},
}
labels["class 6 strong verbs"] = labels["คำกริยาแข็งกลุ่ม 6"]
labels["คำกริยาแข็งกลุ่ม 7"] = {
description = "Verbs that retained their reduplication in the past tense in Proto-Germanic.",
breadcrumb = "กลุ่ม 7",
parents = {{name = "คำกริยาแข็ง", sort = "7"}},
}
labels["class 7 strong verbs"] = labels["คำกริยาแข็งกลุ่ม 7"]
labels["คำกริยาแข็งกลุ่ม 7a"] = {
description = "Class 7 strong verbs where the root vowel was ''*ai'' in Proto-Germanic, analogous to class 1.",
breadcrumb = "กลุ่ม 7a",
parents = {{name = "คำกริยาแข็งกลุ่ม 7", sort = "a"}},
}
labels["class 7a strong verbs"] = labels["คำกริยาแข็งกลุ่ม 7a"]
labels["คำกริยาแข็งกลุ่ม 7b"] = {
description = "Class 7 strong verbs where the root vowel was ''*au'' in Proto-Germanic, analogous to class 2.",
breadcrumb = "กลุ่ม 7b",
parents = {{name = "คำกริยาแข็งกลุ่ม 7", sort = "b"}},
}
labels["class 7b strong verbs"] = labels["คำกริยาแข็งกลุ่ม 7b"]
labels["คำกริยาแข็งกลุ่ม 7c"] = {
description = "Class 7 strong verbs where the root vowel was ''*a'' followed by a [[consonant cluster]] in Proto-Germanic, analogous to class 3.",
breadcrumb = "กลุ่ม 7c",
parents = {{name = "คำกริยาแข็งกลุ่ม 7", sort = "c"}},
}
labels["class 7c strong verbs"] = labels["คำกริยาแข็งกลุ่ม 7c"]
labels["คำกริยาแข็งกลุ่ม 7d"] = {
description = "Class 7 strong verbs where the root vowel was ''*ē'' in Proto-Germanic.",
breadcrumb = "กลุ่ม 7d",
parents = {{name = "คำกริยาแข็งกลุ่ม 7", sort = "d"}},
}
labels["class 7d strong verbs"] = labels["คำกริยาแข็งกลุ่ม 7d"]
labels["คำกริยาแข็งกลุ่ม 7e"] = {
description = "Class 7 strong verbs where the root vowel was ''*ō'' in Proto-Germanic.",
breadcrumb = "กลุ่ม 7e",
parents = {{name = "คำกริยาแข็งกลุ่ม 7", sort = "e"}},
}
labels["class 7e strong verbs"] = labels["คำกริยาแข็งกลุ่ม 7e"]
-- Add 'umbrella_parents' key if not already present.
for key, data in pairs(labels) do
if not data.umbrella_parents then
data.umbrella_parents = "หมวดหมู่ย่อยของศัพท์แบ่งตามประเภทไวยากรณ์แบ่งตามภาษา"
end
end
return {LABELS = labels}
9ywg1y1wivxxlyjnxitpdyxxhpbkhs4
มอดูล:ber-headword
828
2324036
5729205
5684531
2026-07-20T03:41:05Z
Octahedron80
267
5729205
Scribunto
text/plain
-- Based on [[Module:ar-headword]] by Benwing2
-- Adapted by Fenakhay
local lang
local export = {}
local pos_functions = {}
local force_cat = false
local function otherscript(inflections, args, script)
local pagename = mw.loadData("Module:headword/data").pagename
local sc = lang:findBestScript(pagename)
if sc:getCode() == "Latn" then
if script == "Tfng" then
local Tfng_sc = require("Module:scripts").getByCode("Tfng")
local inflection = { label = "รูปสะกดอักษร" .. Tfng_sc:getCanonicalName() }
if not tifinagh_spelling then
tifinagh_spelling = require("Module:Latn-Tfng-translit").tr(
require("Module:links").remove_links(pagename), lang:getCode(), sc:getCode())
end
table.insert(inflection, { term = tifinagh_spelling, sc = Tfng_sc })
table.insert(inflections, inflection)
end
if script == "Arab" then
local Arab_sc = require("Module:scripts").getByCode("Arab")
local inflection = { label = "รูปสะกดอักษร" .. Arab_sc:getCanonicalName() }
if not arabic_spelling then
arabic_spelling = require("Module:shi-Latn-Arab-translit").tr(
require("Module:links").remove_links(pagename), lang:getCode(), sc:getCode())
end
table.insert(inflection, { term = arabic_spelling, sc = Arab_sc })
table.insert(inflections, inflection)
end
end
end
-- The main entry point.
function export.show(frame)
local poscat = frame.args[1] or
error("Part of speech has not been specified. Please pass parameter 1 to the module invocation.")
-- หมวดหมู่เป็นภาษาไทย
local poscat_th = require("Module:th-utilities").th_pos(poscat)
local parargs = frame:getParent().args
local params = {
["head"] = { list = true, disallow_holes = true },
["tr"] = { list = true, allow_holes = true },
["id"] = {},
["notfng"] = { type = "boolean" },
["noarab"] = { type = "boolean" },
["nolinkhead"] = { type = "boolean" },
["json"] = { type = "boolean" },
["pagename"] = {}, -- for testing
}
if frame.args["lang"] then
lang = require("Module:languages").getByCode(frame.args["lang"])
else
error("Please specify a language code.")
end
if pos_functions[poscat_th] then
for key, val in pairs(pos_functions[poscat_th].params) do
params[key] = val
end
end
local args = require("Module:parameters").process(parargs, params)
local pagename = args.pagename or mw.loadData("Module:headword/data").pagename
local enable_auto_translit = false
if (lang:findBestScript(pagename):getCode() == "Tfng") then
enable_auto_translit = true
end
local mainform = { ["tzm"] = "Tfng", ["zgh"] = "Tfng" }
local data = {
lang = lang,
pos_category = poscat_th,
categories = {},
heads = {},
genders = {},
inflections = { enable_auto_translit = enable_auto_translit },
pagename = pagename,
id = args.id,
sort_key = args.sort,
force_cat_output = force_cat,
altform = lang:findBestScript(pagename):getCode() ~= (mainform[lang:getCode()] or "Latn")
}
local heads = args.head
for i = 1, #heads do
table.insert(data.heads, {
term = heads[i],
tr = args.tr[i],
})
end
if pos_functions[poscat_th] then
pos_functions[poscat_th].func(args, data)
end
local auto_generate_tifinagh = { ["rif"] = true, ["shi"] = true, ["sjs"] = true }
local auto_generate_arabic = { ["shi"] = true }
if args.notfng ~= true and auto_generate_tifinagh[lang:getCode()] then
otherscript(data.inflections, args, "Tfng")
end
if args.noarab ~= true and auto_generate_arabic[lang:getCode()] then
otherscript(data.inflections, args, "Arab")
end
if args.json then
return require("Module:JSON").toJSON(data)
end
return require("Module:headword").full_headword(data)
end
local function getargs(args, argpref)
local forms = {}
for i, form in ipairs(args[argpref]) do
local translit = args[argpref .. "tr"][i]
local gender = args[argpref .. "g"][i]
local gender2 = args[argpref .. "g2"][i]
local genderlist = (gender or gender2) and { gender, gender2 } or nil
table.insert(forms, { term = form, tr = translit, genders = genderlist })
end
return forms
end
local function add_infl_params(params, argpref, defgender)
params[argpref] = { list = true, disallow_holes = true }
params[argpref .. "\1tr"] = { list = true, allow_holes = true }
params[argpref .. "\1g"] = { list = true, default = defgender }
params[argpref .. "\1g2"] = { list = true }
end
local function handle_infl(args, data, argpref, label, generate_default)
local newinfls = getargs(args, argpref)
if #newinfls == 0 and generate_default then
newinfls = { { term = "+" } }
end
if generate_default then
local saw_plus = false
for _, newinfl in ipairs(newinfls) do
if newinfl.term == "+" then
saw_plus = true
break
end
end
if saw_plus then
local newnewinfls = {}
for _, newinfl in ipairs(newinfls) do
if newinfl.term == "+" then
local definfls = generate_default(args, data)
for _, definfl in ipairs(definfls) do
table.insert(newnewinfls, definfl)
end
else
table.insert(newnewinfls, newinfl)
end
end
newinfls = newnewinfls
end
end
if #newinfls > 0 then
newinfls.label = label
table.insert(data.inflections, newinfls)
end
end
local function add_all_infl_params(params, argpref)
if argpref ~= "" then
add_infl_params(params, argpref)
end
add_infl_params(params, argpref .. "cons")
end
local function handle_all_infl(args, data, argpref, label, generate_default)
if argpref ~= "" then
handle_infl(args, data, argpref, label, generate_default)
end
local labelsp = label == "" and "" or label .. " "
handle_infl(args, data, argpref .. "cons", labelsp .. "construct state")
end
local function handle_noun_plural(args, data)
if args.pl[1] == "-" then
table.insert(data.inflections, { label = "โดยปกติ[[ภาคผนวก:อภิธานศัพท์#นับไม่ได้|นับไม่ได้]]" })
table.insert(data.categories, "คำนามนับไม่ได้" .. lang:getCategoryName())
else
handle_all_infl(args, data, "pl", "พหูพจน์")
end
end
local valid_bare_genders = { false, "m", "f", "mf" }
local valid_bare_numbers = { false, "p", "s" }
local valid_genders = {}
for _, gender in ipairs(valid_bare_genders) do
for _, number in ipairs(valid_bare_numbers) do
local parts = {}
local function ins_part(part)
if part then
table.insert(parts, part)
end
end
ins_part(gender)
ins_part(number)
local full_gender = table.concat(parts, "-")
valid_genders[full_gender == "" and "?" or full_gender] = true
end
end
local function add_gender_params(params, default)
params[1] = { list = "g", default = default or "?" }
end
local function handle_gender(args, data, nonlemma)
for _, g in ipairs(args[1]) do
if valid_genders[g] then
table.insert(data.genders, g)
else
error("Unrecognized gender: " .. g)
end
end
if nonlemma then
return
end
end
local adj_inflections = {
{ pref = "", label = "" },
{ pref = "f", label = "เพศหญิง" },
{ pref = "pl", label = "เพศชายพหูพจน์" },
{ pref = "fpl", label = "เพศหญิงพหูพจน์" },
{ pref = "cpl", label = "เพศรวมพหูพจน์" },
{ pref = "dim", label = "ตัวบอกความเล็ก" },
}
local function create_infl_list_params(infl_list)
local params = {}
for _, infl in ipairs(infl_list) do
if infl.basic then
add_infl_params(params, infl.pref)
else
add_all_infl_params(params, infl.pref)
end
end
return params
end
local function handle_infl_list_args(args, data, infl_list)
for _, infl in ipairs(infl_list) do
if infl.handle then
infl.handle(args, data)
elseif infl.basic then
handle_infl(args, data, infl.pref, infl.label, infl.generate_default)
else
handle_all_infl(args, data, infl.pref, infl.label, infl.generate_default)
end
end
end
pos_functions["คำคุณศัพท์"] = {
params = (function()
local params = create_infl_list_params(adj_inflections)
return params
end)(),
func = function(args, data)
handle_infl_list_args(args, data, adj_inflections)
end
}
local sing_coll_noun_inflections = {
{ pref = "", label = "" },
{ pref = "pl", label = "พหูพจน์", handle = handle_noun_plural },
{ pref = "dim", label = "ตัวบอกความเล็ก" },
}
local function handle_sing_coll_noun_infls(args, data, otherinfl, otherlabel)
handle_gender(args, data)
handle_infl(args, data, otherinfl, otherlabel)
handle_infl_list_args(args, data, sing_coll_noun_inflections)
end
local function get_sing_coll_noun_params(defgender, otherinfl, othergender)
local params = create_infl_list_params(sing_coll_noun_inflections)
add_gender_params(params, defgender)
add_infl_params(params, otherinfl, othergender)
return params
end
pos_functions["คำสมุหนาม"] = {
params = get_sing_coll_noun_params("m", "sing", "f"),
func = function(args, data)
data.pos_category = "คำนาม"
table.insert(data.categories, "คำสมุหนาม" .. lang:getCategoryName())
table.insert(data.inflections, { label = "คำสมุหนาม" })
handle_sing_coll_noun_infls(args, data, "sing", "คำเอกนาม")
end
}
pos_functions["คำเอกนาม"] = {
params = get_sing_coll_noun_params("f", "coll", "m"),
func = function(args, data)
data.pos_category = "คำนาม"
table.insert(data.categories, "คำเอกนาม" .. lang:getCategoryName())
table.insert(data.inflections, { label = "คำเอกนาม" })
handle_sing_coll_noun_infls(args, data, "coll", "คำสมุหนาม")
end
}
local noun_inflections = {
{ pref = "", label = "" },
{ pref = "d", label = "ทวิพจน์" },
{ pref = "pl", label = "พหูพจน์", handle = handle_noun_plural },
{ pref = "dim", label = "ตัวบอกความเล็ก" },
{ pref = "f", label = "เพศหญิงเทียบเท่า" },
{ pref = "m", label = "เพศชายเทียบเท่า" },
}
local function get_noun_params()
local params = create_infl_list_params(noun_inflections)
add_gender_params(params)
return params
end
local function handle_noun_infls(args, data)
handle_gender(args, data)
handle_infl_list_args(args, data, noun_inflections)
end
pos_functions["คำนาม"] = {
params = get_noun_params(),
func = handle_noun_infls,
}
local numeral_inflections = {
{ pref = "", label = "" },
{ pref = "f", label = "เพศหญิง" },
}
local function get_numeral_params()
local params = create_infl_list_params(numeral_inflections)
add_gender_params(params)
return params
end
pos_functions["เลข"] = {
params = get_numeral_params(),
func = function(args, data)
table.insert(data.categories, "เลขเชิงการนับ" .. lang:getCategoryName())
handle_gender(args, data)
handle_infl_list_args(args, data, numeral_inflections)
end
}
local particle_inflections = {
{ pref = "", label = "" },
{ pref = "f", label = "เพศหญิง" },
}
local function get_particle_params()
local params = create_infl_list_params(particle_inflections)
add_gender_params(params)
return params
end
pos_functions["คำอนุภาค"] = {
params = get_particle_params(),
func = function(args, data)
table.insert(data.categories, "คำอนุภาค" .. lang:getCategoryName())
handle_gender(args, data)
handle_infl_list_args(args, data, particle_inflections)
end
}
pos_functions["คำวิสามานยนาม"] = {
params = get_noun_params(),
func = handle_noun_infls,
}
local pronoun_inflections = {
{ pref = "", label = "" },
{ pref = "pl", label = "พหูพจน์", handle = handle_noun_plural },
{ pref = "f", label = "เพศหญิง" },
}
local function get_pronoun_params()
local params = create_infl_list_params(pronoun_inflections)
add_gender_params(params)
return params
end
pos_functions["คำสรรพนาม"] = {
params = get_pronoun_params(),
func = function(args, data)
handle_gender(args, data)
handle_infl_list_args(args, data, pronoun_inflections)
end
}
local verb_inflections = {
{ pref = "cont", label = "intensive aorist" },
{ pref = "aorist", label = "aorist" },
{ pref = "pret", label = "อดีตกาลสิ้นสุด" },
{ pref = "negpret", label = "อดีตกาลสิ้นสุดปฏิเสธ" },
{ pref = "vn", label = "คำกริยานาม" },
}
local function get_verb_params()
local params = create_infl_list_params(verb_inflections)
return params
end
local function handle_verb_infls(args, data)
handle_infl_list_args(args, data, verb_inflections)
end
pos_functions["คำกริยา"] = {
params = get_verb_params(),
func = handle_verb_infls,
}
return export
cmtdkes5tj7428bzbuq0p3cqhzvwfwq
sollen
0
2333488
5729103
5728619
2026-07-20T02:08:42Z
Ponpan
693
/* คำกริยา */
5729103
wikitext
text/x-wiki
== ภาษากาตาลา ==
=== การออกเสียง ===
* {{ca-IPA|ó}}
=== คำกริยา ===
{{head|ca|รูปกริยา}}
# {{ca-verb form of|sollar}}
== ภาษากาลิเซีย ==
=== คำกริยา ===
{{head|gl|รูปกริยา}}
# {{gl-verb form of|sollar}}
== ภาษาดัตช์ ==
=== รากศัพท์ ===
จาก{{inh|nl|dum|sollen}}, จาก{{der|nl|frm|soller|t=เล่นเกมลูกบอล}}, จาก{{der|nl|fro|soule|t=ลูกบอลไม้หรือหนัง}}, ต้นกำเนิดแรกสุดไม่แน่ชาติ แต่เป็นไปได้ว่ายืมจาก{{der|nl|gem|-}}, จาก{{der|nl|gem-pro|*kūlǭ|t=ชน}};<ref>Per FEW, TLF.</ref> เทียบ{{cog|de|Keule|t=ไม้ตี}} และ{{cog|nl|kogel|t=วัตถุทรงกลม}}
=== การออกเสียง ===
* {{IPA|nl|/ˈsɔlə(n)/}}
* {{audio|nl|Nl-sollen.ogg}}
=== คำกริยา ===
{{nl-verb}}
# [[ขว้าง]] (ลูกบอล) ไป ๆ มา ๆ
# [[เล่น]], [[ทำ]][[ยุ่ง]]
#: {{usex|nl|We laten niet met ons '''sollen'''!|We won't let anyone '''mess''' with us!}}
==== การผันรูป ====
{{nl-conj-wk|sol|solle}}
=== อ้างอิง ===
<references/>
== ภาษาเยอรมัน ==
=== รากศัพท์ ===
{{dercat|de|gem-pro|inh=1}}
จาก{{inh|de|gmh|scholn}}, {{m|gmh|schuln}} จาก{{inh|de|goh|sculan}}, {{m|goh|skulan}}, {{m|goh|scolan}} จาก{{inh|de|gmw-pro|*skulan}}
ร่วมเชื้อสายกับ{{cog|en|shall}} และ {{m|en|should}}, {{cog|nl|zullen}}, {{cog|da|skulle}}, {{cog|sv|skall|}} และ {{m|sv|skulle}}, {{cog|yi|זאָลן}}
=== การออกเสียง ===
* {{IPA|de|/ˈzɔlən/|[zɔln̩]|aa=Germany}}
** {{audio|de|De-sollen.ogg|aa=Germany}}
* {{IPA|de|/ˈzɔlɛn/|[zɔln̩]|aa=Austria,South German,Switzerland}}
** {{audio|de|De-at-sollen.ogg|aa=Austria}}
* {{audio|de|De-sollen2.ogg|a=<<Germany>> (<<Berlin>>)}}
* {{hyph|de|sol|len}}
=== คำกริยา ===
{{de-verb|sollen<pretpres.soll#sollte,gesollt>}}
# {{lb|de|auxiliary}} [[ควร]], [[ควร]][[จะ]], [[ต้อง]] {{gloss|มีหน้าที่หรือข้อผูกมัดที่จะต้องทำ}}
#: {{uxi|de|Ich '''soll''' das machen.|t=ฉัน'''ควรจะ'''ทำสิ่งนั้น}}
#: {{uxi|de|Ich '''sollte''' das nicht tun.|t=ฉันไม่'''ควร'''ทำสิ่งนั้น}}
# {{lb|de|auxiliary}} ได้รับ[[คำแนะนำ]]หรือได้รับ[[คำขอร้อง]]ให้ทำบางสิ่ง
# {{lb|de|auxiliary}} มี[[กำหนด]]หรือ[[ตั้งใจ]]ที่จะทำบางสิ่ง
# {{lb|de|auxiliary}} ว่ากันว่า, มี[[ข่าวลือ]]ว่า, ได้รับ[[รายงาน]]ว่า
#: {{uxi|de|Es '''soll''' da viele Leute geben.|t=ว่ากันว่าที่นั่นมีคนอยู่เยอะมาก}}
# {{lb|de|auxiliary|in a subordinate clause in the simple past tense}} [[จะ]], [[ก็]] {{n-g|ใช้แสดงเหตุการณ์ในอดีตที่จะเกิดขึ้นหลังจากเวลาในประโยคหลัก}}
# {{lb|de|auxiliary|in a subordinate clause in the subjunctive}} [[หาก]], [[ถ้า]][[หาก]] {{n-g|ใช้ในประโยคเงื่อนไขเพื่อแสดงสถานการณ์สมมติที่มีโอกาสเกิดขึ้นได้ยาก}}
==== หมายเหตุการใช้ ====
* ''sollen'' และ {{m|de|müssen}} ถึงแม้ทั้งสองสามารถแสดงหน้าที่ที่สั่งโดยผู้อื่น แต่มีความแตกต่างกันคล้ายกับการใช้คำว่า "ควร" และ "ต้อง" ในภาษาไทย:
** ''sollen'' ใช้แสดงหน้าที่ทางศีลธรรม ข้อแนะนำ หรือคำสั่งของผู้อื่นที่ไม่มีแรงบังคับโดยตรง
** ''müssen'' (ต้อง/จำเป็นต้อง) ใช้แสดงความจำเป็นที่หลีกเลี่ยงไม่ได้ หรือคำสั่งที่มีอำนาจบังคับเด็ดขาดและมีผลกระทบชัดเจนหากไม่ปฏิบัติตาม
* รูปกริยากลางที่ตามมาสามารถละไว้ได้หากความหมายมีความชัดเจนอยู่แล้วตามสถานการณ์ โดยเฉพาะอย่างยิ่งกับคำว่า ''tun'' (ทำ)
** {{uxi|de|Was soll ich heute?|t=วันนี้ฉันควรทำอะไรดี?}}
==== การผันรูป ====
{{de-conj|sollen<pretpres.soll#sollte,gesollt>}}
=== อ่านเพิ่ม ===
* {{R:de:DWDS}}
* {{R:de:UniLeipzig}}
* {{R:de:Duden}}
* {{R:de:OpenThesaurus}}
== ภาษาลักเซมเบิร์ก ==
=== รากศัพท์ ===
{{dercat|lb|gem-pro|inh=1}}
จาก{{inh|lb|gmw-cfr|solle}}, จาก{{inh|lb|gmh|scholen}}, จาก{{inh|lb|goh|skulan}}, จาก{{inh|lb|gmw-pro|*skulan}}
=== การออกเสียง ===
* {{IPA|lb|/ˈzolən/}}
=== คำกริยา ===
{{lb-verb|soll|sollen}}
# [[ควร]], [[น่า]], [[จะ]]
==== การผันรูป ====
{{rfinfl|lb|verb}}
{{cln|lb|คำกริยาแสดงมาลา}}
== ภาษาสเปน ==
=== คำกริยา ===
{{head|es|รูปกริยา}}
# {{es-verb form of|sollar}}
9g4j03z7vwi9ucap98d18nkawuud1yt
ผู้ใช้:ZilentFyld/Germanic word lists
2
2333691
5729014
2026-07-19T15:41:12Z
ZilentFyld
6541
สร้างหน้าด้วย "Note: copied from [[:en:Appendix:Germanic word lists]] The following '''word lists of {{w|Germanic languages}}''' are based on data from the [http://www.northeuralex.org/ NorthEuraLex] database (version 0.9).<ref>Dellert, J., Daneyko, T., Münch, A. et al. NorthEuraLex: a wide-coverage lexical database of Northern Eurasia. ''Lang Resources & Evaluation'' '''54''', 273–301 (2020). https://doi.org/10.1007/s10579-019-09480-6</ref> ==Lists== {| clas..."
5729014
wikitext
text/x-wiki
Note: copied from [[:en:Appendix:Germanic word lists]]
The following '''word lists of {{w|Germanic languages}}''' are based on data from the [http://www.northeuralex.org/ NorthEuraLex] database (version 0.9).<ref>Dellert, J., Daneyko, T., Münch, A. et al. NorthEuraLex: a wide-coverage lexical database of Northern Eurasia. ''Lang Resources & Evaluation'' '''54''', 273–301 (2020). https://doi.org/10.1007/s10579-019-09480-6</ref>
==Lists==
{| class="wikitable sortable"
! No.
! [[English]]
! [[German]]
! [[Dutch]]
! [[Swedish]]
! [[Danish]]
! [[Norwegian]] ([[Bokmål]])
! [[Icelandic]]
|-
| 1
| [[eye]]
| [[Auge]]
| [[oog]]
| [[öga]]
| [[øje]]
| [[øye]]
| [[auga]]
|-
| 2
| [[ear]]
| [[Ohr]]
| [[oor]]
| [[öra]]
| [[øre]]
| [[øre]]
| [[eyra]]
|-
| 3
| [[nose]]
| [[Nase]]
| [[neus]]
| [[näsa]]
| [[næse]]
| [[nese]]
| [[nef]]
|-
| 4
| [[mouth]]
| [[Mund]]
| [[mond]]
| [[mun]]
| [[mund]]
| [[munn]]
| [[munnur]]
|-
| 5
| [[tooth]]
| [[Zahn]]
| [[tand]]
| [[tand]]
| [[tand]]
| [[tann]]
| [[tönn]]
|-
| 6
| [[tongue]]
| [[Zunge]]
| [[tong]]
| [[tunga]]
| [[tunge]]
| [[tunge]]
| [[tunga]]
|-
| 7
| [[lip]]
| [[Lippe]]
| [[lip]]
| [[läpp]]
| [[læbe]]
| [[leppe]]
| [[vör]]
|-
| 8
| [[cheek]]
| [[Wange]]
| [[wang]]
| [[kind]]
| [[kind]]
| [[kinn]]
| [[kinn]]; [[vangi]]
|-
| 9
| [[face]]
| [[Gesicht]]
| [[gelaat]]; [[gezicht]]
| [[syn]]; [[ansikte]]
| [[ansigt]]
| [[fjes]]; [[ansikt]]
| [[andlit]]
|-
| 10
| [[forehead]]
| [[Stirn]]
| [[voorhoofd]]
| [[panna]]
| [[pande]]
| [[panne]]
| [[enni]]
|-
| 11
| [[hair]]
| [[Haar]]
| [[haar]]
| [[hår]]
| [[hår]]
| [[hår]]
| [[hár]]
|-
| 12
| [[moustache]]
| [[Schnurrbart]]
| [[snor]]
| [[mustasch]]
| [[overskæg]]
| [[bart]]
| [[yfirskegg]]
|-
| 13
| [[beard]]
| [[Bart]]
| [[baard]]
| [[skägg]]
| [[skæg]]
| [[skjegg]]
| [[skegg]]
|-
| 14
| [[chin]]
| [[Kinn]]
| [[kin]]
| [[haka]]
| [[hage]]
| [[hake]]
| [[haka]]
|-
| 15
| [[jaw]]
| [[Kiefer]] ([[Anatomie]])
| [[kaak]]
| [[käke]]
| [[kæbe]]
| [[kjeve]]
| [[kjálki]]; [[skoltur]]
|-
| 16
| [[throat]]
| [[Kehle]]
| [[keel]]; [[strot]]
| [[strupe]]
| [[strube]]
| [[strupe]]
| [[kverk]]
|-
| 17
| [[neck]]
| [[Hals]]
| [[hals]]
| [[hals]]
| [[hals]]
| [[hals]]
| [[háls]]
|-
| 18
| [[nape]]
| [[Genick]]
| [[nek]]
| [[nacke]]
| [[nakke]]
| [[nakke]]
| [[hnakki]]
|-
| 19
| [[head]]
| [[Kopf]]
| [[hoofd]]
| [[huvud]]
| [[hoved]]
| [[hode]]
| [[höfuð]]
|-
| 20
| [[back]]
| [[Rücken]]
| [[rug]]
| [[rygg]]
| [[ryg]]
| [[rygg]]
| [[hryggur]]
|-
| 21
| [[belly]]
| [[Bauch]]
| [[buik]]
| [[buk]]; [[mage]]
| [[mave]]
| [[buk]]; [[mage]]
| [[kviður]]
|-
| 22
| [[navel]]
| [[Nabel]]
| [[navel]]
| [[navel]]
| [[navle]]
| [[navle]]
| [[nafli]]
|-
| 23
| [[bosom]]
| [[Busen]]
| [[boezem]]
| [[barm]]
| [[barm]]
| [[barm]]
| [[barmur]]
|-
| 24
| [[breast]]
| [[Brust]]
| [[borst]]
| [[bröst]]
| [[bryst]]
| [[bryst]]
| [[brjóst]]
|-
| 25
| [[shoulder]]
| [[Schulter]]
| [[schouder]]
| [[skuldra]]
| [[skulder]]
| [[skulder]]
| [[öxl]]
|-
| 26
| [[arm]]
| [[Arm]]
| [[arm]]
| [[arm]]
| [[arm]]
| [[arm]]
| [[armur]]
|-
| 27
| [[elbow]]
| [[Ellenbogen]]
| [[elleboog]]
| [[armbåge]]
| [[albue]]
| [[albue]]
| [[olnbogi]]
|-
| 28
| [[hand]]
| [[Hand]]
| [[hand]]
| [[hand]]
| [[hånd]]
| [[hånd]]
| [[hönd]]
|-
| 29
| [[palm]]
| [[Handfläche]]
| [[handpalm]]
| [[handflata]]
| [[håndflade]]
| [[håndflate]]
| [[lófi]]
|-
| 30
| [[finger]]
| [[Finger]]
| [[vinger]]
| [[finger]]
| [[finger]]
| [[finger]]
| [[fingur]]
|-
| 31
| [[fingernail]]
| [[Fingernagel]]
| [[nagel]]
| [[fingernagel]]
| [[fingernegl]]
| [[fingernegl]]
| [[fingurnögl]]
|-
| 32
| [[nail]]
| [[Nagel]] ([[Anatomie]])
| [[nagel]]
| [[nagel]]
| [[negl]]
| [[negl]]
| [[nögl]]
|-
| 33
| [[toe]]
| [[Zeh]]
| [[teen]]
| [[tå]]
| [[tå]]
| [[tå]]
| [[tá]]
|-
| 34
| [[foot]]
| [[Fuß]]
| [[voet]]
| [[fot]]
| [[fod]]
| [[fot]]
| [[fótur]]
|-
| 35
| [[heel]]
| [[Ferse]]
| [[hak]]; [[hiel]]
| [[häl]]
| [[hæl]]
| [[hæl]]
| [[hæll]]
|-
| 36
| [[knee]]
| [[Knie]]
| [[knie]]
| [[knä]]
| [[knæ]]
| [[kne]]
| [[kné]]
|-
| 37
| [[thigh]]
| [[Oberschenkel]]
| [[dij]]
| [[lår]]
| [[lår]]
| [[lår]]
| [[læri]]
|-
| 38
| [[leg]]
| [[Bein]]
| [[been]]
| [[ben]]
| [[ben]]
| [[bein]]
| [[fótleggur]]
|-
| 39
| [[body]]
| [[Körper]]
| [[lichaam]]
| [[kropp]]
| [[krop]]; [[legeme]]
| [[kropp]]; [[legeme]]
| [[búkur]]; [[líkami]]
|-
| 40
| [[skin]]
| [[Haut]]
| [[huid]]
| [[hud]]; [[skinn]]
| [[hud]]
| [[hud]]; [[skinn]]
| [[húð]]; [[skinn]]
|-
| 41
| [[blood]]
| [[Blut]]
| [[bloed]]
| [[blod]]
| [[blod]]
| [[blod]]
| [[blóð]]
|-
| 42
| [[vein]]
| [[Ader]]
| [[ader]]
| [[åder]]
| [[åre]]
| [[åre]]
| [[æð]]
|-
| 43
| [[sinew]]
| [[Sehne]]
| [[pees]]
| [[sena]]
| [[sene]]
| [[sene]]
| [[sin]]
|-
| 44
| [[bone]]
| [[Knochen]]
| [[bot]]; [[been]]; [[knook]]
| [[ben]]
| [[ben]]
| [[bein]]; [[knokkel]]
| [[bein]]
|-
| 45
| [[brain]]
| [[Gehirn]]
| [[hersenen]]
| [[hjärna]]
| [[hjerne]]
| [[hjerne]]
| [[heili]]
|-
| 46
| [[heart]]
| [[Herz]]
| [[hart]]
| [[hjärta]]
| [[hjerte]]
| [[hjerte]]
| [[hjarta]]
|-
| 47
| [[stomach]]
| [[Magen]]
| [[maag]]
| [[mage]]
| [[mave]]
| [[mage]]
| [[magi]]
|-
| 48
| [[liver]]
| [[Leber]]
| [[lever]]
| [[lever]]
| [[lever]]
| [[lever]]
| [[lifur]]
|-
| 49
| [[breath]]
| [[Atem]]
| [[adem]]
| [[anda]]; [[andedräkt]]
| [[ånde]]
| [[pust]]
| [[andi]]; [[andardráttur]]
|-
| 50
| [[hunger]]
| [[Hunger]]
| [[honger]]
| [[svält]]; [[hunger]]
| [[sult]]
| [[sult]]
| [[hungur]]
|-
| 51
| [[tear]]
| [[Träne]]
| [[traan]]
| [[tår]]
| [[tåre]]
| [[tåre]]
| [[tár]]
|-
| 52
| [[flavour]]
| [[Geschmack]]
| [[smaak]]
| [[smak]]
| [[smag]]
| [[smak]]
| [[smekkur]]
|-
| 53
| [[odour]]
| [[Geruch]]
| [[geur]]
| [[lukt]]
| [[lugt]]
| [[lukt]]
| [[lykt]]
|-
| 54
| [[sleep]]
| [[Schlaf]]
| [[slaap]]
| [[sömn]]
| [[søvn]]
| [[søvn]]
| [[svefn]]
|-
| 55
| [[dream]]
| [[Traum]]
| [[droom]]
| [[dröm]]
| [[drøm]]
| [[drøm]]
| [[draumur]]
|-
| 56
| [[sky]]
| [[Himmel]]
| [[hemel]]
| [[himmel]]
| [[himmel]]
| [[himmel]]
| [[himinn]]
|-
| 57
| [[sun]]
| [[Sonne]]
| [[zon]]
| [[sol]]
| [[sol]]
| [[sol]]
| [[sól]]
|-
| 58
| [[moon]]
| [[Mond]]
| [[maan]]
| [[måne]]
| [[måne]]
| [[måne]]
| [[tungl]]
|-
| 59
| [[star]]
| [[Stern]]
| [[ster]]
| [[stjärna]]
| [[stjerne]]
| [[stjerne]]
| [[stjarna]]
|-
| 60
| [[air]]
| [[Luft]]
| [[lucht]]
| [[luft]]
| [[luft]]
| [[luft]]
| [[loft]]
|-
| 61
| [[wind]]
| [[Wind]]
| [[wind]]
| [[vind]]
| [[vind]]
| [[vind]]
| [[vindur]]
|-
| 62
| [[wave]]
| [[Welle]]
| [[golf]]
| [[våg]]; [[bölja]]
| [[bølge]]
| [[bølge]]
| [[alda]]; [[bylgja]]
|-
| 63
| [[water]]
| [[Wasser]]
| [[water]]
| [[vatten]]
| [[vand]]
| [[vann]]
| [[vatn]]
|-
| 64
| [[stone]]
| [[Stein]]
| [[steen]]
| [[sten]]
| [[sten]]
| [[stein]]
| [[steinn]]
|-
| 65
| [[ground]]
| [[Boden]]
| [[grond]]
| [[mark]]
| [[jord]]
| [[bakke]]
| [[botn]]
|-
| 66
| [[earth]]
| [[Erde]]
| [[aarde]]
| [[jord]]
| [[jord]]
| [[jord]]
| [[jörð]]
|-
| 67
| [[dust]]
| [[Staub]]
| [[stof]]
| [[damm]]
| [[støv]]
| [[støv]]
| [[ryk]]; [[duft]]
|-
| 68
| [[smoke]]
| [[Rauch]]
| [[rook]]
| [[rök]]
| [[røg]]
| [[røyk]]
| [[reykur]]
|-
| 69
| [[spark]]
| [[Funke]]
| [[vonk]]
| [[gnista]]
| [[gnist]]
| [[gnist]]
| [[neisti]]
|-
| 70
| [[fire]]
| [[Feuer]]
| [[vuur]]
| [[eld]]
| [[ild]]
| [[ild]]
| [[eldur]]
|-
| 71
| [[light]]
| [[Licht]]
| [[licht]]
| [[ljus]]
| [[lys]]
| [[lys]]
| [[ljós]]
|-
| 72
| [[shadow]]
| [[Schatten]]
| [[schaduw]]
| [[skugga]]
| [[skygge]]
| [[skygge]]
| [[skuggi]]
|-
| 73
| [[weather]]
| [[Wetter]]
| [[weer]]
| [[väder]]
| [[vejr]]
| [[vær]]
| [[veður]]
|-
| 74
| [[fog]]
| [[Nebel]]
| [[mist]]; [[nevel]]
| [[dimma]]; [[töcken]]
| [[tåge]]
| [[tåke]]
| [[þoka]]
|-
| 75
| [[cloud]]
| [[Wolke]]
| [[wolk]]
| [[sky]]; [[moln]]
| [[sky]]
| [[sky]]
| [[ský]]
|-
| 76
| [[rain]]
| [[Regen]]
| [[regen]]
| [[regn]]
| [[regn]]
| [[regn]]
| [[regn]]
|-
| 77
| [[snow]]
| [[Schnee]]
| [[sneeuw]]
| [[snö]]
| [[sne]]
| [[snø]]
| [[snjór]]
|-
| 78
| [[ice]]
| [[Eis]]
| [[ijs]]
| [[is]]
| [[is]]
| [[is]]
| [[ís]]
|-
| 79
| [[frost]]
| [[Frost]]
| [[vorst]]
| [[frost]]
| [[frost]]
| [[frost]]
| [[frost]]
|-
| 80
| [[chill]]
| [[Kälte]]
| [[kou]]; [[koude]]
| [[köld]]
| [[kulde]]
| [[kulde]]
| [[kuldi]]
|-
| 81
| [[heat]]
| [[Hitze]]
| [[hitte]]
| [[hetta]]
| [[hede]]
| [[hete]]
| [[hiti]]
|-
| 82
| [[hoarfrost]]
| [[Raureif]]
| [[rijp]]
| [[rimfrost]]
| [[rimfrost]]
| [[rimfrost]]
| [[hrím]]
|-
| 83
| [[rainbow]]
| [[Regenbogen]]
| [[regenboog]]
| [[regnbåge]]
| [[regnbue]]
| [[regnbue]]
| [[regnbogi]]
|-
| 84
| [[thunder]]
| [[Donner]]
| [[donder]]
| [[åska]]; [[dunder]]
| [[torden]]
| [[torden]]
| [[þruma]]
|-
| 85
| [[current]]
| [[Strömung]]
| [[stroming]]
| [[strömning]]
| [[strømning]]
| [[strømning]]
| [[straumur]]
|-
| 86
| [[drop]]
| [[Tropfen]]
| [[druppel]]
| [[dropper]]
| [[dråbe]]
| [[dråpe]]
| [[dropi]]
|-
| 87
| [[foam]]
| [[Schaum]]
| [[schuim]]
| [[skum]]
| [[skum]]
| [[skum]]
| [[froða]]
|-
| 88
| [[dirt]]
| [[Schmutz]]
| [[vuil]]
| [[lort]]; [[smuts]]
| [[snavs]]
| [[søl]]; [[skitt]]
| [[óhreinindi]]
|-
| 89
| [[lake]]
| [[See]]
| [[meer]]
| [[sjö]]
| [[sø]]
| [[sjø]]
| [[stöðuvatn]]
|-
| 90
| [[swamp]]
| [[Sumpf]]
| [[moeras]]
| [[träsk]]
| [[sump]]
| [[sump]]; [[myrlende]]
| [[fen]]
|-
| 91
| [[moor]]
| [[Moor]]
| [[veen]]
| [[myr]]; [[mosse]]
| [[mose]]
| [[myr]]; [[myrhei]]
| [[mýri]]
|-
| 92
| [[meadow]]
| [[Wiese]]
| [[wei]]; [[weide]]
| [[äng]]
| [[eng]]
| [[eng]]
| [[engi]]
|-
| 93
| [[forest]]
| [[Wald]]
| [[bos]]
| [[skog]]
| [[skov]]
| [[skog]]
| [[skógur]]
|-
| 94
| [[hill]]
| [[Hügel]]
| [[heuvel]]
| [[höjd]]; [[kulle]]
| [[høj]]; [[bakke]]
| [[haug]]; [[bakke]]
| [[hæð]]; [[hóll]]
|-
| 95
| [[elevation]]
| [[Anhöhe]]
| [[hoogte]]
| [[höjd]]; [[backe]]
| [[høj]]; [[bakke]]
| [[haug]]; [[bakke]]
| [[hæð]]; [[hóll]]
|-
| 96
| [[mountain]]
| [[Berg]]
| [[berg]]
| [[berg]]; [[fjäll]]
| [[bjerg]]
| [[berg]]; [[fjell]]
| [[fell]]; [[fjall]]
|-
| 97
| [[summit]]
| [[Gipfel]]
| [[top]]
| [[topp]]
| [[top]]
| [[topp]]
| [[tindur]]
|-
| 98
| [[cave]]
| [[Höhle]]
| [[hol]]
| [[håla]]; [[grotta]]
| [[hule]]
| [[hule]]
| [[hellir]]
|-
| 99
| [[slope]]
| [[Abhang]]
| [[helling]]
| [[slänt]]; [[sluttning]]
| [[skrænt]]; [[skråning]]
| [[li]]; [[skråning]]
| [[hlíð]]; [[brekka]]
|-
| 100
| [[source]]
| [[Quelle]]
| [[bron]]
| [[källa]]
| [[kilde]]
| [[kilde]]
| [[lind]]; [[uppspretta]]
|-
| 101
| [[brook]]
| [[Bach]]
| [[beek]]
| [[bäck]]
| [[bæk]]
| [[bekk]]
| [[lækur]]
|-
| 102
| [[river]]
| [[Fluss]]
| [[stroom]]
| [[älv]]; [[flod]]
| [[flod]]
| [[elv]]
| [[á]]; [[fljót]]
|-
| 103
| [[shore]]
| [[Ufer]]
| [[wal]]; [[oever]]
| [[strand]]
| [[bred]]
| [[bredd]]
| [[árbakki]]; [[sjávarbakki]]
|-
| 104
| [[coast]]
| [[Küste]]
| [[kust]]
| [[kust]]
| [[kyst]]
| [[kyst]]
| [[strönd]]
|-
| 105
| [[land]]
| [[Festland]]
| [[vasteland]]
| [[fastland]]
| [[fastland]]
| [[fastland]]
| [[meginland]]
|-
| 106
| [[sea]]
| [[Meer]]
| [[zee]]
| [[hav]]
| [[hav]]
| [[hav]]
| [[haf]]; [[sjór]]
|-
| 107
| [[cove]], [[bay]]
| [[Bucht]]
| [[baai]]; [[inham]]
| [[vik]]; [[bukt]]
| [[bugt]]
| [[bukt]]
| [[vík]]
|-
| 108
| [[island]]
| [[Insel]]
| [[eiland]]
| [[ö]]
| [[ø]]
| [[øy]]
| [[eyja]]
|-
| 109
| [[flower]]
| [[Blume]]
| [[bloem]]
| [[blomma]]; [[blomster]]
| [[blomst]]
| [[blomst]]
| [[blóm]]
|-
| 110
| [[grass]]
| [[Gras]]
| [[gras]]
| [[gräs]]
| [[græs]]
| [[gress]]
| [[gras]]
|-
| 111
| [[root]]
| [[Wurzel]]
| [[wortel]]
| [[rot]]
| [[rod]]
| [[rot]]
| [[rót]]
|-
| 112
| [[tree]]
| [[Baum]]
| [[boom]]
| [[träd]]
| [[træ]]
| [[tre]]
| [[tré]]
|-
| 113
| [[trunk]]
| [[Stamm]]
| [[stam]]
| [[stam]]
| [[stamme]]
| [[stamme]]
| [[stofn]]
|-
| 114
| [[bark]]
| [[Rinde]]
| [[schors]]
| [[bark]]
| [[bark]]
| [[bark]]
| [[börkur]]
|-
| 115
| [[limb]]
| [[Ast]]
| [[tak]]
| [[gren]]
| [[gren]]
| [[gren]]
| [[grein]]
|-
| 116
| [[twig]]
| [[Zweig]]
| [[twijg]]
| [[kvist]]
| [[kvist]]
| [[kvist]]
| [[angi]]; [[kvistur]]
|-
| 117
| [[leaf]]
| [[Blatt]]
| [[blad]]
| [[löv]]; [[blad]]
| [[blad]]
| [[blad]]
| [[blað]]
|-
| 118
| [[birch]]
| [[Birke]]
| [[berk]]
| [[björk]]
| [[birk]]
| [[bjørk]]
| [[birki]]
|-
| 119
| [[pine]]
| [[Kiefer]] ([[Baum]])
| [[den]]
| [[tall]]
| [[fyrretræ]]
| [[furu]]
| [[fura]]
|-
| 120
| [[willow]]
| [[Weide]] ([[Baum]])
| [[wilg]]
| [[pil]]; [[vide]]
| [[piletræ]]
| [[selje]]; [[piletre]]
| [[víðir]]
|-
| 121
| [[fir]]
| [[Tanne]]
| [[spar]]
| [[gran]]
| [[gran]]
| [[gran]]
| [[greni]]
|-
| 122
| [[horn]]
| [[Horn]]
| [[hoorn]]
| [[horn]]
| [[horn]]
| [[horn]]
| [[horn]]
|-
| 123
| [[feather]]
| [[Feder]]
| [[veer]]; [[pluim]]
| [[fjäder]]
| [[fjer]]
| [[fjær]]
| [[fjöður]]
|-
| 124
| [[fur]]
| [[Fell]]
| [[vel]]
| [[fäll]]; [[skinn]]
| [[skind]]
| [[skinn]]
| [[skinn]]
|-
| 125
| [[wing]]
| [[Flügel]]
| [[vleugel]]
| [[vinge]]
| [[vinge]]
| [[vinge]]
| [[vængur]]
|-
| 126
| [[claw]]
| [[Klaue]]
| [[klauw]]
| [[klöv]]
| [[klov]]
| [[klauv]]
| [[kló]]
|-
| 127
| [[paw]]
| [[Kralle]]
| [[klauw]]
| [[klo]]
| [[klo]]
| [[klo]]
| [[kló]]
|-
| 128
| [[tail]]
| [[Schwanz]]
| [[staart]]
| [[svans]]; [[stjärt]]
| [[hale]]
| [[hale]]
| [[rófa]]; [[skott]]
|-
| 129
| [[egg]]
| [[Ei]]
| [[ei]]
| [[ägg]]
| [[æg]]
| [[egg]]
| [[egg]]
|-
| 130
| [[nest]]
| [[Nest]]
| [[nest]]
| [[rede]]; [[näste]]
| [[rede]]
| [[rede]]
| [[hreiður]]
|-
| 131
| [[lair]]
| [[Bau]]
| [[hol]]
| [[bo]]
| [[bo]]
| [[hi]]
| [[greni]]; [[bæli]]
|-
| 132
| [[animal]]
| [[Tier]]
| [[dier]]
| [[djur]]
| [[dyr]]
| [[dyr]]
| [[dýr]]
|-
| 133
| [[flock]]
| [[Herde]]
| [[kudde]]
| [[flock]]
| [[flok]]
| [[flokk]]
| [[hjörð]]
|-
| 134
| [[cow]]
| [[Kuh]]
| [[koe]]
| [[ko]]
| [[ko]]
| [[ku]]
| [[kýr]]
|-
| 135
| [[bull]]
| [[Bulle]]
| [[stier]]
| [[tjur]]
| [[tyr]]
| [[tyr]]
| [[boli]]
|-
| 136
| [[horse]]
| [[Pferd]]
| [[paard]]
| [[häst]]
| [[hest]]
| [[hest]]
| [[hestur]]
|-
| 137
| [[sheep]]
| [[Schaf]]
| [[schaap]]
| [[får]]
| [[får]]
| [[får]]
| [[kind]]
|-
| 138
| [[pig]]
| [[Schwein]]
| [[varken]]
| [[svin]]
| [[gris]]
| [[gris]]
| [[svín]]
|-
| 139
| [[dog]]
| [[Hund]]
| [[hond]]
| [[hund]]
| [[hund]]
| [[hund]]
| [[hundur]]
|-
| 140
| [[cat]]
| [[Katze]]
| [[kat]]
| [[katt]]
| [[kat]]
| [[katt]]
| [[köttur]]
|-
| 141
| [[bear]]
| [[Bär]]
| [[beer]]
| [[björn]]
| [[bjørn]]
| [[bjørn]]
| [[björn]]
|-
| 142
| [[squirrel]]
| [[Eichhörnchen]]
| [[eekhoorntje]]
| [[ekorre]]
| [[egern]]
| [[ekorn]]
| [[íkorni]]
|-
| 143
| [[elk]]
| [[Elch]]
| [[eland]]
| [[älg]]
| [[elg]]
| [[elg]]
| [[elgur]]
|-
| 144
| [[fox]]
| [[Fuchs]]
| [[vos]]
| [[räv]]
| [[ræv]]
| [[rev]]
| [[refur]]
|-
| 145
| [[hare]]
| [[Hase]]
| [[haas]]
| [[hare]]
| [[hare]]
| [[hare]]
| [[héri]]
|-
| 146
| [[mouse]]
| [[Maus]]
| [[muis]]
| [[mus]]
| [[mus]]
| [[mus]]
| [[mús]]
|-
| 147
| [[wolf]]
| [[Wolf]]
| [[wolf]]
| [[varg]]
| [[ulv]]
| [[ulv]]; [[varg]]
| [[úlfur]]
|-
| 148
| [[bird]]
| [[Vogel]]
| [[vogel]]
| [[fågel]]
| [[fugl]]
| [[fugl]]
| [[fugl]]
|-
| 149
| [[swarm]]
| [[Schwarm]]
| [[zwerm]]
| [[svärm]]
| [[sværm]]
| [[sverm]]
| [[sægur]]
|-
| 150
| [[chicken]]
| [[Huhn]]
| [[kip]]; [[hoen]]
| [[höns]]
| [[høne]]
| [[høne]]
| [[hæna]]
|-
| 151
| [[cock]]
| [[Hahn]]
| [[haan]]
| [[tupp]]
| [[hane]]
| [[hane]]
| [[hani]]
|-
| 152
| [[goose]]
| [[Gans]]
| [[gans]]
| [[gås]]
| [[gås]]
| [[gås]]
| [[gæs]]
|-
| 153
| [[eagle]]
| [[Adler]]
| [[arend]]
| [[örn]]
| [[ørn]]
| [[ørn]]
| [[örn]]
|-
| 154
| [[duck]]
| [[Ente]]
| [[eend]]
| [[anka]]
| [[and]]
| [[and]]
| [[önd]]
|-
| 155
| [[owl]]
| [[Eule]]
| [[uil]]
| [[uggla]]
| [[ugle]]
| [[ugle]]
| [[uggla]]
|-
| 156
| [[crane]]
| [[Kranich]]
| [[kraanvogel]]
| [[trana]]
| [[trane]]
| [[trane]]
| [[trana]]
|-
| 157
| [[crow]]
| [[Krähe]]
| [[kraai]]
| [[kråka]]
| [[krage]]
| [[kråke]]
| [[kráka]]
|-
| 158
| [[cuckoo]]
| [[Kuckuck]]
| [[koekoek]]
| [[gök]]
| [[gøg]]
| [[gjøk]]
| [[gaukur]]
|-
| 159
| [[swan]]
| [[Schwan]]
| [[zwaan]]
| [[svan]]
| [[svane]]
| [[svane]]
| [[svanur]]
|-
| 160
| [[fish]]
| [[Fisch]]
| [[vis]]
| [[fisk]]
| [[fisk]]
| [[fisk]]
| [[fiskur]]
|-
| 161
| [[perch]]
| [[Barsch]]
| [[baars]]
| [[abborre]]
| [[aborre]]
| [[abbor]]
| [[aborri]]
|-
| 162
| [[pike]]
| [[Hecht]]
| [[snoek]]
| [[gädda]]
| [[gedde]]
| [[gjedde]]
| [[gedda]]
|-
| 163
| [[snake]]
| [[Schlange]] ([[Tier]])
| [[slang]]
| [[orm]]
| [[slange]]
| [[orm]]; [[slange]]
| [[naðra]]
|-
| 164
| [[worm]]
| [[Wurm]]
| [[worm]]
| [[mask]]
| [[orm]]
| [[orm]]; [[mark]]
| [[ormur]]
|-
| 165
| [[spider]]
| [[Spinne]]
| [[spin]]
| [[spindel]]
| [[edderkop]]
| [[edderkopp]]
| [[kónguló]]
|-
| 166
| [[ant]]
| [[Ameise]]
| [[mier]]
| [[myra]]
| [[myre]]
| [[maur]]
| [[maur]]
|-
| 167
| [[louse]]
| [[Laus]]
| [[luis]]
| [[lus]]
| [[lus]]
| [[lus]]
| [[lús]]
|-
| 168
| [[gnat]]
| [[Mücke]]
| [[mug]]
| [[mygga]]
| [[myg]]
| [[mygg]]
| [[mý]]; [[mýfluga]]
|-
| 169
| [[fly]]
| [[Fliege]]
| [[vlieg]]
| [[fluga]]
| [[flue]]
| [[flue]]
| [[fluga]]
|-
| 170
| [[butterfly]]
| [[Schmetterling]]
| [[vlinder]]
| [[fjäril]]
| [[sommerfugl]]
| [[sommerfugl]]
| [[fiðrildi]]
|-
| 171
| [[berry]]
| [[Beere]]
| [[bes]]
| [[bär]]
| [[bær]]
| [[bær]]
| [[ber]]
|-
| 172
| [[apple]]
| [[Apfel]]
| [[appel]]
| [[äpple]]
| [[æble]]
| [[eple]]
| [[epli]]
|-
| 173
| [[mushroom]]
| [[Pilz]]
| [[paddestoel]]
| [[svamp]]
| [[svamp]]
| [[sopp]]
| [[sveppur]]
|-
| 174
| [[onion]]
| [[Zwiebel]]
| [[ui]]
| [[lök]]
| [[løg]]
| [[løk]]
| [[laukur]]
|-
| 175
| [[seed]]
| [[Saat]]
| [[zaad]]
| [[sådd]]
| [[sæd]]
| [[sæd]]
| [[fræ]]; [[útsæði]]
|-
| 176
| [[grain]]
| [[Korn]]
| [[graan]]; [[korrel]]
| [[korn]]
| [[korn]]
| [[korn]]
| [[korn]]
|-
| 177
| [[hay]]
| [[Heu]]
| [[hooi]]
| [[hö]]
| [[hø]]
| [[høy]]
| [[hey]]
|-
| 178
| [[peel]], [[husk]]
| [[Schale]]
| [[schil]]
| [[skal]]
| [[skræl]]
| [[skall]]
| [[hýði]]
|-
| 179
| [[pit]]
| [[Grube]]
| [[kuil]]
| [[grop]]
| [[grav]]
| [[grop]]
| [[gryfja]]
|-
| 180
| [[trap]]
| [[Falle]]
| [[val]]
| [[fälla]]
| [[fælde]]
| [[felle]]
| [[gildra]]
|-
| 181
| [[noose]]
| [[Schlinge]]
| [[strop]]
| [[snara]]
| [[snare]]
| [[snare]]
| [[snara]]
|-
| 182
| [[track]]
| [[Spur]]
| [[spoor]]
| [[spår]]
| [[spor]]
| [[spor]]
| [[spor]]
|-
| 183
| [[ash]]
| [[Asche]]
| [[as]]
| [[aska]]
| [[aske]]
| [[aske]]
| [[aska]]
|-
| 184
| [[filth]]
| [[Dreck]]
| [[drek]]
| [[lort]]
| [[snavs]]
| [[møkk]]; [[skitt]]
| [[óþverri]]
|-
| 185
| [[iron]]
| [[Eisen]]
| [[ijzer]]
| [[järn]]
| [[jern]]
| [[jern]]
| [[járn]]
|-
| 186
| [[gold]]
| [[Gold]]
| [[goud]]
| [[guld]]
| [[guld]]
| [[gull]]
| [[gull]]
|-
| 187
| [[silver]]
| [[Silber]]
| [[zilver]]
| [[silver]]
| [[sølv]]
| [[sølv]]
| [[silfur]]
|-
| 188
| [[coal]]
| [[Kohle]]
| [[kool]]
| [[kol]]
| [[kul]]
| [[kol]]; [[kull]]
| [[kol]]
|-
| 189
| [[glass]]
| [[Glas]]
| [[glas]]
| [[glas]]
| [[glas]]
| [[glass]]
| [[gler]]
|-
| 190
| [[clay]]
| [[Lehm]]
| [[klei]]
| [[lera]]
| [[ler]]
| [[leire]]
| [[leir]]
|-
| 191
| [[sand]]
| [[Sand]]
| [[zand]]
| [[sand]]
| [[sand]]
| [[sand]]
| [[sandur]]
|-
| 192
| [[human]]
| [[Mensch]]
| [[mens]]
| [[människa]]
| [[mennesge]]
| [[menneske]]
| [[maður]]; [[manneskja]]
|-
| 193
| [[man]]
| [[Mann]]
| [[man]]
| [[man]]
| [[mand]]
| [[mann]]
| [[maður]]; [[karlmaður]]
|-
| 194
| [[woman]]
| [[Frau]]
| [[vrouw]]
| [[kvinna]]
| [[kvinde]]
| [[kvinne]]
| [[kona]]
|-
| 195
| [[child]]
| [[Kind]]
| [[kind]]
| [[barn]]
| [[barn]]
| [[barn]]
| [[barn]]; [[krakki]]
|-
| 196
| [[boy]]
| [[Junge]]
| [[jongen]]
| [[pojke]]
| [[dreng]]
| [[gutt]]
| [[drengur]]
|-
| 197
| [[girl]]
| [[Mädchen]]
| [[meisje]]
| [[flicka]]
| [[pige]]
| [[pike]]; [[jente]]
| [[stelpa]]
|-
| 198
| [[family]]
| [[Familie]]
| [[gezin]]; [[familie]]
| [[familj]]
| [[familie]]
| [[familie]]
| [[fjölskylda]]
|-
| 199
| [[grandfather]]
| [[Großvater]]
| [[grootvader]]
| [[morfar]]
| [[bedstefar]]
| [[bestefar]]
| [[afi]]
|-
| 200
| [[grandmother]]
| [[Großmutter]]
| [[grootmoeder]]
| [[farmor]]
| [[bedstemor]]
| [[bestemor]]
| [[amma]]
|-
| 201
| [[parents]]
| [[Eltern]]
| [[ouders]]
| [[föräldrar]]
| [[forældre]]
| [[foreldre]]
| [[foreldrar]]
|-
| 202
| [[father]]
| [[Vater]]
| [[vader]]
| [[far]]
| [[far]]
| [[far]]
| [[faðir]]
|-
| 203
| [[mother]]
| [[Mutter]]
| [[moeder]]
| [[mor]]
| [[mor]]
| [[mor]]
| [[móðir]]
|-
| 204
| [[son]]
| [[Sohn]]
| [[zoon]]
| [[son]]
| [[søn]]
| [[sønn]]
| [[sonur]]
|-
| 205
| [[daughter]]
| [[Tochter]]
| [[dochter]]
| [[dotter]]
| [[datter]]
| [[datter]]
| [[dóttir]]
|-
| 206
| [[brother]]
| [[Bruder]]
| [[broer]]; [[broeder]]
| [[bror]]
| [[bror]]
| [[bror]]
| [[bróðir]]
|-
| 207
| [[sister]]
| [[Schwester]]
| [[zus]]; [[zuster]]
| [[syster]]
| [[søster]]
| [[søster]]
| [[systir]]
|-
| 208
| [[uncle]]
| [[Onkel]]
| [[oom]]
| [[morbror]]
| [[onkel]]
| [[onkel]]
| [[föðurbróðir]]
|-
| 209
| [[aunt]]
| [[Tante]]
| [[tante]]
| [[tant]]
| [[tante]]
| [[tante]]
| [[frænka]]; [[móðursystir]]
|-
| 210
| [[husband]]
| [[Ehemann]]
| [[echtgenoot]]
| [[äkta]] [[man]]
| [[ægtemand]]
| [[ektemann]]
| [[eiginmaður]]
|-
| 211
| [[wife]]
| [[Ehefrau]]
| [[echtgenote]]
| [[hustru]]
| [[hustru]]
| [[hustru]]
| [[eiginkona]]
|-
| 212
| [[joy]]
| [[Freude]]
| [[vreugde]]
| [[fröjd]]; [[glädje]]
| [[glæde]]
| [[glede]]
| [[gleði]]
|-
| 213
| [[laughter]]
| [[Gelächter]]
| [[gelach]]
| [[åtlöje]]
| [[latter]]
| [[latter]]
| [[hlátur]]
|-
| 214
| [[happiness]]
| [[Glück]]
| [[geluk]]
| [[lycka]]
| [[lykke]]
| [[lykke]]
| [[gæfa]]
|-
| 215
| [[grief]]
| [[Kummer]]
| [[verdriet]]
| [[sorg]]
| [[sorg]]
| [[sorg]]
| [[sorg]]
|-
| 216
| [[wish]]
| [[Wunsch]]
| [[wens]]; [[verlangen]]
| [[önskan]]
| [[ønske]]
| [[ønske]]
| [[ósk]]
|-
| 217
| [[desire]]
| [[Lust]]
| [[zin]]; [[lust]]
| [[lust]]
| [[lyst]]
| [[lyst]]
| [[fýsn]]; [[löngun]]
|-
| 218
| [[spirit]]
| [[Geist]]
| [[geest]]
| [[ande]]
| [[ånd]]
| [[ånd]]
| [[andi]]
|-
| 219
| [[thought]]
| [[Gedanke]]
| [[gedachte]]
| [[tanke]]
| [[tanke]]
| [[tanke]]
| [[hugsun]]
|-
| 220
| [[memory]]
| [[Gedächtnis]]
| [[geheugen]]
| [[minne]]
| [[hukommelse]]
| [[minne]]; [[hukommelse]]
| [[minni]]
|-
| 221
| [[mind]]
| [[Verstand]]
| [[verstand]]
| [[förstånd]]
| [[forstand]]
| [[forstand]]
| [[vit]]
|-
| 222
| [[meaning]]
| [[Sinn]]
| [[betekenis]]
| [[mening]]; [[betydelse]]
| [[mening]]; [[betydning]]
| [[mening]]; [[betydning]]
| [[merking]]
|-
| 223
| [[reason]]
| [[Grund]]
| [[reden]]
| [[skäl]]; [[grund]]
| [[grund]]
| [[grunn]]
| [[ástæða]]
|-
| 224
| [[truth]]
| [[Wahrheit]]
| [[waarheid]]
| [[sanning]]
| [[sandhed]]
| [[sannhet]]
| [[sannleikur]]
|-
| 225
| [[talk]]
| [[Gespräch]]
| [[gesprek]]
| [[samtal]]
| [[samtale]]
| [[samtale]]
| [[samtal]]
|-
| 226
| [[fairy]] [[tale]]
| [[Märchen]]
| [[sprookje]]
| [[saga]]
| [[eventyr]]
| [[eventyr]]
| [[ævintýri]]
|-
| 227
| [[story]]
| [[Erzählung]]
| [[verhaal]]
| [[berättelse]]
| [[fortælling]]
| [[fortelling]]
| [[saga]]
|-
| 228
| [[message]]
| [[Nachricht]]
| [[tijding]]
| [[meddelande]]
| [[efterretning]]
| [[melding]]
| [[frétt]]
|-
| 229
| [[news]]
| [[Neuigkeit]]
| [[nieuws]]; [[nieuwtje]]
| [[nyhet]]
| [[nyhed]]
| [[nyhet]]
| [[frétt]]
|-
| 230
| [[name]]
| [[Name]]
| [[naam]]
| [[namn]]
| [[navn]]
| [[navn]]
| [[nafn]]
|-
| 231
| [[puzzle]]
| [[Rätsel]]
| [[raadsel]]
| [[gåta]]
| [[gåde]]
| [[gåte]]
| [[gáta]]
|-
| 232
| [[speech]]
| [[Rede]]
| [[rede]]
| [[tal]]
| [[tale]]
| [[tale]]
| [[ræða]]
|-
| 233
| [[language]]
| [[Sprache]]
| [[taal]]
| [[språk]]
| [[sprog]]
| [[språk]]
| [[mál]]; [[tungumál]]
|-
| 234
| [[voice]]
| [[Stimme]]
| [[stem]]
| [[stämma]]
| [[stemme]]
| [[stemme]]
| [[rödd]]
|-
| 235
| [[word]]
| [[Wort]]
| [[woord]]
| [[ord]]
| [[ord]]
| [[ord]]
| [[orð]]
|-
| 236
| [[sign]]
| [[Zeichen]]
| [[teken]]
| [[tecken]]
| [[tegn]]
| [[tegn]]
| [[tákn]]; [[merki]]
|-
| 237
| [[call]]
| [[Ruf]]
| [[roep]]
| [[rop]]
| [[råb]]
| [[rop]]
| [[kall]]
|-
| 238
| [[noise]]
| [[Lärm]]
| [[lawaai]]
| [[bråk]]; [[oväsen]]
| [[larm]]
| [[bråk]]
| [[hávaði]]
|-
| 239
| [[sound]]
| [[Laut]]
| [[klank]]; [[geluid]]
| [[ljud]]
| [[lyd]]
| [[lyd]]
| [[hljóð]]
|-
| 240
| [[tone]]
| [[Ton]]
| [[toon]]; [[klank]]
| [[ton]]
| [[tone]]
| [[tone]]
| [[tónn]]
|-
| 241
| [[song]]
| [[Lied]]
| [[lied]]
| [[sång]]
| [[sang]]
| [[vise]]
| [[ljóð]]; [[söngur]]
|-
| 242
| [[calm]]
| [[Ruhe]]
| [[rust]]; [[stilte]]
| [[ro]]; [[lugn]]
| [[ro]]; [[hvile]]
| [[ro]]
| [[ró]]; [[kyrrð]]
|-
| 243
| [[people]]
| [[Leute]]
| [[lui]]; [[mensen]]
| [[folk]]
| [[folk]]; [[mennesker]]
| [[folk]]
| [[fólk]]
|-
| 244
| [[nation]]
| [[Volk]]
| [[volk]]
| [[folk]]
| [[folk]]
| [[folk]]
| [[þjóð]]
|-
| 245
| [[work]]
| [[Arbeit]]
| [[werk]]; [[arbeid]]
| [[arbete]]
| [[arbejde]]
| [[arbeid]]
| [[vinna]]
|-
| 246
| [[guest]]
| [[Gast]]
| [[gast]]
| [[gäst]]
| [[gæst]]
| [[gjest]]
| [[gestur]]
|-
| 247
| [[gift]]
| [[Geschenk]]
| [[cadeau]]; [[geschenk]]
| [[gåva]]; [[present]]
| [[gave]]
| [[gave]]
| [[gjöf]]
|-
| 248
| [[game]]
| [[Spiel]]
| [[spel]]
| [[lek]]; [[spel]]
| [[leg]]
| [[lek]]; [[spill]]
| [[leikur]]
|-
| 249
| [[company]]
| [[Gesellschaft]]
| [[gezelschap]]
| [[sällskap]]
| [[selskab]]
| [[selskap]]
| [[selskapur]]
|-
| 250
| [[help]]
| [[Hilfe]]
| [[hulp]]
| [[hjälp]]
| [[hjælp]]
| [[hjelp]]
| [[hjálp]]
|-
| 251
| [[friend]]
| [[Freund]]
| [[vriend]]
| [[vän]]
| [[ven]]
| [[venn]]
| [[vinur]]
|-
| 252
| [[companion]]
| [[Kamerad]]
| [[maat]]; [[metgezel]]
| [[kamrat]]
| [[kammerat]]
| [[kamerat]]
| [[félagi]]
|-
| 253
| [[matter]]
| [[Angelegenheit]]
| [[zaak]]; [[aangelegenheid]]
| [[ärende]]; [[angelägenhet]]
| [[sag]]; [[anliggende]]
| [[sak]]; [[anliggende]]
| [[mál]]; [[málefni]]
|-
| 254
| [[count]]
| [[Anzahl]]
| [[tal]]; [[aantal]]
| [[antal]]
| [[antal]]
| [[antall]]
| [[tala]]; [[fjöldi]]
|-
| 255
| [[sort]]
| [[Art]]
| [[slag]]; [[soort]]
| [[art]]; [[slag]]
| [[art]]
| [[art]]; [[slag]]
| [[tegund]]
|-
| 256
| [[piece]]
| [[Stück]]
| [[stuk]]
| [[stycke]]
| [[stykke]]
| [[stykke]]
| [[biti]]; [[stykki]]
|-
| 257
| [[part]]
| [[Teil]]
| [[deel]]
| [[del]]
| [[del]]
| [[del]]
| [[hluti]]; [[partur]]
|-
| 258
| [[half]]
| [[Hälfte]]
| [[helft]]
| [[halva]]
| [[halvdel]]
| [[halvdel]]
| [[helmingur]]
|-
| 259
| [[circle]]
| [[Kreis]]
| [[kring]]; [[cirkel]]
| [[krets]]; [[cirkel]]
| [[cirkel]]
| [[ring]]; [[sirkel]]
| [[hringur]]
|-
| 260
| [[cross]]
| [[Kreuz]]
| [[kruis]]
| [[kors]]; [[kryss]]
| [[kors]]; [[kryds]]
| [[kors]]; [[kryss]]
| [[kross]]; [[krossmark]]
|-
| 261
| [[line]]
| [[Linie]]
| [[lijn]]
| [[linje]]
| [[linie]]
| [[linje]]
| [[lína]]
|-
| 262
| [[stroke]]
| [[Strich]]
| [[haal]]; [[streep]]
| [[streck]]
| [[streg]]
| [[strek]]
| [[strik]]
|-
| 263
| [[gap]]
| [[Abstand]]
| [[afstand]]
| [[avstånd]]
| [[afstand]]
| [[avstand]]
| [[millibil]]
|-
| 264
| [[distance]]
| [[Entfernung]]
| [[afstand]]
| [[avstånd]]
| [[afstand]]
| [[avstand]]
| [[fjarlægð]]
|-
| 265
| [[area]]
| [[Gegend]]
| [[streek]]
| [[trakt]]
| [[egn]]
| [[strøk]]
| [[hérað]]
|-
| 266
| [[space]]
| [[Platz]]
| [[ruimte]]
| [[plats]]
| [[plads]]
| [[plass]]
| [[pláss]]
|-
| 267
| [[place]]
| [[Ort]]
| [[oord]]; [[plaats]]
| [[plats]]; [[ställe]]
| [[sted]]
| [[sted]]
| [[staður]]
|-
| 268
| [[side]]
| [[Seite]]
| [[zij]]; [[kant]]; [[zijde]]
| [[sida]]
| [[side]]
| [[side]]
| [[hlið]]
|-
| 269
| [[middle]]
| [[Mitte]]
| [[midden]]
| [[mitt]]
| [[midte]]
| [[midte]]
| [[miðja]]
|-
| 270
| [[item]]
| [[Gegenstand]]
| [[voorwerp]]
| [[föremål]]
| [[genstand]]
| [[gjenstand]]
| [[hlutur]]
|-
| 271
| [[thing]]
| [[Sache]]
| [[zaak]]
| [[sak]]
| [[sag]]
| [[sak]]
| [[mál]]
|-
| 272
| [[fringe]]
| [[Rand]]
| [[rand]]; [[boord]]
| [[rand]]
| [[rand]]
| [[rand]]
| [[brún]]
|-
| 273
| [[edge]]
| [[Kante]]
| [[kant]]
| [[kant]]
| [[kant]]
| [[kant]]
| [[rönd]]
|-
| 274
| [[corner]]
| [[Ecke]]
| [[hoek]]
| [[vrå]]; [[hörn]]
| [[hjørne]]
| [[hjørne]]
| [[horn]]
|-
| 275
| [[tip]]
| [[Spitze]]
| [[punt]]; [[spits]]
| [[spets]]
| [[spids]]
| [[spiss]]
| [[oddur]]
|-
| 276
| [[end]]
| [[Ende]]
| [[einde]]; [[uiteinde]]
| [[ända]]
| [[ende]]
| [[ende]]
| [[endi]]
|-
| 277
| [[hole]]
| [[Loch]]
| [[gat]]
| [[hål]]
| [[hul]]
| [[hull]]
| [[gat]]; [[hola]]
|-
| 278
| [[angle]]
| [[Winkel]]
| [[hoek]]
| [[vinkel]]
| [[vinkel]]
| [[vinkel]]
| [[skot]]; [[krókur]]
|-
| 279
| [[pattern]]
| [[Muster]]
| [[dessin]]; [[patroon]]
| [[mönster]]
| [[mønster]]
| [[mønster]]
| [[munstur]]
|-
| 280
| [[size]]
| [[Größe]]
| [[grootte]]
| [[storlek]]
| [[størrelse]]
| [[størrelse]]
| [[stærð]]
|-
| 281
| [[length]]
| [[Länge]]
| [[lengte]]
| [[längd]]
| [[længde]]
| [[lengde]]
| [[lengd]]
|-
| 282
| [[height]]
| [[Höhe]]
| [[hoogte]]
| [[höjd]]
| [[højde]]
| [[høyde]]
| [[hæð]]
|-
| 283
| [[weight]]
| [[Gewicht]]
| [[gewicht]]
| [[tyngd]]
| [[vægt]]
| [[vekt]]
| [[vigt]]; [[þyngd]]
|-
| 284
| [[amount]]
| [[Menge]]
| [[hoeveelheid]]
| [[mängd]]
| [[mængde]]
| [[mengde]]
| [[magn]]
|-
| 285
| [[heap]]
| [[Haufen]]
| [[hoop]]
| [[hög]]
| [[bunke]]
| [[haug]]; [[bunke]]
| [[hrúga]]; [[haugur]]
|-
| 286
| [[row]]
| [[Reihe]]
| [[rij]]; [[reeks]]
| [[rad]]
| [[række]]
| [[rekke]]
| [[röð]]
|-
| 287
| [[boat]]
| [[Boot]]
| [[boot]]
| [[båt]]
| [[båd]]
| [[båt]]
| [[bátur]]
|-
| 288
| [[oar]]
| [[Ruder]]
| [[roeiriem]]
| [[åra]]
| [[åre]]
| [[åre]]
| [[ár]]
|-
| 289
| [[sleigh]]
| [[Schlitten]]
| [[slee]]; [[slede]]
| [[släde]]
| [[kælk]]; [[slæde]]
| [[slede]]; [[kjelke]]
| [[sleði]]
|-
| 290
| [[ski]]
| [[Ski]]
| [[ski]]
| [[skida]]
| [[ski]]
| [[ski]]
| [[skíði]]
|-
| 291
| [[campfire]]
| [[Lagerfeuer]]
| [[kampvuur]]
| [[lägereld]]
| [[lejrbål]]
| [[leirbål]]
| [[varðeldur]]
|-
| 292
| [[load]]
| [[Last]]
| [[last]]; [[vracht]]
| [[last]]; [[börda]]
| [[last]]; [[byrde]]
| [[bør]]; [[last]]
| [[byrði]]; [[farmur]]
|-
| 293
| [[walk]]
| [[Gang]]
| [[wandeling]]
| [[gång]]
| [[gang]]
| [[gang]]
| [[ganga]]
|-
| 294
| [[step]]
| [[Schritt]]
| [[stap]]; [[schrede]]
| [[steg]]
| [[skridt]]
| [[steg]]; [[skritt]]
| [[skref]]
|-
| 295
| [[north]]
| [[Norden]]
| [[noorden]]
| [[norr]]
| [[nord]]
| [[nord]]
| [[norður]]
|-
| 296
| [[south]]
| [[Süden]]
| [[zuiden]]
| [[söder]]
| [[syd]]
| [[sør]]
| [[suður]]
|-
| 297
| [[west]]
| [[Westen]]
| [[westen]]
| [[väster]]
| [[vest]]
| [[vest]]
| [[vestur]]
|-
| 298
| [[east]]
| [[Osten]]
| [[oosten]]
| [[öster]]
| [[øst]]
| [[øst]]
| [[austur]]
|-
| 299
| [[wood]]
| [[Holz]]
| [[hout]]
| [[trä]]
| [[træ]]
| [[tre]]
| [[viður]]
|-
| 300
| [[board]]
| [[Brett]]
| [[plank]]
| [[bräda]]
| [[bræt]]
| [[fjøl]]; [[brett]]
| [[fjöl]]
|-
| 301
| [[slab]]
| [[Platte]]
| [[plaat]]
| [[platta]]
| [[plade]]
| [[plate]]
| [[flötur]]
|-
| 302
| [[support]], [[rest]]
| [[Stütze]]
| [[stut]]; [[steun]]
| [[stöd]]; [[stötta]]
| [[støtte]]
| [[støtte]]
| [[stoð]]
|-
| 303
| [[pole]]
| [[Stange]]
| [[stang]]
| [[stång]]
| [[stang]]
| [[stang]]
| [[stöng]]
|-
| 304
| [[stick]]
| [[Stock]]
| [[stok]]
| [[käpp]]; [[pinne]]
| [[stok]]
| [[pinne]]
| [[prik]]; [[stafur]]
|-
| 305
| [[staff]]
| [[Stab]]
| [[staf]]
| [[stav]]
| [[stav]]
| [[stav]]; [[kjepp]]
| [[prik]]; [[stafur]]
|-
| 306
| [[pipe]]
| [[Rohr]]
| [[pijp]]
| [[rör]]
| [[rør]]
| [[rør]]
| [[rör]]; [[pípa]]
|-
| 307
| [[house]]
| [[Haus]]
| [[huis]]
| [[hus]]
| [[hus]]
| [[hus]]
| [[hús]]
|-
| 308
| [[home]]
| [[Heim]]
| [[tehuis]]
| [[hem]]
| [[hjem]]
| [[hjem]]
| [[heimili]]
|-
| 309
| [[stove]]
| [[Ofen]]
| [[kachel]]
| [[ugn]]
| [[ovn]]
| [[ovn]]
| [[ofn]]
|-
| 310
| [[floor]]
| [[Fußboden]]
| [[vloer]]
| [[golv]]
| [[gulv]]
| [[gulv]]
| [[gólf]]
|-
| 311
| [[table]]
| [[Tisch]]
| [[tafel]]
| [[bord]]
| [[bord]]
| [[bord]]
| [[borð]]
|-
| 312
| [[chair]]
| [[Stuhl]]
| [[stoel]]
| [[stol]]
| [[stol]]
| [[stol]]
| [[stóll]]
|-
| 313
| [[cradle]]
| [[Wiege]]
| [[wieg]]
| [[vagga]]
| [[vugge]]
| [[vogge]]
| [[vagga]]
|-
| 314
| [[bed]]
| [[Bett]]
| [[bed]]
| [[säng]]
| [[seng]]
| [[seng]]
| [[rúm]]; [[hvíla]]
|-
| 315
| [[shelf]]
| [[Regal]]
| [[rek]]
| [[hylla]]
| [[reol]]
| [[reol]]; [[hylle]]
| [[hilla]]
|-
| 316
| [[box]]
| [[Kiste]]
| [[kist]]
| [[låda]]
| [[kasse]]
| [[kasse]]
| [[kassi]]
|-
| 317
| [[window]]
| [[Fenster]]
| [[raam]]; [[venster]]
| [[fönster]]
| [[vindue]]
| [[vindu]]
| [[gluggi]]
|-
| 318
| [[door]]
| [[Tür]]
| [[deur]]
| [[dörr]]
| [[dør]]
| [[dør]]
| [[dyr]]; [[hurð]]
|-
| 319
| [[gate]]
| [[Tor]]
| [[poort]]
| [[port]]
| [[port]]
| [[port]]
| [[hlið]]
|-
| 320
| [[fence]]
| [[Zaun]]
| [[omheining]]
| [[staket]]; [[stängsel]]
| [[stakit]]
| [[gjerde]]
| [[girðing]]; [[limgarður]]
|-
| 321
| [[roof]]
| [[Dach]]
| [[dak]]
| [[tak]]
| [[tag]]
| [[tak]]
| [[þak]]
|-
| 322
| [[ladder]]
| [[Leiter]]
| [[ladder]]
| [[stege]]
| [[stige]]
| [[stige]]
| [[stigi]]
|-
| 323
| [[broom]]
| [[Besen]]
| [[bezem]]
| [[kvast]]
| [[kost]]
| [[kost]]
| [[sópur]]
|-
| 324
| [[spade]]
| [[Spaten]]
| [[schop]]
| [[spade]]
| [[spade]]
| [[spade]]
| [[spaði]]
|-
| 325
| [[shovel]]
| [[Schaufel]]
| [[schep]]
| [[skovel]]; [[skyffel]]
| [[skovl]]
| [[skuffe]]
| [[skófla]]
|-
| 326
| [[fork]]
| [[Gabel]]
| [[vork]]
| [[gaffel]]
| [[gaffel]]
| [[gaffel]]
| [[gaffall]]
|-
| 327
| [[spoon]]
| [[Löffel]]
| [[lepel]]
| [[sked]]
| [[ske]]
| [[skje]]
| [[skeið]]
|-
| 328
| [[knife]]
| [[Messer]]
| [[mes]]
| [[kniv]]
| [[kniv]]
| [[kniv]]
| [[hnífur]]
|-
| 329
| [[nail]]
| [[Nagel]]
| [[spijker]]
| [[spik]]
| [[søm]]
| [[spiker]]
| [[nögl]]
|-
| 330
| [[net]]
| [[Netz]]
| [[net]]
| [[nät]]
| [[net]]
| [[nett]]
| [[net]]
|-
| 331
| [[hook]]
| [[Haken]]
| [[haak]]
| [[krok]]
| [[krog]]
| [[krok]]
| [[krókur]]
|-
| 332
| [[handle]]
| [[Griff]]
| [[handvat]]
| [[tag]]; [[handtag]]
| [[tag]]; [[håndtag]]
| [[tak]]; [[håndtak]]
| [[tak]]
|-
| 333
| [[lock]]
| [[Schloss]]
| [[slot]]
| [[las]]
| [[lås]]
| [[lås]]
| [[lás]]
|-
| 334
| [[picture]]
| [[Bild]]
| [[beeld]]
| [[bild]]
| [[billede]]
| [[bilde]]
| [[mynd]]
|-
| 335
| [[figure]]
| [[Figur]]
| [[figuur]]
| [[figur]]
| [[figur]]
| [[figur]]
| [[stytta]]
|-
| 336
| [[doll]]
| [[Puppe]]
| [[pop]]
| [[docka]]
| [[dukke]]
| [[dukke]]
| [[brúða]]
|-
| 337
| [[pouch]]
| [[Beutel]]
| [[zak]]; [[buidel]]
| [[påse]]
| [[pose]]
| [[pose]]
| [[poki]]; [[baggi]]
|-
| 338
| [[bundle]]
| [[Bündel]]
| [[pak]]; [[bundel]]
| [[bunt]]; [[knippa]]
| [[bylt]]; [[bundt]]
| [[bylt]]
| [[böggull]]
|-
| 339
| [[bag]]
| [[Tasche]]
| [[tas]]
| [[väska]]
| [[taske]]
| [[veske]]
| [[veski]]
|-
| 340
| [[bucket]]
| [[Eimer]]
| [[emmer]]
| [[hink]]; [[ämbar]]
| [[spand]]
| [[bøtte]]
| [[fata]]
|-
| 341
| [[cover]], [[lid]]
| [[Deckel]]
| [[deksel]]
| [[lock]]
| [[låg]]
| [[lokk]]
| [[lok]]
|-
| 342
| [[dishes]]
| [[Geschirr]]
| [[vaatwerk]]
| [[servis]]; [[porslin]]
| [[husgeråd]]
| [[kjøkkentøy]]
| [[leirtau]]
|-
| 343
| [[sack]]
| [[Sack]]
| [[zak]]
| [[säck]]
| [[sæk]]
| [[sekk]]
| [[sekkur]]
|-
| 344
| [[cup]]
| [[Tasse]]
| [[kop]]
| [[kopp]]
| [[kop]]
| [[kopp]]
| [[bolli]]
|-
| 345
| [[pot]]
| [[Topf]]
| [[pan]]
| [[gryta]]; [[kastrull]]
| [[gryde]]
| [[gryte]]
| [[pottur]]
|-
| 346
| [[kettle]]
| [[Kessel]]
| [[ketel]]
| [[kittel]]
| [[kedel]]
| [[kjele]]
| [[ketill]]
|-
| 347
| [[meal]]
| [[Essen]]
| [[eten]]
| [[mål]]
| [[måltid]]
| [[mål]]
| [[matur]]
|-
| 348
| [[food]]
| [[Nahrung]]
| [[voedsel]]
| [[näring]]
| [[mad]]; [[næring]]
| [[mat]]; [[næring]]
| [[fæða]]
|-
| 349
| [[dish]]
| [[Speise]]
| [[spijs]]
| [[maträtt]]
| [[ret]]
| [[matrett]]
| [[réttur]]; [[matarréttur]]
|-
| 350
| [[meat]]
| [[Fleisch]]
| [[vlees]]
| [[kött]]
| [[kød]]
| [[kjøtt]]
| [[kjöt]]
|-
| 351
| [[corn]]
| [[Getreide]]
| [[graan]]
| [[säd]]; [[spannmål]]
| [[korn]]
| [[korn]]
| [[korn]]
|-
| 352
| [[mush]]
| [[Brei]]
| [[pap]]; [[brij]]
| [[gröt]]
| [[grød]]
| [[grøt]]
| [[grautur]]
|-
| 353
| [[bread]]
| [[Brot]]
| [[brood]]
| [[bröd]]
| [[brød]]
| [[brød]]
| [[brauð]]
|-
| 354
| [[slice]]
| [[Scheibe]]
| [[plak]]; [[snede]]
| [[skiva]]
| [[skive]]
| [[skive]]
| [[sneið]]
|-
| 355
| [[fat]]
| [[Fett]]
| [[vet]]
| [[fett]]
| [[fedt]]
| [[fett]]
| [[fita]]
|-
| 356
| [[butter]]
| [[Butter]]
| [[boter]]
| [[smör]]
| [[smør]]
| [[smør]]
| [[smjör]]
|-
| 357
| [[oil]]
| [[Öl]]
| [[olie]]
| [[olja]]
| [[olie]]
| [[olje]]
| [[olía]]
|-
| 358
| [[salt]]
| [[Salz]]
| [[zout]]
| [[salt]]
| [[salt]]
| [[salt]]
| [[salt]]
|-
| 359
| [[soup]]
| [[Suppe]]
| [[soep]]
| [[soppa]]
| [[suppe]]
| [[suppe]]
| [[súpa]]
|-
| 360
| [[honey]]
| [[Honig]]
| [[honing]]
| [[honung]]
| [[honning]]
| [[honning]]
| [[hunang]]
|-
| 361
| [[milk]]
| [[Milch]]
| [[melk]]
| [[mjölk]]
| [[mælk]]
| [[melk]]
| [[mjólk]]
|-
| 362
| [[tea]]
| [[Tee]]
| [[thee]]
| [[te]]
| [[te]]
| [[te]]
| [[te]]
|-
| 363
| [[leather]]
| [[Leder]]
| [[leer]]; [[leder]]
| [[läder]]
| [[skind]]
| [[lær]]; [[skinn]]
| [[skinn]]
|-
| 364
| [[wool]]
| [[Wolle]]
| [[wol]]
| [[ull]]; [[ylle]]
| [[uld]]
| [[ull]]
| [[ull]]
|-
| 365
| [[cloth]]
| [[Stoff]]
| [[stof]]
| [[tyg]]; [[stoff]]
| [[stof]]
| [[tøy]]; [[stoff]]
| [[dúkur]]
|-
| 366
| [[needle]]
| [[Nadel]]
| [[naald]]
| [[nål]]
| [[nål]]
| [[nål]]
| [[nál]]
|-
| 367
| [[thread]]
| [[Faden]]
| [[draad]]
| [[tråd]]
| [[tråd]]
| [[tråd]]
| [[þráður]]
|-
| 368
| [[button]]
| [[Knopf]]
| [[knoop]]
| [[knapp]]
| [[knap]]
| [[knapp]]
| [[tala]]; [[hnappur]]
|-
| 369
| [[knot]]
| [[Knoten]]
| [[knoop]]
| [[knut]]
| [[knude]]
| [[knute]]
| [[hnútur]]
|-
| 370
| [[paint]]
| [[Farbe]]
| [[verf]]
| [[färg]]
| [[farve]]
| [[farge]]
| [[málning]]
|-
| 371
| [[clothes]]
| [[Kleidung]]
| [[kledij]]; [[kleding]]
| [[klädsel]]
| [[påklædning]]
| [[påkledning]]
| [[búningur]]; [[klæðnaður]]
|-
| 372
| [[shirt]]
| [[Hemd]]
| [[hemd]]
| [[skjorta]]
| [[skjorte]]
| [[skjorte]]
| [[skyrta]]
|-
| 373
| [[collar]]
| [[Kragen]]
| [[kraag]]
| [[krage]]
| [[krave]]
| [[krage]]
| [[kragi]]; [[flibbi]]
|-
| 374
| [[sleeve]]
| [[Ärmel]]
| [[mouw]]
| [[ärm]]
| [[ærme]]
| [[erme]]
| [[ermi]]
|-
| 375
| [[trousers]]
| [[Hose]]
| [[broek]]; [[pantalon]]
| [[byxor]]
| [[bukser]]
| [[bukse]]
| [[buxur]]
|-
| 376
| [[belt]]
| [[Gürtel]]
| [[riem]]; [[gordel]]
| [[bälte]]
| [[bælte]]
| [[belte]]
| [[belti]]
|-
| 377
| [[cap]]
| [[Mütze]]
| [[muts]]
| [[mössa]]
| [[hue]]
| [[lue]]
| [[húfa]]
|-
| 378
| [[shoe]]
| [[Schuh]]
| [[schoen]]
| [[sko]]
| [[sko]]
| [[sko]]
| [[skór]]
|-
| 379
| [[boot]]
| [[Stiefel]]
| [[laars]]
| [[stövel]]
| [[støvle]]
| [[støvel]]
| [[stígvél]]
|-
| 380
| [[ring]]
| [[Ring]]
| [[ring]]
| [[ring]]
| [[ring]]
| [[ring]]
| [[hringur]]
|-
| 381
| [[ribbon]]
| [[Band]]
| [[lint]]
| [[band]]
| [[bånd]]
| [[band]]
| [[band]]
|-
| 382
| [[comb]]
| [[Kamm]]
| [[kam]]
| [[kam]]
| [[kam]]
| [[kam]]
| [[greiða]]
|-
| 383
| [[mirror]]
| [[Spiegel]]
| [[spiegel]]
| [[spegel]]
| [[spejl]]
| [[speil]]
| [[spegill]]
|-
| 384
| [[strap]]
| [[Riemen]]
| [[riem]]
| [[rem]]
| [[rem]]
| [[rem]]
| [[ól]]; [[reim]]
|-
| 385
| [[string]]
| [[Schnur]]
| [[koord]]
| [[snöre]]
| [[snor]]
| [[snor]]
| [[snúra]]
|-
| 386
| [[leash]]
| [[Leine]]
| [[lijn]]
| [[lina]]
| [[snor]]
| [[line]]
| [[band]]
|-
| 387
| [[blanket]]
| [[Decke]]
| [[deken]]
| [[täcke]]
| [[tæppe]]
| [[teppe]]
| [[teppi]]
|-
| 388
| [[pillow]]
| [[Kissen]]
| [[kussen]]
| [[dyna]]; [[kudde]]
| [[pude]]
| [[pute]]
| [[koddi]]
|-
| 389
| [[scarf]]
| [[Tuch]]
| [[doek]]
| [[sjal]]
| [[sjaltørklæde]]
| [[tøy]]
| [[klútur]]
|-
| 390
| [[towel]]
| [[Handtuch]]
| [[handdoek]]
| [[handduk]]
| [[håndklæde]]
| [[håndkle]]
| [[þurrka]]; [[handklæði]]
|-
| 391
| [[force]]
| [[Kraft]]
| [[kracht]]
| [[kraft]]
| [[kraft]]
| [[kraft]]
| [[afl]]; [[kraftur]]
|-
| 392
| [[strength]]
| [[Stärke]]
| [[sterkte]]
| [[styrka]]
| [[styrke]]
| [[styrke]]
| [[styrkur]]
|-
| 393
| [[health]]
| [[Gesundheit]]
| [[gezondheid]]
| [[hälsa]]
| [[sundhed]]
| [[helse]]; [[sunnhet]]
| [[heilsa]]; [[heilbrigði]]
|-
| 394
| [[illness]]
| [[Krankheit]]
| [[ziekte]]
| [[sjukdom]]
| [[sygdom]]
| [[syke]]; [[sykdom]]
| [[sjúkdómur]]
|-
| 395
| [[pain]]
| [[Schmerz]]
| [[pijn]]
| [[smärta]]
| [[smerte]]
| [[smerte]]
| [[sársauki]]
|-
| 396
| [[wound]]
| [[Wunde]]
| [[wond]]
| [[sår]]
| [[sår]]
| [[sår]]
| [[sár]]
|-
| 397
| [[fever]]
| [[Fieber]]
| [[koorts]]
| [[feber]]
| [[feber]]
| [[feber]]
| [[hitasótt]]
|-
| 398
| [[medicine]]
| [[Arznei]]
| [[medicament]]; [[geneesmiddel]]
| [[medicin]]; [[läkemedel]]
| [[medicin]]; [[lægemiddel]]
| [[medisin]]; [[legemiddel]]
| [[lyf]]
|-
| 399
| [[bridge]]
| [[Brücke]]
| [[brug]]
| [[bro]]
| [[bro]]
| [[bro]]
| [[brú]]
|-
| 400
| [[well]]
| [[Brunnen]]
| [[put]]; [[bron]]
| [[brunn]]
| [[brønd]]
| [[brønn]]
| [[brunnur]]
|-
| 401
| [[pasture]]
| [[Weide]]
| [[wei]]; [[weide]]
| [[bete]]
| [[græsgang]]
| [[beite]]
| [[hagi]]
|-
| 402
| [[path]]
| [[Pfad]]
| [[pad]]
| [[stig]]
| [[sti]]
| [[sti]]
| [[stígur]]
|-
| 403
| [[way]]
| [[Weg]]
| [[weg]]
| [[väg]]
| [[vej]]
| [[vei]]
| [[vegur]]
|-
| 404
| [[road]]
| [[Straße]]
| [[baan]]; [[straat]]
| [[gata]]
| [[gade]]
| [[gate]]
| [[gata]]; [[stræti]]
|-
| 405
| [[village]]
| [[Dorf]]
| [[dorp]]
| [[by]]
| [[landsby]]
| [[landsby]]
| [[þorp]]
|-
| 406
| [[town]]
| [[Stadt]]
| [[stad]]
| [[stad]]
| [[by]]
| [[by]]
| [[borg]]
|-
| 407
| [[letter]]
| [[Brief]]
| [[brief]]
| [[brev]]
| [[brev]]
| [[brev]]
| [[bréf]]
|-
| 408
| [[book]]
| [[Buch]]
| [[boek]]
| [[bok]]
| [[bog]]
| [[bok]]
| [[bók]]
|-
| 409
| [[character]]
| [[Buchstabe]]
| [[letter]]
| [[bokstav]]
| [[bogstav]]
| [[bokstav]]
| [[bókstafur]]
|-
| 410
| [[newspaper]]
| [[Zeitung]]
| [[krant]]; [[dagblad]]
| [[tidning]]
| [[avis]]
| [[avis]]
| [[dagblað]]
|-
| 411
| [[life]]
| [[Leben]]
| [[leven]]
| [[liv]]
| [[liv]]
| [[liv]]
| [[líf]]
|-
| 412
| [[death]]
| [[Tod]]
| [[dood]]
| [[död]]
| [[død]]
| [[død]]
| [[dauði]]
|-
| 413
| [[grave]]
| [[Grab]]
| [[graf]]
| [[grav]]
| [[grav]]
| [[grav]]
| [[gröf]]
|-
| 414
| [[church]]
| [[Kirche]]
| [[kerk]]
| [[kyrka]]
| [[kirke]]
| [[kirke]]
| [[kirkja]]
|-
| 415
| [[sin]]
| [[Sünde]]
| [[zonde]]
| [[synd]]
| [[synd]]
| [[synd]]
| [[synd]]
|-
| 416
| [[god]]
| [[Gott]]
| [[god]]
| [[gud]]
| [[gud]]
| [[gud]]
| [[guð]]
|-
| 417
| [[worker]]
| [[Arbeiter]]
| [[arbeider]]
| [[arbetare]]
| [[arbejder]]
| [[arbeider]]
| [[verkamaður]]
|-
| 418
| [[boss]]
| [[Chef]]
| [[chef]]
| [[chef]]
| [[chef]]
| [[sjef]]
| [[yfirmaður]]
|-
| 419
| [[master]]
| [[Meister]]
| [[meester]]
| [[mästare]]
| [[mester]]
| [[mester]]
| [[meistari]]
|-
| 420
| [[doctor]]
| [[Arzt]]
| [[arts]]; [[dokter]]
| [[läkare]]
| [[læge]]
| [[lege]]
| [[læknir]]
|-
| 421
| [[teacher]]
| [[Lehrer]]
| [[leraar]]; [[onderwijzer]]
| [[lärare]]
| [[lærer]]
| [[lærer]]
| [[kennari]]
|-
| 422
| [[money]]
| [[Geld]]
| [[geld]]
| [[pengar]]
| [[penge]]
| [[penger]]
| [[peningar]]
|-
| 423
| [[business]]
| [[Geschäft]]
| [[zaak]]
| [[rörelse]]
| [[forretning]]
| [[forretning]]
| [[viðskipti]]
|-
| 424
| [[shop]]
| [[Laden]]
| [[winkel]]
| [[affär]]
| [[butik]]; [[forretning]]
| [[butikk]]
| [[búð]]; [[verslun]]
|-
| 425
| [[price]]
| [[Preis]]
| [[prijs]]
| [[pris]]
| [[pris]]
| [[pris]]
| [[verð]]
|-
| 426
| [[ware]]
| [[Ware]]
| [[waar]]
| [[vara]]
| [[vare]]
| [[vare]]
| [[vara]]
|-
| 427
| [[benefit]]
| [[Nutzen]]
| [[nut]]; [[voordeel]]
| [[gagn]]; [[nytta]]
| [[nytte]]
| [[nytte]]
| [[gagn]]
|-
| 428
| [[wealth]]
| [[Reichtum]]
| [[rijkdom]]
| [[rikedom]]
| [[rigdom]]
| [[rikdom]]
| [[auður]]
|-
| 429
| [[world]]
| [[Welt]]
| [[wereld]]
| [[värld]]
| [[verden]]
| [[verden]]
| [[veröld]]
|-
| 430
| [[country]]
| [[Land]]
| [[land]]
| [[land]]
| [[land]]
| [[land]]
| [[land]]
|-
| 431
| [[state]]
| [[Staat]]
| [[staat]]
| [[stat]]
| [[stat]]
| [[stat]]
| [[ríki]]
|-
| 432
| [[king]]
| [[König]]
| [[koning]]
| [[kung]]; [[konung]]
| [[konge]]
| [[konge]]
| [[konungur]]
|-
| 433
| [[power]]
| [[Macht]]
| [[macht]]
| [[makt]]
| [[magt]]
| [[makt]]
| [[vald]]
|-
| 434
| [[border]]
| [[Grenze]]
| [[grens]]
| [[gräns]]
| [[grænse]]
| [[grense]]
| [[landamæri]]
|-
| 435
| [[war]]
| [[Krieg]]
| [[oorlog]]
| [[krig]]
| [[krig]]
| [[krig]]
| [[stríð]]
|-
| 436
| [[enemy]]
| [[Feind]]
| [[vijand]]
| [[fiende]]
| [[fjende]]
| [[fiende]]
| [[fjandmaður]]
|-
| 437
| [[violence]]
| [[Gewalt]]
| [[geweld]]
| [[våld]]
| [[vold]]
| [[vold]]
| [[ofbeldi]]
|-
| 438
| [[fight]]
| [[Kampf]]
| [[strijd]]; [[gevecht]]
| [[kamp]]; [[strid]]
| [[kamp]]
| [[kamp]]
| [[bardagi]]
|-
| 439
| [[bow]]
| [[Bogen]] ([[Waffe]])
| [[boog]]
| [[båge]]
| [[bue]]
| [[bue]]
| [[bogi]]
|-
| 440
| [[arrow]]
| [[Pfeil]]
| [[pijl]]
| [[pil]]
| [[pil]]
| [[pil]]
| [[ör]]
|-
| 441
| [[gun]]
| [[Gewehr]]
| [[geweer]]
| [[gevär]]
| [[gevær]]
| [[gevær]]
| [[byssa]]
|-
| 442
| [[mistake]]
| [[Fehler]]
| [[fout]]
| [[fel]]
| [[fejl]]
| [[feil]]
| [[villa]]
|-
| 443
| [[lie]]
| [[Lüge]]
| [[leugen]]
| [[lögn]]
| [[løgn]]
| [[løgn]]
| [[lygi]]
|-
| 444
| [[damage]]
| [[Schaden]]
| [[schade]]
| [[skada]]
| [[skade]]
| [[skade]]
| [[skemmd]]
|-
| 445
| [[misfortune]]
| [[Unglück]]
| [[tegenspoed]]
| [[otur]]; [[olycka]]
| [[uheld]]; [[ulykke]]
| [[uhell]]
| [[óhamingja]]
|-
| 446
| [[fault]]
| [[Schuld]]
| [[schuld]]
| [[skuld]]
| [[skyld]]
| [[skyld]]
| [[sök]]
|-
| 447
| [[age]]
| [[Alter]]
| [[leeftijd]]
| [[ålder]]
| [[alder]]
| [[alder]]
| [[aldur]]
|-
| 448
| [[end]]
| [[Schluss]]
| [[slot]]
| [[slut]]
| [[slut]]; [[slutning]]
| [[slutt]]
| [[lok]]; [[endir]]
|-
| 449
| [[time]]
| [[Zeit]]
| [[tijd]]
| [[tid]]
| [[tid]]
| [[tid]]
| [[tími]]
|-
| 450
| [[day]]
| [[Tag]]
| [[dag]]
| [[dag]]
| [[dag]]
| [[dag]]
| [[dagur]]
|-
| 451
| [[morning]]
| [[Morgen]]
| [[morgen]]; [[ochtend]]
| [[morgon]]
| [[morgen]]
| [[morgen]]
| [[morgunn]]
|-
| 452
| [[noon]]
| [[Mittag]]
| [[middag]]
| [[middag]]
| [[middag]]
| [[middag]]
| [[hádegi]]
|-
| 453
| [[evening]]
| [[Abend]]
| [[avond]]
| [[kväll]]
| [[aften]]
| [[aften]]
| [[kvöld]]
|-
| 454
| [[night]]
| [[Nacht]]
| [[nacht]]
| [[natt]]
| [[nat]]
| [[natt]]
| [[nótt]]
|-
| 455
| [[week]]
| [[Woche]]
| [[week]]
| [[vecka]]
| [[uge]]
| [[uke]]
| [[vika]]
|-
| 456
| [[month]]
| [[Monat]]
| [[maand]]
| [[månad]]
| [[måned]]
| [[måned]]
| [[mánuður]]
|-
| 457
| [[year]]
| [[Jahr]]
| [[jaar]]
| [[år]]
| [[år]]
| [[år]]
| [[ár]]
|-
| 458
| [[spring]]
| [[Frühling]]
| [[lente]]; [[voorjaar]]
| [[vår]]
| [[forår]]
| [[vår]]
| [[vor]]
|-
| 459
| [[summer]]
| [[Sommer]]
| [[zomer]]
| [[sommar]]
| [[sommer]]
| [[sommer]]
| [[sumar]]
|-
| 460
| [[autumn]]
| [[Herbst]]
| [[herfst]]
| [[höst]]
| [[efterår]]
| [[høst]]
| [[haust]]
|-
| 461
| [[winter]]
| [[Winter]]
| [[winter]]
| [[vinter]]
| [[vinter]]
| [[vinter]]
| [[vetur]]
|-
| 462
| [[January]]
| [[Januar]]
| [[januari]]
| [[januari]]
| [[januar]]
| [[januar]]
| [[janúar]]
|-
| 463
| [[February]]
| [[Februar]]
| [[februari]]
| [[februari]]
| [[februar]]
| [[februar]]
| [[február]]
|-
| 464
| [[March]]
| [[März]]
| [[maart]]
| [[mars]]
| [[marts]]
| [[mars]]
| [[mars]]
|-
| 465
| [[April]]
| [[April]]
| [[april]]
| [[april]]
| [[april]]
| [[april]]
| [[apríl]]
|-
| 466
| [[May]]
| [[Mai]]
| [[mei]]
| [[maj]]
| [[maj]]
| [[mai]]
| [[maí]]
|-
| 467
| [[June]]
| [[Juni]]
| [[juni]]
| [[juni]]
| [[juni]]
| [[juni]]
| [[júní]]
|-
| 468
| [[July]]
| [[Juli]]
| [[juli]]
| [[juli]]
| [[juli]]
| [[juli]]
| [[júlí]]
|-
| 469
| [[August]]
| [[August]]
| [[augustus]]
| [[augusti]]
| [[august]]
| [[august]]
| [[ágúst]]
|-
| 470
| [[September]]
| [[September]]
| [[september]]
| [[september]]
| [[september]]
| [[september]]
| [[september]]
|-
| 471
| [[October]]
| [[Oktober]]
| [[oktober]]
| [[oktober]]
| [[oktober]]
| [[oktober]]
| [[október]]
|-
| 472
| [[November]]
| [[November]]
| [[november]]
| [[november]]
| [[november]]
| [[november]]
| [[nóvember]]
|-
| 473
| [[December]]
| [[Dezember]]
| [[december]]
| [[december]]
| [[december]]
| [[desember]]
| [[desember]]
|-
| 474
| [[Monday]]
| [[Montag]]
| [[maandag]]
| [[måndag]]
| [[mandag]]
| [[mandag]]
| [[mánudagur]]
|-
| 475
| [[Tuesday]]
| [[Dienstag]]
| [[dinsdag]]
| [[tisdag]]
| [[tirsdag]]
| [[tirsdag]]
| [[þriðjudagur]]
|-
| 476
| [[Wednesday]]
| [[Mittwoch]]
| [[woensdag]]
| [[onsdag]]
| [[onsdag]]
| [[onsdag]]
| [[miðvikudagur]]
|-
| 477
| [[Thursday]]
| [[Donnerstag]]
| [[donderdag]]
| [[torsdag]]
| [[torsdag]]
| [[torsdag]]
| [[fimmtudagur]]
|-
| 478
| [[Friday]]
| [[Freitag]]
| [[vrijdag]]
| [[fredag]]
| [[fredag]]
| [[fredag]]
| [[föstudagur]]
|-
| 479
| [[Saturday]]
| [[Samstag]]
| [[zaterdag]]
| [[lördag]]
| [[lørdag]]
| [[lørdag]]
| [[laugardagur]]
|-
| 480
| [[Sunday]]
| [[Sonntag]]
| [[zondag]]
| [[söndag]]
| [[søndag]]
| [[søndag]]
| [[sunnudagur]]
|-
| 481
| [[big]]
| [[groß]]
| [[groot]]
| [[stor]]
| [[stor]]
| [[stor]]
| [[stór]]
|-
| 482
| [[little]]
| [[klein]]
| [[klein]]
| [[liten]]
| [[lille]]
| [[liten]]
| [[lítill]]
|-
| 483
| [[long]]
| [[lang]]
| [[lang]]
| [[lång]]
| [[lang]]
| [[lang]]
| [[langur]]
|-
| 484
| [[short]]
| [[kurz]]
| [[kort]]
| [[kort]]
| [[kort]]
| [[kort]]
| [[stuttur]]
|-
| 485
| [[wide]]
| [[breit]]
| [[breed]]
| [[bred]]
| [[bred]]
| [[bred]]
| [[breiður]]
|-
| 486
| [[narrow]]
| [[schmal]]
| [[smal]]
| [[smal]]
| [[smal]]
| [[smal]]
| [[mjór]]
|-
| 487
| [[dense]]
| [[dicht]]
| [[dicht]]
| [[tät]]
| [[tæt]]
| [[tett]]
| [[þéttur]]
|-
| 488
| [[thick]]
| [[dick]] ([[Gegenstand]])
| [[dik]]
| [[tjock]]
| [[tyk]]
| [[tykk]]
| [[þykkur]]
|-
| 489
| [[thin]]
| [[dünn]]
| [[dun]]
| [[tunn]]
| [[tynd]]
| [[tynn]]
| [[þunnur]]
|-
| 490
| [[delicate]], [[fine]]
| [[fein]]
| [[fijn]]
| [[fin]]
| [[fin]]
| [[fin]]
| [[fíngerður]]
|-
| 491
| [[firm]], [[solid]]
| [[fest]]
| [[vast]]
| [[fast]]
| [[fast]]
| [[fast]]
| [[fastur]]
|-
| 492
| [[flat]]
| [[flach]]
| [[plat]]
| [[platt]]
| [[flad]]
| [[flat]]
| [[flatur]]
|-
| 493
| [[smooth]]
| [[glatt]]
| [[glad]]
| [[glatt]]
| [[glat]]
| [[glatt]]
| [[háll]]; [[sléttur]]
|-
| 494
| [[hard]]
| [[hart]]
| [[hard]]
| [[hård]]
| [[hård]]
| [[hard]]
| [[harður]]
|-
| 495
| [[soft]]
| [[weich]]
| [[week]]
| [[mjuk]]
| [[blød]]
| [[myk]]; [[bløt]]
| [[mjúkur]]
|-
| 496
| [[round]]
| [[rund]]
| [[rond]]
| [[rund]]
| [[rund]]
| [[rund]]
| [[kringlóttur]]
|-
| 497
| [[pointed]]
| [[spitz]]
| [[spits]]; [[puntig]]
| [[toppig]]; [[spetsig]]
| [[spids]]
| [[spiss]]
| [[oddhvass]]
|-
| 498
| [[sharp]]
| [[scharf]]
| [[scherp]]
| [[vass]]; [[skarp]]
| [[skarp]]
| [[kvass]]
| [[beittur]]
|-
| 499
| [[blunt]]
| [[stumpf]]
| [[stomp]]
| [[slö]]
| [[sløv]]; [[stump]]
| [[stubb]]
| [[bitlaus]]
|-
| 500
| [[heavy]]
| [[schwer]]
| [[zwaar]]
| [[tung]]
| [[tung]]
| [[tung]]
| [[þungur]]
|-
| 501
| [[beautiful]]
| [[schön]]
| [[mooi]]; [[fraai]]
| [[skön]]; [[vacker]]
| [[skøn]]
| [[pen]]; [[vakker]]
| [[fagur]]; [[fallegur]]
|-
| 502
| [[hot]]
| [[heiß]]
| [[heet]]
| [[het]]
| [[hed]]
| [[het]]
| [[heitur]]
|-
| 503
| [[warm]]
| [[warm]]
| [[warm]]
| [[varm]]
| [[varm]]
| [[varm]]
| [[hlýr]]; [[heitur]]
|-
| 504
| [[cold]]
| [[kalt]]
| [[koud]]
| [[kall]]
| [[kold]]
| [[kald]]
| [[kaldur]]
|-
| 505
| [[cool]]
| [[kühl]]
| [[koel]]
| [[sval]]; [[kylig]]
| [[kølig]]
| [[kjølig]]
| [[svalur]]
|-
| 506
| [[fresh]]
| [[frisch]]
| [[fris]]
| [[färsk]]
| [[frisk]]
| [[fersk]]
| [[frískur]]
|-
| 507
| [[damp]]
| [[feucht]]
| [[vochtig]]
| [[fuktig]]
| [[fugtig]]
| [[fuktig]]
| [[rakur]]; [[þvalur]]
|-
| 508
| [[wet]]
| [[nass]]
| [[nat]]
| [[våt]]
| [[våd]]
| [[våt]]
| [[votur]]; [[blautur]]
|-
| 509
| [[dry]]
| [[trocken]]
| [[droog]]
| [[torr]]
| [[tør]]
| [[tørr]]
| [[þurr]]
|-
| 510
| [[full]]
| [[voll]]
| [[vol]]
| [[full]]
| [[fuld]]
| [[full]]
| [[fullur]]
|-
| 511
| [[empty]]
| [[leer]]
| [[leeg]]
| [[tom]]
| [[tom]]
| [[tom]]
| [[tómur]]
|-
| 512
| [[open]]
| [[offen]]
| [[open]]
| [[öppen]]
| [[åben]]
| [[åpen]]
| [[opinn]]
|-
| 513
| [[closed]]
| [[geschlossen]]
| [[gesloten]]
| [[stängd]]
| [[lukket]]
| [[lukket]]
| [[lokaður]]
|-
| 514
| [[clean]]
| [[sauber]]
| [[net]]; [[schoon]]
| [[ren]]
| [[ren]]
| [[ren]]
| [[þrifinn]]
|-
| 515
| [[dirty]]
| [[schmutzig]]
| [[vuil]]
| [[snuskig]]
| [[snavset]]
| [[skitten]]
| [[óhreinn]]; [[sóðalegur]]
|-
| 516
| [[raw]]
| [[roh]]
| [[rauw]]
| [[rå]]
| [[rå]]
| [[rå]]
| [[hrár]]
|-
| 517
| [[ripe]]
| [[reif]]
| [[rijp]]
| [[mogen]]
| [[moden]]
| [[moden]]
| [[þroskaður]]
|-
| 518
| [[delicious]]
| [[lecker]]
| [[lekker]]
| [[läcker]]
| [[lækker]]
| [[lekker]]
| [[ljúffengur]]
|-
| 519
| [[sweet]]
| [[süß]]
| [[zoet]]
| [[söt]]
| [[sød]]
| [[søt]]
| [[sætur]]
|-
| 520
| [[bitter]]
| [[bitter]]
| [[bitter]]
| [[besk]]; [[bitter]]
| [[bitter]]
| [[besk]]; [[bitter]]
| [[beiskur]]
|-
| 521
| [[sour]]
| [[sauer]]
| [[zuur]]
| [[sur]]
| [[sur]]
| [[sur]]
| [[súr]]
|-
| 522
| [[bright]]
| [[hell]]
| [[licht]]; [[helder]]
| [[ljus]]
| [[lys]]
| [[lys]]
| [[bjartur]]
|-
| 523
| [[dark]]
| [[dunkel]]
| [[donker]]
| [[mörk]]
| [[mørk]]
| [[mørk]]
| [[dimmur]]
|-
| 524
| [[black]]
| [[schwarz]]
| [[zwart]]
| [[svart]]
| [[sort]]
| [[svart]]
| [[svartur]]
|-
| 525
| [[white]]
| [[weiß]]
| [[wit]]
| [[vit]]
| [[hvid]]
| [[hvit]]
| [[hvítur]]
|-
| 526
| [[red]]
| [[rot]]
| [[rood]]
| [[röd]]
| [[rød]]
| [[rød]]
| [[rauður]]
|-
| 527
| [[yellow]]
| [[gelb]]
| [[geel]]
| [[gul]]
| [[gul]]
| [[gul]]
| [[gulur]]
|-
| 528
| [[blue]]
| [[blau]]
| [[blauw]]
| [[blå]]
| [[blå]]
| [[blå]]
| [[blár]]
|-
| 529
| [[green]]
| [[grün]]
| [[groen]]
| [[grön]]
| [[grøn]]
| [[grønn]]
| [[grænn]]
|-
| 530
| [[grey]]
| [[grau]]
| [[grijs]]
| [[grå]]
| [[grå]]
| [[grå]]
| [[grár]]
|-
| 531
| [[colourful]]
| [[bunt]]
| [[bont]]
| [[brokig]]
| [[broget]]
| [[broket]]
| [[marglitur]]
|-
| 532
| [[cheap]]
| [[billig]]
| [[goedkoop]]
| [[billig]]
| [[billig]]
| [[billig]]
| [[ódýr]]
|-
| 533
| [[expensive]]
| [[teuer]]
| [[duur]]
| [[dyr]]
| [[dyr]]
| [[dyr]]
| [[dýr]]
|-
| 534
| [[precious]]
| [[wertvoll]]
| [[kostbaar]]; [[waardevol]]
| [[värdefull]]
| [[værdifuld]]
| [[verdifull]]
| [[verðmætur]]
|-
| 535
| [[blind]]
| [[blind]]
| [[blind]]
| [[blind]]
| [[blind]]
| [[blind]]
| [[blindur]]
|-
| 536
| [[deaf]]
| [[taub]]
| [[doof]]
| [[döv]]
| [[døv]]
| [[døv]]
| [[heyrnarlaus]]
|-
| 537
| [[powerful]]
| [[kräftig]]
| [[krachtig]]
| [[kraftig]]
| [[kraftig]]
| [[kraftig]]
| [[öflugur]]
|-
| 538
| [[strong]]
| [[stark]]
| [[sterk]]
| [[stark]]
| [[stærk]]
| [[sterk]]
| [[sterkur]]
|-
| 539
| [[weak]]
| [[schwach]]
| [[zwak]]
| [[svag]]
| [[svag]]
| [[svak]]
| [[veill]]
|-
| 540
| [[fat]]
| [[fett]]
| [[vet]]
| [[fet]]
| [[fed]]
| [[fet]]
| [[feitur]]
|-
| 541
| [[slim]]
| [[schlank]]
| [[slank]]
| [[slank]]
| [[slank]]
| [[slank]]
| [[grannur]]; [[spengilegur]]
|-
| 542
| [[pretty]]
| [[hübsch]]
| [[leuk]]
| [[snygg]]; [[vacker]]
| [[køn]]
| [[pen]]
| [[snotur]]; [[laglegur]]
|-
| 543
| [[evil]]
| [[böse]]
| [[kwaad]]
| [[ond]]; [[elak]]
| [[ond]]; [[slem]]
| [[slem]]
| [[illur]]; [[vondur]]
|-
| 544
| [[stupid]]
| [[dumm]]
| [[dom]]
| [[dum]]
| [[dum]]
| [[dum]]
| [[heimskur]]
|-
| 545
| [[lazy]]
| [[faul]]
| [[lui]]
| [[lat]]
| [[doven]]
| [[lat]]; [[doven]]
| [[latur]]
|-
| 546
| [[diligent]]
| [[fleißig]]
| [[vlijtig]]
| [[flitig]]
| [[flittig]]
| [[flittig]]
| [[iðinn]]
|-
| 547
| [[stingy]]
| [[geizig]]
| [[gierig]]
| [[snål]]; [[girig]]
| [[gerrig]]
| [[gjerrig]]
| [[nískur]]
|-
| 548
| [[clever]]
| [[klug]]
| [[slim]]; [[schrander]]; [[verstandig]]
| [[klok]]
| [[klog]]
| [[klok]]
| [[hygginn]]
|-
| 549
| [[skilful]]
| [[geschickt]]
| [[handig]]; [[vaardig]]
| [[händig]]; [[skicklig]]
| [[dygtig]]; [[behændig]]
| [[hendig]]; [[skikket]]
| [[fimur]]; [[laginn]]
|-
| 550
| [[dear]]
| [[lieb]]
| [[lief]]
| [[kär]]; [[snäll]]
| [[rar]]
| [[kjær]]; [[snill]]
| [[kær]]; [[ljúfur]]
|-
| 551
| [[merry]]
| [[lustig]]
| [[vrolijk]]
| [[rolig]]; [[lustig]]
| [[lystig]]
| [[morsom]]
| [[kátur]]
|-
| 552
| [[gentle]]
| [[sanft]]
| [[zacht]]
| [[mild]]
| [[blid]]
| [[blid]]
| [[blíður]]
|-
| 553
| [[hungry]]
| [[hungrig]]
| [[hongerig]]
| [[hungrig]]
| [[sulten]]
| [[sulten]]
| [[soltinn]]; [[hungraður]]
|-
| 554
| [[sick]], [[ill]]
| [[krank]]
| [[ziek]]
| [[sjuk]]
| [[syg]]
| [[syk]]
| [[sjúkur]]
|-
| 555
| [[naked]]
| [[nackt]]
| [[naakt]]
| [[naken]]
| [[nøgen]]
| [[naken]]
| [[nakinn]]
|-
| 556
| [[sad]]
| [[traurig]]
| [[treurig]]; [[bedroefd]]
| [[ledsen]]; [[sorgsen]]
| [[bedrøvet]]
| [[sørgmodig]]
| [[dapur]]; [[hryggur]]
|-
| 557
| [[living]]
| [[lebendig]]
| [[levend]]
| [[levande]]
| [[levende]]
| [[levende]]
| [[lifandi]]
|-
| 558
| [[good]]
| [[gut]]
| [[goed]]
| [[bra]]
| [[god]]
| [[god]]
| [[góður]]
|-
| 559
| [[bad]]
| [[schlecht]]
| [[slecht]]
| [[dålig]]
| [[dårlig]]
| [[dårlig]]
| [[slæmur]]; [[lélegur]]
|-
| 560
| [[correct]]
| [[richtig]]
| [[juist]]
| [[riktig]]
| [[rigtig]]
| [[riktig]]
| [[réttur]]
|-
| 561
| [[nasty]], [[dire]]
| [[schlimm]]
| [[erg]]; [[kwaad]]
| [[illa]]
| [[slem]]
| [[slem]]
| [[slæmur]]
|-
| 562
| [[true]]
| [[wahr]]
| [[waar]]
| [[sann]]
| [[sand]]
| [[sann]]
| [[sannur]]
|-
| 563
| [[old]]
| [[alt]]
| [[oud]]
| [[gammal]]
| [[gammel]]
| [[gammel]]
| [[gamall]]
|-
| 564
| [[new]]
| [[neu]]
| [[nieuw]]
| [[ny]]
| [[ny]]
| [[ny]]
| [[nýr]]
|-
| 565
| [[former]]
| [[ehemalig]]
| [[voormalig]]
| [[forn]]; [[tidigare]]
| [[forhenværende]]
| [[forhenværende]]
| [[fyrrverandi]]
|-
| 566
| [[aged]], [[old]]
| [[alt]] ([[Lebewesen]])
| [[oud]]
| [[gammal]]
| [[gammel]]
| [[gammel]]
| [[gamall]]
|-
| 567
| [[young]]
| [[jung]]
| [[jong]]
| [[ung]]
| [[ung]]
| [[ung]]
| [[ungur]]
|-
| 568
| [[poor]]
| [[arm]]
| [[arm]]
| [[fattig]]
| [[fattig]]
| [[fattig]]
| [[vesall]]; [[fátækur]]
|-
| 569
| [[rich]]
| [[reich]]
| [[rijk]]
| [[rik]]
| [[rig]]
| [[rik]]
| [[ríkur]]; [[auðugur]]
|-
| 570
| [[familiar]]
| [[bekannt]]
| [[bekend]]
| [[känd]]
| [[kendt]]
| [[kjent]]
| [[kunnugur]]
|-
| 571
| [[famous]]
| [[berühmt]]
| [[beroemd]]
| [[berömd]]
| [[berømt]]
| [[berømt]]
| [[frægur]]
|-
| 572
| [[foreign]]
| [[fremd]]
| [[vreemd]]
| [[främmande]]
| [[fremmed]]
| [[fremmed]]
| [[framandi]]; [[ókunnugur]]
|-
| 573
| [[different]]
| [[verschieden]]
| [[verscheiden]]; [[verschillend]]
| [[åtskillig]]
| [[forskellig]]
| [[forskjellig]]
| [[ýmis]]
|-
| 574
| [[near]]
| [[nah]]
| [[nabij]]; [[nabijgelegen]]
| [[nära]]
| [[nær]]
| [[nær]]
| [[nálægur]]
|-
| 575
| [[far]]
| [[fern]]
| [[ver]]
| [[fjärran]]
| [[fjern]]
| [[fjern]]
| [[fjarri]]; [[fjarlægur]]
|-
| 576
| [[left]]
| [[linker]]
| [[linker]]
| [[vänster]]
| [[venstre]]
| [[venstre]]
| [[vinstri]]
|-
| 577
| [[right]]
| [[rechter]]
| [[rechter]]
| [[höger]]
| [[højre]]
| [[høyre]]
| [[hægri]]
|-
| 578
| [[other]]
| [[anderer]]
| [[andere]]
| [[annan]]
| [[anden]]
| [[annen]]
| [[annar]]
|-
| 579
| [[first]]
| [[erster]]
| [[eerste]]
| [[första]]
| [[første]]
| [[første]]
| [[fyrsti]]
|-
| 580
| [[second]]
| [[zweiter]]
| [[tweede]]
| [[andra]]
| [[anden]]
| [[annen]]
| [[annar]]
|-
| 581
| [[third]]
| [[dritter]]
| [[derde]]
| [[tredje]]
| [[tredje]]
| [[tredje]]
| [[þriðji]]
|-
| 582
| [[last]]
| [[letzter]]
| [[laatste]]
| [[sist]]
| [[sidste]]
| [[sist]]
| [[síðasti]]
|-
| 583
| [[alone]]
| [[allein]]
| [[alleen]]
| [[allena]]
| [[alene]]
| [[alene]]
| [[einn]]; [[aleinn]]
|-
| 584
| [[at]] [[once]]
| [[auf]] [[einmal]]
| [[ineens]]; [[tegelijk]]
| [[på]] [[en]] [[gång]]
| [[på]] [[én]] [[gang]]
| [[med]] [[ett]]
| [[allt]] [[í]] [[einu]]
|-
| 585
| [[together]]
| [[zusammen]]
| [[samen]]; [[bijeen]]
| [[tillsammans]]
| [[sammen]]
| [[sammen]]
| [[saman]]
|-
| 586
| [[long]]
| [[lange]]
| [[lang]]
| [[länge]]
| [[længe]]
| [[lenge]]
| [[lengi]]
|-
| 587
| [[suddenly]]
| [[plötzlich]]
| [[eensklaps]]; [[plotsklaps]]
| [[plötsligt]]
| [[pludselig]]
| [[plutselig]]
| [[skyndilega]]
|-
| 588
| [[instantly]]
| [[sofort]]
| [[terstond]]; [[aanstonds]]; [[onmiddelijk]]
| [[strax]]; [[genast]]
| [[straks]]
| [[straks]]
| [[strax]]; [[þegar]] [[í]] [[stað]]
|-
| 589
| [[later]]
| [[später]]
| [[later]]
| [[senare]]
| [[senere]]
| [[senere]]
| [[seinna]]
|-
| 590
| [[now]]
| [[jetzt]]
| [[nu]]; [[nou]]; [[thans]]
| [[nu]]
| [[nu]]
| [[nå]]
| [[nú]]; [[núna]]
|-
| 591
| [[today]]
| [[heute]]
| [[heden]]; [[vandaag]]
| [[i]] [[dag]]
| [[i]] [[dag]]
| [[i]] [[dag]]
| [[í]] [[dag]]
|-
| 592
| [[tomorrow]]
| [[morgen]]
| [[morgen]]
| [[i]] [[morgon]]
| [[i]] [[morgen]]
| [[i]] [[morgen]]
| [[á]] [[morgun]]
|-
| 593
| [[soon]]
| [[bald]]
| [[gauw]]; [[weldra]]
| [[snart]]
| [[snart]]
| [[snart]]
| [[brátt]]; [[bráðum]]
|-
| 594
| [[then]]
| [[dann]]
| [[dan]]; [[toen]]
| [[då]]
| [[så]]
| [[så]]
| [[svo]]; [[síðan]]
|-
| 595
| [[yesterday]]
| [[gestern]]
| [[gisteren]]
| [[i]] [[går]]
| [[i]] [[går]]
| [[i]] [[går]]
| [[í]] [[gær]]
|-
| 596
| [[once]]
| [[einst]]
| [[eens]]
| [[en]] [[gång]]
| [[engang]]
| [[engang]]
| [[forðum]]
|-
| 597
| [[at]] [[that]] [[time]]
| [[damals]]
| [[toen]]; [[destijds]]
| [[då]]; [[den]] [[gången]]
| [[dengang]]
| [[den]] [[gang]]
| [[þá]]; [[á]] [[þeim]] [[tímum]]
|-
| 598
| [[afterwards]]
| [[danach]]
| [[daarna]]
| [[därefter]]
| [[derefter]]
| [[deretter]]
| [[á]] [[eftir]] [[því]]
|-
| 599
| [[before]]
| [[vorher]]
| [[vooraf]]; [[van]] [[tevoren]]
| [[före]]; [[förut]]
| [[før]]; [[forud]]
| [[før]]; [[i]] [[forveien]]
| [[áður]]
|-
| 600
| [[at]] [[first]]
| [[zuerst]]
| [[eerst]]; [[het]] [[eerst]]
| [[först]]
| [[først]]
| [[først]]
| [[fyrst]]
|-
| 601
| [[once]]
| [[einmal]]
| [[eens]]; [[eenmaal]]
| [[en]] [[gång]]
| [[en]] [[gang]]
| [[en]] [[gang]]
| [[einu]] [[sinni]]
|-
| 602
| [[sometimes]]
| [[manchmal]]
| [[soms]]
| [[ibland]]
| [[sommetider]]
| [[somme]] [[tider]]
| [[stundum]]
|-
| 603
| [[often]]
| [[oft]]
| [[vaak]]; [[dikwijls]]
| [[ofta]]
| [[ofte]]
| [[ofte]]
| [[oft]]
|-
| 604
| [[always]]
| [[immer]]
| [[altijd]]
| [[alltid]]
| [[altid]]
| [[alltid]]
| [[alltaf]]; [[sífellt]]
|-
| 605
| [[never]]
| [[niemals]]
| [[nooit]]
| [[aldrig]]
| [[aldrig]]
| [[aldri]]
| [[aldrei]]
|-
| 606
| [[here]]
| [[hier]]
| [[hier]]
| [[här]]
| [[her]]
| [[her]]
| [[hér]]
|-
| 607
| [[hither]]
| [[hierhin]]
| [[hierheen]]
| [[hit]]
| [[hid]]; [[herhen]]
| [[hit]]
| [[hingað]]
|-
| 608
| [[hence]]
| [[von]] [[hier]]
| [[van]] [[hier]]; [[hiervandaan]]
| [[härifrån]]
| [[herfra]]
| [[herfra]]
| [[héðan]]
|-
| 609
| [[there]]
| [[dort]]
| [[daar]]; [[ginds]]
| [[där]]
| [[der]]
| [[der]]
| [[þar]]; [[þarna]]
|-
| 610
| [[thither]]
| [[dorthin]]
| [[daarheen]]
| [[dit]]
| [[derhen]]
| [[dit]]
| [[þangað]]
|-
| 611
| [[ahead]]
| [[geradeaus]]
| [[rechtuit]]; [[rechtdoor]]
| [[rätt]] [[fram]]
| [[lige]] [[ud]]
| [[rett]] [[fram]]
| [[beint]] [[áfram]]
|-
| 612
| [[forward]]
| [[vorwärts]]
| [[vooruit]]; [[voorwaarts]]
| [[fram]]; [[framåt]]
| [[fremad]]
| [[fram]]; [[framover]]
| [[áfram]]
|-
| 613
| [[backward]]
| [[rückwärts]]
| [[achteruit]]; [[achterwaarts]]
| [[baklänges]]
| [[baglæns]]
| [[baklengs]]
| [[aftur]] [[á]] [[bak]]
|-
| 614
| [[back]]
| [[zurück]]
| [[terug]]
| [[tillbaka]]
| [[tilbage]]
| [[tilbake]]
| [[aftur]]; [[til]] [[baka]]
|-
| 615
| [[below]]
| [[unten]]
| [[beneden]]; [[onderaan]]
| [[nere]]; [[nedanför]]
| [[nede]]; [[forneden]]
| [[nede]]
| [[niðri]]; [[fyrir]] [[neðan]]
|-
| 616
| [[down]]
| [[hinab]]
| [[omlaag]]; [[naar]] [[beneden]]
| [[ned]]; [[nedåt]]
| [[ned]]; [[nedad]]
| [[ned]]; [[nedover]]
| [[niður]]; [[niður]] [[eftir]]
|-
| 617
| [[above]]
| [[oben]]
| [[boven]]
| [[ovan]]; [[ovanpå]]
| [[oppe]]; [[ovenpå]]
| [[oppe]]; [[ovenpå]]
| [[uppi]]
|-
| 618
| [[up]]
| [[hinauf]]
| [[omhoog]]; [[naar]] [[boven]]
| [[upp]]; [[uppåt]]
| [[op]]; [[opad]]
| [[opp]]; [[oppover]]
| [[upp]]; [[upp]] [[eftir]]
|-
| 619
| [[everywhere]]
| [[überall]]
| [[alom]]; [[overal]]
| [[överallt]]
| [[overalt]]
| [[overalt]]
| [[alls]] [[staðar]]
|-
| 620
| [[not]]
| [[nicht]]
| [[niet]]
| [[ej]]; [[inte]]
| [[ikke]]
| [[ikke]]
| [[ekki]]
|-
| 621
| [[a]] [[little]]
| [[ein]] [[wenig]]
| [[wat]]
| [[litet]]
| [[lidt]]
| [[litt]]
| [[dálítið]]
|-
| 622
| [[hardly]]
| [[kaum]]
| [[amper]]; [[nauwelijks]]
| [[knappt]]; [[knappast]]
| [[knap]]; [[næppe]]
| [[neppe]]
| [[varla]]; [[tæplega]]
|-
| 623
| [[very]]
| [[sehr]]
| [[erg]]; [[zeer]]
| [[mycket]]
| [[meget]]
| [[svært]]
| [[mjög]]
|-
| 624
| [[so]]
| [[so]]
| [[zo]]
| [[så]]
| [[så]]
| [[så]]
| [[svo]]; [[þannig]]
|-
| 625
| [[still]]
| [[noch]]
| [[nog]]
| [[än]]; [[ännu]]
| [[endnu]]
| [[enda]]
| [[enn]]; [[ennþá]]
|-
| 626
| [[only]]
| [[nur]]
| [[maar]]; [[alleen]]
| [[bara]]; [[endast]]
| [[kun]]; [[bare]]
| [[bare]]
| [[bara]]; [[aðeins]]
|-
| 627
| [[already]]
| [[schon]]
| [[al]]; [[reeds]]
| [[redan]]
| [[alt]]; [[allerede]]
| [[alt]]; [[allerede]]
| [[nú]] [[þegar]]
|-
| 628
| [[again]]
| [[wieder]]
| [[weer]]; [[terug]]
| [[åter]]
| [[igen]]
| [[igjen]]
| [[aftur]]; [[að]] [[nýju]]
|-
| 629
| [[in]] [[vain]]
| [[vergebens]]
| [[vergeefs]]; [[tevergeefs]]
| [[förgäves]]
| [[forgæves]]
| [[forgjeves]]
| [[árangurslaust]]
|-
| 630
| [[in]] [[front]] [[of]]
| [[vor]]
| [[voor]]
| [[utanför]]
| [[foran]]; [[uden]] [[for]]
| [[foran]]; [[utenfor]]
| [[fyrir]]
|-
| 631
| [[behind]]
| [[hinter]]
| [[achter]]
| [[bakom]]
| [[bag]]; [[bagved]]
| [[bak]]; [[bakom]]
| [[bak]] [[við]]; [[aftur]] [[fyrir]]
|-
| 632
| [[under]]
| [[unter]]
| [[onder]]; [[beneden]]
| [[under]]
| [[under]]
| [[under]]
| [[undir]]
|-
| 633
| [[through]]
| [[durch]]
| [[door]]
| [[genom]]; [[igenom]]
| [[gennem]]; [[igennem]]
| [[gjennom]]; [[igjennom]]
| [[gegnum]]
|-
| 634
| [[next]] [[to]]
| [[neben]]
| [[naast]]
| [[bredvid]]; [[vid]] [[sidan]] [[av]]
| [[ved]] [[siden]] [[af]]
| [[ved]] [[siden]] [[av]]
| [[hjá]]; [[við]] [[hliðina]] [[á]]
|-
| 635
| [[between]]
| [[zwischen]]
| [[tussen]]
| [[mellan]]
| [[mellem]]
| [[mellom]]
| [[milli]]; [[á]] [[milli]]
|-
| 636
| [[because]] [[of]]
| [[wegen]]
| [[wegens]]; [[vanwege]]
| [[på]] [[grund]] [[av]]
| [[på]] [[grund]] [[af]]
| [[på]] [[grunn]] [[av]]
| [[vegna]]
|-
| 637
| [[this]]
| [[dies]]
| [[dit]]
| [[detta]]
| [[dette]]
| [[dette]]
| [[þetta]]
|-
| 638
| [[that]]
| [[das]]
| [[dat]]
| [[det]]
| [[det]]
| [[det]]
| [[það]]
|-
| 639
| [[everything]]
| [[alles]]
| [[alles]]
| [[allt]]
| [[alt]]
| [[alt]]
| [[allt]]
|-
| 640
| [[I]]
| [[ich]]
| [[ik]]
| [[jag]]
| [[jeg]]
| [[jeg]]
| [[ég]]
|-
| 641
| [[thou]]
| [[du]]
| [[je]]; [[jij]]
| [[du]]
| [[du]]
| [[du]]
| [[þú]]
|-
| 642
| [[he]]
| [[er]]
| [[hij]]
| [[han]]
| [[han]]
| [[han]]
| [[hann]]
|-
| 643
| [[we]]
| [[wir]]
| [[we]]; [[wij]]
| [[vi]]
| [[vi]]
| [[vi]]
| [[við]]
|-
| 644
| [[you]]
| [[ihr]]
| [[jullie]]
| [[ni]]
| [[I]]
| [[dere]]
| [[þið]]
|-
| 645
| [[they]]
| [[sie]]
| [[ze]]; [[zij]]
| [[de]]
| [[de]]
| [[de]]
| [[þær]]; [[þeir]]
|-
| 646
| [[what]]
| [[was]]
| [[wat]]
| [[vad]]
| [[hvad]]
| [[hva]]
| [[hvað]]
|-
| 647
| [[who]]
| [[wer]]
| [[wie]]
| [[vem]]
| [[hvem]]
| [[hvem]]
| [[hver]]
|-
| 648
| [[where]]
| [[wo]]
| [[waar]]
| [[var]]
| [[hvor]]
| [[hvor]]
| [[hvar]]
|-
| 649
| [[where]] [[to]]
| [[wohin]]
| [[waarheen]]
| [[vart]]
| [[hvorhen]]
| [[hvor]] ... [[hen]]
| [[hvert]]
|-
| 650
| [[how]]
| [[wie]]
| [[hoe]]
| [[hur]]
| [[hvordan]]
| [[hvordan]]
| [[hvernig]]
|-
| 651
| [[why]]
| [[warum]]
| [[waarom]]
| [[varför]]
| [[hvorfor]]
| [[hvorfor]]
| [[hvers]] [[vegna]]
|-
| 652
| [[how]] [[much]]
| [[wieviel]]
| [[hoeveel]]
| [[hur]] [[mycket]]
| [[hvor]] [[meget]]
| [[hvor]] [[mye]]
| [[hve]] [[mikill]]
|-
| 653
| [[one]]
| [[eins]]
| [[één]]
| [[en]]; [[ett]]
| [[én]]
| [[en]]; [[ett]]
| [[einn]]
|-
| 654
| [[two]]
| [[zwei]]
| [[twee]]
| [[två]]
| [[to]]
| [[to]]
| [[tveir]]
|-
| 655
| [[three]]
| [[drei]]
| [[drie]]
| [[tre]]
| [[tre]]
| [[tre]]
| [[þrír]]
|-
| 656
| [[four]]
| [[vier]]
| [[vier]]
| [[fyra]]
| [[fire]]
| [[fire]]
| [[fjórir]]
|-
| 657
| [[five]]
| [[fünf]]
| [[vijf]]
| [[fem]]
| [[fem]]
| [[fem]]
| [[fimm]]
|-
| 658
| [[six]]
| [[sechs]]
| [[zes]]
| [[sex]]
| [[seks]]
| [[seks]]
| [[sex]]
|-
| 659
| [[seven]]
| [[sieben]]
| [[zeven]]
| [[sju]]
| [[syv]]
| [[sju]]
| [[sjö]]
|-
| 660
| [[eight]]
| [[acht]]
| [[acht]]
| [[åtta]]
| [[otte]]
| [[åtte]]
| [[átta]]
|-
| 661
| [[nine]]
| [[neun]]
| [[negen]]
| [[nio]]
| [[ni]]
| [[ni]]
| [[níu]]
|-
| 662
| [[ten]]
| [[zehn]]
| [[tien]]
| [[tio]]
| [[ti]]
| [[ti]]
| [[tíu]]
|-
| 663
| [[eleven]]
| [[elf]]
| [[elf]]
| [[elva]]
| [[elleve]]
| [[elleve]]
| [[ellefu]]
|-
| 664
| [[twelve]]
| [[zwölf]]
| [[twaalf]]
| [[tolv]]
| [[tolv]]
| [[tolv]]
| [[tólf]]
|-
| 665
| [[twenty]]
| [[zwanzig]]
| [[twintig]]
| [[tjugo]]
| [[tyve]]
| [[tjue]]
| [[tuttugu]]
|-
| 666
| [[thirty]]
| [[dreißig]]
| [[dertig]]
| [[trettio]]
| [[tredive]]
| [[tretti]]
| [[þrjátíu]]
|-
| 667
| [[forty]]
| [[vierzig]]
| [[veertig]]
| [[fyrtio]]
| [[fyrre]]; [[fyrretyve]]
| [[førti]]
| [[fjörutíu]]
|-
| 668
| [[fifty]]
| [[fünfzig]]
| [[vijftig]]
| [[femtio]]
| [[halvtreds]]
| [[femti]]
| [[fimmtíu]]
|-
| 669
| [[sixty]]
| [[sechzig]]
| [[zestig]]
| [[sextio]]
| [[tres]]
| [[seksti]]
| [[sextíu]]
|-
| 670
| [[seventy]]
| [[siebzig]]
| [[zeventig]]
| [[sjuttio]]
| [[halvfjerds]]
| [[sytti]]
| [[sjötíu]]
|-
| 671
| [[eighty]]
| [[achtzig]]
| [[tachtig]]
| [[åttio]]
| [[firs]]
| [[åtti]]
| [[áttatíu]]
|-
| 672
| [[ninety]]
| [[neunzig]]
| [[negentig]]
| [[nittio]]
| [[halvfems]]
| [[nitti]]
| [[níutíu]]
|-
| 673
| [[a]] [[hundred]]
| [[hundert]]
| [[honderd]]
| [[hundra]]
| [[hundrede]]
| [[hundre]]
| [[hundrað]]
|-
| 674
| [[a]] [[thousand]]
| [[tausend]]
| [[duizend]]
| [[tusen]]
| [[tusind]]
| [[tusen]]
| [[þúsund]]
|-
| 675
| [[and]]
| [[und]]
| [[en]]
| [[och]]
| [[og]]
| [[og]]
| [[og]]
|-
| 676
| [[or]]
| [[oder]]
| [[of]]
| [[eller]]
| [[eller]]
| [[eller]]
| [[eða]]
|-
| 677
| [[stand]]
| [[stehen]]
| [[staan]]
| [[stå]]
| [[stå]]
| [[stå]]
| [[standa]]
|-
| 678
| [[sit]]
| [[sitzen]]
| [[zitten]]
| [[sitta]]
| [[sidde]]
| [[sitte]]
| [[sitja]]
|-
| 679
| [[lie]]
| [[liegen]]
| [[liggen]]
| [[ligga]]
| [[ligge]]
| [[ligge]]
| [[liggja]]
|-
| 680
| [[hang]]
| [[hängen]]
| [[hangen]]
| [[hänga]]
| [[hænge]]
| [[henge]]
| [[hanga]]
|-
| 681
| [[become]]
| [[werden]]
| [[worden]]
| [[bli]]
| [[blive]]
| [[bli]]
| [[verða]]
|-
| 682
| [[happen]]
| [[passieren]]
| [[gebeuren]]
| [[ske]]; [[hända]]
| [[ske]]; [[hænde]]
| [[skje]]; [[hende]]
| [[gerast]]
|-
| 683
| [[begin]]
| [[beginnen]]
| [[beginnen]]
| [[börja]]
| [[begynde]]
| [[begynne]]
| [[byrja]]
|-
| 684
| [[end]]
| [[enden]]
| [[eindigen]]
| [[ända]]
| [[ende]]
| [[ende]]; [[slutte]]
| [[enda]]; [[lykta]]
|-
| 685
| [[change]]
| [[wechseln]]
| [[wijzigen]]; [[veranderen]]
| [[växla]]
| [[veksle]]
| [[veksle]]
| [[skipta]]
|-
| 686
| [[rise]]
| [[aufgehen]] ([[Sonne]])
| [[opgaan]]
| [[gå]] [[upp]]
| [[gå]] [[op]]; [[stå]] [[op]]
| [[stå]] [[opp]]
| [[koma]] [[upp]]
|-
| 687
| [[set]]
| [[untergehen]] ([[Sonne]])
| [[ondergaan]]
| [[gå]] [[ned]]
| [[gå]] [[ned]]
| [[gå]] [[ned]]
| [[ganga]] [[til]] [[viðar]]
|-
| 688
| [[shine]]
| [[scheinen]] ([[Sonne]])
| [[schijnen]]
| [[skina]]
| [[skinne]]
| [[skinne]]
| [[skína]]
|-
| 689
| [[thunder]]
| [[donnern]]
| [[donderen]]
| [[dundra]]
| [[tordne]]
| [[tordne]]
| [[þruma]]
|-
| 690
| [[blow]]
| [[wehen]]
| [[waaien]]
| [[blåsa]]
| [[blæse]]
| [[blåse]]
| [[blása]]
|-
| 691
| [[stream]]
| [[strömen]]
| [[stromen]]
| [[forsa]]; [[strömma]]
| [[strømme]]
| [[strømme]]
| [[streyma]]
|-
| 692
| [[flow]]
| [[fließen]]
| [[vloeien]]
| [[flyta]]
| [[flyde]]
| [[flyte]]
| [[fljóta]]
|-
| 693
| [[revolve]]
| [[sich]] [[drehen]]
| [[draaien]]; [[zich]] [[draaien]]
| [[snurra]]
| [[dreje]] [[sig]]
| [[dreie]] [[seg]]
| [[snúast]]
|-
| 694
| [[sway]]
| [[schwanken]]
| [[wankelen]]
| [[vackla]]
| [[vakle]]
| [[svaie]]
| [[riða]]; [[rugga]]
|-
| 695
| [[swing]]
| [[schwingen]]
| [[zwieren]]
| [[svinga]]
| [[svinge]]
| [[svinge]]
| [[sveiflast]]
|-
| 696
| [[fall]]
| [[fallen]]
| [[vallen]]
| [[falla]]
| [[falde]]
| [[falle]]
| [[falla]]
|-
| 697
| [[burn]]
| [[brennen]]
| [[branden]]
| [[brinna]]
| [[brænde]]
| [[brenne]]
| [[brenna]]
|-
| 698
| [[smoke]]
| [[rauchen]]
| [[roken]]
| [[ryka]]
| [[ryge]]
| [[ryke]]
| [[reykja]]
|-
| 699
| [[rain]]
| [[regnen]]
| [[regenen]]
| [[regna]]
| [[regne]]
| [[regne]]
| [[rigna]]
|-
| 700
| [[freeze]]
| [[gefrieren]]
| [[bevriezen]]
| [[frysa]]
| [[fryse]]
| [[fryse]]
| [[frjósa]]
|-
| 701
| [[thaw]]
| [[tauen]]
| [[dooien]]
| [[töa]]
| [[tø]]
| [[tine]]
| [[þiðna]]
|-
| 702
| [[melt]]
| [[schmelzen]]
| [[smelten]]
| [[smälta]]
| [[smelte]]
| [[smelte]]
| [[bráðna]]
|-
| 703
| [[dry]]
| [[trocknen]]
| [[drogen]]
| [[torka]]
| [[tørre]]
| [[tørre]]
| [[þorna]]
|-
| 704
| [[boil]]
| [[sieden]]
| [[koken]]; [[zieden]]
| [[koka]]; [[sjuda]]
| [[koge]]
| [[koke]]
| [[sjóða]]
|-
| 705
| [[rot]]
| [[faulen]]
| [[rotten]]
| [[ruttna]]
| [[rådne]]
| [[råtne]]
| [[rotna]]
|-
| 706
| [[decay]]
| [[verfaulen]]
| [[verrotten]]
| [[ruttna]]
| [[rådne]]
| [[råtne]]
| [[rotna]]
|-
| 707
| [[snap]]
| [[reißen]]
| [[scheuren]]
| [[brista]]
| [[briste]]
| [[briste]]
| [[rifna]]
|-
| 708
| [[sink]]
| [[versinken]]
| [[verzinken]]
| [[sjunka]]
| [[synke]]; [[synke]] [[ned]]
| [[synke]]; [[synke]] [[ned]]
| [[sökkva]]
|-
| 709
| [[pass]]
| [[vergehen]]
| [[vergaan]]
| [[förgå]]
| [[forløbe]]
| [[forløpe]]
| [[líða]]
|-
| 710
| [[appear]]
| [[erscheinen]]
| [[opdagen]]; [[verschijnen]]
| [[synas]]; [[visa]] [[sig]]
| [[vise]] [[sig]]
| [[synes]]
| [[birtast]]
|-
| 711
| [[disappear]]
| [[verschwinden]]
| [[verdwijnen]]
| [[försvinna]]
| [[forsvinde]]
| [[forsvinne]]
| [[hverfa]]
|-
| 712
| [[drop]], [[descend]]
| [[sinken]]
| [[zinken]]
| [[sjunka]]
| [[synke]]
| [[synke]]
| [[síga]]
|-
| 713
| [[decrease]]
| [[abnehmen]]
| [[afnemen]]; [[verminderen]]
| [[avta]]; [[minskas]]
| [[aftage]]
| [[avta]]; [[minske]]
| [[lækka]]; [[minnka]]
|-
| 714
| [[increase]]
| [[zunehmen]]
| [[toenemen]]
| [[tilltaga]]
| [[tiltage]]
| [[tilta]]
| [[aukast]]
|-
| 715
| [[rise]]
| [[steigen]]
| [[stijgen]]; [[omhooggaan]]
| [[stiga]]
| [[stige]]
| [[stige]]
| [[stíga]]
|-
| 716
| [[grow]]
| [[wachsen]]
| [[groeien]]
| [[växa]]
| [[gro]]; [[vokse]]
| [[gro]]; [[vokse]]
| [[vaxa]]
|-
| 717
| [[shine]]
| [[glänzen]]
| [[glanzen]]; [[schitteren]]
| [[glimma]]
| [[glinse]]
| [[skinne]]
| [[glóa]]; [[glampa]]
|-
| 718
| [[sparkle]], [[twinkle]]
| [[funkeln]]
| [[fonkelen]]
| [[tindra]]; [[gnistra]]
| [[tindre]]
| [[tindre]]
| [[leiftra]]
|-
| 719
| [[be]] [[noisy]]
| [[lärmen]]
| [[lawaai]] [[maken]]
| [[bråka]]; [[väsnas]]
| [[larme]]
| [[bråke]]
| [[hafa]] [[hátt]]
|-
| 720
| [[chime]]
| [[läuten]]
| [[luiden]]
| [[ringa]]
| [[ringe]]
| [[ringe]]
| [[hringja]]
|-
| 721
| [[ring]]
| [[klingeln]]
| [[bellen]]
| [[ringa]]
| [[ringe]]
| [[ringe]]
| [[hringja]]
|-
| 722
| [[tinkle]]
| [[klirren]]
| [[rinkelen]]
| [[klirra]]
| [[klirre]]
| [[klirre]]
| [[glamra]]; [[skrölta]]
|-
| 723
| [[roar]]
| [[brausen]]
| [[bruisen]]
| [[brusa]]
| [[bruse]]
| [[bruse]]
| [[ólga]]
|-
| 724
| [[rustle]]
| [[rauschen]]
| [[ruisen]]
| [[susa]]
| [[suse]]
| [[suse]]
| [[suða]]
|-
| 725
| [[sound]]
| [[klingen]]
| [[klinken]]
| [[låta]]; [[klinga]]
| [[lyde]]; [[klinge]]
| [[lyde]]; [[klinge]]
| [[hljóma]]
|-
| 726
| [[bark]]
| [[bellen]]
| [[blaffen]]
| [[skälla]]
| [[gø]]
| [[gjø]]; [[bjeffe]]
| [[gelta]]
|-
| 727
| [[howl]]
| [[heulen]]
| [[huilen]]
| [[yla]]; [[tjuta]]
| [[hyle]]
| [[ule]]
| [[væla]]; [[ýlfra]]
|-
| 728
| [[blow]]
| [[blasen]]
| [[blazen]]
| [[blåsa]]
| [[blæse]]
| [[blåse]]
| [[blása]]
|-
| 729
| [[whistle]]
| [[pfeifen]]
| [[fluiten]]
| [[vissla]]
| [[fløjte]]
| [[plystre]]
| [[blístra]]
|-
| 730
| [[shout]]
| [[schreien]]
| [[gillen]]; [[schreeuwen]]
| [[skrika]]
| [[skrige]]
| [[skrike]]
| [[æpa]]
|-
| 731
| [[groan]]
| [[stöhnen]]
| [[steunen]]
| [[stöna]]
| [[stønne]]
| [[stønne]]
| [[stynja]]
|-
| 732
| [[tremble]]
| [[zittern]]
| [[beven]]; [[sidderen]]
| [[darra]]; [[skälva]]
| [[dirre]]; [[skælve]]
| [[dirre]]; [[skjelve]]
| [[titra]]; [[skjálfa]]
|-
| 733
| [[live]]
| [[leben]]
| [[leven]]
| [[leva]]
| [[leve]]
| [[leve]]
| [[lifa]]
|-
| 734
| [[be]] [[born]]
| [[geboren]] [[werden]]
| [[geboren]] [[worden]]
| [[födas]]
| [[fødes]]
| [[fødes]]
| [[fæðast]]
|-
| 735
| [[breathe]]
| [[atmen]]
| [[ademen]]
| [[andas]]
| [[ånde]]
| [[ånde]]; [[puste]]
| [[anda]]; [[draga]] [[andann]]
|-
| 736
| [[drink]]
| [[trinken]]
| [[drinken]]
| [[dricka]]
| [[drikke]]
| [[drikke]]
| [[drekka]]
|-
| 737
| [[eat]]
| [[essen]]
| [[eten]]
| [[äta]]
| [[spise]]
| [[spise]]
| [[borða]]
|-
| 738
| [[swallow]]
| [[schlucken]]
| [[slikken]]
| [[svälja]]
| [[synke]]
| [[svelge]]
| [[kingja]]
|-
| 739
| [[get]] [[tired]]
| [[müde]] [[werden]]
| [[moe]] [[worden]]
| [[tröttna]]
| [[blive]] [[træt]]
| [[bli]] [[trett]]
| [[þreytast]]
|-
| 740
| [[fall]] [[asleep]]
| [[einschlafen]]
| [[inslapen]]
| [[somna]]
| [[falde]] [[i]] [[søvn]]
| [[sovne]]
| [[sofna]]
|-
| 741
| [[sleep]]
| [[schlafen]]
| [[slapen]]
| [[sova]]
| [[sove]]
| [[sove]]
| [[sofa]]
|-
| 742
| [[wake]] [[up]]
| [[aufwachen]]
| [[ontwaken]]; [[wakker]] [[worden]]
| [[vakna]]
| [[vågne]]
| [[våkne]]
| [[vakna]]
|-
| 743
| [[get]] [[up]]
| [[aufstehen]]
| [[opstaan]]
| [[stiga]] [[upp]]
| [[stå]] [[op]]
| [[stå]] [[opp]]
| [[fara]] [[á]] [[fætur]]
|-
| 744
| [[relax]]
| [[sich]] [[erholen]]
| [[zich]] [[ontspannen]]
| [[repa]] [[sig]]; [[hämta]] [[sig]]
| [[komme]] [[sig]]
| [[bli]] [[bra]]; [[komme]] [[seg]]
| [[hvíla]] [[sig]]
|-
| 745
| [[fall]] [[ill]]
| [[krank]] [[werden]]
| [[ziek]] [[worden]]
| [[insjukna]]
| [[blive]] [[syg]]
| [[bli]] [[syk]]
| [[veikjast]]; [[verða]] [[veikur]]
|-
| 746
| [[be]] [[ill]]
| [[krank]] [[sein]]
| [[ziek]] [[zijn]]
| [[vara]] [[sjuk]]
| [[være]] [[syg]]
| [[være]] [[syk]]
| [[vera]] [[veikur]]
|-
| 747
| [[ache]]
| [[schmerzen]]
| [[pijn]] [[doen]]
| [[smärta]]; [[göra]] [[ont]]
| [[smerte]]
| [[gjøre]] [[vondt]]
| [[kenna]] [[til]]
|-
| 748
| [[cough]]
| [[husten]]
| [[hoesten]]
| [[hosta]]
| [[hoste]]
| [[hoste]]
| [[hósta]]
|-
| 749
| [[recover]]
| [[genesen]]
| [[genezen]]
| [[tillfriskna]]
| [[komme]] [[sig]]
| [[komme]] [[seg]]
| [[batna]]; [[frískast]]
|-
| 750
| [[die]]
| [[sterben]]
| [[sterven]]; [[overlijden]]
| [[dö]]
| [[dø]]
| [[dø]]
| [[deyja]]
|-
| 751
| [[perish]]
| [[umkommen]]
| [[omkomen]]
| [[omkomma]]
| [[omkomme]]
| [[omkomme]]
| [[farast]]
|-
| 752
| [[move]]
| [[sich]] [[bewegen]]
| [[zich]] [[bewegen]]
| [[röra]] [[sig]]
| [[bevæge]] [[sig]]
| [[bevege]] [[seg]]
| [[bifast]]
|-
| 753
| [[budge]]
| [[sich]] [[rühren]]
| [[zich]] [[verroeren]]
| [[röra]] [[på]] [[sig]]
| [[røre]] [[på]] [[sig]]
| [[røre]] [[på]] [[seg]]
| [[hreyfast]]
|-
| 754
| [[stand]] [[up]]
| [[sich]] [[erheben]]
| [[oprijzen]]; [[verrijzen]]
| [[resa]] [[sig]]
| [[rejse]] [[sig]]
| [[reise]] [[seg]]
| [[standa]] [[upp]]
|-
| 755
| [[sit]] [[down]]
| [[sich]] [[setzen]]
| [[gaan]] [[zitten]]
| [[sätta]] [[sig]]
| [[sætte]] [[sig]]
| [[sette]] [[sig]]
| [[setjast]]
|-
| 756
| [[tumble]]
| [[hinfallen]]
| [[vallen]]; [[neervallen]]
| [[falla]] [[omkull]]
|
| [[falle]] [[over]] [[ende]]
| [[detta]]
|-
| 757
| [[walk]]
| [[laufen]]
| [[lopen]]
| [[löpa]]
| [[løbe]]
| [[løpe]]
| [[labba]]
|-
| 758
| [[step]]
| [[schreiten]]
| [[stappen]]; [[schrijden]]
| [[skrida]]
| [[skride]]
| [[skride]]
| [[ganga]]
|-
| 759
| [[take]] [[a]] [[walk]]
| [[spazierengehen]]
| [[gaan]] [[wandelen]]
| [[promenera]]
| [[gå]] [[en]] [[tur]]
| [[spasere]]; [[gå]] [[en]] [[tur]]
| [[ganga]] [[sér]] [[til]] [[skemmtunar]]
|-
| 760
| [[rush]]
| [[eilen]]
| [[ijlen]]; [[haasten]]
| [[ila]]
| [[ile]]
| [[ile]]
| [[fara]] [[hratt]]
|-
| 761
| [[hurry]]
| [[sich]] [[beeilen]]
| [[zich]] [[haasten]]
| [[skynda]] [[sig]]
| [[skynde]] [[sig]]
| [[skynde]] [[seg]]
| [[flýta]] [[sér]]
|-
| 762
| [[dash]]
| [[sausen]]
| [[stuiven]]
| [[susa]]
| [[suse]]
| [[suse]]
| [[þjóta]]
|-
| 763
| [[run]]
| [[rennen]]
| [[rennen]]
| [[löpa]]; [[springa]]
| [[løbe]]; [[rende]]
| [[løpe]]
| [[hlaupa]]
|-
| 764
| [[jump]]
| [[springen]]
| [[springen]]
| [[hoppa]]
| [[hoppe]]; [[springe]]
| [[hoppe]]; [[springe]]
| [[stökkva]]
|-
| 765
| [[climb]]
| [[klettern]]
| [[klimmen]]; [[klauteren]]
| [[klättra]]
| [[klatre]]
| [[klatre]]
| [[klifra]]
|-
| 766
| [[seesaw]]
| [[schaukeln]]
| [[schommelen]]
| [[gunga]]
| [[gynge]]
| [[huske]]
| [[róla]]; [[rugga]]
|-
| 767
| [[creep]]
| [[kriechen]]
| [[kruipen]]
| [[kräla]]
| [[krybe]]
| [[krype]]
| [[skríða]]
|-
| 768
| [[swim]]
| [[schwimmen]]
| [[zwemmen]]
| [[simma]]
| [[svømme]]
| [[svømme]]
| [[synda]]
|-
| 769
| [[dive]]
| [[tauchen]]
| [[duiken]]
| [[dyka]]
| [[dykke]]
| [[dykke]]
| [[kafa]]
|-
| 770
| [[row]]
| [[rudern]]
| [[roeien]]
| [[ro]]
| [[ro]]
| [[ro]]
| [[róa]]
|-
| 771
| [[drive]]
| [[fahren]]
| [[rijden]]
| [[köra]]
| [[køre]]
| [[kjøre]]
| [[aka]]; [[fara]]
|-
| 772
| [[fly]]
| [[fliegen]]
| [[vliegen]]
| [[flyga]]
| [[flyve]]
| [[fly]]
| [[fljúga]]
|-
| 773
| [[go]]
| [[gehen]]
| [[gaan]]
| [[gå]]
| [[gå]]
| [[gå]]
| [[fara]]; [[ganga]]
|-
| 774
| [[go]] [[away]]
| [[weggehen]]
| [[weggaan]]
| [[gå]] [[bort]]
| [[gå]] [[bort]]
| [[gå]] [[bort]]
| [[fara]] [[burt]]; [[ganga]] [[burt]]
|-
| 775
| [[depart]]
| [[abfahren]]
| [[vertrekken]]
| [[resa]]; [[avresa]]
| [[køre]] [[bort]]
| [[reise]]
| [[aka]] [[burt]]
|-
| 776
| [[stop]]
| [[anhalten]]
| [[stoppen]]; [[stilhouden]]
| [[stanna]]
| [[standse]]
| [[stanse]]
| [[stöðva]]
|-
| 777
| [[go]] [[in]]
| [[hineingehen]]
| [[ingaan]]; [[binnengaan]]
| [[gå]] [[in]]
| [[gå]] [[ind]]
| [[gå]] [[inn]]
| [[ganga]] [[inn]]
|-
| 778
| [[enter]]
| [[eintreten]]
| [[binnenkomen]]
| [[träda]] [[in]]
| [[træde]] [[ind]]
| [[tre]] [[inn]]
| [[koma]] [[inn]]; [[ganga]] [[inn]]
|-
| 779
| [[come]]
| [[kommen]]
| [[komen]]
| [[komma]]
| [[komme]]
| [[komme]]
| [[koma]]
|-
| 780
| [[arrive]]
| [[ankommen]]
| [[aankomen]]
| [[ankomma]]
| [[ankomme]]
| [[ankomme]]; [[komme]] [[til]]
| [[koma]] [[til]]
|-
| 781
| [[come]] [[back]]
| [[zurückkommen]]
| [[terugkomen]]
| [[återkomma]]
| [[komme]] [[tilbage]]
| [[komme]] [[tilbake]]
| [[koma]] [[til]] [[baka]]
|-
| 782
| [[stay]]
| [[bleiben]]
| [[blijven]]
| [[bli]]; [[förbli]]
| [[blive]]; [[forblive]]
| [[bli]]; [[forbli]]
| [[haldast]]; [[vera]] [[kyrr]]
|-
| 783
| [[wait]]
| [[warten]]
| [[wachten]]
| [[vänta]]
| [[vente]]
| [[vente]]
| [[bíða]]
|-
| 784
| [[await]]
| [[erwarten]]
| [[verwachten]]
| [[vänta]]
| [[vente]]; [[afvente]]
| [[vente]]
| [[búast]] [[við]]; [[eiga]] [[von]] [[á]]
|-
| 785
| [[look]] [[for]]
| [[suchen]]
| [[zoeken]]
| [[leta]]
| [[søge]]
| [[søke]]
| [[leita]]
|-
| 786
| [[find]]
| [[finden]]
| [[vinden]]
| [[finna]]
| [[finde]]
| [[finne]]
| [[finna]]
|-
| 787
| [[try]]
| [[versuchen]]
| [[proberen]]; [[beproeven]]
| [[försöka]]
| [[forsøge]]
| [[prøve]]; [[forsøke]]
| [[reyna]]
|-
| 788
| [[prepare]]
| [[vorbereiten]]
| [[voorbereiden]]
| [[förbereda]]
| [[forberede]]
| [[forberede]]
| [[undirbúa]]
|-
| 789
| [[love]]
| [[lieben]]
| [[houden]] [[van]]
| [[älska]]
| [[elske]]
| [[elske]]
| [[elska]]
|-
| 790
| [[like]]
| [[mögen]]
| [[lusten]]; [[houden]] [[van]]
| [[tycka]] [[om]]
| [[holde]] [[af]]; [[kunne]] [[lide]]
| [[like]]
| [[þykja]] [[gott]]; [[falla]] [[í]] [[geð]]
|-
| 791
| [[laugh]]
| [[lachen]]
| [[lachen]]
| [[skratta]]
| [[le]]
| [[le]]
| [[hlæja]]
|-
| 792
| [[move]]
| [[rühren]]
| [[roeren]]
| [[röra]]
| [[røre]]
| [[røre]]
| [[snerta]]
|-
| 793
| [[weep]], [[cry]]
| [[weinen]]
| [[huilen]]; [[schreien]]
| [[gråta]]
| [[græde]]
| [[gråte]]
| [[gráta]]
|-
| 794
| [[grumble]]
| [[schimpfen]]
| [[kijven]]; [[schelden]]
| [[skälla]]
| [[skænde]]
| [[skjelle]]
| [[skammast]]
|-
| 795
| [[be]] [[annoyed]]
| [[sich]] [[ärgern]]
| [[zich]] [[ergeren]]
| [[förargas]]
| [[ærgre]] [[sig]]
| [[ergre]] [[seg]]
| [[sárna]]; [[gremjast]]
|-
| 796
| [[be]] [[afraid]]
| [[sich]] [[fürchten]]
| [[bang]] [[zijn]]
| [[vara]] [[rädd]]
| [[være]] [[bange]]
| [[være]] [[redd]]
| [[óttast]]
|-
| 797
| [[be]] [[afraid]] [[of]]
| [[fürchten]]
| [[vrezen]]
| [[frukta]]
| [[være]] [[bange]] [[for]]
| [[være]] [[redd]] [[for]]
| [[óttast]]
|-
| 798
| [[flee]]
| [[fliehen]]
| [[vluchten]]
| [[fly]]; [[rymma]]
| [[flygte]]
| [[rømme]]; [[flykte]]
| [[flýja]]
|-
| 799
| [[escape]]
| [[flüchten]]
| [[ontsnappen]]; [[ontkomen]]
| [[fly]]
| [[flygte]]
| [[flykte]]
| [[strjúka]]
|-
| 800
| [[see]]
| [[sehen]]
| [[zien]]
| [[se]]
| [[se]]
| [[se]]
| [[sjá]]
|-
| 801
| [[look]] [[at]]
| [[anschauen]]
| [[aankijken]]
| [[se]] [[på]]; [[betrakta]]
| [[se]] [[på]]; [[betragte]]
| [[se]] [[på]]; [[betrakte]]
| [[horfa]] [[á]]
|-
| 802
| [[watch]]
| [[ansehen]]
| [[aanzien]]; [[bekijken]]
| [[åse]]
| [[anse]]
| [[anse]]
| [[líta]] [[á]]
|-
| 803
| [[hear]]
| [[hören]]
| [[horen]]
| [[höra]]
| [[høre]]
| [[høre]]
| [[heyra]]
|-
| 804
| [[listen]]
| [[zuhören]]
| [[luisteren]]
| [[höra]] [[på]]; [[lyssna]] [[till]]
| [[høre]] [[til]]
| [[tilhøre]]
| [[hlusta]]
|-
| 805
| [[taste]]
| [[probieren]]
| [[proeven]]
| [[smaka]]; [[smaka]] [[på]]
| [[smage]]; [[smage]] [[på]]
| [[smake]]; [[smake]] [[på]]
| [[smakka]]
|-
| 806
| [[smell]]
| [[riechen]]
| [[ruiken]]
| [[lukta]]
| [[lugte]]
| [[lukte]]
| [[þefa]]
|-
| 807
| [[feel]]
| [[fühlen]]
| [[voelen]]
| [[känna]]
| [[føle]]
| [[føle]]
| [[finna]] [[til]]
|-
| 808
| [[seem]]
| [[scheinen]]
| [[lijken]]
| [[verka]]; [[tyckas]]
| [[synes]]
| [[se]] [[ut]]
| [[virðast]]
|-
| 809
| [[show]]
| [[zu]] [[sehen]] [[sein]]
| [[te]] [[zien]] [[zijn]]
| [[synas]]; [[kunna]] [[ses]]
| [[synes]]
| [[synes]]
| [[vera]] [[að]] [[sjá]]
|-
| 810
| [[hear]]
| [[vernehmen]]
| [[vernemen]]
| [[få]] [[veta]]; [[förnimma]]
| [[erfare]]
| [[få]] [[vite]]
| [[heyra]]; [[greina]]
|-
| 811
| [[be]] [[cold]]
| [[frieren]]
| [[het]] [[koud]] [[hebben]]
| [[frysa]]
| [[fryse]]
| [[fryse]]
| [[frjósa]]
|-
| 812
| [[do]]
| [[tun]]
| [[doen]]
| [[göra]]
| [[gøre]]
| [[gjøre]]
| [[gera]]
|-
| 813
| [[can]]
| [[können]]
| [[kunnen]]
| [[kunna]]
| [[kunne]]
| [[kunne]]
| [[geta]]
|-
| 814
| [[want]]
| [[wollen]]
| [[willen]]
| [[vilja]]
| [[ville]]
| [[ville]]
| [[ætla]]; [[vilja]]
|-
| 815
| [[start]]
| [[anfangen]]
| [[beginnen]]; [[aanvangen]]
| [[börja]]
| [[begynde]]
| [[begynne]]
| [[hefja]]
|-
| 816
| [[finish]]
| [[beenden]]
| [[beëindigen]]
| [[avsluta]]
| [[afslutte]]
| [[avslutte]]
| [[enda]]; [[ljúka]]
|-
| 817
| [[stop]]
| [[aufhören]]
| [[ophouden]]
| [[sluta]]; [[upphöra]]
| [[ophøre]]; [[holde]] [[op]]
| [[slutte]]; [[holde]] [[opp]]
| [[lykta]]
|-
| 818
| [[succeed]]
| [[gelingen]]
| [[lukken]]; [[gelukken]]
| [[lyckas]]
| [[lykkes]]
| [[lykkes]]
| [[heppnast]]
|-
| 819
| [[turn]] [[out]]
| [[geraten]]
| [[uitvallen]]
| [[bli]]
| [[blive]]
| [[bli]]
| [[lukkast]]
|-
| 820
| [[open]]
| [[öffnen]]
| [[openen]]; [[opendoen]]
| [[öppna]]
| [[åbne]]
| [[åpne]]
| [[opna]]
|-
| 821
| [[close]]
| [[schließen]]
| [[sluiten]]; [[dichtdoen]]
| [[låsa]]; [[stänga]]
| [[lukke]]
| [[lukke]]; [[stenge]]
| [[loka]]
|-
| 822
| [[put]]
| [[stellen]]
| [[stellen]]; [[plaatsen]]
| [[ställa]]
| [[stille]]
| [[stille]]
| [[láta]]; [[setja]]
|-
| 823
| [[place]]
| [[setzen]]
| [[zetten]]; [[plaatsen]]
| [[sätta]]
| [[sætte]]
| [[sette]]
| [[láta]]; [[setja]]
|-
| 824
| [[lay]]
| [[legen]]
| [[leggen]]
| [[lägga]]
| [[lægge]]
| [[legge]]
| [[láta]]; [[leggja]]
|-
| 825
| [[touch]]
| [[berühren]]
| [[aanraken]]
| [[beröra]]
| [[berøre]]
| [[berøre]]
| [[koma]] [[við]]
|-
| 826
| [[connect]]
| [[verbinden]]
| [[verbinden]]
| [[förbinda]]
| [[forbinde]]
| [[forbinde]]
| [[sameina]]
|-
| 827
| [[cover]]
| [[bedecken]]
| [[bedekken]]
| [[täcka]]; [[betäcka]]
| [[dække]]; [[bedække]]
| [[dekke]]
| [[hylja]]
|-
| 828
| [[hang]] [[up]]
| [[aufhängen]]
| [[ophangen]]
| [[hänga]]; [[hänga]] [[upp]]
| [[hænge]]; [[hænge]] [[op]]
| [[henge]]; [[henge]] [[opp]]
| [[hengja]]; [[hengja]] [[upp]]
|-
| 829
| [[light]]
| [[anzünden]]
| [[aansteken]]
| [[tända]]; [[antända]]; [[tända]] [[på]]
| [[tænde]]; [[antænde]]
| [[tenne]]; [[antenne]]; [[tenne]] [[på]]
| [[kveikja]] [[í]]
|-
| 830
| [[pick]] [[up]]
| [[aufheben]]
| [[oprapen]]
| [[lyfta]]
| [[løfte]]; [[tage]] [[op]]
| [[løfte]]; [[ta]] [[opp]]
| [[taka]] [[upp]]; [[lyfta]] [[upp]]
|-
| 831
| [[leave]]
| [[zurücklassen]]
| [[achterlaten]]
| [[lämna]]; [[efterlämna]]
| [[lade]] [[tilbage]]
| [[slippe]] [[tilbake]]
| [[skilja]] [[eftir]]
|-
| 832
| [[lose]]
| [[verlieren]]
| [[verliezen]]
| [[mista]]; [[förlora]]
| [[miste]]
| [[miste]]
| [[týna]]; [[glata]]
|-
| 833
| [[drop]]
| [[fallen]] [[lassen]]
| [[laten]] [[vallen]]
| [[tappa]]; [[släppa]]
| [[tabe]]; [[droppe]]
| [[droppe]]; [[la]] [[falle]]
| [[missa]]
|-
| 834
| [[make]]
| [[machen]]
| [[maken]]
| [[göra]]
| [[gøre]]
| [[lage]]; [[gjøre]]
| [[búa]] [[til]]
|-
| 835
| [[produce]]
| [[herstellen]]
| [[produceren]]; [[voortbrengen]]
| [[tillverka]]; [[framställa]]
| [[fremstille]]
| [[fremstille]]
| [[framleiða]]
|-
| 836
| [[build]]
| [[bauen]]
| [[bouwen]]
| [[bygga]]
| [[bygge]]
| [[bygge]]
| [[smíða]]; [[byggja]]
|-
| 837
| [[repair]], [[mend]]
| [[reparieren]]
| [[repareren]]; [[herstellen]]
| [[reparera]]
| [[reparere]]
| [[reparere]]
| [[gera]] [[við]]
|-
| 838
| [[improve]]
| [[verbessern]]
| [[verbeteren]]
| [[rätta]]; [[förbättra]]
| [[rette]]; [[forbedre]]
| [[rette]]; [[forbedre]]
| [[bæta]]
|-
| 839
| [[alter]]
| [[ändern]]
| [[wijzigen]]; [[veranderen]]
| [[ändra]]; [[förändra]]
| [[ændre]]
| [[forandre]]
| [[breyta]]
|-
| 840
| [[dig]]
| [[graben]]
| [[graven]]
| [[gräva]]
| [[grave]]
| [[grave]]
| [[grafa]]
|-
| 841
| [[bow]]
| [[beugen]]
| [[buigen]]
| [[böja]]
| [[bøje]]
| [[bøye]]
| [[beygja]]
|-
| 842
| [[bend]]
| [[biegen]]
| [[buigen]]
| [[böja]]; [[kröka]]
| [[bøje]]
| [[bøye]]
| [[sveigja]]
|-
| 843
| [[spin]]
| [[drehen]]
| [[draaien]]
| [[vrida]]
| [[dreje]]
| [[dreie]]
| [[snúa]]
|-
| 844
| [[turn]] [[over]]
| [[wenden]]
| [[keren]]; [[wenden]]
| [[vända]]
| [[vende]]
| [[vende]]
| [[snúa]]; [[venda]]
|-
| 845
| [[turn]], [[turn]] [[around]]
| [[umdrehen]]
| [[omdraaien]]
| [[vrida]] [[om]]
| [[dreje]] [[om]]
| [[snu]]
| [[venda]]; [[snúa]] [[við]]
|-
| 846
| [[raise]]
| [[heben]]
| [[heffen]]; [[optillen]]
| [[häva]]
| [[hæve]]
| [[heve]]
| [[hefja]]
|-
| 847
| [[lift]]
| [[hochheben]]
| [[tillen]]
| [[lyfta]]
| [[løfte]]
| [[løfte]]
| [[lyfta]] [[upp]]
|-
| 848
| [[seize]]
| [[ergreifen]]
| [[pakken]]; [[grijpen]]
| [[gripa]]
| [[gribe]] [[fat]] [[i]]
| [[gripe]]; [[få]] [[tak]] [[i]]
| [[grípa]]
|-
| 849
| [[hold]]
| [[halten]]
| [[houden]]
| [[hålla]]
| [[holde]]
| [[holde]]
| [[rúma]]; [[halda]]
|-
| 850
| [[press]]
| [[drücken]]
| [[drukken]]
| [[trycka]]
| [[trykke]]
| [[trykke]]
| [[þjá]]; [[þrýsta]]
|-
| 851
| [[push]]
| [[schieben]]
| [[duwen]]; [[schuiven]]
| [[skjuta]]
| [[skyde]]; [[skubbe]]
| [[skyve]]
| [[ýta]]
|-
| 852
| [[scrape]]
| [[kratzen]]
| [[krassen]]
| [[riva]]; [[skrapa]]
| [[klø]]; [[kradse]]
| [[klø]]; [[klore]]
| [[klóra]]
|-
| 853
| [[lick]]
| [[lecken]]
| [[likken]]
| [[slicka]]
| [[slikke]]
| [[slikke]]
| [[sleikja]]
|-
| 854
| [[bite]]
| [[beißen]]
| [[bijten]]
| [[bita]]
| [[bide]]
| [[bite]]
| [[bíta]]
|-
| 855
| [[tear]] [[off]]
| [[abreißen]]
| [[afrukken]]; [[afscheuren]]
| [[slita_av]]; [[riva_av]]
| [[rive]] [[af]]
| [[rive]] [[av]]
| [[rífa]] [[af]]; [[rífa]] [[frá]]
|-
| 856
| [[cut]] [[off]]
| [[abschneiden]]
| [[afsnijden]]
| [[skära]] [[av]]
| [[skære]] [[af]]
| [[skjære]] [[av]]
| [[skera]] [[af]]; [[klippa]] [[af]]
|-
| 857
| [[tie]]
| [[binden]]
| [[binden]]
| [[binda]]
| [[binde]]
| [[binde]]
| [[binda]]
|-
| 858
| [[stick]]
| [[stecken]]
| [[steken]]
| [[sticka]]
| [[stikke]]
| [[stikke]]
| [[stinga]]
|-
| 859
| [[break]]
| [[brechen]]
| [[breken]]
| [[bryta]]; [[brista]]
| [[brække]]
| [[bryte]]; [[briste]]
| [[brjóta]]
|-
| 860
| [[knock]]
| [[klopfen]]
| [[kloppen]]
| [[banka]]; [[klappa]]
| [[banke]]
| [[banke]]
| [[berja]]; [[klappa]]
|-
| 861
| [[hit]]
| [[hauen]]
| [[houwen]]
| [[hugga]]
| [[hugge]]
| [[hogge]]
| [[berja]]; [[höggva]]
|-
| 862
| [[glue]]
| [[kleben]]
| [[plakken]]
| [[klistra]]
| [[klistre]]
| [[klistre]]
| [[líma]]
|-
| 863
| [[rub]]
| [[reiben]]
| [[wrijven]]
| [[gnida]]
| [[gnide]]
| [[gni]]
| [[núa]]
|-
| 864
| [[spread]]
| [[streichen]]
| [[smeren]]
| [[smörja]]
| [[smøre]]
| [[stryke]]
| [[smyrja]]
|-
| 865
| [[sharpen]]
| [[schleifen]]
| [[slijpen]]
| [[slipa]]
| [[slibe]]
| [[slipe]]
| [[slípa]]
|-
| 866
| [[cut]]
| [[schneiden]]
| [[snijden]]
| [[skära]]; [[klippa]]
| [[skære]]; [[klippe]]
| [[klippe]]
| [[skera]]; [[klippa]]
|-
| 867
| [[jog]]
| [[rütteln]]
| [[schudden]]
| [[skaka]]
| [[ruske]]
| [[ruske]]
| [[skaka]]
|-
| 868
| [[shake]]
| [[schütteln]]
| [[schudden]]
| [[rista]]
| [[ryste]]
| [[riste]]
| [[hrista]]
|-
| 869
| [[swing]]
| [[schwenken]]
| [[wuiven]]; [[zwaaien]]
| [[svänga]]
| [[svinge]]
| [[svinge]]
| [[sveifla]]
|-
| 870
| [[pour]]
| [[schütten]]
| [[gieten]]; [[storten]]
| [[hälla]]
| [[hælde]]
| [[helle]]
| [[hella]]
|-
| 871
| [[fill]]
| [[füllen]]
| [[vullen]]
| [[fylla]]
| [[fylde]]
| [[fylle]]
| [[fylla]]
|-
| 872
| [[wrap]]
| [[einwickeln]]
| [[inwikkelen]]
| [[slå]] [[in]]; [[veckla]] [[in]]
| [[pakke]] [[ind]]
| [[vikle]] [[inn]]
| [[vefja]] [[inn]] [[í]]
|-
| 873
| [[carry]]
| [[tragen]]
| [[dragen]]
| [[bära]]
| [[bære]]
| [[bære]]
| [[bera]]
|-
| 874
| [[drag]]
| [[schleppen]]
| [[slepen]]
| [[släpa]]
| [[slæbe]]
| [[slepe]]
| [[draga]]
|-
| 875
| [[pull]]
| [[ziehen]]
| [[trekken]]
| [[dra]]
| [[trække]]
| [[dra]]; [[trekke]]
| [[toga]]; [[draga]]
|-
| 876
| [[keep]]
| [[aufbewahren]]
| [[bewaren]]
| [[förvara]]; [[ta]] [[vara]] [[på]]
| [[opbevare]]
| [[oppbevare]]; [[ta]] [[vare]] [[på]]
| [[geyma]]
|-
| 877
| [[throw]]
| [[werfen]]
| [[gooien]]
| [[kasta]]
| [[kaste]]
| [[kaste]]
| [[kasta]]
|-
| 878
| [[catch]]
| [[fangen]]
| [[vangen]]
| [[fånga]]
| [[fange]]
| [[fange]]
| [[grípa]]
|-
| 879
| [[grab]]
| [[packen]]
| [[pakken]]; [[vastpakken]]
| [[gripa]]; [[gripa]] [[tag]]
| [[gribe]]
| [[gripe]]; [[gripe]] [[tak]] [[i]]
| [[þrífa]] [[í]]
|-
| 880
| [[hide]]
| [[verstecken]]
| [[verstoppen]]
| [[gömma]]
| [[gemme]]
| [[gjemme]]
| [[fela]]
|-
| 881
| [[divide]]
| [[teilen]]
| [[delen]]
| [[dela]]
| [[dele]]
| [[dele]]
| [[deila]]
|-
| 882
| [[send]]
| [[schicken]]
| [[sturen]]
| [[skicka]]
| [[sende]]
| [[sende]]
| [[senda]]
|-
| 883
| [[bring]]
| [[bringen]]
| [[brengen]]
| [[bringa]]
| [[bringe]]
| [[bringe]]
| [[færa]]; [[flytja]]
|-
| 884
| [[add]]
| [[hinzufügen]]
| [[toevoegen]]
| [[tillägga]]
| [[tilføje]]
| [[tilføye]]
| [[bæta]] [[við]]
|-
| 885
| [[get]]
| [[bekommen]]
| [[verkrijgen]]
| [[få]]; [[erhålla]]
| [[få]]
| [[få]]
| [[hljóta]]; [[ná]]
|-
| 886
| [[receive]]
| [[erhalten]]
| [[krijgen]]
| [[få]]; [[erhålla]]
| [[få]]
| [[få]]
| [[fá]]
|-
| 887
| [[take]]
| [[nehmen]]
| [[nemen]]
| [[ta]]; [[taga]]
| [[tage]]
| [[ta]]
| [[taka]]
|-
| 888
| [[choose]]
| [[wählen]]
| [[kiezen]]; [[verkiezen]]
| [[välja]]
| [[vælge]]
| [[velge]]
| [[velja]]
|-
| 889
| [[select]]
| [[auswählen]]
| [[uitkiezen]]
| [[utvälja]]
| [[udvælge]]
| [[velge]] [[ut]]
| [[velja]] [[úr]]
|-
| 890
| [[preserve]]
| [[bewahren]]
| [[bewaren]]
| [[bevara]]
| [[bevare]]
| [[bevare]]
| [[gæta]]; [[vernda]]
|-
| 891
| [[hinder]]
| [[behindern]]
| [[hinderen]]
| [[hindra]]; [[förhindra]]
| [[hindre]]; [[forhindre]]
| [[hindre]]; [[forhindre]]
| [[varna]]
|-
| 892
| [[spoil]]
| [[verderben]]
| [[bederven]]
| [[förstöra]]
| [[ødelægge]]
| [[ødelegge]]
| [[spilla]]
|-
| 893
| [[damage]]
| [[beschädigen]]
| [[beschadigen]]
| [[skada]]
| [[beskadige]]
| [[skade]]
| [[skemma]]
|-
| 894
| [[break]]
| [[zerbrechen]]
| [[breken]]; [[stukbreken]]
| [[bryta]] [[isär]]; [[bryta]] [[sönder]]
| [[brække]] [[itu]]
| [[brekke]] [[i]] [[stykker]]
| [[brjóta]]
|-
| 895
| [[tear]]
| [[zerreißen]]
| [[scheuren]]; [[verscheuren]]
| [[riva]] [[sönder]]; [[slita]] [[sönder]]
| [[rive]] [[itu]]
| [[rive]] [[i]] [[stykker]]
| [[rífa]]; [[rífa]] [[sundur]]
|-
| 896
| [[destroy]]
| [[zerstören]]
| [[vernielen]]
| [[förstöra]]
| [[ødelægge]]
| [[ødelegge]]
| [[rífa]] [[niður]]
|-
| 897
| [[burn]]
| [[verbrennen]]
| [[branden]]; [[verbranden]]
| [[bränna]]; [[bränna]] [[upp]]
| [[brænde]]
| [[brenne]]; [[brenne]] [[opp]]
| [[brenna]]
|-
| 898
| [[give]]
| [[geben]]
| [[geven]]
| [[ge]]
| [[give]]
| [[gi]]
| [[gefa]]
|-
| 899
| [[hand]]
| [[reichen]]
| [[reiken]]; [[aanreiken]]
| [[räcka]]
| [[række]]
| [[rekke]]
| [[rétta]]
|-
| 900
| [[give]]
| [[schenken]]
| [[schenken]]
| [[skänka]]
| [[forære]]
| [[forære]]; [[skjenke]]
| [[gefa]]
|-
| 901
| [[promise]]
| [[versprechen]]
| [[beloven]]
| [[lova]]
| [[love]]
| [[love]]
| [[lofa]]; [[heita]]
|-
| 902
| [[wish]]
| [[wünschen]]
| [[wensen]]
| [[önska]]
| [[ønske]]
| [[ønske]]
| [[óska]]
|-
| 903
| [[praise]]
| [[loben]]
| [[loven]]; [[prijzen]]
| [[lova]]; [[beröma]]
| [[rose]]
| [[rose]]
| [[lofa]]; [[hrósa]]
|-
| 904
| [[kiss]]
| [[küssen]]
| [[kussen]]
| [[pussa]]
| [[kysse]]
| [[kysse]]
| [[kyssa]]
|-
| 905
| [[rock]]
| [[wiegen]]
| [[wiegen]]
| [[vagga]]
| [[vugge]]
| [[vogge]]
| [[rugga]]
|-
| 906
| [[cover]]
| [[zudecken]]
| [[toedekken]]
| [[täcka]]
| [[dække]] [[til]]
| [[dekke]] [[til]]
| [[þekja]]; [[breiða]] [[yfir]]
|-
| 907
| [[wake]]
| [[wecken]]
| [[wekken]]
| [[väcka]]
| [[vække]]
| [[vekke]]
| [[vekja]]
|-
| 908
| [[show]]
| [[zeigen]]
| [[tonen]]; [[wijzen]]
| [[visa]]
| [[vise]]
| [[vise]]
| [[sýna]]
|-
| 909
| [[guide]]
| [[führen]]
| [[voeren]]
| [[föra]]
| [[føre]]
| [[føre]]
| [[leiða]]
|-
| 910
| [[teach]]
| [[lehren]]
| [[leren]]
| [[lära]]
| [[lære]]
| [[lære]]
| [[kenna]]
|-
| 911
| [[instruct]]
| [[unterrichten]]
| [[onderwijzen]]
| [[undervisa]]
| [[undervise]]
| [[undervise]]
| [[fræða]]
|-
| 912
| [[bring]] [[up]]
| [[aufziehen]]
| [[grootbrengen]]
| [[uppfostra]]
| [[opdrage]]
| [[oppdra]]
| [[ala]] [[upp]]
|-
| 913
| [[lead]]
| [[leiten]]
| [[leiden]]
| [[leda]]
| [[lede]]
| [[lede]]
| [[stjórna]]
|-
| 914
| [[urge]]
| [[antreiben]]
| [[aandrijven]]
| [[driva]] [[på]]
| [[skynde]] [[på]]
| [[drive]] [[på]]
| [[hvetja]]
|-
| 915
| [[let]]
| [[lassen]]
| [[laten]]
| [[få]] [[att]]
| [[få]] [[til]] [[at]]
| [[få]] [[til]] [[å]]
| [[láta]]
|-
| 916
| [[invite]]
| [[einladen]]
| [[uitnodigen]]
| [[bjuda]]; [[inbjuda]]
| [[indbyde]]; [[invitere]]
| [[be]]; [[invitere]]
| [[bjóða]] [[heim]]
|-
| 917
| [[unite]]
| [[vereinigen]]
| [[verenigen]]
| [[förena]]
| [[forene]]
| [[forene]]
| [[sameina]]
|-
| 918
| [[visit]]
| [[besuchen]]
| [[bezoeken]]
| [[besöka]]
| [[besøge]]
| [[besøke]]
| [[heimsækja]]
|-
| 919
| [[meet]]
| [[treffen]]
| [[treffen]]; [[ontmoeten]]
| [[möta]]; [[träffa]]
| [[møde]]
| [[møte]]; [[treffe]]
| [[hitta]]
|-
| 920
| [[assemble]]
| [[sich]] [[versammeln]]
| [[zich]] [[verzamelen]]
| [[församla]] [[sig]]
| [[forsamles]]
| [[forsamles]]
| [[safnast]] [[saman]]
|-
| 921
| [[play]]
| [[spielen]]
| [[spelen]]
| [[leka]]; [[spela]]
| [[lege]]; [[spille]]
| [[leke]]; [[spille]]
| [[leika]] [[sér]]
|-
| 922
| [[sing]]
| [[singen]]
| [[zingen]]
| [[sjunga]]
| [[synge]]
| [[synge]]
| [[syngja]]
|-
| 923
| [[dance]]
| [[tanzen]]
| [[dansen]]
| [[dansa]]
| [[danse]]
| [[danse]]
| [[dansa]]
|-
| 924
| [[separate]]
| [[sich]] [[trennen]]
| [[van]] [[elkaar]] [[gaan]]
| [[skiljas]]
| [[skilles]]
| [[skilles]]
| [[skiljast]]
|-
| 925
| [[leave]]
| [[verlassen]]
| [[verlaten]]
| [[lämna]]; [[överge]]
| [[forlade]]
| [[forlate]]
| [[yfirgefa]]
|-
| 926
| [[rescue]]
| [[retten]]
| [[redden]]
| [[rädda]]
| [[redde]]
| [[redde]]
| [[bjarga]]
|-
| 927
| [[guard]]
| [[bewachen]]
| [[bewaken]]
| [[bevaka]]
| [[bevogte]]
| [[bevokte]]
| [[gæta]]; [[hafa]] [[vörð]] [[á]]
|-
| 928
| [[protect]]
| [[schützen]]
| [[beschermen]]
| [[skydda]]; [[beskydda]]
| [[skærme]]; [[beskytte]]
| [[verne]]; [[beskytte]]
| [[vernda]]
|-
| 929
| [[defend]]
| [[verteidigen]]
| [[verdedigen]]
| [[försvara]]
| [[forsvare]]
| [[forsvare]]
| [[verja]]
|-
| 930
| [[brawl]]
| [[sich]] [[schlagen]]
| [[knokken]]
| [[slåss]]
| [[slås]]
| [[slåss]]
| [[slást]]; [[berjast]]
|-
| 931
| [[shoot]]
| [[schießen]]
| [[schieten]]
| [[skjuta]]
| [[skyde]]
| [[skyte]]
| [[skjóta]]
|-
| 932
| [[win]]
| [[siegen]]
| [[overwinnen]]
| [[segra]]
| [[sejre]]
| [[seire]]
| [[sigra]]
|-
| 933
| [[annoy]]
| [[ärgern]]
| [[ergeren]]
| [[förarga]]
| [[ærgre]]
| [[ergre]]
| [[ergja]]; [[skaprauna]]
|-
| 934
| [[beat]]
| [[schlagen]]
| [[slaan]]
| [[slå]]
| [[slå]]
|
| [[slá]]; [[lemja]]
|-
| 935
| [[kick]]
| [[treten]]
| [[trappen]]; [[schoppen]]
| [[sparka]]
| [[sparke]]
| [[sparke]]
| [[sparka]]
|-
| 936
| [[sting]]
| [[stechen]]
| [[steken]]; [[prikken]]
| [[sticka]]
| [[stikke]]
| [[stikke]]
| [[stinga]]
|-
| 937
| [[shove]]
| [[stoßen]]
| [[stoten]]
| [[stöta]]
| [[støde]]
| [[støte]]
| [[hrinda]]
|-
| 938
| [[steal]]
| [[stehlen]]
| [[stelen]]
| [[stjäla]]
| [[stjæle]]
| [[stjele]]
| [[stela]]
|-
| 939
| [[disturb]]
| [[stören]]
| [[storen]]; [[verstoren]]
| [[störa]]
| [[forstyrre]]
| [[forstyrre]]
| [[trufla]]
|-
| 940
| [[bother]]
| [[belästigen]]
| [[lastig]] [[vallen]]
| [[genera]]; [[besvära]]
| [[genere]]; [[ulejlige]]
| [[plage]]; [[sjenere]]
| [[ónáða]]
|-
| 941
| [[conceal]]
| [[verbergen]]
| [[verbergen]]
| [[dölja]]
| [[skjule]]
| [[gjemme]]
| [[leyna]]
|-
| 942
| [[deceive]]
| [[täuschen]]
| [[misleiden]]
| [[vilseleda]]
| [[villede]]
| [[villede]]
| [[gabba]]; [[blekkja]]
|-
| 943
| [[cheat]]
| [[betrügen]]
| [[bedriegen]]
| [[bedra]]
| [[bedrage]]
| [[bedra]]
| [[svíkja]]; [[blekkja]]
|-
| 944
| [[kill]]
| [[töten]]
| [[doden]]
| [[döda]]
| [[dræbe]]
| [[drepe]]
| [[drepa]]
|-
| 945
| [[dwell]]
| [[wohnen]]
| [[wonen]]
| [[bo]]
| [[bo]]
| [[bo]]
| [[búa]]
|-
| 946
| [[work]]
| [[arbeiten]]
| [[werken]]
| [[arbeta]]
| [[arbejde]]
| [[arbeide]]
| [[vinna]]
|-
| 947
| [[gather]]
| [[sammeln]]
| [[inzamelen]]; [[verzamelen]]
| [[samla]]
| [[samle]]
| [[samle]]
| [[safna]]
|-
| 948
| [[pick]]
| [[pflücken]]
| [[plukken]]
| [[plocka]]
| [[plukke]]
| [[plukke]]
| [[tína]]; [[reyta]]
|-
| 949
| [[hunt]]
| [[jagen]]
| [[jagen]]
| [[jaga]]
| [[jage]]
| [[jage]]
| [[veiða]]
|-
| 950
| [[fish]]
| [[fischen]]
| [[vissen]]
| [[fiska]]
| [[fiske]]
| [[fiske]]
| [[fiska]]
|-
| 951
| [[catch]]
| [[fassen]]
| [[vangen]]
| [[fånga]]
| [[fange]]
| [[fange]]
| [[veiða]]
|-
| 952
| [[herd]]
| [[hüten]]
| [[hoeden]]
| [[vakta]]
| [[vogte]]
| [[vokte]]
| [[gæta]]; [[vakta]]
|-
| 953
| [[drive]]
| [[treiben]]
| [[drijven]]
| [[driva]]
| [[drive]]
| [[drive]]
| [[reka]]
|-
| 954
| [[tie]] [[up]]
| [[anbinden]]
| [[vastbinden]]
| [[binda]] [[fast]]
| [[binde]] [[fast]]
| [[feste]]
| [[binda]] [[við]]; [[binda]] [[fast]]
|-
| 955
| [[feed]]
| [[füttern]]
| [[voeren]]
| [[fodra]]
| [[fodre]]
| [[fore]]
| [[fóðra]]
|-
| 956
| [[milk]]
| [[melken]]
| [[melken]]
| [[mjölka]]
| [[malke]]
| [[melke]]
| [[mjólka]]
|-
| 957
| [[chop]]
| [[hacken]]
| [[hakken]]
| [[hacka]]
| [[hakke]]
| [[hakke]]
| [[höggva]]
|-
| 958
| [[water]]
| [[gießen]]
| [[gieten]]
| [[hälla]]; [[vattna]]
| [[hælde]]
| [[helle]]
| [[hella]]
|-
| 959
| [[ripen]]
| [[reifen]]
| [[rijpen]]
| [[mogna]]
| [[modne]]
| [[modne]]
| [[þroskast]]
|-
| 960
| [[cook]]
| [[zubereiten]]
| [[klaarmaken]]; [[toebereiden]]
| [[tillaga]]; [[tillreda]]
| [[tilberede]]
| [[lage]]; [[tilberede]]
| [[elda]]; [[tilbúa]]
|-
| 961
| [[boil]]
| [[kochen]]
| [[koken]]
| [[koka]]
| [[koge]]
| [[koke]]
| [[sjóða]]
|-
| 962
| [[bake]]
| [[backen]]
| [[bakken]]
| [[baka]]
| [[bage]]
| [[bake]]
| [[baka]]
|-
| 963
| [[fry]]
| [[braten]]
| [[braden]]
| [[steka]]
| [[stege]]
| [[steke]]
| [[steikja]]
|-
| 964
| [[stir]]
| [[umrühren]]
| [[omroeren]]
| [[röra]] [[om]]
| [[røre]] [[om]]
| [[røre]] [[om]]
| [[hræra]] [[í]]
|-
| 965
| [[knit]]
| [[stricken]]
| [[breien]]
| [[sticka]]
| [[strikke]]
| [[strikke]]
| [[prjóna]]
|-
| 966
| [[sew]]
| [[nähen]]
| [[naaien]]
| [[sy]]
| [[sy]]
| [[sy]]
| [[sauma]]
|-
| 967
| [[dye]]
| [[färben]]
| [[verven]]; [[kleuren]]
| [[färga]]
| [[farve]]
| [[farge]]
| [[lita]]
|-
| 968
| [[clean]]
| [[reinigen]]
| [[reinigen]]
| [[rensa]]; [[rengöra]]
| [[rense]]; [[gøre]] [[ren]]
| [[rense]]; [[gjøre]] [[ren]]
| [[hreinsa]]
|-
| 969
| [[wash]]
| [[waschen]]
| [[wassen]]
| [[tvätta]]
| [[vaske]]
| [[vaske]]
| [[þvo]]
|-
| 970
| [[wipe]]
| [[abwischen]]
| [[afvegen]]
| [[torka]] [[av]]
| [[tørre]] [[af]]
| [[tørke]] [[av]]
| [[þerra]]
|-
| 971
| [[rinse]]
| [[spülen]]
| [[spoelen]]; [[afwassen]]
| [[spola]]; [[skölja]]
| [[skylle]]
| [[spyle]]; [[skylle]]
| [[skola]]; [[þvo]] [[upp]]
|-
| 972
| [[sweep]]
| [[fegen]]
| [[vegen]]
| [[feja]]
| [[feje]]
| [[feie]]
| [[sópa]]; [[hreinsa]]
|-
| 973
| [[sweep]]
| [[kehren]]
| [[vegen]]
| [[sopa]]
| [[feje]]
| [[koste]]
| [[sópa]]
|-
| 974
| [[bath]]
| [[baden]]
| [[baden]]
| [[bada]]
| [[bade]]
| [[bade]]
| [[baða]] [[sig]]
|-
| 975
| [[wash]]
| [[sich]] [[waschen]]
| [[zich]] [[wassen]]
| [[tvätta]] [[sig]]
| [[vaske]] [[sig]]
| [[vaske]] [[seg]]
| [[þvo]] [[sér]]
|-
| 976
| [[take]] [[off]]
| [[ausziehen]]
| [[uittrekken]]
| [[ta]] [[av]]
| [[tage]] [[af]]
| [[ta]] [[av]]
| [[fara]] [[úr]]
|-
| 977
| [[put]] [[on]]
| [[anziehen]]
| [[aantrekken]]
| [[ta]] [[på]]
| [[tage]] [[på]]
| [[ta]] [[på]]
| [[fara]] [[í]]
|-
| 978
| [[get]] [[dressed]]
| [[sich]] [[anziehen]]
| [[zich]] [[aankleden]]
| [[klä]] [[på]] [[sig]]
| [[klæde]] [[sig]] [[på]]
| [[kle]] [[på]] [[seg]]
| [[klæðast]]
|-
| 979
| [[comb]]
| [[kämmen]]
| [[kammen]]
| [[kamma]]
| [[rede]]; [[frisere]]
| [[gre]]; [[kjemme]]
| [[greiða]]
|-
| 980
| [[decorate]]
| [[schmücken]]
| [[tooien]]
| [[pynta]]; [[smycka]]
| [[pynte]]; [[smykke]]
| [[pynte]]; [[smykke]]
| [[prýða]]; [[skreyta]]
|-
| 981
| [[say]]
| [[sagen]]
| [[zeggen]]
| [[säga]]
| [[sige]]
| [[si]]
| [[segja]]
|-
| 982
| [[speak]]
| [[sprechen]]
| [[spreken]]
| [[tala]]
| [[snakke]]
| [[snakke]]
| [[tala]]
|-
| 983
| [[talk]]
| [[reden]]
| [[praten]]
| [[tala]]; [[prata]]
| [[tale]]; [[snakke]]
| [[tale]]; [[snakke]]
| [[ræða]]
|-
| 984
| [[chat]]
| [[sich]] [[unterhalten]]
| [[zich]] [[onderhouden]]
| [[prata]]
| [[snakke]] [[sammen]]
| [[samtale]]
| [[spjalla]]; [[ræðast]] [[við]]
|-
| 985
| [[ask]]
| [[fragen]]
| [[vragen]]
| [[fråga]]; [[spörja]]
| [[spørge]]
| [[spørre]]
| [[spyrja]]
|-
| 986
| [[request]]
| [[bitten]]
| [[vragen]]; [[verzoeken]]
| [[be]]
| [[bede]]
| [[be]]
| [[biðja]]
|-
| 987
| [[tell]]
| [[erzählen]]
| [[vertellen]]
| [[berätta]]
| [[berette]]; [[fortælle]]
| [[fortelle]]
| [[segja]] [[frá]]
|-
| 988
| [[convey]]
| [[mitteilen]]
| [[meedelen]]
| [[meddela]]
| [[meddele]]
| [[meddele]]
| [[tilkynna]]
|-
| 989
| [[name]]
| [[nennen]]
| [[noemen]]
| [[kalla]]
| [[nævne]]
| [[kalle]]
| [[nefna]]
|-
| 990
| [[call]]
| [[rufen]]
| [[roepen]]
| [[ropa]]
| [[råbe]]
| [[rope]]
| [[kalla]]
|-
| 991
| [[brag]]
| [[prahlen]]
| [[pralen]]
| [[pråla]]; [[skryta]]
| [[prale]]
| [[skryte]]
| [[gorta]]
|-
| 992
| [[translate]]
| [[übersetzen]]
| [[vertalen]]
| [[tolka]]; [[översätta]]
| [[oversætte]]
| [[oversette]]
| [[þýða]]
|-
| 993
| [[think]]
| [[denken]]
| [[denken]]
| [[tänka]]
| [[tænke]]
| [[tenke]]
| [[hugsa]]
|-
| 994
| [[believe]]
| [[glauben]]
| [[geloven]]
| [[tro]]
| [[tro]]
| [[tro]]
| [[trúa]]
|-
| 995
| [[notice]]
| [[bemerken]]
| [[bemerken]]
| [[uppmärksamma]]; [[lägga]] [[märke]] [[till]]
| [[bemærke]]; [[lægge]] [[mærke]] [[til]]
| [[bemerke]]; [[legge]] [[merke]] [[til]]
| [[taka]] [[eftir]]
|-
| 996
| [[recognize]]
| [[erkennen]]
| [[herkennen]]
| [[känna]] [[igen]]
| [[genkende]]
| [[gjenkjenne]]
| [[þekkja]]
|-
| 997
| [[grasp]]
| [[begreifen]]
| [[begrijpen]]
| [[begripa]]
| [[begribe]]
| [[begripe]]
| [[skilja]]
|-
| 998
| [[understand]]
| [[verstehen]]
| [[verstaan]]
| [[förstå]]
| [[forstå]]
| [[forstå]]; [[skjønne]]
| [[skilja]]
|-
| 999
| [[learn]]
| [[lernen]]
| [[leren]]
| [[lära]] [[sig]]
| [[lære]]
| [[lære]]
| [[læra]]
|-
| 1000
| [[know]]
| [[wissen]]
| [[weten]]
| [[veta]]
| [[vide]]
| [[vite]]
| [[vita]]
|-
| 1001
| [[remember]]
| [[sich]] [[erinnern]] [[an]]
| [[zich]] [[herinneren]] [[aan]]
| [[minnas]]; [[komma]] [[ihåg]]
| [[mindes]]; [[huske]] [[på]]
| [[huske]] [[på]]
| [[minnast]]
|-
| 1002
| [[forget]]
| [[vergessen]]
| [[vergeten]]
| [[glömma]]
| [[glemme]]
| [[glemme]]
| [[gleyma]]
|-
| 1003
| [[measure]]
| [[messen]]
| [[meten]]
| [[mäta]]
| [[måle]]
| [[måle]]
| [[mæla]]
|-
| 1004
| [[count]]
| [[zählen]]
| [[tellen]]
| [[räkna]]
| [[tælle]]
| [[telle]]
| [[telja]]
|-
| 1005
| [[calculate]]
| [[rechnen]]
| [[rekenen]]
| [[räkna]]
| [[regne]]
| [[regne]]
| [[reikna]]
|-
| 1006
| [[read]]
| [[lesen]]
| [[lezen]]
| [[läsa]]
| [[læse]]
| [[lese]]
| [[lesa]]
|-
| 1007
| [[paint]]
| [[malen]]
| [[schilderen]]
| [[måla]]
| [[male]]
| [[male]]
| [[mála]]
|-
| 1008
| [[draw]]
| [[zeichnen]]
| [[tekenen]]
| [[teckna]]
| [[tegne]]
| [[tegne]]
| [[teikna]]
|-
| 1009
| [[write]]
| [[schreiben]]
| [[schrijven]]
| [[skriva]]
| [[skrive]]
| [[skrive]]
| [[skrifa]]
|-
| 1010
| [[own]]
| [[besitzen]]
| [[bezitten]]
| [[äga]]; [[besitta]]
| [[eje]]; [[besidde]]
| [[eie]]; [[inneha]]
| [[hafa]]
|-
| 1011
| [[buy]]
| [[kaufen]]
| [[kopen]]
| [[köpa]]
| [[købe]]
| [[kjøpe]]
| [[kaupa]]
|-
| 1012
| [[sell]]
| [[verkaufen]]
| [[verkopen]]
| [[sälja]]
| [[sælge]]
| [[selge]]
| [[selja]]
|-
| 1013
| [[pay]] [[for]]
| [[bezahlen]]
| [[betalen]]
| [[betala]]
| [[betale]]
| [[betale]]
| [[borga]]
|-
| 1014
| [[pay]]
| [[zahlen]]
| [[betalen]]
| [[betala]]
| [[betale]]
| [[betale]]
| [[borga]]
|-
| 1015
| [[rule]]
| [[beherrschen]]
| [[beheersen]]
| [[behärska]]
| [[beherske]]
| [[beherske]]
| [[hafa]] [[á]] [[valdi]] [[sínu]]
|-
| 1016
| [[endure]]
| [[ertragen]]
| [[verdragen]]
| [[tåla]]; [[uthärda]]
| [[tåle]]; [[udholde]]
| [[orke]]
| [[þola]]
|}
==References==
<references/>
*The NorthEuraLex database is edited by Johannes Dellert and Gerhard Jäger, and is licensed under the [https://creativecommons.org/licenses/by-sa/4.0/ Creative Commons Attribution-ShareAlike 4.0 International License].
==External links==
*[http://www.northeuralex.org/ NorthEuraLex]
{{North Eurasian lists}}
j8gfnkr63b2acut84zrifh222nsalcp
atmen
0
2333692
5729015
2026-07-19T15:57:35Z
ZilentFyld
6541
สร้างหน้าด้วย "== ภาษาเยอรมัน == === Alternative forms === * {{alter|de|athmen||obsolete}} === รากศัพท์ === จาก{{inh|de|gmh|ātemen}}, จาก{{inh|de|goh|ātamōn}}, ซึ่งมาจาก{{der|de|gem-pro|*ēþmaz}}. {{surface analysis|de|Atem|-en}}. ร่วมเชื้อสายกับ{{cog|nl|ademen}} === การออกเสียง === * {{IPA|de|/ˈaːtmən/|[ˈʔaːt.mən]|[ˈʔaːtʰ-]|aa=..."
5729015
wikitext
text/x-wiki
== ภาษาเยอรมัน ==
=== Alternative forms ===
* {{alter|de|athmen||obsolete}}
=== รากศัพท์ ===
จาก{{inh|de|gmh|ātemen}}, จาก{{inh|de|goh|ātamōn}}, ซึ่งมาจาก{{der|de|gem-pro|*ēþmaz}}. {{surface analysis|de|Atem|-en}}. ร่วมเชื้อสายกับ{{cog|nl|ademen}}
=== การออกเสียง ===
* {{IPA|de|/ˈaːtmən/|[ˈʔaːt.mən]|[ˈʔaːtʰ-]|aa=Germany}}
* {{IPA|de|/ˈaːpmən/|aa=casual speech}} <!-- cf. the audio at "Kurzatmigkeit", where he says [p] or at least [t͡p] (and this obviously in enunciation) -->
** {{audio|de|De-atmen.ogg|aa=Germany (Berlin)}}
* {{IPA|de|/ˈaːtmɛn/|[ˈʔaːtʰ-]|[ˈʔaːd̥-]|aa=Austria,South German}}
** {{audio|de|De-at-atmen.ogg|aa=Austria}}
* {{hyphenation|de|at|men}}
=== คำกริยา ===
{{de-verb}}
# {{lb|de|intransitive}} [[หายใจ]]
==== การผันรูป ====
{{de-conj}}
==== ลูกคำ ====
{{col4|de
|abatmen
|anatmen
|Atmen
|Atmer
|Atmung
|aufatmen
|ausatmen
|beatmen
|durchatmen
|einatmen
|hineinatmen
|reinatmen
|veratmen
|weiteratmen
}}
==== คำที่เกี่ยวข้อง ====
* {{l|de|Atem}}
* {{l|de|Atemzug}}
* {{l|de|Atempause}}
* {{l|de|atmungsaktiv}}
=== อ่านเพิ่ม ===
* {{R:de:DWDS}}
* {{R:de:UniLeipzig}}
* {{R:de:Duden}}
* {{R:de:Grimm}}
* {{R:de:OpenThesaurus}}
5zouh385c6uok6lme3yt9zz9vg62d4a
5729177
5729015
2026-07-20T03:11:10Z
Octahedron80
267
/* Alternative forms */ เก็บกวาด
5729177
wikitext
text/x-wiki
== ภาษาเยอรมัน ==
=== รูปแบบอื่น ===
* {{alter|de|athmen||obsolete}}
=== รากศัพท์ ===
จาก{{inh|de|gmh|ātemen}}, จาก{{inh|de|goh|ātamōn}}, ซึ่งมาจาก{{der|de|gem-pro|*ēþmaz}}. {{surface analysis|de|Atem|-en}}. ร่วมเชื้อสายกับ{{cog|nl|ademen}}
=== การออกเสียง ===
* {{IPA|de|/ˈaːtmən/|[ˈʔaːt.mən]|[ˈʔaːtʰ-]|aa=Germany}}
* {{IPA|de|/ˈaːpmən/|aa=casual speech}} <!-- cf. the audio at "Kurzatmigkeit", where he says [p] or at least [t͡p] (and this obviously in enunciation) -->
** {{audio|de|De-atmen.ogg|aa=Germany (Berlin)}}
* {{IPA|de|/ˈaːtmɛn/|[ˈʔaːtʰ-]|[ˈʔaːd̥-]|aa=Austria,South German}}
** {{audio|de|De-at-atmen.ogg|aa=Austria}}
* {{hyphenation|de|at|men}}
=== คำกริยา ===
{{de-verb}}
# {{lb|de|intransitive}} [[หายใจ]]
==== การผันรูป ====
{{de-conj}}
==== ลูกคำ ====
{{col4|de
|abatmen
|anatmen
|Atmen
|Atmer
|Atmung
|aufatmen
|ausatmen
|beatmen
|durchatmen
|einatmen
|hineinatmen
|reinatmen
|veratmen
|weiteratmen
}}
==== คำที่เกี่ยวข้อง ====
* {{l|de|Atem}}
* {{l|de|Atemzug}}
* {{l|de|Atempause}}
* {{l|de|atmungsaktiv}}
=== อ่านเพิ่ม ===
* {{R:de:DWDS}}
* {{R:de:UniLeipzig}}
* {{R:de:Duden}}
* {{R:de:Grimm}}
* {{R:de:OpenThesaurus}}
jiimw708m121pbdb2x3pb94y6h2d2j8
5729178
5729177
2026-07-20T03:11:23Z
Octahedron80
267
/* คำที่เกี่ยวข้อง */
5729178
wikitext
text/x-wiki
== ภาษาเยอรมัน ==
=== รูปแบบอื่น ===
* {{alter|de|athmen||obsolete}}
=== รากศัพท์ ===
จาก{{inh|de|gmh|ātemen}}, จาก{{inh|de|goh|ātamōn}}, ซึ่งมาจาก{{der|de|gem-pro|*ēþmaz}}. {{surface analysis|de|Atem|-en}}. ร่วมเชื้อสายกับ{{cog|nl|ademen}}
=== การออกเสียง ===
* {{IPA|de|/ˈaːtmən/|[ˈʔaːt.mən]|[ˈʔaːtʰ-]|aa=Germany}}
* {{IPA|de|/ˈaːpmən/|aa=casual speech}} <!-- cf. the audio at "Kurzatmigkeit", where he says [p] or at least [t͡p] (and this obviously in enunciation) -->
** {{audio|de|De-atmen.ogg|aa=Germany (Berlin)}}
* {{IPA|de|/ˈaːtmɛn/|[ˈʔaːtʰ-]|[ˈʔaːd̥-]|aa=Austria,South German}}
** {{audio|de|De-at-atmen.ogg|aa=Austria}}
* {{hyphenation|de|at|men}}
=== คำกริยา ===
{{de-verb}}
# {{lb|de|intransitive}} [[หายใจ]]
==== การผันรูป ====
{{de-conj}}
==== ลูกคำ ====
{{col4|de
|abatmen
|anatmen
|Atmen
|Atmer
|Atmung
|aufatmen
|ausatmen
|beatmen
|durchatmen
|einatmen
|hineinatmen
|reinatmen
|veratmen
|weiteratmen
}}
==== คำเกี่ยวข้อง ====
* {{l|de|Atem}}
* {{l|de|Atemzug}}
* {{l|de|Atempause}}
* {{l|de|atmungsaktiv}}
=== อ่านเพิ่ม ===
* {{R:de:DWDS}}
* {{R:de:UniLeipzig}}
* {{R:de:Duden}}
* {{R:de:Grimm}}
* {{R:de:OpenThesaurus}}
dkhqboj1sfxzeqixt84jqci58i4nv32
5729179
5729178
2026-07-20T03:11:57Z
Octahedron80
267
/* การออกเสียง */
5729179
wikitext
text/x-wiki
== ภาษาเยอรมัน ==
=== รูปแบบอื่น ===
* {{alter|de|athmen||obsolete}}
=== รากศัพท์ ===
จาก{{inh|de|gmh|ātemen}}, จาก{{inh|de|goh|ātamōn}}, ซึ่งมาจาก{{der|de|gem-pro|*ēþmaz}}. {{surface analysis|de|Atem|-en}}. ร่วมเชื้อสายกับ{{cog|nl|ademen}}
=== การออกเสียง ===
* {{IPA|de|/ˈaːtmən/|[ˈʔaːt.mən]|[ˈʔaːtʰ-]|aa=Germany}}
* {{IPA|de|/ˈaːpmən/|aa=casual speech}} <!-- cf. the audio at "Kurzatmigkeit", where he says [p] or at least [t͡p] (and this obviously in enunciation) -->
** {{audio|de|De-atmen.ogg|aa=<<Germany>> (<<Berlin>>)}}
* {{IPA|de|/ˈaːtmɛn/|[ˈʔaːtʰ-]|[ˈʔaːd̥-]|aa=Austria,South German}}
** {{audio|de|De-at-atmen.ogg|aa=Austria}}
* {{hyphenation|de|at|men}}
=== คำกริยา ===
{{de-verb}}
# {{lb|de|intransitive}} [[หายใจ]]
==== การผันรูป ====
{{de-conj}}
==== ลูกคำ ====
{{col4|de
|abatmen
|anatmen
|Atmen
|Atmer
|Atmung
|aufatmen
|ausatmen
|beatmen
|durchatmen
|einatmen
|hineinatmen
|reinatmen
|veratmen
|weiteratmen
}}
==== คำเกี่ยวข้อง ====
* {{l|de|Atem}}
* {{l|de|Atemzug}}
* {{l|de|Atempause}}
* {{l|de|atmungsaktiv}}
=== อ่านเพิ่ม ===
* {{R:de:DWDS}}
* {{R:de:UniLeipzig}}
* {{R:de:Duden}}
* {{R:de:Grimm}}
* {{R:de:OpenThesaurus}}
lel016js5nakx0dcfea6151xpi05a2g
recht
0
2333693
5729017
2026-07-19T16:12:39Z
ZilentFyld
6541
สร้างหน้าด้วย "== ภาษาดัตช์ == === การออกเสียง === * {{IPA|nl|/rɛxt/}} * {{audio|nl|Nl-recht.ogg}} * {{hyphenation|nl|recht}} * {{rhymes|nl|ɛxt|s=1}} === รากศัพท์ 1 === จาก{{inh|nl|dum|recht}}, จาก{{inh|nl|odt|reht}}, จาก{{inh|nl|gmw-pro|*reht}}, จาก{{inh|nl|gem-pro|*rehtaz}}, จาก{{inh|nl|ine-pro|*h₃reǵtós}}. ==== คำคุณศัพท์ ==== {{nl-adj}} # ต..."
5729017
wikitext
text/x-wiki
== ภาษาดัตช์ ==
=== การออกเสียง ===
* {{IPA|nl|/rɛxt/}}
* {{audio|nl|Nl-recht.ogg}}
* {{hyphenation|nl|recht}}
* {{rhymes|nl|ɛxt|s=1}}
=== รากศัพท์ 1 ===
จาก{{inh|nl|dum|recht}}, จาก{{inh|nl|odt|reht}}, จาก{{inh|nl|gmw-pro|*reht}}, จาก{{inh|nl|gem-pro|*rehtaz}}, จาก{{inh|nl|ine-pro|*h₃reǵtós}}.
==== คำคุณศัพท์ ====
{{nl-adj}}
# [[ตรง]]
#: {{ant|nl|krom}}
#: {{uxa|nl|in een '''rechte''' lijn|ในเส้นตรง}}
# {{obsolete form of|nl|[[rechts]], [[rechter]]|t=ขวา}}
===== การผันรูป =====
{{nl-decl-adj}}
===== ลูกคำ =====
{{col|nl
|kaarsrecht
|lijnrecht
|loodrecht
|oprecht
|recht door zee
|rechte klimming
|rechter
|rechthoek
|rechtlijnig
|rechtlopen
|rechtop
|rechts
|rechtschapen
|rechttegenover
|rechttrekken
|recht voor zijn raap
|rechtzetten
|recht zo die gaat
|regelrecht
}}
===== คำสืบทอด =====
* {{desc|brc|rekti}}
* {{desc|gmw-jdt|rääxt}}
* {{desc|dcr|recht|rek|ret|tret|regt}}
** {{desc|vic|tret|bor=1}} {{q|dated}}
* {{desc|pap|rècht|bor=1}}
* {{desc|srm|leti|bor=1}}
=== รากศัพท์ 2 ===
จาก{{inh|nl|dum|recht}}, จาก{{inh|nl|odt|reht}}, จาก{{inh|nl|gmw-pro|*rehta}}, จาก{{inh|nl|gem-pro|*rehtą}} ซึ่งเป็นการสร้างคำนามจากคำคุณศัพท์
==== คำนาม ====
{{nl-noun|n|-en|+}}
# [[สิทธิ]], [[อำนาจ]], อำนาจหน้าที่, [[เอกสิทธิ์]]
#: {{uxi|nl|Je hebt het '''recht''' niet om dat te doen!|คุณไม่มี'''สิทธิ'''ทำเช่นนั้น!}}
# [[ความ]][[ยุติธรรม]]
#: {{uxi|nl|Noemt u dit '''recht'''? Ik noem dit onrecht.|คุณเรียกสิ่งนี้ว่า'''ความยุติธรรม'''หรือ? ฉันเรียกสิ่งนี้ว่าความอยุติธรรม}}
# [[นิติศาสตร์]], [[กฎหมาย]]
#: {{uxi|nl|Het '''recht''' heeft beslist.|กฎหมายได้ตัดสินแล้ว}}
# [[ค่าธรรมเนียม]], [[อากร]], ค่าภาระที่ต้องชำระ
===== ลูกคำ =====
{{col|nl|title=ทั่วไป
|berechten
|rechtbank <g:f>
|rechtelijk
|rechtenstudent <g:m>
|rechtenstudie <g:f>
|rechter <g:m>
|rechtigen
|rechtmatig
|rechtsgeding <g:f>
|rechtsgeleerde <g:m,f>
|rechtsgeleerdheid <g:f>
|rechtsgeschiedkunde <g:f>
|rechtsgeschiedkundige <g:m>
|rechtsmacht <g:f>
|rechtsorde <g:f>
|rechtspersoon <g:m>
|rechtspsychologie <g:f>
|rechtstheorie <g:f>
|rechtspleging <g:f>
|rechtspraak <g:f>
|rechtsprocedure <g:f>
|rechtspsychologie <g:f>
|rechtsstaat <g:m>
|rechtssysteem <g:n>
|rechtswetenschap <g:f>
|rechtszaal <g:f,m>
|rechtszaak <g:f>
|rechtszekerheid <g:f>
|rechtvaardig
|terecht
|van rechtswege
|voorrecht <g:n>
|wederrechtelijk
}}
{{col|nl|title=สิทธิเฉพาะหรือประเภทของกฎหมาย
|aasdomsrecht <g:n>
|adviesrecht <g:n>
|alleenrecht <g:n>
|auteursrecht <g:n>
|beklemrecht <g:n>
|bestaansrecht
|burgerrecht <g:n>
|cijnsrecht <g:n>
|collatierecht <g:n>
|contractrecht
|dierenrechten <g:n-p>
|dijkrecht <g:n>
|eerstgeboorterecht <g:n>
|erfrecht <g:n>
|geboorterecht <g:n>
|gewoonterecht <g:n>
|grondrecht <g:n>
|gruitrecht <g:n>
|havenrecht <g:n>
|hoederecht <g:n>
|kiesrecht <g:n>
|leenrecht <g:n>
|mensenrecht <g:n>
|milieurecht <g:n>
|natuurrecht <g:n>
|ontslagrecht <g:n>
|oorlogsrecht <g:n>
|privaatrecht <g:n>
|publiekrecht <g:n>
|rolrecht <g:n>
|stadsrecht <g:n>
|stapelrecht <g:n>
|stemrecht <g:n>
|strafprocesrecht <g:n>
|spreekrecht <g:n>
|vetorecht <g:n>
|volkenrecht <g:n>
|zelfbeschikkingsrecht <g:n>
}}
===== คำที่เกี่ยวข้อง =====
{{col|nl
|gerecht
}}
===== คำสืบทอด =====
* {{desc|af|reg}}
* {{desc|dcr|recht|regt}}
* {{desc|jvn|rèh|bor=1}}
* {{desc|srm|leti|bor=1}}
=== รากศัพท์ 3 ===
{{nonlemma}}
==== คำกริยา ====
{{head|nl|verb form}}
# {{infl of|nl|rechten||bare-ten-verb}}
== ภาษาเยอรมัน ==
=== รากศัพท์ ===
{{dercat|de|gem-pro|ine-pro|inh=1}}
จาก{{inh|de|gmh|rëht}}, จาก{{inh|de|goh|rëht}}, จาก{{inh|de|gmw-pro|*reht||ขวา, ตรง}}.
{{col-top|2|cog}}
ร่วมเชื้อสายกับ{{cog|yi|רעכט}}, {{cog|is|réttur}}, {{cog|nl|recht}}, {{cog|en|right}}, {{cog|da|ret}}.
{{col-bottom}}
=== การออกเสียง ===
* {{IPA|de|/ʁɛçt/|[ʁɛçtʰ]|a=Germany}}
* {{IPA|de|/rɛçt/|[rɛçtʰ]|a=Austria, Switzerland}}
* {{rhymes|de|ɛçt|s=1}}
* {{audio|de|De-recht.ogg}}
* {{audio|de|De-recht2.ogg|a=<<Germany>> (<<Berlin>>)}}
=== คำคุณศัพท์ ===
{{de-adj|comp.sup:+est:+st[very rare]}}
# [[ขวา]] {{qual|ทิศทาง}}
#: {{ant|de|link}}
#: {{coi|de|die '''rechte''' Hand|[[มือ]][[ขวา]]}}
#: {{ux|de|Auf der '''rechten''' Straßenseite liegt ein [[Supermarkt]].|[[ซูเปอร์มาร์เก็ต]]อยู่ด้าน'''ขวา'''ของถนน}}
# [[ถูกต้อง]], [[เหมาะสม]]
#: {{ant|de|falsch}}
#: {{coi|de|im '''rechten''' Augenblick|ในจังหวะที่เหมาะสม}}
#: {{coi|de|auf der ''' rechten''' Spur|อยู่บนเส้นทางที่ถูกต้อง}}
# [[จริง]], [[แท้จริง]]
# [[ยุติธรรม]], [[ชอบ]][[ด้วย]][[กฎหมาย]]
# {{lb|de|geometry}} [[เป็น]][[มุม]] 90 [[องศา]]
#: {{syn|de|rechtwinklig}}
#: {{coi|de|'''rechter''' Winkel|[[มุม]][[ฉาก]]}}
==== การผันรูป ====
{{de-adecl|comp.sup:+est:+st[very rare]}}
==== ลูกคำ ====
* {{l|de|rechte Hand|g=f||มือขวา; มือขวา, ผู้ช่วยคนสำคัญ}}
* {{l|de|rechter Winkel}}
=== คำกริยาวิเศษณ์ ===
{{de-adv}}
# [[ค่อน]][[ข้าง]], [[พอ]][[สมควร]]
#: {{uxi|de|Es ist '''recht''' warm heute Abend.|เย็นนี้'''ค่อนข้าง'''อบอุ่น}}
#: {{uxi|de|'''recht''' klein|'''ค่อนข้าง'''เล็ก}}
# อย่าง[[ถูกต้อง]]
#: {{uxi|de|ganz '''recht'''|ถูกต้องเลย}}
# อย่าง[[แม่นยำ]]
==== คำที่เกี่ยวข้อง ====
* {{l|de|Recht|g=n||สิทธิ; เอกสิทธิ์; สิทธิเรียกร้อง; กฎหมาย}}
* {{l|de|recht haben}}
=== อ่านเพิ่ม ===
* {{R:de:Duden}}
* {{R:de:DWDS}}
7iits5g04ezmlzaa23fvio1syzhdbzn
5729079
5729017
2026-07-20T02:01:15Z
Octahedron80
267
5729079
wikitext
text/x-wiki
== ภาษาดัตช์ ==
=== การออกเสียง ===
* {{IPA|nl|/rɛxt/}}
* {{audio|nl|Nl-recht.ogg}}
* {{hyphenation|nl|recht}}
* {{rhymes|nl|ɛxt|s=1}}
=== รากศัพท์ 1 ===
จาก{{inh|nl|dum|recht}}, จาก{{inh|nl|odt|reht}}, จาก{{inh|nl|gmw-pro|*reht}}, จาก{{inh|nl|gem-pro|*rehtaz}}, จาก{{inh|nl|ine-pro|*h₃reǵtós}}
==== คำคุณศัพท์ ====
{{nl-adj}}
# [[ตรง]]
#: {{ant|nl|krom}}
#: {{uxa|nl|in een '''rechte''' lijn|ในเส้นตรง}}
# {{obsolete form of|nl|[[rechts]], [[rechter]]|t=ขวา}}
===== การผันรูป =====
{{nl-decl-adj}}
===== ลูกคำ =====
{{col|nl
|kaarsrecht
|lijnrecht
|loodrecht
|oprecht
|recht door zee
|rechte klimming
|rechter
|rechthoek
|rechtlijnig
|rechtlopen
|rechtop
|rechts
|rechtschapen
|rechttegenover
|rechttrekken
|recht voor zijn raap
|rechtzetten
|recht zo die gaat
|regelrecht
}}
===== คำสืบทอด =====
* {{desc|brc|rekti}}
* {{desc|gmw-jdt|rääxt}}
* {{desc|dcr|recht|rek|ret|tret|regt}}
** {{desc|vic|tret|bor=1}} {{q|dated}}
* {{desc|pap|rècht|bor=1}}
* {{desc|srm|leti|bor=1}}
=== รากศัพท์ 2 ===
จาก{{inh|nl|dum|recht}}, จาก{{inh|nl|odt|reht}}, จาก{{inh|nl|gmw-pro|*rehta}}, จาก{{inh|nl|gem-pro|*rehtą}} ซึ่งเป็นการสร้างคำนามจากคำคุณศัพท์
==== คำนาม ====
{{nl-noun|n|-en|+}}
# [[สิทธิ]], [[อำนาจ]], อำนาจหน้าที่, [[เอกสิทธิ์]]
#: {{uxi|nl|Je hebt het '''recht''' niet om dat te doen!|คุณไม่มี'''สิทธิ'''ทำเช่นนั้น!}}
# [[ความ]][[ยุติธรรม]]
#: {{uxi|nl|Noemt u dit '''recht'''? Ik noem dit onrecht.|คุณเรียกสิ่งนี้ว่า'''ความยุติธรรม'''หรือ? ฉันเรียกสิ่งนี้ว่าความอยุติธรรม}}
# [[นิติศาสตร์]], [[กฎหมาย]]
#: {{uxi|nl|Het '''recht''' heeft beslist.|กฎหมายได้ตัดสินแล้ว}}
# [[ค่าธรรมเนียม]], [[อากร]], ค่าภาระที่ต้องชำระ
===== ลูกคำ =====
{{col|nl|title=ทั่วไป
|berechten
|rechtbank <g:f>
|rechtelijk
|rechtenstudent <g:m>
|rechtenstudie <g:f>
|rechter <g:m>
|rechtigen
|rechtmatig
|rechtsgeding <g:f>
|rechtsgeleerde <g:m,f>
|rechtsgeleerdheid <g:f>
|rechtsgeschiedkunde <g:f>
|rechtsgeschiedkundige <g:m>
|rechtsmacht <g:f>
|rechtsorde <g:f>
|rechtspersoon <g:m>
|rechtspsychologie <g:f>
|rechtstheorie <g:f>
|rechtspleging <g:f>
|rechtspraak <g:f>
|rechtsprocedure <g:f>
|rechtspsychologie <g:f>
|rechtsstaat <g:m>
|rechtssysteem <g:n>
|rechtswetenschap <g:f>
|rechtszaal <g:f,m>
|rechtszaak <g:f>
|rechtszekerheid <g:f>
|rechtvaardig
|terecht
|van rechtswege
|voorrecht <g:n>
|wederrechtelijk
}}
{{col|nl|title=สิทธิเฉพาะหรือประเภทของกฎหมาย
|aasdomsrecht <g:n>
|adviesrecht <g:n>
|alleenrecht <g:n>
|auteursrecht <g:n>
|beklemrecht <g:n>
|bestaansrecht
|burgerrecht <g:n>
|cijnsrecht <g:n>
|collatierecht <g:n>
|contractrecht
|dierenrechten <g:n-p>
|dijkrecht <g:n>
|eerstgeboorterecht <g:n>
|erfrecht <g:n>
|geboorterecht <g:n>
|gewoonterecht <g:n>
|grondrecht <g:n>
|gruitrecht <g:n>
|havenrecht <g:n>
|hoederecht <g:n>
|kiesrecht <g:n>
|leenrecht <g:n>
|mensenrecht <g:n>
|milieurecht <g:n>
|natuurrecht <g:n>
|ontslagrecht <g:n>
|oorlogsrecht <g:n>
|privaatrecht <g:n>
|publiekrecht <g:n>
|rolrecht <g:n>
|stadsrecht <g:n>
|stapelrecht <g:n>
|stemrecht <g:n>
|strafprocesrecht <g:n>
|spreekrecht <g:n>
|vetorecht <g:n>
|volkenrecht <g:n>
|zelfbeschikkingsrecht <g:n>
}}
===== คำที่เกี่ยวข้อง =====
{{col|nl
|gerecht
}}
===== คำสืบทอด =====
* {{desc|af|reg}}
* {{desc|dcr|recht|regt}}
* {{desc|jvn|rèh|bor=1}}
* {{desc|srm|leti|bor=1}}
=== รากศัพท์ 3 ===
{{nonlemma}}
==== คำกริยา ====
{{head|nl|รูปกริยา}}
# {{infl of|nl|rechten||bare-ten-verb}}
== ภาษาเยอรมัน ==
=== รากศัพท์ ===
{{dercat|de|gem-pro|ine-pro|inh=1}}
จาก{{inh|de|gmh|rëht}}, จาก{{inh|de|goh|rëht}}, จาก{{inh|de|gmw-pro|*reht||ขวา, ตรง}}
{{col-top|2|cog}}
ร่วมเชื้อสายกับ{{cog|yi|רעכט}}, {{cog|is|réttur}}, {{cog|nl|recht}}, {{cog|en|right}}, {{cog|da|ret}}
{{col-bottom}}
=== การออกเสียง ===
* {{IPA|de|/ʁɛçt/|[ʁɛçtʰ]|a=Germany}}
* {{IPA|de|/rɛçt/|[rɛçtʰ]|a=Austria, Switzerland}}
* {{rhymes|de|ɛçt|s=1}}
* {{audio|de|De-recht.ogg}}
* {{audio|de|De-recht2.ogg|a=<<Germany>> (<<Berlin>>)}}
=== คำคุณศัพท์ ===
{{de-adj|comp.sup:+est:+st[very rare]}}
# [[ขวา]]
#: {{ant|de|link}}
#: {{coi|de|die '''rechte''' Hand|[[มือ]][[ขวา]]}}
#: {{ux|de|Auf der '''rechten''' Straßenseite liegt ein [[Supermarkt]].|[[ซูเปอร์มาร์เก็ต]]อยู่ด้าน'''ขวา'''ของถนน}}
# [[ถูกต้อง]], [[เหมาะสม]]
#: {{ant|de|falsch}}
#: {{coi|de|im '''rechten''' Augenblick|ในจังหวะที่เหมาะสม}}
#: {{coi|de|auf der ''' rechten''' Spur|อยู่บนเส้นทางที่ถูกต้อง}}
# [[จริง]], [[แท้จริง]]
# [[ยุติธรรม]], [[ชอบ]][[ด้วย]][[กฎหมาย]]
# {{lb|de|geometry}} [[เป็น]][[มุม]] 90 [[องศา]]
#: {{syn|de|rechtwinklig}}
#: {{coi|de|'''rechter''' Winkel|[[มุม]][[ฉาก]]}}
==== การผันรูป ====
{{de-adecl|comp.sup:+est:+st[พบได้ยากมาก]}}
==== ลูกคำ ====
* {{l|de|rechte Hand|g=f||มือขวา; มือขวา, ผู้ช่วยคนสำคัญ}}
* {{l|de|rechter Winkel}}
=== คำกริยาวิเศษณ์ ===
{{de-adv}}
# [[ค่อน]][[ข้าง]], [[พอ]][[สมควร]]
#: {{uxi|de|Es ist '''recht''' warm heute Abend.|เย็นนี้'''ค่อนข้าง'''อบอุ่น}}
#: {{uxi|de|'''recht''' klein|'''ค่อนข้าง'''เล็ก}}
# อย่าง[[ถูกต้อง]]
#: {{uxi|de|ganz '''recht'''|ถูกต้องเลย}}
# อย่าง[[แม่นยำ]]
==== คำที่เกี่ยวข้อง ====
* {{l|de|Recht|g=n||สิทธิ; เอกสิทธิ์; สิทธิเรียกร้อง; กฎหมาย}}
* {{l|de|recht haben}}
=== อ่านเพิ่ม ===
* {{R:de:Duden}}
* {{R:de:DWDS}}
r3wcdu31jzz8wr8hzohfb6z74uy15z8
5729081
5729079
2026-07-20T02:02:03Z
Octahedron80
267
/* คำคุณศัพท์ */
5729081
wikitext
text/x-wiki
== ภาษาดัตช์ ==
=== การออกเสียง ===
* {{IPA|nl|/rɛxt/}}
* {{audio|nl|Nl-recht.ogg}}
* {{hyphenation|nl|recht}}
* {{rhymes|nl|ɛxt|s=1}}
=== รากศัพท์ 1 ===
จาก{{inh|nl|dum|recht}}, จาก{{inh|nl|odt|reht}}, จาก{{inh|nl|gmw-pro|*reht}}, จาก{{inh|nl|gem-pro|*rehtaz}}, จาก{{inh|nl|ine-pro|*h₃reǵtós}}
==== คำคุณศัพท์ ====
{{nl-adj}}
# [[ตรง]]
#: {{ant|nl|krom}}
#: {{uxa|nl|in een '''rechte''' lijn|ในเส้นตรง}}
# {{obsolete form of|nl|[[rechts]], [[rechter]]|t=ขวา}}
===== การผันรูป =====
{{nl-decl-adj}}
===== ลูกคำ =====
{{col|nl
|kaarsrecht
|lijnrecht
|loodrecht
|oprecht
|recht door zee
|rechte klimming
|rechter
|rechthoek
|rechtlijnig
|rechtlopen
|rechtop
|rechts
|rechtschapen
|rechttegenover
|rechttrekken
|recht voor zijn raap
|rechtzetten
|recht zo die gaat
|regelrecht
}}
===== คำสืบทอด =====
* {{desc|brc|rekti}}
* {{desc|gmw-jdt|rääxt}}
* {{desc|dcr|recht|rek|ret|tret|regt}}
** {{desc|vic|tret|bor=1}} {{q|dated}}
* {{desc|pap|rècht|bor=1}}
* {{desc|srm|leti|bor=1}}
=== รากศัพท์ 2 ===
จาก{{inh|nl|dum|recht}}, จาก{{inh|nl|odt|reht}}, จาก{{inh|nl|gmw-pro|*rehta}}, จาก{{inh|nl|gem-pro|*rehtą}} ซึ่งเป็นการสร้างคำนามจากคำคุณศัพท์
==== คำนาม ====
{{nl-noun|n|-en|+}}
# [[สิทธิ]], [[อำนาจ]], อำนาจหน้าที่, [[เอกสิทธิ์]]
#: {{uxi|nl|Je hebt het '''recht''' niet om dat te doen!|คุณไม่มี'''สิทธิ'''ทำเช่นนั้น!}}
# [[ความ]][[ยุติธรรม]]
#: {{uxi|nl|Noemt u dit '''recht'''? Ik noem dit onrecht.|คุณเรียกสิ่งนี้ว่า'''ความยุติธรรม'''หรือ? ฉันเรียกสิ่งนี้ว่าความอยุติธรรม}}
# [[นิติศาสตร์]], [[กฎหมาย]]
#: {{uxi|nl|Het '''recht''' heeft beslist.|กฎหมายได้ตัดสินแล้ว}}
# [[ค่าธรรมเนียม]], [[อากร]], ค่าภาระที่ต้องชำระ
===== ลูกคำ =====
{{col|nl|title=ทั่วไป
|berechten
|rechtbank <g:f>
|rechtelijk
|rechtenstudent <g:m>
|rechtenstudie <g:f>
|rechter <g:m>
|rechtigen
|rechtmatig
|rechtsgeding <g:f>
|rechtsgeleerde <g:m,f>
|rechtsgeleerdheid <g:f>
|rechtsgeschiedkunde <g:f>
|rechtsgeschiedkundige <g:m>
|rechtsmacht <g:f>
|rechtsorde <g:f>
|rechtspersoon <g:m>
|rechtspsychologie <g:f>
|rechtstheorie <g:f>
|rechtspleging <g:f>
|rechtspraak <g:f>
|rechtsprocedure <g:f>
|rechtspsychologie <g:f>
|rechtsstaat <g:m>
|rechtssysteem <g:n>
|rechtswetenschap <g:f>
|rechtszaal <g:f,m>
|rechtszaak <g:f>
|rechtszekerheid <g:f>
|rechtvaardig
|terecht
|van rechtswege
|voorrecht <g:n>
|wederrechtelijk
}}
{{col|nl|title=สิทธิเฉพาะหรือประเภทของกฎหมาย
|aasdomsrecht <g:n>
|adviesrecht <g:n>
|alleenrecht <g:n>
|auteursrecht <g:n>
|beklemrecht <g:n>
|bestaansrecht
|burgerrecht <g:n>
|cijnsrecht <g:n>
|collatierecht <g:n>
|contractrecht
|dierenrechten <g:n-p>
|dijkrecht <g:n>
|eerstgeboorterecht <g:n>
|erfrecht <g:n>
|geboorterecht <g:n>
|gewoonterecht <g:n>
|grondrecht <g:n>
|gruitrecht <g:n>
|havenrecht <g:n>
|hoederecht <g:n>
|kiesrecht <g:n>
|leenrecht <g:n>
|mensenrecht <g:n>
|milieurecht <g:n>
|natuurrecht <g:n>
|ontslagrecht <g:n>
|oorlogsrecht <g:n>
|privaatrecht <g:n>
|publiekrecht <g:n>
|rolrecht <g:n>
|stadsrecht <g:n>
|stapelrecht <g:n>
|stemrecht <g:n>
|strafprocesrecht <g:n>
|spreekrecht <g:n>
|vetorecht <g:n>
|volkenrecht <g:n>
|zelfbeschikkingsrecht <g:n>
}}
===== คำที่เกี่ยวข้อง =====
{{col|nl
|gerecht
}}
===== คำสืบทอด =====
* {{desc|af|reg}}
* {{desc|dcr|recht|regt}}
* {{desc|jvn|rèh|bor=1}}
* {{desc|srm|leti|bor=1}}
=== รากศัพท์ 3 ===
{{nonlemma}}
==== คำกริยา ====
{{head|nl|รูปกริยา}}
# {{infl of|nl|rechten||bare-ten-verb}}
== ภาษาเยอรมัน ==
=== รากศัพท์ ===
{{dercat|de|gem-pro|ine-pro|inh=1}}
จาก{{inh|de|gmh|rëht}}, จาก{{inh|de|goh|rëht}}, จาก{{inh|de|gmw-pro|*reht||ขวา, ตรง}}
{{col-top|2|cog}}
ร่วมเชื้อสายกับ{{cog|yi|רעכט}}, {{cog|is|réttur}}, {{cog|nl|recht}}, {{cog|en|right}}, {{cog|da|ret}}
{{col-bottom}}
=== การออกเสียง ===
* {{IPA|de|/ʁɛçt/|[ʁɛçtʰ]|a=Germany}}
* {{IPA|de|/rɛçt/|[rɛçtʰ]|a=Austria, Switzerland}}
* {{rhymes|de|ɛçt|s=1}}
* {{audio|de|De-recht.ogg}}
* {{audio|de|De-recht2.ogg|a=<<Germany>> (<<Berlin>>)}}
=== คำคุณศัพท์ ===
{{de-adj|comp.sup:+est:+st[พบได้ยากมาก]}}
# [[ขวา]]
#: {{ant|de|link}}
#: {{coi|de|die '''rechte''' Hand|[[มือ]][[ขวา]]}}
#: {{ux|de|Auf der '''rechten''' Straßenseite liegt ein [[Supermarkt]].|[[ซูเปอร์มาร์เก็ต]]อยู่ด้าน'''ขวา'''ของถนน}}
# [[ถูกต้อง]], [[เหมาะสม]]
#: {{ant|de|falsch}}
#: {{coi|de|im '''rechten''' Augenblick|ในจังหวะที่เหมาะสม}}
#: {{coi|de|auf der ''' rechten''' Spur|อยู่บนเส้นทางที่ถูกต้อง}}
# [[จริง]], [[แท้จริง]]
# [[ยุติธรรม]], [[ชอบ]][[ด้วย]][[กฎหมาย]]
# {{lb|de|geometry}} [[เป็น]][[มุม]] 90 [[องศา]]
#: {{syn|de|rechtwinklig}}
#: {{coi|de|'''rechter''' Winkel|[[มุม]][[ฉาก]]}}
==== การผันรูป ====
{{de-adecl|comp.sup:+est:+st[พบได้ยากมาก]}}
==== ลูกคำ ====
* {{l|de|rechte Hand|g=f||มือขวา; มือขวา, ผู้ช่วยคนสำคัญ}}
* {{l|de|rechter Winkel}}
=== คำกริยาวิเศษณ์ ===
{{de-adv}}
# [[ค่อน]][[ข้าง]], [[พอ]][[สมควร]]
#: {{uxi|de|Es ist '''recht''' warm heute Abend.|เย็นนี้'''ค่อนข้าง'''อบอุ่น}}
#: {{uxi|de|'''recht''' klein|'''ค่อนข้าง'''เล็ก}}
# อย่าง[[ถูกต้อง]]
#: {{uxi|de|ganz '''recht'''|ถูกต้องเลย}}
# อย่าง[[แม่นยำ]]
==== คำที่เกี่ยวข้อง ====
* {{l|de|Recht|g=n||สิทธิ; เอกสิทธิ์; สิทธิเรียกร้อง; กฎหมาย}}
* {{l|de|recht haben}}
=== อ่านเพิ่ม ===
* {{R:de:Duden}}
* {{R:de:DWDS}}
6n6knhihd1v7zdk4wry68dize7o5hxo
5729082
5729081
2026-07-20T02:02:48Z
Octahedron80
267
/* คำคุณศัพท์ */
5729082
wikitext
text/x-wiki
== ภาษาดัตช์ ==
=== การออกเสียง ===
* {{IPA|nl|/rɛxt/}}
* {{audio|nl|Nl-recht.ogg}}
* {{hyphenation|nl|recht}}
* {{rhymes|nl|ɛxt|s=1}}
=== รากศัพท์ 1 ===
จาก{{inh|nl|dum|recht}}, จาก{{inh|nl|odt|reht}}, จาก{{inh|nl|gmw-pro|*reht}}, จาก{{inh|nl|gem-pro|*rehtaz}}, จาก{{inh|nl|ine-pro|*h₃reǵtós}}
==== คำคุณศัพท์ ====
{{nl-adj}}
# [[ตรง]]
#: {{ant|nl|krom}}
#: {{uxa|nl|in een '''rechte''' lijn|ในเส้นตรง}}
# {{obsolete form of|nl|[[rechts]], [[rechter]]|t=ขวา}}
===== การผันรูป =====
{{nl-decl-adj}}
===== ลูกคำ =====
{{col|nl
|kaarsrecht
|lijnrecht
|loodrecht
|oprecht
|recht door zee
|rechte klimming
|rechter
|rechthoek
|rechtlijnig
|rechtlopen
|rechtop
|rechts
|rechtschapen
|rechttegenover
|rechttrekken
|recht voor zijn raap
|rechtzetten
|recht zo die gaat
|regelrecht
}}
===== คำสืบทอด =====
* {{desc|brc|rekti}}
* {{desc|gmw-jdt|rääxt}}
* {{desc|dcr|recht|rek|ret|tret|regt}}
** {{desc|vic|tret|bor=1}} {{q|dated}}
* {{desc|pap|rècht|bor=1}}
* {{desc|srm|leti|bor=1}}
=== รากศัพท์ 2 ===
จาก{{inh|nl|dum|recht}}, จาก{{inh|nl|odt|reht}}, จาก{{inh|nl|gmw-pro|*rehta}}, จาก{{inh|nl|gem-pro|*rehtą}} ซึ่งเป็นการสร้างคำนามจากคำคุณศัพท์
==== คำนาม ====
{{nl-noun|n|-en|+}}
# [[สิทธิ]], [[อำนาจ]], อำนาจหน้าที่, [[เอกสิทธิ์]]
#: {{uxi|nl|Je hebt het '''recht''' niet om dat te doen!|คุณไม่มี'''สิทธิ'''ทำเช่นนั้น!}}
# [[ความ]][[ยุติธรรม]]
#: {{uxi|nl|Noemt u dit '''recht'''? Ik noem dit onrecht.|คุณเรียกสิ่งนี้ว่า'''ความยุติธรรม'''หรือ? ฉันเรียกสิ่งนี้ว่าความอยุติธรรม}}
# [[นิติศาสตร์]], [[กฎหมาย]]
#: {{uxi|nl|Het '''recht''' heeft beslist.|กฎหมายได้ตัดสินแล้ว}}
# [[ค่าธรรมเนียม]], [[อากร]], ค่าภาระที่ต้องชำระ
===== ลูกคำ =====
{{col|nl|title=ทั่วไป
|berechten
|rechtbank <g:f>
|rechtelijk
|rechtenstudent <g:m>
|rechtenstudie <g:f>
|rechter <g:m>
|rechtigen
|rechtmatig
|rechtsgeding <g:f>
|rechtsgeleerde <g:m,f>
|rechtsgeleerdheid <g:f>
|rechtsgeschiedkunde <g:f>
|rechtsgeschiedkundige <g:m>
|rechtsmacht <g:f>
|rechtsorde <g:f>
|rechtspersoon <g:m>
|rechtspsychologie <g:f>
|rechtstheorie <g:f>
|rechtspleging <g:f>
|rechtspraak <g:f>
|rechtsprocedure <g:f>
|rechtspsychologie <g:f>
|rechtsstaat <g:m>
|rechtssysteem <g:n>
|rechtswetenschap <g:f>
|rechtszaal <g:f,m>
|rechtszaak <g:f>
|rechtszekerheid <g:f>
|rechtvaardig
|terecht
|van rechtswege
|voorrecht <g:n>
|wederrechtelijk
}}
{{col|nl|title=สิทธิเฉพาะหรือประเภทของกฎหมาย
|aasdomsrecht <g:n>
|adviesrecht <g:n>
|alleenrecht <g:n>
|auteursrecht <g:n>
|beklemrecht <g:n>
|bestaansrecht
|burgerrecht <g:n>
|cijnsrecht <g:n>
|collatierecht <g:n>
|contractrecht
|dierenrechten <g:n-p>
|dijkrecht <g:n>
|eerstgeboorterecht <g:n>
|erfrecht <g:n>
|geboorterecht <g:n>
|gewoonterecht <g:n>
|grondrecht <g:n>
|gruitrecht <g:n>
|havenrecht <g:n>
|hoederecht <g:n>
|kiesrecht <g:n>
|leenrecht <g:n>
|mensenrecht <g:n>
|milieurecht <g:n>
|natuurrecht <g:n>
|ontslagrecht <g:n>
|oorlogsrecht <g:n>
|privaatrecht <g:n>
|publiekrecht <g:n>
|rolrecht <g:n>
|stadsrecht <g:n>
|stapelrecht <g:n>
|stemrecht <g:n>
|strafprocesrecht <g:n>
|spreekrecht <g:n>
|vetorecht <g:n>
|volkenrecht <g:n>
|zelfbeschikkingsrecht <g:n>
}}
===== คำที่เกี่ยวข้อง =====
{{col|nl
|gerecht
}}
===== คำสืบทอด =====
* {{desc|af|reg}}
* {{desc|dcr|recht|regt}}
* {{desc|jvn|rèh|bor=1}}
* {{desc|srm|leti|bor=1}}
=== รากศัพท์ 3 ===
{{nonlemma}}
==== คำกริยา ====
{{head|nl|รูปกริยา}}
# {{infl of|nl|rechten||bare-ten-verb}}
== ภาษาเยอรมัน ==
=== รากศัพท์ ===
{{dercat|de|gem-pro|ine-pro|inh=1}}
จาก{{inh|de|gmh|rëht}}, จาก{{inh|de|goh|rëht}}, จาก{{inh|de|gmw-pro|*reht||ขวา, ตรง}}
{{col-top|2|cog}}
ร่วมเชื้อสายกับ{{cog|yi|רעכט}}, {{cog|is|réttur}}, {{cog|nl|recht}}, {{cog|en|right}}, {{cog|da|ret}}
{{col-bottom}}
=== การออกเสียง ===
* {{IPA|de|/ʁɛçt/|[ʁɛçtʰ]|a=Germany}}
* {{IPA|de|/rɛçt/|[rɛçtʰ]|a=Austria, Switzerland}}
* {{rhymes|de|ɛçt|s=1}}
* {{audio|de|De-recht.ogg}}
* {{audio|de|De-recht2.ogg|a=<<Germany>> (<<Berlin>>)}}
=== คำคุณศัพท์ ===
{{de-adj|comp.sup:+est:+st[พบได้ยากมาก]}}
# [[ขวา]]
#: {{ant|de|link}}
#: {{coi|de|die '''rechte''' Hand|[[มือ]][[ขวา]]}}
#: {{ux|de|Auf der '''rechten''' Straßenseite liegt ein [[Supermarkt]].|[[ซูเปอร์มาร์เก็ต]]อยู่ด้าน'''ขวา'''ของถนน}}
# [[ถูกต้อง]], [[เหมาะสม]]
#: {{ant|de|falsch}}
#: {{coi|de|im '''rechten''' Augenblick|ในจังหวะที่เหมาะสม}}
#: {{coi|de|auf der ''' rechten''' Spur|อยู่บนเส้นทางที่ถูกต้อง}}
# [[จริง]], [[แท้จริง]]
# [[ยุติธรรม]], [[ชอบ]][[ด้วย]][[กฎหมาย]]
# {{lb|de|geometry}} [[ตั้ง]][[ฉาก]], [[เป็น]][[มุม]] 90 [[องศา]]
#: {{syn|de|rechtwinklig}}
#: {{coi|de|'''rechter''' Winkel|[[มุม]][[ฉาก]]}}
==== การผันรูป ====
{{de-adecl|comp.sup:+est:+st[พบได้ยากมาก]}}
==== ลูกคำ ====
* {{l|de|rechte Hand|g=f||มือขวา; มือขวา, ผู้ช่วยคนสำคัญ}}
* {{l|de|rechter Winkel}}
=== คำกริยาวิเศษณ์ ===
{{de-adv}}
# [[ค่อน]][[ข้าง]], [[พอ]][[สมควร]]
#: {{uxi|de|Es ist '''recht''' warm heute Abend.|เย็นนี้'''ค่อนข้าง'''อบอุ่น}}
#: {{uxi|de|'''recht''' klein|'''ค่อนข้าง'''เล็ก}}
# อย่าง[[ถูกต้อง]]
#: {{uxi|de|ganz '''recht'''|ถูกต้องเลย}}
# อย่าง[[แม่นยำ]]
==== คำที่เกี่ยวข้อง ====
* {{l|de|Recht|g=n||สิทธิ; เอกสิทธิ์; สิทธิเรียกร้อง; กฎหมาย}}
* {{l|de|recht haben}}
=== อ่านเพิ่ม ===
* {{R:de:Duden}}
* {{R:de:DWDS}}
25blp9p4uzl6cy27adds3gcdol5mf72
5729099
5729082
2026-07-20T02:06:10Z
Octahedron80
267
/* ลูกคำ */
5729099
wikitext
text/x-wiki
== ภาษาดัตช์ ==
=== การออกเสียง ===
* {{IPA|nl|/rɛxt/}}
* {{audio|nl|Nl-recht.ogg}}
* {{hyphenation|nl|recht}}
* {{rhymes|nl|ɛxt|s=1}}
=== รากศัพท์ 1 ===
จาก{{inh|nl|dum|recht}}, จาก{{inh|nl|odt|reht}}, จาก{{inh|nl|gmw-pro|*reht}}, จาก{{inh|nl|gem-pro|*rehtaz}}, จาก{{inh|nl|ine-pro|*h₃reǵtós}}
==== คำคุณศัพท์ ====
{{nl-adj}}
# [[ตรง]]
#: {{ant|nl|krom}}
#: {{uxa|nl|in een '''rechte''' lijn|ในเส้นตรง}}
# {{obsolete form of|nl|[[rechts]], [[rechter]]|t=ขวา}}
===== การผันรูป =====
{{nl-decl-adj}}
===== ลูกคำ =====
{{col|nl
|kaarsrecht
|lijnrecht
|loodrecht
|oprecht
|recht door zee
|rechte klimming
|rechter
|rechthoek
|rechtlijnig
|rechtlopen
|rechtop
|rechts
|rechtschapen
|rechttegenover
|rechttrekken
|recht voor zijn raap
|rechtzetten
|recht zo die gaat
|regelrecht
}}
===== คำสืบทอด =====
* {{desc|brc|rekti}}
* {{desc|gmw-jdt|rääxt}}
* {{desc|dcr|recht|rek|ret|tret|regt}}
** {{desc|vic|tret|bor=1}} {{q|dated}}
* {{desc|pap|rècht|bor=1}}
* {{desc|srm|leti|bor=1}}
=== รากศัพท์ 2 ===
จาก{{inh|nl|dum|recht}}, จาก{{inh|nl|odt|reht}}, จาก{{inh|nl|gmw-pro|*rehta}}, จาก{{inh|nl|gem-pro|*rehtą}} ซึ่งเป็นการสร้างคำนามจากคำคุณศัพท์
==== คำนาม ====
{{nl-noun|n|-en|+}}
# [[สิทธิ]], [[อำนาจ]], อำนาจหน้าที่, [[เอกสิทธิ์]]
#: {{uxi|nl|Je hebt het '''recht''' niet om dat te doen!|คุณไม่มี'''สิทธิ'''ทำเช่นนั้น!}}
# [[ความ]][[ยุติธรรม]]
#: {{uxi|nl|Noemt u dit '''recht'''? Ik noem dit onrecht.|คุณเรียกสิ่งนี้ว่า'''ความยุติธรรม'''หรือ? ฉันเรียกสิ่งนี้ว่าความอยุติธรรม}}
# [[นิติศาสตร์]], [[กฎหมาย]]
#: {{uxi|nl|Het '''recht''' heeft beslist.|กฎหมายได้ตัดสินแล้ว}}
# [[ค่าธรรมเนียม]], [[อากร]], ค่าภาระที่ต้องชำระ
===== ลูกคำ =====
{{col|nl|title=ทั่วไป
|berechten
|rechtbank <g:f>
|rechtelijk
|rechtenstudent <g:m>
|rechtenstudie <g:f>
|rechter <g:m>
|rechtigen
|rechtmatig
|rechtsgeding <g:f>
|rechtsgeleerde <g:m,f>
|rechtsgeleerdheid <g:f>
|rechtsgeschiedkunde <g:f>
|rechtsgeschiedkundige <g:m>
|rechtsmacht <g:f>
|rechtsorde <g:f>
|rechtspersoon <g:m>
|rechtspsychologie <g:f>
|rechtstheorie <g:f>
|rechtspleging <g:f>
|rechtspraak <g:f>
|rechtsprocedure <g:f>
|rechtspsychologie <g:f>
|rechtsstaat <g:m>
|rechtssysteem <g:n>
|rechtswetenschap <g:f>
|rechtszaal <g:f,m>
|rechtszaak <g:f>
|rechtszekerheid <g:f>
|rechtvaardig
|terecht
|van rechtswege
|voorrecht <g:n>
|wederrechtelijk
}}
{{col|nl|title=สิทธิเฉพาะหรือประเภทของกฎหมาย
|aasdomsrecht <g:n>
|adviesrecht <g:n>
|alleenrecht <g:n>
|auteursrecht <g:n>
|beklemrecht <g:n>
|bestaansrecht
|burgerrecht <g:n>
|cijnsrecht <g:n>
|collatierecht <g:n>
|contractrecht
|dierenrechten <g:n-p>
|dijkrecht <g:n>
|eerstgeboorterecht <g:n>
|erfrecht <g:n>
|geboorterecht <g:n>
|gewoonterecht <g:n>
|grondrecht <g:n>
|gruitrecht <g:n>
|havenrecht <g:n>
|hoederecht <g:n>
|kiesrecht <g:n>
|leenrecht <g:n>
|mensenrecht <g:n>
|milieurecht <g:n>
|natuurrecht <g:n>
|ontslagrecht <g:n>
|oorlogsrecht <g:n>
|privaatrecht <g:n>
|publiekrecht <g:n>
|rolrecht <g:n>
|stadsrecht <g:n>
|stapelrecht <g:n>
|stemrecht <g:n>
|strafprocesrecht <g:n>
|spreekrecht <g:n>
|vetorecht <g:n>
|volkenrecht <g:n>
|zelfbeschikkingsrecht <g:n>
}}
===== คำที่เกี่ยวข้อง =====
{{col|nl
|gerecht
}}
===== คำสืบทอด =====
* {{desc|af|reg}}
* {{desc|dcr|recht|regt}}
* {{desc|jvn|rèh|bor=1}}
* {{desc|srm|leti|bor=1}}
=== รากศัพท์ 3 ===
{{nonlemma}}
==== คำกริยา ====
{{head|nl|รูปกริยา}}
# {{infl of|nl|rechten||bare-ten-verb}}
== ภาษาเยอรมัน ==
=== รากศัพท์ ===
{{dercat|de|gem-pro|ine-pro|inh=1}}
จาก{{inh|de|gmh|rëht}}, จาก{{inh|de|goh|rëht}}, จาก{{inh|de|gmw-pro|*reht||ขวา, ตรง}}
{{col-top|2|cog}}
ร่วมเชื้อสายกับ{{cog|yi|רעכט}}, {{cog|is|réttur}}, {{cog|nl|recht}}, {{cog|en|right}}, {{cog|da|ret}}
{{col-bottom}}
=== การออกเสียง ===
* {{IPA|de|/ʁɛçt/|[ʁɛçtʰ]|a=Germany}}
* {{IPA|de|/rɛçt/|[rɛçtʰ]|a=Austria, Switzerland}}
* {{rhymes|de|ɛçt|s=1}}
* {{audio|de|De-recht.ogg}}
* {{audio|de|De-recht2.ogg|a=<<Germany>> (<<Berlin>>)}}
=== คำคุณศัพท์ ===
{{de-adj|comp.sup:+est:+st[พบได้ยากมาก]}}
# [[ขวา]]
#: {{ant|de|link}}
#: {{coi|de|die '''rechte''' Hand|[[มือ]][[ขวา]]}}
#: {{ux|de|Auf der '''rechten''' Straßenseite liegt ein [[Supermarkt]].|[[ซูเปอร์มาร์เก็ต]]อยู่ด้าน'''ขวา'''ของถนน}}
# [[ถูกต้อง]], [[เหมาะสม]]
#: {{ant|de|falsch}}
#: {{coi|de|im '''rechten''' Augenblick|ในจังหวะที่เหมาะสม}}
#: {{coi|de|auf der ''' rechten''' Spur|อยู่บนเส้นทางที่ถูกต้อง}}
# [[จริง]], [[แท้จริง]]
# [[ยุติธรรม]], [[ชอบ]][[ด้วย]][[กฎหมาย]]
# {{lb|de|geometry}} [[ตั้ง]][[ฉาก]], [[เป็น]][[มุม]] 90 [[องศา]]
#: {{syn|de|rechtwinklig}}
#: {{coi|de|'''rechter''' Winkel|[[มุม]][[ฉาก]]}}
==== การผันรูป ====
{{de-adecl|comp.sup:+est:+st[พบได้ยากมาก]}}
==== ลูกคำ ====
* {{l|de|rechte Hand|g=f||มือข้างขวา; มือขวา, ผู้ช่วยคนสำคัญ}}
* {{l|de|rechter Winkel}}
=== คำกริยาวิเศษณ์ ===
{{de-adv}}
# [[ค่อน]][[ข้าง]], [[พอ]][[สมควร]]
#: {{uxi|de|Es ist '''recht''' warm heute Abend.|เย็นนี้'''ค่อนข้าง'''อบอุ่น}}
#: {{uxi|de|'''recht''' klein|'''ค่อนข้าง'''เล็ก}}
# อย่าง[[ถูกต้อง]]
#: {{uxi|de|ganz '''recht'''|ถูกต้องเลย}}
# อย่าง[[แม่นยำ]]
==== คำที่เกี่ยวข้อง ====
* {{l|de|Recht|g=n||สิทธิ; เอกสิทธิ์; สิทธิเรียกร้อง; กฎหมาย}}
* {{l|de|recht haben}}
=== อ่านเพิ่ม ===
* {{R:de:Duden}}
* {{R:de:DWDS}}
smhc3g2l3bhsfbpicb4wuenks6htis3
5729110
5729099
2026-07-20T02:17:05Z
Octahedron80
267
/* */ เก็บกวาด
5729110
wikitext
text/x-wiki
== ภาษาเช็ก ==
=== รากศัพท์ ===
{{ety|cs|:bor|de:recht|text=+|tree=1}}
=== การออกเสียง ===
* {{cs-IPA}}
=== คำกริยาวิเศษณ์ ===
{{cs-adv}}
# {{lb|cs|colloquial}} [[ถูกต้อง]], [[เหมาะสม]]
#: {{uxi|cs|Tobě taky nic není '''recht'''.|Nothing '''suits''' you. (You are hard to '''please'''.)}}
==== ลูกคำ ====
{{col|cs|mít recht|dát recht}}
=== อ่านเพิ่ม ===
* {{R:cs:PSJC}}
* {{R:cs:SSJC}}
== ภาษาดัตช์ ==
=== การออกเสียง ===
* {{IPA|nl|/rɛxt/}}
* {{audio|nl|Nl-recht.ogg}}
* {{hyphenation|nl|recht}}
* {{rhymes|nl|ɛxt|s=1}}
=== รากศัพท์ 1 ===
จาก{{inh|nl|dum|recht}}, จาก{{inh|nl|odt|reht}}, จาก{{inh|nl|gmw-pro|*reht}}, จาก{{inh|nl|gem-pro|*rehtaz}}, จาก{{inh|nl|ine-pro|*h₃reǵtós}}
==== คำคุณศัพท์ ====
{{nl-adj}}
# [[ตรง]]
#: {{ant|nl|krom}}
#: {{uxa|nl|in een '''rechte''' lijn|ในเส้นตรง}}
# {{obsolete form of|nl|[[rechts]], [[rechter]]|t=ขวา}}
===== การผันรูป =====
{{nl-decl-adj}}
===== ลูกคำ =====
{{col|nl
|kaarsrecht
|lijnrecht
|loodrecht
|oprecht
|recht door zee
|rechte klimming
|rechter
|rechthoek
|rechtlijnig
|rechtlopen
|rechtop
|rechts
|rechtschapen
|rechttegenover
|rechttrekken
|recht voor zijn raap
|rechtzetten
|recht zo die gaat
|regelrecht
}}
===== คำสืบทอด =====
* {{desc|brc|rekti}}
* {{desc|gmw-jdt|rääxt}}
* {{desc|dcr|recht|rek|ret|tret|regt}}
** {{desc|vic|tret|bor=1}} {{q|dated}}
* {{desc|pap|rècht|bor=1}}
* {{desc|srm|leti|bor=1}}
=== รากศัพท์ 2 ===
จาก{{inh|nl|dum|recht}}, จาก{{inh|nl|odt|reht}}, จาก{{inh|nl|gmw-pro|*rehta}}, จาก{{inh|nl|gem-pro|*rehtą}} ซึ่งเป็นการสร้างคำนามจากคำคุณศัพท์
==== คำนาม ====
{{nl-noun|n|-en|+}}
# [[สิทธิ]], [[อำนาจ]], อำนาจหน้าที่, [[เอกสิทธิ์]]
#: {{uxi|nl|Je hebt het '''recht''' niet om dat te doen!|คุณไม่มี'''สิทธิ'''ทำเช่นนั้น!}}
# [[ความ]][[ยุติธรรม]]
#: {{uxi|nl|Noemt u dit '''recht'''? Ik noem dit onrecht.|คุณเรียกสิ่งนี้ว่า'''ความยุติธรรม'''หรือ? ฉันเรียกสิ่งนี้ว่าความอยุติธรรม}}
# [[นิติศาสตร์]], [[กฎหมาย]]
#: {{uxi|nl|Het '''recht''' heeft beslist.|กฎหมายได้ตัดสินแล้ว}}
# [[ค่าธรรมเนียม]], [[อากร]], ค่าภาระที่ต้องชำระ
===== ลูกคำ =====
{{col|nl|title=ทั่วไป
|berechten
|rechtbank <g:f>
|rechtelijk
|rechtenstudent <g:m>
|rechtenstudie <g:f>
|rechter <g:m>
|rechtigen
|rechtmatig
|rechtsgeding <g:f>
|rechtsgeleerde <g:m,f>
|rechtsgeleerdheid <g:f>
|rechtsgeschiedkunde <g:f>
|rechtsgeschiedkundige <g:m>
|rechtsmacht <g:f>
|rechtsorde <g:f>
|rechtspersoon <g:m>
|rechtspsychologie <g:f>
|rechtstheorie <g:f>
|rechtspleging <g:f>
|rechtspraak <g:f>
|rechtsprocedure <g:f>
|rechtspsychologie <g:f>
|rechtsstaat <g:m>
|rechtssysteem <g:n>
|rechtswetenschap <g:f>
|rechtszaal <g:f,m>
|rechtszaak <g:f>
|rechtszekerheid <g:f>
|rechtvaardig
|terecht
|van rechtswege
|voorrecht <g:n>
|wederrechtelijk
}}
{{col|nl|title=สิทธิเฉพาะหรือประเภทของกฎหมาย
|aasdomsrecht <g:n>
|adviesrecht <g:n>
|alleenrecht <g:n>
|auteursrecht <g:n>
|beklemrecht <g:n>
|bestaansrecht
|burgerrecht <g:n>
|cijnsrecht <g:n>
|collatierecht <g:n>
|contractrecht
|dierenrechten <g:n-p>
|dijkrecht <g:n>
|eerstgeboorterecht <g:n>
|erfrecht <g:n>
|geboorterecht <g:n>
|gewoonterecht <g:n>
|grondrecht <g:n>
|gruitrecht <g:n>
|havenrecht <g:n>
|hoederecht <g:n>
|kiesrecht <g:n>
|leenrecht <g:n>
|mensenrecht <g:n>
|milieurecht <g:n>
|natuurrecht <g:n>
|ontslagrecht <g:n>
|oorlogsrecht <g:n>
|privaatrecht <g:n>
|publiekrecht <g:n>
|rolrecht <g:n>
|stadsrecht <g:n>
|stapelrecht <g:n>
|stemrecht <g:n>
|strafprocesrecht <g:n>
|spreekrecht <g:n>
|vetorecht <g:n>
|volkenrecht <g:n>
|zelfbeschikkingsrecht <g:n>
}}
===== คำที่เกี่ยวข้อง =====
{{col|nl
|gerecht
}}
===== คำสืบทอด =====
* {{desc|af|reg}}
* {{desc|dcr|recht|regt}}
* {{desc|jvn|rèh|bor=1}}
* {{desc|srm|leti|bor=1}}
=== รากศัพท์ 3 ===
{{nonlemma}}
==== คำกริยา ====
{{head|nl|รูปกริยา}}
# {{infl of|nl|rechten||bare-ten-verb}}
== ภาษาเยอรมัน ==
=== รากศัพท์ ===
{{dercat|de|gem-pro|ine-pro|inh=1}}
จาก{{inh|de|gmh|rëht}}, จาก{{inh|de|goh|rëht}}, จาก{{inh|de|gmw-pro|*reht||ขวา, ตรง}}
{{col-top|2|cog}}
ร่วมเชื้อสายกับ{{cog|yi|רעכט}}, {{cog|is|réttur}}, {{cog|nl|recht}}, {{cog|en|right}}, {{cog|da|ret}}
{{col-bottom}}
=== การออกเสียง ===
* {{IPA|de|/ʁɛçt/|[ʁɛçtʰ]|a=Germany}}
* {{IPA|de|/rɛçt/|[rɛçtʰ]|a=Austria, Switzerland}}
* {{rhymes|de|ɛçt|s=1}}
* {{audio|de|De-recht.ogg}}
* {{audio|de|De-recht2.ogg|a=<<Germany>> (<<Berlin>>)}}
=== คำคุณศัพท์ ===
{{de-adj|comp.sup:+est:+st[พบได้ยากมาก]}}
# [[ขวา]]
#: {{ant|de|link}}
#: {{coi|de|die '''rechte''' Hand|[[มือ]][[ขวา]]}}
#: {{ux|de|Auf der '''rechten''' Straßenseite liegt ein [[Supermarkt]].|[[ซูเปอร์มาร์เก็ต]]อยู่ด้าน'''ขวา'''ของถนน}}
# [[ถูกต้อง]], [[เหมาะสม]]
#: {{ant|de|falsch}}
#: {{coi|de|im '''rechten''' Augenblick|ในจังหวะที่เหมาะสม}}
#: {{coi|de|auf der ''' rechten''' Spur|อยู่บนเส้นทางที่ถูกต้อง}}
# [[จริง]], [[แท้จริง]]
# [[ยุติธรรม]], [[ชอบ]][[ด้วย]][[กฎหมาย]]
# {{lb|de|geometry}} [[ตั้ง]][[ฉาก]], [[เป็น]][[มุม]] 90 [[องศา]]
#: {{syn|de|rechtwinklig}}
#: {{coi|de|'''rechter''' Winkel|[[มุม]][[ฉาก]]}}
==== การผันรูป ====
{{de-adecl|comp.sup:+est:+st[พบได้ยากมาก]}}
==== ลูกคำ ====
* {{l|de|rechte Hand|g=f||มือข้างขวา; มือขวา, ผู้ช่วยคนสำคัญ}}
* {{l|de|rechter Winkel}}
=== คำกริยาวิเศษณ์ ===
{{de-adv}}
# [[ค่อน]][[ข้าง]], [[พอ]][[สมควร]]
#: {{uxi|de|Es ist '''recht''' warm heute Abend.|เย็นนี้'''ค่อนข้าง'''อบอุ่น}}
#: {{uxi|de|'''recht''' klein|'''ค่อนข้าง'''เล็ก}}
# อย่าง[[ถูกต้อง]]
#: {{uxi|de|ganz '''recht'''|ถูกต้องเลย}}
# อย่าง[[แม่นยำ]]
==== คำที่เกี่ยวข้อง ====
* {{l|de|Recht|g=n||สิทธิ; เอกสิทธิ์; สิทธิเรียกร้อง; กฎหมาย}}
* {{l|de|recht haben}}
=== อ่านเพิ่ม ===
* {{R:de:Duden}}
* {{R:de:DWDS}}
5bf1b7zql1jhiawx5uxmia5p1s1m1ki
5729113
5729110
2026-07-20T02:19:09Z
Octahedron80
267
5729113
wikitext
text/x-wiki
== ภาษาเช็ก ==
=== รากศัพท์ ===
{{ety|cs|:bor|de:recht|text=+|tree=1}}
=== การออกเสียง ===
* {{cs-IPA}}
=== คำกริยาวิเศษณ์ ===
{{cs-adv}}
# {{lb|cs|colloquial}} [[ถูกต้อง]], [[เหมาะสม]]
#: {{uxi|cs|Tobě taky nic není '''recht'''.|Nothing '''suits''' you. (You are hard to '''please'''.)}}
==== ลูกคำ ====
{{col|cs|mít recht|dát recht}}
=== อ่านเพิ่ม ===
* {{R:cs:PSJC}}
* {{R:cs:SSJC}}
== ภาษาดัตช์ ==
=== การออกเสียง ===
* {{IPA|nl|/rɛxt/}}
* {{audio|nl|Nl-recht.ogg}}
* {{hyphenation|nl|recht}}
* {{rhymes|nl|ɛxt|s=1}}
=== รากศัพท์ 1 ===
จาก{{inh|nl|dum|recht}}, จาก{{inh|nl|odt|reht}}, จาก{{inh|nl|gmw-pro|*reht}}, จาก{{inh|nl|gem-pro|*rehtaz}}, จาก{{inh|nl|ine-pro|*h₃reǵtós}}
==== คำคุณศัพท์ ====
{{nl-adj}}
# [[ตรง]]
#: {{ant|nl|krom}}
#: {{uxa|nl|in een '''rechte''' lijn|ในเส้นตรง}}
# {{obsolete form of|nl|[[rechts]], [[rechter]]|t=ขวา}}
===== การผันรูป =====
{{nl-decl-adj}}
===== ลูกคำ =====
{{col|nl
|kaarsrecht
|lijnrecht
|loodrecht
|oprecht
|recht door zee
|rechte klimming
|rechter
|rechthoek
|rechtlijnig
|rechtlopen
|rechtop
|rechts
|rechtschapen
|rechttegenover
|rechttrekken
|recht voor zijn raap
|rechtzetten
|recht zo die gaat
|regelrecht
}}
===== คำสืบทอด =====
* {{desc|brc|rekti}}
* {{desc|gmw-jdt|rääxt}}
* {{desc|dcr|recht|rek|ret|tret|regt}}
** {{desc|vic|tret|bor=1}} {{q|dated}}
* {{desc|pap|rècht|bor=1}}
* {{desc|srm|leti|bor=1}}
=== รากศัพท์ 2 ===
จาก{{inh|nl|dum|recht}}, จาก{{inh|nl|odt|reht}}, จาก{{inh|nl|gmw-pro|*rehta}}, จาก{{inh|nl|gem-pro|*rehtą}} ซึ่งเป็นการสร้างคำนามจากคำคุณศัพท์
==== คำนาม ====
{{nl-noun|n|-en|+}}
# [[สิทธิ]], [[อำนาจ]], อำนาจหน้าที่, [[เอกสิทธิ์]]
#: {{uxi|nl|Je hebt het '''recht''' niet om dat te doen!|คุณไม่มี'''สิทธิ'''ทำเช่นนั้น!}}
# [[ความ]][[ยุติธรรม]]
#: {{uxi|nl|Noemt u dit '''recht'''? Ik noem dit onrecht.|คุณเรียกสิ่งนี้ว่า'''ความยุติธรรม'''หรือ? ฉันเรียกสิ่งนี้ว่าความอยุติธรรม}}
# [[นิติศาสตร์]], [[กฎหมาย]]
#: {{uxi|nl|Het '''recht''' heeft beslist.|กฎหมายได้ตัดสินแล้ว}}
# [[ค่าธรรมเนียม]], [[อากร]], ค่าภาระที่ต้องชำระ
===== ลูกคำ =====
{{col|nl|title=ทั่วไป
|berechten
|rechtbank <g:f>
|rechtelijk
|rechtenstudent <g:m>
|rechtenstudie <g:f>
|rechter <g:m>
|rechtigen
|rechtmatig
|rechtsgeding <g:f>
|rechtsgeleerde <g:m,f>
|rechtsgeleerdheid <g:f>
|rechtsgeschiedkunde <g:f>
|rechtsgeschiedkundige <g:m>
|rechtsmacht <g:f>
|rechtsorde <g:f>
|rechtspersoon <g:m>
|rechtspsychologie <g:f>
|rechtstheorie <g:f>
|rechtspleging <g:f>
|rechtspraak <g:f>
|rechtsprocedure <g:f>
|rechtspsychologie <g:f>
|rechtsstaat <g:m>
|rechtssysteem <g:n>
|rechtswetenschap <g:f>
|rechtszaal <g:f,m>
|rechtszaak <g:f>
|rechtszekerheid <g:f>
|rechtvaardig
|terecht
|van rechtswege
|voorrecht <g:n>
|wederrechtelijk
}}
{{col|nl|title=สิทธิเฉพาะหรือประเภทของกฎหมาย
|aasdomsrecht <g:n>
|adviesrecht <g:n>
|alleenrecht <g:n>
|auteursrecht <g:n>
|beklemrecht <g:n>
|bestaansrecht
|burgerrecht <g:n>
|cijnsrecht <g:n>
|collatierecht <g:n>
|contractrecht
|dierenrechten <g:n-p>
|dijkrecht <g:n>
|eerstgeboorterecht <g:n>
|erfrecht <g:n>
|geboorterecht <g:n>
|gewoonterecht <g:n>
|grondrecht <g:n>
|gruitrecht <g:n>
|havenrecht <g:n>
|hoederecht <g:n>
|kiesrecht <g:n>
|leenrecht <g:n>
|mensenrecht <g:n>
|milieurecht <g:n>
|natuurrecht <g:n>
|ontslagrecht <g:n>
|oorlogsrecht <g:n>
|privaatrecht <g:n>
|publiekrecht <g:n>
|rolrecht <g:n>
|stadsrecht <g:n>
|stapelrecht <g:n>
|stemrecht <g:n>
|strafprocesrecht <g:n>
|spreekrecht <g:n>
|vetorecht <g:n>
|volkenrecht <g:n>
|zelfbeschikkingsrecht <g:n>
}}
===== คำที่เกี่ยวข้อง =====
{{col|nl
|gerecht
}}
===== คำสืบทอด =====
* {{desc|af|reg}}
* {{desc|dcr|recht|regt}}
* {{desc|jvn|rèh|bor=1}}
* {{desc|srm|leti|bor=1}}
=== รากศัพท์ 3 ===
{{nonlemma}}
==== คำกริยา ====
{{head|nl|รูปกริยา}}
# {{infl of|nl|rechten||bare-ten-verb}}
== ภาษาเยอรมัน ==
=== รากศัพท์ ===
{{dercat|de|gem-pro|ine-pro|inh=1}}
จาก{{inh|de|gmh|rëht}}, จาก{{inh|de|goh|rëht}}, จาก{{inh|de|gmw-pro|*reht||ขวา, ตรง}}
{{col-top|2|cog}}
ร่วมเชื้อสายกับ{{cog|yi|רעכט}}, {{cog|is|réttur}}, {{cog|nl|recht}}, {{cog|en|right}}, {{cog|da|ret}}
{{col-bottom}}
=== การออกเสียง ===
* {{IPA|de|/ʁɛçt/|[ʁɛçtʰ]|a=Germany}}
* {{IPA|de|/rɛçt/|[rɛçtʰ]|a=Austria, Switzerland}}
* {{rhymes|de|ɛçt|s=1}}
* {{audio|de|De-recht.ogg}}
* {{audio|de|De-recht2.ogg|a=<<Germany>> (<<Berlin>>)}}
=== คำคุณศัพท์ ===
{{de-adj|comp.sup:+est:+st[พบได้ยากมาก]}}
# [[ขวา]]
#: {{ant|de|link}}
#: {{coi|de|die '''rechte''' Hand|[[มือ]][[ขวา]]}}
#: {{ux|de|Auf der '''rechten''' Straßenseite liegt ein [[Supermarkt]].|[[ซูเปอร์มาร์เก็ต]]อยู่ด้าน'''ขวา'''ของถนน}}
# [[ถูกต้อง]], [[เหมาะสม]]
#: {{ant|de|falsch}}
#: {{coi|de|im '''rechten''' Augenblick|ในจังหวะที่เหมาะสม}}
#: {{coi|de|auf der ''' rechten''' Spur|อยู่บนเส้นทางที่ถูกต้อง}}
# [[จริง]], [[แท้จริง]]
# [[ยุติธรรม]], [[ชอบ]][[ด้วย]][[กฎหมาย]]
# {{lb|de|geometry}} [[ตั้ง]][[ฉาก]], [[เป็น]][[มุม]] 90 [[องศา]]
#: {{syn|de|rechtwinklig}}
#: {{coi|de|'''rechter''' Winkel|[[มุม]][[ฉาก]]}}
==== การผันรูป ====
{{de-adecl|comp.sup:+est:+st[พบได้ยากมาก]}}
==== ลูกคำ ====
* {{l|de|rechte Hand|g=f||มือข้างขวา; มือขวา, ผู้ช่วยคนสำคัญ}}
* {{l|de|rechter Winkel}}
=== คำกริยาวิเศษณ์ ===
{{de-adv}}
# [[ค่อน]][[ข้าง]], [[พอ]][[สมควร]]
#: {{uxi|de|Es ist '''recht''' warm heute Abend.|เย็นนี้'''ค่อนข้าง'''อบอุ่น}}
#: {{uxi|de|'''recht''' klein|'''ค่อนข้าง'''เล็ก}}
# อย่าง[[ถูกต้อง]]
#: {{uxi|de|ganz '''recht'''|ถูกต้องเลย}}
# อย่าง[[แม่นยำ]]
==== คำที่เกี่ยวข้อง ====
* {{l|de|Recht|g=n||สิทธิ; เอกสิทธิ์; สิทธิเรียกร้อง; กฎหมาย}}
* {{l|de|recht haben}}
=== อ่านเพิ่ม ===
* {{R:de:Duden}}
* {{R:de:DWDS}}
== ภาษาฮุนสริก ==
=== รากศัพท์ ===
จาก{{inh|hrx|gmh|rëht}}, จาก{{inh|hrx|goh|reht}}; เทียบ{{cog|de|recht}}, {{cog|nl|recht}}
=== การออกเสียง ===
{{hrx-pr|hmp=Recht}}
=== คำคุณศัพท์ ===
{{head|hrx|คำคุณศัพท์|comparative|rechter|superlative|rechtest}}
# [[ขวา]]
=== อ่านเพิ่ม ===
* {{R:hrx:Boll}}
== ภาษาเยอรมันต่ำ ==
=== คำนาม ===
{{nds-noun|n|rechten}}
# {{lb|nds|DLS}} {{alternative form of|nds|Recht}}
== ภาษาเยอรมันแบบเพนซิลเวเนีย ==
=== รากศัพท์ ===
จาก{{inh|pdc|gmh|rëht}}, จาก{{inh|pdc|goh|reht}}; เทียบ{{cog|de|recht}}, {{cog|nl|recht}}
=== คำคุณศัพท์ ===
{{head|pdc|คำคุณศัพท์}}
# [[ขวา]]
9625epbn2dzkahqow57uf1j756e8nfn
5729114
5729113
2026-07-20T02:19:28Z
Octahedron80
267
/* คำคุณศัพท์ */
5729114
wikitext
text/x-wiki
== ภาษาเช็ก ==
=== รากศัพท์ ===
{{ety|cs|:bor|de:recht|text=+|tree=1}}
=== การออกเสียง ===
* {{cs-IPA}}
=== คำกริยาวิเศษณ์ ===
{{cs-adv}}
# {{lb|cs|colloquial}} [[ถูกต้อง]], [[เหมาะสม]]
#: {{uxi|cs|Tobě taky nic není '''recht'''.|Nothing '''suits''' you. (You are hard to '''please'''.)}}
==== ลูกคำ ====
{{col|cs|mít recht|dát recht}}
=== อ่านเพิ่ม ===
* {{R:cs:PSJC}}
* {{R:cs:SSJC}}
== ภาษาดัตช์ ==
=== การออกเสียง ===
* {{IPA|nl|/rɛxt/}}
* {{audio|nl|Nl-recht.ogg}}
* {{hyphenation|nl|recht}}
* {{rhymes|nl|ɛxt|s=1}}
=== รากศัพท์ 1 ===
จาก{{inh|nl|dum|recht}}, จาก{{inh|nl|odt|reht}}, จาก{{inh|nl|gmw-pro|*reht}}, จาก{{inh|nl|gem-pro|*rehtaz}}, จาก{{inh|nl|ine-pro|*h₃reǵtós}}
==== คำคุณศัพท์ ====
{{nl-adj}}
# [[ตรง]]
#: {{ant|nl|krom}}
#: {{uxa|nl|in een '''rechte''' lijn|ในเส้นตรง}}
# {{obsolete form of|nl|[[rechts]], [[rechter]]|t=ขวา}}
===== การผันรูป =====
{{nl-decl-adj}}
===== ลูกคำ =====
{{col|nl
|kaarsrecht
|lijnrecht
|loodrecht
|oprecht
|recht door zee
|rechte klimming
|rechter
|rechthoek
|rechtlijnig
|rechtlopen
|rechtop
|rechts
|rechtschapen
|rechttegenover
|rechttrekken
|recht voor zijn raap
|rechtzetten
|recht zo die gaat
|regelrecht
}}
===== คำสืบทอด =====
* {{desc|brc|rekti}}
* {{desc|gmw-jdt|rääxt}}
* {{desc|dcr|recht|rek|ret|tret|regt}}
** {{desc|vic|tret|bor=1}} {{q|dated}}
* {{desc|pap|rècht|bor=1}}
* {{desc|srm|leti|bor=1}}
=== รากศัพท์ 2 ===
จาก{{inh|nl|dum|recht}}, จาก{{inh|nl|odt|reht}}, จาก{{inh|nl|gmw-pro|*rehta}}, จาก{{inh|nl|gem-pro|*rehtą}} ซึ่งเป็นการสร้างคำนามจากคำคุณศัพท์
==== คำนาม ====
{{nl-noun|n|-en|+}}
# [[สิทธิ]], [[อำนาจ]], อำนาจหน้าที่, [[เอกสิทธิ์]]
#: {{uxi|nl|Je hebt het '''recht''' niet om dat te doen!|คุณไม่มี'''สิทธิ'''ทำเช่นนั้น!}}
# [[ความ]][[ยุติธรรม]]
#: {{uxi|nl|Noemt u dit '''recht'''? Ik noem dit onrecht.|คุณเรียกสิ่งนี้ว่า'''ความยุติธรรม'''หรือ? ฉันเรียกสิ่งนี้ว่าความอยุติธรรม}}
# [[นิติศาสตร์]], [[กฎหมาย]]
#: {{uxi|nl|Het '''recht''' heeft beslist.|กฎหมายได้ตัดสินแล้ว}}
# [[ค่าธรรมเนียม]], [[อากร]], ค่าภาระที่ต้องชำระ
===== ลูกคำ =====
{{col|nl|title=ทั่วไป
|berechten
|rechtbank <g:f>
|rechtelijk
|rechtenstudent <g:m>
|rechtenstudie <g:f>
|rechter <g:m>
|rechtigen
|rechtmatig
|rechtsgeding <g:f>
|rechtsgeleerde <g:m,f>
|rechtsgeleerdheid <g:f>
|rechtsgeschiedkunde <g:f>
|rechtsgeschiedkundige <g:m>
|rechtsmacht <g:f>
|rechtsorde <g:f>
|rechtspersoon <g:m>
|rechtspsychologie <g:f>
|rechtstheorie <g:f>
|rechtspleging <g:f>
|rechtspraak <g:f>
|rechtsprocedure <g:f>
|rechtspsychologie <g:f>
|rechtsstaat <g:m>
|rechtssysteem <g:n>
|rechtswetenschap <g:f>
|rechtszaal <g:f,m>
|rechtszaak <g:f>
|rechtszekerheid <g:f>
|rechtvaardig
|terecht
|van rechtswege
|voorrecht <g:n>
|wederrechtelijk
}}
{{col|nl|title=สิทธิเฉพาะหรือประเภทของกฎหมาย
|aasdomsrecht <g:n>
|adviesrecht <g:n>
|alleenrecht <g:n>
|auteursrecht <g:n>
|beklemrecht <g:n>
|bestaansrecht
|burgerrecht <g:n>
|cijnsrecht <g:n>
|collatierecht <g:n>
|contractrecht
|dierenrechten <g:n-p>
|dijkrecht <g:n>
|eerstgeboorterecht <g:n>
|erfrecht <g:n>
|geboorterecht <g:n>
|gewoonterecht <g:n>
|grondrecht <g:n>
|gruitrecht <g:n>
|havenrecht <g:n>
|hoederecht <g:n>
|kiesrecht <g:n>
|leenrecht <g:n>
|mensenrecht <g:n>
|milieurecht <g:n>
|natuurrecht <g:n>
|ontslagrecht <g:n>
|oorlogsrecht <g:n>
|privaatrecht <g:n>
|publiekrecht <g:n>
|rolrecht <g:n>
|stadsrecht <g:n>
|stapelrecht <g:n>
|stemrecht <g:n>
|strafprocesrecht <g:n>
|spreekrecht <g:n>
|vetorecht <g:n>
|volkenrecht <g:n>
|zelfbeschikkingsrecht <g:n>
}}
===== คำที่เกี่ยวข้อง =====
{{col|nl
|gerecht
}}
===== คำสืบทอด =====
* {{desc|af|reg}}
* {{desc|dcr|recht|regt}}
* {{desc|jvn|rèh|bor=1}}
* {{desc|srm|leti|bor=1}}
=== รากศัพท์ 3 ===
{{nonlemma}}
==== คำกริยา ====
{{head|nl|รูปกริยา}}
# {{infl of|nl|rechten||bare-ten-verb}}
== ภาษาเยอรมัน ==
=== รากศัพท์ ===
{{dercat|de|gem-pro|ine-pro|inh=1}}
จาก{{inh|de|gmh|rëht}}, จาก{{inh|de|goh|rëht}}, จาก{{inh|de|gmw-pro|*reht||ขวา, ตรง}}
{{col-top|2|cog}}
ร่วมเชื้อสายกับ{{cog|yi|רעכט}}, {{cog|is|réttur}}, {{cog|nl|recht}}, {{cog|en|right}}, {{cog|da|ret}}
{{col-bottom}}
=== การออกเสียง ===
* {{IPA|de|/ʁɛçt/|[ʁɛçtʰ]|a=Germany}}
* {{IPA|de|/rɛçt/|[rɛçtʰ]|a=Austria, Switzerland}}
* {{rhymes|de|ɛçt|s=1}}
* {{audio|de|De-recht.ogg}}
* {{audio|de|De-recht2.ogg|a=<<Germany>> (<<Berlin>>)}}
=== คำคุณศัพท์ ===
{{de-adj|comp.sup:+est:+st[พบได้ยากมาก]}}
# [[ขวา]]
#: {{ant|de|link}}
#: {{coi|de|die '''rechte''' Hand|[[มือ]][[ขวา]]}}
#: {{ux|de|Auf der '''rechten''' Straßenseite liegt ein [[Supermarkt]].|[[ซูเปอร์มาร์เก็ต]]อยู่ด้าน'''ขวา'''ของถนน}}
# [[ถูกต้อง]], [[เหมาะสม]]
#: {{ant|de|falsch}}
#: {{coi|de|im '''rechten''' Augenblick|ในจังหวะที่เหมาะสม}}
#: {{coi|de|auf der ''' rechten''' Spur|อยู่บนเส้นทางที่ถูกต้อง}}
# [[จริง]], [[แท้จริง]]
# [[ยุติธรรม]], [[ชอบ]][[ด้วย]][[กฎหมาย]]
# {{lb|de|geometry}} [[ตั้ง]][[ฉาก]], [[เป็น]][[มุม]] 90 [[องศา]]
#: {{syn|de|rechtwinklig}}
#: {{coi|de|'''rechter''' Winkel|[[มุม]][[ฉาก]]}}
==== การผันรูป ====
{{de-adecl|comp.sup:+est:+st[พบได้ยากมาก]}}
==== ลูกคำ ====
* {{l|de|rechte Hand|g=f||มือข้างขวา; มือขวา, ผู้ช่วยคนสำคัญ}}
* {{l|de|rechter Winkel}}
=== คำกริยาวิเศษณ์ ===
{{de-adv}}
# [[ค่อน]][[ข้าง]], [[พอ]][[สมควร]]
#: {{uxi|de|Es ist '''recht''' warm heute Abend.|เย็นนี้'''ค่อนข้าง'''อบอุ่น}}
#: {{uxi|de|'''recht''' klein|'''ค่อนข้าง'''เล็ก}}
# อย่าง[[ถูกต้อง]]
#: {{uxi|de|ganz '''recht'''|ถูกต้องเลย}}
# อย่าง[[แม่นยำ]]
==== คำที่เกี่ยวข้อง ====
* {{l|de|Recht|g=n||สิทธิ; เอกสิทธิ์; สิทธิเรียกร้อง; กฎหมาย}}
* {{l|de|recht haben}}
=== อ่านเพิ่ม ===
* {{R:de:Duden}}
* {{R:de:DWDS}}
== ภาษาฮุนสริก ==
=== รากศัพท์ ===
จาก{{inh|hrx|gmh|rëht}}, จาก{{inh|hrx|goh|reht}}; เทียบ{{cog|de|recht}}, {{cog|nl|recht}}
=== การออกเสียง ===
{{hrx-pr|hmp=Recht}}
=== คำคุณศัพท์ ===
{{head|hrx|คำคุณศัพท์|ขั้นกว่า|rechter|ขั้นสุด|rechtest}}
# [[ขวา]]
=== อ่านเพิ่ม ===
* {{R:hrx:Boll}}
== ภาษาเยอรมันต่ำ ==
=== คำนาม ===
{{nds-noun|n|rechten}}
# {{lb|nds|DLS}} {{alternative form of|nds|Recht}}
== ภาษาเยอรมันแบบเพนซิลเวเนีย ==
=== รากศัพท์ ===
จาก{{inh|pdc|gmh|rëht}}, จาก{{inh|pdc|goh|reht}}; เทียบ{{cog|de|recht}}, {{cog|nl|recht}}
=== คำคุณศัพท์ ===
{{head|pdc|คำคุณศัพท์}}
# [[ขวา]]
3xhnpcw2i3842arxpbu3aqaw7dgucc5
5729115
5729114
2026-07-20T02:20:08Z
Octahedron80
267
เรียงลำดับหัวเรื่องภาษา
5729115
wikitext
text/x-wiki
== ภาษาเช็ก ==
=== รากศัพท์ ===
{{ety|cs|:bor|de:recht|text=+|tree=1}}
=== การออกเสียง ===
* {{cs-IPA}}
=== คำกริยาวิเศษณ์ ===
{{cs-adv}}
# {{lb|cs|colloquial}} [[ถูกต้อง]], [[เหมาะสม]]
#: {{uxi|cs|Tobě taky nic není '''recht'''.|Nothing '''suits''' you. (You are hard to '''please'''.)}}
==== ลูกคำ ====
{{col|cs|mít recht|dát recht}}
=== อ่านเพิ่ม ===
* {{R:cs:PSJC}}
* {{R:cs:SSJC}}
== ภาษาดัตช์ ==
=== การออกเสียง ===
* {{IPA|nl|/rɛxt/}}
* {{audio|nl|Nl-recht.ogg}}
* {{hyphenation|nl|recht}}
* {{rhymes|nl|ɛxt|s=1}}
=== รากศัพท์ 1 ===
จาก{{inh|nl|dum|recht}}, จาก{{inh|nl|odt|reht}}, จาก{{inh|nl|gmw-pro|*reht}}, จาก{{inh|nl|gem-pro|*rehtaz}}, จาก{{inh|nl|ine-pro|*h₃reǵtós}}
==== คำคุณศัพท์ ====
{{nl-adj}}
# [[ตรง]]
#: {{ant|nl|krom}}
#: {{uxa|nl|in een '''rechte''' lijn|ในเส้นตรง}}
# {{obsolete form of|nl|[[rechts]], [[rechter]]|t=ขวา}}
===== การผันรูป =====
{{nl-decl-adj}}
===== ลูกคำ =====
{{col|nl
|kaarsrecht
|lijnrecht
|loodrecht
|oprecht
|recht door zee
|rechte klimming
|rechter
|rechthoek
|rechtlijnig
|rechtlopen
|rechtop
|rechts
|rechtschapen
|rechttegenover
|rechttrekken
|recht voor zijn raap
|rechtzetten
|recht zo die gaat
|regelrecht
}}
===== คำสืบทอด =====
* {{desc|brc|rekti}}
* {{desc|gmw-jdt|rääxt}}
* {{desc|dcr|recht|rek|ret|tret|regt}}
** {{desc|vic|tret|bor=1}} {{q|dated}}
* {{desc|pap|rècht|bor=1}}
* {{desc|srm|leti|bor=1}}
=== รากศัพท์ 2 ===
จาก{{inh|nl|dum|recht}}, จาก{{inh|nl|odt|reht}}, จาก{{inh|nl|gmw-pro|*rehta}}, จาก{{inh|nl|gem-pro|*rehtą}} ซึ่งเป็นการสร้างคำนามจากคำคุณศัพท์
==== คำนาม ====
{{nl-noun|n|-en|+}}
# [[สิทธิ]], [[อำนาจ]], อำนาจหน้าที่, [[เอกสิทธิ์]]
#: {{uxi|nl|Je hebt het '''recht''' niet om dat te doen!|คุณไม่มี'''สิทธิ'''ทำเช่นนั้น!}}
# [[ความ]][[ยุติธรรม]]
#: {{uxi|nl|Noemt u dit '''recht'''? Ik noem dit onrecht.|คุณเรียกสิ่งนี้ว่า'''ความยุติธรรม'''หรือ? ฉันเรียกสิ่งนี้ว่าความอยุติธรรม}}
# [[นิติศาสตร์]], [[กฎหมาย]]
#: {{uxi|nl|Het '''recht''' heeft beslist.|กฎหมายได้ตัดสินแล้ว}}
# [[ค่าธรรมเนียม]], [[อากร]], ค่าภาระที่ต้องชำระ
===== ลูกคำ =====
{{col|nl|title=ทั่วไป
|berechten
|rechtbank <g:f>
|rechtelijk
|rechtenstudent <g:m>
|rechtenstudie <g:f>
|rechter <g:m>
|rechtigen
|rechtmatig
|rechtsgeding <g:f>
|rechtsgeleerde <g:m,f>
|rechtsgeleerdheid <g:f>
|rechtsgeschiedkunde <g:f>
|rechtsgeschiedkundige <g:m>
|rechtsmacht <g:f>
|rechtsorde <g:f>
|rechtspersoon <g:m>
|rechtspsychologie <g:f>
|rechtstheorie <g:f>
|rechtspleging <g:f>
|rechtspraak <g:f>
|rechtsprocedure <g:f>
|rechtspsychologie <g:f>
|rechtsstaat <g:m>
|rechtssysteem <g:n>
|rechtswetenschap <g:f>
|rechtszaal <g:f,m>
|rechtszaak <g:f>
|rechtszekerheid <g:f>
|rechtvaardig
|terecht
|van rechtswege
|voorrecht <g:n>
|wederrechtelijk
}}
{{col|nl|title=สิทธิเฉพาะหรือประเภทของกฎหมาย
|aasdomsrecht <g:n>
|adviesrecht <g:n>
|alleenrecht <g:n>
|auteursrecht <g:n>
|beklemrecht <g:n>
|bestaansrecht
|burgerrecht <g:n>
|cijnsrecht <g:n>
|collatierecht <g:n>
|contractrecht
|dierenrechten <g:n-p>
|dijkrecht <g:n>
|eerstgeboorterecht <g:n>
|erfrecht <g:n>
|geboorterecht <g:n>
|gewoonterecht <g:n>
|grondrecht <g:n>
|gruitrecht <g:n>
|havenrecht <g:n>
|hoederecht <g:n>
|kiesrecht <g:n>
|leenrecht <g:n>
|mensenrecht <g:n>
|milieurecht <g:n>
|natuurrecht <g:n>
|ontslagrecht <g:n>
|oorlogsrecht <g:n>
|privaatrecht <g:n>
|publiekrecht <g:n>
|rolrecht <g:n>
|stadsrecht <g:n>
|stapelrecht <g:n>
|stemrecht <g:n>
|strafprocesrecht <g:n>
|spreekrecht <g:n>
|vetorecht <g:n>
|volkenrecht <g:n>
|zelfbeschikkingsrecht <g:n>
}}
===== คำที่เกี่ยวข้อง =====
{{col|nl
|gerecht
}}
===== คำสืบทอด =====
* {{desc|af|reg}}
* {{desc|dcr|recht|regt}}
* {{desc|jvn|rèh|bor=1}}
* {{desc|srm|leti|bor=1}}
=== รากศัพท์ 3 ===
{{nonlemma}}
==== คำกริยา ====
{{head|nl|รูปกริยา}}
# {{infl of|nl|rechten||bare-ten-verb}}
== ภาษาเยอรมัน ==
=== รากศัพท์ ===
{{dercat|de|gem-pro|ine-pro|inh=1}}
จาก{{inh|de|gmh|rëht}}, จาก{{inh|de|goh|rëht}}, จาก{{inh|de|gmw-pro|*reht||ขวา, ตรง}}
{{col-top|2|cog}}
ร่วมเชื้อสายกับ{{cog|yi|רעכט}}, {{cog|is|réttur}}, {{cog|nl|recht}}, {{cog|en|right}}, {{cog|da|ret}}
{{col-bottom}}
=== การออกเสียง ===
* {{IPA|de|/ʁɛçt/|[ʁɛçtʰ]|a=Germany}}
* {{IPA|de|/rɛçt/|[rɛçtʰ]|a=Austria, Switzerland}}
* {{rhymes|de|ɛçt|s=1}}
* {{audio|de|De-recht.ogg}}
* {{audio|de|De-recht2.ogg|a=<<Germany>> (<<Berlin>>)}}
=== คำคุณศัพท์ ===
{{de-adj|comp.sup:+est:+st[พบได้ยากมาก]}}
# [[ขวา]]
#: {{ant|de|link}}
#: {{coi|de|die '''rechte''' Hand|[[มือ]][[ขวา]]}}
#: {{ux|de|Auf der '''rechten''' Straßenseite liegt ein [[Supermarkt]].|[[ซูเปอร์มาร์เก็ต]]อยู่ด้าน'''ขวา'''ของถนน}}
# [[ถูกต้อง]], [[เหมาะสม]]
#: {{ant|de|falsch}}
#: {{coi|de|im '''rechten''' Augenblick|ในจังหวะที่เหมาะสม}}
#: {{coi|de|auf der ''' rechten''' Spur|อยู่บนเส้นทางที่ถูกต้อง}}
# [[จริง]], [[แท้จริง]]
# [[ยุติธรรม]], [[ชอบ]][[ด้วย]][[กฎหมาย]]
# {{lb|de|geometry}} [[ตั้ง]][[ฉาก]], [[เป็น]][[มุม]] 90 [[องศา]]
#: {{syn|de|rechtwinklig}}
#: {{coi|de|'''rechter''' Winkel|[[มุม]][[ฉาก]]}}
==== การผันรูป ====
{{de-adecl|comp.sup:+est:+st[พบได้ยากมาก]}}
==== ลูกคำ ====
* {{l|de|rechte Hand|g=f||มือข้างขวา; มือขวา, ผู้ช่วยคนสำคัญ}}
* {{l|de|rechter Winkel}}
=== คำกริยาวิเศษณ์ ===
{{de-adv}}
# [[ค่อน]][[ข้าง]], [[พอ]][[สมควร]]
#: {{uxi|de|Es ist '''recht''' warm heute Abend.|เย็นนี้'''ค่อนข้าง'''อบอุ่น}}
#: {{uxi|de|'''recht''' klein|'''ค่อนข้าง'''เล็ก}}
# อย่าง[[ถูกต้อง]]
#: {{uxi|de|ganz '''recht'''|ถูกต้องเลย}}
# อย่าง[[แม่นยำ]]
==== คำที่เกี่ยวข้อง ====
* {{l|de|Recht|g=n||สิทธิ; เอกสิทธิ์; สิทธิเรียกร้อง; กฎหมาย}}
* {{l|de|recht haben}}
=== อ่านเพิ่ม ===
* {{R:de:Duden}}
* {{R:de:DWDS}}
== ภาษาเยอรมันต่ำ ==
=== คำนาม ===
{{nds-noun|n|rechten}}
# {{lb|nds|DLS}} {{alternative form of|nds|Recht}}
== ภาษาเยอรมันแบบเพนซิลเวเนีย ==
=== รากศัพท์ ===
จาก{{inh|pdc|gmh|rëht}}, จาก{{inh|pdc|goh|reht}}; เทียบ{{cog|de|recht}}, {{cog|nl|recht}}
=== คำคุณศัพท์ ===
{{head|pdc|คำคุณศัพท์}}
# [[ขวา]]
== ภาษาฮุนสริก ==
=== รากศัพท์ ===
จาก{{inh|hrx|gmh|rëht}}, จาก{{inh|hrx|goh|reht}}; เทียบ{{cog|de|recht}}, {{cog|nl|recht}}
=== การออกเสียง ===
{{hrx-pr|hmp=Recht}}
=== คำคุณศัพท์ ===
{{head|hrx|คำคุณศัพท์|ขั้นกว่า|rechter|ขั้นสุด|rechtest}}
# [[ขวา]]
=== อ่านเพิ่ม ===
* {{R:hrx:Boll}}
0nkwyy31zj3stg7dhz4o0x6zf1lqboq
5729123
5729115
2026-07-20T02:25:30Z
Octahedron80
267
/* คำสืบทอด */
5729123
wikitext
text/x-wiki
== ภาษาเช็ก ==
=== รากศัพท์ ===
{{ety|cs|:bor|de:recht|text=+|tree=1}}
=== การออกเสียง ===
* {{cs-IPA}}
=== คำกริยาวิเศษณ์ ===
{{cs-adv}}
# {{lb|cs|colloquial}} [[ถูกต้อง]], [[เหมาะสม]]
#: {{uxi|cs|Tobě taky nic není '''recht'''.|Nothing '''suits''' you. (You are hard to '''please'''.)}}
==== ลูกคำ ====
{{col|cs|mít recht|dát recht}}
=== อ่านเพิ่ม ===
* {{R:cs:PSJC}}
* {{R:cs:SSJC}}
== ภาษาดัตช์ ==
=== การออกเสียง ===
* {{IPA|nl|/rɛxt/}}
* {{audio|nl|Nl-recht.ogg}}
* {{hyphenation|nl|recht}}
* {{rhymes|nl|ɛxt|s=1}}
=== รากศัพท์ 1 ===
จาก{{inh|nl|dum|recht}}, จาก{{inh|nl|odt|reht}}, จาก{{inh|nl|gmw-pro|*reht}}, จาก{{inh|nl|gem-pro|*rehtaz}}, จาก{{inh|nl|ine-pro|*h₃reǵtós}}
==== คำคุณศัพท์ ====
{{nl-adj}}
# [[ตรง]]
#: {{ant|nl|krom}}
#: {{uxa|nl|in een '''rechte''' lijn|ในเส้นตรง}}
# {{obsolete form of|nl|[[rechts]], [[rechter]]|t=ขวา}}
===== การผันรูป =====
{{nl-decl-adj}}
===== ลูกคำ =====
{{col|nl
|kaarsrecht
|lijnrecht
|loodrecht
|oprecht
|recht door zee
|rechte klimming
|rechter
|rechthoek
|rechtlijnig
|rechtlopen
|rechtop
|rechts
|rechtschapen
|rechttegenover
|rechttrekken
|recht voor zijn raap
|rechtzetten
|recht zo die gaat
|regelrecht
}}
===== คำสืบทอด =====
* {{desc|brc|rekti}}
* {{desc|gmw-jdt|rääxt}}
* {{desc|dcr|recht|rek|ret|tret|regt}}
** {{desc|vic|tret|bor=1}} {{q|ล้าสม้ย}}
* {{desc|pap|rècht|bor=1}}
* {{desc|srm|leti|bor=1}}
=== รากศัพท์ 2 ===
จาก{{inh|nl|dum|recht}}, จาก{{inh|nl|odt|reht}}, จาก{{inh|nl|gmw-pro|*rehta}}, จาก{{inh|nl|gem-pro|*rehtą}} ซึ่งเป็นการสร้างคำนามจากคำคุณศัพท์
==== คำนาม ====
{{nl-noun|n|-en|+}}
# [[สิทธิ]], [[อำนาจ]], อำนาจหน้าที่, [[เอกสิทธิ์]]
#: {{uxi|nl|Je hebt het '''recht''' niet om dat te doen!|คุณไม่มี'''สิทธิ'''ทำเช่นนั้น!}}
# [[ความ]][[ยุติธรรม]]
#: {{uxi|nl|Noemt u dit '''recht'''? Ik noem dit onrecht.|คุณเรียกสิ่งนี้ว่า'''ความยุติธรรม'''หรือ? ฉันเรียกสิ่งนี้ว่าความอยุติธรรม}}
# [[นิติศาสตร์]], [[กฎหมาย]]
#: {{uxi|nl|Het '''recht''' heeft beslist.|กฎหมายได้ตัดสินแล้ว}}
# [[ค่าธรรมเนียม]], [[อากร]], ค่าภาระที่ต้องชำระ
===== ลูกคำ =====
{{col|nl|title=ทั่วไป
|berechten
|rechtbank <g:f>
|rechtelijk
|rechtenstudent <g:m>
|rechtenstudie <g:f>
|rechter <g:m>
|rechtigen
|rechtmatig
|rechtsgeding <g:f>
|rechtsgeleerde <g:m,f>
|rechtsgeleerdheid <g:f>
|rechtsgeschiedkunde <g:f>
|rechtsgeschiedkundige <g:m>
|rechtsmacht <g:f>
|rechtsorde <g:f>
|rechtspersoon <g:m>
|rechtspsychologie <g:f>
|rechtstheorie <g:f>
|rechtspleging <g:f>
|rechtspraak <g:f>
|rechtsprocedure <g:f>
|rechtspsychologie <g:f>
|rechtsstaat <g:m>
|rechtssysteem <g:n>
|rechtswetenschap <g:f>
|rechtszaal <g:f,m>
|rechtszaak <g:f>
|rechtszekerheid <g:f>
|rechtvaardig
|terecht
|van rechtswege
|voorrecht <g:n>
|wederrechtelijk
}}
{{col|nl|title=สิทธิเฉพาะหรือประเภทของกฎหมาย
|aasdomsrecht <g:n>
|adviesrecht <g:n>
|alleenrecht <g:n>
|auteursrecht <g:n>
|beklemrecht <g:n>
|bestaansrecht
|burgerrecht <g:n>
|cijnsrecht <g:n>
|collatierecht <g:n>
|contractrecht
|dierenrechten <g:n-p>
|dijkrecht <g:n>
|eerstgeboorterecht <g:n>
|erfrecht <g:n>
|geboorterecht <g:n>
|gewoonterecht <g:n>
|grondrecht <g:n>
|gruitrecht <g:n>
|havenrecht <g:n>
|hoederecht <g:n>
|kiesrecht <g:n>
|leenrecht <g:n>
|mensenrecht <g:n>
|milieurecht <g:n>
|natuurrecht <g:n>
|ontslagrecht <g:n>
|oorlogsrecht <g:n>
|privaatrecht <g:n>
|publiekrecht <g:n>
|rolrecht <g:n>
|stadsrecht <g:n>
|stapelrecht <g:n>
|stemrecht <g:n>
|strafprocesrecht <g:n>
|spreekrecht <g:n>
|vetorecht <g:n>
|volkenrecht <g:n>
|zelfbeschikkingsrecht <g:n>
}}
===== คำที่เกี่ยวข้อง =====
{{col|nl
|gerecht
}}
===== คำสืบทอด =====
* {{desc|af|reg}}
* {{desc|dcr|recht|regt}}
* {{desc|jvn|rèh|bor=1}}
* {{desc|srm|leti|bor=1}}
=== รากศัพท์ 3 ===
{{nonlemma}}
==== คำกริยา ====
{{head|nl|รูปกริยา}}
# {{infl of|nl|rechten||bare-ten-verb}}
== ภาษาเยอรมัน ==
=== รากศัพท์ ===
{{dercat|de|gem-pro|ine-pro|inh=1}}
จาก{{inh|de|gmh|rëht}}, จาก{{inh|de|goh|rëht}}, จาก{{inh|de|gmw-pro|*reht||ขวา, ตรง}}
{{col-top|2|cog}}
ร่วมเชื้อสายกับ{{cog|yi|רעכט}}, {{cog|is|réttur}}, {{cog|nl|recht}}, {{cog|en|right}}, {{cog|da|ret}}
{{col-bottom}}
=== การออกเสียง ===
* {{IPA|de|/ʁɛçt/|[ʁɛçtʰ]|a=Germany}}
* {{IPA|de|/rɛçt/|[rɛçtʰ]|a=Austria, Switzerland}}
* {{rhymes|de|ɛçt|s=1}}
* {{audio|de|De-recht.ogg}}
* {{audio|de|De-recht2.ogg|a=<<Germany>> (<<Berlin>>)}}
=== คำคุณศัพท์ ===
{{de-adj|comp.sup:+est:+st[พบได้ยากมาก]}}
# [[ขวา]]
#: {{ant|de|link}}
#: {{coi|de|die '''rechte''' Hand|[[มือ]][[ขวา]]}}
#: {{ux|de|Auf der '''rechten''' Straßenseite liegt ein [[Supermarkt]].|[[ซูเปอร์มาร์เก็ต]]อยู่ด้าน'''ขวา'''ของถนน}}
# [[ถูกต้อง]], [[เหมาะสม]]
#: {{ant|de|falsch}}
#: {{coi|de|im '''rechten''' Augenblick|ในจังหวะที่เหมาะสม}}
#: {{coi|de|auf der ''' rechten''' Spur|อยู่บนเส้นทางที่ถูกต้อง}}
# [[จริง]], [[แท้จริง]]
# [[ยุติธรรม]], [[ชอบ]][[ด้วย]][[กฎหมาย]]
# {{lb|de|geometry}} [[ตั้ง]][[ฉาก]], [[เป็น]][[มุม]] 90 [[องศา]]
#: {{syn|de|rechtwinklig}}
#: {{coi|de|'''rechter''' Winkel|[[มุม]][[ฉาก]]}}
==== การผันรูป ====
{{de-adecl|comp.sup:+est:+st[พบได้ยากมาก]}}
==== ลูกคำ ====
* {{l|de|rechte Hand|g=f||มือข้างขวา; มือขวา, ผู้ช่วยคนสำคัญ}}
* {{l|de|rechter Winkel}}
=== คำกริยาวิเศษณ์ ===
{{de-adv}}
# [[ค่อน]][[ข้าง]], [[พอ]][[สมควร]]
#: {{uxi|de|Es ist '''recht''' warm heute Abend.|เย็นนี้'''ค่อนข้าง'''อบอุ่น}}
#: {{uxi|de|'''recht''' klein|'''ค่อนข้าง'''เล็ก}}
# อย่าง[[ถูกต้อง]]
#: {{uxi|de|ganz '''recht'''|ถูกต้องเลย}}
# อย่าง[[แม่นยำ]]
==== คำที่เกี่ยวข้อง ====
* {{l|de|Recht|g=n||สิทธิ; เอกสิทธิ์; สิทธิเรียกร้อง; กฎหมาย}}
* {{l|de|recht haben}}
=== อ่านเพิ่ม ===
* {{R:de:Duden}}
* {{R:de:DWDS}}
== ภาษาเยอรมันต่ำ ==
=== คำนาม ===
{{nds-noun|n|rechten}}
# {{lb|nds|DLS}} {{alternative form of|nds|Recht}}
== ภาษาเยอรมันแบบเพนซิลเวเนีย ==
=== รากศัพท์ ===
จาก{{inh|pdc|gmh|rëht}}, จาก{{inh|pdc|goh|reht}}; เทียบ{{cog|de|recht}}, {{cog|nl|recht}}
=== คำคุณศัพท์ ===
{{head|pdc|คำคุณศัพท์}}
# [[ขวา]]
== ภาษาฮุนสริก ==
=== รากศัพท์ ===
จาก{{inh|hrx|gmh|rëht}}, จาก{{inh|hrx|goh|reht}}; เทียบ{{cog|de|recht}}, {{cog|nl|recht}}
=== การออกเสียง ===
{{hrx-pr|hmp=Recht}}
=== คำคุณศัพท์ ===
{{head|hrx|คำคุณศัพท์|ขั้นกว่า|rechter|ขั้นสุด|rechtest}}
# [[ขวา]]
=== อ่านเพิ่ม ===
* {{R:hrx:Boll}}
jth8vjn85cha3m8056iwxrojs0f7j74
คุยกับผู้ใช้:กัสกะแทก เย็ดแตกคาหี
3
2333694
5729021
2026-07-19T18:12:54Z
New user message
2698
เพิ่ม[[Template:Welcome|สารต้อนรับ]]ในหน้าคุยของผู้ใช้ใหม่
5729021
wikitext
text/x-wiki
{{Template:Welcome|realName=|name=กัสกะแทก เย็ดแตกคาหี}}
-- [[ผู้ใช้:New user message|New user message]] ([[คุยกับผู้ใช้:New user message|คุย]]) 01:12, 20 กรกฎาคม 2569 (+07)
ru84ciyynfhcejxse5vh7ne2h8hqktj
ᨩᩣ᩠ᨯ
0
2333695
5729022
2026-07-19T20:05:02Z
Alifshinobi
397
สร้างหน้าด้วย "== ภาษาคำเมือง == === รูปแบบอื่น === {{nod-alt|l=ชาด|s=จ้าด}} === การออกเสียง === * {{IPA|nod|/t͡ɕaːt˦˨/|a=เชียงใหม่}} === รากศัพท์ 1 === ==== คำกริยาวิเศษณ์ ==== {{nod-adv|-}} # [[มาก]] #: {{ux|nod|'''ᨩᩣ᩠ᨯ'''[[ᩃᩣᩴ]]|อร่อย'''มาก'''}} # [[ดี]] # [[วิเศษ]..."
5729022
wikitext
text/x-wiki
== ภาษาคำเมือง ==
=== รูปแบบอื่น ===
{{nod-alt|l=ชาด|s=จ้าด}}
=== การออกเสียง ===
* {{IPA|nod|/t͡ɕaːt˦˨/|a=เชียงใหม่}}
=== รากศัพท์ 1 ===
==== คำกริยาวิเศษณ์ ====
{{nod-adv|-}}
# [[มาก]]
#: {{ux|nod|'''ᨩᩣ᩠ᨯ'''[[ᩃᩣᩴ]]|อร่อย'''มาก'''}}
# [[ดี]]
# [[วิเศษ]]
# [[สมบูรณ์]]
=== รากศัพท์ 2 ===
==== คำกริยา ====
{{nod-verb}}
# {{lb|nod|สกรรม}} [[จุ่ม]], [[แช่]], [[ชุบ]]
# {{lb|nod|สกรรม}} [[แตะ]] (ใช้สำหรับของที่เผาให้ร้อนแล้วแตะน้ำโดยเร็ว)
# {{lb|nod|สกรรม}} [[ถูก]][[ส่วน]][[ใด]][[ส่วน]][[หนึ่ง]][[ของ]][[ร่างกาย]] (ใช้กับของร้อน)
#: {{syn|nod|ᨧᩣ᩠ᨯ|ᨴᩤ᩠ᨯ}}
#: {{ux|nod|[[ᨲᩮᩢᩣᩁᩦ᩠ᨯ]]'''ᨩᩣ᩠ᨯ'''[[ᨾᩨ]]|เตารีด'''โดน'''มือ}}
=== รากศัพท์ 3 ===
==== คำนาม ====
{{nod-noun}}
# [[เอื้องผีเสื้อ]] <!--ไม่แน่ใจว่า ''พจนานุกรมภาษาล้านนา = The Lanna dictionary'' (พ.ศ. 2550) หมายถึง 1) "เอื้องผีเสื้อ" หรือ 2) "เอื้อง" และ "ผีเสื้อ" อาจเป็น "เอื้องผีเสื้อ" ซึ่งหมายถึง กะเรกะร่อนอินทนนท์ ซึ่งมีชื่ออื่นว่า "เอื้องกำเบ้อ" หรือ "เอื้องชาด" เป็นต้น-->
=== อ้างอิง ===
{{รายการอ้างอิง}}
* ''พจนานุกรมภาษาล้านนา = The Lanna dictionary'' (พิมพ์ครั้งที่ 2). (พ.ศ. 2550). เชียงใหม่: สถาบันภาษา ศิลปะและวัฒนธรรม มหาวิทยาลัยราชภัฏเชียงใหม่.
rpjwfblfqmzaqkg5tzqci55g9g2vwyk
5729023
5729022
2026-07-19T20:06:40Z
Alifshinobi
397
/* รากศัพท์ 1 */
5729023
wikitext
text/x-wiki
== ภาษาคำเมือง ==
=== รูปแบบอื่น ===
{{nod-alt|l=ชาด|s=จ้าด}}
=== การออกเสียง ===
* {{IPA|nod|/t͡ɕaːt˦˨/|a=เชียงใหม่}}
=== รากศัพท์ 1 ===
ร่วมเชื้อสายกับ{{cog|kkh|ᨩᩣ᩠ᨯ}}, {{cog|khb|ᦋᦱᧆ}}
==== คำกริยาวิเศษณ์ ====
{{nod-adv|-}}
# [[มาก]]
#: {{ux|nod|'''ᨩᩣ᩠ᨯ'''[[ᩃᩣᩴ]]|อร่อย'''มาก'''}}
# [[ดี]]
# [[วิเศษ]]
# [[สมบูรณ์]]
=== รากศัพท์ 2 ===
==== คำกริยา ====
{{nod-verb}}
# {{lb|nod|สกรรม}} [[จุ่ม]], [[แช่]], [[ชุบ]]
# {{lb|nod|สกรรม}} [[แตะ]] (ใช้สำหรับของที่เผาให้ร้อนแล้วแตะน้ำโดยเร็ว)
# {{lb|nod|สกรรม}} [[ถูก]][[ส่วน]][[ใด]][[ส่วน]][[หนึ่ง]][[ของ]][[ร่างกาย]] (ใช้กับของร้อน)
#: {{syn|nod|ᨧᩣ᩠ᨯ|ᨴᩤ᩠ᨯ}}
#: {{ux|nod|[[ᨲᩮᩢᩣᩁᩦ᩠ᨯ]]'''ᨩᩣ᩠ᨯ'''[[ᨾᩨ]]|เตารีด'''โดน'''มือ}}
=== รากศัพท์ 3 ===
==== คำนาม ====
{{nod-noun}}
# [[เอื้องผีเสื้อ]] <!--ไม่แน่ใจว่า ''พจนานุกรมภาษาล้านนา = The Lanna dictionary'' (พ.ศ. 2550) หมายถึง 1) "เอื้องผีเสื้อ" หรือ 2) "เอื้อง" และ "ผีเสื้อ" อาจเป็น "เอื้องผีเสื้อ" ซึ่งหมายถึง กะเรกะร่อนอินทนนท์ ซึ่งมีชื่ออื่นว่า "เอื้องกำเบ้อ" หรือ "เอื้องชาด" เป็นต้น-->
=== อ้างอิง ===
{{รายการอ้างอิง}}
* ''พจนานุกรมภาษาล้านนา = The Lanna dictionary'' (พิมพ์ครั้งที่ 2). (พ.ศ. 2550). เชียงใหม่: สถาบันภาษา ศิลปะและวัฒนธรรม มหาวิทยาลัยราชภัฏเชียงใหม่.
gtjr3fp8i0hk6pac4do6jyudbdu0f43
ᨹᩮᩥ᩠᩶ᨦ
0
2333696
5729031
2026-07-19T20:38:18Z
Alifshinobi
397
สร้างหน้าด้วย "== ภาษาคำเมือง == === รูปแบบอื่น === {{nod-alt|~=เผิ้ง}} === การออกเสียง === * {{IPA|nod|/pʰɤːŋ˦˦ʔ/|a=เชียงใหม่}} === คำนาม === {{nod-noun}} # [[ผึ้ง]] {{cls|nod|ᨲ᩠ᩅᩫ}} # {{lang|nod|([[ᩋᩮᩬᩥ᩶ᨦ]]~)}} [[กล้วยไม้]][[ชนิด]][[หนึ่ง]] [[เรียก]][[ว่า]] {{l|nod|ᩋᩮ..."
5729031
wikitext
text/x-wiki
== ภาษาคำเมือง ==
=== รูปแบบอื่น ===
{{nod-alt|~=เผิ้ง}}
=== การออกเสียง ===
* {{IPA|nod|/pʰɤːŋ˦˦ʔ/|a=เชียงใหม่}}
=== คำนาม ===
{{nod-noun}}
# [[ผึ้ง]] {{cls|nod|ᨲ᩠ᩅᩫ}}
# {{lang|nod|([[ᩋᩮᩬᩥ᩶ᨦ]]~)}} [[กล้วยไม้]][[ชนิด]][[หนึ่ง]] [[เรียก]][[ว่า]] {{l|nod|[[ᩋᩮᩬᩥ᩶ᨦ]]ᨹᩮᩥ᩠᩶ᨦ}}
=== อ้างอิง ===
{{รายการอ้างอิง}}
* ''พจนานุกรมภาษาล้านนา = The Lanna dictionary'' (พิมพ์ครั้งที่ 2). (พ.ศ. 2550). เชียงใหม่: สถาบันภาษา ศิลปะและวัฒนธรรม มหาวิทยาลัยราชภัฏเชียงใหม่.
7gfbpif9fp7ppcdqmibyahaf8zxrlq7
ᨧᩬ᩵ᨾ
0
2333697
5729032
2026-07-19T22:33:33Z
Alifshinobi
397
สร้างหน้าด้วย "== ภาษาคำเมือง == === รูปแบบอื่น === {{nod-alt|~=จ่อม}} === การออกเสียง === * {{IPA|nod|/t͡ɕɔm˨˩/|a=เชียงใหม่}} === คำกริยา === {{nod-verb}} # {{lb|nod|สกรรม}} [[ใช้]][[เบ็ด]][[ตก]][[ปลา]], [[จุ่ม]], [[หย่อน]] #: {{ux|nod|'''ᨧᩬ᩵ᨾ'''[[ᨷᩮᩢ᩠ᨯ]]'''ᨧᩬ᩵ᨾ'''ᨠ᩶ᩣ..."
5729032
wikitext
text/x-wiki
== ภาษาคำเมือง ==
=== รูปแบบอื่น ===
{{nod-alt|~=จ่อม}}
=== การออกเสียง ===
* {{IPA|nod|/t͡ɕɔm˨˩/|a=เชียงใหม่}}
=== คำกริยา ===
{{nod-verb}}
# {{lb|nod|สกรรม}} [[ใช้]][[เบ็ด]][[ตก]][[ปลา]], [[จุ่ม]], [[หย่อน]]
#: {{ux|nod|'''ᨧᩬ᩵ᨾ'''[[ᨷᩮᩢ᩠ᨯ]]'''ᨧᩬ᩵ᨾ'''[[ᨠ᩶ᩣ᩠ᨶ]]|'''จ่อม'''เบ็ด'''จ่อม'''คันเบ็ด}}
# {{lb|nod|สกรรม}} [[ดอง]][[อาหาร]][[บาง]][[อย่าง]][[เพื่อ]][[ให้]][[มี]][[รส]][[เปรี้ยว]][[เล็กน้อย]][[อย่าง]] {{l|nod|[[ᨸᩖᩣ]]ᨧᩬ᩵ᨾ}} [[หรือ]] {{l|nod|[[ᨾᩯ᩠ᨦᨾᩢ᩠ᨶ]]ᨧᩬ᩵ᨾ}} [[เป็นต้น]]
=== คำนาม ===
{{nod-noun}}
# [[อาหาร]][[ที่]][[ผ่าน]][[การหมัก]][[ดอง]]
#: {{ux|nod|[[ᨸᩖᩣ]]'''ᨧᩬ᩵ᨾ'''|ปลา'''หมัก'''}}
=== อ้างอิง ===
{{รายการอ้างอิง}}
* ''พจนานุกรมภาษาล้านนา = The Lanna dictionary'' (พิมพ์ครั้งที่ 2). (พ.ศ. 2550). เชียงใหม่: สถาบันภาษา ศิลปะและวัฒนธรรม มหาวิทยาลัยราชภัฏเชียงใหม่.
buoc5zb0ytbbsugckuvghu7puh4no8n
ᨠᩰᩫ᩠ᨶ
0
2333698
5729033
2026-07-19T22:45:32Z
Alifshinobi
397
สร้างหน้าด้วย "== ภาษาคำเมือง == === รูปแบบอื่น === {{nod-alt|l=โกน|s=โก๋น}} === การออกเสียง === * {{IPA|nod|/koːn˨˦/|a=เชียงใหม่}} === รากศัพท์ 1 === ==== คำนาม ==== {{nod-noun}} # [[โพรง]] # [[โพรง]][[ที่]][[ให้]][[ผึ้ง]][[ทำ]][[รัง]] # [[ไม้]][[ท่อน]][[ที่]]เป็..."
5729033
wikitext
text/x-wiki
== ภาษาคำเมือง ==
=== รูปแบบอื่น ===
{{nod-alt|l=โกน|s=โก๋น}}
=== การออกเสียง ===
* {{IPA|nod|/koːn˨˦/|a=เชียงใหม่}}
=== รากศัพท์ 1 ===
==== คำนาม ====
{{nod-noun}}
# [[โพรง]]
# [[โพรง]][[ที่]][[ให้]][[ผึ้ง]][[ทำ]][[รัง]]
# [[ไม้]][[ท่อน]][[ที่]][[เป็น]][[โพรง]][[หรือ]][[กลวง]]
# {{lang|nod|([[ᨹᩮᩥ᩠᩶ᨦ]]~)}} [[ผึ้ง]][[ที่]][[ทำ]][[รัง]][[ใน]][[โพรง]][[ไม้]] [[เรียก]][[ว่า]] {{l|nod|[[ᨹᩮᩥ᩠᩶ᨦ]]ᨠᩰᩫ᩠ᨶ}}
=== รากศัพท์ 2 ===
==== คำนาม ====
{{nod-noun}}
# [[กางเกง]]
#: {{syn|nod|ᨲ᩠ᨿ᩵ᩅ}}
=== อ้างอิง ===
{{รายการอ้างอิง}}
* ''พจนานุกรมภาษาล้านนา = The Lanna dictionary'' (พิมพ์ครั้งที่ 2). (พ.ศ. 2550). เชียงใหม่: สถาบันภาษา ศิลปะและวัฒนธรรม มหาวิทยาลัยราชภัฏเชียงใหม่.
3snr5pc5wzukh7o2qkrn1ig1j2gysmq
5729035
5729033
2026-07-19T22:47:57Z
Alifshinobi
397
/* รากศัพท์ 2 */
5729035
wikitext
text/x-wiki
== ภาษาคำเมือง ==
=== รูปแบบอื่น ===
{{nod-alt|l=โกน|s=โก๋น}}
=== การออกเสียง ===
* {{IPA|nod|/koːn˨˦/|a=เชียงใหม่}}
=== รากศัพท์ 1 ===
==== คำนาม ====
{{nod-noun}}
# [[โพรง]]
# [[โพรง]][[ที่]][[ให้]][[ผึ้ง]][[ทำ]][[รัง]]
# [[ไม้]][[ท่อน]][[ที่]][[เป็น]][[โพรง]][[หรือ]][[กลวง]]
# {{lang|nod|([[ᨹᩮᩥ᩠᩶ᨦ]]~)}} [[ผึ้ง]][[ที่]][[ทำ]][[รัง]][[ใน]][[โพรง]][[ไม้]] [[เรียก]][[ว่า]] {{l|nod|[[ᨹᩮᩥ᩠᩶ᨦ]]ᨠᩰᩫ᩠ᨶ}}
=== รากศัพท์ 2 ===
ร่วมเชื้อสายกับ{{cog|kkh|ᨠᩫ᩠ᨶ}}, {{cog|shn|ၵူၼ်}}, {{cog|tdd|ᥐᥨᥢ}}
==== คำนาม ====
{{nod-noun}}
# [[กางเกง]]
#: {{syn|nod|ᨲ᩠ᨿ᩵ᩅ}}
=== อ้างอิง ===
{{รายการอ้างอิง}}
* ''พจนานุกรมภาษาล้านนา = The Lanna dictionary'' (พิมพ์ครั้งที่ 2). (พ.ศ. 2550). เชียงใหม่: สถาบันภาษา ศิลปะและวัฒนธรรม มหาวิทยาลัยราชภัฏเชียงใหม่.
573itjfuzuur8pe5nw796p9sn3g88zb
rechter
0
2333699
5729061
2026-07-20T01:46:22Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729061
wikitext
text/x-wiki
== ภาษาดัตช์ ==
=== การออกเสียง ===
* {{IPA|nl|/ˈrɛx.tər/}}
* {{audio|nl|Nl-rechter.ogg}}
* {{hyphenation|nl|rech|ter}}
* {{rhymes|nl|ɛxtər|s=2}}
=== รากศัพท์ 1 ===
จาก{{inh|nl|dum|rechtere}}; {{surface analysis|nl|rechten|t1=พิพากษา|-er|pos2=ปัจจัยผู้กระทำ}}; เทียบ{{cog|de|Richter}}
==== คำนาม ====
{{nl-noun|m|-s|+}}
# {{lb|nl|legal}} [[ผู้พิพากษา]]
===== ลูกคำ =====
{{col|nl
|eigenrechter
|kantonrechter
|onderzoeksrechter
|politierechter
|scheidsrechter
|scherprechter
|vrederechter
}}
===== คำสืบทอด =====
* {{desc|dcr|rechter|regter}}
=== รากศัพท์ 2 ===
ต้นกำเนิดจากรูปเพศหญิงสัมปทานการกของ {{m|nl|recht}}; ทำให้เป็นนัยทั่วไปจากวลี {{m|nl|[[ter]] [[recht]]er [[hand]]}}, {{m|nl|ter rechter [[zijde]]|t=อยู่ขวามือ/ข้างขวา}}
<!--Philippa says "comparative", but this is wrong, as the lack of inflection (*rechtere) shows. Philippa herself gives the correct derivation at "linker"-->
==== คำคุณศัพท์ ====
{{nl-adj|-}}
# [[ขวา]]
#: {{syn|nl|rechts}}
#: {{ant|nl|linker|links}}
#: {{ux|nl|Er zit een vlek op je '''rechter''' broekspijp.|There’s a spot on your right trouser leg.}}
===== หมายเหตุการใช้ =====
* In [[attributive]] position, the form {{m|nl||rechter}} is commoner than {{m|nl|rechts}}, but [[predicative]]ly and as an [[adverb]] only the latter is possible.
===== การผันรูป =====
{{nl-decl-adj|rechter|-|pred=-|part=-}}
===== คำสืบทอด =====
* {{desc|dcr|retu|regter}}
=== รากศัพท์ 3 ===
{{nonlemma}}
==== คำคุณศัพท์ ====
{{head|nl|รูปคุณศัพท์}}
# {{comparative of|nl|recht|t=straight}}
{{C|nl|อาชีพ}}
== ภาษาเยอรมัน ==
=== การออกเสียง ===
* {{audio|de|De-rechter.ogg|a=<<Germany>> (<<Berlin>>)}}
=== คำคุณศัพท์ ===
{{head|de|รูปคุณศัพท์}}
# {{comparative of|de|recht}}
# {{de-adj form of|recht}}
bnl8rpc94w0qg1x0e7o91q5q69j2nqb
5729064
5729061
2026-07-20T01:49:18Z
Octahedron80
267
/* คำคุณศัพท์ */
5729064
wikitext
text/x-wiki
== ภาษาดัตช์ ==
=== การออกเสียง ===
* {{IPA|nl|/ˈrɛx.tər/}}
* {{audio|nl|Nl-rechter.ogg}}
* {{hyphenation|nl|rech|ter}}
* {{rhymes|nl|ɛxtər|s=2}}
=== รากศัพท์ 1 ===
จาก{{inh|nl|dum|rechtere}}; {{surface analysis|nl|rechten|t1=พิพากษา|-er|pos2=ปัจจัยผู้กระทำ}}; เทียบ{{cog|de|Richter}}
==== คำนาม ====
{{nl-noun|m|-s|+}}
# {{lb|nl|legal}} [[ผู้พิพากษา]]
===== ลูกคำ =====
{{col|nl
|eigenrechter
|kantonrechter
|onderzoeksrechter
|politierechter
|scheidsrechter
|scherprechter
|vrederechter
}}
===== คำสืบทอด =====
* {{desc|dcr|rechter|regter}}
=== รากศัพท์ 2 ===
ต้นกำเนิดจากรูปเพศหญิงสัมปทานการกของ {{m|nl|recht}}; ทำให้เป็นนัยทั่วไปจากวลี {{m|nl|[[ter]] [[recht]]er [[hand]]}}, {{m|nl|ter rechter [[zijde]]|t=อยู่ขวามือ/ข้างขวา}}
<!--Philippa says "comparative", but this is wrong, as the lack of inflection (*rechtere) shows. Philippa herself gives the correct derivation at "linker"-->
==== คำคุณศัพท์ ====
{{nl-adj|-}}
# [[ขวา]]
#: {{syn|nl|rechts}}
#: {{ant|nl|linker|links}}
#: {{ux|nl|Er zit een vlek op je '''rechter''' broekspijp.|There’s a spot on your right trouser leg.}}
===== หมายเหตุการใช้ =====
* In [[attributive]] position, the form {{m|nl||rechter}} is commoner than {{m|nl|rechts}}, but [[predicative]]ly and as an [[adverb]] only the latter is possible.
===== การผันรูป =====
{{nl-decl-adj|rechter|-|pred=-|part=-}}
===== คำสืบทอด =====
* {{desc|dcr|retu|regter}}
=== รากศัพท์ 3 ===
{{nonlemma}}
==== คำคุณศัพท์ ====
{{head|nl|รูปคุณศัพท์}}
# {{comparative of|nl|recht|t=ตรง}}
{{C|nl|อาชีพ}}
== ภาษาเยอรมัน ==
=== การออกเสียง ===
* {{audio|de|De-rechter.ogg|a=<<Germany>> (<<Berlin>>)}}
=== คำคุณศัพท์ ===
{{head|de|รูปคุณศัพท์}}
# {{comparative of|de|recht}}
# {{de-adj form of|recht}}
05wv7s36v85pzyx41j924raz873nr0z
rechters
0
2333700
5729062
2026-07-20T01:46:41Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729062
wikitext
text/x-wiki
== ภาษาดัตช์ ==
=== การออกเสียง ===
* {{audio|nl|Nl-rechters.ogg}}
=== คำนาม ===
{{head|nl|รูปนาม}}
# {{plural of|nl|rechter}}
g2sscdkvhfcstacxvvg9eo2w6h8kbp8
rechtje
0
2333701
5729063
2026-07-20T01:49:10Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729063
wikitext
text/x-wiki
== ภาษาดัตช์ ==
=== การออกเสียง ===
* {{audio|nl|Nl-rechtje.ogg}}
=== คำนาม ===
{{nl-noun-dim}}
# {{diminutive of|nl|recht}}
tc5a9noeow7dtmnm9px2gkch1yd16bi
retu
0
2333702
5729066
2026-07-20T01:51:28Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729066
wikitext
text/x-wiki
== ภาษาลัตเวีย ==
=== คำคุณศัพท์ ===
{{head|lv|รูปคุณศัพท์}}
# {{inflection of|lv|rets||acc//ins|m//f|s|;|gen|m//f|p}}
== ภาษาอัสตูเรียส ==
=== รากศัพท์ ===
จาก{{m|ast|retar}}
=== คำนาม ===
{{ast-noun|m|retos}}
# [[การท้าทาย]]
==== คำพ้องความ ====
* {{l|ast|desafíu}}
==== คำเกี่ยวข้อง ====
* {{l|ast|retar}}
== ภาษาอิงเกรีย ==
=== รากศัพท์ ===
จาก{{inh|izh|urj-fin-pro|*rëtu}}; ร่วมเชื้อสายกับ{{cog|krl|redu}} [ใต้] และ{{cog|vep|redu}}
=== การออกเสียง ===
* {{izh-p}}
=== คำนาม ===
{{head|izh|คำนาม}}
# [[โคลน]], [[ดิน]]
==== การผันรูป ====
{{izh-decl/koivu|t}}
==== คำพ้องความ ====
* {{l|izh|rooja}}
==== ลูกคำ ====
{{col4|izh
|retumatokkain|retukoma|retupääskö|reukas|retuin}}
=== อ้างอิง ===
* {{R:izh:Junus:1936|page=19}}
* {{R:izh:Nirvi:1971|page=471}}
d7zt5kk2yc1qk0yvowirj0abniqf49d
retos
0
2333703
5729067
2026-07-20T01:51:44Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729067
wikitext
text/x-wiki
== ภาษาโปรตุเกส ==
=== คำคุณศัพท์ ===
{{head|pt|รูปคุณศัพท์}}
# {{adj form of|pt|reto||m|p}}
== ภาษาลัตเวีย ==
=== คำคุณศัพท์ ===
{{head|lv|รูปคุณศัพท์}}
# {{inflection of|lv|rets||loc|m|p|;|def|acc|m|p}}
== ภาษาสเปน ==
=== คำนาม ===
{{head|es|รูปนาม|g=m-p}}
# {{inflection of|es|reto||p}}
== ภาษาอัสตูเรียส ==
=== คำนาม ===
{{head|ast|รูปนาม}}
# {{plural of|ast|retu}}
q5e4vg6mp3iaj437iyqz3kfottzimyc
regter
0
2333704
5729069
2026-07-20T01:53:10Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729069
wikitext
text/x-wiki
== ภาษาอาฟรีกานส์ ==
=== คำคุณศัพท์ ===
{{head|af|รูปคุณศัพท์}}
# {{comparative of|af|reg}}
030br7tler58i7tpmv6x5ktesrlpeme
rooja
0
2333705
5729070
2026-07-20T01:54:13Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729070
wikitext
text/x-wiki
== ภาษาอิงเกรีย ==
=== รากศัพท์ ===
จาก{{inh|izh|urj-fin-pro|*rooja}}; ร่วมเชื้อสายกับ{{cog|fi|ruoja}} และ{{cog|et|roe}}
=== การออกเสียง ===
* {{izh-p}}
=== คำนาม ===
{{head|izh|คำนาม}}
# [[ดิน]], [[โคลน]]
==== การผันรูป ====
{{izh-decl/koira|j|j}}
==== คำพ้องความ ====
* {{l|izh|retu}}
==== ลูกคำ ====
{{col4|izh
|roojakas|roojata}}
=== อ้างอิง ===
* {{R:izh:Nirvi:1971|page=488}}
n8qf4q073i6lohsjw28ue2plzhf51o9
roojakas
0
2333706
5729071
2026-07-20T01:55:34Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729071
wikitext
text/x-wiki
== ภาษาอิงเกรีย ==
=== รากศัพท์ ===
จาก{{suffix|izh|rooja|t1=dirt|-kas}}
=== การออกเสียง ===
* {{izh-p}}
=== คำคุณศัพท์ ===
{{izh-adj|roojakkaamp}}
# [[สกปรก]], [[โสโครก]]
#* {{RQ:izh:Lukukirja-1:1936|I tetretit hänel ollaa '''roojakkaat''' (reukkaat).|And he has '''dirty''' (dirty) notebooks.|page=9}}
==== การผันรูป ====
{{izh-decl/patsas|k|kk}}
==== คำพ้องความ ====
* {{l|izh|reukas}}
=== อ้างอิง ===
* {{R:izh:Nirvi:1971|page=488}}
ev46nr3yaws92gtyb2806ozbmmewthr
5729076
5729071
2026-07-20T01:58:00Z
Octahedron80
267
/* รากศัพท์ */
5729076
wikitext
text/x-wiki
== ภาษาอิงเกรีย ==
=== รากศัพท์ ===
จาก{{suffix|izh|rooja|t1=ดิน|-kas}}
=== การออกเสียง ===
* {{izh-p}}
=== คำคุณศัพท์ ===
{{izh-adj|roojakkaamp}}
# [[สกปรก]], [[โสโครก]]
#* {{RQ:izh:Lukukirja-1:1936|I tetretit hänel ollaa '''roojakkaat''' (reukkaat).|And he has '''dirty''' (dirty) notebooks.|page=9}}
==== การผันรูป ====
{{izh-decl/patsas|k|kk}}
==== คำพ้องความ ====
* {{l|izh|reukas}}
=== อ้างอิง ===
* {{R:izh:Nirvi:1971|page=488}}
jnd937kujlkqg6lgtxqg99gdwlu9rer
แม่แบบ:izh-adj
10
2333707
5729072
2026-07-20T01:56:30Z
Octahedron80
267
นำเข้าจาก enwikt
5729072
wikitext
text/x-wiki
{{#invoke:checkparams|error}}<!-- Validate template parameters
-->{{head|izh|คำคุณศัพท์{{#ifeq:{{{c|}}}|1|ขั้นกว่า}}
|head={{{head|}}}
|{{#ifeq:{{{1|}}}|-||{{#if:{{{1|}}}|ขั้นกว่า}}}}
|{{#switch:{{{1|}}}|-=|+={{pagename}}mp|{{{1|}}}}}
|{{#if:{{{c2|}}}|หรือ}}
|{{{c2|}}}
|{{#if:{{{c3|}}}|หรือ}}
|{{{c3|}}}
}}{{#ifeq:{{{1|}}}|-| {{tlb|izh|เปรียบเทียบไม่ได้}}}}<noinclude>{{documentation}}</noinclude>
jt5h5qqorpjh6r97wx5bczio1ufiqlc
หมวดหมู่:คำคุณศัพท์ภาษาอิงเกรีย
14
2333708
5729073
2026-07-20T01:56:49Z
Octahedron80
267
สร้างหมวดหมู่อัตโนมัติ
5729073
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
roojata
0
2333709
5729074
2026-07-20T01:57:33Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729074
wikitext
text/x-wiki
== ภาษาอิงเกรีย ==
=== รากศัพท์ ===
จาก{{suffix|izh|rooja|t1=mud|-ta}}
=== การออกเสียง ===
* {{izh-p}}
=== คำกริยา ===
{{head|izh|คำกริยา}}
# {{lb|izh|transitive}} [[ทำ]][[ให้]][[สกปรก]], ทำให้[[เปรอะเปื้อน]]
==== การผันรูป ====
{{izh-conj/maata|j|j}}
=== อ้างอิง ===
* {{R:izh:Nirvi:1971|page=488}}
443on92c7hcrelu1g9blhye37uqwwlc
5729075
5729074
2026-07-20T01:57:46Z
Octahedron80
267
/* รากศัพท์ */
5729075
wikitext
text/x-wiki
== ภาษาอิงเกรีย ==
=== รากศัพท์ ===
จาก{{suffix|izh|rooja|t1=โคลน|-ta}}
=== การออกเสียง ===
* {{izh-p}}
=== คำกริยา ===
{{head|izh|คำกริยา}}
# {{lb|izh|transitive}} [[ทำ]][[ให้]][[สกปรก]], ทำให้[[เปรอะเปื้อน]]
==== การผันรูป ====
{{izh-conj/maata|j|j}}
=== อ้างอิง ===
* {{R:izh:Nirvi:1971|page=488}}
qeyga8ogmzvma1rnu43ju4huxno06z7
rechtere
0
2333710
5729077
2026-07-20T01:59:20Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729077
wikitext
text/x-wiki
== ภาษาดัตช์ ==
=== การออกเสียง ===
* {{audio|nl|Nl-rechtere.ogg}}
=== คำคุณศัพท์ ===
{{head|nl|รูปคุณศัพท์}}
# {{inflection of|nl|rechter||infl|comp-of=recht}}
== ภาษาเยอรมัน ==
=== การออกเสียง ===
* {{audio|de|De-rechtere.ogg|a=<<Germany>> (<<Berlin>>)}}
=== คำคุณศัพท์ ===
{{head|de|รูปคุณศัพท์ขั้นกว่า}}
# {{de-adj form of|recht}}
ejxl8et2o0vb0r2re7wimfhknnskj6p
rechtesten
0
2333711
5729080
2026-07-20T02:01:54Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729080
wikitext
text/x-wiki
== ภาษาเยอรมัน ==
=== การออกเสียง ===
* {{audio|de|De-rechtesten.ogg|a=<<Germany>> (<<Berlin>>)}}
=== คำคุณศัพท์ ===
{{head|de|คำคุณศัพท์ขั้นสุด}}
# {{superlative of|de|recht}}
=== คำคุณศัพท์ ===
{{head|de|รูปคุณศัพท์}}
# {{de-adj form of|recht|sten}}
p5svhtib5hl4053w70583a9e07bgakd
rechtsten
0
2333712
5729083
2026-07-20T02:03:07Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729083
wikitext
text/x-wiki
== ภาษาเยอรมัน ==
=== คำคุณศัพท์ ===
{{head|de|คำคุณศัพท์ขั้นสุด}}
# {{superlative of|de|recht}}
=== คำคุณศัพท์ ===
{{head|de|รูปคุณศัพท์ขั้นสุด}}
# {{de-adj form of|recht}}
0l7gkxs4aqnz6rm3fc922crftsarg6v
rechte
0
2333713
5729084
2026-07-20T02:03:25Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729084
wikitext
text/x-wiki
== ภาษาดัตช์ ==
=== การออกเสียง ===
* {{audio|nl|Nl-rechte.ogg}}
=== คำคุณศัพท์ ===
{{head|nl|รูปคุณศัพท์}}
# {{inflection of|nl|recht||infl}}
=== คำกริยา ===
{{head|nl|รูปกริยา}}
# {{inflection of|nl|rechten||s|pres|sub}}
=== คำสลับอักษร ===
* {{l|nl|echter}}
== ภาษาเยอรมัน ==
=== การออกเสียง ===
* {{audio|de|De-rechte.ogg|a=<<Germany>> (<<Berlin>>)}}
* {{rhymes|de|ɛçtə|s=2}}
=== คำคุณศัพท์ ===
{{head|de|รูปคุณศัพท์}}
# {{de-adj form of|recht}}
8h0uxfxu3oc2amgiocbf42lvqbdup25
rechtes
0
2333714
5729085
2026-07-20T02:03:29Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729085
wikitext
text/x-wiki
== ภาษาเยอรมัน ==
=== การออกเสียง ===
* {{audio|de|De-rechtes.ogg|a=<<Germany>> (<<Berlin>>)}}
* {{rhymes|de|ɛçtəs|s=2}}
=== คำคุณศัพท์ ===
{{head|de|รูปคุณศัพท์}}
# {{de-adj form of|recht}}
5hw5tp8mpkl547xms15do1gbplstpcq
rechtem
0
2333715
5729086
2026-07-20T02:03:39Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729086
wikitext
text/x-wiki
== ภาษาเยอรมัน ==
=== การออกเสียง ===
* {{audio|de|De-rechtem.ogg|a=<<Germany>> (<<Berlin>>)}}
=== คำคุณศัพท์ ===
{{head|de|รูปคุณศัพท์}}
# {{de-adj form of|recht}}
5lkpv0lkt6zp6s88ril9sz4uhtwffu0
rechterer
0
2333716
5729087
2026-07-20T02:03:58Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729087
wikitext
text/x-wiki
== ภาษาเยอรมัน ==
=== การออกเสียง ===
* {{audio|de|De-rechterer.ogg|a=<<Germany>> (<<Berlin>>)}}
=== คำคุณศัพท์ ===
{{head|de|รูปคุณศัพท์ขั้นกว่า}}
# {{de-adj form of|recht}}
ejl2zvpejgm7snxb6s6rl3mmieotxsy
rechteres
0
2333717
5729088
2026-07-20T02:04:02Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729088
wikitext
text/x-wiki
== ภาษาเยอรมัน ==
=== การออกเสียง ===
* {{audio|de|De-rechteres.ogg|a=<<Germany>> (<<Berlin>>)}}
=== คำคุณศัพท์ ===
{{head|de|รูปคุณศัพท์ขั้นกว่า}}
# {{de-adj form of|recht}}
nu8lzroa2cxtzxn2ononlsaro2eclhf
rechteren
0
2333718
5729089
2026-07-20T02:04:06Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729089
wikitext
text/x-wiki
== ภาษาเยอรมัน ==
=== การออกเสียง ===
* {{audio|de|De-rechteren.ogg|a=<<Germany>> (<<Berlin>>)}}
=== คำคุณศัพท์ ===
{{head|de|รูปคุณศัพท์ขั้นกว่า}}
# {{de-adj form of|recht}}
syqlo4ywle0tsvxx42k25v7eepe76ge
rechterem
0
2333719
5729090
2026-07-20T02:04:10Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729090
wikitext
text/x-wiki
== ภาษาเยอรมัน ==
=== การออกเสียง ===
* {{audio|de|De-rechterem.ogg|a=<<Germany>> (<<Berlin>>)}}
=== คำคุณศัพท์ ===
{{head|de|รูปคุณศัพท์ขั้นกว่า}}
# {{de-adj form of|recht}}
g2fnrxtp4qxqsmefx5e5xbzbaspdr8h
rechtester
0
2333720
5729091
2026-07-20T02:04:38Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729091
wikitext
text/x-wiki
== ภาษาเยอรมัน ==
=== การออกเสียง ===
* {{audio|de|De-rechtester.ogg|a=<<Germany>> (<<Berlin>>)}}
=== คำคุณศัพท์ ===
{{head|de|รูปคุณศัพท์}}
# {{de-adj form of|recht|ster}}
4qj9ye8i2o987mq4sedddxymzgxt6w2
rechtster
0
2333721
5729092
2026-07-20T02:04:42Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729092
wikitext
text/x-wiki
== ภาษาเยอรมัน ==
=== คำคุณศัพท์ ===
{{head|de|รูปคุณศัพท์ขั้นสุด}}
# {{de-adj form of|recht}}
0tzma1qljpnxcuv6vkgiwsmf1aerc77
rechteste
0
2333722
5729093
2026-07-20T02:04:45Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729093
wikitext
text/x-wiki
== ภาษาเยอรมัน ==
=== การออกเสียง ===
* {{audio|de|De-rechteste.ogg|a=<<Germany>> (<<Berlin>>)}}
=== คำคุณศัพท์ ===
{{head|de|รูปคุณศัพท์}}
# {{de-adj form of|recht|ste}}
fnn7ndncmlj3avdllt4is78ivc9d8o7
rechtste
0
2333723
5729094
2026-07-20T02:04:49Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729094
wikitext
text/x-wiki
== ภาษาดัตช์ ==
=== การออกเสียง ===
* {{audio|nl|Nl-rechtste.ogg}}
=== คำคุณศัพท์ ===
{{head|nl|รูปคุณศัพท์}}
# {{inflection of|nl|rechtst||infl|sup-of=recht}}
== ภาษาเยอรมัน ==
=== คำคุณศัพท์ ===
{{head|de|รูปคุณศัพท์ขั้นสุด}}
# {{de-adj form of|recht}}
ku4nb4a7tplpa5v92wrv7l1ajswrwty
rechtestes
0
2333724
5729095
2026-07-20T02:04:52Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729095
wikitext
text/x-wiki
== ภาษาเยอรมัน ==
=== การออกเสียง ===
* {{audio|de|De-rechtestes.ogg|a=<<Germany>> (<<Berlin>>)}}
=== คำคุณศัพท์ ===
{{head|de|รูปคุณศัพท์}}
# {{de-adj form of|recht|stes}}
68oebu7uib0lfv4zr9z0w44l8w5h20a
rechtstes
0
2333725
5729096
2026-07-20T02:04:56Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729096
wikitext
text/x-wiki
== ภาษาเยอรมัน ==
=== คำคุณศัพท์ ===
{{head|de|รูปคุณศัพท์ขั้นสุด}}
# {{de-adj form of|recht}}
0tzma1qljpnxcuv6vkgiwsmf1aerc77
rechtestem
0
2333726
5729097
2026-07-20T02:04:59Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729097
wikitext
text/x-wiki
== ภาษาเยอรมัน ==
=== การออกเสียง ===
* {{audio|de|De-rechtestem.ogg|a=<<Germany>> (<<Berlin>>)}}
=== คำคุณศัพท์ ===
{{head|de|รูปคุณศัพท์}}
# {{de-adj form of|recht|stem}}
50paixcmos4jdeafjwnai0enisxycbc
rechtstem
0
2333727
5729098
2026-07-20T02:05:03Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729098
wikitext
text/x-wiki
== ภาษาเยอรมัน ==
=== คำคุณศัพท์ ===
{{head|de|รูปคุณศัพท์ขั้นสุด}}
# {{de-adj form of|recht}}
0tzma1qljpnxcuv6vkgiwsmf1aerc77
rechte Hand
0
2333728
5729100
2026-07-20T02:06:52Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729100
wikitext
text/x-wiki
== ภาษาเยอรมัน ==
=== คำนาม ===
{{head|de|คำนาม|g=f|head=[[recht|rechte]] [[Hand]]}}
# [[มือ]][[ข้าง]][[ขวา]]
# {{lb|de|figuratively}} [[มือขวา]] (ผู้ช่วยคนสำคัญ)
{{C|de|บุคคล}}
5ej1oryavkj19619c55d5as1qhilkvv
หมวดหมู่:คำคุณศัพท์ภาษาฮุนสริก
14
2333729
5729116
2026-07-20T02:20:21Z
Octahedron80
267
สร้างหมวดหมู่อัตโนมัติ
5729116
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
หมวดหมู่:คำคุณศัพท์ภาษาเยอรมันแบบเพนซิลเวเนีย
14
2333730
5729117
2026-07-20T02:20:23Z
Octahedron80
267
สร้างหมวดหมู่อัตโนมัติ
5729117
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
regt
0
2333731
5729118
2026-07-20T02:21:06Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729118
wikitext
text/x-wiki
== ภาษาเยอรมัน ==
=== การออกเสียง ===
* {{audio|de|De-regt.ogg|a=<<Germany>> (<<Berlin>>)}}
=== คำกริยา ===
{{head|de|รูปกริยา}}
# {{verb form of|de|regen||3|s|pres|;|2|p|pres|;|p|imp}}
h9nnuad7jj3soxwpmafj6ixq9t6arv3
leti
0
2333732
5729132
2026-07-20T02:37:01Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729132
wikitext
text/x-wiki
== ภาษาซรานันโตโง ==
=== การออกเสียง ===
* {{IPA|srn|/ˈle.ti/}}
=== รากศัพท์ 1 ===
จาก{{der|srn|en|light}}
==== คำกริยา ====
{{head|srn|คำกริยา}}
# ทำให้เกิด[[แสง]]
==== คำนาม ====
{{head|srn|คำนาม}}
# {{topics|srn|Light}} [[แสง]]
=== รากศัพท์ 2 ===
{{rfe|srn}}
==== คำคุณศัพท์ ====
{{head|srn|คำคุณศัพท์}}
# [[เท่า]]
==== คำนาม ====
{{head|srn|คำนาม}}
# [[ความเท่า]]
== ภาษาเซอร์โบ-โครเอเชีย ==
=== รูปแบบอื่น ===
* {{alt|sh|ljȅti||Ijekavian}}
=== การออกเสียง ===
* {{IPA|sh|/lêti/}}
* {{hyphenation|sh|le|ti}}
=== คำกริยาวิเศษณ์ ===
{{sh-adv|lȅti}} {{tlb|sh|Ekavian}}
# [[ใน]][[ฤดูร้อน]], [[ระหว่าง]]ฤดูร้อน
== ภาษาเบรอตง ==
=== รากศัพท์ ===
จาก{{inh|br|cel-bry-pro|*llettɨɣ}} (เทียบ{{cog|cy|llety}})
=== คำนาม ===
{{br-noun|m|p=letiez}}
# [[โรงแรม]], โรงแรม[[เล็ก]]
==== คำพ้องความ ====
* {{l|br|ostel}}
* {{l|br|ostaleri}}
== ภาษาแฟโร ==
=== รากศัพท์ ===
จาก{{inh|fo|non|leti}}
=== การออกเสียง ===
* {{IPA|fo|[ˈleːʰtɪ]}}
=== คำนาม ===
{{fo-noun|f|leti|-}}
# [[ความขี้เกียจ]]
==== การผันรูป ====
{{fo-decl-noun-f33-s|leti}}
== ภาษาละติน ==
=== คำนาม ===
{{head|la|รูปนาม|head=lētī}}
# {{inflection of|la|lētum||gen|s}}
== ภาษาลัตเวีย ==
=== คำนาม ===
{{head|lv|รูปนาม|g=f}}
# {{inflection of|lv|lete||acc//ins|s}}
== ภาษาเวเนโต ==
=== คำนาม ===
{{head|vec|รูปนาม}}
# {{plural of|vec|leto}}
== ภาษาสวาซี ==
=== รากศัพท์ ===
{{rfe|ss}}
=== คำสรรพนาม ===
{{head|ss|คำสรรพนาม|cat2=demonstrative pronouns}}
# [[เหล่านี้]]; {{n-g|class 8 proximal demonstrative}}
== ภาษาไอซ์แลนด์ ==
=== รากศัพท์ ===
จาก{{inh|is|non|leti}}
=== การออกเสียง ===
* {{is-IPA}}
=== คำนาม ===
{{is-noun|@@}}
# [[ความขี้เกียจ]]
==== การผันรูป ====
{{is-ndecl|f.sg}}
=== อ่านเพิ่ม ===
* {{R:is:Islex}}
agahb0e6xl2fozk6f8yfm8j5o7685c2
5729133
5729132
2026-07-20T02:37:15Z
Octahedron80
267
5729133
wikitext
text/x-wiki
== ภาษาซรานันโตโง ==
=== การออกเสียง ===
* {{IPA|srn|/ˈle.ti/}}
=== รากศัพท์ 1 ===
จาก{{der|srn|en|light}}
==== คำกริยา ====
{{head|srn|คำกริยา}}
# ทำให้เกิด[[แสง]]
==== คำนาม ====
{{head|srn|คำนาม}}
# {{topics|srn|แสง}} [[แสง]]
=== รากศัพท์ 2 ===
{{rfe|srn}}
==== คำคุณศัพท์ ====
{{head|srn|คำคุณศัพท์}}
# [[เท่า]]
==== คำนาม ====
{{head|srn|คำนาม}}
# [[ความเท่า]]
== ภาษาเซอร์โบ-โครเอเชีย ==
=== รูปแบบอื่น ===
* {{alt|sh|ljȅti||Ijekavian}}
=== การออกเสียง ===
* {{IPA|sh|/lêti/}}
* {{hyphenation|sh|le|ti}}
=== คำกริยาวิเศษณ์ ===
{{sh-adv|lȅti}} {{tlb|sh|Ekavian}}
# [[ใน]][[ฤดูร้อน]], [[ระหว่าง]]ฤดูร้อน
== ภาษาเบรอตง ==
=== รากศัพท์ ===
จาก{{inh|br|cel-bry-pro|*llettɨɣ}} (เทียบ{{cog|cy|llety}})
=== คำนาม ===
{{br-noun|m|p=letiez}}
# [[โรงแรม]], โรงแรม[[เล็ก]]
==== คำพ้องความ ====
* {{l|br|ostel}}
* {{l|br|ostaleri}}
== ภาษาแฟโร ==
=== รากศัพท์ ===
จาก{{inh|fo|non|leti}}
=== การออกเสียง ===
* {{IPA|fo|[ˈleːʰtɪ]}}
=== คำนาม ===
{{fo-noun|f|leti|-}}
# [[ความขี้เกียจ]]
==== การผันรูป ====
{{fo-decl-noun-f33-s|leti}}
== ภาษาละติน ==
=== คำนาม ===
{{head|la|รูปนาม|head=lētī}}
# {{inflection of|la|lētum||gen|s}}
== ภาษาลัตเวีย ==
=== คำนาม ===
{{head|lv|รูปนาม|g=f}}
# {{inflection of|lv|lete||acc//ins|s}}
== ภาษาเวเนโต ==
=== คำนาม ===
{{head|vec|รูปนาม}}
# {{plural of|vec|leto}}
== ภาษาสวาซี ==
=== รากศัพท์ ===
{{rfe|ss}}
=== คำสรรพนาม ===
{{head|ss|คำสรรพนาม|cat2=demonstrative pronouns}}
# [[เหล่านี้]]; {{n-g|class 8 proximal demonstrative}}
== ภาษาไอซ์แลนด์ ==
=== รากศัพท์ ===
จาก{{inh|is|non|leti}}
=== การออกเสียง ===
* {{is-IPA}}
=== คำนาม ===
{{is-noun|@@}}
# [[ความขี้เกียจ]]
==== การผันรูป ====
{{is-ndecl|f.sg}}
=== อ่านเพิ่ม ===
* {{R:is:Islex}}
h92krmr8z7o586jttctkif413qa75vv
linkesten
0
2333733
5729134
2026-07-20T02:39:04Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729134
wikitext
text/x-wiki
== ภาษาเยอรมัน ==
=== คำคุณศัพท์ ===
{{head|de|คำคุณศัพท์ขั้นสุด}}
# {{superlative of|de|link}}
=== คำคุณศัพท์ ===
{{head|de|รูปคุณศัพท์}}
# {{de-adj form of|link|sten}}
kf0vzep1zm60xv6cp76jk1a5vk0shky
linksten
0
2333734
5729135
2026-07-20T02:39:08Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729135
wikitext
text/x-wiki
== ภาษาเยอรมัน ==
=== การออกเสียง ===
* {{audio|de|De-linksten.ogg|a=<<Germany>> (<<Berlin>>)}}
=== คำคุณศัพท์ ===
{{head|de|คำคุณศัพท์ขั้นสุด}}
# {{superlative of|de|link}}
=== คำคุณศัพท์ ===
{{head|de|รูปคุณศัพท์}}
# {{de-adj form of|link}}
ntm60iau62373ykcmhdqbgdsqtvb3p2
linkem
0
2333735
5729136
2026-07-20T02:39:54Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729136
wikitext
text/x-wiki
== ภาษาเช็ก ==
=== การออกเสียง ===
* {{cs-IPA}}
=== คำนาม ===
{{head|cs|รูปนาม|g=m}}
# {{inflection of|cs|link||ins|s}}
== ภาษาโปรตุเกส ==
=== คำกริยา ===
{{head|pt|รูปกริยา}}
# {{pt-verb form of|linkar}}
== ภาษาเยอรมัน ==
=== การออกเสียง ===
* {{audio|de|De-linkem.ogg|a=<<Germany>> (<<Berlin>>)}}
=== คำคุณศัพท์ ===
{{head|de|รูปคุณศัพท์}}
# {{de-adj form of|linker|em}}
== ภาษาฮังการี ==
=== รากศัพท์ ===
{{affix|hu|link|-em|pos2=possessive suffix|nocat=y}}
=== การออกเสียง ===
* {{hu-IPA}}
* {{hyphenation|hu|lin|kem}}
=== คำนาม ===
{{head|hu|รูปนาม}}
# {{inflection of|hu|link||1|s|spos|poss}}
==== การผันรูป ====
{{hu-infl-nom|linkeme|e|n=sg|esm_sg=1}}
m4gwwnaun6shwgh5staru4sgk8i694j
linke
0
2333736
5729137
2026-07-20T02:40:02Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729137
wikitext
text/x-wiki
== ภาษาดัตช์ ==
=== การออกเสียง ===
* {{audio|nl|Nl-linke.ogg}}
=== คำคุณศัพท์ ===
{{head|nl|รูปคุณศัพท์}}
# {{inflection of|nl|link||infl}}
=== คำสลับอักษร ===
* {{l|nl|klein}}, {{l|nl|kniel}}
== ภาษาโปรตุเกส ==
=== คำกริยา ===
{{head|pt|รูปกริยา}}
# {{pt-verb form of|linkar}}
== ภาษาเยอรมัน ==
=== การออกเสียง ===
* {{audio|de|De-linke.ogg|a=<<Germany>> (<<Berlin>>)}}
=== คำคุณศัพท์ ===
{{head|de|รูปคุณศัพท์}}
# {{de-adj form of|link}}
=== คำกริยา ===
{{head|de|รูปกริยา}}
# {{verb form of|de|linken||1|s|pres|;|1//3|s|sub|I|;|s|imp}}
2uzntc49ey8v0lf5smpa2ajiugs7n8y
linkes
0
2333737
5729138
2026-07-20T02:40:20Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729138
wikitext
text/x-wiki
== ภาษาโปรตุเกส ==
=== คำกริยา ===
{{head|pt|รูปกริยา}}
# {{pt-verb form of|linkar}}
== ภาษาเยอรมัน ==
=== การออกเสียง ===
* {{audio|de|De-linkes.ogg|a=<<Germany>> (<<Berlin>>)}}
=== คำคุณศัพท์ ===
{{head|de|รูปคุณศัพท์}}
# {{de-adj form of|linker|es}}
crrfz1u99ywbrwvxain0wpbomwqi6zy
linkerer
0
2333738
5729139
2026-07-20T02:40:35Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729139
wikitext
text/x-wiki
== ภาษาเยอรมัน ==
=== การออกเสียง ===
* {{audio|de|De-linkerer.ogg|a=<<Germany>> (<<Berlin>>)}}
=== คำคุณศัพท์ ===
{{head|de|รูปคุณศัพท์}}
# {{de-adj form of|link}}
pl8owxbk4u2a4qkgrsd4dfg3gx4tlc0
linkeren
0
2333739
5729140
2026-07-20T02:40:38Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729140
wikitext
text/x-wiki
== ภาษาเยอรมัน ==
=== การออกเสียง ===
* {{audio|de|De-linkeren.ogg|a=<<Germany>> (<<Berlin>>)}}
=== คำคุณศัพท์ ===
{{head|de|รูปคุณศัพท์}}
# {{de-adj form of|link}}
4i5wyo5r3ulylwx3wgxp6ct97plrb3p
linkerem
0
2333740
5729141
2026-07-20T02:40:42Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729141
wikitext
text/x-wiki
== ภาษาเยอรมัน ==
=== การออกเสียง ===
* {{audio|de|De-linkerem.ogg|a=<<Germany>> (<<Berlin>>)}}
=== คำคุณศัพท์ ===
{{head|de|รูปคุณศัพท์}}
# {{de-adj form of|link}}
8tefld5l2i2h6309utu9r13om9hd20a
linkere
0
2333741
5729142
2026-07-20T02:40:52Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729142
wikitext
text/x-wiki
== ภาษาดัตช์ ==
=== การออกเสียง ===
* {{audio|nl|Nl-linkere.ogg}}
=== คำคุณศัพท์ ===
{{head|nl|รูปคุณศัพท์}}
# {{inflection of|nl|linker||infl|comp-of=link}}
=== คำสลับอักษร ===
* {{l|nl|kleiner}}, {{l|nl|klieren}}
== ภาษาเยอรมัน ==
=== การออกเสียง ===
* {{audio|de|De-linkere.ogg|a=<<Germany>> (<<Berlin>>)}}
=== คำคุณศัพท์ ===
{{head|de|รูปคุณศัพท์}}
# {{de-adj form of|link}}
dehkkku93e9a0laxcvd7cxquxokohas
linkeres
0
2333742
5729143
2026-07-20T02:40:55Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729143
wikitext
text/x-wiki
== ภาษาเยอรมัน ==
=== การออกเสียง ===
* {{audio|de|De-linkeres.ogg|a=<<Germany>> (<<Berlin>>)}}
=== คำคุณศัพท์ ===
{{head|de|รูปคุณศัพท์}}
# {{de-adj form of|link}}
ikr5qxkuh8p0siw8m2qbdksjgar7d3k
linkester
0
2333743
5729144
2026-07-20T02:41:36Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729144
wikitext
text/x-wiki
== ภาษาเยอรมัน ==
=== คำคุณศัพท์ ===
{{head|de|รูปคุณศัพท์}}
# {{de-adj form of|link|ster}}
mk7o93f04bdvh58tgbj9skk70y5ceqx
linkeste
0
2333744
5729145
2026-07-20T02:41:57Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729145
wikitext
text/x-wiki
== ภาษาเยอรมัน ==
=== คำคุณศัพท์ ===
{{head|de|รูปคุณศัพท์}}
# {{de-adj form of|link|ste}}
gfkfn7uhew7r678m2x3gztwe9aiztxv
linkste
0
2333745
5729146
2026-07-20T02:42:02Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729146
wikitext
text/x-wiki
== ภาษาดัตช์ ==
=== การออกเสียง ===
* {{audio|nl|Nl-linkste.ogg}}
=== คำคุณศัพท์ ===
{{head|nl|รูปคุณศัพท์}}
# {{inflection of|nl|linkst||infl|sup-of=link}}
=== คำสลับอักษร ===
* {{l|nl|kleinst}}, {{l|nl|slikten}}
== ภาษาเยอรมัน ==
=== การออกเสียง ===
* {{audio|de|De-linkste.ogg|a=<<Germany>> (<<Berlin>>)}}
=== คำคุณศัพท์ ===
{{head|de|รูปคุณศัพท์}}
# {{de-adj form of|link}}
k7oeni8as3moksncrdi9lcjg9ufxcki
linkestes
0
2333746
5729147
2026-07-20T02:42:05Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729147
wikitext
text/x-wiki
== ภาษาเยอรมัน ==
=== คำคุณศัพท์ ===
{{head|de|รูปคุณศัพท์}}
# {{de-adj form of|link|stes}}
2zjy29rn9am1ac3yu9mmoeak5d2nr7d
linkstes
0
2333747
5729148
2026-07-20T02:42:08Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729148
wikitext
text/x-wiki
== ภาษาเยอรมัน ==
=== การออกเสียง ===
* {{audio|de|De-linkstes.ogg|a=<<Germany>> (<<Berlin>>)}}
=== คำคุณศัพท์ ===
{{head|de|รูปคุณศัพท์}}
# {{de-adj form of|link}}
gtoumdhvp9mnb31rnm4z3hxyqojeubd
linkestem
0
2333748
5729149
2026-07-20T02:42:13Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729149
wikitext
text/x-wiki
== ภาษาเยอรมัน ==
=== คำคุณศัพท์ ===
{{head|de|รูปคุณศัพท์}}
# {{de-adj form of|link|stem}}
jcotw1svyy8k0at0n4cwz4s1w7d8pbc
linkstem
0
2333749
5729150
2026-07-20T02:42:16Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729150
wikitext
text/x-wiki
== ภาษาเยอรมัน ==
=== การออกเสียง ===
* {{audio|de|De-linkstem.ogg|a=<<Germany>> (<<Berlin>>)}}
=== คำคุณศัพท์ ===
{{head|de|รูปคุณศัพท์}}
# {{de-adj form of|link}}
gn63djl8qcotqtyt3gtzmv7j73zpf2p
หมวดหมู่:คำสรรพนามภาษาสวาซี
14
2333750
5729151
2026-07-20T02:42:47Z
Octahedron80
267
สร้างหมวดหมู่อัตโนมัติ
5729151
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
หมวดหมู่:คำหลักภาษาสวาซี
14
2333751
5729152
2026-07-20T02:42:48Z
Octahedron80
267
สร้างหมวดหมู่อัตโนมัติ
5729152
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
หมวดหมู่:คำคุณศัพท์ภาษาซรานันโตโง
14
2333752
5729153
2026-07-20T02:42:51Z
Octahedron80
267
สร้างหมวดหมู่อัตโนมัติ
5729153
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
หมวดหมู่:คำนามภาษาซรานันโตโง
14
2333753
5729154
2026-07-20T02:42:52Z
Octahedron80
267
สร้างหมวดหมู่อัตโนมัติ
5729154
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
หมวดหมู่:คำกริยาภาษาซรานันโตโง
14
2333754
5729155
2026-07-20T02:42:54Z
Octahedron80
267
สร้างหมวดหมู่อัตโนมัติ
5729155
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
หมวดหมู่:คำหลักภาษาซรานันโตโง
14
2333755
5729156
2026-07-20T02:42:55Z
Octahedron80
267
สร้างหมวดหมู่อัตโนมัติ
5729156
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
หมวดหมู่:ศัพท์ภาษาซรานันโตโงที่รับมาจากภาษาอังกฤษ
14
2333756
5729157
2026-07-20T02:42:57Z
Octahedron80
267
สร้างหมวดหมู่อัตโนมัติ
5729157
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
หมวดหมู่:ศัพท์ภาษาซรานันโตโงที่มีการออกเสียงไอพีเอ
14
2333757
5729158
2026-07-20T02:42:59Z
Octahedron80
267
สร้างหมวดหมู่อัตโนมัติ
5729158
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
หมวดหมู่:ภาษาซรานันโตโง
14
2333758
5729159
2026-07-20T02:47:45Z
Octahedron80
267
สร้างหน้าด้วย "{{auto cat|ซูรินาม}}"
5729159
wikitext
text/x-wiki
{{auto cat|ซูรินาม}}
8d4lugxrf0fqf4u7nq9j5c21spvmur5
หมวดหมู่:ภาษาสวาซี
14
2333759
5729162
2026-07-20T02:51:48Z
Octahedron80
267
สร้างหน้าด้วย "{{auto cat|เอสวาตินี|เซาท์แอฟริกา|เลซูทู|โมซัมบิก}}"
5729162
wikitext
text/x-wiki
{{auto cat|เอสวาตินี|เซาท์แอฟริกา|เลซูทู|โมซัมบิก}}
iljdmpi5lgs6zm6ocipbpku740cks68
5729164
5729162
2026-07-20T02:52:25Z
Octahedron80
267
5729164
wikitext
text/x-wiki
{{auto cat|เอสวาตินี|เซาท์แอฟริกา|เลโซโท|โมซัมบิก}}
7j9yrik0p79my80c51ijh2cb25x7l0t
atmet
0
2333761
5729180
2026-07-20T03:12:23Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729180
wikitext
text/x-wiki
== ภาษาเยอรมัน ==
=== การออกเสียง ===
* {{audio|de|De-atmet.ogg|a=<<Germany>> (<<Berlin>>)}}
=== คำกริยา ===
{{head|de|รูปกริยา}}
# {{verb form of|de|atmen||3|s|pres|;|2|p|pres|;|2|p|sub|I|;|p|imp}}
5uhh4nfu6946xyjcacvgyr8rr2feypu
atmete
0
2333762
5729181
2026-07-20T03:12:26Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729181
wikitext
text/x-wiki
== ภาษาเยอรมัน ==
=== การออกเสียง ===
* {{audio|de|De-atmete.ogg|a=<<Germany>> (<<Berlin>>)}}
=== คำกริยา ===
{{head|de|รูปกริยา}}
# {{verb form of|de|atmen||1//3|s|pret|;|1//3|s|sub|II}}
54kuevgyai8r0ok3t2zi6zzaxelk8sl
geatmet
0
2333763
5729182
2026-07-20T03:12:29Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729182
wikitext
text/x-wiki
== ภาษาเยอรมัน ==
=== การออกเสียง ===
* {{audio|de|De-geatmet.ogg|a=<<Germany>> (<<Berlin>>)}}
=== รูปกริยาขยาย ===
{{head|de|รูปกริยาขยายอดีตกาล}}
# {{past participle of|de|atmen}}
lqngs9m4irk2ftc2ssjb14n856vre0x
atmend
0
2333764
5729183
2026-07-20T03:13:07Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729183
wikitext
text/x-wiki
== ภาษาเยอรมัน ==
=== การออกเสียง ===
* {{audio|de|De-atmend.ogg|a=<<Germany>> (<<Berlin>>)}}
=== รูปกริยาขยาย ===
{{head|de|รูปกริยาขยายปัจจุบันกาล}}
# {{present participle of|de|atmen}}
=== คำคุณศัพท์ ===
{{de-adj}}
# [[ที่]][[หายใจ]][[อยู่]]
==== การผันรูป ====
{{de-adecl}}
5m4ssnx1e8fvbk1chpwmheqzpqddhy8
atme
0
2333765
5729184
2026-07-20T03:13:11Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729184
wikitext
text/x-wiki
== ภาษาเยอรมัน ==
=== การออกเสียง ===
* {{audio|de|De-atme.ogg|a=<<Germany>> (<<Berlin>>)}}
=== คำกริยา ===
{{head|de|รูปกริยา}}
# {{verb form of|de|atmen||1|s|pres|;|1//3|s|sub|I|;|s|imp}}
h9f88d3msegu1rb0luya422gavokkpy
atmest
0
2333766
5729185
2026-07-20T03:13:14Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729185
wikitext
text/x-wiki
== ภาษาเยอรมัน ==
=== การออกเสียง ===
* {{audio|de|De-atmest.ogg|a=<<Germany>> (<<Berlin>>)}}
=== คำกริยา ===
{{head|de|รูปกริยา}}
# {{verb form of|de|atmen||2|s|pres|;|2|s|sub|I}}
dbovalfvdvs2d28z5mnwftbu7gcrkzc
atmender
0
2333767
5729187
2026-07-20T03:13:23Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729187
wikitext
text/x-wiki
== ภาษาเยอรมัน ==
=== การออกเสียง ===
* {{audio|de|De-atmender.ogg|a=<<Germany>> (<<Berlin>>)}}
=== คำคุณศัพท์ ===
{{head|de|รูปคุณศัพท์}}
# {{de-adj form of|atmend}}
opuwczpsfb8ew7xttppoqx48p8n91fw
atmenden
0
2333768
5729188
2026-07-20T03:13:40Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729188
wikitext
text/x-wiki
== ภาษาเยอรมัน ==
=== การออกเสียง ===
* {{audio|de|De-atmenden.ogg|a=<<Germany>> (<<Berlin>>)}}
=== คำคุณศัพท์ ===
{{head|de|รูปคุณศัพท์}}
# {{de-adj form of|atmend}}
9rs57t4toaarpdoy6mtgv58kahpej1e
atmendem
0
2333769
5729189
2026-07-20T03:13:43Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729189
wikitext
text/x-wiki
== ภาษาเยอรมัน ==
=== การออกเสียง ===
* {{audio|de|De-atmendem.ogg|a=<<Germany>> (<<Berlin>>)}}
=== คำคุณศัพท์ ===
{{head|de|รูปคุณศัพท์}}
# {{de-adj form of|atmend}}
cywlq5fbxzmljvyelomqrxiniaib7b8
atmende
0
2333770
5729190
2026-07-20T03:13:46Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729190
wikitext
text/x-wiki
== ภาษาเยอรมัน ==
=== การออกเสียง ===
* {{audio|de|De-atmende.ogg|a=<<Germany>> (<<Berlin>>)}}
=== คำคุณศัพท์ ===
{{head|de|รูปคุณศัพท์}}
# {{de-adj form of|atmend}}
6pgtmfc6usl1qt2zr16drvtsoodvj4l
atmendes
0
2333771
5729191
2026-07-20T03:13:50Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729191
wikitext
text/x-wiki
== ภาษาเยอรมัน ==
=== การออกเสียง ===
* {{audio|de|De-atmendes.ogg|a=<<Germany>> (<<Berlin>>)}}
=== คำคุณศัพท์ ===
{{head|de|รูปคุณศัพท์}}
# {{de-adj form of|atmend}}
r5s8wtm9xs10k6wws11byohrn6a70s3
atmetest
0
2333772
5729193
2026-07-20T03:14:20Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729193
wikitext
text/x-wiki
== ภาษาเยอรมัน ==
=== การออกเสียง ===
* {{audio|de|De-atmetest.ogg|a=<<Germany>> (<<Berlin>>)}}
=== คำกริยา ===
{{head|de|รูปกริยา}}
# {{verb form of|de|atmen||2|s|pret|;|2|s|sub|II}}
2xlcesbutjtphsxwwe95yrggp2dvfdx
atmeten
0
2333773
5729194
2026-07-20T03:14:24Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729194
wikitext
text/x-wiki
== ภาษาเยอรมัน ==
=== การออกเสียง ===
* {{audio|de|De-atmeten.ogg|a=<<Germany>> (<<Berlin>>)}}
=== คำกริยา ===
{{head|de|รูปกริยา}}
# {{verb form of|de|atmen||1//3|p|pret|;|1//3|p|sub|II}}
1ia5yal907cm13glap4ztt8l5iwwots
atmetet
0
2333774
5729195
2026-07-20T03:14:28Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729195
wikitext
text/x-wiki
== ภาษาเยอรมัน ==
=== การออกเสียง ===
* {{audio|de|De-atmetet.ogg|a=<<Germany>> (<<Berlin>>)}}
=== คำกริยา ===
{{head|de|รูปกริยา}}
# {{verb form of|de|atmen||2|p|pret|;|2|p|sub|II}}
t237634arav9n2qyw6zviqeqv9ejuck
ᨧᩢ᩠ᨠᨡᩩ
0
2333776
5729214
2026-07-20T03:49:44Z
Alifshinobi
397
สร้างหน้าด้วย "== ภาษาคำเมือง == === รูปแบบอื่น === {{nod-alt|l=จักขุ|s=จั๋กขุ๋}} === การออกเสียง === * {{IPA|nod|/t͡ɕak˨˦.xuʔ˨˦/|a=เชียงใหม่}} === คำนาม === {{nod-noun|ᨲ᩠ᩅᩫ}} # [[ตั๊กแตน]][[สีเขียว]][[ชนิด]][[หนึ่ง]] === อ้างอิง === {{รายการอ้างอิ..."
5729214
wikitext
text/x-wiki
== ภาษาคำเมือง ==
=== รูปแบบอื่น ===
{{nod-alt|l=จักขุ|s=จั๋กขุ๋}}
=== การออกเสียง ===
* {{IPA|nod|/t͡ɕak˨˦.xuʔ˨˦/|a=เชียงใหม่}}
=== คำนาม ===
{{nod-noun|ᨲ᩠ᩅᩫ}}
# [[ตั๊กแตน]][[สีเขียว]][[ชนิด]][[หนึ่ง]]
=== อ้างอิง ===
{{รายการอ้างอิง}}
* ''พจนานุกรมภาษาล้านนา = The Lanna dictionary'' (พิมพ์ครั้งที่ 2). (พ.ศ. 2550). เชียงใหม่: สถาบันภาษา ศิลปะและวัฒนธรรม มหาวิทยาลัยราชภัฏเชียงใหม่.
{{topics|nod|แมลง}}
329mzrpjxdyxysjq5d56veay0gvsksn
abandonando
0
2333777
5729218
2026-07-20T04:00:08Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729218
wikitext
text/x-wiki
== ภาษากาลิเซีย ==
=== คำกริยา ===
{{head|gl|รูปกริยาเป็นนาม}}
# {{gl-verb form of|abandonar}}
== ภาษาโปรตุเกส ==
=== การออกเสียง ===
{{pt-IPA}}
* {{hyph|pt|a|ban|do|nan|do}}
=== คำกริยา ===
{{head|pt|รูปกริยาเป็นนาม}}
# {{pt-verb form of|abandonar}}
== ภาษาสเปน ==
=== การออกเสียง ===
{{es-pr}}
=== คำกริยา ===
{{head|es|รูปกริยาเป็นนาม}}
# {{es-verb form of|abandonar}}
== ภาษาอัสตูเรียส ==
=== คำกริยา ===
{{head|ast|รูปกริยา}}
# {{inflection of|ast|abandonar||gerund}}
4fi9wrht6m8nwmfobycj07x3l6lze0c
cocinando
0
2333778
5729219
2026-07-20T04:00:40Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729219
wikitext
text/x-wiki
== ภาษาสเปน ==
=== คำกริยา ===
{{head|es|รูปกริยาเป็นนาม}}
# {{es-verb form of|cocinar}}
3abb610uhifo0mvt3bjpueq124hwr50
enseño
0
2333779
5729220
2026-07-20T04:01:09Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729220
wikitext
text/x-wiki
== ภาษาสเปน ==
=== การออกเสียง ===
{{es-pr}}
=== รากศัพท์ 1 ===
{{ety|es|:deverbal|enseñar|text=+|tree=1}}
==== คำนาม ====
{{es-noun|m}}
# {{lb|es|rare}} [[teaching]]
=== รากศัพท์ 2 ===
==== คำกริยา ====
{{head|es|รูปกริยา}}
# {{es-verb form of|enseñar}}
=== อ่านเพิ่ม ===
* {{R:es:DRAE}}
== ภาษาอัสตูเรียส ==
=== คำกริยา ===
{{head|ast|รูปกริยา}}
# {{inflection of|ast|enseñar||1|s|pres|indc}}
bvq2yogduvey5gzh3k9323preo1m3o5
5729226
5729220
2026-07-20T04:02:18Z
Octahedron80
267
/* ภาษาสเปน */
5729226
wikitext
text/x-wiki
== ภาษาสเปน ==
=== การออกเสียง ===
{{es-pr}}
=== รากศัพท์ 1 ===
{{ety|es|:deverbal|enseñar|text=+|tree=1}}
==== คำนาม ====
{{es-noun|m}}
# {{lb|es|rare}} [[การสอน]]
=== รากศัพท์ 2 ===
==== คำกริยา ====
{{head|es|รูปกริยา}}
# {{es-verb form of|enseñar}}
=== อ่านเพิ่ม ===
* {{R:es:DRAE}}
== ภาษาอัสตูเรียส ==
=== คำกริยา ===
{{head|ast|รูปกริยา}}
# {{inflection of|ast|enseñar||1|s|pres|indc}}
elgro7f3ek9al46sli342s1j9t7ugq8
enseñado
0
2333780
5729222
2026-07-20T04:01:33Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729222
wikitext
text/x-wiki
== ภาษาสเปน ==
=== รากศัพท์ ===
รูปกริยาขยายอดีตกาลของ {{m|es|enseñar}}
=== การออกเสียง ===
{{es-pr}}
=== คำคุณศัพท์ ===
{{es-adj}}
# [[สุภาพ]]
=== รูปกริยาขยาย ===
{{es-past participle}}
# {{past participle of|es|enseñar}}
=== อ่านเพิ่ม ===
* {{R:es:DRAE}}
mt9fpb5hp3tikwetif1mk06usrr9mrj
enseñada
0
2333781
5729223
2026-07-20T04:01:47Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729223
wikitext
text/x-wiki
== ภาษาสเปน ==
=== การออกเสียง ===
{{es-pr}}
=== คำคุณศัพท์ ===
{{head|es|รูปคุณศัพท์|g=f}}
# {{adj form of|es|enseñado||f|s}}
=== รูปกริยาขยาย ===
{{head|es|รูปผันรูปกริยาขยายอดีตกาล|g=f-s}}
# {{feminine singular of|es|enseñado}}
== ภาษาอัสตูเรียส ==
=== รูปกริยาขยาย ===
{{head|ast|รูปผันรูปกริยาขยายอดีตกาล|g=f-s}}
# {{feminine singular of|ast|enseñáu}}
6ddk3d8sv2pb4zxknplg2v4lpn80rj4
enseñados
0
2333782
5729224
2026-07-20T04:01:51Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729224
wikitext
text/x-wiki
== ภาษาสเปน ==
=== การออกเสียง ===
{{es-pr}}
=== คำคุณศัพท์ ===
{{head|es|รูปคุณศัพท์|g=m-p}}
# {{adj form of|es|enseñado||m|p}}
=== รูปกริยาขยาย ===
{{head|es|รูปผันรูปกริยาขยายอดีตกาล|g=m-p}}
# {{masculine plural of|es|enseñado}}
ntesguxanptd02xf5awhymfx8n1m04k
enseñadas
0
2333783
5729225
2026-07-20T04:01:54Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729225
wikitext
text/x-wiki
== ภาษาสเปน ==
=== การออกเสียง ===
{{es-pr}}
=== คำคุณศัพท์ ===
{{head|es|รูปคุณศัพท์|g=f-p}}
# {{adj form of|es|enseñado||f|p}}
=== รูปกริยาขยาย ===
{{head|es|รูปผันรูปกริยาขยายอดีตกาล|g=f-p}}
# {{feminine plural of|es|enseñado}}
ckbcqao7j8hmau3w6iyb70ee2znp8zu
enseñando
0
2333784
5729227
2026-07-20T04:02:34Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729227
wikitext
text/x-wiki
== ภาษาสเปน ==
=== คำกริยา ===
{{head|es|รูปกริยาเป็นนาม}}
# {{es-verb form of|enseñar}}
== ภาษาอัสตูเรียส ==
=== คำกริยา ===
{{head|ast|รูปกริยา}}
# {{gerund of|ast|enseñar}}
ex8rrtu9un6cxxxs1q7sk9n912mliax
enseña
0
2333785
5729228
2026-07-20T04:04:55Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729228
wikitext
text/x-wiki
== ภาษาสเปน ==
=== การออกเสียง ===
{{es-pr}}
=== รากศัพท์ 1 ===
จาก{{der|es|la|īnsignia}} โดยอาจเป็นการสืบทอด หรือการยืมกึ่งเรียนรู้ (ซึ่งอย่างหลังเป็นไปได้มากกว่า)
==== คำนาม ====
{{es-noun|f}}
# [[ธงชาติ]], [[ธง]][[ประจำ]][[หน่วย]]
#: {{syn|es|pabellón}}
=== รากศัพท์ 2 ===
==== คำกริยา ====
{{head|es|รูปกริยา}}
# {{es-verb form of|enseñar}}
=== อ่านเพิ่ม ===
* {{R:es:DRAE}}
== ภาษาอัสตูเรียส ==
=== คำกริยา ===
{{head|ast|รูปกริยา}}
# {{inflection of|ast|enseñar||3|s|pres|indc}}
# {{inflection of|ast|enseñar||2|s|impr}}
8rtepspa5fr6t8ygrk4yqywdsclc5fx
ᨣᩫ᩠ᨯᩃ᩠ᨿ᩶ᩅ
0
2333786
5729229
2026-07-20T04:05:17Z
Alifshinobi
397
สร้างหน้าด้วย "== ภาษาคำเมือง == === รูปแบบอื่น === {{nod-alt|l=คดเลี้ยว|s=ก๊ดเล้ว}} === การออกเสียง === * {{IPA|nod|/kot˦˥.leːw˦˥/|a=เชียงใหม่}} === คำคุณศัพท์ === {{nod-adj}} # [[ไม่]][[ซื่อสัตย์]] === อ้างอิง === {{รายการอ้างอิง}} * ''พจนานุกร..."
5729229
wikitext
text/x-wiki
== ภาษาคำเมือง ==
=== รูปแบบอื่น ===
{{nod-alt|l=คดเลี้ยว|s=ก๊ดเล้ว}}
=== การออกเสียง ===
* {{IPA|nod|/kot˦˥.leːw˦˥/|a=เชียงใหม่}}
=== คำคุณศัพท์ ===
{{nod-adj}}
# [[ไม่]][[ซื่อสัตย์]]
=== อ้างอิง ===
{{รายการอ้างอิง}}
* ''พจนานุกรมภาษาล้านนา = The Lanna dictionary'' (พิมพ์ครั้งที่ 2). (พ.ศ. 2550). เชียงใหม่: สถาบันภาษา ศิลปะและวัฒนธรรม มหาวิทยาลัยราชภัฏเชียงใหม่.
2ufs7cn2j4mit2ncf6j7le9m7b77q9l
enseñare
0
2333787
5729230
2026-07-20T04:05:40Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729230
wikitext
text/x-wiki
== ภาษาสเปน ==
=== คำกริยา ===
{{head|es|รูปกริยา}}
# {{es-verb form of|enseñar}}
== ภาษาอัสตูเรียส ==
=== คำกริยา ===
{{head|ast|รูปกริยา}}
# {{inflection of|ast|enseñar||1|s|plup|indc}}
# {{inflection of|ast|enseñar||3|s|plup|indc}}
# {{inflection of|ast|enseñar||1|s|impf|subj}}
# {{inflection of|ast|enseñar||3|s|impf|subj}}
mgv5nyt005v2w0vvdn4io3p6i4sgv5f
enseñara
0
2333788
5729231
2026-07-20T04:05:44Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729231
wikitext
text/x-wiki
== ภาษาสเปน ==
=== คำกริยา ===
{{head|es|รูปกริยา}}
# {{es-verb form of|enseñar}}
== ภาษาอัสตูเรียส ==
=== คำกริยา ===
{{head|ast|รูปกริยา}}
# {{inflection of|ast|enseñar||1|s|plup|indc}}
# {{inflection of|ast|enseñar||3|s|plup|indc}}
# {{inflection of|ast|enseñar||1|s|impf|subj}}
# {{inflection of|ast|enseñar||3|s|impf|subj}}
mgv5nyt005v2w0vvdn4io3p6i4sgv5f
enseñares
0
2333789
5729232
2026-07-20T04:06:01Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729232
wikitext
text/x-wiki
== ภาษาสเปน ==
=== คำกริยา ===
{{head|es|รูปกริยา}}
# {{es-verb form of|enseñar}}
== ภาษาอัสตูเรียส ==
=== คำกริยา ===
{{head|ast|รูปกริยา}}
# {{inflection of|ast|enseñar||2|s|plup|indc}}
# {{inflection of|ast|enseñar||2|s|impf|subj}}
kafsvb3oo9cz5j9g3mitrg82g9bghpp
enseñaras
0
2333790
5729233
2026-07-20T04:06:05Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729233
wikitext
text/x-wiki
== ภาษาสเปน ==
=== คำกริยา ===
{{head|es|รูปกริยา}}
# {{es-verb form of|enseñar}}
== ภาษาอัสตูเรียส ==
=== คำกริยา ===
{{head|ast|รูปกริยา}}
# {{inflection of|ast|enseñar||2|s|plup|indc}}
# {{inflection of|ast|enseñar||2|s|impf|subj}}
kafsvb3oo9cz5j9g3mitrg82g9bghpp
enseñáremos
0
2333791
5729234
2026-07-20T04:06:10Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729234
wikitext
text/x-wiki
== ภาษาสเปน ==
=== คำกริยา ===
{{head|es|รูปกริยา}}
# {{es-verb form of|enseñar}}
== ภาษาอัสตูเรียส ==
=== คำกริยา ===
{{head|ast|รูปกริยา}}
# {{inflection of|ast|enseñar||1|p|plup|indc}}
# {{inflection of|ast|enseñar||1|p|impf|subj}}
eba9tzm7rmsgwew98npv6iwmfyk6gkh
enseñáramos
0
2333792
5729235
2026-07-20T04:06:14Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729235
wikitext
text/x-wiki
== ภาษาสเปน ==
=== คำกริยา ===
{{head|es|รูปกริยา}}
# {{es-verb form of|enseñar}}
== ภาษาอัสตูเรียส ==
=== คำกริยา ===
{{head|ast|รูปกริยา}}
# {{inflection of|ast|enseñar||1|p|plup|indc}}
# {{inflection of|ast|enseñar||1|p|impf|subj}}
eba9tzm7rmsgwew98npv6iwmfyk6gkh
enseñareis
0
2333793
5729236
2026-07-20T04:06:20Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729236
wikitext
text/x-wiki
== ภาษาสเปน ==
=== คำกริยา ===
{{head|es|รูปกริยา}}
# {{es-verb form of|enseñar}}
== ภาษาอัสตูเรียส ==
=== คำกริยา ===
{{head|ast|รูปกริยา}}
# {{inflection of|ast|enseñar||2|p|plup|indc}}
# {{inflection of|ast|enseñar||2|p|impf|subj}}
cgxea5ubu67resueznndvvk0klpixse
enseñarais
0
2333794
5729237
2026-07-20T04:06:25Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729237
wikitext
text/x-wiki
== ภาษาสเปน ==
=== คำกริยา ===
{{head|es|รูปกริยา}}
# {{es-verb form of|enseñar}}
== ภาษาอัสตูเรียส ==
=== คำกริยา ===
{{head|ast|รูปกริยา}}
# {{inflection of|ast|enseñar||2|p|plup|indc}}
# {{inflection of|ast|enseñar||2|p|impf|subj}}
cgxea5ubu67resueznndvvk0klpixse
enseñaren
0
2333795
5729238
2026-07-20T04:06:30Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729238
wikitext
text/x-wiki
== ภาษาสเปน ==
=== คำกริยา ===
{{head|es|รูปกริยา}}
# {{es-verb form of|enseñar}}
== ภาษาอัสตูเรียส ==
=== คำกริยา ===
{{head|ast|รูปกริยา}}
# {{inflection of|ast|enseñar||3|p|plup|indc}}
# {{inflection of|ast|enseñar||3|p|impf|subj}}
12v3cc2jn0kr7whgz7hbzbota6b3dxu
enseñaran
0
2333796
5729239
2026-07-20T04:06:35Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729239
wikitext
text/x-wiki
== ภาษาสเปน ==
=== คำกริยา ===
{{head|es|รูปกริยา}}
# {{es-verb form of|enseñar}}
== ภาษาอัสตูเรียส ==
=== คำกริยา ===
{{head|ast|รูปกริยา}}
# {{inflection of|ast|enseñar||3|p|plup|indc}}
# {{inflection of|ast|enseñar||3|p|impf|subj}}
12v3cc2jn0kr7whgz7hbzbota6b3dxu
enseñe
0
2333797
5729240
2026-07-20T04:06:53Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729240
wikitext
text/x-wiki
== ภาษาสเปน ==
=== คำกริยา ===
{{head|es|รูปกริยา}}
# {{es-verb form of|enseñar}}
== ภาษาอัสตูเรียส ==
=== คำกริยา ===
{{head|ast|รูปกริยา}}
# {{inflection of|ast|enseñar||1|s|pres|subj}}
# {{inflection of|ast|enseñar||3|s|pres|subj}}
qibcewkh4ssimjxpjvtj9gheezeioqs
enseñes
0
2333798
5729241
2026-07-20T04:06:57Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729241
wikitext
text/x-wiki
== ภาษาสเปน ==
=== คำกริยา ===
{{head|es|รูปกริยา}}
# {{es-verb form of|enseñar}}
== ภาษาอัสตูเรียส ==
=== คำกริยา ===
{{head|ast|รูปกริยา}}
# {{inflection of|ast|enseñar||2|s|pres|indc}}
# {{inflection of|ast|enseñar||2|s|pres|subj}}
8fswp65slct8khn3uw08j61sskruhn6
enseñas
0
2333799
5729242
2026-07-20T04:07:01Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729242
wikitext
text/x-wiki
== ภาษาสเปน ==
=== คำนาม ===
{{head|es|รูปนาม|g=f-p}}
# {{noun form of|es|enseña||p}}
=== คำกริยา ===
{{head|es|รูปกริยา}}
# {{es-verb form of|enseñar}}
== ภาษาอัสตูเรียส ==
=== คำกริยา ===
{{head|ast|รูปกริยา}}
# {{inflection of|ast|enseñar||2|s|pres|subj}}
qe95oyqwbx7dai7ltf8vamctqth017n
enseñemos
0
2333800
5729243
2026-07-20T04:07:06Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729243
wikitext
text/x-wiki
== ภาษาสเปน ==
=== คำกริยา ===
{{head|es|รูปกริยา}}
# {{es-verb form of|enseñar}}
== ภาษาอัสตูเรียส ==
=== คำกริยา ===
{{head|ast|รูปกริยา}}
# {{inflection of|ast|enseñar||1|p|pret|indc}}
# {{inflection of|ast|enseñar||1|p|pres|subj}}
jf1rb0iubq3eal8m0teigohhdkd0xzc
enseñen
0
2333801
5729244
2026-07-20T04:07:10Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729244
wikitext
text/x-wiki
== ภาษาสเปน ==
=== คำกริยา ===
{{head|es|รูปกริยา}}
# {{es-verb form of|enseñar}}
== ภาษาอัสตูเรียส ==
=== คำกริยา ===
{{head|ast|รูปกริยา}}
# {{inflection of|ast|enseñar||3|p|pres|indc}}
# {{inflection of|ast|enseñar||3|p|pres|subj}}
oem4k3yc4sffvk325ctyuba3jomcqkf
enseñaría
0
2333802
5729246
2026-07-20T04:07:27Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729246
wikitext
text/x-wiki
== ภาษาสเปน ==
=== คำกริยา ===
{{head|es|รูปกริยา}}
# {{es-verb form of|enseñar}}
== ภาษาอัสตูเรียส ==
=== คำกริยา ===
{{head|ast|รูปกริยา}}
# {{inflection of|ast|enseñar||1|s|cond}}
# {{inflection of|ast|enseñar||3|s|cond}}
8f5g6xkz3i79u2f7wcsxitk9mddwi1f
enseñaba
0
2333803
5729247
2026-07-20T04:07:31Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729247
wikitext
text/x-wiki
== ภาษาสเปน ==
=== คำกริยา ===
{{head|es|รูปกริยา}}
# {{es-verb form of|enseñar}}
== ภาษาอัสตูเรียส ==
=== คำกริยา ===
{{head|ast|รูปกริยา}}
# {{inflection of|ast|enseñar||1|s|impf|indc}}
# {{inflection of|ast|enseñar||3|s|impf|indc}}
aou3s5iaep2c33gybiwm5b7qmh51bd8
enseñáu
0
2333804
5729248
2026-07-20T04:07:47Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729248
wikitext
text/x-wiki
== ภาษาอัสตูเรียส ==
=== รูปกริยาขยาย ===
{{ast-pp|enseñ}}
# {{past participle of|ast|enseñar}}
h5814f3z2lku8isxcvvmg8dc2gswwor
enseñao
0
2333805
5729249
2026-07-20T04:07:52Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729249
wikitext
text/x-wiki
== ภาษาอัสตูเรียส ==
=== รูปกริยาขยาย ===
{{head|ast|รูปผันรูปกริยาขยายอดีตกาล|g=n}}
# {{neuter singular of|ast|enseñáu}}
i4ix4xx8otkdrtfoisggikud2xyqz8u
enseñaos
0
2333806
5729250
2026-07-20T04:07:57Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729250
wikitext
text/x-wiki
== ภาษาสเปน ==
=== คำกริยา ===
{{head|es|รูปกริยา}}
# {{es-verb form of|enseñar}}
== ภาษาอัสตูเรียส ==
=== รูปกริยาขยาย ===
{{head|ast|รูปผันรูปกริยาขยายอดีตกาล|g=m-p}}
# {{masculine plural of|ast|enseñáu}}
569fw495c14pvbm7ui7ref9mn0k64jf
enseñaes
0
2333807
5729251
2026-07-20T04:08:00Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729251
wikitext
text/x-wiki
== ภาษาอัสตูเรียส ==
=== รูปกริยาขยาย ===
{{head|ast|รูปผันรูปกริยาขยายอดีตกาล|g=f-p}}
# {{feminine plural of|ast|enseñáu}}
01qwe6z1vt94lrd1ahnhrpuhgqli4bl
cocines
0
2333809
5729257
2026-07-20T04:18:28Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729257
wikitext
text/x-wiki
== ภาษาสเปน ==
=== คำกริยา ===
{{head|es|รูปกริยา}}
# {{es-verb form of|cocinar}}
== ภาษาอัสตูเรียส ==
=== คำนาม ===
{{head|ast|รูปนาม}}
# {{plural of|ast|cocina}}
shysxey1q8vox08m3ke707gw7aepdh3
cocinas
0
2333810
5729264
2026-07-20T04:28:23Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729264
wikitext
text/x-wiki
== ภาษาสเปน ==
=== การออกเสียง ===
{{es-pr}}
=== คำนาม ===
{{head|es|รูปนาม|g=f-p}}
# {{noun form of|es|cocina||p}}
=== คำกริยา ===
{{head|es|รูปกริยา}}
# {{es-verb form of|cocinar}}
7qfh6rd43azzhbh3pn5v55fyc2d3kh8
abandonas
0
2333811
5729265
2026-07-20T05:09:30Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729265
wikitext
text/x-wiki
== ภาษากาลิเซีย ==
=== คำกริยา ===
{{head|gl|รูปกริยา}}
# {{gl-verb form of|abandonar}}
== ภาษาโปรตุเกส ==
=== การออกเสียง ===
{{pt-IPA|abandô*nas}}
* {{hyph|pt|a|ban|do|nas}}
=== คำกริยา ===
{{head|pt|รูปกริยา}}
# {{pt-verb form of|abandonar}}
== ภาษาสเปน ==
=== การออกเสียง ===
{{es-pr|+<audio:LL-Q1321 (spa)-AdrianAbdulBaha-abandonas.wav<a:Colombia>>}}
=== คำกริยา ===
{{head|es|รูปกริยา}}
# {{es-verb form of|abandonar}}
== ภาษาอีโด ==
=== การออกเสียง ===
{{io-IPA}}
=== คำกริยา ===
{{head|io|รูปกริยา}}
# {{io-form of|abandon}}
== ภาษาเอสเปรันโต ==
=== การออกเสียง ===
{{eo-pr}}
=== คำกริยา ===
{{eo-head}}
# {{eo-form of|abandon|as}}
icxmysezvj3t04tjhdnqx4tni5ih2ev
abandonás
0
2333812
5729266
2026-07-20T05:09:35Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729266
wikitext
text/x-wiki
== ภาษาฟาลา ==
=== คำคุณศัพท์ ===
{{head|fax|รูปคุณศัพท์|g=f-p}}
# {{adj form of|fax|abandonau||f|p}}
=== รูปกริยาขยาย ===
{{head|fax|รูปผันรูปกริยาขยายอดีตกาล|g=f-p}}
# {{feminine plural of|fax|abandonau}}
== ภาษาสเปน ==
=== คำกริยา ===
{{head|es|รูปกริยา}}
# {{es-verb form of|abandonar}}
116iq9fvcitzmzl00wlesrknmc45l20
abandonamos
0
2333813
5729267
2026-07-20T05:10:28Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729267
wikitext
text/x-wiki
== ภาษากาลิเซีย ==
=== คำกริยา ===
{{head|gl|รูปกริยา}}
# {{gl-verb form of|abandonar}}
== ภาษาโปรตุเกส ==
=== การออกเสียง ===
{{pt-IPA}}
* {{hyph|pt|a|ban|do|na|mos}}
=== คำกริยา ===
{{head|pt|รูปกริยา}}
# {{pt-verb form of|abandonar}}
== ภาษาสเปน ==
=== การออกเสียง ===
{{es-pr|+<audio:LL-Q1321 (spa)-Marreromarco-abandonamos.wav<a:Venezuela>>}}
=== คำกริยา ===
{{head|es|รูปกริยา}}
# {{es-verb form of|abandonar}}
c0vwvfqyn7xk4tat36lyz0lwhda1xrf
abandonáis
0
2333814
5729268
2026-07-20T05:10:34Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729268
wikitext
text/x-wiki
== ภาษาสเปน ==
=== การออกเสียง ===
{{es-pr|+<audio:LL-Q1321 (spa)-Marreromarco-abandonáis.wav<a:Venezuela>>}}
=== คำกริยา ===
{{head|es|รูปกริยา}}
# {{es-verb form of|abandonar}}
== ภาษาอัสตูเรียส ==
=== การออกเสียง ===
{{ast-pr}}
=== คำกริยา ===
{{head|ast|รูปกริยา}}
# {{inflection of|ast|abandonar||2|p|pres|ind}}
r1r6a4xn7jush59c0jbogzrz10lso8a
abandonan
0
2333815
5729269
2026-07-20T05:10:39Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729269
wikitext
text/x-wiki
== ภาษากาลิเซีย ==
=== คำกริยา ===
{{head|gl|รูปกริยา}}
# {{gl-verb form of|abandonar}}
== ภาษาสเปน ==
=== การออกเสียง ===
{{es-pr|+<audio:LL-Q1321 (spa)-Marreromarco-abandonan.wav<a:Venezuela>>}}
=== คำกริยา ===
{{head|es|รูปกริยา}}
# {{es-verb form of|abandonar}}
6rqbnsu2kz5b4kf4xhxg9zg59bqxjrd
abandonaste
0
2333816
5729270
2026-07-20T05:10:56Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729270
wikitext
text/x-wiki
== ภาษากาลิเซีย ==
=== คำกริยา ===
{{head|gl|รูปกริยา}}
# {{gl-reinteg-verb form of|abandonar}}
== ภาษาโปรตุเกส ==
=== การออกเสียง ===
{{pt-IPA}}
* {{hyph|pt|a|ban|do|nas|te}}
=== คำกริยา ===
{{head|pt|รูปกริยา}}
# {{pt-verb form of|abandonar}}
== ภาษาสเปน ==
=== การออกเสียง ===
{{es-pr}}
=== คำกริยา ===
{{head|es|รูปกริยา}}
# {{es-verb form of|abandonar}}
mb8o41wfa7v9xi5vtjpzia4jiv821nw
abandonó
0
2333817
5729271
2026-07-20T05:11:00Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729271
wikitext
text/x-wiki
== ภาษาสเปน ==
=== การออกเสียง ===
{{es-pr|+<audio:LL-Q1321 (spa)-Marreromarco-abandonó.wav<a:Venezuela>>}}
=== คำกริยา ===
{{head|es|รูปกริยา}}
# {{es-verb form of|abandonar}}
tct652k9pz0svnndq0k2lsig6ndratx
abandonarás
0
2333818
5729272
2026-07-20T05:11:07Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729272
wikitext
text/x-wiki
== ภาษากาลิเซีย ==
=== คำกริยา ===
{{head|gl|รูปกริยา}}
# {{gl-verb form of|abandonar}}
== ภาษาโปรตุเกส ==
=== การออกเสียง ===
{{pt-IPA}}
* {{hyph|pt|a|ban|do|na|rás}}
=== คำกริยา ===
{{head|pt|รูปกริยา}}
# {{pt-verb form of|abandonar}}
== ภาษาสเปน ==
=== การออกเสียง ===
{{es-pr}}
=== คำกริยา ===
{{head|es|รูปกริยา}}
# {{es-verb form of|abandonar}}
bp3binvqnjvpci4c0e2nu526qkrv0un
abandonará
0
2333819
5729273
2026-07-20T05:11:13Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729273
wikitext
text/x-wiki
== ภาษากาลิเซีย ==
=== คำกริยา ===
{{head|gl|รูปกริยา}}
# {{gl-verb form of|abandonar}}
== ภาษาโปรตุเกส ==
=== การออกเสียง ===
{{pt-IPA}}
* {{hyphenation|pt|a|ban|do|na|rá}}
=== คำกริยา ===
{{head|pt|รูปกริยา}}
# {{pt-verb form of|abandonar}}
== ภาษาสเปน ==
=== การออกเสียง ===
{{es-pr}}
=== คำกริยา ===
{{head|es|รูปกริยา}}
# {{es-verb form of|abandonar}}
gx2nt7th8caxi7dpwqfkpc2k46u2k7z
abandonaremos
0
2333820
5729274
2026-07-20T05:11:19Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729274
wikitext
text/x-wiki
== ภาษากาลิเซีย ==
=== คำกริยา ===
{{head|gl|รูปกริยา}}
# {{gl-verb form of|abandonar}}
== ภาษาโปรตุเกส ==
=== การออกเสียง ===
{{pt-IPA}}
* {{hyph|pt|a|ban|do|na|re|mos}}
=== คำกริยา ===
{{head|pt|รูปกริยา}}
# {{pt-verb form of|abandonar}}
== ภาษาสเปน ==
=== การออกเสียง ===
{{es-pr}}
=== คำกริยา ===
{{head|es|รูปกริยา}}
# {{es-verb form of|abandonar}}
1cap9x08m7l05tgcu7wtsqcek8l786h
abandonaríamos
0
2333821
5729275
2026-07-20T05:11:25Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729275
wikitext
text/x-wiki
== ภาษากาลิเซีย ==
=== คำกริยา ===
{{head|gl|รูปกริยา}}
# {{gl-reinteg-verb form of|abandonar}}
== ภาษาโปรตุเกส ==
=== การออกเสียง ===
{{pt-IPA}}
* {{hyph|pt|a|ban|do|na|rí|a|mos}}
=== คำกริยา ===
{{head|pt|รูปกริยา}}
# {{pt-verb form of|abandonar}}
== ภาษาสเปน ==
=== การออกเสียง ===
{{es-pr}}
=== คำกริยา ===
{{head|es|รูปกริยา}}
# {{es-verb form of|abandonar}}
aoo2fl6tjbzvmg5di720nn9e7ui3v9c
abandonaríais
0
2333822
5729276
2026-07-20T05:11:30Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729276
wikitext
text/x-wiki
== ภาษากาลิเซีย ==
=== คำกริยา ===
{{head|gl|รูปกริยา}}
# {{gl-reinteg-verb form of|abandonar}}
== ภาษาสเปน ==
=== คำกริยา ===
{{head|es|รูปกริยา}}
# {{es-verb form of|abandonar}}
c90xasoc69y6450dortkaqljxbdibk9
abandonemos
0
2333823
5729277
2026-07-20T05:12:10Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729277
wikitext
text/x-wiki
== ภาษากาลิเซีย ==
=== คำกริยา ===
{{head|gl|รูปกริยา}}
# {{gl-verb form of|abandonar}}
== ภาษาโปรตุเกส ==
=== การออกเสียง ===
{{pt-IPA}}
* {{hyph|pt|a|ban|do|ne|mos}}
=== คำกริยา ===
{{head|pt|รูปกริยา}}
# {{pt-verb form of|abandonar}}
== ภาษาสเปน ==
=== การออกเสียง ===
{{es-pr}}
=== คำกริยา ===
{{head|es|รูปกริยา}}
# {{es-verb form of|abandonar}}
1bbnsz8k9a046dzljj59zakaivl7iu3
abandonara
0
2333824
5729278
2026-07-20T05:12:18Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729278
wikitext
text/x-wiki
== ภาษากาลิเซีย ==
=== คำกริยา ===
{{head|gl|รูปกริยา}}
# {{gl-verb form of|abandonar}}
== ภาษาโปรตุเกส ==
=== การออกเสียง ===
{{pt-IPA}}
* {{rhymes|pt|aɾɐ|s=5}}
* {{hyphenation|pt|a|ban|do|na|ra}}
=== คำกริยา ===
{{head|pt|รูปกริยา}}
# {{pt-verb form of|abandonar}}
== ภาษาสเปน ==
=== การออกเสียง ===
{{es-pr}}
=== คำกริยา ===
{{head|es|รูปกริยา}}
# {{es-verb form of|abandonar}}
== ภาษาอินเทอร์ลิงกวา ==
=== คำกริยา ===
{{head|ia|รูปกริยา}}
# {{ia-form of|abandon|ara}}
n9v7wdklxhw27eww3v9nqwsfonxgaxf
abandonaras
0
2333825
5729279
2026-07-20T05:12:24Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729279
wikitext
text/x-wiki
== ภาษากาลิเซีย ==
=== คำกริยา ===
{{head|gl|รูปกริยา}}
# {{gl-verb form of|abandonar}}
== ภาษาโปรตุเกส ==
=== การออกเสียง ===
{{pt-IPA}}
* {{hyph|pt|a|ban|do|na|ras}}
=== คำกริยา ===
{{head|pt|รูปกริยา}}
# {{pt-verb form of|abandonar}}
== ภาษาสเปน ==
=== การออกเสียง ===
{{es-pr}}
=== คำกริยา ===
{{head|es|รูปกริยา}}
# {{es-verb form of|abandonar}}
kbwyfwl25bku2yyqzxb54t9ry2rbwta
abandonáramos
0
2333826
5729280
2026-07-20T05:12:31Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729280
wikitext
text/x-wiki
== ภาษากาลิเซีย ==
=== คำกริยา ===
{{head|gl|รูปกริยา}}
# {{gl-reinteg-verb form of|abandonar}}
== ภาษาโปรตุเกส ==
=== การออกเสียง ===
{{pt-IPA}}
* {{hyph|pt|a|ban|do|ná|ra|mos}}
=== คำกริยา ===
{{head|pt|รูปกริยา}}
# {{pt-verb form of|abandonar}}
== ภาษาสเปน ==
=== การออกเสียง ===
{{es-pr}}
=== คำกริยา ===
{{head|es|รูปกริยา}}
# {{es-verb form of|abandonar}}
4i561ka1lof55o1jwmnt3qn448ulann
abandonase
0
2333827
5729281
2026-07-20T05:12:38Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729281
wikitext
text/x-wiki
== ภาษากาลิเซีย ==
=== คำกริยา ===
{{head|gl|รูปกริยา}}
# {{gl-verb form of|abandonar}}
== ภาษาโรมาเนีย ==
=== การออกเสียง ===
* {{IPA|ro|/abandoˈnase/}}
* {{rhyme|ro|ase|s=5}}
* {{hyph|ro|a|ban|do|ná|se}}
=== คำกริยา ===
{{head|ro|รูปกริยา}}
# {{verb form of|ro|abandona||3s|plup|ind}}
== ภาษาสเปน ==
=== การออกเสียง ===
{{es-pr|+<audio:LL-Q1321 (spa)-Marreromarco-abandonase.wav<a:Venezuela>>}}
=== คำกริยา ===
{{head|es|รูปกริยา}}
# {{es-verb form of|abandonar}}
aovphmv01qma0vl22s8hhciwcyticab
abandonare
0
2333828
5729282
2026-07-20T05:13:18Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729282
wikitext
text/x-wiki
== ภาษาโรมาเนีย ==
=== รูปแบบอื่น ===
* {{alt|ro|абандонаре||new cyrl}}
=== รากศัพท์ ===
จาก{{affix|ro|abandona|-re}}
=== การออกเสียง ===
* {{IPA|ro|/a.ban.doˈna.re/}}
* {{rhyme|ro|are|s=5}}
* {{hyph|ro|a|ban|do|ná|re}}
=== คำนาม ===
{{ro-noun|f|abandonări}}
# [[การทอดทิ้ง]], [[ผล]][[ของ]]การทอดลิ้ง
==== การผันรูป ====
{{ro-noun-f-e|abandonar|abandonăr}}
=== อ่านเพิ่ม ===
* {{R:DEX}}
== ภาษาสเปน ==
=== การออกเสียง ===
{{es-pr}}
=== คำกริยา ===
{{head|es|รูปกริยา}}
# {{es-verb form of|abandonar}}
== ภาษาอิตาลี ==
=== การออกเสียง ===
{{it-pr}}
=== คำกริยา ===
{{it-verb|a/ó}}
# {{tlb|it|obsolete}} {{alternative form of|it|abbandonare}}
==== การผันรูป ====
{{it-conj|a/ó}}
=== อ่านเพิ่ม ===
* {{R:it:Olivetti}}
ccetikb5q8jw8rt1taj2muaaij7h2al
abandonareis
0
2333829
5729283
2026-07-20T05:13:25Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729283
wikitext
text/x-wiki
== ภาษากาลิเซีย ==
=== คำกริยา ===
{{head|gl|รูปกริยา}}
# {{gl-reinteg-verb form of|abandonar}}
== ภาษาโปรตุเกส ==
=== การออกเสียง ===
{{pt-IPA}}
* {{hyph|pt|a|ban|do|na|reis}}
=== คำกริยา ===
{{head|pt|รูปกริยา}}
# {{pt-verb form of|abandonar}}
== ภาษาสเปน ==
=== การออกเสียง ===
{{es-pr}}
=== คำกริยา ===
{{head|es|รูปกริยา}}
# {{es-verb form of|abandonar}}
72gtbrun2h0kmmt94pv6ct1hc3nkxu4
abandonai
0
2333830
5729284
2026-07-20T05:13:53Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729284
wikitext
text/x-wiki
== ภาษากาลิเซีย ==
=== คำกริยา ===
{{head|gl|รูปกริยา}}
# {{gl-reinteg-verb form of|abandonar}}
== ภาษาโปรตุเกส ==
=== การออกเสียง ===
{{pt-IPA}}
* {{hyph|pt|a|ban|do|nai}}
=== คำกริยา ===
{{head|pt|รูปกริยา}}
# {{pt-verb form of|abandonar}}
== ภาษาโรมาเนีย ==
=== การออกเสียง ===
* {{IPA|ro|/abandoˈnaj/}}
* {{rhyme|ro|aj|s=4}}
* {{hyph|ro|a|ban|do|nái}}
=== คำกริยา ===
{{head|ro|รูปกริยา}}
# {{verb form of|ro|abandona||2s|impf|ind|;|1s|sim|perf|ind}}
8p9hs72l7ar57a2ljkdehjgybqlibp4
abandonato
0
2333831
5729285
2026-07-20T05:13:58Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729285
wikitext
text/x-wiki
== ภาษาอีโด ==
=== การออกเสียง ===
{{io-IPA}}
=== คำกริยา ===
{{io-part|noun}}
# {{io-form of|abandon}}
== ภาษาเอสเปรันโต ==
=== คำนาม ===
{{eo-head}}
# {{eo-form of|abandon|ato}}
nwyhbee8vzjqofzqvwglmrja0udl25j
abandonez
0
2333832
5729287
2026-07-20T05:16:42Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729287
wikitext
text/x-wiki
== ภาษาโรมาเนีย ==
=== การออกเสียง ===
* {{IPA|ro|/abandoˈnez/}}
* {{rhyme|ro|ez|s=4}}
* {{hyph|ro|a|ban|do|néz}}
=== คำกริยา ===
{{head|ro|รูปกริยา}}
# {{verb form of|ro|abandona||1|s|pres|ind//sub}}
== ภาษาอีโด ==
=== การออกเสียง ===
{{io-IPA}}
=== คำกริยา ===
{{head|io|รูปกริยา}}
# {{io-form of|abandon}}
ps567w3xjh3mk4amiid39hpt59z1t9w
abandonus
0
2333833
5729288
2026-07-20T05:16:50Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729288
wikitext
text/x-wiki
== ภาษาฟาลา ==
=== คำนาม ===
{{head|fax|รูปนาม|g=m-p}}
# {{plural of|fax|abandonu}}
== ภาษาอีโด ==
=== การออกเสียง ===
{{io-IPA}}
=== คำกริยา ===
{{head|io|รูปกริยา}}
# {{io-form of|abandon}}
== ภาษาเอสเปรันโต ==
=== การออกเสียง ===
{{eo-pr}}
=== คำกริยา ===
{{eo-head}}
# {{eo-form of|abandon|us}}
deap2lggu5hecvreo9o5e6ddn9i8u14
แม่แบบ:gl-reinteg-conj
10
2333834
5729290
2026-07-20T05:19:51Z
Octahedron80
267
นำเข้าจาก enwikt
5729290
wikitext
text/x-wiki
{{#invoke:gl-reinteg-verb|show}}<noinclude>{{documentation}}</noinclude>
co9i4p9txnp7tdcf5qnqow63pd38ui4
agradeces
0
2333835
5729303
2026-07-20T05:37:17Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729303
wikitext
text/x-wiki
== ภาษากาลิเซีย ==
=== คำกริยา ===
{{head|gl|รูปกริยา}}
# {{gl-verb form of|agradecer}}
== ภาษาโปรตุเกส ==
=== คำกริยา ===
{{head|pt|รูปกริยา}}
# {{pt-verb form of|agradecer}}
== ภาษาสเปน ==
=== การออกเสียง ===
{{es-pr}}
=== คำกริยา ===
{{head|es|รูปกริยา}}
# {{es-verb form of|agradecer}}
n78ssjs62ouqjp2gye6vd0n3xahzu9r
agradece
0
2333836
5729304
2026-07-20T05:37:23Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729304
wikitext
text/x-wiki
== ภาษากาลิเซีย ==
=== คำกริยา ===
{{head|gl|รูปกริยา}}
# {{gl-verb form of|agradecer}}
== ภาษาโปรตุเกส ==
=== คำกริยา ===
{{head|pt|รูปกริยา}}
# {{pt-verb form of|agradecer}}
== ภาษาสเปน ==
=== การออกเสียง ===
{{es-pr}}
=== คำกริยา ===
{{head|es|รูปกริยา}}
# {{es-verb form of|agradecer}}
n78ssjs62ouqjp2gye6vd0n3xahzu9r
agradecemos
0
2333837
5729305
2026-07-20T05:37:30Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729305
wikitext
text/x-wiki
== ภาษากาลิเซีย ==
=== คำกริยา ===
{{head|gl|รูปกริยา}}
# {{gl-verb form of|agradecer}}
== ภาษาโปรตุเกส ==
=== การออกเสียง ===
{{pt-IPA|agradecêmos}}
* {{hyph|pt|a|gra|de|ce|mos}}
=== คำกริยา ===
{{head|pt|รูปกริยา}}
# {{pt-verb form of|agradecer}}
== ภาษาสเปน ==
=== การออกเสียง ===
{{es-pr}}
=== คำกริยา ===
{{head|es|รูปกริยา}}
# {{es-verb form of|agradecer}}
6vnmgrpjvtani53r2g2vqaby6i9w93c
agradecíamos
0
2333838
5729307
2026-07-20T05:37:45Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729307
wikitext
text/x-wiki
== ภาษากาลิเซีย ==
=== คำกริยา ===
{{head|gl|รูปกริยา}}
# {{gl-reinteg-verb form of|agradecer}}
== ภาษาโปรตุเกส ==
=== คำกริยา ===
{{head|pt|รูปกริยา}}
# {{pt-verb form of|agradecer}}
== ภาษาสเปน ==
=== การออกเสียง ===
{{es-pr}}
=== คำกริยา ===
{{head|es|รูปกริยา}}
# {{es-verb form of|agradecer}}
3in8fn1968it9ek0vsmmfvz3vzzsq5c
agradecerás
0
2333839
5729308
2026-07-20T05:38:10Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729308
wikitext
text/x-wiki
== ภาษากาลิเซีย ==
=== คำกริยา ===
{{head|gl|รูปกริยา}}
# {{gl-verb form of|agradecer}}
== ภาษาโปรตุเกส ==
=== คำกริยา ===
{{head|pt|รูปกริยา}}
# {{pt-verb form of|agradecer}}
== ภาษาสเปน ==
=== การออกเสียง ===
{{es-pr}}
=== คำกริยา ===
{{head|es|รูปกริยา}}
# {{es-verb form of|agradecer}}
n78ssjs62ouqjp2gye6vd0n3xahzu9r
agradecerá
0
2333840
5729309
2026-07-20T05:38:16Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729309
wikitext
text/x-wiki
== ภาษากาลิเซีย ==
=== คำกริยา ===
{{head|gl|รูปกริยา}}
# {{gl-verb form of|agradecer}}
== ภาษาโปรตุเกส ==
=== คำกริยา ===
{{head|pt|รูปกริยา}}
# {{pt-verb form of|agradecer}}
== ภาษาสเปน ==
=== การออกเสียง ===
{{es-pr}}
=== คำกริยา ===
{{head|es|รูปกริยา}}
# {{es-verb form of|agradecer}}
n78ssjs62ouqjp2gye6vd0n3xahzu9r
agradeceremos
0
2333841
5729310
2026-07-20T05:38:22Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729310
wikitext
text/x-wiki
== ภาษากาลิเซีย ==
=== คำกริยา ===
{{head|gl|รูปกริยา}}
# {{gl-verb form of|agradecer}}
== ภาษาโปรตุเกส ==
=== คำกริยา ===
{{head|pt|รูปกริยา}}
# {{pt-verb form of|agradecer}}
== ภาษาสเปน ==
=== การออกเสียง ===
{{es-pr}}
=== คำกริยา ===
{{head|es|รูปกริยา}}
# {{es-verb form of|agradecer}}
n78ssjs62ouqjp2gye6vd0n3xahzu9r
agradeceríamos
0
2333842
5729312
2026-07-20T05:38:27Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729312
wikitext
text/x-wiki
== ภาษากาลิเซีย ==
=== คำกริยา ===
{{head|gl|รูปกริยา}}
# {{gl-reinteg-verb form of|agradecer}}
== ภาษาโปรตุเกส ==
=== คำกริยา ===
{{head|pt|รูปกริยา}}
# {{pt-verb form of|agradecer}}
== ภาษาสเปน ==
=== การออกเสียง ===
{{es-pr}}
=== คำกริยา ===
{{head|es|รูปกริยา}}
# {{es-verb form of|agradecer}}
3in8fn1968it9ek0vsmmfvz3vzzsq5c
แม่แบบ:ast-conj-cer
10
2333843
5729318
2026-07-20T05:43:42Z
Octahedron80
267
นำเข้าจาก enwikt
5729318
wikitext
text/x-wiki
{{ast-conj-table<!--
-->|infinitive={{{1}}}cer<!--
-->|gerundive=[[{{{1}}}ciendo]]<!--
-->|part_m=[[{{{1}}}cíu]]<!--
-->|part_f=[[{{{1}}}cida]]<!--
-->|part_n=[[{{{1}}}cío]]<!--
-->|part_m-p=[[{{{1}}}cíos]]<!--
-->|part_f-p=[[{{{1}}}cíes]]<!--
-->|pres_ind_1sg=[[{{{1}}}zo]]<!--
-->|pres_ind_2sg=[[{{{1}}}ces]]<!--
-->|pres_ind_3sg=[[{{{1}}}z]]<!--
-->|pres_ind_1pl=[[{{{1}}}cemos]]<!--
-->|pres_ind_2pl=[[{{{1}}}céis]]<!--
-->|pres_ind_3pl=[[{{{1}}}cen]]<!--
-->|impf_ind_1sg=[[{{{1}}}cía]]<!--
-->|impf_ind_2sg=[[{{{1}}}cíes]]<!--
-->|impf_ind_3sg=[[{{{1}}}cía]]<!--
-->|impf_ind_1pl=[[{{{1}}}cíemos]]<!--
-->|impf_ind_2pl=[[{{{1}}}cíeis]]<!--
-->|impf_ind_3pl=[[{{{1}}}cíen]]<!--
-->|pret_ind_1sg=[[{{{1}}}cí]]<!--
-->|pret_ind_2sg=[[{{{1}}}ciesti]]<!--
-->|pret_ind_3sg=[[{{{1}}}ció]]<!--
-->|pret_ind_1pl=[[{{{1}}}ciemos]]<!--
-->|pret_ind_2pl=[[{{{1}}}ciestis]]<!--
-->|pret_ind_3pl=[[{{{1}}}cieron]]<!--
-->|plup_ind_1sg=[[{{{1}}}ciere]]<!--
-->|plup_ind_2sg=[[{{{1}}}cieres]]<!--
-->|plup_ind_3sg=[[{{{1}}}ciere]]<!--
-->|plup_ind_1pl=[[{{{1}}}ciéremos]]<!--
-->|plup_ind_2pl=[[{{{1}}}ciereis]]<!--
-->|plup_ind_3pl=[[{{{1}}}cieren]]<!--
-->|futr_ind_1sg=[[{{{1}}}ceré]]<!--
-->|futr_ind_2sg=[[{{{1}}}cerás]]<!--
-->|futr_ind_3sg=[[{{{1}}}cerá]]<!--
-->|futr_ind_1pl=[[{{{1}}}ceremos]]<!--
-->|futr_ind_2pl=[[{{{1}}}ceréis]]<!--
-->|futr_ind_3pl=[[{{{1}}}cerán]]<!--
-->|cond_1sg=[[{{{1}}}cería]]<!--
-->|cond_2sg=[[{{{1}}}ceríes]]<!--
-->|cond_3sg=[[{{{1}}}cería]]<!--
-->|cond_1pl=[[{{{1}}}ceríemos]]/[[{{{1}}}ceríamos]]<!--
-->|cond_2pl=[[{{{1}}}ceríeis]]/[[{{{1}}}ceríais]]<!--
-->|cond_3pl=[[{{{1}}}ceríen]]<!--
-->|pres_sub_1sg=[[{{{1}}}za]]<!--
-->|pres_sub_2sg=[[{{{1}}}zas]]<!--
-->|pres_sub_3sg=[[{{{1}}}za]]<!--
-->|pres_sub_1pl=[[{{{1}}}zamos]]<!--
-->|pres_sub_2pl=[[{{{1}}}záis]]<!--
-->|pres_sub_3pl=[[{{{1}}}zan]]<!--
-->|impf_sub_1sg=[[{{{1}}}ciere]]<!--
-->|impf_sub_2sg=[[{{{1}}}cieres]]<!--
-->|impf_sub_3sg=[[{{{1}}}ciere]]<!--
-->|impf_sub_1pl=[[{{{1}}}ciéremos]]<!--
-->|impf_sub_2pl=[[{{{1}}}ciereis]]<!--
-->|impf_sub_3pl=[[{{{1}}}cieren]]<!--
-->|impr_2sg=[[{{{1}}}z]]<!--
-->|impr_2pl=[[{{{1}}}céi]]<!--
-->}}<!--
--><noinclude>{{documentation}}</noinclude>
fq6d4qhahhjr4b42kzs7rdb6qcswdqv
นางณี
0
2333845
5729326
2026-07-20T06:00:05Z
Alifshinobi
397
สร้างหน้าด้วย "== ภาษาคำเมือง == === การออกเสียง === * {{IPA|nod|/naːŋ˧˧.niː˧˧/|a=เชียงใหม่}} === คำนาม === {{nod-noun|ตัว|tl=1}} # {{altform|nod|ᨶᩣ᩠ᨦᨱᩦ|t=[[ชะนี]]}}"
5729326
wikitext
text/x-wiki
== ภาษาคำเมือง ==
=== การออกเสียง ===
* {{IPA|nod|/naːŋ˧˧.niː˧˧/|a=เชียงใหม่}}
=== คำนาม ===
{{nod-noun|ตัว|tl=1}}
# {{altform|nod|ᨶᩣ᩠ᨦᨱᩦ|t=[[ชะนี]]}}
77j0vanqtonst6pvfbg3n9jvplf7jv0
ᩋᩦ᩵ᩅᩩ᩠ᨿ
0
2333846
5729330
2026-07-20T06:07:05Z
Alifshinobi
397
เปลี่ยนทางหน้าไปยัง [[ᩅᩩ᩠ᨿ]]
5729330
wikitext
text/x-wiki
#เปลี่ยนทาง [[ᩅᩩ᩠ᨿ]]
h9m46rcfkx99ic5iw215ieugjg6zxme
ນາງນີ
0
2333847
5729333
2026-07-20T06:13:24Z
Alifshinobi
397
สร้างหน้าด้วย "== ภาษาลาว == === การออกเสียง === {{lo-pron|ນາງ-ນີ}} === คำนาม === {{lo-noun|ໂຕ}} # [[ชะนี]] #: {{syn|lo|ຊະນີ|ທະນີ}} === อ้างอิง === {{รายการอ้างอิง}} * ''SEAlang library Lao lexicography''. SEAlang Projects. http://sealang.net/lao/dictionary.htm"
5729333
wikitext
text/x-wiki
== ภาษาลาว ==
=== การออกเสียง ===
{{lo-pron|ນາງ-ນີ}}
=== คำนาม ===
{{lo-noun|ໂຕ}}
# [[ชะนี]]
#: {{syn|lo|ຊະນີ|ທະນີ}}
=== อ้างอิง ===
{{รายการอ้างอิง}}
* ''SEAlang library Lao lexicography''. SEAlang Projects. http://sealang.net/lao/dictionary.htm
rdl6jcw6462zrs91ag1zmj6d21jjktl
5729334
5729333
2026-07-20T06:14:03Z
Alifshinobi
397
/* ภาษาลาว */
5729334
wikitext
text/x-wiki
== ภาษาลาว ==
=== รากศัพท์ ===
ร่วมเชื้อสายกับ{{cog|nod|ᨶᩣ᩠ᨦᨱᩦ}}, {{cog|kkh|ᨶᩣ᩠ᨦᨱᩦ}}, {{cog|khb|ᦓᦱᧂᦓᦲ}}
=== การออกเสียง ===
{{lo-pron|ນາງ-ນີ}}
=== คำนาม ===
{{lo-noun|ໂຕ}}
# [[ชะนี]]
#: {{syn|lo|ຊະນີ|ທະນີ}}
=== อ้างอิง ===
{{รายการอ้างอิง}}
* ''SEAlang library Lao lexicography''. SEAlang Projects. http://sealang.net/lao/dictionary.htm
ssnp6bm6t9khobplkid1txks5vna4n3
agradecíades
0
2333848
5729336
2026-07-20T07:12:05Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729336
wikitext
text/x-wiki
== ภาษากาลิเซีย ==
=== คำกริยา ===
{{head|gl|รูปกริยา}}
# {{gl-reinteg-verb form of|agradecer}}
r4k8irk0ch74a6sf70o049dh4i7c6ar
agradecíais
0
2333849
5729337
2026-07-20T07:12:11Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729337
wikitext
text/x-wiki
== ภาษากาลิเซีย ==
=== คำกริยา ===
{{head|gl|รูปกริยา}}
# {{gl-reinteg-verb form of|agradecer}}
== ภาษาสเปน ==
=== คำกริยา ===
{{head|es|รูปกริยา}}
# {{es-verb form of|agradecer}}
f0460plwoehocnamoarcxmezn380b55
agradeceche
0
2333850
5729338
2026-07-20T07:12:15Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729338
wikitext
text/x-wiki
== ภาษากาลิเซีย ==
=== คำกริยา ===
{{head|gl|รูปกริยา}}
# {{gl-reinteg-verb form of|agradecer}}
r4k8irk0ch74a6sf70o049dh4i7c6ar
agradecêrom
0
2333851
5729339
2026-07-20T07:12:31Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729339
wikitext
text/x-wiki
== ภาษากาลิเซีย ==
=== คำกริยา ===
{{head|gl|รูปกริยา}}
# {{gl-reinteg-verb form of|agradecer}}
r4k8irk0ch74a6sf70o049dh4i7c6ar
agradecêrades
0
2333852
5729340
2026-07-20T07:12:36Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729340
wikitext
text/x-wiki
== ภาษากาลิเซีย ==
=== คำกริยา ===
{{head|gl|รูปกริยา}}
# {{gl-reinteg-verb form of|agradecer}}
r4k8irk0ch74a6sf70o049dh4i7c6ar
agradecêrais
0
2333853
5729341
2026-07-20T07:12:41Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729341
wikitext
text/x-wiki
== ภาษากาลิเซีย ==
=== คำกริยา ===
{{head|gl|รูปกริยา}}
# {{gl-reinteg-verb form of|agradecer}}
r4k8irk0ch74a6sf70o049dh4i7c6ar
agradecerám
0
2333854
5729342
2026-07-20T07:12:45Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729342
wikitext
text/x-wiki
== ภาษากาลิเซีย ==
=== คำกริยา ===
{{head|gl|รูปกริยา}}
# {{gl-reinteg-verb form of|agradecer}}
r4k8irk0ch74a6sf70o049dh4i7c6ar
agradeceríades
0
2333855
5729343
2026-07-20T07:12:50Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729343
wikitext
text/x-wiki
== ภาษากาลิเซีย ==
=== คำกริยา ===
{{head|gl|รูปกริยา}}
# {{gl-reinteg-verb form of|agradecer}}
r4k8irk0ch74a6sf70o049dh4i7c6ar
agradeceríais
0
2333856
5729344
2026-07-20T07:12:55Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729344
wikitext
text/x-wiki
== ภาษากาลิเซีย ==
=== คำกริยา ===
{{head|gl|รูปกริยา}}
# {{gl-reinteg-verb form of|agradecer}}
== ภาษาสเปน ==
=== คำกริยา ===
{{head|es|รูปกริยา}}
# {{es-verb form of|agradecer}}
f0460plwoehocnamoarcxmezn380b55
agradeçades
0
2333857
5729345
2026-07-20T07:13:09Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729345
wikitext
text/x-wiki
== ภาษากาลิเซีย ==
=== คำกริยา ===
{{head|gl|รูปกริยา}}
# {{gl-reinteg-verb form of|agradecer}}
r4k8irk0ch74a6sf70o049dh4i7c6ar
agradecêssedes
0
2333858
5729346
2026-07-20T07:13:14Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729346
wikitext
text/x-wiki
== ภาษากาลิเซีย ==
=== คำกริยา ===
{{head|gl|รูปกริยา}}
# {{gl-reinteg-verb form of|agradecer}}
r4k8irk0ch74a6sf70o049dh4i7c6ar
agradeciendo
0
2333859
5729352
2026-07-20T07:28:32Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729352
wikitext
text/x-wiki
== ภาษาสเปน ==
=== คำกริยา ===
{{head|es|รูปกริยาเป็นนาม}}
# {{es-verb form of|agradecer}}
qrxb8vuck0s5hgw7b93uqbkwlmve1bl
dormires
0
2333860
5729354
2026-07-20T07:32:44Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729354
wikitext
text/x-wiki
== ภาษากาตาลา ==
=== คำกริยา ===
{{head|ca|รูปกริยา}}
# {{ca-verb form of|dormir}}
== ภาษากาลิเซีย ==
=== คำกริยา ===
{{head|gl|รูปกริยา}}
# {{gl-reinteg-verb form of|dormir<u-o>}}
== ภาษาโปรตุเกส ==
=== คำกริยา ===
{{head|pt|รูปกริยา}}
# {{pt-verb form of|dormir<u-o>}}
== ภาษาละติน ==
=== คำกริยา ===
{{head|la|รูปกริยา|head=dormīrēs}}
# {{inflection of|la|dormiō||2|s|impf|actv|subj}}
74afe5skbdnigt176lr47o13fgf1mzz
dormirem
0
2333861
5729355
2026-07-20T07:32:56Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729355
wikitext
text/x-wiki
== ภาษากาตาลา ==
=== คำกริยา ===
{{head|ca|รูปกริยา}}
# {{ca-verb form of|dormir}}
== ภาษากาลิเซีย ==
=== คำกริยา ===
{{head|gl|รูปกริยา}}
# {{gl-reinteg-verb form of|dormir<u-o>}}
== ภาษาโปรตุเกส ==
=== คำกริยา ===
{{head|pt|รูปกริยา}}
# {{pt-verb form of|dormir<u-o>}}
== ภาษาละติน ==
=== คำกริยา ===
{{head|la|รูปกริยา|head=dormīrem}}
# {{inflection of|la|dormiō||1|s|impf|actv|subj}}
jr77hlix66kaoeqr1ndqcglw0mbx1o8
dormindo
0
2333862
5729356
2026-07-20T07:33:01Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729356
wikitext
text/x-wiki
== ภาษากาลิเซีย ==
=== คำกริยา ===
{{head|gl|รูปกริยาเป็นนาม}}
# {{gl-reinteg-verb form of|dormir<u-o>}}
== ภาษาโปรตุเกส ==
=== การออกเสียง ===
{{pt-IPA}}
=== คำกริยา ===
{{head|pt|รูปกริยาเป็นนาม}}
# {{pt-verb form of|dormir<u-o>}}
4v5etcn2geb01cdzii7aha25k58c2tz
dormidos
0
2333863
5729357
2026-07-20T07:33:18Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729357
wikitext
text/x-wiki
== ภาษาโปรตุเกส ==
=== รูปกริยาขยาย ===
{{head|pt|รูปผันรูปกริยาขยายอดีตกาล|g=m-p}}
# {{masculine plural of|pt|dormido}}
== ภาษาสเปน ==
=== การออกเสียง ===
{{es-pr}}
=== คำคุณศัพท์ ===
{{head|es|รูปคุณศัพท์|g=m-p}}
# {{adj form of|es|dormido||m|p}}
=== รูปกริยาขยาย ===
{{head|es|รูปผันรูปกริยาขยายอดีตกาล|g=m-p}}
# {{masculine plural of|es|dormido}}
gc605qpj2fajosy752tirx4ts8svi3t
dormimos
0
2333864
5729358
2026-07-20T07:33:23Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729358
wikitext
text/x-wiki
== ภาษากาลิเซีย ==
=== คำกริยา ===
{{head|gl|รูปกริยา}}
# {{gl-reinteg-verb form of|dormir<u-o>}}
== ภาษาโปรตุเกส ==
=== คำกริยา ===
{{head|pt|รูปกริยา}}
# {{pt-verb form of|dormir<u-o>}}
== ภาษาสเปน ==
=== คำกริยา ===
{{head|es|รูปกริยา}}
# {{es-verb form of|dormir<ue-u>}}
an2yvplmn3z2bx9hlm2ingb1ltc0hrh
durmo
0
2333865
5729359
2026-07-20T07:33:41Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729359
wikitext
text/x-wiki
== ภาษากาลิเซีย ==
=== คำกริยา ===
{{head|gl|รูปกริยา}}
# {{gl-verb form of|durmir<u-o>}}
# {{gl-reinteg-verb form of|dormir<u-o>}}
== ภาษาโปรตุเกส ==
=== การออกเสียง ===
{{pt-IPA}}
* {{hyphenation|pt|dur|mo}}
=== คำกริยา ===
{{head|pt|รูปกริยา}}
# {{pt-verb form of|dormir<u-o>}}
# {{pt-verb form of|durmir}}
rng7fvhfjpbyjimcpq31msxq12pyyal
dormia
0
2333866
5729360
2026-07-20T07:33:47Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729360
wikitext
text/x-wiki
== ภาษากาตาลา ==
=== การออกเสียง ===
* {{ca-IPA}}
* {{rhymes|ca|ia|s=3}}
=== คำกริยา ===
{{head|ca|รูปกริยา}}
# {{ca-verb form of|dormir}}
== ภาษากาลิเซีย ==
=== คำกริยา ===
{{head|gl|รูปกริยา}}
# {{gl-reinteg-verb form of|dormir<u-o>}}
== ภาษาโปรตุเกส ==
=== การออกเสียง ===
{{pt-IPA}}
=== คำกริยา ===
{{head|pt|รูปกริยา}}
# {{pt-verb form of|dormir<u-o>}}
3taj2gpf9mymbfoe1xk1ej9wsbqu3fn
dormias
0
2333867
5729361
2026-07-20T07:34:01Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729361
wikitext
text/x-wiki
== ภาษากาลิเซีย ==
=== คำกริยา ===
{{head|gl|รูปกริยา}}
# {{gl-reinteg-verb form of|dormir<u-o>}}
== ภาษาโปรตุเกส ==
=== คำกริยา ===
{{head|pt|รูปกริยา}}
# {{pt-verb form of|dormir<u-o>}}
== ภาษาละติน ==
=== คำกริยา ===
{{head|la|รูปกริยา|head=dormiās}}
# {{inflection of|la|dormiō||2|s|pres|actv|subj}}
nxz06dx702wpxcmhzwuqxl8whrz41yi
dormíamos
0
2333868
5729363
2026-07-20T07:34:07Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729363
wikitext
text/x-wiki
== ภาษากาลิเซีย ==
=== คำกริยา ===
{{head|gl|รูปกริยา}}
# {{gl-reinteg-verb form of|dormir<u-o>}}
== ภาษาโปรตุเกส ==
=== คำกริยา ===
{{head|pt|รูปกริยา}}
# {{pt-verb form of|dormir<u-o>}}
== ภาษาสเปน ==
=== คำกริยา ===
{{head|es|รูปกริยา}}
# {{es-verb form of|dormir<ue-u>}}
an2yvplmn3z2bx9hlm2ingb1ltc0hrh
dormiam
0
2333869
5729364
2026-07-20T07:34:12Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729364
wikitext
text/x-wiki
== ภาษากาลิเซีย ==
=== คำกริยา ===
{{head|gl|รูปกริยา}}
# {{gl-reinteg-verb form of|dormir<u-o>}}
== ภาษาโปรตุเกส ==
=== คำกริยา ===
{{head|pt|รูปกริยา}}
# {{pt-verb form of|dormir<u-o>}}
== ภาษาละติน ==
=== คำกริยา ===
{{head|la|รูปกริยา}}
# {{inflection of|la|dormiō||1|s|futr|actv|indc|;|1|s|pres|actv|subj}}
oza5gcrmkylmz21upslow0aux9qzxi5
dormiste
0
2333870
5729365
2026-07-20T07:34:31Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729365
wikitext
text/x-wiki
== ภาษากาลิเซีย ==
=== คำกริยา ===
{{head|gl|รูปกริยา}}
# {{gl-reinteg-verb form of|dormir<u-o>}}
== ภาษาโปรตุเกส ==
=== คำกริยา ===
{{head|pt|รูปกริยา}}
# {{pt-verb form of|dormir<u-o>}}
== ภาษาสเปน ==
=== คำกริยา ===
{{head|es|รูปกริยา}}
# {{es-verb form of|dormir<ue-u>}}
== ภาษาอิตาลี ==
=== คำกริยา ===
{{head|it|รูปกริยา}}
# {{inflection of|it|dormire||2|p|phis|;|2|p|impf|sub}}
=== คำสลับอักษร ===
* {{anagrams|it|a=deimorst|mordesti}}
o6trl98omtaejfc7nk3beckxtwa2bu2
dormiu
0
2333871
5729366
2026-07-20T07:34:39Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729366
wikitext
text/x-wiki
== ภาษากาตาลา ==
=== คำกริยา ===
{{head|ca|รูปกริยา}}
# {{ca-verb form of|dormir}}
== ภาษากาลิเซีย ==
=== คำกริยา ===
{{head|gl|รูปกริยา}}
# {{gl-reinteg-verb form of|dormir<u-o>}}
== ภาษาโปรตุเกส ==
=== การออกเสียง ===
{{pt-IPA}}
* {{rhymes|pt|iw|s=2}}
* {{hyph|pt|dor|miu}}
=== คำกริยา ===
{{head|pt|รูปกริยา}}
# {{pt-verb form of|dormir<u-o>}}
kkr3l0vmj7m0n6cwzwdcow4mb08xxnc
dormirei
0
2333872
5729367
2026-07-20T07:34:58Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729367
wikitext
text/x-wiki
== ภาษากาลิเซีย ==
=== คำกริยา ===
{{head|gl|รูปกริยา}}
# {{gl-reinteg-verb form of|dormir<u-o>}}
== ภาษาโปรตุเกส ==
=== คำกริยา ===
{{head|pt|รูปกริยา}}
# {{pt-verb form of|dormir<u-o>}}
== ภาษาอิตาลี ==
=== คำกริยา ===
{{head|it|รูปกริยา}}
# {{inflection of|it|dormire||1|s|cond}}
=== คำสลับอักษร ===
* {{anagrams|it|a=deiimorr|dirimerò|ridiremo}}
nfi3dr6l40iirad2kpc972ytxn4blqw
dormiremos
0
2333873
5729368
2026-07-20T07:35:04Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729368
wikitext
text/x-wiki
== ภาษากาลิเซีย ==
=== คำกริยา ===
{{head|gl|รูปกริยา}}
# {{gl-reinteg-verb form of|dormir<u-o>}}
== ภาษาโปรตุเกส ==
=== คำกริยา ===
{{head|pt|รูปกริยา}}
# {{pt-verb form of|dormir<u-o>}}
== ภาษาสเปน ==
=== คำกริยา ===
{{head|es|รูปกริยา}}
# {{es-verb form of|dormir<ue-u>}}
an2yvplmn3z2bx9hlm2ingb1ltc0hrh
dormiria
0
2333874
5729369
2026-07-20T07:35:11Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729369
wikitext
text/x-wiki
== ภาษากาตาลา ==
=== คำกริยา ===
{{head|ca|รูปกริยา}}
# {{ca-verb form of|dormir}}
== ภาษากาลิเซีย ==
=== คำกริยา ===
{{head|gl|รูปกริยา}}
# {{gl-reinteg-verb form of|dormir<u-o>}}
== ภาษาโปรตุเกส ==
=== คำกริยา ===
{{head|pt|รูปกริยา}}
# {{pt-verb form of|dormir<u-o>}}
cumemmby6433yi82ah4708j2crdoga3
dormiríamos
0
2333875
5729370
2026-07-20T07:35:16Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729370
wikitext
text/x-wiki
== ภาษากาลิเซีย ==
=== คำกริยา ===
{{head|gl|รูปกริยา}}
# {{gl-reinteg-verb form of|dormir<u-o>}}
== ภาษาโปรตุเกส ==
=== คำกริยา ===
{{head|pt|รูปกริยา}}
# {{pt-verb form of|dormir<u-o>}}
== ภาษาสเปน ==
=== คำกริยา ===
{{head|es|รูปกริยา}}
# {{es-verb form of|dormir<ue-u>}}
an2yvplmn3z2bx9hlm2ingb1ltc0hrh
durmas
0
2333876
5729371
2026-07-20T07:35:44Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729371
wikitext
text/x-wiki
== ภาษากาลิเซีย ==
=== คำกริยา ===
{{head|gl|รูปกริยา}}
# {{gl-verb form of|durmir<u-o>}}
# {{gl-reinteg-verb form of|dormir<u-o>}}
== ภาษาโปรตุเกส ==
=== คำกริยา ===
{{head|pt|รูปกริยา}}
# {{pt-verb form of|dormir<u-o>}}
# {{pt-verb form of|durmir}}
jrxxui0vxghwvfjsvda1kqph2gasmnd
durmamos
0
2333877
5729372
2026-07-20T07:35:49Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729372
wikitext
text/x-wiki
== ภาษากาลิเซีย ==
=== คำกริยา ===
{{head|gl|รูปกริยา}}
# {{gl-verb form of|durmir<u-o>}}
# {{gl-reinteg-verb form of|dormir<u-o>}}
== ภาษาโปรตุเกส ==
=== คำกริยา ===
{{head|pt|รูปกริยา}}
# {{pt-verb form of|dormir<u-o>}}
# {{pt-verb form of|durmir}}
== ภาษาสเปน ==
=== คำกริยา ===
{{head|es|รูปกริยา}}
# {{es-verb form of|dormir<ue-u>}}
ozqcm27s9u0q23f8sy77jwkdqcgzcex
durmais
0
2333878
5729373
2026-07-20T07:35:54Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729373
wikitext
text/x-wiki
== ภาษากาลิเซีย ==
=== คำกริยา ===
{{head|gl|รูปกริยา}}
# {{gl-reinteg-verb form of|dormir<u-o>}}
== ภาษาโปรตุเกส ==
=== คำกริยา ===
{{head|pt|รูปกริยา}}
# {{pt-verb form of|dormir<u-o>}}
# {{pt-verb form of|durmir}}
dll2hc04hl5t1bxsp97fo2ht8dcc20p
durmam
0
2333879
5729374
2026-07-20T07:35:59Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729374
wikitext
text/x-wiki
== ภาษากาลิเซีย ==
=== คำกริยา ===
{{head|gl|รูปกริยา}}
# {{gl-reinteg-verb form of|dormir<u-o>}}
== ภาษาโปรตุเกส ==
=== คำกริยา ===
{{head|pt|รูปกริยา}}
# {{pt-verb form of|dormir<u-o>}}
# {{pt-verb form of|durmir}}
dll2hc04hl5t1bxsp97fo2ht8dcc20p
durmir
0
2333880
5729376
2026-07-20T07:37:27Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729376
wikitext
text/x-wiki
== ภาษากาลิเซีย ==
=== รูปแบบอื่น ===
* {{alt|gl|dormir||reintegrationist}}
=== รากศัพท์ ===
{{etymon|gl|id=sleep|:inh|roa-opt:dormir|text=++|tree=1}}
=== การออกเสียง ===
{{gl-pr}}
* {{hyph|gl|dur|mir}}
=== คำกริยา ===
{{gl-verb|<u-o>}}
# {{lb|gl|intransitive}} [[นอนหลับ]]
==== การผันรูป ====
{{gl-conj|<u-o>}}
==== ลูกคำ ====
{{col|gl|adormecer|adormentar|adormiñar}}
=== อ้างอิง ===
* {{R:gl:DDLG}}
* {{R:gl:TILG}}
* {{R:TLPGP}}
* {{R:gl:DRAG}}
* {{R:gl:DIGALEGO}}
== ภาษากาลิเซีย-โปรตุเกสเก่า ==
=== คำกริยา ===
{{head|roa-opt|คำกริยา}}
# {{alternative form of|roa-opt|dormir}}
=== อ้างอิง ===
* {{R:roa-opt:DDGM}}
* {{R:roa-opt:CX|durm}}
* {{R:roa-opt:CX|dorm}}
== ภาษาโปรตุเกส ==
=== รากศัพท์ 1 ===
==== คำกริยา ====
{{pt-verb}}
# {{eye dialect of|pt|dormir}}
===== การผันรูป =====
{{pt-conj}}
=== รากศัพท์ 2 ===
==== คำกริยา ====
{{pt-verb}}
# {{obsolete form of|pt|dormir}}
===== การผันรูป =====
{{pt-conj}}
== ภาษาโรมานช์ ==
=== รูปแบบอื่น ===
* {{alt|rm|durmeir||Surmiran}}
=== รากศัพท์ ===
{{etymon|rm|id=sleep|:inh|la:dormiō<alt:dormīre>|text=++|tree=1}}
=== คำกริยา ===
{{rm-verb}}
# {{lb|rm|Rumantsch Grischun|Sursilvan|Sutsilvan|Puter|Vallader}} [[นอนหลับ]]
== ภาษาลาดิโน ==
=== รูปแบบอื่น ===
* {{alt|lad|dormir}}
=== รากศัพท์ ===
{{etymon|lad|id=sleep|:inh|osp:dormir|text=++|tree=1}}
=== คำกริยา ===
{{lad-verb|heb=דורמיר}}<ref name="Folkmasa">{{R:lad:Folkmasa}}</ref>
# {{lb|lad|intransitive}} [[นอนหลับ]]
#* {{quote-book|lad|author=Reuben Eliyahu Israel|title=Traducsion libera de las poezias ebraicas de Roş Aşana i Kipur|url=https://digitalcollections.lib.washington.edu/digital/collection/p16786coll3/id/4098|location=Craiova|publisher=Institutul Grafic, I. Samitca şi D. Baraş, Socieatate in Comandita|year=1910|page=5|pageurl=https://digitalcollections.lib.washington.edu/digital/collection/p16786coll3/id/4053|OCLC=1091680857|text=Ombre mortal, porke '''doermes'''? Es tiempo ke roghes i te coniores<br/>Az orasion, emplora el pardon del sinior de los siniores<br/>Antes ke tus diias se terminen, corijate de tus ovras piores<br/>El dio del sielo te aiudara, si onde el con prisa cores<br/>Fuie de revelios i malisias, pensa ke ai castigo i dolores<br/>Dio! cudia de tu poevlo Israel tus fideles i tus servidores|t=Mortal, why do you '''sleep'''? ’Tis time that you beg and complain. Pray, beg for the King of Kings’ forgiveness; before your days end, mend your worst deeds. The god of the sky shall help you, if you run hastily whither he {{q-g|is}}. Flee from felonies and wickednesses; worry that there is punishment and pains. God! Take care of your people: Israel, your faithful and your servants.}}
# {{lb|lad|reflexive}} [[ผล็อย]][[หลับ]]
=== อ้างอิง ===
<references/>
== ภาษาอัสตูเรียส ==
=== คำกริยา ===
{{head|ast|คำกริยา}}
# {{alternative form of|ast|dormir}}
=== อ่านเพิ่ม ===
* {{R:ast:DGLA|dormir}}
r8q8f8y6stybccxc02el3pr9pgcyons
durmi
0
2333881
5729377
2026-07-20T07:37:59Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729377
wikitext
text/x-wiki
== ภาษาครีโอลกาบูเวร์ดี ==
=== รากศัพท์ ===
{{etymon|kea|id=sleep|:inh|pt:dormir|text=++|tree=1}}
=== คำกริยา ===
{{head|kea|คำกริยา}}
# [[นอนหลับ]]
== ภาษาครีโอลกินี-บิสเซา ==
=== รากศัพท์ ===
{{etymon|pov|id=sleep|:inh|pt:dormir|text=++|tree=1}}
=== คำกริยา ===
{{head|pov|คำกริยา}}
# [[นอนหลับ]]
== Istro-Romanian ==
=== รากศัพท์ ===
{{etymon|ruo|id=sleep|:inh|la:dormiō<alt:dormīre>|text=++|tree=1}}
=== คำกริยา ===
{{head|ruo|คำกริยา}}
# [[นอนหลับ]]
== ภาษาโปรตุเกส ==
=== รากศัพท์ 1 ===
==== คำกริยา ====
{{head|pt|รูปสะกดผิด}}
# {{misspelling of|pt|dormi}}
=== รากศัพท์ 2 ===
==== คำกริยา ====
{{head|pt|รูปกริยา}}
# {{pt-verb form of|durmir}}
== ภาษาโรมาเนีย ==
=== คำกริยา ===
{{ro-verb|duarme|durmit}}
# {{alternative form of|ro|dormi}}
==== การผันรูป ====
{{ro-conj-i}}
tjad0qf1ohe8e08pzvdvsbuyto1bnr6
5729378
5729377
2026-07-20T07:39:40Z
Octahedron80
267
/* Istro-Romanian */
5729378
wikitext
text/x-wiki
== ภาษาครีโอลกาบูเวร์ดี ==
=== รากศัพท์ ===
{{etymon|kea|id=sleep|:inh|pt:dormir|text=++|tree=1}}
=== คำกริยา ===
{{head|kea|คำกริยา}}
# [[นอนหลับ]]
== ภาษาครีโอลกินี-บิสเซา ==
=== รากศัพท์ ===
{{etymon|pov|id=sleep|:inh|pt:dormir|text=++|tree=1}}
=== คำกริยา ===
{{head|pov|คำกริยา}}
# [[นอนหลับ]]
== ภาษาอิสโตร-โรมาเนีย ==
=== รากศัพท์ ===
{{etymon|ruo|id=sleep|:inh|la:dormiō<alt:dormīre>|text=++|tree=1}}
=== คำกริยา ===
{{head|ruo|คำกริยา}}
# [[นอนหลับ]]
== ภาษาโปรตุเกส ==
=== รากศัพท์ 1 ===
==== คำกริยา ====
{{head|pt|รูปสะกดผิด}}
# {{misspelling of|pt|dormi}}
=== รากศัพท์ 2 ===
==== คำกริยา ====
{{head|pt|รูปกริยา}}
# {{pt-verb form of|durmir}}
== ภาษาโรมาเนีย ==
=== คำกริยา ===
{{ro-verb|duarme|durmit}}
# {{alternative form of|ro|dormi}}
==== การผันรูป ====
{{ro-conj-i}}
niarv8qia0pwbbauhw4yhlp5oxtrsrx
5729379
5729378
2026-07-20T07:39:50Z
Octahedron80
267
เรียงลำดับหัวเรื่องภาษา
5729379
wikitext
text/x-wiki
== ภาษาครีโอลกาบูเวร์ดี ==
=== รากศัพท์ ===
{{etymon|kea|id=sleep|:inh|pt:dormir|text=++|tree=1}}
=== คำกริยา ===
{{head|kea|คำกริยา}}
# [[นอนหลับ]]
== ภาษาครีโอลกินี-บิสเซา ==
=== รากศัพท์ ===
{{etymon|pov|id=sleep|:inh|pt:dormir|text=++|tree=1}}
=== คำกริยา ===
{{head|pov|คำกริยา}}
# [[นอนหลับ]]
== ภาษาโปรตุเกส ==
=== รากศัพท์ 1 ===
==== คำกริยา ====
{{head|pt|รูปสะกดผิด}}
# {{misspelling of|pt|dormi}}
=== รากศัพท์ 2 ===
==== คำกริยา ====
{{head|pt|รูปกริยา}}
# {{pt-verb form of|durmir}}
== ภาษาโรมาเนีย ==
=== คำกริยา ===
{{ro-verb|duarme|durmit}}
# {{alternative form of|ro|dormi}}
==== การผันรูป ====
{{ro-conj-i}}
== ภาษาอิสโตร-โรมาเนีย ==
=== รากศัพท์ ===
{{etymon|ruo|id=sleep|:inh|la:dormiō<alt:dormīre>|text=++|tree=1}}
=== คำกริยา ===
{{head|ruo|คำกริยา}}
# [[นอนหลับ]]
by9qfgcpj6yc0nxlr0yxmhuimkzcbae
durmido
0
2333882
5729380
2026-07-20T07:40:26Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729380
wikitext
text/x-wiki
== ภาษากาลิเซีย ==
=== รูปกริยาขยาย ===
{{gl-pp}}
# {{past participle of|gl|durmir}}
== ภาษาครีโอลมาเก๊า ==
=== รากศัพท์ ===
จาก{{der|mzs|pt|dormido}}; {{surf|mzs|durmí|-ido}}
=== รูปกริยาขยาย ===
{{head|mzs|รูปกริยาขยายอดีตกาล}}
# {{past participle of|mzs|durmí}}: [[หลับ]][[อยู่]]
#: {{ux|mzs|Já ficâ '''durmido'''|t=He fell '''asleep'''|lit=He became '''asleep'''}}
=== อ้างอิง ===
* https://www.macaneselibrary.org/pub/english/uipatua.htm
== ภาษาโปรตุเกส ==
=== รูปกริยาขยาย ===
{{pt-pp}}
# {{past participle of|pt|durmir}}
0w3456c5cwqcjwbvjv04bdz1qt0xa3e
dormí
0
2333883
5729387
2026-07-20T07:51:12Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729387
wikitext
text/x-wiki
== ภาษากาตาลา ==
=== การออกเสียง ===
* {{ca-IPA}}
=== คำกริยา ===
{{head|ca|รูปกริยา}}
# {{ca-verb form of|dormir}}
== ภาษาสเปน ==
=== การออกเสียง ===
{{es-pr}}
=== คำกริยา ===
{{head|es|รูปกริยา}}
# {{es-verb form of|dormir<ue-u>}}
nbpbzao3llx7mbu5h3auryj4zms8ybw
dormiré
0
2333884
5729388
2026-07-20T07:51:26Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729388
wikitext
text/x-wiki
== ภาษากาตาลา ==
=== คำกริยา ===
{{head|ca|รูปกริยา}}
# {{ca-verb form of|dormir}}
== ภาษาสเปน ==
=== คำกริยา ===
{{head|es|รูปกริยา}}
# {{es-verb form of|dormir<ue-u>}}
qcx16pgkjt2jq0jkuh2sfxz504lw7s7
dormies
0
2333885
5729389
2026-07-20T07:51:33Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729389
wikitext
text/x-wiki
== ภาษากาตาลา ==
=== คำกริยา ===
{{head|ca|รูปกริยา}}
# {{ca-verb form of|dormir}}
== ภาษาฝรั่งเศส ==
=== การออกเสียง ===
* {{fr-IPA}}
* {{audio|fr|LL-Q150 (fra)-DenisdeShawi-dormies.wav|a=<<Canada>> (<<Shawinigan>>)}}
=== รูปกริยาขยาย ===
{{head|fr|รูปผันรูปกริยาขยายอดีตกาล|g=f-p}}
# {{feminine plural of|fr|dormi}}
== ภาษาละติน ==
=== คำกริยา ===
{{head|la|รูปกริยา|head=dormiēs}}
# {{inflection of|la|dormiō||2|s|futr|actv|indc}}
== ภาษาอังกฤษ ==
=== คำนาม ===
{{head|en|รูปนาม}}
# {{plural of|en|dormy}}
# {{plural of|en|dormie}}
oqrtjl6y64cplx6nk3a3ik5e018jrlm
escollí
0
2333886
5729392
2026-07-20T07:54:24Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729392
wikitext
text/x-wiki
== ภาษากาตาลา ==
=== คำกริยา ===
{{head|ca|รูปกริยา}}
# {{ca-verb form of|escollir}}
# {{ca-verb form of|escollar}}
5v5njkc8dswwzgk71livoqs612p6htg
escollit
0
2333887
5729393
2026-07-20T07:54:27Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729393
wikitext
text/x-wiki
== ภาษากาตาลา ==
=== การออกเสียง ===
* {{ca-IPA}}
* {{rhymes|ca|it|s=3}}
=== รูปกริยาขยาย ===
{{ca-pp}}
# {{past participle of|ca|escollir}}
87w6uf4nr8l9rrutjhglik93of15231
escollida
0
2333888
5729394
2026-07-20T07:54:38Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729394
wikitext
text/x-wiki
== ภาษากาตาลา ==
=== การออกเสียง ===
* {{ca-IPA}}
=== รูปกริยาขยาย ===
{{head|ca|รูปผันรูปกริยาขยายอดีตกาล|g=f-s}}
# {{feminine singular of|ca|escollit}}
== ภาษากาลิเซีย ==
=== รูปกริยาขยาย ===
{{head|gl|รูปผันรูปกริยาขยายอดีตกาล|g=f-s}}
# {{feminine singular of|gl|escollido}}
5v731oq8f74ppcsfehy28bphzn1kv36
escollits
0
2333889
5729395
2026-07-20T07:54:42Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729395
wikitext
text/x-wiki
== ภาษากาตาลา ==
=== การออกเสียง ===
* {{ca-IPA}}
=== รูปกริยาขยาย ===
{{head|ca|รูปผันรูปกริยาขยายอดีตกาล|g=m-p}}
# {{masculine plural of|ca|escollit}}
1owta0nnvhb7cdxdh6wyjx5xlparrkb
escollides
0
2333890
5729396
2026-07-20T07:54:45Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729396
wikitext
text/x-wiki
== ภาษากาตาลา ==
=== การออกเสียง ===
* {{ca-IPA}}
=== รูปกริยาขยาย ===
{{head|ca|รูปผันรูปกริยาขยายอดีตกาล|g=f-p}}
# {{feminine plural of|ca|escollit}}
3dbjsvwq41dwmym8ivyd8bjfptqduw4
esculls
0
2333891
5729397
2026-07-20T07:55:00Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729397
wikitext
text/x-wiki
== ภาษากาตาลา ==
=== คำนาม ===
{{head|ca|รูปนาม}}
# {{plural of|ca|escull}}
=== คำกริยา ===
{{head|ca|รูปกริยา}}
# {{ca-verb form of|escollir}}
lqusq2n1rlzx9u8ao7vb86oi6o71y3z
escollint
0
2333892
5729398
2026-07-20T07:55:31Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729398
wikitext
text/x-wiki
== ภาษากาตาลา ==
=== คำกริยา ===
{{head|ca|รูปกริยาเป็นนาม}}
# {{gerund of|ca|escollir}}
lppw888qxo4w0appcjrxy9q8m8kp17r
dormy
0
2333893
5729399
2026-07-20T07:57:28Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729399
wikitext
text/x-wiki
== ภาษาอังกฤษ ==
=== คำคุณศัพท์ ===
{{en-adj|-}}
# {{lb|en|golf}} {{alternative form of|en|dormie}}
#* ''Encyclopaedia of Sport''
#*: A player who is '''dormy''' cannot be beaten, and at the worst must halve the match.
#* '''1937''', [[w:P._G._Wodehouse|P. G. Wodehouse]], [[w:Lord_Emsworth_and_Others|'Lord Emsworth and Others']], Overlook, Woodstock: 2002, p 110.
#*: I could see that Hemingway, confident that he would be '''dormy''' one, was a good deal shaken at coming to the eighteenth all square.
=== คำนาม ===
{{en-noun}}
# {{lb|en|slang}} [[หอพัก]] (ของสถานศึกษา)
#* {{quote-text|en|year=1952|author=Enid Blyton|title=Here's the Naughtiest Girl
|passage=She called to Julian as he went to the boys' dormitory. 'Julian! See if Patrick is in your '''dormy'''.'}}
oqx1r5a3vzzogk3k5ba19nv32us9fjo
dormo
0
2333894
5729400
2026-07-20T07:58:31Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729400
wikitext
text/x-wiki
== ภาษากาตาลา ==
=== การออกเสียง ===
* {{ca-IPA|ò}}
=== คำกริยา ===
{{head|ca|รูปกริยา}}
# {{ca-verb form of|dormir}}
== ภาษาอัสตูเรียส ==
=== คำกริยา ===
{{head|ast|รูปกริยา}}
# {{inflection of|ast|dormir||1|s|ind}}
== ภาษาอิตาลี ==
=== คำกริยา ===
{{head|it|รูปกริยา}}
# {{inflection of|it|dormire||1|s|pres|indc}}
=== คำสลับอักษร ===
* {{anagrams|it|a=dmoor|-dromo|dromo|mordo}}
== ภาษาเอสเปรันโต ==
{{wp|lang=eo}}
=== รากศัพท์ ===
{{ety|eo|:af|dormi<t:to sleep>|-o|text=+|tree=1}}
=== การออกเสียง ===
{{eo-pr|a=LL-Q143 (epo)-Lepticed7-dormo.wav}}
=== คำนาม ===
{{eo-head|-}}
# [[การนอนหลับ]]
3h5a5d0qc2u1uy0mhe5753k60x84zy0
5729401
5729400
2026-07-20T07:58:53Z
Octahedron80
267
/* รากศัพท์ */
5729401
wikitext
text/x-wiki
== ภาษากาตาลา ==
=== การออกเสียง ===
* {{ca-IPA|ò}}
=== คำกริยา ===
{{head|ca|รูปกริยา}}
# {{ca-verb form of|dormir}}
== ภาษาอัสตูเรียส ==
=== คำกริยา ===
{{head|ast|รูปกริยา}}
# {{inflection of|ast|dormir||1|s|ind}}
== ภาษาอิตาลี ==
=== คำกริยา ===
{{head|it|รูปกริยา}}
# {{inflection of|it|dormire||1|s|pres|indc}}
=== คำสลับอักษร ===
* {{anagrams|it|a=dmoor|-dromo|dromo|mordo}}
== ภาษาเอสเปรันโต ==
{{wp|lang=eo}}
=== รากศัพท์ ===
{{ety|eo|:af|dormi<t:นอนหลับ>|-o|text=+|tree=1}}
=== การออกเสียง ===
{{eo-pr|a=LL-Q143 (epo)-Lepticed7-dormo.wav}}
=== คำนาม ===
{{eo-head|-}}
# [[การนอนหลับ]]
c8btvuodm8a1p71gjfnlnqklvx8a0u7
dormon
0
2333895
5729402
2026-07-20T07:58:56Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729402
wikitext
text/x-wiki
== ภาษาเอสเปรันโต ==
=== คำนาม ===
{{eo-head}}
# {{eo-form of|dorm|on|unc=yes}}
nxuem6prf6yaggftwfegly01evwckhk
dorms
0
2333896
5729403
2026-07-20T07:59:01Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729403
wikitext
text/x-wiki
== ภาษากาตาลา ==
=== คำกริยา ===
{{head|ca|รูปกริยา}}
# {{ca-verb form of|dormir}}
== ภาษาอังกฤษ ==
=== คำนาม ===
{{head|en|รูปนาม}}
# {{plural of|en|dorm}}
qzxmrrcoznim4effl9p7rgvr8jfqgkw
dormim
0
2333897
5729404
2026-07-20T07:59:31Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729404
wikitext
text/x-wiki
== ภาษากาตาลา ==
=== คำกริยา ===
{{head|ca|รูปกริยา}}
# {{ca-verb form of|dormir}}
== ภาษากาลิเซีย ==
=== คำกริยา ===
{{head|gl|รูปกริยา}}
# {{gl-reinteg-verb form of|dormir<u-o>}}
== ภาษาโรมาเนีย ==
=== การออกเสียง ===
* {{IPA|ro|[dorˈmim]}}
=== คำกริยา ===
{{head|ro|รูปกริยา}}
# {{verb form of|ro|dormi||1|p|pres|ind//sub}}
9cy958z1kraelhvb8ul47wt8aahm80l
dormen
0
2333898
5729405
2026-07-20T07:59:42Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729405
wikitext
text/x-wiki
== ภาษากาตาลา ==
=== การออกเสียง ===
* {{ca-IPA|ò}}
=== คำกริยา ===
{{head|ca|รูปกริยา}}
# {{ca-verb form of|dormir}}
== ภาษากาลิเซีย ==
=== คำกริยา ===
{{head|gl|รูปกริยา}}
# {{gl-verb form of|durmir<u-o>}}
0152cbrmt5xxd97tthwrpd1rh0yu0am
dormin
0
2333899
5729406
2026-07-20T08:00:05Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729406
wikitext
text/x-wiki
== ภาษากาตาลา ==
=== การออกเสียง ===
* {{ca-IPA|ò}}
=== คำกริยา ===
{{head|ca|รูปกริยา}}
# {{ca-verb form of|dormir}}
== ภาษาอังกฤษ ==
=== คำนาม ===
{{en-noun|-}}
# {{syn of|en|abscisic acid}}
=== คำสลับอักษร ===
* {{anagrams|en|a=dimnor|Nimrod|D minor|nimrod}}
5z3dk36v89cozm6vmn2idrkkczb14d7
dormís
0
2333900
5729407
2026-07-20T08:00:10Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729407
wikitext
text/x-wiki
== ภาษากาตาลา ==
=== คำกริยา ===
{{head|ca|รูปกริยา}}
# {{ca-verb form of|dormir}}
== ภาษาสเปน ==
=== การออกเสียง ===
{{es-pr}}
=== คำกริยา ===
{{head|es|รูปกริยา}}
# {{es-verb form of|dormir<ue-u>}}
l0zhrgqnms3k31hr64q1mzja2pvais7
dormissis
0
2333901
5729408
2026-07-20T08:00:16Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729408
wikitext
text/x-wiki
== ภาษากาตาลา ==
=== การออกเสียง ===
* {{ca-IPA}}
* {{rhymes|ca|isis|s=3}}
=== คำกริยา ===
{{head|ca|รูปกริยา}}
# {{ca-verb form of|dormir}}
obiyq80t13o5ifm5zt2d67c2eyzv5lm
vocês
0
2333902
5729421
2026-07-20T09:22:12Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729421
wikitext
text/x-wiki
== ภาษากาลิเซีย ==
=== การออกเสียง ===
{{rfp|gl}}
{{rfap|gl}}
* {{hyph|gl|vo|cês}}
=== คำสรรพนาม ===
{{gl-pron|g=mfbysense}}
# {{plural of|gl|você}}
== ภาษาโปรตุเกส ==
=== รูปแบบอื่น ===
* {{alt|pt|vosmecês||archaic}}
* {{alt|pt|vossemecês||obsolete}}
* {{alt|pt|cês||Brazil|nonstandard}}
* {{alt|pt|ceis||Brazil|eye dialect}}
* {{alt|pt|vcs||Internet slang}}
* {{alt|pt|v6||Brazil|Internet slang}}
=== การออกเสียง ===
{{pt-IPA|vòcês}}
* {{IPA|pt|/vɔˈsɐʃ/|a=São Miguel,Azores}}
* {{audio|pt|LL-Q5146 (por)-Santamarcanda-vocês.wav|a=<<Portugal>> (<<Porto>>)}}
* {{hyph|pt|vo|cês}}
=== คำสรรพนาม ===
{{pt-pron|mfbysense-p}}
# [[พวกคุณ]] {{q|คำบุรุษสรรพนามบุรุษที่สองพหูพจน์}}
#: {{syn|pt|vós<q:โบราณหรือเฉพาะถิ่น>|os senhores<q:ทางการ>}}
==== หมายเหตุการใช้ ====
* เดิมทีคำสรรพนามนี้เป็นเพียงรูปพหูพจน์ของ {{m|pt|você}} และใช้ในการพูดแบบกึ่งทางการ แต่ปัจจุบันคำสรรพนามนี้ได้เข้ามาแทนที่ {{m|pt|vós}} เกือบทุกประเทศที่ใช้ภาษาโปรตุเกส (ดูที่ {{m|pt|vós}}) และใช้เป็นทั้งรูปพหูพจน์ของ {{m|pt|tu}} (แบบไม่เป็นทางการ) และ {{m|pt|você}} (แบบกึ่งทางการ)
==== คำเกี่ยวข้อง ====
* {{l|pt|tu}}
* {{l|pt|você}}
* {{l|pt|vós}}
==== ดูเพิ่ม ====
{{pt-personal pronouns}}
eqdug74qhgczks8puk2p1tj39klcn86
แม่แบบ:gl-pron
10
2333903
5729422
2026-07-20T09:23:16Z
Octahedron80
267
นำเข้าจาก enwikt
5729422
wikitext
text/x-wiki
{{#invoke:checkparams|error}}<!-- Validate template parameters
-->{{head|gl|คำสรรพนาม|head={{{head|}}}|g={{{g|}}}<!--
-->|{{#if:{{{obl|}}}|หลังคำบุพบท}}<!--
-->|{{{obl|}}}<!--
-->|{{#if:{{{acc|}}}|กรรมการก}}<!--
-->|{{{acc|}}}<!--
-->|{{#if:{{{dat|}}}|สัมปทานการก}}<!--
-->|{{{dat|}}}<!--
-->}}<!--
--><noinclude>{{documentation}}</noinclude>
26ctlgarrz4g1xefej61ohjk9hrxxvq
หมวดหมู่:คำสรรพนามภาษากาลิเซีย
14
2333904
5729423
2026-07-20T09:23:54Z
Octahedron80
267
สร้างหมวดหมู่อัตโนมัติ
5729423
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
vcs
0
2333905
5729425
2026-07-20T09:25:54Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729425
wikitext
text/x-wiki
== ภาษาโปรตุเกส ==
=== การออกเสียง ===
{{pt-IPA|vocês}}
=== คำสรรพนาม ===
{{pt-pron|mfbysense-p}}
# {{lb|pt|Internet slang|text messaging}} {{abbr of|pt|vocês}}; {{plural of|pt|vc}}
#: {{syn|pt|vçs|v6}}
q21n959eh1uug5c2dqwx7pqldh7hpcg
vçs
0
2333906
5729426
2026-07-20T09:26:09Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729426
wikitext
text/x-wiki
== ภาษาโปรตุเกส ==
=== คำสรรพนาม ===
{{pt-pron|mfbysense-p|sg=vç}}
# {{lb|pt|Internet slang|text messaging}} {{abbreviation of|pt|vocês}}; {{plural of|pt|vç}}
0unserfu3c094ja0wd6bi4zhlufd3es
v6
0
2333907
5729428
2026-07-20T09:26:14Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729428
wikitext
text/x-wiki
== ภาษาโปรตุเกส ==
=== การออกเสียง ===
{{pt-IPA|br=vocês}}
=== คำสรรพนาม ===
{{pt-pron|mfbysense-p}}
# {{lb|pt|dated|Brazil|Internet slang|text messaging}} {{abbr of|pt|vocês}}; {{plural of|pt|vc}}, {{plural of|pt|vç}}
#: {{syn|pt|vcs|vçs}}
{{cln|pt|number homophones}}
1ixiwkkky6icx5thtmpxw8sxuqplv7z
vç
0
2333908
5729429
2026-07-20T09:26:24Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729429
wikitext
text/x-wiki
== ภาษาโปรตุเกส ==
=== คำสรรพนาม ===
{{pt-pron|mfbysense|pl=vçs,v6}}
# {{lb|pt|internet slang|text messaging}} {{abbreviation of|pt|você||you}}
38ci7ijs92dtc2d6vmdt4jhn8niysfq
5729430
5729429
2026-07-20T09:26:37Z
Octahedron80
267
/* คำสรรพนาม */
5729430
wikitext
text/x-wiki
== ภาษาโปรตุเกส ==
=== คำสรรพนาม ===
{{pt-pron|mfbysense|pl=vçs,v6}}
# {{lb|pt|internet slang|text messaging}} {{abbreviation of|pt|você||คุณ}}
5hvdxcopufl62tbau1njr632cfkuap0
cês
0
2333909
5729432
2026-07-20T09:27:31Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729432
wikitext
text/x-wiki
== ภาษาโปรตุเกส ==
=== รากศัพท์ 1 ===
==== การออกเสียง ====
{{pt-IPA|[s:ss]}}
* {{rhymes|pt|es<a:BR>|eʃ<a:PT,Rio de Janeiro>|s=1}}
* {{hyph|pt|cês}}
==== คำนาม ====
{{head|pt|รูปนาม|g=m}}
# {{sid|pt|letter}} {{plural of|pt|cê|t=ตัวอักษร c|id=letter}}
=== รากศัพท์ 2 ===
==== รูปแบบอื่น ====
* {{alt|pt|6||text messaging}}
==== การออกเสียง ====
{{pt-IPA}}
* {{rhymes|pt|es<a:BR>|ejs|eʃ<a:PT,Rio de Janeiro>|ejʃ<a:Rio de Janeiro>|s=1}}
* {{hyph|pt|cês}}
* {{hmp|pt|seis|aa=BR}}
==== คำสรรพนาม ====
{{head|pt|รูปสรรพนาม}}
# {{sid|pt|you}} {{plural of|pt|cê|t=คุณ|id=you}}
j06bqecw8n0dhzm0ezdl3gbzuccugja
dormido
0
2333910
5729435
2026-07-20T09:35:49Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด เรียงลำดับหัวเรื่องภาษา
5729435
wikitext
text/x-wiki
== ภาษากาลิเซีย ==
=== รูปกริยาขยาย ===
{{gl-pp}}
# {{past participle of|gl|dormir}}
== ภาษาโปรตุเกส ==
=== รูปกริยาขยาย ===
{{pt-pp}}
# {{past participle of|pt|dormir}}
== ภาษาสเปน ==
=== รากศัพท์ ===
รูปกริยาขยายอดีตกาลของ {{m|es|dormir}}
=== การออกเสียง ===
{{es-pr}}
=== คำคุณศัพท์ ===
{{es-adj}}
# [[ที่]][[หลับ]][[อยู่]]
# [[ชา]] (ไม่มีความรู้สึก)
==== ลูกคำ ====
{{col|es|quedarse dormido}}
=== รูปกริยาขยาย ===
{{es-past participle}}
# {{past participle of|es|dormir}}
=== อ่านเพิ่ม ===
* {{R:es:DRAE}}
{{C|es|การนอนหลับ}}
s2c7w57m6vrzllaxd5778zstbjzz14w
durmiendo
0
2333911
5729437
2026-07-20T09:38:09Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729437
wikitext
text/x-wiki
== ภาษาสเปน ==
=== คำกริยา ===
{{head|es|รูปกริยาเป็นนาม}}
# {{es-verb form of|dormir<ue-u>}}
fc6x9vektbjl16s042wt9tmbse1o5ar
duerme
0
2333912
5729438
2026-07-20T09:38:13Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729438
wikitext
text/x-wiki
== ภาษาสเปน ==
=== การออกเสียง ===
{{es-pr}}
=== คำกริยา ===
{{head|es|รูปกริยา}}
# {{es-verb form of|dormir<ue-u>}}
s09rjymq107ov9of4dal9h14um988t8
dormíais
0
2333913
5729439
2026-07-20T09:38:18Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729439
wikitext
text/x-wiki
== ภาษากาลิเซีย ==
=== คำกริยา ===
{{head|gl|รูปกริยา}}
# {{gl-reinteg-verb form of|dormir<u-o>}}
== ภาษาสเปน ==
=== คำกริยา ===
{{head|es|รูปกริยา}}
# {{es-verb form of|dormir<ue-u>}}
i9tsiwnfgad8b5qilbrfyqqy0tgxa6t
dormiríais
0
2333914
5729440
2026-07-20T09:38:22Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729440
wikitext
text/x-wiki
== ภาษากาลิเซีย ==
=== คำกริยา ===
{{head|gl|รูปกริยา}}
# {{gl-reinteg-verb form of|dormir<u-o>}}
== ภาษาสเปน ==
=== คำกริยา ===
{{head|es|รูปกริยา}}
# {{es-verb form of|dormir<ue-u>}}
i9tsiwnfgad8b5qilbrfyqqy0tgxa6t
durmieras
0
2333915
5729441
2026-07-20T09:38:39Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729441
wikitext
text/x-wiki
== ภาษาสเปน ==
=== การออกเสียง ===
{{es-pr}}
=== คำกริยา ===
{{head|es|รูปกริยา}}
# {{es-verb form of|dormir<ue-u>}}
s09rjymq107ov9of4dal9h14um988t8
dormíu
0
2333916
5729445
2026-07-20T09:43:25Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729445
wikitext
text/x-wiki
== ภาษาอัสตูเรียส ==
=== การออกเสียง ===
{{ast-pr}}
=== รูปกริยาขยาย ===
{{head|ast|รูปกริยาขยายอดีตกาล|g=m|เพศหญิง|dormida|เพศกลาง|dormío|เพศชายพหูพจน์|dormíos|เพศหญิงพหูพจน์|dormíes}}
# {{past participle of|ast|dormir}}
mwjqauynnr81frs06el1hj6m1z1j3i4
dormiendo
0
2333917
5729446
2026-07-20T09:43:50Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729446
wikitext
text/x-wiki
== ภาษาละติน ==
=== รูปกริยาขยาย ===
{{head|la|รูปผันรูปกริยาขยาย|head=dormiendō}}
# {{inflection of|la|dormiendus||dat//abl|m//n|s}}
ihbg7mh7qcx6f9j2qpvar6sv7c3axi2
แม่แบบ:oc-conj-ir
10
2333918
5729447
2026-07-20T09:45:08Z
Octahedron80
267
นำเข้าจาก enwikt
5729447
wikitext
text/x-wiki
{{oc-conj-table
| aux={{#switch:{{{2}}}|èsser=èsser|aver}}
| auxger={{#switch:{{{2}}}|èsser=èsser|aver}}
| {{{1}}}ir
| {{l|oc|{{{1}}}issent}}
| {{l|oc|{{{pp|{{{1}}}it}}}}}
| {{l|oc|{{{1}}}issi}}
| {{l|oc|{{{1}}}isses}}
| {{l|oc|{{{1}}}ís}}
| {{l|oc|{{{1}}}issèm}}
| {{l|oc|{{{1}}}issètz}}
| {{l|oc|{{{1}}}isson}}
| {{l|oc|{{{1}}}issiái}}
| {{l|oc|{{{1}}}issiás}}
| {{l|oc|{{{1}}}issiá}}
| {{l|oc|{{{1}}}issiam}}
| {{l|oc|{{{1}}}issiatz}}
| {{l|oc|{{{1}}}issián}}
| {{l|oc|{{{1}}}iguèri}}
| {{l|oc|{{{1}}}iguères}}
| {{l|oc|{{{1}}}iguèt}}
| {{l|oc|{{{1}}}iguèrem}}
| {{l|oc|{{{1}}}iguèretz}}
| {{l|oc|{{{1}}}iguèron}}
| {{l|oc|{{{1}}}irai}}
| {{l|oc|{{{1}}}iràs}}
| {{l|oc|{{{1}}}irà}}
| {{l|oc|{{{1}}}irem}}
| {{l|oc|{{{1}}}iretz}}
| {{l|oc|{{{1}}}iràn}}
| {{l|oc|{{{1}}}iriái}}
| {{l|oc|{{{1}}}iriás}}
| {{l|oc|{{{1}}}iriá}}
| {{l|oc|{{{1}}}iriam}}
| {{l|oc|{{{1}}}iriatz}}
| {{l|oc|{{{1}}}irián}}
| {{l|oc|{{{1}}}isca}}
| {{l|oc|{{{1}}}iscas}}
| {{l|oc|{{{1}}}isca}}
| {{l|oc|{{{1}}}iscam}}
| {{l|oc|{{{1}}}iscatz}}
| {{l|oc|{{{1}}}iscan}}
| {{l|oc|{{{1}}}iguèsse}}
| {{l|oc|{{{1}}}iguèsses}}
| {{l|oc|{{{1}}}iguèsse}}
| {{l|oc|{{{1}}}iguèssem}}
| {{l|oc|{{{1}}}iguèssetz}}
| {{l|oc|{{{1}}}iguèsson}}
| {{l|oc|{{{1}}}ís}}
| {{l|oc|{{{1}}}iscam}}
| {{l|oc|{{{1}}}issetz}}
| {{l|oc|{{{1}}}iguèra}}
| {{l|oc|{{{1}}}iguèras}}
| {{l|oc|{{{1}}}iguèra}}
| {{l|oc|{{{1}}}igueram}}
| {{l|oc|{{{1}}}igueratz}}
| {{l|oc|{{{1}}}iguèran}}
}}<noinclude>{{tcat|conj}}</noinclude>
ghaogv725vwdbzeokkctt4kit4uq65c
แม่แบบ:oc-conj-table
10
2333919
5729448
2026-07-20T09:53:35Z
Octahedron80
267
นำเข้าจาก enwikt
5729448
wikitext
text/x-wiki
{{#invoke:checkparams|warn}}<!-- Validate template parameters
--><templatestyles src="Module:roa-verb/style.css" /><div class="NavFrame">
<div class="NavHead" align=left> [[File:{{{dialcoat|Blason_Languedoc.svg}}}|14px]] {{{dial|Lengadocian (Central Occitan)}}}</div>
<div class="NavContent">
{| class="roa-inflection-table" data-toggle-category="inflection"
|-
! colspan="2" class="roa-nonfinite-header" |
! colspan="3" class="roa-nonfinite-header" | กาลสามัญ
! colspan="3" class="roa-nonfinite-header" | กาลประสม
|-
! colspan="2" class="roa-nonfinite-header" | รูปกริยากลาง
| colspan="3" | {{{1|}}}
| colspan="3" | {{{aux|aver}}} {{{3|}}}
|-
! colspan="2" class="roa-nonfinite-header" | รูปกริยาเป็นนาม
| colspan="3" | {{#if:{{{2|}}}|{{l|oc|{{{2}}}}}}}
| colspan="3" | '''ใช้รูปกริยาเป็นนามของ {{m|oc|aver}} + รูปกริยาขยายอดีตกาล'''
|-
! colspan="2" class="roa-nonfinite-header" | รูปกริยาขยายอดีตกาล
| colspan="3" | {{#if:{{{3|}}}|{{l|oc|{{{3}}}}}}}
| colspan="3" | —
|-
! colspan="2" rowspan="2" class="roa-person-number-header" | บุรุษ
! colspan="3" class="roa-person-number-header" | เอกพจน์
! colspan="3" class="roa-person-number-header" | พหูพจน์
|-
! class="roa-person-number-header" style="width:12.5%;" | บุรุษที่หนึ่ง
! class="roa-person-number-header" style="width:12.5%;" | บุรุษที่สอง
! class="roa-person-number-header" style="width:12.5%;" | บุรุษที่สาม
! class="roa-person-number-header" style="width:12.5%;" | บุรุษที่หนึ่ง
! class="roa-person-number-header" style="width:12.5%;" | บุรุษที่สอง
! class="roa-person-number-header" style="width:12.5%;" | บุรุษที่สาม
|-
! class="roa-indicative-left-rail" rowspan="7" | มาลาบอกเล่า
! class="roa-indicative-left-rail" |
! class="roa-indicative-left-rail" | ieu
! class="roa-indicative-left-rail" | tu
! class="roa-indicative-left-rail" | el
! class="roa-indicative-left-rail" | nosautres
! class="roa-indicative-left-rail" | vosautres
! class="roa-indicative-left-rail" | eles
|-
! class="roa-indicative-left-rail" style="height:3em;" | ปัจจุบันกาล
| {{#if:{{{4|}}}|{{l|oc|{{{4}}}}}}}
| {{#if:{{{5|}}}|{{l|oc|{{{5}}}}}}}
| {{#if:{{{6|}}}|{{l|oc|{{{6}}}}}}}
| {{#if:{{{7|}}}|{{l|oc|{{{7}}}}}}}
| {{#if:{{{8|}}}|{{l|oc|{{{8}}}}}}}
| {{#if:{{{9|}}}|{{l|oc|{{{9}}}}}}}
|-
! class="roa-indicative-left-rail" style="height:3em;" | ไม่สมบูรณ์
| {{#if:{{{10|}}}|{{l|oc|{{{10}}}}}}}
| {{#if:{{{11|}}}|{{l|oc|{{{11}}}}}}}
| {{#if:{{{12|}}}|{{l|oc|{{{12}}}}}}}
| {{#if:{{{13|}}}|{{l|oc|{{{13}}}}}}}
| {{#if:{{{14|}}}|{{l|oc|{{{14}}}}}}}
| {{#if:{{{15|}}}|{{l|oc|{{{15}}}}}}}
|-
! class="roa-indicative-left-rail" style="height:3em;" | อดีตกาลสิ้นสุด (สมบูรณ์)
| {{#if:{{{16|}}}|{{l|oc|{{{16}}}}}}}
| {{#if:{{{17|}}}|{{l|oc|{{{17}}}}}}}
| {{#if:{{{18|}}}|{{l|oc|{{{18}}}}}}}
| {{#if:{{{19|}}}|{{l|oc|{{{19}}}}}}}
| {{#if:{{{20|}}}|{{l|oc|{{{20}}}}}}}
| {{#if:{{{21|}}}|{{l|oc|{{{21}}}}}}}
|-
! class="roa-indicative-left-rail" style="height:3em;" | อนาคตกาล
| {{#if:{{{22|}}}|{{l|oc|{{{22}}}}}}}
| {{#if:{{{23|}}}|{{l|oc|{{{23}}}}}}}
| {{#if:{{{24|}}}|{{l|oc|{{{24}}}}}}}
| {{#if:{{{25|}}}|{{l|oc|{{{25}}}}}}}
| {{#if:{{{26|}}}|{{l|oc|{{{26}}}}}}}
| {{#if:{{{27|}}}|{{l|oc|{{{27}}}}}}}
|-
! class="roa-indicative-left-rail" style="height:3em;" | มาลาเงื่อนไข
| {{#if:{{{28|}}}|{{l|oc|{{{28}}}}}}}
| {{#if:{{{29|}}}|{{l|oc|{{{29}}}}}}}
| {{#if:{{{30|}}}|{{l|oc|{{{30}}}}}}}
| {{#if:{{{31|}}}|{{l|oc|{{{31}}}}}}}
| {{#if:{{{32|}}}|{{l|oc|{{{32}}}}}}}
| {{#if:{{{33|}}}|{{l|oc|{{{33}}}}}}}
|-
! class="roa-second-conditional-left-rail" style="height:3em;" | มาลาเงื่อนไขรูปที่ 2<sup class="roa-red-superscript">1</sup>
| {{#if:{{{49|}}}|{{l|oc|{{{49}}}}}}}
| {{#if:{{{50|}}}|{{l|oc|{{{50}}}}}}}
| {{#if:{{{51|}}}|{{l|oc|{{{51}}}}}}}
| {{#if:{{{52|}}}|{{l|oc|{{{52}}}}}}}
| {{#if:{{{53|}}}|{{l|oc|{{{53}}}}}}}
| {{#if:{{{54|}}}|{{l|oc|{{{54}}}}}}}
|-
! rowspan="5" class="roa-indicative-left-rail" | กาลประสม
! class="roa-indicative-left-rail" style="height:3em;" | ปัจจุบันกาลสมบูรณ์
! colspan="6" class="roa-compound-row" | ใช้รูปปัจจุบันกาลของ {{m|oc|aver}} + รูปกริยาขยายอดีตกาล
|-
! class="roa-indicative-left-rail" style="height:3em;" | อภิสมบูรณ์
! colspan="6" class="roa-compound-row" | ใช้รูปไม่สมบูรณ์ของ ''{{{aux|aver}}}'' + รูปกริยาขยายอดีตกาล
|-
! class="roa-indicative-left-rail" style="height:3em;" | past anterior
! colspan="6" class="roa-compound-row" | ใช้รูปอดีตกาลสิ้นสุดของ ''{{{aux|aver}}}'' + รูปกริยาขยายอดีตกาล
|-
! class="roa-indicative-left-rail" style="height:3em;" | อนาคตกาลสมบูรณ์
! colspan="6" class="roa-compound-row" | ใช้รูปอนาคตกาลของ ''{{{aux|aver}}}'' + รูปกริยาขยายอดีตกาล
|-
! class="roa-indicative-left-rail" style="height:3em;" | มาลาเงื่อนไขสมบูรณ์
! colspan="6" class="roa-compound-row" | ใช้รูปมาลาเงื่อนไขของ ''{{{aux|aver}}}'' + รูปกริยาขยายอดีตกาล
|-
! class="roa-subjunctive-left-rail" rowspan="3" | มาลาสมมุติ
! class="roa-subjunctive-left-rail" |
! class="roa-subjunctive-left-rail" | que ieu
! class="roa-subjunctive-left-rail" | que tu
! class="roa-subjunctive-left-rail" | que el
! class="roa-subjunctive-left-rail" | que nosautres
! class="roa-subjunctive-left-rail" | que vosautres
! class="roa-subjunctive-left-rail" | que eles
|-
! class="roa-subjunctive-left-rail" style="height:3em;" | ปัจจุบันกาล
| {{#if:{{{34|}}}|{{l|oc|{{{34}}}}}}}
| {{#if:{{{35|}}}|{{l|oc|{{{35}}}}}}}
| {{#if:{{{36|}}}|{{l|oc|{{{36}}}}}}}
| {{#if:{{{37|}}}|{{l|oc|{{{37}}}}}}}
| {{#if:{{{38|}}}|{{l|oc|{{{38}}}}}}}
| {{#if:{{{39|}}}|{{l|oc|{{{39}}}}}}}
|-
! class="roa-subjunctive-left-rail" style="height:3em;" | ไม่สมบูรณ์
| {{#if:{{{40|}}}|{{l|oc|{{{40}}}}}}}
| {{#if:{{{41|}}}|{{l|oc|{{{41}}}}}}}
| {{#if:{{{42|}}}|{{l|oc|{{{42}}}}}}}
| {{#if:{{{43|}}}|{{l|oc|{{{43}}}}}}}
| {{#if:{{{44|}}}|{{l|oc|{{{44}}}}}}}
| {{#if:{{{45|}}}|{{l|oc|{{{45}}}}}}}
|-
! rowspan="2" class="roa-subjunctive-left-rail" | กาลประสม
! class="roa-subjunctive-left-rail" style="height:3em;" | อดีตกาล
! colspan="6" class="roa-compound-row" | ใช้รูปปัจจุบันกาลมาลาสมมุติของ ''{{{aux|aver}}}'' + รูปกริยาขยายอดีตกาล
|-
! class="roa-subjunctive-left-rail" style="height:3em;" | อภิสมบูรณ์
! colspan="6" class="roa-compound-row" | ใช้รูปไม่สมบูรณ์มาลาสมมุติของ ''{{{aux|aver}}}'' + รูปกริยาขยายอดีตกาล
|-
! colspan="2" rowspan="2" class="roa-imperative-left-rail" style="height:3em;" | มาลาสั่ง
! class="roa-imperative-left-rail" | —
! class="roa-imperative-left-rail" | tu
! class="roa-imperative-left-rail" | —
! class="roa-imperative-left-rail" | nosautres
! class="roa-imperative-left-rail" | vosautres
! class="roa-imperative-left-rail" | —
|-
|
| {{#if:{{{46|}}}|{{l|oc|{{{46}}}}}}}
|
| {{#if:{{{47|}}}|{{l|oc|{{{47}}}}}}}
| {{#if:{{{48|}}}|{{l|oc|{{{48}}}}}}}
! class="roa-second-conditional-left-rail" |<sup class="roa-red-superscript">1</sup>'''''Now chiefly obsolete, still in use in some Limousin and Vivaro-Alpin dialects'''''
|-
|colspan="8" class="roa-footnote-section" style="text-align:left" | {{{bottom|}}}
|}
</div></div><noinclude>{{documentation}}
</noinclude>
gqc8weeb8we8rro22tdzbs5mi9xcbx1
5729449
5729448
2026-07-20T09:59:02Z
Octahedron80
267
5729449
wikitext
text/x-wiki
{{#invoke:checkparams|warn}}<!-- Validate template parameters
--><templatestyles src="Module:roa-verb/style.css" /><div class="NavFrame">
<div class="NavHead" align=left> [[File:{{{dialcoat|Blason_Languedoc.svg}}}|14px]] {{{dial|แล็งกอด็อก (อุตซิตาตอนกลาง)}}}</div>
<div class="NavContent">
{| class="roa-inflection-table" data-toggle-category="inflection"
|-
! colspan="2" class="roa-nonfinite-header" |
! colspan="3" class="roa-nonfinite-header" | กาลสามัญ
! colspan="3" class="roa-nonfinite-header" | กาลประสม
|-
! colspan="2" class="roa-nonfinite-header" | รูปกริยากลาง
| colspan="3" | {{{1|}}}
| colspan="3" | {{{aux|aver}}} {{{3|}}}
|-
! colspan="2" class="roa-nonfinite-header" | รูปกริยาเป็นนาม
| colspan="3" | {{#if:{{{2|}}}|{{l|oc|{{{2}}}}}}}
| colspan="3" | '''ใช้รูปกริยาเป็นนามของ {{m|oc|aver}} + รูปกริยาขยายอดีตกาล'''
|-
! colspan="2" class="roa-nonfinite-header" | รูปกริยาขยายอดีตกาล
| colspan="3" | {{#if:{{{3|}}}|{{l|oc|{{{3}}}}}}}
| colspan="3" | —
|-
! colspan="2" rowspan="2" class="roa-person-number-header" | บุรุษ
! colspan="3" class="roa-person-number-header" | เอกพจน์
! colspan="3" class="roa-person-number-header" | พหูพจน์
|-
! class="roa-person-number-header" style="width:12.5%;" | บุรุษที่หนึ่ง
! class="roa-person-number-header" style="width:12.5%;" | บุรุษที่สอง
! class="roa-person-number-header" style="width:12.5%;" | บุรุษที่สาม
! class="roa-person-number-header" style="width:12.5%;" | บุรุษที่หนึ่ง
! class="roa-person-number-header" style="width:12.5%;" | บุรุษที่สอง
! class="roa-person-number-header" style="width:12.5%;" | บุรุษที่สาม
|-
! class="roa-indicative-left-rail" rowspan="7" | มาลาบอกเล่า
! class="roa-indicative-left-rail" |
! class="roa-indicative-left-rail" | ieu
! class="roa-indicative-left-rail" | tu
! class="roa-indicative-left-rail" | el
! class="roa-indicative-left-rail" | nosautres
! class="roa-indicative-left-rail" | vosautres
! class="roa-indicative-left-rail" | eles
|-
! class="roa-indicative-left-rail" style="height:3em;" | ปัจจุบันกาล
| {{#if:{{{4|}}}|{{l|oc|{{{4}}}}}}}
| {{#if:{{{5|}}}|{{l|oc|{{{5}}}}}}}
| {{#if:{{{6|}}}|{{l|oc|{{{6}}}}}}}
| {{#if:{{{7|}}}|{{l|oc|{{{7}}}}}}}
| {{#if:{{{8|}}}|{{l|oc|{{{8}}}}}}}
| {{#if:{{{9|}}}|{{l|oc|{{{9}}}}}}}
|-
! class="roa-indicative-left-rail" style="height:3em;" | ไม่สมบูรณ์
| {{#if:{{{10|}}}|{{l|oc|{{{10}}}}}}}
| {{#if:{{{11|}}}|{{l|oc|{{{11}}}}}}}
| {{#if:{{{12|}}}|{{l|oc|{{{12}}}}}}}
| {{#if:{{{13|}}}|{{l|oc|{{{13}}}}}}}
| {{#if:{{{14|}}}|{{l|oc|{{{14}}}}}}}
| {{#if:{{{15|}}}|{{l|oc|{{{15}}}}}}}
|-
! class="roa-indicative-left-rail" style="height:3em;" | อดีตกาลสิ้นสุด (สมบูรณ์)
| {{#if:{{{16|}}}|{{l|oc|{{{16}}}}}}}
| {{#if:{{{17|}}}|{{l|oc|{{{17}}}}}}}
| {{#if:{{{18|}}}|{{l|oc|{{{18}}}}}}}
| {{#if:{{{19|}}}|{{l|oc|{{{19}}}}}}}
| {{#if:{{{20|}}}|{{l|oc|{{{20}}}}}}}
| {{#if:{{{21|}}}|{{l|oc|{{{21}}}}}}}
|-
! class="roa-indicative-left-rail" style="height:3em;" | อนาคตกาล
| {{#if:{{{22|}}}|{{l|oc|{{{22}}}}}}}
| {{#if:{{{23|}}}|{{l|oc|{{{23}}}}}}}
| {{#if:{{{24|}}}|{{l|oc|{{{24}}}}}}}
| {{#if:{{{25|}}}|{{l|oc|{{{25}}}}}}}
| {{#if:{{{26|}}}|{{l|oc|{{{26}}}}}}}
| {{#if:{{{27|}}}|{{l|oc|{{{27}}}}}}}
|-
! class="roa-indicative-left-rail" style="height:3em;" | มาลาเงื่อนไข
| {{#if:{{{28|}}}|{{l|oc|{{{28}}}}}}}
| {{#if:{{{29|}}}|{{l|oc|{{{29}}}}}}}
| {{#if:{{{30|}}}|{{l|oc|{{{30}}}}}}}
| {{#if:{{{31|}}}|{{l|oc|{{{31}}}}}}}
| {{#if:{{{32|}}}|{{l|oc|{{{32}}}}}}}
| {{#if:{{{33|}}}|{{l|oc|{{{33}}}}}}}
|-
! class="roa-second-conditional-left-rail" style="height:3em;" | มาลาเงื่อนไขรูปที่ 2<sup class="roa-red-superscript">1</sup>
| {{#if:{{{49|}}}|{{l|oc|{{{49}}}}}}}
| {{#if:{{{50|}}}|{{l|oc|{{{50}}}}}}}
| {{#if:{{{51|}}}|{{l|oc|{{{51}}}}}}}
| {{#if:{{{52|}}}|{{l|oc|{{{52}}}}}}}
| {{#if:{{{53|}}}|{{l|oc|{{{53}}}}}}}
| {{#if:{{{54|}}}|{{l|oc|{{{54}}}}}}}
|-
! rowspan="5" class="roa-indicative-left-rail" | กาลประสม
! class="roa-indicative-left-rail" style="height:3em;" | ปัจจุบันกาลสมบูรณ์
! colspan="6" class="roa-compound-row" | ใช้รูปปัจจุบันกาลของ {{m|oc|aver}} + รูปกริยาขยายอดีตกาล
|-
! class="roa-indicative-left-rail" style="height:3em;" | อภิสมบูรณ์
! colspan="6" class="roa-compound-row" | ใช้รูปไม่สมบูรณ์ของ ''{{{aux|aver}}}'' + รูปกริยาขยายอดีตกาล
|-
! class="roa-indicative-left-rail" style="height:3em;" | past anterior
! colspan="6" class="roa-compound-row" | ใช้รูปอดีตกาลสิ้นสุดของ ''{{{aux|aver}}}'' + รูปกริยาขยายอดีตกาล
|-
! class="roa-indicative-left-rail" style="height:3em;" | อนาคตกาลสมบูรณ์
! colspan="6" class="roa-compound-row" | ใช้รูปอนาคตกาลของ ''{{{aux|aver}}}'' + รูปกริยาขยายอดีตกาล
|-
! class="roa-indicative-left-rail" style="height:3em;" | มาลาเงื่อนไขสมบูรณ์
! colspan="6" class="roa-compound-row" | ใช้รูปมาลาเงื่อนไขของ ''{{{aux|aver}}}'' + รูปกริยาขยายอดีตกาล
|-
! class="roa-subjunctive-left-rail" rowspan="3" | มาลาสมมุติ
! class="roa-subjunctive-left-rail" |
! class="roa-subjunctive-left-rail" | que ieu
! class="roa-subjunctive-left-rail" | que tu
! class="roa-subjunctive-left-rail" | que el
! class="roa-subjunctive-left-rail" | que nosautres
! class="roa-subjunctive-left-rail" | que vosautres
! class="roa-subjunctive-left-rail" | que eles
|-
! class="roa-subjunctive-left-rail" style="height:3em;" | ปัจจุบันกาล
| {{#if:{{{34|}}}|{{l|oc|{{{34}}}}}}}
| {{#if:{{{35|}}}|{{l|oc|{{{35}}}}}}}
| {{#if:{{{36|}}}|{{l|oc|{{{36}}}}}}}
| {{#if:{{{37|}}}|{{l|oc|{{{37}}}}}}}
| {{#if:{{{38|}}}|{{l|oc|{{{38}}}}}}}
| {{#if:{{{39|}}}|{{l|oc|{{{39}}}}}}}
|-
! class="roa-subjunctive-left-rail" style="height:3em;" | ไม่สมบูรณ์
| {{#if:{{{40|}}}|{{l|oc|{{{40}}}}}}}
| {{#if:{{{41|}}}|{{l|oc|{{{41}}}}}}}
| {{#if:{{{42|}}}|{{l|oc|{{{42}}}}}}}
| {{#if:{{{43|}}}|{{l|oc|{{{43}}}}}}}
| {{#if:{{{44|}}}|{{l|oc|{{{44}}}}}}}
| {{#if:{{{45|}}}|{{l|oc|{{{45}}}}}}}
|-
! rowspan="2" class="roa-subjunctive-left-rail" | กาลประสม
! class="roa-subjunctive-left-rail" style="height:3em;" | อดีตกาล
! colspan="6" class="roa-compound-row" | ใช้รูปปัจจุบันกาลมาลาสมมุติของ ''{{{aux|aver}}}'' + รูปกริยาขยายอดีตกาล
|-
! class="roa-subjunctive-left-rail" style="height:3em;" | อภิสมบูรณ์
! colspan="6" class="roa-compound-row" | ใช้รูปไม่สมบูรณ์มาลาสมมุติของ ''{{{aux|aver}}}'' + รูปกริยาขยายอดีตกาล
|-
! colspan="2" rowspan="2" class="roa-imperative-left-rail" style="height:3em;" | มาลาสั่ง
! class="roa-imperative-left-rail" | —
! class="roa-imperative-left-rail" | tu
! class="roa-imperative-left-rail" | —
! class="roa-imperative-left-rail" | nosautres
! class="roa-imperative-left-rail" | vosautres
! class="roa-imperative-left-rail" | —
|-
|
| {{#if:{{{46|}}}|{{l|oc|{{{46}}}}}}}
|
| {{#if:{{{47|}}}|{{l|oc|{{{47}}}}}}}
| {{#if:{{{48|}}}|{{l|oc|{{{48}}}}}}}
! class="roa-second-conditional-left-rail" |<sup class="roa-red-superscript">1</sup>'''''Now chiefly obsolete, still in use in some Limousin and Vivaro-Alpin dialects'''''
|-
|colspan="8" class="roa-footnote-section" style="text-align:left" | {{{bottom|}}}
|}
</div></div><noinclude>{{documentation}}
</noinclude>
q6soqnrwqfqo4b79dcz7xl85io38zz0
5729450
5729449
2026-07-20T10:00:44Z
Octahedron80
267
5729450
wikitext
text/x-wiki
{{#invoke:checkparams|warn}}<!-- Validate template parameters
--><templatestyles src="Module:roa-verb/style.css" /><div class="NavFrame">
<div class="NavHead" align=left> [[File:{{{dialcoat|Blason_Languedoc.svg}}}|14px]] {{{dial|แล็งกอด็อก (อุตซิตาตอนกลาง)}}}</div>
<div class="NavContent">
{| class="roa-inflection-table" data-toggle-category="inflection"
|-
! colspan="2" class="roa-nonfinite-header" |
! colspan="3" class="roa-nonfinite-header" | กาลสามัญ
! colspan="3" class="roa-nonfinite-header" | กาลประสม
|-
! colspan="2" class="roa-nonfinite-header" | รูปกริยากลาง
| colspan="3" | {{{1|}}}
| colspan="3" | {{{aux|aver}}} {{{3|}}}
|-
! colspan="2" class="roa-nonfinite-header" | รูปกริยาเป็นนาม
| colspan="3" | {{#if:{{{2|}}}|{{l|oc|{{{2}}}}}}}
| colspan="3" | '''ใช้รูปกริยาเป็นนามของ {{m|oc|aver}} + รูปกริยาขยายอดีตกาล'''
|-
! colspan="2" class="roa-nonfinite-header" | รูปกริยาขยายอดีตกาล
| colspan="3" | {{#if:{{{3|}}}|{{l|oc|{{{3}}}}}}}
| colspan="3" | —
|-
! colspan="2" rowspan="2" class="roa-person-number-header" | บุรุษ
! colspan="3" class="roa-person-number-header" | เอกพจน์
! colspan="3" class="roa-person-number-header" | พหูพจน์
|-
! class="roa-person-number-header" style="width:12.5%;" | บุรุษที่หนึ่ง
! class="roa-person-number-header" style="width:12.5%;" | บุรุษที่สอง
! class="roa-person-number-header" style="width:12.5%;" | บุรุษที่สาม
! class="roa-person-number-header" style="width:12.5%;" | บุรุษที่หนึ่ง
! class="roa-person-number-header" style="width:12.5%;" | บุรุษที่สอง
! class="roa-person-number-header" style="width:12.5%;" | บุรุษที่สาม
|-
! class="roa-indicative-left-rail" rowspan="7" | มาลาบอกเล่า
! class="roa-indicative-left-rail" |
! class="roa-indicative-left-rail" | ieu
! class="roa-indicative-left-rail" | tu
! class="roa-indicative-left-rail" | el
! class="roa-indicative-left-rail" | nosautres
! class="roa-indicative-left-rail" | vosautres
! class="roa-indicative-left-rail" | eles
|-
! class="roa-indicative-left-rail" style="height:3em;" | ปัจจุบันกาล
| {{#if:{{{4|}}}|{{l|oc|{{{4}}}}}}}
| {{#if:{{{5|}}}|{{l|oc|{{{5}}}}}}}
| {{#if:{{{6|}}}|{{l|oc|{{{6}}}}}}}
| {{#if:{{{7|}}}|{{l|oc|{{{7}}}}}}}
| {{#if:{{{8|}}}|{{l|oc|{{{8}}}}}}}
| {{#if:{{{9|}}}|{{l|oc|{{{9}}}}}}}
|-
! class="roa-indicative-left-rail" style="height:3em;" | ไม่สมบูรณ์
| {{#if:{{{10|}}}|{{l|oc|{{{10}}}}}}}
| {{#if:{{{11|}}}|{{l|oc|{{{11}}}}}}}
| {{#if:{{{12|}}}|{{l|oc|{{{12}}}}}}}
| {{#if:{{{13|}}}|{{l|oc|{{{13}}}}}}}
| {{#if:{{{14|}}}|{{l|oc|{{{14}}}}}}}
| {{#if:{{{15|}}}|{{l|oc|{{{15}}}}}}}
|-
! class="roa-indicative-left-rail" style="height:3em;" | อดีตกาลสิ้นสุด (สมบูรณ์)
| {{#if:{{{16|}}}|{{l|oc|{{{16}}}}}}}
| {{#if:{{{17|}}}|{{l|oc|{{{17}}}}}}}
| {{#if:{{{18|}}}|{{l|oc|{{{18}}}}}}}
| {{#if:{{{19|}}}|{{l|oc|{{{19}}}}}}}
| {{#if:{{{20|}}}|{{l|oc|{{{20}}}}}}}
| {{#if:{{{21|}}}|{{l|oc|{{{21}}}}}}}
|-
! class="roa-indicative-left-rail" style="height:3em;" | อนาคตกาล
| {{#if:{{{22|}}}|{{l|oc|{{{22}}}}}}}
| {{#if:{{{23|}}}|{{l|oc|{{{23}}}}}}}
| {{#if:{{{24|}}}|{{l|oc|{{{24}}}}}}}
| {{#if:{{{25|}}}|{{l|oc|{{{25}}}}}}}
| {{#if:{{{26|}}}|{{l|oc|{{{26}}}}}}}
| {{#if:{{{27|}}}|{{l|oc|{{{27}}}}}}}
|-
! class="roa-indicative-left-rail" style="height:3em;" | มาลาเงื่อนไข
| {{#if:{{{28|}}}|{{l|oc|{{{28}}}}}}}
| {{#if:{{{29|}}}|{{l|oc|{{{29}}}}}}}
| {{#if:{{{30|}}}|{{l|oc|{{{30}}}}}}}
| {{#if:{{{31|}}}|{{l|oc|{{{31}}}}}}}
| {{#if:{{{32|}}}|{{l|oc|{{{32}}}}}}}
| {{#if:{{{33|}}}|{{l|oc|{{{33}}}}}}}
|-
! class="roa-second-conditional-left-rail" style="height:3em;" | มาลาเงื่อนไขรูปที่ 2<sup class="roa-red-superscript">1</sup>
| {{#if:{{{49|}}}|{{l|oc|{{{49}}}}}}}
| {{#if:{{{50|}}}|{{l|oc|{{{50}}}}}}}
| {{#if:{{{51|}}}|{{l|oc|{{{51}}}}}}}
| {{#if:{{{52|}}}|{{l|oc|{{{52}}}}}}}
| {{#if:{{{53|}}}|{{l|oc|{{{53}}}}}}}
| {{#if:{{{54|}}}|{{l|oc|{{{54}}}}}}}
|-
! rowspan="5" class="roa-indicative-left-rail" | กาลประสม
! class="roa-indicative-left-rail" style="height:3em;" | ปัจจุบันกาลสมบูรณ์
! colspan="6" class="roa-compound-row" | ใช้รูปปัจจุบันกาลของ {{m|oc|aver}} + รูปกริยาขยายอดีตกาล
|-
! class="roa-indicative-left-rail" style="height:3em;" | อภิสมบูรณ์
! colspan="6" class="roa-compound-row" | ใช้รูปไม่สมบูรณ์ของ ''{{{aux|aver}}}'' + รูปกริยาขยายอดีตกาล
|-
! class="roa-indicative-left-rail" style="height:3em;" | past anterior
! colspan="6" class="roa-compound-row" | ใช้รูปอดีตกาลสิ้นสุดของ ''{{{aux|aver}}}'' + รูปกริยาขยายอดีตกาล
|-
! class="roa-indicative-left-rail" style="height:3em;" | อนาคตกาลสมบูรณ์
! colspan="6" class="roa-compound-row" | ใช้รูปอนาคตกาลของ ''{{{aux|aver}}}'' + รูปกริยาขยายอดีตกาล
|-
! class="roa-indicative-left-rail" style="height:3em;" | มาลาเงื่อนไขสมบูรณ์
! colspan="6" class="roa-compound-row" | ใช้รูปมาลาเงื่อนไขของ ''{{{aux|aver}}}'' + รูปกริยาขยายอดีตกาล
|-
! class="roa-subjunctive-left-rail" rowspan="3" | มาลาสมมุติ
! class="roa-subjunctive-left-rail" |
! class="roa-subjunctive-left-rail" | que ieu
! class="roa-subjunctive-left-rail" | que tu
! class="roa-subjunctive-left-rail" | que el
! class="roa-subjunctive-left-rail" | que nosautres
! class="roa-subjunctive-left-rail" | que vosautres
! class="roa-subjunctive-left-rail" | que eles
|-
! class="roa-subjunctive-left-rail" style="height:3em;" | ปัจจุบันกาล
| {{#if:{{{34|}}}|{{l|oc|{{{34}}}}}}}
| {{#if:{{{35|}}}|{{l|oc|{{{35}}}}}}}
| {{#if:{{{36|}}}|{{l|oc|{{{36}}}}}}}
| {{#if:{{{37|}}}|{{l|oc|{{{37}}}}}}}
| {{#if:{{{38|}}}|{{l|oc|{{{38}}}}}}}
| {{#if:{{{39|}}}|{{l|oc|{{{39}}}}}}}
|-
! class="roa-subjunctive-left-rail" style="height:3em;" | ไม่สมบูรณ์
| {{#if:{{{40|}}}|{{l|oc|{{{40}}}}}}}
| {{#if:{{{41|}}}|{{l|oc|{{{41}}}}}}}
| {{#if:{{{42|}}}|{{l|oc|{{{42}}}}}}}
| {{#if:{{{43|}}}|{{l|oc|{{{43}}}}}}}
| {{#if:{{{44|}}}|{{l|oc|{{{44}}}}}}}
| {{#if:{{{45|}}}|{{l|oc|{{{45}}}}}}}
|-
! rowspan="2" class="roa-subjunctive-left-rail" | กาลประสม
! class="roa-subjunctive-left-rail" style="height:3em;" | อดีตกาล
! colspan="6" class="roa-compound-row" | ใช้รูปปัจจุบันกาลมาลาสมมุติของ ''{{{aux|aver}}}'' + รูปกริยาขยายอดีตกาล
|-
! class="roa-subjunctive-left-rail" style="height:3em;" | อภิสมบูรณ์
! colspan="6" class="roa-compound-row" | ใช้รูปไม่สมบูรณ์มาลาสมมุติของ ''{{{aux|aver}}}'' + รูปกริยาขยายอดีตกาล
|-
! colspan="2" rowspan="2" class="roa-imperative-left-rail" style="height:3em;" | มาลาสั่ง
! class="roa-imperative-left-rail" | —
! class="roa-imperative-left-rail" | tu
! class="roa-imperative-left-rail" | —
! class="roa-imperative-left-rail" | nosautres
! class="roa-imperative-left-rail" | vosautres
! class="roa-imperative-left-rail" | —
|-
|
| {{#if:{{{46|}}}|{{l|oc|{{{46}}}}}}}
|
| {{#if:{{{47|}}}|{{l|oc|{{{47}}}}}}}
| {{#if:{{{48|}}}|{{l|oc|{{{48}}}}}}}
! class="roa-second-conditional-left-rail" |<sup class="roa-red-superscript">1</sup>'''''ปัจจุบันส่วนใหญ่เลิกใช้แล้ว แต่ยังคงใช้กันอยู่บ้างในภาษาถิ่นลิมูแซงและวิวาโร-อัลป์บางแห่ง'''''
|-
|colspan="8" class="roa-footnote-section" style="text-align:left" | {{{bottom|}}}
|}
</div></div><noinclude>{{documentation}}
</noinclude>
3j9nfo51nubzz89cduwuftgupwh968s
5729451
5729450
2026-07-20T10:03:28Z
Octahedron80
267
5729451
wikitext
text/x-wiki
{{#invoke:checkparams|warn}}<!-- Validate template parameters
--><templatestyles src="Module:roa-verb/style.css" /><div class="NavFrame">
<div class="NavHead" align=left> [[File:{{{dialcoat|Blason_Languedoc.svg}}}|14px]] {{{dial|แล็งกอด็อก (อุตซิตาตอนกลาง)}}}</div>
<div class="NavContent">
{| class="roa-inflection-table" data-toggle-category="inflection"
|-
! colspan="2" class="roa-nonfinite-header" |
! colspan="3" class="roa-nonfinite-header" | กาลสามัญ
! colspan="3" class="roa-nonfinite-header" | กาลประสม
|-
! colspan="2" class="roa-nonfinite-header" | รูปกริยากลาง
| colspan="3" | {{{1|}}}
| colspan="3" | {{{aux|aver}}} {{{3|}}}
|-
! colspan="2" class="roa-nonfinite-header" | รูปกริยาเป็นนาม
| colspan="3" | {{#if:{{{2|}}}|{{l|oc|{{{2}}}}}}}
| colspan="3" | '''ใช้รูปกริยาเป็นนามของ {{m|oc|aver}} + รูปกริยาขยายอดีตกาล'''
|-
! colspan="2" class="roa-nonfinite-header" | รูปกริยาขยายอดีตกาล
| colspan="3" | {{#if:{{{3|}}}|{{l|oc|{{{3}}}}}}}
| colspan="3" | —
|-
! colspan="2" rowspan="2" class="roa-person-number-header" | บุรุษ
! colspan="3" class="roa-person-number-header" | เอกพจน์
! colspan="3" class="roa-person-number-header" | พหูพจน์
|-
! class="roa-person-number-header" style="width:12.5%;" | บุรุษที่หนึ่ง
! class="roa-person-number-header" style="width:12.5%;" | บุรุษที่สอง
! class="roa-person-number-header" style="width:12.5%;" | บุรุษที่สาม
! class="roa-person-number-header" style="width:12.5%;" | บุรุษที่หนึ่ง
! class="roa-person-number-header" style="width:12.5%;" | บุรุษที่สอง
! class="roa-person-number-header" style="width:12.5%;" | บุรุษที่สาม
|-
! class="roa-indicative-left-rail" rowspan="7" | มาลาบอกเล่า
! class="roa-indicative-left-rail" |
! class="roa-indicative-left-rail" | ieu
! class="roa-indicative-left-rail" | tu
! class="roa-indicative-left-rail" | el
! class="roa-indicative-left-rail" | nosautres
! class="roa-indicative-left-rail" | vosautres
! class="roa-indicative-left-rail" | eles
|-
! class="roa-indicative-left-rail" style="height:3em;" | ปัจจุบันกาล
| {{#if:{{{4|}}}|{{l|oc|{{{4}}}}}}}
| {{#if:{{{5|}}}|{{l|oc|{{{5}}}}}}}
| {{#if:{{{6|}}}|{{l|oc|{{{6}}}}}}}
| {{#if:{{{7|}}}|{{l|oc|{{{7}}}}}}}
| {{#if:{{{8|}}}|{{l|oc|{{{8}}}}}}}
| {{#if:{{{9|}}}|{{l|oc|{{{9}}}}}}}
|-
! class="roa-indicative-left-rail" style="height:3em;" | ไม่สมบูรณ์
| {{#if:{{{10|}}}|{{l|oc|{{{10}}}}}}}
| {{#if:{{{11|}}}|{{l|oc|{{{11}}}}}}}
| {{#if:{{{12|}}}|{{l|oc|{{{12}}}}}}}
| {{#if:{{{13|}}}|{{l|oc|{{{13}}}}}}}
| {{#if:{{{14|}}}|{{l|oc|{{{14}}}}}}}
| {{#if:{{{15|}}}|{{l|oc|{{{15}}}}}}}
|-
! class="roa-indicative-left-rail" style="height:3em;" | อดีตกาลสิ้นสุด (สมบูรณ์)
| {{#if:{{{16|}}}|{{l|oc|{{{16}}}}}}}
| {{#if:{{{17|}}}|{{l|oc|{{{17}}}}}}}
| {{#if:{{{18|}}}|{{l|oc|{{{18}}}}}}}
| {{#if:{{{19|}}}|{{l|oc|{{{19}}}}}}}
| {{#if:{{{20|}}}|{{l|oc|{{{20}}}}}}}
| {{#if:{{{21|}}}|{{l|oc|{{{21}}}}}}}
|-
! class="roa-indicative-left-rail" style="height:3em;" | อนาคตกาล
| {{#if:{{{22|}}}|{{l|oc|{{{22}}}}}}}
| {{#if:{{{23|}}}|{{l|oc|{{{23}}}}}}}
| {{#if:{{{24|}}}|{{l|oc|{{{24}}}}}}}
| {{#if:{{{25|}}}|{{l|oc|{{{25}}}}}}}
| {{#if:{{{26|}}}|{{l|oc|{{{26}}}}}}}
| {{#if:{{{27|}}}|{{l|oc|{{{27}}}}}}}
|-
! class="roa-indicative-left-rail" style="height:3em;" | มาลาเงื่อนไข
| {{#if:{{{28|}}}|{{l|oc|{{{28}}}}}}}
| {{#if:{{{29|}}}|{{l|oc|{{{29}}}}}}}
| {{#if:{{{30|}}}|{{l|oc|{{{30}}}}}}}
| {{#if:{{{31|}}}|{{l|oc|{{{31}}}}}}}
| {{#if:{{{32|}}}|{{l|oc|{{{32}}}}}}}
| {{#if:{{{33|}}}|{{l|oc|{{{33}}}}}}}
|-
! class="roa-second-conditional-left-rail" style="height:3em;" | มาลาเงื่อนไขรูปที่ 2<sup class="roa-red-superscript">1</sup>
| {{#if:{{{49|}}}|{{l|oc|{{{49}}}}}}}
| {{#if:{{{50|}}}|{{l|oc|{{{50}}}}}}}
| {{#if:{{{51|}}}|{{l|oc|{{{51}}}}}}}
| {{#if:{{{52|}}}|{{l|oc|{{{52}}}}}}}
| {{#if:{{{53|}}}|{{l|oc|{{{53}}}}}}}
| {{#if:{{{54|}}}|{{l|oc|{{{54}}}}}}}
|-
! rowspan="5" class="roa-indicative-left-rail" | กาลประสม
! class="roa-indicative-left-rail" style="height:3em;" | ปัจจุบันกาลสมบูรณ์
! colspan="6" class="roa-compound-row" | ใช้รูปปัจจุบันกาลของ {{m|oc|aver}} + รูปกริยาขยายอดีตกาล
|-
! class="roa-indicative-left-rail" style="height:3em;" | อภิสมบูรณ์
! colspan="6" class="roa-compound-row" | ใช้รูปไม่สมบูรณ์ของ ''{{{aux|aver}}}'' + รูปกริยาขยายอดีตกาล
|-
! class="roa-indicative-left-rail" style="height:3em;" | past anterior
! colspan="6" class="roa-compound-row" | ใช้รูปอดีตกาลสิ้นสุดของ ''{{{aux|aver}}}'' + รูปกริยาขยายอดีตกาล
|-
! class="roa-indicative-left-rail" style="height:3em;" | อนาคตกาลสมบูรณ์
! colspan="6" class="roa-compound-row" | ใช้รูปอนาคตกาลของ ''{{{aux|aver}}}'' + รูปกริยาขยายอดีตกาล
|-
! class="roa-indicative-left-rail" style="height:3em;" | มาลาเงื่อนไขสมบูรณ์
! colspan="6" class="roa-compound-row" | ใช้รูปมาลาเงื่อนไขของ ''{{{aux|aver}}}'' + รูปกริยาขยายอดีตกาล
|-
! class="roa-subjunctive-left-rail" rowspan="3" | มาลาสมมุติ
! class="roa-subjunctive-left-rail" |
! class="roa-subjunctive-left-rail" | que ieu
! class="roa-subjunctive-left-rail" | que tu
! class="roa-subjunctive-left-rail" | que el
! class="roa-subjunctive-left-rail" | que nosautres
! class="roa-subjunctive-left-rail" | que vosautres
! class="roa-subjunctive-left-rail" | que eles
|-
! class="roa-subjunctive-left-rail" style="height:3em;" | ปัจจุบันกาล
| {{#if:{{{34|}}}|{{l|oc|{{{34}}}}}}}
| {{#if:{{{35|}}}|{{l|oc|{{{35}}}}}}}
| {{#if:{{{36|}}}|{{l|oc|{{{36}}}}}}}
| {{#if:{{{37|}}}|{{l|oc|{{{37}}}}}}}
| {{#if:{{{38|}}}|{{l|oc|{{{38}}}}}}}
| {{#if:{{{39|}}}|{{l|oc|{{{39}}}}}}}
|-
! class="roa-subjunctive-left-rail" style="height:3em;" | ไม่สมบูรณ์
| {{#if:{{{40|}}}|{{l|oc|{{{40}}}}}}}
| {{#if:{{{41|}}}|{{l|oc|{{{41}}}}}}}
| {{#if:{{{42|}}}|{{l|oc|{{{42}}}}}}}
| {{#if:{{{43|}}}|{{l|oc|{{{43}}}}}}}
| {{#if:{{{44|}}}|{{l|oc|{{{44}}}}}}}
| {{#if:{{{45|}}}|{{l|oc|{{{45}}}}}}}
|-
! rowspan="2" class="roa-subjunctive-left-rail" | กาลประสม
! class="roa-subjunctive-left-rail" style="height:3em;" | อดีตกาล
! colspan="6" class="roa-compound-row" | ใช้รูปปัจจุบันกาลมาลาสมมุติของ ''{{{aux|aver}}}'' + รูปกริยาขยายอดีตกาล
|-
! class="roa-subjunctive-left-rail" style="height:3em;" | อภิสมบูรณ์
! colspan="6" class="roa-compound-row" | ใช้รูปไม่สมบูรณ์มาลาสมมุติของ ''{{{aux|aver}}}'' + รูปกริยาขยายอดีตกาล
|-
! colspan="2" rowspan="2" class="roa-imperative-left-rail" style="height:3em;" | มาลาสั่ง
! class="roa-imperative-left-rail" | —
! class="roa-imperative-left-rail" | tu
! class="roa-imperative-left-rail" | —
! class="roa-imperative-left-rail" | nosautres
! class="roa-imperative-left-rail" | vosautres
! class="roa-imperative-left-rail" | —
|-
|
| {{#if:{{{46|}}}|{{l|oc|{{{46}}}}}}}
|
| {{#if:{{{47|}}}|{{l|oc|{{{47}}}}}}}
| {{#if:{{{48|}}}|{{l|oc|{{{48}}}}}}}
! class="roa-second-conditional-left-rail" |<sup class="roa-red-superscript">1</sup>'''''ปัจจุบันส่วนใหญ่เลิกใช้แล้ว แต่ยังคงใช้กันอยู่บ้างในภาษาถิ่นลีมูแซ็งและวิวาโร-อัลแป็งบางแห่ง'''''
|-
|colspan="8" class="roa-footnote-section" style="text-align:left" | {{{bottom|}}}
|}
</div></div><noinclude>{{documentation}}
</noinclude>
dafyko416gni6kb27k4kmclv1eoif0y
dormissi
0
2333920
5729452
2026-07-20T10:04:19Z
Octahedron80
267
นำเข้าจาก enwikt เก็บกวาด
5729452
wikitext
text/x-wiki
== ภาษาอิตาลี ==
=== คำกริยา ===
{{head|it|รูปกริยา}}
# {{inflection of|it|dormire||1//2|s|impf|sub}}
ekneuhl29krzw7vj4fwgu7bw0fhgibg