Wiktionary viwiktionary https://vi.wiktionary.org/wiki/Wiktionary:Trang_Ch%C3%ADnh MediaWiki 1.47.0-wmf.24 case-sensitive Phương tiện Đặc biệt Thảo luận Thành viên Thảo luận Thành viên Wiktionary Thảo luận Wiktionary Tập tin Thảo luận Tập tin MediaWiki Thảo luận MediaWiki Bản mẫu Thảo luận Bản mẫu Trợ giúp Thảo luận Trợ giúp Thể loại Thảo luận Thể loại Phụ lục Thảo luận Phụ lục TimedText TimedText talk Mô đun Thảo luận Mô đun Sự kiện Thảo luận Sự kiện atone 0 4310 2571769 2372118 2026-10-19T03:08:20Z Hiyuune 50834 2571769 wikitext text/x-wiki {{also|at one}} =={{langname|en}}== ==={{section|pron}}=== * {{IPA|en|/əˈtəʊn/|a=UK}} * {{IPA|en|/əˈtoʊn/|[əˈtʰoʊ̯n]|a=US}} * {{audio|en|en-us-atone.ogg|a=US}} * {{audio|en|en-au-atone.ogg|a=AU}} * {{rhymes|en|əʊn|s=2}} ===Verb=== {{en-verb}} # [[chuộc|Chuộc]] lỗi. #: {{ux|en|To '''atone''' for a fault.|Chuộc lỗi.}} # [[dàn xếp|Dàn xếp]], [[hoà giải]]. ===={{section|drv}}==== {{col|en|unatoned|atoningly|unatoning|atonable|atoneable|atonement|atoner}} ==={{section|ref}}=== * {{R:FVDP|db=ev}} * {{R:Etymonline}} * {{R:Webster}} * {{R:Merriam-Webster}} ==={{section|ana}}=== * {{anagrams|en|a=aenot|Aneto|Eaton|neato|notea|oaten|Onate}} {{cln|en|Từ có hậu tố at-}} ==French== ===Etymology=== {{ety|fr|:lbor|grc:ἄτονος}} {{lbor|fr|grc|ἄτονος}}. ===Pronunciation=== * {{fr-IPA}} * {{audio|fr|LL-Q150 (fra)-Lepticed7-atone.wav|a=<<France>> (<<Toulouse>>)}} ===Adjective=== {{fr-adj}} # [[lờ|Lờ]] đờ, [[uể oải]]. #: {{ux|fr|Des yeux '''atones'''.|Con mắt lờ đờ.}} #: {{ux|fr|Vie '''atone'''.|Cuộc sống uể oải.}} # {{lb|fr|linguistics}} [[không|Không]] có [[trọng âm]]. #: {{ux|fr|Voyelle '''atone'''.|Nguyên âm không có trọng âm.}} # [[không|Không]] [[trương lực]]. ==={{section|ref}}=== * {{R:FVDP|db=fv}} ==={{section|further}}=== * {{R:fr:TLFi}} =={{langname|it}}== ==={{section|pron}}=== {{it-pr|^à}} ==={{section|adj}}=== {{head|it|Biến thể hình thái tính từ|g=f-p}} # {{adj form of|it|atono||f|p}} ==={{section|ana}}=== * {{anagrams|it|a=aenot|Anteo|aneto|etano}} s33s6fn2agi7228sw684ebzp9kkxada 2571770 2571769 2026-10-19T03:08:54Z Hiyuune 50834 2571770 wikitext text/x-wiki {{also|at one}} =={{langname|en}}== ==={{section|pron}}=== * {{IPA|en|/əˈtəʊn/|a=UK}} * {{IPA|en|/əˈtoʊn/|[əˈtʰoʊ̯n]|a=US}} * {{audio|en|en-us-atone.ogg|a=US}} * {{audio|en|en-au-atone.ogg|a=AU}} * {{rhymes|en|əʊn|s=2}} ==={{section|v}}=== {{en-verb}} # [[chuộc|Chuộc]] lỗi. #: {{ux|en|To '''atone''' for a fault.|Chuộc lỗi.}} # [[dàn xếp|Dàn xếp]], [[hoà giải]]. ===={{section|drv}}==== {{col|en|unatoned|atoningly|unatoning|atonable|atoneable|atonement|atoner}} ==={{section|ref}}=== * {{R:FVDP|db=ev}} * {{R:Etymonline}} * {{R:Webster}} * {{R:Merriam-Webster}} ==={{section|ana}}=== * {{anagrams|en|a=aenot|Aneto|Eaton|neato|notea|oaten|Onate}} {{cln|en|Từ có hậu tố at-}} =={{langname|fr}}== ==={{section|etym}}=== {{ety|fr|:lbor|grc:ἄτονος}} {{lbor|fr|grc|ἄτονος}}. ==={{section|pron}}=== * {{fr-IPA}} * {{audio|fr|LL-Q150 (fra)-Lepticed7-atone.wav|a=Toulouse}} ==={{section|adj}}=== {{fr-adj}} # [[lờ|Lờ]] đờ, [[uể oải]]. #: {{ux|fr|Des yeux '''atones'''.|Con mắt lờ đờ.}} #: {{ux|fr|Vie '''atone'''.|Cuộc sống uể oải.}} # {{lb|fr|linguistics}} [[không|Không]] có [[trọng âm]]. #: {{ux|fr|Voyelle '''atone'''.|Nguyên âm không có trọng âm.}} # [[không|Không]] [[trương lực]]. ==={{section|ref}}=== * {{R:FVDP|db=fv}} ==={{section|further}}=== * {{R:fr:TLFi}} =={{langname|it}}== ==={{section|pron}}=== {{it-pr|^à}} ==={{section|adj}}=== {{head|it|Biến thể hình thái tính từ|g=f-p}} # {{adj form of|it|atono||f|p}} ==={{section|ana}}=== * {{anagrams|it|a=aenot|Anteo|aneto|etano}} rrjik6emgia8xzydkhgyz1506fktgmv nhâm 0 32302 2571797 2417389 2026-10-19T08:04:34Z Hiyuune 50834 2571797 wikitext text/x-wiki {{also|Phụ lục:Biến thể của "nham"}} =={{langname|vi}}== ==={{section|pron}}=== {{vi-pron}} ==={{section|n}}=== {{vi-noun}} # [[ngôi thứ|Ngôi thứ]] [[chín]] trong [[mười]] [[can]]. #: {{ux|vi|Giáp, ất, bính, đinh, mậu, kỷ, canh, tân, '''nhâm''', quí.}} ==={{section|hanviet}}=== {{col|vi|title=phiên âm Hán-Việt|鵀<t:nhâm>|銋<t:nhâm>|妊<t:nhậm, nhẫm, nhâm>|絍<t:nhâm>|壬<t:trình, nhậm, nhâm>|䋕<t:nhâm>|纴<t:nhâm>|姙<t:nhậm, nhâm>|任<t:nhậm, nhâm, nhiệm>|紝<t:nhậm, nhẫm, nhâm>}} {{col|vi|title=phồn thể|妊<t:nhâm>|絍<t:nhâm>|壬<t:nhâm>|姙<t:nhâm>|任<t:nhậm, nhâm>|紝<t:nhâm>}} ==={{section|nôm}}=== {{col|vi|title=chữ Nôm|鵀<t:nhâm>|𠰃<t:nhâm, nhầm, nhấm, nhảm, nham, nhắm, nhằm, nhồm>|銋<t:nhâm, nhôm>|妊<t:nhâm, nhậm>|絍<t:nhâm>|壬<t:nhâm, trình, nhậm, nhăm, nhám, nhằm, nhẹm, râm>|𡆑<t:nhâm, nhàm, nhởm>|纴<t:nhâm>|姙<t:nhâm, nhậm>|任<t:nhâm, nhầm, nhậm, vững, nhăm, nhẩm, nhặm, nhiệm, nhằm>|紝<t:nhâm, nhậm>}} ==={{section|ref}}=== * {{R:FVDP}} * {{R:WinVNKey:Lê Sơn Thanh}} 0kbcstq5dmboh4nzbdaqd7m4bxs2t33 psychiatrie 0 47569 2571811 2359772 2026-10-19T08:27:19Z Hiyuune 50834 2571811 wikitext text/x-wiki {{also|Psychiatrie}} =={{langname|nl}}== {{wp|nl:}} ==={{ĐM|pron}}=== * {{IPA|nl|/ˌpsi.xi.aːˈtri/}} * {{audio|nl|Nl-psychiatrie.ogg}} ==={{ĐM|n}}=== {{nl-noun|f|-|-}} # [[tâm thần học|Tâm thần học]]. ===={{ĐM|desc}}==== * {{desc|id|bor=1|psikiatri}} {{C|nl|Tâm thần học}} =={{langname|fr}}== ==={{ĐM|etym}}=== {{etymon|fr|:af|psychiatre|-ie}} Từ {{affix|fr|psychiatre|-ie}}. ==={{ĐM|pron}}=== * {{fr-IPA}} * {{audio|fr|Fr-psychiatrie.ogg}} ==={{ĐM|n}}=== {{fr-noun|f}} # [[tâm thần học|Tâm thần học]]. ===={{ĐM|rel}}==== * {{l|fr|psychiatre}} * {{l|fr|psychiatrique}} * {{l|fr|psychologie}} ===={{ĐM|desc}}==== * {{desc|tr|psikiyatri|bor=1}} ==={{ĐM|ref}}=== * {{R:FVDP|db=fv}} ==={{ĐM|further}}=== * {{R:fr:TLFi}} {{C|fr|Tâm thần học}} =={{langname|cs}}== {{wp|cs:}} ==={{ĐM|pron}}=== * {{cs-IPA}} ==={{ĐM|n}}=== {{cs-noun|f}} # [[tâm thần học|Tâm thần học]]. ===={{ĐM|decl}}==== {{cs-ndecl|f}} ===={{ĐM|rel}}==== * Xem {{l|cs|psycho-}} {{col|cs|psychiatr|psychiatrický}} ==={{ĐM|further}}=== * {{R:cs:PSJC}} * {{R:cs:SSJC}} * {{R:cs:IJP}} {{C|cs|Tâm thần học}} qvmvtrmvk1johpp69vyj5c7l7r6rah0 hem 0 56276 2571689 2477288 2026-10-18T15:00:28Z WhoAlone 40420 2571689 wikitext text/x-wiki {{-eng-}} {{-pron-}} * [[Wiktionary:IPA|IPA]]: {{IPA-old|/ˈhɛm/}} {{pron-audio |place=Hoa Kỳ <!-- Feel free to precise the city or the area --> |file=En-us-hem.ogg |pron=ˈhɛm}} {{-noun-}} '''hem''' {{IPA-old|/ˈhɛm/}} # Đường [[viền]] (áo, quần... ). {{-tr-verb-}} '''hem''' ''ngoại động từ'' {{IPA-old|/ˈhɛm/}} # [[viền|Viền]]. # {{term|+ in, about, around}} [[bao vây|Bao vây]], [[bao bọc]], [[bao quanh]]. #: ''to '''hem''' in the enemy'' — bao vây quân địch {{-forms-}} {{eng-verb|base=hem|hem|m|ed}} {{-noun-}} '''hem''' {{IPA-old|/ˈhɛm/}} # [[tiếng|Tiếng]] e [[hèm]]; [[tiếng]] đằng [[hắng]], [[tiếng]] [[hắng]] [[giọng]]. {{-intr-verb-}} '''hem''' ''nội động từ'' {{IPA-old|/ˈhɛm/}} # E [[hèm]]; đằng [[hắng]], [[hắng]] [[giọng]]. {{-expr-}} * '''to hem and haw''': [[nói|Nói]] ấp a ấp úng, [[nói]] [[ngắc ngứ]]. {{-interj-}} '''hem''' {{IPA-old|/ˈhɛm/}} # [[hèm|Hèm]]!, e [[hèm]]! {{-forms-}} {{eng-verb|base=hem|hem|m|ed}} {{-ref-}} {{R:FVDP}} {{-gag-}} {{-conj-}} {{pn}} # [[và]]. [[Thể loại:Liên từ tiếng Gagauz]] {{-nld-}} {{-pronoun-}} {{nld-pronoun}} # ''Đại từ ngôi thứ ba số ít giống đực, dạng bổ ngữ của'' '''{{l|nl|hij}}'''. [[Thể loại:Đại từ tiếng Hà Lan]] {{-fra-}} [[Hình:Heme b.png|thumb|hem]] {{-pron-}} * [[Wiktionary:IPA|IPA]]: {{IPA-old|/hɛm/}} {{-interj-}} '''hem''' {{IPA-old|/hɛm/}} # Này! (để làm cho chú ý). # [[hừ|Hừ]]! [[hèm]]! (tỏ ý hoài nghi). # [[hèm|Hèm]]! {{-ref-}} {{R:FVDP}} [[Thể loại:Danh từ tiếng Anh]] [[Thể loại:Thán từ tiếng Anh]] [[Thể loại:Thán từ tiếng Pháp]] [[Thể loại:Động từ tiếng Anh]] =={{langname|tef}}== ==={{ĐM|noun}}=== {{head|tef|Danh từ}} # [[vườn]]. ==={{ĐM|ref}}=== * ''Lurö Dictionary: Lurö (Nicobarese) - English - Hindi'' (2020). Anvita Abbi, Vysakh R. {{c|tef|Thực vật}} 6e78izzsenbjrdyq5l5g88key7z9p5h 2571690 2571689 2026-10-18T15:00:39Z WhoAlone 40420 2571690 wikitext text/x-wiki {{-eng-}} {{-pron-}} * [[Wiktionary:IPA|IPA]]: {{IPA-old|/ˈhɛm/}} {{pron-audio |place=Hoa Kỳ <!-- Feel free to precise the city or the area --> |file=En-us-hem.ogg |pron=ˈhɛm}} {{-noun-}} '''hem''' {{IPA-old|/ˈhɛm/}} # Đường [[viền]] (áo, quần... ). {{-tr-verb-}} '''hem''' ''ngoại động từ'' {{IPA-old|/ˈhɛm/}} # [[viền|Viền]]. # {{term|+ in, about, around}} [[bao vây|Bao vây]], [[bao bọc]], [[bao quanh]]. #: ''to '''hem''' in the enemy'' — bao vây quân địch {{-forms-}} {{eng-verb|base=hem|hem|m|ed}} {{-noun-}} '''hem''' {{IPA-old|/ˈhɛm/}} # [[tiếng|Tiếng]] e [[hèm]]; [[tiếng]] đằng [[hắng]], [[tiếng]] [[hắng]] [[giọng]]. {{-intr-verb-}} '''hem''' ''nội động từ'' {{IPA-old|/ˈhɛm/}} # E [[hèm]]; đằng [[hắng]], [[hắng]] [[giọng]]. {{-expr-}} * '''to hem and haw''': [[nói|Nói]] ấp a ấp úng, [[nói]] [[ngắc ngứ]]. {{-interj-}} '''hem''' {{IPA-old|/ˈhɛm/}} # [[hèm|Hèm]]!, e [[hèm]]! {{-forms-}} {{eng-verb|base=hem|hem|m|ed}} {{-ref-}} {{R:FVDP}} {{-gag-}} {{-conj-}} {{pn}} # [[và]]. [[Thể loại:Liên từ tiếng Gagauz]] {{-nld-}} {{-pronoun-}} {{nld-pronoun}} # ''Đại từ ngôi thứ ba số ít giống đực, dạng bổ ngữ của'' '''{{l|nl|hij}}'''. [[Thể loại:Đại từ tiếng Hà Lan]] {{-fra-}} [[Hình:Heme b.png|thumb|hem]] {{-pron-}} * [[Wiktionary:IPA|IPA]]: {{IPA-old|/hɛm/}} {{-interj-}} '''hem''' {{IPA-old|/hɛm/}} # Này! (để làm cho chú ý). # [[hừ|Hừ]]! [[hèm]]! (tỏ ý hoài nghi). # [[hèm|Hèm]]! {{-ref-}} {{R:FVDP}} [[Thể loại:Danh từ tiếng Anh]] [[Thể loại:Thán từ tiếng Anh]] [[Thể loại:Thán từ tiếng Pháp]] [[Thể loại:Động từ tiếng Anh]] =={{langname|tef}}== ==={{ĐM|noun}}=== {{head|tef|Danh từ}} # [[vườn]]. ==={{ĐM|ref}}=== * ''Lurö Dictionary: Lurö (Nicobarese) - English - Hindi'' (2020). Anvita Abbi, Vysakh R. {{c|tef|Thực vật|Trồng trọt}} 256vj5g1xr6akxf078xjyt82lhx5iwl следование 0 69902 2571779 2531384 2026-10-19T03:22:30Z Hiyuune 50834 2571779 wikitext text/x-wiki =={{langname|ru}}== ==={{section|etym}}=== {{af|ru|сле́довать|-ание}} ==={{section|pron}}=== * {{ru-IPA|сле́дование|pos=n}} * {{audio|ru|Ru-следование.ogg}} ==={{section|n}}=== {{ru-noun+|сле́дование}} # Sự [[chuyển động]], sự [[vận động]], sự [[cử động]], sự [[hoạt động]]. # Sự [[bằng lòng]], sự [[ưng thuận]], sự chiều theo. ===={{section|decl}}==== {{ru-noun-table|сле́дование}} ===={{section|rel}}==== * {{l|ru|сле́довать}}, {{l|ru|после́довать}}, {{l|ru|просле́довать}} * {{l|ru|сле́дствие}}, {{l|ru|сле́дователь}}, {{l|ru|след}}, {{l|ru|после́дствие}}, {{l|ru|рассле́дование}} * {{l|ru|следово́й}}, {{l|ru|сле́дственный}}, {{l|ru|после́довательный}} * {{l|ru|сле́довательно}} ==={{section|ref}}=== * {{R:FVDP|db=rv}} gz4xfdywlsouelyglih7311vh3wnian следовательно 0 73229 2571780 1979140 2026-10-19T03:25:25Z Hiyuune 50834 2571780 wikitext text/x-wiki =={{langname|ru}}== ==={{section|pron}}=== * {{ru-IPA|сле́довательно}} * {{audio|ru|Ru-следовательно.ogg}} * {{audio|ru|LL-Q7737 (rus)-Tatiana Kerbush-следовательно.wav|a=Saint Petersburg}} ==={{section|adv}}=== {{head|ru|Phó từ|head=сле́довательно}} # [[do|Do]] [[đó]]; [[thành ra]]. # [[vì|Vì]] [[vậy]]. ===={{section|syn}}==== * {{l|ru|потому́}} * {{l|ru|поэ́тому}} ===={{section|rel}}==== * {{l|ru|сле́довать}} ==={{section|ref}}=== * {{R:FVDP|db=rv}} 8y1m8t33kj8lc9cvvfy7kxrxnmuchsi выследить 0 79094 2571776 2548639 2026-10-19T03:14:56Z Hiyuune 50834 2571776 wikitext text/x-wiki =={{langname|ru}}== ==={{section|etym}}=== {{af|ru|вы́-|следи́ть}} ==={{section|pron}}=== * {{ru-IPA|вы́следить}} ==={{section|v}}=== {{ru-verb|вы́следить|pf|impf=высле́живать}} # [[theo dõi|Theo dõi]], [[truy tìm]], [[rình mò]], [[tìm kiếm]]. ===={{section|forms}}==== {{ru-conj|pf|4a+p|вы́следить}} ===={{section|rel}}==== * {{l|ru|след}} * {{l|ru|сле́дом}} * {{l|ru|следи́ть|g=impf}}, {{l|ru|проследи́ть|g=pf}}, {{l|ru|отследи́ть|g=pf}}, {{l|ru|наследи́ть|g=pf}} * {{l|ru|слеже́ние}} * {{l|ru|сле́жка}} * {{l|ru|сле́довать}}, {{l|ru|сле́дование}}, {{l|ru|сле́дователь}}, {{l|ru|сле́довательно}} ==={{section|ref}}=== * {{R:FVDP|db=rv}} fw3iya01j1xlyuefamtv7nqlogfjabi GDP 0 83991 2571648 2258046 2026-10-18T13:45:41Z TheHighFighter2 42988 /* Tiếng Anh */ 2571648 wikitext text/x-wiki =={{langname|en}}== {{wp|en:<dab>}} ==={{ĐM|pron}}=== * {{IPA4|en|/ˌd͡ʒiːdiːˈpiː/}} * {{audio|en|en-us-GDP.ogg|a=US}} * {{rhymes|en|iː|s=3}} ==={{ĐM|n}}=== {{en-noun|-|s}} # {{label|en|economics}} {{init of|en|gross domestic product|t=tổng sản phẩm quốc nội}} ==={{ĐM|ref}}=== {{R:FVDP|db=ev}} ==={{ĐM|anagram}}=== * {{anagrams|en|a=dgp|PGD|GPD|DPG}} kruuflowdq74ymdpz7atpcvo7ynhqow выслеживать 0 89933 2571775 2548640 2026-10-19T03:13:29Z Hiyuune 50834 2571775 wikitext text/x-wiki =={{langname|ru}}== ==={{section|etym}}=== {{af|ru|вы́следить|-ивать}} ==={{section|pron}}=== * {{ru-IPA|высле́живать}} ==={{section|v}}=== {{ru-verb|высле́живать|impf|pf=вы́следить}} # [[theo dõi|Theo dõi]], [[truy tìm]], [[rình mò]], [[tìm kiếm]]. ===={{section|forms}}==== {{ru-conj|impf|1a|высле́живать}} ===={{section|rel}}==== * {{l|ru|след}} * {{l|ru|сле́дом}} * {{l|ru|следи́ть|g=impf}}, {{l|ru|проследи́ть|g=pf}}, {{l|ru|отследи́ть|g=pf}}, {{l|ru|наследи́ть|g=pf}} * {{l|ru|слеже́ние}} * {{l|ru|сле́жка}} * {{l|ru|сле́довать}}, {{l|ru|сле́дование}}, {{l|ru|сле́дователь}}, {{l|ru|сле́довательно}} ==={{section|ref}}=== * {{R:FVDP|db=rv}} m5sfkj2t0nscl6h1s26zj582pq21zg0 nominative 0 99295 2571813 2537906 2026-10-19T08:36:20Z Hiyuune 50834 2571813 wikitext text/x-wiki {{also|Nominative}} =={{langname|en}}== {{wp|en:}} ==={{section|etym}}=== {{etymon|en|:inh|enm:nominatyf<ety:bor<fro:nominatif<ety:der<la:nōminātīvus>>><la:nōminātīvus>>|tree=1}} Từ {{inh|en|enm|nominatyf}}, hoặc thông qua {{der|en|fro|nominatif}} hoặc trực tiếp từ {{der|en|la|nōminātīvus}}. ==={{section|pron}}=== * {{enPR|nŏmʹ(ĭ)nətĭv}}, {{IPA|en|a1=GA|/ˈnɑm(ɪ)nətɪv/|a2=RP|/ˈnɒm(ɪ)nətɪv/}} * {{audio|en|LL-Q1860 (eng)-Vealhurl-nominative.wav|a=Southern England}} ==={{section|adj}}=== {{en-adj|-}} # Được [[bổ nhiệm]], được [[chỉ định]]. # {{lb|en|grammar}} [[danh cách|Danh cách]]. ===={{section|drv}}==== {{col|en|nominatival|nominatively|denominative|nominative absolute|nominative determinism|nominative type system}} ==={{section|n}}=== {{en-noun}} # {{lb|en|grammar}} [[danh cách|Danh cách]]. ==={{section|ref}}=== * {{R:FVDP|db=ev}} =={{langname|la}}== ==={{section|pron}}=== * {{la-IPA|nōminātīve}} ==={{section|adj}}=== {{head|la|Biến thể hình thái tính từ|head=nōminātīve}} # {{inflection of|la|nōminātīvus||voc|ở|m|s}} ==={{section|ref}}=== * {{R:la:du Cange}} =={{langname|fr}}== ==={{section|pron}}=== * {{fr-IPA}} * {{audio|fr|LL-Q150 (fra)-WikiLucas00-nominative.wav|a=Lyon}} ==={{section|adj}}=== {{head|fr|Biến thể hình thái tính từ}} # {{feminine singular of|fr|nominatif}} =={{langname|ro}}== ==={{section|pron}}=== * {{IPA|ro|/ˌnominaˈtive/}} ==={{section|adj}}=== {{head|ro|Biến thể hình thái tính từ}} # {{inflection of|ro|nominativ||nom//acc|ở|f//n|p}} ==={{section|n}}=== {{head|ro|Biến thể hình thái danh từ|g=n-p}} # {{plural of|ro|nominativ}} =={{langname|it}}== ==={{section|adj}}=== {{head|it|Biến thể hình thái tính từ}} # {{adj form of|it|nominativo||f|p}} ==={{section|ana}}=== * {{anagrams|it|a=aeiimnnotv|inventiamo}} 5yd9cov43zwxwless2wmg44p1383qpv 2571816 2571813 2026-10-19T08:42:30Z Hiyuune 50834 2571816 wikitext text/x-wiki {{also|Nominative}} =={{langname|en}}== {{wp|en:}} ==={{section|etym}}=== {{etymon|en|:inh|enm:nominatyf<ety:bor<fro:nominatif<ety:der<la:nōminātīvus>>><la:nōminātīvus>>|tree=1}} Từ {{inh|en|enm|nominatyf}}, hoặc thông qua {{der|en|fro|nominatif}} hoặc trực tiếp từ {{der|en|la|nōminātīvus}}. ==={{section|pron}}=== * {{enPR|nŏmʹ(ĭ)nətĭv}}, {{IPA|en|a1=GA|/ˈnɑm(ɪ)nətɪv/|a2=RP|/ˈnɒm(ɪ)nətɪv/}} * {{audio|en|LL-Q1860 (eng)-Vealhurl-nominative.wav|a=Southern England}} ==={{section|adj}}=== {{en-adj|-}} # Được [[bổ nhiệm]], được [[chỉ định]]. # {{lb|en|grammar}} [[danh cách|Danh cách]]. ===={{section|drv}}==== {{col|en|nominatival|nominatively|denominative|nominative absolute|nominative determinism|nominative type system}} ==={{section|n}}=== {{en-noun}} # {{lb|en|grammar}} [[danh cách|Danh cách]]. ==={{section|ref}}=== * {{R:FVDP|db=ev}} * {{R:en:Cao Xuân Hạo, Hoàng Dũng 2004}} =={{langname|la}}== ==={{section|pron}}=== * {{la-IPA|nōminātīve}} ==={{section|adj}}=== {{head|la|Biến thể hình thái tính từ|head=nōminātīve}} # {{inflection of|la|nōminātīvus||voc|ở|m|s}} ==={{section|ref}}=== * {{R:la:du Cange}} =={{langname|fr}}== ==={{section|pron}}=== * {{fr-IPA}} * {{audio|fr|LL-Q150 (fra)-WikiLucas00-nominative.wav|a=Lyon}} ==={{section|adj}}=== {{head|fr|Biến thể hình thái tính từ}} # {{feminine singular of|fr|nominatif}} =={{langname|ro}}== ==={{section|pron}}=== * {{IPA|ro|/ˌnominaˈtive/}} ==={{section|adj}}=== {{head|ro|Biến thể hình thái tính từ}} # {{inflection of|ro|nominativ||nom//acc|ở|f//n|p}} ==={{section|n}}=== {{head|ro|Biến thể hình thái danh từ|g=n-p}} # {{plural of|ro|nominativ}} =={{langname|it}}== ==={{section|adj}}=== {{head|it|Biến thể hình thái tính từ}} # {{adj form of|it|nominativo||f|p}} ==={{section|ana}}=== * {{anagrams|it|a=aeiimnnotv|inventiamo}} 8lucge98si0zfd9cgde7pywew3yt8af 2571817 2571816 2026-10-19T08:43:03Z Hiyuune 50834 2571817 wikitext text/x-wiki {{also|Nominative}} =={{langname|en}}== {{wp|en:}} ==={{section|etym}}=== {{etymon|en|:inh|enm:nominatyf<ety:bor<fro:nominatif<ety:der<la:nōminātīvus>>><la:nōminātīvus>>|tree=1}} Từ {{inh|en|enm|nominatyf}}, hoặc thông qua {{der|en|fro|nominatif}} hoặc trực tiếp từ {{der|en|la|nōminātīvus}}. ==={{section|pron}}=== * {{enPR|nŏmʹ(ĭ)nətĭv}}, {{IPA|en|a1=GA|/ˈnɑm(ɪ)nətɪv/|a2=RP|/ˈnɒm(ɪ)nətɪv/}} * {{audio|en|LL-Q1860 (eng)-Vealhurl-nominative.wav|a=Southern England}} ==={{section|adj}}=== {{en-adj|-}} # Được [[bổ nhiệm]], được [[chỉ định]]. # {{lb|en|grammar}} [[danh cách|Danh cách]]. ===={{section|drv}}==== {{col|en|nominatival|nominatively|denominative|nominative absolute|nominative determinism|nominative type system}} ==={{section|n}}=== {{en-noun}} # {{lb|en|grammar}} [[danh cách|Danh cách]].<ref>{{R:en:Cao Xuân Hạo, Hoàng Dũng 2004}}</ref> ==={{section|ref}}=== * {{R:FVDP|db=ev}} * {{R:en:Cao Xuân Hạo, Hoàng Dũng 2004}} =={{langname|la}}== ==={{section|pron}}=== * {{la-IPA|nōminātīve}} ==={{section|adj}}=== {{head|la|Biến thể hình thái tính từ|head=nōminātīve}} # {{inflection of|la|nōminātīvus||voc|ở|m|s}} ==={{section|ref}}=== * {{R:la:du Cange}} =={{langname|fr}}== ==={{section|pron}}=== * {{fr-IPA}} * {{audio|fr|LL-Q150 (fra)-WikiLucas00-nominative.wav|a=Lyon}} ==={{section|adj}}=== {{head|fr|Biến thể hình thái tính từ}} # {{feminine singular of|fr|nominatif}} =={{langname|ro}}== ==={{section|pron}}=== * {{IPA|ro|/ˌnominaˈtive/}} ==={{section|adj}}=== {{head|ro|Biến thể hình thái tính từ}} # {{inflection of|ro|nominativ||nom//acc|ở|f//n|p}} ==={{section|n}}=== {{head|ro|Biến thể hình thái danh từ|g=n-p}} # {{plural of|ro|nominativ}} =={{langname|it}}== ==={{section|adj}}=== {{head|it|Biến thể hình thái tính từ}} # {{adj form of|it|nominativo||f|p}} ==={{section|ana}}=== * {{anagrams|it|a=aeiimnnotv|inventiamo}} c3o32azz8d1updhee6glzak8m5r1skn 2571818 2571817 2026-10-19T08:43:17Z Hiyuune 50834 2571818 wikitext text/x-wiki {{also|Nominative}} =={{langname|en}}== {{wp|en:}} ==={{section|etym}}=== {{etymon|en|:inh|enm:nominatyf<ety:bor<fro:nominatif<ety:der<la:nōminātīvus>>><la:nōminātīvus>>|tree=1}} Từ {{inh|en|enm|nominatyf}}, hoặc thông qua {{der|en|fro|nominatif}} hoặc trực tiếp từ {{der|en|la|nōminātīvus}}. ==={{section|pron}}=== * {{enPR|nŏmʹ(ĭ)nətĭv}}, {{IPA|en|a1=GA|/ˈnɑm(ɪ)nətɪv/|a2=RP|/ˈnɒm(ɪ)nətɪv/}} * {{audio|en|LL-Q1860 (eng)-Vealhurl-nominative.wav|a=Southern England}} ==={{section|adj}}=== {{en-adj|-}} # Được [[bổ nhiệm]], được [[chỉ định]]. # {{lb|en|grammar}} [[danh cách|Danh cách]]. ===={{section|drv}}==== {{col|en|nominatival|nominatively|denominative|nominative absolute|nominative determinism|nominative type system}} ==={{section|n}}=== {{en-noun}} # {{lb|en|grammar}} [[danh cách|Danh cách]].<ref>{{R:en:Cao Xuân Hạo, Hoàng Dũng 2004}}</ref> ==={{section|ref}}=== {{reflist}} * {{R:FVDP|db=ev}} =={{langname|la}}== ==={{section|pron}}=== * {{la-IPA|nōminātīve}} ==={{section|adj}}=== {{head|la|Biến thể hình thái tính từ|head=nōminātīve}} # {{inflection of|la|nōminātīvus||voc|ở|m|s}} ==={{section|ref}}=== * {{R:la:du Cange}} =={{langname|fr}}== ==={{section|pron}}=== * {{fr-IPA}} * {{audio|fr|LL-Q150 (fra)-WikiLucas00-nominative.wav|a=Lyon}} ==={{section|adj}}=== {{head|fr|Biến thể hình thái tính từ}} # {{feminine singular of|fr|nominatif}} =={{langname|ro}}== ==={{section|pron}}=== * {{IPA|ro|/ˌnominaˈtive/}} ==={{section|adj}}=== {{head|ro|Biến thể hình thái tính từ}} # {{inflection of|ro|nominativ||nom//acc|ở|f//n|p}} ==={{section|n}}=== {{head|ro|Biến thể hình thái danh từ|g=n-p}} # {{plural of|ro|nominativ}} =={{langname|it}}== ==={{section|adj}}=== {{head|it|Biến thể hình thái tính từ}} # {{adj form of|it|nominativo||f|p}} ==={{section|ana}}=== * {{anagrams|it|a=aeiimnnotv|inventiamo}} a0mxtunymlm8h2h9ty6vlu1gw8lyeol flea 0 102010 2571747 2356126 2026-10-18T16:47:30Z Hiyuune 50834 /* {{ĐM|n}} */ 2571747 wikitext text/x-wiki {{also|fleá}} =={{langname|en}}== {{wp|en:}} ==={{ĐM|etym}} 1=== [[File:Flea Scanning Electron Micrograph False Color.jpg|thumb|False colors scanning electron micrograph of a '''flea'''.]] ===={{ĐM|pron}}==== * {{IPA4|en|/ˈfliː/|[ˈflɪi̯]}} ** {{audio|en|en-us-flea.ogg|a=US}} * {{rhymes|en|iː|s=1}} * {{hyph|en|flea}} * {{hmp|en|flee}} ===={{ĐM|n}}==== {{en-noun|+|fleen<l:archaic,or,UK,_,dialectal>}} # [[bọ chét|Bọ chét]]. ====={{ĐM|drv}}===== {{col|en|antiflea |beach flea |beflea |chigoe flea |deflea |dog-flea model |duck flea|fishhook flea|eight-spotted flea beetle |fit as a flea |flea allergy |flea-bag |fleabag |fleabane |flea beetle |fleabite |flea-bitten |fleabitten |flea bomb |fleaborne |fleabrain |flea-brained |flea circus |flea collar |flea comb |flea flicker |flea in one's ear |flealike |flea-louse |flea market |fleapit |flea powder |flea-powder |fleaproof |flea-ridden |flea shampoo |fleasome |flea tree |fleaweed |fleawort |hop flea |house flea |human flea |leaf flea |sandflea |sand flea |snow flea |water flea }} ===={{ĐM|v}}==== {{en-verb|+|+|+,~d}} # {{lb|en|transitive}} Loại bỏ [[bọ chét]] (động vật). #: {{synonyms|en|deflea}} ==={{ĐM|etym}} 2=== Cách viết khác. ===={{ĐM|v}}==== {{en-verb|~s|~ing|~d}} # {{obsolete spelling of|en|flay}}. ==={{ĐM|ref}}=== * {{R:FVDP|db=ev}} ==={{ĐM|ana}}=== * {{anagrams|en|a=aefl|Lafe|Leaf|alef|feal|leaf}} {{C|en|Bộ Bọ chét|Vật ký sinh}} =={{langname|ang}}== ==={{ĐM|pron}}=== * {{ang-IPA|flēa}} * {{rhymes|ang|æ͜ɑː|s=1}} ==={{ĐM|n}}=== {{ang-noun|flēa|m}} # {{alternative form of|ang|flēah}} b8s99vzwnqbvzu4qbf4uz01amh14oks endoscopy 0 120241 2571821 1833815 2026-10-19T09:12:34Z Hiyuune 50834 2571821 wikitext text/x-wiki =={{langname|en}}== {{wp|en:}} ==={{section|etym}}=== {{ety|en|:af|endo-|-scopy|text=+|tree=1}} ==={{section|pron}}=== * {{IPA|en|/ɛnˈdɔ.skə.pi/|a=US}} * {{audio|en|LL-Q1860 (eng)-Vealhurl-endoscopy.wav|a=Southern England}} ==={{section|n}}=== {{en-noun}} # {{lb|en|medicine}} [[phép|Phép]] [[soi]] trong. ===={{section|drv}}==== {{col3|en|chromoendoscopy|echoendoscopy|endoscopist|fibroendoscopy|gastroendoscopy|immunoendoscopy|laparoendoscopy|microendoscopy|miniendoscopy|nasendoscopy|nasoendoscopy|neuroendoscopy|otoendoscopy|panendoscopy|rhinoendoscopy|sialendoscopy|videoendoscopy}} ===={{section|rel}}==== * {{l|en|endoscope}} * {{l|en|endoscopic}} ==={{section|ref}}=== * {{R:FVDP|db=ev}} cfnh5rtvkysm41vvbh5gk4ioby2a3ua notary 0 122733 2571801 1881876 2026-10-19T08:14:45Z Hiyuune 50834 2571801 wikitext text/x-wiki =={{langname|en}}== {{wp|en:}} ==={{section|etym}}=== Từ {{inh|en|enm|notarie}}, từ {{der|en|fro|notarie}} ({{cog|fr|notaire}}), từ {{der|en|la|notārius}}. ==={{section|pron}}=== * {{IPA|en|/ˈnoʊtəɹi/}} * {{audio|en|LL-Q1860 (eng)-Vininn126-notary.wav|a=US}} ==={{section|n}}=== {{en-noun}} # {{lb|en|legal|especially|_|civil law}} [[công chứng viên|Công chứng viên]]. ===={{section|drv}}==== {{col|en|notaryship |notarisation |notarise |notarization |notarize |notarial|notaress }} ==={{section|see}}=== * {{l|en|scrivener}} * {{l|en|tabellion}} ==={{section|ref}}=== * {{R:FVDP|db=ev}} ==={{section|ana}}=== * {{anagrams|en|a=anorty|Ayrton|Troyan|aroynt|tonary}} {{C|en|Mọi người}} dnwkitl5wqu6flnyeknia4npnyb90bk 2571802 2571801 2026-10-19T08:15:04Z Hiyuune 50834 2571802 wikitext text/x-wiki =={{langname|en}}== {{wp|en:}} ==={{section|etym}}=== Từ {{inh|en|enm|notarie}}, từ {{der|en|fro|notarie}} ({{cog|fr|notaire}}), từ {{der|en|la|notārius}}. ==={{section|pron}}=== * {{IPA|en|/ˈnoʊtəɹi/}} * {{audio|en|LL-Q1860 (eng)-Vininn126-notary.wav|a=US}} ==={{section|n}}=== {{en-noun}} # {{lb|en|legal|đặc biệt là|_|luật dân sự}} [[công chứng viên|Công chứng viên]]. ===={{section|drv}}==== {{col|en|notaryship |notarisation |notarise |notarization |notarize |notarial|notaress }} ==={{section|see}}=== * {{l|en|scrivener}} * {{l|en|tabellion}} ==={{section|ref}}=== * {{R:FVDP|db=ev}} ==={{section|ana}}=== * {{anagrams|en|a=anorty|Ayrton|Troyan|aroynt|tonary}} {{C|en|Mọi người}} byxcfbqovcri2n0ez7kory385piqd29 radiotélévisé 0 141431 2571808 1902536 2026-10-19T08:24:25Z Hiyuune 50834 2571808 wikitext text/x-wiki {{also|radiotélévise}} =={{langname|fr}}== ==={{section|etym}}=== {{ety|fr|:af|radio-|télévisé}} Từ {{af|fr|radio-|télévisé}}. ==={{section|pron}}=== * {{audio|fr|LL-Q150 (fra)-Lyokoï-radiotélévisé.wav|a=Lyon}} ==={{section|ptcp}}=== {{fr-past participle}} # {{past participle of|fr|radiotéléviser}} ==={{section|adj}}=== {{fr-adj}} # Được [[phát sóng]] trên [[truyền hình]] hoặc được truyền hình [[trực tiếp]]. ==={{section|ref}}=== * {{R:FVDP|db=fv}} ==={{section|further}}=== * {{R:fr:TLFi}} nn0pqmst0smclpundwg6nc8vu58vt84 dissimilar 0 153404 2571824 2465096 2026-10-19T09:20:44Z Hiyuune 50834 2571824 wikitext text/x-wiki =={{langname|en}}== ==={{section|etym}}=== {{ety|en|:af|dis-|similar|text=+|tree=1}} ==={{section|pron}}=== * {{IPA|en|/dɪˈsɪmɪlə(ɹ)/|a=UK}} * {{audio|en|LL-Q1860 (eng)-Vininn126-dissimilar.wav|a=US}} ==={{section|adj}}=== {{en-adj}} # Không [[giống]], [[khác nhau]]. ===={{section|syn}}==== * See also [[Kho tù vựng:different]] ===={{section|drv]}==== {{col|en|dissimilarly|dissimilarness |dissimilarity}} ===={{section|rel}}==== {{col|en |dissimilation |dissimilitude }} ==={{section|ref}}=== * {{R:FVDP|db=ev}} =={{langname|pt}}== ==={{section|etym}}=== {{ety|pt|:af|dis-|similar|text=+|tree=1}} ==={{section|pron}}=== {{pt-IPA|dissimilarh}} ==={{section|adj}}=== {{pt-adj}} # Không [[giống]], [[khác nhau]]. ==={{section|further}}=== * {{R:pt:Aulete}} * {{R:pt:Priberam}} 1q0ddxpdgf0oe42cfkcf2tc6ypirahu 2571825 2571824 2026-10-19T09:21:34Z Hiyuune 50834 /* {{section|syn}} */ 2571825 wikitext text/x-wiki =={{langname|en}}== ==={{section|etym}}=== {{ety|en|:af|dis-|similar|text=+|tree=1}} ==={{section|pron}}=== * {{IPA|en|/dɪˈsɪmɪlə(ɹ)/|a=UK}} * {{audio|en|LL-Q1860 (eng)-Vininn126-dissimilar.wav|a=US}} ==={{section|adj}}=== {{en-adj}} # Không [[giống]], [[khác nhau]]. ===={{section|syn}}==== * See also [[Kho tù vựng:different]] ===={{section|drv}}==== {{col|en|dissimilarly|dissimilarness |dissimilarity}} ===={{section|rel}}==== {{col|en |dissimilation |dissimilitude }} ==={{section|ref}}=== * {{R:FVDP|db=ev}} =={{langname|pt}}== ==={{section|etym}}=== {{ety|pt|:af|dis-|similar|text=+|tree=1}} ==={{section|pron}}=== {{pt-IPA|dissimilarh}} ==={{section|adj}}=== {{pt-adj}} # Không [[giống]], [[khác nhau]]. ==={{section|further}}=== * {{R:pt:Aulete}} * {{R:pt:Priberam}} fntrrshsdoejb3uh7ctxxtb96kl4zp3 2571829 2571825 2026-10-19T09:55:51Z TheHighFighter2 42988 /* Đồng nghĩa */ 2571829 wikitext text/x-wiki =={{langname|en}}== ==={{section|etym}}=== {{ety|en|:af|dis-|similar|text=+|tree=1}} ==={{section|pron}}=== * {{IPA|en|/dɪˈsɪmɪlə(ɹ)/|a=UK}} * {{audio|en|LL-Q1860 (eng)-Vininn126-dissimilar.wav|a=US}} ==={{section|adj}}=== {{en-adj}} # Không [[giống]], [[khác nhau]]. ===={{section|syn}}==== * Xem [[Kho từ vựng:different]] ===={{section|drv}}==== {{col|en|dissimilarly|dissimilarness |dissimilarity}} ===={{section|rel}}==== {{col|en |dissimilation |dissimilitude }} ==={{section|ref}}=== * {{R:FVDP|db=ev}} =={{langname|pt}}== ==={{section|etym}}=== {{ety|pt|:af|dis-|similar|text=+|tree=1}} ==={{section|pron}}=== {{pt-IPA|dissimilarh}} ==={{section|adj}}=== {{pt-adj}} # Không [[giống]], [[khác nhau]]. ==={{section|further}}=== * {{R:pt:Aulete}} * {{R:pt:Priberam}} lac8ag5f4oup550pm61x9g53qjb8y78 hike 0 170906 2571698 2477713 2026-10-18T15:03:57Z WhoAlone 40420 2571698 wikitext text/x-wiki {{-eng-}} {{-pron-}} * [[Wiktionary:IPA|IPA]]: {{IPA-old|/ˈhɑɪk/}} {{-noun-}} '''hike''' (thông tục) {{IPA-old|/ˈhɑɪk/}} # Cuộc đi bộ đường [[dài]] (để luyện sức khoẻ hoặc tiêu khiển). # {{term|từ Mỹ, nghĩa Mỹ}} Cuộc [[hành quân]]. {{-intr-verb-}} '''hike''' ''nội động từ, (thông tục)'' {{IPA-old|/ˈhɑɪk/}} # Đi [[mạnh mẽ]]; đi [[nặng nhọc]], đi [[lặn lội]]. # Đi bộ đường [[dài]] (để rèn luyện sức khoẻ hoặc tiêu khiển). # {{term|từ Mỹ, nghĩa Mỹ}} [[hành quân|Hành quân]]. {{-tr-verb-}} '''hike''' ''ngoại động từ'' {{IPA-old|/ˈhɑɪk/}} # Đẩy đi; [[kéo]] [[lên]]; [[bắt buộc]] [[phải]] [[chuyển động]]. # {{term|từ Mỹ, nghĩa Mỹ}} [[tăng|Tăng]] đột [[xuất]] (tiền thuê nhà... ). {{-forms-}} {{eng-verb|base=hike|hik|ing}} {{-ref-}} {{R:FVDP}} {{sơ khai}} [[Thể loại:Danh từ tiếng Anh]] [[Thể loại:Động từ tiếng Anh]] =={{langname|tef}}== ==={{ĐM|noun}}=== {{head|tef|Danh từ}} # [[cây]] [[cọ]] [[hoang]]. ==={{ĐM|ref}}=== * ''Lurö Dictionary: Lurö (Nicobarese) - English - Hindi'' (2020). Anvita Abbi, Vysakh R. {{c|tef|Cây}} lt07qpvcoj2lnrbrqdgcrr1h00jvg2f oppvise 0 185018 2571635 307781 2026-10-18T13:25:39Z Hiyuune 50834 2571635 wikitext text/x-wiki =={{langname|nb}}== ==={{section|etym}}=== Từ {{af|nb|opp|vise}}. ==={{section|v}}=== {{head|nb|Động từ|mệnh lệnh|oppvis|thì hiện tại|oppviser|bị động|oppvises|quá khứ đơn|oppviste|phân từ quá khứ|oppvist|phân từ hiện tại|oppvisende}} # [[phô bày|Phô bày]], [[trưng bày]], để [[lộ]] [[ra]], [[bày]] [[ra]] cho [[thấy]]. ===={{section|drv}}==== * {{l|nb|oppvisning}} ==={{section|ref}}=== * {{R:nb:OB}} * {{R:nb:NAOB}} 3n6fs854y11g8fzquctj07c6er5mw7m phá gia 0 200385 2571606 1892092 2026-10-18T12:16:02Z Hiyuune 50834 2571606 wikitext text/x-wiki =={{langname|vi}}== ==={{section|pron}}=== {{vi-pron}} ==={{section|v}}=== {{vi-verb}} # Làm [[tan nát]] [[tài sản]] của [[gia]] đình. [[phá gia|Phá gia]] [[chi tử]]. Đứa [[con]] [[hư]] [[làm hại]] [[gia sản]]. ==={{section|ref}}=== * {{R:FVDP}} t9g6vfn4l1lgp59ia3cgp9jl563ttft проследить 0 205936 2571777 2555949 2026-10-19T03:19:33Z Hiyuune 50834 2571777 wikitext text/x-wiki =={{langname|ru}}== ==={{section|pron}}=== {{af|ru|про-|следи́ть}} ==={{section|pron}}=== * {{ru-IPA|проследи́ть}} * {{audio|ru|Ru-проследить.ogg}} ==={{section|v}}=== {{ru-verb|проследи́ть|pf|impf=просле́живать}} # [[theo dõi]], [[rình mò]], [[rình]]. #: {{ux|ru|'''проследить''' преступника|theo dõi tên tội phạm}} # [[theo dõi]], [[nghiên cứu]], [[quan sát]]. ===={{section|forms}}==== {{ru-conj|pf|4b(8)|проследи́ть}} ===={{section|drv}}==== * {{l|ru|просле́живаться|g=impf}}, {{l|ru|проследи́ться|g=pf}} ===={{section|rel}}==== * {{l|ru|следи́ть}} * {{l|ru|сле́довать}}, {{l|ru|сле́дование}}, {{l|ru|сле́дователь}}, {{l|ru|сле́довательный}} * {{l|ru|след}} * {{l|ru|сле́дом}} ==={{section|ref}}=== * {{R:FVDP|db=rv}} ai7u5nir0dlj6c2nq1knm0hfz893wwi 2571778 2571777 2026-10-19T03:19:43Z Hiyuune 50834 2571778 wikitext text/x-wiki =={{langname|ru}}== ==={{section|etym}}=== {{af|ru|про-|следи́ть}} ==={{section|pron}}=== * {{ru-IPA|проследи́ть}} * {{audio|ru|Ru-проследить.ogg}} ==={{section|v}}=== {{ru-verb|проследи́ть|pf|impf=просле́живать}} # [[theo dõi]], [[rình mò]], [[rình]]. #: {{ux|ru|'''проследить''' преступника|theo dõi tên tội phạm}} # [[theo dõi]], [[nghiên cứu]], [[quan sát]]. ===={{section|forms}}==== {{ru-conj|pf|4b(8)|проследи́ть}} ===={{section|drv}}==== * {{l|ru|просле́живаться|g=impf}}, {{l|ru|проследи́ться|g=pf}} ===={{section|rel}}==== * {{l|ru|следи́ть}} * {{l|ru|сле́довать}}, {{l|ru|сле́дование}}, {{l|ru|сле́дователь}}, {{l|ru|сле́довательный}} * {{l|ru|след}} * {{l|ru|сле́дом}} ==={{section|ref}}=== * {{R:FVDP|db=rv}} 33bd2zhfi95ylireaq9bidtef4qiu7l Bản mẫu:R:Webster 1913 10 215902 2571773 2135770 2026-10-19T03:11:08Z Hiyuune 50834 2571773 wikitext text/x-wiki <includeonly>{{#if:{{{subentry|}}} | “{{{subentry}}}{{#if:{{{subpos|}}}|, ''{{{subpos}}}{{#ifeq:{{{subpos|}}}|phrase||.}}''}}” under&#32; }}{{#invoke:quote|call_template |template=cite-book |entry = {{{entry|{{{1|{{pagename}}}}}}}}{{#if:{{{part of speech|}}}{{{pos|}}} |, {{#if:{{{noformat|}}} | {{{part of speech|{{{pos|}}}}}} | ''{{{part of speech|{{{pos|}}}}}}{{#ifeq:{{{part of speech|}}}{{{pos|}}}|phrase||.}}'' }} }} |entryurl = {{#if:{{{url|}}}{{{2|}}} | {{#ifeq:{{padleft:|4|{{{url|{{{2|}}}}}}}}|http | {{{url|{{{2|}}}}}} | http://www.websters1913.com/words/{{urlencode:{{ucfirst:{{{url|{{{2|}}}}}}}}|PATH}} }} | http://www.websters1913.com/words/{{urlencode:{{ucfirst:{{{entry|{{{1|{{pagename}}}}}}}}}}|PATH}} }} |title = [[w:en:Webster's Dictionary#Webster's New International Dictionary 1909|Webster’s Revised Unabridged Dictionary]] |location = Springfield, Mass. |publisher = [[w:en:Merriam-Webster|G. & C. Merriam]] |year = 1913 |accessdate = {{{accessdate|{{{3|}}}}}} |oclc = 800618302 |textparam = 4 |usenodot = 1 |allowparams = subentry,subpos,entry,1,part of speech,pos,noformat,url,2,accessdate,3 }}</includeonly><noinclude>{{R:Webster 1913|dictionary}}{{documentation}}</noinclude> fmqle5jhr9jxy257uobtj4euig5yu5o attenuating 0 219043 2571621 2162770 2026-10-18T12:53:13Z Hiyuune 50834 2571621 wikitext text/x-wiki =={{langname|en}}== ==={{section|v}}=== {{head|en|Biến thể hình thái động từ}} # {{infl of|en|attenuate||ing-form}}. rp30sesvt13zj3kekaow9zfh85r3mpi televised 0 219358 2571807 1927751 2026-10-19T08:21:27Z Hiyuune 50834 2571807 wikitext text/x-wiki =={{langname|en}}== ==={{section|v}}=== {{head|en|Biến thể hình thái động từ}} # {{infl of|en|televise||ed-form}} ==={{section|adj}}=== {{en-adj|-}} # Được [[phát sóng]] trên [[truyền hình]] hoặc được truyền hình trực tiếp. #: {{hypo|en|aired#Tính từ}} #* {{quote-journal|en|date=2020 April 8|title=Network News: Crossrail heads the construction projects placed on hold|journal=Rail|page=12|text=The disruption to rail-related construction follows Johnson's '''televised''' address to the nation on March 23, after which fresh government guidelines on [[social distancing]] were issued to help halt the spread of [[Coronavirus]].}} ===={{section|drv}}==== {{col|en|untelevised }} ==={{section|ref}}=== * {{R:Lexico}} ceqa38wbzuwzymld5af2xp2bnh3krzm atoning 0 223771 2571768 2163205 2026-10-19T03:04:30Z Hiyuune 50834 2571768 wikitext text/x-wiki =={{langname|en}}== ==={{section|v}}=== {{head|en|Biến thể hình thái động từ}} # {{infl of|en|atone||ing-form}}. jt6te19a18moq35htjjo8uaxkrl6tyg homed 0 224391 2571605 1852667 2026-10-18T12:14:38Z Hiyuune 50834 2571605 wikitext text/x-wiki =={{langname|en}}== ==={{section|pron}}=== * {{IPA|en|/ˈhoʊmd/|a=GA}} * {{IPA|en|/ˈhəʊmd/|a=RP}} * {{rhymes|en|oʊmd|əʊmd|s=1}} ==={{section|v}}=== {{head|en|Biến thể hình thái động từ}} # {{infl of|en|home||ed-form}} 1pld8eh1ccpu5oh8ps4axb2v7pazrm8 评 0 234269 2571806 2028401 2026-10-19T08:17:55Z Hiyuune 50834 + mul, zh 2571806 wikitext text/x-wiki {{also|評}} {{character info}} =={{langname|mul}}== {{stroke order|strokes=7}} ==={{section|han}}=== {{Han char|rn=149|rad=讠|as=05|sn=7|four=31749|canj=IVMFJ|ids=⿰讠平}} ===={{section|ref}}==== * {{Han ref|kx=1188.181|hdz=63953.040|uh=8BC4}} =={{langname|zh}}== ==={{section|glyph origin}}=== {{Han simp|評|f=訁|t=讠}}. ==={{section|dfn}}=== {{zh-see|評}} p8x9kkspqa88yradkuc9p31lumr52oy fap 0 246680 2571661 2208632 2026-10-18T14:52:05Z WhoAlone 40420 2571661 wikitext text/x-wiki {{-eng-}} {{-verb-}} '''Fap''' # [[quay|Quay]] [[tay]]. # [[thủ dâm|Thủ dâm]]. {{mẫu}} [[Thể loại:Động từ tiếng Anh]] =={{langname|tef}}== ==={{ĐM|noun}}=== {{head|tef|Danh từ}} # Bên trái hoặc bên phải của [[thân]] từ [[nách]] đến [[hông]]. ==={{ĐM|ref}}=== * ''Lurö Dictionary: Lurö (Nicobarese) - English - Hindi'' (2020). Anvita Abbi, Vysakh R. {{c|tef|Cơ thể}} 8b48zqwejnqvw9xupr2kbux8q8v5gmb atta 0 254583 2571788 2162216 2026-10-19T03:42:25Z Hiyuune 50834 2571788 wikitext text/x-wiki =={{langname|en}}== ==={{section|etym}} 1=== {{rfe|en}} ===={{section|contraction}}==== {{en-head|Từ rút gọn}} # [[đó|Đó]] [[là]]. ====={{section|alt}}===== * {{alt|en|thatta}} ====={{section|Drv}}===== * {{l|en|attaboy}}, {{l|en|atta boy}} * {{l|en|attadog}}, {{l|en|atta dog}} * {{l|en|attagal}}, {{l|en|attagirl}}, {{l|en|atta girl}} ==={{section|etym}} 2=== Từ {{bor|en|hi|आटा}}. ===={{section|n}}==== {{en-noun|~}} # {{lb|en|India}} Một loại bột [[ngũ cốc]] nguyên cám từ tiểu lục địa Ấn Độ. ==={{section|ana}}=== * {{anagrams|en|a=aatt|Tata|ta ta|ta-ta|tata}} =={{langname|qwm}}== ==={{section|n}}=== {{head|qwm|Danh từ}} # [[bố|Bố]], [[ba]], [[cha]]. ==={{section|ref}}=== * ''Codex cumanicus, Bibliothecae ad templum divi Marci Venetiarum primum ex integro editit prolegomenis notis et compluribus glossariis instruxit comes Géza Kuun.'' 1880. Budapest: Scient. Academiae Hung. =={{langname|qxq}}== ==={{section|n}}=== {{head|qxq|Danh từ}} # [[bố|Bố]], [[ba]], [[cha]]. itenve23i5rgphzupxbhziepsdu17xx 2571789 2571788 2026-10-19T03:43:31Z Hiyuune 50834 2571789 wikitext text/x-wiki =={{langname|en}}== ==={{section|etym}} 1=== {{rfe|en}} ===={{section|contraction}}==== {{en-head|Từ rút gọn}} # [[đó|Đó]] [[là]]. ====={{section|alt}}===== * {{alt|en|thatta}} ====={{section|Drv}}===== * {{l|en|attaboy}}, {{l|en|atta boy}} * {{l|en|attadog}}, {{l|en|atta dog}} * {{l|en|attagal}}, {{l|en|attagirl}}, {{l|en|atta girl}} ==={{section|etym}} 2=== Từ {{bor|en|hi|आटा}}. ===={{section|n}}==== {{en-noun|~}} # {{lb|en|India}} Một loại bột [[ngũ cốc]] nguyên cám từ tiểu lục địa Ấn Độ. ==={{section|ana}}=== * {{anagrams|en|a=aatt|Tata|ta ta|ta-ta|tata}} =={{langname|cho}}== ==={{section|v}}=== {{head|cho|Động từ}} # [[sống|Sống]]. =={{langname|qwm}}== ==={{section|n}}=== {{head|qwm|Danh từ}} # [[bố|Bố]], [[ba]], [[cha]]. ==={{section|ref}}=== * ''Codex cumanicus, Bibliothecae ad templum divi Marci Venetiarum primum ex integro editit prolegomenis notis et compluribus glossariis instruxit comes Géza Kuun.'' 1880. Budapest: Scient. Academiae Hung. =={{langname|qxq}}== ==={{section|n}}=== {{head|qxq|Danh từ}} # [[bố|Bố]], [[ba]], [[cha]]. 5mu853b1ciqzp5sdlm8jauf109db85b 2571790 2571789 2026-10-19T03:44:03Z Hiyuune 50834 2571790 wikitext text/x-wiki =={{langname|en}}== ==={{section|etym}} 1=== {{rfe|en}} ===={{section|contraction}}==== {{en-head|Từ rút gọn}} # [[đó|Đó]] [[là]]. ====={{section|alt}}===== * {{alt|en|thatta}} ====={{section|Drv}}===== * {{l|en|attaboy}}, {{l|en|atta boy}} * {{l|en|attadog}}, {{l|en|atta dog}} * {{l|en|attagal}}, {{l|en|attagirl}}, {{l|en|atta girl}} ==={{section|etym}} 2=== Từ {{bor|en|hi|आटा}}. ===={{section|n}}==== {{en-noun|~}} # {{lb|en|India}} Một loại bột [[ngũ cốc]] nguyên cám từ tiểu lục địa Ấn Độ. ==={{section|ana}}=== * {{anagrams|en|a=aatt|Tata|ta ta|ta-ta|tata}} =={{langname|cho}}== ==={{section|v}}=== {{head|cho|Động từ}} # [[sống|Sống]]. =={{langname|qwm}}== ==={{section|n}}=== {{head|qwm|Danh từ}} # [[bố|Bố]], [[ba]], [[cha]]. ==={{section|ref}}=== * ''Codex cumanicus, Bibliothecae ad templum divi Marci Venetiarum primum ex integro editit prolegomenis notis et compluribus glossariis instruxit comes Géza Kuun.'' 1880. Budapest: Scient. Academiae Hung. =={{langname|qxq}}== ==={{section|n}}=== {{head|qxq|Danh từ}} # [[bố|Bố]], [[ba]], [[cha]]. =={{langname|crh}}== ==={{section|n}}=== {{head|crh|Biến thể hình thái danh từ}} # {{infl of|crh|at||loc|s}} oy4324ydr055nal3vpjgxnb7b7ixzfv 2571791 2571790 2026-10-19T03:47:49Z Hiyuune 50834 2571791 wikitext text/x-wiki =={{langname|en}}== ==={{section|etym}} 1=== {{rfe|en}} ===={{section|contraction}}==== {{en-head|Từ rút gọn}} # [[đó|Đó]] [[là]]. ====={{section|alt}}===== * {{alt|en|thatta}} ====={{section|Drv}}===== * {{l|en|attaboy}}, {{l|en|atta boy}} * {{l|en|attadog}}, {{l|en|atta dog}} * {{l|en|attagal}}, {{l|en|attagirl}}, {{l|en|atta girl}} ==={{section|etym}} 2=== Từ {{bor|en|hi|आटा}}. ===={{section|n}}==== {{en-noun|~}} # {{lb|en|India}} Một loại bột [[ngũ cốc]] nguyên cám từ tiểu lục địa Ấn Độ. ==={{section|ana}}=== * {{anagrams|en|a=aatt|Tata|ta ta|ta-ta|tata}} =={{langname|cho}}== ==={{section|v}}=== {{head|cho|Động từ}} # [[sống|Sống]]. =={{langname|qwm}}== ==={{section|n}}=== {{head|qwm|Danh từ}} # [[bố|Bố]], [[ba]], [[cha]]. ==={{section|ref}}=== * ''Codex cumanicus, Bibliothecae ad templum divi Marci Venetiarum primum ex integro editit prolegomenis notis et compluribus glossariis instruxit comes Géza Kuun.'' 1880. Budapest: Scient. Academiae Hung. =={{langname|got}}== ==={{section|rom}}=== {{got-rom}} # {{romanization of|got|𐌰𐍄𐍄𐌰}} =={{langname|la}}== ==={{section|etym}}=== Từ {{der|la|ine-pro|*átta||bố, ba, cha}}. Các từ cùng gốc bao gồm {{cog|hit|𒀜𒋫𒀸|tr=attas|sc=Xsux}}, {{cog|got|𐌰𐍄𐍄𐌰}}, {{cog|cu|отьць}} và {{cog|grc|ἄττα}}. ==={{section|pron}}=== * {{la-IPA|atta}} ==={{section|n}}=== {{la-noun|atta<1>|g=m}} # [[bố|Bố]], [[ba]], [[cha]]. ===={{section|decl}}==== {{la-ndecl|atta<1>}} ===={{section|desc}}==== * {{desc|scn|tatà}} * {{desc|nap|tatà<q:cổ xưa>|attène<q:Apulia>}} *: {{desc|roa-tar|ts=attánə|t=bố, ba, cha}} *{{desc|ro|tata}} ==={{section|ref}}=== * {{R:la:L&S}} * {{R:la:du Cange}} * {{R:la:Gaffiot}} * {{R:la:Peck}} * {{R:itc:EDL|page=60|head=atta}} =={{langname|ja}}== ==={{section|rom}}=== {{ja-romaji}} # {{ja-romanization of|あった}} =={{langname|pi}}== ==={{section|alt}}=== * {{pi-alt}} ==={{section|n}}=== {{pi-noun form}} # {{inflection of|pi|attan||voc|s}} =={{langname|qxq}}== ==={{section|n}}=== {{head|qxq|Danh từ}} # [[bố|Bố]], [[ba]], [[cha]]. =={{langname|crh}}== ==={{section|n}}=== {{head|crh|Biến thể hình thái danh từ}} # {{infl of|crh|at||loc|s}} =={{langname|it}}== ==={{section|pron}}=== {{it-pr|àtta}} ==={{section|adj}}=== {{head|it|Biến thể hình thái tính từ}} # {{feminine singular of|it|atto}} ==={{section|ana}}=== * {{anagrams|it|a=aatt|tata}} 0pnzkk956jb1th664cuj3yfwz8q9b4m 2571792 2571791 2026-10-19T03:48:07Z Hiyuune 50834 2571792 wikitext text/x-wiki =={{langname|en}}== ==={{section|etym}} 1=== {{rfe|en}} ===={{section|contraction}}==== {{en-head|Từ rút gọn}} # [[đó|Đó]] [[là]]. ====={{section|alt}}===== * {{alt|en|thatta}} ====={{section|Drv}}===== * {{l|en|attaboy}}, {{l|en|atta boy}} * {{l|en|attadog}}, {{l|en|atta dog}} * {{l|en|attagal}}, {{l|en|attagirl}}, {{l|en|atta girl}} ==={{section|etym}} 2=== Từ {{bor|en|hi|आटा}}. ===={{section|n}}==== {{en-noun|~}} # {{lb|en|India}} Một loại bột [[ngũ cốc]] nguyên cám từ tiểu lục địa Ấn Độ. ==={{section|ana}}=== * {{anagrams|en|a=aatt|Tata|ta ta|ta-ta|tata}} =={{langname|cho}}== ==={{section|v}}=== {{head|cho|Động từ}} # [[sống|Sống]]. =={{langname|qwm}}== ==={{section|n}}=== {{head|qwm|Danh từ}} # [[bố|Bố]], [[ba]], [[cha]]. ==={{section|ref}}=== * ''Codex cumanicus, Bibliothecae ad templum divi Marci Venetiarum primum ex integro editit prolegomenis notis et compluribus glossariis instruxit comes Géza Kuun.'' 1880. Budapest: Scient. Academiae Hung. =={{langname|got}}== ==={{section|rom}}=== {{got-rom}} # {{romanization of|got|𐌰𐍄𐍄𐌰}} =={{langname|la}}== ==={{section|etym}}=== Từ {{der|la|ine-pro|*átta||bố, ba, cha}}. Các từ cùng gốc bao gồm {{cog|hit|𒀜𒋫𒀸|tr=attas|sc=Xsux}}, {{cog|got|𐌰𐍄𐍄𐌰}}, {{cog|cu|отьць}} và {{cog|grc|ἄττα}}. ==={{section|pron}}=== * {{la-IPA|atta}} ==={{section|n}}=== {{la-noun|atta<1>|g=m}} # [[bố|Bố]], [[ba]], [[cha]]. ===={{section|decl}}==== {{la-ndecl|atta<1>}} ===={{section|desc}}==== * {{desc|scn|tatà}} * {{desc|nap|tatà<q:cổ xưa>|attène<q:Apulia>}} *: {{desc|roa-tar|ts=attánə|t=bố, ba, cha}} *{{desc|ro|tata}} ==={{section|ref}}=== * {{R:la:L&S}} * {{R:la:du Cange}} * {{R:la:Gaffiot}} * {{R:la:Peck}} * {{R:itc:EDL|page=60|head=atta}} =={{langname|ja}}== ==={{section|rom}}=== {{ja-romaji}} # {{ja-romanization of|あった}} =={{langname|pi}}== ==={{section|alt}}=== {{pi-alt}} ==={{section|n}}=== {{pi-noun form}} # {{inflection of|pi|attan||voc|s}} =={{langname|qxq}}== ==={{section|n}}=== {{head|qxq|Danh từ}} # [[bố|Bố]], [[ba]], [[cha]]. =={{langname|crh}}== ==={{section|n}}=== {{head|crh|Biến thể hình thái danh từ}} # {{infl of|crh|at||loc|s}} =={{langname|it}}== ==={{section|pron}}=== {{it-pr|àtta}} ==={{section|adj}}=== {{head|it|Biến thể hình thái tính từ}} # {{feminine singular of|it|atto}} ==={{section|ana}}=== * {{anagrams|it|a=aatt|tata}} ajpq2ds1rh210zd4md0t5ry9dxhx4me Mô đun:languages/data/3/n 828 260849 2571678 2566958 2026-10-18T14:58:35Z Lcsnes 40261 2571678 Scribunto text/plain local m_langdata = require("Module:languages/data") -- Loaded on demand, as it may not be needed (depending on the data). local function u(...) u = require("Module:string utilities").char return u(...) end local c = m_langdata.chars local p = m_langdata.puaChars local s = m_langdata.shared local m = {} m["naa"] = { "Namla", 3508760, "paa-pau", "Latn", } m["nab"] = { "tiếng Nambikwara", 2068190, "sai-nmk", "Latn", "Tiếng Nambikwara", "Nambikwara", } m["nac"] = { "Narak", 6965295, "ngf", "Latn", } m["nae"] = { "Naka'ela", 6960073, "poz", "Latn", } m["naf"] = { "Nabak", 11732491, "ngf", "Latn", } m["nag"] = { "Naga Pidgin", 3503454, "crp", "Latn", ancestors = "as", } m["nah"] = { "tiếng Nahuatl", 13300, "azc-nah", "Latn", "Tiếng Nahuatl", "Nahuatl", } m["naj"] = { "Nalu", 36026, "alv-nal", "Latn", } m["nak"] = { "Nakanai", 6528669, "poz-ocw", "Latn", } m["nal"] = { "Nalik", 3335387, "poz-ocw", "Latn", } m["nam"] = { "Ngan'gityemerri", 3298041, "aus-dal", "Latn", } -- Being converted into the family "Southern Min" ("zhx-nan", which will take the code "nan" once the language can be removed). Retain the name "Min Nan" here to avoid having to move things that are scheduled for deletion anyway. m["nan"] = { "tiếng Mân Nam", 36495, "zhx-com", "Hants, Latn, Bopo, Kana", "Tiếng Mân Nam", "Mân Nam", wikimedia_codes = "zh-min-nan", generate_forms = "zh-generateforms", sort_key = { Hani = "Hani-sortkey", Kana = "Kana-sortkey" }, } m["nao"] = { "Naaba", 11883865, "sit-tib", ancestors = "xct", } m["nap"] = { "tiếng Napoli", 33845, "roa-itd", "Latn", "Tiếng Napoli", "Napoli", } m["naq"] = { "tiếng Khoekhoe", 13301, "khi-khk", "Latn", "Tiếng Khoekhoe", "Khoekhoe", } m["nar"] = { "Iguta", 5621686, "nic-jer", "Latn", } m["nas"] = { "Nasioi", 56772, "paa-sbo", "Latn", } m["nat"] = { "Hungworo", 3914395, "nic-kmk", "Latn", } m["naw"] = { "Nawuri", 35906, "alv-gng", "Latn", } m["nax"] = { "Nakwi", 3504178, "qfa-mal", "Latn", } m["nay"] = { "Ngarrindjeri", 7022091, "aus-pam", "Latn", } m["naz"] = { "Coatepec Nahuatl", 5138605, "azc-nah", "Latn", } m["nba"] = { "Nyemba", 3346655, "bnt-clu", "Latn", ancestors = "lch", } m["nbb"] = { "Ndoe", 36134, "nic-eko", "Latn", } m["nbc"] = { "Chang", 5071694, "sit-kch", "Latn", } m["nbd"] = { "Ngbinda", 11132859, "bnt-boa", "Latn", } m["nbe"] = { "Konyak Naga", 6430448, "sit-kch", "Latn", } m["nbg"] = { "Nagarchal", 13299, "dra-gon", } m["nbh"] = { "Ngamo", 3438705, "cdc-wst", "Latn", } m["nbi"] = { "Mao Naga", 12952905, "tbq-anp", "Latn", } m["nbj"] = { "Ngarinman", 10600380, nil, "Latn", } m["nbk"] = { "Nake", 11732496, "ngf-mad", "Latn", } m["nbm"] = { "Ngbaka Ma'bo", 3915331, "nic-nkm", "Latn", } m["nbn"] = { "Kuri", 3200540, "poz", "Latn", } m["nbo"] = { "Nkukoli", 3914482, "nic-uce", "Latn", } m["nbp"] = { "Nnam", 36138, "nic-eko", "Latn", } m["nbq"] = { "Nggem", 12952956, "ngf", "Latn", } m["nbr"] = { "Numana", 5529310, "nic-nin", "Latn", } m["nbs"] = { "Namibian Sign Language", 6961792, "sgn", "Latn", -- when documented } m["nbt"] = { "Na", 12952895, "sit-tan", "Deva, Latn", } m["nbu"] = { "Rongmei Naga", 12952912, "sit-zem", "Latn", } m["nbv"] = { "Ngamambo", 11129694, "nic-mom", "Latn", } m["nbw"] = { "Southern Ngbandi", 17522635, "nic-ngd", "Latn", } m["nby"] = { "Ningera", 11732524, "paa-brd", "Latn", } m["nca"] = { "Iyo", 6101336, "ngf-fin", "Latn", } m["ncb"] = { "tiếng Nicobar Trung", 3335553, "aav-nic", "Deva, Latn", "Tiếng Nicobar Trung", "Nicobar Trung", } m["ncc"] = { "Ponam", 3396122, "poz-aay", "Latn", } m["ncd"] = { "Nachering", 6957144, "sit-kic", "Deva", } m["nce"] = { "Yale", 2992915, "paa", --kwomtari or isolate "Latn", } m["ncf"] = { "Notsi", 3344784, "poz-ocw", "Latn", } m["ncg"] = { "tiếng Nisga'a", 3342138, "nai-tsi", "Latn", "Tiếng Nisga'a", "Nisga'a", } m["nch"] = { "tiếng Trung Nahuatl Huasteca", 2194290, "azc-hua", "Latn", "Tiếng Trung Nahuatl Huasteca", "Trung Nahuatl Huasteca", } m["nci"] = { "tiếng Nahuatl cổ điển", 559242, "azc-nah", "Latn", "Tiếng Nahuatl cổ điển", "Nahuatl cổ điển", entry_name = {remove_diacritics = c.macron}, } m["ncj"] = { "Northern Puebla Nahuatl", 15705671, "azc-nah", "Latn", } m["nck"] = { "Nakara", 6960662, "aus-arn", "Latn", } m["ncl"] = { "Michoacán Nahuatl", 2896217, "azc-nah", "Latn", } m["ncm"] = { "Nambo", 42173731, nil, "Latn", } m["ncn"] = { "Nauna", 3337158, "poz-aay", "Latn", } m["nco"] = { "Sibe", 56806, "paa-sbo", "Latn", } m["ncq"] = { "tiếng Katang Bắc", 12638175, "mkh-kat", "Laoo, Thai", "Tiếng Katang Bắc", "Katang Bắc", sort_key = { Laoo = "Laoo-sortkey", Thai = "Thai-sortkey", }, } m["ncr"] = { "Ncane", 11297920, "nic-bbe", "Latn", ancestors = "nhu", } m["ncs"] = { "Nicaraguan Sign Language", 33765, "sgn", "Sgnw", } m["nct"] = { "tiếng Naga Chothe", 5105385, "tbq-kuk", "Beng, Latn", "Tiếng Naga Chothe", "Naga Chothe", } m["ncu"] = { "Chumburung", 35198, "alv-gng", "Latn", } m["ncx"] = { "tiếng Trung Nahuatl Puebla", 5061727, "azc-nah", "Latn", "Tiếng Trung Nahuatl Puebla", "Trung Nahuatl Puebla", } m["ncz"] = { "Natchez", 3111838, nil, "Latn", } m["nda"] = { "Ndasa", 35904, "bnt-kel", "Latn", } m["ndb"] = { "Kenswei Nsei", 7067553, "nic-rnn", "Latn", } m["ndc"] = { "tiếng Ndau", 13311, "bnt-sho", "Latn", "Tiếng Ndau", "Ndau", } m["ndd"] = { "Nde-Nsele-Nta", 36131, "nic-eko", "Latn", } m["ndf"] = { "Nadruvian", 6957967, nil, "Latn", } m["ndg"] = { "Ndengereko", 6983726, "bnt-mbi", "Latn", } m["ndh"] = { "Ndali", 6983678, "bnt-run", "Latn", } m["ndi"] = { "Chamba Leko", 36381, "alv-lek", "Latn", } m["ndj"] = { "Ndamba", 6983684, "bnt-kil", "Latn", } m["ndk"] = { "Ndaka", 11164947, "bnt-nya", "Latn", } m["ndl"] = { "Ndolo", 6983788, "bnt-zbi", "Latn", ancestors = "lse", } m["ndm"] = { "Ndam", 56283, "cdc-est", "Latn", } m["ndn"] = { "Ngundi", 35916, "bnt-ngn", "Latn", } m["ndp"] = { "Ndo", 6983774, "csu-mle", "Latn", } m["ndq"] = { "Ndombe", 6983792, "bnt-swb", "Latn", } m["ndr"] = { "Ndoola", 35837, "nic-mmb", "Latn", } m["nds"] = { "tiếng Hạ Đức", 25433, "gmw-lgm", "Latn", "Tiếng Hạ Đức", "Hạ Đức", ancestors = "gml", } m["ndt"] = { "Ndunga", 6983857, "nic-mbc", "Latn", } m["ndu"] = { "Dugun", 11015189, "alv-dur", "Latn", } m["ndv"] = { "Ndut", 36028, "alv-cng", "Latn", } m["ndw"] = { "Ndobo", 11008568, "bnt-ngn", "Latn", } m["ndx"] = { "Nduga", 6983833, nil, "Latn", } m["ndy"] = { "Lutos", 6705910, "csu-val", "Latn", } m["ndz"] = { "tiếng Ndogo", 35983, "nic-ser", "Latn", "Tiếng Ndogo", "Ndogo", } m["nea"] = { "Eastern Ngad'a", 12473454, "poz-cet", } m["neb"] = { "Toura", 7853636, "dmn-mda", "Latn", } m["nec"] = { "Nedebang", 4925378, "ngf", } m["ned"] = { "Nde-Gbite", 11010279, "nic-grf", } m["nee"] = { "Kumak", 3347266, "poz-cln", "Latn", } m["nef"] = { "Nefamese", 6987002, "crp", } m["neg"] = { "tiếng Negidal", 33676, "tuw-ewe", "Cyrl", "Tiếng Negidal", "Negidal", } m["neh"] = { "tiếng Nyen", 3695185, "sit-ebo", "Tibt, Latn", "Tiếng Nyen", "Nyen", translit = {Tibt = "Tibt-translit"}, override_translit = true, display_text = {Tibt = s["Tibt-displaytext"]}, entry_name = {Tibt = s["Tibt-entryname"]}, sort_key = {Tibt = "Tibt-sortkey"}, } m["nej"] = { "Neko", 6989840, "ngf-fin", "Latn", } m["nek"] = { "Neku", 14916900, "poz-cln", } m["nem"] = { "Nemi", 3338008, "poz-cln", "Latn", } m["nen"] = { "Nengone", 3338052, "poz-occ", "Latn", } m["neo"] = { "tiếng Na Miểu", 15977293, "hmn", nil, "Tiếng Na Miểu", "Na Miểu", } m["neq"] = { "North Central Mixe", 25559729, nil, "Latn", } m["ner"] = { "Yahadian", 8046778, nil, "Latn", } m["nes"] = { "Bhoti Kinnauri", 21179921, "sit-las", } m["net"] = { "Nete", 6998869, "paa-eng", } m["neu"] = { "Neo", 606917, "art", "Latn", type = "appendix-constructed", } m["nev"] = { "Nyaheun", 7070801, "mkh-ban", } m["new"] = { "tiếng Newa", 33979, "sit-new", "Deva, Newa, Ranj", "Tiếng Newa", "Newa", ancestors = "nwx", translit = { Deva = "new-translit", Newa = "new-Newa-translit", }, } m["nex"] = { "Neme", 12952941, } m["ney"] = { "Neyo", 36410, "kro", } m["nez"] = { "Nez Perce", 3339226, "nai-shp", "Latn", } m["nfa"] = { "Dhao", 2053828, "poz", } m["nfd"] = { "Ahwai", 3913957, "nic-plt", "Latn", } m["nfl"] = { "Aiwoo", 56742, "poz-oce", "Latn", } m["nfr"] = { "tiếng Nafaanra", 13297, "alv-snf", "Latn", "Tiếng Nafaanra", "Nafaanra", } m["nfu"] = { "Mfumte", 6826794, "nic-nka", "Latn", } m["nga"] = { "tiếng Ngbaka", 36022, "alv-gbf", "Latn", "Tiếng Ngbaka", "Ngbaka", } m["ngb"] = { "Northern Ngbandi", 17522631, "nic-ngd", "Latn", } m["ngc"] = { "tiếng Ngombe (Congo)", 3123524, "bnt-bun", "Latn", "Tiếng Ngombe (Congo)", "Ngombe (Congo)", } m["ngd"] = { "Ngando (Central African Republic)", 35910, "bnt-ngn", } m["nge"] = { "Ngemba", 6750551, "nic-nge", "Latn", } m["ngg"] = { -- compare 'aiy' "Ngbaka Manza", 11033316, "alv-gbf", "Latn", } m["ngh"] = { "tiếng Nǀuu", 2618974, "khi-tuu", "Latn", "Tiếng Nǀuu", "Nǀuu", } m["ngi"] = { "Ngizim", 3914924, "cdc-wst", "Latn", } m["ngj"] = { "Ngie", 36361, "nic-mom", "Latn", } m["ngk"] = { "Ngalkbun", 3913790, "aus-gun", "Latn", } m["ngl"] = { "Lomwe", 35824, "bnt-mak", "Latn", } m["ngm"] = { "Ngatik Men's Creole", 36400, "crp", ancestors = "en, pon", } m["ngn"] = { "Ngwo", 36051, "nic-mom", "Latn", } m["ngo"] = { "Ngoni", 7022547, "bnt-ngu", "Latn", } m["ngp"] = { "Ngulu", 7193332, "bnt-seu", "Latn", } m["ngq"] = { "Ngoreme", 7022573, "bnt-lok", "Latn", } m["ngr"] = { "Nagu", 3063524, "poz-oce", "Latn", } m["ngs"] = { "Gvoko", 3441188, "cdc-cbm", "Latn", } m["ngt"] = { "tiếng Ngeq", 25559548, "mkh-kat", "Laoo", "Tiếng Ngeq", "Ngeq", translit = "lo-translit", } m["ngu"] = { "Guerrero Nahuatl", 5614980, "azc-nah", "Latn", } m["ngv"] = { "Nagumi", 35842, "nic-jrn", } m["ngw"] = { "Ngwaba", 3440480, "cdc-cbm", "Latn", } m["ngx"] = { "Nggwahyi", 56265, "cdc-cbm", "Latn", } m["ngy"] = { "Tibea", 36598, "bnt-baf", "Latn", } m["ngz"] = { "Ngungwel", 35920, "bnt-tkc", "Latn", } m["nha"] = { "Nhanda", 3339380, "aus-psw", "Latn", } m["nhb"] = { "Beng", 3913311, "dmn-nbe", "Latn", } m["nhc"] = { "Tabasco Nahuatl", 6047326, "azc-nah", "Latn", } m["nhd"] = { "Chiripá", 2873230, "tup-gua", ancestors = "gn", } m["nhe"] = { "Eastern Huasteca Nahuatl", 4358289, "azc-nah", "Latn", } m["nhf"] = { "Nhuwala", 10600396, "aus-nga", "Latn", } m["nhg"] = { "Tetelcingo Nahuatl", 3450252, "azc-nah", "Latn", } m["nhh"] = { "Nahari", 6583560, "inc-eas", } m["nhi"] = { "Zacatlán-Ahuacatlán-Tepetzintla Nahuatl", 12953764, "azc-nah", "Latn", } m["nhk"] = { "Cosoleacaque Nahuatl", 12953757, "azc-nah", "Latn", } m["nhm"] = { "Morelos Nahuatl", 4800819, "azc-nah", "Latn", } m["nhn"] = { "tiếng Trung Nahuatl", 6047309, "azc-nah", "Latn", "Tiếng Trung Nahuatl", "Trung Nahuatl", } m["nho"] = { "Takuu", 3409818, "poz-pnp", "Latn", } m["nhp"] = { "Pajapan Nahuatl", 12953760, "azc-nah", "Latn", } m["nhq"] = { "Huaxcaleca Nahuatl", 12953758, "azc-nah", "Latn", } m["nhr"] = { "Naro", 2164778, "khi-kal", "Latn", } m["nht"] = { "tiếng Nahuatl Ometepec", 7090132, "azc-nah", "Latn", } m["nhu"] = { "tiếng Noone", 36072, "nic-bbe", "Latn", } m["nhv"] = { "tiếng Nahuatl Temascaltepec", 2379405, "azc-nah", "Latn", "Tiếng Nahuatl Temascaltepec", "Nahuatl Temascaltepec", } m["nhw"] = { "tiếng Tây Huasteca Nahuatl", 2678840, "azc-nah", "Latn", "Tiếng Tây Nahuatl Huasteca", "Tây Nahuatl Huasteca", } m["nhx"] = { "Mecayapan Nahuatl", 12953756, "azc-nah", "Latn", } m["nhy"] = { "Northern Oaxaca Nahuatl", 12953763, "azc-nah", "Latn", } m["nhz"] = { "Santa María La Alta Nahuatl", 15705753, "azc-nah", "Latn", } m["nia"] = { "tiếng Nias", 2407831, "poz-nws", "Latn", "Tiếng Nias", "Nias", } m["nib"] = { "Nakame", 11732495, "ngf-fin", "Latn", } m["nid"] = { "Ngandi", 7021977, "aus-arn", "Latn", } m["nie"] = { "Niellim", 33662, "alv-bua", } m["nif"] = { "Nek", 6989781, "ngf-fin", "Latn", } m["nig"] = { "Ngalakan", 3913796, "aus-gun", "Latn", } m["nih"] = { "Nyiha", 11128374, "bnt-mby", "Latn", } m["nii"] = { "Nii", 35237, "ngf", "Latn", } m["nij"] = { "Ngaju", 2992872, "poz-brw", "Latn", } m["nik"] = { "tiếng Nicobar Nam", 7570194, "aav-nic", "Deva, Latn", "Tiếng Nicobar Nam", "Nicobar Nam", } m["nil"] = { "Nila", 7036821, } m["nim"] = { "Nilamba", 4121200, "bnt-tkm", "Latn", } m["nin"] = { "Ninzo", 3914021, "nic-nin", } m["nio"] = { "tiếng Nganasan", 36743, "syd", "Cyrl", "Tiếng Nganasan", "Nganasan", translit = "nio-translit", } m["niq"] = { "Nandi", 6956591, "sdv-nma", } m["nir"] = { "Nimboran", 301116, "paa-nim", } m["nis"] = { "Nimi", 11732523, "ngf-fin", "Latn", } m["nit"] = { "tiếng Nam Kolami", 56767, "dra-knk", "Deva, Telu", "Tiếng Nam Kolami", "Nam Kolami", translit = { Telu = "te-translit" }, } m["niu"] = { "tiếng Niue", 33790, "poz-pol", "Latn", "Tiếng Niue", "Niue", } m["niv"] = { "tiếng Nivkh", 36464, "qfa-iso", "Cyrl", "Tiếng Nivkh", "Nivkh", translit = "niv-translit", entry_name = { from = {"['’]"}, to = {"ʼ"} }, sort_key = "niv-sortkey", } m["niw"] = { "Nimo", 3504126, "paa-asa", } m["nix"] = { "Hema", 5710904, "bnt-nyg", "Latn", } m["niy"] = { "tiếng Ngiti", 7022396, "csu-lnd", "Latn", "Tiếng Ngiti", "Ngiti", } m["niz"] = { "Ningil", 11732527, "qfa-tor", } m["nja"] = { "Nzanyi", 3441299, "cdc-cbm", "Latn", } m["njb"] = { "Nocte Naga", 7046410, "sit-tno", } m["njh"] = { "tiếng Lotha Naga", 33590, "sit-aao", } m["nji"] = { "Gudanji", 3915692, "aus-mir", } m["njj"] = { "Njen", 36112, "nic-mom", "Latn", } m["njl"] = { "Njalgulgule", 7071229, "sdv-daj", } m["njm"] = { "tiếng Angami", 56761, "tbq-anp", "Latn", "Tiếng Angami", "Angami", } m["njn"] = { "Liangmai Naga", 14194500, "sit-zem", } m["njo"] = { "tiếng Ao", 28433, "sit-aao", "Latn", "Tiếng Ao", "Ao", } m["njr"] = { "Njerep", 35844, "nic-mmb", "Latn", } m["njs"] = { "Nisa", 13593518, "paa-egb", } m["njt"] = { "Ndyuka-Trio Pidgin", 13591205, "crp", ancestors = "djk, tri", } m["nju"] = { "Ngadjunmaya", 7021846, "aus-pam", } m["njx"] = { "Kunyi", 3196559, "bnt-kng", "Latn", } m["njy"] = { "Njyem", 35898, "bnt-ndb", "Latn", } m["njz"] = { "tiếng Nyishi", 56870, "sit-tan", "Latn, Beng", "Tiếng Nyishi", "Nyishi", } m["nka"] = { "Nkoya", 7042633, "bnt-lbn", "Latn", } m["nkb"] = { "Khoibu Naga", 21481876, "sit-mar", } m["nkc"] = { "Nkongho", 35863, "bnt-saw", "Latn", } m["nkd"] = { "Koireng", 6426342, "sit-zem", } m["nke"] = { "Duke", 3041075, "poz-ocw", } m["nkf"] = { "Inpui Naga", 21481817, "sit-zem", } m["nkg"] = { "Nekgini", 11732509, "ngf-fin", "Latn", } m["nkh"] = { "Khezha Naga", 6401519, "tbq-anp", } m["nki"] = { "tiếng Naga Thangal", 56374, "sit-zem", "Latn, Beng", "Tiếng Naga Thangal", "Naga Thangal", } m["nkj"] = { "Nakai", 14916897, "ngf-okk", "Latn", } m["nkk"] = { "Nokuku", 7048122, "poz-vnc", } m["nkm"] = { "Namat", 15634505, } m["nkn"] = { "Nkangala", 10962292, "bnt-clu", "Latn", ancestors = "mck", } m["nko"] = { "tiếng Nkonya", 35867, "alv-gng", "Latn", "Tiếng Nkonya", "Nkonya", } m["nkp"] = { "Niuatoputapu", 3399095, "poz-pnp", } m["nkq"] = { "Nkami", 7042522, "alv-gng", "Latn", } m["nkr"] = { "Nukuoro", 2635961, "poz-pnp", "Latn", } m["nks"] = { "North Asmat", 11732049, } m["nkt"] = { "Nyika", 16917497, "bnt-mwi", "Latn", } m["nku"] = { "tiếng Kulango Bouna", 20668241, "alv-kul", "Latn", "Tiếng Kulango Bouna", "Kulango Bouna", } -- nkv is treated as nkt, see WT:LT m["nkw"] = { "Nkutu", 7193313, "bnt-tet", "Latn", } m["nkx"] = { "Nkoroo", 36000, "ijo", } m["nkz"] = { "tiếng Nkari", 11130307, "nic-ief", ancestors = "ibr", "Latn", "Tiếng Nkari", "Nkari", } m["nla"] = { "Ngombale", 36292, "bai", "Latn", } m["nlc"] = { "Nalca", 6960839, "ngf", "Latn", } m["nle"] = { "East Nyala", 25559347, "bnt-msl", "Latn", ancestors = "luy", } m["nlg"] = { "Gela", 3063531, "poz-sls", "Latn", } m["nli"] = { "Grangali", 3444203, "inc-kun", } m["nlj"] = { "Nyali", 7070830, "bnt-nya", "Latn", } m["nlk"] = { "Ninia Yali", 12953310, } m["nll"] = { "Nihali", 33904, "qfa-iso", "Deva, Latn", } m["nlm"] = { "Mankiyali", 47522426, "inc-koh", } m["nlo"] = { "Ngul", 35894, "bnt-bdz", "Latn", } m["nlq"] = { "Lao Naga", 63283609, "sit-tno", } m["nlu"] = { "Nchumbulu", 36143, "alv-gng", "Latn", } m["nlv"] = { "Orizaba Nahuatl", 3086050, "azc-nah", "Latn", } m["nlw"] = { "Walangama", 7961277, } m["nlx"] = { "Nahali", 33361, "inc-bhi", } m["nly"] = { "Nyamal", 7070837, "aus-nga", "Latn", } m["nlz"] = { "Nalögo", 20527138, "poz-oce", } m["nma"] = { "Maram Naga", 56378, "sit-zem", } m["nmb"] = { "Big Nambas", 2902304, "poz-vnc", } m["nmc"] = { "tiếng Ngam", 3915446, "csu-sar", "Latn", "Tiếng Ngam", "Ngam", } m["nmd"] = { "Ndumu", 35901, "bnt-mbt", "Latn", } m["nme"] = { "Mzieme Naga", 6949473, "sit-zem", } m["nmf"] = { "tiếng Tangkhul Naga", 7682992, "sit-tng", nil, "Tiếng Tangkhul Naga", "Tangkhul Naga", } m["nmg"] = { "Kwasio", 34098, "bnt-mnj", "Latn", } m["nmh"] = { "Monsang Naga", 6902496, } m["nmi"] = { "Nyam", 3438738, "cdc-wst", "Latn", } m["nmj"] = { "Ngombe (Central African Republic)", 3913949, "alv-gbs", } m["nmk"] = { "Namakura", 3335410, "poz-vnc", } m["nml"] = { "Ndemli", 36089, "nic-grf", "Latn", } m["nmm"] = { "tiếng Manangba", 6746900, "sit-tam", "Tibt, Deva", "Tiếng Manangba", "Manangba", translit = {Tibt = "Tibt-translit"}, override_translit = true, display_text = {Tibt = s["Tibt-displaytext"]}, entry_name = {Tibt = s["Tibt-entryname"]}, sort_key = {Tibt = "Tibt-sortkey"}, } m["nmn"] = { "tiếng ǃXóõ", 13229, "khi-tuu", "Latn", "Tiếng ǃXóõ", "ǃXóõ", } m["nmo"] = { "tiếng Naga Moyon", 6927748, "tbq-kuk", "Latn, Beng", "Tiếng Naga Moyon", "Naga Moyon", } m["nmp"] = { "Nimanbur", nil, } m["nmq"] = { "Nambya", 11008869, "bnt-sho", "Latn", } m["nmr"] = { "Nimbari", 36069, "alv-lni", } m["nms"] = { "Letemboi", 3236886, "poz-vnc", } m["nmt"] = { "Namonuito", 12908815, "poz-mic", } m["nmu"] = { "Northeast Maidu", 3278074, "nai-mdu", "Latn", } m["nmv"] = { "Ngamini", 7021944, "aus-kar", "Latn", } m["nmw"] = { "Nimoa", 7037729, "poz-ocw", } m["nmy"] = { "Namuyi", 56844, "sit-nax", "Latn", } m["nmz"] = { "Nawdm", 36085, "nic-yon", "Latn", } m["nna"] = { "Nyangumarta", 33653, } m["nnb"] = { "Nande", 3196953, "bnt-glb", "Latn", } m["nnc"] = { "Nancere", 3140491, "cdc-est", "Latn", } m["nnd"] = { "West Ambae", 2841479, "poz-vnc", "Latn", } m["nne"] = { "Ngandyera", 10961003, "bnt-ova", "Latn", } m["nnf"] = { "Ngaing", 11732510, "ngf-fin", "Latn", } m["nng"] = { "tiếng Naga Maring", 12952908, "sit-mar", "Latn, Beng", "Tiếng Naga Maring", "Naga Maring", } m["nnh"] = { "tiếng Ngiemboon", 36286, "bai", "Latn", "Tiếng Ngiemboon", "Ngiemboon", } m["nni"] = { "North Nuaulu", 12952968, "poz-cma", } m["nnj"] = { "Nyangatom", 4662604, "sdv-ttu", } m["nnk"] = { "tiếng Nankina", 11732502, "ngf-fin", "Latn", "Tiếng Nankina", "Nankina", } m["nnl"] = { "Northern Rengma Naga", 7067615, "tbq-anp", } m["nnm"] = { "Namia", 56363, "paa-spk", "Latn", } m["nnn"] = { "Ngete", 56625, "cdc-mas", "Latn", } m["nnp"] = { "tiếng Wancho", 7967085, "sit-kch", "Wcho, Deva, Latn", "Tiếng Wancho", "Wancho", } m["nnq"] = { "Ngindo", 7022366, "bnt-mbi", "Latn", } m["nnr"] = { "Narungga", 13591127, "aus-pam", } m["nnt"] = { "Nanticoke", 3915517, "alg-eas", "Latn", } m["nnu"] = { "Dwang", 35258, "alv-gng", "Latn", } m["nnv"] = { "Nukunu", 10604066, } m["nnw"] = { "Southern Nuni", 11152248, "nic-gnn", "Latn", } m["nnx"] = { "Ngong", 12952915, } m["nny"] = { -- contrast aus-ynk "Nyangga", 10604331, "aus-tnk", "Latn", } m["nnz"] = { "Nda'nda'", 36016, "bai", "Latn", } m["noa"] = { "Woun Meu", 3111873, "sai-chc", "Latn", } m["noc"] = { "Nuk", 11732534, "ngf-fin", "Latn", } m["nod"] = { "tiếng Bắc Thái", 565110, "tai-swe", "Lana, Thai", "Tiếng Bắc Thái", "Bắc Thái", entry_name = {remove_diacritics = c.ZWNJ}, sort_key = { Lana = "Lana-sortkey", Thai = "Thai-sortkey" }, } m["noe"] = { "Nimadi", 3502294, "inc-wes", "Deva", ancestors = "raj", translit = "hi-translit", } m["nof"] = { "Nomane", 11732531, } m["nog"] = { "tiếng Nogai", 33871, "trk-kno", "Cyrl, Arab, Latn", "Tiếng Nogai", "Nogai", translit = "nog-translit", override_translit = true, } m["noh"] = { "Nomu", 11732532, } m["noi"] = { "Noiri", 12953774, "inc-bhi", } m["noj"] = { "Nonuya", 5372139, "sai-wit", "Latn", } m["nok"] = { "Nooksack", 3343396, } m["nol"] = { "Nomlaki", 3343229, "nai-wtq", "Latn", } m["nom"] = { "Nocamán", 7046289, "sai-pan", "Latn", } m["non"] = { "tiếng Bắc Âu cổ", 35505, "gmq", "Latn, Runr", "Tiếng Bắc Âu cổ", "Bắc Âu cổ", translit = {Runr = "Runr-translit"}, } m["nop"] = { "Numanggang", 7069052, "ngf-fin", "Latn", } m["noq"] = { "Ngongo", 11057478, "bnt-yak", "Latn", } m["nos"] = { "Eastern Nisu", 25559419, "tbq-nis", } m["not"] = { "Nomatsiguenga", 3342992, "awd", "Latn", } m["nou"] = { "Ewage-Notu", 5418860, } m["nov"] = { "tiếng Novial", 36738, "art", "Latn", "Tiếng Novial", "Novial", type = "appendix-constructed" } m["now"] = { "Nyambo", 4967930, "bnt-haj", "Latn", } m["noy"] = { "Noy", 36321, "alv-bua", } m["noz"] = { "Nayi", 3183349, "omv-diz", } m["npa"] = { "Nar Phu", 4926353, "sit-tam", } m["npb"] = { "Nupbikha", 3695201, "sit-ebo", } m["npg"] = { "Ponyo", 7228475, "sit-kch", } m["nph"] = { "Phom", 7187109, "sit-kch", } m["npl"] = { "Southeastern Puebla Nahuatl", 4632950, "azc-nah", "Latn", } m["npn"] = { "Mondropolon", 3320594, "poz-aay", } m["npo"] = { "Pochuri Naga", 7206342, "tbq-anp", } m["nps"] = { "Nipsan", 11732528, } m["npu"] = { "Puimei Naga", 7259044, "sit-zem", } m["npy"] = { "Napu", 12953768, } m["nqg"] = { "tiếng Ede Nago", 12952408, "alv-ede", nil, "Tiếng Ede Nago", "Ede Nago", } m["nqk"] = { "Kura Ede Nago", 12952409, "alv-ede", } m["nql"] = { "Ngendelengo", 63283693, "bnt-swb", "Latn", } m["nqm"] = { "Ndom", 6983791, "ngf", "Latn", } m["nqn"] = { "Nen", 20816352, "paa-yam", } m["nqo"] = { "N'Ko", 18546266, "dmn-man", "Nkoo", } m["nqq"] = { "Kyan-Karyaw Naga", 63283784, "sit-tno", } m["nqy"] = { "Akyaung Ari", 4702035, "sit-tng", } m["nra"] = { "Ngom", 36087, "bnt-kel", "Latn", } m["nrb"] = { "Nara", 36179, "sdv-nes", } m["nrc"] = { "tiếng Noreia", 37023, "cel-con", "Ital", "Tiếng Noreia", "Noreia", translit = "Ital-translit", } m["nre"] = { "Southern Rengma Naga", 7313205, "tbq-anp", } m["nrf"] = { "tiếng Norman", 33850, "roa-oil", "Latn", "Tiếng Norman", "Norman", wikimedia_codes = "nrm", ancestors = "frm", sort_key = s["roa-oil-sortkey"], } m["nrg"] = { "Narango", 12952929, "poz-vnc", } m["nri"] = { "Chokri Naga", 5104247, "tbq-anp", } m["nrk"] = { "Ngarla", 3915860, "aus-nga", "Latn", } m["nrl"] = { "Ngarluma", 7022078, "aus-nga", "Latn", } m["nrm"] = { "Narom", 3336135, "poz-swa", "Latn", } m["nrn"] = { "Norn", 36708, "gmq-ins", "Latn", } m["nrp"] = { "tiếng Piceni Bắc", 430138, nil, "Ital", "Tiếng Piceni Bắc", "Piceni Bắc", translit = "Ital-translit", } m["nrr"] = { "Norra", 12952967, "tai", } m["nrt"] = { "Northern Kalapuya", 3192121, "nai-klp", } m["nru"] = { "tiếng Ma Thoa", 21658869, "sit-nas", "Latn", "Tiếng Ma Thoa", "Ma Thoa", } m["nrx"] = { "Ngurmbur", 2591251, } m["nrz"] = { "Lala (New Guinea)", 6480151, "poz-ocw", } m["nsa"] = { "Sangtam Naga", 7418144, "sit-aao", } m["nsb"] = { "Lower Nossob", 6693681, "khi-tuu", "Latn", } m["nsc"] = { "Nshi", 11129508, "nic-rnn", "Latn", } m["nsd"] = { "Southern Nisu", nil, "tbq-nis", } m["nse"] = { "Nsenga", 3081996, "bnt-sna", "Latn", } m["nsg"] = { "Ngasa", 56345, "sdv-lma", } m["nsh"] = { "Ngoshie", 7022582, "nic-mom", "Latn", } m["nsi"] = { "Nigerian Sign Language", 7033021, "sgn", } m["nsk"] = { "tiếng Naskapi", 1704302, "alg", "Cans", "Tiếng Naskapi", "Naskapi", ancestors = "cr", translit = "nsk-translit", } m["nsl"] = { "Norwegian Sign Language", 1781613, "sgn", } m["nsm"] = { "Sema", 3478238, "tbq-anp", } m["nsn"] = { "Nehan", 3337774, "poz-ocw", } m["nso"] = { "tiếng Sotho Bắc", 33890, "bnt-sts", "Latn", "Tiếng Sotho Bắc", "Sotho Bắc", } m["nsp"] = { "Nepalese Sign Language", 3915492, "sgn", } m["nsq"] = { "Northern Sierra Miwok", 3344226, "nai-utn", "Latn", } m["nsr"] = { "Maritime Sign Language", 3915483, "sgn", } m["nss"] = { "Nali", 3335385, "poz-aay", } m["nst"] = { "Tangsa", 56350, "sit-tno", "Latn, Tnsa", } m["nsu"] = { "Sierra Negra Nahuatl", nil, "azc-nah", "Latn", } m["nsv"] = { "Southwestern Nisu", nil, "tbq-nis", } m["nsw"] = { "Navut", 3337327, "poz-vnc", } m["nsx"] = { "Nsongo", 7067577, "bnt-tmb", "Latn", } m["nsy"] = { "Nasal", 6966574, } m["nsz"] = { "Nisenan", 33665, "nai-mdu", "Latn", } m["ntd"] = { "Northern Tidong", nil, "poz-san", } m["nte"] = { "Nathembo", 11030947, "bnt-mak", } m["ntg"] = { "Ngantangarra", 33060509, } m["nti"] = { "Natioro", 36140, "alv-wan", } m["ntj"] = { "Ngaanyatjarra", 3915409, "aus-pam", "Latn", } m["ntk"] = { "Ikoma", 5996114, "bnt-lok", "Latn", } m["ntm"] = { "tiếng Nateni", 3070731, "nic-grm", "Latn", "Tiếng Nateni", "Nateni", } m["nto"] = { "Ntomba", 11130292, "bnt-mon", "Latn", } m["ntp"] = { "tiếng Tepehuan Bắc", 15615651, "azc", "Latn", "Tiếng Tepehuan Bắc", "Tepehuan Bắc", sort_key = {remove_diacritics = c.acute}, } m["ntr"] = { "Delo", 35195, "nic-gne", "Latn", } m["nts"] = { "Natagaimas", 6967931, } m["ntu"] = { "Natügu", nil, "poz-oce", } m["ntw"] = { "Nottoway", 3344791, "iro-nor", } m["ntx"] = { "Somra", 7560536, "sit-tng", } m["nty"] = { "Mantsi", 56878, "sit-mnz", } m["nua"] = { "Yuaga", 3573088, "poz-cln", "Latn", } m["nuc"] = { "Nukuini", 3346231, } m["nud"] = { "Ngala", 7021893, "paa-spk", "Latn", } m["nue"] = { "Ngundu", 12952953, "bad-cnt", "Latn", } m["nuf"] = { "Nusu", 56413, "tbq-nus", } m["nug"] = { "Nungali", 7069826, "aus-mir", } m["nuh"] = { "Ndunda", 3913968, "nic-mmb", "Latn", } m["nui"] = { "Ngumbi", 36459, "bnt-yko", } m["nuj"] = { "Nyole (Uganda)", 3739448, "bnt-msl", "Latn", } m["nuk"] = { "tiếng Nuu-chah-nulth", 2992876, "wak", "Latn", "Tiếng Nuu-chah-nulth", "Nuu-chah-nulth", } m["nul"] = { "Nusa Laut", 7070332, "poz-cma", } m["num"] = { "Niuafo'ou", 36173, "poz-pol", "Latn", } m["nun"] = { "Anong", 2748232, "sit-nng", } m["nuo"] = { "tiếng Nguồn", 3915785, "mkh-vie", "Latn", "Tiếng Nguồn", "Nguồn", sort_key = "vi-sortkey", } m["nup"] = { "tiếng Nupe", 36720, "alv-ngb", "Latn", "Tiếng Nupe", "Nupe", entry_name = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.caron}, sort_key = "nup-sortkey", } m["nuq"] = { "Nukumanu", 12909019, "poz-pnp", } m["nur"] = { "Nuguria", 7068910, "poz-pnp", } m["nus"] = { "tiếng Nuer", 33675, "sdv-dnu", "Latn", "Tiếng Nuer", "Nuer", } m["nut"] = { "tiếng Nùng", 72695, "tai", "Latn, Hani", "Tiếng Nùng", "Nùng", sort_key = {Hani = "Hani-sortkey"}, } m["nuu"] = { "Ngbundu", 11126081, "bad", "Latn", } m["nuv"] = { "Northern Nuni", 11016572, "nic-gnn", "Latn", } m["nuw"] = { "Nguluwan", 6528643, } m["nux"] = { "Mehek", 6809452, "paa-spk", "Latn", } m["nuy"] = { "Nunggubuyu", 1747811, "aus-arn", } m["nuz"] = { "Tlamacazapa Nahuatl", 2073277, "azc-nah", "Latn", } m["nvh"] = { "Nasarian", 6966614, "poz-vnc", } m["nvm"] = { "Namiae", 12952922, } m["nvo"] = { "Nyokon", nil, "nic-mbw", "Latn", } m["nwa"] = { "Nawathinehena", 6982892, "alg-ara", "Latn", } m["nwb"] = { "Nyabwa", 33664, "kro-wee", } m["nwc"] = { "Classical Newar", 5128301, "sit-new", } m["nwe"] = { "Ngwe", 36181, "bai", "Latn", } m["nwi"] = { "Southwest Tanna", 3504488, } m["nwm"] = { "Nyamusa-Molo", 12747951, "csu-bbk", } m["nwo"] = { "Nauo", 6981305, "aus-pam", "Latn", } m["nwr"] = { "Nawaru", 12638166, "ngf", } m["nwx"] = { "Middle Newar", nil, "sit-new", "Deva, Newa, Ranj", ancestors = "nwc", } m["nwy"] = { "Nottoway-Meherrin", nil, "iro-nor", } m["nxa"] = { "Nauete", 6981095, "poz-tim", } m["nxd"] = { "Ngando (Congo)", 3913277, "bnt-ske", } m["nxe"] = { "Nage", 2295569, "poz-cet", } m["nxg"] = { "tiếng Ngadha", 1516651, "poz-cet", "Latn", "Tiếng Ngadha", "Ngadha", } m["nxi"] = { "Nindi", 7038230, "bnt-mbi", "Latn", } m["nxl"] = { "South Nuaulu", 18544857, "poz-cma", } m["nxm"] = { "tiếng Numidia", 35761, "afa", "Tfng, Latn", --Tfng may not support all the needed characters "Tiếng Numidia", "Numidia", translit = {Tfng = "Tfng-translit"}, } m["nxn"] = { "Ngawun", 3915711, "aus-pam", "Latn", } m["nxo"] = { "Ndambomo", 6983681, "bnt-kel", "Latn", } m["nxq"] = { "tiếng Nạp Tây", 2478711, "sit-nas", "Nkdb, Nkgb, Latn, Lisu", "Tiếng Nạp Tây", "Nạp Tây", translit = {Lisu = "Lisu-translit"}, sort_key = {Lisu = s["Lisu-sortkey"]}, } m["nxr"] = { "Ninggerum", 11732526, "ngf-okk", "Latn", } m["nxu"] = { "Narau", 6965452, "ngf", "Latn", } m["nxx"] = { "Nafri", 6958211, "paa-sen", "Latn", } m["nyb"] = { "Nyangbo", 36256, "alv-ktg", "Latn", } m["nyc"] = { "Nyanga-li", 7070876, "bnt-boa", "Latn", } m["nyd"] = { "Nyole (Kenya)", 7071227, "bnt-msl", "Latn", } m["nye"] = { "Nyengo", 7071068, "bnt-clu", "Latn", } m["nyf"] = { "tiếng Giryama", 3107606, "bnt-mij", "Latn", "Tiếng Giryama", "Giryama", } m["nyg"] = { "Nyindu", 11030685, "bnt-shh", "Latn", } m["nyh"] = { "Nyigina", 3913780, "aus-nyu", "Latn", } m["nyi"] = { "Nyimang", 34846, "sdv-nyi", "Latn", } m["nyj"] = { "Nyanga (Congo)", 7070879, "bnt-nyb", "Latn", } m["nyk"] = { "Nyaneka", 10962298, "bnt-swb", "Latn", } m["nyl"] = { "tiếng Nyeu", 3033578, "mkh-kat", "Thai, Khmr, Laoo", "Tiếng Nyeu", "Nyeu", } m["nym"] = { "Nyamwezi", 4121131, "bnt-tkm", "Latn", } m["nyn"] = { "Nyankole", 13207, "bnt-nyg", "Latn", } m["nyo"] = { "tiếng Nyoro", 33794, "bnt-nyg", "Latn", "Tiếng Nyoro", "Nyoro", } m["nyp"] = { "Nyang'i", 7070894, "ssa-klk", } m["nys"] = { "tiếng Nyunga", 7049771, "aus-pam", "Latn", "Tiếng Nyunga", "Nyunga", } m["nyt"] = { "Nyawaygi", 3915783, "aus-dyb", } m["nyu"] = { "Nyungwe", 7071318, "bnt-sna", "Latn", } m["nyv"] = { "Nyulnyul", 3442732, "aus-nyu", "Latn", } m["nyw"] = { "tiếng Nyaw", 26425602, "tai", "Thai, Latn, Tayo", -- Vietnamese alphabet "Tiếng Nyaw", "Nyaw", sort_key = "Thai-sortkey", -- no effect on Latn } m["nyx"] = { "Nganyaywana", 3913800, "aus-cww", "Latn", } m["nyy"] = { "Nyakyusa", 3272620, "bnt-run", "Latn", } m["nza"] = { "tiếng Mbembe Tigon", 36518, "nic-jkn", "Latn", "Tiếng Mbembe Tigon", "Mbembe Tigon", } m["nzb"] = { "Njebi", 35923, "bnt-nze", "Latn", } m["nzd"] = { "tiếng Nzadi", 17152586, "bnt-bdz", "Latn", "Tiếng Nzadi", "Nzadi", entry_name = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.caron}, } m["nzi"] = { "Nzima", 36337, "alv-ctn", } m["nzk"] = { "tiếng Nzakara", 3913339, "znd", "Latn", "Tiếng Nzakara", "Nzakara", } m["nzm"] = { "Zeme Naga", 21491053, "sit-zem", } m["nzs"] = { "New Zealand Sign Language", 36239, "sgn", } m["nzu"] = { "Central Teke", 36473, "bnt-tkc", } m["nzy"] = { "Nzakambay", 36374, "alv-mbm", "Latn", } m["nzz"] = { "Nanga Dama Dogon", 6963443, "nic-nwa", } return require("Module:languages").finalizeData(m, "language") bae88at191sc8fe0dovi7flwicjscw3 2571715 2571678 2026-10-18T15:32:43Z Hiyuune 50834 2571715 Scribunto text/plain local m_langdata = require("Module:languages/data") -- Loaded on demand, as it may not be needed (depending on the data). local function u(...) u = require("Module:string utilities").char return u(...) end local c = m_langdata.chars local p = m_langdata.puaChars local s = m_langdata.shared local m = {} m["naa"] = { "Namla", 3508760, "paa-pau", "Latn", } m["nab"] = { "tiếng Nambikwara", 2068190, "sai-nmk", "Latn", "Tiếng Nambikwara", "Nambikwara", } m["nac"] = { "Narak", 6965295, "ngf", "Latn", } m["nae"] = { "Naka'ela", 6960073, "poz", "Latn", } m["naf"] = { "Nabak", 11732491, "ngf", "Latn", } m["nag"] = { "Naga Pidgin", 3503454, "crp", "Latn", ancestors = "as", } m["nah"] = { "tiếng Nahuatl", 13300, "azc-nah", "Latn", "Tiếng Nahuatl", "Nahuatl", } m["naj"] = { "Nalu", 36026, "alv-nal", "Latn", } m["nak"] = { "Nakanai", 6528669, "poz-ocw", "Latn", } m["nal"] = { "Nalik", 3335387, "poz-ocw", "Latn", } m["nam"] = { "Ngan'gityemerri", 3298041, "aus-dal", "Latn", } -- Being converted into the family "Southern Min" ("zhx-nan", which will take the code "nan" once the language can be removed). Retain the name "Min Nan" here to avoid having to move things that are scheduled for deletion anyway. m["nan"] = { "tiếng Mân Nam", 36495, "zhx-com", "Hants, Latn, Bopo, Kana", "Tiếng Mân Nam", "Mân Nam", wikimedia_codes = "zh-min-nan", generate_forms = "zh-generateforms", sort_key = { Hani = "Hani-sortkey", Kana = "Kana-sortkey" }, } m["nao"] = { "Naaba", 11883865, "sit-tib", ancestors = "xct", } m["nap"] = { "tiếng Napoli", 33845, "roa-itd", "Latn", "Tiếng Napoli", "Napoli", } m["naq"] = { "tiếng Khoekhoe", 13301, "khi-khk", "Latn", "Tiếng Khoekhoe", "Khoekhoe", } m["nar"] = { "Iguta", 5621686, "nic-jer", "Latn", } m["nas"] = { "Nasioi", 56772, "paa-sbo", "Latn", } m["nat"] = { "Hungworo", 3914395, "nic-kmk", "Latn", } m["naw"] = { "Nawuri", 35906, "alv-gng", "Latn", } m["nax"] = { "Nakwi", 3504178, "qfa-mal", "Latn", } m["nay"] = { "Ngarrindjeri", 7022091, "aus-pam", "Latn", } m["naz"] = { "Coatepec Nahuatl", 5138605, "azc-nah", "Latn", } m["nba"] = { "Nyemba", 3346655, "bnt-clu", "Latn", ancestors = "lch", } m["nbb"] = { "Ndoe", 36134, "nic-eko", "Latn", } m["nbc"] = { "Chang", 5071694, "sit-kch", "Latn", } m["nbd"] = { "Ngbinda", 11132859, "bnt-boa", "Latn", } m["nbe"] = { "Konyak Naga", 6430448, "sit-kch", "Latn", } m["nbg"] = { "Nagarchal", 13299, "dra-gon", } m["nbh"] = { "Ngamo", 3438705, "cdc-wst", "Latn", } m["nbi"] = { "Mao Naga", 12952905, "tbq-anp", "Latn", } m["nbj"] = { "Ngarinman", 10600380, nil, "Latn", } m["nbk"] = { "Nake", 11732496, "ngf-mad", "Latn", } m["nbm"] = { "Ngbaka Ma'bo", 3915331, "nic-nkm", "Latn", } m["nbn"] = { "Kuri", 3200540, "poz", "Latn", } m["nbo"] = { "Nkukoli", 3914482, "nic-uce", "Latn", } m["nbp"] = { "Nnam", 36138, "nic-eko", "Latn", } m["nbq"] = { "Nggem", 12952956, "ngf", "Latn", } m["nbr"] = { "Numana", 5529310, "nic-nin", "Latn", } m["nbs"] = { "Namibian Sign Language", 6961792, "sgn", "Latn", -- when documented } m["nbt"] = { "Na", 12952895, "sit-tan", "Deva, Latn", } m["nbu"] = { "Rongmei Naga", 12952912, "sit-zem", "Latn", } m["nbv"] = { "Ngamambo", 11129694, "nic-mom", "Latn", } m["nbw"] = { "Southern Ngbandi", 17522635, "nic-ngd", "Latn", } m["nby"] = { "Ningera", 11732524, "paa-brd", "Latn", } m["nca"] = { "Iyo", 6101336, "ngf-fin", "Latn", } m["ncb"] = { "tiếng Nicobar Trung", 3335553, "aav-nic", "Deva, Latn", "Tiếng Nicobar Trung", "Nicobar Trung", } m["ncc"] = { "Ponam", 3396122, "poz-aay", "Latn", } m["ncd"] = { "Nachering", 6957144, "sit-kic", "Deva", } m["nce"] = { "Yale", 2992915, "paa", --kwomtari or isolate "Latn", } m["ncf"] = { "Notsi", 3344784, "poz-ocw", "Latn", } m["ncg"] = { "tiếng Nisga'a", 3342138, "nai-tsi", "Latn", "Tiếng Nisga'a", "Nisga'a", } m["nch"] = { "tiếng Trung Nahuatl Huasteca", 2194290, "azc-hua", "Latn", "Tiếng Trung Nahuatl Huasteca", "Trung Nahuatl Huasteca", } m["nci"] = { "tiếng Nahuatl cổ điển", 559242, "azc-nah", "Latn", "Tiếng Nahuatl cổ điển", "Nahuatl cổ điển", entry_name = {remove_diacritics = c.macron}, } m["ncj"] = { "Northern Puebla Nahuatl", 15705671, "azc-nah", "Latn", } m["nck"] = { "Nakara", 6960662, "aus-arn", "Latn", } m["ncl"] = { "Michoacán Nahuatl", 2896217, "azc-nah", "Latn", } m["ncm"] = { "Nambo", 42173731, nil, "Latn", } m["ncn"] = { "Nauna", 3337158, "poz-aay", "Latn", } m["nco"] = { "Sibe", 56806, "paa-sbo", "Latn", } m["ncq"] = { "tiếng Katang Bắc", 12638175, "mkh-kat", "Laoo, Thai", "Tiếng Katang Bắc", "Katang Bắc", sort_key = { Laoo = "Laoo-sortkey", Thai = "Thai-sortkey", }, } m["ncr"] = { "Ncane", 11297920, "nic-bbe", "Latn", ancestors = "nhu", } m["ncs"] = { "Nicaraguan Sign Language", 33765, "sgn", "Sgnw", } m["nct"] = { "tiếng Naga Chothe", 5105385, "tbq-kuk", "Beng, Latn", "Tiếng Naga Chothe", "Naga Chothe", } m["ncu"] = { "Chumburung", 35198, "alv-gng", "Latn", } m["ncx"] = { "tiếng Trung Nahuatl Puebla", 5061727, "azc-nah", "Latn", "Tiếng Trung Nahuatl Puebla", "Trung Nahuatl Puebla", } m["ncz"] = { "Natchez", 3111838, nil, "Latn", } m["nda"] = { "Ndasa", 35904, "bnt-kel", "Latn", } m["ndb"] = { "Kenswei Nsei", 7067553, "nic-rnn", "Latn", } m["ndc"] = { "tiếng Ndau", 13311, "bnt-sho", "Latn", "Tiếng Ndau", "Ndau", } m["ndd"] = { "Nde-Nsele-Nta", 36131, "nic-eko", "Latn", } m["ndf"] = { "Nadruvian", 6957967, nil, "Latn", } m["ndg"] = { "Ndengereko", 6983726, "bnt-mbi", "Latn", } m["ndh"] = { "Ndali", 6983678, "bnt-run", "Latn", } m["ndi"] = { "Chamba Leko", 36381, "alv-lek", "Latn", } m["ndj"] = { "Ndamba", 6983684, "bnt-kil", "Latn", } m["ndk"] = { "Ndaka", 11164947, "bnt-nya", "Latn", } m["ndl"] = { "Ndolo", 6983788, "bnt-zbi", "Latn", ancestors = "lse", } m["ndm"] = { "Ndam", 56283, "cdc-est", "Latn", } m["ndn"] = { "Ngundi", 35916, "bnt-ngn", "Latn", } m["ndp"] = { "Ndo", 6983774, "csu-mle", "Latn", } m["ndq"] = { "Ndombe", 6983792, "bnt-swb", "Latn", } m["ndr"] = { "Ndoola", 35837, "nic-mmb", "Latn", } m["nds"] = { "tiếng Hạ Đức", 25433, "gmw-lgm", "Latn", "Tiếng Hạ Đức", "Hạ Đức", ancestors = "gml", } m["ndt"] = { "Ndunga", 6983857, "nic-mbc", "Latn", } m["ndu"] = { "Dugun", 11015189, "alv-dur", "Latn", } m["ndv"] = { "Ndut", 36028, "alv-cng", "Latn", } m["ndw"] = { "Ndobo", 11008568, "bnt-ngn", "Latn", } m["ndx"] = { "Nduga", 6983833, nil, "Latn", } m["ndy"] = { "Lutos", 6705910, "csu-val", "Latn", } m["ndz"] = { "tiếng Ndogo", 35983, "nic-ser", "Latn", "Tiếng Ndogo", "Ndogo", } m["nea"] = { "Eastern Ngad'a", 12473454, "poz-cet", } m["neb"] = { "Toura", 7853636, "dmn-mda", "Latn", } m["nec"] = { "Nedebang", 4925378, "ngf", } m["ned"] = { "Nde-Gbite", 11010279, "nic-grf", } m["nee"] = { "Kumak", 3347266, "poz-cln", "Latn", } m["nef"] = { "Nefamese", 6987002, "crp", } m["neg"] = { "tiếng Negidal", 33676, "tuw-ewe", "Cyrl", "Tiếng Negidal", "Negidal", } m["neh"] = { "tiếng Nyen", 3695185, "sit-ebo", "Tibt, Latn", "Tiếng Nyen", "Nyen", translit = {Tibt = "Tibt-translit"}, override_translit = true, display_text = {Tibt = s["Tibt-displaytext"]}, entry_name = {Tibt = s["Tibt-entryname"]}, sort_key = {Tibt = "Tibt-sortkey"}, } m["nej"] = { "Neko", 6989840, "ngf-fin", "Latn", } m["nek"] = { "Neku", 14916900, "poz-cln", } m["nem"] = { "Nemi", 3338008, "poz-cln", "Latn", } m["nen"] = { "Nengone", 3338052, "poz-occ", "Latn", } m["neo"] = { "tiếng Na Miểu", 15977293, "hmn", nil, "Tiếng Na Miểu", "Na Miểu", } m["neq"] = { "North Central Mixe", 25559729, nil, "Latn", } m["ner"] = { "Yahadian", 8046778, nil, "Latn", } m["nes"] = { "Bhoti Kinnauri", 21179921, "sit-las", } m["net"] = { "Nete", 6998869, "paa-eng", } m["neu"] = { "Neo", 606917, "art", "Latn", type = "appendix-constructed", } m["nev"] = { "Nyaheun", 7070801, "mkh-ban", } m["new"] = { "tiếng Newa", 33979, "sit-new", "Deva, Newa, Ranj", "Tiếng Newa", "Newa", ancestors = "nwx", translit = { Deva = "new-translit", Newa = "new-Newa-translit", }, } m["nex"] = { "Neme", 12952941, } m["ney"] = { "Neyo", 36410, "kro", } m["nez"] = { "Nez Perce", 3339226, "nai-shp", "Latn", } m["nfa"] = { "Dhao", 2053828, "poz", } m["nfd"] = { "Ahwai", 3913957, "nic-plt", "Latn", } m["nfl"] = { "Aiwoo", 56742, "poz-oce", "Latn", } m["nfr"] = { "tiếng Nafaanra", 13297, "alv-snf", "Latn", "Tiếng Nafaanra", "Nafaanra", } m["nfu"] = { "Mfumte", 6826794, "nic-nka", "Latn", } m["nga"] = { "tiếng Ngbaka", 36022, "alv-gbf", "Latn", "Tiếng Ngbaka", "Ngbaka", } m["ngb"] = { "Northern Ngbandi", 17522631, "nic-ngd", "Latn", } m["ngc"] = { "tiếng Ngombe (Congo)", 3123524, "bnt-bun", "Latn", "Tiếng Ngombe (Congo)", "Ngombe (Congo)", } m["ngd"] = { "Ngando (Central African Republic)", 35910, "bnt-ngn", } m["nge"] = { "Ngemba", 6750551, "nic-nge", "Latn", } m["ngg"] = { -- compare 'aiy' "Ngbaka Manza", 11033316, "alv-gbf", "Latn", } m["ngh"] = { "tiếng Nǀuu", 2618974, "khi-tuu", "Latn", "Tiếng Nǀuu", "Nǀuu", } m["ngi"] = { "Ngizim", 3914924, "cdc-wst", "Latn", } m["ngj"] = { "Ngie", 36361, "nic-mom", "Latn", } m["ngk"] = { "Ngalkbun", 3913790, "aus-gun", "Latn", } m["ngl"] = { "Lomwe", 35824, "bnt-mak", "Latn", } m["ngm"] = { "Ngatik Men's Creole", 36400, "crp", ancestors = "en, pon", } m["ngn"] = { "Ngwo", 36051, "nic-mom", "Latn", } m["ngo"] = { "Ngoni", 7022547, "bnt-ngu", "Latn", } m["ngp"] = { "Ngulu", 7193332, "bnt-seu", "Latn", } m["ngq"] = { "Ngoreme", 7022573, "bnt-lok", "Latn", } m["ngr"] = { "Nagu", 3063524, "poz-oce", "Latn", } m["ngs"] = { "Gvoko", 3441188, "cdc-cbm", "Latn", } m["ngt"] = { "tiếng Ngeq", 25559548, "mkh-kat", "Laoo", "Tiếng Ngeq", "Ngeq", translit = "lo-translit", } m["ngu"] = { "Guerrero Nahuatl", 5614980, "azc-nah", "Latn", } m["ngv"] = { "Nagumi", 35842, "nic-jrn", } m["ngw"] = { "Ngwaba", 3440480, "cdc-cbm", "Latn", } m["ngx"] = { "Nggwahyi", 56265, "cdc-cbm", "Latn", } m["ngy"] = { "Tibea", 36598, "bnt-baf", "Latn", } m["ngz"] = { "Ngungwel", 35920, "bnt-tkc", "Latn", } m["nha"] = { "Nhanda", 3339380, "aus-psw", "Latn", } m["nhb"] = { "Beng", 3913311, "dmn-nbe", "Latn", } m["nhc"] = { "Tabasco Nahuatl", 6047326, "azc-nah", "Latn", } m["nhd"] = { "Chiripá", 2873230, "tup-gua", ancestors = "gn", } m["nhe"] = { "Eastern Huasteca Nahuatl", 4358289, "azc-nah", "Latn", } m["nhf"] = { "Nhuwala", 10600396, "aus-nga", "Latn", } m["nhg"] = { "Tetelcingo Nahuatl", 3450252, "azc-nah", "Latn", } m["nhh"] = { "Nahari", 6583560, "inc-eas", } m["nhi"] = { "Zacatlán-Ahuacatlán-Tepetzintla Nahuatl", 12953764, "azc-nah", "Latn", } m["nhk"] = { "Cosoleacaque Nahuatl", 12953757, "azc-nah", "Latn", } m["nhm"] = { "Morelos Nahuatl", 4800819, "azc-nah", "Latn", } m["nhn"] = { "tiếng Trung Nahuatl", 6047309, "azc-nah", "Latn", "Tiếng Trung Nahuatl", "Trung Nahuatl", } m["nho"] = { "Takuu", 3409818, "poz-pnp", "Latn", } m["nhp"] = { "Pajapan Nahuatl", 12953760, "azc-nah", "Latn", } m["nhq"] = { "Huaxcaleca Nahuatl", 12953758, "azc-nah", "Latn", } m["nhr"] = { "Naro", 2164778, "khi-kal", "Latn", } m["nht"] = { "tiếng Nahuatl Ometepec", 7090132, "azc-nah", "Latn", } m["nhu"] = { "tiếng Noone", 36072, "nic-bbe", "Latn", } m["nhv"] = { "tiếng Nahuatl Temascaltepec", 2379405, "azc-nah", "Latn", "Tiếng Nahuatl Temascaltepec", "Nahuatl Temascaltepec", } m["nhw"] = { "tiếng Tây Huasteca Nahuatl", 2678840, "azc-nah", "Latn", "Tiếng Tây Nahuatl Huasteca", "Tây Nahuatl Huasteca", } m["nhx"] = { "Mecayapan Nahuatl", 12953756, "azc-nah", "Latn", } m["nhy"] = { "Northern Oaxaca Nahuatl", 12953763, "azc-nah", "Latn", } m["nhz"] = { "Santa María La Alta Nahuatl", 15705753, "azc-nah", "Latn", } m["nia"] = { "tiếng Nias", 2407831, "poz-nws", "Latn", "Tiếng Nias", "Nias", } m["nib"] = { "Nakame", 11732495, "ngf-fin", "Latn", } m["nid"] = { "Ngandi", 7021977, "aus-arn", "Latn", } m["nie"] = { "Niellim", 33662, "alv-bua", } m["nif"] = { "Nek", 6989781, "ngf-fin", "Latn", } m["nig"] = { "Ngalakan", 3913796, "aus-gun", "Latn", } m["nih"] = { "Nyiha", 11128374, "bnt-mby", "Latn", } m["nii"] = { "Nii", 35237, "ngf", "Latn", } m["nij"] = { "Ngaju", 2992872, "poz-brw", "Latn", } m["nik"] = { "tiếng Nicobar Nam", 7570194, "aav-nic", "Deva, Latn", "Tiếng Nicobar Nam", "Nicobar Nam", } m["nil"] = { "Nila", 7036821, } m["nim"] = { "Nilamba", 4121200, "bnt-tkm", "Latn", } m["nin"] = { "Ninzo", 3914021, "nic-nin", } m["nio"] = { "tiếng Nganasan", 36743, "syd", "Cyrl", "Tiếng Nganasan", "Nganasan", translit = "nio-translit", } m["niq"] = { "Nandi", 6956591, "sdv-nma", } m["nir"] = { "Nimboran", 301116, "paa-nim", } m["nis"] = { "Nimi", 11732523, "ngf-fin", "Latn", } m["nit"] = { "tiếng Nam Kolami", 56767, "dra-knk", "Deva, Telu", "Tiếng Nam Kolami", "Nam Kolami", translit = { Telu = "te-translit" }, } m["niu"] = { "tiếng Niue", 33790, "poz-pol", "Latn", "Tiếng Niue", "Niue", } m["niv"] = { "tiếng Nivkh", 36464, "qfa-iso", "Cyrl", "Tiếng Nivkh", "Nivkh", translit = "niv-translit", entry_name = { from = {"['’]"}, to = {"ʼ"} }, sort_key = "niv-sortkey", } m["niw"] = { "Nimo", 3504126, "paa-asa", } m["nix"] = { "Hema", 5710904, "bnt-nyg", "Latn", } m["niy"] = { "tiếng Ngiti", 7022396, "csu-lnd", "Latn", "Tiếng Ngiti", "Ngiti", } m["niz"] = { "Ningil", 11732527, "qfa-tor", } m["nja"] = { "Nzanyi", 3441299, "cdc-cbm", "Latn", } m["njb"] = { "Nocte Naga", 7046410, "sit-tno", } m["njh"] = { "tiếng Lotha Naga", 33590, "sit-aao", } m["nji"] = { "Gudanji", 3915692, "aus-mir", } m["njj"] = { "Njen", 36112, "nic-mom", "Latn", } m["njl"] = { "Njalgulgule", 7071229, "sdv-daj", } m["njm"] = { "tiếng Angami", 56761, "tbq-anp", "Latn", "Tiếng Angami", "Angami", } m["njn"] = { "Liangmai Naga", 14194500, "sit-zem", } m["njo"] = { "tiếng Ao", 28433, "sit-aao", "Latn", "Tiếng Ao", "Ao", } m["njr"] = { "Njerep", 35844, "nic-mmb", "Latn", } m["njs"] = { "Nisa", 13593518, "paa-egb", } m["njt"] = { "Ndyuka-Trio Pidgin", 13591205, "crp", ancestors = "djk, tri", } m["nju"] = { "Ngadjunmaya", 7021846, "aus-pam", } m["njx"] = { "Kunyi", 3196559, "bnt-kng", "Latn", } m["njy"] = { "Njyem", 35898, "bnt-ndb", "Latn", } m["njz"] = { "tiếng Nyishi", 56870, "sit-tan", "Latn, Beng", "Tiếng Nyishi", "Nyishi", } m["nka"] = { "Nkoya", 7042633, "bnt-lbn", "Latn", } m["nkb"] = { "Khoibu Naga", 21481876, "sit-mar", } m["nkc"] = { "Nkongho", 35863, "bnt-saw", "Latn", } m["nkd"] = { "Koireng", 6426342, "sit-zem", } m["nke"] = { "Duke", 3041075, "poz-ocw", } m["nkf"] = { "Inpui Naga", 21481817, "sit-zem", } m["nkg"] = { "Nekgini", 11732509, "ngf-fin", "Latn", } m["nkh"] = { "Khezha Naga", 6401519, "tbq-anp", } m["nki"] = { "tiếng Naga Thangal", 56374, "sit-zem", "Latn, Beng", "Tiếng Naga Thangal", "Naga Thangal", } m["nkj"] = { "Nakai", 14916897, "ngf-okk", "Latn", } m["nkk"] = { "Nokuku", 7048122, "poz-vnc", } m["nkm"] = { "Namat", 15634505, } m["nkn"] = { "Nkangala", 10962292, "bnt-clu", "Latn", ancestors = "mck", } m["nko"] = { "tiếng Nkonya", 35867, "alv-gng", "Latn", "Tiếng Nkonya", "Nkonya", } m["nkp"] = { "Niuatoputapu", 3399095, "poz-pnp", } m["nkq"] = { "Nkami", 7042522, "alv-gng", "Latn", } m["nkr"] = { "Nukuoro", 2635961, "poz-pnp", "Latn", } m["nks"] = { "North Asmat", 11732049, } m["nkt"] = { "Nyika", 16917497, "bnt-mwi", "Latn", } m["nku"] = { "tiếng Kulango Bouna", 20668241, "alv-kul", "Latn", "Tiếng Kulango Bouna", "Kulango Bouna", } -- nkv is treated as nkt, see WT:LT m["nkw"] = { "Nkutu", 7193313, "bnt-tet", "Latn", } m["nkx"] = { "Nkoroo", 36000, "ijo", } m["nkz"] = { "tiếng Nkari", 11130307, "nic-ief", ancestors = "ibr", "Latn", "Tiếng Nkari", "Nkari", } m["nla"] = { "Ngombale", 36292, "bai", "Latn", } m["nlc"] = { "Nalca", 6960839, "ngf", "Latn", } m["nle"] = { "East Nyala", 25559347, "bnt-msl", "Latn", ancestors = "luy", } m["nlg"] = { "Gela", 3063531, "poz-sls", "Latn", } m["nli"] = { "Grangali", 3444203, "inc-kun", } m["nlj"] = { "Nyali", 7070830, "bnt-nya", "Latn", } m["nlk"] = { "Ninia Yali", 12953310, } m["nll"] = { "Nihali", 33904, "qfa-iso", "Deva, Latn", } m["nlm"] = { "Mankiyali", 47522426, "inc-koh", } m["nlo"] = { "Ngul", 35894, "bnt-bdz", "Latn", } m["nlq"] = { "Lao Naga", 63283609, "sit-tno", } m["nlu"] = { "Nchumbulu", 36143, "alv-gng", "Latn", } m["nlv"] = { "Orizaba Nahuatl", 3086050, "azc-nah", "Latn", } m["nlw"] = { "Walangama", 7961277, } m["nlx"] = { "Nahali", 33361, "inc-bhi", } m["nly"] = { "Nyamal", 7070837, "aus-nga", "Latn", } m["nlz"] = { "Nalögo", 20527138, "poz-oce", } m["nma"] = { "Maram Naga", 56378, "sit-zem", } m["nmb"] = { "Big Nambas", 2902304, "poz-vnc", } m["nmc"] = { "tiếng Ngam", 3915446, "csu-sar", "Latn", "Tiếng Ngam", "Ngam", } m["nmd"] = { "Ndumu", 35901, "bnt-mbt", "Latn", } m["nme"] = { "Mzieme Naga", 6949473, "sit-zem", } m["nmf"] = { "tiếng Tangkhul Naga", 7682992, "sit-tng", nil, "Tiếng Tangkhul Naga", "Tangkhul Naga", } m["nmg"] = { "Kwasio", 34098, "bnt-mnj", "Latn", } m["nmh"] = { "Monsang Naga", 6902496, } m["nmi"] = { "Nyam", 3438738, "cdc-wst", "Latn", } m["nmj"] = { "Ngombe (Central African Republic)", 3913949, "alv-gbs", } m["nmk"] = { "Namakura", 3335410, "poz-vnc", } m["nml"] = { "Ndemli", 36089, "nic-grf", "Latn", } m["nmm"] = { "tiếng Manangba", 6746900, "sit-tam", "Tibt, Deva", "Tiếng Manangba", "Manangba", translit = {Tibt = "Tibt-translit"}, override_translit = true, display_text = {Tibt = s["Tibt-displaytext"]}, entry_name = {Tibt = s["Tibt-entryname"]}, sort_key = {Tibt = "Tibt-sortkey"}, } m["nmn"] = { "tiếng ǃXóõ", 13229, "khi-tuu", "Latn", "Tiếng ǃXóõ", "ǃXóõ", } m["nmo"] = { "tiếng Naga Moyon", 6927748, "tbq-kuk", "Latn, Beng", "Tiếng Naga Moyon", "Naga Moyon", } m["nmp"] = { "Nimanbur", nil, } m["nmq"] = { "Nambya", 11008869, "bnt-sho", "Latn", } m["nmr"] = { "Nimbari", 36069, "alv-lni", } m["nms"] = { "Letemboi", 3236886, "poz-vnc", } m["nmt"] = { "Namonuito", 12908815, "poz-mic", } m["nmu"] = { "Northeast Maidu", 3278074, "nai-mdu", "Latn", } m["nmv"] = { "Ngamini", 7021944, "aus-kar", "Latn", } m["nmw"] = { "Nimoa", 7037729, "poz-ocw", } m["nmy"] = { "Namuyi", 56844, "sit-nax", "Latn", } m["nmz"] = { "Nawdm", 36085, "nic-yon", "Latn", } m["nna"] = { "Nyangumarta", 33653, } m["nnb"] = { "Nande", 3196953, "bnt-glb", "Latn", } m["nnc"] = { "Nancere", 3140491, "cdc-est", "Latn", } m["nnd"] = { "West Ambae", 2841479, "poz-vnc", "Latn", } m["nne"] = { "Ngandyera", 10961003, "bnt-ova", "Latn", } m["nnf"] = { "Ngaing", 11732510, "ngf-fin", "Latn", } m["nng"] = { "tiếng Naga Maring", 12952908, "sit-mar", "Latn, Beng", "Tiếng Naga Maring", "Naga Maring", } m["nnh"] = { "tiếng Ngiemboon", 36286, "bai", "Latn", "Tiếng Ngiemboon", "Ngiemboon", } m["nni"] = { "North Nuaulu", 12952968, "poz-cma", } m["nnj"] = { "Nyangatom", 4662604, "sdv-ttu", } m["nnk"] = { "tiếng Nankina", 11732502, "ngf-fin", "Latn", "Tiếng Nankina", "Nankina", } m["nnl"] = { "Northern Rengma Naga", 7067615, "tbq-anp", } m["nnm"] = { "Namia", 56363, "paa-spk", "Latn", } m["nnn"] = { "Ngete", 56625, "cdc-mas", "Latn", } m["nnp"] = { "tiếng Wancho", 7967085, "sit-kch", "Wcho, Deva, Latn", "Tiếng Wancho", "Wancho", } m["nnq"] = { "Ngindo", 7022366, "bnt-mbi", "Latn", } m["nnr"] = { "Narungga", 13591127, "aus-pam", } m["nnt"] = { "Nanticoke", 3915517, "alg-eas", "Latn", } m["nnu"] = { "Dwang", 35258, "alv-gng", "Latn", } m["nnv"] = { "Nukunu", 10604066, } m["nnw"] = { "Southern Nuni", 11152248, "nic-gnn", "Latn", } m["nnx"] = { "Ngong", 12952915, } m["nny"] = { -- contrast aus-ynk "Nyangga", 10604331, "aus-tnk", "Latn", } m["nnz"] = { "Nda'nda'", 36016, "bai", "Latn", } m["noa"] = { "Woun Meu", 3111873, "sai-chc", "Latn", } m["noc"] = { "Nuk", 11732534, "ngf-fin", "Latn", } m["nod"] = { "tiếng Bắc Thái", 565110, "tai-swe", "Lana, Thai", "Tiếng Bắc Thái", "Bắc Thái", entry_name = {remove_diacritics = c.ZWNJ}, sort_key = { Lana = "Lana-sortkey", Thai = "Thai-sortkey" }, } m["noe"] = { "Nimadi", 3502294, "inc-wes", "Deva", ancestors = "raj", translit = "hi-translit", } m["nof"] = { "Nomane", 11732531, } m["nog"] = { "tiếng Nogai", 33871, "trk-kno", "Cyrl, Arab, Latn", "Tiếng Nogai", "Nogai", translit = "nog-translit", override_translit = true, } m["noh"] = { "Nomu", 11732532, } m["noi"] = { "Noiri", 12953774, "inc-bhi", } m["noj"] = { "Nonuya", 5372139, "sai-wit", "Latn", } m["nok"] = { "Nooksack", 3343396, } m["nol"] = { "Nomlaki", 3343229, "nai-wtq", "Latn", } m["nom"] = { "Nocamán", 7046289, "sai-pan", "Latn", } m["non"] = { "tiếng Bắc Âu cổ", 35505, "gmq", "Latn, Runr", "Tiếng Bắc Âu cổ", "Bắc Âu cổ", translit = {Runr = "Runr-translit"}, } m["nop"] = { "Numanggang", 7069052, "ngf-fin", "Latn", } m["noq"] = { "Ngongo", 11057478, "bnt-yak", "Latn", } m["nos"] = { "Eastern Nisu", 25559419, "tbq-nis", } m["not"] = { "Nomatsiguenga", 3342992, "awd", "Latn", } m["nou"] = { "Ewage-Notu", 5418860, } m["nov"] = { "tiếng Novial", 36738, "art", "Latn", "Tiếng Novial", "Novial", type = "appendix-constructed" } m["now"] = { "Nyambo", 4967930, "bnt-haj", "Latn", } m["noy"] = { "Noy", 36321, "alv-bua", } m["noz"] = { "Nayi", 3183349, "omv-diz", } m["npa"] = { "Nar Phu", 4926353, "sit-tam", } m["npb"] = { "Nupbikha", 3695201, "sit-ebo", } m["npg"] = { "Ponyo", 7228475, "sit-kch", } m["nph"] = { "Phom", 7187109, "sit-kch", } m["npl"] = { "Southeastern Puebla Nahuatl", 4632950, "azc-nah", "Latn", } m["npn"] = { "Mondropolon", 3320594, "poz-aay", } m["npo"] = { "Pochuri Naga", 7206342, "tbq-anp", } m["nps"] = { "Nipsan", 11732528, } m["npu"] = { "Puimei Naga", 7259044, "sit-zem", } m["npy"] = { "Napu", 12953768, } m["nqg"] = { "tiếng Ede Nago", 12952408, "alv-ede", nil, "Tiếng Ede Nago", "Ede Nago", } m["nqk"] = { "Kura Ede Nago", 12952409, "alv-ede", } m["nql"] = { "Ngendelengo", 63283693, "bnt-swb", "Latn", } m["nqm"] = { "Ndom", 6983791, "ngf", "Latn", } m["nqn"] = { "Nen", 20816352, "paa-yam", } m["nqo"] = { "N'Ko", 18546266, "dmn-man", "Nkoo", } m["nqq"] = { "Kyan-Karyaw Naga", 63283784, "sit-tno", } m["nqy"] = { "Akyaung Ari", 4702035, "sit-tng", } m["nra"] = { "Ngom", 36087, "bnt-kel", "Latn", } m["nrb"] = { "Nara", 36179, "sdv-nes", } m["nrc"] = { "tiếng Noreia", 37023, "cel-con", "Ital", "Tiếng Noreia", "Noreia", translit = "Ital-translit", } m["nre"] = { "Southern Rengma Naga", 7313205, "tbq-anp", } m["nrf"] = { "tiếng Norman", 33850, "roa-oil", "Latn", "Tiếng Norman", "Norman", wikimedia_codes = "nrm", ancestors = "frm", sort_key = s["roa-oil-sortkey"], } m["nrg"] = { "Narango", 12952929, "poz-vnc", } m["nri"] = { "Chokri Naga", 5104247, "tbq-anp", } m["nrk"] = { "Ngarla", 3915860, "aus-nga", "Latn", } m["nrl"] = { "Ngarluma", 7022078, "aus-nga", "Latn", } m["nrm"] = { "Narom", 3336135, "poz-swa", "Latn", } m["nrn"] = { "Norn", 36708, "gmq-ins", "Latn", } m["nrp"] = { "tiếng Piceni Bắc", 430138, nil, "Ital", "Tiếng Piceni Bắc", "Piceni Bắc", translit = "Ital-translit", } m["nrr"] = { "Norra", 12952967, "tai", } m["nrt"] = { "Northern Kalapuya", 3192121, "nai-klp", } m["nru"] = { "tiếng Ma Thoa", 21658869, "sit-nas", "Latn", "Tiếng Ma Thoa", "Ma Thoa", } m["nrx"] = { "Ngurmbur", 2591251, } m["nrz"] = { "Lala (New Guinea)", 6480151, "poz-ocw", } m["nsa"] = { "Sangtam Naga", 7418144, "sit-aao", } m["nsb"] = { "Lower Nossob", 6693681, "khi-tuu", "Latn", } m["nsc"] = { "Nshi", 11129508, "nic-rnn", "Latn", } m["nsd"] = { "Southern Nisu", nil, "tbq-nis", } m["nse"] = { "Nsenga", 3081996, "bnt-sna", "Latn", } m["nsg"] = { "Ngasa", 56345, "sdv-lma", } m["nsh"] = { "Ngoshie", 7022582, "nic-mom", "Latn", } m["nsi"] = { "Nigerian Sign Language", 7033021, "sgn", } m["nsk"] = { "tiếng Naskapi", 1704302, "alg", "Cans", "Tiếng Naskapi", "Naskapi", ancestors = "cr", translit = "nsk-translit", } m["nsl"] = { "Norwegian Sign Language", 1781613, "sgn", } m["nsm"] = { "Sema", 3478238, "tbq-anp", } m["nsn"] = { "Nehan", 3337774, "poz-ocw", } m["nso"] = { "tiếng Sotho Bắc", 33890, "bnt-sts", "Latn", "Tiếng Sotho Bắc", "Sotho Bắc", } m["nsp"] = { "Nepalese Sign Language", 3915492, "sgn", } m["nsq"] = { "Northern Sierra Miwok", 3344226, "nai-utn", "Latn", } m["nsr"] = { "Maritime Sign Language", 3915483, "sgn", } m["nss"] = { "Nali", 3335385, "poz-aay", } m["nst"] = { "Tangsa", 56350, "sit-tno", "Latn, Tnsa", } m["nsu"] = { "Sierra Negra Nahuatl", nil, "azc-nah", "Latn", } m["nsv"] = { "Southwestern Nisu", nil, "tbq-nis", } m["nsw"] = { "Navut", 3337327, "poz-vnc", } m["nsx"] = { "Nsongo", 7067577, "bnt-tmb", "Latn", } m["nsy"] = { "Nasal", 6966574, } m["nsz"] = { "Nisenan", 33665, "nai-mdu", "Latn", } m["ntd"] = { "Northern Tidong", nil, "poz-san", } m["nte"] = { "Nathembo", 11030947, "bnt-mak", } m["ntg"] = { "Ngantangarra", 33060509, } m["nti"] = { "Natioro", 36140, "alv-wan", } m["ntj"] = { "Ngaanyatjarra", 3915409, "aus-pam", "Latn", } m["ntk"] = { "Ikoma", 5996114, "bnt-lok", "Latn", } m["ntm"] = { "tiếng Nateni", 3070731, "nic-grm", "Latn", "Tiếng Nateni", "Nateni", } m["nto"] = { "Ntomba", 11130292, "bnt-mon", "Latn", } m["ntp"] = { "tiếng Tepehuan Bắc", 15615651, "azc", "Latn", "Tiếng Tepehuan Bắc", "Tepehuan Bắc", sort_key = {remove_diacritics = c.acute}, } m["ntr"] = { "Delo", 35195, "nic-gne", "Latn", } m["nts"] = { "Natagaimas", 6967931, } m["ntu"] = { "Natügu", nil, "poz-oce", } m["ntw"] = { "Nottoway", 3344791, "iro-nor", } m["ntx"] = { "Somra", 7560536, "sit-tng", } m["nty"] = { "Mantsi", 56878, "sit-mnz", } m["nua"] = { "Yuaga", 3573088, "poz-cln", "Latn", } m["nuc"] = { "Nukuini", 3346231, } m["nud"] = { "Ngala", 7021893, "paa-spk", "Latn", } m["nue"] = { "Ngundu", 12952953, "bad-cnt", "Latn", } m["nuf"] = { "Nusu", 56413, "tbq-nus", } m["nug"] = { "Nungali", 7069826, "aus-mir", } m["nuh"] = { "Ndunda", 3913968, "nic-mmb", "Latn", } m["nui"] = { "Ngumbi", 36459, "bnt-yko", } m["nuj"] = { "Nyole (Uganda)", 3739448, "bnt-msl", "Latn", } m["nuk"] = { "tiếng Nuu-chah-nulth", 2992876, "wak", "Latn", "Tiếng Nuu-chah-nulth", "Nuu-chah-nulth", } m["nul"] = { "Nusa Laut", 7070332, "poz-cma", } m["num"] = { "Niuafo'ou", 36173, "poz-pol", "Latn", } m["nun"] = { "Anong", 2748232, "sit-nng", } m["nuo"] = { "tiếng Nguồn", 3915785, "mkh-vie", "Latn", "Tiếng Nguồn", "Nguồn", sort_key = "vi-sortkey", } m["nup"] = { "tiếng Nupe", 36720, "alv-ngb", "Latn", "Tiếng Nupe", "Nupe", entry_name = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.caron}, sort_key = "nup-sortkey", } m["nuq"] = { "Nukumanu", 12909019, "poz-pnp", } m["nur"] = { "Nuguria", 7068910, "poz-pnp", } m["nus"] = { "tiếng Nuer", 33675, "sdv-dnu", "Latn", "Tiếng Nuer", "Nuer", } m["nut"] = { "tiếng Nùng", 72695, "tai", "Latn, Hani", "Tiếng Nùng", "Nùng", sort_key = {Hani = "Hani-sortkey"}, } m["nuu"] = { "Ngbundu", 11126081, "bad", "Latn", } m["nuv"] = { "Northern Nuni", 11016572, "nic-gnn", "Latn", } m["nuw"] = { "Nguluwan", 6528643, } m["nux"] = { "Mehek", 6809452, "paa-spk", "Latn", } m["nuy"] = { "Nunggubuyu", 1747811, "aus-arn", } m["nuz"] = { "Tlamacazapa Nahuatl", 2073277, "azc-nah", "Latn", } m["nvh"] = { "Nasarian", 6966614, "poz-vnc", } m["nvm"] = { "Namiae", 12952922, } m["nvo"] = { "Nyokon", nil, "nic-mbw", "Latn", } m["nwa"] = { "Nawathinehena", 6982892, "alg-ara", "Latn", } m["nwb"] = { "Nyabwa", 33664, "kro-wee", } m["nwc"] = { "Classical Newar", 5128301, "sit-new", } m["nwe"] = { "Ngwe", 36181, "bai", "Latn", } m["nwi"] = { "Southwest Tanna", 3504488, } m["nwm"] = { "Nyamusa-Molo", 12747951, "csu-bbk", } m["nwo"] = { "Nauo", 6981305, "aus-pam", "Latn", } m["nwr"] = { "Nawaru", 12638166, "ngf", } m["nwx"] = { "Middle Newar", nil, "sit-new", "Deva, Newa, Ranj", ancestors = "nwc", } m["nwy"] = { "Nottoway-Meherrin", nil, "iro-nor", } m["nxa"] = { "Nauete", 6981095, "poz-tim", } m["nxd"] = { "Ngando (Congo)", 3913277, "bnt-ske", } m["nxe"] = { "Nage", 2295569, "poz-cet", } m["nxg"] = { "tiếng Ngadha", 1516651, "poz-cet", "Latn", "Tiếng Ngadha", "Ngadha", } m["nxi"] = { "Nindi", 7038230, "bnt-mbi", "Latn", } m["nxl"] = { "South Nuaulu", 18544857, "poz-cma", } m["nxm"] = { "tiếng Numidia", 35761, "afa", "Tfng, Latn", --Tfng may not support all the needed characters "Tiếng Numidia", "Numidia", translit = {Tfng = "Tfng-translit"}, } m["nxn"] = { "Ngawun", 3915711, "aus-pam", "Latn", } m["nxo"] = { "Ndambomo", 6983681, "bnt-kel", "Latn", } m["nxq"] = { "tiếng Nạp Tây", 2478711, "sit-nas", "Nkdb, Nkgb, Latn, Lisu", "Tiếng Nạp Tây", "Nạp Tây", translit = {Lisu = "Lisu-translit"}, sort_key = {Lisu = s["Lisu-sortkey"]}, } m["nxr"] = { "Ninggerum", 11732526, "ngf-okk", "Latn", } m["nxu"] = { "Narau", 6965452, "ngf", "Latn", } m["nxx"] = { "Nafri", 6958211, "paa-sen", "Latn", } m["nyb"] = { "Nyangbo", 36256, "alv-ktg", "Latn", } m["nyc"] = { "Nyanga-li", 7070876, "bnt-boa", "Latn", } m["nyd"] = { "Nyole (Kenya)", 7071227, "bnt-msl", "Latn", } m["nye"] = { "Nyengo", 7071068, "bnt-clu", "Latn", } m["nyf"] = { "tiếng Giryama", 3107606, "bnt-mij", "Latn", "Tiếng Giryama", "Giryama", } m["nyg"] = { "Nyindu", 11030685, "bnt-shh", "Latn", } m["nyh"] = { "Nyigina", 3913780, "aus-nyu", "Latn", } m["nyi"] = { "Nyimang", 34846, "sdv-nyi", "Latn", } m["nyj"] = { "Nyanga (Congo)", 7070879, "bnt-nyb", "Latn", } m["nyk"] = { "Nyaneka", 10962298, "bnt-swb", "Latn", } m["nyl"] = { "tiếng Nyeu", 3033578, "mkh-kat", "Thai, Khmr, Laoo", "Tiếng Nyeu", "Nyeu", } m["nym"] = { "Nyamwezi", 4121131, "bnt-tkm", "Latn", } m["nyn"] = { "Nyankole", 13207, "bnt-nyg", "Latn", } m["nyo"] = { "tiếng Nyoro", 33794, "bnt-nyg", "Latn", "Tiếng Nyoro", "Nyoro", } m["nyp"] = { "Nyang'i", 7070894, "ssa-klk", } m["nys"] = { "tiếng Nyunga", 7049771, "aus-pam", "Latn", "Tiếng Nyunga", "Nyunga", } m["nyt"] = { "Nyawaygi", 3915783, "aus-dyb", } m["nyu"] = { "Nyungwe", 7071318, "bnt-sna", "Latn", } m["nyv"] = { "Nyulnyul", 3442732, "aus-nyu", "Latn", } m["nyw"] = { "tiếng Nyaw", 26425602, "tai", "Thai, Latn, Tayo", -- Vietnamese alphabet "Tiếng Nyaw", "Nyaw", sort_key = "Thai-sortkey", -- no effect on Latn } m["nyx"] = { "Nganyaywana", 3913800, "aus-cww", "Latn", } m["nyy"] = { "Nyakyusa", 3272620, "bnt-run", "Latn", } m["nza"] = { "tiếng Mbembe Tigon", 36518, "nic-jkn", "Latn", "Tiếng Mbembe Tigon", "Mbembe Tigon", } m["nzb"] = { "Njebi", 35923, "bnt-nze", "Latn", } m["nzd"] = { "tiếng Nzadi", 17152586, "bnt-bdz", "Latn", "Tiếng Nzadi", "Nzadi", entry_name = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.caron}, } m["nzi"] = { "Nzima", 36337, "alv-ctn", } m["nzk"] = { "tiếng Nzakara", 3913339, "znd", "Latn", } m["nzm"] = { "Zeme Naga", 21491053, "sit-zem", } m["nzs"] = { "New Zealand Sign Language", 36239, "sgn", } m["nzu"] = { "Central Teke", 36473, "bnt-tkc", } m["nzy"] = { "Nzakambay", 36374, "alv-mbm", "Latn", } m["nzz"] = { "Nanga Dama Dogon", 6963443, "nic-nwa", } return require("Module:languages").finalizeData(m, "language") qveidhq5m9brirgf0g1ak0gvqhuc1hd Mô đun:families/data 828 261975 2571716 2571231 2026-10-18T15:35:09Z Hiyuune 50834 2571716 Scribunto text/plain --[=[ This module contains definitions for all language family codes on Wiktionary. ]=]-- local m = {} m["aav"] = { "ngữ hệ Nam Á", 33199, "Ngữ hệ Nam Á", "Nam Á", aliases = {"Nam Á"}, } m["aav-khs"] = { "nhóm ngôn ngữ Khasi", 3073734, "aav", "Nhóm ngôn ngữ Khasi", "Khasi", aliases = {"Khasi"}, } m["aav-nic"] = { "nhóm ngôn ngữ Nicobar", 217380, "aav", "Nhóm ngôn ngữ Nicobar", "Nicobar", } m["aav-pkl"] = { "nhóm ngôn ngữ Pnar-Khasi-Lyngngam", nil, "aav-khs", "Nhóm ngôn ngữ Pnar-Khasi-Lyngngam", "Pnar-Khasi-Lyngngam", } m["afa"] = { "ngữ hệ Phi-Á", 25268, aliases = {"Phi Á"}, "Ngữ hệ Phi-Á", "Phi-Á", } m["alg"] = { "nhóm ngôn ngữ Algonquin", 33392, "aql", "Nhóm ngôn ngữ Algonquin", "Algonquin", } m["alg-abp"] = { "nhóm ngôn ngữ Abenaki-Penobscot", 197936, "alg-eas", "Nhóm ngôn ngữ Abenaki-Penobscot", "Abenaki-Penobscot", } m["alg-ara"] = { "nhóm ngôn ngữ Arapahoe", 2153686, "alg", "Nhóm ngôn ngữ Arapahoe", "Arapahoe", } m["alg-eas"] = { "nhóm ngôn ngữ Đông Algonquin", 2257525, "alg", "Nhóm ngôn ngữ Đông Algonquin", "Đông Algonquin", } m["alg-sfk"] = { "nhóm ngôn ngữ Sac-Fox-Kickapoo", 1440172, "alg", "Nhóm ngôn ngữ Sac-Fox-Kickapoo", "Sac-Fox-Kickapoo", } m["alv"] = { "nhóm ngôn ngữ Đại Tây Dương-Congo", 771124, "nic", "Nhóm ngôn ngữ Đại Tây Dương-Congo", "Đại Tây Dương-Congo", } m["alv-aah"] = { "Ayere-Ahan", 750953, "alv-von", } m["alv-ada"] = { "Adamawa", 32906, "alv-sav", } m["alv-bag"] = { "Baga", 2746083, "alv-mel", } m["alv-bak"] = { "Bak", 1708174, "alv-sng", } m["alv-bam"] = { "Bambukic", 4853456, "alv-ada", aliases = {"Yungur-Jen"}, } m["alv-bny"] = { "Banyum", 2892477, "alv-nyn", } m["alv-bua"] = { "Bua", 4982094, "alv-mbd", } m["alv-bwj"] = { "Bikwin-Jen", 84542501, "alv-bam", } m["alv-cng"] = { "Cangin", 1033184, "alv-fwo", } m["alv-ctn"] = { "Central Tano", 1658486, "alv-ptn", aliases = {"Akan"}, } m["alv-dlt"] = { "Delta Edoid", nil, "alv-edo", } m["alv-dur"] = { "Duru", 5316788, "alv-lni", } m["alv-ede"] = { "Ede", 35368, "alv-yor", } m["alv-edk"] = { "Edekiri", 5336735, "alv-yrd", } m["alv-edo"] = { "nhóm ngôn ngữ Edoid", 1287469, "alv-von", "Nhóm ngôn ngữ Edoid", "Edoid", } m["alv-eeo"] = { "Edo-Esan-Ora", 12630439, "alv-nce", } m["alv-fli"] = { "Fali", 3450166, "alv", } m["alv-fwo"] = { "Fula-Wolof", 12631267, "alv-sng", } m["alv-gba"] = { "Gbaya", 3099986, "alv-sav", protoLanguage = "gba", } m["alv-gbe"] = { "nhóm ngôn ngữ Gbe", 668284, "alv-von", "Nhóm ngôn ngữ Gbe", "Gbe", } m["alv-gbf"] = { "Eastern Gbaya", nil, "alv-gba", } m["alv-gbs"] = { "Southern Gbaya", nil, "alv-gba", } m["alv-gbw"] = { "Western Gbaya", nil, "alv-gba", } m["alv-gda"] = { "Ga-Dangme", 3443338, "alv-kwa", } m["alv-gng"] = { "Guang", 684009, "alv-ptn", } m["alv-gtm"] = { "Ghana-Togo Mountain", 493020, "alv-kwa", aliases = {"Togo Remnant", "Central Togo"}, } m["alv-hei"] = { "nhóm ngôn ngữ Heiban", 108752116, "alv-the", "Nhóm ngôn ngữ Heiban", "Heiban", } m["alv-ido"] = { "Idomoid", 974196, "alv-von", } m["alv-igb"] = { "Igboid", 1429100, "alv-von", } m["alv-jfe"] = { "Jola-Felupe", 1708174, "alv-jol", aliases = {"Ejamat"}, } m["alv-jol"] = { "Jola", 35176, "alv-bak", aliases = {"Diola"}, } m["alv-kim"] = { "Kim", 6409701, "alv-mbd", } m["alv-kis"] = { "Kissi", 35696, "alv-mel", } m["alv-krb"] = { "Karaboro", 4213541, "alv-snf", } m["alv-ktg"] = { "Ka-Togo", 5972796, "alv-gtm", } m["alv-kul"] = { "Kulango", 16977424, "alv-sav", aliases = {"Kulango-Lorhon", "Kulango-Lorom"}, } m["alv-kwa"] = { "nhóm ngôn ngữ Kwa", 33430, "nic-vco", "Nhóm ngôn ngữ Kwa", "Kwa", } m["alv-lag"] = { "nhóm ngôn ngữ Lagoon", 111210042, "alv-kwa", "Nhóm ngôn ngữ Lagoon", "Lagoon", } m["alv-lek"] = { "Leko", 6520642, otherNames = {"Sambaic"}, -- appears to be an alias in Glottolog "alv-lni", } m["alv-lim"] = { "Limba", 35825, "alv", } m["alv-lni"] = { "Leko-Nimbari", 1708170, "alv-ada", otherNames = {"Central Adamawa"}, aliases = {"Chamba-Mumuye"}, } m["alv-mbd"] = { "Mbum-Day", 6799816, "alv-ada", } m["alv-mbm"] = { "Mbum", 6799814, "alv-mbd", } m["alv-mel"] = { "Mel", 12122355, "alv", } m["alv-mum"] = { "Mumuye", 84607009, "alv-mye", } m["alv-mye"] = { "Mumuye-Yendang", 6935539, "alv-lni", } m["alv-nal"] = { "Nalu", nil, "alv-sng", } m["alv-nce"] = { "nhóm ngôn ngữ Bắc-Trung Edoid", 16110869, "alv-edo", "Nhóm ngôn ngữ Bắc-Trung Edoid", "Bắc-Trung Edoid", } m["alv-ngb"] = { "Nupe-Gbagyi", 12638649, "alv-nup", aliases = {"Nupe-Gbari"}, } m["alv-ntg"] = { "Na-Togo", nil, "alv-gtm", } m["alv-nup"] = { "Nupoid", 1429143, "alv-von", } m["alv-nwd"] = { "nhóm ngôn ngữ Tây Bắc Edoid", 16111012, "alv-edo", "Nhóm ngôn ngữ Tây Bắc Edoid", "Tây Bắc Edoid", } m["alv-nyn"] = { "Nyun", nil, "alv-fwo", } m["alv-pap"] = { "Papel", 7132562, "alv-bak", } m["alv-pph"] = { "Phla-Pherá", 3849625, "alv-gbe", aliases = {"Phla–Pherá"}, } m["alv-ptn"] = { "Potou-Tano", 1475003, "alv-kwa", } m["alv-sav"] = { "nhóm ngôn ngữ Savanna", 4403672, "nic-vco", "Nhóm ngôn ngữ Savanna}", "Savanna", aliases = {"Savannas"}, } m["alv-sma"] = { "Suppire-Mamara", 4446348, "alv-snf", } m["alv-snf"] = { "nhóm ngôn ngữ Senufo", 33795, "alv", "Nhóm ngôn ngữ Senufo", "Senufo", aliases = {"Senufic", "Senoufo"}, } m["alv-sng"] = { "nhóm ngôn ngữ Senegambia", 1708753, "alv", "Nhóm ngôn ngữ Senegambia", "Senegambia", } m["alv-snr"] = { "Senari", 4416084, "alv-snf", } m["alv-swd"] = { "Southwestern Edoid", 12633903, "alv-edo", } m["alv-tal"] = { "Talodi", 12643302, "alv-the", } m["alv-tdj"] = { "Tagwana-Djimini", 7675362, "alv-snf", } m["alv-ten"] = { "Tenda", 3217535, "alv-fwo", } m["alv-the"] = { "nhóm ngôn ngữ Talodi-Heiban", 1521145, "alv", "Nhóm ngôn ngữ Talodi-Heiban", "Talodi-Heiban", } m["alv-von"] = { "nhóm ngôn ngữ Volta-Niger", 34177, "nic-vco", "Nhóm ngôn ngữ Volta-Niger", "Volta-Niger", } m["alv-wan"] = { "Wara-Natyoro", 7968830, "alv-sav", } m["alv-wjk"] = { "Waja-Kam", nil, "alv-ada", } m["alv-yek"] = { "nhóm ngôn ngữ Yekhee", nil, "alv-nce", "Nhóm ngôn ngữ Yekhee", "Yekhee", } m["alv-yor"] = { "Yoruba", nil, "alv-edk", } m["alv-yrd"] = { "Yoruboid", 1789745, "alv-von", } m["alv-yun"] = { "Yungur", 84601642, "alv-bam", aliases = {"Bena-Mboi"}, } m["apa"] = { "Apachean", 27758, "ath", aliases = {"Southern Athabaskan"}, } m["aqa"] = { "Alacalufan", 1288430, } m["aql"] = { "ngữ hệ Algic", 721612, "Ngữ hệ Algic", "Algic", aliases = {"Algonquin-Ritwan", "Algonquin-Wiyot-Yurok"}, } m["art"] = { "ngôn ngữ nhân tạo", 33215, "qfa-not", "Ngôn ngữ nhân tạo", "nhân tạo", aliases = {"artificial", "planned"}, } m["ath"] = { "Athabaskan", 27475, "xnd", } m["ath-nor"] = { "North Athabaskan", 20738, "ath", aliases = {"Northern Athabaskan"}, } m["ath-pco"] = { "Pacific Coast Athabaskan", 20654, "ath", } m["auf"] = { "Arauan", 626772, aliases = {"Arahuan", "Arauán", "Arawa", "Arawan", "Arawán"}, } --[=[ Exceptional language and family codes for Australian Aboriginal languages can use the prefix "aus-", though "aus" is no longer itself a family code. ]=]-- m["aus-arn"] = { "Arnhem", 2581700, aliases = {"Gunwinyguan", "Macro-Gunwinyguan"}, } m["aus-bub"] = { "Bunuban", 2495148, aliases = {"Bunaban"}, } m["aus-cww"] = { "nhóm ngôn ngữ Trung New South Wales", 5061507, "aus-pam", "Nhóm ngôn ngữ Trung New South Wales", "Trung New South Wales", } m["aus-dal"] = { "Daly", 2478079, } m["aus-dyb"] = { "Dyirbalic", 1850666, "aus-pam", } m["aus-gar"] = { "Garawan", 5521951, } m["aus-gun"] = { "Gunwinyguan", 2581700, "aus-arn", aliases = {"Gunwingguan"}, } m["aus-jar"] = { "Jarrakan", 2039423, } m["aus-kar"] = { "Karnic", 4215578, "aus-pam", } m["aus-mir"] = { "Mirndi", 4294095, } m["aus-nga"] = { "Ngayarda", 16153490, "aus-psw", } m["aus-nyu"] = { "Nyulnyulan", 2039408, } m["aus-pam"] = { "ngữ hệ Pama–Nyungar", 33942, "Ngữ hệ Pama–Nyungar", "Pama–Nyungar", } m["aus-pmn"] = { "nhóm ngôn ngữ Paman", 2640654, "aus-pam", "Nhóm ngôn ngữ Paman", "Paman", } m["aus-psw"] = { "nhóm ngôn ngữ Tây Nam Pama–Nyungar", 2258160, "aus-pam", "Nhóm ngôn ngữ Tây Nam Pama–Nyungar", "Tây Nam Pama–Nyungar", } m["aus-rnd"] = { "Arandic", 4784071, "aus-pam", } m["aus-tnk"] = { "Tangkic", 1823065, } m["aus-wdj"] = { "ngữ hệ Iwaidja", 4196968, "Ngữ hệ Iwaidja", "Iwaidja", aliases = {"Yiwaidjan"}, } m["aus-wor"] = { "Worrorran", 2038619, } m["aus-yid"] = { "Yidinyic", 4205849, "aus-pam", } m["aus-yng"] = { "Yangmanic", 42727644, } m["aus-yol"] = { "Yolngu", 2511254, "aus-pam", aliases = {"Yolŋu", "Yolngu Matha"}, } m["aus-yuk"] = { "Yuin-Kuric", 3833021, "aus-pam", } m["awd"] = { "ngữ hệ Arawak", 626753, "Ngữ hệ Arawak", "Arawak", aliases = {"Maipure", "Maipuran"}, } m["awd-nwk"] = { "nhóm ngôn ngữ Nawiki", nil, "awd", "Nhóm ngôn ngữ Nawiki", "Nawiki", aliases = {"Newiki"}, } m["awd-taa"] = { "Ta-Arawakan", 7672731, "awd", aliases = {"Ta-Arawak", "Ta-Maipurean"}, } m["azc"] = { "ngữ hệ Ute-Aztec", 34073, "Ngữ hệ Ute-Aztec", "Ute-Aztec", aliases = {"Uto-Aztekan"}, } m["azc-cup"] = { "Cupan", 19866871, "azc-tak", } m["azc-dur"] = { "nhóm ngôn ngữ Nahua Durango", 2386361, "azc-nah", "Nhóm ngôn ngữ Nahua Durango", "Nahua Durango", aliases = {"Mexicanero"} } m["azc-hua"] = { "nhóm ngôn ngữ Nahua Huasteca", 3832950, "azc-nah", "Nhóm ngôn ngữ Nahua Huasteca", "Nahua Huasteca" } m["azc-nah"] = { "nhóm ngôn ngữ Nahua", 11965602, "azc", "Nhóm ngôn ngữ Nahua", "Nahua", aliases = {"Aztec"}, } m["azc-num"] = { "nhóm ngôn ngữ Numic", 2657541, "azc", "Nhóm ngôn ngữ Numic", "Numic", } m["azc-pim"] = { "nhóm ngôn ngữ Piman", 7194600, "azc", "Nhóm ngôn ngữ Piman", "Piman", aliases = {"Tepiman"}, } m["azc-tak"] = { "Takic", 1280305, "azc", } m["azc-trc"] = { "Taracahitic", 4245032, "azc", aliases = {"Taracahitan"}, } m["bad"] = { "Banda", 806234, "nic-ubg", } m["bad-cnt"] = { "Central Banda", 3438391, "bad", } m["bai"] = { "Bamileke", 806005, "nic-gre", } m["bat"] = { "nhóm ngôn ngữ gốc Balt", 33136, "ine-bsl", "Nhóm ngôn ngữ gốc Balt", "gốc Balt", } m["bat-eas"] = { "nhóm ngôn ngữ Đông Balt", 149944, "bat", "Nhóm ngôn ngữ Đông Balt", "Đông Balt", } m["bat-wes"] = { "West Baltic", 149946, "bat", } m["ber"] = { "nhóm ngôn ngữ Berber", 25448, "afa", "Nhóm ngôn ngữ Berber", "Berber", aliases = {"Tamazight"}, } m["bnt"] = { "nhóm ngôn ngữ Bantu", 33146, "nic-bds", "Nhóm ngôn ngữ Bantu", "Bantu", } m["bnt-baf"] = { "Bafia", 799784, "bnt", } m["bnt-bbo"] = { "Bafo-Bonkeng", nil, "bnt-saw", } m["bnt-bdz"] = { "Boma-Dzing", 1729203, "bnt", } m["bnt-bek"] = { "Bekwilic", nil, "bnt-ndb", } m["bnt-bki"] = { "Bena-Kinga", 16113307, "bnt-bne", } m["bnt-bmo"] = { "Bangi-Moi", nil, "bnt-bnm", } m["bnt-bne"] = { "Northeast Bantu", 7057832, "bnt", } m["bnt-bnm"] = { "Bangi-Ntomba", 806477, "bnt-bte", } m["bnt-boa"] = { "Boan", 4931250, "bnt", aliases = {"Buan", "Ababuan"}, } m["bnt-bot"] = { "Botatwe", 4948532, "bnt", } m["bnt-bsa"] = { "nhóm ngôn ngữ Basaa", 809739, "bnt", "Nhóm ngôn ngữ Basaa", "Basaa", } m["bnt-bsh"] = { "Bushoong", 5001551, "bnt-bte", } m["bnt-bso"] = { "Southern Bantu", 980498, "bnt", } m["bnt-bta"] = { "Bati-Angba", 4869303, "bnt-boa", otherNames = {"Late Bomokandian"}, aliases = {"Bwa"}, } m["bnt-btb"] = { "Beti", 35118, "bnt", } m["bnt-bte"] = { "Bangi-Tetela", 4855181, "bnt", } m["bnt-bun"] = { "Buja-Ngombe", 4986733, "bnt-mbb", } m["bnt-chg"] = { "Chaga", 33016, "bnt-cht", } m["bnt-cht"] = { "Chaga-Taita", nil, "bnt-bne", } m["bnt-clu"] = { "Chokwe-Luchazi", 3339273, "bnt", } m["bnt-com"] = { "Comorian", 33077, "bnt-sab", } m["bnt-glb"] = { "Great Lakes Bantu", 5599420, "bnt-bne", } m["bnt-haj"] = { "Haya-Jita", 25502360, "bnt-glb", } m["bnt-kak"] = { "Kako", nil, "bnt-pob", } m["bnt-kav"] = { "Kavango", 116544179, "bnt-ksb", } m["bnt-kbi"] = { "Komo-Bira", 6428591, "bnt-boa", } m["bnt-kel"] = { "Kele", 1738162, "bnt-kts", aliases = {"Sheke"}, } m["bnt-kil"] = { "Kilombero", 6408121, "bnt", } m["bnt-kka"] = { "Kikuyu-Kamba", 18419596, "bnt-bne", aliases = {"Thagiicu"}, } m["bnt-kmb"] = { "Kimbundu", 16947687, "bnt", } m["bnt-kng"] = { "Kongo", 6429214, "bnt", } m["bnt-kpw"] = { "Kpwe", 36428, "bnt-saw", } m["bnt-ksb"] = { "Kavango-Southwest Bantu", 6379098, "bnt", } m["bnt-kts"] = { "Kele-Tsogo", 6385577, "bnt", } m["bnt-lbn"] = { "Luban", 4536504, "bnt", } m["bnt-leb"] = { "Lebonya", 6511395, "bnt", } m["bnt-lgb"] = { "Lega-Binja", 6517694, "bnt", } m["bnt-lok"] = { "Logooli-Kuria", nil, "bnt-glb", } m["bnt-lub"] = { "Luba", nil, "bnt-lbn", } m["bnt-lun"] = { "Lunda", 6704091, "bnt", } m["bnt-mak"] = { "Makua", 6740431, "bnt-bso", aliases = {"Makhuwa"}, } m["bnt-mbb"] = { "Mboshi-Buja", 6799764, "bnt", } m["bnt-mbe"] = { "Mbole-Enya", 6799728, "bnt", } m["bnt-mbi"] = { "Mbinga", nil, "bnt-rur", } m["bnt-mbo"] = { "Mboshi", 6799763, "bnt-mbb", } m["bnt-mbt"] = { "Mbete", 1346910, "bnt-tmb", aliases = {"Mbere"}, } m["bnt-mby"] = { "Mbeya", nil, "bnt-ruk", } m["bnt-mij"] = { "Mijikenda", 6845474, "bnt-sab", } m["bnt-mka"] = { "Makaa", nil, "bnt-ndb", } m["bnt-mne"] = { "Manenguba", 31147471, "bnt", aliases = {"Mbo", "Ngoe"}, } m["bnt-mnj"] = { "Makaa-Njem", 1603899, "bnt-pob", } m["bnt-mon"] = { "Mongo", nil, "bnt-bnm", } m["bnt-mra"] = { "Mbugwe-Rangi", 6799795, "bnt", } m["bnt-msl"] = { "Masaba-Luhya", 12636428, "bnt-glb", } m["bnt-mwi"] = { "Mwika", nil, "bnt-ruk", } m["bnt-ncb"] = { "Northeast Coast Bantu", 7057848, "bnt-bne", } m["bnt-ndb"] = { "Ndzem-Bomwali", nil, "bnt-mnj", } m["bnt-ngn"] = { "Ngondi-Ngiri", 7022532, "bnt-mbb", } m["bnt-ngu"] = { "Nguni", 961559, "bnt-bso", aliases = {"Ngoni"}, } m["bnt-nya"] = { "Nyali", 7070832, "bnt-leb", } m["bnt-nyb"] = { "Nyanga-Buyi", 7070882, "bnt", } m["bnt-nyg"] = { "Nyoro-Ganda", 12638666, "bnt-glb", } m["bnt-nys"] = { "nhóm ngôn ngữ Nyasa", 7070921, "bnt", "Nhóm ngôn ngữ Nyasa", "Nyasa", } m["bnt-nze"] = { "Nzebi", 1755498, "bnt-tmb", aliases = {"Njebi"}, } m["bnt-ova"] = { "Ovambo", 36489, "bnt-swb", aliases = {"Oshivambo", "Oshiwambo", "Owambo"}, } m["bnt-par"] = { "Pare", nil, "bnt-ncb", } m["bnt-pen"] = { "Pende", 7162373, "bnt", } m["bnt-pob"] = { "Pomo-Bomwali", nil, "bnt", } m["bnt-ruk"] = { "Rukwa", 7378902, "bnt", } m["bnt-run"] = { "Rungwe", nil, "bnt-ruk", } m["bnt-rur"] = { "Rufiji-Ruvuma", 7377947, "bnt", } m["bnt-ruv"] = { "Ruvu", nil, "bnt-ncb", } m["bnt-rvm"] = { "Ruvuma", nil, "bnt-rur", } m["bnt-sab"] = { "Sabaki", 2209395, "bnt-ncb", } m["bnt-saw"] = { "Sawabantu", 532003, "bnt", } m["bnt-sbi"] = { "Sabi", 7396071, "bnt", } m["bnt-seu"] = { "Seuta", nil, "bnt-ncb", } m["bnt-shh"] = { "Shi-Havu", nil, "bnt-glb", } m["bnt-sho"] = { "Shona", 2904660, "bnt", } m["bnt-sir"] = { "nhóm ngôn ngữ Sira", 1436372, "bnt", "Nhóm ngôn ngữ Sira", "Sira", aliases = {"Shira-Punu"}, } m["bnt-ske"] = { "Soko-Kele", nil, "bnt-bte", } m["bnt-sna"] = { "Sena", nil, "bnt-nys", } m["bnt-sts"] = { "Sotho-Tswana", 2038386, "bnt-bso", } m["bnt-swb"] = { "Southwest Bantu", 116543539, "bnt-ksb", } m["bnt-swh"] = { "Swahili", nil, "bnt-sab", } m["bnt-tek"] = { "Teke", 36528, "bnt-tmb", } m["bnt-tet"] = { "Tetela", 7706059, "bnt-bte", } m["bnt-tkc"] = { "Central Teke", 36473, "bnt-tek", } m["bnt-tkm"] = { "Takama", nil, "bnt-bne", } m["bnt-tmb"] = { "Teke-Mbede", 7695332, "bnt", aliases = {"Teke-Mbere"}, } m["bnt-tso"] = { "Tsogo", 2458420, otherNames = {"Okani"}, --appears to be an alias in Glottolog "bnt-kts", } m["bnt-tsr"] = { "Tswa-Ronga", 12643962, "bnt-bso", } m["bnt-yak"] = { "Yaka", 8047027, "bnt", } m["bnt-yko"] = { "Yasa-Kombe", nil, "bnt-saw", } m["bnt-zbi"] = { "Zamba-Binza", nil, "bnt-bnm", } m["btk"] = { "Batak", 1998595, "poz-nws", } --[=[ Exceptional language and family codes for Central American Indian languages may use the prefix "cai-", though "cai" is no longer itself a family code. ]=]-- --[=[ Exceptional language and family codes for Caucasian languages can use the prefix "cau-", though "cau" is no longer itself a family code. ]=]-- m["cau-abz"] = { "nhóm ngôn ngữ Abkhaz-Abaza", 4663617, "cau-nwc", "Nhóm ngôn ngữ Abkhaz-Abaza", "Abkhaz-Abaza", otherNames = {"Abkhaz-Tapanta"}, aliases = {"Abazgi"}, } m["cau-and"] = { "nhóm ngôn ngữ Andic", 492152, "cau-ava", "Nhóm ngôn ngữ Andic", "Andic", aliases = {"Andian"}, } m["cau-ava"] = { "nhóm ngôn ngữ Avar-Andic", 4827766, "cau-nec", "Nhóm ngôn ngữ Avar-Andic", "Avar-Andic", aliases = {"Avar-Andian", "Avar-Andi", "Avaro-Andian"}, } m["cau-cir"] = { "Circassian", 858543, "cau-nwc", aliases = {"Cherkess"}, } m["cau-drg"] = { "nhóm ngôn ngữ Dargwa", 5222637, "cau-nec", "Nhóm ngôn ngữ Dargwa", "Dargwa", otherNames = {"Dargin"}, } m["cau-esm"] = { "Eastern Samur", nil, "cau-sam", } m["cau-ets"] = { "East Tsezian", 121437666, "cau-tsz", aliases = {"East Tsezic", "East Didoic"}, } m["cau-lzg"] = { "Lezghian", 2144370, "cau-nec", aliases = {"Lezgi", "Lezgian", "Lezgic"}, } m["cau-nkh"] = { "nhóm ngôn ngữ Nakh", 24441, "cau-nec", "Nhóm ngôn ngữ Nakh", "Nakh", aliases = {"Bắc-Trung Kavkaz"}, } m["cau-nec"] = { "ngữ hệ Đông Bắc Kavkaz", 27387, "Ngữ hệ Đông Bắc Kavkaz", "Đông Bắc Kavkaz", aliases = {"Dagestania", "Nakho-Dagestania", "Caspi"}, } m["cau-nwc"] = { "ngữ hệ Tây Bắc Kavkaz", 33852, "Ngữ hệ Tây Bắc Kavkaz", "Tây Bắc Kavkaz", aliases = {"Abkhazo-Adyghean", "Abkhaz-Adyghe", "Pontic"}, } m["cau-sam"] = { "Samur", 15229151, "cau-lzg", } m["cau-ssm"] = { "Southern Samur", nil, "cau-sam", } m["cau-tsz"] = { "Tsezian", 1651530, "cau-nec", aliases = {"Tsezic", "Didoic"}, } m["cau-vay"] = { "Vainakh", 4102486, "cau-nkh", aliases = {"Veinakh", "Vaynakh"}, } m["cau-wsm"] = { "Western Samur", nil, "cau-sam", } m["cau-wts"] = { "West Tsezian", 121437697, "cau-tsz", aliases = {"West Tsezic", "West Didoic"}, } m["cba"] = { "Chibchan", 520478, "qfa-mch", -- or none if Macro-Chibchan is considered undemonstrated } m["ccs"] = { "ngữ hệ Kartvelia", 34030, "Ngữ hệ Kartvelia", "Kartvelia", aliases = {"Ngoại Kavkaz"}, } m["ccs-gzn"] = { "nhóm ngôn ngữ Gruzia-Zan", 34030, "ccs", "Nhóm ngôn ngữ Gruzia-Zan", "Gruzia-Zan", aliases = {"Karto-Zan"}, } m["ccs-zan"] = { "Zan", 2606912, "ccs-gzn", aliases = {"Zanuri", "Colchian"}, } m["cdc"] = { "nhóm ngôn ngữ Tchad", 33184, "afa", "Nhóm ngôn ngữ Tchad", "Tchad", } m["cdc-cbm"] = { "nhóm ngôn ngữ Trung Tchad", 2251547, "cdc", "Nhóm ngôn ngữ Trung Tchad", "Trung Tchad", aliases = {"Biu-Mandara"}, } m["cdc-est"] = { "nhóm ngôn ngữ Đông Tchad", 2276221, "cdc", "Nhóm ngôn ngữ Đông Tchad", "Đông Tchad", } m["cdc-mas"] = { "nhóm ngôn ngữ Masa", 2136092, "cdc", "Nhóm ngôn ngữ Masa", "Masa", } m["cdc-wst"] = { "nhóm ngôn ngữ Tây Tchad", 2447774, "cdc", "Nhóm ngôn ngữ Tây Tchad", "Tây Tchad", } m["cdd"] = { "Caddoan", 1025090, } m["cel"] = { "nhóm ngôn ngữ Celt", 25293, "ine", "Nhóm ngôn ngữ Celt", "Celt", } m["cel-bry"] = { "nhóm ngôn ngữ Britton", 156877, "cel-ins", "Nhóm ngôn ngữ Britton", "Britton", aliases = {"Brittonic"}, } m["cel-brs"] = { "nhóm ngôn ngữ Tây Nam Britton", 2612853, "cel-bry", "Nhóm ngôn ngữ Tây Nam Britton", "Tây Nam Britton", aliases = {"Southwestern Brittonic"}, } m["cel-brw"] = { "nhóm ngôn ngữ Tây Britton", 593069, "cel-bry", "Nhóm ngôn ngữ Tây Britton", "Tây Britton", aliases = {"Western Brittonic"}, } m["cel-con"] = { "Continental Celtic", 215566, "cel", } m["cel-gae"] = { "nhóm ngôn ngữ Goidel", 56433, "cel-ins", "Nhóm ngôn ngữ Goidel", "Goidel", aliases = {"Gaelic"}, protoLanguage = "pgl", } m["cel-his"] = { "Hispano-Celtic", 4204136, "cel-con", } m["cel-ins"] = { "nhóm ngôn ngữ Celt hải đảo", 214506, "cel", "Nhóm ngôn ngữ Celt hải đảo", "Celt hải đảo", } m["chi"] = { "Chimakuan", 1073088, } m["chm"] = { "nhóm ngôn ngữ Mari", 973685, "urj", "Nhóm ngôn ngữ Mari", "Mari", } m["cmc"] = { "nhóm ngôn ngữ Chăm", 2997506, "poz-mcm", "Nhóm ngôn ngữ Chăm", "Chăm", } m["crp"] = { "creole or pidgin", nil, "qfa-not", } m["csu"] = { "nhóm ngôn ngữ Trung Sudan", 190822, "ssa", "Nhóm ngôn ngữ Trung Sudan", "Trung Sudan", } m["csu-bba"] = { "Bongo-Bagirmi", 3505042, "csu", } m["csu-bbk"] = { "Bongo-Baka", 4941917, "csu-bba", } m["csu-bgr"] = { "Bagirmi", 4841948, "csu-bba", aliases = {"Bagirmic"}, } m["csu-bkr"] = { "Birri-Kresh", nil, "csu", } m["csu-ecs"] = { "Eastern Central Sudanic", 16911698, "csu", aliases = {"East Central Sudanic", "Central Sudanic East", "Lendu-Mangbetu"}, } m["csu-kab"] = { "Kaba", 6343715, "csu-bba", } m["csu-lnd"] = { "Lendu", 6522357, "csu-ecs", aliases = {"Lenduic"}, } m["csu-maa"] = { "Mangbetu", 6748874, "csu-ecs", aliases = {"Mangbetu-Asoa", "Mangbetu-Asua"}, } m["csu-mle"] = { "Mangbutu-Lese", 17009406, "csu-ecs", aliases = {"Mangbutu–Efe", "Mangbutu", "Membi-Mangbutu-Efe"}, } m["csu-mma"] = { "Moru-Madi", 6915156, "csu-ecs", } m["csu-sar"] = { "Sara", 2036691, "csu-bba", } m["csu-val"] = { "Vale", 7909520, "csu-bba", } m["cus"] = { "nhóm ngôn ngữ Cushit", 33248, "afa", "Nhóm ngôn ngữ Cushit", "Cushit", } m["cus-cen"] = { "nhóm ngôn ngữ Trung Cushit", 56569, "cus", "Nhóm ngôn ngữ Trung Cushit", "Trung Cushit", } m["cus-eas"] = { "nhóm ngôn ngữ Đông Cushit", 56568, "cus", "Nhóm ngôn ngữ Đông Cushit", "Đông Cushit", } m["cus-hec"] = { "nhóm ngôn ngữ Đông Cushit Cao nguyên", 56524, "cus-eas", "Nhóm ngôn ngữ Đông Cushit Cao nguyên", "Đông Cushit Cao nguyên" } m["cus-som"] = { "nhóm ngôn ngữ Somali", 56774, "cus-eas", "Nhóm ngôn ngữ Somali", "Somali", aliases = {"Sam", "Macro-Somali"}, } m["cus-sou"] = { "nhóm ngôn ngữ Nam Cushit", 56525, "cus", "Nhóm ngôn ngữ Nam Cushit", "Nam Cushit", } m["day"] = { "Land Dayak", 2760613, "poz", } m["del"] = { "Lenape", 2665761, "alg-eas", aliases = {"Delaware"}, } m["den"] = { "Slavey", 13272, "ath-nor", aliases = {"Slave", "Slavé"}, } m["dmn"] = { "nhóm ngôn ngữ Mande", 33681, "nic", "Nhóm ngôn ngữ Mande", "Mande", } m["dmn-bbu"] = { "nhóm ngôn ngữ Bisa-Busa", 12627956, "dmn-mde", "Nhóm ngôn ngữ Bisa-Busa", "Bisa-Busa", } m["dmn-emn"] = { "East Manding", nil, "dmn-man", } m["dmn-jje"] = { "Jogo-Jeri", nil, "dmn-mjo", } m["dmn-man"] = { "Manding", 35772, "dmn-mmo", } m["dmn-mda"] = { "Mano-Dan", nil, "dmn-mse", } m["dmn-mdc"] = { "Central Mande", 5972907, "dmn-mdw", } m["dmn-mde"] = { "nhóm ngôn ngữ Đông Mande", 12633080, "dmn", "Nhóm ngôn ngữ Đông Mande", "Đông Mande", } m["dmn-mdw"] = { "Western Mande", 16113831, "dmn", } m["dmn-mjo"] = { "Manding-Jogo", 12636153, "dmn-mdc", } m["dmn-mmo"] = { "Manding-Mokole", nil, "dmn-mva", } m["dmn-mnk"] = { "Maninka", 36186, "dmn-emn", } m["dmn-mnw"] = { "Northwestern Mande", 5972910, "dmn-mdw", } m["dmn-mok"] = { "Mokole", 16935447, "dmn-mmo", } m["dmn-mse"] = { "Southeastern Mande", 5972912, "dmn-mde", } m["dmn-msw"] = { "Southwestern Mande", 12633904, "dmn-mdw", } m["dmn-mva"] = { "Manding-Vai", nil, "dmn-mjo", } m["dmn-nbe"] = { "Nwa-Beng", nil, "dmn-mse", } m["dmn-sam"] = { "Samo", 36327, "dmn-bbu", aliases = {"Samuic"}, } m["dmn-smg"] = { "Samogo", 7410000, "dmn-mnw", aliases = {"Duun-Seenku"}, } m["dmn-snb"] = { "Soninke-Bobo", 16111680, "dmn-mnw", } m["dmn-sya"] = { "Susu-Yalunka", nil, "dmn-mdc", } m["dmn-vak"] = { "Vai-Kono", nil, "dmn-mva", } m["dmn-wmn"] = { "West Manding", nil, "dmn-man", } m["dra"] = { "ngữ hệ Dravida", 33311, "Ngữ hệ Dravida", "Dravida", } m["dra-cen"] = { "Central Dravidian", 68002317, "dra", } m["dra-gki"] = { "Gondi-Kui", 12631610, "dra-sdt", } m["dra-gon"] = { "Gondi", 55639812, "dra-gki", } m["dra-imd"] = { "Irula-Muduga", nil, "dra-tkn", } m["dra-kan"] = { "nhóm ngôn ngữ Kannada", 6363888, "dra-tkn", "Nhóm ngôn ngữ Kannada", "Kannada", protoLanguage = "dra-okn", } m["dra-kki"] = { "Konda-Kui", nil, "dra-gki", } m["dra-kml"] = { "Kurukh-Malto", 68002822, "dra-nor", } m["dra-knk"] = { "Kolami-Naiki", 10547037, "dra-cen", } m["dra-kod"] = { "Kodagu", 67983106, "dra-tkd", } m["dra-kor"] = { "Koraga", 33394, "dra-tlk", } m["dra-mal"] = { "Malayalamoid", 6741581, "dra-tml", } m["dra-mdy"] = { "Madiya", 27602, "dra-gon", } m["dra-mlo"] = { "Malto", nil, "dra-kml", } m["dra-mur"] = { "Muria", 6938499, "dra-gon", } m["dra-nor"] = { "North Dravidian", 16110967, "dra", } m["dra-pgd"] = { "Parji-Gadaba", 10620428, "dra-cen", } m["dra-sdo"] = { "nhóm ngôn ngữ Nam Dravida I", 16112843, -- Wikipedia's "South Dravidian" is South Dravidian I in this scheme. "dra-sou", "Nhóm ngôn ngữ Nam Dravida I", "Nam Dravida I", aliases = {"Nam Dravida"}, -- This is why I and II are used. } m["dra-sdt"] = { "nhóm ngôn ngữ Nam Dravida II", 12633975, "dra-sou", "Nhóm ngôn ngữ Nam Dravida II", "Nam Dravida II", aliases = {"Nhóm ngôn ngữ Trung-Nam Dravida"}, } m["dra-sou"] = { "nhóm ngôn ngữ Nam Dravida", nil, "dra", "Nhóm ngôn ngữ Nam Dravida", "Nam Dravida", } m["dra-tam"] = { "Tamiloid", 7681417, "dra-tml", protoLanguage = "oty", } m["dra-tel"] = { "nhóm ngôn ngữ Telugu", nil, "dra-sdt", "Nhóm ngôn ngữ Telugu", "Telugu", protoLanguage = "dra-ote", } m["dra-tkd"] = { "Tamil-Kodagu", 25494510, "dra-tkn", } m["dra-tkn"] = { "nhóm ngôn ngữ Tamil-Kannada", 6478506, "dra-sdo", "Nhóm ngôn ngữ Tamil-Kannada", "Tamil-Kannada", } m["dra-tkt"] = { "Toda-Kota", 67983857, "dra-tkd", } m["dra-tlk"] = { "nhóm ngôn ngữ Tulu-Koraga", nil, "dra-sdo", "Nhóm ngôn ngữ Tulu-Koraga", "Tulu-Koraga", } m["dra-tml"] = { "Tamil-Malayalam", 10690507, "dra-tkd", } m["egx"] = { "nhóm ngôn ngữ Ai Cập", 50868, "afa", "Nhóm ngôn ngữ Ai Cập", "Ai Cập", protoLanguage = "egy", } m["esx"] = { "nhóm ngôn ngữ Eskimo-Aleut", 25946, "Nhóm ngôn ngữ Eskimo-Aleut", "Eskimo-Aleut", } m["esx-esk"] = { "Eskimo", 25946, "esx", } m["esx-inu"] = { "Inuit", 27796, "esx-esk", } m["euq"] = { "ngữ hệ Vascon", 4669240, "Ngữ hệ Vascon", "Vascon", } m["gem"] = { "nhóm ngôn ngữ German", 21200, "ine", "Nhóm ngôn ngữ German", "German", } m["gme"] = { "East Germanic", 108662, "gem", } m["gmq"] = { "nhóm ngôn ngữ German Bắc", 106085, "gem", "Nhóm ngôn ngữ German Bắc", "German Bắc", } m["gmq-eas"] = { "nhóm ngôn ngữ Đông Scandinavia", 3090263, "gmq", "Nhóm ngôn ngữ Đông Scandinavia", "Đông Scandinavia", protoLanguage = "non-oen", } m["gmq-ins"] = { "Insular Scandinavian", nil, "gmq-wes", } m["gmq-wes"] = { "nhóm ngôn ngữ Tây Scandinavia", 1792570, "gmq", "Nhóm ngôn ngữ Tây Scandinavia", "Tây Scandinavia", protoLanguage = "non-own", } m["gmw"] = { "nhóm ngôn ngữ German Tây", 26721, "gem", "Nhóm ngôn ngữ German Tây", "German Tây", } m["gmw-afr"] = { "nhóm ngôn ngữ Anh-Frisia", 5329170, "gmw-nsg", "Nhóm ngôn ngữ Anh-Frisia", "Anh-Frisia", } m["gmw-nsg"] = { "nhóm ngôn ngữ German Biển Bắc", 30134, "gmw", "Nhóm ngôn ngữ German Biển Bắc", "German Biển Bắc", } m["gmw-ang"] = { "nhóm ngôn ngữ Anh", 1346342, "gmw-afr", "Nhóm ngôn ngữ Anh", "Anh", protoLanguage = "ang", } m["gmw-fri"] = { "Frisian", 25325, "gmw-afr", protoLanguage = "ofs", } m["gmw-frk"] = { "nhóm ngôn ngữ Hạ Franken", 153050, "gmw", "Nhóm ngôn ngữ Hạ Franken", "Hạ Franken", protoLanguage = "odt", } m["gmw-hgm"] = { "nhóm ngôn ngữ Đức cao địa", 52040, "gmw", "Nhóm ngôn ngữ Đức cao địa", "Đức cao địa", protoLanguage = "goh", } m["gmw-ian"] = { "Irish Anglo-Norman", 120719384, "gmw-ang", protoLanguage = "enm", } m["gmw-lgm"] = { "Low German", 25433, "gmw", protoLanguage = "osx", } m["grk"] = { "nhóm ngôn ngữ gốc Hy Lạp", 2042538, "ine", "Nhóm ngôn ngữ gốc Hy Lạp", "gốc Hy Lạp", aliases = {"Greek"}, } m["him"] = { "Western Pahari", 12645574, "inc-pah", aliases = {"Himachali"}, } m["hmn"] = { "Hmong", 3307894, "hmx", } m["hmx"] = { "ngữ hệ Hmông-Miền", 33322, "Ngữ hệ Hmông-Miền", "Hmông-Miền", aliases = {"Miao-Yao"}, } m["hmx-mie"] = { "nhóm ngôn ngữ Miền", 7992695, "hmx", "Nhóm ngôn ngữ Miền", "Miền", } m["hok"] = { "Hokan", 33406, } m["hyx"] = { "nhóm ngôn ngữ Armenia", 8785, "ine", "Nhóm ngôn ngữ Armenia", "Armenia", } m["iir"] = { "nhóm ngôn ngữ Ấn-Iran", 33514, "ine", "Nhóm ngôn ngữ Ấn-Iran", "Ấn-Iran", } m["iir-nur"] = { "Nuristani", 161804, "iir", } m["nur-nor"] = { "Northern Nuristani", nil, "iir-nur", } m["nur-sou"] = { "Southern Nuristani", nil, "iir-nur", } m["ijo"] = { "Ijoid", 1325759, "nic", otherNames = {"Ijaw"}, -- Ijaw may be a subfamily } m["inc"] = { "nhóm ngôn ngữ Ấn-Arya", 33577, "iir", "Nhóm ngôn ngữ Ấn-Arya", "Ấn-Arya", aliases = {"Indic"}, } m["inc-bas"] = { "nhóm ngôn ngữ Bengal-Assam", 4179137, "inc-eas", "Nhóm ngôn ngữ Bengal-Assam", "Bengal-Assam", aliases = {"Bengal-Assam", "Gauda-Kamarupa"}, } m["inc-bhi"] = { "Bhil", 4901727, "inc-cen", } m["inc-bih"] = { "nhóm ngôn ngữ Bihar", 135305, "inc-eas", "Nhóm ngôn ngữ Bihar", "Bihar", aliases = {"Bihari"}, } m["inc-cen"] = { "Central Indo-Aryan", 10979187, "inc", } m["inc-chi"] = { "Chitrali", 11732797, "inc-dar", } m["inc-dar"] = { "nhóm ngôn ngữ Dard", 161101, "inc", "Nhóm ngôn ngữ Dard", "Dard", protoLanguage = "sa", } m["inc-dre"] = { "Eastern Dardic", nil, "inc-dar", } m["inc-eas"] = { "nhóm ngôn ngữ Đông Ấn-Arya", 16590069, "inc", "Nhóm ngôn ngữ Đông Ấn-Arya", "Đông Ấn-Arya", protoLanguage = "pra-mag", } m["inc-hie"] = { "Eastern Hindi", 4126648, "inc", aliases = {"Purabiyā"}, protoLanguage = "pra-ard", } m["inc-hiw"] = { "Western Hindi", 12600937, "inc-cen", protoLanguage = "inc-sap", } m["inc-hnd"] = { "tiếng Hindustan", 11051, "inc-hiw", "Tiếng Hindustan", "Hindustan", aliases = {"Hindi-Urdu"}, protoLanguage = "hi-mid", } m["inc-ins"] = { "Insular Indo-Aryan", 12179302, "inc", protoLanguage = "pra-hel", } m["inc-kas"] = { "Kashmiric", nil, "inc-dre", aliases = {"Kashmiri"}, } m["inc-koh"] = { "Kohistani", 111971091, "inc-dre", } m["inc-kun"] = { "Kunar", nil, "inc-dar", } m["inc-mid"] = { "nhóm ngôn ngữ Ấn-Arya trung đại", 3236316, "inc", "Nhóm ngôn ngữ Ấn-Arya trung đại", "Ấn-Arya trung đại", aliases = {"Middle Indic"}, } m["inc-nwe"] = { "Northwestern Indo-Aryan", 41355020, "inc", protoLanguage = "pra-pai", } m["inc-nor"] = { "nhóm ngôn ngữ Bắc Ấn-Arya", 12642170, "inc", "Nhóm ngôn ngữ Bắc Ấn-Arya", "Bắc Ấn-Arya", protoLanguage = "pra-kha", } m["inc-old"] = { "nhóm ngôn ngữ Ấn-Arya cổ", 118976896, "inc", "Nhóm ngôn ngữ Ấn-Arya cổ", "Ấn-Arya cổ", aliases = {"Old Indic"}, } m["inc-pah"] = { "nhóm ngôn ngữ Pahari", 946077, "inc-nor", "Nhóm ngôn ngữ Pahari", "Pahari", aliases = {"Pahadi"}, } m["inc-pan"] = { "Punjabi-Lahnda", nil, "inc-nwe", protoLanguage = "inc-tak", } m["inc-pas"] = { "Pashayi", 36670, "inc-dar", aliases = {"Pashai"}, } m["inc-rom"] = { "Romani", 13201, "inc-wes", aliases = {"Romany", "Gypsy", "Gipsy"}, protoLanguage = "rom", } m["inc-shn"] = { "Shinaic", 12646125, "inc-dre", } m["inc-snd"] = { "Sindhi", 7522212, "inc-nwe", protoLanguage = "inc-vra", } m["inc-sou"] = { "Southern Indo-Aryan", 12179304, "inc", protoLanguage = "inc-ama", } m["inc-wes"] = { "nhóm ngôn ngữ Tây Ấn-Aryan", nil, "inc", "Nhóm ngôn ngữ Tây Ấn-Aryan", "Tây Ấn-Aryan", protoLanguage = "inc-agu", } m["ine"] = { "ngữ hệ Ấn-Âu", 19860, aliases = {"Indo-Germanic"}, "Ngữ hệ Ấn-Âu", "Ấn Âu", } m["ine-ana"] = { "nhóm ngôn ngữ Tiểu Á", 147085, "ine", "Nhóm ngôn ngữ Tiểu Á", "Tiểu Á", } m["ine-bsl"] = { "nhóm ngôn ngữ Balt-Slav", 147356, "ine", "Balt-Slav", } m["ine-grp"] = { "nhóm ngôn ngữ Graeco-Phrygia", nil, "ine", "Nhóm ngôn ngữ Graeco-Phrygia", "Graeco-Phrygia", } m["ine-luw"] = { "Luwic", 115748615, "ine-ana", aliases = {"Luvic"}, } m["ine-toc"] = { "Tocharian", 37029, "ine", aliases = {"Tokharian"}, } m["ira"] = { "nhóm ngôn ngữ Iran", 33527, "iir", "Nhóm ngôn ngữ Iran", "Iran", } m["ira-csp"] = { "Caspian", 5049123, "ira-mpr", } m["ira-cen"] = { "Central Iranian", nil, "ira", } m["ira-kms"] = { "Komisenian", nil, "ira-mpr", aliases = {"Semnani"}, } m["ira-mid"] = { "nhóm ngôn ngữ Iran trung đại", 6841465, "ira", "Nhóm ngôn ngữ Iran trung đại", "Iran trung đại", } m["ine-luw"] = { "Luwic", 115748615, "ine-ana", aliases = {"Luvic"}, } m["ira-mny"] = { "Munji-Yidgha", nil, "ira-sym", aliases = {"Yidgha-Munji"}, } m["ira-msh"] = { "Mazanderani-Shahmirzadi", nil, "ira-csp", } m["ira-nei"] = { "nhóm ngôn ngữ Đông Bắc Iran", 10775567, "ira", "Nhóm ngôn ngữ Đông Bắc Iran", "Đông Bắc Iran", } m["ira-nwi"] = { "nhóm ngôn ngữ Tây Bắc Iran", 390576, "ira-wes", "Nhóm ngôn ngữ Tây Bắc Iran", "Tây Bắc Iran", } m["ira-orp"] = { "nhóm ngôn ngữ Ormur-Parachi", nil, "ira-sei", "Nhóm ngôn ngữ Ormur-Parachi", "Ormur-Parachi", } m["ira-pat"] = { "Pathan", nil, "ira-sei", } m["ira-sbc"] = { "Sogdo-Bactrian", nil, "ira-nei", } m["ira-mpr"] = { "nhóm ngôn ngữ Media-Parthia", nil, "ira-nwi", "Nhóm ngôn ngữ Media-Parthia", "Media-Parthia", } m["ira-sgi"] = { "Sanglechi-Ishkashimi", 18711232, "ira-sei", } m["ira-shr"] = { "nhóm ngôn ngữ Shughni-Roshani", 11732824, "ira-shy", "Nhóm ngôn ngữ Shughni-Roshani", "Shughni-Roshani", } m["ira-shy"] = { "Shughni-Yazghulami", nil, "ira-sym", } m["ira-sgc"] = { "Sogdic", nil, "ira-sbc", aliases = {"Sogdian"}, } m["ira-sei"] = { "nhóm ngôn ngữ Đông Nam Iran", 3833002, "ira", "Nhóm ngôn ngữ Đông Nam Iran", "Đông Nam Iran", } m["ira-swi"] = { "nhóm ngôn ngữ Tây Nam Iran", 390424, "ira-wes", "Nhóm ngôn ngữ Tây Nam Iran", "Tây Nam Iran", } m["ira-sym"] = { "nhóm ngôn ngữ Shughni-Yazghulami-Munji", nil, "ira-sei", "Nhóm ngôn ngữ Shughni-Yazghulami-Munji", "Shughni-Yazghulami-Munji", } m["ira-wes"] = { "nhóm ngôn ngữ Tây Iran", 129850, "ira", "Nhóm ngôn ngữ Tây Iran", "Tây Iran", } m["ira-zgr"] = { "nhóm ngôn ngữ Zaza-Goran", 167854, "ira-mpr", "Nhóm ngôn ngữ Zaza-Goran", "Zaza-Goran", aliases = {"Zaza-Guran", "Goran-Zaza"}, } m["iro"] = { "ngữ hệ Iroquois", 33623, "Ngữ hệ Iroquois", "Iroquois", } m["iro-nor"] = { "nhóm ngôn ngữ Bắc Iroquois", nil, "iro", "Nhóm ngôn ngữ Bắc Iroquois", "Bắc Iroquois", } m["itc"] = { "nhóm ngôn ngữ gốc Ý", 131848, "ine", "Nhóm ngôn ngữ gốc Ý", "gốc Ý", } m["itc-laf"] = { "nhóm ngôn ngữ Latinh-Faliscan", 33478, "itc", "Nhóm ngôn ngữ Latinh-Faliscan", "Latinh-Faliscan", aliases = {"Latinian"}, } m["itc-sbl"] = { "nhóm ngôn ngữ Osco-Umbria", 515194, "itc", "Nhóm ngôn ngữ Osco-Umbria", "Osco-Umbria", aliases = { "Sabellia" }, } m["jpx"] = { "ngữ hệ Nhật Bản-Lưu Cầu", 33612, aliases = {"Nhật", "Nhật Bản-Lưu Cầu"}, "Ngữ hệ Nhật Bản-Lưu Cầu", "Nhật Bản-Lưu Cầu", } m["jpx-nry"] = { "nhóm ngôn ngữ Bắc Lưu Cầu", 20862796, "jpx-ryu", "Nhóm ngôn ngữ Bắc Lưu Cầu", "Bắc Lưu Cầu", } m["jpx-ryu"] = { "nhóm ngôn ngữ Lưu Cầu", 56393, "jpx", "Nhóm ngôn ngữ Lưu Cầu", "Lưu Cầu", } m["jpx-sry"] = { "nhóm ngôn ngữ Nam Lưu Cầu", 18392243, "jpx-ryu", "Nhóm ngôn ngữ Nam Lưu Cầu", "Nam Lưu Cầu", } m["kar"] = { "nhóm ngôn ngữ Karen", 1364815, "sit", "Nhóm ngôn ngữ Karen", "Karen", } m["kca"] = { "Khanty", 33563, "urj-ugr", aliases = {"Khantyic", "Khantic"}, } --[=[ Exceptional language and family codes for Khoisan and Kordofanian languages can use the prefix "khi-" and "kdo-" respectively, though they are no longer family codes themselves. ]=]-- m["khi-kal"] = { "Kalahari Khoe", nil, "khi-kho", } m["khi-khk"] = { "Khoekhoe", nil, "khi-kho", } m["khi-kkw"] = { "Khoe-Kwadi", 3833005, aliases = {"Kwadi-Khoe"}, } m["khi-kho"] = { "Khoe", 2736449, "khi-kkw", aliases = {"Central Khoisan"}, } m["khi-kxa"] = { "Kx'a", 6450587, aliases = {"Kxa", "Ju-ǂHoan"}, } m["khi-tuu"] = { "Tuu", 631046, aliases = {"Kwi", "Taa-Kwi", "Southern Khoisan", "Taa-ǃKwi", "Taa-ǃUi", "ǃUi-Taa"}, } m["kro"] = { "nhóm ngôn ngữ Kru", 33535, "nic-vco", "Nhóm ngôn ngữ Kru", "Kru", } m["kro-aiz"] = { "Aizi", 4699431, "kro", } m["kro-bet"] = { "Bété", 32956, "kro-ekr", } m["kro-did"] = { "Dida", 32685, "kro-ekr", } m["kro-ekr"] = { "Eastern Kru", 5972899, "kro", } m["kro-grb"] = { "Grebo", 5601537, "kro-wkr", } m["kro-wee"] = { "Wee", nil, "kro-wkr", } m["kro-wkr"] = { "Western Kru", 5972897, "kro", } m["ku"] = { "nhóm ngôn ngữ Kurd", 36368, "ira-nwi", "Nhóm ngôn ngữ Kurd", "Kurd", } m["map"] = { "ngữ hệ Nam Đảo", 49228, "Ngữ hệ Nam Đảo", "Nam Đảo", } m["map-ata"] = { "nhóm ngôn ngữ Atayal", 716610, "map", "Nhóm ngôn ngữ Atayal", "Atayal", } m["map-tsu"] = { "nhóm ngôn ngữ Tsou", 716659, "map", "Nhóm ngôn ngữ Tsou", "Tsou", } m["mjg"] = { "nhóm ngôn ngữ Monguor", 34214, "xgn-shr", "Nhóm ngôn ngữ Monguor", "Monguor", } m["mkh"] = { "nhóm ngôn ngữ Môn-Khmer", 33199, "aav", "Nhóm ngôn ngữ Môn-Khmer", "Môn-Khmer", } m["mkh-asl"] = { "nhóm ngôn ngữ Asli", 3111082, "mkh", "Nhóm ngôn ngữ Asli", "Asli", } m["mkh-ban"] = { "nhóm ngôn ngữ Bahnar", 56309, "mkh", "Nhóm ngôn ngữ Bahnar", "Bahnar", } m["mkh-kat"] = { "nhóm ngôn ngữ Cơ Tu", 56697, "mkh", "Nhóm ngôn ngữ Cơ Tu", "Cơ Tu", } m["mkh-khm"] = { "nhóm ngôn ngữ Khơ Mú", 1323245, "mkh", "Nhóm ngôn ngữ Khơ Mú", "Khơ Mú", } m["mkh-kmr"] = { "nhóm ngôn ngữ Khmer", nil, "mkh", "Nhóm ngôn ngữ Khmer", "Khmer", } m["mkh-mnc"] = { "nhóm ngôn ngữ Môn", 3217497, "mkh", "Nhóm ngôn ngữ Môn", "Môn", } m["mkh-mng"] = { "nhóm ngôn ngữ Mảng", 3509556, "mkh", "Nhóm ngôn ngữ Mảng", "Mảng", } m["mkh-nbn"] = { "nhóm ngôn ngữ Bahnar Bắc", 56309, "mkh-ban", "Nhóm ngôn ngữ Bahnar", "Bahnar", } m["mkh-pal"] = { "nhóm ngôn ngữ Palaung", 2391173, "mkh", "Nhóm ngôn ngữ Palaung", "Palaung", } m["mkh-pea"] = { "nhóm ngôn ngữ Pear", 3073022, "mkh", "Nhóm ngôn ngữ Pear", "Pear", } m["mkh-pkn"] = { "Pakanic", nil, "mkh-mng", } m["mkh-vie"] = { "nhóm ngôn ngữ Việt", 2355546, "mkh", "Nhóm ngôn ngữ Việt", "Việt", } m["mno"] = { "nhóm ngôn ngữ Manobo", 3217483, "phi", "Nhóm ngôn ngữ Manobo", "Manobo", } m["mns"] = { "nhóm ngôn ngữ Mansi", 33759, "urj-ugr", "Nhóm ngôn ngữ Mansi", "Mansi", aliases = {"Mansi"}, } m["mun"] = { "nhóm ngôn ngữ Munda", 33892, "aav", "Nhóm ngôn ngữ Munda", "Munda", } m["myn"] = { "ngữ hệ Maya", 33738, "Ngữ hệ Maya", "Maya", } --[=[ Exceptional language and family codes for North American Indian languages can use the prefix "nai-", though "nai" is no longer itself a family code. ]=]-- m["nai-cat"] = { "Catawban", 3446638, "nai-sca", } m["nai-chu"] = { "Chumashan", 1288420, } m["nai-ckn"] = { "Chinookan", 610586, } m["nai-coo"] = { "Coosan", 940278, } m["nai-jcq"] = { "Jicaquean", 12179308, "hok" } m["nai-ker"] = { "Keresan", 35878, } m["nai-klp"] = { "Kalapuyan", 1569040, } m["nai-kta"] = { "ngữ hệ Kiowa-Tanoa", 386288, "Ngữ hệ Kiowa-Tanoa", "Kiowa-Tanoa", } m["nai-len"] = { "Lencan", 36189, aliases = {"Lenca"}, } m["nai-mdu"] = { "Maiduan", 33502, } m["nai-miz"] = { "Mixe-Zoquean", 954016, aliases = {"Mixe-Zoque"}, } m["nai-min"] = { "Misumalpan", 281693, "qfa-mch", aliases = {"Misuluan", "Misumalpa"}, } m["nai-mus"] = { "Muskogean", 902978, aliases = {"Muskhogean"}, } m["nai-pak"] = { "Pakawan", 65085487, "hok", } m["nai-pal"] = { "Palaihnihan", 1288332, } m["nai-plp"] = { "Plateau Penutian", 2307476, } m["nai-pom"] = { "Pomoan", 2618420, "hok", aliases = {"Pomo", "Kulanapan"}, } m["nai-sca"] = { "Siouan-Catawban", 34181, } m["nai-shp"] = { "Sahaptian", 114782, "nai-plp", } m["nai-shs"] = { "Shastan", 2991735, "hok", } m["nai-tot"] = { "Totozoquean", 7828419, } m["nai-ttn"] = { "ngữ hệ Totonac", 34039, "Ngữ hệ Totonac", "Totonac", aliases = {"Totonacan","Totonac-Tepehua", "Totonacan-Tepehuan"}, varieties = {"Totonac"}, } m["nai-tqn"] = { "Tequistlatecan", 1754988, "hok", aliases = {"Tequistlatec", "Chontal", "Chontalan", "Oaxacan Chontal", "Chontal of Oaxaca"}, } m["nai-tsi"] = { "Tsimshianic", 34134, } m["nai-utn"] = { "Utian", 13371763, "nai-you", aliases = {"Miwok-Costanoan", "Mutsun"}, } m["nai-wtq"] = { "Wintuan", 1294259, aliases = {"Wintun"}, } m["nai-xin"] = { "ngữ hệ Xinca", 1546494, "Ngữ hệ Xinca", "Xinca", aliases = {"Xincan","Xinka","Sinca","Szinca"}, } m["nai-ykn"] = { "Yukian", 2406722, aliases = {"Yuki-Wappo"}, } m["nai-you"] = { "Yok-Utian", 2886186, } m["nai-yuc"] = { "ngữ hệ Yuman-Cochimí", 579137, "Ngữ hệ Yuman-Cochimí", "Yuman-Cochimí", } m["ngf"] = { "ngữ hệ Liên New Guinea", 34018, "Ngữ hệ Liên New Guinea", "Liên New Guinea", } m["ngf-ais"] = { "Aisian", nil, "ngf-eso", } m["ngf-ang"] = { "nhóm ngôn ngữ Angan", 3217366, "ngf", "Nhóm ngôn ngữ Angan", "Angan", aliases = {"Kratke Range"}, -- Usher } m["ngf-ank"] = { "Angal-Kewa", 12626916, -- exist in dewiki and hrwiki "ngf-sak", } m["ngf-ask"] = { "Asmat-Kamoro", 3031400, "ngf", -- Wikipedia uses Asmat-Kamoro to refer to a narrower group excluding the Sabakor languages (Buruwai and Kamberau, -- which Glottolog splits into North Kamrau and South Kamrau [sic]), and uses Asmat-Kamrau to refer to what we and -- Glottolog call Asmat-Kamoro. Glottolog does not recognize the narrower grouping. aliases = {"Asmat-Kamrau", -- Wikipedia "Asmat-Kamrau Bay", -- Usher }, } m["ngf-asm"] = { "Asmat", 4807421, "ngf-ask", } m["ngf-ata"] = { "Ankave-Tainae-Akoye", nil, "ngf-ang", aliases = {"Southwest Kratke Range"}, -- Usher } m["ngf-awd"] = { "Awyu-Dumut", -- [[w:Awyu-Dumut languages]] redirects to [[w:Greater Awyu languages]] 4830163, -- exist in eswiki, hrwiki and ruwiki "ngf-gaw", aliases = {"Central Digul River"}, -- Usher } m["ngf-awy"] = { "Awyu", 96372866, "ngf-awd", } m["ngf-bda"] = { "Becking-Dawi", nil, -- Q55993716 ([[Category:Becking–Dawi languages]]) exists in enwiki "ngf-gaw", aliases = {"Becking and Dawi Rivers"}, -- Usher } m["ngf-bin"] = { "Binanderean", 3217374, -- Wikidata doesn't distinguish Binanderean from Greater Binanderean "ngf-gbi", aliases = {"Oro"}, -- Usher (2020) } m["ngf-boa"] = { "Boane", nil, "ngf-era", aliases = {"Boana", -- Glottolog's name "Wain"}, -- not in Usher; "Wain" often excludes Mungkip, perhaps because it's poorly documented } m["ngf-bos"] = { "Bosavi", 4947122, "ngf", aliases = {"Papuan Plateau"}, -- alternative name given by Wikipedia } m["ngf-bsi"] = { "Baruya-Simbari", nil, "ngf-ang", aliases = {"Northwest Kratke Range"}, -- Usher } m["ngf-cda"] = { "Central Dani", nil, "ngf-dan", aliases = {"Dani"}, -- Usher } m["ngf-chw"] = { "Chimbu-Wahgi", 3217383, "ngf", aliases = {"Simbu-Western Highlands"}, -- alternative name given by Wikipedia } m["ngf-dag"] = { "Dagan", 5208454, "ngf", -- not accepted as TNG by Glottolog but accepted by all others aliases = {"Meneao Range"}, } m["ngf-dal"] = { "Dallman", nil, "ngf-huo", aliases = {"Kinalakna-Kumukio", -- Pawley-Hammarström, who exclude Nomu, but they only had a numeral list of that language to work from "Northeast Huon", -- Usher }, } m["ngf-dan"] = { "Dani", 3217389, "ngf", -- Wikipedia renames the Dani languages to the Baliem Valley languages and sometimes (but not consistently) -- reserves the name Dani (or "Dani proper") for a narrower group excluding Wano and the poorly attested Ngalik -- languages (Nduga, Silimo, and the Yali dialect cluster, which we, following Ethnologue and Glottolog, split into -- Anggurk Yali, Ninia Yali and Pass Valley Yali). Glottolog does not recognize the narrower grouping. aliases = {"Baliem Valley", -- Wikipedia "Balim Valley", -- Usher }, } m["ngf-dum"] = { "Dumut", -- [[w:Dumut languages]] redirects to [[w:Greater Awyu languages]] nil, "ngf-awd", aliases = {"Wambon"}, -- Usher } m["ngf-ehu"] = { "Eastern Huon", -- Glottolog adds Ono and Sialum, Pawley-Hammarström adds Dedua 10567087, "ngf-huo", aliases = {"East Huon"}, -- Usher } m["ngf-eku"] = { "East Kutubuan", 5328752, "ngf", -- Not in TNG per Glottolog but accepted by all others. Sometimes grouped with Fasu to form a Kutubuan family. aliases = {"East Kutubu"}, -- Glottolog's name } m["ngf-enc"] = { "Engic", nil, "ngf-eng", aliases = {"Engan", -- Glottolog "Engan proper", -- Wikipedia "North Engan", -- alternative name given by Wikipedia "Trans-Enga", -- Usher }, } m["ngf-eng"] = { "Engan", 3217449, "ngf", aliases = {"Enga-Kewa-Huli", -- Glottolog, Pawley-Hammarström "Enga-Southern Highlands", -- Usher }, } m["ngf-era"] = { "Erap", nil, "ngf-fin", aliases = {"Erap River"}, -- Usher? } m["ngf-eso"] = { "East Sogeram", nil, "ngf-sog", } m["ngf-est"] = { "East Strickland", 5329440, "ngf", aliases = {"Strickland River"}, -- alternative name given by Wikipedia } m["ngf-eva"] = { "Evapia", nil, "ngf-rai", aliases = {"Evapia River"}, -- Usher } m["ngf-fgi"] = { "Fore-Gimi", nil, "ngf-gor", aliases = {"South Goroka"}, -- Usher } m["ngf-fhu"] = { "Finisterre-Huon", 3217453, "ngf", aliases = {"Finisterre Range-Huon Peninsula"}, -- per Usher } m["ngf-fin"] = { "Finisterre", 5450373, "ngf", } m["ngf-mad"] = { "nhóm ngôn ngữ Madang", 11217556, "ngf", "Nhóm ngôn ngữ Madang", "Madang", } m["ngf-okk"] = { "Ok", 7081687, "ngf", } m["ngf-sbh"] = { "South Bird's Head", 7566330, "ngf", } m["nic"] = { "ngữ hệ Niger-Congo", 33838, "Ngữ hệ Niger-Congo", "Niger-Congo", aliases = {"Niger-Kordofania"}, } m["nic-alu"] = { "nhóm ngôn ngữ Alumic", 4737355, "nic-plt", "Nhóm ngôn ngữ Alumic", "Alumic", } m["nic-bas"] = { "Basa", 4866154, "nic-knj", } m["nic-bbe"] = { "Eastern Beboid", nil, "nic-beb", } m["nic-bco"] = { "nhóm ngôn ngữ Benue-Congo", 33253, "nic-vco", "Nhóm ngôn ngữ Benue-Congo", "Benue-Congo", } m["nic-bcr"] = { "nhóm ngôn ngữ Bantoid-Cross", 806983, "nic-bco", "Nhóm ngôn ngữ Bantoid-Cross", "Bantoid-Cross", } m["nic-bdn"] = { "nhóm ngôn ngữ Bắc Bantoid", nil, "nic-bod", "Nhóm ngôn ngữ Bắc Bantoid", "Bắc Bantoid", aliases = {"North Bantoid"}, } m["nic-bds"] = { "nhóm ngôn ngữ Nam Bantoid", 3183152, "nic-bod", "Nhóm ngôn ngữ Nam Bantoid", "Nam Bantoid", aliases = {"Wide Bantu", "Bin"}, } m["nic-beb"] = { "Beboid", 813549, "nic-bds", } m["nic-ben"] = { "Bendi", 4887065, "nic-bcr", } m["nic-beo"] = { "Beromic", 4894642, "nic-plt", } m["nic-bod"] = { "nhóm ngôn ngữ Bantoid", 806992, "nic-bcr", "Nhóm ngôn ngữ Bantoid", "Bantoid", } m["nic-buk"] = { "Buli-Koma", nil, "nic-ovo", } m["nic-bwa"] = { "Bwa", 12628562, "nic-gur", otherNames = {"Bwamu", "Bomu"}, } m["nic-cde"] = { "Central Delta", 3813191, "nic-cri", } m["nic-cri"] = { "Cross River", 1141096, "nic-bcr", } m["nic-dag"] = { "nhóm ngôn ngữ Dagbani", nil, "nic-wov", "Nhóm ngôn ngữ Dagbani", "Dagbani", } m["nic-dak"] = { "Dakoid", 1157745, "nic-bdn", } m["nic-dge"] = { "Escarpment Dogon", 5397128, "qfa-dgn", } m["nic-dgw"] = { "West Dogon", nil, "qfa-dgn", } m["nic-eko"] = { "Ekoid", 1323395, "nic-bds", } m["nic-eov"] = { "Eastern Oti-Volta", nil, "nic-ovo", aliases = {"Samba"}, } m["nic-fru"] = { "Furu", 5509783, "nic-bds", } m["nic-gne"] = { "Eastern Gurunsi", 12633072, "nic-gns", aliases = {"Eastern Grũsi"}, } m["nic-gnn"] = { "Northern Gurunsi", nil, "nic-gns", aliases = {"Northern Grũsi"}, } m["nic-gnw"] = { "Western Gurunsi", nil, "nic-gns", aliases = {"Western Grũsi"}, } m["nic-gns"] = { "Gurunsi", 721007, "nic-gur", aliases = {"Grũsi"}, } m["nic-gre"] = { "Eastern Grassfields", 5330160, "nic-grf", } m["nic-grf"] = { "Grassfields", 750932, "nic-bds", aliases = {"Grassfields Bantu", "Wide Grassfields"}, } m["nic-grm"] = { "Gurma", 30587833, "nic-ovo", } m["nic-grs"] = { "Southwest Grassfields", 7571285, "nic-grf", } m["nic-gur"] = { "Gur", 33536, "alv-sav", aliases = {"Voltaic"}, } m["nic-ief"] = { "Ibibio-Efik", 2743643, "nic-lcr", } m["nic-jer"] = { "Jera", nil, "nic-kne", } m["nic-jkn"] = { "nhóm ngôn ngữ Jukunoid", 1711622, "nic-pla", "Nhóm ngôn ngữ Jukunoid", "Jukunoid", } m["nic-jrn"] = { "Jarawan", 1683430, "nic-mba", } m["nic-jrw"] = { "Jarawa", 35423, "nic-jrn", } m["nic-kam"] = { "Kambari", 6356294, "nic-knj", } m["nic-ktl"] = { "Katloid", nil, "nic", } m["nic-kau"] = { "nhóm ngôn ngữ Kauru", nil, "nic-kne", "Nhóm ngôn ngữ Kauru", "Kauru", } m["nic-kmk"] = { "Kamuku", 6359821, "nic-knj", } m["nic-kne"] = { "nhóm ngôn ngữ Đông Kainji", 5328687, "nic-knj", "Nhóm ngôn ngữ Đông Kainji", "Đông Kainji", } m["nic-knj"] = { "nhóm ngôn ngữ Kainji", 681495, "nic-pla", "Nhóm ngôn ngữ Kainji", "Kainji", } m["nic-knn"] = { "Northwest Kainji", 7060098, "nic-knj", } m["nic-ktl"] = { "Katloid", 6377681, "nic", aliases = {"Katla", "Katla-Tima"}, } m["nic-lcr"] = { "Lower Cross River", 3813193, "nic-cri", } m["nic-mam"] = { "Mamfe", 2005898, "nic-bds", aliases = {"Nyang"}, } m["nic-mba"] = { "Mbam", 687826, "nic-bds", } m["nic-mbc"] = { "Mba", 6799561, "nic-ubg", } m["nic-mbw"] = { "West Mbam", nil, "nic-mba", } m["nic-mmb"] = { "nhóm ngôn ngữ Mambiloid", 1888151, otherNames = {"Bắc Bantoid"}, -- per Wikipedia, North Bantoid is the parent family "nic-bdn", "Nhóm ngôn ngữ Mambiloid", "Mambiloid", } m["nic-mom"] = { "Momo", 6897393, "nic-grf", } m["nic-mre"] = { "Moré", nil, "nic-wov", } m["nic-ngd"] = { "Ngbandi", 36439, "nic-ubg", } m["nic-nge"] = { "Ngemba", 7022271, "nic-gre", } m["nic-ngk"] = { "Ngbaka", 3217499, "nic-ubg", } m["nic-nin"] = { "Ninzic", 7039282, "nic-plt", } m["nic-nka"] = { "Nkambe", 7042520, "nic-gre", } m["nic-nkb"] = { "Baka", nil, "nic-nkw", } m["nic-nke"] = { "Eastern Ngbaka", nil, "nic-ngk", } m["nic-nkg"] = { "Gbanziri", nil, "nic-nkw", } m["nic-nkk"] = { "Kpala", nil, "nic-nkw", } m["nic-nkm"] = { "Mbaka", nil, "nic-nkw", } m["nic-nkw"] = { "Western Ngbaka", nil, "nic-ngk", } m["nic-npd"] = { "North Plateau Dogon", nil, "qfa-dgn", } m["nic-nun"] = { "Nun", 13654297, "nic-gre", } m["nic-nwa"] = { "Nanga-Walo", nil, "qfa-dgn", } m["nic-ogo"] = { "Ogoni", 2350726, "nic-cri", aliases = {"Ogonoid"}, } m["nic-ovo"] = { "Oti-Volta", 1157178, "nic-gur", } m["nic-pla"] = { "nhóm ngôn ngữ Platoid", 453244, "nic-bco", "Nhóm ngôn ngữ Platoid", "Platoid", aliases = {"Đông Nigeria"}, } m["nic-plc"] = { "nhóm ngôn ngữ Trung Plateau", 5061668, "nic-plt", "Nhóm ngôn ngữ Trung Plateau", "Trung Plateau", } m["nic-pld"] = { "Plains Dogon", nil, "qfa-dgn", } m["nic-ple"] = { "East Plateau", 5329154, "nic-plt", } m["nic-pls"] = { "South Plateau", 7568236, "nic-plt", aliases = {"Jilic-Eggonic"}, } m["nic-plt"] = { "nhóm ngôn ngữ Plateau", 1267471, "nic-pla", "Nhóm ngôn ngữ Plateau", "Plateau", } m["nic-ras"] = { "Rashad", 3401986, "nic", } m["nic-rnc"] = { "Central Ring", nil, "nic-rng", } m["nic-rng"] = { "Ring", 2269051, "nic-grf", aliases = {"Ring Road"}, } m["nic-rnn"] = { "Northern Ring", nil, "nic-rng", } m["nic-rnw"] = { "Western Ring", nil, "nic-rng", } m["nic-ser"] = { "Sere", 7453058, "nic-ubg", } m["nic-shi"] = { "Shiroro", 7498953, "nic-knj", aliases = {"Pongu"}, } m["nic-sis"] = { "Sisaala", 36532, "nic-gnw", } m["nic-tar"] = { "Tarokoid", 2394472, "nic-plt", } m["nic-tiv"] = { "nhóm ngôn ngữ Tivoid", 752377, "nic-bds", "Nhóm ngôn ngữ Tivoid", "Tivoid", } m["nic-tvc"] = { "Central Tivoid", nil, "nic-tiv", } m["nic-tvn"] = { "Northern Tivoid", nil, "nic-tiv", } m["nic-ubg"] = { "nhóm ngôn ngữ Ubangi", 33932, "nic-vco", -- or none "Nhóm ngôn ngữ Ubangi", "Ubangi", } m["nic-uce"] = { "East-West Upper Cross River", nil, "nic-ucr", } m["nic-ucn"] = { "North-South Upper Cross River", nil, "nic-ucr", } m["nic-ucr"] = { "Upper Cross River", 4108624, "nic-cri", aliases = {"Upper Cross"}, } m["nic-vco"] = { "nhóm ngôn ngữ Volta-Congo", 37228, "alv", "Nhóm ngôn ngữ Volta-Congo", "Volta-Congo", } m["nic-wov"] = { "Western Oti-Volta", nil, "nic-ovo", aliases = {"Moré-Dagbani"} } m["nic-ykb"] = { "Yukubenic", 16909196, "nic-plt", aliases = {"Oohum"}, } m["nic-ymb"] = { "Yambasa", nil, "nic-mba", } m["nic-yon"] = { "Yom-Nawdm", nil, "nic-ovo", aliases = {"Moré-Dagbani"} } m["nub"] = { "Nubian", 1517194, "sdv-nes", } m["nub-hil"] = { "Hill Nubian", 5762211, "nub", aliases = {"Kordofan Nubian"}, } m["omq"] = { "ngữ hệ Oto-Mangue", 33669, "Ngữ hệ Oto-Mangue", "Oto-Mangue", } m["omq-cha"] = { "Chatino", 35111, "omq-zap", } m["omq-chi"] = { "Chinantecan", 35828, "omq", } m["omq-cui"] = { "Cuicatec", 616024, "omq-mix", } m["omq-maz"] = { "Mazatecan", 36230, "omq", aliases = {"Mazatec"}, } m["omq-mix"] = { "ngữ tộc Mixtec", 21996392, "omq", "Ngữ tộc Mixtec", "Mixtec", } m["omq-mxt"] = { "nhóm ngôn ngữ Mixtec", 36363, "omq-mix", "Nhóm ngôn ngữ Mixtec", "Mixtec", } m["omq-otp"] = { "Oto-Pamean", nil, "omq", } m["omq-pop"] = { "Popolocan", 5132273, "omq", } m["omq-tri"] = { "nhóm ngôn ngữ Triqui", 780200, "omq-mix", "Nhóm ngôn ngữ Triqui", "Triqui", aliases = {"Trique"}, } m["omq-zap"] = { "nhóm ngôn ngữ Zapotec", 8066463, "omq", "Nhóm ngôn ngữ Zapotec", "Zapotec", } m["omq-zpc"] = { "Zapotec", 13214, "omq-zap", } m["omv"] = { "nhóm ngôn ngữ Omo", 33860, "afa", "Nhóm ngôn ngữ Omo", "Omo", } m["omv-aro"] = { "nhóm ngôn ngữ Aari", 3699526, "omv", "Nhóm ngôn ngữ Aari", "Aari", aliases = {"Ari-Banna", "Nam Omo", "Somo"}, } m["omv-diz"] = { "nhóm ngôn ngữ Dizi", 430251, "omv", "Nhóm ngôn ngữ Dizi", "Dizi", aliases = {"Maji", "Majoid"}, } m["omv-eom"] = { "East Ometo", 20527288, "omv-ome", } m["omv-gon"] = { "Gonga", 4143043, "omv", aliases = {"Kefoid"}, } m["omv-mao"] = { "Mao", 1351495, "omv", } m["omv-nom"] = { "nhóm ngôn ngữ Bắc Ometo", nil, "omv-ome", "Nhóm ngôn ngữ Bắc Ometo", "Bắc Ometo", } m["omv-ome"] = { "nhóm ngôn ngữ Ometo", 36310, "omv", "Nhóm ngôn ngữ Ometo", "Ometo", } m["oto"] = { "Otomian", 1270220, "omq-otp", } m["oto-otm"] = { "Otomi", nil, "oto", } m["paa"] = { "ngữ hệ Papua", 236425, "qfa-not", "Ngữ hệ Papua", "Papua", } m["paa-arf"] = { "Arafundi", 4783702, } m["paa-asa"] = { "Arai-Samaia", 48803569, } m["paa-bng"] = { "Baining", 748487, aliases = {"East New Britain"}, } m["paa-brd"] = { "ngữ hệ Thượng Tami", 1752158, "Ngữ hệ Thượng Tami", "Thượng Tami", aliases = {"Border", "Upper Tami"}, } m["paa-egb"] = { "East Geelvink Bay", 1497678, aliases = {"East Cenderawasih"}, } m["paa-eng"] = { "Engan", 3217449, } m["paa-iwm"] = { "ngữ hệ Iwam", 15147853, "Ngữ hệ Iwam", "Iwam", } m["paa-kag"] = { -- recode as ngf-kag? "Kainantu-Goroka", 3217463, "ngf", } m["paa-kiw"] = { "Kiwaian", 338449, } m["paa-kut"] = { "nhóm ngôn ngữ Kutubuan", 48767893, "paa-pag", "Nhóm ngôn ngữ Kutubuan", "Kutubuan", } m["paa-kwm"] = { "Kwomtari", 2075415, } m["paa-lkp"] = { "Lakes Plain", 6478969, } m["paa-lsp"] = { "Lower Sepik", 7061700, aliases = {"Nor-Pondo"}, } m["paa-mai"] = { "Mairasi", 6736896, } m["paa-msk"] = { "Sko", 953509, aliases = {"Skou"}, } m["paa-nbo"] = { "North Bougainville", 749496, } m["paa-nim"] = { "Nimboran", 12638426, } m["paa-nha"] = { "North Halmahera", nil, "paa-wpa", } m["paa-pag"] = { "ngữ hệ vùng vịnh Papua", 48803685, "Ngữ hệ vùng vịnh Papua", "vùng vịnh Papua", } m["paa-pau"] = { "Pauwasi", 7155496, } m["paa-ram"] = { "Ramu", 3442808, } m["paa-sbo"] = { "South Bougainville", 3217380, } m["paa-sen"] = { "Sentani", 17044584, "paa-wpa", } m["paa-sep"] = { "ngữ hệ Sepik", 3508772, "Ngữ hệ Sepik", "Sepik", } m["paa-tkw"] = { "Tor-Kwerba", 7827523, } m["paa-wpa"] = { "West Papuan", 1363026, } m["paa-yam"] = { "Yam", 15062272, aliases = {"Morehead and Upper Maro River"}, } m["paa-yua"] = { "Yuat", 8060096, } m["phi"] = { "nhóm ngôn ngữ Philippines", 947858, "poz", "Nhóm ngôn ngữ Philippines", "Philippines", } m["phi-kal"] = { "Kalamian", 3217466, "phi", aliases = {"Calamian"}, } m["poz"] = { "nhóm ngôn ngữ Mã Lai-Đa Đảo", 143158, "map", "Nhóm ngôn ngữ Mã Lai-Đa Đảo", "Mã Lai-Đa Đảo", } m["poz-aay"] = { "Admiralty Islands", 2701306, "poz-oce", } m["poz-bnn"] = { "nhóm ngôn ngữ Bắc Borneo", 1427907, "poz", "Nhóm ngôn ngữ Bắc Borneo", "Bắc Borneo", } m["poz-bre"] = { "nhóm ngôn ngữ Đông Barito", 2701314, "poz", "Nhóm ngôn ngữ Đông Barito", "Đông Barito", } m["poz-brw"] = { "nhóm ngôn ngữ Tây Barito", 2761679, "poz", "Nhóm ngôn ngữ Tây Barito", "Tây Barito", } m["poz-bss"] = { "nhóm ngôn ngữ Bali-Sasak-Sumbawa", 3396043, "poz-msa", "Nhóm ngôn ngữ Bali-Sasak-Sumbawa", "Bali-Sasak-Sumbawa", } m["poz-btk"] = { "nhóm ngôn ngữ Bungku-Tolaki", 3217381, "poz-clb", "Nhóm ngôn ngữ Bungku-Tolaki", "Bungku-Tolaki", } m["poz-cet"] = { "nhóm ngôn ngữ Mã Lai-Đa Đảo Trung-Đông", 2269883, "poz", "Nhóm ngôn ngữ Mã Lai-Đa Đảo Trung-Đông", "Mã lai-Đa Đảo Trung-Đông", } m["poz-clb"] = { "nhóm ngôn ngữ Celebes", 1078041, "poz", "Nhóm ngôn ngữ Celebes", "Celebes", } m["poz-cln"] = { "New Caledonian", 3091221, "poz-occ", } m["poz-cma"] = { "Central Maluku", 3217479, "poz-cet", } m["poz-hce"] = { "Halmahera-Cenderawasih", 2526616, "pqe", } m["poz-kal"] = { "nhóm ngôn ngữ Kaili-Pamona", 3217465, "poz-clb", "Nhóm ngôn ngữ Kaili-Pamona", "Kaili-Pamona", } m["poz-lgx"] = { "Lampungic", 49215, "poz-sus", } m["poz-mcm"] = { "nhóm ngôn ngữ Mã Lai-Chăm", nil, "poz-msa", "Nhóm ngôn ngữ Mã Lai-Chăm", "Mã Lai-Chăm", } m["poz-mic"] = { "nhóm ngôn ngữ Micronesia", 420591, "poz-occ", "Nhóm ngôn ngữ Micronesia", "Micronesia'," } m["poz-mly"] = { "nhóm ngôn ngữ Mã Lai", 662628, "poz-mcm", "Nhóm ngôn ngữ Mã Lai", "Mã Lai", } m["poz-msa"] = { "nhóm ngôn ngữ Mã Lai-Sumbawa", 1363818, "poz", "Nhóm ngôn ngữ Mã Lai-Sumbawa", "Mã Lai-Sumbawa", } m["poz-mun"] = { "nhóm ngôn ngữ Muna-Buton", 3037924, "poz-clb", "Nhóm ngôn ngữ Muna-Buton", "Muna-Buton", } m["poz-nws"] = { "nhóm ngôn ngữ Tây Bắc Sumatra", 2071308, "poz", "Nhóm ngôn ngữ Tây Bắc Sumatra", "Tây Bắc Sumatra", } m["poz-occ"] = { "nhóm ngôn ngữ Trung-Đông Châu Đại Dương", 2068435, "poz-oce", "Nhóm ngôn ngữ Trung-Đông Châu Đại Dương", "Trung-Đông Châu Đại Dương", } m["poz-oce"] = { "nhóm ngôn ngữ Châu Đại Dương", 324457, "pqe", "Nhóm ngôn ngữ Châu Đại Dương", "Châu Đại Dương", } m["poz-ocw"] = { "nhóm ngôn ngữ Tây Châu Đại Dương", 2701282, "poz-oce", "Nhóm ngôn ngữ Tây Châu Đại Dương", "Tây Châu Đại Dương", } m["poz-pcc"] = { "nhóm ngôn ngữ Trung Thái Bình Dương", 3130237, "poz-occ", "Nhóm ngôn ngữ Trung Thái Bình Dương", "Trung Thái Bình Dương", } m["poz-pep"] = { "Eastern Polynesian", 390979, "poz-pnp", } m["poz-pnp"] = { "nhóm ngôn ngữ Đa Đảo hạt nhân", 743851, "poz-pol", "Nhóm ngôn ngữ Đa Đảo hạt nhân", "Đa Đảo hạt nhân", } m["poz-pol"] = { "nhóm ngôn ngữ Đa Đảo", 390979, "poz-pcc", "Nhóm ngôn ngữ Đa Đảo", "Đa Đảo", } m["poz-san"] = { "nhóm ngôn ngữ Sabah", 3217517, "poz-bnn", "Nhóm ngôn ngữ Sabah", "Sabah", } m["poz-sbj"] = { "nhóm ngôn ngữ Sama-Bajaw", 2160409, "poz", "Nhóm ngôn ngữ Sama-Bajaw", "Sama-Bajaw", } m["poz-slb"] = { "nhóm ngôn ngữ Saluan-Banggai", 3217519, "poz-clb", "Nhóm ngôn ngữ Saluan-Banggai", "Saluan-Banggai", } m["poz-sls"] = { "nhóm ngôn ngữ Đông Nam Solomon", 3119671, "poz-occ", "Nhóm ngôn ngữ Đông Nam Solomon", "Đông Nam Solomon", } m["poz-ssw"] = { "South Sulawesi", 2778190, "poz-sus", } m["poz-sus"] = { "Sunda-Sulawesi", 319552, "poz", } m["poz-swa"] = { "North Sarawakan", 538569, "poz-bnn", } m["poz-tim"] = { "nhóm ngôn ngữ Timor", 7806987, "poz-cet", "Nhóm ngôn ngữ Timor", "Timor", } m["poz-tot"] = { "Tomini-Tolitoli", 3217541, "poz-clb", } m["poz-vnc"] = { "North-Central Vanuatu", 3039118, "poz-occ", } m["poz-wot"] = { "nhóm ngôn ngữ Wotu-Wolio", 1041317, "poz-clb", "Nhóm ngôn ngữ Wotu-Wolio", "Wotu-Wolio", } m["pqe"] = { "nhóm ngôn ngữ Mã Lai-Đa Đảo Đông", 2269883, "poz-cet", "Nhóm ngôn ngữ Mã Lai-Đa Đảo Đông", "Mã Lai-Đa Đảo Đông", } m["pra"] = { "Prakrit", 192170, "inc", aliases = {"Prakritic"}, protoLanguage = "inc-pra", } m["qfa-adc"] = { "Central Great Andamanese", nil, "qfa-adm", } m["qfa-adm"] = { "Great Andamanese", 3515103, } m["qfa-adn"] = { "Northern Great Andamanese", nil, "qfa-adm", } m["qfa-ads"] = { "Southern Great Andamanese", nil, "qfa-adm", } m["qfa-ain"] = { "ngữ hệ Ainu", 50111972, "Ngữ hệ Ainu", "Ainu", aliases = {"Ainu"}, } m["qfa-bej"] = { "nhóm ngôn ngữ Bối-Cát Triệu", nil, "qfa-bet", "Nhóm ngôn ngữ Bối-Cát Triệu", "Bối-Cát Triệu" } m["qfa-bet"] = { "nhóm ngôn ngữ Bối-Thái", nil, "qfa-tak", "Nhóm ngôn ngữ Bối-Thái", "Bối-Thái", aliases = {"Thái-Bối", "Daic-Beic", "Beic-Daic"}, } m["qfa-buy"] = { "nhóm ngôn ngữ Bố Ương", 1109927, "qfa-kra", "Nhóm ngôn ngữ Bố Ương", "Bố Ương", } m["qfa-cka"] = { "ngữ hệ Chukotka-Kamchatka", 33255, "Ngữ hệ Chukotka-Kamchatka", "Chukotka-Kamchatka", } m["qfa-ckn"] = { "nhóm ngôn ngữ Chukotka", 2606732, "qfa-cka", "Nhóm ngôn ngữ Chukotka", "Chukotka", } m["qfa-cnt"] = { "contact", 133253514, "qfa-not", } m["qfa-dgn"] = { "Dogon", 1234776, "nic", } m["qfa-dny"] = { "Dene-Yeniseian", 21103, aliases = {"Dené-Yeniseian"}, } m["qfa-gel"] = { "Gelao", 56401, "qfa-kra", } m["qfa-hur"] = { "Hurro-Urartian", 1144159, } m["qfa-iso"] = { "nhóm ngôn ngữ biệt lập", 33648, "qfa-not", "Nhóm ngôn ngữ biệt lập", "biệt lập", } m["qfa-kad"] = { "Kadu", -- considered either Nilo-Saharan or independent/none 1720989, } m["qfa-kms"] = { "nhóm ngôn ngữ Động-Thủy", 1023641, "qfa-tak", "Nhóm ngôn ngữ Động-Thủy", "Động-Thủy", } m["qfa-kor"] = { "ngữ hệ Triều Tiên", 11263525, "Ngữ hệ Triều Tiên", "Triều Tiên", } m["qfa-kra"] = { "Kra", 1022087, "qfa-tak", } m["qfa-lic"] = { "nhóm ngôn ngữ Hlai", 1023648, "qfa-tak", "Nhóm ngôn ngữ Hlai", "Hlai", aliases = {"Hlaic"}, } m["qfa-mal"] = { "Left May", 614468, "paa-asa", } m["qfa-mch"] = { -- used in both N and S America "Macro-Chibchan", 3438062, } m["qfa-mix"] = { "mixed", 33694, "qfa-not", } m["qfa-not"] = { "not a family", nil, "qfa-not", } m["qfa-onb"] = { "Be", nil, "qfa-bet", aliases = {"Ong-Be", "Beic"}, } m["qfa-ong"] = { "ngữ hệ Önge", 2090575, aliases = {"Angan", "South Andamanese", "Jarawa-Onge"}, } m["qfa-sub"] = { "ngôn ngữ cơ tầng", 20730913, "qfa-not", } m["qfa-tak"] = { "ngữ hệ Kra-Dai", 34171, "Ngữ hệ Kra-Dai", "Kra-Dai", aliases = {"Tai-Kadai", "Kadai"}, } m["qfa-tap"] = { "Timor-Alor-Pantar", 16590002, } m["qfa-tor"] = { "Torricelli", 1333831, } m["qfa-tyn"] = { "ngữ hệ Tyrseni", 1344038, "Ngữ hệ Tyrseni", "Tyrseni", } m["qfa-xgs"] = { "ngữ hệ Tiên Ti-Mông Cổ", 108887939, "Ngữ hệ Tiên Ti-Mông Cổ", "Tiên Ti-Mông Cổ", } m["qfa-xgx"] = { "nhóm ngôn ngữ Liên Mông Cổ", 107619002, "qfa-xgs", "Nhóm ngôn ngữ Liên Mông Cổ", "Liên Mông Cổ", } m["qfa-yen"] = { "Yeniseian", 27639, "qfa-dny", aliases = {"Yeniseic", "Yenisei-Ostyak"}, } m["qfa-yno"] = { "Northern Yeniseian", nil, "qfa-yen", } m["qfa-yso"] = { "Southern Yeniseian", nil, "qfa-yen", } m["qfa-yuk"] = { "ngữ hệ Yukaghir", 34164, "Ngữ hệ Yukaghir", "Yukaghir", aliases = {"Yukagir", "Jukagir"}, } m["qwe"] = { "ngữ hệ Quechua", 5218, "Ngữ hệ Quechua", "Quechua", } m["raj"] = { "nhóm ngôn ngữ Rajasthan", 13196, "inc-wes", "Nhóm ngôn ngữ Rajasthan", "Rajasthan", protoLanguage = "inc-ogu", } m["roa"] = { "nhóm ngôn ngữ Rôman", 19814, "itc", aliases = {"Rôman", "Latinh", "Tân Latinh"}, "Nhóm ngôn ngữ Rôman", "Rôman", protoLanguage = "la", } m["roa-asl"] = { "Asturleonese", 35390, "roa-ibe", protoLanguage = "roa-ole", } m["roa-cas"] = { "nhóm ngôn ngữ Castilla", 71924, "roa-ibe", "Nhóm ngôn ngữ Castilla", "Castilla", aliases = {"Castillian", "Castilic", "Castillic"}, protoLanguage = "osp", } m["roa-dal"] = { "Dalmatian Romance", 97646077, "roa-itd", } m["roa-eas"] = { "Eastern Romance", 147576, "roa", } m["roa-ibe"] = { "nhóm ngôn ngữ Iberia-Rôman", 749533, "roa-wes", "Nhóm ngôn ngữ Iberia-Rôman", "Iberia-Rôman", aliases = {"Iberia-Rôman", "Tây Iberia-Rôman"}, } m["roa-wes"] = { "nhóm ngôn ngữ Tây Rôman", 2714388, "roa-iwr", "Nhóm ngôn ngữ Tây Rôman", "Tây Rôman", } m["roa-iwr"] = { "nhóm ngôn ngữ Ý-Tây Rôman", 112608, "roa", "Nhóm ngôn ngữ Ý-Tây Rôman", "Ý-Tây Rôman", aliases = {"Ý-Tây"}, } m["roa-itd"] = { "Italo-Dalmatian", 3313381, "roa", } m["roa-git"] = { "Gallo-Italic", 516074, "roa", } m["roa-oil"] = { "Oïl", 37351, "roa", protoLanguage = "fro", } m["roa-ocr"] = { "Occitano-Romance", 599958, "roa", } m["roa-rhe"] = { "Rhaeto-Romance", 515593, "roa", } --[=[ Exceptional language and family codes for South American Indian languages can use the prefix "sai-", though "sai" is no longer itself a family code. ]=]-- m["sai-ara"] = { "Araucanian", 626630, } m["sai-aym"] = { "Aymaran", 33010, } m["sai-bar"] = { "Barbacoan", 807304, aliases = {"Barbakoan"}, } m["sai-bor"] = { "Boran", 43079266, } m["sai-cah"] = { "Cahuapanan", 1025793, } m["sai-car"] = { "ngữ hệ Carib", 33090, "Ngữ hệ Carib", "Carib", aliases = {"Cariban"}, } m["sai-cer"] = { "Cerrado", 98078151, "sai-jee", aliases = {"Amazonian Jê"}, } m["sai-chc"] = { "Chocoan", 1075616, aliases = {"Choco", "Chocó"}, } m["sai-cho"] = { "Chonan", 33019, aliases = {"Chon"}, } m["sai-cje"] = { "Central Jê", 18010843, "sai-cer", aliases = {"Akuwẽ"}, } m["sai-cpc"] = { "Chapacuran", 1062626, } m["sai-crn"] = { "Charruan", 3112423, aliases = {"Charrúan"}, } m["sai-ctc"] = { "Catacaoan", 5051139, } m["sai-guc"] = { "Guaicuruan", 1974973, "sai-mgc", aliases = {"Guaicurú", "Guaycuruana", "Guaikurú", "Guaycuruano", "Guaykuruan", "Waikurúan"}, } m["sai-guh"] = { "Guahiban", 944056, aliases = {"Guahiboan", "Guajiboan", "Wahivoan"}, } m["sai-gui"] = { "Guianan", nil, "sai-car", aliases = {"Guianan Carib", "Guiana Carib"}, } m["sai-har"] = { "Harákmbut", 1584402, "sai-hkt", aliases = {"Harákmbet"}, } m["sai-hkt"] = { "Harákmbut-Katukinan", 17107635, } m["sai-hrp"] = { "ngữ hệ Huarpe", 1578336, "Ngữ hệ Huarpe", "Huarpe", aliases = {"Warpean", "Huarpe", "Warpe"}, } m["sai-jee"] = { "Jê", 1483594, "sai-mje", aliases = {"Gê", "Jean", "Gean", "Jê-Kaingang", "Ye"}, } m["sai-jir"] = { "Jirajaran", 3028651, aliases = {"Hiraháran"}, } m["sai-jiv"] = { "ngữ hệ Jivaro", 1393074, "Ngữ hệ Jivaro", "Jivaro", aliases = {"Hívaro", "Jibaro", "Jibaroana", "Jívaro"}, } m["sai-ktk"] = { "Katukinan", 2636000, "sai-hkt", aliases = {"Catuquinan"}, } m["sai-kui"] = { "Kuikuroan", nil, "sai-car", aliases = {"Kuikuro", "Nahukwa"}, } m["sai-map"] = { "Mapoyan", 61096301, "sai-ven", aliases = {"Mapoyo", "Mapoyo-Yabarana", "Mapoyo-Yavarana", "Mapoyo-Yawarana"}, } m["sai-mas"] = { "Mascoian", 1906952, aliases = {"Mascoyan", "Maskoian", "Enlhet-Enenlhet"}, } m["sai-mgc"] = { "Mataco-Guaicuru", 255512, } m["sai-mje"] = { "Macro-Jê", 887133, aliases = {"Macro-Gê"}, } m["sai-mtc"] = { "Matacoan", 2447424, "sai-mgc", } m["sai-mur"] = { "Muran", 33826, aliases = {"Mura"}, } m["sai-nad"] = { "Nadahup", 1856439, aliases = {"Makú", "Macú", "Vaupés-Japurá"}, } m["sai-nje"] = { "Northern Jê", 98078225, "sai-cer", aliases = {"Core Jê"}, } m["sai-nmk"] = { "Nambikwaran", 15548027, aliases = {"Nambicuaran", "Nambiquaran", "Nambikuaran"}, } m["sai-otm"] = { "Otomacoan", 3217503, aliases = {"Otomákoan", "Otomakoan"}, } m["sai-pan"] = { "nhóm ngôn ngữ Pano", 1544537, "sai-pat", "Nhóm ngôn ngữ Pano", "Pano", aliases = {"Panoan"}, } m["sai-pat"] = { "ngữ hệ Pano-Tacana", 2475746, "Ngữ hệ Pano-Tacana", "Pano-Tacana", aliases = {"Pano-Tacana", "Pano-Takana", "Páno-Takána", "Pano-Takánan"}, } m["sai-pek"] = { "Pekodian", 107451736, "sai-car", aliases = {"South Amazonian Carib", "Southern Cariban", "Pekodi"}, } m["sai-pem"] = { "Pemongan", nil, "sai-ven", aliases = {"Pemong", "Pemóng", "Purukoto"}, } m["sai-prk"] = { "Parukotoan", 107451482, "sai-car", aliases = {"Parukoto"}, } m["sai-sje"] = { "Southern Jê", 98078245, "sai-jee", } m["sai-tac"] = { "Tacanan", 3113762, "sai-pat", } m["sai-tar"] = { "Taranoan", 105097814, "sai-gui", aliases = {"Trio", "Tarano"}, } m["sai-tuc"] = { "Tucanoan", 788144, } m["sai-tyu"] = { "Ticuna-Yuri", 4467010, } m["sai-ucp"] = { "Uru-Chipaya", 2475488, aliases = {"Uru-Chipayan"}, } m["sai-ven"] = { "Venezuelan Cariban", nil, "sai-car", aliases = {"Venezuelan Carib", "Venezuelan", "Venezuelano"}, } m["sai-wic"] = { "Wichí", 3027047, } m["sai-wit"] = { "Witotoan", 43079317, aliases = {"Huitotoan", "Uitotoan"}, } m["sai-ynm"] = { "Yanomami", nil, aliases = {"Yanomam", "Shamatari", "Yamomami", "Yanomaman"}, } m["sai-yuk"] = { "Yukpan", nil, "sai-car", aliases = {"Yukpa", "Yukpano", "Yukpa-Japreria"}, } m["sai-zam"] = { "Zamucoan", 3048461, aliases = {"Samúkoan"}, } m["sai-zap"] = { "Zaparoan", 33911, aliases = {"Záparoan", "Saparoan", "Sáparoan", "Záparo", "Zaparoano", "Zaparoana"}, } m["sal"] = { "ngữ hệ Salish", 33985, "Ngữ hệ Salish", "Salish", } m["sdv"] = { "Eastern Sudanic", 2036148, "ssa", } m["sdv-bri"] = { "Bari", nil, "sdv-nie", } m["sdv-daj"] = { "Daju", 956724, "sdv", } m["sdv-dnu"] = { "Dinka-Nuer", nil, "sdv-niw", } m["sdv-eje"] = { "Eastern Jebel", 3408878, "sdv", } m["sdv-kln"] = { "Kalenjin", 637228, "sdv-nis", } m["sdv-lma"] = { "Lotuko-Maa", nil, "sdv-nie", } m["sdv-lon"] = { "Northern Luo", nil, "sdv-luo", } m["sdv-los"] = { "Southern Luo", 7570103, "sdv-luo", } m["sdv-luo"] = { "Luo", nil, "sdv-niw", } m["sdv-nes"] = { "Northern Eastern Sudanic", 4810496, "sdv", aliases = {"Astaboran", "Ek Sudanic"}, } m["sdv-nie"] = { "Eastern Nilotic", 153795, "sdv-nil", } m["sdv-nil"] = { "Nilotic", 513408, "sdv", } m["sdv-nis"] = { "Southern Nilotic", 1552410, "sdv-nil", } m["sdv-niw"] = { "Western Nilotic", 3114989, "sdv-nil", } m["sdv-nma"] = { "Nandi-Markweta", nil, "sdv-kln", } m["sdv-nyi"] = { "Nyima", 11688746, "sdv-nes", aliases = {"Nyimang"}, } m["sdv-tmn"] = { "Taman", 3408873, "sdv-nes", aliases = {"Tamaic"}, } m["sdv-ttu"] = { "Teso-Turkana", 7705551, "sdv-nie", aliases = {"Ateker"}, } m["sel"] = { "nhóm ngôn ngữ Selkup", 34008, "syd", "Nhóm ngôn ngữ Selkup", "Selkup", } m["sem"] = { "nhóm ngôn ngữ Semit", 34049, "afa", "Nhóm ngôn ngữ Semit", "Semit", } m["sem-ara"] = { "nhóm ngôn ngữ Aram", 28602, "sem-nwe", "Nhóm ngôn ngữ Aram", "Aram", protoLanguage = "arc", } m["sem-arb"] = { "nhóm ngôn ngữ Ả Rập", 164667, "sem-cen", "Nhóm ngôn ngữ Ả Rập", "Ả Rập", protoLanguage = "ar", } m["sem-are"] = { "nhóm ngôn ngữ Aram Đông", 3410322, "sem-ara", "Nhóm ngôn ngữ Aram Đông", "Aram Đông", } m["sem-arw"] = { "nhóm ngôn ngữ Aram Tây", 3394214, "sem-ara", "Nhóm ngôn ngữ Aram Tây", "Aram Tây", } m["sem-ase"] = { "Southeastern Aramaic", 3410322, "sem-are", } m["sem-can"] = { "nhóm ngôn ngữ Canaan", 747547, "sem-nwe", "Nhóm ngôn ngữ Canaan", "Canaan", } m["sem-cen"] = { "nhóm ngôn ngữ Semit Trung", 3433228, "sem-wes", "Nhóm ngôn ngữ Semit Trung", "Semit Trung", } m["sem-cna"] = { "nhóm ngôn ngữ Tân Aram Trung", 3410322, "sem-are", "Nhóm ngôn ngữ Tân Aram Trung", "Tân Aram Trung", } m["sem-eas"] = { "nhóm ngôn ngữ Semit Đông", 164273, "sem", "Nhóm ngôn ngữ Semit Đông", "Semit Đông", } m["sem-eth"] = { "nhóm ngôn ngữ Semit Ethiopia", 163629, "sem-wes", "Nhóm ngôn ngữ Semit Ethiopia", "Semit Ethiopia", aliases = {"Afro-Semitic", "Ethiopian", "Ethiopic", "Ethiosemitic"}, } m["sem-nna"] = { "Northeastern Neo-Aramaic", 2560578, "sem-are", } m["sem-nwe"] = { "nhóm ngôn ngữ Semit Tây Bắc", 162996, "sem-cen", "Nhóm ngôn ngữ Semit Tây Bắc", "Semit Tây Bắc", } m["sem-osa"] = { "Old South Arabian", 35025, "sem-cen", aliases = {"Epigraphic South Arabian", "Sayhadic"}, } m["sem-sar"] = { "nhóm ngôn ngữ Nam Ả Rập hiện đại", 1981908, "sem-wes", "Nhóm ngôn ngữ Nam Ả Rập hiện đại", "Nam Ả Rập hiện đại", } m["sem-wes"] = { "nhóm ngôn ngữ Semit Tây", 124901, "sem", "Nhóm ngôn ngữ Semit Tây", "Semit Tây", } m["sgn"] = { "sign", 34228, "qfa-not", } m["sgn-fsl"] = { "French Sign Languages", 5501921, "sgn", } m["sgn-gsl"] = { "German Sign Languages", 5551235, "sgn", } m["sgn-jsl"] = { "Japanese Sign Languages", 11722508, "sgn", } m["sio"] = { "Siouan", 34181, "nai-sca", } m["sio-dhe"] = { "Dhegihan", 3217420, "sio-msv", } m["sio-dkt"] = { "nhóm ngôn ngữ Dakota", 17188640, "sio-msv", "Nhóm ngôn ngữ Dakota", "Dakota", } m["sio-mor"] = { "Missouri River Siouan", 26807266, "sio", } m["sio-msv"] = { "Mississippi Valley Siouan", 17188638, "sio", } m["sio-ohv"] = { "Ohio Valley Siouan", 21070931, "sio", } m["sit"] = { "ngữ hệ Hán-Tạng", 45961, "Ngữ hệ Hán-Tạng", "Hán-Tạng", } m["sit-aao"] = { "Ao", 615474, "sit", aliases = {"Central Naga languages"}, } m["sit-alm"] = { "Almora", nil, "sit-whm", } m["sit-bai"] = { "nhóm ngôn ngữ Bạch", 35103, "sit-mba", "Nhóm ngôn ngữ Bạch", "Bạch", aliases = {"Bai"}, } m["sit-bdi"] = { "nhóm ngôn ngữ Bod", 1814078, "sit", "Nhóm ngôn ngữ Bod", "Bod", } m["sit-cln"] = { "nhóm ngôn ngữ Thái-Long", 107182612, "sit-mba", "Nhóm ngôn ngữ Thái-Long", "Thái-Long", aliases = {"Cai–Long", "Ta–Li", "Ta-Li"}, } m["sit-dhi"] = { "Dhimalish", 1207648, "sit", } m["sit-ebo"] = { "nhóm ngôn ngữ Bod Đông", 56402, "sit-bdi", "Nhóm ngôn ngữ Bod Đông", "Bod Đông", } m["sit-gma"] = { "nhóm ngôn ngữ Đại Magar", 55612963, "sit", "Nhóm ngôn ngữ Đại Magar", "Đại Magar", } m["sit-gsi"] = { "Greater Siangic", 52698851, "sit", } m["sit-hrs"] = { "Hrusish", 1632501, "sit", aliases = {"Southeast Kamengic"}, } m["sit-jnp"] = { "Jingphoic", nil, "sit-jpl", aliases = {"Jingpho"}, } m["sit-jpl"] = { "Kachin-Luic", 1515454, "tbq-bkj", aliases = {"Jingpho-Luish", "Jingpho-Asakian", "Kachinic"}, } m["sit-kch"] = { "Konyak-Chang", nil, "sit-kon", } m["sit-kha"] = { "nhóm ngôn ngữ Kham", 33305, "sit-gma", "Nhóm ngôn ngữ Kham", "Kham", } m["sit-khb"] = { "Kho-Bwa", 6401917, "sit", aliases = {"Bugunish", "Kamengic"}, } m["sit-kic"] = { "Central Kiranti", nil, "sit-kir", } m["sit-kie"] = { "Eastern Kiranti", nil, "sit-kir", } m["sit-kin"] = { "Kinnauric", nil, "sit-whm", aliases = {"Kinnauri"}, } m["sit-kir"] = { "Kiranti", 922148, "sit", } m["sit-kiw"] = { "Western Kiranti", 922148, "sit-kir", } m["sit-kon"] = { "Konyak", 774590, "tbq-bkj", aliases = {"Konyakian", "Northern Naga"}, } m["sit-kyk"] = { "Kyirong-Kagate", 6450957, "sit-tib", } m["sit-lab"] = { "nhóm ngôn ngữ Ladakh-Balti", 6450957, "sit-tib", "Nhóm ngôn ngữ Ladakh-Balti", "Ladakh-Balti", } m["sit-las"] = { "Lahuli-Spiti", 6473510, "sit-tib", } m["sit-luu"] = { "Luish", 55621439, "sit-jpl", aliases = {"Asakian", "Sak"}, } m["sit-mar"] = { "Maringic", nil, "sit-tma", } m["sit-mba"] = { "nhóm ngôn ngữ Đại Bạch", 16963847, "sit-sba", "Nhóm ngôn ngữ Đại Bạch", "Đại Bạch", aliases = {"Macro-Bai", "Greater Bai"}, } m["sit-mdz"] = { "Midzu", 6843504, "sit", aliases = {"Geman", "Midzuish", "Miju-Meyor", "Southern Mishmi"}, } m["sit-mnz"] = { "Mondzish", 6898839, "tbq-lob", aliases = {"Mangish"}, } m["sit-mru"] = { "Mruic", 16908870, "sit", aliases = {"Mru-Hkongso"}, } m["sit-nas"] = { "Naish", 25047956, "sit-nax", } m["sit-nax"] = { "Naic", 6982999, "tbq-buq", aliases = {"Naxish"}, } m["sit-nba"] = { "nhóm ngôn ngữ Bạch Bắc", 122463830, "sit-bai", "Nhóm ngôn ngữ Bạch Bắc", "Bạch Bắc", aliases = {"Northern Bai"}, } m["sit-new"] = { "Newaric", 55625069, "sit", } m["sit-nng"] = { "nhóm ngôn ngữ Nung", 1515482, "sit", "Nhóm ngôn ngữ Nung", "Nung", aliases = {"Nung"}, } m["sit-qia"] = { "Qiangic", 1636765, "tbq-buq", } m["sit-rgy"] = { "Rgyalrongic", 56936, "sit-qia", aliases = {"Jiarongic"}, } m["sit-sba"] = { "nhóm ngôn ngữ Hán-Bạch", nil, "sit", "Nhóm ngôn ngữ Hán-Bạch", "Hán-Bạch", aliases = {"Sino-Bai", "Greater Bai"}, } m["sit-tam"] = { "nhóm ngôn ngữ Tamang", 3309439, "sit", "Nhóm ngôn ngữ Tamang", "Tamang", aliases = {"West Bodish"}, } m["sit-tan"] = { "Tani", 3217538, "sit", } m["sit-tib"] = { "nhóm ngôn ngữ Tạng", 1641150, "sit-bdi", "Nhóm ngôn ngữ Tạng", "Tạng", protoLanguage = "otb", } m["sit-tja"] = { "nhóm ngôn ngữ Thổ Gia", nil, "sit", "Nhóm ngôn ngữ Thổ Gia", "Thổ Gia", } m["sit-tma"] = { "Tangkhul-Maring", nil, "sit", } m["sit-tng"] = { "nhóm ngôn ngữ Tangkhul", 1516657, "sit-tma", "Nhóm ngôn ngữ Tangkhul", "Tangkhul", aliases = {"Tangkhul"}, } m["sit-tno"] = { "Tangsa-Nocte", nil, "sit-kon", } m["sit-tsk"] = { "Tshangla", nil, "sit-bdi", } m["sit-whm"] = { "West Himalayish", 2301695, "sit", } m["sit-zem"] = { "Zeme", 189291, "sit", aliases = {"Zeliangrong", "Zemeic"}, } m["sla"] = { "nhóm ngôn ngữ gốc Slav", 23526, "ine-bsl", "Nhóm ngôn ngữ gốc Slav", "gốc Slav", aliases = {"Slavonic"}, } m["smi"] = { "nhóm ngôn ngữ Sami", 56463, "urj", "Nhóm ngôn ngữ Sami", "Sami", aliases = {"Saami", "Samic", "Saamic"}, } m["son"] = { "nhóm ngôn ngữ Songhay", 505198, "ssa", "Nhóm ngôn ngữ Songhay", "Songhay", aliases = {"Songhai"}, } m["sqj"] = { "nhóm ngôn ngữ Albani", 8748, "ine", "Nhóm ngôn ngữ Albani", "Albani", } m["ssa"] = { "ngữ hệ Nin-Sahara", -- possibly not a genetic grouping 33705, "Ngữ hệ Nin-Sahara", "Nin-Sahara", } m["ssa-fur"] = { "Fur", 2989512, "ssa", } m["ssa-klk"] = { "Kuliak", 1791476, "ssa", aliases = {"Rub"}, } m["ssa-kom"] = { "nhóm ngôn ngữ Koman", 1781084, "ssa", "Nhóm ngôn ngữ Koman", "Koman", } m["ssa-sah"] = { "Saharan", 1757661, "ssa", } m["syd"] = { "nhóm ngôn ngữ Samoyed", 34005, "urj", "Nhóm ngôn ngữ Samoyed", "Samoyed", aliases = {"Samoyed", "Samodeic"}, } m["tai"] = { "nhóm ngôn ngữ Thái", 749720, "qfa-bet", "Nhóm ngôn ngữ Thái", "Thái", aliases = {"Daic"}, } m["tai-wen"] = { "nhóm ngôn ngữ Văn Ma-Thái Tây Nam", nil, "tai", "Nhóm ngôn ngữ Văn Ma-Thái Tây Nam", "Văn Ma-Thái Tây Nam", } m["tai-tay"] = { "nhóm ngôn ngữ Tày", nil, "tai-wen", "Nhóm ngôn ngữ Tày", "Tày", } m["tai-sap"] = { "nhóm ngôn ngữ Sa Pa-Thái Tây Nam", nil, "tai-wen", "Nhóm ngôn ngữ Sa Pa-Thái Tây Nam", "Sa Pa-Thái Tây Nam", aliases = {"Sapa-Thai"}, } m["tai-swe"] = { "nhóm ngôn ngữ Thái Tây Nam", 3447105, "tai-sap", "Nhóm ngôn ngữ Thái Tây Nam", "Thái Tây Nam", } m["tai-cho"] = { "nhóm ngôn ngữ Thái Sùng Tả", 13216, "tai", "Nhóm ngôn ngữ Thái Sùng Tả", "Thái Sùng Tả", } m["tai-cen"] = { "nhóm ngôn ngữ Thái Trung tâm", 5061891, "tai", "Nhóm ngôn ngữ Thái Trung tâm", "Thái Trung tâm", } m["tai-nor"] = { "nhóm ngôn ngữ Thái Bắc", 7059014, "tai", "Nhóm ngôn ngữ Thái Bắc", "Thái Bắc" } m["tbq"] = { "nhóm ngôn ngữ Tạng-Miến", 34064, "sit", "Nhóm ngôn ngữ Tạng-Miến", "Tạng-Miến", } m["tbq-anp"] = { "nhóm ngôn ngữ Angami-Pochuri", 530460, "sit", "Nhóm ngôn ngữ Angami-Pochuri", "Angami-Pochuri", } m["tbq-axi"] = { "Axioid", nil, "tbq-sel", } m["tbq-bdg"] = { "Bodo-Garo", 4090000, "tbq-bkj", } m["tbq-bis"] = { "Bisoid", 48844742, "tbq-slo", } m["tbq-bka"] = { "Bi-Ka", 12627890, "tbq-slo", } m["tbq-bkj"] = { "Sal", 889900, "sit", -- Brahmaputran appears to be Glottolog's term aliases = {"Bodo-Konyak-Jinghpaw", "Brahmaputran", "Jingpho-Konyak-Bodo"}, } m["tbq-brm"] = { "nhóm ngôn ngữ Miến", 865713, "tbq-lob", "Nhóm ngôn ngữ Miến", "Miến", } m["tbq-buq"] = { "nhóm ngôn ngữ Miến-Khương", 16056278, "sit", "Nhóm ngôn ngữ Miến-Khương", "Miến-Khương", aliases = {"Đông Miến-Khương"}, } m["tbq-drp"] = { "Downriver Phula", 7188378, "tbq-rph", } m["tbq-han"] = { "nhóm ngôn ngữ Hà Nhì", 17004185, "tbq-slo", "Nhóm ngôn ngữ Hà Nhì", "Hà Nhì", aliases = {"Hanoid"}, } m["tbq-hph"] = { "Highland Phula", nil, "tbq-sel", } m["tbq-jin"] = { "Jino", 6202716, "tbq-slo", } m["tbq-kzh"] = { "Kazhuoish", 48834669, "tbq-lol", } m["tbq-kuk"] = { "nhóm ngôn ngữ Kuki-Chin", 832413, "sit", "Nhóm ngôn ngữ Kuki-Chin", "Kuki-Chin", } m["tbq-lal"] = { "Lalo", 56548, "tbq-lso", } m["tbq-lho"] = { "Lahoish", nil, "tbq-lol", } m["tbq-llo"] = { "Lipo-Lolopo", nil, "tbq-lso", } m["tbq-lob"] = { "nhóm ngôn ngữ Lô Lô–Miến", 1635712, "tbq-buq", "Nhóm ngôn ngữ Lô Lô–Miến", "Lô Lô–Miến", } m["tbq-lol"] = { "nhóm ngôn ngữ Lô Lô", 37035, "tbq-lob", "Nhóm ngôn ngữ Lô Lô", "Lô Lô", aliases = {"Loloish", "Yi", "Ngwi", "Nisoic"}, } m["tbq-lso"] = { "Lisoish", 6559055, "tbq-lol", } m["tbq-lwo"] = { "Lawoish", 48847673, "tbq-lol", } m["tbq-muj"] = { "Muji", 11221327, "tbq-hph", } m["tbq-nas"] = { "Nasoid", nil, "tbq-nlo", } m["tbq-nis"] = { "Nisu", 56404, "tbq-nlo", } m["tbq-nlo"] = { "nhóm ngôn ngữ Lô Lô Bắc", 7058676, "tbq-nso", "Nhóm ngôn ngữ Lô Lô Bắc", "Lô Lô Bắc", aliases = {"Northern Loloish"}, } m["tbq-nso"] = { "Nisoish", 56990, "tbq-lol", } m["tbq-nus"] = { "Nusoish", 114245231, "tbq-lol", } m["tbq-phw"] = { "Phowa", 7187959, "tbq-hph", } m["tbq-rph"] = { "Riverine Phula", nil, "tbq-sel", } m["tbq-sel"] = { "nhóm ngôn ngữ Lô Lô Đông Nam", 16111894, "tbq-nso", "Nhóm ngôn ngữ Lô Lô Đông Nam", "Lô Lô Đông Nam", aliases = {"Southeastern Loloish"}, } m["tbq-sil"] = { "Siloid", 60787071, "tbq-slo", } m["tbq-slo"] = { "nhóm ngôn ngữ Lô Lô Nam", 5649340, "tbq-lol", "Nhóm ngôn ngữ Lô Lô Nam", "Lô Lô Nam", aliases = {"Southern Loloish"}, } m["tbq-tal"] = { "Taloid", 48804018, "tbq-lso", } m["tbq-urp"] = { "Upriver Phula", 7187058, "tbq-rph", } m["trk"] = { "ngữ hệ Turk", 34090, "Ngữ hệ Turk", "Turk", } m["trk-cmn"] = { "nhóm ngôn ngữ Turk chung", 1126028, "trk", "Nhóm ngôn ngữ Turk chung", "Turk chung", aliases = {"Turk Shaz"}, } m["trk-kar"] = { "nhóm ngôn ngữ Karluk", 703173, "trk-cmn", "Nhóm ngôn ngữ Karluk", "Karluk", aliases = {"Qarluq", "Duy Ngô Nhĩ-Uzbek", "Đông Nam Turk"}, varieties = {"Đông Turk"}, } m["trk-kbu"] = { "nhóm ngôn ngữ Kipchak-Bulgar", 3512539, "trk-kip", "Nhóm ngôn ngữ Kipchak-Bulgar", "Kipchak-Bulgar", aliases = {"Ural", "Uralo-Caspi"}, } m["trk-kcu"] = { "Kipchak-Cuman", 4370412, "trk-kip", aliases = {"Ponto-Caspian"}, } m["trk-kip"] = { "nhóm ngôn ngữ Kipchak", 1339898, "trk-cmn", "Nhóm ngôn ngữ Kipchak", "Kipchak", otherNames = {"Tây Turk"}, aliases = {"Kypchak", "Qypchaq", "Tây Bắc Turk", "Tây Turk"}, protoLanguage = "qwm", } m["trk-kkp"] = { "Kyrgyz-Kipchak", 4221189, "trk-kip", } m["trk-kno"] = { "nhóm ngôn ngữ Kipchak-Nogai", 4326954, "trk-kip", "Nhóm ngôn ngữ Kipchak-Nogai", "Kipchak-Nogai", aliases = {"Aralo-Caspi"}, } m["trk-nsb"] = { "North Siberian Turkic", 4537269, "trk-sib", aliases = {"Northern Siberian Turkic"}, } m["trk-ogr"] = { "nhóm ngôn ngữ Oghur", 1422731, "trk", "Nhóm ngôn ngữ Oghur", "Oghur", aliases = {"Lir-Turk", "r-Turk"}, } m["trk-ogz"] = { "nhóm ngôn ngữ Oghuz", 494600, "trk-cmn", "Nhóm ngôn ngữ Oghuz", "Oghuz", aliases = {"nhóm ngôn ngữ Turk Tây Nam"}, } m["trk-sib"] = { "Siberian Turkic", 354353, "trk-cmn", otherNames = {"Northern Turkic"}, aliases = {"Northeastern Turkic"}, } m["trk-ssb"] = { "South Siberian Turkic", nil, "trk-sib", aliases = {"Southern Siberian Turkic"}, } m["tup"] = { "ngữ hệ Tupi", 34070, "Ngữ hệ Tupi", "Tupi", aliases = {"Tupi"}, } m["tup-gua"] = { "Tupi-Guarani", 148610, "tup", aliases = {"Tupí-Guaraní"}, } m["tuw"] = { "ngữ hệ Tungus", 34230, "Ngữ hệ Tungus", "Tungus", aliases = {"Mãn-Tungus"}, } m["tuw-ewe"] = { "nhóm ngôn ngữ Ewenic", 105889448, "tuw", "Nhóm ngôn ngữ Ewenic", "Ewenic", aliases = {"Bắc Tungus"}, } m["tuw-jrc"] = { "nhóm ngôn ngữ Nữ Chân", 105889432, "tuw", "Nhóm ngôn ngữ Nữ Chân", "Nữ Chân", aliases = {"Mãn"}, } m["tuw-nan"] = { "Nanaic", 105889264, "tuw", } m["tuw-udg"] = { "nhóm ngôn ngữ Udeghe", 105889266, "tuw", "Nhóm ngôn ngữ Udeghe", "Udeghe", } m["urj"] = { "ngữ hệ Ural", 34113, "Ngữ hệ Ural", "Ural", varieties = {"Finn-Ugria"}, } m["urj-fin"] = { "nhóm ngôn ngữ Finn", 33328, "urj", "Nhóm ngôn ngữ Finn", "Finn", aliases = {"Baltic-Finn", "Balto-Finn", "Fenn"}, } m["urj-mdv"] = { "nhóm ngôn ngữ Mordvin", 627313, "urj", "Nhóm ngôn ngữ Mordvin", "Mordvin", } m["urj-prm"] = { "Permic", 161493, "urj", } m["urj-ugr"] = { "Ugric", 156631, "urj", } m["wak"] = { "ngữ hệ Wakashan", 60069, "Ngữ hệ Wakashan", "Wakashan", } m["wen"] = { "Sorbian", 25442, "zlw", aliases = {"Lusatian", "Wendish"}, } m["xgn"] = { "ngữ hệ Mông Cổ", 33750, "qfa-xgs", "Ngữ hệ Mông Cổ", "Mông Cổ", aliases = {"Mông Cổ"}, } m["xgn-cen"] = { "nhóm ngôn ngữ Trung Mông Cổ", 28719447, "xgn", "Nhóm ngôn ngữ Trung Mông Cổ", "Trung Mông Cổ", protoLanguage = "xng-lat", } m["xgn-sou"] = { "nhóm ngôn ngữ Nam Mông Cổ", nil, "xgn", "Nhóm ngôn ngữ Nam Mông Cổ", "Nam Mông Cổ", protoLanguage = "xng-ear", } m["xgn-shr"] = { "nhóm ngôn ngữ Shirongol", 107539435, "xgn-sou", "Nhóm ngôn ngữ Shirongol", "Shirongol", } m["xme"] = { "Median", nil, "ira-mpr", protoLanguage = "xme-old", } m["xme-ttc"] = { "Tatic", nil, "xme", } m["xnd"] = { "Na-Dene", 26986, "qfa-dny", aliases = {"Na-Dené"}, } m["xsc"] = { "nhóm ngôn ngữ Scythia", nil, "ira-nei", "Nhóm ngôn ngữ Scythia", "Scythia", } m["xsc-sak"] = { "Sakan", nil, "xsc-skw", aliases = {"Saka"}, } m["xsc-sar"] = { "nhóm ngôn ngữ Sarmatia", nil, "xsc", "Nhóm ngôn ngữ Sarmatia", "Sarmatia", } m["xsc-skw"] = { "nhóm ngôn ngữ Saka-Wakhi", nil, "xsc", "Nhóm ngôn ngữ Saka-Wakhi", "Saka-Wakhi", } m["yok"] = { "Yokuts", 34249, "nai-you", aliases = {"Yokutsan", "Mariposan", "Mariposa"}, } m["ypk"] = { "Yupik", 27970, "esx-esk", aliases = {"Yup'ik", "Yuit"}, } m["yrk"] = { "Nenets", 36452, "syd", } m["zhx"] = { "nhóm ngôn ngữ Hán", 33857, "sit-sba", "Nhóm ngôn ngữ Hán", "Hán", aliases = {"Sinitic", "Chinese"}, protoLanguage = "och", } m["zhx-com"] = { "Mân ven biển", 20667215, "zhx-min", aliases = {"Coastal Min"}, } m["zhx-inm"] = { "Mân nội địa", 20667237, "zhx-min", aliases = {"Inland Min"}, } m["zhx-man"] = { "Quan thoại", nil, "zhx", protoLanguage = "cmn-ear", aliases = {"Mandarinic"}, } m["zhx-min"] = { "Mân", 56504, "zhx", aliases = {"Min"}, } m["zhx-nan"] = { "Mân Nam", 36495, "zhx-com", aliases = {"Southern Min"}, } m["zhx-pin"] = { "Bình thoại", 2735715, "zhx", protoLanguage = "ltc", aliases = {"Pinghua"}, } m["zhx-yue"] = { "Quảng Châu", 7033959, "zhx", protoLanguage = "ltc", aliases = {"Yue"}, } m["zle"] = { "nhóm ngôn ngữ Slav Đông", 144713, "sla", "Nhóm ngôn ngữ Slav Đông", "Slav Đông", } m["zls"] = { "nhóm ngôn ngữ Slav Nam", 146665, "sla", "Nhóm ngôn ngữ Slav Nam", "Slav Nam", } m["zlw"] = { "nhóm ngôn ngữ Slav Tây", 145852, "sla", "Nhóm ngôn ngữ Slav Tây", "Slav Tây", } m["zlw-lch"] = { "nhóm ngôn ngữ Lechite", 742782, "zlw", "Nhóm ngôn ngữ Lechite", "Lechite", aliases = {"Lechitic","Lekhitic"}, } m["zlw-pom"] = { "Pomeranian", nil, "zlw-lch", } m["znd"] = { "Zande", 8066072, "nic-ubg", } return require("Module:languages").finalizeData(m, "family") g31mi76v151mxby70zskyesk8j7d9c4 2571721 2571716 2026-10-18T15:38:11Z Hiyuune 50834 2571721 Scribunto text/plain --[=[ This module contains definitions for all language family codes on Wiktionary. ]=]-- local m = {} m["aav"] = { "ngữ hệ Nam Á", 33199, "Ngữ hệ Nam Á", "Nam Á", aliases = {"Nam Á"}, } m["aav-khs"] = { "nhóm ngôn ngữ Khasi", 3073734, "aav", "Nhóm ngôn ngữ Khasi", "Khasi", aliases = {"Khasi"}, } m["aav-nic"] = { "nhóm ngôn ngữ Nicobar", 217380, "aav", "Nhóm ngôn ngữ Nicobar", "Nicobar", } m["aav-pkl"] = { "nhóm ngôn ngữ Pnar-Khasi-Lyngngam", nil, "aav-khs", "Nhóm ngôn ngữ Pnar-Khasi-Lyngngam", "Pnar-Khasi-Lyngngam", } m["afa"] = { "ngữ hệ Phi-Á", 25268, aliases = {"Phi Á"}, "Ngữ hệ Phi-Á", "Phi-Á", } m["alg"] = { "nhóm ngôn ngữ Algonquin", 33392, "aql", "Nhóm ngôn ngữ Algonquin", "Algonquin", } m["alg-abp"] = { "nhóm ngôn ngữ Abenaki-Penobscot", 197936, "alg-eas", "Nhóm ngôn ngữ Abenaki-Penobscot", "Abenaki-Penobscot", } m["alg-ara"] = { "nhóm ngôn ngữ Arapahoe", 2153686, "alg", "Nhóm ngôn ngữ Arapahoe", "Arapahoe", } m["alg-eas"] = { "nhóm ngôn ngữ Đông Algonquin", 2257525, "alg", "Nhóm ngôn ngữ Đông Algonquin", "Đông Algonquin", } m["alg-sfk"] = { "nhóm ngôn ngữ Sac-Fox-Kickapoo", 1440172, "alg", "Nhóm ngôn ngữ Sac-Fox-Kickapoo", "Sac-Fox-Kickapoo", } m["alv"] = { "nhóm ngôn ngữ Đại Tây Dương-Congo", 771124, "nic", "Nhóm ngôn ngữ Đại Tây Dương-Congo", "Đại Tây Dương-Congo", } m["alv-aah"] = { "Ayere-Ahan", 750953, "alv-von", } m["alv-ada"] = { "Adamawa", 32906, "alv-sav", } m["alv-bag"] = { "Baga", 2746083, "alv-mel", } m["alv-bak"] = { "Bak", 1708174, "alv-sng", } m["alv-bam"] = { "Bambukic", 4853456, "alv-ada", aliases = {"Yungur-Jen"}, } m["alv-bny"] = { "Banyum", 2892477, "alv-nyn", } m["alv-bua"] = { "Bua", 4982094, "alv-mbd", } m["alv-bwj"] = { "Bikwin-Jen", 84542501, "alv-bam", } m["alv-cng"] = { "Cangin", 1033184, "alv-fwo", } m["alv-ctn"] = { "Central Tano", 1658486, "alv-ptn", aliases = {"Akan"}, } m["alv-dlt"] = { "Delta Edoid", nil, "alv-edo", } m["alv-dur"] = { "Duru", 5316788, "alv-lni", } m["alv-ede"] = { "Ede", 35368, "alv-yor", } m["alv-edk"] = { "Edekiri", 5336735, "alv-yrd", } m["alv-edo"] = { "nhóm ngôn ngữ Edoid", 1287469, "alv-von", "Nhóm ngôn ngữ Edoid", "Edoid", } m["alv-eeo"] = { "Edo-Esan-Ora", 12630439, "alv-nce", } m["alv-fli"] = { "Fali", 3450166, "alv", } m["alv-fwo"] = { "Fula-Wolof", 12631267, "alv-sng", } m["alv-gba"] = { "Gbaya", 3099986, "alv-sav", protoLanguage = "gba", } m["alv-gbe"] = { "nhóm ngôn ngữ Gbe", 668284, "alv-von", "Nhóm ngôn ngữ Gbe", "Gbe", } m["alv-gbf"] = { "Eastern Gbaya", nil, "alv-gba", } m["alv-gbs"] = { "Southern Gbaya", nil, "alv-gba", } m["alv-gbw"] = { "Western Gbaya", nil, "alv-gba", } m["alv-gda"] = { "Ga-Dangme", 3443338, "alv-kwa", } m["alv-gng"] = { "Guang", 684009, "alv-ptn", } m["alv-gtm"] = { "Ghana-Togo Mountain", 493020, "alv-kwa", aliases = {"Togo Remnant", "Central Togo"}, } m["alv-hei"] = { "nhóm ngôn ngữ Heiban", 108752116, "alv-the", "Nhóm ngôn ngữ Heiban", "Heiban", } m["alv-ido"] = { "Idomoid", 974196, "alv-von", } m["alv-igb"] = { "Igboid", 1429100, "alv-von", } m["alv-jfe"] = { "Jola-Felupe", 1708174, "alv-jol", aliases = {"Ejamat"}, } m["alv-jol"] = { "Jola", 35176, "alv-bak", aliases = {"Diola"}, } m["alv-kim"] = { "Kim", 6409701, "alv-mbd", } m["alv-kis"] = { "Kissi", 35696, "alv-mel", } m["alv-krb"] = { "Karaboro", 4213541, "alv-snf", } m["alv-ktg"] = { "Ka-Togo", 5972796, "alv-gtm", } m["alv-kul"] = { "Kulango", 16977424, "alv-sav", aliases = {"Kulango-Lorhon", "Kulango-Lorom"}, } m["alv-kwa"] = { "nhóm ngôn ngữ Kwa", 33430, "nic-vco", "Nhóm ngôn ngữ Kwa", "Kwa", } m["alv-lag"] = { "nhóm ngôn ngữ Lagoon", 111210042, "alv-kwa", "Nhóm ngôn ngữ Lagoon", "Lagoon", } m["alv-lek"] = { "Leko", 6520642, otherNames = {"Sambaic"}, -- appears to be an alias in Glottolog "alv-lni", } m["alv-lim"] = { "Limba", 35825, "alv", } m["alv-lni"] = { "Leko-Nimbari", 1708170, "alv-ada", otherNames = {"Central Adamawa"}, aliases = {"Chamba-Mumuye"}, } m["alv-mbd"] = { "Mbum-Day", 6799816, "alv-ada", } m["alv-mbm"] = { "Mbum", 6799814, "alv-mbd", } m["alv-mel"] = { "Mel", 12122355, "alv", } m["alv-mum"] = { "Mumuye", 84607009, "alv-mye", } m["alv-mye"] = { "Mumuye-Yendang", 6935539, "alv-lni", } m["alv-nal"] = { "Nalu", nil, "alv-sng", } m["alv-nce"] = { "nhóm ngôn ngữ Bắc-Trung Edoid", 16110869, "alv-edo", "Nhóm ngôn ngữ Bắc-Trung Edoid", "Bắc-Trung Edoid", } m["alv-ngb"] = { "Nupe-Gbagyi", 12638649, "alv-nup", aliases = {"Nupe-Gbari"}, } m["alv-ntg"] = { "Na-Togo", nil, "alv-gtm", } m["alv-nup"] = { "Nupoid", 1429143, "alv-von", } m["alv-nwd"] = { "nhóm ngôn ngữ Tây Bắc Edoid", 16111012, "alv-edo", "Nhóm ngôn ngữ Tây Bắc Edoid", "Tây Bắc Edoid", } m["alv-nyn"] = { "Nyun", nil, "alv-fwo", } m["alv-pap"] = { "Papel", 7132562, "alv-bak", } m["alv-pph"] = { "Phla-Pherá", 3849625, "alv-gbe", aliases = {"Phla–Pherá"}, } m["alv-ptn"] = { "Potou-Tano", 1475003, "alv-kwa", } m["alv-sav"] = { "nhóm ngôn ngữ Savanna", 4403672, "nic-vco", "Nhóm ngôn ngữ Savanna}", "Savanna", aliases = {"Savannas"}, } m["alv-sma"] = { "Suppire-Mamara", 4446348, "alv-snf", } m["alv-snf"] = { "nhóm ngôn ngữ Senufo", 33795, "alv", "Nhóm ngôn ngữ Senufo", "Senufo", aliases = {"Senufic", "Senoufo"}, } m["alv-sng"] = { "nhóm ngôn ngữ Senegambia", 1708753, "alv", "Nhóm ngôn ngữ Senegambia", "Senegambia", } m["alv-snr"] = { "Senari", 4416084, "alv-snf", } m["alv-swd"] = { "Southwestern Edoid", 12633903, "alv-edo", } m["alv-tal"] = { "Talodi", 12643302, "alv-the", } m["alv-tdj"] = { "Tagwana-Djimini", 7675362, "alv-snf", } m["alv-ten"] = { "Tenda", 3217535, "alv-fwo", } m["alv-the"] = { "nhóm ngôn ngữ Talodi-Heiban", 1521145, "alv", "Nhóm ngôn ngữ Talodi-Heiban", "Talodi-Heiban", } m["alv-von"] = { "nhóm ngôn ngữ Volta-Niger", 34177, "nic-vco", "Nhóm ngôn ngữ Volta-Niger", "Volta-Niger", } m["alv-wan"] = { "Wara-Natyoro", 7968830, "alv-sav", } m["alv-wjk"] = { "Waja-Kam", nil, "alv-ada", } m["alv-yek"] = { "nhóm ngôn ngữ Yekhee", nil, "alv-nce", "Nhóm ngôn ngữ Yekhee", "Yekhee", } m["alv-yor"] = { "Yoruba", nil, "alv-edk", } m["alv-yrd"] = { "Yoruboid", 1789745, "alv-von", } m["alv-yun"] = { "Yungur", 84601642, "alv-bam", aliases = {"Bena-Mboi"}, } m["apa"] = { "Apachean", 27758, "ath", aliases = {"Southern Athabaskan"}, } m["aqa"] = { "Alacalufan", 1288430, } m["aql"] = { "ngữ hệ Algic", 721612, "Ngữ hệ Algic", "Algic", aliases = {"Algonquin-Ritwan", "Algonquin-Wiyot-Yurok"}, } m["art"] = { "ngôn ngữ nhân tạo", 33215, "qfa-not", "Ngôn ngữ nhân tạo", "nhân tạo", aliases = {"artificial", "planned"}, } m["ath"] = { "Athabaskan", 27475, "xnd", } m["ath-nor"] = { "North Athabaskan", 20738, "ath", aliases = {"Northern Athabaskan"}, } m["ath-pco"] = { "Pacific Coast Athabaskan", 20654, "ath", } m["auf"] = { "Arauan", 626772, aliases = {"Arahuan", "Arauán", "Arawa", "Arawan", "Arawán"}, } --[=[ Exceptional language and family codes for Australian Aboriginal languages can use the prefix "aus-", though "aus" is no longer itself a family code. ]=]-- m["aus-arn"] = { "Arnhem", 2581700, aliases = {"Gunwinyguan", "Macro-Gunwinyguan"}, } m["aus-bub"] = { "Bunuban", 2495148, aliases = {"Bunaban"}, } m["aus-cww"] = { "nhóm ngôn ngữ Trung New South Wales", 5061507, "aus-pam", "Nhóm ngôn ngữ Trung New South Wales", "Trung New South Wales", } m["aus-dal"] = { "Daly", 2478079, } m["aus-dyb"] = { "Dyirbalic", 1850666, "aus-pam", } m["aus-gar"] = { "Garawan", 5521951, } m["aus-gun"] = { "Gunwinyguan", 2581700, "aus-arn", aliases = {"Gunwingguan"}, } m["aus-jar"] = { "Jarrakan", 2039423, } m["aus-kar"] = { "Karnic", 4215578, "aus-pam", } m["aus-mir"] = { "Mirndi", 4294095, } m["aus-nga"] = { "Ngayarda", 16153490, "aus-psw", } m["aus-nyu"] = { "Nyulnyulan", 2039408, } m["aus-pam"] = { "ngữ hệ Pama–Nyungar", 33942, "Ngữ hệ Pama–Nyungar", "Pama–Nyungar", } m["aus-pmn"] = { "nhóm ngôn ngữ Paman", 2640654, "aus-pam", "Nhóm ngôn ngữ Paman", "Paman", } m["aus-psw"] = { "nhóm ngôn ngữ Tây Nam Pama–Nyungar", 2258160, "aus-pam", "Nhóm ngôn ngữ Tây Nam Pama–Nyungar", "Tây Nam Pama–Nyungar", } m["aus-rnd"] = { "Arandic", 4784071, "aus-pam", } m["aus-tnk"] = { "Tangkic", 1823065, } m["aus-wdj"] = { "ngữ hệ Iwaidja", 4196968, "Ngữ hệ Iwaidja", "Iwaidja", aliases = {"Yiwaidjan"}, } m["aus-wor"] = { "Worrorran", 2038619, } m["aus-yid"] = { "Yidinyic", 4205849, "aus-pam", } m["aus-yng"] = { "Yangmanic", 42727644, } m["aus-yol"] = { "Yolngu", 2511254, "aus-pam", aliases = {"Yolŋu", "Yolngu Matha"}, } m["aus-yuk"] = { "Yuin-Kuric", 3833021, "aus-pam", } m["awd"] = { "ngữ hệ Arawak", 626753, "Ngữ hệ Arawak", "Arawak", aliases = {"Maipure", "Maipuran"}, } m["awd-nwk"] = { "nhóm ngôn ngữ Nawiki", nil, "awd", "Nhóm ngôn ngữ Nawiki", "Nawiki", aliases = {"Newiki"}, } m["awd-taa"] = { "Ta-Arawakan", 7672731, "awd", aliases = {"Ta-Arawak", "Ta-Maipurean"}, } m["azc"] = { "ngữ hệ Ute-Aztec", 34073, "Ngữ hệ Ute-Aztec", "Ute-Aztec", aliases = {"Uto-Aztekan"}, } m["azc-cup"] = { "Cupan", 19866871, "azc-tak", } m["azc-dur"] = { "nhóm ngôn ngữ Nahua Durango", 2386361, "azc-nah", "Nhóm ngôn ngữ Nahua Durango", "Nahua Durango", aliases = {"Mexicanero"} } m["azc-hua"] = { "nhóm ngôn ngữ Nahua Huasteca", 3832950, "azc-nah", "Nhóm ngôn ngữ Nahua Huasteca", "Nahua Huasteca" } m["azc-nah"] = { "nhóm ngôn ngữ Nahua", 11965602, "azc", "Nhóm ngôn ngữ Nahua", "Nahua", aliases = {"Aztec"}, } m["azc-num"] = { "nhóm ngôn ngữ Numic", 2657541, "azc", "Nhóm ngôn ngữ Numic", "Numic", } m["azc-pim"] = { "nhóm ngôn ngữ Piman", 7194600, "azc", "Nhóm ngôn ngữ Piman", "Piman", aliases = {"Tepiman"}, } m["azc-tak"] = { "Takic", 1280305, "azc", } m["azc-trc"] = { "Taracahitic", 4245032, "azc", aliases = {"Taracahitan"}, } m["bad"] = { "nhóm ngôn ngữ Banda", 806234, "nic-ubg", "Nhóm ngôn ngữ Banda", "Banda", } m["bad-cnt"] = { "Central Banda", 3438391, "bad", } m["bai"] = { "Bamileke", 806005, "nic-gre", } m["bat"] = { "nhóm ngôn ngữ gốc Balt", 33136, "ine-bsl", "Nhóm ngôn ngữ gốc Balt", "gốc Balt", } m["bat-eas"] = { "nhóm ngôn ngữ Đông Balt", 149944, "bat", "Nhóm ngôn ngữ Đông Balt", "Đông Balt", } m["bat-wes"] = { "West Baltic", 149946, "bat", } m["ber"] = { "nhóm ngôn ngữ Berber", 25448, "afa", "Nhóm ngôn ngữ Berber", "Berber", aliases = {"Tamazight"}, } m["bnt"] = { "nhóm ngôn ngữ Bantu", 33146, "nic-bds", "Nhóm ngôn ngữ Bantu", "Bantu", } m["bnt-baf"] = { "Bafia", 799784, "bnt", } m["bnt-bbo"] = { "Bafo-Bonkeng", nil, "bnt-saw", } m["bnt-bdz"] = { "Boma-Dzing", 1729203, "bnt", } m["bnt-bek"] = { "Bekwilic", nil, "bnt-ndb", } m["bnt-bki"] = { "Bena-Kinga", 16113307, "bnt-bne", } m["bnt-bmo"] = { "Bangi-Moi", nil, "bnt-bnm", } m["bnt-bne"] = { "Northeast Bantu", 7057832, "bnt", } m["bnt-bnm"] = { "Bangi-Ntomba", 806477, "bnt-bte", } m["bnt-boa"] = { "Boan", 4931250, "bnt", aliases = {"Buan", "Ababuan"}, } m["bnt-bot"] = { "Botatwe", 4948532, "bnt", } m["bnt-bsa"] = { "nhóm ngôn ngữ Basaa", 809739, "bnt", "Nhóm ngôn ngữ Basaa", "Basaa", } m["bnt-bsh"] = { "Bushoong", 5001551, "bnt-bte", } m["bnt-bso"] = { "Southern Bantu", 980498, "bnt", } m["bnt-bta"] = { "Bati-Angba", 4869303, "bnt-boa", otherNames = {"Late Bomokandian"}, aliases = {"Bwa"}, } m["bnt-btb"] = { "Beti", 35118, "bnt", } m["bnt-bte"] = { "Bangi-Tetela", 4855181, "bnt", } m["bnt-bun"] = { "Buja-Ngombe", 4986733, "bnt-mbb", } m["bnt-chg"] = { "Chaga", 33016, "bnt-cht", } m["bnt-cht"] = { "Chaga-Taita", nil, "bnt-bne", } m["bnt-clu"] = { "Chokwe-Luchazi", 3339273, "bnt", } m["bnt-com"] = { "Comorian", 33077, "bnt-sab", } m["bnt-glb"] = { "Great Lakes Bantu", 5599420, "bnt-bne", } m["bnt-haj"] = { "Haya-Jita", 25502360, "bnt-glb", } m["bnt-kak"] = { "Kako", nil, "bnt-pob", } m["bnt-kav"] = { "Kavango", 116544179, "bnt-ksb", } m["bnt-kbi"] = { "Komo-Bira", 6428591, "bnt-boa", } m["bnt-kel"] = { "Kele", 1738162, "bnt-kts", aliases = {"Sheke"}, } m["bnt-kil"] = { "Kilombero", 6408121, "bnt", } m["bnt-kka"] = { "Kikuyu-Kamba", 18419596, "bnt-bne", aliases = {"Thagiicu"}, } m["bnt-kmb"] = { "Kimbundu", 16947687, "bnt", } m["bnt-kng"] = { "Kongo", 6429214, "bnt", } m["bnt-kpw"] = { "Kpwe", 36428, "bnt-saw", } m["bnt-ksb"] = { "Kavango-Southwest Bantu", 6379098, "bnt", } m["bnt-kts"] = { "Kele-Tsogo", 6385577, "bnt", } m["bnt-lbn"] = { "Luban", 4536504, "bnt", } m["bnt-leb"] = { "Lebonya", 6511395, "bnt", } m["bnt-lgb"] = { "Lega-Binja", 6517694, "bnt", } m["bnt-lok"] = { "Logooli-Kuria", nil, "bnt-glb", } m["bnt-lub"] = { "Luba", nil, "bnt-lbn", } m["bnt-lun"] = { "Lunda", 6704091, "bnt", } m["bnt-mak"] = { "Makua", 6740431, "bnt-bso", aliases = {"Makhuwa"}, } m["bnt-mbb"] = { "Mboshi-Buja", 6799764, "bnt", } m["bnt-mbe"] = { "Mbole-Enya", 6799728, "bnt", } m["bnt-mbi"] = { "Mbinga", nil, "bnt-rur", } m["bnt-mbo"] = { "Mboshi", 6799763, "bnt-mbb", } m["bnt-mbt"] = { "Mbete", 1346910, "bnt-tmb", aliases = {"Mbere"}, } m["bnt-mby"] = { "Mbeya", nil, "bnt-ruk", } m["bnt-mij"] = { "Mijikenda", 6845474, "bnt-sab", } m["bnt-mka"] = { "Makaa", nil, "bnt-ndb", } m["bnt-mne"] = { "Manenguba", 31147471, "bnt", aliases = {"Mbo", "Ngoe"}, } m["bnt-mnj"] = { "Makaa-Njem", 1603899, "bnt-pob", } m["bnt-mon"] = { "Mongo", nil, "bnt-bnm", } m["bnt-mra"] = { "Mbugwe-Rangi", 6799795, "bnt", } m["bnt-msl"] = { "Masaba-Luhya", 12636428, "bnt-glb", } m["bnt-mwi"] = { "Mwika", nil, "bnt-ruk", } m["bnt-ncb"] = { "Northeast Coast Bantu", 7057848, "bnt-bne", } m["bnt-ndb"] = { "Ndzem-Bomwali", nil, "bnt-mnj", } m["bnt-ngn"] = { "Ngondi-Ngiri", 7022532, "bnt-mbb", } m["bnt-ngu"] = { "Nguni", 961559, "bnt-bso", aliases = {"Ngoni"}, } m["bnt-nya"] = { "Nyali", 7070832, "bnt-leb", } m["bnt-nyb"] = { "Nyanga-Buyi", 7070882, "bnt", } m["bnt-nyg"] = { "Nyoro-Ganda", 12638666, "bnt-glb", } m["bnt-nys"] = { "nhóm ngôn ngữ Nyasa", 7070921, "bnt", "Nhóm ngôn ngữ Nyasa", "Nyasa", } m["bnt-nze"] = { "Nzebi", 1755498, "bnt-tmb", aliases = {"Njebi"}, } m["bnt-ova"] = { "Ovambo", 36489, "bnt-swb", aliases = {"Oshivambo", "Oshiwambo", "Owambo"}, } m["bnt-par"] = { "Pare", nil, "bnt-ncb", } m["bnt-pen"] = { "Pende", 7162373, "bnt", } m["bnt-pob"] = { "Pomo-Bomwali", nil, "bnt", } m["bnt-ruk"] = { "Rukwa", 7378902, "bnt", } m["bnt-run"] = { "Rungwe", nil, "bnt-ruk", } m["bnt-rur"] = { "Rufiji-Ruvuma", 7377947, "bnt", } m["bnt-ruv"] = { "Ruvu", nil, "bnt-ncb", } m["bnt-rvm"] = { "Ruvuma", nil, "bnt-rur", } m["bnt-sab"] = { "Sabaki", 2209395, "bnt-ncb", } m["bnt-saw"] = { "Sawabantu", 532003, "bnt", } m["bnt-sbi"] = { "Sabi", 7396071, "bnt", } m["bnt-seu"] = { "Seuta", nil, "bnt-ncb", } m["bnt-shh"] = { "Shi-Havu", nil, "bnt-glb", } m["bnt-sho"] = { "Shona", 2904660, "bnt", } m["bnt-sir"] = { "nhóm ngôn ngữ Sira", 1436372, "bnt", "Nhóm ngôn ngữ Sira", "Sira", aliases = {"Shira-Punu"}, } m["bnt-ske"] = { "Soko-Kele", nil, "bnt-bte", } m["bnt-sna"] = { "Sena", nil, "bnt-nys", } m["bnt-sts"] = { "Sotho-Tswana", 2038386, "bnt-bso", } m["bnt-swb"] = { "Southwest Bantu", 116543539, "bnt-ksb", } m["bnt-swh"] = { "Swahili", nil, "bnt-sab", } m["bnt-tek"] = { "Teke", 36528, "bnt-tmb", } m["bnt-tet"] = { "Tetela", 7706059, "bnt-bte", } m["bnt-tkc"] = { "Central Teke", 36473, "bnt-tek", } m["bnt-tkm"] = { "Takama", nil, "bnt-bne", } m["bnt-tmb"] = { "Teke-Mbede", 7695332, "bnt", aliases = {"Teke-Mbere"}, } m["bnt-tso"] = { "Tsogo", 2458420, otherNames = {"Okani"}, --appears to be an alias in Glottolog "bnt-kts", } m["bnt-tsr"] = { "Tswa-Ronga", 12643962, "bnt-bso", } m["bnt-yak"] = { "Yaka", 8047027, "bnt", } m["bnt-yko"] = { "Yasa-Kombe", nil, "bnt-saw", } m["bnt-zbi"] = { "Zamba-Binza", nil, "bnt-bnm", } m["btk"] = { "Batak", 1998595, "poz-nws", } --[=[ Exceptional language and family codes for Central American Indian languages may use the prefix "cai-", though "cai" is no longer itself a family code. ]=]-- --[=[ Exceptional language and family codes for Caucasian languages can use the prefix "cau-", though "cau" is no longer itself a family code. ]=]-- m["cau-abz"] = { "nhóm ngôn ngữ Abkhaz-Abaza", 4663617, "cau-nwc", "Nhóm ngôn ngữ Abkhaz-Abaza", "Abkhaz-Abaza", otherNames = {"Abkhaz-Tapanta"}, aliases = {"Abazgi"}, } m["cau-and"] = { "nhóm ngôn ngữ Andic", 492152, "cau-ava", "Nhóm ngôn ngữ Andic", "Andic", aliases = {"Andian"}, } m["cau-ava"] = { "nhóm ngôn ngữ Avar-Andic", 4827766, "cau-nec", "Nhóm ngôn ngữ Avar-Andic", "Avar-Andic", aliases = {"Avar-Andian", "Avar-Andi", "Avaro-Andian"}, } m["cau-cir"] = { "Circassian", 858543, "cau-nwc", aliases = {"Cherkess"}, } m["cau-drg"] = { "nhóm ngôn ngữ Dargwa", 5222637, "cau-nec", "Nhóm ngôn ngữ Dargwa", "Dargwa", otherNames = {"Dargin"}, } m["cau-esm"] = { "Eastern Samur", nil, "cau-sam", } m["cau-ets"] = { "East Tsezian", 121437666, "cau-tsz", aliases = {"East Tsezic", "East Didoic"}, } m["cau-lzg"] = { "Lezghian", 2144370, "cau-nec", aliases = {"Lezgi", "Lezgian", "Lezgic"}, } m["cau-nkh"] = { "nhóm ngôn ngữ Nakh", 24441, "cau-nec", "Nhóm ngôn ngữ Nakh", "Nakh", aliases = {"Bắc-Trung Kavkaz"}, } m["cau-nec"] = { "ngữ hệ Đông Bắc Kavkaz", 27387, "Ngữ hệ Đông Bắc Kavkaz", "Đông Bắc Kavkaz", aliases = {"Dagestania", "Nakho-Dagestania", "Caspi"}, } m["cau-nwc"] = { "ngữ hệ Tây Bắc Kavkaz", 33852, "Ngữ hệ Tây Bắc Kavkaz", "Tây Bắc Kavkaz", aliases = {"Abkhazo-Adyghean", "Abkhaz-Adyghe", "Pontic"}, } m["cau-sam"] = { "Samur", 15229151, "cau-lzg", } m["cau-ssm"] = { "Southern Samur", nil, "cau-sam", } m["cau-tsz"] = { "Tsezian", 1651530, "cau-nec", aliases = {"Tsezic", "Didoic"}, } m["cau-vay"] = { "Vainakh", 4102486, "cau-nkh", aliases = {"Veinakh", "Vaynakh"}, } m["cau-wsm"] = { "Western Samur", nil, "cau-sam", } m["cau-wts"] = { "West Tsezian", 121437697, "cau-tsz", aliases = {"West Tsezic", "West Didoic"}, } m["cba"] = { "Chibchan", 520478, "qfa-mch", -- or none if Macro-Chibchan is considered undemonstrated } m["ccs"] = { "ngữ hệ Kartvelia", 34030, "Ngữ hệ Kartvelia", "Kartvelia", aliases = {"Ngoại Kavkaz"}, } m["ccs-gzn"] = { "nhóm ngôn ngữ Gruzia-Zan", 34030, "ccs", "Nhóm ngôn ngữ Gruzia-Zan", "Gruzia-Zan", aliases = {"Karto-Zan"}, } m["ccs-zan"] = { "Zan", 2606912, "ccs-gzn", aliases = {"Zanuri", "Colchian"}, } m["cdc"] = { "nhóm ngôn ngữ Tchad", 33184, "afa", "Nhóm ngôn ngữ Tchad", "Tchad", } m["cdc-cbm"] = { "nhóm ngôn ngữ Trung Tchad", 2251547, "cdc", "Nhóm ngôn ngữ Trung Tchad", "Trung Tchad", aliases = {"Biu-Mandara"}, } m["cdc-est"] = { "nhóm ngôn ngữ Đông Tchad", 2276221, "cdc", "Nhóm ngôn ngữ Đông Tchad", "Đông Tchad", } m["cdc-mas"] = { "nhóm ngôn ngữ Masa", 2136092, "cdc", "Nhóm ngôn ngữ Masa", "Masa", } m["cdc-wst"] = { "nhóm ngôn ngữ Tây Tchad", 2447774, "cdc", "Nhóm ngôn ngữ Tây Tchad", "Tây Tchad", } m["cdd"] = { "Caddoan", 1025090, } m["cel"] = { "nhóm ngôn ngữ Celt", 25293, "ine", "Nhóm ngôn ngữ Celt", "Celt", } m["cel-bry"] = { "nhóm ngôn ngữ Britton", 156877, "cel-ins", "Nhóm ngôn ngữ Britton", "Britton", aliases = {"Brittonic"}, } m["cel-brs"] = { "nhóm ngôn ngữ Tây Nam Britton", 2612853, "cel-bry", "Nhóm ngôn ngữ Tây Nam Britton", "Tây Nam Britton", aliases = {"Southwestern Brittonic"}, } m["cel-brw"] = { "nhóm ngôn ngữ Tây Britton", 593069, "cel-bry", "Nhóm ngôn ngữ Tây Britton", "Tây Britton", aliases = {"Western Brittonic"}, } m["cel-con"] = { "Continental Celtic", 215566, "cel", } m["cel-gae"] = { "nhóm ngôn ngữ Goidel", 56433, "cel-ins", "Nhóm ngôn ngữ Goidel", "Goidel", aliases = {"Gaelic"}, protoLanguage = "pgl", } m["cel-his"] = { "Hispano-Celtic", 4204136, "cel-con", } m["cel-ins"] = { "nhóm ngôn ngữ Celt hải đảo", 214506, "cel", "Nhóm ngôn ngữ Celt hải đảo", "Celt hải đảo", } m["chi"] = { "Chimakuan", 1073088, } m["chm"] = { "nhóm ngôn ngữ Mari", 973685, "urj", "Nhóm ngôn ngữ Mari", "Mari", } m["cmc"] = { "nhóm ngôn ngữ Chăm", 2997506, "poz-mcm", "Nhóm ngôn ngữ Chăm", "Chăm", } m["crp"] = { "creole or pidgin", nil, "qfa-not", } m["csu"] = { "nhóm ngôn ngữ Trung Sudan", 190822, "ssa", "Nhóm ngôn ngữ Trung Sudan", "Trung Sudan", } m["csu-bba"] = { "Bongo-Bagirmi", 3505042, "csu", } m["csu-bbk"] = { "Bongo-Baka", 4941917, "csu-bba", } m["csu-bgr"] = { "Bagirmi", 4841948, "csu-bba", aliases = {"Bagirmic"}, } m["csu-bkr"] = { "Birri-Kresh", nil, "csu", } m["csu-ecs"] = { "Eastern Central Sudanic", 16911698, "csu", aliases = {"East Central Sudanic", "Central Sudanic East", "Lendu-Mangbetu"}, } m["csu-kab"] = { "Kaba", 6343715, "csu-bba", } m["csu-lnd"] = { "Lendu", 6522357, "csu-ecs", aliases = {"Lenduic"}, } m["csu-maa"] = { "Mangbetu", 6748874, "csu-ecs", aliases = {"Mangbetu-Asoa", "Mangbetu-Asua"}, } m["csu-mle"] = { "Mangbutu-Lese", 17009406, "csu-ecs", aliases = {"Mangbutu–Efe", "Mangbutu", "Membi-Mangbutu-Efe"}, } m["csu-mma"] = { "Moru-Madi", 6915156, "csu-ecs", } m["csu-sar"] = { "Sara", 2036691, "csu-bba", } m["csu-val"] = { "Vale", 7909520, "csu-bba", } m["cus"] = { "nhóm ngôn ngữ Cushit", 33248, "afa", "Nhóm ngôn ngữ Cushit", "Cushit", } m["cus-cen"] = { "nhóm ngôn ngữ Trung Cushit", 56569, "cus", "Nhóm ngôn ngữ Trung Cushit", "Trung Cushit", } m["cus-eas"] = { "nhóm ngôn ngữ Đông Cushit", 56568, "cus", "Nhóm ngôn ngữ Đông Cushit", "Đông Cushit", } m["cus-hec"] = { "nhóm ngôn ngữ Đông Cushit Cao nguyên", 56524, "cus-eas", "Nhóm ngôn ngữ Đông Cushit Cao nguyên", "Đông Cushit Cao nguyên" } m["cus-som"] = { "nhóm ngôn ngữ Somali", 56774, "cus-eas", "Nhóm ngôn ngữ Somali", "Somali", aliases = {"Sam", "Macro-Somali"}, } m["cus-sou"] = { "nhóm ngôn ngữ Nam Cushit", 56525, "cus", "Nhóm ngôn ngữ Nam Cushit", "Nam Cushit", } m["day"] = { "Land Dayak", 2760613, "poz", } m["del"] = { "Lenape", 2665761, "alg-eas", aliases = {"Delaware"}, } m["den"] = { "Slavey", 13272, "ath-nor", aliases = {"Slave", "Slavé"}, } m["dmn"] = { "nhóm ngôn ngữ Mande", 33681, "nic", "Nhóm ngôn ngữ Mande", "Mande", } m["dmn-bbu"] = { "nhóm ngôn ngữ Bisa-Busa", 12627956, "dmn-mde", "Nhóm ngôn ngữ Bisa-Busa", "Bisa-Busa", } m["dmn-emn"] = { "East Manding", nil, "dmn-man", } m["dmn-jje"] = { "Jogo-Jeri", nil, "dmn-mjo", } m["dmn-man"] = { "Manding", 35772, "dmn-mmo", } m["dmn-mda"] = { "Mano-Dan", nil, "dmn-mse", } m["dmn-mdc"] = { "Central Mande", 5972907, "dmn-mdw", } m["dmn-mde"] = { "nhóm ngôn ngữ Đông Mande", 12633080, "dmn", "Nhóm ngôn ngữ Đông Mande", "Đông Mande", } m["dmn-mdw"] = { "Western Mande", 16113831, "dmn", } m["dmn-mjo"] = { "Manding-Jogo", 12636153, "dmn-mdc", } m["dmn-mmo"] = { "Manding-Mokole", nil, "dmn-mva", } m["dmn-mnk"] = { "Maninka", 36186, "dmn-emn", } m["dmn-mnw"] = { "Northwestern Mande", 5972910, "dmn-mdw", } m["dmn-mok"] = { "Mokole", 16935447, "dmn-mmo", } m["dmn-mse"] = { "Southeastern Mande", 5972912, "dmn-mde", } m["dmn-msw"] = { "Southwestern Mande", 12633904, "dmn-mdw", } m["dmn-mva"] = { "Manding-Vai", nil, "dmn-mjo", } m["dmn-nbe"] = { "Nwa-Beng", nil, "dmn-mse", } m["dmn-sam"] = { "Samo", 36327, "dmn-bbu", aliases = {"Samuic"}, } m["dmn-smg"] = { "Samogo", 7410000, "dmn-mnw", aliases = {"Duun-Seenku"}, } m["dmn-snb"] = { "Soninke-Bobo", 16111680, "dmn-mnw", } m["dmn-sya"] = { "Susu-Yalunka", nil, "dmn-mdc", } m["dmn-vak"] = { "Vai-Kono", nil, "dmn-mva", } m["dmn-wmn"] = { "West Manding", nil, "dmn-man", } m["dra"] = { "ngữ hệ Dravida", 33311, "Ngữ hệ Dravida", "Dravida", } m["dra-cen"] = { "Central Dravidian", 68002317, "dra", } m["dra-gki"] = { "Gondi-Kui", 12631610, "dra-sdt", } m["dra-gon"] = { "Gondi", 55639812, "dra-gki", } m["dra-imd"] = { "Irula-Muduga", nil, "dra-tkn", } m["dra-kan"] = { "nhóm ngôn ngữ Kannada", 6363888, "dra-tkn", "Nhóm ngôn ngữ Kannada", "Kannada", protoLanguage = "dra-okn", } m["dra-kki"] = { "Konda-Kui", nil, "dra-gki", } m["dra-kml"] = { "Kurukh-Malto", 68002822, "dra-nor", } m["dra-knk"] = { "Kolami-Naiki", 10547037, "dra-cen", } m["dra-kod"] = { "Kodagu", 67983106, "dra-tkd", } m["dra-kor"] = { "Koraga", 33394, "dra-tlk", } m["dra-mal"] = { "Malayalamoid", 6741581, "dra-tml", } m["dra-mdy"] = { "Madiya", 27602, "dra-gon", } m["dra-mlo"] = { "Malto", nil, "dra-kml", } m["dra-mur"] = { "Muria", 6938499, "dra-gon", } m["dra-nor"] = { "North Dravidian", 16110967, "dra", } m["dra-pgd"] = { "Parji-Gadaba", 10620428, "dra-cen", } m["dra-sdo"] = { "nhóm ngôn ngữ Nam Dravida I", 16112843, -- Wikipedia's "South Dravidian" is South Dravidian I in this scheme. "dra-sou", "Nhóm ngôn ngữ Nam Dravida I", "Nam Dravida I", aliases = {"Nam Dravida"}, -- This is why I and II are used. } m["dra-sdt"] = { "nhóm ngôn ngữ Nam Dravida II", 12633975, "dra-sou", "Nhóm ngôn ngữ Nam Dravida II", "Nam Dravida II", aliases = {"Nhóm ngôn ngữ Trung-Nam Dravida"}, } m["dra-sou"] = { "nhóm ngôn ngữ Nam Dravida", nil, "dra", "Nhóm ngôn ngữ Nam Dravida", "Nam Dravida", } m["dra-tam"] = { "Tamiloid", 7681417, "dra-tml", protoLanguage = "oty", } m["dra-tel"] = { "nhóm ngôn ngữ Telugu", nil, "dra-sdt", "Nhóm ngôn ngữ Telugu", "Telugu", protoLanguage = "dra-ote", } m["dra-tkd"] = { "Tamil-Kodagu", 25494510, "dra-tkn", } m["dra-tkn"] = { "nhóm ngôn ngữ Tamil-Kannada", 6478506, "dra-sdo", "Nhóm ngôn ngữ Tamil-Kannada", "Tamil-Kannada", } m["dra-tkt"] = { "Toda-Kota", 67983857, "dra-tkd", } m["dra-tlk"] = { "nhóm ngôn ngữ Tulu-Koraga", nil, "dra-sdo", "Nhóm ngôn ngữ Tulu-Koraga", "Tulu-Koraga", } m["dra-tml"] = { "Tamil-Malayalam", 10690507, "dra-tkd", } m["egx"] = { "nhóm ngôn ngữ Ai Cập", 50868, "afa", "Nhóm ngôn ngữ Ai Cập", "Ai Cập", protoLanguage = "egy", } m["esx"] = { "nhóm ngôn ngữ Eskimo-Aleut", 25946, "Nhóm ngôn ngữ Eskimo-Aleut", "Eskimo-Aleut", } m["esx-esk"] = { "Eskimo", 25946, "esx", } m["esx-inu"] = { "Inuit", 27796, "esx-esk", } m["euq"] = { "ngữ hệ Vascon", 4669240, "Ngữ hệ Vascon", "Vascon", } m["gem"] = { "nhóm ngôn ngữ German", 21200, "ine", "Nhóm ngôn ngữ German", "German", } m["gme"] = { "East Germanic", 108662, "gem", } m["gmq"] = { "nhóm ngôn ngữ German Bắc", 106085, "gem", "Nhóm ngôn ngữ German Bắc", "German Bắc", } m["gmq-eas"] = { "nhóm ngôn ngữ Đông Scandinavia", 3090263, "gmq", "Nhóm ngôn ngữ Đông Scandinavia", "Đông Scandinavia", protoLanguage = "non-oen", } m["gmq-ins"] = { "Insular Scandinavian", nil, "gmq-wes", } m["gmq-wes"] = { "nhóm ngôn ngữ Tây Scandinavia", 1792570, "gmq", "Nhóm ngôn ngữ Tây Scandinavia", "Tây Scandinavia", protoLanguage = "non-own", } m["gmw"] = { "nhóm ngôn ngữ German Tây", 26721, "gem", "Nhóm ngôn ngữ German Tây", "German Tây", } m["gmw-afr"] = { "nhóm ngôn ngữ Anh-Frisia", 5329170, "gmw-nsg", "Nhóm ngôn ngữ Anh-Frisia", "Anh-Frisia", } m["gmw-nsg"] = { "nhóm ngôn ngữ German Biển Bắc", 30134, "gmw", "Nhóm ngôn ngữ German Biển Bắc", "German Biển Bắc", } m["gmw-ang"] = { "nhóm ngôn ngữ Anh", 1346342, "gmw-afr", "Nhóm ngôn ngữ Anh", "Anh", protoLanguage = "ang", } m["gmw-fri"] = { "Frisian", 25325, "gmw-afr", protoLanguage = "ofs", } m["gmw-frk"] = { "nhóm ngôn ngữ Hạ Franken", 153050, "gmw", "Nhóm ngôn ngữ Hạ Franken", "Hạ Franken", protoLanguage = "odt", } m["gmw-hgm"] = { "nhóm ngôn ngữ Đức cao địa", 52040, "gmw", "Nhóm ngôn ngữ Đức cao địa", "Đức cao địa", protoLanguage = "goh", } m["gmw-ian"] = { "Irish Anglo-Norman", 120719384, "gmw-ang", protoLanguage = "enm", } m["gmw-lgm"] = { "Low German", 25433, "gmw", protoLanguage = "osx", } m["grk"] = { "nhóm ngôn ngữ gốc Hy Lạp", 2042538, "ine", "Nhóm ngôn ngữ gốc Hy Lạp", "gốc Hy Lạp", aliases = {"Greek"}, } m["him"] = { "Western Pahari", 12645574, "inc-pah", aliases = {"Himachali"}, } m["hmn"] = { "Hmong", 3307894, "hmx", } m["hmx"] = { "ngữ hệ Hmông-Miền", 33322, "Ngữ hệ Hmông-Miền", "Hmông-Miền", aliases = {"Miao-Yao"}, } m["hmx-mie"] = { "nhóm ngôn ngữ Miền", 7992695, "hmx", "Nhóm ngôn ngữ Miền", "Miền", } m["hok"] = { "Hokan", 33406, } m["hyx"] = { "nhóm ngôn ngữ Armenia", 8785, "ine", "Nhóm ngôn ngữ Armenia", "Armenia", } m["iir"] = { "nhóm ngôn ngữ Ấn-Iran", 33514, "ine", "Nhóm ngôn ngữ Ấn-Iran", "Ấn-Iran", } m["iir-nur"] = { "Nuristani", 161804, "iir", } m["nur-nor"] = { "Northern Nuristani", nil, "iir-nur", } m["nur-sou"] = { "Southern Nuristani", nil, "iir-nur", } m["ijo"] = { "Ijoid", 1325759, "nic", otherNames = {"Ijaw"}, -- Ijaw may be a subfamily } m["inc"] = { "nhóm ngôn ngữ Ấn-Arya", 33577, "iir", "Nhóm ngôn ngữ Ấn-Arya", "Ấn-Arya", aliases = {"Indic"}, } m["inc-bas"] = { "nhóm ngôn ngữ Bengal-Assam", 4179137, "inc-eas", "Nhóm ngôn ngữ Bengal-Assam", "Bengal-Assam", aliases = {"Bengal-Assam", "Gauda-Kamarupa"}, } m["inc-bhi"] = { "Bhil", 4901727, "inc-cen", } m["inc-bih"] = { "nhóm ngôn ngữ Bihar", 135305, "inc-eas", "Nhóm ngôn ngữ Bihar", "Bihar", aliases = {"Bihari"}, } m["inc-cen"] = { "Central Indo-Aryan", 10979187, "inc", } m["inc-chi"] = { "Chitrali", 11732797, "inc-dar", } m["inc-dar"] = { "nhóm ngôn ngữ Dard", 161101, "inc", "Nhóm ngôn ngữ Dard", "Dard", protoLanguage = "sa", } m["inc-dre"] = { "Eastern Dardic", nil, "inc-dar", } m["inc-eas"] = { "nhóm ngôn ngữ Đông Ấn-Arya", 16590069, "inc", "Nhóm ngôn ngữ Đông Ấn-Arya", "Đông Ấn-Arya", protoLanguage = "pra-mag", } m["inc-hie"] = { "Eastern Hindi", 4126648, "inc", aliases = {"Purabiyā"}, protoLanguage = "pra-ard", } m["inc-hiw"] = { "Western Hindi", 12600937, "inc-cen", protoLanguage = "inc-sap", } m["inc-hnd"] = { "tiếng Hindustan", 11051, "inc-hiw", "Tiếng Hindustan", "Hindustan", aliases = {"Hindi-Urdu"}, protoLanguage = "hi-mid", } m["inc-ins"] = { "Insular Indo-Aryan", 12179302, "inc", protoLanguage = "pra-hel", } m["inc-kas"] = { "Kashmiric", nil, "inc-dre", aliases = {"Kashmiri"}, } m["inc-koh"] = { "Kohistani", 111971091, "inc-dre", } m["inc-kun"] = { "Kunar", nil, "inc-dar", } m["inc-mid"] = { "nhóm ngôn ngữ Ấn-Arya trung đại", 3236316, "inc", "Nhóm ngôn ngữ Ấn-Arya trung đại", "Ấn-Arya trung đại", aliases = {"Middle Indic"}, } m["inc-nwe"] = { "Northwestern Indo-Aryan", 41355020, "inc", protoLanguage = "pra-pai", } m["inc-nor"] = { "nhóm ngôn ngữ Bắc Ấn-Arya", 12642170, "inc", "Nhóm ngôn ngữ Bắc Ấn-Arya", "Bắc Ấn-Arya", protoLanguage = "pra-kha", } m["inc-old"] = { "nhóm ngôn ngữ Ấn-Arya cổ", 118976896, "inc", "Nhóm ngôn ngữ Ấn-Arya cổ", "Ấn-Arya cổ", aliases = {"Old Indic"}, } m["inc-pah"] = { "nhóm ngôn ngữ Pahari", 946077, "inc-nor", "Nhóm ngôn ngữ Pahari", "Pahari", aliases = {"Pahadi"}, } m["inc-pan"] = { "Punjabi-Lahnda", nil, "inc-nwe", protoLanguage = "inc-tak", } m["inc-pas"] = { "Pashayi", 36670, "inc-dar", aliases = {"Pashai"}, } m["inc-rom"] = { "Romani", 13201, "inc-wes", aliases = {"Romany", "Gypsy", "Gipsy"}, protoLanguage = "rom", } m["inc-shn"] = { "Shinaic", 12646125, "inc-dre", } m["inc-snd"] = { "Sindhi", 7522212, "inc-nwe", protoLanguage = "inc-vra", } m["inc-sou"] = { "Southern Indo-Aryan", 12179304, "inc", protoLanguage = "inc-ama", } m["inc-wes"] = { "nhóm ngôn ngữ Tây Ấn-Aryan", nil, "inc", "Nhóm ngôn ngữ Tây Ấn-Aryan", "Tây Ấn-Aryan", protoLanguage = "inc-agu", } m["ine"] = { "ngữ hệ Ấn-Âu", 19860, aliases = {"Indo-Germanic"}, "Ngữ hệ Ấn-Âu", "Ấn Âu", } m["ine-ana"] = { "nhóm ngôn ngữ Tiểu Á", 147085, "ine", "Nhóm ngôn ngữ Tiểu Á", "Tiểu Á", } m["ine-bsl"] = { "nhóm ngôn ngữ Balt-Slav", 147356, "ine", "Balt-Slav", } m["ine-grp"] = { "nhóm ngôn ngữ Graeco-Phrygia", nil, "ine", "Nhóm ngôn ngữ Graeco-Phrygia", "Graeco-Phrygia", } m["ine-luw"] = { "Luwic", 115748615, "ine-ana", aliases = {"Luvic"}, } m["ine-toc"] = { "Tocharian", 37029, "ine", aliases = {"Tokharian"}, } m["ira"] = { "nhóm ngôn ngữ Iran", 33527, "iir", "Nhóm ngôn ngữ Iran", "Iran", } m["ira-csp"] = { "Caspian", 5049123, "ira-mpr", } m["ira-cen"] = { "Central Iranian", nil, "ira", } m["ira-kms"] = { "Komisenian", nil, "ira-mpr", aliases = {"Semnani"}, } m["ira-mid"] = { "nhóm ngôn ngữ Iran trung đại", 6841465, "ira", "Nhóm ngôn ngữ Iran trung đại", "Iran trung đại", } m["ine-luw"] = { "Luwic", 115748615, "ine-ana", aliases = {"Luvic"}, } m["ira-mny"] = { "Munji-Yidgha", nil, "ira-sym", aliases = {"Yidgha-Munji"}, } m["ira-msh"] = { "Mazanderani-Shahmirzadi", nil, "ira-csp", } m["ira-nei"] = { "nhóm ngôn ngữ Đông Bắc Iran", 10775567, "ira", "Nhóm ngôn ngữ Đông Bắc Iran", "Đông Bắc Iran", } m["ira-nwi"] = { "nhóm ngôn ngữ Tây Bắc Iran", 390576, "ira-wes", "Nhóm ngôn ngữ Tây Bắc Iran", "Tây Bắc Iran", } m["ira-orp"] = { "nhóm ngôn ngữ Ormur-Parachi", nil, "ira-sei", "Nhóm ngôn ngữ Ormur-Parachi", "Ormur-Parachi", } m["ira-pat"] = { "Pathan", nil, "ira-sei", } m["ira-sbc"] = { "Sogdo-Bactrian", nil, "ira-nei", } m["ira-mpr"] = { "nhóm ngôn ngữ Media-Parthia", nil, "ira-nwi", "Nhóm ngôn ngữ Media-Parthia", "Media-Parthia", } m["ira-sgi"] = { "Sanglechi-Ishkashimi", 18711232, "ira-sei", } m["ira-shr"] = { "nhóm ngôn ngữ Shughni-Roshani", 11732824, "ira-shy", "Nhóm ngôn ngữ Shughni-Roshani", "Shughni-Roshani", } m["ira-shy"] = { "Shughni-Yazghulami", nil, "ira-sym", } m["ira-sgc"] = { "Sogdic", nil, "ira-sbc", aliases = {"Sogdian"}, } m["ira-sei"] = { "nhóm ngôn ngữ Đông Nam Iran", 3833002, "ira", "Nhóm ngôn ngữ Đông Nam Iran", "Đông Nam Iran", } m["ira-swi"] = { "nhóm ngôn ngữ Tây Nam Iran", 390424, "ira-wes", "Nhóm ngôn ngữ Tây Nam Iran", "Tây Nam Iran", } m["ira-sym"] = { "nhóm ngôn ngữ Shughni-Yazghulami-Munji", nil, "ira-sei", "Nhóm ngôn ngữ Shughni-Yazghulami-Munji", "Shughni-Yazghulami-Munji", } m["ira-wes"] = { "nhóm ngôn ngữ Tây Iran", 129850, "ira", "Nhóm ngôn ngữ Tây Iran", "Tây Iran", } m["ira-zgr"] = { "nhóm ngôn ngữ Zaza-Goran", 167854, "ira-mpr", "Nhóm ngôn ngữ Zaza-Goran", "Zaza-Goran", aliases = {"Zaza-Guran", "Goran-Zaza"}, } m["iro"] = { "ngữ hệ Iroquois", 33623, "Ngữ hệ Iroquois", "Iroquois", } m["iro-nor"] = { "nhóm ngôn ngữ Bắc Iroquois", nil, "iro", "Nhóm ngôn ngữ Bắc Iroquois", "Bắc Iroquois", } m["itc"] = { "nhóm ngôn ngữ gốc Ý", 131848, "ine", "Nhóm ngôn ngữ gốc Ý", "gốc Ý", } m["itc-laf"] = { "nhóm ngôn ngữ Latinh-Faliscan", 33478, "itc", "Nhóm ngôn ngữ Latinh-Faliscan", "Latinh-Faliscan", aliases = {"Latinian"}, } m["itc-sbl"] = { "nhóm ngôn ngữ Osco-Umbria", 515194, "itc", "Nhóm ngôn ngữ Osco-Umbria", "Osco-Umbria", aliases = { "Sabellia" }, } m["jpx"] = { "ngữ hệ Nhật Bản-Lưu Cầu", 33612, aliases = {"Nhật", "Nhật Bản-Lưu Cầu"}, "Ngữ hệ Nhật Bản-Lưu Cầu", "Nhật Bản-Lưu Cầu", } m["jpx-nry"] = { "nhóm ngôn ngữ Bắc Lưu Cầu", 20862796, "jpx-ryu", "Nhóm ngôn ngữ Bắc Lưu Cầu", "Bắc Lưu Cầu", } m["jpx-ryu"] = { "nhóm ngôn ngữ Lưu Cầu", 56393, "jpx", "Nhóm ngôn ngữ Lưu Cầu", "Lưu Cầu", } m["jpx-sry"] = { "nhóm ngôn ngữ Nam Lưu Cầu", 18392243, "jpx-ryu", "Nhóm ngôn ngữ Nam Lưu Cầu", "Nam Lưu Cầu", } m["kar"] = { "nhóm ngôn ngữ Karen", 1364815, "sit", "Nhóm ngôn ngữ Karen", "Karen", } m["kca"] = { "Khanty", 33563, "urj-ugr", aliases = {"Khantyic", "Khantic"}, } --[=[ Exceptional language and family codes for Khoisan and Kordofanian languages can use the prefix "khi-" and "kdo-" respectively, though they are no longer family codes themselves. ]=]-- m["khi-kal"] = { "Kalahari Khoe", nil, "khi-kho", } m["khi-khk"] = { "Khoekhoe", nil, "khi-kho", } m["khi-kkw"] = { "Khoe-Kwadi", 3833005, aliases = {"Kwadi-Khoe"}, } m["khi-kho"] = { "Khoe", 2736449, "khi-kkw", aliases = {"Central Khoisan"}, } m["khi-kxa"] = { "Kx'a", 6450587, aliases = {"Kxa", "Ju-ǂHoan"}, } m["khi-tuu"] = { "Tuu", 631046, aliases = {"Kwi", "Taa-Kwi", "Southern Khoisan", "Taa-ǃKwi", "Taa-ǃUi", "ǃUi-Taa"}, } m["kro"] = { "nhóm ngôn ngữ Kru", 33535, "nic-vco", "Nhóm ngôn ngữ Kru", "Kru", } m["kro-aiz"] = { "Aizi", 4699431, "kro", } m["kro-bet"] = { "Bété", 32956, "kro-ekr", } m["kro-did"] = { "Dida", 32685, "kro-ekr", } m["kro-ekr"] = { "Eastern Kru", 5972899, "kro", } m["kro-grb"] = { "Grebo", 5601537, "kro-wkr", } m["kro-wee"] = { "Wee", nil, "kro-wkr", } m["kro-wkr"] = { "Western Kru", 5972897, "kro", } m["ku"] = { "nhóm ngôn ngữ Kurd", 36368, "ira-nwi", "Nhóm ngôn ngữ Kurd", "Kurd", } m["map"] = { "ngữ hệ Nam Đảo", 49228, "Ngữ hệ Nam Đảo", "Nam Đảo", } m["map-ata"] = { "nhóm ngôn ngữ Atayal", 716610, "map", "Nhóm ngôn ngữ Atayal", "Atayal", } m["map-tsu"] = { "nhóm ngôn ngữ Tsou", 716659, "map", "Nhóm ngôn ngữ Tsou", "Tsou", } m["mjg"] = { "nhóm ngôn ngữ Monguor", 34214, "xgn-shr", "Nhóm ngôn ngữ Monguor", "Monguor", } m["mkh"] = { "nhóm ngôn ngữ Môn-Khmer", 33199, "aav", "Nhóm ngôn ngữ Môn-Khmer", "Môn-Khmer", } m["mkh-asl"] = { "nhóm ngôn ngữ Asli", 3111082, "mkh", "Nhóm ngôn ngữ Asli", "Asli", } m["mkh-ban"] = { "nhóm ngôn ngữ Bahnar", 56309, "mkh", "Nhóm ngôn ngữ Bahnar", "Bahnar", } m["mkh-kat"] = { "nhóm ngôn ngữ Cơ Tu", 56697, "mkh", "Nhóm ngôn ngữ Cơ Tu", "Cơ Tu", } m["mkh-khm"] = { "nhóm ngôn ngữ Khơ Mú", 1323245, "mkh", "Nhóm ngôn ngữ Khơ Mú", "Khơ Mú", } m["mkh-kmr"] = { "nhóm ngôn ngữ Khmer", nil, "mkh", "Nhóm ngôn ngữ Khmer", "Khmer", } m["mkh-mnc"] = { "nhóm ngôn ngữ Môn", 3217497, "mkh", "Nhóm ngôn ngữ Môn", "Môn", } m["mkh-mng"] = { "nhóm ngôn ngữ Mảng", 3509556, "mkh", "Nhóm ngôn ngữ Mảng", "Mảng", } m["mkh-nbn"] = { "nhóm ngôn ngữ Bahnar Bắc", 56309, "mkh-ban", "Nhóm ngôn ngữ Bahnar", "Bahnar", } m["mkh-pal"] = { "nhóm ngôn ngữ Palaung", 2391173, "mkh", "Nhóm ngôn ngữ Palaung", "Palaung", } m["mkh-pea"] = { "nhóm ngôn ngữ Pear", 3073022, "mkh", "Nhóm ngôn ngữ Pear", "Pear", } m["mkh-pkn"] = { "Pakanic", nil, "mkh-mng", } m["mkh-vie"] = { "nhóm ngôn ngữ Việt", 2355546, "mkh", "Nhóm ngôn ngữ Việt", "Việt", } m["mno"] = { "nhóm ngôn ngữ Manobo", 3217483, "phi", "Nhóm ngôn ngữ Manobo", "Manobo", } m["mns"] = { "nhóm ngôn ngữ Mansi", 33759, "urj-ugr", "Nhóm ngôn ngữ Mansi", "Mansi", aliases = {"Mansi"}, } m["mun"] = { "nhóm ngôn ngữ Munda", 33892, "aav", "Nhóm ngôn ngữ Munda", "Munda", } m["myn"] = { "ngữ hệ Maya", 33738, "Ngữ hệ Maya", "Maya", } --[=[ Exceptional language and family codes for North American Indian languages can use the prefix "nai-", though "nai" is no longer itself a family code. ]=]-- m["nai-cat"] = { "Catawban", 3446638, "nai-sca", } m["nai-chu"] = { "Chumashan", 1288420, } m["nai-ckn"] = { "Chinookan", 610586, } m["nai-coo"] = { "Coosan", 940278, } m["nai-jcq"] = { "Jicaquean", 12179308, "hok" } m["nai-ker"] = { "Keresan", 35878, } m["nai-klp"] = { "Kalapuyan", 1569040, } m["nai-kta"] = { "ngữ hệ Kiowa-Tanoa", 386288, "Ngữ hệ Kiowa-Tanoa", "Kiowa-Tanoa", } m["nai-len"] = { "Lencan", 36189, aliases = {"Lenca"}, } m["nai-mdu"] = { "Maiduan", 33502, } m["nai-miz"] = { "Mixe-Zoquean", 954016, aliases = {"Mixe-Zoque"}, } m["nai-min"] = { "Misumalpan", 281693, "qfa-mch", aliases = {"Misuluan", "Misumalpa"}, } m["nai-mus"] = { "Muskogean", 902978, aliases = {"Muskhogean"}, } m["nai-pak"] = { "Pakawan", 65085487, "hok", } m["nai-pal"] = { "Palaihnihan", 1288332, } m["nai-plp"] = { "Plateau Penutian", 2307476, } m["nai-pom"] = { "Pomoan", 2618420, "hok", aliases = {"Pomo", "Kulanapan"}, } m["nai-sca"] = { "Siouan-Catawban", 34181, } m["nai-shp"] = { "Sahaptian", 114782, "nai-plp", } m["nai-shs"] = { "Shastan", 2991735, "hok", } m["nai-tot"] = { "Totozoquean", 7828419, } m["nai-ttn"] = { "ngữ hệ Totonac", 34039, "Ngữ hệ Totonac", "Totonac", aliases = {"Totonacan","Totonac-Tepehua", "Totonacan-Tepehuan"}, varieties = {"Totonac"}, } m["nai-tqn"] = { "Tequistlatecan", 1754988, "hok", aliases = {"Tequistlatec", "Chontal", "Chontalan", "Oaxacan Chontal", "Chontal of Oaxaca"}, } m["nai-tsi"] = { "Tsimshianic", 34134, } m["nai-utn"] = { "Utian", 13371763, "nai-you", aliases = {"Miwok-Costanoan", "Mutsun"}, } m["nai-wtq"] = { "Wintuan", 1294259, aliases = {"Wintun"}, } m["nai-xin"] = { "ngữ hệ Xinca", 1546494, "Ngữ hệ Xinca", "Xinca", aliases = {"Xincan","Xinka","Sinca","Szinca"}, } m["nai-ykn"] = { "Yukian", 2406722, aliases = {"Yuki-Wappo"}, } m["nai-you"] = { "Yok-Utian", 2886186, } m["nai-yuc"] = { "ngữ hệ Yuman-Cochimí", 579137, "Ngữ hệ Yuman-Cochimí", "Yuman-Cochimí", } m["ngf"] = { "ngữ hệ Liên New Guinea", 34018, "Ngữ hệ Liên New Guinea", "Liên New Guinea", } m["ngf-ais"] = { "Aisian", nil, "ngf-eso", } m["ngf-ang"] = { "nhóm ngôn ngữ Angan", 3217366, "ngf", "Nhóm ngôn ngữ Angan", "Angan", aliases = {"Kratke Range"}, -- Usher } m["ngf-ank"] = { "Angal-Kewa", 12626916, -- exist in dewiki and hrwiki "ngf-sak", } m["ngf-ask"] = { "Asmat-Kamoro", 3031400, "ngf", -- Wikipedia uses Asmat-Kamoro to refer to a narrower group excluding the Sabakor languages (Buruwai and Kamberau, -- which Glottolog splits into North Kamrau and South Kamrau [sic]), and uses Asmat-Kamrau to refer to what we and -- Glottolog call Asmat-Kamoro. Glottolog does not recognize the narrower grouping. aliases = {"Asmat-Kamrau", -- Wikipedia "Asmat-Kamrau Bay", -- Usher }, } m["ngf-asm"] = { "Asmat", 4807421, "ngf-ask", } m["ngf-ata"] = { "Ankave-Tainae-Akoye", nil, "ngf-ang", aliases = {"Southwest Kratke Range"}, -- Usher } m["ngf-awd"] = { "Awyu-Dumut", -- [[w:Awyu-Dumut languages]] redirects to [[w:Greater Awyu languages]] 4830163, -- exist in eswiki, hrwiki and ruwiki "ngf-gaw", aliases = {"Central Digul River"}, -- Usher } m["ngf-awy"] = { "Awyu", 96372866, "ngf-awd", } m["ngf-bda"] = { "Becking-Dawi", nil, -- Q55993716 ([[Category:Becking–Dawi languages]]) exists in enwiki "ngf-gaw", aliases = {"Becking and Dawi Rivers"}, -- Usher } m["ngf-bin"] = { "Binanderean", 3217374, -- Wikidata doesn't distinguish Binanderean from Greater Binanderean "ngf-gbi", aliases = {"Oro"}, -- Usher (2020) } m["ngf-boa"] = { "Boane", nil, "ngf-era", aliases = {"Boana", -- Glottolog's name "Wain"}, -- not in Usher; "Wain" often excludes Mungkip, perhaps because it's poorly documented } m["ngf-bos"] = { "Bosavi", 4947122, "ngf", aliases = {"Papuan Plateau"}, -- alternative name given by Wikipedia } m["ngf-bsi"] = { "Baruya-Simbari", nil, "ngf-ang", aliases = {"Northwest Kratke Range"}, -- Usher } m["ngf-cda"] = { "Central Dani", nil, "ngf-dan", aliases = {"Dani"}, -- Usher } m["ngf-chw"] = { "Chimbu-Wahgi", 3217383, "ngf", aliases = {"Simbu-Western Highlands"}, -- alternative name given by Wikipedia } m["ngf-dag"] = { "Dagan", 5208454, "ngf", -- not accepted as TNG by Glottolog but accepted by all others aliases = {"Meneao Range"}, } m["ngf-dal"] = { "Dallman", nil, "ngf-huo", aliases = {"Kinalakna-Kumukio", -- Pawley-Hammarström, who exclude Nomu, but they only had a numeral list of that language to work from "Northeast Huon", -- Usher }, } m["ngf-dan"] = { "Dani", 3217389, "ngf", -- Wikipedia renames the Dani languages to the Baliem Valley languages and sometimes (but not consistently) -- reserves the name Dani (or "Dani proper") for a narrower group excluding Wano and the poorly attested Ngalik -- languages (Nduga, Silimo, and the Yali dialect cluster, which we, following Ethnologue and Glottolog, split into -- Anggurk Yali, Ninia Yali and Pass Valley Yali). Glottolog does not recognize the narrower grouping. aliases = {"Baliem Valley", -- Wikipedia "Balim Valley", -- Usher }, } m["ngf-dum"] = { "Dumut", -- [[w:Dumut languages]] redirects to [[w:Greater Awyu languages]] nil, "ngf-awd", aliases = {"Wambon"}, -- Usher } m["ngf-ehu"] = { "Eastern Huon", -- Glottolog adds Ono and Sialum, Pawley-Hammarström adds Dedua 10567087, "ngf-huo", aliases = {"East Huon"}, -- Usher } m["ngf-eku"] = { "East Kutubuan", 5328752, "ngf", -- Not in TNG per Glottolog but accepted by all others. Sometimes grouped with Fasu to form a Kutubuan family. aliases = {"East Kutubu"}, -- Glottolog's name } m["ngf-enc"] = { "Engic", nil, "ngf-eng", aliases = {"Engan", -- Glottolog "Engan proper", -- Wikipedia "North Engan", -- alternative name given by Wikipedia "Trans-Enga", -- Usher }, } m["ngf-eng"] = { "Engan", 3217449, "ngf", aliases = {"Enga-Kewa-Huli", -- Glottolog, Pawley-Hammarström "Enga-Southern Highlands", -- Usher }, } m["ngf-era"] = { "Erap", nil, "ngf-fin", aliases = {"Erap River"}, -- Usher? } m["ngf-eso"] = { "East Sogeram", nil, "ngf-sog", } m["ngf-est"] = { "East Strickland", 5329440, "ngf", aliases = {"Strickland River"}, -- alternative name given by Wikipedia } m["ngf-eva"] = { "Evapia", nil, "ngf-rai", aliases = {"Evapia River"}, -- Usher } m["ngf-fgi"] = { "Fore-Gimi", nil, "ngf-gor", aliases = {"South Goroka"}, -- Usher } m["ngf-fhu"] = { "Finisterre-Huon", 3217453, "ngf", aliases = {"Finisterre Range-Huon Peninsula"}, -- per Usher } m["ngf-fin"] = { "Finisterre", 5450373, "ngf", } m["ngf-mad"] = { "nhóm ngôn ngữ Madang", 11217556, "ngf", "Nhóm ngôn ngữ Madang", "Madang", } m["ngf-okk"] = { "Ok", 7081687, "ngf", } m["ngf-sbh"] = { "South Bird's Head", 7566330, "ngf", } m["nic"] = { "ngữ hệ Niger-Congo", 33838, "Ngữ hệ Niger-Congo", "Niger-Congo", aliases = {"Niger-Kordofania"}, } m["nic-alu"] = { "nhóm ngôn ngữ Alumic", 4737355, "nic-plt", "Nhóm ngôn ngữ Alumic", "Alumic", } m["nic-bas"] = { "Basa", 4866154, "nic-knj", } m["nic-bbe"] = { "Eastern Beboid", nil, "nic-beb", } m["nic-bco"] = { "nhóm ngôn ngữ Benue-Congo", 33253, "nic-vco", "Nhóm ngôn ngữ Benue-Congo", "Benue-Congo", } m["nic-bcr"] = { "nhóm ngôn ngữ Bantoid-Cross", 806983, "nic-bco", "Nhóm ngôn ngữ Bantoid-Cross", "Bantoid-Cross", } m["nic-bdn"] = { "nhóm ngôn ngữ Bắc Bantoid", nil, "nic-bod", "Nhóm ngôn ngữ Bắc Bantoid", "Bắc Bantoid", aliases = {"North Bantoid"}, } m["nic-bds"] = { "nhóm ngôn ngữ Nam Bantoid", 3183152, "nic-bod", "Nhóm ngôn ngữ Nam Bantoid", "Nam Bantoid", aliases = {"Wide Bantu", "Bin"}, } m["nic-beb"] = { "Beboid", 813549, "nic-bds", } m["nic-ben"] = { "Bendi", 4887065, "nic-bcr", } m["nic-beo"] = { "Beromic", 4894642, "nic-plt", } m["nic-bod"] = { "nhóm ngôn ngữ Bantoid", 806992, "nic-bcr", "Nhóm ngôn ngữ Bantoid", "Bantoid", } m["nic-buk"] = { "Buli-Koma", nil, "nic-ovo", } m["nic-bwa"] = { "Bwa", 12628562, "nic-gur", otherNames = {"Bwamu", "Bomu"}, } m["nic-cde"] = { "Central Delta", 3813191, "nic-cri", } m["nic-cri"] = { "Cross River", 1141096, "nic-bcr", } m["nic-dag"] = { "nhóm ngôn ngữ Dagbani", nil, "nic-wov", "Nhóm ngôn ngữ Dagbani", "Dagbani", } m["nic-dak"] = { "Dakoid", 1157745, "nic-bdn", } m["nic-dge"] = { "Escarpment Dogon", 5397128, "qfa-dgn", } m["nic-dgw"] = { "West Dogon", nil, "qfa-dgn", } m["nic-eko"] = { "Ekoid", 1323395, "nic-bds", } m["nic-eov"] = { "Eastern Oti-Volta", nil, "nic-ovo", aliases = {"Samba"}, } m["nic-fru"] = { "Furu", 5509783, "nic-bds", } m["nic-gne"] = { "Eastern Gurunsi", 12633072, "nic-gns", aliases = {"Eastern Grũsi"}, } m["nic-gnn"] = { "Northern Gurunsi", nil, "nic-gns", aliases = {"Northern Grũsi"}, } m["nic-gnw"] = { "Western Gurunsi", nil, "nic-gns", aliases = {"Western Grũsi"}, } m["nic-gns"] = { "Gurunsi", 721007, "nic-gur", aliases = {"Grũsi"}, } m["nic-gre"] = { "Eastern Grassfields", 5330160, "nic-grf", } m["nic-grf"] = { "Grassfields", 750932, "nic-bds", aliases = {"Grassfields Bantu", "Wide Grassfields"}, } m["nic-grm"] = { "Gurma", 30587833, "nic-ovo", } m["nic-grs"] = { "Southwest Grassfields", 7571285, "nic-grf", } m["nic-gur"] = { "Gur", 33536, "alv-sav", aliases = {"Voltaic"}, } m["nic-ief"] = { "Ibibio-Efik", 2743643, "nic-lcr", } m["nic-jer"] = { "Jera", nil, "nic-kne", } m["nic-jkn"] = { "nhóm ngôn ngữ Jukunoid", 1711622, "nic-pla", "Nhóm ngôn ngữ Jukunoid", "Jukunoid", } m["nic-jrn"] = { "Jarawan", 1683430, "nic-mba", } m["nic-jrw"] = { "Jarawa", 35423, "nic-jrn", } m["nic-kam"] = { "Kambari", 6356294, "nic-knj", } m["nic-ktl"] = { "Katloid", nil, "nic", } m["nic-kau"] = { "nhóm ngôn ngữ Kauru", nil, "nic-kne", "Nhóm ngôn ngữ Kauru", "Kauru", } m["nic-kmk"] = { "Kamuku", 6359821, "nic-knj", } m["nic-kne"] = { "nhóm ngôn ngữ Đông Kainji", 5328687, "nic-knj", "Nhóm ngôn ngữ Đông Kainji", "Đông Kainji", } m["nic-knj"] = { "nhóm ngôn ngữ Kainji", 681495, "nic-pla", "Nhóm ngôn ngữ Kainji", "Kainji", } m["nic-knn"] = { "Northwest Kainji", 7060098, "nic-knj", } m["nic-ktl"] = { "Katloid", 6377681, "nic", aliases = {"Katla", "Katla-Tima"}, } m["nic-lcr"] = { "Lower Cross River", 3813193, "nic-cri", } m["nic-mam"] = { "Mamfe", 2005898, "nic-bds", aliases = {"Nyang"}, } m["nic-mba"] = { "Mbam", 687826, "nic-bds", } m["nic-mbc"] = { "Mba", 6799561, "nic-ubg", } m["nic-mbw"] = { "West Mbam", nil, "nic-mba", } m["nic-mmb"] = { "nhóm ngôn ngữ Mambiloid", 1888151, otherNames = {"Bắc Bantoid"}, -- per Wikipedia, North Bantoid is the parent family "nic-bdn", "Nhóm ngôn ngữ Mambiloid", "Mambiloid", } m["nic-mom"] = { "Momo", 6897393, "nic-grf", } m["nic-mre"] = { "Moré", nil, "nic-wov", } m["nic-ngd"] = { "Ngbandi", 36439, "nic-ubg", } m["nic-nge"] = { "Ngemba", 7022271, "nic-gre", } m["nic-ngk"] = { "Ngbaka", 3217499, "nic-ubg", } m["nic-nin"] = { "Ninzic", 7039282, "nic-plt", } m["nic-nka"] = { "Nkambe", 7042520, "nic-gre", } m["nic-nkb"] = { "Baka", nil, "nic-nkw", } m["nic-nke"] = { "Eastern Ngbaka", nil, "nic-ngk", } m["nic-nkg"] = { "Gbanziri", nil, "nic-nkw", } m["nic-nkk"] = { "Kpala", nil, "nic-nkw", } m["nic-nkm"] = { "Mbaka", nil, "nic-nkw", } m["nic-nkw"] = { "Western Ngbaka", nil, "nic-ngk", } m["nic-npd"] = { "North Plateau Dogon", nil, "qfa-dgn", } m["nic-nun"] = { "Nun", 13654297, "nic-gre", } m["nic-nwa"] = { "Nanga-Walo", nil, "qfa-dgn", } m["nic-ogo"] = { "Ogoni", 2350726, "nic-cri", aliases = {"Ogonoid"}, } m["nic-ovo"] = { "Oti-Volta", 1157178, "nic-gur", } m["nic-pla"] = { "nhóm ngôn ngữ Platoid", 453244, "nic-bco", "Nhóm ngôn ngữ Platoid", "Platoid", aliases = {"Đông Nigeria"}, } m["nic-plc"] = { "nhóm ngôn ngữ Trung Plateau", 5061668, "nic-plt", "Nhóm ngôn ngữ Trung Plateau", "Trung Plateau", } m["nic-pld"] = { "Plains Dogon", nil, "qfa-dgn", } m["nic-ple"] = { "East Plateau", 5329154, "nic-plt", } m["nic-pls"] = { "South Plateau", 7568236, "nic-plt", aliases = {"Jilic-Eggonic"}, } m["nic-plt"] = { "nhóm ngôn ngữ Plateau", 1267471, "nic-pla", "Nhóm ngôn ngữ Plateau", "Plateau", } m["nic-ras"] = { "Rashad", 3401986, "nic", } m["nic-rnc"] = { "Central Ring", nil, "nic-rng", } m["nic-rng"] = { "Ring", 2269051, "nic-grf", aliases = {"Ring Road"}, } m["nic-rnn"] = { "Northern Ring", nil, "nic-rng", } m["nic-rnw"] = { "Western Ring", nil, "nic-rng", } m["nic-ser"] = { "Sere", 7453058, "nic-ubg", } m["nic-shi"] = { "Shiroro", 7498953, "nic-knj", aliases = {"Pongu"}, } m["nic-sis"] = { "Sisaala", 36532, "nic-gnw", } m["nic-tar"] = { "Tarokoid", 2394472, "nic-plt", } m["nic-tiv"] = { "nhóm ngôn ngữ Tivoid", 752377, "nic-bds", "Nhóm ngôn ngữ Tivoid", "Tivoid", } m["nic-tvc"] = { "Central Tivoid", nil, "nic-tiv", } m["nic-tvn"] = { "Northern Tivoid", nil, "nic-tiv", } m["nic-ubg"] = { "nhóm ngôn ngữ Ubangi", 33932, "nic-vco", -- or none "Nhóm ngôn ngữ Ubangi", "Ubangi", } m["nic-uce"] = { "East-West Upper Cross River", nil, "nic-ucr", } m["nic-ucn"] = { "North-South Upper Cross River", nil, "nic-ucr", } m["nic-ucr"] = { "Upper Cross River", 4108624, "nic-cri", aliases = {"Upper Cross"}, } m["nic-vco"] = { "nhóm ngôn ngữ Volta-Congo", 37228, "alv", "Nhóm ngôn ngữ Volta-Congo", "Volta-Congo", } m["nic-wov"] = { "Western Oti-Volta", nil, "nic-ovo", aliases = {"Moré-Dagbani"} } m["nic-ykb"] = { "Yukubenic", 16909196, "nic-plt", aliases = {"Oohum"}, } m["nic-ymb"] = { "Yambasa", nil, "nic-mba", } m["nic-yon"] = { "Yom-Nawdm", nil, "nic-ovo", aliases = {"Moré-Dagbani"} } m["nub"] = { "Nubian", 1517194, "sdv-nes", } m["nub-hil"] = { "Hill Nubian", 5762211, "nub", aliases = {"Kordofan Nubian"}, } m["omq"] = { "ngữ hệ Oto-Mangue", 33669, "Ngữ hệ Oto-Mangue", "Oto-Mangue", } m["omq-cha"] = { "Chatino", 35111, "omq-zap", } m["omq-chi"] = { "Chinantecan", 35828, "omq", } m["omq-cui"] = { "Cuicatec", 616024, "omq-mix", } m["omq-maz"] = { "Mazatecan", 36230, "omq", aliases = {"Mazatec"}, } m["omq-mix"] = { "ngữ tộc Mixtec", 21996392, "omq", "Ngữ tộc Mixtec", "Mixtec", } m["omq-mxt"] = { "nhóm ngôn ngữ Mixtec", 36363, "omq-mix", "Nhóm ngôn ngữ Mixtec", "Mixtec", } m["omq-otp"] = { "Oto-Pamean", nil, "omq", } m["omq-pop"] = { "Popolocan", 5132273, "omq", } m["omq-tri"] = { "nhóm ngôn ngữ Triqui", 780200, "omq-mix", "Nhóm ngôn ngữ Triqui", "Triqui", aliases = {"Trique"}, } m["omq-zap"] = { "nhóm ngôn ngữ Zapotec", 8066463, "omq", "Nhóm ngôn ngữ Zapotec", "Zapotec", } m["omq-zpc"] = { "Zapotec", 13214, "omq-zap", } m["omv"] = { "nhóm ngôn ngữ Omo", 33860, "afa", "Nhóm ngôn ngữ Omo", "Omo", } m["omv-aro"] = { "nhóm ngôn ngữ Aari", 3699526, "omv", "Nhóm ngôn ngữ Aari", "Aari", aliases = {"Ari-Banna", "Nam Omo", "Somo"}, } m["omv-diz"] = { "nhóm ngôn ngữ Dizi", 430251, "omv", "Nhóm ngôn ngữ Dizi", "Dizi", aliases = {"Maji", "Majoid"}, } m["omv-eom"] = { "East Ometo", 20527288, "omv-ome", } m["omv-gon"] = { "Gonga", 4143043, "omv", aliases = {"Kefoid"}, } m["omv-mao"] = { "Mao", 1351495, "omv", } m["omv-nom"] = { "nhóm ngôn ngữ Bắc Ometo", nil, "omv-ome", "Nhóm ngôn ngữ Bắc Ometo", "Bắc Ometo", } m["omv-ome"] = { "nhóm ngôn ngữ Ometo", 36310, "omv", "Nhóm ngôn ngữ Ometo", "Ometo", } m["oto"] = { "Otomian", 1270220, "omq-otp", } m["oto-otm"] = { "Otomi", nil, "oto", } m["paa"] = { "ngữ hệ Papua", 236425, "qfa-not", "Ngữ hệ Papua", "Papua", } m["paa-arf"] = { "Arafundi", 4783702, } m["paa-asa"] = { "Arai-Samaia", 48803569, } m["paa-bng"] = { "Baining", 748487, aliases = {"East New Britain"}, } m["paa-brd"] = { "ngữ hệ Thượng Tami", 1752158, "Ngữ hệ Thượng Tami", "Thượng Tami", aliases = {"Border", "Upper Tami"}, } m["paa-egb"] = { "East Geelvink Bay", 1497678, aliases = {"East Cenderawasih"}, } m["paa-eng"] = { "Engan", 3217449, } m["paa-iwm"] = { "ngữ hệ Iwam", 15147853, "Ngữ hệ Iwam", "Iwam", } m["paa-kag"] = { -- recode as ngf-kag? "Kainantu-Goroka", 3217463, "ngf", } m["paa-kiw"] = { "Kiwaian", 338449, } m["paa-kut"] = { "nhóm ngôn ngữ Kutubuan", 48767893, "paa-pag", "Nhóm ngôn ngữ Kutubuan", "Kutubuan", } m["paa-kwm"] = { "Kwomtari", 2075415, } m["paa-lkp"] = { "Lakes Plain", 6478969, } m["paa-lsp"] = { "Lower Sepik", 7061700, aliases = {"Nor-Pondo"}, } m["paa-mai"] = { "Mairasi", 6736896, } m["paa-msk"] = { "Sko", 953509, aliases = {"Skou"}, } m["paa-nbo"] = { "North Bougainville", 749496, } m["paa-nim"] = { "Nimboran", 12638426, } m["paa-nha"] = { "North Halmahera", nil, "paa-wpa", } m["paa-pag"] = { "ngữ hệ vùng vịnh Papua", 48803685, "Ngữ hệ vùng vịnh Papua", "vùng vịnh Papua", } m["paa-pau"] = { "Pauwasi", 7155496, } m["paa-ram"] = { "Ramu", 3442808, } m["paa-sbo"] = { "South Bougainville", 3217380, } m["paa-sen"] = { "Sentani", 17044584, "paa-wpa", } m["paa-sep"] = { "ngữ hệ Sepik", 3508772, "Ngữ hệ Sepik", "Sepik", } m["paa-tkw"] = { "Tor-Kwerba", 7827523, } m["paa-wpa"] = { "West Papuan", 1363026, } m["paa-yam"] = { "Yam", 15062272, aliases = {"Morehead and Upper Maro River"}, } m["paa-yua"] = { "Yuat", 8060096, } m["phi"] = { "nhóm ngôn ngữ Philippines", 947858, "poz", "Nhóm ngôn ngữ Philippines", "Philippines", } m["phi-kal"] = { "Kalamian", 3217466, "phi", aliases = {"Calamian"}, } m["poz"] = { "nhóm ngôn ngữ Mã Lai-Đa Đảo", 143158, "map", "Nhóm ngôn ngữ Mã Lai-Đa Đảo", "Mã Lai-Đa Đảo", } m["poz-aay"] = { "Admiralty Islands", 2701306, "poz-oce", } m["poz-bnn"] = { "nhóm ngôn ngữ Bắc Borneo", 1427907, "poz", "Nhóm ngôn ngữ Bắc Borneo", "Bắc Borneo", } m["poz-bre"] = { "nhóm ngôn ngữ Đông Barito", 2701314, "poz", "Nhóm ngôn ngữ Đông Barito", "Đông Barito", } m["poz-brw"] = { "nhóm ngôn ngữ Tây Barito", 2761679, "poz", "Nhóm ngôn ngữ Tây Barito", "Tây Barito", } m["poz-bss"] = { "nhóm ngôn ngữ Bali-Sasak-Sumbawa", 3396043, "poz-msa", "Nhóm ngôn ngữ Bali-Sasak-Sumbawa", "Bali-Sasak-Sumbawa", } m["poz-btk"] = { "nhóm ngôn ngữ Bungku-Tolaki", 3217381, "poz-clb", "Nhóm ngôn ngữ Bungku-Tolaki", "Bungku-Tolaki", } m["poz-cet"] = { "nhóm ngôn ngữ Mã Lai-Đa Đảo Trung-Đông", 2269883, "poz", "Nhóm ngôn ngữ Mã Lai-Đa Đảo Trung-Đông", "Mã lai-Đa Đảo Trung-Đông", } m["poz-clb"] = { "nhóm ngôn ngữ Celebes", 1078041, "poz", "Nhóm ngôn ngữ Celebes", "Celebes", } m["poz-cln"] = { "New Caledonian", 3091221, "poz-occ", } m["poz-cma"] = { "Central Maluku", 3217479, "poz-cet", } m["poz-hce"] = { "Halmahera-Cenderawasih", 2526616, "pqe", } m["poz-kal"] = { "nhóm ngôn ngữ Kaili-Pamona", 3217465, "poz-clb", "Nhóm ngôn ngữ Kaili-Pamona", "Kaili-Pamona", } m["poz-lgx"] = { "Lampungic", 49215, "poz-sus", } m["poz-mcm"] = { "nhóm ngôn ngữ Mã Lai-Chăm", nil, "poz-msa", "Nhóm ngôn ngữ Mã Lai-Chăm", "Mã Lai-Chăm", } m["poz-mic"] = { "nhóm ngôn ngữ Micronesia", 420591, "poz-occ", "Nhóm ngôn ngữ Micronesia", "Micronesia'," } m["poz-mly"] = { "nhóm ngôn ngữ Mã Lai", 662628, "poz-mcm", "Nhóm ngôn ngữ Mã Lai", "Mã Lai", } m["poz-msa"] = { "nhóm ngôn ngữ Mã Lai-Sumbawa", 1363818, "poz", "Nhóm ngôn ngữ Mã Lai-Sumbawa", "Mã Lai-Sumbawa", } m["poz-mun"] = { "nhóm ngôn ngữ Muna-Buton", 3037924, "poz-clb", "Nhóm ngôn ngữ Muna-Buton", "Muna-Buton", } m["poz-nws"] = { "nhóm ngôn ngữ Tây Bắc Sumatra", 2071308, "poz", "Nhóm ngôn ngữ Tây Bắc Sumatra", "Tây Bắc Sumatra", } m["poz-occ"] = { "nhóm ngôn ngữ Trung-Đông Châu Đại Dương", 2068435, "poz-oce", "Nhóm ngôn ngữ Trung-Đông Châu Đại Dương", "Trung-Đông Châu Đại Dương", } m["poz-oce"] = { "nhóm ngôn ngữ Châu Đại Dương", 324457, "pqe", "Nhóm ngôn ngữ Châu Đại Dương", "Châu Đại Dương", } m["poz-ocw"] = { "nhóm ngôn ngữ Tây Châu Đại Dương", 2701282, "poz-oce", "Nhóm ngôn ngữ Tây Châu Đại Dương", "Tây Châu Đại Dương", } m["poz-pcc"] = { "nhóm ngôn ngữ Trung Thái Bình Dương", 3130237, "poz-occ", "Nhóm ngôn ngữ Trung Thái Bình Dương", "Trung Thái Bình Dương", } m["poz-pep"] = { "Eastern Polynesian", 390979, "poz-pnp", } m["poz-pnp"] = { "nhóm ngôn ngữ Đa Đảo hạt nhân", 743851, "poz-pol", "Nhóm ngôn ngữ Đa Đảo hạt nhân", "Đa Đảo hạt nhân", } m["poz-pol"] = { "nhóm ngôn ngữ Đa Đảo", 390979, "poz-pcc", "Nhóm ngôn ngữ Đa Đảo", "Đa Đảo", } m["poz-san"] = { "nhóm ngôn ngữ Sabah", 3217517, "poz-bnn", "Nhóm ngôn ngữ Sabah", "Sabah", } m["poz-sbj"] = { "nhóm ngôn ngữ Sama-Bajaw", 2160409, "poz", "Nhóm ngôn ngữ Sama-Bajaw", "Sama-Bajaw", } m["poz-slb"] = { "nhóm ngôn ngữ Saluan-Banggai", 3217519, "poz-clb", "Nhóm ngôn ngữ Saluan-Banggai", "Saluan-Banggai", } m["poz-sls"] = { "nhóm ngôn ngữ Đông Nam Solomon", 3119671, "poz-occ", "Nhóm ngôn ngữ Đông Nam Solomon", "Đông Nam Solomon", } m["poz-ssw"] = { "South Sulawesi", 2778190, "poz-sus", } m["poz-sus"] = { "Sunda-Sulawesi", 319552, "poz", } m["poz-swa"] = { "North Sarawakan", 538569, "poz-bnn", } m["poz-tim"] = { "nhóm ngôn ngữ Timor", 7806987, "poz-cet", "Nhóm ngôn ngữ Timor", "Timor", } m["poz-tot"] = { "Tomini-Tolitoli", 3217541, "poz-clb", } m["poz-vnc"] = { "North-Central Vanuatu", 3039118, "poz-occ", } m["poz-wot"] = { "nhóm ngôn ngữ Wotu-Wolio", 1041317, "poz-clb", "Nhóm ngôn ngữ Wotu-Wolio", "Wotu-Wolio", } m["pqe"] = { "nhóm ngôn ngữ Mã Lai-Đa Đảo Đông", 2269883, "poz-cet", "Nhóm ngôn ngữ Mã Lai-Đa Đảo Đông", "Mã Lai-Đa Đảo Đông", } m["pra"] = { "Prakrit", 192170, "inc", aliases = {"Prakritic"}, protoLanguage = "inc-pra", } m["qfa-adc"] = { "Central Great Andamanese", nil, "qfa-adm", } m["qfa-adm"] = { "Great Andamanese", 3515103, } m["qfa-adn"] = { "Northern Great Andamanese", nil, "qfa-adm", } m["qfa-ads"] = { "Southern Great Andamanese", nil, "qfa-adm", } m["qfa-ain"] = { "ngữ hệ Ainu", 50111972, "Ngữ hệ Ainu", "Ainu", aliases = {"Ainu"}, } m["qfa-bej"] = { "nhóm ngôn ngữ Bối-Cát Triệu", nil, "qfa-bet", "Nhóm ngôn ngữ Bối-Cát Triệu", "Bối-Cát Triệu" } m["qfa-bet"] = { "nhóm ngôn ngữ Bối-Thái", nil, "qfa-tak", "Nhóm ngôn ngữ Bối-Thái", "Bối-Thái", aliases = {"Thái-Bối", "Daic-Beic", "Beic-Daic"}, } m["qfa-buy"] = { "nhóm ngôn ngữ Bố Ương", 1109927, "qfa-kra", "Nhóm ngôn ngữ Bố Ương", "Bố Ương", } m["qfa-cka"] = { "ngữ hệ Chukotka-Kamchatka", 33255, "Ngữ hệ Chukotka-Kamchatka", "Chukotka-Kamchatka", } m["qfa-ckn"] = { "nhóm ngôn ngữ Chukotka", 2606732, "qfa-cka", "Nhóm ngôn ngữ Chukotka", "Chukotka", } m["qfa-cnt"] = { "contact", 133253514, "qfa-not", } m["qfa-dgn"] = { "Dogon", 1234776, "nic", } m["qfa-dny"] = { "Dene-Yeniseian", 21103, aliases = {"Dené-Yeniseian"}, } m["qfa-gel"] = { "Gelao", 56401, "qfa-kra", } m["qfa-hur"] = { "Hurro-Urartian", 1144159, } m["qfa-iso"] = { "nhóm ngôn ngữ biệt lập", 33648, "qfa-not", "Nhóm ngôn ngữ biệt lập", "biệt lập", } m["qfa-kad"] = { "Kadu", -- considered either Nilo-Saharan or independent/none 1720989, } m["qfa-kms"] = { "nhóm ngôn ngữ Động-Thủy", 1023641, "qfa-tak", "Nhóm ngôn ngữ Động-Thủy", "Động-Thủy", } m["qfa-kor"] = { "ngữ hệ Triều Tiên", 11263525, "Ngữ hệ Triều Tiên", "Triều Tiên", } m["qfa-kra"] = { "Kra", 1022087, "qfa-tak", } m["qfa-lic"] = { "nhóm ngôn ngữ Hlai", 1023648, "qfa-tak", "Nhóm ngôn ngữ Hlai", "Hlai", aliases = {"Hlaic"}, } m["qfa-mal"] = { "Left May", 614468, "paa-asa", } m["qfa-mch"] = { -- used in both N and S America "Macro-Chibchan", 3438062, } m["qfa-mix"] = { "mixed", 33694, "qfa-not", } m["qfa-not"] = { "not a family", nil, "qfa-not", } m["qfa-onb"] = { "Be", nil, "qfa-bet", aliases = {"Ong-Be", "Beic"}, } m["qfa-ong"] = { "ngữ hệ Önge", 2090575, aliases = {"Angan", "South Andamanese", "Jarawa-Onge"}, } m["qfa-sub"] = { "ngôn ngữ cơ tầng", 20730913, "qfa-not", } m["qfa-tak"] = { "ngữ hệ Kra-Dai", 34171, "Ngữ hệ Kra-Dai", "Kra-Dai", aliases = {"Tai-Kadai", "Kadai"}, } m["qfa-tap"] = { "Timor-Alor-Pantar", 16590002, } m["qfa-tor"] = { "Torricelli", 1333831, } m["qfa-tyn"] = { "ngữ hệ Tyrseni", 1344038, "Ngữ hệ Tyrseni", "Tyrseni", } m["qfa-xgs"] = { "ngữ hệ Tiên Ti-Mông Cổ", 108887939, "Ngữ hệ Tiên Ti-Mông Cổ", "Tiên Ti-Mông Cổ", } m["qfa-xgx"] = { "nhóm ngôn ngữ Liên Mông Cổ", 107619002, "qfa-xgs", "Nhóm ngôn ngữ Liên Mông Cổ", "Liên Mông Cổ", } m["qfa-yen"] = { "Yeniseian", 27639, "qfa-dny", aliases = {"Yeniseic", "Yenisei-Ostyak"}, } m["qfa-yno"] = { "Northern Yeniseian", nil, "qfa-yen", } m["qfa-yso"] = { "Southern Yeniseian", nil, "qfa-yen", } m["qfa-yuk"] = { "ngữ hệ Yukaghir", 34164, "Ngữ hệ Yukaghir", "Yukaghir", aliases = {"Yukagir", "Jukagir"}, } m["qwe"] = { "ngữ hệ Quechua", 5218, "Ngữ hệ Quechua", "Quechua", } m["raj"] = { "nhóm ngôn ngữ Rajasthan", 13196, "inc-wes", "Nhóm ngôn ngữ Rajasthan", "Rajasthan", protoLanguage = "inc-ogu", } m["roa"] = { "nhóm ngôn ngữ Rôman", 19814, "itc", aliases = {"Rôman", "Latinh", "Tân Latinh"}, "Nhóm ngôn ngữ Rôman", "Rôman", protoLanguage = "la", } m["roa-asl"] = { "Asturleonese", 35390, "roa-ibe", protoLanguage = "roa-ole", } m["roa-cas"] = { "nhóm ngôn ngữ Castilla", 71924, "roa-ibe", "Nhóm ngôn ngữ Castilla", "Castilla", aliases = {"Castillian", "Castilic", "Castillic"}, protoLanguage = "osp", } m["roa-dal"] = { "Dalmatian Romance", 97646077, "roa-itd", } m["roa-eas"] = { "Eastern Romance", 147576, "roa", } m["roa-ibe"] = { "nhóm ngôn ngữ Iberia-Rôman", 749533, "roa-wes", "Nhóm ngôn ngữ Iberia-Rôman", "Iberia-Rôman", aliases = {"Iberia-Rôman", "Tây Iberia-Rôman"}, } m["roa-wes"] = { "nhóm ngôn ngữ Tây Rôman", 2714388, "roa-iwr", "Nhóm ngôn ngữ Tây Rôman", "Tây Rôman", } m["roa-iwr"] = { "nhóm ngôn ngữ Ý-Tây Rôman", 112608, "roa", "Nhóm ngôn ngữ Ý-Tây Rôman", "Ý-Tây Rôman", aliases = {"Ý-Tây"}, } m["roa-itd"] = { "Italo-Dalmatian", 3313381, "roa", } m["roa-git"] = { "Gallo-Italic", 516074, "roa", } m["roa-oil"] = { "Oïl", 37351, "roa", protoLanguage = "fro", } m["roa-ocr"] = { "Occitano-Romance", 599958, "roa", } m["roa-rhe"] = { "Rhaeto-Romance", 515593, "roa", } --[=[ Exceptional language and family codes for South American Indian languages can use the prefix "sai-", though "sai" is no longer itself a family code. ]=]-- m["sai-ara"] = { "Araucanian", 626630, } m["sai-aym"] = { "Aymaran", 33010, } m["sai-bar"] = { "Barbacoan", 807304, aliases = {"Barbakoan"}, } m["sai-bor"] = { "Boran", 43079266, } m["sai-cah"] = { "Cahuapanan", 1025793, } m["sai-car"] = { "ngữ hệ Carib", 33090, "Ngữ hệ Carib", "Carib", aliases = {"Cariban"}, } m["sai-cer"] = { "Cerrado", 98078151, "sai-jee", aliases = {"Amazonian Jê"}, } m["sai-chc"] = { "Chocoan", 1075616, aliases = {"Choco", "Chocó"}, } m["sai-cho"] = { "Chonan", 33019, aliases = {"Chon"}, } m["sai-cje"] = { "Central Jê", 18010843, "sai-cer", aliases = {"Akuwẽ"}, } m["sai-cpc"] = { "Chapacuran", 1062626, } m["sai-crn"] = { "Charruan", 3112423, aliases = {"Charrúan"}, } m["sai-ctc"] = { "Catacaoan", 5051139, } m["sai-guc"] = { "Guaicuruan", 1974973, "sai-mgc", aliases = {"Guaicurú", "Guaycuruana", "Guaikurú", "Guaycuruano", "Guaykuruan", "Waikurúan"}, } m["sai-guh"] = { "Guahiban", 944056, aliases = {"Guahiboan", "Guajiboan", "Wahivoan"}, } m["sai-gui"] = { "Guianan", nil, "sai-car", aliases = {"Guianan Carib", "Guiana Carib"}, } m["sai-har"] = { "Harákmbut", 1584402, "sai-hkt", aliases = {"Harákmbet"}, } m["sai-hkt"] = { "Harákmbut-Katukinan", 17107635, } m["sai-hrp"] = { "ngữ hệ Huarpe", 1578336, "Ngữ hệ Huarpe", "Huarpe", aliases = {"Warpean", "Huarpe", "Warpe"}, } m["sai-jee"] = { "Jê", 1483594, "sai-mje", aliases = {"Gê", "Jean", "Gean", "Jê-Kaingang", "Ye"}, } m["sai-jir"] = { "Jirajaran", 3028651, aliases = {"Hiraháran"}, } m["sai-jiv"] = { "ngữ hệ Jivaro", 1393074, "Ngữ hệ Jivaro", "Jivaro", aliases = {"Hívaro", "Jibaro", "Jibaroana", "Jívaro"}, } m["sai-ktk"] = { "Katukinan", 2636000, "sai-hkt", aliases = {"Catuquinan"}, } m["sai-kui"] = { "Kuikuroan", nil, "sai-car", aliases = {"Kuikuro", "Nahukwa"}, } m["sai-map"] = { "Mapoyan", 61096301, "sai-ven", aliases = {"Mapoyo", "Mapoyo-Yabarana", "Mapoyo-Yavarana", "Mapoyo-Yawarana"}, } m["sai-mas"] = { "Mascoian", 1906952, aliases = {"Mascoyan", "Maskoian", "Enlhet-Enenlhet"}, } m["sai-mgc"] = { "Mataco-Guaicuru", 255512, } m["sai-mje"] = { "Macro-Jê", 887133, aliases = {"Macro-Gê"}, } m["sai-mtc"] = { "Matacoan", 2447424, "sai-mgc", } m["sai-mur"] = { "Muran", 33826, aliases = {"Mura"}, } m["sai-nad"] = { "Nadahup", 1856439, aliases = {"Makú", "Macú", "Vaupés-Japurá"}, } m["sai-nje"] = { "Northern Jê", 98078225, "sai-cer", aliases = {"Core Jê"}, } m["sai-nmk"] = { "Nambikwaran", 15548027, aliases = {"Nambicuaran", "Nambiquaran", "Nambikuaran"}, } m["sai-otm"] = { "Otomacoan", 3217503, aliases = {"Otomákoan", "Otomakoan"}, } m["sai-pan"] = { "nhóm ngôn ngữ Pano", 1544537, "sai-pat", "Nhóm ngôn ngữ Pano", "Pano", aliases = {"Panoan"}, } m["sai-pat"] = { "ngữ hệ Pano-Tacana", 2475746, "Ngữ hệ Pano-Tacana", "Pano-Tacana", aliases = {"Pano-Tacana", "Pano-Takana", "Páno-Takána", "Pano-Takánan"}, } m["sai-pek"] = { "Pekodian", 107451736, "sai-car", aliases = {"South Amazonian Carib", "Southern Cariban", "Pekodi"}, } m["sai-pem"] = { "Pemongan", nil, "sai-ven", aliases = {"Pemong", "Pemóng", "Purukoto"}, } m["sai-prk"] = { "Parukotoan", 107451482, "sai-car", aliases = {"Parukoto"}, } m["sai-sje"] = { "Southern Jê", 98078245, "sai-jee", } m["sai-tac"] = { "Tacanan", 3113762, "sai-pat", } m["sai-tar"] = { "Taranoan", 105097814, "sai-gui", aliases = {"Trio", "Tarano"}, } m["sai-tuc"] = { "Tucanoan", 788144, } m["sai-tyu"] = { "Ticuna-Yuri", 4467010, } m["sai-ucp"] = { "Uru-Chipaya", 2475488, aliases = {"Uru-Chipayan"}, } m["sai-ven"] = { "Venezuelan Cariban", nil, "sai-car", aliases = {"Venezuelan Carib", "Venezuelan", "Venezuelano"}, } m["sai-wic"] = { "Wichí", 3027047, } m["sai-wit"] = { "Witotoan", 43079317, aliases = {"Huitotoan", "Uitotoan"}, } m["sai-ynm"] = { "Yanomami", nil, aliases = {"Yanomam", "Shamatari", "Yamomami", "Yanomaman"}, } m["sai-yuk"] = { "Yukpan", nil, "sai-car", aliases = {"Yukpa", "Yukpano", "Yukpa-Japreria"}, } m["sai-zam"] = { "Zamucoan", 3048461, aliases = {"Samúkoan"}, } m["sai-zap"] = { "Zaparoan", 33911, aliases = {"Záparoan", "Saparoan", "Sáparoan", "Záparo", "Zaparoano", "Zaparoana"}, } m["sal"] = { "ngữ hệ Salish", 33985, "Ngữ hệ Salish", "Salish", } m["sdv"] = { "Eastern Sudanic", 2036148, "ssa", } m["sdv-bri"] = { "Bari", nil, "sdv-nie", } m["sdv-daj"] = { "Daju", 956724, "sdv", } m["sdv-dnu"] = { "Dinka-Nuer", nil, "sdv-niw", } m["sdv-eje"] = { "Eastern Jebel", 3408878, "sdv", } m["sdv-kln"] = { "Kalenjin", 637228, "sdv-nis", } m["sdv-lma"] = { "Lotuko-Maa", nil, "sdv-nie", } m["sdv-lon"] = { "Northern Luo", nil, "sdv-luo", } m["sdv-los"] = { "Southern Luo", 7570103, "sdv-luo", } m["sdv-luo"] = { "Luo", nil, "sdv-niw", } m["sdv-nes"] = { "Northern Eastern Sudanic", 4810496, "sdv", aliases = {"Astaboran", "Ek Sudanic"}, } m["sdv-nie"] = { "Eastern Nilotic", 153795, "sdv-nil", } m["sdv-nil"] = { "Nilotic", 513408, "sdv", } m["sdv-nis"] = { "Southern Nilotic", 1552410, "sdv-nil", } m["sdv-niw"] = { "Western Nilotic", 3114989, "sdv-nil", } m["sdv-nma"] = { "Nandi-Markweta", nil, "sdv-kln", } m["sdv-nyi"] = { "Nyima", 11688746, "sdv-nes", aliases = {"Nyimang"}, } m["sdv-tmn"] = { "Taman", 3408873, "sdv-nes", aliases = {"Tamaic"}, } m["sdv-ttu"] = { "Teso-Turkana", 7705551, "sdv-nie", aliases = {"Ateker"}, } m["sel"] = { "nhóm ngôn ngữ Selkup", 34008, "syd", "Nhóm ngôn ngữ Selkup", "Selkup", } m["sem"] = { "nhóm ngôn ngữ Semit", 34049, "afa", "Nhóm ngôn ngữ Semit", "Semit", } m["sem-ara"] = { "nhóm ngôn ngữ Aram", 28602, "sem-nwe", "Nhóm ngôn ngữ Aram", "Aram", protoLanguage = "arc", } m["sem-arb"] = { "nhóm ngôn ngữ Ả Rập", 164667, "sem-cen", "Nhóm ngôn ngữ Ả Rập", "Ả Rập", protoLanguage = "ar", } m["sem-are"] = { "nhóm ngôn ngữ Aram Đông", 3410322, "sem-ara", "Nhóm ngôn ngữ Aram Đông", "Aram Đông", } m["sem-arw"] = { "nhóm ngôn ngữ Aram Tây", 3394214, "sem-ara", "Nhóm ngôn ngữ Aram Tây", "Aram Tây", } m["sem-ase"] = { "Southeastern Aramaic", 3410322, "sem-are", } m["sem-can"] = { "nhóm ngôn ngữ Canaan", 747547, "sem-nwe", "Nhóm ngôn ngữ Canaan", "Canaan", } m["sem-cen"] = { "nhóm ngôn ngữ Semit Trung", 3433228, "sem-wes", "Nhóm ngôn ngữ Semit Trung", "Semit Trung", } m["sem-cna"] = { "nhóm ngôn ngữ Tân Aram Trung", 3410322, "sem-are", "Nhóm ngôn ngữ Tân Aram Trung", "Tân Aram Trung", } m["sem-eas"] = { "nhóm ngôn ngữ Semit Đông", 164273, "sem", "Nhóm ngôn ngữ Semit Đông", "Semit Đông", } m["sem-eth"] = { "nhóm ngôn ngữ Semit Ethiopia", 163629, "sem-wes", "Nhóm ngôn ngữ Semit Ethiopia", "Semit Ethiopia", aliases = {"Afro-Semitic", "Ethiopian", "Ethiopic", "Ethiosemitic"}, } m["sem-nna"] = { "Northeastern Neo-Aramaic", 2560578, "sem-are", } m["sem-nwe"] = { "nhóm ngôn ngữ Semit Tây Bắc", 162996, "sem-cen", "Nhóm ngôn ngữ Semit Tây Bắc", "Semit Tây Bắc", } m["sem-osa"] = { "Old South Arabian", 35025, "sem-cen", aliases = {"Epigraphic South Arabian", "Sayhadic"}, } m["sem-sar"] = { "nhóm ngôn ngữ Nam Ả Rập hiện đại", 1981908, "sem-wes", "Nhóm ngôn ngữ Nam Ả Rập hiện đại", "Nam Ả Rập hiện đại", } m["sem-wes"] = { "nhóm ngôn ngữ Semit Tây", 124901, "sem", "Nhóm ngôn ngữ Semit Tây", "Semit Tây", } m["sgn"] = { "sign", 34228, "qfa-not", } m["sgn-fsl"] = { "French Sign Languages", 5501921, "sgn", } m["sgn-gsl"] = { "German Sign Languages", 5551235, "sgn", } m["sgn-jsl"] = { "Japanese Sign Languages", 11722508, "sgn", } m["sio"] = { "Siouan", 34181, "nai-sca", } m["sio-dhe"] = { "Dhegihan", 3217420, "sio-msv", } m["sio-dkt"] = { "nhóm ngôn ngữ Dakota", 17188640, "sio-msv", "Nhóm ngôn ngữ Dakota", "Dakota", } m["sio-mor"] = { "Missouri River Siouan", 26807266, "sio", } m["sio-msv"] = { "Mississippi Valley Siouan", 17188638, "sio", } m["sio-ohv"] = { "Ohio Valley Siouan", 21070931, "sio", } m["sit"] = { "ngữ hệ Hán-Tạng", 45961, "Ngữ hệ Hán-Tạng", "Hán-Tạng", } m["sit-aao"] = { "Ao", 615474, "sit", aliases = {"Central Naga languages"}, } m["sit-alm"] = { "Almora", nil, "sit-whm", } m["sit-bai"] = { "nhóm ngôn ngữ Bạch", 35103, "sit-mba", "Nhóm ngôn ngữ Bạch", "Bạch", aliases = {"Bai"}, } m["sit-bdi"] = { "nhóm ngôn ngữ Bod", 1814078, "sit", "Nhóm ngôn ngữ Bod", "Bod", } m["sit-cln"] = { "nhóm ngôn ngữ Thái-Long", 107182612, "sit-mba", "Nhóm ngôn ngữ Thái-Long", "Thái-Long", aliases = {"Cai–Long", "Ta–Li", "Ta-Li"}, } m["sit-dhi"] = { "Dhimalish", 1207648, "sit", } m["sit-ebo"] = { "nhóm ngôn ngữ Bod Đông", 56402, "sit-bdi", "Nhóm ngôn ngữ Bod Đông", "Bod Đông", } m["sit-gma"] = { "nhóm ngôn ngữ Đại Magar", 55612963, "sit", "Nhóm ngôn ngữ Đại Magar", "Đại Magar", } m["sit-gsi"] = { "Greater Siangic", 52698851, "sit", } m["sit-hrs"] = { "Hrusish", 1632501, "sit", aliases = {"Southeast Kamengic"}, } m["sit-jnp"] = { "Jingphoic", nil, "sit-jpl", aliases = {"Jingpho"}, } m["sit-jpl"] = { "Kachin-Luic", 1515454, "tbq-bkj", aliases = {"Jingpho-Luish", "Jingpho-Asakian", "Kachinic"}, } m["sit-kch"] = { "Konyak-Chang", nil, "sit-kon", } m["sit-kha"] = { "nhóm ngôn ngữ Kham", 33305, "sit-gma", "Nhóm ngôn ngữ Kham", "Kham", } m["sit-khb"] = { "Kho-Bwa", 6401917, "sit", aliases = {"Bugunish", "Kamengic"}, } m["sit-kic"] = { "Central Kiranti", nil, "sit-kir", } m["sit-kie"] = { "Eastern Kiranti", nil, "sit-kir", } m["sit-kin"] = { "Kinnauric", nil, "sit-whm", aliases = {"Kinnauri"}, } m["sit-kir"] = { "Kiranti", 922148, "sit", } m["sit-kiw"] = { "Western Kiranti", 922148, "sit-kir", } m["sit-kon"] = { "Konyak", 774590, "tbq-bkj", aliases = {"Konyakian", "Northern Naga"}, } m["sit-kyk"] = { "Kyirong-Kagate", 6450957, "sit-tib", } m["sit-lab"] = { "nhóm ngôn ngữ Ladakh-Balti", 6450957, "sit-tib", "Nhóm ngôn ngữ Ladakh-Balti", "Ladakh-Balti", } m["sit-las"] = { "Lahuli-Spiti", 6473510, "sit-tib", } m["sit-luu"] = { "Luish", 55621439, "sit-jpl", aliases = {"Asakian", "Sak"}, } m["sit-mar"] = { "Maringic", nil, "sit-tma", } m["sit-mba"] = { "nhóm ngôn ngữ Đại Bạch", 16963847, "sit-sba", "Nhóm ngôn ngữ Đại Bạch", "Đại Bạch", aliases = {"Macro-Bai", "Greater Bai"}, } m["sit-mdz"] = { "Midzu", 6843504, "sit", aliases = {"Geman", "Midzuish", "Miju-Meyor", "Southern Mishmi"}, } m["sit-mnz"] = { "Mondzish", 6898839, "tbq-lob", aliases = {"Mangish"}, } m["sit-mru"] = { "Mruic", 16908870, "sit", aliases = {"Mru-Hkongso"}, } m["sit-nas"] = { "Naish", 25047956, "sit-nax", } m["sit-nax"] = { "Naic", 6982999, "tbq-buq", aliases = {"Naxish"}, } m["sit-nba"] = { "nhóm ngôn ngữ Bạch Bắc", 122463830, "sit-bai", "Nhóm ngôn ngữ Bạch Bắc", "Bạch Bắc", aliases = {"Northern Bai"}, } m["sit-new"] = { "Newaric", 55625069, "sit", } m["sit-nng"] = { "nhóm ngôn ngữ Nung", 1515482, "sit", "Nhóm ngôn ngữ Nung", "Nung", aliases = {"Nung"}, } m["sit-qia"] = { "Qiangic", 1636765, "tbq-buq", } m["sit-rgy"] = { "Rgyalrongic", 56936, "sit-qia", aliases = {"Jiarongic"}, } m["sit-sba"] = { "nhóm ngôn ngữ Hán-Bạch", nil, "sit", "Nhóm ngôn ngữ Hán-Bạch", "Hán-Bạch", aliases = {"Sino-Bai", "Greater Bai"}, } m["sit-tam"] = { "nhóm ngôn ngữ Tamang", 3309439, "sit", "Nhóm ngôn ngữ Tamang", "Tamang", aliases = {"West Bodish"}, } m["sit-tan"] = { "Tani", 3217538, "sit", } m["sit-tib"] = { "nhóm ngôn ngữ Tạng", 1641150, "sit-bdi", "Nhóm ngôn ngữ Tạng", "Tạng", protoLanguage = "otb", } m["sit-tja"] = { "nhóm ngôn ngữ Thổ Gia", nil, "sit", "Nhóm ngôn ngữ Thổ Gia", "Thổ Gia", } m["sit-tma"] = { "Tangkhul-Maring", nil, "sit", } m["sit-tng"] = { "nhóm ngôn ngữ Tangkhul", 1516657, "sit-tma", "Nhóm ngôn ngữ Tangkhul", "Tangkhul", aliases = {"Tangkhul"}, } m["sit-tno"] = { "Tangsa-Nocte", nil, "sit-kon", } m["sit-tsk"] = { "Tshangla", nil, "sit-bdi", } m["sit-whm"] = { "West Himalayish", 2301695, "sit", } m["sit-zem"] = { "Zeme", 189291, "sit", aliases = {"Zeliangrong", "Zemeic"}, } m["sla"] = { "nhóm ngôn ngữ gốc Slav", 23526, "ine-bsl", "Nhóm ngôn ngữ gốc Slav", "gốc Slav", aliases = {"Slavonic"}, } m["smi"] = { "nhóm ngôn ngữ Sami", 56463, "urj", "Nhóm ngôn ngữ Sami", "Sami", aliases = {"Saami", "Samic", "Saamic"}, } m["son"] = { "nhóm ngôn ngữ Songhay", 505198, "ssa", "Nhóm ngôn ngữ Songhay", "Songhay", aliases = {"Songhai"}, } m["sqj"] = { "nhóm ngôn ngữ Albani", 8748, "ine", "Nhóm ngôn ngữ Albani", "Albani", } m["ssa"] = { "ngữ hệ Nin-Sahara", -- possibly not a genetic grouping 33705, "Ngữ hệ Nin-Sahara", "Nin-Sahara", } m["ssa-fur"] = { "Fur", 2989512, "ssa", } m["ssa-klk"] = { "Kuliak", 1791476, "ssa", aliases = {"Rub"}, } m["ssa-kom"] = { "nhóm ngôn ngữ Koman", 1781084, "ssa", "Nhóm ngôn ngữ Koman", "Koman", } m["ssa-sah"] = { "Saharan", 1757661, "ssa", } m["syd"] = { "nhóm ngôn ngữ Samoyed", 34005, "urj", "Nhóm ngôn ngữ Samoyed", "Samoyed", aliases = {"Samoyed", "Samodeic"}, } m["tai"] = { "nhóm ngôn ngữ Thái", 749720, "qfa-bet", "Nhóm ngôn ngữ Thái", "Thái", aliases = {"Daic"}, } m["tai-wen"] = { "nhóm ngôn ngữ Văn Ma-Thái Tây Nam", nil, "tai", "Nhóm ngôn ngữ Văn Ma-Thái Tây Nam", "Văn Ma-Thái Tây Nam", } m["tai-tay"] = { "nhóm ngôn ngữ Tày", nil, "tai-wen", "Nhóm ngôn ngữ Tày", "Tày", } m["tai-sap"] = { "nhóm ngôn ngữ Sa Pa-Thái Tây Nam", nil, "tai-wen", "Nhóm ngôn ngữ Sa Pa-Thái Tây Nam", "Sa Pa-Thái Tây Nam", aliases = {"Sapa-Thai"}, } m["tai-swe"] = { "nhóm ngôn ngữ Thái Tây Nam", 3447105, "tai-sap", "Nhóm ngôn ngữ Thái Tây Nam", "Thái Tây Nam", } m["tai-cho"] = { "nhóm ngôn ngữ Thái Sùng Tả", 13216, "tai", "Nhóm ngôn ngữ Thái Sùng Tả", "Thái Sùng Tả", } m["tai-cen"] = { "nhóm ngôn ngữ Thái Trung tâm", 5061891, "tai", "Nhóm ngôn ngữ Thái Trung tâm", "Thái Trung tâm", } m["tai-nor"] = { "nhóm ngôn ngữ Thái Bắc", 7059014, "tai", "Nhóm ngôn ngữ Thái Bắc", "Thái Bắc" } m["tbq"] = { "nhóm ngôn ngữ Tạng-Miến", 34064, "sit", "Nhóm ngôn ngữ Tạng-Miến", "Tạng-Miến", } m["tbq-anp"] = { "nhóm ngôn ngữ Angami-Pochuri", 530460, "sit", "Nhóm ngôn ngữ Angami-Pochuri", "Angami-Pochuri", } m["tbq-axi"] = { "Axioid", nil, "tbq-sel", } m["tbq-bdg"] = { "Bodo-Garo", 4090000, "tbq-bkj", } m["tbq-bis"] = { "Bisoid", 48844742, "tbq-slo", } m["tbq-bka"] = { "Bi-Ka", 12627890, "tbq-slo", } m["tbq-bkj"] = { "Sal", 889900, "sit", -- Brahmaputran appears to be Glottolog's term aliases = {"Bodo-Konyak-Jinghpaw", "Brahmaputran", "Jingpho-Konyak-Bodo"}, } m["tbq-brm"] = { "nhóm ngôn ngữ Miến", 865713, "tbq-lob", "Nhóm ngôn ngữ Miến", "Miến", } m["tbq-buq"] = { "nhóm ngôn ngữ Miến-Khương", 16056278, "sit", "Nhóm ngôn ngữ Miến-Khương", "Miến-Khương", aliases = {"Đông Miến-Khương"}, } m["tbq-drp"] = { "Downriver Phula", 7188378, "tbq-rph", } m["tbq-han"] = { "nhóm ngôn ngữ Hà Nhì", 17004185, "tbq-slo", "Nhóm ngôn ngữ Hà Nhì", "Hà Nhì", aliases = {"Hanoid"}, } m["tbq-hph"] = { "Highland Phula", nil, "tbq-sel", } m["tbq-jin"] = { "Jino", 6202716, "tbq-slo", } m["tbq-kzh"] = { "Kazhuoish", 48834669, "tbq-lol", } m["tbq-kuk"] = { "nhóm ngôn ngữ Kuki-Chin", 832413, "sit", "Nhóm ngôn ngữ Kuki-Chin", "Kuki-Chin", } m["tbq-lal"] = { "Lalo", 56548, "tbq-lso", } m["tbq-lho"] = { "Lahoish", nil, "tbq-lol", } m["tbq-llo"] = { "Lipo-Lolopo", nil, "tbq-lso", } m["tbq-lob"] = { "nhóm ngôn ngữ Lô Lô–Miến", 1635712, "tbq-buq", "Nhóm ngôn ngữ Lô Lô–Miến", "Lô Lô–Miến", } m["tbq-lol"] = { "nhóm ngôn ngữ Lô Lô", 37035, "tbq-lob", "Nhóm ngôn ngữ Lô Lô", "Lô Lô", aliases = {"Loloish", "Yi", "Ngwi", "Nisoic"}, } m["tbq-lso"] = { "Lisoish", 6559055, "tbq-lol", } m["tbq-lwo"] = { "Lawoish", 48847673, "tbq-lol", } m["tbq-muj"] = { "Muji", 11221327, "tbq-hph", } m["tbq-nas"] = { "Nasoid", nil, "tbq-nlo", } m["tbq-nis"] = { "Nisu", 56404, "tbq-nlo", } m["tbq-nlo"] = { "nhóm ngôn ngữ Lô Lô Bắc", 7058676, "tbq-nso", "Nhóm ngôn ngữ Lô Lô Bắc", "Lô Lô Bắc", aliases = {"Northern Loloish"}, } m["tbq-nso"] = { "Nisoish", 56990, "tbq-lol", } m["tbq-nus"] = { "Nusoish", 114245231, "tbq-lol", } m["tbq-phw"] = { "Phowa", 7187959, "tbq-hph", } m["tbq-rph"] = { "Riverine Phula", nil, "tbq-sel", } m["tbq-sel"] = { "nhóm ngôn ngữ Lô Lô Đông Nam", 16111894, "tbq-nso", "Nhóm ngôn ngữ Lô Lô Đông Nam", "Lô Lô Đông Nam", aliases = {"Southeastern Loloish"}, } m["tbq-sil"] = { "Siloid", 60787071, "tbq-slo", } m["tbq-slo"] = { "nhóm ngôn ngữ Lô Lô Nam", 5649340, "tbq-lol", "Nhóm ngôn ngữ Lô Lô Nam", "Lô Lô Nam", aliases = {"Southern Loloish"}, } m["tbq-tal"] = { "Taloid", 48804018, "tbq-lso", } m["tbq-urp"] = { "Upriver Phula", 7187058, "tbq-rph", } m["trk"] = { "ngữ hệ Turk", 34090, "Ngữ hệ Turk", "Turk", } m["trk-cmn"] = { "nhóm ngôn ngữ Turk chung", 1126028, "trk", "Nhóm ngôn ngữ Turk chung", "Turk chung", aliases = {"Turk Shaz"}, } m["trk-kar"] = { "nhóm ngôn ngữ Karluk", 703173, "trk-cmn", "Nhóm ngôn ngữ Karluk", "Karluk", aliases = {"Qarluq", "Duy Ngô Nhĩ-Uzbek", "Đông Nam Turk"}, varieties = {"Đông Turk"}, } m["trk-kbu"] = { "nhóm ngôn ngữ Kipchak-Bulgar", 3512539, "trk-kip", "Nhóm ngôn ngữ Kipchak-Bulgar", "Kipchak-Bulgar", aliases = {"Ural", "Uralo-Caspi"}, } m["trk-kcu"] = { "Kipchak-Cuman", 4370412, "trk-kip", aliases = {"Ponto-Caspian"}, } m["trk-kip"] = { "nhóm ngôn ngữ Kipchak", 1339898, "trk-cmn", "Nhóm ngôn ngữ Kipchak", "Kipchak", otherNames = {"Tây Turk"}, aliases = {"Kypchak", "Qypchaq", "Tây Bắc Turk", "Tây Turk"}, protoLanguage = "qwm", } m["trk-kkp"] = { "Kyrgyz-Kipchak", 4221189, "trk-kip", } m["trk-kno"] = { "nhóm ngôn ngữ Kipchak-Nogai", 4326954, "trk-kip", "Nhóm ngôn ngữ Kipchak-Nogai", "Kipchak-Nogai", aliases = {"Aralo-Caspi"}, } m["trk-nsb"] = { "North Siberian Turkic", 4537269, "trk-sib", aliases = {"Northern Siberian Turkic"}, } m["trk-ogr"] = { "nhóm ngôn ngữ Oghur", 1422731, "trk", "Nhóm ngôn ngữ Oghur", "Oghur", aliases = {"Lir-Turk", "r-Turk"}, } m["trk-ogz"] = { "nhóm ngôn ngữ Oghuz", 494600, "trk-cmn", "Nhóm ngôn ngữ Oghuz", "Oghuz", aliases = {"nhóm ngôn ngữ Turk Tây Nam"}, } m["trk-sib"] = { "Siberian Turkic", 354353, "trk-cmn", otherNames = {"Northern Turkic"}, aliases = {"Northeastern Turkic"}, } m["trk-ssb"] = { "South Siberian Turkic", nil, "trk-sib", aliases = {"Southern Siberian Turkic"}, } m["tup"] = { "ngữ hệ Tupi", 34070, "Ngữ hệ Tupi", "Tupi", aliases = {"Tupi"}, } m["tup-gua"] = { "Tupi-Guarani", 148610, "tup", aliases = {"Tupí-Guaraní"}, } m["tuw"] = { "ngữ hệ Tungus", 34230, "Ngữ hệ Tungus", "Tungus", aliases = {"Mãn-Tungus"}, } m["tuw-ewe"] = { "nhóm ngôn ngữ Ewenic", 105889448, "tuw", "Nhóm ngôn ngữ Ewenic", "Ewenic", aliases = {"Bắc Tungus"}, } m["tuw-jrc"] = { "nhóm ngôn ngữ Nữ Chân", 105889432, "tuw", "Nhóm ngôn ngữ Nữ Chân", "Nữ Chân", aliases = {"Mãn"}, } m["tuw-nan"] = { "Nanaic", 105889264, "tuw", } m["tuw-udg"] = { "nhóm ngôn ngữ Udeghe", 105889266, "tuw", "Nhóm ngôn ngữ Udeghe", "Udeghe", } m["urj"] = { "ngữ hệ Ural", 34113, "Ngữ hệ Ural", "Ural", varieties = {"Finn-Ugria"}, } m["urj-fin"] = { "nhóm ngôn ngữ Finn", 33328, "urj", "Nhóm ngôn ngữ Finn", "Finn", aliases = {"Baltic-Finn", "Balto-Finn", "Fenn"}, } m["urj-mdv"] = { "nhóm ngôn ngữ Mordvin", 627313, "urj", "Nhóm ngôn ngữ Mordvin", "Mordvin", } m["urj-prm"] = { "Permic", 161493, "urj", } m["urj-ugr"] = { "Ugric", 156631, "urj", } m["wak"] = { "ngữ hệ Wakashan", 60069, "Ngữ hệ Wakashan", "Wakashan", } m["wen"] = { "Sorbian", 25442, "zlw", aliases = {"Lusatian", "Wendish"}, } m["xgn"] = { "ngữ hệ Mông Cổ", 33750, "qfa-xgs", "Ngữ hệ Mông Cổ", "Mông Cổ", aliases = {"Mông Cổ"}, } m["xgn-cen"] = { "nhóm ngôn ngữ Trung Mông Cổ", 28719447, "xgn", "Nhóm ngôn ngữ Trung Mông Cổ", "Trung Mông Cổ", protoLanguage = "xng-lat", } m["xgn-sou"] = { "nhóm ngôn ngữ Nam Mông Cổ", nil, "xgn", "Nhóm ngôn ngữ Nam Mông Cổ", "Nam Mông Cổ", protoLanguage = "xng-ear", } m["xgn-shr"] = { "nhóm ngôn ngữ Shirongol", 107539435, "xgn-sou", "Nhóm ngôn ngữ Shirongol", "Shirongol", } m["xme"] = { "Median", nil, "ira-mpr", protoLanguage = "xme-old", } m["xme-ttc"] = { "Tatic", nil, "xme", } m["xnd"] = { "Na-Dene", 26986, "qfa-dny", aliases = {"Na-Dené"}, } m["xsc"] = { "nhóm ngôn ngữ Scythia", nil, "ira-nei", "Nhóm ngôn ngữ Scythia", "Scythia", } m["xsc-sak"] = { "Sakan", nil, "xsc-skw", aliases = {"Saka"}, } m["xsc-sar"] = { "nhóm ngôn ngữ Sarmatia", nil, "xsc", "Nhóm ngôn ngữ Sarmatia", "Sarmatia", } m["xsc-skw"] = { "nhóm ngôn ngữ Saka-Wakhi", nil, "xsc", "Nhóm ngôn ngữ Saka-Wakhi", "Saka-Wakhi", } m["yok"] = { "Yokuts", 34249, "nai-you", aliases = {"Yokutsan", "Mariposan", "Mariposa"}, } m["ypk"] = { "Yupik", 27970, "esx-esk", aliases = {"Yup'ik", "Yuit"}, } m["yrk"] = { "Nenets", 36452, "syd", } m["zhx"] = { "nhóm ngôn ngữ Hán", 33857, "sit-sba", "Nhóm ngôn ngữ Hán", "Hán", aliases = {"Sinitic", "Chinese"}, protoLanguage = "och", } m["zhx-com"] = { "Mân ven biển", 20667215, "zhx-min", aliases = {"Coastal Min"}, } m["zhx-inm"] = { "Mân nội địa", 20667237, "zhx-min", aliases = {"Inland Min"}, } m["zhx-man"] = { "Quan thoại", nil, "zhx", protoLanguage = "cmn-ear", aliases = {"Mandarinic"}, } m["zhx-min"] = { "Mân", 56504, "zhx", aliases = {"Min"}, } m["zhx-nan"] = { "Mân Nam", 36495, "zhx-com", aliases = {"Southern Min"}, } m["zhx-pin"] = { "Bình thoại", 2735715, "zhx", protoLanguage = "ltc", aliases = {"Pinghua"}, } m["zhx-yue"] = { "Quảng Châu", 7033959, "zhx", protoLanguage = "ltc", aliases = {"Yue"}, } m["zle"] = { "nhóm ngôn ngữ Slav Đông", 144713, "sla", "Nhóm ngôn ngữ Slav Đông", "Slav Đông", } m["zls"] = { "nhóm ngôn ngữ Slav Nam", 146665, "sla", "Nhóm ngôn ngữ Slav Nam", "Slav Nam", } m["zlw"] = { "nhóm ngôn ngữ Slav Tây", 145852, "sla", "Nhóm ngôn ngữ Slav Tây", "Slav Tây", } m["zlw-lch"] = { "nhóm ngôn ngữ Lechite", 742782, "zlw", "Nhóm ngôn ngữ Lechite", "Lechite", aliases = {"Lechitic","Lekhitic"}, } m["zlw-pom"] = { "Pomeranian", nil, "zlw-lch", } m["znd"] = { "Zande", 8066072, "nic-ubg", } return require("Module:languages").finalizeData(m, "family") fhr5691vvrqj493sc4ne3by2y3c81vy 2571755 2571721 2026-10-18T16:52:08Z Hiyuune 50834 2571755 Scribunto text/plain --[=[ This module contains definitions for all language family codes on Wiktionary. ]=]-- local m = {} m["aav"] = { "ngữ hệ Nam Á", 33199, "Ngữ hệ Nam Á", "Nam Á", aliases = {"Nam Á"}, } m["aav-khs"] = { "nhóm ngôn ngữ Khasi", 3073734, "aav", "Nhóm ngôn ngữ Khasi", "Khasi", aliases = {"Khasi"}, } m["aav-nic"] = { "nhóm ngôn ngữ Nicobar", 217380, "aav", "Nhóm ngôn ngữ Nicobar", "Nicobar", } m["aav-pkl"] = { "nhóm ngôn ngữ Pnar-Khasi-Lyngngam", nil, "aav-khs", "Nhóm ngôn ngữ Pnar-Khasi-Lyngngam", "Pnar-Khasi-Lyngngam", } m["afa"] = { "ngữ hệ Phi-Á", 25268, aliases = {"Phi Á"}, "Ngữ hệ Phi-Á", "Phi-Á", } m["alg"] = { "nhóm ngôn ngữ Algonquin", 33392, "aql", "Nhóm ngôn ngữ Algonquin", "Algonquin", } m["alg-abp"] = { "nhóm ngôn ngữ Abenaki-Penobscot", 197936, "alg-eas", "Nhóm ngôn ngữ Abenaki-Penobscot", "Abenaki-Penobscot", } m["alg-ara"] = { "nhóm ngôn ngữ Arapahoe", 2153686, "alg", "Nhóm ngôn ngữ Arapahoe", "Arapahoe", } m["alg-eas"] = { "nhóm ngôn ngữ Đông Algonquin", 2257525, "alg", "Nhóm ngôn ngữ Đông Algonquin", "Đông Algonquin", } m["alg-sfk"] = { "nhóm ngôn ngữ Sac-Fox-Kickapoo", 1440172, "alg", "Nhóm ngôn ngữ Sac-Fox-Kickapoo", "Sac-Fox-Kickapoo", } m["alv"] = { "nhóm ngôn ngữ Đại Tây Dương-Congo", 771124, "nic", "Nhóm ngôn ngữ Đại Tây Dương-Congo", "Đại Tây Dương-Congo", } m["alv-aah"] = { "Ayere-Ahan", 750953, "alv-von", } m["alv-ada"] = { "Adamawa", 32906, "alv-sav", } m["alv-bag"] = { "Baga", 2746083, "alv-mel", } m["alv-bak"] = { "Bak", 1708174, "alv-sng", } m["alv-bam"] = { "Bambukic", 4853456, "alv-ada", aliases = {"Yungur-Jen"}, } m["alv-bny"] = { "Banyum", 2892477, "alv-nyn", } m["alv-bua"] = { "Bua", 4982094, "alv-mbd", } m["alv-bwj"] = { "Bikwin-Jen", 84542501, "alv-bam", } m["alv-cng"] = { "Cangin", 1033184, "alv-fwo", } m["alv-ctn"] = { "Central Tano", 1658486, "alv-ptn", aliases = {"Akan"}, } m["alv-dlt"] = { "Delta Edoid", nil, "alv-edo", } m["alv-dur"] = { "Duru", 5316788, "alv-lni", } m["alv-ede"] = { "Ede", 35368, "alv-yor", } m["alv-edk"] = { "Edekiri", 5336735, "alv-yrd", } m["alv-edo"] = { "nhóm ngôn ngữ Edoid", 1287469, "alv-von", "Nhóm ngôn ngữ Edoid", "Edoid", } m["alv-eeo"] = { "Edo-Esan-Ora", 12630439, "alv-nce", } m["alv-fli"] = { "Fali", 3450166, "alv", } m["alv-fwo"] = { "Fula-Wolof", 12631267, "alv-sng", } m["alv-gba"] = { "Gbaya", 3099986, "alv-sav", protoLanguage = "gba", } m["alv-gbe"] = { "nhóm ngôn ngữ Gbe", 668284, "alv-von", "Nhóm ngôn ngữ Gbe", "Gbe", } m["alv-gbf"] = { "Eastern Gbaya", nil, "alv-gba", } m["alv-gbs"] = { "Southern Gbaya", nil, "alv-gba", } m["alv-gbw"] = { "Western Gbaya", nil, "alv-gba", } m["alv-gda"] = { "Ga-Dangme", 3443338, "alv-kwa", } m["alv-gng"] = { "Guang", 684009, "alv-ptn", } m["alv-gtm"] = { "Ghana-Togo Mountain", 493020, "alv-kwa", aliases = {"Togo Remnant", "Central Togo"}, } m["alv-hei"] = { "nhóm ngôn ngữ Heiban", 108752116, "alv-the", "Nhóm ngôn ngữ Heiban", "Heiban", } m["alv-ido"] = { "Idomoid", 974196, "alv-von", } m["alv-igb"] = { "Igboid", 1429100, "alv-von", } m["alv-jfe"] = { "Jola-Felupe", 1708174, "alv-jol", aliases = {"Ejamat"}, } m["alv-jol"] = { "Jola", 35176, "alv-bak", aliases = {"Diola"}, } m["alv-kim"] = { "Kim", 6409701, "alv-mbd", } m["alv-kis"] = { "Kissi", 35696, "alv-mel", } m["alv-krb"] = { "Karaboro", 4213541, "alv-snf", } m["alv-ktg"] = { "Ka-Togo", 5972796, "alv-gtm", } m["alv-kul"] = { "Kulango", 16977424, "alv-sav", aliases = {"Kulango-Lorhon", "Kulango-Lorom"}, } m["alv-kwa"] = { "nhóm ngôn ngữ Kwa", 33430, "nic-vco", "Nhóm ngôn ngữ Kwa", "Kwa", } m["alv-lag"] = { "nhóm ngôn ngữ Lagoon", 111210042, "alv-kwa", "Nhóm ngôn ngữ Lagoon", "Lagoon", } m["alv-lek"] = { "Leko", 6520642, otherNames = {"Sambaic"}, -- appears to be an alias in Glottolog "alv-lni", } m["alv-lim"] = { "Limba", 35825, "alv", } m["alv-lni"] = { "Leko-Nimbari", 1708170, "alv-ada", otherNames = {"Central Adamawa"}, aliases = {"Chamba-Mumuye"}, } m["alv-mbd"] = { "Mbum-Day", 6799816, "alv-ada", } m["alv-mbm"] = { "Mbum", 6799814, "alv-mbd", } m["alv-mel"] = { "Mel", 12122355, "alv", } m["alv-mum"] = { "Mumuye", 84607009, "alv-mye", } m["alv-mye"] = { "Mumuye-Yendang", 6935539, "alv-lni", } m["alv-nal"] = { "Nalu", nil, "alv-sng", } m["alv-nce"] = { "nhóm ngôn ngữ Bắc-Trung Edoid", 16110869, "alv-edo", "Nhóm ngôn ngữ Bắc-Trung Edoid", "Bắc-Trung Edoid", } m["alv-ngb"] = { "Nupe-Gbagyi", 12638649, "alv-nup", aliases = {"Nupe-Gbari"}, } m["alv-ntg"] = { "Na-Togo", nil, "alv-gtm", } m["alv-nup"] = { "Nupoid", 1429143, "alv-von", } m["alv-nwd"] = { "nhóm ngôn ngữ Tây Bắc Edoid", 16111012, "alv-edo", "Nhóm ngôn ngữ Tây Bắc Edoid", "Tây Bắc Edoid", } m["alv-nyn"] = { "Nyun", nil, "alv-fwo", } m["alv-pap"] = { "Papel", 7132562, "alv-bak", } m["alv-pph"] = { "Phla-Pherá", 3849625, "alv-gbe", aliases = {"Phla–Pherá"}, } m["alv-ptn"] = { "Potou-Tano", 1475003, "alv-kwa", } m["alv-sav"] = { "nhóm ngôn ngữ Savanna", 4403672, "nic-vco", "Nhóm ngôn ngữ Savanna}", "Savanna", aliases = {"Savannas"}, } m["alv-sma"] = { "Suppire-Mamara", 4446348, "alv-snf", } m["alv-snf"] = { "nhóm ngôn ngữ Senufo", 33795, "alv", "Nhóm ngôn ngữ Senufo", "Senufo", aliases = {"Senufic", "Senoufo"}, } m["alv-sng"] = { "nhóm ngôn ngữ Senegambia", 1708753, "alv", "Nhóm ngôn ngữ Senegambia", "Senegambia", } m["alv-snr"] = { "Senari", 4416084, "alv-snf", } m["alv-swd"] = { "Southwestern Edoid", 12633903, "alv-edo", } m["alv-tal"] = { "Talodi", 12643302, "alv-the", } m["alv-tdj"] = { "Tagwana-Djimini", 7675362, "alv-snf", } m["alv-ten"] = { "Tenda", 3217535, "alv-fwo", } m["alv-the"] = { "nhóm ngôn ngữ Talodi-Heiban", 1521145, "alv", "Nhóm ngôn ngữ Talodi-Heiban", "Talodi-Heiban", } m["alv-von"] = { "nhóm ngôn ngữ Volta-Niger", 34177, "nic-vco", "Nhóm ngôn ngữ Volta-Niger", "Volta-Niger", } m["alv-wan"] = { "Wara-Natyoro", 7968830, "alv-sav", } m["alv-wjk"] = { "Waja-Kam", nil, "alv-ada", } m["alv-yek"] = { "nhóm ngôn ngữ Yekhee", nil, "alv-nce", "Nhóm ngôn ngữ Yekhee", "Yekhee", } m["alv-yor"] = { "Yoruba", nil, "alv-edk", } m["alv-yrd"] = { "Yoruboid", 1789745, "alv-von", } m["alv-yun"] = { "Yungur", 84601642, "alv-bam", aliases = {"Bena-Mboi"}, } m["apa"] = { "Apachean", 27758, "ath", aliases = {"Southern Athabaskan"}, } m["aqa"] = { "Alacalufan", 1288430, } m["aql"] = { "ngữ hệ Algic", 721612, "Ngữ hệ Algic", "Algic", aliases = {"Algonquin-Ritwan", "Algonquin-Wiyot-Yurok"}, } m["art"] = { "ngôn ngữ nhân tạo", 33215, "qfa-not", "Ngôn ngữ nhân tạo", "nhân tạo", aliases = {"artificial", "planned"}, } m["ath"] = { "Athabaskan", 27475, "xnd", } m["ath-nor"] = { "North Athabaskan", 20738, "ath", aliases = {"Northern Athabaskan"}, } m["ath-pco"] = { "Pacific Coast Athabaskan", 20654, "ath", } m["auf"] = { "Arauan", 626772, aliases = {"Arahuan", "Arauán", "Arawa", "Arawan", "Arawán"}, } --[=[ Exceptional language and family codes for Australian Aboriginal languages can use the prefix "aus-", though "aus" is no longer itself a family code. ]=]-- m["aus-arn"] = { "Arnhem", 2581700, aliases = {"Gunwinyguan", "Macro-Gunwinyguan"}, } m["aus-bub"] = { "Bunuban", 2495148, aliases = {"Bunaban"}, } m["aus-cww"] = { "nhóm ngôn ngữ Trung New South Wales", 5061507, "aus-pam", "Nhóm ngôn ngữ Trung New South Wales", "Trung New South Wales", } m["aus-dal"] = { "Daly", 2478079, } m["aus-dyb"] = { "Dyirbalic", 1850666, "aus-pam", } m["aus-gar"] = { "Garawan", 5521951, } m["aus-gun"] = { "Gunwinyguan", 2581700, "aus-arn", aliases = {"Gunwingguan"}, } m["aus-jar"] = { "Jarrakan", 2039423, } m["aus-kar"] = { "Karnic", 4215578, "aus-pam", } m["aus-mir"] = { "Mirndi", 4294095, } m["aus-nga"] = { "Ngayarda", 16153490, "aus-psw", } m["aus-nyu"] = { "Nyulnyulan", 2039408, } m["aus-pam"] = { "ngữ hệ Pama–Nyungar", 33942, "Ngữ hệ Pama–Nyungar", "Pama–Nyungar", } m["aus-pmn"] = { "nhóm ngôn ngữ Paman", 2640654, "aus-pam", "Nhóm ngôn ngữ Paman", "Paman", } m["aus-psw"] = { "nhóm ngôn ngữ Tây Nam Pama–Nyungar", 2258160, "aus-pam", "Nhóm ngôn ngữ Tây Nam Pama–Nyungar", "Tây Nam Pama–Nyungar", } m["aus-rnd"] = { "Arandic", 4784071, "aus-pam", } m["aus-tnk"] = { "Tangkic", 1823065, } m["aus-wdj"] = { "ngữ hệ Iwaidja", 4196968, "Ngữ hệ Iwaidja", "Iwaidja", aliases = {"Yiwaidjan"}, } m["aus-wor"] = { "Worrorran", 2038619, } m["aus-yid"] = { "Yidinyic", 4205849, "aus-pam", } m["aus-yng"] = { "Yangmanic", 42727644, } m["aus-yol"] = { "Yolngu", 2511254, "aus-pam", aliases = {"Yolŋu", "Yolngu Matha"}, } m["aus-yuk"] = { "Yuin-Kuric", 3833021, "aus-pam", } m["awd"] = { "ngữ hệ Arawak", 626753, "Ngữ hệ Arawak", "Arawak", aliases = {"Maipure", "Maipuran"}, } m["awd-nwk"] = { "nhóm ngôn ngữ Nawiki", nil, "awd", "Nhóm ngôn ngữ Nawiki", "Nawiki", aliases = {"Newiki"}, } m["awd-taa"] = { "Ta-Arawakan", 7672731, "awd", aliases = {"Ta-Arawak", "Ta-Maipurean"}, } m["azc"] = { "ngữ hệ Ute-Aztec", 34073, "Ngữ hệ Ute-Aztec", "Ute-Aztec", aliases = {"Uto-Aztekan"}, } m["azc-cup"] = { "Cupan", 19866871, "azc-tak", } m["azc-dur"] = { "nhóm ngôn ngữ Nahua Durango", 2386361, "azc-nah", "Nhóm ngôn ngữ Nahua Durango", "Nahua Durango", aliases = {"Mexicanero"} } m["azc-hua"] = { "nhóm ngôn ngữ Nahua Huasteca", 3832950, "azc-nah", "Nhóm ngôn ngữ Nahua Huasteca", "Nahua Huasteca" } m["azc-nah"] = { "nhóm ngôn ngữ Nahua", 11965602, "azc", "Nhóm ngôn ngữ Nahua", "Nahua", aliases = {"Aztec"}, } m["azc-num"] = { "nhóm ngôn ngữ Numic", 2657541, "azc", "Nhóm ngôn ngữ Numic", "Numic", } m["azc-pim"] = { "nhóm ngôn ngữ Piman", 7194600, "azc", "Nhóm ngôn ngữ Piman", "Piman", aliases = {"Tepiman"}, } m["azc-tak"] = { "Takic", 1280305, "azc", } m["azc-trc"] = { "Taracahitic", 4245032, "azc", aliases = {"Taracahitan"}, } m["bad"] = { "nhóm ngôn ngữ Banda", 806234, "nic-ubg", "Nhóm ngôn ngữ Banda", "Banda", } m["bad-cnt"] = { "Central Banda", 3438391, "bad", } m["bai"] = { "Bamileke", 806005, "nic-gre", } m["bat"] = { "nhóm ngôn ngữ gốc Balt", 33136, "ine-bsl", "Nhóm ngôn ngữ gốc Balt", "gốc Balt", } m["bat-eas"] = { "nhóm ngôn ngữ Đông Balt", 149944, "bat", "Nhóm ngôn ngữ Đông Balt", "Đông Balt", } m["bat-wes"] = { "West Baltic", 149946, "bat", } m["ber"] = { "nhóm ngôn ngữ Berber", 25448, "afa", "Nhóm ngôn ngữ Berber", "Berber", aliases = {"Tamazight"}, } m["bnt"] = { "nhóm ngôn ngữ Bantu", 33146, "nic-bds", "Nhóm ngôn ngữ Bantu", "Bantu", } m["bnt-baf"] = { "Bafia", 799784, "bnt", } m["bnt-bbo"] = { "Bafo-Bonkeng", nil, "bnt-saw", } m["bnt-bdz"] = { "Boma-Dzing", 1729203, "bnt", } m["bnt-bek"] = { "Bekwilic", nil, "bnt-ndb", } m["bnt-bki"] = { "Bena-Kinga", 16113307, "bnt-bne", } m["bnt-bmo"] = { "Bangi-Moi", nil, "bnt-bnm", } m["bnt-bne"] = { "Northeast Bantu", 7057832, "bnt", } m["bnt-bnm"] = { "Bangi-Ntomba", 806477, "bnt-bte", } m["bnt-boa"] = { "Boan", 4931250, "bnt", aliases = {"Buan", "Ababuan"}, } m["bnt-bot"] = { "Botatwe", 4948532, "bnt", } m["bnt-bsa"] = { "nhóm ngôn ngữ Basaa", 809739, "bnt", "Nhóm ngôn ngữ Basaa", "Basaa", } m["bnt-bsh"] = { "Bushoong", 5001551, "bnt-bte", } m["bnt-bso"] = { "Southern Bantu", 980498, "bnt", } m["bnt-bta"] = { "Bati-Angba", 4869303, "bnt-boa", otherNames = {"Late Bomokandian"}, aliases = {"Bwa"}, } m["bnt-btb"] = { "Beti", 35118, "bnt", } m["bnt-bte"] = { "Bangi-Tetela", 4855181, "bnt", } m["bnt-bun"] = { "Buja-Ngombe", 4986733, "bnt-mbb", } m["bnt-chg"] = { "Chaga", 33016, "bnt-cht", } m["bnt-cht"] = { "Chaga-Taita", nil, "bnt-bne", } m["bnt-clu"] = { "Chokwe-Luchazi", 3339273, "bnt", } m["bnt-com"] = { "Comorian", 33077, "bnt-sab", } m["bnt-glb"] = { "Great Lakes Bantu", 5599420, "bnt-bne", } m["bnt-haj"] = { "Haya-Jita", 25502360, "bnt-glb", } m["bnt-kak"] = { "Kako", nil, "bnt-pob", } m["bnt-kav"] = { "Kavango", 116544179, "bnt-ksb", } m["bnt-kbi"] = { "Komo-Bira", 6428591, "bnt-boa", } m["bnt-kel"] = { "Kele", 1738162, "bnt-kts", aliases = {"Sheke"}, } m["bnt-kil"] = { "Kilombero", 6408121, "bnt", } m["bnt-kka"] = { "Kikuyu-Kamba", 18419596, "bnt-bne", aliases = {"Thagiicu"}, } m["bnt-kmb"] = { "Kimbundu", 16947687, "bnt", } m["bnt-kng"] = { "Kongo", 6429214, "bnt", } m["bnt-kpw"] = { "Kpwe", 36428, "bnt-saw", } m["bnt-ksb"] = { "Kavango-Southwest Bantu", 6379098, "bnt", } m["bnt-kts"] = { "Kele-Tsogo", 6385577, "bnt", } m["bnt-lbn"] = { "Luban", 4536504, "bnt", } m["bnt-leb"] = { "Lebonya", 6511395, "bnt", } m["bnt-lgb"] = { "Lega-Binja", 6517694, "bnt", } m["bnt-lok"] = { "Logooli-Kuria", nil, "bnt-glb", } m["bnt-lub"] = { "Luba", nil, "bnt-lbn", } m["bnt-lun"] = { "Lunda", 6704091, "bnt", } m["bnt-mak"] = { "Makua", 6740431, "bnt-bso", aliases = {"Makhuwa"}, } m["bnt-mbb"] = { "Mboshi-Buja", 6799764, "bnt", } m["bnt-mbe"] = { "Mbole-Enya", 6799728, "bnt", } m["bnt-mbi"] = { "Mbinga", nil, "bnt-rur", } m["bnt-mbo"] = { "Mboshi", 6799763, "bnt-mbb", } m["bnt-mbt"] = { "Mbete", 1346910, "bnt-tmb", aliases = {"Mbere"}, } m["bnt-mby"] = { "Mbeya", nil, "bnt-ruk", } m["bnt-mij"] = { "Mijikenda", 6845474, "bnt-sab", } m["bnt-mka"] = { "Makaa", nil, "bnt-ndb", } m["bnt-mne"] = { "Manenguba", 31147471, "bnt", aliases = {"Mbo", "Ngoe"}, } m["bnt-mnj"] = { "Makaa-Njem", 1603899, "bnt-pob", } m["bnt-mon"] = { "Mongo", nil, "bnt-bnm", } m["bnt-mra"] = { "Mbugwe-Rangi", 6799795, "bnt", } m["bnt-msl"] = { "Masaba-Luhya", 12636428, "bnt-glb", } m["bnt-mwi"] = { "Mwika", nil, "bnt-ruk", } m["bnt-ncb"] = { "Northeast Coast Bantu", 7057848, "bnt-bne", } m["bnt-ndb"] = { "Ndzem-Bomwali", nil, "bnt-mnj", } m["bnt-ngn"] = { "Ngondi-Ngiri", 7022532, "bnt-mbb", } m["bnt-ngu"] = { "Nguni", 961559, "bnt-bso", aliases = {"Ngoni"}, } m["bnt-nya"] = { "Nyali", 7070832, "bnt-leb", } m["bnt-nyb"] = { "Nyanga-Buyi", 7070882, "bnt", } m["bnt-nyg"] = { "Nyoro-Ganda", 12638666, "bnt-glb", } m["bnt-nys"] = { "nhóm ngôn ngữ Nyasa", 7070921, "bnt", "Nhóm ngôn ngữ Nyasa", "Nyasa", } m["bnt-nze"] = { "Nzebi", 1755498, "bnt-tmb", aliases = {"Njebi"}, } m["bnt-ova"] = { "Ovambo", 36489, "bnt-swb", aliases = {"Oshivambo", "Oshiwambo", "Owambo"}, } m["bnt-par"] = { "Pare", nil, "bnt-ncb", } m["bnt-pen"] = { "Pende", 7162373, "bnt", } m["bnt-pob"] = { "Pomo-Bomwali", nil, "bnt", } m["bnt-ruk"] = { "Rukwa", 7378902, "bnt", } m["bnt-run"] = { "Rungwe", nil, "bnt-ruk", } m["bnt-rur"] = { "Rufiji-Ruvuma", 7377947, "bnt", } m["bnt-ruv"] = { "Ruvu", nil, "bnt-ncb", } m["bnt-rvm"] = { "Ruvuma", nil, "bnt-rur", } m["bnt-sab"] = { "Sabaki", 2209395, "bnt-ncb", } m["bnt-saw"] = { "Sawabantu", 532003, "bnt", } m["bnt-sbi"] = { "Sabi", 7396071, "bnt", } m["bnt-seu"] = { "Seuta", nil, "bnt-ncb", } m["bnt-shh"] = { "Shi-Havu", nil, "bnt-glb", } m["bnt-sho"] = { "Shona", 2904660, "bnt", } m["bnt-sir"] = { "nhóm ngôn ngữ Sira", 1436372, "bnt", "Nhóm ngôn ngữ Sira", "Sira", aliases = {"Shira-Punu"}, } m["bnt-ske"] = { "Soko-Kele", nil, "bnt-bte", } m["bnt-sna"] = { "Sena", nil, "bnt-nys", } m["bnt-sts"] = { "Sotho-Tswana", 2038386, "bnt-bso", } m["bnt-swb"] = { "Southwest Bantu", 116543539, "bnt-ksb", } m["bnt-swh"] = { "Swahili", nil, "bnt-sab", } m["bnt-tek"] = { "Teke", 36528, "bnt-tmb", } m["bnt-tet"] = { "Tetela", 7706059, "bnt-bte", } m["bnt-tkc"] = { "Central Teke", 36473, "bnt-tek", } m["bnt-tkm"] = { "Takama", nil, "bnt-bne", } m["bnt-tmb"] = { "Teke-Mbede", 7695332, "bnt", aliases = {"Teke-Mbere"}, } m["bnt-tso"] = { "Tsogo", 2458420, otherNames = {"Okani"}, --appears to be an alias in Glottolog "bnt-kts", } m["bnt-tsr"] = { "Tswa-Ronga", 12643962, "bnt-bso", } m["bnt-yak"] = { "Yaka", 8047027, "bnt", } m["bnt-yko"] = { "Yasa-Kombe", nil, "bnt-saw", } m["bnt-zbi"] = { "Zamba-Binza", nil, "bnt-bnm", } m["btk"] = { "Batak", 1998595, "poz-nws", } --[=[ Exceptional language and family codes for Central American Indian languages may use the prefix "cai-", though "cai" is no longer itself a family code. ]=]-- --[=[ Exceptional language and family codes for Caucasian languages can use the prefix "cau-", though "cau" is no longer itself a family code. ]=]-- m["cau-abz"] = { "nhóm ngôn ngữ Abkhaz-Abaza", 4663617, "cau-nwc", "Nhóm ngôn ngữ Abkhaz-Abaza", "Abkhaz-Abaza", otherNames = {"Abkhaz-Tapanta"}, aliases = {"Abazgi"}, } m["cau-and"] = { "nhóm ngôn ngữ Andic", 492152, "cau-ava", "Nhóm ngôn ngữ Andic", "Andic", aliases = {"Andian"}, } m["cau-ava"] = { "nhóm ngôn ngữ Avar-Andic", 4827766, "cau-nec", "Nhóm ngôn ngữ Avar-Andic", "Avar-Andic", aliases = {"Avar-Andian", "Avar-Andi", "Avaro-Andian"}, } m["cau-cir"] = { "Circassian", 858543, "cau-nwc", aliases = {"Cherkess"}, } m["cau-drg"] = { "nhóm ngôn ngữ Dargwa", 5222637, "cau-nec", "Nhóm ngôn ngữ Dargwa", "Dargwa", otherNames = {"Dargin"}, } m["cau-esm"] = { "Eastern Samur", nil, "cau-sam", } m["cau-ets"] = { "East Tsezian", 121437666, "cau-tsz", aliases = {"East Tsezic", "East Didoic"}, } m["cau-lzg"] = { "Lezghian", 2144370, "cau-nec", aliases = {"Lezgi", "Lezgian", "Lezgic"}, } m["cau-nkh"] = { "nhóm ngôn ngữ Nakh", 24441, "cau-nec", "Nhóm ngôn ngữ Nakh", "Nakh", aliases = {"Bắc-Trung Kavkaz"}, } m["cau-nec"] = { "ngữ hệ Đông Bắc Kavkaz", 27387, "Ngữ hệ Đông Bắc Kavkaz", "Đông Bắc Kavkaz", aliases = {"Dagestania", "Nakho-Dagestania", "Caspi"}, } m["cau-nwc"] = { "ngữ hệ Tây Bắc Kavkaz", 33852, "Ngữ hệ Tây Bắc Kavkaz", "Tây Bắc Kavkaz", aliases = {"Abkhazo-Adyghean", "Abkhaz-Adyghe", "Pontic"}, } m["cau-sam"] = { "Samur", 15229151, "cau-lzg", } m["cau-ssm"] = { "Southern Samur", nil, "cau-sam", } m["cau-tsz"] = { "Tsezian", 1651530, "cau-nec", aliases = {"Tsezic", "Didoic"}, } m["cau-vay"] = { "Vainakh", 4102486, "cau-nkh", aliases = {"Veinakh", "Vaynakh"}, } m["cau-wsm"] = { "Western Samur", nil, "cau-sam", } m["cau-wts"] = { "West Tsezian", 121437697, "cau-tsz", aliases = {"West Tsezic", "West Didoic"}, } m["cba"] = { "Chibchan", 520478, "qfa-mch", -- or none if Macro-Chibchan is considered undemonstrated } m["ccs"] = { "ngữ hệ Kartvelia", 34030, "Ngữ hệ Kartvelia", "Kartvelia", aliases = {"Ngoại Kavkaz"}, } m["ccs-gzn"] = { "nhóm ngôn ngữ Gruzia-Zan", 34030, "ccs", "Nhóm ngôn ngữ Gruzia-Zan", "Gruzia-Zan", aliases = {"Karto-Zan"}, } m["ccs-zan"] = { "Zan", 2606912, "ccs-gzn", aliases = {"Zanuri", "Colchian"}, } m["cdc"] = { "nhóm ngôn ngữ Tchad", 33184, "afa", "Nhóm ngôn ngữ Tchad", "Tchad", } m["cdc-cbm"] = { "nhóm ngôn ngữ Trung Tchad", 2251547, "cdc", "Nhóm ngôn ngữ Trung Tchad", "Trung Tchad", aliases = {"Biu-Mandara"}, } m["cdc-est"] = { "nhóm ngôn ngữ Đông Tchad", 2276221, "cdc", "Nhóm ngôn ngữ Đông Tchad", "Đông Tchad", } m["cdc-mas"] = { "nhóm ngôn ngữ Masa", 2136092, "cdc", "Nhóm ngôn ngữ Masa", "Masa", } m["cdc-wst"] = { "nhóm ngôn ngữ Tây Tchad", 2447774, "cdc", "Nhóm ngôn ngữ Tây Tchad", "Tây Tchad", } m["cdd"] = { "Caddoan", 1025090, } m["cel"] = { "nhóm ngôn ngữ Celt", 25293, "ine", "Nhóm ngôn ngữ Celt", "Celt", } m["cel-bry"] = { "nhóm ngôn ngữ Britton", 156877, "cel-ins", "Nhóm ngôn ngữ Britton", "Britton", aliases = {"Brittonic"}, } m["cel-brs"] = { "nhóm ngôn ngữ Tây Nam Britton", 2612853, "cel-bry", "Nhóm ngôn ngữ Tây Nam Britton", "Tây Nam Britton", aliases = {"Southwestern Brittonic"}, } m["cel-brw"] = { "nhóm ngôn ngữ Tây Britton", 593069, "cel-bry", "Nhóm ngôn ngữ Tây Britton", "Tây Britton", aliases = {"Western Brittonic"}, } m["cel-con"] = { "Continental Celtic", 215566, "cel", } m["cel-gae"] = { "nhóm ngôn ngữ Goidel", 56433, "cel-ins", "Nhóm ngôn ngữ Goidel", "Goidel", aliases = {"Gaelic"}, protoLanguage = "pgl", } m["cel-his"] = { "Hispano-Celtic", 4204136, "cel-con", } m["cel-ins"] = { "nhóm ngôn ngữ Celt hải đảo", 214506, "cel", "Nhóm ngôn ngữ Celt hải đảo", "Celt hải đảo", } m["chi"] = { "Chimakuan", 1073088, } m["chm"] = { "nhóm ngôn ngữ Mari", 973685, "urj", "Nhóm ngôn ngữ Mari", "Mari", } m["cmc"] = { "nhóm ngôn ngữ Chăm", 2997506, "poz-mcm", "Nhóm ngôn ngữ Chăm", "Chăm", } m["crp"] = { "creole or pidgin", nil, "qfa-not", } m["csu"] = { "nhóm ngôn ngữ Trung Sudan", 190822, "ssa", "Nhóm ngôn ngữ Trung Sudan", "Trung Sudan", } m["csu-bba"] = { "Bongo-Bagirmi", 3505042, "csu", } m["csu-bbk"] = { "Bongo-Baka", 4941917, "csu-bba", } m["csu-bgr"] = { "Bagirmi", 4841948, "csu-bba", aliases = {"Bagirmic"}, } m["csu-bkr"] = { "Birri-Kresh", nil, "csu", } m["csu-ecs"] = { "Eastern Central Sudanic", 16911698, "csu", aliases = {"East Central Sudanic", "Central Sudanic East", "Lendu-Mangbetu"}, } m["csu-kab"] = { "Kaba", 6343715, "csu-bba", } m["csu-lnd"] = { "Lendu", 6522357, "csu-ecs", aliases = {"Lenduic"}, } m["csu-maa"] = { "Mangbetu", 6748874, "csu-ecs", aliases = {"Mangbetu-Asoa", "Mangbetu-Asua"}, } m["csu-mle"] = { "Mangbutu-Lese", 17009406, "csu-ecs", aliases = {"Mangbutu–Efe", "Mangbutu", "Membi-Mangbutu-Efe"}, } m["csu-mma"] = { "Moru-Madi", 6915156, "csu-ecs", } m["csu-sar"] = { "Sara", 2036691, "csu-bba", } m["csu-val"] = { "Vale", 7909520, "csu-bba", } m["cus"] = { "nhóm ngôn ngữ Cushit", 33248, "afa", "Nhóm ngôn ngữ Cushit", "Cushit", } m["cus-cen"] = { "nhóm ngôn ngữ Trung Cushit", 56569, "cus", "Nhóm ngôn ngữ Trung Cushit", "Trung Cushit", } m["cus-eas"] = { "nhóm ngôn ngữ Đông Cushit", 56568, "cus", "Nhóm ngôn ngữ Đông Cushit", "Đông Cushit", } m["cus-hec"] = { "nhóm ngôn ngữ Đông Cushit Cao nguyên", 56524, "cus-eas", "Nhóm ngôn ngữ Đông Cushit Cao nguyên", "Đông Cushit Cao nguyên" } m["cus-som"] = { "nhóm ngôn ngữ Somali", 56774, "cus-eas", "Nhóm ngôn ngữ Somali", "Somali", aliases = {"Sam", "Macro-Somali"}, } m["cus-sou"] = { "nhóm ngôn ngữ Nam Cushit", 56525, "cus", "Nhóm ngôn ngữ Nam Cushit", "Nam Cushit", } m["day"] = { "Land Dayak", 2760613, "poz", } m["del"] = { "Lenape", 2665761, "alg-eas", aliases = {"Delaware"}, } m["den"] = { "Slavey", 13272, "ath-nor", aliases = {"Slave", "Slavé"}, } m["dmn"] = { "nhóm ngôn ngữ Mande", 33681, "nic", "Nhóm ngôn ngữ Mande", "Mande", } m["dmn-bbu"] = { "nhóm ngôn ngữ Bisa-Busa", 12627956, "dmn-mde", "Nhóm ngôn ngữ Bisa-Busa", "Bisa-Busa", } m["dmn-emn"] = { "East Manding", nil, "dmn-man", } m["dmn-jje"] = { "Jogo-Jeri", nil, "dmn-mjo", } m["dmn-man"] = { "Manding", 35772, "dmn-mmo", } m["dmn-mda"] = { "Mano-Dan", nil, "dmn-mse", } m["dmn-mdc"] = { "Central Mande", 5972907, "dmn-mdw", } m["dmn-mde"] = { "nhóm ngôn ngữ Đông Mande", 12633080, "dmn", "Nhóm ngôn ngữ Đông Mande", "Đông Mande", } m["dmn-mdw"] = { "Western Mande", 16113831, "dmn", } m["dmn-mjo"] = { "Manding-Jogo", 12636153, "dmn-mdc", } m["dmn-mmo"] = { "Manding-Mokole", nil, "dmn-mva", } m["dmn-mnk"] = { "Maninka", 36186, "dmn-emn", } m["dmn-mnw"] = { "Northwestern Mande", 5972910, "dmn-mdw", } m["dmn-mok"] = { "Mokole", 16935447, "dmn-mmo", } m["dmn-mse"] = { "Southeastern Mande", 5972912, "dmn-mde", } m["dmn-msw"] = { "Southwestern Mande", 12633904, "dmn-mdw", } m["dmn-mva"] = { "Manding-Vai", nil, "dmn-mjo", } m["dmn-nbe"] = { "Nwa-Beng", nil, "dmn-mse", } m["dmn-sam"] = { "Samo", 36327, "dmn-bbu", aliases = {"Samuic"}, } m["dmn-smg"] = { "Samogo", 7410000, "dmn-mnw", aliases = {"Duun-Seenku"}, } m["dmn-snb"] = { "Soninke-Bobo", 16111680, "dmn-mnw", } m["dmn-sya"] = { "Susu-Yalunka", nil, "dmn-mdc", } m["dmn-vak"] = { "Vai-Kono", nil, "dmn-mva", } m["dmn-wmn"] = { "West Manding", nil, "dmn-man", } m["dra"] = { "ngữ hệ Dravida", 33311, "Ngữ hệ Dravida", "Dravida", } m["dra-cen"] = { "Central Dravidian", 68002317, "dra", } m["dra-gki"] = { "Gondi-Kui", 12631610, "dra-sdt", } m["dra-gon"] = { "Gondi", 55639812, "dra-gki", } m["dra-imd"] = { "Irula-Muduga", nil, "dra-tkn", } m["dra-kan"] = { "nhóm ngôn ngữ Kannada", 6363888, "dra-tkn", "Nhóm ngôn ngữ Kannada", "Kannada", protoLanguage = "dra-okn", } m["dra-kki"] = { "Konda-Kui", nil, "dra-gki", } m["dra-kml"] = { "Kurukh-Malto", 68002822, "dra-nor", } m["dra-knk"] = { "Kolami-Naiki", 10547037, "dra-cen", } m["dra-kod"] = { "Kodagu", 67983106, "dra-tkd", } m["dra-kor"] = { "Koraga", 33394, "dra-tlk", } m["dra-mal"] = { "nhóm ngôn ngữ Malayalam", 6741581, "dra-tml", "Nhóm ngôn ngữ Malayalam", "Malayalam", } m["dra-mdy"] = { "Madiya", 27602, "dra-gon", } m["dra-mlo"] = { "Malto", nil, "dra-kml", } m["dra-mur"] = { "Muria", 6938499, "dra-gon", } m["dra-nor"] = { "North Dravidian", 16110967, "dra", } m["dra-pgd"] = { "Parji-Gadaba", 10620428, "dra-cen", } m["dra-sdo"] = { "nhóm ngôn ngữ Nam Dravida I", 16112843, -- Wikipedia's "South Dravidian" is South Dravidian I in this scheme. "dra-sou", "Nhóm ngôn ngữ Nam Dravida I", "Nam Dravida I", aliases = {"Nam Dravida"}, -- This is why I and II are used. } m["dra-sdt"] = { "nhóm ngôn ngữ Nam Dravida II", 12633975, "dra-sou", "Nhóm ngôn ngữ Nam Dravida II", "Nam Dravida II", aliases = {"Nhóm ngôn ngữ Trung-Nam Dravida"}, } m["dra-sou"] = { "nhóm ngôn ngữ Nam Dravida", nil, "dra", "Nhóm ngôn ngữ Nam Dravida", "Nam Dravida", } m["dra-tam"] = { "Tamiloid", 7681417, "dra-tml", protoLanguage = "oty", } m["dra-tel"] = { "nhóm ngôn ngữ Telugu", nil, "dra-sdt", "Nhóm ngôn ngữ Telugu", "Telugu", protoLanguage = "dra-ote", } m["dra-tkd"] = { "Tamil-Kodagu", 25494510, "dra-tkn", } m["dra-tkn"] = { "nhóm ngôn ngữ Tamil-Kannada", 6478506, "dra-sdo", "Nhóm ngôn ngữ Tamil-Kannada", "Tamil-Kannada", } m["dra-tkt"] = { "Toda-Kota", 67983857, "dra-tkd", } m["dra-tlk"] = { "nhóm ngôn ngữ Tulu-Koraga", nil, "dra-sdo", "Nhóm ngôn ngữ Tulu-Koraga", "Tulu-Koraga", } m["dra-tml"] = { "Tamil-Malayalam", 10690507, "dra-tkd", } m["egx"] = { "nhóm ngôn ngữ Ai Cập", 50868, "afa", "Nhóm ngôn ngữ Ai Cập", "Ai Cập", protoLanguage = "egy", } m["esx"] = { "nhóm ngôn ngữ Eskimo-Aleut", 25946, "Nhóm ngôn ngữ Eskimo-Aleut", "Eskimo-Aleut", } m["esx-esk"] = { "Eskimo", 25946, "esx", } m["esx-inu"] = { "Inuit", 27796, "esx-esk", } m["euq"] = { "ngữ hệ Vascon", 4669240, "Ngữ hệ Vascon", "Vascon", } m["gem"] = { "nhóm ngôn ngữ German", 21200, "ine", "Nhóm ngôn ngữ German", "German", } m["gme"] = { "East Germanic", 108662, "gem", } m["gmq"] = { "nhóm ngôn ngữ German Bắc", 106085, "gem", "Nhóm ngôn ngữ German Bắc", "German Bắc", } m["gmq-eas"] = { "nhóm ngôn ngữ Đông Scandinavia", 3090263, "gmq", "Nhóm ngôn ngữ Đông Scandinavia", "Đông Scandinavia", protoLanguage = "non-oen", } m["gmq-ins"] = { "Insular Scandinavian", nil, "gmq-wes", } m["gmq-wes"] = { "nhóm ngôn ngữ Tây Scandinavia", 1792570, "gmq", "Nhóm ngôn ngữ Tây Scandinavia", "Tây Scandinavia", protoLanguage = "non-own", } m["gmw"] = { "nhóm ngôn ngữ German Tây", 26721, "gem", "Nhóm ngôn ngữ German Tây", "German Tây", } m["gmw-afr"] = { "nhóm ngôn ngữ Anh-Frisia", 5329170, "gmw-nsg", "Nhóm ngôn ngữ Anh-Frisia", "Anh-Frisia", } m["gmw-nsg"] = { "nhóm ngôn ngữ German Biển Bắc", 30134, "gmw", "Nhóm ngôn ngữ German Biển Bắc", "German Biển Bắc", } m["gmw-ang"] = { "nhóm ngôn ngữ Anh", 1346342, "gmw-afr", "Nhóm ngôn ngữ Anh", "Anh", protoLanguage = "ang", } m["gmw-fri"] = { "Frisian", 25325, "gmw-afr", protoLanguage = "ofs", } m["gmw-frk"] = { "nhóm ngôn ngữ Hạ Franken", 153050, "gmw", "Nhóm ngôn ngữ Hạ Franken", "Hạ Franken", protoLanguage = "odt", } m["gmw-hgm"] = { "nhóm ngôn ngữ Đức cao địa", 52040, "gmw", "Nhóm ngôn ngữ Đức cao địa", "Đức cao địa", protoLanguage = "goh", } m["gmw-ian"] = { "Irish Anglo-Norman", 120719384, "gmw-ang", protoLanguage = "enm", } m["gmw-lgm"] = { "Low German", 25433, "gmw", protoLanguage = "osx", } m["grk"] = { "nhóm ngôn ngữ gốc Hy Lạp", 2042538, "ine", "Nhóm ngôn ngữ gốc Hy Lạp", "gốc Hy Lạp", aliases = {"Greek"}, } m["him"] = { "Western Pahari", 12645574, "inc-pah", aliases = {"Himachali"}, } m["hmn"] = { "Hmong", 3307894, "hmx", } m["hmx"] = { "ngữ hệ Hmông-Miền", 33322, "Ngữ hệ Hmông-Miền", "Hmông-Miền", aliases = {"Miao-Yao"}, } m["hmx-mie"] = { "nhóm ngôn ngữ Miền", 7992695, "hmx", "Nhóm ngôn ngữ Miền", "Miền", } m["hok"] = { "Hokan", 33406, } m["hyx"] = { "nhóm ngôn ngữ Armenia", 8785, "ine", "Nhóm ngôn ngữ Armenia", "Armenia", } m["iir"] = { "nhóm ngôn ngữ Ấn-Iran", 33514, "ine", "Nhóm ngôn ngữ Ấn-Iran", "Ấn-Iran", } m["iir-nur"] = { "Nuristani", 161804, "iir", } m["nur-nor"] = { "Northern Nuristani", nil, "iir-nur", } m["nur-sou"] = { "Southern Nuristani", nil, "iir-nur", } m["ijo"] = { "Ijoid", 1325759, "nic", otherNames = {"Ijaw"}, -- Ijaw may be a subfamily } m["inc"] = { "nhóm ngôn ngữ Ấn-Arya", 33577, "iir", "Nhóm ngôn ngữ Ấn-Arya", "Ấn-Arya", aliases = {"Indic"}, } m["inc-bas"] = { "nhóm ngôn ngữ Bengal-Assam", 4179137, "inc-eas", "Nhóm ngôn ngữ Bengal-Assam", "Bengal-Assam", aliases = {"Bengal-Assam", "Gauda-Kamarupa"}, } m["inc-bhi"] = { "Bhil", 4901727, "inc-cen", } m["inc-bih"] = { "nhóm ngôn ngữ Bihar", 135305, "inc-eas", "Nhóm ngôn ngữ Bihar", "Bihar", aliases = {"Bihari"}, } m["inc-cen"] = { "Central Indo-Aryan", 10979187, "inc", } m["inc-chi"] = { "Chitrali", 11732797, "inc-dar", } m["inc-dar"] = { "nhóm ngôn ngữ Dard", 161101, "inc", "Nhóm ngôn ngữ Dard", "Dard", protoLanguage = "sa", } m["inc-dre"] = { "Eastern Dardic", nil, "inc-dar", } m["inc-eas"] = { "nhóm ngôn ngữ Đông Ấn-Arya", 16590069, "inc", "Nhóm ngôn ngữ Đông Ấn-Arya", "Đông Ấn-Arya", protoLanguage = "pra-mag", } m["inc-hie"] = { "Eastern Hindi", 4126648, "inc", aliases = {"Purabiyā"}, protoLanguage = "pra-ard", } m["inc-hiw"] = { "Western Hindi", 12600937, "inc-cen", protoLanguage = "inc-sap", } m["inc-hnd"] = { "tiếng Hindustan", 11051, "inc-hiw", "Tiếng Hindustan", "Hindustan", aliases = {"Hindi-Urdu"}, protoLanguage = "hi-mid", } m["inc-ins"] = { "Insular Indo-Aryan", 12179302, "inc", protoLanguage = "pra-hel", } m["inc-kas"] = { "Kashmiric", nil, "inc-dre", aliases = {"Kashmiri"}, } m["inc-koh"] = { "Kohistani", 111971091, "inc-dre", } m["inc-kun"] = { "Kunar", nil, "inc-dar", } m["inc-mid"] = { "nhóm ngôn ngữ Ấn-Arya trung đại", 3236316, "inc", "Nhóm ngôn ngữ Ấn-Arya trung đại", "Ấn-Arya trung đại", aliases = {"Middle Indic"}, } m["inc-nwe"] = { "Northwestern Indo-Aryan", 41355020, "inc", protoLanguage = "pra-pai", } m["inc-nor"] = { "nhóm ngôn ngữ Bắc Ấn-Arya", 12642170, "inc", "Nhóm ngôn ngữ Bắc Ấn-Arya", "Bắc Ấn-Arya", protoLanguage = "pra-kha", } m["inc-old"] = { "nhóm ngôn ngữ Ấn-Arya cổ", 118976896, "inc", "Nhóm ngôn ngữ Ấn-Arya cổ", "Ấn-Arya cổ", aliases = {"Old Indic"}, } m["inc-pah"] = { "nhóm ngôn ngữ Pahari", 946077, "inc-nor", "Nhóm ngôn ngữ Pahari", "Pahari", aliases = {"Pahadi"}, } m["inc-pan"] = { "Punjabi-Lahnda", nil, "inc-nwe", protoLanguage = "inc-tak", } m["inc-pas"] = { "Pashayi", 36670, "inc-dar", aliases = {"Pashai"}, } m["inc-rom"] = { "Romani", 13201, "inc-wes", aliases = {"Romany", "Gypsy", "Gipsy"}, protoLanguage = "rom", } m["inc-shn"] = { "Shinaic", 12646125, "inc-dre", } m["inc-snd"] = { "Sindhi", 7522212, "inc-nwe", protoLanguage = "inc-vra", } m["inc-sou"] = { "Southern Indo-Aryan", 12179304, "inc", protoLanguage = "inc-ama", } m["inc-wes"] = { "nhóm ngôn ngữ Tây Ấn-Aryan", nil, "inc", "Nhóm ngôn ngữ Tây Ấn-Aryan", "Tây Ấn-Aryan", protoLanguage = "inc-agu", } m["ine"] = { "ngữ hệ Ấn-Âu", 19860, aliases = {"Indo-Germanic"}, "Ngữ hệ Ấn-Âu", "Ấn Âu", } m["ine-ana"] = { "nhóm ngôn ngữ Tiểu Á", 147085, "ine", "Nhóm ngôn ngữ Tiểu Á", "Tiểu Á", } m["ine-bsl"] = { "nhóm ngôn ngữ Balt-Slav", 147356, "ine", "Balt-Slav", } m["ine-grp"] = { "nhóm ngôn ngữ Graeco-Phrygia", nil, "ine", "Nhóm ngôn ngữ Graeco-Phrygia", "Graeco-Phrygia", } m["ine-luw"] = { "Luwic", 115748615, "ine-ana", aliases = {"Luvic"}, } m["ine-toc"] = { "Tocharian", 37029, "ine", aliases = {"Tokharian"}, } m["ira"] = { "nhóm ngôn ngữ Iran", 33527, "iir", "Nhóm ngôn ngữ Iran", "Iran", } m["ira-csp"] = { "Caspian", 5049123, "ira-mpr", } m["ira-cen"] = { "Central Iranian", nil, "ira", } m["ira-kms"] = { "Komisenian", nil, "ira-mpr", aliases = {"Semnani"}, } m["ira-mid"] = { "nhóm ngôn ngữ Iran trung đại", 6841465, "ira", "Nhóm ngôn ngữ Iran trung đại", "Iran trung đại", } m["ine-luw"] = { "Luwic", 115748615, "ine-ana", aliases = {"Luvic"}, } m["ira-mny"] = { "Munji-Yidgha", nil, "ira-sym", aliases = {"Yidgha-Munji"}, } m["ira-msh"] = { "Mazanderani-Shahmirzadi", nil, "ira-csp", } m["ira-nei"] = { "nhóm ngôn ngữ Đông Bắc Iran", 10775567, "ira", "Nhóm ngôn ngữ Đông Bắc Iran", "Đông Bắc Iran", } m["ira-nwi"] = { "nhóm ngôn ngữ Tây Bắc Iran", 390576, "ira-wes", "Nhóm ngôn ngữ Tây Bắc Iran", "Tây Bắc Iran", } m["ira-orp"] = { "nhóm ngôn ngữ Ormur-Parachi", nil, "ira-sei", "Nhóm ngôn ngữ Ormur-Parachi", "Ormur-Parachi", } m["ira-pat"] = { "Pathan", nil, "ira-sei", } m["ira-sbc"] = { "Sogdo-Bactrian", nil, "ira-nei", } m["ira-mpr"] = { "nhóm ngôn ngữ Media-Parthia", nil, "ira-nwi", "Nhóm ngôn ngữ Media-Parthia", "Media-Parthia", } m["ira-sgi"] = { "Sanglechi-Ishkashimi", 18711232, "ira-sei", } m["ira-shr"] = { "nhóm ngôn ngữ Shughni-Roshani", 11732824, "ira-shy", "Nhóm ngôn ngữ Shughni-Roshani", "Shughni-Roshani", } m["ira-shy"] = { "Shughni-Yazghulami", nil, "ira-sym", } m["ira-sgc"] = { "Sogdic", nil, "ira-sbc", aliases = {"Sogdian"}, } m["ira-sei"] = { "nhóm ngôn ngữ Đông Nam Iran", 3833002, "ira", "Nhóm ngôn ngữ Đông Nam Iran", "Đông Nam Iran", } m["ira-swi"] = { "nhóm ngôn ngữ Tây Nam Iran", 390424, "ira-wes", "Nhóm ngôn ngữ Tây Nam Iran", "Tây Nam Iran", } m["ira-sym"] = { "nhóm ngôn ngữ Shughni-Yazghulami-Munji", nil, "ira-sei", "Nhóm ngôn ngữ Shughni-Yazghulami-Munji", "Shughni-Yazghulami-Munji", } m["ira-wes"] = { "nhóm ngôn ngữ Tây Iran", 129850, "ira", "Nhóm ngôn ngữ Tây Iran", "Tây Iran", } m["ira-zgr"] = { "nhóm ngôn ngữ Zaza-Goran", 167854, "ira-mpr", "Nhóm ngôn ngữ Zaza-Goran", "Zaza-Goran", aliases = {"Zaza-Guran", "Goran-Zaza"}, } m["iro"] = { "ngữ hệ Iroquois", 33623, "Ngữ hệ Iroquois", "Iroquois", } m["iro-nor"] = { "nhóm ngôn ngữ Bắc Iroquois", nil, "iro", "Nhóm ngôn ngữ Bắc Iroquois", "Bắc Iroquois", } m["itc"] = { "nhóm ngôn ngữ gốc Ý", 131848, "ine", "Nhóm ngôn ngữ gốc Ý", "gốc Ý", } m["itc-laf"] = { "nhóm ngôn ngữ Latinh-Faliscan", 33478, "itc", "Nhóm ngôn ngữ Latinh-Faliscan", "Latinh-Faliscan", aliases = {"Latinian"}, } m["itc-sbl"] = { "nhóm ngôn ngữ Osco-Umbria", 515194, "itc", "Nhóm ngôn ngữ Osco-Umbria", "Osco-Umbria", aliases = { "Sabellia" }, } m["jpx"] = { "ngữ hệ Nhật Bản-Lưu Cầu", 33612, aliases = {"Nhật", "Nhật Bản-Lưu Cầu"}, "Ngữ hệ Nhật Bản-Lưu Cầu", "Nhật Bản-Lưu Cầu", } m["jpx-nry"] = { "nhóm ngôn ngữ Bắc Lưu Cầu", 20862796, "jpx-ryu", "Nhóm ngôn ngữ Bắc Lưu Cầu", "Bắc Lưu Cầu", } m["jpx-ryu"] = { "nhóm ngôn ngữ Lưu Cầu", 56393, "jpx", "Nhóm ngôn ngữ Lưu Cầu", "Lưu Cầu", } m["jpx-sry"] = { "nhóm ngôn ngữ Nam Lưu Cầu", 18392243, "jpx-ryu", "Nhóm ngôn ngữ Nam Lưu Cầu", "Nam Lưu Cầu", } m["kar"] = { "nhóm ngôn ngữ Karen", 1364815, "sit", "Nhóm ngôn ngữ Karen", "Karen", } m["kca"] = { "Khanty", 33563, "urj-ugr", aliases = {"Khantyic", "Khantic"}, } --[=[ Exceptional language and family codes for Khoisan and Kordofanian languages can use the prefix "khi-" and "kdo-" respectively, though they are no longer family codes themselves. ]=]-- m["khi-kal"] = { "Kalahari Khoe", nil, "khi-kho", } m["khi-khk"] = { "Khoekhoe", nil, "khi-kho", } m["khi-kkw"] = { "Khoe-Kwadi", 3833005, aliases = {"Kwadi-Khoe"}, } m["khi-kho"] = { "Khoe", 2736449, "khi-kkw", aliases = {"Central Khoisan"}, } m["khi-kxa"] = { "Kx'a", 6450587, aliases = {"Kxa", "Ju-ǂHoan"}, } m["khi-tuu"] = { "Tuu", 631046, aliases = {"Kwi", "Taa-Kwi", "Southern Khoisan", "Taa-ǃKwi", "Taa-ǃUi", "ǃUi-Taa"}, } m["kro"] = { "nhóm ngôn ngữ Kru", 33535, "nic-vco", "Nhóm ngôn ngữ Kru", "Kru", } m["kro-aiz"] = { "Aizi", 4699431, "kro", } m["kro-bet"] = { "Bété", 32956, "kro-ekr", } m["kro-did"] = { "Dida", 32685, "kro-ekr", } m["kro-ekr"] = { "Eastern Kru", 5972899, "kro", } m["kro-grb"] = { "Grebo", 5601537, "kro-wkr", } m["kro-wee"] = { "Wee", nil, "kro-wkr", } m["kro-wkr"] = { "Western Kru", 5972897, "kro", } m["ku"] = { "nhóm ngôn ngữ Kurd", 36368, "ira-nwi", "Nhóm ngôn ngữ Kurd", "Kurd", } m["map"] = { "ngữ hệ Nam Đảo", 49228, "Ngữ hệ Nam Đảo", "Nam Đảo", } m["map-ata"] = { "nhóm ngôn ngữ Atayal", 716610, "map", "Nhóm ngôn ngữ Atayal", "Atayal", } m["map-tsu"] = { "nhóm ngôn ngữ Tsou", 716659, "map", "Nhóm ngôn ngữ Tsou", "Tsou", } m["mjg"] = { "nhóm ngôn ngữ Monguor", 34214, "xgn-shr", "Nhóm ngôn ngữ Monguor", "Monguor", } m["mkh"] = { "nhóm ngôn ngữ Môn-Khmer", 33199, "aav", "Nhóm ngôn ngữ Môn-Khmer", "Môn-Khmer", } m["mkh-asl"] = { "nhóm ngôn ngữ Asli", 3111082, "mkh", "Nhóm ngôn ngữ Asli", "Asli", } m["mkh-ban"] = { "nhóm ngôn ngữ Bahnar", 56309, "mkh", "Nhóm ngôn ngữ Bahnar", "Bahnar", } m["mkh-kat"] = { "nhóm ngôn ngữ Cơ Tu", 56697, "mkh", "Nhóm ngôn ngữ Cơ Tu", "Cơ Tu", } m["mkh-khm"] = { "nhóm ngôn ngữ Khơ Mú", 1323245, "mkh", "Nhóm ngôn ngữ Khơ Mú", "Khơ Mú", } m["mkh-kmr"] = { "nhóm ngôn ngữ Khmer", nil, "mkh", "Nhóm ngôn ngữ Khmer", "Khmer", } m["mkh-mnc"] = { "nhóm ngôn ngữ Môn", 3217497, "mkh", "Nhóm ngôn ngữ Môn", "Môn", } m["mkh-mng"] = { "nhóm ngôn ngữ Mảng", 3509556, "mkh", "Nhóm ngôn ngữ Mảng", "Mảng", } m["mkh-nbn"] = { "nhóm ngôn ngữ Bahnar Bắc", 56309, "mkh-ban", "Nhóm ngôn ngữ Bahnar", "Bahnar", } m["mkh-pal"] = { "nhóm ngôn ngữ Palaung", 2391173, "mkh", "Nhóm ngôn ngữ Palaung", "Palaung", } m["mkh-pea"] = { "nhóm ngôn ngữ Pear", 3073022, "mkh", "Nhóm ngôn ngữ Pear", "Pear", } m["mkh-pkn"] = { "Pakanic", nil, "mkh-mng", } m["mkh-vie"] = { "nhóm ngôn ngữ Việt", 2355546, "mkh", "Nhóm ngôn ngữ Việt", "Việt", } m["mno"] = { "nhóm ngôn ngữ Manobo", 3217483, "phi", "Nhóm ngôn ngữ Manobo", "Manobo", } m["mns"] = { "nhóm ngôn ngữ Mansi", 33759, "urj-ugr", "Nhóm ngôn ngữ Mansi", "Mansi", aliases = {"Mansi"}, } m["mun"] = { "nhóm ngôn ngữ Munda", 33892, "aav", "Nhóm ngôn ngữ Munda", "Munda", } m["myn"] = { "ngữ hệ Maya", 33738, "Ngữ hệ Maya", "Maya", } --[=[ Exceptional language and family codes for North American Indian languages can use the prefix "nai-", though "nai" is no longer itself a family code. ]=]-- m["nai-cat"] = { "Catawban", 3446638, "nai-sca", } m["nai-chu"] = { "Chumashan", 1288420, } m["nai-ckn"] = { "Chinookan", 610586, } m["nai-coo"] = { "Coosan", 940278, } m["nai-jcq"] = { "Jicaquean", 12179308, "hok" } m["nai-ker"] = { "Keresan", 35878, } m["nai-klp"] = { "Kalapuyan", 1569040, } m["nai-kta"] = { "ngữ hệ Kiowa-Tanoa", 386288, "Ngữ hệ Kiowa-Tanoa", "Kiowa-Tanoa", } m["nai-len"] = { "Lencan", 36189, aliases = {"Lenca"}, } m["nai-mdu"] = { "Maiduan", 33502, } m["nai-miz"] = { "Mixe-Zoquean", 954016, aliases = {"Mixe-Zoque"}, } m["nai-min"] = { "Misumalpan", 281693, "qfa-mch", aliases = {"Misuluan", "Misumalpa"}, } m["nai-mus"] = { "Muskogean", 902978, aliases = {"Muskhogean"}, } m["nai-pak"] = { "Pakawan", 65085487, "hok", } m["nai-pal"] = { "Palaihnihan", 1288332, } m["nai-plp"] = { "Plateau Penutian", 2307476, } m["nai-pom"] = { "Pomoan", 2618420, "hok", aliases = {"Pomo", "Kulanapan"}, } m["nai-sca"] = { "Siouan-Catawban", 34181, } m["nai-shp"] = { "Sahaptian", 114782, "nai-plp", } m["nai-shs"] = { "Shastan", 2991735, "hok", } m["nai-tot"] = { "Totozoquean", 7828419, } m["nai-ttn"] = { "ngữ hệ Totonac", 34039, "Ngữ hệ Totonac", "Totonac", aliases = {"Totonacan","Totonac-Tepehua", "Totonacan-Tepehuan"}, varieties = {"Totonac"}, } m["nai-tqn"] = { "Tequistlatecan", 1754988, "hok", aliases = {"Tequistlatec", "Chontal", "Chontalan", "Oaxacan Chontal", "Chontal of Oaxaca"}, } m["nai-tsi"] = { "Tsimshianic", 34134, } m["nai-utn"] = { "Utian", 13371763, "nai-you", aliases = {"Miwok-Costanoan", "Mutsun"}, } m["nai-wtq"] = { "Wintuan", 1294259, aliases = {"Wintun"}, } m["nai-xin"] = { "ngữ hệ Xinca", 1546494, "Ngữ hệ Xinca", "Xinca", aliases = {"Xincan","Xinka","Sinca","Szinca"}, } m["nai-ykn"] = { "Yukian", 2406722, aliases = {"Yuki-Wappo"}, } m["nai-you"] = { "Yok-Utian", 2886186, } m["nai-yuc"] = { "ngữ hệ Yuman-Cochimí", 579137, "Ngữ hệ Yuman-Cochimí", "Yuman-Cochimí", } m["ngf"] = { "ngữ hệ Liên New Guinea", 34018, "Ngữ hệ Liên New Guinea", "Liên New Guinea", } m["ngf-ais"] = { "Aisian", nil, "ngf-eso", } m["ngf-ang"] = { "nhóm ngôn ngữ Angan", 3217366, "ngf", "Nhóm ngôn ngữ Angan", "Angan", aliases = {"Kratke Range"}, -- Usher } m["ngf-ank"] = { "Angal-Kewa", 12626916, -- exist in dewiki and hrwiki "ngf-sak", } m["ngf-ask"] = { "Asmat-Kamoro", 3031400, "ngf", -- Wikipedia uses Asmat-Kamoro to refer to a narrower group excluding the Sabakor languages (Buruwai and Kamberau, -- which Glottolog splits into North Kamrau and South Kamrau [sic]), and uses Asmat-Kamrau to refer to what we and -- Glottolog call Asmat-Kamoro. Glottolog does not recognize the narrower grouping. aliases = {"Asmat-Kamrau", -- Wikipedia "Asmat-Kamrau Bay", -- Usher }, } m["ngf-asm"] = { "Asmat", 4807421, "ngf-ask", } m["ngf-ata"] = { "Ankave-Tainae-Akoye", nil, "ngf-ang", aliases = {"Southwest Kratke Range"}, -- Usher } m["ngf-awd"] = { "Awyu-Dumut", -- [[w:Awyu-Dumut languages]] redirects to [[w:Greater Awyu languages]] 4830163, -- exist in eswiki, hrwiki and ruwiki "ngf-gaw", aliases = {"Central Digul River"}, -- Usher } m["ngf-awy"] = { "Awyu", 96372866, "ngf-awd", } m["ngf-bda"] = { "Becking-Dawi", nil, -- Q55993716 ([[Category:Becking–Dawi languages]]) exists in enwiki "ngf-gaw", aliases = {"Becking and Dawi Rivers"}, -- Usher } m["ngf-bin"] = { "Binanderean", 3217374, -- Wikidata doesn't distinguish Binanderean from Greater Binanderean "ngf-gbi", aliases = {"Oro"}, -- Usher (2020) } m["ngf-boa"] = { "Boane", nil, "ngf-era", aliases = {"Boana", -- Glottolog's name "Wain"}, -- not in Usher; "Wain" often excludes Mungkip, perhaps because it's poorly documented } m["ngf-bos"] = { "Bosavi", 4947122, "ngf", aliases = {"Papuan Plateau"}, -- alternative name given by Wikipedia } m["ngf-bsi"] = { "Baruya-Simbari", nil, "ngf-ang", aliases = {"Northwest Kratke Range"}, -- Usher } m["ngf-cda"] = { "Central Dani", nil, "ngf-dan", aliases = {"Dani"}, -- Usher } m["ngf-chw"] = { "Chimbu-Wahgi", 3217383, "ngf", aliases = {"Simbu-Western Highlands"}, -- alternative name given by Wikipedia } m["ngf-dag"] = { "Dagan", 5208454, "ngf", -- not accepted as TNG by Glottolog but accepted by all others aliases = {"Meneao Range"}, } m["ngf-dal"] = { "Dallman", nil, "ngf-huo", aliases = {"Kinalakna-Kumukio", -- Pawley-Hammarström, who exclude Nomu, but they only had a numeral list of that language to work from "Northeast Huon", -- Usher }, } m["ngf-dan"] = { "Dani", 3217389, "ngf", -- Wikipedia renames the Dani languages to the Baliem Valley languages and sometimes (but not consistently) -- reserves the name Dani (or "Dani proper") for a narrower group excluding Wano and the poorly attested Ngalik -- languages (Nduga, Silimo, and the Yali dialect cluster, which we, following Ethnologue and Glottolog, split into -- Anggurk Yali, Ninia Yali and Pass Valley Yali). Glottolog does not recognize the narrower grouping. aliases = {"Baliem Valley", -- Wikipedia "Balim Valley", -- Usher }, } m["ngf-dum"] = { "Dumut", -- [[w:Dumut languages]] redirects to [[w:Greater Awyu languages]] nil, "ngf-awd", aliases = {"Wambon"}, -- Usher } m["ngf-ehu"] = { "Eastern Huon", -- Glottolog adds Ono and Sialum, Pawley-Hammarström adds Dedua 10567087, "ngf-huo", aliases = {"East Huon"}, -- Usher } m["ngf-eku"] = { "East Kutubuan", 5328752, "ngf", -- Not in TNG per Glottolog but accepted by all others. Sometimes grouped with Fasu to form a Kutubuan family. aliases = {"East Kutubu"}, -- Glottolog's name } m["ngf-enc"] = { "Engic", nil, "ngf-eng", aliases = {"Engan", -- Glottolog "Engan proper", -- Wikipedia "North Engan", -- alternative name given by Wikipedia "Trans-Enga", -- Usher }, } m["ngf-eng"] = { "Engan", 3217449, "ngf", aliases = {"Enga-Kewa-Huli", -- Glottolog, Pawley-Hammarström "Enga-Southern Highlands", -- Usher }, } m["ngf-era"] = { "Erap", nil, "ngf-fin", aliases = {"Erap River"}, -- Usher? } m["ngf-eso"] = { "East Sogeram", nil, "ngf-sog", } m["ngf-est"] = { "East Strickland", 5329440, "ngf", aliases = {"Strickland River"}, -- alternative name given by Wikipedia } m["ngf-eva"] = { "Evapia", nil, "ngf-rai", aliases = {"Evapia River"}, -- Usher } m["ngf-fgi"] = { "Fore-Gimi", nil, "ngf-gor", aliases = {"South Goroka"}, -- Usher } m["ngf-fhu"] = { "Finisterre-Huon", 3217453, "ngf", aliases = {"Finisterre Range-Huon Peninsula"}, -- per Usher } m["ngf-fin"] = { "Finisterre", 5450373, "ngf", } m["ngf-mad"] = { "nhóm ngôn ngữ Madang", 11217556, "ngf", "Nhóm ngôn ngữ Madang", "Madang", } m["ngf-okk"] = { "Ok", 7081687, "ngf", } m["ngf-sbh"] = { "South Bird's Head", 7566330, "ngf", } m["nic"] = { "ngữ hệ Niger-Congo", 33838, "Ngữ hệ Niger-Congo", "Niger-Congo", aliases = {"Niger-Kordofania"}, } m["nic-alu"] = { "nhóm ngôn ngữ Alumic", 4737355, "nic-plt", "Nhóm ngôn ngữ Alumic", "Alumic", } m["nic-bas"] = { "Basa", 4866154, "nic-knj", } m["nic-bbe"] = { "Eastern Beboid", nil, "nic-beb", } m["nic-bco"] = { "nhóm ngôn ngữ Benue-Congo", 33253, "nic-vco", "Nhóm ngôn ngữ Benue-Congo", "Benue-Congo", } m["nic-bcr"] = { "nhóm ngôn ngữ Bantoid-Cross", 806983, "nic-bco", "Nhóm ngôn ngữ Bantoid-Cross", "Bantoid-Cross", } m["nic-bdn"] = { "nhóm ngôn ngữ Bắc Bantoid", nil, "nic-bod", "Nhóm ngôn ngữ Bắc Bantoid", "Bắc Bantoid", aliases = {"North Bantoid"}, } m["nic-bds"] = { "nhóm ngôn ngữ Nam Bantoid", 3183152, "nic-bod", "Nhóm ngôn ngữ Nam Bantoid", "Nam Bantoid", aliases = {"Wide Bantu", "Bin"}, } m["nic-beb"] = { "Beboid", 813549, "nic-bds", } m["nic-ben"] = { "Bendi", 4887065, "nic-bcr", } m["nic-beo"] = { "Beromic", 4894642, "nic-plt", } m["nic-bod"] = { "nhóm ngôn ngữ Bantoid", 806992, "nic-bcr", "Nhóm ngôn ngữ Bantoid", "Bantoid", } m["nic-buk"] = { "Buli-Koma", nil, "nic-ovo", } m["nic-bwa"] = { "Bwa", 12628562, "nic-gur", otherNames = {"Bwamu", "Bomu"}, } m["nic-cde"] = { "Central Delta", 3813191, "nic-cri", } m["nic-cri"] = { "Cross River", 1141096, "nic-bcr", } m["nic-dag"] = { "nhóm ngôn ngữ Dagbani", nil, "nic-wov", "Nhóm ngôn ngữ Dagbani", "Dagbani", } m["nic-dak"] = { "Dakoid", 1157745, "nic-bdn", } m["nic-dge"] = { "Escarpment Dogon", 5397128, "qfa-dgn", } m["nic-dgw"] = { "West Dogon", nil, "qfa-dgn", } m["nic-eko"] = { "Ekoid", 1323395, "nic-bds", } m["nic-eov"] = { "Eastern Oti-Volta", nil, "nic-ovo", aliases = {"Samba"}, } m["nic-fru"] = { "Furu", 5509783, "nic-bds", } m["nic-gne"] = { "Eastern Gurunsi", 12633072, "nic-gns", aliases = {"Eastern Grũsi"}, } m["nic-gnn"] = { "Northern Gurunsi", nil, "nic-gns", aliases = {"Northern Grũsi"}, } m["nic-gnw"] = { "Western Gurunsi", nil, "nic-gns", aliases = {"Western Grũsi"}, } m["nic-gns"] = { "Gurunsi", 721007, "nic-gur", aliases = {"Grũsi"}, } m["nic-gre"] = { "Eastern Grassfields", 5330160, "nic-grf", } m["nic-grf"] = { "Grassfields", 750932, "nic-bds", aliases = {"Grassfields Bantu", "Wide Grassfields"}, } m["nic-grm"] = { "Gurma", 30587833, "nic-ovo", } m["nic-grs"] = { "Southwest Grassfields", 7571285, "nic-grf", } m["nic-gur"] = { "Gur", 33536, "alv-sav", aliases = {"Voltaic"}, } m["nic-ief"] = { "Ibibio-Efik", 2743643, "nic-lcr", } m["nic-jer"] = { "Jera", nil, "nic-kne", } m["nic-jkn"] = { "nhóm ngôn ngữ Jukunoid", 1711622, "nic-pla", "Nhóm ngôn ngữ Jukunoid", "Jukunoid", } m["nic-jrn"] = { "Jarawan", 1683430, "nic-mba", } m["nic-jrw"] = { "Jarawa", 35423, "nic-jrn", } m["nic-kam"] = { "Kambari", 6356294, "nic-knj", } m["nic-ktl"] = { "Katloid", nil, "nic", } m["nic-kau"] = { "nhóm ngôn ngữ Kauru", nil, "nic-kne", "Nhóm ngôn ngữ Kauru", "Kauru", } m["nic-kmk"] = { "Kamuku", 6359821, "nic-knj", } m["nic-kne"] = { "nhóm ngôn ngữ Đông Kainji", 5328687, "nic-knj", "Nhóm ngôn ngữ Đông Kainji", "Đông Kainji", } m["nic-knj"] = { "nhóm ngôn ngữ Kainji", 681495, "nic-pla", "Nhóm ngôn ngữ Kainji", "Kainji", } m["nic-knn"] = { "Northwest Kainji", 7060098, "nic-knj", } m["nic-ktl"] = { "Katloid", 6377681, "nic", aliases = {"Katla", "Katla-Tima"}, } m["nic-lcr"] = { "Lower Cross River", 3813193, "nic-cri", } m["nic-mam"] = { "Mamfe", 2005898, "nic-bds", aliases = {"Nyang"}, } m["nic-mba"] = { "Mbam", 687826, "nic-bds", } m["nic-mbc"] = { "Mba", 6799561, "nic-ubg", } m["nic-mbw"] = { "West Mbam", nil, "nic-mba", } m["nic-mmb"] = { "nhóm ngôn ngữ Mambiloid", 1888151, otherNames = {"Bắc Bantoid"}, -- per Wikipedia, North Bantoid is the parent family "nic-bdn", "Nhóm ngôn ngữ Mambiloid", "Mambiloid", } m["nic-mom"] = { "Momo", 6897393, "nic-grf", } m["nic-mre"] = { "Moré", nil, "nic-wov", } m["nic-ngd"] = { "Ngbandi", 36439, "nic-ubg", } m["nic-nge"] = { "Ngemba", 7022271, "nic-gre", } m["nic-ngk"] = { "Ngbaka", 3217499, "nic-ubg", } m["nic-nin"] = { "Ninzic", 7039282, "nic-plt", } m["nic-nka"] = { "Nkambe", 7042520, "nic-gre", } m["nic-nkb"] = { "Baka", nil, "nic-nkw", } m["nic-nke"] = { "Eastern Ngbaka", nil, "nic-ngk", } m["nic-nkg"] = { "Gbanziri", nil, "nic-nkw", } m["nic-nkk"] = { "Kpala", nil, "nic-nkw", } m["nic-nkm"] = { "Mbaka", nil, "nic-nkw", } m["nic-nkw"] = { "Western Ngbaka", nil, "nic-ngk", } m["nic-npd"] = { "North Plateau Dogon", nil, "qfa-dgn", } m["nic-nun"] = { "Nun", 13654297, "nic-gre", } m["nic-nwa"] = { "Nanga-Walo", nil, "qfa-dgn", } m["nic-ogo"] = { "Ogoni", 2350726, "nic-cri", aliases = {"Ogonoid"}, } m["nic-ovo"] = { "Oti-Volta", 1157178, "nic-gur", } m["nic-pla"] = { "nhóm ngôn ngữ Platoid", 453244, "nic-bco", "Nhóm ngôn ngữ Platoid", "Platoid", aliases = {"Đông Nigeria"}, } m["nic-plc"] = { "nhóm ngôn ngữ Trung Plateau", 5061668, "nic-plt", "Nhóm ngôn ngữ Trung Plateau", "Trung Plateau", } m["nic-pld"] = { "Plains Dogon", nil, "qfa-dgn", } m["nic-ple"] = { "East Plateau", 5329154, "nic-plt", } m["nic-pls"] = { "South Plateau", 7568236, "nic-plt", aliases = {"Jilic-Eggonic"}, } m["nic-plt"] = { "nhóm ngôn ngữ Plateau", 1267471, "nic-pla", "Nhóm ngôn ngữ Plateau", "Plateau", } m["nic-ras"] = { "Rashad", 3401986, "nic", } m["nic-rnc"] = { "Central Ring", nil, "nic-rng", } m["nic-rng"] = { "Ring", 2269051, "nic-grf", aliases = {"Ring Road"}, } m["nic-rnn"] = { "Northern Ring", nil, "nic-rng", } m["nic-rnw"] = { "Western Ring", nil, "nic-rng", } m["nic-ser"] = { "Sere", 7453058, "nic-ubg", } m["nic-shi"] = { "Shiroro", 7498953, "nic-knj", aliases = {"Pongu"}, } m["nic-sis"] = { "Sisaala", 36532, "nic-gnw", } m["nic-tar"] = { "Tarokoid", 2394472, "nic-plt", } m["nic-tiv"] = { "nhóm ngôn ngữ Tivoid", 752377, "nic-bds", "Nhóm ngôn ngữ Tivoid", "Tivoid", } m["nic-tvc"] = { "Central Tivoid", nil, "nic-tiv", } m["nic-tvn"] = { "Northern Tivoid", nil, "nic-tiv", } m["nic-ubg"] = { "nhóm ngôn ngữ Ubangi", 33932, "nic-vco", -- or none "Nhóm ngôn ngữ Ubangi", "Ubangi", } m["nic-uce"] = { "East-West Upper Cross River", nil, "nic-ucr", } m["nic-ucn"] = { "North-South Upper Cross River", nil, "nic-ucr", } m["nic-ucr"] = { "Upper Cross River", 4108624, "nic-cri", aliases = {"Upper Cross"}, } m["nic-vco"] = { "nhóm ngôn ngữ Volta-Congo", 37228, "alv", "Nhóm ngôn ngữ Volta-Congo", "Volta-Congo", } m["nic-wov"] = { "Western Oti-Volta", nil, "nic-ovo", aliases = {"Moré-Dagbani"} } m["nic-ykb"] = { "Yukubenic", 16909196, "nic-plt", aliases = {"Oohum"}, } m["nic-ymb"] = { "Yambasa", nil, "nic-mba", } m["nic-yon"] = { "Yom-Nawdm", nil, "nic-ovo", aliases = {"Moré-Dagbani"} } m["nub"] = { "Nubian", 1517194, "sdv-nes", } m["nub-hil"] = { "Hill Nubian", 5762211, "nub", aliases = {"Kordofan Nubian"}, } m["omq"] = { "ngữ hệ Oto-Mangue", 33669, "Ngữ hệ Oto-Mangue", "Oto-Mangue", } m["omq-cha"] = { "Chatino", 35111, "omq-zap", } m["omq-chi"] = { "Chinantecan", 35828, "omq", } m["omq-cui"] = { "Cuicatec", 616024, "omq-mix", } m["omq-maz"] = { "Mazatecan", 36230, "omq", aliases = {"Mazatec"}, } m["omq-mix"] = { "ngữ tộc Mixtec", 21996392, "omq", "Ngữ tộc Mixtec", "Mixtec", } m["omq-mxt"] = { "nhóm ngôn ngữ Mixtec", 36363, "omq-mix", "Nhóm ngôn ngữ Mixtec", "Mixtec", } m["omq-otp"] = { "Oto-Pamean", nil, "omq", } m["omq-pop"] = { "Popolocan", 5132273, "omq", } m["omq-tri"] = { "nhóm ngôn ngữ Triqui", 780200, "omq-mix", "Nhóm ngôn ngữ Triqui", "Triqui", aliases = {"Trique"}, } m["omq-zap"] = { "nhóm ngôn ngữ Zapotec", 8066463, "omq", "Nhóm ngôn ngữ Zapotec", "Zapotec", } m["omq-zpc"] = { "Zapotec", 13214, "omq-zap", } m["omv"] = { "nhóm ngôn ngữ Omo", 33860, "afa", "Nhóm ngôn ngữ Omo", "Omo", } m["omv-aro"] = { "nhóm ngôn ngữ Aari", 3699526, "omv", "Nhóm ngôn ngữ Aari", "Aari", aliases = {"Ari-Banna", "Nam Omo", "Somo"}, } m["omv-diz"] = { "nhóm ngôn ngữ Dizi", 430251, "omv", "Nhóm ngôn ngữ Dizi", "Dizi", aliases = {"Maji", "Majoid"}, } m["omv-eom"] = { "East Ometo", 20527288, "omv-ome", } m["omv-gon"] = { "Gonga", 4143043, "omv", aliases = {"Kefoid"}, } m["omv-mao"] = { "Mao", 1351495, "omv", } m["omv-nom"] = { "nhóm ngôn ngữ Bắc Ometo", nil, "omv-ome", "Nhóm ngôn ngữ Bắc Ometo", "Bắc Ometo", } m["omv-ome"] = { "nhóm ngôn ngữ Ometo", 36310, "omv", "Nhóm ngôn ngữ Ometo", "Ometo", } m["oto"] = { "Otomian", 1270220, "omq-otp", } m["oto-otm"] = { "Otomi", nil, "oto", } m["paa"] = { "ngữ hệ Papua", 236425, "qfa-not", "Ngữ hệ Papua", "Papua", } m["paa-arf"] = { "Arafundi", 4783702, } m["paa-asa"] = { "Arai-Samaia", 48803569, } m["paa-bng"] = { "Baining", 748487, aliases = {"East New Britain"}, } m["paa-brd"] = { "ngữ hệ Thượng Tami", 1752158, "Ngữ hệ Thượng Tami", "Thượng Tami", aliases = {"Border", "Upper Tami"}, } m["paa-egb"] = { "East Geelvink Bay", 1497678, aliases = {"East Cenderawasih"}, } m["paa-eng"] = { "Engan", 3217449, } m["paa-iwm"] = { "ngữ hệ Iwam", 15147853, "Ngữ hệ Iwam", "Iwam", } m["paa-kag"] = { -- recode as ngf-kag? "Kainantu-Goroka", 3217463, "ngf", } m["paa-kiw"] = { "Kiwaian", 338449, } m["paa-kut"] = { "nhóm ngôn ngữ Kutubuan", 48767893, "paa-pag", "Nhóm ngôn ngữ Kutubuan", "Kutubuan", } m["paa-kwm"] = { "Kwomtari", 2075415, } m["paa-lkp"] = { "Lakes Plain", 6478969, } m["paa-lsp"] = { "Lower Sepik", 7061700, aliases = {"Nor-Pondo"}, } m["paa-mai"] = { "Mairasi", 6736896, } m["paa-msk"] = { "Sko", 953509, aliases = {"Skou"}, } m["paa-nbo"] = { "North Bougainville", 749496, } m["paa-nim"] = { "Nimboran", 12638426, } m["paa-nha"] = { "North Halmahera", nil, "paa-wpa", } m["paa-pag"] = { "ngữ hệ vùng vịnh Papua", 48803685, "Ngữ hệ vùng vịnh Papua", "vùng vịnh Papua", } m["paa-pau"] = { "Pauwasi", 7155496, } m["paa-ram"] = { "Ramu", 3442808, } m["paa-sbo"] = { "South Bougainville", 3217380, } m["paa-sen"] = { "Sentani", 17044584, "paa-wpa", } m["paa-sep"] = { "ngữ hệ Sepik", 3508772, "Ngữ hệ Sepik", "Sepik", } m["paa-tkw"] = { "Tor-Kwerba", 7827523, } m["paa-wpa"] = { "West Papuan", 1363026, } m["paa-yam"] = { "Yam", 15062272, aliases = {"Morehead and Upper Maro River"}, } m["paa-yua"] = { "Yuat", 8060096, } m["phi"] = { "nhóm ngôn ngữ Philippines", 947858, "poz", "Nhóm ngôn ngữ Philippines", "Philippines", } m["phi-kal"] = { "Kalamian", 3217466, "phi", aliases = {"Calamian"}, } m["poz"] = { "nhóm ngôn ngữ Mã Lai-Đa Đảo", 143158, "map", "Nhóm ngôn ngữ Mã Lai-Đa Đảo", "Mã Lai-Đa Đảo", } m["poz-aay"] = { "Admiralty Islands", 2701306, "poz-oce", } m["poz-bnn"] = { "nhóm ngôn ngữ Bắc Borneo", 1427907, "poz", "Nhóm ngôn ngữ Bắc Borneo", "Bắc Borneo", } m["poz-bre"] = { "nhóm ngôn ngữ Đông Barito", 2701314, "poz", "Nhóm ngôn ngữ Đông Barito", "Đông Barito", } m["poz-brw"] = { "nhóm ngôn ngữ Tây Barito", 2761679, "poz", "Nhóm ngôn ngữ Tây Barito", "Tây Barito", } m["poz-bss"] = { "nhóm ngôn ngữ Bali-Sasak-Sumbawa", 3396043, "poz-msa", "Nhóm ngôn ngữ Bali-Sasak-Sumbawa", "Bali-Sasak-Sumbawa", } m["poz-btk"] = { "nhóm ngôn ngữ Bungku-Tolaki", 3217381, "poz-clb", "Nhóm ngôn ngữ Bungku-Tolaki", "Bungku-Tolaki", } m["poz-cet"] = { "nhóm ngôn ngữ Mã Lai-Đa Đảo Trung-Đông", 2269883, "poz", "Nhóm ngôn ngữ Mã Lai-Đa Đảo Trung-Đông", "Mã lai-Đa Đảo Trung-Đông", } m["poz-clb"] = { "nhóm ngôn ngữ Celebes", 1078041, "poz", "Nhóm ngôn ngữ Celebes", "Celebes", } m["poz-cln"] = { "New Caledonian", 3091221, "poz-occ", } m["poz-cma"] = { "Central Maluku", 3217479, "poz-cet", } m["poz-hce"] = { "Halmahera-Cenderawasih", 2526616, "pqe", } m["poz-kal"] = { "nhóm ngôn ngữ Kaili-Pamona", 3217465, "poz-clb", "Nhóm ngôn ngữ Kaili-Pamona", "Kaili-Pamona", } m["poz-lgx"] = { "Lampungic", 49215, "poz-sus", } m["poz-mcm"] = { "nhóm ngôn ngữ Mã Lai-Chăm", nil, "poz-msa", "Nhóm ngôn ngữ Mã Lai-Chăm", "Mã Lai-Chăm", } m["poz-mic"] = { "nhóm ngôn ngữ Micronesia", 420591, "poz-occ", "Nhóm ngôn ngữ Micronesia", "Micronesia'," } m["poz-mly"] = { "nhóm ngôn ngữ Mã Lai", 662628, "poz-mcm", "Nhóm ngôn ngữ Mã Lai", "Mã Lai", } m["poz-msa"] = { "nhóm ngôn ngữ Mã Lai-Sumbawa", 1363818, "poz", "Nhóm ngôn ngữ Mã Lai-Sumbawa", "Mã Lai-Sumbawa", } m["poz-mun"] = { "nhóm ngôn ngữ Muna-Buton", 3037924, "poz-clb", "Nhóm ngôn ngữ Muna-Buton", "Muna-Buton", } m["poz-nws"] = { "nhóm ngôn ngữ Tây Bắc Sumatra", 2071308, "poz", "Nhóm ngôn ngữ Tây Bắc Sumatra", "Tây Bắc Sumatra", } m["poz-occ"] = { "nhóm ngôn ngữ Trung-Đông Châu Đại Dương", 2068435, "poz-oce", "Nhóm ngôn ngữ Trung-Đông Châu Đại Dương", "Trung-Đông Châu Đại Dương", } m["poz-oce"] = { "nhóm ngôn ngữ Châu Đại Dương", 324457, "pqe", "Nhóm ngôn ngữ Châu Đại Dương", "Châu Đại Dương", } m["poz-ocw"] = { "nhóm ngôn ngữ Tây Châu Đại Dương", 2701282, "poz-oce", "Nhóm ngôn ngữ Tây Châu Đại Dương", "Tây Châu Đại Dương", } m["poz-pcc"] = { "nhóm ngôn ngữ Trung Thái Bình Dương", 3130237, "poz-occ", "Nhóm ngôn ngữ Trung Thái Bình Dương", "Trung Thái Bình Dương", } m["poz-pep"] = { "Eastern Polynesian", 390979, "poz-pnp", } m["poz-pnp"] = { "nhóm ngôn ngữ Đa Đảo hạt nhân", 743851, "poz-pol", "Nhóm ngôn ngữ Đa Đảo hạt nhân", "Đa Đảo hạt nhân", } m["poz-pol"] = { "nhóm ngôn ngữ Đa Đảo", 390979, "poz-pcc", "Nhóm ngôn ngữ Đa Đảo", "Đa Đảo", } m["poz-san"] = { "nhóm ngôn ngữ Sabah", 3217517, "poz-bnn", "Nhóm ngôn ngữ Sabah", "Sabah", } m["poz-sbj"] = { "nhóm ngôn ngữ Sama-Bajaw", 2160409, "poz", "Nhóm ngôn ngữ Sama-Bajaw", "Sama-Bajaw", } m["poz-slb"] = { "nhóm ngôn ngữ Saluan-Banggai", 3217519, "poz-clb", "Nhóm ngôn ngữ Saluan-Banggai", "Saluan-Banggai", } m["poz-sls"] = { "nhóm ngôn ngữ Đông Nam Solomon", 3119671, "poz-occ", "Nhóm ngôn ngữ Đông Nam Solomon", "Đông Nam Solomon", } m["poz-ssw"] = { "South Sulawesi", 2778190, "poz-sus", } m["poz-sus"] = { "Sunda-Sulawesi", 319552, "poz", } m["poz-swa"] = { "North Sarawakan", 538569, "poz-bnn", } m["poz-tim"] = { "nhóm ngôn ngữ Timor", 7806987, "poz-cet", "Nhóm ngôn ngữ Timor", "Timor", } m["poz-tot"] = { "Tomini-Tolitoli", 3217541, "poz-clb", } m["poz-vnc"] = { "North-Central Vanuatu", 3039118, "poz-occ", } m["poz-wot"] = { "nhóm ngôn ngữ Wotu-Wolio", 1041317, "poz-clb", "Nhóm ngôn ngữ Wotu-Wolio", "Wotu-Wolio", } m["pqe"] = { "nhóm ngôn ngữ Mã Lai-Đa Đảo Đông", 2269883, "poz-cet", "Nhóm ngôn ngữ Mã Lai-Đa Đảo Đông", "Mã Lai-Đa Đảo Đông", } m["pra"] = { "Prakrit", 192170, "inc", aliases = {"Prakritic"}, protoLanguage = "inc-pra", } m["qfa-adc"] = { "Central Great Andamanese", nil, "qfa-adm", } m["qfa-adm"] = { "Great Andamanese", 3515103, } m["qfa-adn"] = { "Northern Great Andamanese", nil, "qfa-adm", } m["qfa-ads"] = { "Southern Great Andamanese", nil, "qfa-adm", } m["qfa-ain"] = { "ngữ hệ Ainu", 50111972, "Ngữ hệ Ainu", "Ainu", aliases = {"Ainu"}, } m["qfa-bej"] = { "nhóm ngôn ngữ Bối-Cát Triệu", nil, "qfa-bet", "Nhóm ngôn ngữ Bối-Cát Triệu", "Bối-Cát Triệu" } m["qfa-bet"] = { "nhóm ngôn ngữ Bối-Thái", nil, "qfa-tak", "Nhóm ngôn ngữ Bối-Thái", "Bối-Thái", aliases = {"Thái-Bối", "Daic-Beic", "Beic-Daic"}, } m["qfa-buy"] = { "nhóm ngôn ngữ Bố Ương", 1109927, "qfa-kra", "Nhóm ngôn ngữ Bố Ương", "Bố Ương", } m["qfa-cka"] = { "ngữ hệ Chukotka-Kamchatka", 33255, "Ngữ hệ Chukotka-Kamchatka", "Chukotka-Kamchatka", } m["qfa-ckn"] = { "nhóm ngôn ngữ Chukotka", 2606732, "qfa-cka", "Nhóm ngôn ngữ Chukotka", "Chukotka", } m["qfa-cnt"] = { "contact", 133253514, "qfa-not", } m["qfa-dgn"] = { "Dogon", 1234776, "nic", } m["qfa-dny"] = { "Dene-Yeniseian", 21103, aliases = {"Dené-Yeniseian"}, } m["qfa-gel"] = { "Gelao", 56401, "qfa-kra", } m["qfa-hur"] = { "Hurro-Urartian", 1144159, } m["qfa-iso"] = { "nhóm ngôn ngữ biệt lập", 33648, "qfa-not", "Nhóm ngôn ngữ biệt lập", "biệt lập", } m["qfa-kad"] = { "Kadu", -- considered either Nilo-Saharan or independent/none 1720989, } m["qfa-kms"] = { "nhóm ngôn ngữ Động-Thủy", 1023641, "qfa-tak", "Nhóm ngôn ngữ Động-Thủy", "Động-Thủy", } m["qfa-kor"] = { "ngữ hệ Triều Tiên", 11263525, "Ngữ hệ Triều Tiên", "Triều Tiên", } m["qfa-kra"] = { "Kra", 1022087, "qfa-tak", } m["qfa-lic"] = { "nhóm ngôn ngữ Hlai", 1023648, "qfa-tak", "Nhóm ngôn ngữ Hlai", "Hlai", aliases = {"Hlaic"}, } m["qfa-mal"] = { "Left May", 614468, "paa-asa", } m["qfa-mch"] = { -- used in both N and S America "Macro-Chibchan", 3438062, } m["qfa-mix"] = { "mixed", 33694, "qfa-not", } m["qfa-not"] = { "not a family", nil, "qfa-not", } m["qfa-onb"] = { "Be", nil, "qfa-bet", aliases = {"Ong-Be", "Beic"}, } m["qfa-ong"] = { "ngữ hệ Önge", 2090575, aliases = {"Angan", "South Andamanese", "Jarawa-Onge"}, } m["qfa-sub"] = { "ngôn ngữ cơ tầng", 20730913, "qfa-not", } m["qfa-tak"] = { "ngữ hệ Kra-Dai", 34171, "Ngữ hệ Kra-Dai", "Kra-Dai", aliases = {"Tai-Kadai", "Kadai"}, } m["qfa-tap"] = { "Timor-Alor-Pantar", 16590002, } m["qfa-tor"] = { "Torricelli", 1333831, } m["qfa-tyn"] = { "ngữ hệ Tyrseni", 1344038, "Ngữ hệ Tyrseni", "Tyrseni", } m["qfa-xgs"] = { "ngữ hệ Tiên Ti-Mông Cổ", 108887939, "Ngữ hệ Tiên Ti-Mông Cổ", "Tiên Ti-Mông Cổ", } m["qfa-xgx"] = { "nhóm ngôn ngữ Liên Mông Cổ", 107619002, "qfa-xgs", "Nhóm ngôn ngữ Liên Mông Cổ", "Liên Mông Cổ", } m["qfa-yen"] = { "Yeniseian", 27639, "qfa-dny", aliases = {"Yeniseic", "Yenisei-Ostyak"}, } m["qfa-yno"] = { "Northern Yeniseian", nil, "qfa-yen", } m["qfa-yso"] = { "Southern Yeniseian", nil, "qfa-yen", } m["qfa-yuk"] = { "ngữ hệ Yukaghir", 34164, "Ngữ hệ Yukaghir", "Yukaghir", aliases = {"Yukagir", "Jukagir"}, } m["qwe"] = { "ngữ hệ Quechua", 5218, "Ngữ hệ Quechua", "Quechua", } m["raj"] = { "nhóm ngôn ngữ Rajasthan", 13196, "inc-wes", "Nhóm ngôn ngữ Rajasthan", "Rajasthan", protoLanguage = "inc-ogu", } m["roa"] = { "nhóm ngôn ngữ Rôman", 19814, "itc", aliases = {"Rôman", "Latinh", "Tân Latinh"}, "Nhóm ngôn ngữ Rôman", "Rôman", protoLanguage = "la", } m["roa-asl"] = { "Asturleonese", 35390, "roa-ibe", protoLanguage = "roa-ole", } m["roa-cas"] = { "nhóm ngôn ngữ Castilla", 71924, "roa-ibe", "Nhóm ngôn ngữ Castilla", "Castilla", aliases = {"Castillian", "Castilic", "Castillic"}, protoLanguage = "osp", } m["roa-dal"] = { "Dalmatian Romance", 97646077, "roa-itd", } m["roa-eas"] = { "Eastern Romance", 147576, "roa", } m["roa-ibe"] = { "nhóm ngôn ngữ Iberia-Rôman", 749533, "roa-wes", "Nhóm ngôn ngữ Iberia-Rôman", "Iberia-Rôman", aliases = {"Iberia-Rôman", "Tây Iberia-Rôman"}, } m["roa-wes"] = { "nhóm ngôn ngữ Tây Rôman", 2714388, "roa-iwr", "Nhóm ngôn ngữ Tây Rôman", "Tây Rôman", } m["roa-iwr"] = { "nhóm ngôn ngữ Ý-Tây Rôman", 112608, "roa", "Nhóm ngôn ngữ Ý-Tây Rôman", "Ý-Tây Rôman", aliases = {"Ý-Tây"}, } m["roa-itd"] = { "Italo-Dalmatian", 3313381, "roa", } m["roa-git"] = { "Gallo-Italic", 516074, "roa", } m["roa-oil"] = { "Oïl", 37351, "roa", protoLanguage = "fro", } m["roa-ocr"] = { "Occitano-Romance", 599958, "roa", } m["roa-rhe"] = { "Rhaeto-Romance", 515593, "roa", } --[=[ Exceptional language and family codes for South American Indian languages can use the prefix "sai-", though "sai" is no longer itself a family code. ]=]-- m["sai-ara"] = { "Araucanian", 626630, } m["sai-aym"] = { "Aymaran", 33010, } m["sai-bar"] = { "Barbacoan", 807304, aliases = {"Barbakoan"}, } m["sai-bor"] = { "Boran", 43079266, } m["sai-cah"] = { "Cahuapanan", 1025793, } m["sai-car"] = { "ngữ hệ Carib", 33090, "Ngữ hệ Carib", "Carib", aliases = {"Cariban"}, } m["sai-cer"] = { "Cerrado", 98078151, "sai-jee", aliases = {"Amazonian Jê"}, } m["sai-chc"] = { "Chocoan", 1075616, aliases = {"Choco", "Chocó"}, } m["sai-cho"] = { "Chonan", 33019, aliases = {"Chon"}, } m["sai-cje"] = { "Central Jê", 18010843, "sai-cer", aliases = {"Akuwẽ"}, } m["sai-cpc"] = { "Chapacuran", 1062626, } m["sai-crn"] = { "Charruan", 3112423, aliases = {"Charrúan"}, } m["sai-ctc"] = { "Catacaoan", 5051139, } m["sai-guc"] = { "Guaicuruan", 1974973, "sai-mgc", aliases = {"Guaicurú", "Guaycuruana", "Guaikurú", "Guaycuruano", "Guaykuruan", "Waikurúan"}, } m["sai-guh"] = { "Guahiban", 944056, aliases = {"Guahiboan", "Guajiboan", "Wahivoan"}, } m["sai-gui"] = { "Guianan", nil, "sai-car", aliases = {"Guianan Carib", "Guiana Carib"}, } m["sai-har"] = { "Harákmbut", 1584402, "sai-hkt", aliases = {"Harákmbet"}, } m["sai-hkt"] = { "Harákmbut-Katukinan", 17107635, } m["sai-hrp"] = { "ngữ hệ Huarpe", 1578336, "Ngữ hệ Huarpe", "Huarpe", aliases = {"Warpean", "Huarpe", "Warpe"}, } m["sai-jee"] = { "Jê", 1483594, "sai-mje", aliases = {"Gê", "Jean", "Gean", "Jê-Kaingang", "Ye"}, } m["sai-jir"] = { "Jirajaran", 3028651, aliases = {"Hiraháran"}, } m["sai-jiv"] = { "ngữ hệ Jivaro", 1393074, "Ngữ hệ Jivaro", "Jivaro", aliases = {"Hívaro", "Jibaro", "Jibaroana", "Jívaro"}, } m["sai-ktk"] = { "Katukinan", 2636000, "sai-hkt", aliases = {"Catuquinan"}, } m["sai-kui"] = { "Kuikuroan", nil, "sai-car", aliases = {"Kuikuro", "Nahukwa"}, } m["sai-map"] = { "Mapoyan", 61096301, "sai-ven", aliases = {"Mapoyo", "Mapoyo-Yabarana", "Mapoyo-Yavarana", "Mapoyo-Yawarana"}, } m["sai-mas"] = { "Mascoian", 1906952, aliases = {"Mascoyan", "Maskoian", "Enlhet-Enenlhet"}, } m["sai-mgc"] = { "Mataco-Guaicuru", 255512, } m["sai-mje"] = { "Macro-Jê", 887133, aliases = {"Macro-Gê"}, } m["sai-mtc"] = { "Matacoan", 2447424, "sai-mgc", } m["sai-mur"] = { "Muran", 33826, aliases = {"Mura"}, } m["sai-nad"] = { "Nadahup", 1856439, aliases = {"Makú", "Macú", "Vaupés-Japurá"}, } m["sai-nje"] = { "Northern Jê", 98078225, "sai-cer", aliases = {"Core Jê"}, } m["sai-nmk"] = { "Nambikwaran", 15548027, aliases = {"Nambicuaran", "Nambiquaran", "Nambikuaran"}, } m["sai-otm"] = { "Otomacoan", 3217503, aliases = {"Otomákoan", "Otomakoan"}, } m["sai-pan"] = { "nhóm ngôn ngữ Pano", 1544537, "sai-pat", "Nhóm ngôn ngữ Pano", "Pano", aliases = {"Panoan"}, } m["sai-pat"] = { "ngữ hệ Pano-Tacana", 2475746, "Ngữ hệ Pano-Tacana", "Pano-Tacana", aliases = {"Pano-Tacana", "Pano-Takana", "Páno-Takána", "Pano-Takánan"}, } m["sai-pek"] = { "Pekodian", 107451736, "sai-car", aliases = {"South Amazonian Carib", "Southern Cariban", "Pekodi"}, } m["sai-pem"] = { "Pemongan", nil, "sai-ven", aliases = {"Pemong", "Pemóng", "Purukoto"}, } m["sai-prk"] = { "Parukotoan", 107451482, "sai-car", aliases = {"Parukoto"}, } m["sai-sje"] = { "Southern Jê", 98078245, "sai-jee", } m["sai-tac"] = { "Tacanan", 3113762, "sai-pat", } m["sai-tar"] = { "Taranoan", 105097814, "sai-gui", aliases = {"Trio", "Tarano"}, } m["sai-tuc"] = { "Tucanoan", 788144, } m["sai-tyu"] = { "Ticuna-Yuri", 4467010, } m["sai-ucp"] = { "Uru-Chipaya", 2475488, aliases = {"Uru-Chipayan"}, } m["sai-ven"] = { "Venezuelan Cariban", nil, "sai-car", aliases = {"Venezuelan Carib", "Venezuelan", "Venezuelano"}, } m["sai-wic"] = { "Wichí", 3027047, } m["sai-wit"] = { "Witotoan", 43079317, aliases = {"Huitotoan", "Uitotoan"}, } m["sai-ynm"] = { "Yanomami", nil, aliases = {"Yanomam", "Shamatari", "Yamomami", "Yanomaman"}, } m["sai-yuk"] = { "Yukpan", nil, "sai-car", aliases = {"Yukpa", "Yukpano", "Yukpa-Japreria"}, } m["sai-zam"] = { "Zamucoan", 3048461, aliases = {"Samúkoan"}, } m["sai-zap"] = { "Zaparoan", 33911, aliases = {"Záparoan", "Saparoan", "Sáparoan", "Záparo", "Zaparoano", "Zaparoana"}, } m["sal"] = { "ngữ hệ Salish", 33985, "Ngữ hệ Salish", "Salish", } m["sdv"] = { "Eastern Sudanic", 2036148, "ssa", } m["sdv-bri"] = { "Bari", nil, "sdv-nie", } m["sdv-daj"] = { "Daju", 956724, "sdv", } m["sdv-dnu"] = { "Dinka-Nuer", nil, "sdv-niw", } m["sdv-eje"] = { "Eastern Jebel", 3408878, "sdv", } m["sdv-kln"] = { "Kalenjin", 637228, "sdv-nis", } m["sdv-lma"] = { "Lotuko-Maa", nil, "sdv-nie", } m["sdv-lon"] = { "Northern Luo", nil, "sdv-luo", } m["sdv-los"] = { "Southern Luo", 7570103, "sdv-luo", } m["sdv-luo"] = { "Luo", nil, "sdv-niw", } m["sdv-nes"] = { "Northern Eastern Sudanic", 4810496, "sdv", aliases = {"Astaboran", "Ek Sudanic"}, } m["sdv-nie"] = { "Eastern Nilotic", 153795, "sdv-nil", } m["sdv-nil"] = { "Nilotic", 513408, "sdv", } m["sdv-nis"] = { "Southern Nilotic", 1552410, "sdv-nil", } m["sdv-niw"] = { "Western Nilotic", 3114989, "sdv-nil", } m["sdv-nma"] = { "Nandi-Markweta", nil, "sdv-kln", } m["sdv-nyi"] = { "Nyima", 11688746, "sdv-nes", aliases = {"Nyimang"}, } m["sdv-tmn"] = { "Taman", 3408873, "sdv-nes", aliases = {"Tamaic"}, } m["sdv-ttu"] = { "Teso-Turkana", 7705551, "sdv-nie", aliases = {"Ateker"}, } m["sel"] = { "nhóm ngôn ngữ Selkup", 34008, "syd", "Nhóm ngôn ngữ Selkup", "Selkup", } m["sem"] = { "nhóm ngôn ngữ Semit", 34049, "afa", "Nhóm ngôn ngữ Semit", "Semit", } m["sem-ara"] = { "nhóm ngôn ngữ Aram", 28602, "sem-nwe", "Nhóm ngôn ngữ Aram", "Aram", protoLanguage = "arc", } m["sem-arb"] = { "nhóm ngôn ngữ Ả Rập", 164667, "sem-cen", "Nhóm ngôn ngữ Ả Rập", "Ả Rập", protoLanguage = "ar", } m["sem-are"] = { "nhóm ngôn ngữ Aram Đông", 3410322, "sem-ara", "Nhóm ngôn ngữ Aram Đông", "Aram Đông", } m["sem-arw"] = { "nhóm ngôn ngữ Aram Tây", 3394214, "sem-ara", "Nhóm ngôn ngữ Aram Tây", "Aram Tây", } m["sem-ase"] = { "Southeastern Aramaic", 3410322, "sem-are", } m["sem-can"] = { "nhóm ngôn ngữ Canaan", 747547, "sem-nwe", "Nhóm ngôn ngữ Canaan", "Canaan", } m["sem-cen"] = { "nhóm ngôn ngữ Semit Trung", 3433228, "sem-wes", "Nhóm ngôn ngữ Semit Trung", "Semit Trung", } m["sem-cna"] = { "nhóm ngôn ngữ Tân Aram Trung", 3410322, "sem-are", "Nhóm ngôn ngữ Tân Aram Trung", "Tân Aram Trung", } m["sem-eas"] = { "nhóm ngôn ngữ Semit Đông", 164273, "sem", "Nhóm ngôn ngữ Semit Đông", "Semit Đông", } m["sem-eth"] = { "nhóm ngôn ngữ Semit Ethiopia", 163629, "sem-wes", "Nhóm ngôn ngữ Semit Ethiopia", "Semit Ethiopia", aliases = {"Afro-Semitic", "Ethiopian", "Ethiopic", "Ethiosemitic"}, } m["sem-nna"] = { "Northeastern Neo-Aramaic", 2560578, "sem-are", } m["sem-nwe"] = { "nhóm ngôn ngữ Semit Tây Bắc", 162996, "sem-cen", "Nhóm ngôn ngữ Semit Tây Bắc", "Semit Tây Bắc", } m["sem-osa"] = { "Old South Arabian", 35025, "sem-cen", aliases = {"Epigraphic South Arabian", "Sayhadic"}, } m["sem-sar"] = { "nhóm ngôn ngữ Nam Ả Rập hiện đại", 1981908, "sem-wes", "Nhóm ngôn ngữ Nam Ả Rập hiện đại", "Nam Ả Rập hiện đại", } m["sem-wes"] = { "nhóm ngôn ngữ Semit Tây", 124901, "sem", "Nhóm ngôn ngữ Semit Tây", "Semit Tây", } m["sgn"] = { "sign", 34228, "qfa-not", } m["sgn-fsl"] = { "French Sign Languages", 5501921, "sgn", } m["sgn-gsl"] = { "German Sign Languages", 5551235, "sgn", } m["sgn-jsl"] = { "Japanese Sign Languages", 11722508, "sgn", } m["sio"] = { "Siouan", 34181, "nai-sca", } m["sio-dhe"] = { "Dhegihan", 3217420, "sio-msv", } m["sio-dkt"] = { "nhóm ngôn ngữ Dakota", 17188640, "sio-msv", "Nhóm ngôn ngữ Dakota", "Dakota", } m["sio-mor"] = { "Missouri River Siouan", 26807266, "sio", } m["sio-msv"] = { "Mississippi Valley Siouan", 17188638, "sio", } m["sio-ohv"] = { "Ohio Valley Siouan", 21070931, "sio", } m["sit"] = { "ngữ hệ Hán-Tạng", 45961, "Ngữ hệ Hán-Tạng", "Hán-Tạng", } m["sit-aao"] = { "Ao", 615474, "sit", aliases = {"Central Naga languages"}, } m["sit-alm"] = { "Almora", nil, "sit-whm", } m["sit-bai"] = { "nhóm ngôn ngữ Bạch", 35103, "sit-mba", "Nhóm ngôn ngữ Bạch", "Bạch", aliases = {"Bai"}, } m["sit-bdi"] = { "nhóm ngôn ngữ Bod", 1814078, "sit", "Nhóm ngôn ngữ Bod", "Bod", } m["sit-cln"] = { "nhóm ngôn ngữ Thái-Long", 107182612, "sit-mba", "Nhóm ngôn ngữ Thái-Long", "Thái-Long", aliases = {"Cai–Long", "Ta–Li", "Ta-Li"}, } m["sit-dhi"] = { "Dhimalish", 1207648, "sit", } m["sit-ebo"] = { "nhóm ngôn ngữ Bod Đông", 56402, "sit-bdi", "Nhóm ngôn ngữ Bod Đông", "Bod Đông", } m["sit-gma"] = { "nhóm ngôn ngữ Đại Magar", 55612963, "sit", "Nhóm ngôn ngữ Đại Magar", "Đại Magar", } m["sit-gsi"] = { "Greater Siangic", 52698851, "sit", } m["sit-hrs"] = { "Hrusish", 1632501, "sit", aliases = {"Southeast Kamengic"}, } m["sit-jnp"] = { "Jingphoic", nil, "sit-jpl", aliases = {"Jingpho"}, } m["sit-jpl"] = { "Kachin-Luic", 1515454, "tbq-bkj", aliases = {"Jingpho-Luish", "Jingpho-Asakian", "Kachinic"}, } m["sit-kch"] = { "Konyak-Chang", nil, "sit-kon", } m["sit-kha"] = { "nhóm ngôn ngữ Kham", 33305, "sit-gma", "Nhóm ngôn ngữ Kham", "Kham", } m["sit-khb"] = { "Kho-Bwa", 6401917, "sit", aliases = {"Bugunish", "Kamengic"}, } m["sit-kic"] = { "Central Kiranti", nil, "sit-kir", } m["sit-kie"] = { "Eastern Kiranti", nil, "sit-kir", } m["sit-kin"] = { "Kinnauric", nil, "sit-whm", aliases = {"Kinnauri"}, } m["sit-kir"] = { "Kiranti", 922148, "sit", } m["sit-kiw"] = { "Western Kiranti", 922148, "sit-kir", } m["sit-kon"] = { "Konyak", 774590, "tbq-bkj", aliases = {"Konyakian", "Northern Naga"}, } m["sit-kyk"] = { "Kyirong-Kagate", 6450957, "sit-tib", } m["sit-lab"] = { "nhóm ngôn ngữ Ladakh-Balti", 6450957, "sit-tib", "Nhóm ngôn ngữ Ladakh-Balti", "Ladakh-Balti", } m["sit-las"] = { "Lahuli-Spiti", 6473510, "sit-tib", } m["sit-luu"] = { "Luish", 55621439, "sit-jpl", aliases = {"Asakian", "Sak"}, } m["sit-mar"] = { "Maringic", nil, "sit-tma", } m["sit-mba"] = { "nhóm ngôn ngữ Đại Bạch", 16963847, "sit-sba", "Nhóm ngôn ngữ Đại Bạch", "Đại Bạch", aliases = {"Macro-Bai", "Greater Bai"}, } m["sit-mdz"] = { "Midzu", 6843504, "sit", aliases = {"Geman", "Midzuish", "Miju-Meyor", "Southern Mishmi"}, } m["sit-mnz"] = { "Mondzish", 6898839, "tbq-lob", aliases = {"Mangish"}, } m["sit-mru"] = { "Mruic", 16908870, "sit", aliases = {"Mru-Hkongso"}, } m["sit-nas"] = { "Naish", 25047956, "sit-nax", } m["sit-nax"] = { "Naic", 6982999, "tbq-buq", aliases = {"Naxish"}, } m["sit-nba"] = { "nhóm ngôn ngữ Bạch Bắc", 122463830, "sit-bai", "Nhóm ngôn ngữ Bạch Bắc", "Bạch Bắc", aliases = {"Northern Bai"}, } m["sit-new"] = { "Newaric", 55625069, "sit", } m["sit-nng"] = { "nhóm ngôn ngữ Nung", 1515482, "sit", "Nhóm ngôn ngữ Nung", "Nung", aliases = {"Nung"}, } m["sit-qia"] = { "Qiangic", 1636765, "tbq-buq", } m["sit-rgy"] = { "Rgyalrongic", 56936, "sit-qia", aliases = {"Jiarongic"}, } m["sit-sba"] = { "nhóm ngôn ngữ Hán-Bạch", nil, "sit", "Nhóm ngôn ngữ Hán-Bạch", "Hán-Bạch", aliases = {"Sino-Bai", "Greater Bai"}, } m["sit-tam"] = { "nhóm ngôn ngữ Tamang", 3309439, "sit", "Nhóm ngôn ngữ Tamang", "Tamang", aliases = {"West Bodish"}, } m["sit-tan"] = { "Tani", 3217538, "sit", } m["sit-tib"] = { "nhóm ngôn ngữ Tạng", 1641150, "sit-bdi", "Nhóm ngôn ngữ Tạng", "Tạng", protoLanguage = "otb", } m["sit-tja"] = { "nhóm ngôn ngữ Thổ Gia", nil, "sit", "Nhóm ngôn ngữ Thổ Gia", "Thổ Gia", } m["sit-tma"] = { "Tangkhul-Maring", nil, "sit", } m["sit-tng"] = { "nhóm ngôn ngữ Tangkhul", 1516657, "sit-tma", "Nhóm ngôn ngữ Tangkhul", "Tangkhul", aliases = {"Tangkhul"}, } m["sit-tno"] = { "Tangsa-Nocte", nil, "sit-kon", } m["sit-tsk"] = { "Tshangla", nil, "sit-bdi", } m["sit-whm"] = { "West Himalayish", 2301695, "sit", } m["sit-zem"] = { "Zeme", 189291, "sit", aliases = {"Zeliangrong", "Zemeic"}, } m["sla"] = { "nhóm ngôn ngữ gốc Slav", 23526, "ine-bsl", "Nhóm ngôn ngữ gốc Slav", "gốc Slav", aliases = {"Slavonic"}, } m["smi"] = { "nhóm ngôn ngữ Sami", 56463, "urj", "Nhóm ngôn ngữ Sami", "Sami", aliases = {"Saami", "Samic", "Saamic"}, } m["son"] = { "nhóm ngôn ngữ Songhay", 505198, "ssa", "Nhóm ngôn ngữ Songhay", "Songhay", aliases = {"Songhai"}, } m["sqj"] = { "nhóm ngôn ngữ Albani", 8748, "ine", "Nhóm ngôn ngữ Albani", "Albani", } m["ssa"] = { "ngữ hệ Nin-Sahara", -- possibly not a genetic grouping 33705, "Ngữ hệ Nin-Sahara", "Nin-Sahara", } m["ssa-fur"] = { "Fur", 2989512, "ssa", } m["ssa-klk"] = { "Kuliak", 1791476, "ssa", aliases = {"Rub"}, } m["ssa-kom"] = { "nhóm ngôn ngữ Koman", 1781084, "ssa", "Nhóm ngôn ngữ Koman", "Koman", } m["ssa-sah"] = { "Saharan", 1757661, "ssa", } m["syd"] = { "nhóm ngôn ngữ Samoyed", 34005, "urj", "Nhóm ngôn ngữ Samoyed", "Samoyed", aliases = {"Samoyed", "Samodeic"}, } m["tai"] = { "nhóm ngôn ngữ Thái", 749720, "qfa-bet", "Nhóm ngôn ngữ Thái", "Thái", aliases = {"Daic"}, } m["tai-wen"] = { "nhóm ngôn ngữ Văn Ma-Thái Tây Nam", nil, "tai", "Nhóm ngôn ngữ Văn Ma-Thái Tây Nam", "Văn Ma-Thái Tây Nam", } m["tai-tay"] = { "nhóm ngôn ngữ Tày", nil, "tai-wen", "Nhóm ngôn ngữ Tày", "Tày", } m["tai-sap"] = { "nhóm ngôn ngữ Sa Pa-Thái Tây Nam", nil, "tai-wen", "Nhóm ngôn ngữ Sa Pa-Thái Tây Nam", "Sa Pa-Thái Tây Nam", aliases = {"Sapa-Thai"}, } m["tai-swe"] = { "nhóm ngôn ngữ Thái Tây Nam", 3447105, "tai-sap", "Nhóm ngôn ngữ Thái Tây Nam", "Thái Tây Nam", } m["tai-cho"] = { "nhóm ngôn ngữ Thái Sùng Tả", 13216, "tai", "Nhóm ngôn ngữ Thái Sùng Tả", "Thái Sùng Tả", } m["tai-cen"] = { "nhóm ngôn ngữ Thái Trung tâm", 5061891, "tai", "Nhóm ngôn ngữ Thái Trung tâm", "Thái Trung tâm", } m["tai-nor"] = { "nhóm ngôn ngữ Thái Bắc", 7059014, "tai", "Nhóm ngôn ngữ Thái Bắc", "Thái Bắc" } m["tbq"] = { "nhóm ngôn ngữ Tạng-Miến", 34064, "sit", "Nhóm ngôn ngữ Tạng-Miến", "Tạng-Miến", } m["tbq-anp"] = { "nhóm ngôn ngữ Angami-Pochuri", 530460, "sit", "Nhóm ngôn ngữ Angami-Pochuri", "Angami-Pochuri", } m["tbq-axi"] = { "Axioid", nil, "tbq-sel", } m["tbq-bdg"] = { "Bodo-Garo", 4090000, "tbq-bkj", } m["tbq-bis"] = { "Bisoid", 48844742, "tbq-slo", } m["tbq-bka"] = { "Bi-Ka", 12627890, "tbq-slo", } m["tbq-bkj"] = { "Sal", 889900, "sit", -- Brahmaputran appears to be Glottolog's term aliases = {"Bodo-Konyak-Jinghpaw", "Brahmaputran", "Jingpho-Konyak-Bodo"}, } m["tbq-brm"] = { "nhóm ngôn ngữ Miến", 865713, "tbq-lob", "Nhóm ngôn ngữ Miến", "Miến", } m["tbq-buq"] = { "nhóm ngôn ngữ Miến-Khương", 16056278, "sit", "Nhóm ngôn ngữ Miến-Khương", "Miến-Khương", aliases = {"Đông Miến-Khương"}, } m["tbq-drp"] = { "Downriver Phula", 7188378, "tbq-rph", } m["tbq-han"] = { "nhóm ngôn ngữ Hà Nhì", 17004185, "tbq-slo", "Nhóm ngôn ngữ Hà Nhì", "Hà Nhì", aliases = {"Hanoid"}, } m["tbq-hph"] = { "Highland Phula", nil, "tbq-sel", } m["tbq-jin"] = { "Jino", 6202716, "tbq-slo", } m["tbq-kzh"] = { "Kazhuoish", 48834669, "tbq-lol", } m["tbq-kuk"] = { "nhóm ngôn ngữ Kuki-Chin", 832413, "sit", "Nhóm ngôn ngữ Kuki-Chin", "Kuki-Chin", } m["tbq-lal"] = { "Lalo", 56548, "tbq-lso", } m["tbq-lho"] = { "Lahoish", nil, "tbq-lol", } m["tbq-llo"] = { "Lipo-Lolopo", nil, "tbq-lso", } m["tbq-lob"] = { "nhóm ngôn ngữ Lô Lô–Miến", 1635712, "tbq-buq", "Nhóm ngôn ngữ Lô Lô–Miến", "Lô Lô–Miến", } m["tbq-lol"] = { "nhóm ngôn ngữ Lô Lô", 37035, "tbq-lob", "Nhóm ngôn ngữ Lô Lô", "Lô Lô", aliases = {"Loloish", "Yi", "Ngwi", "Nisoic"}, } m["tbq-lso"] = { "Lisoish", 6559055, "tbq-lol", } m["tbq-lwo"] = { "Lawoish", 48847673, "tbq-lol", } m["tbq-muj"] = { "Muji", 11221327, "tbq-hph", } m["tbq-nas"] = { "Nasoid", nil, "tbq-nlo", } m["tbq-nis"] = { "Nisu", 56404, "tbq-nlo", } m["tbq-nlo"] = { "nhóm ngôn ngữ Lô Lô Bắc", 7058676, "tbq-nso", "Nhóm ngôn ngữ Lô Lô Bắc", "Lô Lô Bắc", aliases = {"Northern Loloish"}, } m["tbq-nso"] = { "Nisoish", 56990, "tbq-lol", } m["tbq-nus"] = { "Nusoish", 114245231, "tbq-lol", } m["tbq-phw"] = { "Phowa", 7187959, "tbq-hph", } m["tbq-rph"] = { "Riverine Phula", nil, "tbq-sel", } m["tbq-sel"] = { "nhóm ngôn ngữ Lô Lô Đông Nam", 16111894, "tbq-nso", "Nhóm ngôn ngữ Lô Lô Đông Nam", "Lô Lô Đông Nam", aliases = {"Southeastern Loloish"}, } m["tbq-sil"] = { "Siloid", 60787071, "tbq-slo", } m["tbq-slo"] = { "nhóm ngôn ngữ Lô Lô Nam", 5649340, "tbq-lol", "Nhóm ngôn ngữ Lô Lô Nam", "Lô Lô Nam", aliases = {"Southern Loloish"}, } m["tbq-tal"] = { "Taloid", 48804018, "tbq-lso", } m["tbq-urp"] = { "Upriver Phula", 7187058, "tbq-rph", } m["trk"] = { "ngữ hệ Turk", 34090, "Ngữ hệ Turk", "Turk", } m["trk-cmn"] = { "nhóm ngôn ngữ Turk chung", 1126028, "trk", "Nhóm ngôn ngữ Turk chung", "Turk chung", aliases = {"Turk Shaz"}, } m["trk-kar"] = { "nhóm ngôn ngữ Karluk", 703173, "trk-cmn", "Nhóm ngôn ngữ Karluk", "Karluk", aliases = {"Qarluq", "Duy Ngô Nhĩ-Uzbek", "Đông Nam Turk"}, varieties = {"Đông Turk"}, } m["trk-kbu"] = { "nhóm ngôn ngữ Kipchak-Bulgar", 3512539, "trk-kip", "Nhóm ngôn ngữ Kipchak-Bulgar", "Kipchak-Bulgar", aliases = {"Ural", "Uralo-Caspi"}, } m["trk-kcu"] = { "Kipchak-Cuman", 4370412, "trk-kip", aliases = {"Ponto-Caspian"}, } m["trk-kip"] = { "nhóm ngôn ngữ Kipchak", 1339898, "trk-cmn", "Nhóm ngôn ngữ Kipchak", "Kipchak", otherNames = {"Tây Turk"}, aliases = {"Kypchak", "Qypchaq", "Tây Bắc Turk", "Tây Turk"}, protoLanguage = "qwm", } m["trk-kkp"] = { "Kyrgyz-Kipchak", 4221189, "trk-kip", } m["trk-kno"] = { "nhóm ngôn ngữ Kipchak-Nogai", 4326954, "trk-kip", "Nhóm ngôn ngữ Kipchak-Nogai", "Kipchak-Nogai", aliases = {"Aralo-Caspi"}, } m["trk-nsb"] = { "North Siberian Turkic", 4537269, "trk-sib", aliases = {"Northern Siberian Turkic"}, } m["trk-ogr"] = { "nhóm ngôn ngữ Oghur", 1422731, "trk", "Nhóm ngôn ngữ Oghur", "Oghur", aliases = {"Lir-Turk", "r-Turk"}, } m["trk-ogz"] = { "nhóm ngôn ngữ Oghuz", 494600, "trk-cmn", "Nhóm ngôn ngữ Oghuz", "Oghuz", aliases = {"nhóm ngôn ngữ Turk Tây Nam"}, } m["trk-sib"] = { "Siberian Turkic", 354353, "trk-cmn", otherNames = {"Northern Turkic"}, aliases = {"Northeastern Turkic"}, } m["trk-ssb"] = { "South Siberian Turkic", nil, "trk-sib", aliases = {"Southern Siberian Turkic"}, } m["tup"] = { "ngữ hệ Tupi", 34070, "Ngữ hệ Tupi", "Tupi", aliases = {"Tupi"}, } m["tup-gua"] = { "Tupi-Guarani", 148610, "tup", aliases = {"Tupí-Guaraní"}, } m["tuw"] = { "ngữ hệ Tungus", 34230, "Ngữ hệ Tungus", "Tungus", aliases = {"Mãn-Tungus"}, } m["tuw-ewe"] = { "nhóm ngôn ngữ Ewenic", 105889448, "tuw", "Nhóm ngôn ngữ Ewenic", "Ewenic", aliases = {"Bắc Tungus"}, } m["tuw-jrc"] = { "nhóm ngôn ngữ Nữ Chân", 105889432, "tuw", "Nhóm ngôn ngữ Nữ Chân", "Nữ Chân", aliases = {"Mãn"}, } m["tuw-nan"] = { "Nanaic", 105889264, "tuw", } m["tuw-udg"] = { "nhóm ngôn ngữ Udeghe", 105889266, "tuw", "Nhóm ngôn ngữ Udeghe", "Udeghe", } m["urj"] = { "ngữ hệ Ural", 34113, "Ngữ hệ Ural", "Ural", varieties = {"Finn-Ugria"}, } m["urj-fin"] = { "nhóm ngôn ngữ Finn", 33328, "urj", "Nhóm ngôn ngữ Finn", "Finn", aliases = {"Baltic-Finn", "Balto-Finn", "Fenn"}, } m["urj-mdv"] = { "nhóm ngôn ngữ Mordvin", 627313, "urj", "Nhóm ngôn ngữ Mordvin", "Mordvin", } m["urj-prm"] = { "Permic", 161493, "urj", } m["urj-ugr"] = { "Ugric", 156631, "urj", } m["wak"] = { "ngữ hệ Wakashan", 60069, "Ngữ hệ Wakashan", "Wakashan", } m["wen"] = { "Sorbian", 25442, "zlw", aliases = {"Lusatian", "Wendish"}, } m["xgn"] = { "ngữ hệ Mông Cổ", 33750, "qfa-xgs", "Ngữ hệ Mông Cổ", "Mông Cổ", aliases = {"Mông Cổ"}, } m["xgn-cen"] = { "nhóm ngôn ngữ Trung Mông Cổ", 28719447, "xgn", "Nhóm ngôn ngữ Trung Mông Cổ", "Trung Mông Cổ", protoLanguage = "xng-lat", } m["xgn-sou"] = { "nhóm ngôn ngữ Nam Mông Cổ", nil, "xgn", "Nhóm ngôn ngữ Nam Mông Cổ", "Nam Mông Cổ", protoLanguage = "xng-ear", } m["xgn-shr"] = { "nhóm ngôn ngữ Shirongol", 107539435, "xgn-sou", "Nhóm ngôn ngữ Shirongol", "Shirongol", } m["xme"] = { "Median", nil, "ira-mpr", protoLanguage = "xme-old", } m["xme-ttc"] = { "Tatic", nil, "xme", } m["xnd"] = { "Na-Dene", 26986, "qfa-dny", aliases = {"Na-Dené"}, } m["xsc"] = { "nhóm ngôn ngữ Scythia", nil, "ira-nei", "Nhóm ngôn ngữ Scythia", "Scythia", } m["xsc-sak"] = { "Sakan", nil, "xsc-skw", aliases = {"Saka"}, } m["xsc-sar"] = { "nhóm ngôn ngữ Sarmatia", nil, "xsc", "Nhóm ngôn ngữ Sarmatia", "Sarmatia", } m["xsc-skw"] = { "nhóm ngôn ngữ Saka-Wakhi", nil, "xsc", "Nhóm ngôn ngữ Saka-Wakhi", "Saka-Wakhi", } m["yok"] = { "Yokuts", 34249, "nai-you", aliases = {"Yokutsan", "Mariposan", "Mariposa"}, } m["ypk"] = { "Yupik", 27970, "esx-esk", aliases = {"Yup'ik", "Yuit"}, } m["yrk"] = { "Nenets", 36452, "syd", } m["zhx"] = { "nhóm ngôn ngữ Hán", 33857, "sit-sba", "Nhóm ngôn ngữ Hán", "Hán", aliases = {"Sinitic", "Chinese"}, protoLanguage = "och", } m["zhx-com"] = { "Mân ven biển", 20667215, "zhx-min", aliases = {"Coastal Min"}, } m["zhx-inm"] = { "Mân nội địa", 20667237, "zhx-min", aliases = {"Inland Min"}, } m["zhx-man"] = { "Quan thoại", nil, "zhx", protoLanguage = "cmn-ear", aliases = {"Mandarinic"}, } m["zhx-min"] = { "Mân", 56504, "zhx", aliases = {"Min"}, } m["zhx-nan"] = { "Mân Nam", 36495, "zhx-com", aliases = {"Southern Min"}, } m["zhx-pin"] = { "Bình thoại", 2735715, "zhx", protoLanguage = "ltc", aliases = {"Pinghua"}, } m["zhx-yue"] = { "Quảng Châu", 7033959, "zhx", protoLanguage = "ltc", aliases = {"Yue"}, } m["zle"] = { "nhóm ngôn ngữ Slav Đông", 144713, "sla", "Nhóm ngôn ngữ Slav Đông", "Slav Đông", } m["zls"] = { "nhóm ngôn ngữ Slav Nam", 146665, "sla", "Nhóm ngôn ngữ Slav Nam", "Slav Nam", } m["zlw"] = { "nhóm ngôn ngữ Slav Tây", 145852, "sla", "Nhóm ngôn ngữ Slav Tây", "Slav Tây", } m["zlw-lch"] = { "nhóm ngôn ngữ Lechite", 742782, "zlw", "Nhóm ngôn ngữ Lechite", "Lechite", aliases = {"Lechitic","Lekhitic"}, } m["zlw-pom"] = { "Pomeranian", nil, "zlw-lch", } m["znd"] = { "Zande", 8066072, "nic-ubg", } return require("Module:languages").finalizeData(m, "family") ncyflh0ctbpsdy07q9c6ayx1i22zsen Thể loại:Tất cả ngữ hệ 14 266616 2571724 2234574 2026-10-18T15:42:10Z Hiyuune 50834 Hiyuune đã đổi [[Thể loại:Mục từ theo ngữ hệ]] thành [[Thể loại:Tất cả ngữ hệ]] 2234574 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Wiktionary:GUS2Wiki 4 267278 2571637 2569506 2026-10-18T13:26:18Z Alexis Jazz 41773 Updating gadget usage statistics from [[Special:GadgetUsage]] ([[phab:T121049]]) 2571637 wikitext text/x-wiki {{#ifexist:Project:GUS2Wiki/top|{{/top}}|This page provides a historical record of [[Special:GadgetUsage]] through its page history. To get the data in CSV format, see wikitext. To customize this message or add categories, create [[/top]].}} Dữ liệu dưới đây được đưa vào vùng nhớ đệm và được cập nhật lần cuối lúc 2026-10-16T10:13:34Z. Tối đa có sẵn {{PLURAL:5000|một kết quả|5000 kết quả}} trong vùng nhớ đệm. {| class="sortable wikitable" ! Tiện ích !! data-sort-type="number" | Số người dùng !! data-sort-type="number" | Số thành viên tích cực |- |AcceleratedFormCreation || 7 || 4 |- |AjaxEdit || 4 || 3 |- |CommentsInLocalTime || 15 || 3 |- |DejaVu Sans || 69 || 2 |- |ShowIDs || 3 || 2 |- |TabbedLanguages || 7 || 3 |- |Twinkle || 8 || 3 |- |UTCLiveClock || 12 || 2 |- |hotcat || 75 || 6 |- |linkify || 33 || 2 |- |navpop || 64 || 0 |- |purgetab || 68 || 4 |- |removeAccessKeys || 15 || 0 |- |tot || 5 || 0 |- |wiked || 59 || 0 |} * [[Đặc biệt:GadgetUsage]] * [[m:Meta:GUS2Wiki/Script|GUS2Wiki]] <!-- data in CSV format: AcceleratedFormCreation,7,4 AjaxEdit,4,3 CommentsInLocalTime,15,3 DejaVu Sans,69,2 ShowIDs,3,2 TabbedLanguages,7,3 Twinkle,8,3 UTCLiveClock,12,2 hotcat,75,6 linkify,33,2 navpop,64,0 purgetab,68,4 removeAccessKeys,15,0 tot,5,0 wiked,59,0 --> d2ixj3u3uprt0xy08kts956ofv6z71s EXP 0 268972 2571795 2256815 2026-10-19T06:08:53Z TheHighFighter2 42988 /* Tiếng Anh */ 2571795 wikitext text/x-wiki {{also|exp|Exp|exp.|Exp.}} =={{langname|en}}== {{wp|en:[[Exp|+]]}} ==={{ĐM|pron}}=== * {{IPA|en|/iː ɛks piː/}} ==={{ĐM|noun}}=== {{head|en|Danh từ}} # {{initialism of|en|expiry date|t=[[hạn sử dụng]]}} ===={{ĐM|related}}==== * {{l|en|PRD}} ==={{ĐM|anagram}}=== * {{anagrams|en|a=epx|PEX}} paiexq1o4n6ccqo87fk9uvc7jk9n4j4 Thành viên:TheHighFighter2/Trang con 3 2 269152 2571631 2569560 2026-10-18T13:16:11Z TheHighFighter2 42988 2571631 wikitext text/x-wiki <div style="text-align: center; font-size: 24px; font-weight: bold;"> Danh Sách Mục Từ Tiếng Việt Còn Thiếu </div> ==A, Ă, Â== [[AI tạo sinh]]; [[áo gấm về làng]]; [[áo giao lĩnh]]; [[anh em cây khế]]; [[áo tràng vạt]]; [[áo tràng]]; [[ăn của rừng rưng rưng nước mắt]]; [[ăn không nên đọi, nói không nên lời]]; [[ăn không ngon, ngủ không yên]]; [[ăn lồn]]; [[ăn ngon ngủ kĩ]]/[[ăn ngon ngủ kỹ]]; [[ăn ngon ngủ yên]]; [[ấm dâu]]; ==B== [[ba mươi chưa phải là Tết]]; [[bánh kẹo]]; [[bánh mì và rạp xiếc]]; [[băng gâu]]; [[bằng niềm tin]]; [[bề mặt tấn công]]; [[bỉ vỏ]]; [[bói Kiều]]; [[bồ côi bồ cút]]; [[bổ báo]]; [[bời rời]]; [[bụng ỏng đít beo]]; [[bức xạ kế]]; ==C== [[cạn cợt]]; [[ca nương]]; [[ca-pi-ten]]; [[cá sấu lên bờ]]; [[cha mẹ sinh con, trời sinh tính]]; [[cha nó lú, chú nó khôn]]; [[chảy máu chất xám]]; [[chất độc màu da cam]]; [[chém cha không bằng pha tiếng]]; [[chèo nhị thập tứ hiếu]]; [[chí chương]]; [[chị em cây khế]]; [[chim Lạc]]; [[chó cỏ]]; [[chửi cha không bằng pha tiếng]]; [[chữ như gà bới]]; [[cơm búng]]; [[cù lủ]]/[[cù lũ]]/[[cú lủ]]; ==D, Đ== [[dao tem]]; [[dép tổ ong]]; [[di biến động]]; [[đa đảng]]; [[đào hát]]; [[đặc miễn]]; [[đất lâm nghiệp]]; [[đầu buồi]]; [[đầu tro mặt muội]]; [[đầu trời cuối đất]]; [[đi C]]; [[điện não]]; [[điệp giấy]]; [[đi K]]; [[đòng đành]]; [[đồ bơi]]; [[đổ tháo]]; [[đu càng]]; [[đùm đề]]; [[đùm đùm đề đề]]; ==E, Ê== ==G== [[gái đứng đường]]; ==H== [[hài độc thoại]]; [[hạn lượng]]; [[hấp diêm]]; [[hậu COVID]]; [[hậu thực dân]]; [[hỏng hẻo]]; [[huyệt mả]]; ==I== ==K== [[khảo lược]]; [[khăn bàn lông]]; [[khét nắng]]; [[khét rẹt]]; ==L== [[lon chon]]; [[lô rơi]]; ==M== [[mã đáo thành công]]; [[máy bay bà già]]; [[mập cụi]]; [[mèo Ba Tư]]; [[móc nhách]]; [[mới cóng]]/[[mới coóng]]; ==N== [[ngạn giải]]; [[ngoại giao cây tre]]; [[ngục ngoặc]]; [[ngựa bà]]; [[ngựa cu]]; [[nhân văn số]]; [[nhất quỷ nhì ma, thứ ba học trò]]; ==O, Ô, Ơ== [[ông kẹ]]; ==P== [[phân biệt vùng miền]]; [[phi công trẻ lái máy bay bà già]]; [[phong ba bão táp không bằng ngữ pháp Việt Nam]]; [[phở bò]]; ==Q== [[quá 180 phút]]; [[quan họ hiếu]]; [[quần sinh]]; ==R== ==S== [[sòng sành]]; [[so se]]; [[sò sè]]; [[sò sò]]; ==T== [[tai biến khí hậu]]; [[tẻn tẻn]]; [[Tết Độc lập]]; [[tháng cô hồn]]; [[thối não]]; [[thừu lựu]]; [[tiêu chuẩn kép]]; [[tiểu mộc]]; [[tình tệ]]; [[toàn đồ]]; [[trí tuệ nhân tạo tạo sinh]]; [[trò Kiều]]; [[tù nhân lương tâm]]; ==U, Ư== [[u nguyên bào thần kinh đệm]]; [[ù thông]]; ==V== [[vãi chài]]; [[Việt gian]]; [[Việt hóa]]/[[Việt hoá]]; [[Việt Nam hóa]]/[[Việt Nam hoá]]; [[vũ trang đến tận răng]]; ==X== [[xăng-căng]]/[[xăng căng]]; [[xanh lá]]; [[xanh lục]]; [[xanh nước biển]]; [[xanh xảnh]]; [[xăm hường]]; [[xe bồ câu]]; [[xuntan]]; [[xúp-lê]]/[[xúp lê]]; ==Y== l09r59fqbxv3gxebxolh3ckf63kbchy Mô đun:labels/data/regional 828 271310 2571782 2566496 2026-10-19T03:27:38Z Hiyuune 50834 2571782 Scribunto text/plain local labels = {} local function alias(a, b) for _, v in ipairs(b) do labels[v] = a end end -- allows aliases to be entered as a list -- Generic --not sure where to put this labels["cổ điển"] = { aliases = {"classical"}, -- "ar", ca", "fa", "id", la", "zh" handled in lang-specific module langs = {"az", "ja", "jv", "kum", "ms", "quc", "sa", "tl"}, special_display = "[[<canonical_name> cổ điển]]", regional_categories = true, } labels["classical"] = "cổ điển" labels["Epigraphic"] = { special_display = "[[w:Epigraphy|Epigraphic <canonical_name>]]", regional_categories = {"Epigraphic"}, } labels["regional"] = { aliases = {"regionally"}, display = "[[phương ngữ]]", regional_categories2 = "Vùng phương ngữ", } -- Africa -- Africa A labels["Africa"] = { regional_categories = {"African"}, } labels["African"] = "Africa" labels["Algeria"] = { display = "Algérie", regional_categories = {"Algérie"}, } labels["Algerian"] = "Algeria" labels["Angola"] = { display = "[[w:Angola|Angola]]", regional_categories = {"Angola"}, } labels["Angolan"] = "Angola" -- Africa B labels["Benin"] = { aliases = {"Beninese"}, regional_categories = {"Bénin"}, } labels["Botswana"] = { aliases = {"Botswanan"}, regional_categories = {"Botswana"}, } labels["Burundi"] = { regional_categories = {"Burundian"}, } labels["Burundian"] = "Burundi" -- Africa C labels["Cape Verde"] = { display = "[[w:Cape Verde|Cape Verde]]", regional_categories = {"Cape Verdean"}, } labels["Cape Verdean"] = "Cape Verde" labels["Chad"] = { display = "Chad", regional_categories = {"Chadian"}, } labels["Chadian"] = "Chad" labels["Congo"] = { display = "Congo", regional_categories = {"Congolese"}, } -- these could be split if need be labels["Democratic Republic of the Congo"] = "Congo" labels["Democratic Republic of Congo"] = "Congo" labels["DR Congo"] = "Congo" labels["Congo-Kinshasa"] = "Congo" labels["Republic of the Congo"] = "Congo" labels["Republic of Congo"] = "Congo" labels["Congo-Brazzaville"] = "Congo" labels["Congolese"] = "Congo" -- Africa D labels["Durban"] = { display = "[[Durban]]", regional_categories = {"Durban"}, } -- Africa E labels["East Africa"] = { display = "[[East Africa]]", regional_categories = {"East African"}, } labels["East African"] = "East Africa" labels["Egypt"] = { regional_categories = {"Egyptian"}, } labels["Egyptian"] = "Egypt" labels["Equatorial Guinea"] = { display = "[[w:Equatorial Guinea|Equatorial Guinea]]", regional_categories = {"Equatorial Guinean"}, } labels["Equatorial Guinean"] = "Equatorial Guinea" labels["Equatoguinean"] = "Equatorial Guinea" -- Africa F -- Africa G labels["Ghana"] = { regional_categories = {"Ghanaian"}, } -- Africa H -- Africa I -- Africa J -- Africa K labels["Kenya"] = { display = "[[Kenya]]", regional_categories = {"Kenyan"}, } labels["Kenyan"] = "Kenya" -- Africa L labels["Liberia"] = { regional_categories = {"Liberian"}, } labels["Liberian"] = "Liberia" -- Africa M labels["Mali"] = { display = "Mali", regional_categories = {"Malian"}, } labels["Malian"] = "Mali" labels["Mauritania"] = { display = "Mauritania", regional_categories = {"Mauritanian"}, } labels["Mauritanian"] = "Mauritania" labels["Morocco"] = { regional_categories = {"Moroccan"}, } labels["Moroccan"] = "Morocco" labels["Mozambique"] = { display = "[[w:Mozambique|Mozambique]]", regional_categories = {"Mozambican"}, } labels["Mozambican"] = "Mozambique" -- Africa N labels["Namibia"] = { regional_categories = {"Namibian"}, } labels["Namibian"] = "Namibia" labels["Natal"] = { display = "[[Natal]]", regional_categories = {"Natal"}, } labels["Niger"] = { regional_categories = {"Nigerien"}, } labels["Nigerien"] = "Niger" labels["Nigeria"] = { regional_categories = {"Nigerian"}, } labels["Nigerian"] = "Nigeria" -- Africa O -- Africa P -- Africa Q -- Africa R labels["Rhodesia"] = { display = "[[w:Rhodesia|Rhodesia]]", regional_categories = {"Rhodesian"}, } labels["Rhodesian"] = "Rhodesia" labels["Rwanda"] = { display = "Rwanda", regional_categories = {"Rwandan"}, } labels["Rwandan"] = "Rwanda" labels["Réunion"] = { regional_categories = {"Réunion"}, } -- Africa S labels["São Tomé and Príncipe"] = { display = "[[w:São Tomé and Príncipe|São Tomé and Príncipe]]", regional_categories = {"Santomean"}, } labels["Santomean"] = "São Tomé and Príncipe" labels["São Tomé"] = "São Tomé and Príncipe" labels["São Toméan"] = "São Tomé and Príncipe" labels["Sao Tomean"] = "São Tomé and Príncipe" labels["South Africa"] = { aliases = {"South African", "Nam Phi"}, Wikipedia = "Nam Phi", display = "Nam Phi", regional_categories = "Nam Phi", } labels["Sudan"] = { display = "[[w:Sudan|Sudan]]", regional_categories = {"Sudanese"}, } labels["Sudanese"] = "Sudan" -- Africa T labels["Tanzania"] = { regional_categories = {"Tanzanian"}, } labels["Tanzanian"] = "Tanzania" labels["Tunisia"] = { display = "[[Tunisia]]", regional_categories = {"Tunisian"}, } labels["Tunisian"] = "Tunisia" -- Africa U labels["Uganda"] = { display = "[[Uganda]]", regional_categories = {"Ugandan"}, } labels["Ugandan"] = "Uganda" -- Africa V -- Africa W labels["West Africa"] = { regional_categories = {"West African"}, } labels["West African"] = "West Africa" -- Africa X -- Africa Y -- Africa Z labels["Zimbabwe"] = { display = "[[Zimbabwe]]", regional_categories = {"Zimbabwe"}, } labels["Zululand"] = { display = "[[Zululand]]", regional_categories = {"Zululand"}, } -- North America -- NA A labels["Acadia"] = { display = "Acadian", regional_categories = {"Acadian"}, } labels["Acadian"] = "Acadia" labels["Alabama"] = { regional_categories = {"Alabama"}, } labels["Alabaman"] = "Alabama" labels["Alabamian"] = "Alabama" labels["Alaska"] = { display = "[[Alaska]]", regional_categories = {"Alaska"}, } labels["Alaskan"] = "Alaska" labels["Alberta"] = { regional_categories = {"Canadian"}, } labels["Appalachia"] = { display = "[[Appalachia]]", regional_categories = {"Appalachian"}, } labels["Appalachian"] = "Appalachia" labels["Arizona"] = { regional_categories = {"Arizona"}, } labels["Arizonan"] = "Arizona" labels["Arkansas"] = { regional_categories = {"Arkansan"}, } labels["Arkansan"] = "Arkansas" labels["Atlantic Canada"] = { regional_categories = {"Atlantic Canadian"}, } labels["Atlantic Canadian"] = "Atlantic Canada" -- NA B labels["Baltimore"] = { regional_categories = {"Baltimore"}, } labels["Bermuda"] = { display = "[[Bermuda]]", regional_categories = {"Bermudian"}, } labels["Bermudan"] = "Bermuda" labels["Bermudian"] = "Bermuda" labels["British Columbia"] = { display = "[[British Columbia]]", regional_categories = {"Canadian"}, } labels["British Columbian"] = "British Columbia" -- NA C labels["Cajun"] = { display = "[[w:Cajun|Louisiana]]", regional_categories = {"Louisiana"}, } labels["California"] = { regional_categories = {"California"}, } labels["Californian"] = "California" labels["Canada"] = { aliases = {"Canadian"}, deprecated_aliases = {"CA"}, -- mơ hồ Wikipedia = true, regional_categories = true, } labels["Canadian Prairies"] = { regional_categories = {"Canadian"}, } labels["Chicago"] = { regional_categories = {"Chicago"}, } labels["Chipilo"] = { display = "[[w:Chipilo|Chipilo]]", regional_categories = {"Chipilo"}, } labels["Cincinnati"] = { display = "[[Cincinnati]]", regional_categories = {"Cincinnati"}, } labels["Colorado"] = { regional_categories = {"Colorado"}, } labels["Coloradan"] = "Colorado" labels["Coloradoan"] = "Colorado" labels["Connecticut"] = { regional_categories = {"Connecticut"}, } labels["Connecticuter"] = "Connecticut" labels["Connecticutian"] = "Connecticut" -- NA D labels["DC"] = { display = "[[w:District of Columbia|District of Columbia]]", regional_categories = {"DC"}, } labels["District of Columbia"] = "DC" labels["Washington, D.C."] = "DC" labels["D.C."] = "DC" labels["Washington, DC"] = "DC" -- NA E -- NA F labels["Florida"] = { display = "[[Florida]]", regional_categories = {"Florida"}, } alias("Florida", {"Floridian", "FL"}) -- NA G labels["Georgia (US)"] = { display = "[[w:Georgia (U.S. state)|Georgia]]", regional_categories = {"Georgia (US)"}, } -- NA H -- NA I labels["Indiana"] = { display = "[[w:Indiana|Indiana]]", regional_categories = {"Indiana"}, } labels["Indianan"] = "Indiana" labels["Indianian"] = "Indiana" -- NA J -- NA K -- NA L labels["Labrador"] = { display = "[[Labrador]]", regional_categories = {"Labrador"}, } labels["Louisiana"] = { display = "[[w:Louisiana|Louisiana]]", regional_categories = {"Louisiana"}, } labels["New Orleans"] = "Louisiana" -- NA M labels["Manitoba"] = { display = "[[w:Manitoba|Manitoba]]", regional_categories = {"Canadian"}, } labels["Maryland"] = { display = "[[w:Maryland|Maryland]]", regional_categories = {"Maryland"}, } labels["Mexico"] = { display = "[[w:Mexico|Mexico]]", regional_categories = {"Mexican"}, } labels["Mexican"] = "Mexico" labels["Michigan"] = { regional_categories = {"Michigan"}, } labels["Midwest US"] = { display = "[[w:Midwestern United States|Midwestern US]]", regional_categories = {"Midwest US"}, } labels["Midwestern US"] = "Midwest US" labels["Mississippi"] = { display = "[[w:Mississippi|Mississippi]]", regional_categories = {"Mississippi"}, } labels["Mississippian"] = "Mississippi" labels["Missouri"] = { display = "[[w:Missouri|Missouri]]", regional_categories = {"Missouri"}, } labels["Missourian"] = "Missouri" labels["St Louis, Missouri"] = "Missouri" labels["St. Louis, Missouri"] = "Missouri" labels["Morelos"] = { display = "[[w:Morelos|Morelos]]", regional_categories = {"Morelos"}, } -- NA N labels["New Brunswick"] = { regional_categories = {"Atlantic Canadian"}, } labels["New England"] = { display = "[[w:New England|New England]]", regional_categories = {"New England"}, } labels["New Jersey"] = { display = "[[w:New Jersey|New Jersey]]", regional_categories = {"New Jersey"}, } labels["New Mexico"] = { display = "[[w:New Mexico|New Mexico]]", regional_categories = {"New Mexico"}, } labels["New Mexican"] = "New Mexico" labels["New York"] = { display = "[[w:New York|New York]]", regional_categories = {"New York"}, } labels["NY"] = "New York" labels["New York City"] = { display = "[[w:New York City|New York City]]", regional_categories = {"New York City"}, } labels["NYC"] = "New York City" labels["New York city"] = "New York City" labels["Newfoundland"] = { display = "[[Newfoundland English|Newfoundland]]", regional_categories = {"Newfoundland"}, } labels["North Carolina"] = { display = "[[w:North Carolina|North Carolina]]", regional_categories = {"North Carolina"}, } labels["North Carolinian"] = "North Carolina" labels["NC"] = "North Carolina" labels["Northwest Territories"] = { regional_categories = {"Canadian"}, } labels["Northwestern Ontario"] = { regional_categories = {"Canadian"}, } labels["northwestern Ontario"] = "Northwestern Ontario" labels["Northwestern US"] = { display = "[[w:Northwestern United States|Northwestern US]]", regional_categories = {"Northwestern US"}, } labels["northwestern US"] = "Northwestern US" labels["Nova Scotia"] = { regional_categories = {"Atlantic Canadian"}, } labels["Nova Scotian"] = "Nova Scotia" labels["Nunavut"] = { regional_categories = {"Canadian"}, } -- NA O labels["Oaxaca"] = { display = "[[w:Oaxaca|Oaxaca]]", regional_categories = {"Oaxacan"}, } labels["Oaxacan"] = "Oaxaca" labels["Ohio"] = { display = "[[Ohio]]", regional_categories = {"Ohio"}, } labels["Ohioan"] = "Ohio" labels["OH"] = "Ohio" labels["Ontario"] = { regional_categories = {"Canadian"}, } -- NA P labels["Pennsylvania"] = { display = "[[w:Pennsylvania|Pennsylvania]]", regional_categories = {"Pennsylvania"}, } labels["Pennsylvanian"] = "Pennsylvania" labels["Philadelphia"] = { display = "[[w:Philadelphia|Philadelphia]]", regional_categories = {"Pennsylvania"}, } -- can be split off if enough entries in it arise; group with PA for now labels["Pittsburgh"] = { display = "[[w:Pittsburgh|Pittsburgh]]", regional_categories = {"Pennsylvania"}, } -- can be split off if enough entries in it arise; group with PA for now labels["Prince Edward Island"] = { regional_categories = {"Atlantic Canadian"}, } -- NA Q labels["Quebec"] = { Wikipedia = "Quebec", regional_categories = {"Quebec"}, } labels["Québec"] = "Quebec" -- NA R labels["Rhode Island"] = { regional_categories = {"Rhode Island"}, } -- NA S labels["Saskatchewan"] = { display = "[[w:Saskatchewan|Saskatchewan]]", regional_categories = {"Saskatchewan"}, } labels["SK"] = "Saskatchewan" labels["Sinaloa"] = { regional_categories = {"Sinaloa"}, } labels["South Carolina"] = { display = "[[w:South Carolina|South Carolina]]", regional_categories = {"South Carolina"}, } labels["South Carolinian"] = "South Carolina" labels["SC"] = "South Carolina" -- NA T labels["Texas"] = { display = "[[w:Texas|Texas]]", regional_categories = {"Texas"}, } labels["TX"] = "Texas" labels["Texan"] = "Texas" -- NA U labels["Upper Midwest US"] = { display = "[[w:Upper Midwest|Upper Midwestern US]]", regional_categories = {"Upper Midwest US"}, } labels["Upper Midwestern US"] = "Upper Midwest US" labels["US"] = { aliases = {"U.S.", "United States", "United States of America", "USA", "America", "American", "Mĩ", "Mỹ", "Hoa Kì", "Hoa Kỳ"}, -- America/American: should these be aliases of 'North America'? display = "[[w:Hoa Kỳ|Mỹ]]", regional_categories = {"Mỹ"}, } -- NA V labels["Virginia"] = { display = "[[w:Virginia|Virginia]]", regional_categories = {"Virginia"}, } labels["Virginian"] = "Virginia" -- NA W labels["Western US"] = { display = "[[w:Western United States|Western US]]", regional_categories = {"Western US"}, } labels["western US"] = "Western US" labels["Wisconsin"] = { regional_categories = {"Wisconsin"} } -- NA X -- NA Y labels["Yukon"] = { regional_categories = {"Canadian"}, } -- NA Z -- Central America and Caribbean labels["Caribbean"] = { display = "[[w:Caribbean|Caribbean]]", regional_categories = {"Caribbean"}, } labels["West Indies"] = "Caribbean" labels["Central America"] = { display = "[[w:Central America|Central America]]", regional_categories = {"Central American"}, } labels["Central American"] = "Central America" -- CAaC A labels["Antilles"] = { display = "[[w:Antilles|Antilles]]", regional_categories = {"Antilles"}, } -- CAaC B labels["Bahamas"] = { display = "[[w:Bahamas|Bahamas]]", regional_categories = {"Bahaman"}, } labels["Bahaman"] = "Bahamas" labels["Barbados"] = { display = "[[w:Barbados|Barbados]]", regional_categories = {"Barbadian"}, } labels["Barbadian"] = "Barbados" labels["Belize"] = { display = "[[w:Belize|Belize]]", regional_categories = {"Belizean"}, } labels["Belizean"] = "Belize" -- CAaC C labels["Costa Rica"] = { display = "[[w:Costa Rica|Costa Rica]]", regional_categories = {"Costa Rican"}, } labels["Costa Rican"] = "Costa Rica" labels["Cuba"] = { display = "[[w:Cuba|Cuba]]", regional_categories = {"Cuban"}, } labels["Cuban"] = "Cuba" -- CAaC D labels["Dominican Republic"] = { display = "[[w:Dominican Republic|Dominican Republic]]", regional_categories = {"Dominican"}, } -- CAaC E labels["El Salvador"] = { display = "[[w:El Salvador|El Salvador]]", regional_categories = {"Salvadorian"}, } labels["Salvadorian"] = "El Salvador" -- CAaC F -- CAaC G labels["Guatemala"] = { display = "[[w:Guatemala|Guatemala]]", regional_categories = {"Guatemalan"}, } labels["Guatemalan"] = "Guatemala" -- CAaC H labels["Haiti"] = { display = "[[w:Haiti|Haiti]]", regional_categories = {"Haitian"}, } labels["Honduras"] = { display = "[[w:Honduras|Honduras]]", regional_categories = {"Honduran"}, } labels["Honduran"] = "Honduras" labels["Huitzapan"] = { display = "[[w:Santo Domingo, Sonsonate|Huitzapan]]", regional_categories = {"Huitzapanec"}, } labels["Witzapan"] = "Huitzapan" labels["Huitzapanec"] = "Huitzapan" -- CAaC I -- CAaC J labels["Jamaica"] = { display = "[[w:Jamaica|Jamaica]]", regional_categories = {"Jamaican"}, } labels["Jamaican"] = "Jamaica" -- CAaC K -- CAaC L -- CAaC M -- CAaC N labels["Nicaragua"] = { display = "[[w:Nicaragua|Nicaragua]]", regional_categories = {"Nicaraguan"}, } labels["Nicaraguan"] = "Nicaragua" -- CAaC O -- CAaC P labels["Panama"] = { display = "[[w:Panama|Panama]]", regional_categories = {"Panamanian"}, } labels["Panamanian"] = "Panama" labels["Puerto Rico"] = { display = "[[w:Puerto Rico|Puerto Rico]]", regional_categories = {"Puerto Rican"}, } labels["Puerto Rican"] = "Puerto Rico" -- CAaC Q -- CAaC R -- CAaC S -- CAaC T labels["Trinidad and Tobago"] = { display = "[[Trinidad and Tobago]]", regional_categories = {"Trinidad and Tobago"}, } labels["Trinidad"] = "Trinidad and Tobago" labels["Tobago"] = "Trinidad and Tobago" labels["Trinidadian"] = "Trinidad and Tobago" labels["Tobagonian"] = "Trinidad and Tobago" labels["Trinidadian and Tobagonian"] = "Trinidad and Tobago" -- CAaC U -- CAaC V -- CAaC W -- CAaC X -- CAaC Y -- CAaC Z -- South America labels["South America"] = { regional_categories = {"South American"}, } labels["South American"] = "South America" -- SA A labels["Andes"] = { regional_categories = {"Andean"} } labels["Andean"] = "Andes" labels["Argentina"] = { display = "[[w:Argentina|Argentina]]", regional_categories = {"Argentinian"}, } labels["Argentinian"] = "Argentina" -- SA B labels["Bahia"] = { display = "Bahia", regional_categories = {"Bahian"}, } labels["Baiano"] = "Bahia" labels["Bahian"] = "Bahia" labels["Bolivia"] = { display = "[[w:Bolivia|Bolivia]]", regional_categories = {"Bolivian"}, } labels["Bolivian"] = "Bolivia" labels["Brazil"] = { aliases = {"Brasil", "Brazilian"}, -- "pt" handled in lang-specific module langs = {"ja", "mch", "vec", "yi"}, display = "[[w:Brasil|Brasil]]", regional_categories = "Brasil", } -- SA C labels["Chile"] = { display = "[[w:Chile|Chile]]", regional_categories = {"Chilean"}, } labels["Chilean"] = "Chile" labels["Colombia"] = { display = "[[w:Colombia|Colombia]]", regional_categories = {"Colombian"}, } labels["Colombian"] = "Colombia" -- SA D -- SA E labels["Ecuador"] = { display = "[[w:Ecuador|Ecuador]]", regional_categories = {"Ecuadorian"}, } labels["Ecuadorian"] = "Ecuador" -- SA F -- SA G labels["Guyana"] = { aliases = {"Guyanese"}, Wikipedia = true, regional_categories = {"Guyana"}, } -- SA H -- SA I -- SA J -- SA K -- SA L -- SA M -- SA N labels["Northeast Brazil"] = { regional_categories = {"Northeastern Brazilian"} } labels["Nordestino"] = "Northeast Brazil" labels["Nordeste"] = "Northeast Brazil" labels["Northeastern Brazilian"] = "Northeast Brazil" labels["Northeast Brazilian"] = "Northeast Brazil" -- SA O -- SA P labels["Paraguay"] = { display = "[[w:Paraguay|Paraguay]]", regional_categories = {"Paraguayan"}, } labels["Paraná"] = { display = "[[w:Paraná (state)|Paraná]]", regional_categories = {"Paranaense"}, } labels["Paranaense"] = "Paraná" labels["Peru"] = { display = "[[w:Peru|Peru]]", regional_categories = {"Peruvian"}, } labels["Peruvian"] = "Peru" -- SA Q -- SA R labels["Rio de Janeiro"] = { display = "[[w:Rio de Janeiro|Rio de Janeiro]]", regional_categories = {"Carioca"}, } labels["Fluminense"] = "Rio de Janeiro" labels["Carioca"] = "Rio de Janeiro" labels["Rio Grande do Sul"] = { regional_categories = {"Gaúcho"} } labels["Gaúcho"] = "Rio Grande do Sul" labels["Gaucho"] = "Rio Grande do Sul" -- SA S labels["São Paulo"] = { display = "[[w:São Paulo (state)|São Paulo]]", regional_categories = {"Paulista"}, } labels["Sao Paulo"] = "São Paulo" labels["Paulista"] = "São Paulo" labels["South Brazil"] = { regional_categories = {"Southern Brazilian"} } labels["Southern Brazilian"] = "South Brazil" labels["South Brazilian"] = "South Brazil" labels["Suriname"] = { aliases = {"Surinamese"}, Wikipedia = true, regional_categories = {"Suriname"}, } -- SA T -- SA U labels["Uruguay"] = { display = "[[w:Uruguay|Uruguay]]", regional_categories = {"Uruguayan"}, } labels["Uruguayan"] = "Uruguay" -- SA V labels["Venezuela"] = { aliases = {"Venezuelan"}, Wikipedia = true, regional_categories = "Venezuela", } -- SA W -- SA X -- SA Y -- SA Z -- Asia -- Asia A labels["Abzhywa"] = { display = "[[w:Abzhywa|Abzhywa]]", regional_categories = {"Abzhywa"}, } labels["Abzhywan"] = "Abzhywa" labels["Abzhuaa"] = "Abzhywa" labels["Abzhua"] = "Abzhywa" labels["Abzhui"] = "Abzhywa" labels["Abzhuy"] = "Abzhywa" labels["Adana"] = { display = "[[w:Adana|Adana]]", regional_categories = {"Adana"}, } labels["Atana"] = "Adana" labels["Adjara"] = { display = "[[w:Adjaran dialect|Adjara]]", regional_categories = {"Adjara"}, } labels["Ajara"] = "Adjara" labels["Adjaria"] = "Adjara" labels["Adjaran"] = "Adjara" labels["Adjarian"] = "Adjara" labels["Acharuli"] = "Adjara" labels["Afyonkarahisar"] = { display = "[[w:Afyonkarahisar|Afyonkarahisar]]", regional_categories = {"Afyonkarahisar"}, } labels["Afyon"] = "Afyonkarahisar" labels["Agdam"] = { display = "[[w:Agdam District|Agdam]]", regional_categories = {"Agdam"}, } labels["Ağdam"] = "Agdam" labels["Agsu"] = { display = "[[w:Agsu District|Agsu]]", regional_categories = {"Agsu"}, } labels["Ağsu"] = "Agsu" labels["Agdash"] = { display = "[[w:Agdash District|Agdash]]", regional_categories = {"Agdash"}, } labels["Ağdaş"] = "Agdash" labels["Dashkasan"] = { display = "[[w:Dashkasan District|Dashkasan]]", regional_categories = {"Dashkasan"}, } labels["Daşkəsən"] = "Dashkasan" labels["Ağın"] = { display = "[[w:Ağın|Ağın]]", regional_categories = {"Ağın"}, } labels["Aghin"] = "Ağın" labels["Vaghaver"] = "Ağın" labels["Aghdara"] = { display = "[[w:Martakert|Aghdara]]", regional_categories = {"Aghdara"}, } labels["Ağdərə"] = "Aghdara" labels["Agjabedi"] = { display = "[[w:Aghjabadi District|Agjabedi]]", regional_categories = {"Agjabedi"}, } labels["Ağcabədi"] = "Agjabedi" labels["Aghjabedi"] = "Agjabedi" labels["Aghjabadi"] = "Agjabedi" labels["Ağrı"] = { display = "[[w:Ağrı|Ağrı]]", regional_categories = {"Ağrı"}, } labels["Aghri"] = "Ağrı" labels["Karaköse"] = "Ağrı" labels["Ahlat"] = { display = "[[w:Ahlat|Ahlat]]", regional_categories = {"Ahlat"}, } labels["Khlat"] = "Ahlat" labels["Xlat"] = "Ahlat" labels["Akhalkalaki"] = { display = "[[w:Akhalkalaki|Akhalkalaki]]", regional_categories = {"Akhalkalaki"}, } labels["Akhalkalak"] = "Akhalkalaki" labels["Akhlkalak"] = "Akhalkalaki" labels["Akhaltsikhe"] = { display = "[[w:Akhaltsikhe|Akhaltsikhe]]", regional_categories = {"Akhaltsikhe"}, } labels["Akhaltskha"] = "Akhaltsikhe" labels["Ahıska"] = "Akhaltsikhe" labels["Akn"] = { display = "[[w:Kemaliye|Akn]]", regional_categories = {"Akn"}, } labels["Egin"] = "Akn" labels["Eğin"] = "Akn" labels["Alashkert"] = { display = "[[w:Eleşkirt|Alashkert]]", regional_categories = {"Alashkert"}, } labels["Eleşkirt"] = "Alashkert" labels["Alaškert"] = "Alashkert" labels["Şirvan"] = { display = "[[w:Şirvan, Azerbaijan|Shirvan]]", regional_categories = {"Shirvan"}, } labels["Şirvan"] = "Şirvan" labels["Əli Bayramlı"] = "Şirvan" labels["Ali Bayramli"] = "Şirvan" labels["Amasya"] = { display = "[[w:Amasya|Amasya]]", regional_categories = {"Amasya"}, } labels["Amur"] = { display = "[[w:Amur|Amur]]", regional_categories = {"Amur"}, } labels["Ankara"] = { display = "[[w:Ankara|Ankara]]", regional_categories = {"Ankara"}, } labels["Antalya"] = { display = "[[w:Antalya|Antalya]]", regional_categories = {"Antalya"}, } labels["Arapgir"] = { display = "[[w:Arapgir|Arapgir]]", regional_categories = {"Arapgir"}, } labels["Arapkir"] = "Arapgir" labels["Arabkir"] = "Arapgir" labels["Ardabil"] = { display = "[[w:Ardabil|Ardebil]]", regional_categories = {"Ardabil"}, } labels["Ardebil"] = "Ardabil" labels["Ərdəbil"] = "Ardabil" labels["Ardabīl "] = "Ardabil" labels["Ardebīl"] = "Ardabil" labels["Ardahan"] = { display = "[[w:Ardahan|Ardahan]]", regional_categories = {"Ardahan"}, } labels["Ardanuç"] = { display = "[[w:Ardanuç|Ardanuç]]", regional_categories = {"Ardanuç"}, } labels["Artanuj"] = "Ardanuç" labels["Ardanuji"] = "Ardanuç" labels["Artvin"] = { display = "[[w:Artvin|Artvin]]", regional_categories = {"Artvin"}, } labels["Ardvin"] = "Artvin" labels["Ardvini"] = "Artvin" labels["Aslanbeg"] = { display = "[[w:Arslanbey, Kartepe|Aslanbeg]]", regional_categories = {"Aslanbeg"}, } labels["Aslanbek"] = "Aslanbeg" labels["Azad Kashmir"] = { display = "[[w:Azad Kashmir|Azad Kashmir]]", regional_categories = {"Azad Kashmiri"}, } labels["Pakistani Kashmir"] = "Azad Kashmir" labels["Azad Jammu and Kashmir"] = "Azad Kashmir" labels["Azad Jammu & Kashmir"] = "Azad Kashmir" labels["AJK"] = "Azad Kashmir" labels["AJ&K"] = "Azad Kashmir" labels["ajk"] = "Azad Kashmir" labels["Azerbaijan"] = { display = "[[w:Azerbaijan]]", regional_categories = {"Azerbaijan"}, } -- Asia B labels["Baku"] = { display = "[[w:Baku|Baku]]", regional_categories = {"Baku"}, } labels["Bakı"] = "Baku" labels["Baki"] = "Baku" labels["Balakan"] = { display = "[[w:Balakan District|Balakan]]", regional_categories = {"Balakan"}, } labels["Balakən"] = "Balakan" labels["Balochistan"] = { display = "[[w:Balochistan, Pakistan|Balochistan]]", regional_categories = {"Balochi"}, } labels["Banten"] = { display = "[[w:Bantenese|Banten]]", regional_categories = {"Banten"}, } labels["Bantenese"] = "Banten" labels["Balıkesir"] = { display = "[[w:Balıkesir|Balıkesir]]", regional_categories = {"Balıkesir"}, } labels["Bilasuvar"] = { display = "[[w:Bilasuvar District|Bilasuvar]]", regional_categories = {"Bilasuvar"}, } labels["Biləsuvar"] = "Bilasuvar" labels["Bitlis"] = { display = "[[w:Bitlis|Bitlis]]", regional_categories = {"Bitlis"}, } labels["Baghesh"] = "Bitlis" labels["Bogor"] = { regional_categories = {"Bogor"}, } labels["Borchaly"] = { display = "[[w:Borchaly Uyezd|Borchaly]]", regional_categories = {"Borchaly"}, } labels["Borçalı"] = "Borchaly" labels["Borchali"] = "Borchaly" labels["Borchalu"] = "Borchaly" labels["Bolnisi"] = { display = "[[w:Bolnisi Municipality|Bolnisi]]", regional_categories = {"Bolnisi"}, } labels["Bulanık"] = { display = "[[w:Bulanık|Bulanık]]", regional_categories = {"Bulanık"}, } labels["Bulanik"] = "Bulanık" labels["Bulanikh"] = "Bulanık" labels["Dmanisi"] = { display = "[[w:Dmanisi|Dmanisi]]", regional_categories = {"Dmanisi"}, } labels["Başkeçid"] = "Dmanisi" labels["Brebes"] = { regional_categories = {"Brebes"}, } labels["Brebian"] = "Brebes" labels["Brunei"] = { display = "[[w:Brunei|Brunei]]", regional_categories = {"Bruneian"}, } labels["Burdur"] = { display = "[[w:Burdur|Burdur]]", regional_categories = {"Burdur"}, } labels["Bursa"] = { display = "[[w:Bursa|Bursa]]", regional_categories = {"Bursa"}, } labels["Bzyb"] = { display = "[[w:Bzyb_dialect|Bzyb]]", regional_categories = {"Bzyb"}, } labels["Bzyp"] = "Bzyb" -- Asia C labels["Çanakkale"] = { display = "[[w:Çanakkale|Çanakkale]]", regional_categories = {"Çanakkale"}, } labels["Canik"] = { display = "[[w:Canik|Canik]]", regional_categories = {"Canik"}, } labels["Janik"] = "Canik" labels["Ճանիկ"] = "Canik" labels["Cebu"] = { regional_categories = {"Cebu"} } labels["Çemişgezek"] = { display = "[[w:Çemişgezek|Çemişgezek]]", regional_categories = {"Çemişgezek"}, } labels["Chmshkatsag"] = "Çemişgezek" labels["Çemişkezek"] = "Çemişgezek" labels["Čmškacag"] = "Çemişgezek" labels["Ceylon"] = { display = "[[Ceylon]]", regional_categories = {"Sri Lankan"}, } labels["China"] = { display = "[[w:China|China]]", regional_categories = {"Chinese"}, } labels["Cirebon"] = { regional_categories = {"Cirebon"}, } labels["Cirebonese"] = "Cirebon" labels["Cyprus"] = { display = "[[w:Cyprus|Cyprus]]", regional_categories = {"Cypriot"}, } labels["cypriot"] = "Cyprus" labels["Cypriot"] = "Cyprus" -- Asia D labels["Dashtestan"] = { display = "[[w:Dashtestan County|Dashtestan]]", regional_categories = {"Dashtestani"}, } labels["Dandong"] = { display = "[[w:Dandong|Dandong]]", regional_categories = {"Dandong"}, } labels["Delhi"] = { display = "[[w:Delhi|Delhi]]", regional_categories = {"Delhi"}, } labels["Derbent"] = { display = "[[w:Derbent|Derbent]]", regional_categories = {"Derbent"}, } labels["Dərbənd"] = "Derbent" labels["Divriği"] = { display = "[[w:Divriği|Divriği]]", regional_categories = {"Divriği"}, } labels["Tevrik"] = "Divriği" labels["Tewrik"] = "Divriği" labels["Dewrik"] = "Divriği" labels["Devrik"] = "Divriği" labels["Devrike"] = "Divriği" labels["Dewrike"] = "Divriği" labels["Denizli"] = { display = "[[w:Denizli|Denizli]]", regional_categories = {"Denizli"}, } labels["Diyarbakır"] = { display = "[[w:Diyarbakır|Diyarbakır]]", regional_categories = {"Diyarbakır"}, } labels["Diyarbakir"] = "Diyarbakır" labels["Diyarbekir"] = "Diyarbakır" labels["Tigranakert"] = "Diyarbakır" -- Asia E labels["East Sakhalin"] = { display = "East [[w:Sakhalin|Sakhalin]]", regional_categories = {"East Sakhalin"}, } labels["Elazığ"] = { display = "[[w:Elazığ|Elazığ]]", regional_categories = {"Elazığ"}, } labels["Elazig"] = "Elazığ" labels["Elazigh"] = "Elazığ" labels["Erciş"] = { display = "[[w:Erciş|Erciş]]", regional_categories = {"Erciş"}, } labels["Ercis"] = "Erciş" labels["Archesh"] = "Erciş" labels["Artchesh"] = "Erciş" labels["Erdîş"] = "Erciş" labels["Erzincan"] = { display = "[[w:Erzincan|Erzincan]]", regional_categories = {"Erzincan"}, } labels["Yerznka"] = "Erzincan" labels["Erznka"] = "Erzincan" labels["Erzinjan"] = "Erzincan" labels["Erzurum"] = { display = "[[w:Erzurum|Erzurum]]", regional_categories = {"Erzurum"}, } labels["Karin"] = "Erzurum" labels["Erzrum"] = "Erzurum" labels["Eskişehir"] = { display = "[[w:Eskişehir|Eskişehir]]", regional_categories = {"Eskişehir"}, } -- Asia F labels["Faisalabad"] = { display = "[[w:Faisalabad|Lyallpuri]]", regional_categories = {"Lyallpuri"}, } labels["Faisalabadi"] = "Faisalabad" labels["Lyallpur"] = "Faisalabad" labels["Lyallpuri"] = "Faisalabad" labels["Fengkai"] = { display = "[[w:Fengkai County|Fengkai]]", regional_categories = {"Fengkai"}, } labels["Fereydan"] = { display = "[[w:Fereydan|Fereydan]]", regional_categories = {"Fereydan"}, } labels["Fereydani"] = "Fereydan" labels["Fereydanian"] = "Fereydan" labels["Phereidnuli"] = "Fereydan" labels["ფერეიდანი"] = "Fereydan" labels["ფერეიდნული"] = "Fereydan" labels["Fuzuli"] = { display = "[[w:Fuzuli District|Fuzuli]]", regional_categories = {"Fuzuli"}, } labels["Füzuli"] = "Fuzuli" labels["Fizuli"] = "Fuzuli" -- Asia G labels["Gadabay"] = { display = "[[w:Gadabay District|Gadabay]]", regional_categories = {"Gadabay"}, } labels["Gədəbəy"] = "Gadabay" labels["Getabek"] = "Gadabay" labels["Galilee"] = { display = "Galilee", regional_categories = {"Galilean"}, } labels["Galilean"] = "Galilee" labels["Ganja"] = { display = "[[w:Ganja, Azerbaijan|Ganja]]", regional_categories = {"Ganja"}, } labels["Gandzak"] = "Ganja" labels["Gəncə"] = "Ganja" labels["Gansu"] = { aliases = {"Cam Túc"}, display = "[[w:Cam Túc|Cam Túc]]", regional_categories = {"Cam Túc"}, } labels["Gilgit-Baltistan"] = { display = "[[w:Gilgit-Baltistan|Gilgit-Baltistan]]", regional_categories = {"Gilgit-Baltistani"}, } labels["Gilgit Baltistan"] = "Gilgit-Baltistan" labels["Giresun"] = { display = "[[w:Giresun|Giresun]]", regional_categories = {"Giresun"}, } labels["Goa"] = { display = "[[w:Goa|Goa]]", regional_categories = {"Goan"}, } labels["Goan"] = "Goa" labels["Goranboy"] = { display = "[[w:Goranboy District|Goranboy]]", regional_categories = {"Goranboy"}, } labels["Goris"] = { display = "[[w:Goris|Goris]]", regional_categories = {"Goris"}, } labels["Goychay"] = { display = "[[w:Goychay District|Goychay]]", regional_categories = {"Goychay"}, } labels["Göyçay"] = "Goychay" labels["Goygol"] = { display = "[[w:Goygol District|Goygol]]", regional_categories = {"Goygol"}, } labels["Göygöl"] = "Goygol" labels["Helenendorf"] = "Goygol" labels["Yelenino"] = "Goygol" labels["Khanlar"] = "Goygol" labels["Xanlar"] = "Goygol" labels["Guria"] = { display = "[[w:Guria|Guria]]", regional_categories = {"Guria"}, } labels["Gurian"] = "Guria" labels["Guruli"] = "Guria" labels["Gürün"] = { display = "[[w:Gürün|Gürün]]", regional_categories = {"Gürün"}, } labels["Kyurin"] = "Gürün" labels["Gyurin"] = "Gürün" labels["Gyumri"] = { display = "[[w:Gyumri|Gyumri]]", regional_categories = {"Gyumri"}, } labels["Kumayri"] = "Gyumri" labels["Leninakan"] = "Gyumri" labels["Alexandropol"] = "Gyumri" -- Asia H labels["Haçin"] = { display = "[[w:Saimbeyli|Haçin]]", regional_categories = {"Haçin"}, } labels["Hadjin"] = "Haçin" labels["Hajin"] = "Haçin" labels["Hachn"] = "Haçin" labels["Hajn"] = "Haçin" labels["Hakkari"] = { display = "[[w:Hakkari|Hakkari]]", regional_categories = {"Hakkari"}, } labels["Hakkiari"] = "Hakkari" labels["Hakari"] = "Hakkari" labels["Hakiari"] = "Hakkari" labels["Hakkâri"] = "Hakkari" labels["Harbin"] = { display = "[[w:Harbin|Harbin]]", regional_categories = {"Harbin"}, } labels["Hokkaido"] = { regional_categories = {"Hokkaido"}, } labels["Hong Kong"] = { display = "[[w:Hong Kong|Hong Kong]]", regional_categories = {"Hong Kong"}, } labels["Hyderabad"] = { display = "[[w:Hyderabad|Hyderabad]]", regional_categories = {"Hyderabadi"}, } -- Asia I labels["İçel"] = { display = "[[w:Mersin Province|İçel]]", regional_categories = {"İçel"}, } labels["Içel"] = "İçel" labels["Imereti"] = { display = "[[w:Imereti|Imereti]]", regional_categories = {"Imereti"}, } labels["Imeretian"] = "Imereti" labels["Imeruli"] = "Imereti" labels["Imerkhevi"] = { display = "[[w:Georgians in Turkey#Imerkhevians|Imerkhevi]]", regional_categories = {"Imerkhevi"}, } labels["Imerkhevian"] = "Imerkhevi" labels["Imerkheuli"] = "Imerkhevi" labels["İmerhev"] = "Imerkhevi" labels["Imerhev"] = "Imerkhevi" labels["Imishli"] = { display = "[[w:Imishli District|Imishli]]", regional_categories = {"Imishli"}, } labels["İmişli"] = "Imishli" labels["India"] = { aliases = {"Indianan", "Indianian", "Ấn Độ"}, display = "[[w:Ấn Độ|Ấn Độ]]", regional_categories = {"Ấn Độ"}, } labels["Indore"] = { display = "[[Indore|Indore]]", regional_categories = {"Indore"}, } labels["Indonesia"] = { display = "[[w:Indonesia|Indonesia]]", regional_categories = {"Indonesian"}, } labels["Indonesian"] = "Indonesia" labels["Iran"] = { display = "[[w:Iran|Iran]]", regional_categories = {"Iranian"}, } labels["Iranian"] = "Iran" labels["Iraq"] = { display = "Iraq", regional_categories = {"Iraqi"} } labels["Iraqi"] = "Iraq" labels["Islamabad"] = { display = "[[w:Islamabad|Islamabad]]", regional_categories = {"Islamabadi"}, } labels["Ismayilli"] = { display = "[[w:Ismayilli District|Ismayilli]]", regional_categories = {"Ismayilli"}, } labels["İsmayıllı"] = "Ismayilli" labels["Isparta"] = { display = "[[w:Isparta|Isparta]]", regional_categories = {"Isparta"}, } labels["Israel"] = { aliases = {"Israeli"}, -- "ar", en" handled in lang-specific module langs = {"ajp", "he", "ru", "yi"}, Wikipedia = true, regional_categories = true, } labels["Ivory Coast"] = { display = "[[w:Ivory Coast|Ivory Coast]]", regional_categories = {"Ivorian"}, } labels["Côte d’Ivoire"] = "Ivory Coast" labels["Côte d'Ivoire"] = "Ivory Coast" labels["Ivorian"] = "Ivory Coast" labels["İzmir"] = { display = "[[w:İzmir|İzmir]]", regional_categories = {"İzmir"}, } labels["Izmir"] = "İzmir" labels["İzmit"] = { display = "[[w:İzmit|İzmit]]", regional_categories = {"İzmit"}, } labels["Izmit"] = "İzmit" labels["Nicomedia"] = "İzmit" labels["Nikomedia"] = "İzmit" -- Asia J labels["Jabrayil"] = { display = "[[w:Jabrayil District|Jabrayil]]", regional_categories = {"Jabrayil"}, } labels["Cəbrayıl"] = "Jabrayil" labels["Jakarta"] = { display = "[[w:Jakarta|Jakarta]]", regional_categories = {"Jakarta"}, } labels["Jalilabad"] = { display = "[[w:Jalilabad District|Jalilabad]]", regional_categories = {"Jalilabad"}, } labels["Cəlilabad"] = "Jalilabad" labels["Jammu Kashmir"] = { display = "[[w:Jammu and Kashmir (union territory)|Jammu Kashmir]]", regional_categories = {"Jammu Kashmiri"}, } labels["Jammu and Kashmir"] = "Jammu Kashmir" labels["Indian Kashmir"] = "Jammu Kashmir" labels["Jammu & Kashmir"] = "Jammu Kashmir" labels["J&K"] = "Jammu Kashmir" labels["J&K"] = "Jammu Kashmir" labels["Japan"] = { display = "[[Nhật Bản]]", regional_categories = {"Nhật Bản"}, } labels["Java"] = { display = "[[w:Java|Java]]", regional_categories = {"Java"}, } labels["Javanese"] = "Java" labels["Javakheti"] = { display = "[[w:Javakheti|Javakheti]]", regional_categories = {"Javakheti"}, } labels["Javakhk"] = "Javakheti" labels["Jeju"] = { display = "[[w:Jeju Province|Jeju]]", regional_categories = {"Jeju"}, } labels["Jeju City"] = { display = "[[w:Jeju City|Jeju City]]", regional_categories = {"Jeju City"}, } labels["Jeolla"] = { display = "[[w:Jeolla dialect|Jeolla dialect]]", regional_categories = {"Jeolla"}, } labels["Jordan"] = { display = "Jordan", regional_categories = {"Jordanian"} } labels["Jordanian"] = "Jordan" labels["Julfa"] = { display = "[[w:Julfa, Azerbaijan (city)|Julfa]]", regional_categories = {"Julfa"}, } labels["Old Julfa"] = "Julfa" labels["Culfa"] = "Julfa" labels["Jugha"] = "Julfa" labels["Hin Jugha"] = "Julfa" -- Asia K labels["Kakavaberd"] = { display = "[[w:Kakavaberd dialect|Kakavaberd]]", regional_categories = {"Kakavaberd"}, } labels["Kaqavaberd"] = "Kakavaberd" labels["Kakheti"] = { display = "[[w:Kakheti|Kakheti]]", regional_categories = {"Kakheti"}, } labels["Kakhetian"] = "Kakheti" labels["Kakhuri"] = "Kakheti" labels["Kalbajar"] = { display = "[[w:Kalbajar District|Kalbajar]]", regional_categories = {"Kalbajar"}, } labels["Kelbajar"] = "Kalbajar" labels["Kəlbəcər"] = "Kalbajar" labels["Karachi"] = { display = "[[w:Karachi|Karachi]]", regional_categories = {"Karachi"}, } labels["Kartli"] = { display = "[[w:Kartli|Kartli]]", regional_categories = {"Kartli"}, } labels["Kartlian"] = "Kartli" labels["Kartluri"] = "Kartli" labels["Karvansara"] = { display = "[[w:Karvansara, Gegharkunik]]", regional_categories = {"Karvansaray"}, } labels["Karvansaray"] = "Karvansara" labels["Kalimantan"] = { display = "[[w:Kalimantan|Kalimantan]]", regional_categories = {"Kalimantanese"}, } labels["Kaptanpaşa"] = { display = "[[w:tr:Kaptanpaşa, Çayeli|Kaptanpaşa]]", regional_categories = {"Rize"}, } labels["Kars"] = { display = "[[w:Kars|Kars]]", regional_categories = {"Kars"}, } labels["Ghars"] = "Kars" labels["Kathiyawadi"] = { display = "[[w:Kathiawar|Kathiyawadi]]", regional_categories = {"Kathiyawadi"}, } labels["Kathiawadi"] = "Kathiyawadi" labels["Sorathi"] = "Kathiyawadi" labels["Bhawnagari"] = "Kathiyawadi" labels["Gohilwadi"] = "Kathiyawadi" labels["Holadi"] = "Kathiyawadi" labels["Jhalawadi"] = "Kathiyawadi" labels["Kayseri"] = { display = "[[w:Kayseri|Kayseri]]", regional_categories = {"Kayseri"}, } labels["Kesaria"] = "Kayseri" labels["Kazakhstan"] = { display = "[[w:Kazakhstan|Kazakhstan]]", regional_categories = {"Kazakhstani"}, } labels["Kazakhstani"] = "Kazakhstan" labels["Kazakh"] = "Kazakhstani" labels["Kazym"] = { regional_categories = {"Kazym"}, } labels["Kemaliye"] = { display = "[[w:Kemaliye|Kemaliye]]", regional_categories = {"Kemaliye"}, } labels["Ketapang"] = { display = "[[w: Ketapang Regency|Ketapang]]", regional_categories = {"Ketapang"}, } labels["Kharberd"] = { display = "[[w:Elazığ|Kharberd]]", regional_categories = {"Kharberd"}, } labels["Kharpert"] = "Kharberd" labels["Kharput"] = "Kharberd" labels["Harput"] = "Kharberd" labels["Khevi"] = { display = "[[w:Khevi|Khevi]]", regional_categories = {"Khevi"}, } labels["Mokhevian"] = "Khevi" labels["Mokhevi"] = "Khevi" labels["Mokheuri"] = "Khevi" labels["Khevian"] = "Khevi" labels["Khevsureti"] = { display = "[[w:Khevsureti|Khevsureti]]", regional_categories = {"Khevsureti"}, } labels["Khevsuria"] = "Khevsureti" labels["Khojavend"] = { display = "[[w:Khojavend District|Khojavend]]", regional_categories = {"Khojavend"}, } labels["Xocavənd"] = "Khojavend" labels["Khotorjur"] = { display = "[[w:Khotorjur|Khotorjur]]", regional_categories = {"Khotorjur"}, } labels["Khodorchur"] = "Khotorjur" labels["Hodiçor"] = "Khotorjur" labels["Xodiçur"] = "Khotorjur" labels["Xodrçur"] = "Khotorjur" labels["Xodorçur"] = "Khotorjur" labels["Sırakonak"] = "Khotorjur" labels["Khoy"] = { display = "[[w:Khoy|Khoy]]", regional_categories = {"Khoy"}, } labels["Khoi"] = "Khoy" labels["Khyber Pakhtunkhwa"] = { display = "[[w:Khyber Pakhtunkhwa|Khyber Pakhtunkhwa]]", regional_categories = {"Khyber Pakhtunkhwa"}, } labels["Pakhtunkhwa"] = "Khyber Pakhtunkhwa" labels["KPK"] = "Khyber Pakhtunkhwa" labels["Kiziqi"] = { display = "[[w:ka:ქიზიყი|Kiziqi]]", regional_categories = {"Kiziqi"}, } labels["Kisiqi"] = "Kiziqi" labels["Konya"] = { display = "[[w:Konya|Konya]]", regional_categories = {"Konya"}, } -- Asia L labels["Landak"] = { display = "[[w: Landak Regency|Landak]]", regional_categories = {"Landak"}, } labels["Lankaran"] = { display = "[[w:Lankaran|Lankaran]]", regional_categories = {"Lankaran"}, } labels["Lənkaran"] = "Lankaran" labels["Lənkəran"] = "Lankaran" labels["Lankon"] = "Lankaran" labels["Lachin"] = { display = "[[w:Lachin District|Lachin]]", regional_categories = {"Lachin"}, } labels["Laçın"] = "Lachin" labels["Laçîn"] = "Lachin" labels["Lahore"] = { display = "[[w:Lahore|Lahore]]", regional_categories = {"Lahori"}, } labels["Lahori"] = "Lahore" labels["Lebanon"] = { display = "Lebanon", regional_categories = {"Lebanese"}, } labels["Lebanese"] = "Lebanon" labels["Lechkhumi"] = { display = "[[w:Lechkhumi|Lechkhumi]]", regional_categories = {"Lechkhumi"}, } labels["Lechkhumian"] = "Lechkhumi" labels["Lechkhumuri"] = "Lechkhumi" labels["Levant"] = { display = "[[w:Levant|Levantine]]", regional_categories = {"Levantine"}, } labels["Levantine"] = "Levant" labels["Libya"] = { display = "Libya", regional_categories = {"Libyan"}, } labels["Libyan"] = "Libya" labels["Lori"] = { display = "[[w:Lori Province|Lori]]", regional_categories = {"Lori"}, } labels["Loṙi"] = "Lori" labels["Lucknow"] = { regional_categories = {"Lucknow"}, } -- Asia M labels["Macau"] = { display = "[[w:Macau|Macau]]", regional_categories = {"Macanese"}, } labels["Macao"] = "Macau" labels["Macanese"] = "Macau" labels["Mainland China"] = { display = "[[w:Trung Quốc đại lục|Trung Quốc đại lục]]", regional_categories = {"Trung Quốc đại lục"}, } labels["Mainland"] = "Mainland China" labels["mainland"] = "Mainland China" labels["mainland China"] = "Mainland China" labels["Malatya"] = { display = "[[w:Malatya|Malatya]]", regional_categories = {"Malatya"}, } labels["Malatia"] = "Malatya" labels["Malayeri"] = { display = "[[w:Malayer|Malayeri]]", regional_categories = {"Malayeri"}, } labels["Malaysia"] = { display = "[[w:Malaysia|Malaysia]]", regional_categories = {"Malaysian"}, } labels["Malaysian"] = "Malaysia" labels["Manisa"] = { display = "[[w:Manisa|Manisa]]", regional_categories = {"Manisa"}, } labels["Masally"] = { display = "[[w:Masally District|Masally]]", regional_categories = {"Masally"}, } labels["Masallı"] = "Masally" labels["Medan"] = { display = "[[w:Medan|Medan]]", regional_categories = {"Medan"}, } labels["Meghri"] = { display = "[[w:Meghri|Meghri]]", regional_categories = {"Meghri"}, } labels["Meğri"] = "Meghri" labels["Mehsani"] = { display = "[[w:Mehsana|Mehsani]]", regional_categories = {"Mehsani"}, } labels["Mahesani"] = "Mehsani" labels["Melawi"] = { display = "[[w: Melawi Regency|Melawi]]", regional_categories = {"Melawi"}, } labels["Meskheti"] = { display = "[[w:Meskheti|Meskheti]]", regional_categories = {"Meskheti"}, } labels["Meskhetian"] = "Meskheti" labels["Meskhian"] = "Meskheti" labels["Meskhuri"] = "Meskheti" labels["Mesudiye"] = { display = "[[w:Mesudiye, Ordu|Mesudiye]]", regional_categories = {"Mesudiye"}, } labels["Mingachevir"] = { display = "[[w:Mingachevir|Mingachevir]]", regional_categories = {"Mingachevir"}, } labels["Mingəçevir"] = "Mingachevir" labels["Moks"] = { display = "[[w:Bahçesaray (District), Van|Moks]]", regional_categories = {"Moks"}, } labels["Müküs"] = "Moks" labels["Miks"] = "Moks" labels["Mongolia"] = { display = "[[w:Mongolia|Mongolia]]", regional_categories = {"Mongolian"}, } labels["Mtiuleti"] = { display = "[[w:Mtiuleti|Mtiuleti]]", regional_categories = {"Mtiuleti"}, } labels["Mtiuletian"] = "Mtiuleti" labels["Mtiuluri"] = "Mtiuleti" labels["Muğla"] = { display = "[[w:Muğla|Muğla]]", regional_categories = {"Muğla"}, } labels["Mumbai"] = { regional_categories = {"Mumbai"}, } labels["Muş"] = { display = "[[w:Muş|Muş]]", regional_categories = {"Muş"}, } labels["Mush"] = "Muş" labels["Myanmar"] = { display = "[[w:Myanmar|Myanmar]]", regional_categories = {"Myanmar"}, } labels["Myanmarese"] = "Myanmar" labels["Burma"] = "Myanmar" labels["Burmese"] = "Myanmar" labels["Myeik"] = { display = "[[w:Myeik dialect|Myeik]]", regional_categories = {"Myeik"}, } -- Asia N labels["Nakhchivan"] = { display = "[[w:Nakhchivan|Nakhchivan]]", regional_categories = {"Nakhchivan"}, } labels["Naxçıvan"] = "Nakhchivan" labels["Nakhichevan"] = "Nakhchivan" labels["Nakhijevan"] = "Nakhchivan" labels["Nahçıvan"] = "Nakhchivan" labels["Negeri Sembilan"] = { display = "[[w:Negeri Sembilan|Negeri Sembilan]]", regional_categories = {"Negeri Sembilan"}, } labels["Nepal"] = { display = "[[w:Nepal|Nepal]]", regional_categories = {"Nepali"}, } labels["Nepali"] = "Nepal" labels["Nepalese"] = "Nepal" labels["New Julfa"] = { display = "[[w:New Julfa|New Julfa]]", regional_categories = { "New Julfa" }, } labels["Nor Jugha"] = "New Julfa" labels["Niğde"] = { display = "[[w:Niğde|Niğde]]", regional_categories = {"Niğde"}, } labels["Nigde"] = "Niğde" labels["Nij"] = { display = "[[w:Nij, Azerbaijan|Nij]]", regional_categories = {"Nij"}, } labels["Nidzh"] = "Nij" labels["Nizh"] = "Nij" labels["Nor Bayazet"] = { display = "[[w:Nor Bayazet|Nor Bayazet]]", regional_categories = {"Nor Bayazet"}, } labels["Novo-Bayazet"] = "Nor Bayazet" labels["Gavar"] = "Nor Bayazet" labels["Nor Nakhichevan"] = { display = "[[w:Nakhichevan-on-Don|Nor Nakhichevan]]", regional_categories = {"Nor Nakhichevan"}, } labels["New Nakhichevan"] = "Nor Nakhichevan" labels["Nor Nakhijevan"] = "Nor Nakhichevan" labels["Nakhichevan-on-Don"] = "Nor Nakhichevan" labels["North India"] = { display = "[[w:North India|North India]]", regional_categories = {"North Indian"}, } labels["North Indian"] = "North India" labels["North Sakhalin"] = { display = "North [[w:Sakhalin|Sakhalin]]", regional_categories = {"North Sakhalin"}, } labels["North Sumatra"] = { display = "[[w: North Sumatra|North Sumatra]]", regional_categories = {"North Sumatranese"}, } labels["Sumut"] = "North Sumatra" -- Asia O labels["Oghuz"] = { display = "[[w:Oghuz District|Oghuz]]", regional_categories = {"Oghuz"}, } labels["Oğuz"] = "Oghuz" labels["Oman"] = { display = "Oman", regional_categories = {"Omani"}, } labels["Omani"] = "Oman" labels["Ordubad"] = { display = "[[w:Ordubad District (Azerbaijan)|Ordubad]]", regional_categories = {"Ordubad"}, } -- Asia P labels["Pahang"] = { display = "[[w:Pahang|Pahang]]", regional_categories = {"Pahang"}, } labels["Pakistan"] = { aliases = {"Pakistani"}, Wikipedia = true, regional_categories = {"Pakistan"}, } labels["Palestine"] = { display = "Palestine", regional_categories = {"Palestinian"}, } labels["Palestinian"] = "Palestine" labels["Pasinler"] = { display = "[[w:Pasinler, Erzurum|Pasinler]]", regional_categories = {"Pasinler"}, } labels["Basen"] = "Pasinler" labels["Basean"] = "Pasinler" labels["Pasen"] = "Pasinler" labels["Palu"] = { display = "[[w:Palu, Elazığ|Palu]]", regional_categories = {"Palu"}, } labels["Balu"] = "Palu" labels["Partizak"] = { display = "[[w:hy:Պարտիզակ (Քոջաելի)|Partizak]]", regional_categories = {"Partizak"}, } labels["Bardizag"] = "Partizak" labels["Perak"] = { display = "[[w:Perak|Perak]]", regional_categories = {"Perak"}, } labels["Peshawar"] = { display = "[[w:Peshawar|Peshawar]]", regional_categories = {"Peshawari"}, } labels["Peshawari"] = "Peshawar" labels["Pharasa"] = { display = "[[w:Pharasiot Greek|Pharasa]]", regional_categories = {"Pharasiot"}, } labels["Pharasiot"] = "Pharasa" labels["Varasos"] = "Pharasa" labels["Farasa"] = "Pharasa" labels["Faraşa"] = "Pharasa" labels["Philippines"] = { display = "[[w:Philippines|Philippines]]", regional_categories = {"Philippine"}, } labels["Philippine"] = "Philippines" labels["Priangan"] = { regional_categories = {"Priangan"}, } labels["Pontianak"] = { display = "[[w: Pontianak|Pontianak]]", regional_categories = {"Pontianak"}, } labels["Pshavi"] = { display = "[[w:Pshavi|Pshavi]]", regional_categories = {"Pshavi"}, } labels["Pshavian "] = "Pshavi" labels["Pshauri"] = "Pshavi" labels["Pulur"] = { display = "[[w:Ovacık, Dersim|Pulur]]", regional_categories = {"Pulur"}, } labels["Punjab"] = { display = "[[w:Punjab|Punjab]]", regional_categories = {"Punjabi"}, } labels["Punjabi"] = "Punjab" -- Asia Q labels["Qabala"] = { display = "[[w:Qabala District|Qabala]]", regional_categories = {"Qabala"}, } labels["Qəbələ"] = "Qabala" labels["Kutkashen"] = "Qabala" labels["Qakh"] = { display = "[[w:Qakh District|Qakh]]", regional_categories = {"Qakh"}, } labels["Kakhi"] = "Qakh" labels["Gakh"] = "Qakh" labels["Qax"] = "Qakh" labels["Qazakh"] = { display = "[[w:Qazakh District|Qazakh]]", regional_categories = {"Qazakh"}, } labels["Qazax"] = "Qazakh" labels["Gazakh"] = "Qazakh" labels["Kazakh"] = "Qazakh" labels["Quba"] = { display = "[[w:Quba District (Azerbaijan)|Quba]]", regional_categories = {"Quba"}, } labels["Quetta"] = { display = "[[w: Quetta|Quetta]]", regional_categories = {"Quettan"}, } labels["Quettan"] = "Quetta" labels["Quettawal"] = "Quetta" labels["Quettawali"] = "Quetta" -- Asia R labels["Racha"] = { display = "[[w:Racha|Racha]]", regional_categories = {"Racha"}, } labels["Rachan"] = "Racha" labels["Rachuli"] = "Racha" labels["Rize"] = { display = "[[w:Rize|Rize]]", regional_categories = {"Rize"}, } -- Asia S labels["Saatly"] = { display = "[[w:Saatly District|Saatly]]", regional_categories = {"Saatly"}, } labels["Saatlı"] = "Saatly" labels["Sadz"] = { display = "[[w:Sadz_dialect|Sadz]]", regional_categories = {"Sadz"}, } labels["Asadzwa"] = "Sadz" labels["Sakhalin"] = { display = "[[w:Sakhalin|Sakhalin]]", regional_categories = {"Sakhalin"}, } labels["Salyan"] = { display = "[[w:Salyan District, Azerbaijan|Salyan]]", regional_categories = {"Salyan"}, } labels["Sambas"] = { display = "[[w: Sambas Regency|Sambas]]", regional_categories = {"Sambas"}, } labels["Sanggau"] = { display = "[[w: Sanggau Regency|Sanggau]]", regional_categories = {"Sanggau"}, } labels["Sarıkamış"] = { display = "[[w:Sarıkamış|Sarıkamış]]", regional_categories = {"Sarıkamış"}, } labels["Sarikamish"] = "Sarıkamış" labels["Sarighamish"] = "Sarıkamış" labels["Sasun"] = { display = "[[w:Sason|Sasun]]", regional_categories = {"Sasun"}, } labels["Sason"] = "Sasun" labels["Sassoun"] = "Sasun" labels["Seogwipo"] = { display = "[[w:Seogwipo|Seogwipo]]", regional_categories = {"Seogwipo"}, } labels["Shahbuz"] = { display = "[[w:Shahbuz District|Shahbuz]]", regional_categories = {"Shahbuz"}, } labels["Shamakhi"] = { display = "[[w:Shamakhi|Shamakhi]]", regional_categories = {"Shamakhi"}, } labels["Şamaxı"] = "Shamakhi" labels["Sharur"] = { display = "[[w:Sharur District|Sharur]]", regional_categories = {"Sharur"}, } labels["Şərur"] = "Sharur" labels["Shiraz"] = { display = "[[w:Shiraz|Shiraz]]", regional_categories = {"Shiraz"}, } labels["Sindh"] = { display = "[[w:Sindh|Sindh]]", regional_categories = {"Sindhi"}, } labels["Sind"] = "Sindh" labels["Sindhi"] = "Sindh" labels["Sintang"] = { display = "[[w: Sintang Regency|Sintang]]", regional_categories = {"Sintang"}, } labels["Tusheti"] = { display = "[[w:Tusheti|Tusheti]]", regional_categories = {"Tusheti"}, } labels["Tushetian"] = "Tusheti" labels["Tushuri"] = "Tusheti" labels["Ujar"] = { display = "[[w:Ujar District|Ujar]]", regional_categories = {"Ujar"}, } labels["Ucar"] = "Ujar" labels["Kurdamir"] = { display = "[[w:Kurdamir District|Kurdamir]]", regional_categories = {"Kurdamir"}, } labels["Kürdəmir"] = "Kurdamir" labels["Barda"] = { display = "[[w:Barda District|Barda]]", regional_categories = {"Barda"}, } labels["Bərdə"] = "Barda" labels["Salmas"] = { display = "[[w:Salmas|Salmas]]", regional_categories = {"Salmas"}, } labels["Salmast"] = "Salmas" labels["Senaki"] = { display = "[[w:Senaki|Senaki]]", regional_categories = {"Senaki"}, } labels["Shamkir"] = { display = "[[w:Shamkir District|Shamkir]]", regional_categories = {"Shamkir"}, } labels["Şəmkir"] = "Shamkir" labels["Shamkur"] = "Shamkir" labels["Shamkhor"] = "Shamkir" labels["Shanghai"] = { display = "[[w:Shanghai|Shanghai]]", regional_categories = {"Shanghainese"}, } labels["Shanghainese"] = "Shanghai" labels["Sheki"] = { display = "[[w:Sheki, Azerbaijan|Sheki]]", regional_categories = {"Sheki"}, } labels["Şəki"] = "Sheki" labels["Shaki"] = "Sheki" labels["Shidong"] = { display = "[[w:Shidong|Shidong]]", regional_categories = {"Shidong"}, } labels["Shirvan"] = { display = "[[w:Shirvan District|Shirvan]]", regional_categories = {"Shirvan"}, } labels["Shuryshkar"] = { regional_categories = {"Shuryshkar"}, } labels["Shurishkar"] = "Shuryshkar" labels["Shusha"] = { display = "[[w:Shusha|Shusha]]", regional_categories = {"Shusha"}, } labels["Şuşa"] = "Shusha" labels["Singapore"] = { display = "[[w:Singapore|Singapore]]", regional_categories = {"Singapore"}, } labels["Singaporean"] = "Singapore" labels["Sivas"] = { display = "[[w:Sivas|Sivas]]", regional_categories = {"Sivas"}, } labels["Sebastia"] = "Sivas" labels["Sebastea"] = "Sivas" labels["South Asia"] = { display = "[[w:Nam Á|Nam Á]]", regional_categories = {"Nam Á"}, } labels["Nam Á"] = "South Asia" labels["South Asian"] = "South Asia" labels["Southeast Asia"] = { display = "[[w:Southeast Asia|Southeast Asia]]", regional_categories = {"Southeast Asian"}, } labels["Southeast Asian"] = "Southeast Asia" labels["SEA"] = "Southeast Asia" labels["South India"] = { display = "[[w:South India|South India]]", regional_categories = {"South Indian"}, } labels["South Indian"] = "South India" labels["South Korea"] = { display = "[[w:South Korea|South Korea]]", regional_categories = {"South Korean"}, } labels["South Korean"] = "South Korea" labels["South Sakhalin"] = { display = "South [[w:Sakhalin|Sakhalin]]", regional_categories = {"South Sakhalin"}, } labels["Sri Lanka"] = { display = "[[Sri Lanka]]", regional_categories = {"Sri Lankan"}, } labels["Sri Lankan"] = "Sri Lanka" labels["Sumatra"] = { display = "[[w: Sumatra|Sumatra]]", regional_categories = {"Sumatranese"}, } labels["Surati"] = { display = "[[w:Surat district|Surati]]", regional_categories = {"Surati"}, } labels["Surgut"] = { display = "[[w:Surgut|Surgut]]", regional_categories = {"Surgut"}, } labels["Suzhou"] = { display = "[[w:Suzhou|Suzhou]]", regional_categories = {"Suzhounese"}, } labels["Suzhounese"] = "Suzhou" labels["Syria"] = { display = "Syria", regional_categories = {"Syrian"}, } labels["Syrian"] = "Syria" -- Asia T labels["Tabriz"] = { display = "[[w:Tabriz|Tabriz]]", regional_categories = {"Tabrizi"}, } labels["Təbriz"] = "Tabriz" labels["Tebriz"] = "Tabriz" labels["Tabrizi"] = "Tabriz" labels["Đài Loan"] = { aliases = {"Taiwan","Taiwanese"}, display = "[[w:Đài Loan|Đài Loan]]", regional_categories = {"Đài Loan"}, } labels["Tbilisi"] = { display = "[[w:Tbilisi|Tbilisi]]", regional_categories = {"Tbilisi"}, } labels["Tiflis"] = "Tbilisi" labels["Tartar"] = { display = "[[w:Tartar District|Tartar]]", regional_categories = {"Tartar"}, } labels["Tərtər"] = "Tartar" labels["Thailand"] = { aliases = {"Thai", "Thái", "Thái Lan"}, -- "en", "zh" handled in lang-specific module langs = {"khb", "mnw", "th"}, display = "[[w:Thái Lan|Thái Lan]]", regional_categories = "Thai", } labels["Tokat"] = { display = "[[w:Tokat|Tokat]]", regional_categories = {"Tokat"}, } labels["Evdokia"] = "Tokat" labels["Tovuz"] = { display = "[[w:Tovuz District|Tovuz]]", regional_categories = {"Tovuz"}, } labels["Trabzon"] = { display = "[[w:Trabzon|Trabzon]]", regional_categories = {"Trabzon"}, } labels["Trapizon"] = "Trabzon" -- Asia U labels["Urfa"] = { display = "[[w:Şanlıurfa|Urfa]]", regional_categories = {"Urfa"}, } labels["Urha"] = "Urfa" labels["Şanlıurfa"] = "Urfa" labels['Urmia'] = { display = "[[w:Urmia|Urmia]]", regional_categories = {"Urmia"}, } labels['Urmu'] = 'Urmia' labels['Urmiya'] = 'Urmia' labels["Uşak"] = { display = "[[w:Uşak|Uşak]]", regional_categories = {"Uşak"}, } labels["Uttar Pradesh"] = { display = "[[w:Uttar Pradesh|Uttar Pradesh]]", regional_categories = {"Uttar Pradeshi"}, } -- Asia V labels["Van"] = { display = "[[w:Van, Turkey|Van]]", regional_categories = {"Van"}, } labels["Vartashen"] = { display = "[[w:Oğuz (city)|Vartashen]]", regional_categories = {"Vartashen"}, } labels["Vardashen"] = "Vartashen" labels["Vayots Dzor"] = { display = "[[w:hy:Վայոց_ձորի_միջբարբառ|Vayots Dzor]]", regional_categories = {"Vayots Dzor"}, } labels["Vayots dzor"] = "Vayots Dzor" labels["Vietnam"] = { display = "[[w:Vietnam|Vietnam]]", regional_categories = {"Vietnamese"}, } labels["Vietnamese"] = "Vietnam" labels["Vozm"] = { display = "[[w:Gümüşören, Pervari|Vozm]]", regional_categories = {"Vozm"}, } labels["Vozim"] = "Vozm" labels["Özim"] = "Vozm" labels["Üzim"] = "Vozm" -- Asia W labels["West Kalimantan"] = { display = "[[w:West Kalimantan|West Kalimantan]]", regional_categories = {"West Kalimantanese"}, } labels["Kalbar"] = "West Kalimantan" -- Asia X -- Asia Y labels["Yardymli"] = { display = "[[w:Yardymli District|Yardymli]]", regional_categories = {"Yardymli"}, } labels["Yemen"] = { display = "Yemen", regional_categories = {"Yemeni"}, } labels["Yemeni"] = "Yemen" labels["Yemenite"] = "Yemen" labels["Yerevan"] = { display = "[[w:Yerevan|Yerevan]]", regional_categories = {"Yerevan"}, } labels["İrəvan"] = "Yerevan" labels["Yevlakh"] = { display = "[[w:Yevlakh District|Yevlakh]]", regional_categories = {"Yevlakh"}, } labels["Yevlax"] = "Yevlakh" labels["Special Region of Yogyakarta"] = { display = "[[w:Special Region of Yogyakarta]]", regional_categories = {"Special Region of Yogyakarta"}, } labels["SR Yogyakarta"] = "Special Region of Yogyakarta" labels["Yogyakarta"] = { display = "[[w:Yogyakarta|Yogyakarta]]", regional_categories = {"Yogyakarta"}, } labels["Yonggu"] = { display = "[[w:Yonggu, Guangdong|Yonggu]]", regional_categories = {"Yonggu"}, } -- Asia Z labels["Zangilan"] = { display = "[[w:Zəngilan|Zangilan]]", regional_categories = {"Zangilan"}, } labels["Zəngilan"] = "Zangilan" labels["Zangelan"] = "Zangilan" labels["Zanjan"] = { display = "[[w:Zanjan, Iran|Zanjan]]", regional_categories = {"Zanjan"}, } labels["Zәncan"] = "Zanjan" labels["Zәngan"] = "Zanjan" labels["Zaqatala"] = { display = "[[w:Zaqatala District|Zaqatala]]", regional_categories = {"Zaqatala"}, } labels["Zakatala"] = "Zaqatala" labels["Zagatala"] = "Zaqatala" labels["Zardab"] = { display = "[[w:Zardab District|Zardab]]", regional_categories = {"Zardab"}, } labels["Zərdab"] = "Zardab" -- Europe labels["Europe"] = { display = "[[w:Europe|Europe]]", regional_categories = {"European"}, } -- Europe A labels["Alemannia"] = { display = "[[w:Alemannia|Alemannia]]", regional_categories = {"Alemannic"}, } labels["Alemannic"] = "Alemannia" labels["Alghero"] = { display = "[[w:Alghero|Alghero]]", regional_categories = {"Algherese"}, } labels["Algherese"] = "Alghero" labels["Al-Andalus"] = { display = "[[w:al-Andalus|al-Andalus]]", regional_categories = {"Andalusian"}, } labels["al-Andalus"] = "Al-Andalus" labels["Amsterdam"] = { display = "[[w:Amsterdam|Amsterdam]]", regional_categories = {"Amsterdam"}, } labels["Andalusia"] = { display = "[[w:Andalusia|Andalusia]]", regional_categories = {"Andalusian"}, } labels["Andalucía"] = "Andalusia" labels["Andalucia"] = "Andalusia" labels["Antrim"] = { display = "[[w:County Antrim|Antrim]]", regional_categories = {"Northern Irish"}, } labels["Aragón"] = { regional_categories = {"Aragonese"}, } labels["Aragonese"] = "Aragón" labels["Aragon"] = "Aragón" labels["Aran"] = { display = "[[w:Aran Islands|Aran]]", regional_categories = {"Connacht"}, } labels["Argyll"] = { display = "[[w:Argyll|Argyll]]", regional_categories = {"Argyll"}, } labels["Arran"] = { display = "[[w:Isle of Arran|Arran]]", regional_categories = {"Arran"}, } labels["Arvanitika"] = { display = "[[w:Arvanitika|Arvanitika]]", regional_categories = {"Arvanitika"}, } labels["Asturias"] = { regional_categories = {"Asturian"}, } labels["Asturian"] = "Asturias" labels["Austria"] = { display = "[[w:Austria|Austria]]", regional_categories = {"Austrian"}, } labels["Austrian"] = "Austria" labels["Azores"] = { display = "[[w:Azores|Azores]]", regional_categories = {"Azorean"}, } labels["Azorean"] = "Azores" labels["Azorian"] = "Azores" -- Europe B labels["Badenoch"] = { display = "[[w:Badenoch|Badenoch]]", regional_categories = {"Badenoch"}, } labels["Balearics"] = { display = "[[w:Balearic Islands|Balearics]]", regional_categories = {"Balearic"}, } labels["Balearic"] = "Balearics" labels["Balearic Islands"] = "Balearics" labels["Baleares"] = "Balearics" labels["Balears"] = "Balearics" labels["Banat"] = { display = "[[w:Banat|Banat]]", regional_categories = {"Banat"}, } labels["Basque Country"] = { display = "[[w:Basque Country (autonomous community)|Basque Country]]", regional_categories = {"Basque Country"}, } labels["Bavaria"] = { display = "[[w:Bavaria|Bavaria]]", regional_categories = {"Bavarian"}, } labels["Bavarian"] = "Bavaria" labels["Bedfordshire"] = { display = "[[w:Bedfordshire|Bedfordshire]]", regional_categories = {"Bedfordshire"}, } labels["Bedfordshire dialect"] = "Bedfordshire" labels["Berkshire"] = { display = "[[w:Berkshire|Berkshire]]", regional_categories = {"Berkshire"}, } labels["Berkshire dialect"] = "Berkshire" labels["Old Belarusian"] = { display = "Old Belarusian", Wikipedia = true, plain_categories = { "Old Belarusian" }, } labels["Bỉ"] = { display = "[[w:Bỉ|Bỉ]]", regional_categories = {"Bỉ"}, } labels["Belgian"] = "Bỉ" labels["Belgium"] = "Bỉ" labels["Bern"] = { display = "[[w:Bern|Bern]]", regional_categories = {"Bernese"}, } labels["Bernese"] = "Bern" labels["Black Isle"] = { display = "[[w:Black Isle|Black Isle]]", regional_categories = {"Black Isle"}, } labels["Bohuslän"] = { display = "[[w:Bohuslän|Bohuslän]]", regional_categories = {"Bohuslän"}, } labels["Bohuslan"] = "Bohuslän" labels["Bologna"] = { display = "[[Bologna]]", regional_categories = {"Bolognese"}, } labels["Bolognese"] = "Bologna" labels["Bosnia"] = { display = "[[w:Bosnia|Bosnia]]", regional_categories = {"Bosnian"}, } labels["Bosnian"] = "Bosnia" labels["Brabant"] = { display = "[[w:Brabant|Brabant]]", regional_categories = {"Brabantian"}, } labels["Brabantian"] = "Brabant" labels["Bristol"] = { display = "[[w:Bristol|Bristol]]", regional_categories = {"Bristolian"}, } labels["Bristolian"] = "Bristol" labels["Britain"] = { aliases = {"Brit", "British", "Great Britain", "Anh", "Đại Anh", "Đảo Anh"}, display = "[[w:Đảo Anh|Anh]]", regional_categories = {"Anh"}, } labels["Bukovina"] = { display = "[[w:Bukovina|Bukovina]]", regional_categories = {"Bukovinian"}, } labels["Bucovina"] = "Bukovina" labels["Bukovinian"] = "Bukovina" labels["Bukowina"] = "Bukovina" labels["Burgos"] = { regional_categories = {"Burgos"}, } -- Europe C labels["Cádiz"] = { Wikipedia = "Province of Cádiz", regional_categories = {"Cádiz"}, } labels["Cadiz"] = "Cádiz" labels["Caithness"] = { display = "[[w:Caithness|Caithness]]", regional_categories = {"Caithness"}, } labels["Cambridge University"] = { display = "[[w:University of Cambridge|Cambridge University]]", regional_categories = {"Cambridge University"}, } labels["University of Cambridge"] = "Cambridge University" labels["Cantab"] = "Cambridge University" labels["Canaries"] = { display = "[[w:Canary Islands|Canary Islands]]", regional_categories = {"Canarian"}, } labels["Canary Islands"] = "Canaries" labels["Canarias"] = "Canaries" labels["Carinthia"] = { display = "[[w:Carinthia|Carinthia]]", regional_categories = {"Carinthian"}, } labels["Carinthian"] = "Carinthia" labels["Kärnten"] = "Carinthia" labels["Carpi"] = { display = "[[w:Carpi, Emilia-Romagna|Carpi]]", regional_categories = {"Carpigiano"}, } labels["Carpigiano"] = "Carpi" labels["Channel Islands"] = { display = "[[w:Channel Islands|Channel Islands]]", regional_categories = {"Channel Islands"}, } labels["Connacht"] = { display = "[[w:Connacht|Connacht]]", regional_categories = {"Connacht"}, } labels["Connemara"] = { display = "[[w:Connemara|Connemara]]", regional_categories = {"Connacht"}, } labels["Cork"] = { display = "[[w:Cork (city)|Cork]]", regional_categories = {"Munster"}, } labels["Cornwall"] = { display = "[[w:Cornwall|Cornwall]]", regional_categories = {"Cornish"}, } labels["Cornish"] = "Cornwall" labels["Cornish dialect"] = "Cornwall" labels["Crimea"] = { display = "[[w:Crimea|Crimea]]", regional_categories = {"Crimean"}, } labels["Crimean"] = "Crimea" labels["Croatia"] = { display = "[[w:Croatia|Croatia]]", regional_categories = {"Croatian"}, } labels["Croatian"] = "Croatia" labels["Cumbria"] = { display = "[[w:Cumbria|Cumbria]]", regional_categories = {"Cumbrian"}, } labels["Cumbrian"] = "Cumbria" labels["West Cumbria"] = { display = "[[w:Cumbria|West Cumbria]]", regional_categories = {"Cumbrian"}, } -- can be split off if enough entries in it arise; group with Cumbria for now labels["West Cumbrian"] = "West Cumbria" -- Europe D labels["DDR"] = { display = "[[w:GDR|East Germany]]", regional_categories = {"DDR"}, } labels["GDR"] = "DDR" labels["East German"] = "DDR" labels["East Germany"] = "DDR" labels["Dalmatia"] = { display = "[[w:Dalmatia|Dalmatia]]", regional_categories = {"Dalmatian"}, } labels["Dalmatian"] = "Dalmatia" labels["Derbyshire"] = { display = "[[w:Derbyshire|Derbyshire]]", regional_categories = {"Derbyshire"}, } labels["Derbyshire dialect"] = "Derbyshire" labels["Devon"] = { display = "[[w:Devon|Devon]]", regional_categories = {"Devon"}, } labels["Devonian"] = "Devon" labels["Devonian dialect"] = "Devon" labels["Devonshire"] = "Devon" labels["Devonshire dialect"] = "Devon" labels["Dobruja"] = { display = "[[w:Dobruja|Dobruja]]", regional_categories = {"Dobrujan"}, } labels["Dobrogea"] = "Dobruja" labels["Dobrujan"] = "Dobruja" labels["Dorset"] = { display = "[[w:Dorset|Dorset]]", regional_categories = {"Dorset"}, } labels["Dorset dialect"] = "Dorset" labels["Dublin"] = { display = "[[w:Dublin|Dublin]]", regional_categories = {"Dublin"}, } labels["Dundee"] = { display = "[[w:Dundee|Dundee]]", regional_categories = {"Dundee"}, } labels["Durham"] = { display = "[[w:County Durham|Durham]]", regional_categories = {"Durham"}, } labels["Durham University"] = { display = "[[w:Durham University|Durham University]]", regional_categories = {"Durham University"}, } labels["University of Durham"] = "Durham University" -- Europe E labels["East Anglia"] = { display = "[[w:East Anglia|East Anglia]]", regional_categories = {"East Anglian"}, } labels["East Anglian"] = "East Anglia" labels["East Anglian dialect"] = "East Anglia" labels["East Midlands"] = { display = "[[w:East Midlands|East Midlands]]", regional_categories = {"East Midlands"}, } labels["East Midlands dialect"] = "East Midlands" labels["Edirne"] = { display = "[[w:Edirne|Edirne]]", regional_categories = {"Edirne"}, } labels["Adrianople"] = "Edirne" labels["Odrin"] = "Edirne" labels["Egerland"] = { display = "[[w:Egerland|Egerland]]", regional_categories = {"Egerland"}, } labels["Egerländisch"] = "Egerland" labels["Chebsko"] = "Egerland" labels["England"] = { display = "[[w:England|England]]", regional_categories = {"English"}, } labels["English"] = "England" labels["England and Wales"] = { display = "[[w:England and Wales|England & Wales]]", regional_categories = {"English", "Welsh"}, } labels["England & Wales"] = "England and Wales" labels["E&W"] = "England and Wales" labels["E+W"] = "England and Wales" labels["Essex"] = { display = "[[w:Essex|Essex]]", regional_categories = {"Essex"}, } labels["Essex dialect"] = "Essex" labels["Estonia"] = { display = "[[w:Estonia|Estonia]]", regional_categories = {"Estonian"}, } labels["Estonian"] = "Estonia" labels["Exmoor"] = { display = "[[w:Exmoor|Exmoor]]", regional_categories = {"Devonian", "Somerset"}, } labels["Extremadura"] = { display = "[[w:Extremadura|Extremadura]]", regional_categories = {"Extremaduran"}, } labels["Extremaduran"] = "Extremadura" -- Europe F labels["Finland"] = { display = "[[w:Finland|Finland]]", regional_categories = {"Finland"}, } labels["Finnish"] = "Finland" labels["Fjolde"] = { display = "[[w:Fjolde|Fjolde]]", regional_categories = {"Fjolde"}, } labels["Viöl"] = "Fjolde" labels["France"] = { display = "[[w:France|France]]", regional_categories = {"French"}, } labels["French"] = "France" labels["Föhr-Amrum"] = { display = "[[w:Föhr-Amrum|Föhr-Amrum]]", regional_categories = {"Föhr-Amrum"}, } labels["Föhr-Amrum dialect"] = "Föhr-Amrum" labels["Feer"] = "Föhr-Amrum" labels["Fering"] = "Föhr-Amrum" labels["Oomram"] = "Föhr-Amrum" labels["Öömrang"] = "Föhr-Amrum" -- Europe G labels["Galicia"] = { regional_categories = {"Galician"}, } labels["Galician"] = "Galicia" labels["Galway"] = { display = "[[w:County Galway|Galway]]", regional_categories = {"Galway"}, } labels["Germany"] = { display = "[[w:Đức|Đức]]", regional_categories = {"Đức"}, } labels["German"] = "Germany" -- comment this alias out if it causes problems labels["Gloucestershire"] = { display = "[[w:Gloucestershire|Gloucestershire]]", regional_categories = {"Gloucestershire"}, } labels["Gloucestershire dialect"] = "Gloucestershire" labels["Glos"] = "Gloucestershire" labels["Gotland"] = { display = "[[w:Gotland|Gotland]]", regional_categories = {"Gotlandic"}, } labels["Gotlandic"] = "Gotland" labels["Granada"] = { regional_categories = {"Granada"}, } labels["Guernsey"] = { display = "[[w:Guernsey|Guernsey]]", regional_categories = {"Guernsey"}, } -- Europe H labels["The Hague"] = { display = "[[w:The Hague|The Hague]]", regional_categories = {"Hague"}, } labels["Hague"] = "The Hague" labels["Den Haag"] = "The Hague" labels["Hartlepool"] = { display = "[[w:Hartlepool|Hartlepool]]", regional_categories = {"Teesside"}, } labels["Heligoland"] = { display = "[[w:Heligoland|Heligoland]]", regional_categories = {"Heligolandic"}, } labels["Heligoland dialect"] = "Heligoland" labels["Halunder"] = "Heligoland" labels["Heligolandic"] = "Heligoland" labels["Helgoland"] = "Heligoland" labels["Helgoland dialect"] = "Heligoland" labels["Herefordshire"] = { display = "[[w:Herefordshire|Herefordshire]]", regional_categories = {"Herefordshire"}, } labels["Herefordshire dialect"] = "Herefordshire" labels["Holland"] = { display = "[[w:Holland|Holland]]", regional_categories = {"Hollandic"}, } labels["Hollandic"] = "Holland" labels["Huelva"] = { display = "[[w:Province of Huelva|Huelva]]", regional_categories = {"Huelvan"}, } labels["Huelvan"] = "Huelva" labels["Hungary"] = { display = "[[w:Hungary|Hungary]]", regional_categories = {"Hungarian"}, } labels["Hungarian"] = "Hungary" -- Europe I labels["Ireland"] = { display = "[[w:Ireland|Ireland]]", regional_categories = {"Irish"}, } labels["Irish"] = "Ireland" labels["Islay"] = { display = "[[w:Islay|Islay]]", regional_categories = {"Islay"}, } labels["Isle of Man"] = { display = "[[w:Isle of Man|Isle of Man]]", regional_categories = {"Manx"}, } labels["Manx"] = "Isle of Man" labels["Isle of Mann"] = "Isle of Man" labels["Isle of Wight"] = { display = "[[w:Isle of Wight|Isle of Wight]]", regional_categories = {"Isle of Wight"}, } labels["Istanbul"] = { display = "[[w:Istanbul|Istanbul]]", regional_categories = {"Istanbul"}, } labels["İstanbul"] = "Istanbul" labels["Polis"] = "Istanbul" -- Europe J labels["Jersey"] = { display = "[[w:Jersey|Jersey]]", regional_categories = {"Jersey"}, } labels["Jutland"] = { display = "[[w:Jutland|Jutland]]", regional_categories = {"Jutlandic"}, } labels["Jutlandic"] = "Jutland" -- Europe K labels["Kalix"] = { display = "[[w:Kalix|Kalix]]", regional_categories = {"Kalix"}, } labels["Kazan"] = { display = "[[w:Kazan|Kazan]]", regional_categories = {"Kazan"}, } labels["Kent"] = { display = "[[w:Kent|Kent]]", regional_categories = {"Kentish"}, } labels["Kentish"] = "Kent" labels["Kentish dialect"] = "Kent" labels["Kent dialect"] = "Kent" labels["Kırklareli"] = { display = "[[w:Kırklareli|Kırklareli]]", regional_categories = {"Kırklareli"}, } labels["Kirklareli"] = "Kırklareli" labels["Kukkuzi"] = { display = "[[w:Kukkuzi|Kukkuzi]]", regional_categories = {"Kukkuzi"}, } -- Europe L labels["Lancashire"] = { display = "[[w:Lancashire|Lancashire]]", regional_categories = {"Lancashire"}, } labels["Latvia"] = { display = "[[w:Latvia|Latvia]]", regional_categories = {"Latvian"}, } labels["Latvian"] = "Latvia" labels["Lewis"] = { display = "[[w:Isle of Lewis|Lewis]]", regional_categories = {"Lewis"}, } labels["Isle of Lewis"] = "Lewis" labels["Liechtenstein"] = { display = "[[w:Liechenstein|Liechtenstein]]", regional_categories = {"Liechtenstein"}, } labels["Lincolnshire"] = { display = "[[w:Lincolnshire|Lincolnshire]]", regional_categories = {"Lincolnshire"}, } labels["Lithuania"] = { display = "[[w:Lithuania|Lithuania]]", regional_categories = {"Lithuanian"}, } labels["Lithuanian"] = "Lithuania" labels["Liverpool"] = { display = "[[w:Liverpool|Liverpudlian]]", regional_categories = {"Liverpudlian"}, } labels["Scouse"] = "Liverpool" labels["London"] = { display = "[[w:London|London]]", regional_categories = {"London"}, } labels["Lorraine"] = { display = "[[w:Lorraine|Lorraine]]", regional_categories = {"Lorraine"}, } labels["Lower Austria"] = { display = "[[w:Lower Austria|Lower Austria]]", regional_categories = {"Lower Austrian"}, } labels["Niederösterreich"] = "Lower Austria" labels["Niederösterreichisch"] = "Lower Austria" labels["Lower Austrian"] = "Lower Austria" labels["Lucerne"] = { display = "[[w:Lucerne|Lucerne]]", regional_categories = {"Lucerne"}, } labels["Luzern"] = "Lucerne" labels["Luleå"] = { display = "[[w:Luleå|Luleå]]", regional_categories = {"Luleå"}, } labels["Lulea"] = "Luleå" labels["Luserna"] = { display = "[[w:Luserna|Luserna]]", regional_categories = {"Luserna"}, } labels["Luxembourg"] = { display = "[[w:Luxembourg|Luxembourg]]", regional_categories = {"Luxembourgish"}, } labels["Luxembourgish"] = "Luxembourg" labels["Luxemburg"] = "Luxembourg" labels["Luxemburgish"] = "Luxembourg" labels["Lviv"] = { display = "[[w:Lviv|Lviv]]", regional_categories = {"Lviv"}, } labels["Lvov"] = "Lviv" labels["Lwow"] = "Lviv" labels["Lwów"] = "Lviv" -- Europe M labels["Madeira"] = { display = "[[w:Madeira|Madeira]]", regional_categories = {"Madeiran"}, } labels["Madeiran"] = "Madeira" labels["Mallorca"] = { display = "[[w:Mallorca|Mallorca]]", regional_categories = {"Mallorcan"}, } labels["Mallorcan"] = "Mallorca" labels["Majorca"] = "Mallorca" labels["Malta"] = { display = "[[w:Malta|Malta]]", regional_categories = {"Maltese"}, } labels["Maltese"] = "Malta" labels["Manchester"] = { display = "[[w:Manchester|Manchester]]", regional_categories = {"Mancunian"}, } labels["Mancunian"] = "Manchester" labels["Manc"] = "Manchester" labels["Mantua"] = { display = "[[w:Mantua|Mantua]]", regional_categories = {"Mantovano"}, } labels["Mantovano"] = "Mantua" labels["Maramureș"] = { display = "[[w:Maramureș|Maramureș]]", regional_categories = {"Maramureș"}, } labels["Maramures"] = "Maramureș" labels["Marseille"] = { display = "[[w:Marseille|Marseille]]", regional_categories = {"Marseille"}, } labels["Midlands"] = { display = "[[w:The Midlands|Midlands]]", regional_categories = {"Midlands"}, } labels["Midlands dialect"] = "Midlands" labels["South Midlands"] = "Midlands" -- OK as alias? or a subvariety worth distinguishing? labels["Mirandola"] = { display = "[[w:Mirandola|Mirandola]]", regional_categories = {"Mirandolese"}, } labels["Mirandolese"] = "Mirandola" labels["Modena"] = { display = "[[w:Modena|Modena]]", regional_categories = {"Modenese"}, } labels["Modenese"] = "Modena" labels["Moldova"] = { display = "[[w:Moldavia|Moldavia]]", regional_categories = {"Moldovan"}, } labels["Moldavian"] = "Moldova" labels["Moldovan"] = "Moldova" labels["Moldavia"] = "Moldova" labels["Republic of Moldova"] = { display = "[[w:Moldova|Moldova]]", regional_categories = {"Republic of Moldova"}, } labels["Mölmsch"] = { display = "[[w:Mülheim|Mölmsch]]", regional_categories = {"Mölmsch"}, } labels["Mülheim"] = "Mölmsch" labels["Montenegro"] = { display = "[[w:Montenegro|Montenegro]]", regional_categories = {"Montenegrin"}, } labels["Montenegrin"] = "Montenegro" labels["Moravia"] = { display = "[[w:Moravia|Moravia]]", regional_categories = {"Moravian"}, } labels["Moravian"] = "Moravia" labels["Moscow"] = { aliases = {"Moskva"}, display = "[[w:Moskva|Moskva]]", regional_categories = {"Moskva"}, } labels["Munster"] = { display = "[[w:Munster|Munster]]", regional_categories = {"Munster"}, } labels["Muntenia"] = { display = "[[w:Muntenia|Muntenia]]", regional_categories = {"Muntenian"}, } labels["Muntenian"] = "Muntenia" labels["Murcia"] = { regional_categories = {"Murcian"}, } labels["Murcian"] = "Murcia" -- Europe N labels["Naples"] = { display = "[[w:Naples|Naples]]", regional_categories = {"Neapolitan"}, } labels["Neapolitan"] = "Naples" labels["Napoli"] = "Naples" labels["Navarre"] = { regional_categories = {"Navarrese"}, } labels["Navarrese"] = "Navarre" labels["Netherlands"] = { display = "[[w:Hà Lan|Hà Lan]]", regional_categories = {"Hà Lan"}, } labels["Hà Lan"] = "Netherlands" labels["Norfolk"] = { display = "[[w:Norfolk|Norfolk]]", regional_categories = {"Norfolk"}, } labels["North Wales"] = { display = "[[w:North Wales|North Wales]]", regional_categories = {"North Wales"}, } labels["Northern Crimea"] = { display = "Northern [[w:Crimea|Crimea]]", regional_categories = {"Northern"}, } labels["Northern England"] = { display = "[[w:Northern England|Northern England]]", regional_categories = {"Northern England"}, } labels["northern England"] = "Northern England" labels["North England"] = "Northern England" labels["north England"] = "Northern England" labels["Northern Ireland"] = { display = "[[w:Northern Ireland|Northern Ireland]]", regional_categories = {"Northern Irish"}, } labels["Northern Irish"] = "Northern Ireland" labels["NI"] = "Northern Ireland" labels["Northern Isles"] = { display = "[[w:Orkney|Orkney]], [[w:Shetland|Shetland]]", regional_categories = {"Orkney", "Shetland"}, } labels["Insular Scots"] = "Northern Isles" labels["Northumbria"] = { display = "[[w:Northumbria|Northumbria]]", regional_categories = {"Northumbrian"}, } labels["Northumbrian"] = "Northumbria" labels["Northumberland"] = "Northumbria" labels["Northeast England"] = "Northumbria" labels["North-East England"] = "Northumbria" labels["North East England"] = "Northumbria" labels["Nottinghamshire"] = { display = "[[w:Nottinghamshire|Nottinghamshire]]", regional_categories = {"Nottinghamshire"}, } labels["Nottinghamshire dialect"] = "Nottinghamshire" -- Europe O labels["Oltenia"] = { display = "[[w:Oltenia|Oltenia]]", regional_categories = {"Oltenian"}, } labels["Oltenian"] = "Oltenia" labels["Orenburg"] = { display = "[[w:Orenburg|Orenburg]]", regional_categories = {"Orenburg"}, } labels["Orkney"] = { display = "[[w:Orkney|Orkney]]", regional_categories = {"Orkney"}, } labels["Orcadian"] = "Orkney" labels["Ostrobothnia"] = { display = "[[w:Ostrobothnia|Ostrobothnia]]", regional_categories = {"Ostrobothnian"}, } labels["Ostrobothnian"] = "Ostrobothnia" labels["Österbotten"] = "Ostrobothnia" labels["Oxbridge"] = { display = "[[w:Oxbridge|Oxbridge]]", regional_categories = {"Cambridge University", "Oxford University"}, } labels["Oxford City"] = { display = "[[w:Oxford|Oxford]]", regional_categories = {"Oxford"}, } labels["Oxford dialect"] = "Oxford City" labels["City of Oxford"] = "Oxford City" labels["Oxfordshire"] = { display = "[[w:Oxfordshire|Oxfordshire]]", regional_categories = {"Oxfordshire"}, } labels["Oxfordshire dialect"] = "Oxfordshire" labels["Oxford University"] = { display = "[[w:University of Oxford|Oxford University]]", regional_categories = {"Oxford University"}, } alias("Oxford University", {"University of Oxford", "Oxon"}) -- Europe P labels["Parma"] = { display = "[[w:Parma|Parma]]", regional_categories = {"Parmigiano"}, } labels["Parmigiano"] = "Parma" labels["Perthshire"] = { display = "[[w:Perthshire|Perthshire]]", regional_categories = {"Perthshire"}, } labels["Piacenza"] = { display = "[[w:Piacenza|Piacenza]]", regional_categories = {"Piacentino"}, } labels["Piacentino"] = "Piacenza" labels["Picardy"] = { display = "[[w:Picardy|Picardy]]", regional_categories = {"Picard"}, } labels["Picard"] = "Picardy" labels["Portugal"] = { aliases = {"Portuguese", "Bồ Đào Nha"}, display = "[[w:Bồ Đào Nha|Bồ Đào Nha]]", regional_categories = {"Bồ Đào Nha"}, } labels["Prešov"] = { display = "[[w:Prešov|Prešov]]", regional_categories = {"Prešov"}, } labels["Presov"] = "Prešov" labels["Provence"] = { display = "[[w:Provence|Provence]]", regional_categories = {"Provence"}, } --don't add Provençal as an alias labels["Prussia"] = { display = "[[w:Prussia (region)|Prussia]]", regional_categories = {"Prussian"}, } labels["Prussian"] = "Prussia" labels["East Prussia"] = "Prussia" --aliased for now; if many entries use it, it can be separated labels["East Prussian"] = "Prussia" labels["West Prussia"] = "Prussia" labels["West Prussian"] = "Prussia" labels["Pskov"] = { display = "[[w:Pskov|Pskov]]", regional_categories = {"Pskov"}, } -- Europe Q -- Europe R labels["Reggio Emilia"] = { display = "[[w:Reggio Emilia|Reggio Emilia]]", regional_categories = {"Reggiano"}, } labels["Reggiano"] = "Reggio Emilia" labels["Roman Empire"] = { display = "[[w:Roman Empire|Roman Empire]]", regional_categories = {"Roman"}, } labels["Ross-shire"] = { display = "[[w:Ross-shire|Ross-shire]]", regional_categories = {"Ross-shire"}, } labels["Ross"] = "Ross-shire" labels["Rotterdam"] = { display = "[[w:Rotterdam|Rotterdam]]", regional_categories = {"Rotterdam"}, } labels["Rotterdams"] = "Rotterdam" labels["Middle Russian"] = { display = "Middle Russian", Wikipedia= "Early Modern Russian", plain_categories = {"Middle Russian" }, } labels["Old Russian"] = "Middle Russian" -- Europe S labels["Saarland"] = { display = "[[w:Saarland|Saarland]]", regional_categories = {"Saarland"}, } labels["Saarländisch"] = "Saarland" labels["Saarlandic"] = "Saarland" labels["Saarlandish"] = "Saarland" labels["Saint Ouen"] = { display = "[[w:Saint Ouen, Jersey|Saint Ouën]]", regional_categories = {"Saint Ouënnais"}, } labels["Saint Ouënnais"] = "Saint Ouen" labels["Sankt-Peterburg"] = { aliases = {"Saint Petersburg","St Petersburg","St. Petersburg"}, display = "[[w:Sankt-Peterburg|Sankt-Peterburg]]", regional_categories = {"Sankt-Peterburg"}, } labels["Sandoy"] = { display = "[[w:Sandoy|Sandoy]]", regional_categories = {"Sandoy"}, } labels["Sandø"] = "Sandoy" labels["Sappada"] = { display = "[[w:Sappada|Sappada]]", regional_categories = {"Sappada"}, } labels["Sauris"] = { display = "[[w:Sauris|Sauris]]", regional_categories = {"Sauris"}, } labels["Scania"] = { display = "[[w:Scania|Scania]]", regional_categories = {"Scanian"}, } labels["Scanian"] = "Scania" labels["Skanian"] = "Scania" labels["Skåne"] = "Scania" labels["Scotland"] = { display = "[[w:Scotland|Scotland]]", regional_categories = {"Scottish"}, } labels["Scottish"] = "Scotland" labels["Sense"] = { display = "[[w:Sense District|Sense]]", regional_categories = {"Sensler"}, } labels["Sensler"] = "Sense" labels["Sense District"] = "Sense" labels["Senslerdeutsch"] = "Sense" labels["Serbia"] = { aliases = {"Serbian", "Xéc-bi", "Xéc-bi-a"}, Wikipedia = true, regional_categories = "Serbia", } labels["Seville"] = { Wikipedia = "Province of Seville", regional_categories = {"Seville"}, } labels["Sevilla"] = "Seville" labels["Shetland"] = { display = "[[w:Shetland|Shetland]]", regional_categories = {"Shetland"}, } labels["Shetland islands"] = "Shetland" labels["Shetland Islands"] = "Shetland" labels["Shetlandic"] = "Shetland" labels["Shetlands"] = "Shetland" labels["Silesia"] = { display = "[[w:Silesia|Silesia]]", regional_categories = {"Silesia"}, } --Silesia German, Silesia Polish; for differentiation between sli "Silesian German" -- don't add Silesian as alias labels["Skye"] = { display = "[[w:Isle of Skye|Skye]]", regional_categories = {"Skye"}, } labels["Isle of Skye"] = "Skye" labels["Somerset"] = { display = "[[w:Somerset|Somerset]]", regional_categories = {"Somerset"}, } labels["Somerset dialect"] = "Somerset" labels["South Wales"] = { display = "[[w:South Wales|South Wales]]", regional_categories = {"South Wales"}, } labels["Southern England"] = { display = "[[w:Southern England|Southern England]]", regional_categories = {"Southern England"}, } labels["southern England"] = "Southern England" labels["South England"] = "Southern England" labels["south England"] = "Southern England" labels["South Tyrol"] = { display = "[[w:South Tyrol|South Tyrol]]", regional_categories = {"South Tyrolean"}, } labels["Alto Adige"] = "South Tyrol" labels["South Tirol"] = "South Tyrol" labels["South Tirolean"] = "South Tyrol" labels["South Tirolese"] = "South Tyrol" labels["South Tyrolean"] = "South Tyrol" labels["South Tyrolese"] = "South Tyrol" labels["Spain"] = { display = "[[w:Tây Ban Nha|Tây Ban Nha]]", regional_categories = {"Tây Ban Nha"}, } labels["Spanish"] = "Spain" labels["ES"] = "Spain" labels["Tây Ban Nha"] = "Spain" labels["Spilamberto"] = { display = "[[w:Spilamberto|Spilamberto]]", regional_categories = {"Spilambertese"}, } labels["Spilambertese"] = "Spilamberto" labels["St. Gallen"] = { display = "[[w:St. Gallen|St. Gallen]]", regional_categories = {"St. Gallen"}, } labels["St Gallen"] = "St. Gallen" labels["Saint Gallen"] = "St. Gallen" labels["Styria"] = { display = "[[w:Styria|Styria]]", regional_categories = {"Styrian"}, } labels["Styrian"] = "Styria" labels["Steiermark"] = "Styria" labels["Steiermärkisch"] = "Styria" labels["Steirisch"] = "Styria" labels["Suffolk"] = { display = "[[w:Suffolk|Suffolk]]", regional_categories = {"Suffolk"}, } labels["Suffolk dialect"] = "Suffolk" labels["Sutherland"] = { display = "[[w:Sutherland|Sutherland]]", regional_categories = {"Sutherland"}, } labels["Suðuroy"] = { display = "[[w:Suðuroy|Suðuroy]]", regional_categories = {"Suðuroy"}, } labels["Suduroy"] = "Suðuroy" labels["Sweden"] = { display = "[[w:Sweden|Sweden]]", regional_categories = {"Sweden"}, } labels["Swedish"] = "Sweden" labels["Switzerland"] = { display = "[[w:Switzerland|Switzerland]]", regional_categories = {"Switzerland"}, } labels["Swiss"] = "Switzerland" labels["Swiss German"] = "Switzerland" -- some German entries use this alias; let -sche know if it causes problems labels["Sylt"] = { display = "[[w:Sylt|Sylt]]", regional_categories = {"Sylt"}, } labels["Söl"] = "Sylt" labels["Sölring"] = "Sylt" labels["Söl'"] = "Sylt" labels["Söl'ring"] = "Sylt" -- Europe T labels["Teesside"] = { display = "[[w:Teesside|Teesside]]", regional_categories = {"Teesside"}, } labels["Timau"] = { display = "[[w:Paluzza|Timau]]", regional_categories = {"Timau"}, } labels["Transylvania"] = { display = "[[w:Transylvania|Transylvania]]", regional_categories = {"Transylvanian"}, } labels["Transilvania"] = "Transylvania" labels["Transylvanian"] = "Transylvania" -- Europe U labels["Uist"] = { display = "[[w:Uist|Uist]]", regional_categories = {"Uist"}, } labels["UK"] = { aliases = {"United Kingdom"}, Wikipedia = "United Kingdom", display = "Anh", regional_categories = {"Anh"}, } labels["Old Ukrainian"] = { display = "Old Ukrainian", Wikipedia = true, plain_categories = { "Old Ukrainian " }, } labels["Ulster"] = { display = "[[w:Ulster|Ulster]]", regional_categories = {"Ulster"}, } labels["Uri"] = { display = "[[w:Canton of Uri|Uri]]", regional_categories = {"Urner"}, } labels["Urseren"] = "Uri" labels["Urner"] = "Uri" labels["Urnerdeutsch"] = "Uri" -- Europe V labels["Venice"] = { display = "[[w:Venice|Venice]]", regional_categories = {"Venetian"}, } labels["Venetian"] = "Venice" labels["Vienna"] = { display = "[[w:Vienna|Vienna]]", regional_categories = {"Viennese"}, } labels["Viennese"] = "Vienna" labels["Vilhelmina"] = { display = "[[w:Vilhelmina|Vilhelmina]]", regional_categories = {"Vilhelmina"}, } labels["Vilnius"] = { display = "[[w:Vilnius|Vilnius]]", regional_categories = {"Vilnius"}, } labels["Vilna"] = "Vilnius" labels["Wilno"] = "Vilnius" labels["Vojvodina"] = { display = "[[w:Vojvodina|Vojvodina]]", regional_categories = {"Vojvodina"}, } -- Europe W labels["Wales"] = { display = "[[w:Wales|Wales]]", regional_categories = {"Welsh"}, } labels["Welsh"] = "Wales" labels["Wallonia"] = { display = "[[w:Wallonia|Wallonia]]", regional_categories = {"Wallonian"}, } labels["Wallonian"] = "Wallonia" labels["Wearside"] = { display = "[[w:Wearside|Wearside]]", regional_categories = {"Wearside"}, } labels["West Country"] = { display = "[[w:West Country|West Country]]", regional_categories = {"West Country"}, } labels["West England"] = "West Country" labels["west England"] = "West Country" labels["Western England"] = "West Country" labels["western England"] = "West Country" labels["West of England"] = "West Country" labels["West Midlands"] = { Wikipedia = true, regional_categories = true, } labels["Western Ukraine"] = { display = "[[w:Western Ukraine|Western Ukraine]]", regional_categories = {"Western"}, } labels["Wiltshire"] = { display = "[[w:Wiltshire|Wiltshire]]", regional_categories = {"Wiltshire"}, } labels["Wiltshire dialect"] = "Wiltshire" labels["Wilts"] = "Wiltshire" labels["Wilts dialect"] = "Wiltshire" -- Europe X -- Europe Y labels["Yorkshire"] = { display = "[[w:Yorkshire|Yorkshire]]", regional_categories = {"Yorkshire"}, } -- Europe Z labels["Zakarpattia"] = { display = "[[w:Zakarpattia Oblast|Zakarpattia]]", regional_categories = {"Zakarpattia"}, } labels["Zürich"] = { display = "[[w:Zürich|Zürich]]", regional_categories = {"Zürich"}, } labels["Zurich"] = "Zürich" -- Australia and Oceania -- AO A labels["Australia"] = { aliases = {"AU", "Australian", "Úc"}, display = "[[w:Úc|Úc]]", regional_categories = "Úc", } -- AO B -- AO C labels["CNMI"] = { display = "[[w:Northern Mariana Islands|Northern Mariana Islands]]", regional_categories = {"Northern Mariana Islands"}, } labels["Northern Mariana Islands"] = "CNMI" labels["Notte Mariånas"] = "CNMI" -- AO D -- AO E -- AO F -- AO G labels["Guam"] = { display = "[[w:Guam|Guam]]", regional_categories = {"Guam"}, } labels["Guåhan"] = "Guam" labels["Guamanian"] = "Guam" -- AO H labels["Hawaii"] = { display = "[[w:Hawaii|Hawaii]]", regional_categories = {"Hawaiian"}, } labels["Hawaiian"] = "Hawaii" -- AO I -- AO J -- AO K labels["Kauaʻi"] = { display = "[[w:Kauai|Kauaʻi]]", regional_categories = {"Kauaʻi"}, } labels["Kauai"] = "Kauaʻi" labels["Kaua'i"] = "Kauaʻi" -- AO L labels["Lānaʻi"] = { display = "[[w:Lanai|Lānaʻi]]", regional_categories = {"Lānaʻi"}, } labels["Lanaʻi"] = "Lānaʻi" labels["Lanai"] = "Lānaʻi" labels["Lāna'i"] = "Lānaʻi" labels["Lana'i"] = "Lānaʻi" -- AO M labels["Maui"] = { display = "[[w:Maui|Maui]]", regional_categories = {"Maui"}, } labels["Molokaʻi"] = { display = "[[w:Molokai|Molokaʻi]]", regional_categories = {"Molokaʻi"}, } labels["Molokai"] = "Molokaʻi" labels["Moloka'i"] = "Molokaʻi" -- AO N labels["New Zealand"] = { display = "[[w:New Zealand|New Zealand]]", regional_categories = {"New Zealand"}, } labels["NZ"] = "New Zealand" labels["Niʻihau"] = { display = "[[w:Niihau dialect|Niʻihau]]", regional_categories = {"Niʻihau"}, } labels["Ni'ihau"] = "Niʻihau" labels["Niihau"] = "Niʻihau" -- AO O -- AO P -- AO Q -- AO R -- AO S -- AO T -- AO U -- AO V -- AO W -- AO X -- AO Y -- AO Z -- Other/unclear labels["Antarctica"] = { display = "[[w:Antarctica|Antarctica]]", regional_categories = {"Antarctic"}, } labels["Antarctic"] = "Antarctica" labels["South Pole"] = "Antarctica" labels["Commonwealth"] = { display = "[[Commonwealth of Nations|Commonwealth]]", regional_categories = {"Commonwealth"}, } labels["Kitti"] = { regional_categories = {"Kitti"}, } return require("Module:labels").finalize_data(labels) 32dijcu8i3z77o5sf3ex586t7abqohz Mô đun:languages/canonical names 828 273923 2571727 2571592 2026-10-18T15:46:46Z Hiyuune 50834 2571727 Scribunto text/plain return { ["Aba"] = "utp", ["Abai Sungai"] = "abf", ["Abenlen Ayta"] = "abp", ["Abipon"] = "axb", ["Abishira"] = "ash", ["Abom"] = "aob", ["Abu"] = "ado", ["Abu' Arapesh"] = "aah", ["Abua"] = "abn", ["Abun"] = "kgr", ["Abung"] = "abl", ["Abureni"] = "mgj", ["Abé"] = "aba", ["Ache"] = "yif", ["Aché"] = "guq", ["Acroá"] = "acs", ["Adabe"] = "adb", ["Adai"] = "xad", ["Adamorobe Sign Language"] = "ads", ["Adang"] = "adn", ["Adangbe"] = "adq", ["Adap"] = "adp", ["Adasen"] = "tiu", ["Adele"] = "ade", ["Adhola"] = "adh", ["Tiếng Adjukru"] = "adj", ["Adithinngithigh"] = "dth", ["Adonara"] = "adr", ["Aduge"] = "adu", ["Aeka"] = "aez", ["Aekyom"] = "awi", ["Aequian"] = "xae", ["Afghan Sign Language"] = "afg", ["Afitti"] = "aft", ["Afra"] = "ulf", ["Afrihili"] = "afh", ["Afro-Seminole Creole"] = "afs", ["Agarabi"] = "agd", ["Agariya"] = "agi", ["Agavotaguerra"] = "avo", ["Aghu"] = "ahh", ["Aghu Tharrnggala"] = "gtu", ["Agi"] = "aif", ["Agob"] = "kit", ["Agoi"] = "ibm", ["Aguano"] = "aga", ["Aguaruna"] = "agr", ["Aguna"] = "aug", ["Agusan Manobo"] = "msm", ["Agutaynen"] = "agn", ["Agwagwune"] = "yay", ["Ahanta"] = "aha", ["Ahirani"] = "ahr", ["Ahwai"] = "nfd", ["Ai-Cham"] = "aih", ["Aighon"] = "aix", ["Aikanã"] = "tba", ["Aiklep"] = "mwg", ["Aimele"] = "ail", ["Ainbai"] = "aic", ["Aiome"] = "aki", ["Airoran"] = "air", ["Aisi"] = "mmq", ["Aiwoo"] = "nfl", ["Aja"] = "aja", ["Ajagua"] = "sai-ajg", ["Ajawa"] = "ajw", ["Ajyíninka Apurucayali"] = "cpc", ["Ak"] = "akq", ["Aka (Central Africa)"] = "axk", ["Aka (Sudan)"] = "soh", ["Aka-Bea"] = "abj", ["Aka-Cari"] = "aci", ["Aka-Kol"] = "aky", ["Aka-Kora"] = "ack", ["Akar-Bale"] = "acl", ["Akatek"] = "knj", ["Ake"] = "aik", ["Akebu"] = "keu", ["Akei"] = "tsr", ["Akeu"] = "aeu", ["Akolet"] = "akt", ["Akoye"] = "miw", ["Akpa"] = "akf", ["Akpes"] = "ibe", ["Akrukay"] = "afi", ["Tiếng Akuku"] = "ayk", ["Akum"] = "aku", ["Akurio"] = "ako", ["Akuwagel"] = "bey", ["Akwa"] = "akw", ["Akyaung Ari"] = "nqy", ["Al-Sayyid Bedouin Sign Language"] = "syy", ["Alabat Island Agta"] = "dul", ["Alacatlatzala Mixtec"] = "mim", ["Alago"] = "ala", ["Alapmunte"] = "apv", ["Alas-Kluet Batak"] = "btz", ["Alazapa"] = "nai-ala", ["Albanian Sign Language"] = "sqk", ["Alege"] = "alf", ["Algerian Sign Language"] = "asp", ["Ali"] = "aiy", ["Alladian"] = "ald", ["Alngith"] = "aid", ["Alo Phola"] = "ypo", ["Alor"] = "aol", ["Aloápam Zapotec"] = "zaq", ["Alu"] = "mte", ["Alugu"] = "aub", ["Tiếng Alune"] = "alp", ["Alungul"] = "aus-alu", ["Aluo"] = "yna", ["Alur"] = "alz", ["Alutiiq"] = "ems", ["Alviri-Vidari"] = "avd", ["Alyawarr"] = "aly", ["Amahai"] = "amq", ["Amanayé"] = "ama", ["Amara"] = "aie", ["Amarakaeri"] = "amr", ["Amarizana"] = "awd-ama", ["Amasi"] = "alv-ama", ["Amatlán Zapotec"] = "zpo", ["Amba"] = "rwm", ["Ambakich"] = "aew", ["Ambala Ayta"] = "abc", ["Ambelau"] = "amv", ["Ambele"] = "ael", ["Amblong"] = "alm", ["Ambo"] = "amb", ["Ambul"] = "apo", ["Amele"] = "aey", ["Amganad Ifugao"] = "ifa", ["Ami"] = "amy", ["Ammonite"] = "sem-amm", ["Amo"] = "amo", ["Amol"] = "alx", ["Amoltepec Mixtec"] = "mbz", ["Amondawa"] = "adw", ["Amorite"] = "sem-amo", ["Ampanang"] = "apg", ["Ampari Dogon"] = "aqd", ["Amri Karbi"] = "ajz", ["Amto"] = "amt", ["Ana Tinga Dogon"] = "dti", ["Anakalangu"] = "akg", ["Anam"] = "pda", ["Anambé"] = "aan", ["Anamgura"] = "imi", ["Anasi"] = "bpo", ["Ancient Ligurian"] = "xlg", ["Ancient North Arabian"] = "xna", ["Ancient Zapotec"] = "xzp", ["Andai"] = "afd", ["Andajin"] = "ajn", ["Andaman Creole Hindi"] = "hca", ["Andaqui"] = "ana", ["Andarum"] = "aod", ["Andegerebinha"] = "adg", ["Andh"] = "anr", ["Andio"] = "bzb", ["Andjingith"] = "aus-and", ["Andoa"] = "anb", ["Andoque"] = "ano", ["Andoquero"] = "sai-and", ["Andra-Hus"] = "anx", ["Aneityum"] = "aty", ["Anem"] = "anz", ["Aneme Wake"] = "aby", ["Anfillo"] = "myo", ["Tiếng Angaataha"] = "agm", ["Angaité"] = "aqt", ["Angal"] = "age", ["Angal Enen"] = "aoe", ["Angal Heneng"] = "akh", ["Angevin"] = "roa-ang", ["Angkamuthi"] = "avm", ["Angkola Batak"] = "akb", ["Angloromani"] = "rme", ["Angor"] = "agg", ["Angoram"] = "aog", ["Angosturas Tunebo"] = "tnd", ["Anguthimri"] = "awg", ["Ani Phowa"] = "ypn", ["Animere"] = "anf", ["Anindilyakwa"] = "aoi", ["Anjam"] = "boj", ["Anmatyerre"] = "amx", ["Anong"] = "nun", ["Anor"] = "anj", ["Anserma"] = "ans", ["Ansus"] = "and", ["Antakarinya"] = "ant", ["Antigua and Barbuda Creole English"] = "aig", ["Anu"] = "anl", ["Anufo"] = "cko", ["Anus"] = "auq", ["Anuta"] = "aud", ["Anyin Morofo"] = "mtb", ["Aoheng"] = "pni", ["Aore"] = "aor", ["Ap Ma"] = "kbx", ["Apalachee"] = "xap", ["Apali"] = "ena", ["Apasco-Apoala Mixtec"] = "mip", ["Apiaká"] = "api", ["Apma"] = "app", ["Apolista"] = "awd-apo", ["Aproumu Aizi"] = "ahp", ["Apurinã"] = "apu", ["Arabana"] = "ard", ["Arabela"] = "arl", ["Aralle-Tabulahan"] = "atq", ["Arammba"] = "stk", ["Aranama-Tamique"] = "xrt", ["Arandai"] = "jbj", ["Araona"] = "aro", ["Arapaso"] = "arj", ["Arara-Karo"] = "arr", ["Ararandewára"] = "xaj", ["Arawum"] = "awm", ["Arbore"] = "arv", ["Are"] = "mwc", ["Areba"] = "aea", ["Argentine Sign Language"] = "aed", ["Arguni"] = "agf", ["Arhâ"] = "aqr", ["Arhö"] = "aok", ["Aribwatsa"] = "laz", ["Aribwaung"] = "ylu", ["Arifama-Miniafia"] = "aai", ["Arigidi"] = "aqg", ["Arikapú"] = "ark", ["Arikara"] = "ari", ["Arikem"] = "ait", ["Tiếng Aringa"] = "luc", ["Armazic"] = "xrm", ["Armenian Sign Language"] = "aen", ["Arop-Lokep"] = "apr", ["Arop-Sissano"] = "aps", ["Arosi"] = "aia", ["Arritinngithigh"] = "rrt", ["Arta"] = "atz", ["Arua"] = "aru", ["Aruamu"] = "msy", ["Aruek"] = "aur", ["Aruop"] = "lsr", ["Arutani"] = "atx", ["Aruá"] = "arx", ["As"] = "asz", ["Asaro'o"] = "mtv", ["Ashe"] = "ahs", ["Asháninka"] = "cni", ["Ashéninka Perené"] = "prq", ["Asilulu"] = "asl", ["Asoa"] = "asv", ["Assangori"] = "sjg", ["Asu"] = "aum", ["Asue Awyu"] = "psa", ["Asunción Mixtepec Zapotec"] = "zoo", ["Ata"] = "atm", ["Ata Manobo"] = "atd", ["Atakapa"] = "aqp", ["Atampaya"] = "amz", ["Atanques"] = "cba-ata", ["Atatláhuca Mixtec"] = "mib", ["Ateso"] = "teo", ["Ati"] = "atk", ["Atohwaim"] = "aqm", ["Atong (Cameroon)"] = "ato", ["Atorada"] = "aox", ["Atsam"] = "cch", ["Atsugewi"] = "atw", ["Attié"] = "ati", ["Au"] = "avt", ["Aulua"] = "aul", ["Aurá"] = "aux", ["Aushi"] = "auh", ["Aushiri"] = "avs", ["Auslan"] = "asf", ["Austral"] = "aut", ["Australian Aboriginal Sign Language"] = "asw", ["Austrian Sign Language"] = "asq", ["Austronesian Mari"] = "hob", ["Auwe"] = "smf", ["Auyana"] = "auy", ["Auye"] = "auu", ["Auyokawa"] = "auo", ["Avau"] = "avb", ["Avava"] = "tmb", ["Avikam"] = "avi", ["Avá-Canoeiro"] = "avv", ["Awa (New Guinea)"] = "awb", ["Awa-Cuaiquer"] = "kwi", ["Awabakal"] = "awk", ["Awak"] = "awo", ["Awar"] = "aya", ["Awara"] = "awx", ["Awbono"] = "awh", ["Awera"] = "awr", ["Awetí"] = "awe", ["Awngthim"] = "gwm", ["Awtuw"] = "kmn", ["Awun"] = "aww", ["Awutu"] = "afu", ["Awyi"] = "auw", ["Axamb"] = "ahb", ["Ayabadhu"] = "ayd", ["Ayautla Mazatec"] = "vmy", ["Ayerrerenge"] = "axe", ["Ayi"] = "ayq", ["Ayizi"] = "yyz", ["Ayizo"] = "ayb", ["Ayomán"] = "sai-ayo", ["Ayoquesco Zapotec"] = "zaf", ["Ayoreo"] = "ayo", ["Tiếng Ayu"] = "ayu", ["Ayutla Mixtec"] = "miy", ["Azha"] = "aza", ["Azhe"] = "yiz", ["Baa"] = "kwb", ["Baan"] = "bvj", ["Baangi"] = "bqx", ["Baba"] = "bbw", ["Babango"] = "bbm", ["Babanki"] = "bbk", ["Babine-Witsuwit'en"] = "bcr", ["Babole"] = "bvx", ["Bada"] = "bhz", ["Badeshi"] = "bdz", ["Badimaya"] = "bia", ["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", ["Tiếng Bagirmi"] = "bmi", ["Bago-Kusuntu"] = "bqg", ["Bagri"] = "bgq", ["Bagupi"] = "bpi", ["Bagusa"] = "bqb", ["Baha"] = "yha", ["Baham"] = "bdw", ["Bahamian Creole"] = "bah", ["Baharna Arabic"] = "abv", ["Bahau"] = "bhv", ["Bahinemo"] = "bjh", ["Bahonsuai"] = "bsu", ["Bai"] = "bdj", ["Baibai"] = "bbf", ["Baikeno"] = "bkx", ["Baima"] = "bqh", ["Baimak"] = "bmx", ["Bainouk-Gunyaamolo"] = "bcz", ["Bainouk-Samik"] = "bcb", ["Baissa Fali"] = "fah", ["Bajan"] = "bjs", ["Bajelani"] = "bjm", ["Baka"] = "bkc", ["Bakairí"] = "bkq", ["Bakoko"] = "bkh", ["Bakole"] = "kme", ["Bakpinka"] = "bbs", ["Bakulung"] = "bbu", ["Tiếng Bakumpai"] = "bkr", ["Bakwé"] = "bjw", ["Balaesang"] = "bls", ["Balangao"] = "blw", ["Balangingi"] = "sse", ["Balau"] = "blg", ["Baldemu"] = "bdn", ["Bali"] = "bcp", ["Baliledo"] = "poz-bal", ["Balinese Malay"] = "mhp", ["Balo"] = "bqo", ["Baloi"] = "biz", ["Balong"] = "bnt-bal", ["Baluan-Pam"] = "blq", ["Bamako Sign Language"] = "bog", ["Bamali"] = "bbq", ["Bambalang"] = "bmo", ["Bambam"] = "ptu", ["Bambili-Bambui"] = "baw", ["Bamenyam"] = "bce", ["Bamu"] = "bcf", ["Bamukumbit"] = "bqt", ["Bamunka"] = "bvm", ["Bamwe"] = "bmg", ["Ban Khor Sign Language"] = "bfk", ["Banam Bay"] = "vrt", ["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", ["Bangala"] = "bxg", ["Bangandu"] = "bgf", ["Bangba"] = "bbe", ["Bangime"] = "dba", ["Bangka"] = "mfb", ["Bangru"] = "sit-ban", ["Bangubangu"] = "bnx", ["Bangwinji"] = "bsj", ["Baniva"] = "bvv", ["Baniwa"] = "bwi", ["Banka"] = "bxw", ["Bankan Tey Dogon"] = "dbw", ["Banoni"] = "bcm", ["Bantik"] = "bnq", ["Baraamu"] = "brd", ["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", ["Bariai"] = "bch", ["Bariji"] = "bjc", ["Barikanchi"] = "bxo", ["Barngarla"] = "bjb", ["Barok"] = "bjk", ["Barranbinya"] = "aus-bra", ["Barro Negro Tunebo"] = "tbn", ["Barrow Point"] = "bpt", ["Baruga"] = "bjz", ["Barunggam"] = "aus-brm", ["Baruya"] = "byr", ["Barwe"] = "bwg", ["Barí"] = "mot", ["Basa"] = "bzw", ["Basa-Gumna"] = "bsl", ["Basa-Gurmana"] = "buj", ["Basap"] = "bdb", ["Bashkardi"] = "bsg", ["Bassa-Kontagora"] = "bsr", ["Bassossi"] = "bsi", ["Bata"] = "bta", ["Bataan Ayta"] = "ayt", ["Batanga"] = "bnm", ["Bateri"] = "btv", ["Bathari"] = "bhm", ["Bati (Cameroon)"] = "btc", ["Bati (Indonesia)"] = "bvt", ["Batu"] = "btu", ["Batui"] = "zbt", ["Bau"] = "bbd", ["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", ["Beba"] = "bfp", ["Bebe"] = "bzv", ["Bebele"] = "beb", ["Bebeli"] = "bek", ["Bebil"] = "bxp", ["Bedik"] = "tnr", ["Bedoanas"] = "bed", ["Beeke"] = "bkf", ["Beele"] = "bxq", ["Beembe"] = "beq", ["Beezen"] = "bnz", ["Befang"] = "bby", ["Begbere-Ejar"] = "bqv", ["Bekati'"] = "bei", ["Bekwarra"] = "bkv", ["Bekwel"] = "bkw", ["Belait"] = "beg", ["Belanda Bor"] = "bxb", ["Belanda Viri"] = "bvi", ["Belizean Creole"] = "bzj", ["Tiếng Bembe"] = "bmb", ["Ben Tey"] = "dbt", ["Bena"] = "yun", ["Benabena"] = "bef", ["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", ["Berawan"] = "lod", ["Bergish"] = "gmw-bgh", ["Berinomo"] = "bit", ["Berom"] = "bom", ["Berta"] = "wti", ["Berti"] = "byt", ["Besme"] = "bes", ["Besoa"] = "bep", ["Betaf"] = "bfe", ["Bete"] = "byf", ["Bete-Bendi"] = "btt", ["Betoi"] = "sai-bet", ["Bhalay"] = "bhx", ["Bharia"] = "bha", ["Bhaya"] = "bhe", ["Bhele"] = "bhy", ["Bhilali"] = "bhi", ["Bhoti Kinnauri"] = "nes", ["Biafada"] = "bif", ["Biage"] = "bdf", ["Biak"] = "bhw", ["Biali"] = "beh", ["Bian Marind"] = "bpv", ["Biangai"] = "big", ["Biao"] = "byk", ["Biao Mon"] = "bmt", ["Biao-Jiao Mien"] = "bje", ["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", ["Bikaru"] = "bic", ["Bikya"] = "byb", ["Bila"] = "bip", ["Bilakura"] = "bql", ["Bilba"] = "bpz", ["Bilbil"] = "brz", ["Bile"] = "bil", ["Biliau"] = "bcu", ["Biloxi"] = "bll", ["Bilur"] = "bxf", ["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", ["Birgid"] = "brk", ["Biri"] = "bzr", ["Biritai"] = "bqq", ["Birri"] = "bvq", ["Birrpayi"] = "xbj", ["Birwa"] = "brl", ["Biseni"] = "ije", ["Bishuo"] = "bwh", ["Bisis"] = "bnw", ["Bisorio"] = "bir", ["Bitare"] = "brt", ["Bitur"] = "mcc", ["Biwat"] = "bwm", ["Biyo"] = "byo", ["Biyom"] = "bpm", ["Blablanga"] = "blp", ["Black Speech"] = "art-bsp", ["Blafe"] = "bfh", ["Bo"] = "bgl", ["Bo-Rukul"] = "mae", ["Bo-Ung"] = "mux", ["Boano (Maluku)"] = "bzn", ["Boano (Sulawesi)"] = "bzl", ["Bobongko"] = "bgb", ["Bobot"] = "bty", ["Bodo (Central Africa)"] = "boy", ["Bofi"] = "bff", ["Boga"] = "bvw", ["Bogaya"] = "boq", ["Boguru"] = "bqu", ["Boikin"] = "bzf", ["Bokha"] = "ybk", ["Bokoto"] = "bdt", ["Bokyi"] = "bky", ["Bolak"] = "art-blk", ["Bolango"] = "bld", ["Bole"] = "bol", ["Bolgo"] = "bvo", ["Bolia"] = "bli", ["Tiếng Bolinao"] = "smk", ["Bolivian Sign Language"] = "bvl", ["Bolon"] = "bof", ["Bolondo"] = "bzm", ["Bolongan"] = "blj", ["Bom"] = "bmf", ["Boma Nkuu"] = "bnt-bon", ["Boma Yumu"] = "bnt-boy", ["Bomboli"] = "bml", ["Bomboma"] = "bws", ["Bomitaba"] = "zmx", ["Bomwali"] = "bmw", ["Bon Gula"] = "glc", ["Bondei"] = "bou", ["Tiếng Kulango Bondoukou"] = "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", ["Boor"] = "bvf", ["Bora"] = "boa", ["Border Kuna"] = "kvn", ["Borei"] = "gai", ["Boro"] = "xxb", ["Borong"] = "ksr", ["Boruca"] = "brn", ["Boselewa"] = "bwf", ["Bosngun"] = "bqs", ["Bote-Majhi"] = "bmj", ["Tiếng Kulango Bouna"] = "nku", ["Bourbonnais-Berrichon"] = "roa-bbn", ["Bozaba"] = "bzo", ["Bragat"] = "aof", ["Brazilian Sign Language"] = "bzs", ["Brek Karen"] = "kvl", ["Tiếng Brem"] = "buq", ["Bribri"] = "bzd", ["British Sign Language"] = "bfi", ["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", ["Bubi"] = "buw", ["Bubia"] = "bbx", ["Budibud"] = "btp", ["Budong-Budong"] = "bdx", ["Budu"] = "buu", ["Buduma"] = "bdm", ["Budza"] = "bja", ["Buena Vista Yokuts"] = "nai-bvy", ["Buglere"] = "sab", ["Bugun"] = "bgg", ["Buhutu"] = "bxh", ["Bujhyal"] = "byh", ["Bukar-Sadung Bidayuh"] = "sdo", ["Bukat"] = "bvk", ["Bukawa"] = "buk", ["Bukit Malay"] = "bvu", ["Bukitan"] = "bkn", ["Buksa"] = "tkb", ["Bukusu"] = "bxk", ["Bulgarian Sign Language"] = "bqn", ["Bulgebi"] = "bmp", ["Buli (Ghana)"] = "bwu", ["Buli (Indonesia)"] = "bzq", ["Bulu (Cameroon)"] = "bum", ["Bulu (New Guinea)"] = "bjl", ["Bum"] = "bmv", ["Bumaji"] = "byp", ["Bumbita Arapesh"] = "aon", ["Bun"] = "buv", ["Buna"] = "bvn", ["Bunaba"] = "bck", ["Bunak"] = "bfn", ["Tiếng Bunama"] = "bdd", ["Bundeli"] = "bns", ["Bung"] = "bqd", ["Bungain"] = "but", ["Bunganditj"] = "xbg", ["Bungu"] = "wun", ["Bunoge"] = "dgb", ["Buol"] = "blf", ["Bura"] = "bwr", ["Burak"] = "bys", ["Buraka"] = "bkg", ["Burarra"] = "bvr", ["Burate"] = "bti", ["Burduna"] = "bxn", ["Bure"] = "bvh", ["Burgundian"] = "gem-bur", ["Burmeso"] = "bzu", ["Buru (Indonesia)"] = "mhs", ["Buru (Nigeria)"] = "bqw", ["Burui"] = "bry", ["Burumakok"] = "aip", ["Burun"] = "bdi", ["Burusu"] = "bqr", ["Buruwai"] = "asi", ["Busam"] = "bxs", ["Busami"] = "bsm", ["Busang Kayan"] = "bfg", ["Bushoong"] = "buf", ["Buso"] = "bso", ["Busoa"] = "bup", ["Busuu"] = "bju", ["Butbut Kalinga"] = "kyb", ["Butchulla"] = "xby", ["Butmas-Tur"] = "bnr", ["Buwal"] = "bhs", ["Buyeo"] = "xpy", ["Buyu"] = "byi", ["Buyuan Jino"] = "jiy", ["Bwa"] = "bww", ["Bwaidoka"] = "bwd", ["Bwala"] = "bnt-bwa", ["Bwanabwana"] = "tte", ["Bwatoo"] = "bwa", ["Bwela"] = "bwl", ["Bwile"] = "bwc", ["Bwisi"] = "bwz", ["Byangsi"] = "bee", ["Byep"] = "mkk", ["Bädi Kanum"] = "khd", ["Caac"] = "msq", ["Cabiyarí"] = "cbb", ["Cabécar"] = "cjp", ["Cacaloxtepec Mixtec"] = "miu", ["Cacaopera"] = "ccr", ["Cacua"] = "cbv", ["Cacán"] = "sai-cac", ["Caddo"] = "cad", ["Cafundó"] = "ccd", ["Cahuarano"] = "cah", ["Caka"] = "ckx", ["Cakchiquel-Quiché Mixed Language"] = "ckz", ["Cakfem-Mushere"] = "cky", ["Calabrian Greek"] = "grk-cal", ["Callawalla"] = "caw", ["Calusa"] = "nai-cal", ["Caluyanun"] = "clu", ["Caló"] = "rmq", ["Camarines Norte Agta"] = "abd", ["Cameroon Mambila"] = "mcu", ["Cameroon Pidgin"] = "wes", ["Campalagian"] = "cml", ["Camsá"] = "kbh", ["Camtho"] = "cmt", ["Candoshi-Shapra"] = "cbu", ["Canichana"] = "caz", ["Cao Miao"] = "cov", ["Capiznon"] = "cps", ["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", ["Cashibo-Cacataibo"] = "cbr", ["Cashinahua"] = "cbs", ["Casiguran Dumagat Agta"] = "dgc", ["Casuarina Coast Asmat"] = "asc", ["Catacao"] = "sai-cat", ["Catalan Sign Language"] = "csc", ["Catuquinaru"] = "sai-ctq", ["Catío Chibcha"] = "cba-cat", ["Cauca"] = "cca", ["Cavere"] = "awd-cav", ["Cavineña"] = "cav", ["Cayubaba"] = "cyb", ["Cayuse"] = "xcy", ["Cazcan"] = "azc-caz", ["Cañari"] = "sai-cnr", ["Cebaara Senoufo"] = "sef", ["Cemuhî"] = "cam", ["Cen"] = "cen", ["Central Asmat"] = "cns", ["Central Awyu"] = "awu", ["Tiếng Bontoc Trung"] = "lbk", ["Central Cagayan Agta"] = "agt", ["Central Grebo"] = "grv", ["Central Huishui Hmong"] = "hmc", ["Central Maewo"] = "mwo", ["Central Mahuatlán Zapoteco"] = "zam", ["Central Malay"] = "pse", ["Central Masela"] = "mxz", ["Central Mashan Hmong"] = "hmm", ["Central Melanau"] = "mel", ["Central Ojibwa"] = "ojc", ["Central Palawano"] = "plc", ["Central Pame"] = "pbs", ["Central Pomo"] = "poo", ["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", ["Chaap Wuurong"] = "tjw", ["Chadian Sign Language"] = "cds", ["Chaha"] = "sem-cha", ["Chairel"] = "sit-cha", ["Chakali"] = "cli", ["Chala"] = "cll", ["Chali"] = "tgf", ["Chamacoco"] = "ceg", ["Chamba Daka"] = "ccg", ["Chamba Leko"] = "ndi", ["Chambri"] = "can", ["Champenois"] = "roa-cha", ["Chang"] = "nbc", ["Changriwa"] = "cga", ["Chaná"] = "sai-chn", ["Chané"] = "caj", ["Chapacura"] = "sai-chp", ["Chara"] = "cra", ["Charrua"] = "sai-chr", ["Chaudangsi"] = "cdn", ["Chayahuita"] = "cbt", ["Chazumba Mixtec"] = "xtb", ["Che"] = "ruk", ["Cheke Holo"] = "mrn", ["Chemakum"] = "xch", ["Chenapian"] = "cjn", ["Chepya"] = "ycp", ["Cherepon"] = "cpn", ["Chesu"] = "ych", ["Chetco-Tolowa"] = "ctc", ["Chhintange"] = "ctn", ["Chhulung"] = "cur", ["Chiangmai Sign Language"] = "csd", ["Chiapanec"] = "cip", ["Chichicapan Zapotec"] = "zpv", ["Chichimeca-Jonaz"] = "pei", ["Chichonyi-Chidzihana-Chikauma"] = "coh", ["Chicomuceltec"] = "cob", ["Chiduruma"] = "dug", ["Chigmecatitlán Mixtec"] = "mii", ["Chilean Sign Language"] = "csg", ["Chilisso"] = "clh", ["Chiltepec Chinantec"] = "csa", ["Chimalapa Zoque"] = "zoh", ["Chimariko"] = "cid", ["Chimila"] = "cbg", ["Chimwiini"] = "bnt-cmw", ["Chinbon Chin"] = "cnb", ["Chinese Pidgin English"] = "cpi", ["Chinese Sign Language"] = "csl", ["Chipaya"] = "cap", ["Chiquihuitlán Mazatec"] = "maq", ["Chiquimulilla"] = "nai-chi", ["Chiquitano"] = "cax", ["Chirino"] = "sai-chi", ["Chiripá"] = "nhd", ["Chitimacha"] = "ctm", ["Chitkuli Kinnauri"] = "cik", ["Chitwania Tharu"] = "the", ["Tiếng Zapotec Choapan"] = "zpc", ["Chochotec"] = "coz", ["Chokri Naga"] = "nri", ["Chokwe"] = "cjk", ["Cholón"] = "cht", ["Chono"] = "sai-cno", ["Chopi"] = "cce", ["Chuabo"] = "chw", ["Chuanqiandian Cluster Miao"] = "cqd", ["Chuave"] = "cjv", ["Chug"] = "cvg", ["Chuj"] = "cac", ["Chuka"] = "cuh", ["Chukwa"] = "cuw", ["Chumburung"] = "ncu", ["Churuya"] = "sai-chu", ["Chácobo"] = "cao", ["Ci Gbe"] = "cib", ["Cibak"] = "ckl", ["Cicipu"] = "awc", ["Ciguayo"] = "nai-cig", ["Cinamiguin Manobo"] = "mkx", ["Cinda-Regi-Tiyal"] = "cdr", ["Cineni"] = "cie", ["Cinta Larga"] = "cin", ["Cishingini"] = "asg", ["Citak"] = "txt", ["Ciwogai"] = "tgd", ["Tiếng Gael cổ điển"] = "ghc", ["Classical Guaraní"] = "gn-cls", ["Classical Mandaic"] = "myz", ["Classical Newar"] = "nwc", ["Classical Quechua"] = "qwc", ["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", ["Cocopa"] = "coc", ["Cocos Islands Malay"] = "coa", ["Coeruna"] = "sai-coe", ["Cogui"] = "kog", ["Col"] = "liw", ["Colombian Sign Language"] = "csn", ["Colonia Tovar German"] = "gct", ["Columbia-Wenatchi"] = "col", ["Colán"] = "sai-col", ["Comaltepec Chinantec"] = "cco", ["Comechingon"] = "sai-cmg", ["Comecrudo"] = "xcm", ["Communicationssprache"] = "art-com", ["Como Karim"] = "cfg", ["Con"] = "cno", ["Coos"] = "csz", ["Copainalá Zoque"] = "zoc", ["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", ["Coyaima"] = "coy", ["Coyotepec Popoloca"] = "pbf", ["Coyutla Totonac"] = "toc", ["Crimean Gothic"] = "gme-cgo", ["Croatian Sign Language"] = "csq", ["Cruzeño"] = "crz", ["Cuban Sign Language"] = "csf", ["Cubeo"] = "cub", ["Cueva"] = "sai-cva", ["Cuiba"] = "cui", ["Cuitlatec"] = "cuy", ["Culina"] = "cul", ["Tiếng Culli"] = "sai-cul", ["Cun"] = "cuq", ["Cung"] = "cug", ["Curonian"] = "xcu", ["Curripaco"] = "kpc", ["Cutchi-Swahili"] = "ccl", ["Cuvok"] = "cuv", ["Cuyamecalco Mixtec"] = "xtu", ["Cwi Bwamu"] = "bwy", ["Czech Sign Language"] = "cse", ["Da'a Kaili"] = "kzf", ["Daai Chin"] = "dao", ["Daantanai'"] = "lni", ["Daba"] = "dbq", ["Dabe"] = "dbe", ["Dadanitic"] = "sem-dad", ["Dadi Dadi"] = "dda", ["Dadiya"] = "dbd", ["Tiếng Daga"] = "dgz", ["Dagaari Dioula"] = "dgd", ["Dagik"] = "dec", ["Dagoman"] = "dgn", ["Daho-Doo"] = "das", ["Dai"] = "dij", ["Dair"] = "drb", ["Dairi Batak"] = "btd", ["Dakaka"] = "bpa", ["Dakka"] = "dkk", ["Daloa Bété"] = "bev", ["Dama (Nigeria)"] = "dmm", ["Dama (Sierra Leone)"] = "dmn-dam", ["Damakawa"] = "dam", ["Damal"] = "uhn", ["Dampelas"] = "dms", ["Danaru"] = "dnr", ["Dandami Maria"] = "daq", ["Dangaura Tharu"] = "thl", ["Danish Sign Language"] = "dsl", ["Dano"] = "aso", ["Dao"] = "daz", ["Daonda"] = "dnd", ["Dar Fur Daju"] = "daj", ["Dar Sila Daju"] = "dau", ["Darai"] = "dry", ["Darkinjung"] = "xda", ["Darlong"] = "dln", ["Darmiya"] = "drd", ["Daro-Matu Melanau"] = "dro", ["Darumbal"] = "xgm", ["Dass"] = "dot", ["Datooga"] = "tcc", ["Daungwurrung"] = "dgw", ["Davawenyo"] = "daw", ["Dawawa"] = "dww", ["Dawera-Daweloor"] = "ddw", ["Day"] = "dai", ["Dayi"] = "dax", ["Dazaga"] = "dzg", ["Deccani"] = "dcc", ["Dedua"] = "ded", ["Defaka"] = "afn", ["Defi Gbe"] = "gbh", ["Deg"] = "mzw", ["Degenan"] = "dge", ["Dehwari"] = "deh", ["Dek"] = "dek", ["Dela-Oenale"] = "row", ["Delo"] = "ntr", ["Delta Yokuts"] = "nai-dly", ["Dem"] = "dem", ["Dema"] = "dmx", ["Demisa"] = "dei", ["Demta"] = "dmy", ["Tiếng Dena'ina"] = "tfn", ["Dendi"] = "ddn", ["Dengese"] = "dez", ["Dengka"] = "dnk", ["Deno"] = "dbb", ["Denya"] = "anv", ["Dení"] = "dny", ["Desano"] = "des", ["Dewas Rai"] = "dwz", ["Dewoin"] = "dee", ["Dezfuli"] = "def", ["Dghwede"] = "dgh", ["Dhaiso"] = "dhs", ["Dhalandji"] = "dhl", ["Dhao"] = "nfa", ["Dhofari Arabic"] = "adf", ["Dhudhuroa"] = "ddr", ["Dhungaloo"] = "dhx", ["Dhurga"] = "dhu", ["Dhuwal"] = "dwu", ["Dhuwaya"] = "dwy", ["Dia"] = "dia", ["Dibiyaso"] = "dby", ["Dibo"] = "dio", ["Dicamay Agta"] = "duy", ["Didinga"] = "did", ["Digo"] = "dig", ["Tiếng Dii"] = "dur", ["Dijim-Bwilim"] = "cfa", ["Dilling"] = "dil", ["Dima"] = "jma", ["Dimbong"] = "dii", ["Dinapigue Agta"] = "phi-din", ["Dineor"] = "mrx", ["Ding"] = "diz", ["Diodio"] = "ddi", ["Diri"] = "dwa", ["Dirim"] = "dir", ["Disa"] = "dsi", ["Diuwe"] = "diy", ["Diuxi-Tilantongo Mixtec"] = "xtd", ["Dixon Reef"] = "dix", ["Djadjawurrung"] = "dja", ["Djambarrpuyngu"] = "djr", ["Djangun"] = "djf", ["Djauan"] = "djn", ["Djawi"] = "djw", ["Djimini"] = "dyi", ["Djinba"] = "djb", ["Djiwarli"] = "djl", ["Dobel"] = "kvo", ["Dobu"] = "dob", ["Doe"] = "doe", ["Doga"] = "dgg", ["Doghoro"] = "dgx", ["Dogoso"] = "dgs", ["Dogosé"] = "dos", ["Dogul Dom"] = "dbg", ["Doka"] = "dbi", ["Doko-Uyanga"] = "uya", ["Dom"] = "doa", ["Dominican Sign Language"] = "doq", ["Dompo"] = "doy", ["Domu"] = "dof", ["Domung"] = "dev", ["Dondo"] = "dok", ["Dong"] = "doh", ["Dongo"] = "doo", ["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", ["Dothraki"] = "art-dtk", ["Doura"] = "don", ["Doutai"] = "tds", ["Doyayo"] = "dow", ["Drehu"] = "dhv", ["Duala"] = "dua", ["Duano"] = "dup", ["Duau"] = "dva", ["Dubu"] = "dmu", ["Dugun"] = "ndu", ["Duguri"] = "dbm", ["Dugwor"] = "dme", ["Duhwa"] = "kbz", ["Duit"] = "cba-dui", ["Duke"] = "nke", ["Dulbu"] = "dbo", ["Duli"] = "duz", ["Duma"] = "dma", ["Dumaitic"] = "sem-dum", ["Dumbea"] = "duf", ["Dumpas"] = "dmv", ["Dumun"] = "dui", ["Duna"] = "duc", ["Dungmali"] = "raa", ["Dungu"] = "dbv", ["Dura"] = "drq", ["Duri"] = "mvp", ["Duriankere"] = "dbn", ["Dusner"] = "dsn", ["Dusun Deyah"] = "dun", ["Dusun Malang"] = "duq", ["Dutch Sign Language"] = "dse", ["Duupa"] = "dae", ["Duvle"] = "duv", ["Duwai"] = "dbp", ["Duwet"] = "gve", ["Dwang"] = "nnu", ["Dyaabugay"] = "dyy", ["Dyaberdyaber"] = "dyb", ["Dyan"] = "dya", ["Dyangadi"] = "dyn", ["Dyugun"] = "dyd", ["Dza"] = "jen", ["Dzando"] = "dzn", ["Dzao Min"] = "bpn", ["Dzodinka"] = "add", ["Dâw"] = "kwa", ["E'ma Buyang"] = "yzg", ["Early Modern Korean"] = "ko-ear", ["Early Tripuri"] = "xtr", ["East Damar"] = "dmr", ["East Franconian"] = "vmf", ["East Kewa"] = "kjs", ["East Limba"] = "lma", ["East Makian"] = "mky", ["East Masela"] = "vme", ["East Nyala"] = "nle", ["East Tarangan"] = "tre", ["Eastern Bolivian Guaraní"] = "gui", ["Eastern Durango Nahuatl"] = "azd", ["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 Lalu"] = "yit", ["Tiếng Maninkakan Đông"] = "emk", ["Eastern Meohang"] = "emg", ["Eastern Muria"] = "emu", ["Eastern Ngad'a"] = "nea", ["Eastern Nisu"] = "nos", ["Eastern Penan"] = "pez", ["Eastern Pomo"] = "peb", ["Eastern Qiandong Miao"] = "hmq", ["Eastern Subanun"] = "sfe", ["Eastern Tawbuid"] = "bnj", ["Eastern Xiangxi Miao"] = "muq", ["Eastern Xwla Gbe"] = "gbx", ["Ebira"] = "igb", ["Ecuadorian Sign Language"] = "ecs", ["Ede Cabe"] = "cbj", ["Ede Ije"] = "ijj", ["Edera Awyu"] = "awy", ["Edolo"] = "etr", ["Edomite"] = "xdm", ["Edopi"] = "dbf", ["Efutop"] = "ofu", ["Egyptian Sign Language"] = "esl", ["Ejamat"] = "eja", ["Ekajuk"] = "eka", ["Ekari"] = "ekg", ["Ekele"] = "khy", ["Eki"] = "eki", ["Ekit"] = "eke", ["Ekpeye"] = "ekp", ["El Alto Zapotec"] = "zpp", ["El Hugeirat"] = "elh", ["Eleme"] = "elm", ["Elepi"] = "ele", ["Elip"] = "ekm", ["Elkei"] = "elk", ["Eloi"] = "art-elo", ["Elotepec Zapotec"] = "zte", ["Eloyi"] = "afo", ["Elseng"] = "mrf", ["Elu"] = "elu", ["Emae"] = "mmw", ["Emai"] = "ema", ["Eman"] = "emn", ["Embaloh"] = "emb", ["Emberá-Baudó"] = "bdc", ["Emberá-Catío"] = "cto", ["Emem"] = "enr", ["Emerillon"] = "eme", ["Emplawas"] = "emw", ["Enawené-Nawé"] = "unk", ["Ende"] = "end", ["Enga"] = "enq", ["Enggano"] = "eno", ["Enlhet"] = "enl", ["Enrekang"] = "ptt", ["Enu"] = "enu", ["Enwan"] = "env", ["Enwang"] = "enw", ["Enxet"] = "enx", ["Enya"] = "gey", ["Epena"] = "sja", ["Epi-Olmec"] = "xep", ["Epigraphic Mayan"] = "emy", ["Erave"] = "kjy", ["Ere"] = "twp", ["Erie"] = "iro-ere", ["Eritai"] = "ert", ["Erokwanas"] = "erw", ["Erre"] = "err", ["Erromintxela"] = "emx", ["Eruwa"] = "erh", ["Ese Ejja"] = "ese", ["Eshtehardi"] = "esh", ["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", ["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", ["Extremaduran"] = "ext", ["Eyak"] = "eya", ["Ezaa"] = "eza", ["Fagani"] = "faf", ["Faire Atta"] = "azt", ["Faita"] = "faj", ["Faiwol"] = "fai", ["Fakkanci"] = "gel", ["Fali"] = "fli", ["Fam"] = "fam", ["Fanamaket"] = "bjp", ["Fang (Beboid)"] = "fak", ["Fania"] = "fni", ["Fas"] = "fqs", ["Fasu"] = "faa", ["Fataleka"] = "far", ["Tiếng Fataluku"] = "ddg", ["Fayu"] = "fau", ["Fedan"] = "pdn", ["Fembe"] = "agl", ["Fer"] = "kah", ["Feroge"] = "fer", ["Filomena Mata-Coahuitlán Totonac"] = "tlp", ["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", ["Foia Foia"] = "ffi", ["Folopa"] = "ppo", ["Foma"] = "fom", ["Fongoro"] = "fgr", ["Foodo"] = "fod", ["Forak"] = "frq", ["Fordata"] = "frd", ["Fore"] = "for", ["Forest Nenets"] = "yrk-for", ["Fortsenal"] = "frt", ["French Belgian Sign Language"] = "sfb", ["French Sign Language"] = "fsl", ["Fuliiru"] = "flr", ["Fulniô"] = "fun", ["Fum"] = "fum", ["Tiếng Fungwa"] = "ula", ["Furu"] = "fuu", ["Futuna-Aniwa"] = "fut", ["Fuyug"] = "fuy", ["Fwe"] = "fwe", ["Fwâi"] = "fwa", ["Fyam"] = "pym", ["Fyer"] = "fie", ["Ga'anda"] = "gqa", ["Ga'dang"] = "gdg", ["Gaa"] = "ttb", ["Gaam"] = "tbi", ["Gabadi"] = "kbt", ["Gabi"] = "gbw", ["Gabrielino-Fernandeño"] = "xgf", ["Gadang"] = "gdk", ["Gade"] = "ged", ["Gadjerawang"] = "gdh", ["Gadsup"] = "gaj", ["Gafat"] = "gft", ["Gagadu"] = "gbu", ["Gagnoa Bété"] = "btg", ["Gaikundi"] = "gbf", ["Gaina"] = "gcn", ["Gal"] = "gap", ["Galambu"] = "glo", ["Galela"] = "gbi", ["Galeya"] = "gar", ["Galice"] = "gce", ["Galindian"] = "xgl", ["Gallaecian"] = "cel-gal", ["Galoli"] = "gal", ["Gambera"] = "gma", ["Gamela"] = "sai-gam", ["Gamkonora"] = "gak", ["Gamo-Ningi"] = "bte", ["Gana"] = "gnq", ["Ganang"] = "gne", ["Gane"] = "gzn", ["Ganggalida"] = "gcd", ["Ganglau"] = "ggl", ["Gangte"] = "gnb", ["Gangulu"] = "gnl", ["Gants"] = "gao", ["Ganzi"] = "gnz", ["Gao"] = "gga", ["Gapapaiwa"] = "pwg", ["Garawa"] = "wrk", ["Garingbal"] = "xgi", ["Garus"] = "gyb", ["Garza"] = "xgr", ["Gashowu"] = "nai-gsy", ["Gavak"] = "dmc", ["Gavar"] = "gou", ["Gavião do Jiparaná"] = "gvo", ["Gayo"] = "gay", ["Gayón"] = "sai-gay", ["Gbagyi"] = "gbr", ["Gban"] = "ggu", ["Gbanu"] = "gbv", ["Gbanziri"] = "gbg", ["Gbari"] = "gby", ["Gbaya"] = "gba", ["Gbaya-Bossangoa"] = "gbp", ["Gbaya-Bozoum"] = "gbq", ["Gbaya-Mbodomo"] = "gmm", ["Gbayi"] = "gyg", ["Gbesi Gbe"] = "gbs", ["Gbii"] = "ggb", ["Gbin"] = "xgb", ["Gboloo Grebo"] = "gec", ["Gciriku"] = "diu", ["Gcwi"] = "gwj", ["Ge"] = "hmj", ["Gebe"] = "gei", ["Gedaged"] = "gdd", ["Geji"] = "gji", ["Gela"] = "nlg", ["Gelao"] = "gio", ["Gele'"] = "sbc", ["Geme"] = "geq", ["Gende"] = "gaf", ["Gengle"] = "geg", ["Gepo"] = "ygp", ["Gera"] = "gew", ["German Sign Language"] = "gsg", ["Geruma"] = "gea", ["Geser-Gorom"] = "ges", ["Gey"] = "guv", ["Ghanaian Sign Language"] = "gse", ["Ghandruk Sign Language"] = "gds", ["Ghanongga"] = "ghn", ["Ghari"] = "gri", ["Ghayavi"] = "bmk", ["Ghera"] = "ghr", ["Ghulfan"] = "ghl", ["Giangan"] = "bgi", ["Gibanawa"] = "gib", ["Gidar"] = "gid", ["Gikyode"] = "acd", ["Gilima"] = "gix", ["Gimi (Austronesian)"] = "gip", ["Gimme"] = "kmp", ["Gimnime"] = "gmn", ["Ginuman"] = "gnm", ["Girawa"] = "bbr", ["Githabul"] = "gih", ["Gitua"] = "ggt", ["Giyug"] = "giy", ["Gizrra"] = "tof", ["Glaro-Twabo"] = "glr", ["Glavda"] = "glw", ["Glio-Oubi"] = "oub", ["Gnau"] = "gnu", ["Goa'uld"] = "art-gld", ["Goaria"] = "gig", ["Gobasi"] = "goi", ["Gobu"] = "gox", ["Godié"] = "god", ["Godwari"] = "gdx", ["Goemai"] = "ank", ["Gogo"] = "gog", ["Gogodala"] = "ggw", ["Gokana"] = "gkn", ["Gokhy"] = "sit-gkh", ["Gola"] = "gol", ["Golin"] = "gvf", ["Golpa"] = "lja", ["Gondi"] = "gon", ["Gongduk"] = "goe", ["Gonja"] = "gjn", ["Goo"] = "gov", ["Gor"] = "gqr", ["Gorakor"] = "goc", ["Gorap"] = "goq", ["Goreng"] = "xgg", ["Gorovu"] = "grq", ["Gottscheerish"] = "gmw-gts", ["Goundo"] = "goy", ["Gowlan"] = "goj", ["Gowro"] = "gwf", ["Gozarkhani"] = "goz", ["Grangali"] = "nli", ["Grass Koiari"] = "kbk", ["Grebo"] = "grb", ["Greek Sign Language"] = "gss", ["Green Gelao"] = "giq", ["Green Hmong"] = "hnj", ["Grenadian Creole English"] = "gcl", ["Gresi"] = "grs", ["Groma"] = "gro", ["Gros Ventre"] = "ats", ["Gua"] = "gwx", ["Guahibo"] = "guh", ["Guambiano"] = "gum", ["Guamo"] = "sai-gmo", ["Guanano"] = "gvc", ["Guatemalan Sign Language"] = "gsm", ["Guató"] = "gta", ["Guayabero"] = "guo", ["Guazacapán"] = "nai-guz", ["Gudang"] = "xgd", ["Gudanji"] = "nji", ["Gude"] = "gde", ["Gudu"] = "gdu", ["Guduf-Gava"] = "gdf", ["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-Bissau Sign Language"] = "lgs", ["Guinean Sign Language"] = "gus", ["Guiqiong"] = "gqi", ["Gula"] = "glu", ["Gula'alaa"] = "gmb", ["Gule"] = "gly", ["Gullah"] = "gul", ["Gumalu"] = "gmu", ["Gumatj"] = "gnn", ["Gumawana"] = "gvs", ["Gundi"] = "gdi", ["Gunditjmara"] = "gjm", ["Gundungurra"] = "xrd", ["Gungabula"] = "gyf", ["Gungu"] = "rub", ["Guntai"] = "gnt", ["Gunu"] = "yas", ["Gunwinggu"] = "gup", ["Tiếng Gunya"] = "gyy", ["Gupa-Abawa"] = "gpa", ["Gupapuyngu"] = "guf", ["Guragone"] = "gge", ["Guramalum"] = "grz", ["Gureng Gureng"] = "gnr", ["Gurgula"] = "ggg", ["Guriaso"] = "grx", ["Gurindji"] = "gue", ["Gurjar Apabhramsa"] = "inc-gup", ["Gurmana"] = "gvm", ["Guro"] = "goa", ["Guruntum"] = "grd", ["Gusan"] = "gsn", ["Gusii"] = "guz", ["Gusilay"] = "gsl", ["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", ["Gyalsumdo"] = "gyo", ["Gyele"] = "gyi", ["Gyem"] = "gye", ["Güenoa"] = "sai-gue", ["Habu"] = "hbu", ["Hadothi"] = "hoj", ["Hadrami"] = "xhd", ["Hadza"] = "hts", ["Haeke"] = "aek", ["Hahon"] = "hah", ["Haigwai"] = "hgw", ["Hainyaxo Bozo"] = "bzx", ["Haiphong Sign Language"] = "haf", ["Haitian Vodoun Culture Language"] = "hvc", ["Haiǁom"] = "hgm", ["Haji"] = "hji", ["Hakö"] = "hao", ["Halang Doan"] = "hld", ["Halia"] = "hla", ["Hamap"] = "hmu", ["Hamba"] = "hba", ["Hamtai"] = "hmt", ["Hanga"] = "hag", ["Hanga Hundi"] = "wos", ["Hanoi Sign Language"] = "hab", ["Harami"] = "xha", ["Haraza"] = "nub-har", ["Haruai"] = "tmd", ["Haruku"] = "hrk", ["Harzani"] = "hrz", ["Hasaitic"] = "sem-has", ["Hasha"] = "ybj", ["Tiếng Ả Rập Hassaniya"] = "mey", ["Tiếng Hatam"] = "had", ["Hausa Sign Language"] = "hsl", ["Haveke"] = "hvk", ["Havu"] = "hav", ["Hawai'i Pidgin Sign Language"] = "hps", ["Hawaiian Creole"] = "hwc", ["Haya"] = "hay", ["Hdi"] = "xed", ["Hehe"] = "heh", ["Helong"] = "heg", ["Helu"] = "elu-prk", ["Hema"] = "nix", ["Hemba"] = "hem", ["Herdé"] = "hed", ["Hermit"] = "llf", ["Hewa"] = "ham", ["Heyo"] = "auk", ["Hibito"] = "hib", ["Hidatsa"] = "hid", ["Highland Konjo"] = "kjk", ["Highland Oaxaca Chontal"] = "chd", ["Highland Puebla Nahuatl"] = "azz", ["Hijuk"] = "hij", ["Himarimã"] = "hir", ["Himyaritic"] = "sem-him", ["Hismaic"] = "sem-his", ["Hitchiti"] = "nai-hit", ["Hitu"] = "htu", ["Hixkaryana"] = "hix", ["Hlepho Phowa"] = "yhl", ["Hlersu"] = "hle", ["Hmar"] = "hmr", ["Hmong Dô"] = "hmv", ["Hmong Shua"] = "hmz", ["Hmwaveke"] = "mrk", ["Ho Chi Minh City Sign Language"] = "hos", ["Hobyót"] = "hoh", ["Hoia Hoia"] = "hhi", ["Holikachuk"] = "hoi", ["Holma"] = "hod", ["Holoholo"] = "hoo", ["Holu"] = "hol", ["Homa"] = "hom", ["Honduran Lenca"] = "len", ["Honduras Sign Language"] = "hds", ["Hone"] = "juh", ["Hong Kong Sign Language"] = "hks", ["Honi"] = "how", ["Horned Miao"] = "hrm", ["Horo"] = "hor", ["Horom"] = "hoe", ["Hote"] = "hot", ["Hoti"] = "hti", ["Hovongan"] = "hov", ["Hoyahoya"] = "hhy", ["Hrangkhol"] = "hra", ["Hruso"] = "hru", ["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", ["Hukumina"] = "huw", ["Hula"] = "hul", ["Tiếng Huli"] = "hui", ["Hulung"] = "huk", ["Humene"] = "huf", ["Hun"] = "uth", ["Hunde"] = "hke", ["Hungana"] = "hum", ["Hungarian Sign Language"] = "hsh", ["Hungworo"] = "nat", ["Hunjara-Kaina Ke"] = "hkk", ["Hunnic"] = "xhc", ["Hupla"] = "hap", ["Hutterisch"] = "geh", ["Hwana"] = "hwo", ["Hya"] = "hya", ["Hän"] = "haa", ["Hértevin"] = "hrt", ["I-Wak"] = "iwk", ["Iamalele"] = "yml", ["Iatmul"] = "ian", ["Iau"] = "tmu", ["Ibali Teke"] = "tek", ["Ibani"] = "iby", ["Iberian"] = "xib", ["Iboko"] = "bkp", ["Ibu"] = "ibu", ["Icelandic Sign Language"] = "icl", ["Iceve-Maci"] = "bec", ["Idakho-Isukha-Tiriki"] = "ida", ["Idaté"] = "idt", ["Idere"] = "ide", ["Idesa"] = "ids", ["Idi"] = "idi", ["Idoma"] = "idu", ["Idon"] = "idc", ["Idun"] = "ldb", ["Iduna"] = "viv", ["Ifo"] = "iff", ["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", ["Iku-Gora-Ankwa"] = "ikv", ["Ikulu"] = "ikl", ["Ikwo"] = "iqw", ["Ila"] = "ilb", ["Ile Ape"] = "ila", ["Ilgar"] = "ilg", ["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", ["Indian Sign Language"] = "ins", ["Indonesian Bajau"] = "bdl", ["Indonesian Sign Language"] = "inl", ["Indri"] = "idr", ["Indus Valley Language"] = "xiv", ["Inebu One"] = "oin", ["Ineseño"] = "inz", ["Inga"] = "inb", ["Inlaod Itneg"] = "iti", ["Inoke-Yate"] = "ino", ["Inonhan"] = "loc", ["Inpui Naga"] = "nkf", ["International Sign"] = "ils", ["Inuinnaqtun"] = "esx-inq", ["Inuit Sign Language"] = "iks", ["Inuktun"] = "esx-ink", ["Ipai"] = "nai-ipa", ["Ipalapa Amuzgo"] = "azm", ["Ipiko"] = "ipo", ["Ipili"] = "ipi", ["Ipulo"] = "ass", ["Iquito"] = "iqu", ["Ir"] = "irr", ["Irantxe"] = "irn", ["Iranun"] = "ill", ["Irarutu"] = "irh", ["Iraya"] = "iry", ["Iresim"] = "ire", ["Iriga Bicolano"] = "bto", ["Irish Sign Language"] = "isg", ["Isabi"] = "isa", ["Isanzu"] = "isn", ["Isarog Agta"] = "agk", ["Isaurian"] = "und-isa", ["Isconahua"] = "isc", ["Isebe"] = "igo", ["Isinai"] = "inn", ["Isirawa"] = "srl", ["Islander Creole English"] = "icr", ["Israeli Sign Language"] = "isr", ["Isthmus Mixe"] = "mir", ["Isu"] = "isu", ["Isubu"] = "szv", ["Italian Sign Language"] = "ise", ["Itawit"] = "itv", ["Iteri"] = "itr", ["Itik"] = "itx", ["Ito"] = "itw", ["Itundujia Mixtec"] = "mce", ["Itzá"] = "itz", ["Iwal"] = "kbm", ["Iwam"] = "iwm", ["Iwur"] = "iwo", ["Ixcatec"] = "ixc", ["Ixcatlán Mazatec"] = "mzi", ["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", ["Izora"] = "cbo", ["Iñapari"] = "inp", ["Jabem"] = "jae", ["Jabutí"] = "jbt", ["Jad"] = "jda", ["Jadgali"] = "jdg", ["Jahanka"] = "jad", ["Jair Awyu"] = "awv", ["Jakati"] = "jat", ["Jalapa de Díaz Mazatec"] = "maj", ["Jalkunan"] = "bxl", ["Jamaican Country Sign Language"] = "jcs", ["Jamaican Sign Language"] = "jls", ["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", ["Japrería"] = "jru", ["Jara"] = "jaf", ["Jaru"] = "ddj", ["Jassic"] = "ysc", ["Jawe"] = "jaz", ["Jaya"] = "jyy", ["Jebero"] = "jeb", ["Jeikó"] = "sai-jko", ["Jenaama Bozo"] = "bze", ["Jeng"] = "jeg", ["Jere"] = "jer", ["Jeri Kuo"] = "jek", ["Jerung"] = "jee", ["Jhankot Sign Language"] = "jhs", ["Jiamao"] = "jio", ["Jiba"] = "juo", ["Jibu"] = "jib", ["Jilbe"] = "jie", ["Jili"] = "mgi", ["Jilim"] = "jil", ["Jimi"] = "jmi", ["Jimjimen"] = "jim", ["Jina"] = "jia", ["Jingulu"] = "jig", ["Jiongnai Bunu"] = "pnu", ["Jirajara"] = "sai-jrj", ["Jiru"] = "jrr", ["Jita"] = "jit", ["Joba"] = "job", ["Jofotek-Bromnya"] = "jbr", ["Jola-Fonyi"] = "dyo", ["Jola-Kasa"] = "csk", ["Jonkor Bourmataguil"] = "jeu", ["Jordanian Sign Language"] = "jos", ["Jorá"] = "jor", ["Jowulu"] = "jow", ["Ju"] = "juu", ["Jumla Sign Language"] = "jus", ["Jumli"] = "jml", ["Jungle Inga"] = "inj", ["Juquila Mixe"] = "mxq", ["Jur Modo"] = "bex", ["Jurúna"] = "jur", ["Jutiapa"] = "nai-jtp", ["Juwal"] = "mwb", ["Juxtlahuaca Mixtec"] = "vmc", ["Jwira-Pepesa"] = "jwi", ["Júma"] = "jua", ["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", ["Kabola"] = "klz", ["Kabore One"] = "onk", ["Kabras"] = "lkb", ["Kaburi"] = "uka", ["Kabutra"] = "kbu", ["Kabwa"] = "cwa", ["Kabwari"] = "kcw", ["Kachari"] = "xac", ["Kacipo-Balesi"] = "koe", ["Kaco'"] = "xkk", ["Kadai"] = "kzd", ["Kadara"] = "kad", ["Kadaru"] = "kdu", ["Kadiwéu"] = "kbc", ["Kado"] = "kdv", ["Kadugli"] = "xtc", ["Kaduo"] = "ktp", ["Kaera"] = "jka", ["Kafoa"] = "kpu", ["Kagan Kalagan"] = "kll", ["Kagate"] = "syw", ["Kagoma"] = "kdm", ["Kagoro"] = "xkg", ["Kagulu"] = "kki", ["Kahe"] = "hka", ["Kahua"] = "agw", ["Kaian"] = "kct", ["Kaibobo"] = "kzb", ["Kaidipang"] = "kzp", ["Kaiep"] = "kbw", ["Kaike"] = "kzq", ["Kaiku"] = "kkq", ["Kaimbulawa"] = "zka", ["Kaimbé"] = "xai", ["Kairak"] = "ckr", ["Kairiru"] = "kxa", ["Kairui-Midiki"] = "krd", ["Kais"] = "kzm", ["Kaivi"] = "kce", ["Kaiwá"] = "kgk", ["Kaiy"] = "tcq", ["Kajakse"] = "ckq", ["Kajali"] = "xkj", ["Kajaman"] = "kag", ["Kakabe"] = "kke", ["Kakanda"] = "kka", ["Kakihum"] = "kxe", ["Kako"] = "kkj", ["Kakwa"] = "keo", ["Kala"] = "kcl", ["Kala Lagaw Ya"] = "mwp", ["Kalaamaya"] = "lkm", ["Kalabakan"] = "kve", ["Kalabari"] = "ijn", ["Kalabra"] = "kzz", ["Kalagan"] = "kqe", ["Kalaktang Monpa"] = "kkf", ["Kalam"] = "kmh", ["Kalamsé"] = "knz", ["Kalanadi"] = "wkl", ["Kalanga"] = "kck", ["Kalapuya"] = "kyl", ["Kalarko"] = "kba", ["Kalasuri"] = "xme-kls", ["Kalenjin"] = "kln", ["Kalinago"] = "crb", ["Kalkatungu"] = "ktg", ["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", ["Kamayurá"] = "kay", ["Kamba"] = "kam", ["Kambaira"] = "kyy", ["Kamberataro"] = "kbv", ["Kamberau"] = "irx", ["Kambiwá"] = "xbw", ["Kami"] = "kmi", ["Kamkata-viri"] = "bsh", ["Kamo"] = "kcq", ["Kamoro"] = "kgq", ["Kamu"] = "xmu", ["Kamwe"] = "hig", ["Kanakuru"] = "kna", ["Kanamari"] = "knm", ["Kanashi"] = "xns", ["Kanasi"] = "soq", ["Kandas"] = "kqw", ["Kandawo"] = "gam", ["Kande"] = "kbs", ["Kang"] = "kyp", ["Kanga"] = "kcp", ["Kanggape"] = "igm", ["Kango"] = "kty", ["Kango-Sua"] = "kzy", ["Kaniet"] = "ktk", ["Kanikkaran"] = "kev", ["Kaningdon-Nindem"] = "kdp", ["Kaningi"] = "kzo", ["Kaningra"] = "knr", ["Kaninuwa"] = "wat", ["Kanite"] = "kmu", ["Kanjari"] = "kft", ["Kanju"] = "kbe", ["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", ["Kapriman"] = "dju", ["Kaptiau"] = "kbi", ["Kapya"] = "klo", ["Kara (New Guinea)"] = "leu", ["Kara (Tanzania)"] = "reg", ["Karadjeri"] = "gbd", ["Karaga Mandaya"] = "mry", ["Karami"] = "xar", ["Karamojong"] = "kdj", ["Karang"] = "kzr", ["Karanga"] = "kth", ["Karankawa"] = "zkk", ["Karas"] = "kgv", ["Karawa"] = "xrw", ["Kare (Africa)"] = "kbn", ["Kare (New Guinea)"] = "kmf", ["Karey"] = "kyd", ["Kari"] = "kbj", ["Karingani"] = "kgn", ["Karipuna"] = "kuq", ["Karipúna"] = "kgm", ["Karipúna Creole French"] = "kmv", ["Kariya"] = "kil", ["Kariyarra"] = "vka", ["Karkar-Yuri"] = "yuj", ["Karkin"] = "krb", ["Karko"] = "kko", ["Karnai"] = "bbv", ["Karo Batak"] = "btx", ["Karok"] = "kyh", ["Karolanos"] = "kyn", ["Karon"] = "krx", ["Karon Dori"] = "kgw", ["Karore"] = "xkx", ["Karranga"] = "xrq", ["Karuwali"] = "rxw", ["Kasanga"] = "ccj", ["Kasem"] = "xsm", ["Kasiguranin"] = "ksn", ["Kaska"] = "kkz", ["Kaskean"] = "zsk", ["Kaskihá"] = "gva", ["Kassite"] = "und-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", ["Katukina"] = "knt", ["Kaulong"] = "pss", ["Kaur"] = "vkk", ["Kaure"] = "bpp", ["Kauwera"] = "xau", ["Kawacha"] = "kcb", ["Kawaiisu"] = "xaw", ["Kawe"] = "kgb", ["Kawishana"] = "awd-kaw", ["Kaxararí"] = "ktx", ["Kaxuyana"] = "kbb", ["Kaya"] = "zra", ["Kayabí"] = "kyz", ["Kayagar"] = "kyt", ["Kayan Mahakam"] = "xay", ["Kayan River Kayan"] = "xkn", ["Kayardild"] = "gyd", ["Kayeli"] = "kzl", ["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", ["Keley-I Kallahan"] = "ify", ["Tiếng 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", ["Kenswei Nsei"] = "ndb", ["Kenyan Sign Language"] = "xki", ["Kenyi"] = "lke", ["Keoru-Ahia"] = "xeu", ["Kepkiriwát"] = "kpn", ["Kepo'"] = "kuk", ["Kera"] = "ker", ["Kerak"] = "hhr", ["Kereho"] = "xke", ["Kerewe"] = "ked", ["Kerewo"] = "kxz", ["Kerinci"] = "kvr", ["Kesawai"] = "xes", ["Ketangalan"] = "kae", ["Kete"] = "kcv", ["Ketengban"] = "xte", ["Ketum"] = "ktt", ["Kewa"] = "kew", ["Keyagana"] = "kyg", ["Kgalagadi"] = "xkv", ["Khana"] = "ogo", ["Khandeshi"] = "khn", ["Khao"] = "xao", ["Kharam Naga"] = "kfw", ["Kharia Thar"] = "ksy", ["Khayo"] = "lko", ["Khe"] = "kqg", ["Khehek"] = "tlx", ["Khetrani"] = "xhe", ["Khezha Naga"] = "nkh", ["Khirwar"] = "kwx", ["Khisa"] = "kqm", ["Khlor"] = "llo", ["Khlula"] = "ykl", ["Khoibu Naga"] = "nkb", ["Khoini"] = "xkc", ["Kholok"] = "ktc", ["Khumi Chin"] = "cnk", ["Khwe"] = "xuu", ["Kibala"] = "blv", ["Kibena"] = "bez", ["Kibet"] = "kie", ["Kibiri"] = "prm", ["Kichwa"] = "qwe-kch", ["Kikami"] = "kcu", ["Kilit"] = "xme-klt", ["Kilivila"] = "kij", ["Kiliwa"] = "klb", ["Kilmeri"] = "kih", ["Kimaama"] = "kig", ["Kimaragang"] = "kqr", ["Kimbu"] = "kiv", ["Kimki"] = "sbt", ["Kimré"] = "kqp", ["Kinabalian"] = "cbw", ["Kinalakna"] = "kco", ["Kinga"] = "zga", ["Kings River Yokuts"] = "nai-kry", ["Kinikinao"] = "gqn", ["Kinuku"] = "kkd", ["Kioko"] = "ues", ["Kiong"] = "kkm", ["Kiorr"] = "xko", ["Kipfokomo"] = "pkb", ["Kipsigis"] = "sgc", ["Kiput"] = "kyi", ["Kir-Balar"] = "kkr", ["Kire"] = "geb", ["Kirfi"] = "kks", ["Kirikiri"] = "kiy", ["Kirya-Konzel"] = "fkk", ["Kis"] = "kis", ["Kisa"] = "lks", ["Kisankasa"] = "kqh", ["Kisar"] = "kje", ["Kisi"] = "kiz", ["Kita Maninkakan"] = "mwk", ["Kitanemuk"] = "azc-ktn", ["Kitembo"] = "tbt", ["Kitja"] = "gia", ["Kitsai"] = "kii", ["Kiunum"] = "wei", ["Kla"] = "lda", ["Klamath-Modoc"] = "kla", ["Klao"] = "klu", ["Klias River Kadazan"] = "kqt", ["Ko"] = "fuj", ["Koasati"] = "cku", ["Koba"] = "kpd", ["Kobiana"] = "kcj", ["Kobol"] = "kgu", ["Kochila Tharu"] = "thq", ["Kodaku"] = "ksz", ["Kodeoha"] = "vko", ["Kodi"] = "kod", ["Kodia"] = "kwp", ["Koenoem"] = "kcs", ["Kofa"] = "kso", ["Kofei"] = "kpi", ["Kofyar"] = "kwl", ["Kohin"] = "kkx", ["Kohumono"] = "bcs", ["Koi"] = "kkt", ["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", ["Kolbila"] = "klc", ["Kolibugan Subanon"] = "skn", ["Kolom"] = "klm", ["Koluwawa"] = "klx", ["Kom (India)"] = "kmm", ["Koma"] = "kmy", ["Komba"] = "kpf", ["Kombai"] = "tyn", ["Kombio"] = "xbi", ["Komering"] = "kge", ["Kominimung"] = "xoi", ["Kompane"] = "kvp", ["Komyandaret"] = "kzv", ["Kon Keu"] = "kkn", ["Konai"] = "kxw", ["Konda"] = "knd", ["Koneraw"] = "kdw", ["Konkomba"] = "xon", ["Konni"] = "kma", ["Kono (Guinea)"] = "knu", ["Kono (Nigeria)"] = "klk", ["Kono (Sierra Leone)"] = "kno", ["Konomala"] = "koa", ["Konomihu"] = "nai-knm", ["Konongo"] = "kcz", ["Konyak Naga"] = "nbe", ["Konyanka Maninka"] = "mku", ["Konzo"] = "koo", ["Kopar"] = "xop", ["Kopkaka"] = "opk", ["Korafe-Yegha"] = "kpr", ["Korak"] = "koz", ["Korana"] = "kqz", ["Korandje"] = "kcy", ["Korean Sign Language"] = "kvk", ["Koreguaje"] = "coe", ["Koresh-e Rostam"] = "okh", ["Korlai Creole Portuguese"] = "vkp", ["Koro (India)"] = "jkr", ["Koro (New Guinea)"] = "kxr", ["Koro (Vanuatu)"] = "krf", ["Koro (West Africa)"] = "kfo", ["Koromfé"] = "kfz", ["Koromira"] = "kqj", ["Koronadal Blaan"] = "bpr", ["Koroni"] = "xkq", ["Korop"] = "krp", ["Koropó"] = "xxr", ["Koroshi"] = "ktl", ["Korowai"] = "khe", ["Korubo"] = "xor", ["Korupun-Sela"] = "kpq", ["Kosadle"] = "kiq", ["Kosarek Yale"] = "kkl", ["Kosena"] = "kze", ["Koshin"] = "kid", ["Kota (Gabon)"] = "koq", ["Kota Bangun Kutai Malay"] = "mqg", ["Kota Marudu Talantang"] = "grm", ["Kota Marudu Tinagas"] = "ktr", ["Kotafon Gbe"] = "kqk", ["Koti"] = "eko", ["Kou"] = "snz", ["Kouya"] = "kyf", ["Kovai"] = "kqb", ["Kove"] = "kvc", ["Kowaki"] = "xow", ["Kowiai"] = "kwh", ["Koy Sanjaq Surat"] = "kqd", ["Koyaga"] = "kga", ["Koyo"] = "koh", ["Koyra Chiini"] = "khq", ["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", ["Krenak"] = "kqq", ["Krevinian"] = "zkv", ["Kreye"] = "xre", ["Krikati-Timbira"] = "xri", ["Krim"] = "krm", ["Krisa"] = "ksi", ["Kristang"] = "mcm", ["Krobu"] = "kxb", ["Krongo"] = "kgo", ["Kua"] = "tyu", ["Kua-nsi"] = "ykn", ["Kuamasi"] = "yku", ["Kuan"] = "uan", ["Kuanhua"] = "xnh", ["Kube"] = "kgf", ["Kubi"] = "kof", ["Kubo"] = "jko", ["Kubu"] = "kvb", ["Kucong"] = "lkc", ["Kudu-Camo"] = "kov", ["Kugama"] = "kow", ["Kugbo"] = "kes", ["Kugu-Muminh"] = "xmh", ["Kui (Indonesia)"] = "kvd", ["Kuijau"] = "dkr", ["Kuikúro"] = "kui", ["Kujarge"] = "vkj", ["Kuk"] = "kfn", ["Kukatja"] = "kux", ["Kukele"] = "kez", ["Kukkuzi"] = "urj-kuk", ["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", ["Kulon"] = "uon", ["Kulung"] = "kle", ["Kumak"] = "nee", ["Kumalu"] = "ksl", ["Kumam"] = "kdi", ["Kuman"] = "kue", ["Kumaoni"] = "kfy", ["Kumba"] = "ksm", ["Kumbainggar"] = "kgs", ["Kumbaran"] = "wkb", ["Kumhali"] = "kra", ["Kumu"] = "kmw", ["Kumukio"] = "kuo", ["Kunama"] = "kun", ["Kunbarlang"] = "wlg", ["Kunda"] = "kdn", ["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", ["Kuot"] = "kto", ["Kupa"] = "kug", ["Kupang Malay"] = "mkn", ["Kupsabiny"] = "kpz", ["Kur"] = "kuv", ["Kura Ede Nago"] = "nqk", ["Kurama"] = "krh", ["Kuranko"] = "knk", ["Kuri"] = "nbn", ["Kuria"] = "kuj", ["Kurmukar"] = "kfv", ["Kurnai"] = "unn", ["Kurrama"] = "vku", ["Kurti"] = "ktm", ["Kurtjar"] = "gdj", ["Kurudu"] = "kjr", ["Kuruáya"] = "kyr", ["Tiếng Kusaal"] = "kus", ["Kusaghe"] = "ksg", ["Kustenau"] = "awd-kus", ["Kusu"] = "ksv", ["Kusunda"] = "kgg", ["Kuthant"] = "xut", ["Kutto"] = "kpa", ["Kutu"] = "kdc", ["Kuturmi"] = "khj", ["Kuuk Thaayorre"] = "thd", ["Kuuk Yak"] = "uky", ["Kuuku-Ya'u"] = "kuy", ["Kuvale"] = "olu", ["Kuwaa"] = "blh", ["Kuwaataay"] = "cwt", ["Kuwani"] = "paa-kwn", ["Kwa'"] = "bko", ["Kwaami"] = "ksq", ["Kwadi"] = "kwz", ["Kwaio"] = "kwd", ["Kwaja"] = "kdz", ["Kwak"] = "kwq", ["Kwakum"] = "kwu", ["Kwalhioqua-Tlatskanai"] = "qwt", ["Kwama"] = "kmq", ["Kwambi"] = "kwm", ["Kwamera"] = "tnk", ["Kwami"] = "ktf", ["Kwamtim One"] = "okk", ["Kwang"] = "kvi", ["Kwanga"] = "kwj", ["Kwangali"] = "kwn", ["Kwanka"] = "bij", ["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", ["Kwoma"] = "kmo", ["Kwomtari"] = "kwo", ["Kyak"] = "bka", ["Kyaka"] = "kyc", ["Kyan-Karyaw Naga"] = "nqq", ["Kyenele"] = "kql", ["Kyenga"] = "tye", ["Kyerung"] = "kgy", ["Kélé"] = "keb", ["Kómnzo"] = "paa-kom", ["La'bi"] = "lbi", ["Laal"] = "gdm", ["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", ["Tiếng La Ha"] = "lha", ["Lahanan"] = "lhn", ["Lahu Shi"] = "lhi", ["Lahul Lohar"] = "lhl", ["Laimbue"] = "lmx", ["Laitu Chin"] = "clj", ["Laiyolo"] = "lji", ["Laka"] = "lak", ["Lake Miwok"] = "lmw", ["Lakha"] = "lkh", ["Lakkia"] = "lbc", ["Lakon"] = "lkn", ["Lakondê"] = "lkd", ["Lakota Dida"] = "dic", ["Lala (New Guinea)"] = "nrz", ["Lala (South Africa)"] = "bnt-lal", ["Lala-Bisa"] = "leb", ["Lala-Roba"] = "lla", ["Lalana Chinantec"] = "cnl", ["Lamaholot"] = "slp", ["Lamalera"] = "lmr", ["Lamang"] = "hia", ["Lamatuka"] = "lmq", ["Lamba"] = "lam", ["Lambichhong"] = "lmh", ["Lambya"] = "lai", ["Lame"] = "bma", ["Lamenu"] = "lmu", ["Lamet"] = "lbn", ["Lamja-Dengsa-Tola"] = "ldh", ["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", ["Lao Naga"] = "nlq", ["Laopang"] = "lbg", ["Laos Sign Language"] = "lso", ["Lapaguía-Guivini Zapotec"] = "ztl", ["Lapine"] = "art-lap", ["Lapuyan Subanun"] = "laa", ["Laragia"] = "lrg", ["Larantuka Malay"] = "lrt", ["Lardil"] = "lbz", ["Larevat"] = "lrv", ["Larike-Wakasihu"] = "alo", ["Laro"] = "lro", ["Larteh"] = "lar", ["Laru"] = "lan", ["Lasgerdi"] = "lsa", ["Lasi"] = "lss", ["Latu"] = "ltu", ["Latvian Sign Language"] = "lsl", ["Lau"] = "llu", ["Laua"] = "luf", ["Lauan"] = "llx", ["Lauje"] = "law", ["Laura"] = "lur", ["Laurentian"] = "lre", ["Lavatbura-Lamusong"] = "lbv", ["Lawangan"] = "lbx", ["Lawu"] = "lwu", ["Lawunuia"] = "tgi", ["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", ["Lehalurup"] = "urr", ["Leinong Naga"] = "lzn", ["Leipon"] = "lek", ["Lela"] = "dri", ["Lelak"] = "llk", ["Lele (Chad)"] = "lln", ["Lele (Congo)"] = "lel", ["Lele (Guinea)"] = "llc", ["Lele (New Guinea)"] = "lle", ["Lelepa"] = "lpa", ["Lembena"] = "leq", ["Lemerig"] = "lrz", ["Lemio"] = "lei", ["Lemolang"] = "ley", ["Lemoro"] = "ldj", ["Lenakel"] = "tnl", ["Lendu"] = "led", ["Lengilu"] = "lgi", ["Lengo"] = "lgr", ["Lengola"] = "lej", ["Lenje"] = "leh", ["Lenkau"] = "ler", ["Lenyima"] = "ldg", ["Lepki"] = "lpe", ["Lere"] = "gnh", ["Lese"] = "les", ["Lesing-Gelimi"] = "let", ["Letemboi"] = "nms", ["Leti (Cameroon)"] = "leo", ["Leti (Indonesia)"] = "lti", ["Levuka"] = "lvu", ["Lewo Eleng"] = "lwe", ["Lewotobi"] = "lwt", ["Leyigha"] = "ayi", ["Lhokpu"] = "lhp", ["Li'o"] = "ljl", ["Liana-Seti"] = "ste", ["Liangmai Naga"] = "njn", ["Liberian Kreyol"] = "lir", ["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", ["Limassa"] = "bme", ["Limbu"] = "lif", ["Limi"] = "ylm", ["Limilngan"] = "lmc", ["Linear A"] = "lab", ["Lingkhim"] = "lii", ["Lingua Franca Nova"] = "lfn", ["Linngithigh"] = "lnj", ["Lipo"] = "lpo", ["Lisabata-Nuniali"] = "lcs", ["Lisela"] = "lcl", ["Lish"] = "lsh", ["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", ["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", ["Lomaiviti"] = "lmv", ["Lomakka"] = "loi", ["Lombi"] = "lmi", ["Lombo"] = "loo", ["Lomwe"] = "ngl", ["Loncong"] = "lce", ["Long Phuri Naga"] = "lpn", ["Long Wat"] = "ttw", ["Longgu"] = "lgu", ["Longto"] = "wok", ["Longuda"] = "lnu", ["Loniu"] = "los", ["Lonwolwol"] = "crc", ["Loo"] = "ldo", ["Lopa"] = "lop", ["Lope"] = "yiu", ["Lopi"] = "lov", ["Lopit"] = "lpx", ["Lorang"] = "lrn", ["Lorediakarkar"] = "lnn", ["Lote"] = "uvl", ["Lotud"] = "dtr", ["Lotuko"] = "lot", ["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", ["Lowland Oaxaca Chontal"] = "clo", ["Lowland Tarahumara"] = "tac", ["Loxicha Zapotec"] = "ztp", ["Lozi"] = "loz", ["Luang"] = "lex", ["Tiếng Luba-Kasai"] = "lua", ["Lubila"] = "kcc", ["Lubu"] = "lcf", ["Tiếng Kalinga Lubuagan"] = "knb", ["Luchazi"] = "lch", ["Lufu"] = "ldq", ["Lugbara"] = "lgg", ["Luguru"] = "ruf", ["Luhu"] = "lcq", ["Luimbi"] = "lum", ["Luiseño"] = "lui", ["Lule"] = "ule", ["Lule Sami"] = "smj", ["Lumba-Yakkha"] = "luu", ["Lumbee"] = "lmz", ["Lumun"] = "lmd", ["Lun Bawang"] = "lnd", ["Luna"] = "luj", ["Lunda"] = "lun", ["Lungga"] = "lga", ["Luo"] = "luo", ["Luopohe Hmong"] = "hml", ["Luri (Nigeria)"] = "ldd", ["Lusengo"] = "lse", ["Lusi"] = "khl", ["Lusitanian"] = "xls", ["Lutachoni"] = "lts", ["Lutos"] = "ndy", ["Luvale"] = "lue", ["Luwati"] = "luv", ["Luwo"] = "lwo", ["Luyana"] = "lyn", ["Lwalu"] = "lwa", ["Lwel"] = "lvl", ["Lyélé"] = "lee", ["Tiếng Láadan"] = "ldn", ["Láá Láá Bwamu"] = "bwj", ["Ma"] = "msj", ["Ma Manda"] = "skc", ["Ma'di"] = "mhi", ["Ma'ya"] = "slz", ["Maba"] = "mqa", ["Mabaale"] = "mmz", ["Mabaka Valley Kalinga"] = "kkg", ["Mabire"] = "muj", ["Maca"] = "mca", ["Macaguaje"] = "mcl", ["Macaguán"] = "mbn", ["Macanese"] = "mzs", ["Macau Pidgin Portuguese"] = "crp-mpp", ["Machame"] = "jmc", ["Machiguenga"] = "mcb", ["Machinere"] = "mpd", ["Machinga"] = "mvw", ["Macoris"] = "nai-mac", ["Macuna"] = "myy", ["Mada (Cameroon)"] = "mxu", ["Mada (Nigeria)"] = "mda", ["Madagascar Sign Language"] = "mzc", ["Madak"] = "mmx", ["Maden"] = "xmx", ["Madhi Madhi"] = "dmd", ["Madi"] = "grg", ["Madngele"] = "zml", ["Madukayang Kalinga"] = "kmd", ["Mae"] = "mme", ["Maek"] = "hmk", ["Maeng Itneg"] = "itt", ["Mafa"] = "maf", ["Mafea"] = "mkv", ["Mag-Anchi Ayta"] = "sgb", ["Mag-Indi Ayta"] = "blx", ["Magadhi Prakrit"] = "inc-mgd", ["Magahat"] = "mtw", ["Magdalena Peñasco Mixtec"] = "xtm", ["Magiyi"] = "gmg", ["Magoma"] = "gmx", ["Magɨ"] = "gkd", ["Mahican"] = "mjy", ["Mahongwe"] = "mhb", ["Mahou"] = "mxx", ["Tiếng Maia"] = "sks", ["Maiadomu"] = "mzz", ["Maiani"] = "tnh", ["Maii"] = "mmm", ["Mailu"] = "mgu", ["Maindo"] = "cwb", ["Mairasi"] = "zrs", ["Maisin"] = "mbq", ["Maiwa (Indonesia)"] = "wmm", ["Maiwa (New Guinea)"] = "mti", ["Maiwala"] = "mum", ["Majera"] = "xmj", ["Majhi"] = "mjz", ["Majhwar"] = "mmj", ["Mak (China)"] = "mkg", ["Mak (Nigeria)"] = "pbl", ["Makaa"] = "mcp", ["Makah"] = "myh", ["Tiếng Makalero"] = "mjb", ["Tiếng 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", ["Malaccan Creole Malay"] = "ccm", ["Malalamai"] = "mmt", ["Malalí"] = "sai-mal", ["Malango"] = "mln", ["Malas"] = "mkr", ["Malasanga"] = "mqz", ["Malawi Lomwe"] = "lon", ["Malawian Sign Language"] = "lws", ["Malayic Dayak"] = "xdy", ["Malaynon"] = "mlz", ["Malaysian Sign Language"] = "xml", ["Malba Birifor"] = "bfo", ["Male"] = "mdc", ["Maleu-Kilenge"] = "mgl", ["Malfaxal"] = "mlx", ["Malgana"] = "vml", ["Malgbe"] = "mxf", ["Mali"] = "gcc", ["Malibu"] = "sai-mlb", ["Malila"] = "mgq", ["Malimba"] = "mzd", ["Malimpung"] = "mli", ["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", ["Tiếng Senoufo Mamara"] = "myk", ["Mamasa"] = "mqj", ["Mambae"] = "mgm", ["Mambai"] = "mcs", ["Mamboru"] = "mvd", ["Mambwe-Lungu"] = "mgr", ["Mamuju"] = "mqx", ["Mamulique"] = "emm", ["Mamusi"] = "kdf", ["Mamvu"] = "mdi", ["Man Met"] = "mml", ["Manado Malay"] = "xmm", ["Manam"] = "mva", ["Manambu"] = "mle", ["Manangba"] = "nmm", ["Manangkari"] = "znk", ["Manao"] = "awd-man", ["Manda (Australia)"] = "zma", ["Manda (Tanzania)"] = "mgs", ["Mandaic"] = "mid", ["Mandailing Batak"] = "btm", ["Mandalorian"] = "art-man", ["Mandan"] = "mhq", ["Mandandanyi"] = "zmk", ["Mandar"] = "mdr", ["Mandari"] = "mqu", ["Mander"] = "mqr", ["Mandingo"] = "man", ["Mandjak"] = "mfv", ["Mandobo Atas"] = "aax", ["Mandobo Bawah"] = "bwp", ["Manem"] = "jet", ["Mangala"] = "mem", ["Mangarayi"] = "mpc", ["Mangarevan"] = "mrv", ["Mangayat"] = "myj", ["Mangbetu"] = "mdj", ["Mangbutu"] = "mdk", ["Mangerr"] = "zme", ["Mangga Buang"] = "mmo", ["Tiếng Mango"] = "mge", ["Mangole"] = "mqc", ["Mangseng"] = "mbh", ["Manigri-Kambolé Ede Nago"] = "xkb", ["Manikion"] = "mnx", ["Manipa"] = "mqp", ["Mankiyali"] = "nlm", ["Manna-Dora"] = "mju", ["Manombai"] = "woo", ["Mansoanka"] = "msw", ["Manta"] = "myg", ["Mantsi"] = "nty", ["Manusela"] = "wha", ["Manya"] = "mzj", ["Manyawa"] = "mny", ["Manza"] = "mzv", ["Mao Naga"] = "nbi", ["Mape"] = "mlh", ["Mapena"] = "mnm", ["Mapia"] = "mpy", ["Mapidian"] = "mpw", ["Mapoyo"] = "mcg", ["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", ["Marawan"] = "awd-mar", ["Marba"] = "mpg", ["Marenje"] = "vmr", ["Marfa"] = "mvu", ["Margany"] = "zmc", ["Marghi South"] = "mfm", ["Margi"] = "mrt", ["Maria"] = "mds", ["Mariaté"] = "awd-mrt", ["Maridan"] = "zmd", ["Maridjabin"] = "zmj", ["Marik"] = "dad", ["Marimanindji"] = "zmm", ["Marind"] = "mrz", ["Maring"] = "mbw", ["Maringarr"] = "zmt", ["Marino"] = "mrb", ["Mariri"] = "mqi", ["Maritime Sign Language"] = "nsr", ["Maritsauá"] = "msp", ["Mariyedi"] = "zmy", ["Marka"] = "rkm", ["Markweeta"] = "enb", ["Maroon Spirit Language"] = "cpe-mar", ["Marovo"] = "mvo", ["Marrgu"] = "mhg", ["Marriammu"] = "xru", ["Marrithiyel"] = "mfr", ["Martha's Vineyard Sign Language"] = "mre", ["Marti Ke"] = "zmg", ["Martu Wangka"] = "mpj", ["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", ["Maslam"] = "msv", ["Masmaje"] = "mes", ["Massachusett"] = "wam", ["Massalat"] = "mdg", ["Massep"] = "mvs", ["Matagalpa"] = "mtn", ["Matanawi"] = "sai-mat", ["Matbat"] = "xmt", ["Matengo"] = "mgv", ["Matepi"] = "mqe", ["Matigsalug Manobo"] = "mbt", ["Matipuhy"] = "mzo", ["Matlatzinca"] = "mat", ["Mato"] = "met", ["Mato Grosso Arára"] = "axg", ["Matsés"] = "mcf", ["Mattole"] = "mvb", ["Matukar"] = "mjk", ["Matumbi"] = "mgw", ["Matya Samo"] = "stj", ["Matís"] = "mpq", ["Mauritian Sign Language"] = "lsy", ["Mauwake"] = "mhl", ["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", ["Maypure"] = "awd-mpr", ["Mazagway"] = "dkx", ["Mazaltepec Zapotec"] = "zpy", ["Mazatlán Mazatec"] = "vmz", ["Mazatlán Mixe"] = "mzl", ["Mba"] = "mfc", ["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", ["Mea"] = "meg", ["Mebu"] = "mjn", ["Mecayapan Nahuatl"] = "nhx", ["Medebur"] = "mjm", ["Medefaidrin"] = "dmf", ["Mednyj Aleut"] = "mud", ["Mefele"] = "mfj", ["Megam"] = "mef", ["Mehek"] = "nux", ["Mehináku"] = "mmh", ["Mekeo"] = "mek", ["Mekmek"] = "mvk", ["Mekwei"] = "msf", ["Mekéns"] = "skf", ["Mel-Khaonh"] = "hkn", ["Mele-Fila"] = "mxe", ["Mendalam Kayan"] = "xkd", ["Mengaka"] = "xmg", ["Mengen"] = "mee", ["Menien"] = "sai-men", ["Menka"] = "mea", ["Menya"] = "mcr", ["Meoswar"] = "mvx", ["Mer"] = "mnu", ["Meramera"] = "mxm", ["Merei"] = "lmb", ["Merey"] = "meq", ["Merlav"] = "mrm", ["Meroitic"] = "xmr", ["Meru"] = "mer", ["Mese"] = "mci", ["Mesme"] = "zim", ["Mesmes"] = "mys", ["Meta'"] = "mgo", ["Metlatónoc Mixtec"] = "mxv", ["Mewari"] = "mtr", ["Mewati"] = "wtm", ["Mexican Sign Language"] = "mfs", ["Meyah"] = "mej", ["Mezontla Popoloca"] = "pbe", ["Mfinu"] = "zmf", ["Mfumte"] = "nfu", ["Mgbo"] = "gmz", ["Mian"] = "mpt", ["Miani"] = "pla", ["Micha"] = "yiq", ["Michif"] = "crg", ["Michigamea"] = "cmm", ["Michoacán Nahuatl"] = "ncl", ["Mid Grand Valley Dani"] = "dnt", ["Mid-Southern Banda"] = "bjo", ["Middle Assamese"] = "inc-mas", ["Middle Bengali"] = "inc-mbn", ["Tiếng Cornwall trung đại"] = "cnx", ["Middle Kannada"] = "dra-mkn", ["Middle Median"] = "xme-mid", ["Middle Newar"] = "nwx", ["Tiếng Na Uy trung đại"] = "gmq-mno", ["Middle Watut"] = "mpl", ["Midob"] = "mei", ["Migaama"] = "mmy", ["Migabac"] = "mpp", ["Miji"] = "sjl", ["Miju"] = "mxj", ["Mikasuki"] = "mik", ["Milang"] = "und-mil", ["Mili"] = "ymh", ["Millcayac"] = "sai-mil", ["Miltu"] = "mlj", ["Miluk"] = "iml", ["Milyan"] = "imy", ["Mimi of Decorse"] = "und-mmd", ["Mimi of Nachtigal"] = "und-mmn", ["Mina"] = "hna", ["Minaean"] = "inm", ["Minang"] = "xrg", ["Minanibai"] = "mcv", ["Minaveha"] = "mvn", ["Minderico"] = "drc", ["Mindiri"] = "mpn", ["Mingang Doso"] = "mko", ["Mingo"] = "iro-min", ["Tiếng Huitoto Minica"] = "hto", ["Minidien"] = "wii", ["Minigir"] = "vmg", ["Minjungbal"] = "xjb", ["Minkin"] = "xxm", ["Minoan"] = "omn", ["Minokok"] = "mqq", ["Miraya Bikol"] = "rbl", ["Mire"] = "mvh", ["Miriti"] = "mmv", ["Miriwoong Sign Language"] = "rsm", ["Miriwung"] = "mep", ["Mirpur Panjabi"] = "pmu", ["Misantla Totonac"] = "tlc", ["Miship"] = "mjs", ["Misima-Paneati"] = "mpx", ["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", ["Mlap"] = "kja", ["Mlomp"] = "mlo", ["Mmaala"] = "mmu", ["Mmani"] = "buy", ["Mmen"] = "bfm", ["Mo"] = "wkd", ["Mo'da"] = "gbn", ["Moabite"] = "obm", ["Moba"] = "mfq", ["Mobilian"] = "mod", ["Mobumrin Aizi"] = "ahm", ["Mocana"] = "sai-mcn", ["Mochi"] = "old", ["Mochica"] = "omc", ["Mocho"] = "mhc", ["Mocoví"] = "moc", ["Modang"] = "mxd", ["Modole"] = "mqo", ["Moere"] = "mvq", ["Mofu-Gudur"] = "mif", ["Mogum"] = "mou", ["Moi (Congo)"] = "mow", ["Moi (Indonesia)"] = "mxn", ["Moikodi"] = "mkp", ["Moingi"] = "mwz", ["Mojave"] = "mov", ["Moji"] = "ymi", ["Mok"] = "mqt", ["Mokerang"] = "mft", ["Mokole"] = "mkl", ["Mokpwe"] = "bri", ["Molale"] = "mbe", ["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", ["Mongol"] = "mgt", ["Mongolian Sign Language"] = "msr", ["Moni"] = "mnz", ["Monimbo"] = "mom", ["Mono (California)"] = "mnr", ["Mono (Cameroon)"] = "mru", ["Mono (Congo)"] = "mnh", ["Monsang Naga"] = "nmh", ["Montagnais"] = "moe", ["Montana Salish"] = "fla", ["Montol"] = "mtl", ["Monumbo"] = "mxk", ["Monzombo"] = "moj", ["Moo"] = "gwg", ["Mopan Maya"] = "mop", ["Mor (Austronesian)"] = "mhz", ["Mor (Papuan)"] = "moq", ["Moraid"] = "msg", ["Moran"] = "sit-mor", ["Morawa"] = "mze", ["Morelos Nahuatl"] = "nhm", ["Morerebi"] = "xmo", ["Moresada"] = "msx", ["Mori Atas"] = "mzq", ["Mori Bawah"] = "xmz", ["Morigi"] = "mdb", ["Moroccan Sign Language"] = "xms", ["Morom"] = "bdo", ["Moronene"] = "mqn", ["Morori"] = "mok", ["Morouas"] = "mrp", ["Mortlockese"] = "mrl", ["Moru"] = "mgd", ["Mosimo"] = "mqv", ["Moskona"] = "mtj", ["Motembo"] = "tmv", ["Mouk-Aria"] = "mwh", ["Mount Iraya Agta"] = "atl", ["Mount Iriga Agta"] = "agz", ["Mountain Koiari"] = "kpx", ["Mouwase"] = "jmw", ["Movima"] = "mzp", ["Moyadan Itneg"] = "ity", ["Mozambican Sign Language"] = "mzy", ["Mpalitjanh"] = "xpj", ["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", ["Mualang"] = "mtd", ["Mubami"] = "tsx", ["Mubi"] = "mub", ["Mucuchí"] = "sai-muc", ["Muda"] = "ymd", ["Muduapa"] = "wiv", ["Muellama"] = "sai-mue", ["Mufian"] = "aoj", ["Muher"] = "sem-mhr", ["Muinane"] = "bmr", ["Mukha-Dora"] = "mmk", ["Mukulu"] = "moz", ["Mulaha"] = "mfw", ["Mulam"] = "mlm", ["Mulao"] = "giu", ["Mullukmulluk"] = "mpb", ["Muluridyi"] = "vmu", ["Mum"] = "kqa", ["Mumuye"] = "mzm", ["Mundang"] = "mua", ["Mundani"] = "mnf", ["Mundat"] = "mmf", ["Mundolinco"] = "art-mun", ["Mundurukú"] = "myu", ["Mungaka"] = "mhk", ["Mungbam"] = "mij", ["Mungkip"] = "mpv", ["Muniche"] = "myr", ["Munit"] = "mtc", ["Mur Pano"] = "tkv", ["Muratayak"] = "asx", ["Murik (Malaysia)"] = "mxr", ["Murik (New Guinea)"] = "mtf", ["Murkim"] = "rmh", ["Murrinh-Patha"] = "mwf", ["Tiếng Huitoto Murui"] = "huu", ["Murupi"] = "mqw", ["Muruwari"] = "zmu", ["Musan"] = "mmp", ["Musar"] = "mmi", ["Musasa"] = "smm", ["Musey"] = "mse", ["Musgu"] = "mug", ["Muskum"] = "mje", ["Musom"] = "msu", ["Mussau-Emira"] = "emi", ["Mutu"] = "tuc", ["Muya"] = "mvm", ["Muyang"] = "muy", ["Muyuw"] = "myw", ["Muzi"] = "ymz", ["Muzo"] = "sai-muz", ["Mvanip"] = "mcj", ["Mvuba"] = "mxh", ["Mwaghavul"] = "sur", ["Mwali Comorian"] = "wlc", ["Mwani"] = "wmw", ["Mwatebu"] = "mwa", ["Mwera"] = "mwe", ["Mwimbi-Muthambi"] = "mws", ["Mysian"] = "yms", ["Mzieme Naga"] = "nme", ["Mághdì"] = "gmd", ["Mün Chin"] = "mwq", ["Mündü"] = "muh", ["N'Ko"] = "nqo", ["Na"] = "nbt", ["Na'vi"] = "art-nav", ["Naaba"] = "nao", ["Naba"] = "mne", ["Nabak"] = "naf", ["Nabi"] = "mty", ["Nachering"] = "ncd", ["Nadruvian"] = "ndf", ["Nadëb"] = "mbj", ["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", ["Nambo"] = "ncm", ["Nambya"] = "nmq", ["Namia"] = "nnm", ["Namiae"] = "nvm", ["Namibian Sign Language"] = "nbs", ["Namla"] = "naa", ["Namo"] = "mxw", ["Namonuito"] = "nmt", ["Namosi-Naitasiri-Serua"] = "bwb", ["Namuyi"] = "nmy", ["Nancere"] = "nnc", ["Nande"] = "nnb", ["Nandi"] = "niq", ["Nanerigé Sénoufo"] = "sen", ["Nanga Dama Dogon"] = "nzz", ["Nanti"] = "cox", ["Nanticoke"] = "nnt", ["Nanubae"] = "afk", ["Naolan"] = "nai-nao", ["Napu"] = "npy", ["Nar Phu"] = "npa", ["Nara"] = "nrb", ["Narak"] = "nac", ["Narango"] = "nrg", ["Narau"] = "nxu", ["Narim"] = "loh", ["Naro"] = "nhr", ["Narom"] = "nrm", ["Narragansett"] = "xnt", ["Narungga"] = "nnr", ["Naruo"] = "ylo", ["Nasal"] = "nsy", ["Nasarian"] = "nvh", ["Nasioi"] = "nas", ["Nasu"] = "ywq", ["Natagaimas"] = "nts", ["Natchez"] = "ncz", ["Nathembo"] = "nte", ["Natioro"] = "nti", ["Natú"] = "sai-nat", ["Natügu"] = "ntu", ["Nauete"] = "nxa", ["Nauna"] = "ncn", ["Nauo"] = "nwo", ["Navarro-Aragonese"] = "roa-oan", ["Navut"] = "nsw", ["Nawaru"] = "nwr", ["Nawathinehena"] = "nwa", ["Nawdm"] = "nmz", ["Nawuri"] = "naw", ["Nayi"] = "noz", ["Ncane"] = "ncr", ["Nchumbulu"] = "nlu", ["Nda'nda'"] = "nnz", ["Ndai"] = "gke", ["Ndaka"] = "ndk", ["Ndali"] = "ndh", ["Ndam"] = "ndm", ["Ndamba"] = "ndj", ["Ndambomo"] = "nxo", ["Ndasa"] = "nda", ["Nde-Gbite"] = "ned", ["Nde-Nsele-Nta"] = "ndd", ["Ndemli"] = "nml", ["Ndendeule"] = "dne", ["Ndengereko"] = "ndg", ["Nding"] = "eli", ["Ndjébbana"] = "djj", ["Ndo"] = "ndp", ["Ndobo"] = "ndw", ["Ndoe"] = "nbb", ["Ndolo"] = "ndl", ["Ndom"] = "nqm", ["Ndombe"] = "ndq", ["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", ["Negeri Sembilan Malay"] = "zmi", ["Nehan"] = "nsn", ["Nek"] = "nif", ["Nekgini"] = "nkg", ["Neko"] = "nej", ["Neku"] = "nek", ["Neme"] = "nex", ["Nemi"] = "nem", ["Nen"] = "nqn", ["Nend"] = "anh", ["Nengone"] = "nen", ["Neo"] = "neu", ["Nepalese Sign Language"] = "nsp", ["Nepali Kurux"] = "kxl", ["Nete"] = "net", ["Neve'ei"] = "vnm", ["Neverver"] = "lgk", ["New Caledonian Javanese"] = "jas", ["New River Shasta"] = "nai-nrs", ["New Zealand Sign Language"] = "nzs", ["Neyo"] = "ney", ["Nez Perce"] = "nez", ["Nga La"] = "hlt", ["Ngaanyatjarra"] = "ntj", ["Ngadjunmaya"] = "nju", ["Ngadjuri"] = "jui", ["Ngaing"] = "nnf", ["Ngaju"] = "nij", ["Ngala"] = "nud", ["Ngalakan"] = "nig", ["Ngalkbun"] = "ngk", ["Ngamambo"] = "nbv", ["Ngamini"] = "nmv", ["Ngamo"] = "nbh", ["Ngan'gityemerri"] = "nam", ["Nganakarti"] = "xnk", ["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", ["Ngasa"] = "nsg", ["Ngatik Men's Creole"] = "ngm", ["Ngawn Chin"] = "cnw", ["Ngawun"] = "nxn", ["Ngazidja Comorian"] = "zdj", ["Tiếng Ngbaka"] = "nga", ["Ngbaka Ma'bo"] = "nbm", ["Ngbaka Manza"] = "ngg", ["Ngbee"] = "jgb", ["Ngbinda"] = "nbd", ["Ngbundu"] = "nuu", ["Ngelima"] = "agh", ["Ngemba"] = "nge", ["Ngen"] = "gnj", ["Ngendelengo"] = "nql", ["Ngeq"] = "ngt", ["Ngete"] = "nnn", ["Nggem"] = "nbq", ["Nggwahyi"] = "ngx", ["Ngie"] = "ngj", ["Ngile"] = "jle", ["Ngindo"] = "nnq", ["Tiếng Ngiti"] = "niy", ["Ngizim"] = "ngi", ["Ngkoth"] = "aus-ngk", ["Ngkâlmpw Kanum"] = "kcd", ["Ngochang"] = "tbq-ngo", ["Ngom"] = "nra", ["Ngombale"] = "nla", ["Ngombe (Central African Republic)"] = "nmj", ["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", ["Nhirrpi"] = "hrp", ["Nhuwala"] = "nhf", ["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", ["Nisi"] = "yso", ["Niuafo'ou"] = "num", ["Niuatoputapu"] = "nkp", ["Niwer Mil"] = "hrc", ["Njalgulgule"] = "njl", ["Njebi"] = "nzb", ["Njen"] = "njj", ["Njerep"] = "njr", ["Njyem"] = "njy", ["Nkami"] = "nkq", ["Nkangala"] = "nkn", ["Nkem-Nkum"] = "isi", ["Nkhumbi"] = "khu", ["Nkongho"] = "nkc", ["Nkoroo"] = "nkx", ["Nkoya"] = "nka", ["Nkukoli"] = "nbo", ["Nkutu"] = "nkw", ["Nnam"] = "nbp", ["Nocamán"] = "nom", ["Nocte Naga"] = "njb", ["Noiri"] = "noi", ["Nokuku"] = "nkk", ["Nomaande"] = "lem", ["Nomane"] = "nof", ["Nomatsiguenga"] = "not", ["Nomlaki"] = "nol", ["Nomu"] = "noh", ["Nonuya"] = "noj", ["Nooksack"] = "nok", ["Tiếng Noone"] = "nhu", ["Nopala Chatino"] = "cya", ["Norn"] = "nrn", ["Norra"] = "nrr", ["North Ambrym"] = "mmg", ["North Asmat"] = "nks", ["North Awyu"] = "yir", ["North Babar"] = "bcd", ["North Boma"] = "boh", ["North Central Mixe"] = "neq", ["North Fali"] = "fll", ["North Giziga"] = "gis", ["North Mofu"] = "mfk", ["North Muyu"] = "kti", ["North Nuaulu"] = "nni", ["North Tairora"] = "tbg", ["North Tanna"] = "tnn", ["North Wahgi"] = "whg", ["North Watut"] = "una", ["Northeast Kiwai"] = "kiw", ["Northeast Maidu"] = "nmu", ["Northeast Pashayi"] = "aee", ["Northeastern Dinka"] = "dip", ["Northeastern Pomo"] = "pef", ["Northern Alta"] = "aqn", ["Northern Bontoc"] = "rbk", ["Northern Ghale"] = "ghh", ["Tiếng Grebo Bắc"] = "gbo", ["Northern Guiyang Hmong"] = "huj", ["Northern Haida"] = "hdn", ["Northern Huishui Hmong"] = "hmi", ["Northern Kalapuya"] = "nrt", ["Northern Kam"] = "doc", ["Northern Kankanay"] = "xnn", ["Northern Kissi"] = "kqs", ["Northern Lorung"] = "lbr", ["Northern Mashan Hmong"] = "hmp", ["Northern Muji"] = "ymx", ["Northern Ngbandi"] = "ngb", ["Northern Nuni"] = "nuv", ["Northern Oaxaca Nahuatl"] = "nhy", ["Northern Ohlone"] = "cst", ["Northern One"] = "onr", ["Northern Pame"] = "pmq", ["Northern Pinghua"] = "cnp", ["Northern Pomo"] = "pej", ["Northern Puebla Nahuatl"] = "ncj", ["Northern Pumi"] = "pmi", ["Northern Qiandong Miao"] = "hea", ["Northern Rengma Naga"] = "nnl", ["Northern Sierra Miwok"] = "nsq", ["Northern Subanen"] = "stb", ["Northern Tarahumara"] = "thh", ["Northern Tidong"] = "ntd", ["Northern Tlaxiaco Mixtec"] = "xtn", ["Northern Toussian"] = "tsp", ["Northern Tutchone"] = "ttm", ["Northern Valley Yokuts"] = "nai-nvy", ["Northwest Maidu"] = "mjd", ["Northwest Oaxaca Mixtec"] = "mxa", ["Northwest Pashayi"] = "glh", ["Northwestern Dinka"] = "diw", ["Northwestern Fars"] = "faz", ["Northwestern Tamang"] = "tmk", ["Norwegian Sign Language"] = "nsl", ["Notre"] = "bly", ["Notsi"] = "ncf", ["Nottoway"] = "ntw", ["Nottoway-Meherrin"] = "nwy", ["Noxilo"] = "art-nox", ["Noy"] = "noy", ["Nsari"] = "asj", ["Nsenga"] = "nse", ["Nshi"] = "nsc", ["Nsong"] = "soo", ["Nsongo"] = "nsx", ["Ntomba"] = "nto", ["Ntra'ngith"] = "dgt", ["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", ["Numee"] = "kdk", ["Nungali"] = "nug", ["Nunggubuyu"] = "nuy", ["Nungon"] = "paa-nun", ["Nungu"] = "rin", ["Nupbikha"] = "npb", ["Nusa Laut"] = "nul", ["Nusu"] = "nuf", ["Nutabe"] = "cba-nut", ["Nyabwa"] = "nwb", ["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", ["Nyaturu"] = "rim", ["Nyawaygi"] = "nyt", ["Nyemba"] = "nba", ["Nyengo"] = "nye", ["Nyenkha"] = "neh", ["Nyigina"] = "nyh", ["Nyiha"] = "nih", ["Nyika"] = "nkt", ["Nyimang"] = "nyi", ["Nyindrou"] = "lid", ["Nyindu"] = "nyg", ["Nyiyaparli"] = "xny", ["Nyokon"] = "nvo", ["Nyole (Kenya)"] = "nyd", ["Nyole (Uganda)"] = "nuj", ["Nyong"] = "muo", ["Nyulnyul"] = "nyv", ["Nyungwe"] = "nyu", ["Nyâlayu"] = "yly", ["Nzakambay"] = "nzy", ["Nzakara"] = "nzk", ["Nzanyi"] = "nja", ["Nzima"] = "nzi", ["Tiếng Huitoto Nüpode"] = "hux", ["O'chi'chi'"] = "xoc", ["Obanliku"] = "bzy", ["Obispeño"] = "obi", ["Oblo"] = "obl", ["Obo Manobo"] = "obo", ["Obokuitai"] = "afz", ["Obolo"] = "ann", ["Obulom"] = "obu", ["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", ["Ogea"] = "eri", ["Tiếng Oirata"] = "oia", ["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 Avar"] = "oav", ["Old Hungarian"] = "ohu", ["Old Kamta"] = "inc-ork", ["Old Kentish Sign Language"] = "okl", ["Old Manipuri"] = "omp", ["Old Punjabi"] = "inc-opa", ["Old Tati"] = "xme-ott", ["Old Tibetan"] = "otb", ["Tiếng Wales cổ"] = "owl", ["Olekha"] = "ole", ["Ollari"] = "gdb", ["Olo"] = "ong", ["Oloma"] = "olm", ["Olrat"] = "olr", ["Olu'bo"] = "lul", ["Olulumo-Ikom"] = "iko", ["Oluta Popoluca"] = "plo", ["Olutsotso"] = "lto", ["Omagua"] = "omg", ["Omba"] = "omb", ["Ombamba"] = "mbm", ["Ombo"] = "oml", ["Tiếng Nahuatl Ometepec"] = "nht", ["Omi"] = "omi", ["Omotik"] = "omt", ["Omurano"] = "omu", ["Ong"] = "oog", ["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", ["Oro"] = "orx", ["Oro Win"] = "orw", ["Oroha"] = "ora", ["Orokaiva"] = "okv", ["Oroko"] = "bdu", ["Orokolo"] = "oro", ["Orowe"] = "bpk", ["Oruma"] = "orr", ["Orya"] = "ury", ["Osamayi"] = "syx", ["Ososo"] = "oso", ["Ot Danum"] = "otd", ["Otank"] = "uta", ["Oti"] = "oti", ["Otomaco"] = "sai-oto", ["Ottawa"] = "otw", ["Ouma"] = "oum", ["Oune"] = "oue", ["Owa"] = "stn", ["Owenia"] = "wsr", ["Owiniga"] = "owi", ["Oy"] = "oyb", ["Oya'oya"] = "oyy", ["Ozolotepec Zapotec"] = "zao", ["Pa"] = "ppt", ["Pa Di"] = "pdi", ["Pa'a"] = "pqa", ["Paama"] = "pma", ["Paasaal"] = "sig", ["Pacahuara"] = "pcp", ["Padoe"] = "pdo", ["Paeonian"] = "ine-pae", ["Pagi"] = "pgi", ["Pagibete"] = "pae", ["Pahanan Agta"] = "apf", ["Pahi"] = "lgt", ["Pahlavani"] = "phv", ["Pai Tavytera"] = "pta", ["Pai-lang"] = "tbq-plg", ["Paicî"] = "pri", ["Paikoneka"] = "awd-pai", ["Paipai"] = "ppi", ["Pajapan Nahuatl"] = "nhp", ["Pak-Tong"] = "pkg", ["Pakanha"] = "pkn", ["Pakistan Sign Language"] = "pks", ["Paku Karen"] = "kpp", ["Pal"] = "abw", ["Palaka Senoufo"] = "plr", ["Palantla Chinantec"] = "cpa", ["Palawan Batak"] = "bya", ["Paleni"] = "pnl", ["Palewyami"] = "nai-ply", ["Palikur"] = "plu", ["Pallanganmiddang"] = "pmd", ["Palta"] = "sai-pal", ["Palu'e"] = "ple", ["Paluan"] = "plz", ["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", ["Pande"] = "bkj", ["Pangseng"] = "pgs", ["Pangutaran Sama"] = "slm", ["Pangwa"] = "pbr", ["Panim"] = "pnr", ["Pankararé"] = "pax", ["Pankararú"] = "paz", ["Pankhu"] = "pkh", ["Pannei"] = "pnc", ["Panobo"] = "pno", ["Panyi Bai"] = "bfc", ["Panyjima"] = "pnw", ["Panzaleo"] = "sai-pnz", ["Pao"] = "ppa", ["Papapana"] = "ppn", ["Papar"] = "dpp", ["Papasena"] = "pas", ["Papel"] = "pbo", ["Papi"] = "ppe", ["Papitalai"] = "pat", ["Papora"] = "ppu", ["Papua New Guinean Sign Language"] = "pgz", ["Papuan Malay"] = "pmy", ["Para Naga"] = "pzn", ["Paraguayan Sign Language"] = "pys", ["Parakanã"] = "pak", ["Paranan"] = "prf", ["Paranawát"] = "paf", ["Paratió"] = "sai-par", ["Parawen"] = "prw", ["Pardhan"] = "pch", ["Pardhi"] = "pcl", ["Pare"] = "asa", ["Paredarerme"] = "xpd", ["Pará Arára"] = "aap", ["Pará Gavião"] = "gvp", ["Pasi"] = "psq", ["Pass Valley Yali"] = "yac", ["Passé"] = "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", ["Pauri Bareli"] = "bfb", ["Pauserna"] = "psm", ["Pawaia"] = "pwa", ["Payaguá"] = "sai-pyg", ["Paynamar"] = "pmr", ["Pe"] = "pai", ["Pech"] = "pay", ["Peerapper"] = "xpw", ["Peere"] = "pfe", ["Pei"] = "ppq", ["Pekal"] = "pel", ["Pele-Ata"] = "ata", ["Penang Sign Language"] = "psg", ["Penchal"] = "pek", ["Pendau"] = "ums", ["Penrhyn"] = "pnh", ["Pentlatch"] = "ptw", ["Perai"] = "wet", ["Perema"] = "wom", ["Pericú"] = "nai-per", ["Pero"] = "pip", ["Persian Sign Language"] = "psc", ["Peruvian Sign Language"] = "prl", ["Petapa Zapotec"] = "zpe", ["Petats"] = "pex", ["Peñoles Mixtec"] = "mil", ["Phala"] = "ypa", ["Phana'"] = "phq", ["Phangduwali"] = "phw", ["Phende"] = "pem", ["Philippine Sign Language"] = "psp", ["Philistine"] = "und-phi", ["Phimbi"] = "phm", ["Phola"] = "ypg", ["Pholo"] = "yip", ["Phom"] = "nph", ["Phudagi"] = "phd", ["Phuie"] = "pug", ["Phukha"] = "phh", ["Phuma"] = "ypm", ["Phunoi"] = "pho", ["Phupa"] = "ypp", ["Phupha"] = "yph", ["Phuthi"] = "bnt-phu", ["Phuza"] = "ypz", ["Piamatsina"] = "ptr", ["Piame"] = "pin", ["Piapoco"] = "pio", ["Piaroa"] = "pid", ["Tiếng 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", ["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", ["Pirahã"] = "myp", ["Piratapuyo"] = "pir", ["Pirlatapa"] = "bxi", ["Piro"] = "pie", ["Pirriya"] = "xpa", ["Pisabo"] = "pig", ["Pisaflores Tepehua"] = "tpp", ["Piscataway"] = "psy", ["Pisidian"] = "xps", ["Pitcairn-Norfolk"] = "pih", ["Pite Sami"] = "sje", ["Piti"] = "pcn", ["Pitta-Pitta"] = "pit", ["Piu"] = "pix", ["Piya-Kwonci"] = "piy", ["Plains Indian Sign Language"] = "psd", ["Plains Miwok"] = "pmw", ["Plapo Krumen"] = "ktj", ["Playero"] = "gob", ["Pochuri Naga"] = "npo", ["Pochutec"] = "xpo", ["Podoko"] = "pbi", ["Pogali"] = "hkh", ["Pogolo"] = "poy", ["Poitevin-Saintongeais"] = "roa-poi", ["Pokangá"] = "pok", ["Poke"] = "pof", ["Pol"] = "pmm", ["Polish Sign Language"] = "pso", ["Polonombauk"] = "plb", ["Pom"] = "pmo", ["Ponam"] = "ncc", ["Pongu"] = "png", ["Ponyo"] = "npg", ["Poqomam"] = "poc", ["Poqomchi'"] = "poh", ["Porohanon"] = "prh", ["Port Sandwich"] = "psw", ["Port Sorell"] = "xpl", ["Port Vato"] = "ptv", ["Portuguese Sign Language"] = "psr", ["Potiguára"] = "pog", ["Poumei Naga"] = "pmx", ["Pouye"] = "bye", ["Powari"] = "pwr", ["Powhatan"] = "pim", ["Poyanáwa"] = "pyn", ["Tiếng Ireland nguyên thủy"] = "pgl", ["Principense"] = "pre", ["Proto-Amuesha-Chamicuro"] = "awd-amc-pro", ["Tiếng Tiểu Á nguyên thủy"] = "ine-ana-pro", ["Proto-Apachean"] = "apa-pro", ["Proto-Arawa"] = "auf-pro", ["Tiếng Armenia nguyên thủy"] = "hyx-pro", ["Proto-Arnhem"] = "aus-arn-pro", ["Proto-Atayalic"] = "map-ata-pro", ["Proto-Batak"] = "btk-pro", ["Tiếng Bongo-Bagirmi nguyên thủy"] = "csu-bba-pro", ["Proto-Boran"] = "sai-bor-pro", ["Proto-Bua"] = "alv-bua-pro", ["Proto-Bungku-Tolaki"] = "poz-btk-pro", ["Tiếng Miến nguyên thủy"] = "tbq-brm-pro", ["Proto-Caddoan"] = "cdd-pro", ["Proto-Cangin"] = "alv-cng-pro", ["Proto-Central Chadic"] = "cdc-cbm-pro", ["Proto-Central Indo-Aryan"] = "inc-cen-pro", ["Proto-Central Jê"] = "sai-cje-pro", ["Tiếng Trung New South Wales nguyên thủy"] = "aus-cww-pro", ["Tiếng Trung Sudan nguyên thủy"] = "csu-pro", ["Proto-Central Togo"] = "alv-gtm-pro", ["Proto-Chatino"] = "omq-cha-pro", ["Proto-Chibchan"] = "cba-pro", ["Proto-Chimakuan"] = "chi-pro", ["Proto-Chinookan"] = "nai-ckn-pro", ["Tiếng Chukotka-Kamchatka nguyên thủy"] = "qfa-cka-pro", ["Proto-Chumash"] = "nai-chu-pro", ["Proto-Cupan"] = "azc-cup-pro", ["Proto-Daju"] = "sdv-daj-pro", ["Proto-Daly"] = "aus-dal-pro", ["Proto-Eastern Jebel"] = "sdv-eje-pro", ["Proto-Eastern Oti-Volta"] = "nic-eov-pro", ["Proto-Fali"] = "alv-fli-pro", ["Proto-Grassfields"] = "nic-grf-pro", ["Proto-Great Andamanese"] = "qfa-adm-pro", ["Proto-Guang"] = "alv-gng-pro", ["Proto-Gur"] = "nic-gur-pro", ["Proto-Gurunsi"] = "nic-gns-pro", ["Proto-Halmahera-Cenderawasih"] = "poz-hce-pro", ["Proto-Heiban"] = "alv-hei-pro", ["Proto-Highland East Cushitic"] = "cus-hec-pro", ["Proto-Hmong"] = "hmn-pro", ["Proto-Hrusish"] = "sit-hrs-pro", ["Proto-Huitoto-Ocaina"] = "sai-hoc-pro", ["Proto-Hurro-Urartian"] = "qfa-hur-pro", ["Proto-Idomoid"] = "alv-ido-pro", ["Proto-Igboid"] = "alv-igb-pro", ["Proto-Ijoid"] = "ijo-pro", ["Tiếng Iwaidja nguyên thủy"] = "aus-wdj-pro", ["Proto-Jukunoid"] = "nic-jkn-pro", ["Proto-Kadu"] = "qfa-kad-pro", ["Proto-Kalamian"] = "phi-kal-pro", ["Proto-Kalapuyan"] = "nai-klp-pro", ["Proto-Kampa"] = "awd-kmp-pro", ["Proto-Kham"] = "sit-kha-pro", ["Proto-Khoe"] = "khi-kho-pro", ["Proto-Komisenian"] = "ira-kms-pro", ["Proto-Kru"] = "kro-pro", ["Proto-Kuliak"] = "ssa-klk-pro", ["Proto-Kurdish"] = "ku-pro", ["Proto-Kwa"] = "alv-kwa-pro", ["Proto-Lalo"] = "tbq-lal-pro", ["Proto-Lampungic"] = "poz-lgx-pro", ["Tiếng Lô Lô nguyên thủy"] = "tbq-lol-pro", ["Proto-Lower Cross River"] = "nic-lcr-pro", ["Proto-Luish"] = "sit-luu-pro", ["Proto-Maidun"] = "nai-mdu-pro", ["Proto-Mangbetu"] = "csu-maa-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-Mumuye"] = "alv-mum-pro", ["Proto-Munji-Yidgha"] = "ira-mny-pro", ["Proto-Na-Dene"] = "xnd-pro", ["Proto-Nawiki"] = "awd-nwk-pro", ["Proto-Nilotic"] = "sdv-nil-pro", ["Proto-North Caucasian"] = "ccn-pro", ["Proto-North Halmahera"] = "paa-nha-pro", ["Proto-North Sarawak"] = "poz-swa-pro", ["Proto-Nubian"] = "nub-pro", ["Proto-Numic"] = "azc-num-pro", ["Proto-Nupoid"] = "alv-nup-pro", ["Proto-Nyima"] = "sdv-nyi-pro", ["Proto-Nyulnyulan"] = "aus-nyu-pro", ["Proto-Ogoni"] = "nic-ogo-pro", ["Proto-Ossetic"] = "os-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-Paresi-Waura"] = "awd-prw-pro", ["Proto-Plateau Penutian"] = "nai-plp-pro", ["Proto-Pomeranian"] = "zlw-pom-pro", ["Proto-Pomo"] = "nai-pom-pro", ["Proto-Saka"] = "xsc-sak-pro", ["Proto-Sanglechi-Ishkashimi"] = "ira-sgi-pro", ["Proto-Sara"] = "csu-sar-pro", ["Proto-Siouan-Catawban"] = "nai-sca-pro", ["Proto-Songhay"] = "son-pro", ["Proto-Sotho-Tswana"] = "bnt-sts-pro", ["Proto-South Cushitic"] = "cus-sou-pro", ["Proto-South Sulawesi"] = "poz-ssw-pro", ["Proto-Southern Jê"] = "sai-sje-pro", ["Proto-Sunda-Sulawesi"] = "poz-sus-pro", ["Proto-Ta-Arawak"] = "awd-taa-pro", ["Proto-Takic"] = "azc-tak-pro", ["Proto-Taman"] = "sdv-tmn-pro", ["Proto-Tani"] = "sit-tan-pro", ["Proto-Taranoan"] = "sai-tar-pro", ["Proto-Tatic"] = "xme-ttc-pro", ["Proto-Totozoquean"] = "nai-tot-pro", ["Tiếng Liên New Guinea nguyên thủy"] = "ngf-pro", ["Proto-Tsezian"] = "cau-tsz-pro", ["Proto-Tsimshianic"] = "nai-tsi-pro", ["Proto-Upper Cross River"] = "nic-ucr-pro", ["Proto-Utian"] = "nai-utn-pro", ["Proto-Western Mande"] = "dmn-mdw-pro", ["Proto-Witotoan"] = "sai-wit-pro", ["Proto-Yupik"] = "ypk-pro", ["Proto-Zapotecan"] = "omq-zap-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", ["Puiron"] = "sit-prn", ["Pukapukan"] = "pkp", ["Pulabu"] = "pup", ["Puluwat"] = "puw", ["Puma"] = "pum", ["Pumé"] = "yae", ["Punan Aput"] = "pud", ["Punan Bah-Biau"] = "pna", ["Punan Batu"] = "pnm", ["Punan Merah"] = "puf", ["Punan Merap"] = "puc", ["Punan Tubu"] = "puj", ["Punu"] = "puu", ["Puquina"] = "puq", ["Puragi"] = "pru", ["Purari"] = "iar", ["Purepecha"] = "pua", ["Puri"] = "prr", ["Purik"] = "prx", ["Purisimeño"] = "puy", ["Puruborá"] = "pur", ["Puruhá"] = "sai-prh", ["Purukotó"] = "sai-pur", ["Purum"] = "pub", ["Putai"] = "mfl", ["Putoh"] = "put", ["Putukwam"] = "afe", ["Puyo-Paekche"] = "xpp", ["Pwaamei"] = "pme", ["Pwapwa"] = "pop", ["Pyapun"] = "pcw", ["Pye Krumen"] = "pye", ["Pyemmairre"] = "xpb", ["Pyen"] = "pyy", ["Pykobjê"] = "sai-pyk", ["Pyu"] = "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", ["Quebec Sign Language"] = "fcs", ["Querétaro Otomi"] = "otq", ["Quetzaltepec Mixe"] = "pxm", ["Queyu"] = "qvy", ["Quiavicuzas Zapotec"] = "zpj", ["Quileute"] = "qui", ["Quimbaya"] = "sai-qmb", ["Quinigua"] = "nai-qng", ["Quinqui"] = "quq", ["Quioquitani-Quierí Zapotec"] = "ztq", ["Quiotepec Chinantec"] = "chq", ["Quitemo"] = "sai-qtm", ["Rabona"] = "sai-rab", ["Rahambuu"] = "raz", ["Rajah Kabunsuwan Manobo"] = "mqk", ["Raji"] = "rji", ["Rajong"] = "rjg", ["Rakahanga-Manihiki"] = "rkh", ["Ralte"] = "ral", ["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", ["Ratahan"] = "rth", ["Rathawi"] = "rtw", ["Rathwi Bareli"] = "bgd", ["Rawa"] = "rwo", ["Rawat"] = "jnl", ["Rawo"] = "rwa", ["Rayón Zoque"] = "zor", ["Razajerdi"] = "rat", ["Razihi"] = "rzh", ["Reang"] = "ria", ["Red Gelao"] = "gir", ["Reel"] = "atu", ["Rejang Kayan"] = "ree", ["Rema"] = "bow", ["Rembarunga"] = "rmb", ["Rembong"] = "reb", ["Remo"] = "rem", ["Remontado Agta"] = "agv", ["Rempi"] = "rmp", ["Remun"] = "lkj", ["Rennellese"] = "mnv", ["Repanbitip"] = "rpn", ["Rer Bare"] = "rer", ["Rerau"] = "rea", ["Rerep"] = "pgk", ["Reshe"] = "res", ["Resígaro"] = "rgr", ["Retta"] = "ret", ["Reyesano"] = "rey", ["Rhine Franconian"] = "gmw-rfr", ["Riang"] = "ril", ["Riantana"] = "ran", ["Ribun"] = "rir", ["Rigwe"] = "iri", ["Rikbaktsa"] = "rkb", ["Ringgou"] = "rgu", ["Ririo"] = "rri", ["Ritarungo"] = "rit", ["Riung"] = "riu", ["Riverain Sango"] = "snj", ["Rogo"] = "rod", ["Roma"] = "rmm", ["Romani Greek"] = "rge", ["Romanian Sign Language"] = "rms", ["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", ["Roviana"] = "rug", ["Rudbari"] = "rdb", ["Rufiji"] = "rui", ["Ruga"] = "ruh", ["Rukiga"] = "cgg", ["Ruma"] = "ruz", ["Rumu"] = "klq", ["Runga"] = "rou", ["Rungtu"] = "rtc", ["Rungwa"] = "rnw", ["Russenorsk"] = "crp-rsn", ["Russian Sign Language"] = "rsl", ["Ruuli"] = "ruc", ["Ruwund"] = "rnd", ["Rwa"] = "rwk", ["Rwanda-Rundi"] = "rw", ["Sa"] = "sax", ["Sa'a"] = "apb", ["Sa'ban"] = "snv", ["Sa'och"] = "scq", ["Saafi-Saafi"] = "sav", ["Saam"] = "raq", ["Saamia"] = "lsm", ["Saare"] = "uss", ["Sabah Malay"] = "msi", ["Sabanê"] = "sae", ["Sabaot"] = "spy", ["Sabine"] = "sbv", ["Sabir"] = "pml", ["Sabu"] = "hvn", ["Sacapulteco"] = "quv", ["Saep"] = "spd", ["Safaitic"] = "sem-saf", ["Safaliba"] = "saf", ["Safeyoka"] = "apz", ["Safwa"] = "sbk", ["Sagala"] = "sbm", ["Sagalla"] = "tga", ["Sahaptin"] = "nai-spt", ["Sahu"] = "saj", ["Sajau Basap"] = "sjb", ["Sakachep"] = "sch", ["Sakam"] = "skm", ["Sakao"] = "sku", ["Sakata"] = "skt", ["Sake"] = "sak", ["Sala"] = "shq", ["Salampasu"] = "slx", ["Salas"] = "sgu", ["Salchuq"] = "slq", ["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", ["Samaritan Aramaic"] = "sam", ["Samaritan Hebrew"] = "smp", ["Samarokena"] = "tmj", ["Samatao"] = "ysd", ["Samba"] = "smx", ["Sambe"] = "xab", ["Samberigi"] = "ssx", ["Samburu"] = "saq", ["Samoan Plantation Pidgin"] = "cpe-spp", ["Samosa"] = "swm", ["Sampang"] = "rav", ["Samre"] = "sxm", ["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 Quiahije Chatino"] = "ctp-san", ["San Juan Teita Mixtec"] = "xtj", ["San Luís Temalacayuca Popoloca"] = "pps", ["San Marcos Tlalcoyalco Popoloca"] = "pls", ["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", ["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", ["Saparua"] = "spr", ["Sapará"] = "sai-sap", ["Sapo"] = "krn", ["Saponi"] = "spi", ["Sapuan"] = "spu", ["Sapé"] = "spc", ["Sar"] = "mwm", ["Sara"] = "sre", ["Sara Kaba"] = "sbz", ["Sara Kaba Deme"] = "kwg", ["Sara Kaba Náà"] = "kwv", ["Sarangani Blaan"] = "bps", ["Sarangani Manobo"] = "mbs", ["Sarasira"] = "zsa", ["Saraveca"] = "sar", ["Sarli"] = "sdf", ["Sartang"] = "onp", ["Sarua"] = "swy", ["Sarudu"] = "sdu", ["Saruga"] = "sra", ["Sasaru"] = "sxs", ["Tiếng Sassari"] = "sdc", ["Satawalese"] = "stw", ["Sateré-Mawé"] = "mav", ["Sathmar Swabian"] = "gmw-stm", ["Saudi Arabian Sign Language"] = "sdl", ["Sauraseni Apabhramsa"] = "inc-sap", ["Sauri"] = "srt", ["Sause"] = "sao", ["Sausi"] = "ssj", ["Tiếng Savosavo"] = "svs", ["Sawai"] = "szw", ["Saweru"] = "swr", ["Sawi"] = "saw", ["Sawila"] = "swt", ["Saya"] = "say", ["Sayula Popoluca"] = "pos", ["Scanian"] = "gmq-scy", ["Seba"] = "kdg", ["Seberuang"] = "sbx", ["Sebop"] = "sib", ["Sebuyau"] = "snb", ["Sechura"] = "sai-sec", ["Secoya"] = "sey", ["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", ["Sembakung Murut"] = "sbr", ["Semimi"] = "etz", ["Semnani"] = "smy", ["Sempan"] = "xse", ["Senara Sénoufo"] = "seq", ["Senaya"] = "syn", ["Sene"] = "sej", ["Sengele"] = "szg", ["Senggi"] = "snu", ["Sengo"] = "spk", ["Sengseng"] = "ssz", ["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", ["Serili"] = "sve", ["Seroa"] = "kqu", ["Serrano"] = "ser", ["Seru"] = "szd", ["Serua"] = "srw", ["Serudung Murut"] = "srk", ["Serui-Laut"] = "seu", ["Seta"] = "stf", ["Setaman"] = "stm", ["Seti"] = "sbi", ["Sewa Bay"] = "sew", ["Seychellois Creole"] = "crs", ["Sha"] = "scw", ["Shahmirzadi"] = "srz", ["Shahrudi"] = "shm", ["Shall-Zwall"] = "sha", ["Shama-Sambuga"] = "sqa", ["Shamang"] = "xsh", ["Shambala"] = "ksb", ["Shanenawa"] = "swo", ["Shanga"] = "sho", ["Shangzhai"] = "jih", ["Shaozhou Tuhua"] = "zhx-sht", ["Sharanahua"] = "mcd", ["Shark Bay"] = "ssv", ["Sharwa"] = "swq", ["Shasta"] = "sht", ["Shatt"] = "shj", ["Shau"] = "sqh", ["Shawnee"] = "sjw", ["Tiếng Xa"] = "shx", ["Shehri"] = "shv", ["Sheko"] = "she", ["Shelta"] = "sth", ["Shendu"] = "shl", ["Sheni"] = "scv", ["Sherbro"] = "bun", ["Sherdukpen"] = "sdp", ["Shi"] = "shr", ["Shihhi Arabic"] = "ssh", ["Shiki"] = "gua", ["Shilluk"] = "shk", ["Shipibo-Conibo"] = "shp", ["Shixing"] = "sxg", ["Shoo-Minda-Nye"] = "bcv", ["Shoshone"] = "shh", ["Shua"] = "shg", ["Shuar"] = "jiv", ["Shuba"] = "cbq", ["Shumashti"] = "sts", ["Shumcho"] = "scu", ["Shuwa-Zamani"] = "ksa", ["Shwai"] = "shw", ["Sialum"] = "slw", ["Siamou"] = "sif", ["Sian"] = "spg", ["Siane"] = "snp", ["Siang"] = "sya", ["Siar-Lak"] = "sjr", ["Sibe"] = "nco", ["Sibu Melanau"] = "sdx", ["Sicanian"] = "sxc", ["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", ["Sikaiana"] = "sky", ["Sikaritai"] = "tty", ["Sikiana"] = "sik", ["Sikule"] = "skh", ["Sila"] = "slt", ["Silacayoapan Mixtec"] = "mks", ["Sileibi"] = "sbq", ["Silimo"] = "wul", ["Siliput"] = "mkc", ["Silopi"] = "xsp", ["Simaa"] = "sie", ["Simba"] = "sbw", ["Simbali"] = "smg", ["Simbari"] = "smb", ["Simbo"] = "sbb", ["Simeku"] = "smz", ["Simeulue"] = "smr", ["Simte"] = "smt", ["Sinacantán"] = "nai-sin", ["Sinagen"] = "siu", ["Sinasina"] = "sst", ["Sindarin"] = "sjn", ["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", ["Siri"] = "sir", ["Siriano"] = "sri", ["Sirionó"] = "srq", ["Siroi"] = "ssd", ["Siuslaw"] = "sis", ["Sivandi"] = "siy", ["Siwai"] = "siw", ["Siyin Chin"] = "csy", ["Skagit"] = "ska", ["Skalvian"] = "svx", ["Ske"] = "ske", ["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", ["Sok"] = "skk", ["Soko"] = "soc", ["Sokoro"] = "sok", ["Solano"] = "xso", ["Soli"] = "sby", ["Solos"] = "sol", ["Som"] = "smc", ["Somba-Siawari"] = "bmu", ["Somra"] = "ntx", ["Somrai"] = "sor", ["Somray"] = "smu", ["Somyev"] = "kgt", ["Sonaga"] = "ysg", ["Sonde"] = "shc", ["Songe"] = "sop", ["Songomeno"] = "soe", ["Songoora"] = "sod", ["Sonha"] = "soi", ["Sonia"] = "siq", ["Soo"] = "teu", ["Sop"] = "urw", ["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", ["Tiếng Banda Trung Nam"] = "lnl", ["South Central Dinka"] = "dib", ["South Fali"] = "fal", ["South Giziga"] = "giz", ["South Lembata"] = "lmf", ["South Muyu"] = "kts", ["South Nuaulu"] = "nxl", ["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 Nochixtlán Mixtec"] = "mxy", ["Southeastern Pomo"] = "pom", ["Southeastern Puebla Nahuatl"] = "npl", ["Southeastern Tarahumara"] = "tcu", ["Southern Alta"] = "agy", ["Southern Birifor"] = "biv", ["Southern Bobo"] = "bwq", ["Southern Bontoc"] = "obk", ["Southern Catanduanes Bicolano"] = "bln", ["Southern Dagaare"] = "dga", ["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", ["Tiếng Kissi Nam"] = "kss", ["Southern Kiwai"] = "kjd", ["Tiếng Xwarin"] = "sdh", ["Southern Lolopo"] = "ysp", ["Southern Lorung"] = "lrr", ["Southern Ma'di"] = "snm", ["Southern Mashan Hmong"] = "hma", ["Southern Muji"] = "ymc", ["Southern Ngbandi"] = "nbw", ["Southern Nisu"] = "nsd", ["Southern Nuni"] = "nnw", ["Southern Ohlone"] = "css", ["Southern One"] = "osu", ["Southern Pame"] = "pmz", ["Southern Pinghua"] = "csp", ["Southern Pomo"] = "peq", ["Southern Puebla Mixtec"] = "mit", ["Southern Puget Sound Salish"] = "slh", ["Southern Pumi"] = "pmj", ["Southern Qiandong Miao"] = "hms", ["Southern Rengma Naga"] = "nre", ["Southern Sama"] = "ssb", ["Southern Sierra Miwok"] = "skd", ["Southern Tidong"] = "itd", ["Southern Tiwa"] = "tix", ["Southern Toussian"] = "wib", ["Southern Tutchone"] = "tce", ["Southern Valley Yokuts"] = "nai-svy", ["Southwest Gbaya"] = "gso", ["Southwest Palawano"] = "plv", ["Southwest Pashayi"] = "psh", ["Southwest Tanna"] = "nwi", ["Southwestern Bontoc"] = "vbk", ["Southwestern Dinka"] = "dik", ["Southwestern Fars"] = "fay", ["Southwestern Guiyang Hmong"] = "hmg", ["Southwestern Huishui Hmong"] = "hmh", ["Southwestern Nisu"] = "nsv", ["Southwestern 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", ["Sri Lankan Creole Malay"] = "sci", ["Sri Lankan Sign Language"] = "sqs", ["Stod Bhoti"] = "sbu", ["Stoney"] = "sto", ["Suabo"] = "szp", ["Suarmin"] = "seo", ["Suau"] = "swp", ["Suba"] = "sxb", ["Suba-Simbiti"] = "ssc", ["Subi"] = "xsj", ["Subiya"] = "sbs", ["Subtiaba"] = "sut", ["Sudest"] = "tgo", ["Sudovian"] = "xsv", ["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", ["Tiếng Sumbawa"] = "smw", ["Sumbwa"] = "suw", ["Sumtu Chin"] = "csv", ["Sunam"] = "ssk", ["Sunum"] = "ymn", ["Sunwar"] = "suz", ["Suoy"] = "syo", ["Supyire"] = "spp", ["Sur"] = "tdl", ["Surbakhal"] = "sbj", ["Surigaonon"] = "sgd", ["Sursurunga"] = "sgz", ["Suruahá"] = "swx", ["Surubu"] = "sde", ["Suruí"] = "sru", ["Suruí Do Pará"] = "mdz", ["Susquehannock"] = "sqn", ["Susuami"] = "ssu", ["Suundi"] = "sdj", ["Suwawa"] = "swu", ["Suyá"] = "suy", ["Swabian"] = "swg", ["Swampy Cree"] = "csw", ["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", ["T'en"] = "tct", ["Tabaa Zapotec"] = "zat", ["Tabancale"] = "sai-tab", ["Tabaru"] = "tby", ["Tabasco Chontal"] = "chf", ["Tabasco Nahuatl"] = "nhc", ["Tabasco Zoque"] = "zoq", ["Tabla"] = "tnm", ["Tabo"] = "knv", ["Tabriak"] = "tzx", ["Tacahua Mixtec"] = "xtt", ["Tacana"] = "tna", ["Tadaksahak"] = "dsq", ["Tae'"] = "rob", ["Tafreshi"] = "xme-taf", ["Tagabawa"] = "bgs", ["Tagakaulu Kalagan"] = "klg", ["Tagbanwa"] = "tbw", ["Tagbu"] = "tbm", ["Tagish"] = "tgx", ["Tagwana Senoufo"] = "tgw", ["Tai"] = "taw", ["Tai Hang Tong"] = "thc", ["Tai Hongjin"] = "tiz", ["Tai Long"] = "thi", ["Tai Thanh"] = "tmm", ["Tai Ya"] = "cuu", ["Taiap"] = "gpn", ["Taikat"] = "aos", ["Tainae"] = "ago", ["Tairuma"] = "uar", ["Taita"] = "dav", ["Taiwan Sign Language"] = "tss", ["Taje"] = "pee", ["Tiếng Tajio"] = "tdj", ["Tajuasohn"] = "tja", ["Takelma"] = "tkm", ["Takia"] = "tbc", ["Takka Apabhramsa"] = "inc-tak", ["Takua"] = "tkz", ["Takuu"] = "nho", ["Takwane"] = "tke", ["Talaud"] = "tld", ["Taliabu"] = "tlv", ["Talieng"] = "tdf", ["Talinga-Bwisi"] = "tlj", ["Talise"] = "tlr", ["Tallán"] = "sai-tal", ["Talodi"] = "tlo", ["Taloki"] = "tlk", ["Talondo'"] = "tln", ["Talu"] = "yta", ["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", ["Tamnim Citak"] = "tml", ["Tampias Lobu"] = "low", ["Tampulma"] = "tpm", ["Tanacross"] = "tcb", ["Tanahmerah"] = "tcm", ["Tanapag"] = "tpv", ["Tandaganon"] = "tgn", ["Tandia"] = "tni", ["Tanema"] = "tnx", ["Tangale"] = "tan", ["Tangam"] = "sit-tgm", ["Tanggu"] = "tgu", ["Tangko"] = "tkx", ["Tangsa"] = "nst", ["Tanguat"] = "tbs", ["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", ["Tar Gula"] = "kcm", ["Tarairiú"] = "sai-trr", ["Tarao"] = "tro", ["Taraon"] = "mhu", ["Tareng"] = "tgr", ["Tarjumo"] = "txj", ["Tarok"] = "yer", ["Tarpia"] = "tpf", ["Tartessian"] = "txr", ["Taruma"] = "tdm", ["Tasmate"] = "tmt", ["Tataltepec Chatino"] = "cta", ["Tatana"] = "txx", ["Tataviam"] = "azc-tat", ["Tauade"] = "ttd", ["Taulil"] = "tuh", ["Taupota"] = "tpa", ["Taushiro"] = "trr", ["Tauya"] = "tya", ["Taveta"] = "tvs", ["Tawala"] = "tbo", ["Tawandê"] = "xtw", ["Tawang Monpa"] = "twm", ["Tawasa"] = "nai-taw", ["Taworta"] = "tbp", ["Tawoyan"] = "twy", ["Tawr Chin"] = "tcp", ["Tay Khang"] = "tnu", ["Tayabas Ayta"] = "ayy", ["Tayo"] = "cks", ["Tboli"] = "tbl", ["Tchitchege"] = "tck", ["Tchumbuli"] = "bqa", ["Te'un"] = "tve", ["Teanu"] = "tkw", ["Tebul Sign Language"] = "tsy", ["Tebul Ure Dogon"] = "dtu", ["Tecpatlán Totonac"] = "tcw", ["Tedaga"] = "tuq", ["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", ["Tembé"] = "tqb", ["Teme"] = "tdo", ["Temein"] = "teq", ["Temi"] = "soz", ["Temne"] = "tem", ["Temoaya Otomi"] = "ott", ["Tempasuk Dusun"] = "tdu", ["Tenango Otomi"] = "otn", ["Tene Kan Dogon"] = "dtk", ["Tenggarong Kutai Malay"] = "vkt", ["Tenino"] = "tqn", ["Tenis"] = "tns", ["Tennet"] = "tex", ["Teojomulco Chatino"] = "omq-teo", ["Teop"] = "tio", ["Teor"] = "tev", ["Tepecano"] = "tep", ["Tepetotutla Chinantec"] = "cnt", ["Tepeuxila Cuicatec"] = "cux", ["Tepo Krumen"] = "ted", ["Tiếng Mixtec Teposcolula"] = "omq-tel", ["Tequistlatec"] = "nai-teq", ["Tera"] = "ttr", ["Terebu"] = "trb", ["Terei"] = "buo", ["Tereno"] = "ter", ["Tereweng"] = "twg", ["Terik"] = "tec", ["Termanu"] = "twu", ["Ternateño"] = "tmg", ["Tese"] = "keg", ["Teshenawa"] = "twc", ["Tetela"] = "tll", ["Tetelcingo Nahuatl"] = "nhg", ["Tetete"] = "teb", ["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", ["Thado Chin"] = "tcz", ["Thai Sign Language"] = "tsq", ["Thaiphum Chin"] = "cth", ["Thakali"] = "ths", ["Thamudic"] = "sem-tha", ["Thangmi"] = "thf", ["Thao"] = "ssf", ["Tharaka"] = "thk", ["Tharrgari"] = "dhr", ["Thawa"] = "xtv", ["Thopho"] = "ytp", ["Thu Lao"] = "tyl", ["Thulung"] = "tdh", ["Thurawal"] = "tbh", ["Thuri"] = "thu", ["Tiagbamrin Aizi"] = "ahi", ["Tiale"] = "mnl", ["Tibea"] = "ngy", ["Ticuna"] = "tca", ["Tidaá Mixtec"] = "mtx", ["Tidore"] = "tvo", ["Tiemacèwè Bozo"] = "boo", ["Tiene"] = "tii", ["Tifal"] = "tif", ["Tigak"] = "tgc", ["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", ["Tingui-Boto"] = "tgv", ["Tinigua"] = "tit", ["Tinoc Kallahan"] = "tne", ["Tinputz"] = "tpz", ["Tira"] = "tic", ["Tirahi"] = "tra", ["Tiranige Diga Dogon"] = "tde", ["Tircul"] = "pyx", ["Tiri"] = "cir", ["Tita"] = "tdq", ["Titan"] = "ttv", ["Tiv"] = "tiv", ["Tiéfo"] = "tiq", ["Tiéyaxo Bozo"] = "boz", ["Tjurruru"] = "tju", ["Tlacoatzintepec Chinantec"] = "ctl", ["Tlacolulita Zapotec"] = "zpk", ["Tlahuica"] = "ocu", ["Tlahuitoltepec Mixe"] = "mxp", ["Tlamacazapa Nahuatl"] = "nuz", ["Tlazoyaltepec Mixtec"] = "mqh", ["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", ["Tobilung"] = "tgb", ["Tobo"] = "tbv", ["Tocantins Asurini"] = "asu", ["Tofanma"] = "tlg", ["Tofin Gbe"] = "tfi", ["Togbo-Vara Banda"] = "tor", ["Togoyo"] = "tgy", ["Tojolabal"] = "toj", ["Toka-Leya"] = "dov", ["Tokano"] = "zuh", ["Tol"] = "jic", ["Tolai"] = "ksd", ["Tolaki"] = "lbw", ["Tolomako"] = "tlm", ["Tolowa"] = "tol", ["Toloza"] = "ytl", ["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", ["Tonsawang"] = "tnw", ["Tonsea"] = "txs", ["Tontemboan"] = "tnt", ["Toogee"] = "xpx", ["Topoiyo"] = "toy", ["Toposa"] = "toq", ["Toraja-Sa'dan"] = "sda", ["Toram"] = "trj", ["Torau"] = "ttu", ["Toro"] = "tdv", ["Toro So Dogon"] = "dts", ["Toro Tegu Dogon"] = "dtt", ["Toromono"] = "tno", ["Torona"] = "tqr", ["Torres Strait Creole"] = "tcs", ["Torricelli"] = "tei", ["Torricelli Yau"] = "yyu", ["Torá"] = "trz", ["Tosu"] = "sit-tos", ["Totela"] = "ttl", ["Totoli"] = "txe", ["Totomachapan Zapotec"] = "zph", ["Totontepec Mixe"] = "mto", ["Totoro"] = "ttk", ["Touo"] = "tqu", ["Toura"] = "neb", ["Tourangeau"] = "roa-tou", ["Towei"] = "ttn", ["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", ["Truká"] = "tka", ["Trumai"] = "tpy", ["Ts'ün-Lao"] = "tsl", ["Tsaangi"] = "tsa", ["Tsafiki"] = "cof", ["Tsakwambo"] = "kvz", ["Tsetsaut"] = "txc", ["Tshobdun"] = "sit-tsh", ["Tshwa"] = "hio", ["Tsikimba"] = "kdl", ["Tsimané"] = "cas", ["Tsishingini"] = "tsw", ["Tso"] = "ldp", ["Tsogo"] = "tsv", ["Tsotsitaal"] = "fly", ["Tsum"] = "ttz", ["Tsuvadi"] = "tvd", ["Tsuvan"] = "tsh", ["Tswa"] = "tsc", ["Tswapong"] = "two", ["Tubar"] = "tbu", ["Tucano"] = "tuo", ["Tugen"] = "tuy", ["Tugun"] = "tzn", ["Tugutil"] = "tuj", ["Tukpa"] = "tpq", ["Tukudede"] = "tkd", ["Tukumanféd"] = "tkf", ["Tula"] = "tul", ["Tule-Kaweah Yokuts"] = "nai-tky", ["Tulehu"] = "tlu", ["Tulishi"] = "tey", ["Tulu-Bohuai"] = "rak", ["Tulua"] = "aus-tul", ["Tuma-Irumu"] = "iou", ["Tumak"] = "tmc", ["Tumi"] = "kku", ["Tumleo"] = "tmq", ["Tumshuqese"] = "xtq", ["Tumtum"] = "tbr", ["Tumulung Sisaala"] = "sil", ["Tunen"] = "tvu", ["Tungag"] = "lcm", ["Tunggare"] = "trt", ["Tunia"] = "tug", ["Tunisian Sign Language"] = "tse", ["Tunjung"] = "tjg", ["Tunumiisut"] = "esx-tut", ["Tunzu"] = "dza", ["Tuotomb"] = "ttf", ["Tuparí"] = "tpr", ["Tupinikin"] = "tpk", ["Tupuri"] = "tui", ["Turaka"] = "trh", ["Turi"] = "trd", ["Turiwára"] = "twt", ["Turka"] = "tuz", ["Turkana"] = "tuv", ["Turkish Sign Language"] = "tsm", ["Turks and Caicos Creole English"] = "tch", ["Turumsa"] = "tqm", ["Turung"] = "try", ["Tuscarora"] = "tus", ["Tutelo"] = "tta", ["Tutong"] = "ttg", ["Tutsa Naga"] = "tvt", ["Tutuba"] = "tmi", ["Tututepec Mixtec"] = "mtu", ["Tututni"] = "tuu", ["Tuwali Ifugao"] = "ifk", ["Tuwari"] = "tww", ["Tuxináwa"] = "tux", ["Tuxá"] = "tud", ["Tuyuca"] = "tue", ["Twana"] = "twa", ["Twendi"] = "twn", ["Tyaraity"] = "woa", ["Tyerrernotepanner"] = "xph", ["Tz'utujil"] = "tzj", ["Tzeltal"] = "tzh", ["Tày Tac"] = "tyt", ["Téén"] = "lor", ["Tübatulabal"] = "tub", ["Uab Meto"] = "aoz", ["Uamué"] = "uam", ["Uare"] = "ksj", ["Ubaghara"] = "byc", ["Ubang"] = "uba", ["Ubi"] = "ubi", ["Ubir"] = "ubr", ["Ucayali-Yurúa Ashéninka"] = "cpb", ["Uda"] = "uda", ["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", ["Uldeme"] = "udl", ["Ulithian"] = "uli", ["Ulumanda'"] = "ulm", ["Ulwa"] = "ulw", ["Uma"] = "ppk", ["Uma' Lasan"] = "xky", ["Uma' Lung"] = "ulu", ["Umanakaina"] = "gdn", ["Umatilla"] = "uma", ["Umbindhamu"] = "umd", ["Umbu-Ungu"] = "ubu", ["Umbugarla"] = "umr", ["Umbuygamu"] = "umg", ["Umeda"] = "upi", ["Umiida"] = "xud", ["Umiray Dumaget Agta"] = "due", ["Umon"] = "umm", ["Umotína"] = "umo", ["Umpila"] = "ump", ["Una"] = "mtg", ["Unas"] = "art-una", ["Unde Kaili"] = "unz", ["Uneme"] = "une", ["Unggaranggu"] = "xun", ["Unggumi"] = "xgu", ["Tiếng Uni"] = "uni", ["Unserdeutsch"] = "uln", ["Unua"] = "onu", ["Unubahe"] = "unu", ["Uokha"] = "uok", ["Upper Chehalis"] = "cjh", ["Upper Grand Valley Dani"] = "dna", ["Upper Kuskokwim"] = "kuu", ["Upper Necaxa Totonac"] = "tku", ["Upper Tanana"] = "tau", ["Upper Taromi"] = "tov", ["Upper Umpqua"] = "xup", ["Ura (New Guinea)"] = "uro", ["Ura (Vanuatu)"] = "uur", ["Uradhi"] = "urf", ["Urapmin"] = "urm", ["Urarina"] = "ura", ["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", ["Uruguayan Sign Language"] = "ugy", ["Urumi"] = "uru", ["Usaghade"] = "usk", ["Usan"] = "wnu", ["Usarufa"] = "usa", ["Usila Chinantec"] = "cuc", ["Uspanteco"] = "usp", ["Utarmbung"] = "omo", ["Ute"] = "ute", ["Utu"] = "utu", ["Uwinymil"] = "aus-uwi", ["Uya"] = "usu", ["Uyajitaya"] = "duk", ["Uzekwe"] = "eze", ["Vaghua"] = "tva", ["Vagla"] = "vag", ["Vai"] = "vai", ["Vaiphei"] = "vap", ["Vale"] = "vae", ["Valencian Sign Language"] = "vsv", ["Valle Nacional Chinantec"] = "cvn", ["Valley Maidu"] = "vmv", ["Valman"] = "van", ["Valpei"] = "vlp", ["Vamale"] = "mkt", ["Vame"] = "mlr", ["Vandalic"] = "xvn", ["Vangunu"] = "mpr", ["Vanimo"] = "vam", ["Vanji"] = "ira-wnj", ["Vanuma"] = "vau", ["Vao"] = "vao", ["Varhadi"] = "vah", ["Varisi"] = "vrs", ["Vayu"] = "vay", ["Veddah"] = "ved", ["Vehes"] = "val", ["Vemgo-Mabas"] = "vem", ["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", ["Viti"] = "vit", ["Vitou"] = "vto", ["Viya"] = "gev", ["Vlax Romani"] = "rmy", ["Volga German"] = "gmw-vog", ["Vono"] = "kch", ["Voro"] = "vor", ["Vracada Apabhramsa"] = "inc-vra", ["Vumbu"] = "vum", ["Vunapu"] = "vnp", ["Vunjo"] = "vun", ["Vute"] = "vut", ["Wa"] = "wbm", ["Wa'ema"] = "wag", ["Waamwang"] = "wmn", ["Wab"] = "wab", ["Wabo"] = "wbb", ["Waboda"] = "kmx", ["Wadaginam"] = "wdg", ["Waddar"] = "wbq", ["Wadi Wadi"] = "xwd", ["Wadjabangayi"] = "wdy", ["Wadjiginy"] = "wdj", ["Wadjigu"] = "wdu", ["Wae Rana"] = "wrx", ["Waffa"] = "waj", ["Wagawaga"] = "wgb", ["Wagaya"] = "wga", ["Wagdi"] = "wbr", ["Wageman"] = "waq", ["Wahau Kayan"] = "whu", ["Wahau Kenyah"] = "whk", ["Waigali"] = "wbk", ["Waigeo"] = "wgo", ["Waikuri"] = "nai-wai", ["Wailaki"] = "wlk", ["Wailapa"] = "wlr", ["Waima'a"] = "wmh", ["Waimiri-Atroari"] = "atr", ["Wainumá"] = "awd-wai", ["Waioli"] = "wli", ["Waitaká"] = "sai-wai", ["Waja"] = "wja", ["Wajarri"] = "wbv", ["Wajuk"] = "xwj", ["Waka"] = "wav", ["Wakawaka"] = "wkw", ["Wakoná"] = "waf", ["Wala"] = "lgl", ["Walak"] = "wlw", ["Walangama"] = "nlw", ["Wali (Ghana)"] = "wlx", ["Wali (Sudan)"] = "wll", ["Waling"] = "wly", ["Walio"] = "wla", ["Walla Walla"] = "waa", ["Walmajarri"] = "wmt", ["Wam"] = "wmo", ["Wamas"] = "wmc", ["Wambaya"] = "wmb", ["Wambon"] = "wms", ["Wamey"] = "cou", ["Wamin"] = "wmi", ["Wampar"] = "lbq", ["Wampur"] = "waz", ["Wan"] = "wan", ["Wanambre"] = "wnb", ["Wanap"] = "wnp", ["Wanda"] = "wbh", ["Wandala"] = "mfi", ["Wandamen"] = "wad", ["Wandarang"] = "wnd", ["Wandji"] = "wdd", ["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", ["Wara"] = "wbf", ["Warao"] = "wba", ["Warapu"] = "wra", ["Waray Sorsogon"] = "srv", ["Wardandi"] = "wxw", ["Warembori"] = "wsa", ["Wari'"] = "pav", ["Waris"] = "wrs", ["Waritai"] = "wbe", ["Wariyangga"] = "wri", ["Warkay-Bipim"] = "bgv", ["Warlmanpa"] = "wrl", ["Tiếng 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", ["Wasa"] = "wss", ["Wasco-Wishram"] = "wac", ["Wasembo"] = "gsp", ["Washo"] = "was", ["Waskia"] = "wsk", ["Wasu"] = "wsu", ["Watakataui"] = "wtk", ["Watam"] = "wax", ["Wathaurong"] = "wth", ["Watiwa"] = "wtf", ["Watubela"] = "wah", ["Waube"] = "kop", ["Wauja"] = "wau", ["Wauyai"] = "wuy", ["Wawa"] = "www", ["Tiếng Ngõa Hương"] = "wxa", ["Wayoró"] = "wyr", ["Wayumará"] = "sai-way", ["Wedau"] = "wed", ["Weh"] = "weh", ["Welaung"] = "weu", ["Weliki"] = "klh", ["Welsh Romani"] = "rmw", ["Wemale"] = "weo", ["Weme Gbe"] = "wem", ["Wendat"] = "wdt", ["Weri"] = "wer", ["Wersing"] = "kvw", ["West Albay Bikol"] = "fbl", ["West Ambae"] = "nnd", ["West Central Banda"] = "bbp", ["West Damar"] = "drn", ["West Greenlandic Pidgin"] = "crp-gep", ["West Lembata"] = "lmj", ["West Masela"] = "mss", ["West Tarangan"] = "txn", ["West Uvean"] = "uve", ["West-Central Limba"] = "lia", ["Western Arrernte"] = "are", ["Western Bolivian Guaraní"] = "gnw", ["Western Bukidnon Manobo"] = "mbb", ["Western Dani"] = "dnw", ["Western Durango Nahuatl"] = "azn", ["Western Fijian"] = "wyy", ["Western Gurung"] = "gvr", ["Western Jicaque"] = "und-wji", ["Western Juxtlahuaca Mixtec"] = "jmx", ["Western Karaboro"] = "kza", ["Western Keres"] = "kjq", ["Tiếng Krahn"] = "krw", ["Western Lalu"] = "ywl", ["Western Maninkakan"] = "mlq", ["Western Mashan Hmong"] = "hmw", ["Western Meohang"] = "raf", ["Western Muria"] = "mut", ["Western Panjabi"] = "pnb", ["Western Penan"] = "pne", ["Western Sisaala"] = "ssl", ["Western Subanon"] = "suc", ["Western Tawbuid"] = "twb", ["Western Totonac"] = "tqt", ["Western Tunebo"] = "tnb", ["Western Xwla Gbe"] = "xwl", ["Westrobothnian"] = "gmq-bot", ["Weyewa"] = "wew", ["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", ["Wiraféd"] = "wir", ["Wirangu"] = "wgu", ["Wiru"] = "wiu", ["Wirö"] = "wpc", ["Wiwa"] = "mbp", ["Woccon"] = "xwc", ["Wogamusin"] = "wog", ["Wogeo"] = "woc", ["Woi"] = "wbw", ["Wojenaka"] = "jod", ["Wolani"] = "wod", ["Woleaian"] = "woe", ["Womo"] = "wmx", ["Wong-gie"] = "aus-won", ["Wongo"] = "won", ["Woods Cree"] = "cwd", ["Woria"] = "wor", ["Worimi"] = "kda", ["Worodougou"] = "jud", ["Worora"] = "wro", ["Wotapuri-Katarqalai"] = "wsv", ["Woun Meu"] = "noa", ["Wudu"] = "wud", ["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", ["Wuvulu-Aua"] = "wuv", ["Wyandot"] = "wya", ["Wára"] = "tci", ["Wãpha"] = "juw", ["Wè Southern"] = "gxx", ["Wè Western"] = "wec", ["Xadani Zapotec"] = "zax", ["Xakriabá"] = "xkr", ["Xanaguía Zapotec"] = "ztg", ["Xaragure"] = "axx", ["Xerénte"] = "xer", ["Xetá"] = "xet", ["Xicotepec de Juárez Totonac"] = "too", ["Xinca"] = "xin", ["Xingú Asuriní"] = "asn", ["Xipaya"] = "xiy", ["Xiri"] = "xii", ["Xiriâna"] = "xir", ["Xishanba Lalo"] = "ywt", ["Xocó"] = "sai-xoc", ["Xokleng"] = "xok", ["Xukurú"] = "xoo", ["Xwela Gbe"] = "xwe", ["Yaa"] = "iyx", ["Yabarana"] = "yar", ["Yabaâna"] = "ybn", ["Yaben"] = "ybm", ["Yabong"] = "ybo", ["Yabula Yabula"] = "yxy", ["Yace"] = "ekr", ["Yafi"] = "wfg", ["Yagara"] = "yxg", ["Yagaria"] = "ygr", ["Yagomi"] = "ygm", ["Yagua"] = "yad", ["Yagwoia"] = "ygw", ["Yahadian"] = "ner", ["Yahang"] = "rhp", ["Yahuna"] = "ynu", ["Yaka"] = "yaf", ["Yakaikeke"] = "ykk", ["Yakoma"] = "yky", ["Tiếng Yala"] = "yba", ["Yalahatan"] = "jal", ["Yalakalore"] = "xyl", ["Yalarnnga"] = "ylr", ["Yale"] = "nce", ["Yaleba"] = "ylb", ["Yalunka"] = "yal", ["Yalálag Zapotec"] = "zpu", ["Yamap"] = "ymp", ["Yamba"] = "yam", ["Yambes"] = "ymb", ["Yambeta"] = "yat", ["Yamdena"] = "jmd", ["Yameo"] = "yme", ["Yaminahua"] = "yaa", ["Yamongeri"] = "ymg", ["Yan-nhangu"] = "jay", ["Yana"] = "ynn", ["Yanda"] = "yda", ["Yanda Dogon"] = "dym", ["Yandjibara"] = "xyb", ["Yandruwandha"] = "ynd", ["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ö"] = "guu", ["Yanomámi"] = "wca", ["Yansi"] = "yns", ["Yaosakor Asmat"] = "asy", ["Yaouré"] = "yre", ["Yaqay"] = "jaq", ["Yaqui"] = "yaq", ["Yarawata"] = "yrw", ["Yareba"] = "yrb", ["Yareni Zapotec"] = "zae", ["Yarli"] = "yxl", ["Yarluyandi"] = "yry", ["Yarumá"] = "sai-yar", ["Yarí"] = "yri", ["Yasa"] = "yko", ["Yatay"] = "yty", ["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", ["Yei"] = "jei", ["Yekhee"] = "ets", ["Yekora"] = "ykr", ["Yelmek"] = "jel", ["Yelogu"] = "ylg", ["Yemba"] = "ybb", ["Tiếng Ả Rập Sana'a"] = "ayn", ["Yendang"] = "yen", ["Yeni"] = "yei", ["Yeniche"] = "yec", ["Yerakai"] = "yra", ["Yeretuar"] = "gop", ["Yerukula"] = "yeu", ["Yeskwa"] = "yes", ["Yessan-Mayo"] = "yss", ["Yetfa"] = "yet", ["Yeyi"] = "yey", ["Yil"] = "yll", ["Yimas"] = "yee", ["Yimchungru Naga"] = "yim", ["Yinbaw Karen"] = "kvu", ["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", ["Yolngu Sign Language"] = "ygs", ["Yoloxochitl Mixtec"] = "xty", ["Yombe"] = "yom", ["Yopno"] = "yut", ["Yora"] = "mts", ["Yorta Yorta"] = "xyy", ["Younuo Bunu"] = "buh", ["Yout Wam"] = "ytw", ["Yuaga"] = "nua", ["Yucatec Maya Sign Language"] = "msd", ["Yuchi"] = "yuc", ["Yucuañe Mixtec"] = "mvg", ["Yucuna"] = "ycn", ["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", ["Yuru"] = "ljx", ["Yurumanguí"] = "sai-yur", ["Yurutí"] = "yui", ["Yutanduchi Mixtec"] = "mab", ["Yuwana"] = "yau", ["Yuyu"] = "yxu", ["Zaachila Zapotec"] = "ztx", ["Zabana"] = "kji", ["Zacatlán-Ahuacatlán-Tepetzintla Nahuatl"] = "nhi", ["Zakhring"] = "zkr", ["Zambian Sign Language"] = "zsl", ["Zan Gula"] = "zna", ["Zanaki"] = "zak", ["Zande"] = "zne", ["Zangwal"] = "zah", ["Zaramo"] = "zaj", ["Zari"] = "zaz", ["Zauzou"] = "zal", ["Zazao"] = "jaj", ["Zbu"] = "sit-zbu", ["Zeem"] = "zua", ["Zemba"] = "dhm", ["Zeme Naga"] = "nzm", ["Zemgalian"] = "xzm", ["Zenag"] = "zeg", ["Zenzontepec Chatino"] = "czn", ["Zhang-Zhung"] = "xzh", ["Zhire"] = "zhi", ["Zhoa"] = "zhw", ["Zhár"] = "jjr", ["Zia"] = "zia", ["Zialo"] = "zil", ["Zigula"] = "ziw", ["Zimakani"] = "zik", ["Zimba"] = "zmb", ["Zimbabwe Sign Language"] = "zib", ["Zinza"] = "zin", ["Zipser German"] = "gmw-zps", ["Zire"] = "sih", ["Ziriya"] = "zir", ["Zizilivakan"] = "ziz", ["Zo'é"] = "pto", ["Zokhuo"] = "yzk", ["Zotung Chin"] = "czt", ["Zulgo-Gemzek"] = "gnd", ["Zumaya"] = "zuy", ["Zuni"] = "zun", ["Zuwara"] = "ber-zuw", ["Zyphe"] = "zyp", ["Záparo"] = "zro", ["Biệt ngữ Chinook"] = "chn", ["Không xác định ngôn ngữ"] = "und", ["Ngôn ngữ ký hiệu Mỹ"] = "ase", ["Tiếng 'Are'are"] = "alu", ["Tiếng A Xương"] = "acn", ["Tiếng A'ou"] = "aou", ["Tiếng A-Hmao"] = "hmd", ["Tiếng Aari"] = "aiw", ["Tiếng Aari nguyên thủy"] = "omv-aro-pro", ["Tiếng Aasax"] = "aas", ["Tiếng Abaga"] = "abg", ["Tiếng Abai"] = "poz-abi", ["Tiếng Abanyom"] = "abm", ["Tiếng Abau"] = "aau", ["Tiếng Abaza"] = "abq", ["Tiếng Abidji"] = "abi", ["Tiếng Abinomn"] = "bsa", ["Tiếng Abkhaz"] = "ab", ["Tiếng Abkhaz-Abaza nguyên thủy"] = "cau-abz-pro", ["Tiếng Abon"] = "abo", ["Tiếng Abron"] = "abr", ["Tiếng Abui"] = "abz", ["Tiếng Abure"] = "abu", ["Tiếng Aceh"] = "ace", ["Tiếng Achawa"] = "aca", ["Tiếng Acheron"] = "acz", ["Tiếng Achi"] = "acr", ["Tiếng Acholi"] = "ach", ["Tiếng Achuar"] = "acu", ["Tiếng Achumawi"] = "acv", ["Tiếng Adangme"] = "ada", ["Tiếng Adi"] = "adi", ["Tiếng Adja"] = "ajg", ["Tiếng Adnyamathanha"] = "adt", ["Tiếng Adygea"] = "ady", ["Tiếng Adzera"] = "adz", ["Tiếng Aer"] = "aeq", ["Tiếng Afade"] = "aal", ["Tiếng Afar"] = "aa", ["Tiếng Afrikaans"] = "af", ["Tiếng Agatu"] = "agc", ["Tiếng Agawam"] = "alg-aga", ["Tiếng Aghem"] = "agq", ["Tiếng Aghul"] = "agx", ["Tiếng Aghwan"] = "xag", ["Tiếng Agta Dupaningan"] = "duo", ["Tiếng Aguacateca"] = "agu", ["Tiếng Ahom"] = "aho", ["Tiếng Ahtna"] = "aht", ["Tiếng Ai"] = "eee", ["Tiếng Ai Cập"] = "egy", ["Tiếng Ai Cập bình dân"] = "egx-dem", ["Tiếng Aimol"] = "aim", ["Tiếng Ainu"] = "ain", ["Tiếng Aiton"] = "aio", ["Tiếng Ajië"] = "aji", ["Tiếng Aka-Bo"] = "akm", ["Tiếng Aka-Jeru"] = "akj", ["Tiếng Aka-Kede"] = "akx", ["Tiếng Akan"] = "ak", ["Tiếng Akaselem"] = "aks", ["Tiếng Akawaio"] = "ake", ["Tiếng Akha"] = "ahk", ["Tiếng Akhvakh"] = "akv", ["Tiếng Akkad"] = "akk", ["Tiếng Aklanon"] = "akl", ["Tiếng Akoose"] = "bss", ["Tiếng Akuntsu"] = "aqz", ["Tiếng Alaba-K’abeena"] = "alw", ["Tiếng Alabama"] = "akz", ["Tiếng Alagwa"] = "wbj", ["Tiếng Alak"] = "alk", ["Tiếng Alamblak"] = "amp", ["Tiếng Alangan"] = "alj", ["Tiếng Alawa"] = "alh", ["Tiếng Albani"] = "sq", ["Tiếng Albani nguyên thủy"] = "sqj-pro", ["Tiếng Alchuka"] = "tuw-alk", ["Tiếng Alekano"] = "gah", ["Tiếng Aleut"] = "ale", ["Tiếng Algic nguyên thủy"] = "aql-pro", ["Tiếng Algonquin"] = "alq", ["Tiếng Algonquin nguyên thủy"] = "alg-pro", ["Tiếng Allar"] = "all", ["Tiếng Alsea"] = "aes", ["Tiếng Alumu-Tesu"] = "aab", ["Tiếng Alutor"] = "alr", ["Tiếng Alyentiyak"] = "sai-all", ["Tiếng Ama"] = "amm", ["Tiếng Amahuaca"] = "amc", ["Tiếng Amaimon"] = "ali", ["Tiếng Amal"] = "aad", ["Tiếng Amanab"] = "amn", ["Tiếng Amarasi"] = "aaz", ["Tiếng Ambai"] = "amk", ["Tiếng Ambrak"] = "aag", ["Tiếng Ambulas"] = "abt", ["Tiếng Amdang"] = "amj", ["Tiếng Amhara"] = "am", ["Tiếng Amis"] = "ami", ["Tiếng Amurdag"] = "amg", ["Tiếng Amuzgo"] = "amu", ["Tiếng Anaang"] = "anw", ["Tiếng Anal"] = "anm", ["Tiếng Anauyá"] = "awd-ana", ["Tiếng Andi"] = "ani", ["Tiếng Angami"] = "njm", ["Tiếng Angika"] = "anp", ["Tiếng Angkula"] = "aus-ang", ["Tiếng Angola"] = "aoa", ["Tiếng Anh"] = "en", ["Tiếng Anh Solombala"] = "crp-slb", ["Tiếng Anh cổ"] = "ang", ["Tiếng Anh trung đại"] = "enm", ["Tiếng Anii"] = "blo", ["Tiếng Ankave"] = "aak", ["Tiếng Annobón"] = "fab", ["Tiếng Anuak"] = "anu", ["Tiếng Anuki"] = "aui", ["Tiếng Anyi"] = "any", ["Tiếng Ao"] = "njo", ["Tiếng Apabhramsa"] = "inc-apa", ["Tiếng Apache Tây"] = "apw", ["Tiếng Apache đồng bằng"] = "apk", ["Tiếng Aparaí"] = "apy", ["Tiếng Apatani"] = "apt", ["Tiếng Apinayé"] = "apn", ["Tiếng Aputai"] = "apx", ["Tiếng Aquitani"] = "xaq", ["Tiếng Aragon"] = "an", ["Tiếng Araki"] = "akr", ["Tiếng Arakwal"] = "rkw", ["Tiếng Aram"] = "arc", ["Tiếng Aranadan"] = "aaf", ["Tiếng Arapaho"] = "arp", ["Tiếng Arawak nguyên thủy"] = "awd-pro", ["Tiếng Araweté"] = "awt", ["Tiếng Archi"] = "aqc", ["Tiếng Arem"] = "aem", ["Tiếng Argobba"] = "agj", ["Tiếng Arhuaco"] = "arh", ["Tiếng Ari"] = "aac", ["Tiếng Arin"] = "xrn", ["Tiếng Armenia"] = "hy", ["Tiếng Armenia cổ"] = "xcl", ["Tiếng Armenia trung đại"] = "axm", ["Tiếng Aromania"] = "rup", ["Tiếng Arrernte Đông"] = "aer", ["Tiếng Ashkun"] = "ask", ["Tiếng Ashraaf"] = "cus-ash", ["Tiếng Ashéninka Pajonal"] = "cjo", ["Tiếng Asi"] = "bno", ["Tiếng Askopan"] = "eiv", ["Tiếng Asli nguyên thủy"] = "mkh-asl-pro", ["Tiếng Assam"] = "as", ["Tiếng Assam cận đại"] = "inc-oas", ["Tiếng Assan"] = "xss", ["Tiếng Assiniboine"] = "asb", ["Tiếng Asturias"] = "ast", ["Tiếng Asumboa"] = "aua", ["Tiếng Asur"] = "asr", ["Tiếng Atayal"] = "tay", ["Tiếng Atemble"] = "ate", ["Tiếng Athabasca nguyên thủy"] = "ath-pro", ["Tiếng Athpariya"] = "aph", ["Tiếng Atikamekw"] = "atj", ["Tiếng Atong (Ấn Độ)"] = "aot", ["Tiếng Atsahuaca"] = "atc", ["Tiếng Auhelawa"] = "kud", ["Tiếng Aukan"] = "djk", ["Tiếng Avar"] = "av", ["Tiếng Avar-Andic nguyên thủy"] = "cau-ava-pro", ["Tiếng Avatime"] = "avn", ["Tiếng Avesta"] = "ae", ["Tiếng Avokaya"] = "avu", ["Tiếng Awa (Trung Quốc)"] = "vwa", ["Tiếng Awadh"] = "awa", ["Tiếng Awadh cổ"] = "inc-oaw", ["Tiếng Aweer"] = "bob", ["Tiếng Awing"] = "azo", ["Tiếng Awjila"] = "auj", ["Tiếng Awngi"] = "awn", ["Tiếng Axi"] = "yix", ["Tiếng Ayere"] = "aye", ["Tiếng Aymara"] = "ay", ["Tiếng Azerbaijan"] = "az", ["Tiếng Ba Lan"] = "pl", ["Tiếng Ba Lan cổ"] = "zlw-opl", ["Tiếng Ba Na"] = "bdq", ["Tiếng Ba Tư"] = "fa", ["Tiếng Ba Tư cổ"] = "peo", ["Tiếng Ba Tư trung đại"] = "pal", ["Tiếng Ba Tư-Do Thái"] = "jpr", ["Tiếng Baagandji"] = "drl", ["Tiếng Baatonum"] = "bba", ["Tiếng Babatana"] = "baa", ["Tiếng Babungo"] = "bav", ["Tiếng Babuza"] = "bzg", ["Tiếng Bacama"] = "bcy", ["Tiếng Bactria"] = "xbc", ["Tiếng Badaga"] = "bfq", ["Tiếng Badanchi"] = "bau", ["Tiếng Bade"] = "bde", ["Tiếng Badui"] = "bac", ["Tiếng Bagua"] = "sai-bag", ["Tiếng Bagvalal"] = "kva", ["Tiếng Bahing"] = "bhj", ["Tiếng Bahnar nguyên thủy"] = "mkh-ban-pro", ["Tiếng Bainouk-Gunyuño"] = "bab", ["Tiếng Baiso"] = "bsw", ["Tiếng Bajjika"] = "vjk", ["Tiếng Bakaka"] = "bqz", ["Tiếng Bakhtiari"] = "bqi", ["Tiếng Baki"] = "bki", ["Tiếng Bakung"] = "xkl", ["Tiếng Bala"] = "tuw-bal", ["Tiếng Balanta-Ganja"] = "bjt", ["Tiếng Balanta-Kentohe"] = "ble", ["Tiếng Balantak"] = "blz", ["Tiếng Bali"] = "ban", ["Tiếng Baloch"] = "bal", ["Tiếng Balt-Slav nguyên thủy"] = "ine-bsl-pro", ["Tiếng Balti"] = "bft", ["Tiếng Bambara"] = "bm", ["Tiếng Bambassi"] = "myf", ["Tiếng Bamum"] = "bax", ["Tiếng Bana"] = "bcw", ["Tiếng Bandjalang"] = "bdy", ["Tiếng Banggai"] = "bgz", ["Tiếng Bangi"] = "bni", ["Tiếng Bangolan"] = "bgj", ["Tiếng Banjar"] = "bjn", ["Tiếng Bankon"] = "abb", ["Tiếng Bantawa"] = "bap", ["Tiếng Bantayanon"] = "bfx", ["Tiếng Bantoid nguyên thủy"] = "nic-bod-pro", ["Tiếng Bantu nguyên thủy"] = "bnt-pro", ["Tiếng Banyumas"] = "map-bms", ["Tiếng Baoule"] = "bci", ["Tiếng Barai"] = "bbb", ["Tiếng Barakai"] = "baj", ["Tiếng Bari"] = "bfa", ["Tiếng Barikewa"] = "jbk", ["Tiếng Barombi"] = "bbi", ["Tiếng Baré"] = "bae", ["Tiếng Basaa"] = "bas", ["Tiếng Basay"] = "byq", ["Tiếng Bashkir"] = "ba", ["Tiếng Basketo"] = "bst", ["Tiếng Basque"] = "eu", ["Tiếng Basque nguyên thủy"] = "euq-pro", ["Tiếng Bassa"] = "bsq", ["Tiếng Bassari"] = "bsc", ["Tiếng Batak Simalungun"] = "bts", ["Tiếng Batek"] = "btq", ["Tiếng Bats"] = "bbl", ["Tiếng Batuley"] = "bay", ["Tiếng Bayern"] = "bar", ["Tiếng Beaver"] = "bea", ["Tiếng Bedjond"] = "bjv", ["Tiếng Beja"] = "bej", ["Tiếng Belarus"] = "be", ["Tiếng Belhariya"] = "byw", ["Tiếng Beli"] = "blm", ["Tiếng Bella Coola"] = "blc", ["Tiếng Bellara"] = "brw", ["Tiếng Belnəng"] = "glb", ["Tiếng Bemba"] = "bem", ["Tiếng Bench"] = "bcq", ["Tiếng Bengal"] = "bn", ["Tiếng Bengal cổ"] = "inc-obn", ["Tiếng Benue-Congo nguyên thủy"] = "nic-bco-pro", ["Tiếng Berber Bắc Sahara"] = "mzb", ["Tiếng Berber Tunisia"] = "sds", ["Tiếng Berber nguyên thủy"] = "ber-pro", ["Tiếng Berber-Do Thái"] = "jbe", ["Tiếng Berik"] = "bkl", ["Tiếng Betawi"] = "bew", ["Tiếng Bezhta"] = "kap", ["Tiếng Bhadrawah"] = "bhd", ["Tiếng Bhatri"] = "bgw", ["Tiếng Bhattiyat"] = "bht", ["Tiếng Bhil"] = "bhb", ["Tiếng Bhil Dungra"] = "duh", ["Tiếng Bhnong"] = "mkh-bhn", ["Tiếng Bhojpur"] = "bho", ["Tiếng Bhumij"] = "aav-bhu", ["Tiếng Bhunjia"] = "bhu", ["Tiếng Bidayuh Bau"] = "sne", ["Tiếng Bidayuh Biatah"] = "bth", ["Tiếng Bih"] = "ibh", ["Tiếng Bihari"] = "bh", ["Tiếng Bikol Buhi'non"] = "ubl", ["Tiếng Bilaspur"] = "kfs", ["Tiếng Bilen"] = "byn", ["Tiếng Bilua"] = "blb", ["Tiếng Bima"] = "bhp", ["Tiếng Binukid"] = "bkd", ["Tiếng Birao"] = "brr", ["Tiếng Birgit"] = "btf", ["Tiếng Birhor"] = "biy", ["Tiếng Birjia"] = "bix", ["Tiếng Bisaya Sabah"] = "bsy", ["Tiếng Bishnupriya"] = "bpy", ["Tiếng Bislama"] = "bi", ["Tiếng Bissa"] = "bib", ["Tiếng Bisu"] = "bzi", ["Tiếng Bit"] = "bgk", ["Tiếng Blackfoot"] = "bla", ["Tiếng Blagar"] = "beu", ["Tiếng Blang"] = "blr", ["Tiếng Bod nguyên thủy"] = "sit-bdi-pro", ["Tiếng Bodo (Ấn Độ)"] = "brx", ["Tiếng Bodo Parja"] = "bdv", ["Tiếng Bodo-Garo nguyên thủy"] = "tbq-bdg-pro", ["Tiếng Boghom"] = "bux", ["Tiếng Bokar"] = "sit-bok", ["Tiếng Boko"] = "bqc", ["Tiếng Bokobaru"] = "bus", ["Tiếng Bola"] = "bnp", ["Tiếng Boloki"] = "bkt", ["Tiếng Bomu"] = "bmq", ["Tiếng Bondo"] = "bfw", ["Tiếng Boon"] = "bnl", ["Tiếng Borôro"] = "bor", ["Tiếng Botlikh"] = "bph", ["Tiếng Bourguignon"] = "roa-brg", ["Tiếng Brahui"] = "brh", ["Tiếng Braj"] = "bra", ["Tiếng Breri"] = "brq", ["Tiếng Breton"] = "br", ["Tiếng Breton cổ"] = "obt", ["Tiếng Breton trung đại"] = "xbm", ["Tiếng Britton nguyên thủy"] = "cel-bry-pro", ["Tiếng Brokkat"] = "bro", ["Tiếng Brokpa"] = "sgt", ["Tiếng Bru"] = "bru", ["Tiếng Bru Tây"] = "brv", ["Tiếng Brâu"] = "brb", ["Tiếng Buang Mapos"] = "bzh", ["Tiếng Bube"] = "bvb", ["Tiếng Budukh"] = "bdk", ["Tiếng Bughotu"] = "bgt", ["Tiếng Bugis"] = "bug", ["Tiếng Buhid"] = "bku", ["Tiếng Bukhara"] = "bhh", ["Tiếng Bukiyip"] = "ape", ["Tiếng Bulgar"] = "xbo", ["Tiếng Bulgari"] = "bg", ["Tiếng Bumthang"] = "kjz", ["Tiếng Bungku"] = "bkz", ["Tiếng Bunun"] = "bnn", ["Tiếng Burji"] = "bji", ["Tiếng Burunge"] = "bds", ["Tiếng Burushaski"] = "bsk", ["Tiếng Buryat"] = "bua", ["Tiếng Busa"] = "bqp", ["Tiếng Bushi"] = "buc", ["Tiếng Bussa"] = "dox", ["Tiếng Butuanon"] = "btw", ["Tiếng Bách Tế"] = "pkc", ["Tiếng Bạch Lạp Mã"] = "lay", ["Tiếng Bạch Nam"] = "bfs", ["Tiếng Bạch Trung"] = "bca", ["Tiếng Bạch nguyên thủy"] = "sit-bai-pro", ["Tiếng Bảo An"] = "peh", ["Tiếng Bắc Altai"] = "atv", ["Tiếng Bắc Amami Ōshima"] = "ryn", ["Tiếng Bắc Catanduanes Bikol"] = "cts", ["Tiếng Bắc Emberá"] = "emp", ["Tiếng Bắc Friesland"] = "frr", ["Tiếng Bắc Iroquois nguyên thủy"] = "iro-nor-pro", ["Tiếng Bắc Khanty"] = "kca-nor", ["Tiếng Bắc Mansi"] = "mns-nor", ["Tiếng Bắc Ndebele"] = "nd", ["Tiếng Bắc Nisu"] = "yiv", ["Tiếng Bắc Paiute"] = "pao", ["Tiếng Bắc Sami"] = "se", ["Tiếng Bắc Selkup"] = "sel-nor", ["Tiếng Bắc Slavey"] = "scs", ["Tiếng Bắc Thái"] = "nod", ["Tiếng Bắc Yukaghir"] = "ykg", ["Tiếng Bắc Âu cổ"] = "non", ["Tiếng Bắc Âu nguyên thủy"] = "gmq-pro", ["Tiếng Bố Cam"] = "bbh", ["Tiếng Bố Lưu"] = "ply", ["Tiếng Bố Mang"] = "bvp", ["Tiếng Bố Y"] = "pcc", ["Tiếng Bối-Thái nguyên thủy"] = "qfa-bet-pro", ["Tiếng Bồ Đào Nha"] = "pt", ["Tiếng Bổ trợ Quốc tế"] = "ia", ["Tiếng Ca Dong"] = "kxy", ["Tiếng Ca Tua"] = "kta", ["Tiếng Cahuilla"] = "chl", ["Tiếng Camling"] = "rab", ["Tiếng Camuni"] = "xcc", ["Tiếng Canela"] = "ram", ["Tiếng Cao Câu Ly"] = "zkg", ["Tiếng Capanahua"] = "kaq", ["Tiếng Carib nguyên thủy"] = "sai-car-pro", ["Tiếng Carrier"] = "crx", ["Tiếng Carrier Nam"] = "caf", ["Tiếng Catalan"] = "ca", ["Tiếng Catalan cổ"] = "roa-oca", ["Tiếng Catawba"] = "chc", ["Tiếng Cayuga"] = "cay", ["Tiếng Cebu"] = "ceb", ["Tiếng Celt nguyên thủy"] = "cel-pro", ["Tiếng Celtiberi"] = "xce", ["Tiếng Cerrado nguyên thủy"] = "sai-cer-pro", ["Tiếng Ch'orti'"] = "caa", ["Tiếng Chachi"] = "cbi", ["Tiếng Chagatai"] = "chg", ["Tiếng Chaima"] = "ciy", ["Tiếng Chak"] = "ckh", ["Tiếng Chakma"] = "ccp", ["Tiếng Chamalal"] = "cji", ["Tiếng Chamba"] = "cdh", ["Tiếng Chamicuro"] = "ccc", ["Tiếng Chamorro"] = "ch", ["Tiếng Chantyal"] = "chx", ["Tiếng Chatino cao nguyên Tây"] = "ctp", ["Tiếng Chaura"] = "crv", ["Tiếng Chavacano"] = "cbk", ["Tiếng Chechen"] = "ce", ["Tiếng Chenchu"] = "cde", ["Tiếng Chenoua"] = "cnu", ["Tiếng Chepang"] = "cdm", ["Tiếng Cherokee"] = "chr", ["Tiếng Chetti Moundadan"] = "cty", ["Tiếng Chetti Wayanad"] = "ctt", ["Tiếng Chewong"] = "cwg", ["Tiếng Cheyenne"] = "chy", ["Tiếng Chhattisgarh"] = "hne", ["Tiếng Chibcha"] = "chb", ["Tiếng Chichewa"] = "ny", ["Tiếng Chickasaw"] = "cic", ["Tiếng Chilcotin"] = "clc", ["Tiếng Chin Asho"] = "csh", ["Tiếng Chin Ekai"] = "cey", ["Tiếng Chin Falam"] = "cfm", ["Tiếng Chin Hakha"] = "cnh", ["Tiếng Chin Songlai"] = "csj", ["Tiếng Chin Tedim"] = "ctd", ["Tiếng Chinal"] = "cih", ["Tiếng Chinantec Ojitlán"] = "chj", ["Tiếng Chinantec Ozumacín"] = "chz", ["Tiếng Chinantec Tepinapa"] = "cte", ["Tiếng Chinook"] = "chh", ["Tiếng Chiricahua"] = "apm", ["Tiếng Chiru"] = "cdf", ["Tiếng Chittagong"] = "ctg", ["Tiếng Chiwere"] = "iow", ["Tiếng Chocangacakha"] = "cgk", ["Tiếng Choctaw"] = "cho", ["Tiếng Chodri"] = "cdi", ["Tiếng Chol"] = "ctu", ["Tiếng Chong"] = "cog", ["Tiếng Chu Ru"] = "cje", ["Tiếng Chukot"] = "ckt", ["Tiếng Chulym"] = "clw", ["Tiếng Churah"] = "cdj", ["Tiếng Chuuk"] = "chk", ["Tiếng Chuvan"] = "xcv", ["Tiếng Chuvash"] = "cv", ["Tiếng Châu Đại Dương nguyên thủy"] = "poz-oce-pro", ["Tiếng Chăm Tây"] = "cja", ["Tiếng Chăm cổ"] = "ocm", ["Tiếng Chăm nguyên thủy"] = "cmc-pro", ["Tiếng Chăm Đông"] = "cjm", ["Tiếng Chơ Ro"] = "crw", ["Tiếng Chứt"] = "scb", ["Tiếng Cia-Cia"] = "cia", ["Tiếng Cimbri"] = "cim", ["Tiếng Circassia nguyên thủy"] = "cau-cir-pro", ["Tiếng Co"] = "cua", ["Tiếng Cocama"] = "cod", ["Tiếng Cochimi"] = "coj", ["Tiếng Coeur d'Alene"] = "crd", ["Tiếng Cofán"] = "con", ["Tiếng Comanche"] = "com", ["Tiếng Comoros Maore"] = "swb", ["Tiếng Comox"] = "coo", ["Tiếng Copt"] = "cop", ["Tiếng Cornwall"] = "kw", ["Tiếng Cornwall cổ"] = "oco", ["Tiếng Corse"] = "co", ["Tiếng Cowlitz"] = "cow", ["Tiếng Cree"] = "cr", ["Tiếng Cree Moose"] = "crm", ["Tiếng Cree Đông Bắc"] = "crl", ["Tiếng Cree Đông Nam"] = "crj", ["Tiếng Cree đồng bằng"] = "crk", ["Tiếng Creole Antilles"] = "gcf", ["Tiếng Creole Guinea-Bissau"] = "pov", ["Tiếng Creole Haiti"] = "ht", ["Tiếng Creole Hà Lan Berbice"] = "brc", ["Tiếng Creole Jamaica"] = "jam", ["Tiếng Creole Louisiana"] = "lou", ["Tiếng Creole Mauritius"] = "mfe", ["Tiếng Creole Nghi Lan"] = "ycr", ["Tiếng Creole Réunion"] = "rcf", ["Tiếng Creole quần đảo Virgin"] = "vic", ["Tiếng Crow"] = "cro", ["Tiếng Cuman"] = "qwm", ["Tiếng Cumanagoto"] = "cuo", ["Tiếng Cumbria"] = "xcb", ["Tiếng Cupeño"] = "cup", ["Tiếng Cushit nguyên thủy"] = "cus-pro", ["Tiếng Cuyunon"] = "cyo", ["Tiếng Càn-đà-la"] = "pgd", ["Tiếng Cám"] = "gan", ["Tiếng Cơ Nặc Du Lạc"] = "jiu", ["Tiếng Cơ Tu"] = "ktv", ["Tiếng Cơ Tu Phương"] = "phg", ["Tiếng Cơ Tu Tây"] = "kuf", ["Tiếng Cơ Tu nguyên thủy"] = "mkh-kat-pro", ["Tiếng Cống"] = "cnc", ["Tiếng Cờ Lao Trắng"] = "giw", ["Tiếng Daasanach"] = "dsh", ["Tiếng Dabarre"] = "dbr", ["Tiếng Dacia"] = "xdc", ["Tiếng Dadibi"] = "mps", ["Tiếng Dagara Bắc"] = "dgi", ["Tiếng Dagba"] = "dgk", ["Tiếng Dagbani"] = "dag", ["Tiếng Dahalik"] = "dlk", ["Tiếng Dahalo"] = "dal", ["Tiếng Dakota"] = "dak", ["Tiếng Dakpa"] = "dka", ["Tiếng Dalmatia"] = "dlm", ["Tiếng Dambi"] = "dac", ["Tiếng Damel"] = "dml", ["Tiếng Dan"] = "dnj", ["Tiếng Danau"] = "dnu", ["Tiếng Dangaléat"] = "daa", ["Tiếng Danu"] = "dnv", ["Tiếng Danuwar"] = "dhw", ["Tiếng Dar Daju Daju"] = "djc", ["Tiếng Dargwa"] = "dar", ["Tiếng Dargwa nguyên thủy"] = "cau-drg-pro", ["Tiếng Daur"] = "dta", ["Tiếng Dawro"] = "dwr", ["Tiếng Deg Xinag"] = "ing", ["Tiếng Degema"] = "deg", ["Tiếng Denesuline"] = "chp", ["Tiếng Deori"] = "der", ["Tiếng Desiya"] = "dso", ["Tiếng Dhangu"] = "dhg", ["Tiếng Dhanka"] = "dhn", ["Tiếng Dharug"] = "xdk", ["Tiếng Dhatki"] = "mki", ["Tiếng Dhimal"] = "dhi", ["Tiếng Dhivehi"] = "dv", ["Tiếng Dhodia"] = "dho", ["Tiếng Dhundhar"] = "dhd", ["Tiếng Dibabawon"] = "mbd", ["Tiếng Dieri"] = "dif", ["Tiếng Digan"] = "rom", ["Tiếng Digan Balkan"] = "rmn", ["Tiếng Digan Baltic"] = "rml", ["Tiếng Digan Tavringer"] = "rmu", ["Tiếng Dimasa"] = "dis", ["Tiếng Dime"] = "dim", ["Tiếng Dinka"] = "din", ["Tiếng Dirasha"] = "gdl", ["Tiếng Ditidaht"] = "dtd", ["Tiếng Dizi"] = "mdx", ["Tiếng Dizi nguyên thủy"] = "omv-diz-pro", ["Tiếng Djinang"] = "dji", ["Tiếng Do Thái"] = "he", ["Tiếng Dogri"] = "doi", ["Tiếng Dogri Hindi"] = "dgo", ["Tiếng Dogrib"] = "dgr", ["Tiếng Dolgan"] = "dlg", ["Tiếng Dolpo"] = "dre", ["Tiếng Domaaki"] = "dmk", ["Tiếng Domari"] = "rmt", ["Tiếng Dongolawi"] = "kzh", ["Tiếng Doteli"] = "dty", ["Tiếng Dravida nguyên thủy"] = "dra-pro", ["Tiếng Dubla"] = "dub", ["Tiếng Dukha"] = "trk-dkh", ["Tiếng Dumi"] = "dus", ["Tiếng Duruwa"] = "pci", ["Tiếng Dusun Witu"] = "duw", ["Tiếng Duun"] = "dux", ["Tiếng Duy Ngô Nhĩ"] = "ug", ["Tiếng Duy Ngô Nhĩ cổ"] = "oui", ["Tiếng Dyirbal"] = "dbl", ["Tiếng Dyula"] = "dyu", ["Tiếng Dzala"] = "dzl", ["Tiếng Dzongkha"] = "dz", ["Tiếng Dzuun"] = "dnn", ["Tiếng Ebla"] = "xeb", ["Tiếng Ebrié"] = "ebr", ["Tiếng Ebughu"] = "ebg", ["Tiếng Ede Ica"] = "ica", ["Tiếng Ede Idaca"] = "idd", ["Tiếng Ede Nago"] = "nqg", ["Tiếng Edekiri nguyên thủy"] = "alv-edk-pro", ["Tiếng Edo"] = "bin", ["Tiếng Edoid nguyên thủy"] = "alv-edo-pro", ["Tiếng Efai"] = "efa", ["Tiếng Efate Bắc"] = "llp", ["Tiếng Efate Nam"] = "erk", ["Tiếng Efe"] = "efe", ["Tiếng Efik"] = "efi", ["Tiếng Ega"] = "ega", ["Tiếng Eggon"] = "ego", ["Tiếng Ehueun"] = "ehu", ["Tiếng Eipomek"] = "eip", ["Tiếng Eitiep"] = "eit", ["Tiếng Ejagham"] = "etu", ["Tiếng El Molo"] = "elo", ["Tiếng Elam"] = "elx", ["Tiếng Elymi"] = "xly", ["Tiếng Emberá-Chamí"] = "cmi", ["Tiếng Emberá-Tadó"] = "tdc", ["Tiếng Embu"] = "ebu", ["Tiếng Emilia"] = "egl", ["Tiếng Enets lãnh nguyên"] = "enh", ["Tiếng Enets rừng"] = "enf", ["Tiếng Engenni"] = "enn", ["Tiếng Enisei nguyên thủy"] = "qfa-yen-pro", ["Tiếng Eotile"] = "eot", ["Tiếng Epie"] = "epi", ["Tiếng Eravalla"] = "era", ["Tiếng Erzya"] = "myv", ["Tiếng Esan"] = "ish", ["Tiếng Ese"] = "mcq", ["Tiếng Esimbi"] = "ags", ["Tiếng Eskimo nguyên thủy"] = "esx-esk-pro", ["Tiếng Eskimo-Aleut nguyên thủy"] = "esx-pro", ["Tiếng Estonia"] = "et", ["Tiếng Eteocrete"] = "ecr", ["Tiếng Etrusca"] = "ett", ["Tiếng Even"] = "eve", ["Tiếng Evenk"] = "evn", ["Tiếng Ewe"] = "ee", ["Tiếng Fala"] = "fax", ["Tiếng Falisci"] = "xfa", ["Tiếng Fanagalo"] = "fng", ["Tiếng Fang (Bantu)"] = "fan", ["Tiếng Faroe"] = "fo", ["Tiếng Fe'fe'"] = "fmp", ["Tiếng Fiji"] = "fj", ["Tiếng Finn nguyên thủy"] = "urj-fin-pro", ["Tiếng Flemish Tây"] = "vls", ["Tiếng Fogaha"] = "ber-fog", ["Tiếng Foi"] = "foi", ["Tiếng Fon"] = "fon", ["Tiếng Fox"] = "sac", ["Tiếng Franche-Comté"] = "roa-fcm", ["Tiếng Franco-Provençal"] = "frp", ["Tiếng Franken Trung"] = "gmw-cfr", ["Tiếng Frisia Saterland"] = "stq", ["Tiếng Frisia cổ"] = "ofs", ["Tiếng Friuli"] = "fur", ["Tiếng Fula"] = "ff", ["Tiếng Fur"] = "fvr", ["Tiếng Ga"] = "gaa", ["Tiếng Gabri"] = "gab", ["Tiếng Gadaba Bodo"] = "gbj", ["Tiếng Gaddang"] = "gad", ["Tiếng Gaddi"] = "gbk", ["Tiếng Gael Scotland"] = "gd", ["Tiếng Gagauz"] = "gag", ["Tiếng Gahri"] = "bfu", ["Tiếng Galati"] = "xga", ["Tiếng Galicia"] = "gl", ["Tiếng Galicia-Bồ Đào Nha"] = "roa-opt", ["Tiếng Gallo"] = "roa-gal", ["Tiếng Gallura"] = "sdn", ["Tiếng Galo"] = "adl", ["Tiếng Gamilaraay"] = "kld", ["Tiếng Gamit"] = "gbl", ["Tiếng Gamo"] = "gmv", ["Tiếng Ganza"] = "gza", ["Tiếng Garasia Adiwasi"] = "gas", ["Tiếng Garasia Rajput"] = "gra", ["Tiếng Garhwal"] = "gbm", ["Tiếng Garifuna"] = "cab", ["Tiếng Garo"] = "grt", ["Tiếng Garre"] = "gex", ["Tiếng Gata'"] = "gaq", ["Tiếng Gaul"] = "cel-gau", ["Tiếng Gawar-Bati"] = "gwt", ["Tiếng Gawwada"] = "gwd", ["Tiếng Gayil"] = "gyl", ["Tiếng Gbe Saxwe"] = "sxw", ["Tiếng Gbe Waci"] = "wci", ["Tiếng Gbe nguyên thủy"] = "alv-gbe-pro", ["Tiếng Gbiri-Niragu"] = "grh", ["Tiếng Gedeo"] = "drs", ["Tiếng Gen"] = "gej", ["Tiếng German Tây nguyên thủy"] = "gmw-pro", ["Tiếng German nguyên thủy"] = "gem-pro", ["Tiếng Graeco-Phrygia nguyên thủy"] = "ine-grp-pro", ["Tiếng Geʽez"] = "gez", ["Tiếng Ghadames"] = "gha", ["Tiếng Ghomala'"] = "bbj", ["Tiếng Ghomara"] = "gho", ["Tiếng Ghotuo"] = "aaa", ["Tiếng Gia Rai"] = "jra", ["Tiếng Gikuyu"] = "ki", ["Tiếng Gilak"] = "glk", ["Tiếng Gimi (Goroka)"] = "gim", ["Tiếng Girirra"] = "gii", ["Tiếng Giryama"] = "nyf", ["Tiếng Gitxsan"] = "git", ["Tiếng Giẻ"] = "jeh", ["Tiếng Glosa"] = "igs", ["Tiếng Godoberi"] = "gdo", ["Tiếng Gofa"] = "gof", ["Tiếng Gone Dau"] = "goo", ["Tiếng Gooniyandi"] = "gni", ["Tiếng Goran"] = "hac", ["Tiếng Gorontalo"] = "gor", ["Tiếng Gorowa"] = "gow", ["Tiếng Goth"] = "got", ["Tiếng Gotland"] = "gmq-gut", ["Tiếng Gotland cổ"] = "gmq-ogt", ["Tiếng Greenland"] = "kl", ["Tiếng Gruzia"] = "ka", ["Tiếng Gruzia cổ"] = "oge", ["Tiếng Gruzia-Do Thái"] = "jge", ["Tiếng Gruzia-Zan nguyên thủy"] = "ccs-gzn-pro", ["Tiếng Guajajára"] = "gub", ["Tiếng Guajá"] = "gvj", ["Tiếng Guanche"] = "gnc", ["Tiếng Guarani Mbya"] = "gun", ["Tiếng Guarani Paraguay"] = "gug", ["Tiếng Guaraní"] = "gn", ["Tiếng Guarayu"] = "gyr", ["Tiếng Gujar"] = "gju", ["Tiếng Gujarat"] = "gu", ["Tiếng Gujarat cổ"] = "inc-ogu", ["Tiếng Gujarat trung đại"] = "inc-mgu", ["Tiếng Gulay"] = "gvl", ["Tiếng Gulimancema"] = "gux", ["Tiếng Gumuz"] = "guk", ["Tiếng Gun"] = "guw", ["Tiếng Gurenne"] = "gur", ["Tiếng Guugu Yimidhirr"] = "kky", ["Tiếng Gwichʼin"] = "gwi", ["Tiếng H'Mông Tương Tây Tây"] = "mmr", ["Tiếng H'Mông-Miền nguyên thủy"] = "hmx-pro", ["Tiếng H'roi"] = "hro", ["Tiếng Hachijō"] = "jpx-hcj", ["Tiếng Hadiyya"] = "hdy", ["Tiếng Haida"] = "hai", ["Tiếng Haisla"] = "has", ["Tiếng Hajong"] = "haj", ["Tiếng Halba"] = "hlb", ["Tiếng Halkomelem"] = "hur", ["Tiếng Hamer-Banna"] = "amf", ["Tiếng Hano"] = "lml", ["Tiếng Hanunoo"] = "hnn", ["Tiếng Harari"] = "har", ["Tiếng Harsusi"] = "hss", ["Tiếng Haryanvi"] = "bgc", ["Tiếng Hatti"] = "xht", ["Tiếng Hausa"] = "ha", ["Tiếng Haush"] = "sai-hau", ["Tiếng Havasupai-Walapai-Yavapai"] = "yuf", ["Tiếng Hawaii"] = "haw", ["Tiếng Hazara"] = "haz", ["Tiếng Heiban"] = "hbn", ["Tiếng Heiltsuk"] = "hei", ["Tiếng Hellen nguyên thủy"] = "grk-pro", ["Tiếng Herero"] = "hz", ["Tiếng Hernici"] = "xhr", ["Tiếng Higaonon"] = "mba", ["Tiếng Hiligaynon"] = "hil", ["Tiếng Hindi"] = "hi", ["Tiếng Hindi Fiji"] = "hif", ["Tiếng Hindi cổ"] = "inc-ohi", ["Tiếng Hindko Bắc"] = "hno", ["Tiếng Hinduri"] = "hii", ["Tiếng Hindustan Caribe"] = "hns", ["Tiếng Hinukh"] = "gin", ["Tiếng Hiri Motu"] = "ho", ["Tiếng Hitti"] = "hit", ["Tiếng Hiw"] = "hiw", ["Tiếng Hlai"] = "lic", ["Tiếng Hlai nguyên thủy"] = "qfa-lic-pro", ["Tiếng Ho"] = "hoc", ["Tiếng Hoava"] = "hoa", ["Tiếng Hocak"] = "win", ["Tiếng Holiya"] = "hoy", ["Tiếng Hopi"] = "hop", ["Tiếng Horpa"] = "ero", ["Tiếng Hozo"] = "hoz", ["Tiếng Hpon"] = "hpo", ["Tiếng Hrê"] = "hre", ["Tiếng Hu"] = "huo", ["Tiếng Hulaulá"] = "huy", ["Tiếng Hungary"] = "hu", ["Tiếng Hunsrik"] = "hrx", ["Tiếng Hunzib"] = "huz", ["Tiếng Hupa"] = "hup", ["Tiếng Hupdë"] = "jup", ["Tiếng Hurri"] = "xhu", ["Tiếng Huy"] = "czh", ["Tiếng Hy Lạp"] = "el", ["Tiếng Hy Lạp Cappadocia"] = "cpg", ["Tiếng Hy Lạp Italiot"] = "grk-ita", ["Tiếng Hy Lạp Mariupol"] = "grk-mar", ["Tiếng Hy Lạp Mycenae"] = "gmy", ["Tiếng Hy Lạp Pontos"] = "pnt", ["Tiếng Hy Lạp cổ"] = "grc", ["Tiếng Hyam"] = "jab", ["Tiếng Hà Lan"] = "nl", ["Tiếng Hà Lan Jersey"] = "gmw-jdt", ["Tiếng Hà Lan cổ"] = "odt", ["Tiếng Hà Lan trung đại"] = "dum", ["Tiếng Hà Lăng"] = "hal", ["Tiếng Hà Nhì"] = "hni", ["Tiếng Hán thượng cổ"] = "och", ["Tiếng Hán trung cổ"] = "ltc", ["Tiếng Hán-Tạng nguyên thủy"] = "sit-pro", ["Tiếng Hạ Saxon Hà Lan"] = "nds-nl", ["Tiếng Hạ Sorb"] = "dsb", ["Tiếng Hạ Tanana"] = "taa", ["Tiếng Hạ Đức"] = "nds", ["Tiếng Hạ Đức Mennonite"] = "pdt", ["Tiếng Hạ Đức trung đại"] = "gml", ["Tiếng Hạ Đức tại Đức"] = "nds-de", ["Tiếng Iaai"] = "iai", ["Tiếng Ibaloi"] = "ibl", ["Tiếng Iban"] = "iba", ["Tiếng Ibanag"] = "ibg", ["Tiếng Ibatan"] = "ivb", ["Tiếng Ibibio"] = "ibb", ["Tiếng Ibino"] = "ibn", ["Tiếng Ibuoro"] = "ibr", ["Tiếng Iceland"] = "is", ["Tiếng Ida'an"] = "dbj", ["Tiếng Ido"] = "io", ["Tiếng Idu"] = "clk", ["Tiếng Ifugao Batad"] = "ifb", ["Tiếng Ifè"] = "ife", ["Tiếng Igala"] = "igl", ["Tiếng Igbo"] = "ig", ["Tiếng Ikposo"] = "kpo", ["Tiếng Ikwere"] = "ikw", ["Tiếng Ili Turki"] = "ili", ["Tiếng Ilokano"] = "ilo", ["Tiếng Indo-Bồ Đào Nha"] = "idb", ["Tiếng Indonesia"] = "id", ["Tiếng Indonesia Peranakan"] = "pea", ["Tiếng Ingria"] = "izh", ["Tiếng Ingush"] = "inh", ["Tiếng Inor"] = "ior", ["Tiếng Interlingue"] = "ie", ["Tiếng Intha"] = "int", ["Tiếng Inuit nguyên thủy"] = "esx-inu-pro", ["Tiếng Inuktitut"] = "iu", ["Tiếng Inuktitut Đông Canada"] = "ike", ["Tiếng Inupiaq"] = "ik", ["Tiếng Inuvialuktun"] = "ikt", ["Tiếng Iran nguyên thủy"] = "ira-pro", ["Tiếng Iraqw"] = "irk", ["Tiếng Ireland"] = "ga", ["Tiếng Ireland cổ"] = "sga", ["Tiếng Ireland trung đại"] = "mga", ["Tiếng Iroquois nguyên thủy"] = "iro-pro", ["Tiếng Irula"] = "iru", ["Tiếng Isan"] = "tts", ["Tiếng Ishkashim"] = "isk", ["Tiếng Isnag"] = "isd", ["Tiếng Isoko"] = "iso", ["Tiếng Istria"] = "ist", ["Tiếng Istria Rumani"] = "ruo", ["Tiếng Italic nguyên thủy"] = "itc-pro", ["Tiếng Itaŋikom"] = "bkm", ["Tiếng Itelmen"] = "itl", ["Tiếng Itene"] = "ite", ["Tiếng Itonama"] = "ito", ["Tiếng Itsekiri"] = "its", ["Tiếng Itu Mbon Uzo"] = "itm", ["Tiếng Ivatan"] = "ivv", ["Tiếng Iwaidja"] = "ibd", ["Tiếng Ixil"] = "ixl", ["Tiếng Izon"] = "ijc", ["Tiếng Jacaltec"] = "jac", ["Tiếng Jah Hut"] = "jah", ["Tiếng Jamamadí"] = "jaa", ["Tiếng Japhug"] = "sit-jap", ["Tiếng Jaqaru"] = "jqr", ["Tiếng Jarawa"] = "anq", ["Tiếng Jaunsar"] = "jns", ["Tiếng Java"] = "jv", ["Tiếng Java Caribe"] = "jvn", ["Tiếng Java cổ"] = "kaw", ["Tiếng Javindo"] = "jvd", ["Tiếng Jehai"] = "jhi", ["Tiếng Jeju"] = "jje", ["Tiếng Jemez"] = "tow", ["Tiếng Jicarilla"] = "apj", ["Tiếng Jiiddu"] = "jii", ["Tiếng Jirel"] = "jul", ["Tiếng Jju"] = "kaj", ["Tiếng Jru'"] = "lbo", ["Tiếng Juang"] = "jun", ["Tiếng Jukun Takum"] = "jbu", ["Tiếng Jumaytepeque"] = "nai-jum", ["Tiếng Jumjum"] = "jum", ["Tiếng Juray"] = "juy", ["Tiếng Juǀ'hoan"] = "ktz", ["Tiếng Jylland"] = "jut", ["Tiếng Jê Bắc nguyên thủy"] = "sai-nje-pro", ["Tiếng Jê nguyên thủy"] = "sai-jee-pro", ["Tiếng K'Ho"] = "kpm", ["Tiếng K'iche'"] = "quc", ["Tiếng Kabardia"] = "kbd", ["Tiếng Kabiye"] = "kbp", ["Tiếng Kabuverdianu"] = "kea", ["Tiếng Kabyle"] = "kab", ["Tiếng Kachama-Ganjule"] = "kcx", ["Tiếng Kachin"] = "kac", ["Tiếng Kadar"] = "kej", ["Tiếng Kadazan bờ biển"] = "kzj", ["Tiếng Kadu"] = "zkd", ["Tiếng Kafa"] = "kbr", ["Tiếng Kagayanen"] = "cgc", ["Tiếng Kaikadi"] = "kep", ["Tiếng Kaingang"] = "kgp", ["Tiếng Kaitag"] = "xdq", ["Tiếng Kakabai"] = "kqf", ["Tiếng Kaki Ae"] = "tbd", ["Tiếng Kalam"] = "gwc", ["Tiếng Kalanguya"] = "kak", ["Tiếng Kalao"] = "kly", ["Tiếng Kalash"] = "kls", ["Tiếng Kalinga Limos"] = "kmk", ["Tiếng Kalkot"] = "xka", ["Tiếng Kalmyk"] = "xal", ["Tiếng Kalo Phần Lan"] = "rmf", ["Tiếng Kamarupi Prakrit"] = "inc-kam", ["Tiếng Kamassia"] = "xas", ["Tiếng Kamayo"] = "kyk", ["Tiếng Kambaata"] = "ktb", ["Tiếng Kambera"] = "xbr", ["Tiếng Kamula"] = "xla", ["Tiếng Kanakanavu"] = "xnb", ["Tiếng Kanan"] = "zkn", ["Tiếng Kangean"] = "kkv", ["Tiếng Kangra"] = "xnr", ["Tiếng Kankanaey"] = "kne", ["Tiếng Kannada"] = "kn", ["Tiếng Kannada cổ"] = "dra-okn", ["Tiếng Kannauj"] = "bjj", ["Tiếng Kanuri"] = "kr", ["Tiếng Kapampangan"] = "pam", ["Tiếng Kapingamarangi"] = "kpg", ["Tiếng Kaqchikel"] = "cak", ["Tiếng Karachay-Balkar"] = "krc", ["Tiếng Karaim"] = "kdr", ["Tiếng Karajá"] = "kpj", ["Tiếng Karakalpak"] = "kaa", ["Tiếng Karakhanid"] = "xqa", ["Tiếng Karao"] = "kyj", ["Tiếng Karata"] = "kpt", ["Tiếng Karbi"] = "mjw", ["Tiếng Karekare"] = "kai", ["Tiếng Karelia"] = "krl", ["Tiếng Karen Bwe"] = "bwe", ["Tiếng Karen Geba"] = "kvq", ["Tiếng Karen Geko"] = "ghk", ["Tiếng Karen Mobwa"] = "jkm", ["Tiếng Karen Paku"] = "jkp", ["Tiếng Karen S'gaw"] = "ksw", ["Tiếng Karen Zayein"] = "kxk", ["Tiếng Karen nguyên thủy"] = "kar-pro", ["Tiếng Kari'na"] = "car", ["Tiếng Kariri"] = "kzw", ["Tiếng Karitiâna"] = "ktn", ["Tiếng Karo"] = "kxh", ["Tiếng Kartvelia nguyên thủy"] = "ccs-pro", ["Tiếng Kashaya"] = "kju", ["Tiếng Kashmir"] = "ks", ["Tiếng Kaszëb"] = "csb", ["Tiếng Katang Bắc"] = "ncq", ["Tiếng Kaurna"] = "zku", ["Tiếng Kavalan"] = "ckv", ["Tiếng Kavet"] = "krv", ["Tiếng Kawésqar"] = "alc", ["Tiếng Kayan"] = "pdu", ["Tiếng Kayapó"] = "txu", ["Tiếng Kayort"] = "kyv", ["Tiếng Kazakh"] = "kk", ["Tiếng Kensiu"] = "kns", ["Tiếng Kenyang"] = "ken", ["Tiếng Kerek"] = "krk", ["Tiếng Kerman"] = "xme-ker", ["Tiếng Ket"] = "ket", ["Tiếng Khakas"] = "kjh", ["Tiếng Khalaj"] = "klj", ["Tiếng Khaling"] = "klr", ["Tiếng Kham Gamale"] = "kgj", ["Tiếng Kham Parbate Tây"] = "kjl", ["Tiếng Kham Parbate Đông"] = "kif", ["Tiếng Kham Sheshi"] = "kip", ["Tiếng Khamba"] = "kbg", ["Tiếng Khamti"] = "kht", ["Tiếng Khamyang"] = "ksu", ["Tiếng Khang Gia"] = "kxs", ["Tiếng Khanty"] = "kca", ["Tiếng Kharia"] = "khr", ["Tiếng Khasa Prakrit"] = "inc-kha", ["Tiếng Khasi"] = "kha", ["Tiếng Khasi nguyên thủy"] = "aav-khs-pro", ["Tiếng Khazar"] = "zkz", ["Tiếng Khengkha"] = "xkf", ["Tiếng Khiamniungan"] = "kix", ["Tiếng Khinalug"] = "kjj", ["Tiếng Khiết Đan"] = "zkt", ["Tiếng Khmer"] = "km", ["Tiếng Khmer Surin"] = "kxm", ["Tiếng Khmer cổ"] = "okz", ["Tiếng Khmer nguyên thủy"] = "mkh-kmr-pro", ["Tiếng Khmer trung đại"] = "xhm", ["Tiếng Khoekhoe"] = "naq", ["Tiếng Kholosi"] = "inc-kho", ["Tiếng Khotan"] = "kho", ["Tiếng Khowar"] = "khw", ["Tiếng Khroskyabs"] = "jiq", ["Tiếng Khuen"] = "khf", ["Tiếng Khvarshi"] = "khv", ["Tiếng Khwarezm"] = "xco", ["Tiếng Khách Gia"] = "hak", ["Tiếng Kháng"] = "kjm", ["Tiếng Khùa"] = "xhv", ["Tiếng Khün"] = "kkh", ["Tiếng Khơ Mú"] = "kjg", ["Tiếng Khơ Mú nguyên thủy"] = "mkh-khm-pro", ["Tiếng Khương Bắc"] = "cng", ["Tiếng Khương Nam"] = "qxs", ["Tiếng Khương Đường"] = "cna", ["Tiếng Kickapoo"] = "kic", ["Tiếng Kikai"] = "kzg", ["Tiếng Kili"] = "tuw-kil", ["Tiếng Kim"] = "kia", ["Tiếng Kim Môn"] = "mji", ["Tiếng Kimbundu"] = "kmb", ["Tiếng Kinaray-a"] = "krj", ["Tiếng Kinnaur"] = "kfk", ["Tiếng Kinnaur Harija"] = "kjo", ["Tiếng Kintaq"] = "knq", ["Tiếng Kiowa"] = "kio", ["Tiếng Gilbert"] = "gil", ["Tiếng Kirike"] = "okr", ["Tiếng Kisan"] = "xis", ["Tiếng Kistane"] = "gru", ["Tiếng Kituba"] = "ktu", ["Tiếng Klallam"] = "clm", ["Tiếng Klingon"] = "tlh", ["Tiếng Knaan"] = "czk", ["Tiếng Koalib"] = "kib", ["Tiếng Kobon"] = "kpw", ["Tiếng Koch"] = "kdq", ["Tiếng Koda"] = "cdz", ["Tiếng Kodava"] = "kfa", ["Tiếng Kohistan"] = "mvy", ["Tiếng Koibal"] = "zkb", ["Tiếng Kok Borok"] = "trp", ["Tiếng Kolami"] = "kfb", ["Tiếng Kolhe"] = "ekl", ["Tiếng Koli Kachi"] = "gjk", ["Tiếng Koli Parkar"] = "kvx", ["Tiếng Koli Wadiyara"] = "kxp", ["Tiếng Koman nguyên thủy"] = "ssa-kom-pro", ["Tiếng Komi cổ"] = "urj-koo", ["Tiếng Komi-Permyak"] = "koi", ["Tiếng Komi-Yazva"] = "urj-kya", ["Tiếng Komi-Zyrian"] = "kpv", ["Tiếng Komo"] = "xom", ["Tiếng Komodo"] = "kvh", ["Tiếng Konabéré"] = "bbo", ["Tiếng Konda-Dora"] = "kfc", ["Tiếng Kondekor"] = "gau", ["Tiếng Kongo"] = "kg", ["Tiếng Konkan"] = "kok", ["Tiếng Konobo"] = "kqo", ["Tiếng Konso"] = "kxc", ["Tiếng Koonzime"] = "ozm", ["Tiếng Koore"] = "kqy", ["Tiếng Koraga Korra"] = "kfd", ["Tiếng Koraga Mudu"] = "vmd", ["Tiếng Korku"] = "kfq", ["Tiếng Korwa"] = "kfp", ["Tiếng Koryak"] = "kpy", ["Tiếng Kosrae"] = "kos", ["Tiếng Kota (Ấn Độ)"] = "kfe", ["Tiếng Kotava"] = "avk", ["Tiếng Kott"] = "zko", ["Tiếng Koya"] = "kff", ["Tiếng Kpelle Guinea"] = "gkp", ["Tiếng Kpelle Liberia"] = "xpe", ["Tiếng Kra nguyên thủy"] = "qfa-kra-pro", ["Tiếng Kra-Dai nguyên thủy"] = "qfa-tak-pro", ["Tiếng Kraol"] = "rka", ["Tiếng Kresh"] = "krs", ["Tiếng Krio"] = "kri", ["Tiếng Kriol Úc"] = "rop", ["Tiếng Krung"] = "krr", ["Tiếng Krymchak"] = "jct", ["Tiếng Kryts"] = "kry", ["Tiếng Ktunaxa"] = "kut", ["Tiếng Kubachi"] = "ugh", ["Tiếng Kudiya"] = "kfg", ["Tiếng Kudmal"] = "kyw", ["Tiếng Kui (Ấn Độ)"] = "uki", ["Tiếng Kui Dawik"] = "dwk", ["Tiếng Kuke"] = "ght", ["Tiếng Kuki-Chin nguyên thủy"] = "tbq-kuk-pro", ["Tiếng Kukna"] = "kex", ["Tiếng Kullu"] = "kfx", ["Tiếng Kulon-Pazeh"] = "uun", ["Tiếng Kumbewaha"] = "xks", ["Tiếng Kumeyaay"] = "nai-kum", ["Tiếng Kumyk"] = "kum", ["Tiếng Kumzar"] = "zum", ["Tiếng Kuna"] = "cuk", ["Tiếng Kundal Shahi"] = "shd", ["Tiếng Kunigami"] = "xug", ["Tiếng Kuo"] = "xuo", ["Tiếng Kupia"] = "key", ["Tiếng Kurichiya"] = "kfh", ["Tiếng Kurmanji"] = "kmr", ["Tiếng Kurtokha"] = "xkz", ["Tiếng Kurukh"] = "kru", ["Tiếng Kurumba Alu"] = "xua", ["Tiếng Kurumba Attapady"] = "pkr", ["Tiếng Kurumba Betta"] = "xub", ["Tiếng Kurumba Jennu"] = "xuj", ["Tiếng Kurumba Kannada"] = "kfi", ["Tiếng Kurumba Mullu"] = "kpb", ["Tiếng Kushi"] = "kuh", ["Tiếng Kutch"] = "kfr", ["Tiếng Kutep"] = "kub", ["Tiếng Kuvi"] = "kxv", ["Tiếng Kuy"] = "kdt", ["Tiếng Kven"] = "fkv", ["Tiếng Kw'adza"] = "wka", ["Tiếng Kwak'wala"] = "kwk", ["Tiếng Kwanja"] = "knp", ["Tiếng Kwanyama"] = "kj", ["Tiếng Kwinti"] = "kww", ["Tiếng Kyakala"] = "tuw-kkl", ["Tiếng Kyrgyz"] = "ky", ["Tiếng Kyrgyz Phú Dụ"] = "trk-fyk", ["Tiếng Kâte"] = "kmg", ["Tiếng La Hủ"] = "lhu", ["Tiếng Laalaa"] = "cae", ["Tiếng Ladakh"] = "lbj", ["Tiếng Ladin"] = "lld", ["Tiếng Ladino"] = "lad", ["Tiếng Lahnda"] = "lah", ["Tiếng Lahta"] = "kvt", ["Tiếng Lak"] = "lbe", ["Tiếng Lakalei"] = "lka", ["Tiếng Laki"] = "lki", ["Tiếng Lakota"] = "lkt", ["Tiếng Lama Gur"] = "las", ["Tiếng Lambadi"] = "lmn", ["Tiếng Lamboya"] = "lmy", ["Tiếng Lamkang"] = "lmk", ["Tiếng Lanoh"] = "lnh", ["Tiếng Laomian"] = "lwm", ["Tiếng Lar"] = "lrl", ["Tiếng Lasalimu"] = "llm", ["Tiếng Lashi"] = "lsi", ["Tiếng Latgale"] = "ltg", ["Tiếng Latinh"] = "la", ["Tiếng Latundê"] = "ltn", ["Tiếng Latvia"] = "lv", ["Tiếng Lavukaleve"] = "lvk", ["Tiếng Lawa Tây"] = "lcp", ["Tiếng Lawa Đông"] = "lwl", ["Tiếng Lawi"] = "lvi", ["Tiếng Laya"] = "lya", ["Tiếng Laz"] = "lzz", ["Tiếng Lelemi"] = "lef", ["Tiếng Lemnos"] = "xle", ["Tiếng Lepcha"] = "lep", ["Tiếng Leponti"] = "xlp", ["Tiếng Lewo"] = "lww", ["Tiếng Lezgi"] = "lez", ["Tiếng Lezgi nguyên thủy"] = "cau-lzg-pro", ["Tiếng León"] = "roa-leo", ["Tiếng León cổ"] = "roa-ole", ["Tiếng Lhao Vo"] = "mhx", ["Tiếng Lhomi"] = "lhm", ["Tiếng Liabuku"] = "lix", ["Tiếng Libido"] = "liq", ["Tiếng Liguria"] = "lij", ["Tiếng Lillooet"] = "lil", ["Tiếng Limbum"] = "lmp", ["Tiếng Limburg"] = "li", ["Tiếng Lindu"] = "klw", ["Tiếng Lingala"] = "ln", ["Tiếng Lipan"] = "apl", ["Tiếng Lishana Deni"] = "lsd", ["Tiếng Lishanid Noshan"] = "aij", ["Tiếng Lisu"] = "lis", ["Tiếng Litva"] = "lt", ["Tiếng Litva cổ"] = "olt", ["Tiếng Livonia"] = "liv", ["Tiếng Livvi"] = "olo", ["Tiếng Lobi"] = "lob", ["Tiếng Lodha"] = "lbm", ["Tiếng Logba"] = "lgq", ["Tiếng Lojban"] = "jbo", ["Tiếng Loke"] = "loy", ["Tiếng Lokono"] = "arw", ["Tiếng Loma"] = "lom", ["Tiếng Lomavren"] = "rmi", ["Tiếng Lombard"] = "lmo", ["Tiếng Lorrain"] = "roa-lor", ["Tiếng Lotha Naga"] = "njh", ["Tiếng Lou"] = "loj", ["Tiếng Luba-Katanga"] = "lu", ["Tiếng Lucumí"] = "luq", ["Tiếng Luganda"] = "lg", ["Tiếng Luhya"] = "luy", ["Tiếng Lukpa"] = "dop", ["Tiếng Lumbu"] = "lup", ["Tiếng Lunana"] = "luk", ["Tiếng Lur Bắc"] = "lrc", ["Tiếng Lur Nam"] = "luz", ["Tiếng Lushootseed"] = "lut", ["Tiếng Lutuv"] = "clt", ["Tiếng Luwi"] = "xlu", ["Tiếng Luxembourg"] = "lb", ["Tiếng Lycia"] = "xlc", ["Tiếng Lydia"] = "xld", ["Tiếng Lyngngam"] = "lyg", ["Tiếng Lyydi"] = "lud", ["Tiếng Lào"] = "lo", ["Tiếng Lâm Cao"] = "onb", ["Tiếng Lô Lô"] = "ii", ["Tiếng Lô Lô-Miến nguyên thủy"] = "tbq-lob-pro", ["Tiếng Lư Nhân"] = "sit-lrn", ["Tiếng Lưu Cầu nguyên thủy"] = "jpx-ryu-pro", ["Tiếng Lự"] = "khb", ["Tiếng M'Nông Nam"] = "mnn", ["Tiếng M'Nông Trung"] = "cmo", ["Tiếng M'Nông Đông"] = "mng", ["Tiếng Ma Thoa"] = "nru", ["Tiếng Ma'anyan"] = "mhy", ["Tiếng Maaka"] = "mew", ["Tiếng Maale"] = "mdy", ["Tiếng Maasai"] = "mas", ["Tiếng Maay"] = "ymm", ["Tiếng Mabaan"] = "mfz", ["Tiếng Mabang"] = "mde", ["Tiếng Macedoni cổ đại"] = "xmk", ["Tiếng Macedonia"] = "mk", ["Tiếng Macushi"] = "mbc", ["Tiếng Madura"] = "mad", ["Tiếng Magaha"] = "mag", ["Tiếng Magar Tây"] = "mrd", ["Tiếng Magar Đông"] = "mgp", ["Tiếng Magori"] = "zgr", ["Tiếng Maguindanao"] = "mdh", ["Tiếng Mah Meri"] = "mhe", ["Tiếng Mahal"] = "mjx", ["Tiếng Maithil"] = "mai", ["Tiếng Majang"] = "mpe", ["Tiếng Makassar"] = "mak", ["Tiếng Mal"] = "mlf", ["Tiếng Malagasy"] = "mg", ["Tiếng Malankurava"] = "mjo", ["Tiếng Malapandaram"] = "mjp", ["Tiếng Malarya"] = "mjq", ["Tiếng Malasar"] = "ymr", ["Tiếng Malasar Mala"] = "ima", ["Tiếng Malavedan"] = "mjr", ["Tiếng Malayalam"] = "ml", ["Tiếng Malecite-Passamaquoddy"] = "pqm", ["Tiếng Malta"] = "mt", ["Tiếng Mampruli"] = "maw", ["Tiếng Man"] = "gv", ["Tiếng Manda (Ấn Độ)"] = "mha", ["Tiếng Mandahuaca"] = "mht", ["Tiếng Mandara"] = "tbf", ["Tiếng Mande nguyên thủy"] = "dmn-pro", ["Tiếng Mandi"] = "mjl", ["Tiếng Mandinka"] = "mnk", ["Tiếng Mangas"] = "zns", ["Tiếng Manggarai"] = "mqy", ["Tiếng Mangghuer"] = "xgn-mgr", ["Tiếng Mangghul"] = "mjg-mgr", ["Tiếng Manipur"] = "mni", ["Tiếng Mankanya"] = "knf", ["Tiếng Mannan"] = "mjv", ["Tiếng Mano"] = "mev", ["Tiếng Mansaka"] = "msk", ["Tiếng Mansi nguyên thủy"] = "mns-pro", ["Tiếng Manumanaw"] = "kxf", ["Tiếng Mao Nam"] = "mmd", ["Tiếng Maori"] = "mi", ["Tiếng Mapuche"] = "arn", ["Tiếng Maranao"] = "mrw", ["Tiếng Marathi"] = "mr", ["Tiếng Marathi cổ"] = "omr", ["Tiếng Marau"] = "mvr", ["Tiếng Mari Tây"] = "mrj", ["Tiếng Mari nguyên thủy"] = "chm-pro", ["Tiếng Mari Đông"] = "mhr", ["Tiếng Maria (Ấn Độ)"] = "mrr", ["Tiếng Maricopa"] = "mrc", ["Tiếng Marma"] = "rmz", ["Tiếng Marquises Bắc"] = "mrq", ["Tiếng Marquises Nam"] = "mqm", ["Tiếng Marrucini"] = "umc", ["Tiếng Marshall"] = "mh", ["Tiếng Marsi"] = "ims", ["Tiếng Martuthunira"] = "vma", ["Tiếng Marwar"] = "mwr", ["Tiếng Masbatenyo"] = "msb", ["Tiếng Maskelynes"] = "klv", ["Tiếng Matal"] = "mfh", ["Tiếng Mator"] = "mtm", ["Tiếng Maung"] = "mph", ["Tiếng Maya Yucatán"] = "yua", ["Tiếng Maya nguyên thủy"] = "myn-pro", ["Tiếng Mazahua Michoacán"] = "mmc", ["Tiếng Mazahua Trung"] = "maz", ["Tiếng Mazandaran"] = "mzn", ["Tiếng Mbabaram"] = "vmb", ["Tiếng Mbembe Tigon"] = "nza", ["Tiếng Mbembe sông Cross"] = "mfn", ["Tiếng Me'en"] = "mym", ["Tiếng Me'phaa Acatepec"] = "tpx", ["Tiếng Me'phaa Azoyú"] = "tpc", ["Tiếng Me'phaa Tlacoapa"] = "tpl", ["Tiếng Media cổ"] = "xme-old", ["Tiếng Medumba"] = "byv", ["Tiếng Mehri"] = "gdq", ["Tiếng Melo"] = "mfx", ["Tiếng Melpa"] = "med", ["Tiếng Memon"] = "mby", ["Tiếng Mendankwe-Nkwen"] = "mfd", ["Tiếng Mende"] = "men", ["Tiếng Menominee"] = "mez", ["Tiếng Mentawai"] = "mwv", ["Tiếng Meriam"] = "ulk", ["Tiếng Mesaka"] = "iyo", ["Tiếng Mesqan"] = "mvz", ["Tiếng Messapio"] = "cms", ["Tiếng Meänkieli"] = "fit", ["Tiếng Mi'kmaq"] = "mic", ["Tiếng Miami"] = "mia", ["Tiếng Minangkabau"] = "min", ["Tiếng Mingrelia"] = "xmf", ["Tiếng Minriq"] = "mnq", ["Tiếng Mintil"] = "mzt", ["Tiếng Miranda"] = "mwl", ["Tiếng Mirga"] = "zrg", ["Tiếng Mising"] = "mrg", ["Tiếng Miskito"] = "miq", ["Tiếng Mixtec Alcozauca"] = "xta", ["Tiếng Mixtec Chayuco"] = "mih", ["Tiếng Mixtec Yosondúa"] = "mpm", ["Tiếng Mixtec nguyên thủy"] = "omq-mix-pro", ["Tiếng Miyako"] = "mvi", ["Tiếng Mizo"] = "lus", ["Tiếng Miến Điện"] = "my", ["Tiếng Miến Điện cổ"] = "obr", ["Tiếng Miền nguyên thủy"] = "hmx-mie-pro", ["Tiếng Mlabri"] = "mra", ["Tiếng Mlahsö"] = "lhs", ["Tiếng Mogholi"] = "mhj", ["Tiếng Moglena-Rumani"] = "ruq", ["Tiếng Mohawk"] = "moh", ["Tiếng Mohegan-Pequot"] = "xpq", ["Tiếng Moken"] = "mwt", ["Tiếng Mokil"] = "mkj", ["Tiếng Moklen"] = "mkm", ["Tiếng Moksha"] = "mdf", ["Tiếng Molbog"] = "pwm", ["Tiếng Mongghul"] = "mjg-mgl", ["Tiếng Mongo"] = "lol", ["Tiếng Mongondow"] = "mog", ["Tiếng Mooré"] = "mos", ["Tiếng Mordvin nguyên thủy"] = "urj-mdv-pro", ["Tiếng Moro"] = "mor", ["Tiếng Morokodo"] = "mgc", ["Tiếng Mota"] = "mtt", ["Tiếng Motu"] = "meu", ["Tiếng Mozarab"] = "mxi", ["Tiếng Mpade"] = "mpi", ["Tiếng Mpi"] = "mpz", ["Tiếng Muak Sa-aak"] = "ukk", ["Tiếng Mudburra"] = "dmw", ["Tiếng Muduga"] = "udg", ["Tiếng Muna"] = "mnb", ["Tiếng Munda"] = "unx", ["Tiếng Munda nguyên thủy"] = "mun-pro", ["Tiếng Mundabli"] = "boe", ["Tiếng Mundari"] = "unr", ["Tiếng Munggui"] = "mth", ["Tiếng Munji"] = "mnj", ["Tiếng Munsee"] = "umu", ["Tiếng Muria Viễn Tây"] = "fmu", ["Tiếng Murle"] = "mur", ["Tiếng Mursi"] = "muz", ["Tiếng Muscogee"] = "mus", ["Tiếng Musi"] = "mui", ["Tiếng Muskogee nguyên thủy"] = "nai-mus-pro", ["Tiếng Muthuvan"] = "muv", ["Tiếng Mwan"] = "moa", ["Tiếng Mwotlap"] = "mlv", ["Tiếng Myene"] = "mye", ["Tiếng Mân Bắc"] = "mnp", ["Tiếng Mân Nam"] = "nan", ["Tiếng Mân Trung"] = "czo", ["Tiếng Mân Tuyền Chương"] = "nan-hbl", ["Tiếng Mân nguyên thủy"] = "zhx-min-pro", ["Tiếng Mân Đông"] = "cdo", ["Tiếng Mã Lai"] = "ms", ["Tiếng Mã Lai Ambon"] = "abs", ["Tiếng Mã Lai Baba"] = "mbf", ["Tiếng Mã Lai Bacan"] = "btj", ["Tiếng Mã Lai Brunei"] = "kxd", ["Tiếng Mã Lai Bắc Maluku"] = "max", ["Tiếng Mã Lai Kedah"] = "meo", ["Tiếng Mã Lai Pattani"] = "mfa", ["Tiếng Mã Lai Sarawak"] = "poz-sml", ["Tiếng Mã Lai cổ"] = "omy", ["Tiếng Mã Lai nguyên thủy"] = "poz-mly-pro", ["Tiếng Mã Lai-Chăm nguyên thủy"] = "poz-mcm-pro", ["Tiếng Mã Lai-Sumbawa nguyên thủy"] = "poz-msa-pro", ["Tiếng Mã Lai-Đa Đảo Trung Đông nguyên thủy"] = "poz-cet-pro", ["Tiếng Mã Lai-Đa Đảo nguyên thủy"] = "poz-pro", ["Tiếng Mã Lai-Đa Đảo Đông nguyên thủy"] = "pqe-pro", ["Tiếng Mã Liềng"] = "pkt", ["Tiếng Mãn Châu"] = "mnc", ["Tiếng Mòcheno"] = "mhn", ["Tiếng Môn"] = "mnw", ["Tiếng Môn Thái"] = "mnw-tha", ["Tiếng Môn cổ"] = "omx", ["Tiếng Môn nguyên thủy"] = "mkh-mnc-pro", ["Tiếng Môn trung đại"] = "mkh-mmn", ["Tiếng Môn-Khmer nguyên thủy"] = "mkh-pro", ["Tiếng Mông"] = "hmf", ["Tiếng Mông Cổ"] = "mn", ["Tiếng Mông Cổ Khamnigan"] = "ykh", ["Tiếng Mông Cổ cổ điển"] = "cmg", ["Tiếng Mông Cổ nguyên thủy"] = "xgn-pro", ["Tiếng Mông Cổ trung đại"] = "xng", ["Tiếng Mông Trắng"] = "mww", ["Tiếng Mơ Nâm"] = "moo", ["Tiếng Mường"] = "mtq", ["Tiếng Mạ"] = "cma", ["Tiếng Mảng"] = "zng", ["Tiếng Na Miểu"] = "neo", ["Tiếng Na Uy"] = "no", ["Tiếng Na Uy (Bokmål)"] = "nb", ["Tiếng Na Uy (Nynorsk)"] = "nn", ["Tiếng Nafaanra"] = "nfr", ["Tiếng Naga Chothe"] = "nct", ["Tiếng Naga Maring"] = "nng", ["Tiếng Naga Moyon"] = "nmo", ["Tiếng Naga Thangal"] = "nki", ["Tiếng Naga Trung nguyên thủy"] = "sit-aao-pro", ["Tiếng Nahua nguyên thủy"] = "azc-nah-pro", ["Tiếng Nahuatl"] = "nah", ["Tiếng Nahuatl Temascaltepec"] = "nhv", ["Tiếng Nahuatl cổ điển"] = "nci", ["Tiếng Nakh nguyên thủy"] = "cau-nkh-pro", ["Tiếng Nam Altai"] = "alt", ["Tiếng Nam Amami Ōshima"] = "ams", ["Tiếng Nam Dravida I nguyên thủy"] = "dra-sdo-pro", ["Tiếng Nam Dravida II nguyên thủy"] = "dra-sdt-pro", ["Tiếng Nam Dravida nguyên thủy"] = "dra-sou-pro", ["Tiếng Nam Kolami"] = "nit", ["Tiếng Nam Mansi"] = "mns-sou", ["Tiếng Nam Ndebele"] = "nr", ["Tiếng Nam Sami"] = "sma", ["Tiếng Nam Selkup"] = "sel-sou", ["Tiếng Nam Slavey"] = "xsl", ["Tiếng Nam Thái"] = "sou", ["Tiếng Nam Uzbek"] = "uzs", ["Tiếng Nam Yukaghir"] = "yux", ["Tiếng Nam Á nguyên thủy"] = "aav-pro", ["Tiếng Nam Đảo nguyên thủy"] = "map-pro", ["Tiếng Nam Động"] = "kmc", ["Tiếng Nam Ả Rập cổ"] = "sem-srb", ["Tiếng Nambikwara"] = "nab", ["Tiếng Nanai"] = "gld", ["Tiếng Nankina"] = "nnk", ["Tiếng Napoli"] = "nap", ["Tiếng Naskapi"] = "nsk", ["Tiếng Nateni"] = "ntm", ["Tiếng Naukan"] = "ynk", ["Tiếng Nauru"] = "na", ["Tiếng Navajo"] = "nv", ["Tiếng Ndau"] = "ndc", ["Tiếng Ndogo"] = "ndz", ["Tiếng Ndonga"] = "ng", ["Tiếng Nefusa"] = "jbn", ["Tiếng Negerhollands"] = "dcr", ["Tiếng Negidal"] = "neg", ["Tiếng Nenets lãnh nguyên"] = "yrk-tun", ["Tiếng Nepal"] = "ne", ["Tiếng Newa"] = "new", ["Tiếng Nga"] = "ru", ["Tiếng Nga bồi Taimyr"] = "crp-tpr", ["Tiếng Ngadha"] = "nxg", ["Tiếng Ngalum"] = "szb", ["Tiếng Ngam"] = "nmc", ["Tiếng Ngambay"] = "sba", ["Tiếng Nganasan"] = "nio", ["Tiếng Ngas"] = "anc", ["Tiếng Ngiemboon"] = "nnh", ["Tiếng Ngiyambaa"] = "wyb", ["Tiếng Ngomba"] = "jgo", ["Tiếng Ngombe (Congo)"] = "ngc", ["Tiếng Nguni nguyên thủy"] = "bnt-ngu-pro", ["Tiếng Nguồn"] = "nuo", ["Tiếng Ngô"] = "wuu", ["Tiếng Ngũ Đồn"] = "wuh", ["Tiếng Nha Lang"] = "yrn", ["Tiếng Nheengatu"] = "yrl", ["Tiếng Nhu Nhiên"] = "qfa-xgx-rou", ["Tiếng Nhĩ Tô"] = "ers", ["Tiếng Nhật"] = "ja", ["Tiếng Nhật Bản nguyên thủy"] = "jpx-pro", ["Tiếng Nhật cổ"] = "ojp", ["Tiếng Nias"] = "nia", ["Tiếng Nicobar Car"] = "caq", ["Tiếng Nicobar Nam"] = "nik", ["Tiếng Nicobar Trung"] = "ncb", ["Tiếng Nicobar nguyên thủy"] = "aav-nic-pro", ["Tiếng Niger-Congo nguyên thủy"] = "nic-pro", ["Tiếng Nin-Sahara nguyên thủy"] = "ssa-pro", ["Tiếng Nisga'a"] = "ncg", ["Tiếng Niue"] = "niu", ["Tiếng Nivaclé"] = "cag", ["Tiếng Nivkh"] = "niv", ["Tiếng Nkari"] = "nkz", ["Tiếng Nkonya"] = "nko", ["Tiếng Nobiin"] = "fia", ["Tiếng Nobonob"] = "gaw", ["Tiếng Nogai"] = "nog", ["Tiếng Noon"] = "snf", ["Tiếng Noreia"] = "nrc", ["Tiếng Norman"] = "nrf", ["Tiếng Novgorod cổ"] = "zle-ono", ["Tiếng Novial"] = "nov", ["Tiếng Ntcham"] = "bud", ["Tiếng Nubaca"] = "baf", ["Tiếng Nubi"] = "kcn", ["Tiếng Nubia cổ"] = "onw", ["Tiếng Nuer"] = "nus", ["Tiếng Numidia"] = "nxm", ["Tiếng Nupe"] = "nup", ["Tiếng Nuristan nguyên thủy"] = "iir-nur-pro", ["Tiếng Nuu-chah-nulth"] = "nuk", ["Tiếng Nyah Kur"] = "cbn", ["Tiếng Nyaw"] = "nyw", ["Tiếng Nyeu"] = "nyl", ["Tiếng Nyishi"] = "njz", ["Tiếng Nyoro"] = "nyo", ["Tiếng Nyunga"] = "nys", ["Tiếng Nzadi"] = "nzd", ["Tiếng Nùng"] = "nut", ["Tiếng Nùng Vẻn"] = "enc", ["Tiếng Nǀuu"] = "ngh", ["Tiếng Nạp Tây"] = "nxq", ["Tiếng Nữ Chân"] = "juc", ["Tiếng O'odham"] = "ood", ["Tiếng Ocaina"] = "oca", ["Tiếng Occitan"] = "oc", ["Tiếng Occitan cổ"] = "pro", ["Tiếng Ogbronuagum"] = "ogu", ["Tiếng Oghuz cổ sơ kỳ"] = "trk-eog", ["Tiếng Oirat"] = "xwo", ["Tiếng Ojibwe"] = "oj", ["Tiếng Ojibwe Severn"] = "ojs", ["Tiếng Ojibwe Tây"] = "ojw", ["Tiếng Ojibwe Tây Bắc"] = "ojb", ["Tiếng Ojibwe Đông"] = "ojg", ["Tiếng Okanagan"] = "oka", ["Tiếng Okinawa"] = "ryu", ["Tiếng Okinoerabu"] = "okn", ["Tiếng Olukumi"] = "ulb", ["Tiếng Omaha-Ponca"] = "oma", ["Tiếng Omo nguyên thủy"] = "omv-pro", ["Tiếng Omok"] = "omk", ["Tiếng Oneida"] = "one", ["Tiếng Ongota"] = "bxe", ["Tiếng Oriya"] = "or", ["Tiếng Oriya Adiwasi"] = "ort", ["Tiếng Oriya cổ"] = "inc-oor", ["Tiếng Oriya trung đại"] = "inc-mor", ["Tiếng Orma"] = "orc", ["Tiếng Ormu"] = "orz", ["Tiếng Ormur"] = "oru", ["Tiếng Oroch"] = "oac", ["Tiếng Orok"] = "oaa", ["Tiếng Oromo"] = "om", ["Tiếng Oromo Nam"] = "gax", ["Tiếng Oromo Đông"] = "hae", ["Tiếng Oroqen"] = "orh", ["Tiếng Osage"] = "osa", ["Tiếng Osatu"] = "ost", ["Tiếng Osci"] = "osc", ["Tiếng Osing"] = "osi", ["Tiếng Ossetia"] = "os", ["Tiếng Ossetia cổ"] = "oos", ["Tiếng Otomi Mezquital"] = "ote", ["Tiếng Otoro"] = "otr", ["Tiếng Otuke"] = "otu", ["Tiếng Oyda"] = "oyd", ["Tiếng Pa Kô"] = "pac", ["Tiếng Pa'O"] = "blk", ["Tiếng Paeligni"] = "pgn", ["Tiếng Pagu"] = "pgu", ["Tiếng Pahari Mahasu"] = "bfz", ["Tiếng Paharia Kumarbhag"] = "kmj", ["Tiếng Paharia Sauria"] = "mjt", ["Tiếng Paite"] = "pck", ["Tiếng Paiwan"] = "pwn", ["Tiếng Pakan nguyên thủy"] = "mkh-pkn-pro", ["Tiếng Paku"] = "pku", ["Tiếng Pala"] = "plq", ["Tiếng Palau"] = "pau", ["Tiếng Palaung Ruching"] = "pce", ["Tiếng Palaung Rumai"] = "rbb", ["Tiếng Palaung Shwe"] = "pll", ["Tiếng Palaung nguyên thủy"] = "mkh-pal-pro", ["Tiếng Palawano Brooke's Point"] = "plw", ["Tiếng Palenquero"] = "pln", ["Tiếng Pali"] = "pi", ["Tiếng Paliyan"] = "pcf", ["Tiếng Palor"] = "fap", ["Tiếng Pama-Nyungar nguyên thủy"] = "aus-pam-pro", ["Tiếng Pancana"] = "pnp", ["Tiếng Panchpargania"] = "tdb", ["Tiếng Pangasinan"] = "pag", ["Tiếng Pangwala"] = "pgg", ["Tiếng Paniya"] = "pcg", ["Tiếng Papiamento"] = "pap", ["Tiếng Papuma"] = "ppm", ["Tiếng Parachi"] = "prc", ["Tiếng Paraujano"] = "pbg", ["Tiếng Parauk"] = "prk", ["Tiếng Pareci"] = "pab", ["Tiếng Parenga"] = "pcj", ["Tiếng Parthia"] = "xpr", ["Tiếng Parya"] = "paq", ["Tiếng Pashtun"] = "ps", ["Tiếng Pathan nguyên thủy"] = "ira-pat-pro", ["Tiếng Pauna"] = "pnk", ["Tiếng Pawnee"] = "paw", ["Tiếng Pazeh"] = "pzh", ["Tiếng Pear"] = "pcb", ["Tiếng Pear nguyên thủy"] = "mkh-pea-pro", ["Tiếng Pecheneg"] = "xpc", ["Tiếng Pela"] = "bxd", ["Tiếng Pemon"] = "aoc", ["Tiếng Pengo"] = "peg", ["Tiếng Perm nguyên thủy"] = "urj-prm-pro", ["Tiếng Petjo"] = "pey", ["Tiếng Phai"] = "prt", ["Tiếng Phake"] = "phk", ["Tiếng Phalura"] = "phl", ["Tiếng Phi-Á nguyên thủy"] = "afa-pro", ["Tiếng Philippines nguyên thủy"] = "phi-pro", ["Tiếng Phoenicia"] = "phn", ["Tiếng Phong-Kniang"] = "pnx", ["Tiếng Phrygia"] = "xpg", ["Tiếng Phu Thái"] = "pht", ["Tiếng Phuan"] = "phu", ["Tiếng Pháp"] = "fr", ["Tiếng Pháp cổ"] = "fro", ["Tiếng Pháp trung đại"] = "frm", ["Tiếng Phạn"] = "sa", ["Tiếng Phần Lan"] = "fi", ["Tiếng Phổ Hiền"] = "cpx", ["Tiếng Phổ cổ"] = "prg", ["Tiếng Picard"] = "pcd", ["Tiếng Piceni Bắc"] = "nrp", ["Tiếng Piceni Nam"] = "spx", ["Tiếng Piemonte"] = "pms", ["Tiếng Pilagá"] = "plg", ["Tiếng Pinyin"] = "pny", ["Tiếng Pipil"] = "ppl", ["Tiếng Pitjantjatjara"] = "pjt", ["Tiếng Plateau nguyên thủy"] = "nic-plt-pro", ["Tiếng Pnar"] = "pbv", ["Tiếng Pnar-Khasi-Lyngngam nguyên thủy"] = "aav-pkl-pro", ["Tiếng Pohnpei"] = "pon", ["Tiếng Polabia"] = "pox", ["Tiếng Polci"] = "plj", ["Tiếng Ponosakan"] = "pns", ["Tiếng Popoluca cao nguyên"] = "poi", ["Tiếng Potawatomi"] = "pot", ["Tiếng Pothohar"] = "phr", ["Tiếng Prakrit"] = "pra", ["Tiếng Prakrit Ashoka"] = "inc-ash", ["Tiếng Prakrit Niya"] = "pra-niy", ["Tiếng Prakrit Paisaci"] = "inc-psc", ["Tiếng Prakrit Saurasen"] = "psu", ["Tiếng Prasun"] = "prn", ["Tiếng Pucikwar"] = "apq", ["Tiếng Puinave"] = "pui", ["Tiếng Pumpokol"] = "xpm", ["Tiếng Punic"] = "xpu", ["Tiếng Punjab"] = "pa", ["Tiếng Puroik"] = "suv", ["Tiếng Puyuma"] = "pyu", ["Tiếng Pwo Bắc"] = "pww", ["Tiếng Pwo Phrae"] = "kjt", ["Tiếng Pwo Tây"] = "pwo", ["Tiếng Pwo Đông"] = "kjp", ["Tiếng Pà Thẻn"] = "pha", ["Tiếng Pọng"] = "hnu", ["Tiếng Qashqai"] = "qxq", ["Tiếng Qimant"] = "ahg", ["Tiếng Quan Thoại"] = "cmn", ["Tiếng Quapaw"] = "qua", ["Tiếng Quechua"] = "qu", ["Tiếng Quenya"] = "qya", ["Tiếng Quichuañol"] = "mue", ["Tiếng Quinault"] = "qun", ["Tiếng Quiripi"] = "qyp", ["Tiếng Quảng Lâm"] = "aav-qal", ["Tiếng Quảng Đông"] = "yue", ["Tiếng Quốc tế ngữ"] = "eo", ["Tiếng Ra Glai Bắc"] = "rog", ["Tiếng Ra Glai Cát Gia"] = "roc", ["Tiếng Ra Glai Nam"] = "rgs", ["Tiếng Rabha"] = "rah", ["Tiếng Raetia"] = "xrr", ["Tiếng Rajasthan"] = "raj", ["Tiếng Rajbanshi"] = "rjs", ["Tiếng Rakhine"] = "rki", ["Tiếng Rama"] = "rma", ["Tiếng Rangpur"] = "rkt", ["Tiếng Rapa Nui"] = "rap", ["Tiếng Rarotonga"] = "rar", ["Tiếng Rasawa"] = "rac", ["Tiếng Ratagnon"] = "btn", ["Tiếng Raute"] = "rau", ["Tiếng Ravula"] = "yea", ["Tiếng Rawang"] = "raw", ["Tiếng Rejang"] = "rej", ["Tiếng Reli"] = "rei", ["Tiếng Rendille"] = "rel", ["Tiếng Riang Lai"] = "yin", ["Tiếng Rohingya"] = "rhg", ["Tiếng Romagnol"] = "rgn", ["Tiếng Romansh"] = "rm", ["Tiếng Rotuma"] = "rtm", ["Tiếng Rukai"] = "dru", ["Tiếng Rukai nguyên thủy"] = "dru-pro", ["Tiếng Rumani"] = "ro", ["Tiếng Rungus"] = "drg", ["Tiếng Rusnak"] = "rsk", ["Tiếng Rusyn"] = "rue", ["Tiếng Ruthenia cổ"] = "zle-ort", ["Tiếng Rutul"] = "rut", ["Tiếng Rơ Măm"] = "rmx", ["Tiếng Rơ Ngao"] = "ren", ["Tiếng Saanich"] = "str", ["Tiếng Saaroa"] = "sxr", ["Tiếng Saba"] = "saa", ["Tiếng Sabüm"] = "sbo", ["Tiếng Sadri"] = "sck", ["Tiếng Saek"] = "skb", ["Tiếng Saho"] = "ssy", ["Tiếng Saisiyat"] = "xsy", ["Tiếng Saka-Wakhi nguyên thủy"] = "xsc-skw-pro", ["Tiếng Sakizaya"] = "szy", ["Tiếng Salar"] = "slr", ["Tiếng Salish nguyên thủy"] = "sal-pro", ["Tiếng Sama Trung"] = "sml", ["Tiếng Sambal Botolan"] = "sbl", ["Tiếng Sambali"] = "xsb", ["Tiếng Sambalpur"] = "spv", ["Tiếng Sami Akkala"] = "sia", ["Tiếng Sami Inari"] = "smn", ["Tiếng Sami Kildin"] = "sjd", ["Tiếng Sami Skolt"] = "sms", ["Tiếng Sami Ter"] = "sjt", ["Tiếng Sami Ume"] = "sju", ["Tiếng Sami nguyên thủy"] = "smi-pro", ["Tiếng Samo"] = "smq", ["Tiếng Samo Nam"] = "sbd", ["Tiếng Samoa"] = "sm", ["Tiếng Samogitia"] = "sgs", ["Tiếng Samoyed nguyên thủy"] = "syd-pro", ["Tiếng Samtao"] = "stu", ["Tiếng Sangir"] = "sxn", ["Tiếng Sangisar"] = "sgr", ["Tiếng Sango"] = "sg", ["Tiếng Santal"] = "sat", ["Tiếng Saposa"] = "sps", ["Tiếng Saraiki"] = "skr", ["Tiếng Saramacca"] = "srm", ["Tiếng Sardegna"] = "sc", ["Tiếng Sarikol"] = "srh", ["Tiếng Sarmatia nguyên thủy"] = "xsc-sar-pro", ["Tiếng Sasak"] = "sas", ["Tiếng Saurashtra"] = "saz", ["Tiếng Savi"] = "sdg", ["Tiếng Saxon Transylvania"] = "gmw-tsx", ["Tiếng Saxon cổ"] = "osx", ["Tiếng Scots"] = "sco", ["Tiếng Scots trung đại"] = "gmw-msc", ["Tiếng Scythia nguyên thủy"] = "xsc-pro", ["Tiếng Sebat Bet Gurage"] = "sgw", ["Tiếng Sechelt"] = "sec", ["Tiếng Selkup"] = "sel", ["Tiếng Selkup nguyên thủy"] = "sel-pro", ["Tiếng Semai"] = "sea", ["Tiếng Semaq Beri"] = "szc", ["Tiếng Semelai"] = "sza", ["Tiếng Semit Tây nguyên thủy"] = "sem-wes-pro", ["Tiếng Semit nguyên thủy"] = "sem-pro", ["Tiếng Semnam"] = "ssm", ["Tiếng Sena"] = "seh", ["Tiếng Seneca"] = "see", ["Tiếng Senhaja de Srair"] = "sjs", ["Tiếng Senni Humburi"] = "hmb", ["Tiếng Senni Koyraboro"] = "ses", ["Tiếng Senoufo Nyarafolo"] = "sev", ["Tiếng Serbia-Croatia"] = "sh", ["Tiếng Serer"] = "srr", ["Tiếng Seri"] = "sei", ["Tiếng Seze"] = "sze", ["Tiếng Shabak"] = "sdb", ["Tiếng Shabo"] = "sbf", ["Tiếng Shan"] = "shn", ["Tiếng Shebayo"] = "awd-she", ["Tiếng Shekkacho"] = "moy", ["Tiếng Sherpa"] = "xsr", ["Tiếng Shina"] = "scl", ["Tiếng Shina Kohistan"] = "plk", ["Tiếng Shinasha"] = "bwo", ["Tiếng Sholaga"] = "sle", ["Tiếng Shompen"] = "sii", ["Tiếng Shona"] = "sn", ["Tiếng Shor"] = "cjs", ["Tiếng Shughnan"] = "sgh", ["Tiếng Shughnan-Rushan nguyên thủy"] = "ira-shr-pro", ["Tiếng Shughnan-Yazghulom nguyên thủy"] = "ira-shy-pro", ["Tiếng Shughnan-Yazghulom-Munji nguyên thủy"] = "ira-sym-pro", ["Tiếng Shuswap"] = "shs", ["Tiếng Sicel"] = "scx", ["Tiếng Sicily"] = "scn", ["Tiếng Sidamo"] = "sid", ["Tiếng Sikkim"] = "sip", ["Tiếng Silesia"] = "szl", ["Tiếng Siltʼe"] = "stv", ["Tiếng Sinaugoro"] = "snc", ["Tiếng Sindh"] = "sd", ["Tiếng Sinhala"] = "si", ["Tiếng Sioux nguyên thủy"] = "sio-pro", ["Tiếng Siraya"] = "fos", ["Tiếng Sirenik"] = "ysr", ["Tiếng Sirmaur"] = "srx", ["Tiếng Sissala"] = "sld", ["Tiếng Sissano"] = "sso", ["Tiếng Siwi"] = "siz", ["Tiếng Siwu"] = "akp", ["Tiếng Skepi"] = "skw", ["Tiếng Slav Giáo hội"] = "zls-chs", ["Tiếng Slav Giáo hội cổ"] = "cu", ["Tiếng Slav nguyên thủy"] = "sla-pro", ["Tiếng Slav Đông cổ"] = "orv", ["Tiếng Slovak"] = "sk", ["Tiếng Slovak cổ"] = "zlw-osk", ["Tiếng Slovene"] = "sl", ["Tiếng Slovincia"] = "zlw-slv", ["Tiếng Socotra"] = "sqt", ["Tiếng Sogdia"] = "sog", ["Tiếng Sogdia nguyên thủy"] = "ira-sgc-pro", ["Tiếng Sokna"] = "swn", ["Tiếng Solon"] = "tuw-sol", ["Tiếng Solong"] = "aaw", ["Tiếng Somali"] = "so", ["Tiếng Somali nguyên thủy"] = "cus-som-pro", ["Tiếng Soninke"] = "snk", ["Tiếng Sonsorol"] = "sov", ["Tiếng Sora"] = "srb", ["Tiếng Soran"] = "ckb", ["Tiếng Sotho"] = "st", ["Tiếng Sotho Bắc"] = "nso", ["Tiếng Soyot"] = "trk-soy", ["Tiếng Squamish"] = "squ", ["Tiếng Sranan Tongo"] = "srn", ["Tiếng Stau"] = "ero-tau", ["Tiếng Sumer"] = "sux", ["Tiếng Sunda"] = "su", ["Tiếng Sunda cổ"] = "osn", ["Tiếng Suri"] = "suq", ["Tiếng Surjapur"] = "sjp", ["Tiếng Susu"] = "sus", ["Tiếng Svan"] = "sva", ["Tiếng Swahili"] = "sw", ["Tiếng Swazi"] = "ss", ["Tiếng Sylhet"] = "syl", ["Tiếng Syriac cổ điển"] = "syc", ["Tiếng Sán Chay"] = "mlc", ["Tiếng Séc"] = "cs", ["Tiếng Séc cổ"] = "zlw-ocs", ["Tiếng Sô"] = "sss", ["Tiếng Taabwa"] = "tap", ["Tiếng Tabasaran"] = "tab", ["Tiếng Tachawit"] = "shy", ["Tiếng Tadyawan"] = "tdy", ["Tiếng Tafi"] = "tcd", ["Tiếng Tagal Murut"] = "mvv", ["Tiếng Tagalog"] = "tl", ["Tiếng Tagbanwa Calamian"] = "tbk", ["Tiếng Tagdal"] = "tda", ["Tiếng Tagoi"] = "tag", ["Tiếng Tahiti"] = "ty", ["Tiếng Tahltan"] = "tht", ["Tiếng Tai Loi"] = "tlq", ["Tiếng Tai Tây Nam nguyên thủy"] = "tai-swe-pro", ["Tiếng Taivoan"] = "tvx", ["Tiếng Tajik"] = "tg", ["Tiếng Tal"] = "tal", ["Tiếng Tala"] = "tak", ["Tiếng Talossa"] = "tzl", ["Tiếng Talysh"] = "tly", ["Tiếng Tamang Gorkha Đông"] = "tge", ["Tiếng Tamang Tây"] = "tdg", ["Tiếng Tamang Đông"] = "taj", ["Tiếng Tamazight Maroc chuẩn"] = "zgh", ["Tiếng Tamazight Trung Atlas"] = "tzm", ["Tiếng Tamil"] = "ta", ["Tiếng Tamil cổ"] = "oty", ["Tiếng Tamki"] = "tax", ["Tiếng Tammari"] = "tbz", ["Tiếng Tampuan"] = "tpu", ["Tiếng Tanchangya"] = "tnv", ["Tiếng Tangkhul Naga"] = "nmf", ["Tiếng Tangoa"] = "tgp", ["Tiếng Tangut"] = "txg", ["Tiếng Tanimbili"] = "tbe", ["Tiếng Taos"] = "twf", ["Tiếng Tapirapé"] = "taf", ["Tiếng Tara Baka"] = "bdh", ["Tiếng Tarantino"] = "roa-tar", ["Tiếng Tariana"] = "tae", ["Tiếng Tarifit"] = "rif", ["Tiếng Tasawaq"] = "twq", ["Tiếng Tashelhit"] = "shi", ["Tiếng Tat"] = "ttt", ["Tiếng Tat-Do Thái"] = "jdt", ["Tiếng Tatar"] = "tt", ["Tiếng Tiên Ti"] = "mis-xbi", ["Tiếng Tatar Crưm"] = "crh", ["Tiếng Tatar Siberia"] = "sty", ["Tiếng Tatuyo"] = "tav", ["Tiếng Taungyo"] = "tco", ["Tiếng Tause"] = "tad", ["Tiếng Tausug"] = "tsg", ["Tiếng Tavoy"] = "tvn", ["Tiếng Tay Dọ"] = "tyj", ["Tiếng Tayma"] = "sem-tay", ["Tiếng Taz"] = "zhx-taz", ["Tiếng Taznatit"] = "grr", ["Tiếng Taíno"] = "tnq", ["Tiếng Tchad nguyên thủy"] = "cdc-pro", ["Tiếng Telugu"] = "te", ["Tiếng Telugu cổ"] = "dra-ote", ["Tiếng Tem"] = "kdh", ["Tiếng Temiar"] = "tea", ["Tiếng Temoq"] = "tmo", ["Tiếng Ten'edn"] = "tnz", ["Tiếng Tengger"] = "tes", ["Tiếng Tenharim"] = "pah", ["Tiếng Tepehua Tlachichilco"] = "tpt", ["Tiếng Tepehuan Bắc"] = "ntp", ["Tiếng Tepehuan Đông Nam"] = "stp", ["Tiếng Teressa"] = "tef", ["Tiếng Teribe"] = "tfr", ["Tiếng Ternate"] = "tft", ["Tiếng Tetserret"] = "tez", ["Tiếng Tetum"] = "tet", ["Tiếng Thachanad"] = "thn", ["Tiếng Thavưng"] = "thm", ["Tiếng Thompson"] = "thp", ["Tiếng Thracia"] = "txh", ["Tiếng Thác Bạt"] = "qfa-xgx-tuo", ["Tiếng Thái"] = "th", ["Tiếng Thái Hàng Tổng"] = "tpo", ["Tiếng Thái Lai"] = "tjl", ["Tiếng Thái Na"] = "tdd", ["Tiếng Thái Trắng"] = "twh", ["Tiếng Thái Tống"] = "soa", ["Tiếng Thái nguyên thủy"] = "tai-pro", ["Tiếng Thái Đen"] = "blt", ["Tiếng Thái Đỏ"] = "tyr", ["Tiếng Thát Mai"] = "smh", ["Tiếng Thượng Kinabatangan"] = "dmg", ["Tiếng Thượng Sorb"] = "hsb", ["Tiếng Thổ"] = "tou", ["Tiếng Thổ Dục Hồn"] = "qfa-xgx-tuh", ["Tiếng Thổ Gia Bắc"] = "tji", ["Tiếng Thổ Gia Nam"] = "tjs", ["Tiếng Thổ Nhĩ Kỳ"] = "tr", ["Tiếng Thổ Nhĩ Kỳ Anatolia cổ"] = "trk-oat", ["Tiếng Thổ Nhĩ Kỳ Gagauz Balkan"] = "bgx", ["Tiếng Thổ Nhĩ Kỳ Ottoman"] = "ota", ["Tiếng Thụy Điển"] = "sv", ["Tiếng Thụy Điển cổ"] = "gmq-osw", ["Tiếng Thủy"] = "swi", ["Tiếng Tiang"] = "tbj", ["Tiếng Tigre"] = "tig", ["Tiếng Tigrinya"] = "ti", ["Tiếng Tindi"] = "tin", ["Tiếng Tipai"] = "nai-tip", ["Tiếng Tippera"] = "tpe", ["Tiếng Tiruray"] = "tiy", ["Tiếng Tiwa"] = "lax", ["Tiếng Tiwi"] = "tiw", ["Tiếng Tiên Ti"] = "qfa-xgx-xbi", ["Tiếng Tlapanec Malinaltepec"] = "tcf", ["Tiếng Tlingit"] = "tli", ["Tiếng Tobi"] = "tox", ["Tiếng Tochari A"] = "xto", ["Tiếng Tochari B"] = "txb", ["Tiếng Tochari nguyên thủy"] = "ine-toc-pro", ["Tiếng Tocho"] = "taz", ["Tiếng Toda"] = "tcx", ["Tiếng Tofa"] = "kim", ["Tiếng Tok Pisin"] = "tpi", ["Tiếng Tokelau"] = "tkl", ["Tiếng Toki Pona"] = "tok", ["Tiếng Tokunoshima"] = "tkn", ["Tiếng Toma"] = "tod", ["Tiếng Tonga"] = "to", ["Tiếng Tonkawa"] = "tqw", ["Tiếng Tooro"] = "ttj", ["Tiếng Torwali"] = "trw", ["Tiếng Toto"] = "txo", ["Tiếng Totonac Papantla"] = "top", ["Tiếng Totonac cao nguyên"] = "tos", ["Tiếng Triqui Chicahuaxtla"] = "trs", ["Tiếng Triqui Copala"] = "trc", ["Tiếng Triqui San Martín Itunyoso"] = "trq", ["Tiếng Triqui nguyên thủy"] = "omq-tri-pro", ["Tiếng Trió"] = "tri", ["Tiếng Triều Châu"] = "nan-tws", ["Tiếng Triều Tiên"] = "ko", ["Tiếng Triều Tiên cổ"] = "oko", ["Tiếng Triều Tiên nguyên thủy"] = "qfa-kor-pro", ["Tiếng Triều Tiên trung đại"] = "okm", ["Tiếng Truku"] = "trv", ["Tiếng Trung Bikol"] = "bcl", ["Tiếng Trung Dusun"] = "dtp", ["Tiếng Trung Mansi"] = "mns-cen", ["Tiếng Trung Nahuatl"] = "nhn", ["Tiếng Trung Nahuatl Huasteca"] = "nch", ["Tiếng Trung Nahuatl Puebla"] = "ncx", ["Tiếng Trung Quốc"] = "zh", ["Tiếng Trà Động"] = "cdy", ["Tiếng Trác Ni"] = "cda", ["Tiếng Tráng"] = "za", ["Tiếng Tráng Nông"] = "zhn", ["Tiếng Tráng Tả Giang"] = "zzj", ["Tiếng Tráng Đức Tĩnh"] = "zyg", ["Tiếng Trát Bá"] = "zhb", ["Tiếng Tsakhur"] = "tkr", ["Tiếng Tsakonia"] = "tsd", ["Tiếng Tsamai"] = "tsb", ["Tiếng Tsat"] = "huq", ["Tiếng Tsez"] = "ddo", ["Tiếng Tshangla"] = "tsj", ["Tiếng Tsimshian"] = "tsi", ["Tiếng Tsonga"] = "ts", ["Tiếng Tsou"] = "tsu", ["Tiếng Tsuut'ina"] = "srs", ["Tiếng Tswana"] = "tn", ["Tiếng Tuamotu"] = "pmt", ["Tiếng Tuareg"] = "tmh", ["Tiếng Tukang Besi Bắc"] = "khc", ["Tiếng Tukang Besi Nam"] = "bhq", ["Tiếng Tuki"] = "bag", ["Tiếng Tulu"] = "tcy", ["Tiếng Tumbuka"] = "tum", ["Tiếng Tungus nguyên thủy"] = "tuw-pro", ["Tiếng Tunica"] = "tun", ["Tiếng Tunni"] = "tqq", ["Tiếng Tupi"] = "tpn", ["Tiếng Tupi cổ"] = "tpw", ["Tiếng Tupi nguyên thủy"] = "tup-pro", ["Tiếng Tupi-Guarani nguyên thủy"] = "tup-gua-pro", ["Tiếng Turk Khorasan"] = "kmz", ["Tiếng Turk Khorezm"] = "zkh", ["Tiếng Turk cổ"] = "otk", ["Tiếng Turk nguyên thủy"] = "trk-pro", ["Tiếng Turkmen"] = "tk", ["Tiếng Turoyo"] = "tru", ["Tiếng Tuva"] = "tyv", ["Tiếng Tuvalu"] = "tvl", ["Tiếng Tuwuli"] = "bov", ["Tiếng Tyap"] = "kcg", ["Tiếng Tzotzil"] = "tzo", ["Tiếng Tà Mun"] = "aav-tam", ["Tiếng Tà Ôi Thượng"] = "tth", ["Tiếng Tày"] = "tyz", ["Tiếng Tày Sa Pa"] = "tys", ["Tiếng Tân Aram Assyria"] = "aii", ["Tiếng Tân Aram Bohtan"] = "bhn", ["Tiếng Tân Aram Chaldea"] = "cld", ["Tiếng Tân Aram Do Thái Barzani"] = "bjf", ["Tiếng Tân Aram Tây"] = "amw", ["Tiếng Tây Abenaki"] = "abe", ["Tiếng Tây Ban Nha"] = "es", ["Tiếng Tây Ban Nha cổ"] = "osp", ["Tiếng Tây Bắc Gbaya"] = "gya", ["Tiếng Tây Bắc Kavkaz nguyên thủy"] = "cau-nwc-pro", ["Tiếng Tây Bồi"] = "tas", ["Tiếng Tây Duyên hải Bajau"] = "bdr", ["Tiếng Tây Frisia"] = "fy", ["Tiếng Tây Huasteca Nahuatl"] = "nhw", ["Tiếng Tây Kayah"] = "kyu", ["Tiếng Tây Makian"] = "mqs", ["Tiếng Tây Tạng"] = "bo", ["Tiếng Tây Tạng Kham"] = "khg", ["Tiếng Tây Tạng cổ điển"] = "xct", ["Tiếng Tây Yugur"] = "ybe", ["Tiếng Tích Bá"] = "sjo", ["Tiếng Tơ Đrá"] = "tdr", ["Tiếng Tương"] = "hsn", ["Tiếng Tấn"] = "cjy", ["Tiếng Tứ Thổ"] = "sit-sit", ["Tiếng Tứ Xuyên"] = "zhx-sic", ["Tiếng U"] = "uuu", ["Tiếng Ubangi nguyên thủy"] = "nic-ubg-pro", ["Tiếng Ubykh"] = "uby", ["Tiếng Udi"] = "udi", ["Tiếng Udihe"] = "ude", ["Tiếng Udmurt"] = "udm", ["Tiếng Uduk"] = "udu", ["Tiếng Ugarit"] = "uga", ["Tiếng Ugong"] = "ugo", ["Tiếng Ugria nguyên thủy"] = "urj-ugr-pro", ["Tiếng Ukraina"] = "uk", ["Tiếng Ulch"] = "ulc", ["Tiếng Ullatan"] = "ull", ["Tiếng Umbria"] = "xum", ["Tiếng Umbundu"] = "umb", ["Tiếng Unami"] = "unm", ["Tiếng Uneapa"] = "bbn", ["Tiếng Urak Lawoi'"] = "urk", ["Tiếng Ural nguyên thủy"] = "urj-pro", ["Tiếng Urali"] = "url", ["Tiếng Urartu"] = "xur", ["Tiếng Urdu"] = "ur", ["Tiếng Uripiv-Wala-Rano-Atchin"] = "upv", ["Tiếng Urubú-Kaapor"] = "urb", ["Tiếng Urum"] = "uum", ["Tiếng Ushojo"] = "ush", ["Tiếng Usui"] = "usi", ["Tiếng Ute-Aztec nguyên thủy"] = "azc-pro", ["Tiếng Uvbie"] = "evh", ["Tiếng Uzbek"] = "uz", ["Tiếng Vaagri Booli"] = "vaa", ["Tiếng Vaghri"] = "vgr", ["Tiếng Varli"] = "vav", ["Tiếng Vasavi"] = "vas", ["Tiếng Venda"] = "ve", ["Tiếng Veneti"] = "xve", ["Tiếng Veneto"] = "vec", ["Tiếng Veps"] = "vep", ["Tiếng Vishava"] = "vis", ["Tiếng Việt"] = "vi", ["Tiếng Việt trung cổ"] = "mkh-mvi", ["Tiếng Việt-Mường nguyên thủy"] = "mkh-vie-pro", ["Tiếng Volapük"] = "vo", ["Tiếng Volsci"] = "xvo", ["Tiếng Volta-Congo nguyên thủy"] = "nic-vco-pro", ["Tiếng Volta-Niger nguyên thủy"] = "alv-von-pro", ["Tiếng Vot"] = "vot", ["Tiếng Vurës"] = "msn", ["Tiếng Võro"] = "vro", ["Tiếng Văn ngôn"] = "lzh", ["Tiếng Waama"] = "wwa", ["Tiếng Waata"] = "ssn", ["Tiếng Wagi"] = "fad", ["Tiếng Wahgi"] = "wgi", ["Tiếng Waimaha"] = "bao", ["Tiếng Waiwai"] = "waw", ["Tiếng Wakhi"] = "wbl", ["Tiếng Wales"] = "cy", ["Tiếng Wales trung đại"] = "wlm", ["Tiếng Wallis"] = "wls", ["Tiếng Wallon"] = "wa", ["Tiếng Wambule"] = "wme", ["Tiếng Wancho"] = "nnp", ["Tiếng Waneci"] = "wne", ["Tiếng War-Jaintia"] = "aml", ["Tiếng Waray"] = "war", ["Tiếng Wardaman"] = "wrr", ["Tiếng Warekena"] = "gae", ["Tiếng Warji"] = "wji", ["Tiếng Wastek"] = "hus", ["Tiếng Wawonii"] = "wow", ["Tiếng Wayampi"] = "oym", ["Tiếng Wayana"] = "way", ["Tiếng Wayuu"] = "guc", ["Tiếng Wemba-Wemba"] = "xww", ["Tiếng Wewaw"] = "wea", ["Tiếng Wiradjuri"] = "wrh", ["Tiếng Wiyot"] = "wiy", ["Tiếng Wobé"] = "wob", ["Tiếng Woiwurrung"] = "wyi", ["Tiếng Wolane"] = "wle", ["Tiếng Wolaytta"] = "wal", ["Tiếng Wolio"] = "wlo", ["Tiếng Wolof"] = "wo", ["Tiếng Wotu"] = "wtw", ["Tiếng Wymysorys"] = "wym", ["Tiếng Xamtanga"] = "xan", ["Tiếng Xavante"] = "xav", ["Tiếng Xhosa"] = "xh", ["Tiếng Xinh Mun"] = "puo", ["Tiếng Xtiêng"] = "sti", ["Tiếng Xtiêng Bù Đeh"] = "stt", ["Tiếng Xârâcùù"] = "ane", ["Tiếng Xơ Đăng"] = "sed", ["Tiếng Yaaku"] = "muu", ["Tiếng Yaeyama"] = "rys", ["Tiếng Yaghnob"] = "yai", ["Tiếng Yakan"] = "yka", ["Tiếng Yakima"] = "yak", ["Tiếng Yakkha"] = "ybh", ["Tiếng Yakut"] = "sah", ["Tiếng Yali Angguruk"] = "yli", ["Tiếng Yami"] = "tao", ["Tiếng Yamphu"] = "ybi", ["Tiếng Yanesha'"] = "ame", ["Tiếng Yanyuwa"] = "jao", ["Tiếng Yao (Nam Mĩ)"] = "sai-yao", ["Tiếng Yao (châu Phi)"] = "yao", ["Tiếng Yap"] = "yap", ["Tiếng Yapunda"] = "yev", ["Tiếng Yazghulom"] = "yah", ["Tiếng Ye'kwana"] = "mch", ["Tiếng Yele"] = "yle", ["Tiếng Yemsa"] = "jnj", ["Tiếng Yevan"] = "yej", ["Tiếng Yiddish"] = "yi", ["Tiếng Yidgha"] = "ydg", ["Tiếng Yidiny"] = "yii", ["Tiếng Yindjibarndi"] = "yij", ["Tiếng Yiwom"] = "gek", ["Tiếng Yogad"] = "yog", ["Tiếng Yola"] = "yol", ["Tiếng Yolmo"] = "scp", ["Tiếng Yom"] = "pil", ["Tiếng Yonaguni"] = "yoi", ["Tiếng Yong"] = "yno", ["Tiếng Yongkom"] = "yon", ["Tiếng Yoron"] = "yox", ["Tiếng Yoruba"] = "yo", ["Tiếng Yoruba nguyên thủy"] = "alv-yor-pro", ["Tiếng Yorubo nguyên thủy"] = "alv-yrd-pro", ["Tiếng Yoy"] = "yoy", ["Tiếng Yugh"] = "yug", ["Tiếng Yukaghir nguyên thủy"] = "qfa-yuk-pro", ["Tiếng Yup'ik"] = "esu", ["Tiếng Yupik Trung Siberia"] = "ess", ["Tiếng Yuri"] = "sai-yri", ["Tiếng Yurok"] = "yur", ["Tiếng Yámana"] = "yag", ["Tiếng Zacatepec Chatino"] = "ctz", ["Tiếng Zaghawa"] = "zag", ["Tiếng Zaiwa"] = "atb", ["Tiếng Zangskar"] = "zau", ["Tiếng Zapotec"] = "zap", ["Tiếng Zapotec Cajonos"] = "zad", ["Tiếng Zapotec Isthmus"] = "zai", ["Tiếng Zapotec Mitla"] = "zaw", ["Tiếng Zapotec Rincón"] = "zar", ["Tiếng Zapotec Rincón Nam"] = "zsr", ["Tiếng Zapotec San Juan Guelavía"] = "zab", ["Tiếng Zapotec Yatee"] = "zty", ["Tiếng Zapotec Yatzachi"] = "zav", ["Tiếng Zapotec Zaniza"] = "zpw", ["Tiếng Zapotec Zoogocho"] = "zpq", ["Tiếng Zapotec nguyên thủy"] = "omq-zpc-pro", ["Tiếng Zarma"] = "dje", ["Tiếng Zarphat"] = "zrp", ["Tiếng Zay"] = "zwa", ["Tiếng Zayse-Zergulla"] = "zay", ["Tiếng Zaza"] = "zza", ["Tiếng Zaza-Goran nguyên thủy"] = "ira-zgr-pro", ["Tiếng Zeeland"] = "zea", ["Tiếng Zenaga"] = "zen", ["Tiếng Zirenkel"] = "zrn", ["Tiếng Zoque Francisco León"] = "zos", ["Tiếng Zou"] = "zom", ["Tiếng Zulu"] = "zu", ["Tiếng Zumbun"] = "jmb", ["Tiếng Äynu"] = "aib", ["Tiếng Ê Đê"] = "rad", ["Tiếng Ông Bối nguyên thủy"] = "qfa-onb-pro", ["Tiếng Önge"] = "oon", ["Tiếng Önge nguyên thủy"] = "qfa-ong-pro", ["Tiếng Övdal"] = "ovd", ["Tiếng Ý"] = "it", ["Tiếng Ý-Do Thái"] = "itk", ["Tiếng Đa Đảo hạt nhân nguyên thủy"] = "poz-pnp-pro", ["Tiếng Đa Đảo nguyên thủy"] = "poz-pol-pro", ["Tiếng Đa Đảo Đông nguyên thủy"] = "poz-pep-pro", ["Tiếng Đan Mạch"] = "da", ["Tiếng Đan Mạch cổ"] = "gmq-oda", ["Tiếng Đài Sơn"] = "zhx-tai", ["Tiếng Đông Abenaki"] = "aaq", ["Tiếng Đông Acipa"] = "acp", ["Tiếng Đông Bontoc"] = "ebk", ["Tiếng Đông Bắc Kavkaz nguyên thủy"] = "cau-nec-pro", ["Tiếng Đông Can"] = "dng", ["Tiếng Đông Futuna"] = "fud", ["Tiếng Đông Hương"] = "sce", ["Tiếng Đông Kayah"] = "eky", ["Tiếng Đông Khanty"] = "kca-eas", ["Tiếng Đông Yugur"] = "yuy", ["Tiếng Đường Uông"] = "zhx-twa", ["Tiếng Đại Tây Dương–Congo nguyên thủy"] = "alv-pro", ["Tiếng Độc Long"] = "duu", ["Tiếng Động-Thủy nguyên thủy"] = "qfa-kms-pro", ["Tiếng Đức"] = "de", ["Tiếng Đức Alemanni"] = "gsw", ["Tiếng Đức Pennsylvania"] = "pdc", ["Tiếng Đức cao địa cổ"] = "goh", ["Tiếng Đức cao địa trung đại"] = "gmh", ["Tiếng Đức Đông Trung"] = "gmw-ecg", ["Tiếng Ơ Đu"] = "tyh", ["Tiếng Ưu Miền"] = "ium", ["Tiếng ǃXóõ"] = "nmn", ["Tiếng Ả Rập"] = "ar", ["Tiếng Ả Rập Ai Cập"] = "arz", ["Tiếng Ả Rập Algérie"] = "arq", ["Tiếng Ả Rập Andalusia"] = "xaa", ["Tiếng Ả Rập Bắc Levant"] = "apc", ["Tiếng Ả Rập Bắc Lưỡng Hà"] = "ayp", ["Tiếng Ả Rập Hijazi"] = "acw", ["Tiếng Ả Rập Iraq"] = "acm", ["Tiếng Ả Rập Juba"] = "pga", ["Tiếng Ả Rập Libya"] = "ayl", ["Tiếng Ả Rập Maroc"] = "ary", ["Tiếng Ả Rập Nam Levant"] = "ajp", ["Tiếng Ả Rập Oman"] = "acx", ["Tiếng Ả Rập Sudan"] = "apd", ["Tiếng Ả Rập Síp"] = "acy", ["Tiếng Ả Rập Tajikistan"] = "abh", ["Tiếng Ả Rập Tchad"] = "shu", ["Tiếng Ả Rập Tunisia"] = "aeb", ["Tiếng Ả Rập Uzbekistan"] = "auz", ["Tiếng Ả Rập vùng Vịnh"] = "afb", ["Tiếng Ấn-Arya nguyên thủy"] = "inc-pro", ["Tiếng Ấn-Iran nguyên thủy"] = "iir-pro", ["Tiếng Ấn-Âu nguyên thủy"] = "ine-pro", ["Tiếng Ỹaroamë"] = "yro", ["Àhàn"] = "ahn", ["Áncá"] = "acb", ["Ömie"] = "aom", ["Đa ngữ"] = "mul", ["ǀXam"] = "xam", ["ǁAni"] = "hnh", ["ǁGana"] = "gnk", ["ǁXegwi"] = "xeg", ["ǂHoan"] = "huc", ["ǃKung"] = "khi-kun", } anbqgejfp9m66nvrtwuxzjhfsumf3o3 Mô đun:grc-utilities 828 273976 2571730 2294671 2026-10-18T16:23:11Z Hiyuune 50834 2571730 Scribunto text/plain local export = {} local m_data = mw.loadData("Module:grc-utilities/data") local m_string_utils = require("Module:string utilities") local concat = table.concat local full_link = require("Module:links").full_link local gsub = m_string_utils.gsub local match = m_string_utils.match local insert = table.insert local ipairs = ipairs local sparseConcat = require("Module:table").sparseConcat local standard_diacritics -- defined below local tag_text = require("Module:script utilities").tag_text local toNFC = mw.ustring.toNFC local toNFD = mw.ustring.toNFD local umatch = mw.ustring.match local lang = require("Module:languages").getByCode("grc") local sc = require("Module:scripts").getByCode("Polyt") local groups = m_data.groups local canonical = m_data.canonical local diacritic_order = m_data.diacritic_order local diacritical_conversions = m_data.diacritical_conversions local diacritics = m_data.diacritics local diacritic = m_data.diacritic local macron = diacritics.macron local breve = diacritics.breve local spacing_macron = diacritics.spacing_macron local spacing_breve = diacritics.spacing_breve local rough = diacritics.rough local smooth = diacritics.smooth local diaeresis = diacritics.diaeresis local acute = diacritics.acute local grave = diacritics.grave local circumflex = diacritics.circum local subscript = diacritics.subscript local combining_diacritic = m_data.combining_diacritic local UTF8_char = ".[\128-\191]*" local basic_Greek = "[\206-\207][\128-\191]" -- excluding first line of Greek and Coptic block: ͰͱͲͳʹ͵Ͷͷͺͻͼͽ;Ϳ local info = {} -- The tables are shared among different characters so that they can be checked -- for equality if needed, and to use less space. local vowel_t = { vowel = true } local iota_t = { vowel = true, offglide = true } local upsilon_t = { vowel = true, offglide = true } -- These don't need any contents. local breathy_cons_t = {} -- local consonant_t = {} local diacritic_t = { diacritic = true } -- Needed for equality comparisons. local breathing_t = { diacritic = true } local function add_info(characters, t) if type(characters) == "string" then for character in characters:gmatch(UTF8_char) do info[character] = t end else for _, character in ipairs(characters) do info[character] = t end end end add_info({ macron, breve, diaeresis, acute, grave, circumflex, subscript, }, diacritic_t) add_info({rough, smooth}, breathing_t) add_info("ΑΕΗΟΩαεηοω", vowel_t) add_info("Ιι", iota_t) add_info("Υυ", upsilon_t) add_info("ϜϝΡρ", breathy_cons_t) local not_recognized = {} setmetatable(info, { __index = function(t, key) return not_recognized end}) -- Perform a function on each Unicode character in a string. local function forEach(str, func) for char in str:gmatch(UTF8_char) do func(char) end end function export.contains_vowel(token) return not not umatch(toNFD(token), '[ΑΕΗΙΟΥΩαεηιουω]') end function export.tag(term, face) return tag_text(term, lang, sc, face) end function export.link(term, face, alt, tr) return full_link({ term = term, alt = alt, lang = lang, sc = sc, tr = tr }, face) end -- Convert spacing to combining diacritics, and nonstandard to standard polytonic Greek. function export.standardDiacritics(text) return toNFD((toNFD(text):gsub(UTF8_char, diacritical_conversions))) end standard_diacritics = export.standardDiacritics -- Convert variant letter forms to the canonical form, and decompose. function export.canonicalize(text) text = standard_diacritics(text) -- Compose, since the characters in `canonical` are in form NFC. text = toNFC(text):gsub(UTF8_char .. grave, canonical) -- for ϗ̀ :gsub(UTF8_char, canonical) -- Decompose on return. return toNFD(text) end --[=[ This function arranges diacritics in the following order: 1. macron or breve 2. breathings or diaeresis 3. acute, circumflex, or grave 4. iota subscript Used by [[Module:typing-aids]]. Returns an error if a sequence of diacritics contains more than one of each category. ]=] local function reorderDiacriticSequence(diacritics) local output = {} forEach(diacritics, function (diacritic) local index = diacritic_order[diacritic] if not output[index] then output[index] = diacritic else -- Place breve after macron. if diacritic == breve then index = index + 1 end -- The following might have odd results when there -- are three or more diacritics. insert(output, index, diacritic) -- [[Special:WhatLinksHere/Wiktionary:Tracking/grc-utils/too many diacritics]] require("Module:debug").track("grc-utils/too many diacritics") --[[ local m_templates = require("Module:grc-utilities/templates") error("There are two diacritics, " .. m_templates.addDottedCircle(output[index]) .. " and " .. m_templates.addDottedCircle(diacritic) .. " that belong in the same position. There should be only one." ) --]] end end) return sparseConcat(output) end function export.reorderDiacritics(text) return (gsub(toNFD(text), combining_diacritic .. combining_diacritic .. "+", reorderDiacriticSequence)) end --[=[ This breaks a word into meaningful "tokens", which are individual letters or diphthongs with their diacritics. Used by [[Module:grc-accent]] and [[Module:grc-pronunciation]]. --]=] local function make_tokens(text) local tokens, prev_info = {}, {} local token_i, vowel_count = 1, 0 -- Vowel count tracks. local prev, prev_vowel_info for character in text:gmatch(UTF8_char) do local curr_info = info[character] -- Split vowels between tokens if not a diphthong. if curr_info.vowel then vowel_count = vowel_count + 1 if vowel_count == 2 and curr_info.offglide and not ( prev_vowel_info == iota_t or -- ιι → ι, ι; ιυ → ι, υ prev_vowel_info == upsilon_t and curr_info == upsilon_t -- υυ → υ, υ ) then vowel_count, prev_vowel_info = 0, nil elseif prev then token_i = token_i + 1 vowel_count, prev_vowel_info = 1, curr_info else vowel_count, prev_vowel_info = 1, curr_info end tokens[token_i] = (tokens[token_i] or "") .. character elseif curr_info.diacritic then vowel_count, prev_vowel_info = 0, nil tokens[token_i] = (tokens[token_i] or "") .. character if prev_info and (prev_info.diacritic or prev_info.vowel) then if character == diaeresis or character == subscript then -- Split the diphthong in the current token if a diaeresis or subscript -- was found: the first letter, then the second letter plus any diacritics. local previous_vowel, vowel_with_diaeresis = tokens[token_i]:match("^(" .. basic_Greek .. ")(" .. basic_Greek .. ".+)") if previous_vowel then tokens[token_i], tokens[token_i + 1] = previous_vowel, vowel_with_diaeresis token_i = token_i + 1 else -- The vowel preceding the vowel with the diaeresis will already be -- placed in the previous token if it has a diacritic: -- Περικλῆῐ̈ → Π ε ρ ι κ λ ῆ ῐ̈ --[[ mw.log('Diaeresis was found in ' .. text .. ', but the previous token ' .. require("Module:Unicode data").add_dotted_circle(tokens[token_i]) .. ' couldn’t be split because it does not consist of two Basic Greek characters followed by other characters.') --]] end -- If there is only a diaeresis, it could still be the first vowel of a -- diphthong: -- αὐτοϋιός → αὐ τ ο *ϋι* ό ς if character == diaeresis and prev_info.vowel then vowel_count, prev_vowel_info = 1, prev_info end end elseif prev_info == breathy_cons_t then if curr_info ~= breathing_t then mw.log(("The character %s in %s should not have the accent %s on it."):format( prev, text, require("Module:grc-utilities/templates").addDottedCircle(character))) end elseif prev then -- prev can be nil when passed a bare diacritic (as in Translingual diacritic entries) mw.log("The character " .. prev .. " cannot have a diacritic on it.") end else vowel_count = 0 if prev then token_i = token_i + 1 end tokens[token_i] = (tokens[token_i] or "") .. character end prev = character prev_info = curr_info end return tokens end local cache = {} function export.tokenize(text) text = toNFD(text) if not cache[text] then cache[text] = make_tokens(text) end return cache[text] end function export.syllableCount(word) local tokens = export.tokenize(word) local syllables = 0 for _, token in ipairs(tokens) do if export.contains_vowel(token) then syllables = syllables + 1 end end return syllables end --[=[ Places diacritics in the following order: 1. breathings or diaeresis 2. acute, circumflex, or grave 3. macron or breve 4. iota subscript Used by [[Module:grc-pronunciation]]. ]=] function export.pronunciationOrder(text) text = standard_diacritics(text) if match(text, groups[1]) then text = gsub(text, diacritic .. diacritic .. "+", function(sequence) -- Put breathing and diaeresis first, then accents, then macron or breve return concat{ match(sequence, groups[2]) or "", match(sequence, groups[3]) or "", match(sequence, groups[1]) or "", match(sequence, groups[4]) or "" } end) text = gsub(text, macron, spacing_macron) -- combining to spacing macron text = gsub(text, breve, spacing_breve) -- combining to spacing breve end return toNFC(text) end return export 5aa4dic63x4uljccacqp8731e2c5u23 Mô đun:grc-accent 828 273978 2571736 2225454 2026-10-18T16:35:38Z Hiyuune 50834 2571736 Scribunto text/plain local export = {} local m_data = mw.loadData("Module:grc-utilities/data") local m_grc_utils = require("Module:grc-utilities") local m_str_utils = require("Module:string utilities") local m_table = require("Module:table") local diacritic = m_data.diacritic local diacritics = m_data.diacritics local ACUTE = diacritics.acute local GRAVE = diacritics.grave local CIRCUMFLEX = diacritics.circum local DIAERESIS = diacritics.diaeresis local SMOOTH = diacritics.smooth local ROUGH = diacritics.rough local MACRON = diacritics.macron local BREVE = diacritics.breve local SUBSCRIPT = diacritics.subscript local UNDERTIE = m_str_utils.char(0x035C) local diacritic_pattern = m_data.all local diacritic_groups = m_data.diacritic_groups local tonal_diacritic = diacritic_groups[3] -- acute, grave, circumflex local long_diacritics = MACRON .. SUBSCRIPT .. CIRCUMFLEX local optional_length = m_data.length.optional local either_vowel = "[ΑαΙιΥυ]" local canonicalize = m_grc_utils.canonicalize local concat = table.concat local contains_vowel = m_grc_utils.contains_vowel local find = m_str_utils.find local gsub = m_str_utils.gsub local insert = table.insert local lower = m_str_utils.lower local mark_implied_length -- defined below local match = m_str_utils.match local shallow_copy = m_table.shallowCopy local standard_diacritics = m_grc_utils.standardDiacritics local tag = m_grc_utils.tag local tokenize = m_grc_utils.tokenize local toNFD = mw.ustring.toNFD local unpack = unpack or table.unpack -- Lua 5.2 compatibility local function if_not_empty(var) if var == "" then return nil else return var end end local function is_diphthong(token) return find(token, "[ΑαΕεΗηΙιΟοΥυΩω]" .. optional_length .. DIAERESIS .. "?[ΙιΥυ]") and true or false end local libraryUtil = require('libraryUtil') local checkType = libraryUtil.checkType local checkTypeMulti = libraryUtil.checkTypeMulti local function _check(funcName, expectType) if type(expectType) == "string" then return function(argIndex, arg, nilOk) checkType(funcName, argIndex, arg, expectType, nilOk) end else return function(argIndex, arg, expectType, nilOk) if type(expectType) == "table" then checkTypeMulti(funcName, argIndex, arg, expectType, nilOk) else checkType(funcName, argIndex, arg, expectType, nilOk) end end end end --[[ A vowel with a breve or a lone epsilon or omicron is considered short. Everything else is considered long, including unmarked alphas, iotas, and upsilons. Sigh. ]] local function is_short(token) if find(token, BREVE) or find(token, '[ΕΟεο]') and not find(token, '[ιυ]') then return true else return false end end local function conditional_gsub(...) local str, count = gsub(...) if count and count > 0 then return str else return nil end end local accent_adding_functions = { -- This will not throw an error if η or ω has a macron on it. [CIRCUMFLEX] = function(vowel) return (gsub( vowel, "([ΑαΗηΙιΥυΩω])" .. MACRON .. "?(" .. diacritic_groups[2] .. "?)(" .. SUBSCRIPT .. "?)$", "%1%2" .. CIRCUMFLEX .. "%3" )) end, [ACUTE] = function(vowel) return ( conditional_gsub(vowel, "([Εε])([Ωω])", "%1" .. ACUTE .. "%2") or gsub(vowel, "([ΑαΕεΗηΙιΟοΥυΩω]" .. optional_length .. diacritic_groups[2] .. "?)(" .. SUBSCRIPT .. "?)$", "%1" .. ACUTE .. "%2")) end, [MACRON] = function(vowel) if find(vowel, "[" .. long_diacritics .. "]") or is_diphthong(vowel) then return vowel elseif find(vowel, "[ΕΟεο]") then error("The vowel " .. vowel .. " is short, so a macron cannot be added to it.") else return (gsub(vowel, "(" .. either_vowel .. ")", "%1" .. MACRON)) end end, [BREVE] = function(vowel) if find(vowel, "[" .. long_diacritics .. "]") then error("The vowel " .. vowel .. " has an iota subscript, a macron, or a circumflex, so a breve cannot be added to it.") elseif is_diphthong(vowel) then error("The vowel " .. vowel .. " is a diphthong, so a breve cannot be added to it.") else return (gsub(vowel, "(" .. either_vowel .. ")", "%1" .. BREVE)) end end, -- This will insert a diaeresis on a single iota or upsilon, or on a -- iota or upsilon that is the second element of a diphthong. -- It does nothing if the vowel has a breathing on it. [DIAERESIS] = function(vowel) return (gsub( vowel, "([ΙιΥυ]" .. optional_length .. ")(" .. tonal_diacritic .. "?)$", "%1" .. DIAERESIS .. "%2" )) end } -- Assumes decomposed vowels (NFD). local function add(vowel, accent) if type(accent_adding_functions[accent]) == "function" then return accent_adding_functions[accent](vowel) end error("No function for adding " .. accent) end function export.strip_accent(word) word = toNFD(word) -- Parentheses suppress second return value of gsub, the number of substitutions. return (gsub(word, diacritic_pattern, '')) end function export.strip_tone(word) word = toNFD(word) if find(word, CIRCUMFLEX) then word = shallow_copy(tokenize(word)) for i = 1, #word do -- Add a macron to every vowel with a circumflex and remove the circumflex. word[i] = gsub(word[i], '^([αΑιΙυΥ])(' .. diacritic_groups[2] .. '*)' .. CIRCUMFLEX .. '$', '%1' .. MACRON .. '%2') end word = table.concat(word) end return (gsub(word, tonal_diacritic, '')) end function export.ult(word) word = toNFD(word) if find(word, tonal_diacritic) then return word end word = shallow_copy(tokenize(word)) for i, token in m_table.reverseIpairs(word) do if contains_vowel(token) then --fortunately accents go last in combining order word[i] = add(token, ACUTE) break end end return concat(word, '') end --[[ WARNING: Given an unmarked α ι υ, this function will return a circmflex. That said, if you ran into this situation in the first place, you probably are doing something wrong. ]] -- function export.circ(word) word = toNFD(word) if find(word, tonal_diacritic) then return word end word = shallow_copy(tokenize(word)) for i, token in m_table.reverseIpairs(word) do if contains_vowel(token) then if is_short(token) then word[i] = add(token, ACUTE) else word[i] = add(token, CIRCUMFLEX) end break end end return concat(word, '') end function export.penult(orig) local word = toNFD(orig) if find(word, tonal_diacritic) then return word end word = shallow_copy(tokenize(word)) local syllables = 0 for i, token in m_table.reverseIpairs(word) do if token == '-' then return orig elseif contains_vowel(token) then syllables = syllables + 1 if syllables == 2 then word[i] = add(token, ACUTE) return concat(word, '') end end end return export.circ(orig) end function export.pencirc(orig) local word = toNFD(orig) if find(word, tonal_diacritic) then return word end word = shallow_copy(tokenize(word)) local syllables = 0 local long_ult = false for i, token in m_table.reverseIpairs(word) do if token == '-' then return orig end if contains_vowel(token) then syllables = syllables + 1 if syllables == 1 and not is_short(token) then long_ult = true if word[#word] == 'αι' or word[#word] == 'οι' then long_ult = false end elseif syllables == 2 then if is_short(token) or long_ult then word[i] = add(token, ACUTE) else word[i] = add(token, CIRCUMFLEX) end return concat(word, '') end end end return export.circ(orig) end function export.antepenult(orig) local word = toNFD(orig) if find(word, tonal_diacritic) then return word end word = shallow_copy(tokenize(word)) local syllables = 0 local long_ult = false for i, token in m_table.reverseIpairs(word) do if token == '-' then return orig end if contains_vowel(token) then syllables = syllables + 1 if syllables == 1 and not is_short(token) then long_ult = true if word[#word] == 'αι' or word[#word] == 'οι' then long_ult = false end elseif syllables == 2 and long_ult then word[i] = add(token, ACUTE) return concat(word, '') elseif syllables == 3 then word[i] = add(token, ACUTE) return concat(word, '') end end end return export.pencirc(orig) end --[[ Counts from the beginning or end of the word, and returns the position and type of the first accent found. Position means the number of vowels (syllables) that have been encountered, not the number of characters. Arguments: - word: string (Ancient Greek word) - from_end: boolean (whether to count from the end of the word) ]] local accent_cache = {[true] = {}, [false] = {}} function export.detect_accent(word, from_end) local check = _check("detect_accent") check(1, word, "string") check(2, from_end, "boolean", true) local cache = accent_cache[from_end == true][toNFD(word)] if cache then return unpack(cache) end local names = { [ACUTE] = "acute", [GRAVE] = "grave", [CIRCUMFLEX] = "circumflex", } local syllable = 0 local accent_name for _, token in (from_end and m_table.reverseIpairs or ipairs)(tokenize(word)) do if contains_vowel(token) then syllable = syllable + 1 accent_name = names[match(token, tonal_diacritic)] if accent_name then accent_cache[from_end == true][toNFD(word)] = {syllable, accent_name} return syllable, accent_name end end end return nil end --[[ Returns classification based on first accent found when traveling back from the end of the word. ]] function export.get_accent_term(word) local syllable, accent_name = export.detect_accent(word, true) local terms = { ["grave"] = {"barytone"}, ["acute"] = {"oxytone", "có trọng âm ở âm tiết áp cuối", "proparoxytone"}, ["circumflex"] = {"perispomenon", "properispomenon"}, } local ordinals = {"first", "second", "third", "fourth", "fifth",} local term if syllable and accent_name then term = terms[accent_name][syllable] end if term then return term else return nil, syllable and 'There is no term for a word with a ' .. accent_name .. ' accent on the ' .. ordinals[syllable] .. ' syllable from the end of the word.' or 'No accent found.' end end -- is_noun is a boolean or nil; if it is true, αι and οι will be -- treated as short. function export.get_length(token, short_diphthong) local token = toNFD(lower(token)) if not contains_vowel(token) then return nil -- error("The thing supplied to get_length does not have any vowels") end -- η, ω; ᾳ, ῃ, ῳ; ᾱ, ῑ, ῡ; diphthongs if find(token, "[ηω" .. long_diacritics .. "]") then return "long" end if short_diphthong and find(token, "^[αο]ι") then return "short" end if is_diphthong(token) then return "long" end -- ε, ο; ᾰ, ῐ, ῠ if find(token, "[εο" .. BREVE .. "]") then return "short" end -- anything else return "either" end -- Takes a table of tokens and returns a table containing tables of each vowel's -- characteristics. function export.get_vowel_info(tokens, short_diphthong) if type(tokens) ~= "table" then error("The argument to get_vowel_info must be a table.") end local vowels = {} local vowel_i = 1 if find(tokens[#tokens], m_data.consonant .. "$") then short_diphthong = false end for i, token in m_table.reverseIpairs(tokens) do if contains_vowel(token) then if vowel_i ~= 1 then short_diphthong = false end local length, accent = export.get_length(token, short_diphthong), if_not_empty(match(token, "[" .. ACUTE .. GRAVE .. CIRCUMFLEX .. "]")) vowels[vowel_i] = { index = i, length = length, accent = accent, } vowel_i = vowel_i + 1 end end return vowels end function export.mark_implied_length(word, return_tokens, short_diphthong) word = toNFD(word) -- Do nothing if there are no vowel letters that could be ambiguous. if not find(word, either_vowel) then if return_tokens then return tokenize(word) else return word end end local tokens = shallow_copy(tokenize(word)) local vowels = export.get_vowel_info(tokens, short_diphthong) if #vowels >= 2 then local ultima = vowels[1] local ultima_i = ultima.index local penult = vowels[2] local penult_i = penult.index if penult.length == "either" and ultima.length == "short" then if penult.accent == CIRCUMFLEX then tokens[penult_i] = add(tokens[penult_i], MACRON) elseif penult.accent == ACUTE then tokens[penult_i] = add(tokens[penult_i], BREVE) end elseif penult.length == "long" and ultima.length == "either" then if penult.accent == CIRCUMFLEX then tokens[ultima_i] = add(tokens[ultima_i], BREVE) elseif penult.accent == ACUTE then tokens[ultima_i] = add(tokens[ultima_i], MACRON) end end local antepenult = vowels[3] if antepenult and antepenult.accent and ultima.length == "either" then tokens[ultima_i] = add(tokens[ultima_i], BREVE) end end if return_tokens then return tokens else return concat(tokens) end end mark_implied_length = export.mark_implied_length -- Returns a table of any ambiguous vowels in the text, language-tagged. function export.find_ambig(text, noTag) local lengthDiacritic = "[" .. MACRON .. BREVE .. CIRCUMFLEX .. SUBSCRIPT .. "]" local aiu_diacritic = "^(" .. either_vowel .. ")(" .. diacritic .. "*)$" -- breaks the word into units local output, vowels = {}, {} for _, token in ipairs(tokenize(mark_implied_length(standard_diacritics(text)))) do local canonical = canonicalize(token) if not match(canonical, m_data.consonant) then local vowel, dia = match(canonical, aiu_diacritic) if vowel and (dia == "" or not match(dia, lengthDiacritic)) then insert(output, noTag and token or tag(token)) -- Lists the vowel letters that are ambiguous, for categorization purposes. vowels[lower(vowel)] = true end end end return output, vowels end -- Returns the length of a syllable specified by its position from the end of the word. function export.length_at(word, syllable) local tokens = tokenize(word) if type(word) ~= "string" then error("First argument of length_at should be a string.") end if type(syllable) ~= "number" then error("Second argument of length_at should be a number.") end local syllable_count = 0 for _, token in m_table.reverseIpairs(tokens) do local length = export.get_length(token) if length then syllable_count = syllable_count + 1 if syllable_count == syllable then return length end end end if syllable_count < syllable then error("Length for syllable " .. syllable .. " from the end of the word was not found.") end end local function find_breathing(token) return match(token, "([" .. ROUGH .. SMOOTH .. "])") end local function has_same_breathing_as(token1, token2) return find_breathing(token1) == find_breathing(token2) end -- Make token have the length specified by the string "length". local function change_length(length, token) local dia if length == "long" then dia = MACRON elseif length == "short" then dia = BREVE end if dia then return add(token, dia) else return token end end --[[ Take two words, mark implied length on each, then harmonize any macrons and breves that disagree. ]] function export.harmonize_length(word1, word2) word1 = toNFD(word1) -- Do nothing if there are no vowel letters that could be ambiguous. if not (find(word1, either_vowel) or find(word2, either_vowel)) then return word1, word2 end local tokens1, tokens2 = mark_implied_length(word1, true), mark_implied_length(word2, true) local strip1, strip2 = shallow_copy(tokenize(export.strip_accent(word1))), shallow_copy(tokenize(export.strip_accent(word2))) for i, token1 in pairs(tokens1) do local token2 = tokens2[i] if strip1[i] == strip2[i] then if has_same_breathing_as(token1, token2) then local length1, length2 = export.get_length(token1), export.get_length(token2) if length1 and length2 and length1 ~= length2 then if length1 == "either" then tokens1[i] = change_length(length2, token1) elseif length2 == "either" then tokens2[i] = change_length(length1, token2) end end else break end else break end end local new_word1, new_word2 = concat(tokens1), concat(tokens2) return new_word1, new_word2 end --[[ Get weight of nth syllable from end of word. Position defaults to 1, the last syllable. Returns "heavy" or "light", or nil if syllable is open with an ambiguous vowel. ]] function export.get_weight(word, position) if not if_not_empty(word) then return nil end local tokens = tokenize(word) if not position then position = 1 end local vowel local vowel_index = 0 -- Find nth vowel from end of word. for i, token in m_table.reverseIpairs(tokens) do local length = export.get_length(token) if length then vowel_index = vowel_index + 1 if vowel_index == position then vowel = {index = i, length = length} break end end end if not vowel then return nil end if vowel.length == "long" then return "heavy" else -- Count consonants after the vowel. local consonant_count = 0 for i = vowel.index + 1, #tokens do if not contains_vowel(tokens[i]) then consonant_count = consonant_count + 1 else break end end if consonant_count > 1 then return "heavy" elseif vowel.length == "short" then return "light" else return nil end end end --[[ Add accent mark at position. Position is a number that refers to the nth vowel from the beginning of the word. Respects the rules of accent. Examples: - δημος, 1 => δῆμος - προτερᾱ, 1 => προτέρᾱ (position changed to 2 because ultima is long) - μοιρα, 1, true => μοῖρα (circumflex can be added because ultima is ambiguous) - χωρᾱ, 1, true => χώρᾱ (circumflex can't be added because ultima is long) - τοιουτος, 2 => τοιοῦτος (circumflex because ultima is short) Arguments: - word: string (hopefully an Ancient Greek word or stem) - syllable_position: number (less than the number of monophthongs or diphthongs in the word) - options: table - circumflex boolean (add a circumflex if allowed) - synaeresis boolean (accent can fall before εω in penult and ultima: πόλεως) - short_diphthong boolean (word-final οι, αι count as short) ]] function export.add_accent(word, syllable_position, options) local check = _check("add_accent") check(1, word, "string") check(2, syllable_position, "number") check(3, options, "table", true) word = toNFD(word) if find(word, tonal_diacritic) then return word end options = options or {} local tokens = shallow_copy(tokenize(word)) local vowels = export.get_vowel_info(tokens, options.short_diphthong) local vowel_count = #vowels -- Convert positions in relation to the beginning of the word -- to positions in relation to the end of the word. -- The farthest back that an accent can be placed is 3 (the antepenult), -- so that is the greatest allowed position. if syllable_position > 0 then syllable_position = math.min(3, vowel_count - syllable_position + 1) -- If the position is in relation to the end of the word and it is greater -- than the length of the word, then reduce it to the length of the word. -- This is for practical reasons. Positions in relation to the beginning of -- the word do not need leeway. elseif syllable_position < 0 then syllable_position = math.min(-syllable_position, vowel_count) end if syllable_position == 0 then error("Invalid position value " .. syllable_position .. ".") elseif syllable_position > vowel_count then error("The position " .. syllable_position .. " is invalid, because the word has only " .. vowel_count .. " vowels.") end -- Apply accent rules to change the accent's position or type. local accent_mark = options.circumflex and CIRCUMFLEX or ACUTE local ultima = vowels[1] -- If synaeresis is selected, a final vowel sequence εω (optionally -- separated by an undertie) counts as one syllable. if syllable_position == 3 then local penult = vowels[2] if not options.force_antepenult and (ultima.length == "long" and not (options.synaeresis and ("Ωω"):find(tokens[ultima.index], 1, true) and ("Εε"):find(tokens[penult.index], 1, true) and (ultima.index == penult.index + 1 or ultima.index == penult.index + 2 and tokens[penult.index + 1] == UNDERTIE))) then syllable_position = 2 else accent_mark = ACUTE end end if syllable_position == 2 then if ultima.length == "short" and vowels[2].length == "long" then accent_mark = CIRCUMFLEX elseif ultima.length == "long" then accent_mark = ACUTE end end local vowel = vowels[syllable_position] if not vowel then error('No vowel at position ' .. syllable_position .. ' from the end of the word ' .. word .. '.') end if vowel.length == "short" then accent_mark = ACUTE end local i = vowel.index tokens[i] = add(tokens[i], accent_mark) return concat(tokens) end function export.syllables(word, func, number) local check = _check('syllables') check(1, word, 'string') check(2, func, 'string', true) check(3, number, 'number', true) if not func then error('No function specified') end local functions = { eq = function (word, number) local vowels = 0 for _, token in ipairs(tokenize(word)) do if contains_vowel(token) then vowels = vowels + 1 if vowels > number then return false end end end if vowels == number then return true end return false end } func = functions[func] if func then return func(word, number) else error('No function ' .. func) end end return export 6iufon2lz3yp0sjw110hthenjflqlz6 Mô đun:grc-translit 828 273991 2571737 2082933 2026-10-18T16:36:50Z Hiyuune 50834 2571737 Scribunto text/plain local export = {} local m_grc_utils = require("Module:grc-utilities") local m_grc_utils_data = require("Module:grc-utilities/data") local m_str_utils = require("Module:string utilities") local tokenize = require("Module:grc-utilities").tokenize local canonicalize = m_grc_utils.canonicalize local concat = table.concat local insert = table.insert local split = m_str_utils.split local u = m_str_utils.char local ugsub = m_str_utils.gsub local ulower = m_str_utils.lower local umatch = mw.ustring.match local uupper = m_str_utils.upper -- Diacritics local diacritic = m_grc_utils_data.diacritic local diacritics = m_grc_utils_data.diacritics -- Greek local acute = diacritics.acute local grave = diacritics.grave local circumflex = diacritics.circum local smooth = diacritics.smooth local rough = diacritics.rough local breve = diacritics.breve local macron = diacritics.macron local subscript = diacritics.subscript local vowel = m_grc_utils_data.vowel -- Latin local hat = diacritics.Latin_circum local au_subscript = "^[αυ].*" .. subscript .. "$" local question_mark = u(0x37E) local velar = "[γκξχϙ]" local long_vowels = { -- Macron will be added. ["η"] = "e", ["ω"] = "o", } local tt = { -- Vowels ["α"] = "a", ["ε"] = "e", ["ι"] = "i", ["ο"] = "o", ["υ"] = "u", -- Consonants ["β"] = "b", ["γ"] = "g", ["δ"] = "d", ["ζ"] = "z", ["θ"] = "th", ["κ"] = "k", ["λ"] = "l", ["μ"] = "m", ["ν"] = "n", ["ξ"] = "x", ["π"] = "p", ["ρ"] = "r", ["σ"] = "s", ["ς"] = "s", ["τ"] = "t", ["φ"] = "ph", ["χ"] = "kh", ["ψ"] = "ps", -- Other letters ["ϛ"] = "st", ["ϝ"] = "w", ["ͱ"] = "h", ["ϳ"] = "j", ["ϙ"] = "q", ["ϻ"] = "s", ["ϸ"] = "š", ["ͳ"] = "s", --["ͷ"] = "v", Differs by dialect. -- Diacritics -- unchanged: macron, diaeresis, grave, acute [smooth] = "", [rough] = "", [circumflex] = hat, [subscript] = "i", } local function get_next_token(tokens, i) local new = i + 1 local token = tokens[new] while token and token:match("[()[%]{}]") do new = new + 1 token = tokens[new] end return new, token, token and ulower(token), concat(tokens, nil, i + 1, new - 1) end local function translit_letter(letter, trail) local tr = long_vowels[letter] return (tr and (tr .. (trail:find(breve) and "" or macron)) or tt[letter] or letter) .. trail:gsub(".[\128-\191]*", tt) end local function do_translit(token) -- Put iota subscript before accent marks, so that they appear on "i". token = ugsub(token, "([" .. acute .. grave .. circumflex .. "]+)" .. subscript, subscript .. "%1") return ugsub(token, "(.)(%W*)", translit_letter) end local function remove_macron_if_hat(m) return m:find(hat) and m:gsub(macron, "") or m end local function insert_translit(output, translit, token, lower_token, next_token, next_token_lower, suffix) -- Remove any duplicate diacritics (this shouldn't really happen). local n repeat translit, n = ugsub(translit, "(" .. diacritic .. ")(%W-)%1", "%1%2") until n == 0 -- Remove macron from a vowel that has a circumflex. translit = ugsub(translit, "%W+", remove_macron_if_hat) -- If capitalized, only capitalize the first letter unless the following token is capitalized as well. insert( output, (token == lower_token and translit or next_token == next_token_lower and translit:gsub("^" .. ".[\128-\191]*", uupper) or uupper(translit) ) .. suffix ) end function export.tr(text, lang, sc) if text == "῾" then return "h" end -- in case of bold/italic text; only works in testcases submodule, not in sandbox, so outcommented -- local remove_rough = { -- ['ἱ'] = 'ι', ['ἵ'] = 'ί', ['ἳ'] = 'ὶ', ['ἷ'] = 'ῖ', -- ['ὑ'] = 'υ', ['ὕ'] = 'ύ', ['ὓ'] = 'ὺ', ['ὗ'] = 'ῦ', -- } -- text = ugsub(text, "([αᾰᾱΑᾸᾹεΕηΗοΟυῠῡΥῨῩωΩ])(\'\'\'?)([ἱἵἳἷὑὕὓὗ])", -- function(a,b,c) -- return a .. rough .. b .. remove_rough[c] -- end) --[[ Replace semicolon or Greek question mark with regular question mark, except any that occur in HTML entities. Use split to separate out the chunks between any entities. ]] text = split(canonicalize(text), "(&#?%w+;)") for i = 1, #text, 2 do text[i] = text[i]:gsub(";", "?"):gsub(question_mark, "?") end text = concat(text) -- Handle the middle dot. It is equivalent to semicolon or colon, but semicolon is probably more common. text = text:gsub("·", ";") local tokens = tokenize(text) --now read the tokens local next_i, next_token, next_token_lower, suffix = get_next_token(tokens, 0) local output = {suffix} while next_token do local i, token, lower_token, is_rough = next_i, next_token, next_token_lower local translit = do_translit(lower_token) next_i, next_token, next_token_lower, suffix = get_next_token(tokens, i) -- γ before a velar should be <n> if lower_token:find("γ") and next_token_lower and umatch(next_token_lower, velar) then translit = translit:gsub("g", "n") elseif lang == "xbc" and lower_token:find("φ") then translit = translit:gsub("ph", "f") elseif token == "ρ"..rough then translit = "rh" elseif token == "ρ"..smooth then translit = "r" -- ρ after ρ should be <rh> elseif lang == "grc" and lower_token:find("ρ") then -- Keep adding ρs until they run out. Set is_rough, so that "h" will get appended. while next_token_lower and next_token_lower:find("ρ") do insert_translit(output, translit, token, lower_token, next_token, next_token_lower, suffix) i, token, lower_token, is_rough = next_i, next_token, next_token_lower, true translit = do_translit(lower_token) next_i, next_token, next_token_lower, suffix = get_next_token(tokens, i) end -- add macron to ᾳ elseif umatch(lower_token, au_subscript) then translit = translit:gsub("[au]", "%0" .. macron) end if is_rough or lower_token:find(rough) then if umatch(lower_token, vowel) then translit = "h" .. translit else local final = umatch(translit, "(%w)%W*$") if final and final ~= "h" then translit = translit .. "h" end end end insert_translit(output, translit, token, lower_token, next_token, next_token_lower, suffix) end return concat(output) end return export 0dhgenoy6vd0n02uesjql72w66znn46 Mô đun:grc-decl/decl 828 278815 2571731 2094451 2026-10-18T16:25:13Z Hiyuune 50834 2571731 Scribunto text/plain local module_path = 'Module:grc-decl/decl' local m_classes = mw.loadData(module_path .. '/classes') local m_paradigms = mw.loadData(module_path .. '/staticdata/paradigms') local m_dialect_groups = mw.loadData(module_path .. '/staticdata/dialects') local m_decl_data = require(module_path .. '/data') local m_accent = require('Module:grc-accent') local concat = table.concat local insert = table.insert local toNFC = mw.ustring.toNFC local toNFD = mw.ustring.toNFD local ulen = mw.ustring.len local umatch = mw.ustring.match local usub = mw.ustring.sub local export = { inflections = m_decl_data.inflections, adjinflections = m_decl_data.adjinflections, adjinflections_con = m_decl_data.adjinflections_con, } local function quote(text) return "“" .. text .. "”" end local function get_accent_info(form) -- Get position of accent (nth vowel from beginning of word). local accent = {} local is_suffix = form:sub(1, 1) == '-' accent.position, accent.type = m_accent.detect_accent(form) -- Position: position of accent from beginning of word (number) or nil. -- Accent: accent name (string) or nil. -- Form must have an accent, unless it is a suffix. if not is_suffix and not next(accent) then error('No accent detected on ' .. quote(form) .. '. Please add an accent by copying this template and placing ' .. quote('/') .. ' for acute or ' .. quote('~') .. ' for circumflex after the vowel that should be accented: {{subst:chars|grc|' .. form .. '}}.') end -- Accent term as proxy for distinguishing between oxytone and perispomenon. accent.term = m_accent.get_accent_term(form) return accent, is_suffix end local form_redirects = { AS = 'NS', VS = 'NS', DD = 'GD', AD = 'ND', VD = 'ND', AP = 'NP', VP = 'NP', } local form_metatable = { __index = function (self, form_code) if type(form_code) ~= 'string' then return nil end if form_redirects[form_code] then return self[form_redirects[form_code]] elseif form_redirects[form_code:sub(2)] then return self[form_code:sub(1, 1) .. form_redirects[form_code:sub(2)]] -- If this is a neuter form but not in the nominative case, -- use the corresponding masculine form. elseif form_code:match('N[^N].') then return self['M' .. form_code:sub(2)] end end, } local function add_redirects(form_table) return setmetatable(form_table, form_metatable) end local function add_forms(args) if not args.irregular then --add stem to forms local function add_stem(forms) return forms:gsub('%$', args.stem) end -- args.suffix indicates that this is a paradigm for an unaccented suffix, -- such as [[-εια]]. if args.indeclinable then for k in pairs(args.ctable) do if k:match('[NGDAV][SDP]') then -- only format case-number forms args.ctable[k] = args[2] end end elseif args.suffix and not next(args.accent) then for k, v in pairs(args.ctable) do if k:match('[NGDAV][SDP]') then -- only format case-number forms args.ctable[k] = add_stem(v) end end else -- If the term is not a suffix and no accent was detected, then -- get_accent_info above must throw an error, -- or else there will be an uncaught error here. local add_circumflex = args.accent.type == 'circumflex' local recessive = -3 -- Force recessive accent in the Lesbian dialect. local accent_position = args.dial == 'les' and recessive or args.accent.position -- Circumflex on monosyllabic DS and AS in consonant-stem third- -- declension nouns: for example, Τρῷ and Τρῶ, DS and AS of Τρώς. local DS_AS = args.accent_alternating == true -- Added by "kles" function: for example, Περίκλεις. local VS = args.recessive_VS and recessive local synaeresis = args.synaeresis local add_accent = m_accent.add_accent local function add_accent_to_forms(forms, code) return forms:gsub('[^/]+', function(form) return add_accent(form, code == 'VS' and VS or accent_position, { synaeresis = synaeresis, circumflex = (code == 'DS' or code == 'AS') and DS_AS or add_circumflex, short_diphthong = true, force_antepenult = args.force_antepenult, } ) end) end for k, v in pairs(args.ctable) do if k:match('[NGDAV][SDP]') then -- only format case-number forms args.ctable[k] = add_accent_to_forms(add_stem(v), k) end end end end end local gender_codes = { 'M', 'F', 'N' } local case_codes = { 'N', 'G', 'D', 'A', 'V' } local number_codes = { 'S', 'D', 'P' } local function handle_noun_overrides(form_table, override_table) for _, case in ipairs(case_codes) do for _, number in ipairs(number_codes) do local key = case .. number if override_table[key] then require('Module:debug').track('grc-decl/form-override') end form_table[key] = override_table[key] or form_table[key] end end end local function handle_adjective_overrides(form_table, override_table) for _, gender in ipairs(gender_codes) do for _, case in ipairs(case_codes) do for _, number in ipairs(number_codes) do local key = gender .. case .. number if override_table[key] then require('Module:debug').track('grc-adecl/form-override') end form_table[key] = override_table[key] or form_table[key] end end end end --[=[ Gets stem-ending combinations from [[Module:grc-decl/decl/data]] and [[Module:grc-decl/decl/staticdata]]. Called a single time to get forms of a noun, and two or three times by make_decl_adj for each of the genders of an adjective. ]=] function export.make_decl(args, decl, root, is_adjective) if not export.inflections[decl] then error('Inflection type ' .. quote(decl) .. ' not found in [[' .. module_path .. "/data]].") end if args.adjective and args.irregular then error('Irregular adjectives are not handled by make_decl.') end if not root then error('No root for ' .. args[1] .. '.') end args.stem = root export.inflections[decl](args) args.gender[1] = args.gender[1] or args.ctable['g'] args.declheader = args.declheader or args.ctable['decl'] add_forms(args) if not is_adjective then handle_noun_overrides(args.ctable, args) end add_redirects(args.ctable) end -- String (comparative ending), function (input: root; output: comparative), -- false (the declension has no comparative form), or nil (use the if-statements -- to determine a comparative form). local decl_to_comp = { ['1&3-ᾰν'] = 'ᾰ́ντερος', ['1&3-εν'] = 'έντερος', ['1&3-εσσ'] = 'έστερος', -- hopefully this is general? ['1&3-εσσ-con'] = 'ήστερος', ['1&3-ups-ε'] = 'ῠ́τερος', ['1&3-ups-ει'] = 'ῠ́τερος', ['3rd-cons'] = function(root) local last2 = usub(root, -2) if last2 == 'ον' then return root .. 'έστερος' elseif last2 == 'εσ' then return root:gsub('εσ$', 'έστερος') else return false end end, ['1&3-οτ-υι'] = false, ['1&3-οτ-ϋι'] = false, ['3rd-εσ'] = 'έστερος', ['3rd-εσ-open'] = 'έστερος', ['1&2-alp-con'] = 'εώτερος', -- I assume—though I can't find examples ['1&2-eta-con'] = 'εώτερος', ['3rd-pure-υ'] = 'ῠ́τερος', } local function retrieve_comp(root, decl_type) local data = decl_to_comp[decl_type] if not data then return data elseif type(data) == 'string' then return root .. data elseif type(data) == 'function' then return data(root) else error('Data for ' .. decl_type .. ' is invalid.') end end -- Constructs an adverb, comparative, and superlative. function export.make_acs(args) -- input: -- strings local root, decl_type = args.root, args.decl_type -- tables local accent, atable = args.accent, args.atable -- output: local comp = retrieve_comp(root, decl_type) local super, adv if comp == nil then local alpha_nonultima = decl_type == '1&2-alp' and accent.term ~= 'oxytone' and accent.term ~= 'perispomenon' local last3 = usub(root, -3) if alpha_nonultima and last3 == 'τερ' then comp = nil adv = atable['NNS'] -- ? -- comp = nil elseif alpha_nonultima and last3 == 'τᾰτ' then super = nil adv = atable['NNP'] -- ? -- super = nil elseif decl_type:find('ντ') then comp = nil -- participles super = nil elseif (m_accent.get_weight(root, 1) == "light" or decl_type:match('att$')) then comp = root .. 'ώτερος' else comp = root .. 'ότερος' end end atable.adv = adv -- Actually neuter accusative singular. This is correct for -τερος and -- for μείζων; also for all comparatives in -ων? or args.comparative and atable.NNS -- actually neuter accusative plural or args.superlative and atable.NNP or atable.MGP and atable.MGP:gsub('ν$', 'ς'):gsub('ν<', 'ς<') atable.comp = comp atable.super = super or comp and comp:gsub('ερος$', 'ᾰτος') -- Remove comparative and superlative if adjective is a comparative or superlative. -- Parameters that trigger this condition are |deg=comp, |deg=super, and the -- deprecated |form=comp. if args.comparative or args.superlative then atable.comp, atable.super = nil, nil end for _, form in ipairs { 'adv', 'comp', 'super' } do if args[form] == "-" then atable[form] = nil elseif args[form] then atable[form] = args[form] end end end --[[ noun_table contains case-number forms. adjective_table will contain gender-case-number forms. override_table contains gender-case-number forms that will override the forms in noun_table. ]] local function transfer_forms_to_adjective_table(adjective_table, noun_table, gender_code) for case_and_number_code, form in pairs(noun_table) do adjective_table[gender_code .. case_and_number_code] = form end end --[=[ Interprets the table for the adjective's inflection type in [[Module:grc-decl/decl/staticdata]]. ]=] function export.make_decl_adj(args, ct) if args.irregular then return export.inflections['irreg-adj'](args) end --[[ Two possibilities, with the indices of the table of endings and the stem augmentation that they use: - masculine–feminine (1, a1), neuter (2, a2) - masculine (1, a1), feminine (2, a2), neuter (3, a3 else a1) ]] -- Masculine or masculine and feminine forms. export.make_decl(args, ct[1], args.root .. (ct.a1 or ''), true) transfer_forms_to_adjective_table(args.atable, args.ctable, 'M') -- Feminine or neuter forms. if ct[2] then export.make_decl(args, ct[2], args.fstem or (args.root .. (ct.a2 or '')), true) transfer_forms_to_adjective_table(args.atable, args.ctable, 'F') end export.make_decl(args, ct[3], args.root .. (ct.a3 or ct.a1 or ''), true) transfer_forms_to_adjective_table(args.atable, args.ctable, 'N') add_redirects(args.atable) args.ctable = nil export.make_acs(args) handle_adjective_overrides(args.atable, args) args.adeclheader = ct.adeclheader or 'Declension' end -- This function requires NFC forms for [[Module:grc-decl/decl/classes]], -- but NFD forms for [[Module:grc-decl/decl/data]]. function export.get_decl(args) if args.indeclinable then if not args[2] then error("Specify the indeclinable form in the 2nd parameter.") end args.decl_type, args.root = 'indecl', '' return elseif args.irregular then if args.gender[1] == "N" then args.decl_type, args.root = 'irregN', '' else args.decl_type, args.root = 'irreg', '' end return elseif not (args[1] and args[2]) then error("Use the 1st and 2nd parameters for the nominative and genitive singular.") end local infl_info = m_classes.infl_info.noun args[1] = toNFC(args[1]) args[2] = toNFC(args[2]) local arg1, arg2 = args[1], args[2] local nom_without_accent = toNFC(m_accent.strip_tone(arg1)) local gen_without_accent = toNFC(m_accent.strip_tone(arg2)) local nominative_matches, decl_type, root = {} for i = -infl_info.longest_nominative_ending, -1 do local nominative_ending = usub(nom_without_accent, i) local decl_types_by_genitive_ending = infl_info[nominative_ending] -- If decl_types_by_genitive_ending is a string, then it is the key of -- another table in infl_info, a nominative ending with a macron or -- breve (ι → ῐ). if type(decl_types_by_genitive_ending) == "string" then decl_types_by_genitive_ending = infl_info[decl_types_by_genitive_ending] end if decl_types_by_genitive_ending then insert(nominative_matches, decl_types_by_genitive_ending) root = usub(nom_without_accent, 1, -1 - ulen(nominative_ending)) for j = -6, -1 do local genitive_ending = usub(gen_without_accent, j) local name = decl_types_by_genitive_ending[genitive_ending] if name then decl_type = name break end end if decl_type then break end end end args.accent, args.suffix = get_accent_info(arg1) if decl_type and root then if args.contracted == 'false' and not decl_type:find('open') then decl_type = decl_type .. '-open' end args.decl_type, args.root = decl_type, toNFD(root) return elseif gen_without_accent:match('ος$') then local root = toNFD(usub(gen_without_accent, 1, -3)) if ( args.gender[1] == "N" or ( not (args.gender[1] == "M" and args.gender[2] == "F") and umatch(root, "α" .. mw.loadData('Module:grc-utilities/data').length.mandatory .. "τ$") ) ) then args.decl_type, args.root = '3rd-N-cons', root else args.decl_type, args.root = '3rd-cons', root end return end if nominative_matches[1] then local m_table = require 'Module:table' local grc = require 'Module:languages'.getByCode 'grc' local make_sort_key = require("Module:memoize")(function (term) return (grc:makeSortKey(term)) end) if nominative_matches[2] then local new_nominative_matches = {} for _, matches in ipairs(nominative_matches) do for k, v in pairs(matches) do new_nominative_matches[k] = v end end nominative_matches = new_nominative_matches else nominative_matches = nominative_matches[1] end local gens = require 'Module:fun'.map( function (gen) return quote("-" .. gen) end, m_table.keysToList( nominative_matches, function (gen1, gen2) local sort_key1, sort_key2 = make_sort_key(gen1), make_sort_key(gen2) if sort_key1 == sort_key2 then return gen1 < gen2 else return sort_key1 < sort_key2 end end)) local agreement if #gens > 1 then agreement = { "Declensions were", "s ", " do" } else agreement = { "A declension was", " ", " does" } end gens = concat(gens, ", ") error(agreement[1] .. " found that matched the ending of the nominative form " .. quote(arg1) .. ", but the genitive ending" .. agreement[2] .. gens .. agreement[3] .. " not match the genitive form " .. quote(arg2) .. ".") else for nom, gens in pairs(m_classes.ambig_forms) do if arg1:match(nom .. "$") then for gen, _ in pairs(gens) do if arg2:match(gen .. "$") then error("No declension found for nominative " .. quote(arg1) .. " and genitive " .. quote(arg2) .. ". There are two declensions with nominative " .. quote("-" .. nom) .. " and genitive " .. quote("-" .. gen) .. ". To indicate which one you mean, mark the vowel length of the endings with a macron or breve.") end end end end error("Can’t find a declension type for nominative " .. quote(arg1) .. " and genitive " .. quote(arg2) .. ".") end end -- This function requires NFC forms for [[Module:grc-decl/decl/classes]], -- but NFD forms for [[Module:grc-decl/decl/data]]. function export.get_decl_adj(args) if args.irregular then args.decl_type, args.root = 'irreg', '' return elseif not args[1] then error('Use the 1st and 2nd parameters for the masculine and the ' .. 'feminine or neuter nominative singular, or the first parameter ' .. ' alone for the 3rd declension stem.') end args[1] = toNFC(args[1]) if args[2] then args[2] = toNFC(args[2]) end local arg1, arg2 = args[1], args[2] local mstrip = toNFC(m_accent.strip_tone(arg1)) local fstrip if arg2 then fstrip = toNFC(m_accent.strip_tone(arg2)) else args.accent, args.suffix = get_accent_info(arg1) args.decl_type, args.root = '3rd-cons', toNFD(mstrip) return end local infl_info = m_classes.infl_info.adj -- See if last three or two characters of masc have an entry. local masc, decl for i = -infl_info.longest_masculine_ending, -2 do local ending = usub(mstrip, i) local data = infl_info[ending] if data then masc = ending decl = data break end end -- Allows redirecting, so that macrons or breves can be omitted for instance. if type(decl) == "string" then decl = infl_info[decl] end if decl then -- Look for a feminine ending that matches the end of the feminine form. local fem, name for feminine, decl_name in pairs(decl) do if fstrip:match(feminine .. '$') then fem = feminine name = decl_name:gsub("%d$", "") break end end if fem then args.accent, args.suffix = get_accent_info(arg1) -- The only indication that λέγων, λέγουσᾰ (stem λεγοντ-) and -- ποιῶν, ποιοῦσᾰ (stem ποιουντ-) have different stems is the -- accentuation of the masculine form. if name == '1&3-οντ' and args.accent.term == 'perispomenon' then name = '1&3-οντ-con' end if not export.adjinflections[name] then error('Inflection recognition failed. Function for generated inflection code ' .. quote(name) .. ' not found in [[' .. module_path .. "/data]].") end args.decl_type, args.root = name, toNFD(mstrip:gsub(masc .. "$", "")) return else -- No declension type found. local fems = {} local is_neuter = false for fem in pairs(decl) do if fem == "ον" then is_neuter = true end insert(fems, quote("-" .. fem)) end fems = concat(fems, ", ") local agreement = { "A declension was", " ", " does" } if #fems > 1 then agreement = { "Declensions were", "s ", " do" } end error(agreement[1] .. " found that matched the ending of the masculine " .. quote(arg1) .. ", but the corresponding feminine" .. (is_neuter and " and neuter" or "") .. " ending" .. agreement[2] .. fems .. agreement[3] .. " not match the feminine " .. quote(arg2) .. ".") end end error("Can’t find a declension type for masculine " .. quote(arg1) .. " and feminine or neuter " .. quote(arg2) .. ".") end --[[ Returns a table containing the inflected forms of the article, to be placed before each inflected noun form. ]] function export.infl_art(args) if args.dial == 'epi' or args.adjective or args.no_article then return {} end local art = {} local arttable if args.gender[1] then arttable = m_paradigms.art_att[args.gender[1]] else error('Gender not specified.') end for code, suffix in pairs(arttable) do if (args.gender[1] == "M" and args.gender[2] == "F") and m_paradigms.art_att.M[code] ~= m_paradigms.art_att.F[code] then art[code] = m_paradigms.art_att.M[code] .. ' / ' .. m_paradigms.art_att.F[code] else art[code] = suffix end end if args.gender[1] == 'F' then if m_dialect_groups['nonIA'][args.dial] then art['NS'] = 'ᾱ̔' -- 104.1-4 art['GS'] = 'τᾶς' art['DS'] = 'τᾷ' art['AS'] = 'τᾱ̀ν' end if args.dial == 'the' or args.dial == 'les' then art['DS'] = 'τᾶ' -- 39 elseif args.dial == 'boi' or args.dial == 'ara' or args.dial == 'ele' then art['DS'] = 'ται' -- 104.3 end if m_dialect_groups['nonIA'][args.dial] then art['GP'] = 'τᾶν' -- 104.6 end if args.dial == 'ato' then art['DP'] = 'τῆσῐ(ν)' -- 104.7 elseif args.dial == 'ion' then art['DP'] = 'τῇσῐ(ν)' -- 104.7 end if m_dialect_groups['buck78'][args.dial] then art['AP'] = 'τᾰ̀ς' -- 104.8 elseif args.dial == 'kre' or args.dial == 'arg' then art['AP'] = 'τὰνς' elseif args.dial == 'les' then art['AP'] = 'ταῖς' elseif args.dial == 'ele' then art['AP'] = 'ταὶρ' end if args.dial == 'kre' or args.dial == 'les' or args.dial == 'kyp' then art['NS'] = 'ᾱ̓' -- 57 art['NP'] = 'αἰ' elseif args.dial == 'ele' then art['NS'] = 'ᾱ̓' art['NP'] = 'ταὶ' elseif args.dial == 'boi' then art['NP'] = 'τὴ' -- 104.5 elseif m_dialect_groups['west'][args.dial] then --boeotian is covered above art['NP'] = 'ταὶ' end elseif args.gender[1] == 'M' or args.gender[1] == 'N' then if args.dial == 'the' then art['GS'] = 'τοῖ' -- 106.1 art['DS'] = 'τοῦ' -- 23 art['ND'] = 'τοὺ' art['GP'] = 'τοῦν' end if args.dial == 'les' then art['DS'] = 'τῶ' -- 106.2 elseif args.dial == 'boi' or args.dial == 'ara' or args.dial == 'ele' or args.dial == 'eub' then art['DS'] = 'τοῖ' -- 106.2 end if args.dial == 'ato' or args.dial == 'ion' then art['DP'] = 'τοῖσῐ(ν)' -- 106.4 end if args.gender[1] == 'M' then if m_dialect_groups['buck78'][args.dial] then art['AP'] = 'τὸς' -- 106.5 elseif args.dial == 'kre' or args.dial == 'arg' then art['AP'] = 'τὸνς' elseif args.dial == 'les' then art['AP'] = 'τοῖς' elseif args.dial == 'ele' then art['AP'] = 'τοὶρ' elseif m_dialect_groups['severe'][args.dial] or args.dial == 'boi' then art['AP'] = 'τὼς' end if args.dial == 'kre' or args.dial == 'les' or args.dial == 'kyp' then art['NS'] = 'ὀ' -- 57 art['NP'] = 'οἰ' elseif args.dial == 'ele' then art['NS'] = 'ὀ' art['NP'] = 'τοὶ' elseif m_dialect_groups['west'][args.dial] or args.dial == 'boi' then art['NP'] = 'τοὶ' end end if args.dial == 'ele' then art['GD'] = 'τοίοις' -- elseif args.dial == 'ara' then -- art['GD'] = 'τοιυν' end end return art end local lang = require("Module:languages").getByCode("grc") local function tag(text) return require("Module:script utilities").tag_text("-" .. text, lang) end local function print_detection_table(detection_table, labels, noun) local out = require('Module:array')() local function sort(item1, item2) -- Put 'longest_nominative_ending' and 'longest_masculine_ending' first. local item1_longest = item1:match('^longest') if item1_longest or item2:match('^longest') then return item1_longest ~= nil end local sort1, sort2 = (lang:makeSortKey(item1)), (lang:makeSortKey(item2)) local decomp_length1, decomp_length2 = ulen(toNFD(item1)), ulen(toNFD(item2)) if sort1 == sort2 then -- Sort ᾱ or ᾰ before α. if decomp_length1 > decomp_length2 then return true else return false end else return sort1 < sort2 end end for key1, value1 in require("Module:table").sortedPairs(detection_table, sort) do if key1:match('^longest') then out:insert('* ' .. key1:gsub('_', ' ') .. ': ' .. value1 .. ' characters') else insert(out, "\n* " .. labels[1] .. " " .. tag(key1)) if type(value1) == "string" then out:insert(" &rarr; " .. tag(value1)) elseif type(value1) == "table" then for key2, value2 in require("Module:table").sortedPairs(value1, sort) do -- mw.log(len(key1), len(key2)) out:insert("\n** " .. (noun and labels[2] or key2 == "ον" and "neuter" or "feminine") .. " " .. tag(key2) .. ": <code>" .. value2 .. "</code>") if noun then out:insert(" (<code>" .. (m_classes.conversion[value2] or "?") .. "</code>)") end end end end end return out:concat() end function export.show_noun_categories(frame) return print_detection_table(m_classes.infl_info.noun, { "nominative", "genitive" }, true) end function export.show_adj_categories(frame) return print_detection_table(m_classes.infl_info.adj, { "masculine", "feminine or neuter" }) end return export 28430d0mhws70z25c5bsb78hnzybb24 Mô đun:languages/data/exceptional 828 279282 2571726 2570748 2026-10-18T15:46:00Z Hiyuune 50834 2571726 Scribunto text/plain local m_langdata = require("Module:languages/data") -- Loaded on demand, as it may not be needed (depending on the data). local function u(...) u = require("Module:string utilities").char return u(...) end local c = m_langdata.chars local p = m_langdata.puaChars local s = m_langdata.shared local m = {} m["aav-bhu"] = { "tiếng Bhumij", 57920059, "mun", nil, "Tiếng Bhumij", "Bhumij", } m["aav-khs-pro"] = { "tiếng Khasi nguyên thủy", nil, "aav-khs", "Latn", "Tiếng Khasi nguyên thủy", "Khasi nguyên thủy", type = "reconstructed", } m["aav-nic-pro"] = { "tiếng Nicobar nguyên thủy", nil, "aav-nic", "Latn", "Tiếng Nicobar nguyên thủy", "Nicobar nguyên thủy", type = "reconstructed", } m["aav-pkl-pro"] = { "tiếng Pnar-Khasi-Lyngngam nguyên thủy", nil, "aav-pkl", "Latn", "Tiếng Pnar-Khasi-Lyngngam nguyên thủy", "Pnar-Khasi-Lyngngam nguyên thủy", type = "reconstructed", } m["aav-pro"] = { --The mkh-pro will merge into this. "tiếng Nam Á nguyên thủy", nil, "aav", "Latn", "Tiếng Nam Á nguyên thủy", "Nam Á nguyên thủy", type = "reconstructed", } m["aav-tam"] = { "tiếng Tà Mun", 130370566, "mkh-ban", nil, "Tiếng Tà Mun", "Tà Mun", } m["afa-pro"] = { "tiếng Phi-Á nguyên thủy", 269125, "afa", "Latn", "Tiếng Phi-Á nguyên thủy", "Phi-Á nguyên thủy", type = "reconstructed", } m["alg-aga"] = { "tiếng Agawam", nil, "alg-eas", "Latn", "Tiếng Agawam", "Agawam", } m["alg-pro"] = { "tiếng Algonquin nguyên thủy", 7251834, "alg", "Latn", "Tiếng Algonquin nguyên thủy", "Algonquin nguyên thủy", type = "reconstructed", sort_key = {remove_diacritics = "·"}, } m["alv-ama"] = { "Amasi", 4740400, "nic-grs", "Latn", entry_name = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.macron}, } m["alv-bgu"] = { "Baïnounk Gubëeher", 17002646, "alv-bny", "Latn", } m["alv-bua-pro"] = { "Proto-Bua", nil, "alv-bua", "Latn", type = "reconstructed", } m["alv-cng-pro"] = { "Proto-Cangin", nil, "alv-cng", "Latn", type = "reconstructed", } m["alv-edo-pro"] = { "tiếng Edoid nguyên thủy", nil, "alv-edo", "Latn", "Tiếng Edoid nguyên thủy", "Edoid nguyên thủy", type = "reconstructed", } m["alv-fli-pro"] = { "Proto-Fali", nil, "alv-fli", "Latn", type = "reconstructed", } m["alv-gbe-pro"] = { "tiếng Gbe nguyên thủy", nil, "alv-gbe", "Latn", "Tiếng Gbe nguyên thủy", "Gbe nguyên thủy", type = "reconstructed", } m["alv-gng-pro"] = { "Proto-Guang", nil, "alv-gng", "Latn", type = "reconstructed", } m["alv-gtm-pro"] = { "Proto-Central Togo", nil, "alv-gtm", "Latn", type = "reconstructed", } m["alv-gwa"] = { "Gwara", 16945580, "nic-pla", "Latn", } m["alv-hei-pro"] = { "Proto-Heiban", nil, "alv-hei", "Latn", type = "reconstructed", } m["alv-ido-pro"] = { "Proto-Idomoid", nil, "alv-ido", "Latn", type = "reconstructed", } m["alv-igb-pro"] = { "Proto-Igboid", nil, "alv-igb", "Latn", type = "reconstructed", } m["alv-kwa-pro"] = { "Proto-Kwa", nil, "alv-kwa", "Latn", type = "reconstructed", } m["alv-mum-pro"] = { "Proto-Mumuye", nil, "alv-mum", "Latn", type = "reconstructed", } m["alv-nup-pro"] = { "Proto-Nupoid", nil, "alv-nup", "Latn", type = "reconstructed", } m["alv-pro"] = { "tiếng Đại Tây Dương–Congo nguyên thủy", nil, "alv", "Latn", "Tiếng Đại Tây Dương–Congo nguyên thủy", "Đại Tây Dương–Congo nguyên thủy", type = "reconstructed", } m["alv-edk-pro"] = { "tiếng Edekiri nguyên thủy", nil, "alv-edk", "Latn", "Tiếng Edekiri nguyên thủy", "Edekiri nguyên thủy", type = "reconstructed", } m["alv-yor-pro"] = { "tiếng Yoruba nguyên thủy", nil, "alv-yor", "Latn", "Tiếng Yoruba nguyên thủy", "Yoruba nguyên thủy", type = "reconstructed", } m["alv-yrd-pro"] = { "tiếng Yorubo nguyên thủy", 116773824, "alv-yrd", "Latn", "Tiếng Yorubo nguyên thủy", "Yorubo nguyên thủy", type = "reconstructed", } m["alv-von-pro"] = { "tiếng Volta-Niger nguyên thủy", nil, "alv-von", "Latn", "Tiếng Volta-Niger nguyên thủy", "Volta-Niger nguyên thủy", type = "reconstructed", } m["apa-pro"] = { "Proto-Apachean", nil, "apa", "Latn", type = "reconstructed", } m["aql-pro"] = { "tiếng Algic nguyên thủy", 18389588, "aql", "Latn", "Tiếng Algic nguyên thủy", "Algic nguyên thủy", type = "reconstructed", sort_key = {remove_diacritics = "·"}, } m["art-blk"] = { "Bolak", 2909283, "art", "Latn", type = "appendix-constructed", } m["art-bsp"] = { "Black Speech", 686210, "art", "Latn, Teng", type = "appendix-constructed", } m["art-com"] = { "Communicationssprache", 35227, "art", "Latn", type = "appendix-constructed", } m["art-dtk"] = { "Dothraki", 2914733, "art", "Latn", type = "appendix-constructed", } m["art-elo"] = { "Eloi", nil, "art", "Latn", type = "appendix-constructed", } m["art-gld"] = { "Goa'uld", 19823, "art", "Latn, Egyp, Mero", type = "appendix-constructed", } m["art-lap"] = { "Lapine", 6488195, "art", "Latn", type = "appendix-constructed", } m["art-man"] = { "Mandalorian", 54289, "art", "Latn", type = "appendix-constructed", } m["art-mun"] = { "Mundolinco", 851355, "art", "Latn", type = "appendix-constructed", } m["art-nav"] = { "Na'vi", 316939, "art", "Latn", type = "appendix-constructed", } m["art-nox"] = { "Noxilo", nil, "art", "Latn", type = "appendix-constructed", } m["art-una"] = { "Unas", nil, "art", "Latn", type = "appendix-constructed", } m["ath-nic"] = { "Nicola", 20609, "ath-nor", "Latn", } m["ath-pro"] = { "tiếng Athabasca nguyên thủy", 104841722, "ath", "Latn", type = "reconstructed", "Tiếng Athabasca nguyên thủy", "Athabasca nguyên thủy", } m["auf-pro"] = { "Proto-Arawa", nil, "auf", "Latn", type = "reconstructed", } m["aus-alu"] = { "Alungul", 16827670, "aus-pmn", "Latn", } m["aus-and"] = { "Andjingith", 4754509, "aus-pmn", "Latn", } m["aus-ang"] = { "tiếng Angkula", 16828520, "aus-pmn", "Latn", "Tiếng Angkula", "Angkula", } m["aus-arn-pro"] = { "Proto-Arnhem", nil, "aus-arn", "Latn", type = "reconstructed", } m["aus-bra"] = { "Barranbinya", 4863220, "aus-pmn", "Latn", } m["aus-brm"] = { "Barunggam", 4865914, "aus-pmn", "Latn", } m["aus-cww-pro"] = { "tiếng Trung New South Wales nguyên thủy", nil, "aus-cww", "Latn", type = "reconstructed", } m["aus-dal-pro"] = { "Proto-Daly", nil, "aus-dal", "Latn", type = "reconstructed", } m["aus-guw"] = { "Guwar", 6652138, "aus-pam", "Latn", } m["aus-lsw"] = { "Little Swanport", 6652138, nil, "Latn", } m["aus-mbi"] = { "Mbiywom", 6799701, "aus-pmn", "Latn", } m["aus-ngk"] = { "Ngkoth", 7022405, "aus-pmn", "Latn", } m["aus-nyu-pro"] = { "Proto-Nyulnyulan", nil, "aus-nyu", "Latn", type = "reconstructed", } m["aus-pam-pro"] = { "tiếng Pama-Nyungar nguyên thủy", 33942, "aus-pam", "Latn", "Tiếng Pama-Nyungar nguyên thủy", "Pama-Nyungar nguyên thủy", type = "reconstructed", } m["aus-tul"] = { "Tulua", 16938541, "aus-pam", "Latn", } m["aus-uwi"] = { "Uwinymil", 7903995, "aus-arn", "Latn", } m["aus-wdj-pro"] = { "tiếng Iwaidja nguyên thủy", nil, "aus-wdj", "Latn", type = "reconstructed", } m["aus-won"] = { "Wong-gie", nil, "aus-pam", "Latn", } m["aus-wul"] = { "Wulguru", 8039196, "aus-dyb", "Latn", } m["aus-ynk"] = { -- contrast nny "Yangkaal", 3913770, "aus-tnk", "Latn", } m["awd-amc-pro"] = { "Proto-Amuesha-Chamicuro", nil, "awd", "Latn", type = "reconstructed", ancestors = "awd-pro", } m["awd-kmp-pro"] = { "Proto-Kampa", nil, "awd", "Latn", type = "reconstructed", ancestors = "awd-pro", } m["awd-prw-pro"] = { "Proto-Paresi-Waura", nil, "awd", "Latn", type = "reconstructed", ancestors = "awd-pro", } m["awd-ama"] = { "Amarizana", 16827787, "awd", "Latn", } m["awd-ana"] = { "tiếng Anauyá", 16828252, "awd", "Latn", "Tiếng Anauyá", "Anauyá", } m["awd-apo"] = { "Apolista", 16916645, "awd", "Latn", } m["awd-cav"] = { "Cavere", nil, "awd", "Latn", } m["awd-gnu"] = { "Guinau", 3504087, "awd", "Latn", } m["awd-kar"] = { "Cariay", 16920253, "awd", "Latn", } m["awd-kaw"] = { "Kawishana", 6379993, "awd-nwk", "Latn", } m["awd-kus"] = { "Kustenau", 5196293, "awd", "Latn", } m["awd-man"] = { "Manao", 6746920, "awd", "Latn", } m["awd-mar"] = { "Marawan", 6755108, "awd", "Latn", } m["awd-mpr"] = { "Maypure", nil, "awd", "Latn", } m["awd-mrt"] = { "Mariaté", 16910017, "awd-nwk", "Latn", } m["awd-nwk-pro"] = { "Proto-Nawiki", nil, "awd-nwk", "Latn", type = "reconstructed", } m["awd-pai"] = { "Paikoneka", nil, "awd", "Latn", } m["awd-pas"] = { "Passé", nil, "awd-nwk", "Latn", } m["awd-pro"] = { "tiếng Arawak nguyên thủy", nil, "awd", "Latn", "Tiếng Arawak nguyên thủy", "Arawak nguyên thủy", type = "reconstructed", } m["awd-she"] = { "tiếng Shebayo", 7492248, "awd", "Latn", "Tiếng Shebayo", "Shebayo" } m["awd-taa-pro"] = { "Proto-Ta-Arawak", nil, "awd-taa", "Latn", type = "reconstructed", } m["awd-wai"] = { "Wainumá", 16910017, "awd-nwk", "Latn", } m["awd-yum"] = { "Yumana", 8061062, "awd-nwk", "Latn", } m["azc-caz"] = { "Cazcan", 5055514, "azc", "Latn", } m["azc-cup-pro"] = { "Proto-Cupan", nil, "azc-cup", "Latn", type = "reconstructed", } m["azc-ktn"] = { "Kitanemuk", 3197558, "azc-tak", "Latn", } m["azc-nah-pro"] = { "tiếng Nahua nguyên thủy", 7251860, "azc-nah", "Latn", "Tiếng Nahua nguyên thủy", "Nahua nguyên thủy", type = "reconstructed", } m["azc-num-pro"] = { "Proto-Numic", nil, "azc-num", "Latn", type = "reconstructed", } m["azc-pro"] = { "tiếng Ute-Aztec nguyên thủy", 96400333, "azc", "Latn", "Tiếng Ute-Aztec nguyên thủy", "Ute-Aztec nguyên thủy", type = "reconstructed", } m["azc-tak-pro"] = { "Proto-Takic", nil, "azc-tak", "Latn", type = "reconstructed", } m["azc-tat"] = { "Tataviam", 743736, "azc", "Latn", } m["ber-pro"] = { "tiếng Berber nguyên thủy", 2855698, "ber", "Latn", "Tiếng Berber nguyên thủy", "Berber nguyên thủy", type = "reconstructed", } m["ber-fog"] = { "tiếng Fogaha", 107610173, "ber", "Latn", "Tiếng Fogaha", "Fogaha", } m["ber-zuw"] = { "Zuwara", 4117169, "ber", "Latn", } m["bnt-bal"] = { "Balong", 93935237, "bnt-bbo", "Latn", } m["bnt-bon"] = { "Boma Nkuu", nil, "bnt", "Latn", } m["bnt-boy"] = { "Boma Yumu", nil, "bnt", "Latn", } m["bnt-bwa"] = { "Bwala", nil, "bnt-tek", "Latn", } m["bnt-cmw"] = { "Chimwiini", 4958328, "bnt-swh", "Latn", } m["bnt-ind"] = { "Indanga", 51412803, "bnt", "Latn", } m["bnt-lal"] = { "Lala (South Africa)", 6480154, "bnt-ngu", "Latn", } m["bnt-lwl"] = { "Lwel", 93936908, "bnt-bdz", "Latn", } m["bnt-mpi"] = { "Mpiin", 93937013, "bnt-bdz", "Latn", } m["bnt-mpu"] = { "Mpuono", --not to be confused with Mbuun zmp 36056, "bnt", "Latn", } m["bnt-ngu-pro"] = { "tiếng Nguni nguyên thủy", 961559, "bnt-ngu", "Latn", "Tiếng Nguni nguyên thủy", "Nguni nguyên thủy", type = "reconstructed", sort_key = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.caron}, } m["bnt-phu"] = { "Phuthi", 33796, "bnt-ngu", "Latn", entry_name = {remove_diacritics = c.grave .. c.acute}, } m["bnt-pro"] = { "tiếng Bantu nguyên thủy", 3408025, "bnt", "Latn", "Tiếng Bantu nguyên thủy", "Bantu nguyên thủy", type = "reconstructed", sort_key = "bnt-pro-sortkey", } m["bnt-sbo"] = { "South Boma", nil, "bnt", "Latn", } m["bnt-sts-pro"] = { "Proto-Sotho-Tswana", nil, "bnt-sts", "Latn", type = "reconstructed", } m["btk-pro"] = { "Proto-Batak", nil, "btk", "Latn", type = "reconstructed", } m["cau-abz-pro"] = { "tiếng Abkhaz-Abaza nguyên thủy", 7251831, "cau-abz", "Latn", "Tiếng Abkhaz-Abaza nguyên thủy", "Abkhaz-Abaza nguyên thủy", type = "reconstructed", } m["cau-ava-pro"] = { "tiếng Avar-Andic nguyên thủy", 116773187, "cau-ava", "Latn", "Tiếng Avar-Andic nguyên thủy", "Avar-Andic nguyên thủy", type = "reconstructed", } m["cau-cir-pro"] = { "tiếng Circassia nguyên thủy", 7251838, "cau-cir", "Latn", "Tiếng Circassia nguyên thủy", "Circassia nguyên thủy", type = "reconstructed", } m["cau-drg-pro"] = { "tiếng Dargwa nguyên thủy", nil, "cau-drg", "Latn", "Tiếng Dargwa nguyên thủy", "Dargwa nguyên thủy", type = "reconstructed", } m["cau-lzg-pro"] = { "tiếng Lezgi nguyên thủy", nil, "cau-lzg", "Latn", "Tiếng Lezgi nguyên thủy", "Lezgi nguyên thủy", type = "reconstructed", } m["cau-nec-pro"] = { "tiếng Đông Bắc Kavkaz nguyên thủy", nil, "cau-nec", "Latn", "Tiếng Đông Bắc Kavkaz nguyên thủy", "Đông Bắc Kavkaz nguyên thủy", type = "reconstructed", } m["cau-nkh-pro"] = { "tiếng Nakh nguyên thủy", nil, "cau-nkh", "Latn", "Tiếng Nakh nguyên thủy", "Nakh nguyên thủy", type = "reconstructed", } m["cau-nwc-pro"] = { "tiếng Tây Bắc Kavkaz nguyên thủy", 7251861, "cau-nwc", "Latn", "Tiếng Tây Bắc Kavkaz nguyên thủy", "Tây Bắc Kavkaz nguyên thủy", type = "reconstructed", } m["cau-tsz-pro"] = { "Proto-Tsezian", nil, "cau-tsz", "Latn", type = "reconstructed", } m["cba-ata"] = { "Atanques", 4812783, "cba", "Latn", } m["cba-cat"] = { "Catío Chibcha", 7083619, "cba", "Latn", } m["cba-dor"] = { "Dorasque", 5297532, "cba", "Latn", } m["cba-dui"] = { "Duit", 3041061, "cba", "Latn", } m["cba-hue"] = { "Huetar", 35514, "cba", "Latn", } m["cba-nut"] = { "Nutabe", 7070405, "cba", "Latn", } m["cba-pro"] = { "Proto-Chibchan", nil, "cba", "Latn", type = "reconstructed", } m["ccn-pro"] = { "Proto-North Caucasian", nil, "ccn", "Latn", type = "reconstructed", } m["ccs-pro"] = { "tiếng Kartvelia nguyên thủy", 2608203, "ccs", "Latn", type = "reconstructed", "Tiếng Kartvelia nguyên thủy", "Kartvelia nguyên thủy", entry_name = { from = {"q̣", "p̣", "ʓ", "ċ"}, to = {"q̇", "ṗ", "ʒ", "c̣"} }, } m["ccs-gzn-pro"] = { "tiếng Gruzia-Zan nguyên thủy", 23808119, "ccs-gzn", "Latn", "Tiếng Gruzia-Zan nguyên thủy", "Gruzia-Zan nguyên thủy", type = "reconstructed", entry_name = { from = {"q̣", "p̣", "ʓ", "ċ"}, to = {"q̇", "ṗ", "ʒ", "c̣"} }, } m["cdc-cbm-pro"] = { "Proto-Central Chadic", nil, "cdc-cbm", "Latn", type = "reconstructed", } m["cdc-mas-pro"] = { "Proto-Masa", nil, "cdc-mas", "Latn", type = "reconstructed", } m["cdc-pro"] = { "tiếng Tchad nguyên thủy", nil, "cdc", "Latn", "Tiếng Tchad nguyên thủy", "Tchad nguyên thủy", type = "reconstructed", } m["cdd-pro"] = { "Proto-Caddoan", nil, "cdd", "Latn", type = "reconstructed", } m["cel-bry-pro"] = { "tiếng Britton nguyên thủy", 1248800, "cel-bry", "Latn, Polyt", "Tiếng Britton nguyên thủy", "Britton nguyên thủy", sort_key = { Latn = "cel-bry-pro-sortkey", }, -- Polyt translit, display_text, strip_diacritics, sort_key in [[Module:scripts/data]] } m["cel-gal"] = { "Gallaecian", 3094789, "cel", } m["cel-gau"] = { "tiếng Gaul", 29977, "cel", "Latn, Grek, Ital", "Tiếng Gaul", "Gaul", entry_name = {remove_diacritics = c.macron .. c.breve .. c.diaer}, } m["cel-pro"] = { "tiếng Celt nguyên thủy", 653649, "cel", "Latn", "Tiếng Celt nguyên thủy", "Celt nguyên thủy", type = "reconstructed", sort_key = "cel-pro-sortkey", } m["chi-pro"] = { "Proto-Chimakuan", nil, "chi", "Latn", type = "reconstructed", } m["chm-pro"] = { "tiếng Mari nguyên thủy", nil, "chm", "Latn", "Tiếng Mari nguyên thủy", "Mari nguyên thủy", type = "reconstructed", } m["cmc-pro"] = { "tiếng Chăm nguyên thủy", nil, "cmc", "Latn", "Tiếng Chăm nguyên thủy", "Chăm nguyên thủy", type = "reconstructed", } m["cpe-mar"] = { "Maroon Spirit Language", 1093206, "crp", "Latn", ancestors = "en", } m["cpe-spp"] = { "Samoan Plantation Pidgin", 7409948, "crp", "Latn", ancestors = "en", } m["crp-gep"] = { "West Greenlandic Pidgin", 17036301, "crp", "Latn", ancestors = "kl", } m["crp-mpp"] = { "Macau Pidgin Portuguese", nil, "crp", "Hant, Latn", ancestors = "pt", sort_key = {Hant = "Hani-sortkey"}, } m["crp-rsn"] = { "Russenorsk", 505125, "crp", "Cyrl, Latn", ancestors = "nn, ru", } m["crp-slb"] = { "tiếng Anh Solombala", 7558525, "crp", "Cyrl, Latn", ancestors = "en, ru", translit = {Cyrl = "ru-translit"}, } m["crp-tpr"] = { "tiếng Nga bồi Taimyr", 16930506, "crp", "Cyrl", "Tiếng Nga bồi Taimyr", "Nga bồi Taimyr", ancestors = "ru", } m["csu-bba-pro"] = { "tiếng Bongo-Bagirmi nguyên thủy", nil, "csu-bba", "Latn", type = "reconstructed", } m["csu-maa-pro"] = { "Proto-Mangbetu", nil, "csu-maa", "Latn", type = "reconstructed", } m["csu-pro"] = { "tiếng Trung Sudan nguyên thủy", nil, "csu", "Latn", type = "reconstructed", } m["csu-sar-pro"] = { "Proto-Sara", nil, "csu-sar", "Latn", type = "reconstructed", } m["ctp-san"] = { "San Juan Quiahije Chatino", nil, "omq-cha", "Latn", } m["cus-ash"] = { "tiếng Ashraaf", 4805855, "cus-eas", "Latn", "Tiếng Ashraaf", "Ashraaf", } m["cus-hec-pro"] = { "Proto-Highland East Cushitic", nil, "cus-hec", "Latn", type = "reconstructed", } m["cus-som-pro"] = { "tiếng Somali nguyên thủy", nil, "cus-som", "Latn", "Tiếng Somali nguyên thủy", "Somali nguyên thủy", type = "reconstructed", } m["cus-sou-pro"] = { "Proto-South Cushitic", 126081567, "cus-sou", "Latn", type = "reconstructed", } m["cus-pro"] = { "tiếng Cushit nguyên thủy", nil, "cus", "Latn", "Tiếng Cushit nguyên thủy", "Cushit nguyên thủy", type = "reconstructed", } m["dmn-dam"] = { "Dama (Sierra Leone)", 19601574, "dmn", "Latn", } m["dra-mkn"] = { "Middle Kannada", nil, "dra", "Knda", ancestors = "dra-okn", translit = "kn-translit", } m["dra-okn"] = { "tiếng Kannada cổ", 15723156, "dra", "Knda", "Tiếng Kannada cổ", "Kannada cổ", ancestors = "dra-pro", translit = "kn-translit", } m["dra-ote"] = { "tiếng Telugu cổ", 126720868, "dra-tel", "Telu", "Tiếng Telugu cổ", "Telugu cổ", translit = "te-translit", } m["dra-pro"] = { "tiếng Dravida nguyên thủy", 1702853, "dra", "Latn", "Tiếng Dravida nguyên thủy", "Dravida nguyên thủy", type = "reconstructed", } m["dra-sdo-pro"] = { "tiếng Nam Dravida I nguyên thủy", 104847952, -- Wikipedia's "Proto-South Dravidian" is Proto-South Dravidian I in this scheme. "dra-sdo", "Latn", "Tiếng Nam Dravida I nguyên thủy", "Nam Dravida I nguyên thủy", type = "reconstructed", } m["dra-sdt-pro"] = { "tiếng Nam Dravida II nguyên thủy", 128885257, "dra-sdt", "Latn", "Tiếng Nam Dravida II nguyên thủy", "Nam Dravida II nguyên thủy", type = "reconstructed", } m["dra-sou-pro"] = { "tiếng Nam Dravida nguyên thủy", 128886121, "dra-sou", "Latn", "Tiếng Nam Dravida nguyên thủy", "Nam Dravida nguyên thủy", type = "reconstructed", } m["egx-dem"] = { "tiếng Ai Cập bình dân", 36765, "egx", "Latn, Egyd, Polyt", "Tiếng Ai Cập bình dân", "Ai Cập bình dân", display_text = { Polyt = s["Polyt-displaytext"], }, entry_name = { Polyt = s["Polyt-entryname"], }, sort_key = { Latn = { remove_diacritics = "'%-%s", from = {"ꜣ", "j", "e", "ꜥ", "y", "w", "b", "p", "f", "m", "n", "r", "l", "ḥ", "ḫ", "h̭", "ẖ", "h", "š", "s", "q", "k", "g", "ṱ", "ṯ", "t", "ḏ", "%.", "⸗"}, to = {p[1], p[2], p[3], p[4], p[5], p[6], p[7], p[8], p[9], p[10], p[11], p[12], p[13], p[15], p[16], p[16], p[17], p[14], p[19], p[18], p[20], p[21], p[22], p[23], p[24], p[23], p[25], p[26], p[26]} }, Polyt = s["Polyt-sortkey"], }, } m["elu-prk"] = { "Helu", 15080869, "inc-mid", "Brah", ancestors = "inc-pra", translit = "Brah-translit", } m["dmn-pro"] = { "tiếng Mande nguyên thủy", nil, "dmn", "Latn", "Tiếng Mande nguyên thủy", "Mande nguyên thủy", type = "reconstructed", } m["dmn-mdw-pro"] = { "Proto-Western Mande", nil, "dmn-mdw", "Latn", type = "reconstructed", } m["dru-pro"] = { "tiếng Rukai nguyên thủy", nil, "map", "Latn", "Tiếng Rukai nguyên thủy", "Rukai nguyên thủy", type = "reconstructed", } m["ero-tau"] = { "tiếng Stau", nil, "ero", "Latn", "Tiếng Stau", "Stau", } m["esx-esk-pro"] = { "tiếng Eskimo nguyên thủy", 7251842, "esx-esk", "Latn", "Tiếng Eskimo nguyên thủy", "Eskimo nguyên thủy", type = "reconstructed", } m["esx-ink"] = { "Inuktun", 1671647, "esx-inu", "Latn", } m["esx-inq"] = { "Inuinnaqtun", 28070, "esx-inu", "Latn", } m["esx-inu-pro"] = { "tiếng Inuit nguyên thủy", 60785588, "esx-inu", "Latn", "Tiếng Inuit nguyên thủy", "Inuit nguyên thủy", type = "reconstructed", } m["esx-pro"] = { "tiếng Eskimo-Aleut nguyên thủy", 7251843, "esx", "Latn", "Tiếng Eskimo-Aleut nguyên thủy", "Eskimo-Aleut nguyên thủy", type = "reconstructed", } m["esx-tut"] = { "Tunumiisut", 15665389, "esx-inu", "Latn", } m["euq-pro"] = { "tiếng Basque nguyên thủy", 938011, "euq", "Latn", "Tiếng Basque nguyên thủy", "Basque nguyên thủy", type = "reconstructed", } m["gem-bur"] = { "Burgundian", nil, "gme", "Latn", } m["gem-pro"] = { "tiếng German nguyên thủy", 669623, "gem", "Latn", "Tiếng German nguyên thủy", "German nguyên thủy", type = "reconstructed", sort_key = "gem-pro-sortkey", } m["gme-cgo"] = { "Crimean Gothic", 36211, "gme", "Latn", } m["gmq-bot"] = { "Westrobothnian", 7989641, "gmq", "Latn", ancestors = "non", } m["gmq-gut"] = { "tiếng Gotland", 1256646, "gmq", "Latn", "Tiếng Gotland", "Gotland", ancestors = "gmq-ogt", } m["gmq-ogt"] = { "tiếng Gotland cổ", 1133488, "gmq", "Latn, Runr", "Tiếng Gotland cổ", "Gotland cổ", ancestors = "non", } m["gmq-jmk"] = { "Jamtish", nil, "gmq", "Latn", ancestors = "non", } m["gmq-mno"] = { "tiếng Na Uy trung đại", 3417070, "gmq-wes", "Latn", } m["gmq-oda"] = { "tiếng Đan Mạch cổ", nil, "gmq-eas", "Latn, Runr", "Tiếng Đan Mạch cổ", "Đan Mạch cổ", ancestors = "non", strip_diacritics = {remove_diacritics = c.macron}, } m["gmq-osw"] = { "tiếng Thụy Điển cổ", 2417210, "gmq", "Latn", "Tiếng Thụy Điển cổ", "Thụy Điển cổ", ancestors = "non", strip_diacritics = {remove_diacritics = c.macron}, } m["gmq-pro"] = { "tiếng Bắc Âu nguyên thủy", 1671294, "gmq", "Runr", "Tiếng Bắc Âu nguyên thủy", "Bắc Âu nguyên thủy", translit = "Runr-translit", } m["gmq-scy"] = { "Scanian", 768017, "gmq", "Latn", ancestors = "non", } m["gmw-bgh"] = { "Bergish", 329030, "gmw", "Latn", ancestors = "odt", } m["gmw-cfr"] = { "tiếng Franken Trung", nil, "gmw", "Latn", "Tiếng Franken Trung", "Franken Trung", ancestors = "gmh", wikimedia_codes = "ksh", } m["gmw-ecg"] = { "tiếng Đức Đông Trung", 499344, -- subsumes Q699284, Q152965 "gmw", "Latn", "Tiếng Đức Đông Trung", "Đức Đông Trung", ancestors = "gmh", } m["gmw-gts"] = { "Gottscheerish", 533109, "gmw", "Latn", ancestors = "bar", } m["gmw-jdt"] = { "tiếng Hà Lan Jersey", 1687911, "gmw", "Latn", "Tiếng Hà Lan Jersey", "Hà Lan Jersey", ancestors = "nl", } m["gmw-msc"] = { "tiếng Scots trung đại", 3327000, "gmw-ang", "Latn", "Tiếng Scots trung đại", "Scots trung đại", ancestors = "enm-esc", } m["gmw-pro"] = { "tiếng German Tây nguyên thủy", 78079021, "gmw", "Latn", "Tiếng German Tây nguyên thủy", "German Tây nguyên thủy", type = "reconstructed", sort_key = "gmw-pro-sortkey", wikipedia_article = "Chi ngôn ngữ German phía Tây" } m["gmw-rfr"] = { "Rhine Franconian", 707007, "gmw", "Latn", ancestors = "gmh", } m["gmw-stm"] = { "Sathmar Swabian", 2223059, "gmw", "Latn", ancestors = "swg", } m["gmw-tsx"] = { "tiếng Saxon Transylvania", 260942, "gmw", "Latn", "Tiếng Saxon Transylvania", "Saxon Transylvania", ancestors = "gmw-cfr", } m["gmw-vog"] = { "Volga German", 312574, "gmw", "Latn", ancestors = "gmw-rfr", } m["gmw-zps"] = { "Zipser German", 205548, "gmw", "Latn", ancestors = "gmh", } m["gn-cls"] = { "Classical Guaraní", 17478065, "tup-gua", "Latn", ancestors = "gn", } m["grk-cal"] = { "Calabrian Greek", 1146398, "grk", "Latn", ancestors = "grc", } m["grk-ita"] = { "tiếng Hy Lạp Italiot", nil, "grk", "Latn, Grek", "Tiếng Hy Lạp Italiot", "Hy Lạp Italiot", ancestors = "grc", entry_name = {remove_diacritics = c.caron .. c.diaerbelow .. c.brevebelow}, sort_key = s["Grek-sortkey"], } m["grk-mar"] = { "tiếng Hy Lạp Mariupol", 4400023, "grk", "Cyrl, Latn, Grek", ancestors = "grc", translit = "grk-mar-translit", override_translit = true, entry_name = "grk-mar-entryname", sort_key = s["Grek-sortkey"], "Tiếng Hy Lạp Mariupol", "Hy Lạp Mariupol", } m["grk-pro"] = { "tiếng Hellen nguyên thủy", 1231805, "grk", "Latn", "Tiếng Hellen nguyên thủy", "Hellen nguyên thủy", type = "reconstructed", sort_key = { from = {"[áā]", "[éēḗ]", "[íī]", "[óōṓ]", "[úū]", "ď", "ľ", "ň", "ř", "ʰ", "ʷ", c.acute, c.macron}, to = {"a", "e", "i", "o", "u", "d", "l", "n", "r", "¯h", "¯w"} }, } m["hmn-pro"] = { "Proto-Hmong", nil, "hmn", "Latn", type = "reconstructed", } m["hmx-mie-pro"] = { "tiếng Miền nguyên thủy", nil, "hmx-mie", "Latn", "Tiếng Miền nguyên thủy", "Miền nguyên thủy", type = "reconstructed", } m["hmx-pro"] = { "tiếng H'Mông-Miền nguyên thủy", 7251846, "hmx", "Latn", "Tiếng H'Mông-Miền nguyên thủy", "H'Mông-Miền nguyên thủy", type = "reconstructed", } m["hyx-pro"] = { "tiếng Armenia nguyên thủy", 3848498, "hyx", "Latn", "Tiếng Armenia nguyên thủy", "Armenia nguyên thủy", type = "reconstructed", } m["iir-nur-pro"] = { "tiếng Nuristan nguyên thủy", nil, "iir-nur", "Latn", "Tiếng Nuristan nguyên thủy", "Nuristan nguyên thủy", type = "reconstructed", } m["iir-pro"] = { "tiếng Ấn-Iran nguyên thủy", 966439, "iir", "Latn", "Tiếng Ấn-Iran nguyên thủy", "Ấn-Iran nguyên thủy", type = "reconstructed", } m["ijo-pro"] = { "Proto-Ijoid", nil, "ijo", "Latn", type = "reconstructed", } m["inc-apa"] = { "tiếng Apabhramsa", 616419, "inc-mid", "Deva, Shrd, Sidd", "Tiếng Apabhramsa", "Apabhramsa", ancestors = "pra", translit = { Deva = "sa-translit", Shrd = "Shrd-translit", Sidd = "Sidd-translit", }, } m["inc-ash"] = { "tiếng Prakrit Ashoka", nil, "inc-mid", "Brah, Khar", "Tiếng Prakrit Ashoka", "Prakrit Ashoka", ancestors = "sa", translit = { Brah = "Brah-translit", Khar = "Khar-translit", }, } m["inc-gup"] = { "Gurjar Apabhramsa", nil, "inc-mid", "Deva", ancestors = "psu", } m["inc-kam"] = { "tiếng Kamarupi Prakrit", 6356097, "inc-mid", "Brah, Sidd", "Tiếng Kamarupi Prakrit", "Kamarupi Prakrit", ancestors = "inc-mgd", } m["inc-kha"] = { "tiếng Khasa Prakrit", nil, "inc-nor", "Latn", "Tiếng Khasa Prakrit", "Khasa Prakrit", ancestors = "inc-pra", } m["inc-kho"] = { "tiếng Kholosi", 24952008, "inc-snd", "Latn", "Tiếng Kholosi", "Kholosi", ancestors = "inc-vra", } m["inc-mas"] = { "Middle Assamese", nil, "inc-eas", "as-Beng", ancestors = "inc-oas", translit = "inc-mas-translit", } m["inc-mbn"] = { "Middle Bengali", nil, "inc-eas", "Beng", ancestors = "inc-obn", translit = "inc-mbn-translit", } m["inc-mgd"] = { "Magadhi Prakrit", 2652214, "inc-mid", "Brah", ancestors = "inc-pra", translit = "Brah-translit", } m["inc-mgu"] = { "tiếng Gujarat trung đại", 24907429, "inc-wes", "Deva", "Tiếng Gujarat trung đại", "Gujarat trung đại", ancestors = "inc-ogu", } m["inc-mor"] = { "tiếng Oriya trung đại", 128810882, "inc-eas", "Orya", "Tiếng Oriya trung đại", "Oriya trung đại", ancestors = "inc-oor", } m["inc-oas"] = { "tiếng Assam cận đại", nil, "inc-bas", "as-Beng", "Tiếng Assam cận đại", "Assam cận đại", ancestors = "inc-kam,pra-mag", translit = "inc-oas-translit", } m["inc-oaw"] = { "tiếng Awadh cổ", nil, "inc-hie", "Deva, Kthi, ur-Arab", "Tiếng Awadh cổ", "Awadh cổ", strip_diacritics = { from = {"هٔ", "ۂ"}, -- character "ۂ" code U+06C2 to "ه" and "هٔ" (U+0647 + U+0654) to "ه" to = {"ہ", "ہ"}, remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.nunghunna .. c.superalef }, translit = { Deva = "sa-translit", Kthi = "sa-Kthi-translit", ["ur-Arab"] = "inc-ohi-translit", }, } m["inc-obn"] = { "tiếng Bengal cổ", 113559926, "inc-bas", "Beng", "Tiếng Bengal cổ", "Bengal cổ", ancestors = "inc-mgd", } m["inc-ogu"] = { "tiếng Gujarat cổ", 24907427, "inc-wes", "Deva", "Tiếng Gujarat cổ", "Gujarat cổ", translit = "sa-translit", } m["inc-ohi"] = { "tiếng Hindi cổ", 48767781, "inc-hiw", "Deva, ur-Arab", "Tiếng Hindi cổ", "Hindi cổ", ancestors = "pra", strip_diacritics = { from = {"هٔ", "ۂ"}, -- character "ۂ" code U+06C2 to "ه" and "هٔ" (U+0647 + U+0654) to "ه" to = {"ہ", "ہ"}, remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.nunghunna .. c.superalef }, translit = { Deva = "sa-translit", ["ur-Arab"] = "inc-ohi-translit", }, } m["inc-oor"] = { "tiếng Oriya cổ", 128807801, "inc-eas", "Orya", "Tiếng Oriya cổ", "Oriya cổ", } m["inc-opa"] = { "Old Punjabi", nil, "inc-pan", "Guru, pa-Arab", ancestors = "inc-tak", translit = { Guru = "inc-opa-Guru-translit", ["pa-Arab"] = "pa-Aran-translit", }, entry_name = {remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun}, } m["inc-ork"] = { "Old Kamta", nil, "inc-eas", "as-Beng", ancestors = "inc-kam", translit = "as-translit", } m["inc-pra"] = { "tiếng Prakrit", 192170, "inc", "Brah, Deva, Knda", "Tiếng Prakrit", "Prakrit", ancestors = "inc-ash", translit = { Brah = "Brah-translit", Deva = "inc-pra-Deva-translit", Knda = "inc-pra-Knda-translit", }, entry_name = { from = {"ऎ", "ऒ", u(0x0946), u(0x094A), "य़", "ಯ಼", u(0x11071), u(0x11072), u(0x11073), u(0x11074)}, to = {"ए", "ओ", u(0x0947), u(0x094B), "य", "ಯ", "𑀏", "𑀑", u(0x11042), u(0x11044)} } , } m["inc-pro"] = { "tiếng Ấn-Arya nguyên thủy", 23808344, "inc", "Latn", "Tiếng Ấn-Arya nguyên thủy", "Ấn-Arya nguyên thủy", type = "reconstructed", } m["inc-psc"] = { "tiếng Prakrit Paisaci", 2995607, "inc-mid", "Brah", ancestors = "inc-ash", translit = "Brah-translit", "Tiếng Prakrit Paisaci", "Prakrit Paisaci", } m["inc-sap"] = { "Sauraseni Apabhramsa", nil, "inc-mid", "Deva", ancestors = "psu", } m["inc-tak"] = { "Takka Apabhramsa", nil, "inc-mid", "Deva", ancestors = "inc-pra", translit = "sa-translit", } m["inc-vra"] = { "Vracada Apabhramsa", nil, "inc-mid", "Deva", ancestors = "inc-pra", translit = "sa-translit", } m["inc-cen-pro"] = { "Proto-Central Indo-Aryan", nil, "inc-cen", "Latn", type = "reconstructed", ancestors = "psu", } m["ine-ana-pro"] = { "tiếng Tiểu Á nguyên thủy", 7251833, "ine-ana", "Latn", type = "reconstructed", } m["ine-bsl-pro"] = { "tiếng Balt-Slav nguyên thủy", 1703347, "ine-bsl", "Latn", "Tiếng Balt-Slav nguyên thủy", "Balt-Slav nguyên thủy", type = "reconstructed", sort_key = { from = {"[áā]", "[éēḗ]", "[íī]", "[óōṓ]", "[úū]", c.acute, c.macron, "ˀ"}, to = {"a", "e", "i", "o", "u"} }, } m["ine-grp-pro"] = { "tiếng Graeco-Phrygia nguyên thủy", nil, "ine-grp", "Latn", "Tiếng Graeco-Phrygia nguyên thủy", type = "reconstructed", } m["ine-pae"] = { "Paeonian", 2705672, "ine", "polytonic", translit = "grc-translit", entry_name = {remove_diacritics = c.macron .. c.breve}, sort_key = s["Grek-sortkey"], } m["ine-pro"] = { "tiếng Ấn-Âu nguyên thủy", 37178, "ine", "Latn", "Tiếng Ấn-Âu nguyên thủy", "Ấn-Âu nguyên thủy", type = "reconstructed", sort_key = { from = {"[áā]", "[éēḗ]", "[íī]", "[óōṓ]", "[úū]", "ĺ", "ḿ", "ń", "ŕ", "ǵ", "ḱ", "ʰ", "ʷ", "₁", "₂", "₃", c.ringbelow, c.acute, c.macron}, to = {"a", "e", "i", "o", "u", "l", "m", "n", "r", "g'", "k'", "¯h", "¯w", "1", "2", "3"} }, } m["ine-toc-pro"] = { "tiếng Tochari nguyên thủy", 37029, "ine-toc", "Latn", "Tiếng Tochari nguyên thủy", "Tochari nguyên thủy", type = "reconstructed", } m["xme-old"] = { "tiếng Media cổ", 36461, "xme", "Grek, Latn", "Tiếng Media cổ", "Media cổ", } m["xme-mid"] = { "Middle Median", nil, "xme", "Latn", ancestors = "xme-old", } m["xme-ker"] = { "tiếng Kerman", 129850, "xme", "fa-Arab, Latn", "Tiếng Kerman", "Kerman", ancestors = "xme-mid", } m["xme-taf"] = { "Tafreshi", nil, "xme", "fa-Arab, Latn", ancestors = "xme-mid", } m["xme-ttc-pro"] = { "Proto-Tatic", nil, "xme-ttc", "Latn", ancestors = "xme-mid", } m["xme-kls"] = { "Kalasuri", nil, "xme-ttc", ancestors = "xme-ttc-nor", } m["xme-klt"] = { "Kilit", 3612452, "xme-ttc", "Cyrl", -- and fa-Arab? ancestors = "xme-ttc-pro", } m["xme-ott"] = { "Old Tati", 434697, "xme-ttc", "fa-Arab, Latn", ancestors = "xme-ttc-pro", } m["ira-pro"] = { "tiếng Iran nguyên thủy", 4167865, "ira", "Latn", "Tiếng Iran nguyên thủy", "Iran nguyên thủy", type = "reconstructed", } m["ira-mpr-pro"] = { "Proto-Medo-Parthian", nil, "ira-mpr", "Latn", type = "reconstructed", } m["ira-kms-pro"] = { "Proto-Komisenian", nil, "ira-kms", "Latn", type = "reconstructed", } m["ira-zgr-pro"] = { "tiếng Zaza-Goran nguyên thủy", nil, "ira-zgr", "Latn", "Tiếng Zaza-Goran nguyên thủy", "Zaza-Goran nguyên thủy", type = "reconstructed", } m["ira-pat-pro"] = { "tiếng Pathan nguyên thủy", nil, "ira-pat", "Latn", "Tiếng Pathan nguyên thủy", "Pathan nguyên thủy", type = "reconstructed", } m["os-pro"] = { "Proto-Ossetic", nil, "xsc", "Latn", type = "reconstructed", } m["xsc-pro"] = { "tiếng Scythia nguyên thủy", nil, "xsc", "Latn", "Tiếng Scythia nguyên thủy", "Scythia nguyên thủy", type = "reconstructed", } m["xsc-sar-pro"] = { "tiếng Sarmatia nguyên thủy", 116773249, "xsc-sar", "Latn", "Tiếng Sarmatia nguyên thủy", "Sarmatia nguyên thủy", type = "reconstructed", } m["xsc-skw-pro"] = { "tiếng Saka-Wakhi nguyên thủy", nil, "xsc-skw", "Latn", "Tiếng Saka-Wakhi nguyên thủy", "Saka-Wakhi nguyên thủy", type = "reconstructed", ancestors = "xsc-pro", } m["xsc-sak-pro"] = { "Proto-Saka", nil, "xsc-sak", "Latn", type = "reconstructed", ancestors = "xsc-skw-pro", } m["ira-sym-pro"] = { "tiếng Shughnan-Yazghulom-Munji nguyên thủy", nil, "ira-sym", "Latn", "Tiếng Shughnan-Yazghulom-Munji nguyên thủy", "Shughnan-Yazghulom-Munji nguyên thủy", type = "reconstructed", } m["ira-sgi-pro"] = { "Proto-Sanglechi-Ishkashimi", nil, "ira-sgi", "Latn", type = "reconstructed", } m["ira-mny-pro"] = { "Proto-Munji-Yidgha", nil, "ira-mny", "Latn", type = "reconstructed", ancestors = "ira-sym-pro", } m["ira-shy-pro"] = { "tiếng Shughnan-Yazghulom nguyên thủy", nil, "ira-shy", "Latn", "Tiếng Shughnan-Yazghulom nguyên thủy", "Shughnan-Yazghulom nguyên thủy", type = "reconstructed", ancestors = "ira-sym-pro", } m["ira-shr-pro"] = { "tiếng Shughnan-Rushan nguyên thủy", nil, "ira-shy", "Latn", "Tiếng Shughnan-Rushan nguyên thủy", "Shughnan-Rushan nguyên thủy", type = "reconstructed", ancestors = "ira-shy-pro", } m["ira-sgc-pro"] = { "tiếng Sogdia nguyên thủy", nil, "ira-sgc", "Latn", "Tiếng Sogdia nguyên thủy", "Sogdia nguyên thủy", type = "reconstructed", } m["ira-wnj"] = { "Vanji", nil, "ira-shy", "Latn", ancestors = "ira-shy-pro", } m["iro-ere"] = { "Erie", 5388365, "iro-nor", "Latn", } m["iro-min"] = { "Mingo", 128531, "iro-nor", "Latn", } m["iro-nor-pro"] = { "tiếng Bắc Iroquois nguyên thủy", nil, "iro-nor", "Latn", "Tiếng Bắc Iroquois nguyên thủy", "Bắc Iroquois nguyên thủy", type = "reconstructed", } m["iro-pro"] = { "tiếng Iroquois nguyên thủy", 7251852, "iro", "Latn", "Tiếng Iroquois nguyên thủy", "Iroquois nguyên thủy", type = "reconstructed", } m["itc-pro"] = { "tiếng Italic nguyên thủy", 17102720, "itc", "Latn", "Tiếng Italic nguyên thủy", "Italic nguyên thủy", type = "reconstructed", } m["jpx-hcj"] = { "tiếng Hachijō", 5637049, "jpx", "Jpan", "Tiếng Hachijō", "Hachijō", ancestors = "ojp-eas", translit = s["jpx-translit"], display_text = s["jpx-displaytext"], entry_name = s["jpx-entryname"], sort_key = s["jpx-sortkey"], } m["jpx-pro"] = { "tiếng Nhật Bản nguyên thủy", nil, "jpx", "Latn", "Tiếng Nhật Bản nguyên thủy", "Nhật Bản nguyên thủy", type = "reconstructed", } m["jpx-ryu-pro"] = { "tiếng Lưu Cầu nguyên thủy", nil, "jpx-ryu", "Latn", "Tiếng Lưu Cầu nguyên thủy", "Lưu Cầu nguyên thủy", type = "reconstructed", } m["kar-pro"] = { "tiếng Karen nguyên thủy", nil, "kar", "Latn", "Tiếng Karen nguyên thủy", "Karen nguyên thủy", type = "reconstructed", } m["kca-eas"] = { "tiếng Đông Khanty", 30304622, "kca", "Cyrl", "Tiếng Đông Khanty", "Đông Khanty", translit = "kca-translit", override_translit = true, -- TODO temporary until MediaWiki supports Unicode 16 (probably requires a PHP update from their side) sort_key = { Cyrl = { from = {"ᲊ"}, to = {"Ᲊ"} } }, } m["kca-nor"] = { "tiếng Bắc Khanty", 30304527, "kca", "Cyrl", "Tiếng Bắc Khanty", "Bắc Khanty", translit = "kca-translit", override_translit = true, -- TODO temporary until MediaWiki supports Unicode 16 (probably requires a PHP update from their side) sort_key = { Cyrl = { from = {"ᲊ"}, to = {"Ᲊ"} } }, } m["kca-sou"] = { "Southern Khanty", 30304618, "kca", "Cyrl", translit = "kca-translit", override_translit = true, } m["khi-kho-pro"] = { "Proto-Khoe", nil, "khi-kho", "Latn", type = "reconstructed", } m["khi-kun"] = { "ǃKung", 32904, "khi-kxa", "Latn", } m["ko-ear"] = { "Early Modern Korean", 756014, "qfa-kor", "Kore", ancestors = "okm", translit = "okm-translit", entry_name = s["Kore-entryname"], } m["kro-pro"] = { "Proto-Kru", nil, "kro", "Latn", type = "reconstructed", } m["ku-pro"] = { "Proto-Kurdish", nil, "ku", "Latn", type = "reconstructed", } m["map-ata-pro"] = { "Proto-Atayalic", nil, "map-ata", "Latn", type = "reconstructed", } m["map-bms"] = { "tiếng Banyumas", 33219, "map", "Latn", "Tiếng Banyumas", "Banyumas", } m["map-pro"] = { "tiếng Nam Đảo nguyên thủy", 49230, "map", "Latn", "Tiếng Nam Đảo nguyên thủy", "Nam Đảo nguyên thủy", type = "reconstructed", } m["mis-xbi"] = { "tiếng Tiên Ti", 4448647, "qfa-xgx", "Hani, Latn", "Tiếng Tiên Ti", "Tiên Ti", sort_key = {Hani = "Hani-sortkey"}, } m["mjg-mgl"] = { "tiếng Mongghul", 53765528, "mjg", "Latn", -- also Mong, Cyrl ? "Tiếng Mongghul", "Mongghul", } m["mjg-mgr"] = { "tiếng Mangghul", 56285392, "mjg", "Latn", -- also Mong, Cyrl ? "Tiếng Mangghul", "Mangghul", } m["mkh-asl-pro"] = { "tiếng Asli nguyên thủy", 55630680, "mkh-asl", "Latn", "Tiếng Asli nguyên thủy", "Asli nguyên thủy", type = "reconstructed", } m["mkh-ban-pro"] = { "tiếng Bahnar nguyên thủy", nil, "mkh-ban", "Latn", "Tiếng Bahnar nguyên thủy", "Bahnar nguyên thủy", type = "reconstructed", } m["mkh-bhn"] = { "tiếng Bhnong", nil, "mkh-nbn", "Latn", "Tiếng Bhnong", "Bhnong", } m["mkh-kat-pro"] = { "tiếng Cơ Tu nguyên thủy", nil, "mkh-kat", "Latn", "Tiếng Cơ Tu nguyên thủy", "Cơ Tu nguyên thủy", type = "reconstructed", } m["mkh-khm-pro"] = { "tiếng Khơ Mú nguyên thủy", nil, "mkh-khm", "Latn", "Tiếng Khơ Mú nguyên thủy", "Khơ Mú nguyên thủy", type = "reconstructed", } m["mkh-kmr-pro"] = { "tiếng Khmer nguyên thủy", 55630684, "mkh-kmr", "Latn", "Tiếng Khmer nguyên thủy", "Khmer nguyên thủy", type = "reconstructed", } m["mkh-mmn"] = { "tiếng Môn trung đại", 121337926, "mkh-mnc", "Latn, Mymr", --and also Pallava "Tiếng Môn trung đại", "Môn trung đại", ancestors = "omx", } m["mkh-mnc-pro"] = { "tiếng Môn nguyên thủy", 116773231, "mkh-mnc", "Latn", "Tiếng Môn nguyên thủy", "Môn nguyên thủy", type = "reconstructed", } m["mkh-mvi"] = { "tiếng Việt trung cổ", 9199, "mkh-vie", "Hani, Latn", "Tiếng Việt trung cổ", "Việt trung cổ", sort_key = {Hani = "Hani-sortkey"}, } m["mkh-pal-pro"] = { "tiếng Palaung nguyên thủy", nil, "mkh-pal", "Latn", "Tiếng Palaung nguyên thủy", "Palaung nguyên thủy", type = "reconstructed", } m["mkh-pea-pro"] = { "tiếng Pear nguyên thủy", nil, "mkh-pea", "Latn", "Tiếng Pear nguyên thủy", "Pear nguyên thủy", type = "reconstructed", } m["mkh-pkn-pro"] = { "tiếng Pakan nguyên thủy", nil, "mkh-pkn", "Latn", "Tiếng Pakan nguyên thủy", "Pakan nguyên thủy", type = "reconstructed", } m["mkh-pro"] = { --This will be merged into 2015 aav-pro. "tiếng Môn-Khmer nguyên thủy", 7251859, "mkh", "Latn", "Tiếng Môn-Khmer nguyên thủy", "Môn-Khmer nguyên thủy", type = "reconstructed", } m["mkh-vie-pro"] = { "tiếng Việt-Mường nguyên thủy", nil, "mkh-vie", "Latn", "Tiếng Việt-Mường nguyên thủy", "Việt-Mường nguyên thủy", type = "reconstructed", } m["mns-cen"] = { "tiếng Trung Mansi", 128810384, "mns", "Cyrl", "Tiếng Trung Mansi", "Trung Mansi", translit = "mns-translit", override_translit = true, } m["mns-nor"] = { "tiếng Bắc Mansi", 30304537, "mns", "Cyrl", "Tiếng Bắc Mansi", "Bắc Mansi", translit = "mns-translit", override_translit = true, } m["mns-pro"] = { "tiếng Mansi nguyên thủy", 128883093, "mns", "Latn", "Tiếng Mansi nguyên thủy", "Mansi nguyên thủy", type = "reconstructed", } m["mns-sou"] = { "tiếng Nam Mansi", 30304629, "mns", "Cyrl", "Tiếng Nam Mansi", "Nam Mansi", translit = "mns-translit", override_translit = true, } m["mnw-tha"] = { "tiếng Môn Thái", nil, "mkh-mnc", "Mymr, Thai", ancestors = "mkh-mmn", sort_key = { from = {"[%p]", "ျ", "ြ", "ွ", "ှ", "ၞ", "ၟ", "ၠ", "ၚ", "ဿ", "[็-๎]", "([เแโใไ])([ก-ฮ])ฺ?"}, to = {"", "္ယ", "္ရ", "္ဝ", "္ဟ", "္န", "္မ", "္လ", "င", "သ္သ", "", "%2%1"} }, "Tiếng Môn Thái", "Môn Thái" } m["mun-pro"] = { "tiếng Munda nguyên thủy", 105102373, "mun", "Latn", "Tiếng Munda nguyên thủy", "Munda nguyên thủy", type = "reconstructed", } m["myn-chl"] = { -- the stage after ''emy'' "Ch'olti'", 873995, "myn", "Latn", } m["myn-pro"] = { "tiếng Maya nguyên thủy", 3321532, "myn", "Latn", "Tiếng Maya nguyên thủy", "Maya nguyên thủy", type = "reconstructed", } m["nai-ala"] = { "Alazapa", nil, nil, "Latn", } m["nai-bay"] = { "Bayogoula", 1563704, nil, "Latn", } m["nai-bvy"] = { "Buena Vista Yokuts", 4985474, "nai-yok", "Latn", } m["nai-cal"] = { "Calusa", 51782, nil, "Latn", } m["nai-chi"] = { "Chiquimulilla", 25339627, "nai-xin", "Latn", } m["nai-chu-pro"] = { "Proto-Chumash", nil, "nai-chu", "Latn", type = "reconstructed", } m["nai-cig"] = { "Ciguayo", 20741700, nil, "Latn", } m["nai-ckn-pro"] = { "Proto-Chinookan", nil, "nai-ckn", "Latn", type = "reconstructed", } m["nai-dly"] = { "Delta Yokuts", nil, "nai-yok", "Latn", } m["nai-gsy"] = { "Gashowu", nil, "nai-yok", "Latn", } m["nai-guz"] = { "Guazacapán", 19572028, "nai-xin", "Latn", } m["nai-hit"] = { "Hitchiti", 1542882, "nai-mus", "Latn", } m["nai-ipa"] = { "Ipai", 3027474, "nai-yuc", "Latn", } m["nai-jtp"] = { "Jutiapa", nil, "nai-xin", "Latn", } m["nai-jum"] = { "tiếng Jumaytepeque", 25339626, "nai-xin", "Latn", "Tiếng Jumaytepeque", "Jumaytepeque", } m["nai-kat"] = { "Kathlamet", 6376639, "nai-ckn", "Latn", } m["nai-klp-pro"] = { "Proto-Kalapuyan", nil, "nai-klp", type = "reconstructed", } m["nai-knm"] = { "Konomihu", 3198734, "nai-shs", "Latn", } m["nai-kry"] = { "Kings River Yokuts", 6413014, "nai-yok", "Latn", } m["nai-kum"] = { "tiếng Kumeyaay", 4910139, "nai-yuc", "Latn", "Tiếng Kumeyaay", "Kumeyaay", } m["nai-mac"] = { "Macoris", 21070851, nil, "Latn", } m["nai-mdu-pro"] = { "Proto-Maidun", nil, "nai-mdu", "Latn", type = "reconstructed", } m["nai-miz-pro"] = { "Proto-Mixe-Zoque", nil, "nai-miz", "Latn", type = "reconstructed", } m["nai-mus-pro"] = { "tiếng Muskogee nguyên thủy", 116775368, "nai-mus", "Latn", "Tiếng Muskogee nguyên thủy", "Muskogee nguyên thủy", type = "reconstructed", } m["nai-nao"] = { "Naolan", 6964594, nil, "Latn", } m["nai-nrs"] = { "New River Shasta", 7011254, "nai-shs", "Latn", } m["nai-nvy"] = { "Northern Valley Yokuts", nil, "nai-yok", "Latn", } m["nai-okw"] = { "Okwanuchu", 3350126, "nai-shs", "Latn", } m["nai-per"] = { "Pericú", 3375369, nil, "Latn", } m["nai-pic"] = { "Picuris", 7191257, "nai-kta", "Latn", } m["nai-plp-pro"] = { "Proto-Plateau Penutian", nil, "nai-plp", "Latn", type = "reconstructed", } m["nai-ply"] = { "Palewyami", 2387391, "nai-yok", "Latn", } m["nai-pom-pro"] = { "Proto-Pomo", nil, "nai-pom", "Latn", type = "reconstructed", } m["nai-qng"] = { "Quinigua", 36360, nil, "Latn", } m["nai-sca-pro"] = { -- NB 'sio-pro' "Proto-Siouan" which is Proto-Western Siouan "Proto-Siouan-Catawban", nil, "nai-sca", "Latn", type = "reconstructed", } m["nai-sin"] = { "Sinacantán", 24190249, "nai-xin", "Latn", } m["nai-sln"] = { "Salvadoran Lenca", 3229434, "nai-len", "Latn", } m["nai-spt"] = { "Sahaptin", 3833015, "nai-shp", "Latn", } m["nai-svy"] = { "Southern Valley Yokuts", nil, "nai-yok", "Latn", } m["nai-tap"] = { "Tapachultec", 7684401, "nai-miz", "Latn", } m["nai-taw"] = { "Tawasa", 7689233, nil, "Latn", } m["nai-teq"] = { "Tequistlatec", 2964454, "nai-tqn", "Latn", } m["nai-tip"] = { "tiếng Tipai", 3027471, "nai-yuc", "Latn", "Tiếng Tipai", "Tipai", } m["nai-tky"] = { "Tule-Kaweah Yokuts", 7851988, "nai-yok", "Latn", } m["nai-tot-pro"] = { "Proto-Totozoquean", nil, "nai-tot", "Latn", type = "reconstructed", } m["nai-tsi-pro"] = { "Proto-Tsimshianic", nil, "nai-tsi", "Latn", type = "reconstructed", } m["nai-utn-pro"] = { "Proto-Utian", nil, "nai-utn", "Latn", type = "reconstructed", } m["nai-wai"] = { "Waikuri", 3118702, nil, "Latn", } m["nai-yup"] = { "Yupiltepeque", 25339628, "nai-xin", "Latn", } m["nan-hbl"] = { "tiếng Mân Tuyền Chương", 1624231, "zhx-nan", "Hants, Latn, Bopo, Kana", "Tiếng Mân Tuyền Chương", "Mân Tuyền Chương", wikimedia_codes = "zh-min-nan", generate_forms = "zh-generateforms", sort_key = { Hani = "Hani-sortkey", Kana = "Kana-sortkey" }, } m["nan-tws"] = { "tiếng Triều Châu", 36759, "zhx-nan", "Hants", "Tiếng Triều Châu", "Triều Châu", generate_forms = "zh-generateforms", translit = "zh-translit", sort_key = "Hani-sortkey", } m["nds-de"] = { "tiếng Hạ Đức tại Đức", 25433, "gmw", "Latn", "Tiếng Hạ Đức tại Đức", "Hạ Đức tại Đức", ancestors = "nds", wikimedia_codes = "nds", } m["nds-nl"] = { "tiếng Hạ Saxon Hà Lan", 516137, "gmw", "Latn", "Tiếng Hạ Saxon Hà Lan", "Hạ Saxon Hà Lan", ancestors = "nds", } m["ngf-pro"] = { "tiếng Liên New Guinea nguyên thủy", 85794785, "ngf", "Latn", type = "reconstructed", } m["nic-bco-pro"] = { "tiếng Benue-Congo nguyên thủy", nil, "nic-bco", "Latn", "Tiếng Benue-Congo nguyên thủy", "Benue-Congo nguyên thủy", type = "reconstructed", } m["nic-bod-pro"] = { "tiếng Bantoid nguyên thủy", nil, "nic-bod", "Latn", "Tiếng Bantoid nguyên thủy", "Bantoid nguyên thủy", type = "reconstructed", } m["nic-eov-pro"] = { "Proto-Eastern Oti-Volta", nil, "nic-eov", "Latn", type = "reconstructed", } m["nic-gns-pro"] = { "Proto-Gurunsi", nil, "nic-gns", "Latn", type = "reconstructed", } m["nic-grf-pro"] = { "Proto-Grassfields", nil, "nic-grf", "Latn", type = "reconstructed", } m["nic-gur-pro"] = { "Proto-Gur", nil, "nic-gur", "Latn", type = "reconstructed", } m["nic-jkn-pro"] = { "Proto-Jukunoid", nil, "nic-jkn", "Latn", type = "reconstructed", } m["nic-lcr-pro"] = { "Proto-Lower Cross River", nil, "nic-lcr", "Latn", type = "reconstructed", } m["nic-ogo-pro"] = { "Proto-Ogoni", nil, "nic-ogo", "Latn", type = "reconstructed", } m["nic-ovo-pro"] = { "Proto-Oti-Volta", nil, "nic-ovo", "Latn", type = "reconstructed", } m["nic-plt-pro"] = { "tiếng Plateau nguyên thủy", nil, "nic-plt", "Latn", "Tiếng Plateau nguyên thủy", "Plateau nguyên thủy", type = "reconstructed", } m["nic-pro"] = { "tiếng Niger-Congo nguyên thủy", nil, "nic", "Latn", "Tiếng Niger-Congo nguyên thủy", "Niger-Congo nguyên thủy", type = "reconstructed", } m["nic-ubg-pro"] = { "tiếng Ubangi nguyên thủy", nil, "nic-ubg", "Latn", "Tiếng Ubangi nguyên thủy", type = "reconstructed", } m["nic-ucr-pro"] = { "Proto-Upper Cross River", nil, "nic-ucr", "Latn", type = "reconstructed", } m["nic-vco-pro"] = { "tiếng Volta-Congo nguyên thủy", nil, "nic-vco", "Latn", "Tiếng Volta-Congo nguyên thủy", "Volta-Congo nguyên thủy", type = "reconstructed", } m["nub-har"] = { "Haraza", 19572059, "nub", "Arab, Latn", } m["nub-pro"] = { "Proto-Nubian", nil, "nub", "Latn", type = "reconstructed", } m["omq-cha-pro"] = { "Proto-Chatino", nil, "omq-cha", "Latn", type = "reconstructed", } m["omq-maz-pro"] = { "Proto-Mazatec", nil, "omq-maz", "Latn", type = "reconstructed", } m["omq-mix-pro"] = { "tiếng Mixtec nguyên thủy", 21573423, "omq-mix", "Latn", "Tiếng Mixtec nguyên thủy", "Mixtec nguyên thủy", type = "reconstructed", } m["omq-mxt-pro"] = { "Proto-Mixtec", nil, "omq-mxt", "Latn", type = "reconstructed", } m["omq-otp-pro"] = { "Proto-Oto-Pamean", nil, "omq-otp", "Latn", type = "reconstructed", ancestors = "omq-pro", } m["omq-pro"] = { "Proto-Oto-Manguean", 33669, "omq", "Latn", type = "reconstructed", } m["omq-tel"] = { "tiếng Mixtec Teposcolula", nil, "omq-mxt", "Latn", } m["omq-teo"] = { "Teojomulco Chatino", 25340451, "omq-cha", "Latn", } m["omq-tri-pro"] = { "tiếng Triqui nguyên thủy", 116773817, "omq-tri", "Latn", "Tiếng Triqui nguyên thủy", "Triqui nguyên thủy", type = "reconstructed", } m["omq-zap-pro"] = { "Proto-Zapotecan", nil, "omq-zap", "Latn", type = "reconstructed", } m["omq-zpc-pro"] = { "tiếng Zapotec nguyên thủy", 116773296, "omq-zpc", "Latn", "Tiếng Zapotec nguyên thủy", "Zapotec nguyên thủy", type = "reconstructed", } m["omv-aro-pro"] = { "tiếng Aari nguyên thủy", nil, "omv-aro", "Latn", "Tiếng Aari nguyên thủy", "Aari nguyên thủy", type = "reconstructed", } m["omv-diz-pro"] = { "tiếng Dizi nguyên thủy", nil, "omv-diz", "Latn", "Tiếng Dizi nguyên thủy", "Dizi nguyên thủy", type = "reconstructed", } m["omv-pro"] = { "tiếng Omo nguyên thủy", nil, "omv", "Latn", "Tiếng Omo nguyên thủy", "Omo nguyên thủy", type = "reconstructed", } m["oto-otm-pro"] = { "Proto-Otomi", nil, "oto-otm", "Latn", type = "reconstructed", ancestors = "oto-pro", } m["oto-pro"] = { "Proto-Otomian", nil, "oto", "Latn", type = "reconstructed", ancestors = "omq-otp-pro", } m["paa-kom"] = { "Kómnzo", 18344310, "paa-yam", "Latn", } m["paa-kwn"] = { "Kuwani", 6449056, "paa", "Latn", } m["paa-nha-pro"] = { "Proto-North Halmahera", nil, "paa-nha", "Latn", type = "reconstructed" } m["paa-nun"] = { "Nungon", nil, "paa", "Latn", } m["phi-din"] = { "Dinapigue Agta", 16945774, "phi", "Latn", } m["phi-kal-pro"] = { "Proto-Kalamian", nil, "phi-kal", "Latn", type = "reconstructed", } m["phi-nag"] = { "Nagtipunan Agta", 16966111, "phi", "Latn", } m["phi-pro"] = { "tiếng Philippines nguyên thủy", 18204898, "phi", "Latn", "Tiếng Philippines nguyên thủy", "Philippines nguyên thủy", type = "reconstructed", } m["poz-abi"] = { "tiếng Abai", 19570729, "poz-san", "Latn", "Tiếng Abai", "Abai", } m["poz-bal"] = { "Baliledo", 4850912, "poz", "Latn", } m["poz-btk-pro"] = { "Proto-Bungku-Tolaki", nil, "poz-btk", "Latn", type = "reconstructed", } m["poz-cet-pro"] = { "tiếng Mã Lai-Đa Đảo Trung Đông nguyên thủy", 2269883, "poz-cet", "Latn", "Tiếng Mã Lai-Đa Đảo Trung Đông nguyên thủy", "Mã Lai-Đa Đảo Trung Đông nguyên thủy", type = "reconstructed", } m["poz-hce-pro"] = { "Proto-Halmahera-Cenderawasih", nil, "poz-hce", "Latn", type = "reconstructed", } m["poz-lgx-pro"] = { "Proto-Lampungic", nil, "poz-lgx", "Latn", type = "reconstructed", } m["poz-mcm-pro"] = { "tiếng Mã Lai-Chăm nguyên thủy", nil, "poz-mcm", "Latn", "Tiếng Mã Lai-Chăm nguyên thủy", "Mã Lai-Chăm nguyên thủy", type = "reconstructed", } m["poz-mly-pro"] = { "tiếng Mã Lai nguyên thủy", nil, "poz-mly", "Latn", "Tiếng Mã Lai nguyên thủy", "Mã Lai nguyên thủy", type = "reconstructed", } m["poz-msa-pro"] = { "tiếng Mã Lai-Sumbawa nguyên thủy", nil, "poz-msa", "Latn", "Tiếng Mã Lai-Sumbawa nguyên thủy", "Mã Lai-Sumbawa nguyên thủy", type = "reconstructed", } m["poz-oce-pro"] = { "tiếng Châu Đại Dương nguyên thủy", 141741, "poz-oce", "Latn", "Tiếng Châu Đại Dương nguyên thủy", "Châu Đại Dương nguyên thủy", type = "reconstructed", } m["poz-pep-pro"] = { "tiếng Đa Đảo Đông nguyên thủy", nil, "poz-pep", "Latn", "Tiếng Đa Đảo Đông nguyên thủy", "Đa Đảo Đông nguyên thủy", type = "reconstructed", } m["poz-pnp-pro"] = { "tiếng Đa Đảo hạt nhân nguyên thủy", nil, "poz-pnp", "Latn", "Tiếng Đa Đảo hạt nhân nguyên thủy", "Đa Đảo hạt nhân nguyên thủy", type = "reconstructed", } m["poz-pol-pro"] = { "tiếng Đa Đảo nguyên thủy", 1658709, "poz-pol", "Latn", "Tiếng Đa Đảo nguyên thủy", "Đa Đảo nguyên thủy", type = "reconstructed", } m["poz-pro"] = { "tiếng Mã Lai-Đa Đảo nguyên thủy", 3832960, "poz", "Latn", "Tiếng Mã Lai-Đa Đảo nguyên thủy", "Mã Lai-Đa Đảo nguyên thủy", type = "reconstructed", } m["poz-sml"] = { "tiếng Mã Lai Sarawak", 4251702, "poz-mly", "Latn, ms-Arab", "Tiếng Mã Lai Sarawak", "Mã Lai Sarawak", } m["poz-ssw-pro"] = { "Proto-South Sulawesi", nil, "poz-ssw", "Latn", type = "reconstructed", } m["poz-sus-pro"] = { "Proto-Sunda-Sulawesi", nil, "poz-sus", "Latn", type = "reconstructed", } m["poz-swa-pro"] = { "Proto-North Sarawak", nil, "poz-swa", "Latn", type = "reconstructed", } m["pqe-pro"] = { "tiếng Mã Lai-Đa Đảo Đông nguyên thủy", 2269883, "pqe", "Latn", "Tiếng Mã Lai-Đa Đảo Đông nguyên thủy", "Mã Lai-Đa Đảo Đông nguyên thủy", type = "reconstructed", } m["pra-niy"] = { "tiếng Prakrit Niya", nil, "inc-mid", "Khar", ancestors = "inc-ash", translit = "Khar-translit", "Tiếng Prakrit Niya", "Prakrit Niya", } m["qfa-adm-pro"] = { "Proto-Great Andamanese", nil, "qfa-adm", "Latn", type = "reconstructed", } m["qfa-bet-pro"] = { "tiếng Bối-Thái nguyên thủy", 116773193, "qfa-bet", "Latn", "Tiếng Bối-Thái nguyên thủy", "Bối-Thái nguyên thủy", type = "reconstructed", } m["qfa-cka-pro"] = { "tiếng Chukotka-Kamchatka nguyên thủy", 7251837, "qfa-cka", "Latn", type = "reconstructed", } m["qfa-hur-pro"] = { "Proto-Hurro-Urartian", nil, "qfa-hur", "Latn", type = "reconstructed", } m["qfa-kad-pro"] = { "Proto-Kadu", nil, "qfa-kad", "Latn", type = "reconstructed", } m["qfa-kms-pro"] = { "tiếng Động-Thủy nguyên thủy", nil, "qfa-kms", "Latn", "Tiếng Động-Thủy nguyên thủy", "Động-Thủy nguyên thủy", type = "reconstructed", } m["qfa-kor-pro"] = { "tiếng Triều Tiên nguyên thủy", 467883, "qfa-kor", "Latn", "Tiếng Triều Tiên nguyên thủy", "Triều Tiên nguyên thủy", type = "reconstructed", } m["qfa-kra-pro"] = { "tiếng Kra nguyên thủy", 7251854, "qfa-kra", "Latn", "Tiếng Kra nguyên thủy", "Kra nguyên thủy", type = "reconstructed", } m["qfa-lic-pro"] = { "tiếng Hlai nguyên thủy", 7251845, "qfa-lic", "Latn", "Tiếng Hlai nguyên thủy", "Hlai nguyên thủy", type = "reconstructed", } m["qfa-onb-pro"] = { "tiếng Ông Bối nguyên thủy", nil, "qfa-onb", "Latn", "Tiếng Ông Bối nguyên thủy", "Ông Bối nguyên thủy", type = "reconstructed", } m["qfa-ong-pro"] = { "tiếng Önge nguyên thủy", nil, "qfa-ong", "Latn", "Tiếng Önge nguyên thủy", "Önge nguyên thủy", type = "reconstructed", } m["qfa-tak-pro"] = { "tiếng Kra-Dai nguyên thủy", nil, "qfa-tak", "Latn", "Tiếng Kra-Dai nguyên thủy", "Kra-Dai nguyên thủy", type = "reconstructed", } m["qfa-xgx-rou"] = { "tiếng Nhu Nhiên", 48816637, "qfa-xgx", "Hani, Latn", "Tiếng Nhu Nhiên", "Nhu Nhiên", sort_key = {Hani = "Hani-sortkey"}, } m["qfa-xgx-tuh"] = { "tiếng Thổ Dục Hồn", 48816625, "qfa-xgx", "Hani, Latn", "Tiếng Thổ Dục Hồn", "Thổ Dục Hồn", sort_key = {Hani = "Hani-sortkey"}, } m["qfa-xgx-tuo"] = { "tiếng Thác Bạt", 48816629, "qfa-xgx", "Hani, Latn", "Tiếng Thác Bạt", "Thác Bạt", sort_key = {Hani = "Hani-sortkey"}, } m["qfa-xgx-xbi"] = { "tiếng Tiên Ti", 4448647, "qfa-xgx", "Hani, Latn", "Tiếng Tiên Ti", "Tiên Ti", sort_key = {Hani = "Hani-sortkey"}, } m["qfa-yen-pro"] = { "tiếng Enisei nguyên thủy", 27639, "qfa-yen", "Latn", "Tiếng Enisei nguyên thủy", "Enisei nguyên thủy", type = "reconstructed", } m["qfa-yuk-pro"] = { "tiếng Yukaghir nguyên thủy", nil, "qfa-yuk", "Latn", "Tiếng Yukaghir nguyên thủy", "Yukaghir nguyên thủy", type = "reconstructed", } m["qwe-kch"] = { "Kichwa", 1740805, "qwe", "Latn", ancestors = "qu", } m["roa-ang"] = { "Angevin", 56782, "roa-oil", "Latn", sort_key = s["roa-oil-sortkey"], } m["roa-bbn"] = { "Bourbonnais-Berrichon", nil, "roa-oil", "Latn", sort_key = s["roa-oil-sortkey"], } m["roa-brg"] = { "tiếng Bourguignon", 508332, "roa-oil", "Latn", "Tiếng Bourguignon", "Bourguignon", sort_key = s["roa-oil-sortkey"], } m["roa-cha"] = { "Champenois", 430018, "roa-oil", "Latn", sort_key = s["roa-oil-sortkey"], } m["roa-fcm"] = { "tiếng Franche-Comté", 510561, "roa-oil", "Latn", "Tiếng Franche-Comté", "Franche-Comté", sort_key = s["roa-oil-sortkey"], } m["roa-gal"] = { "tiếng Gallo", 37300, "roa-oil", "Latn", "Tiếng Gallo", "Gallo", sort_key = s["roa-oil-sortkey"], } m["roa-leo"] = { "tiếng León", 34108, "roa-ibe", "Latn", "Tiếng León", "León", ancestors = "roa-ole", } m["roa-lor"] = { "tiếng Lorrain", 671198, "roa-oil", "Latn", "Tiếng Lorrain", "Lorrain", sort_key = s["roa-oil-sortkey"], } m["roa-oan"] = { "Navarro-Aragonese", 2736184, "roa-ibe", "Latn", } m["roa-oca"] = { "tiếng Catalan cổ", 15478520, "roa-ocr", "Latn", "Tiếng Catalan cổ", "Catalan cổ", sort_key = { from = {"à", "[èé]", "[íï]", "[òó]", "[úü]", "ç", "·"}, to = {"a", "e", "i", "o", "u", "c"} }, } m["roa-ole"] = { "tiếng León cổ", 125977465, "roa-asl", "Latn", "Tiếng León cổ", "León cổ", } m["roa-opt"] = { "tiếng Galicia-Bồ Đào Nha", 1072111, "roa-ibe", "Latn", "Tiếng Galicia-Bồ Đào Nha", "Galicia-Bồ Đào Nha", } m["roa-orl"] = { "Orléanais", nil, "roa-oil", "Latn", sort_key = s["roa-oil-sortkey"], } m["roa-poi"] = { "Poitevin-Saintongeais", 514123, "roa-oil", "Latn", sort_key = s["roa-oil-sortkey"], } m["roa-tar"] = { "tiếng Tarantino", 695526, "roa-itd", "Latn", "Tiếng Tarantino", "Tarantino", ancestors = "nap", wikimedia_codes = "roa-tara", } m["roa-tou"] = { "Tourangeau", nil, "roa-oil", "Latn", sort_key = s["roa-oil-sortkey"], } m["sai-ajg"] = { "Ajagua", nil, nil, "Latn", } m["sai-all"] = { "tiếng Alyentiyak", 19570789, "sai-hrp", "Latn", "Tiếng Alyentiyak", "Alyentiyak", } m["sai-and"] = { -- not to be confused with 'cbc' or 'ano' "Andoquero", 16828359, "sai-wit", "Latn", } m["sai-ayo"] = { "Ayomán", 16937754, "sai-jir", "Latn", } m["sai-bae"] = { "Baenan", 3401998, nil, "Latn", } m["sai-bag"] = { "tiếng Bagua", 5390321, nil, "Latn", "Tiếng Bagua", "Bagua", } m["sai-bet"] = { "Betoi", 926551, "qfa-iso", "Latn", } m["sai-bor-pro"] = { "Proto-Boran", nil, "sai-bor", "Latn", } m["sai-cac"] = { "Cacán", 945482, nil, "Latn", } m["sai-caq"] = { "Caranqui", 2937753, "sai-bar", "Latn", } m["sai-car-pro"] = { "tiếng Carib nguyên thủy", nil, "sai-car", "Latn", "Tiếng Carib nguyên thủy", "Carib nguyên thủy", type = "reconstructed", } m["sai-cat"] = { "Catacao", 5051136, "sai-ctc", "Latn", } m["sai-cer-pro"] = { "tiếng Cerrado nguyên thủy", nil, "sai-cer", "Latn", "Tiếng Cerrado nguyên thủy", "Cerrado nguyên thủy", type = "reconstructed", } m["sai-chi"] = { "Chirino", 5390321, nil, "Latn", } m["sai-chn"] = { "Chaná", 5072718, "sai-crn", "Latn", } m["sai-chp"] = { "Chapacura", 5072884, "sai-cpc", "Latn", } m["sai-chr"] = { "Charrua", 5086680, "sai-crn", "Latn", } m["sai-chu"] = { "Churuya", 5118339, "sai-guh", "Latn", } m["sai-cje-pro"] = { "Proto-Central Jê", nil, "sai-cje", "Latn", type = "reconstructed", } m["sai-cmg"] = { "Comechingon", 6644203, nil, "Latn", } m["sai-cno"] = { "Chono", 5104704, nil, "Latn", } m["sai-cnr"] = { "Cañari", 5055572, nil, "Latn", } m["sai-coe"] = { "Coeruna", 6425639, "sai-wit", "Latn", } m["sai-col"] = { "Colán", 5141893, "sai-ctc", "Latn", } m["sai-cop"] = { "Copallén", 5390321, nil, "Latn", } m["sai-crd"] = { "Coroado Puri", 24191321, "sai-mje", "Latn", } m["sai-ctq"] = { "Catuquinaru", 16858455, nil, "Latn", } m["sai-cul"] = { "tiếng Culli", 2879660, "qfa-unc", "Latn", } m["sai-cva"] = { "Cueva", nil, nil, "Latn", } m["sai-esm"] = { "Esmeralda", 3058083, nil, "Latn", } m["sai-ewa"] = { "Ewarhuyana", 16898104, nil, "Latn", } m["sai-gam"] = { "Gamela", 5403661, nil, "Latn", } m["sai-gay"] = { "Gayón", 5528902, "sai-jir", "Latn", } m["sai-gmo"] = { "Guamo", 5613495, nil, "Latn", } m["sai-gue"] = { "Güenoa", 5626799, "sai-crn", "Latn", } m["sai-hau"] = { "tiếng Haush", 3128376, "sai-cho", "Latn", "Tiếng Haush", "Haush", } m["sai-hoc-pro"] = { "Proto-Huitoto-Ocaina", nil, "sai-hoc", "Latn", type = "reconstructed", } m["sai-jee-pro"] = { "tiếng Jê nguyên thủy", nil, "sai-jee", "Latn", "Tiếng Jê nguyên thủy", "Jê nguyên thủy", type = "reconstructed", } m["sai-jko"] = { "Jeikó", 6176527, "sai-mje", "Latn", } m["sai-jrj"] = { "Jirajara", 6202966, "sai-jir", "Latn", } m["sai-kat"] = { -- contrast xoo, kzw, sai-xoc "Katembri", 6375925, nil, "Latn", } m["sai-mal"] = { "Malalí", 6741212, nil, "Latn", } m["sai-mar"] = { "Maratino", 6755055, nil, "Latn", } m["sai-mat"] = { "Matanawi", 6786047, nil, "Latn", } m["sai-mcn"] = { "Mocana", 3402048, nil, "Latn", } m["sai-men"] = { "Menien", 16890110, "sai-mje", "Latn", } m["sai-mil"] = { "Millcayac", 19573012, "sai-hrp", "Latn", } m["sai-mlb"] = { "Malibu", 3402048, nil, "Latn", } m["sai-msk"] = { "Masakará", 6782426, "sai-mje", "Latn", } m["sai-muc"] = { "Mucuchí", nil, nil, "Latn", } m["sai-mue"] = { "Muellama", 16886936, "sai-bar", "Latn", } m["sai-muz"] = { "Muzo", 6644203, nil, "Latn", } m["sai-mys"] = { "Maynas", 16919393, nil, "Latn", } m["sai-nat"] = { "Natú", 9006749, nil, "Latn", } m["sai-nje-pro"] = { "tiếng Jê Bắc nguyên thủy", nil, "sai-nje", "Latn", "Tiếng Jê Bắc nguyên thủy", "Jê Bắc nguyên thủy", type = "reconstructed", } m["sai-opo"] = { "Opón", 7099152, "sai-car", "Latn", } m["sai-oto"] = { "Otomaco", 16879234, "sai-otm", "Latn", } m["sai-pal"] = { "Palta", 3042978, nil, "Latn", } m["sai-pam"] = { "Pamigua", 5908689, "sai-otm", "Latn", } m["sai-par"] = { "Paratió", 16890038, nil, "Latn", } m["sai-pnz"] = { "Panzaleo", 3123275, nil, "Latn", } m["sai-prh"] = { "Puruhá", 3410994, nil, "Latn", } m["sai-ptg"] = { "Patagón", nil, nil, "Latn", } m["sai-pur"] = { "Purukotó", 7261622, "sai-pem", "Latn", } m["sai-pyg"] = { "Payaguá", 7156643, "sai-guc", "Latn", } m["sai-pyk"] = { "Pykobjê", 98113977, "sai-nje", "Latn", } m["sai-qmb"] = { "Quimbaya", 7272043, nil, "Latn", } m["sai-qtm"] = { "Quitemo", 7272651, "sai-cpc", "Latn", } m["sai-rab"] = { "Rabona", 6644203, nil, "Latn", } m["sai-ram"] = { "Ramanos", 16902824, nil, "Latn", } m["sai-sac"] = { "Sácata", 5390321, nil, "Latn", } m["sai-san"] = { "Sanaviron", 16895999, nil, "Latn", } m["sai-sap"] = { "Sapará", 7420922, "sai-car", "Latn", } m["sai-sec"] = { "Sechura", 7442912, nil, "Latn", } m["sai-sin"] = { "Sinúfana", 7525275, nil, "Latn", } m["sai-sje-pro"] = { "Proto-Southern Jê", nil, "sai-sje", "Latn", type = "reconstructed", } m["sai-tab"] = { "Tabancale", 5390321, nil, "Latn", } m["sai-tal"] = { "Tallán", 16910468, nil, "Latn", } m["sai-tap"] = { "Tapayuna", nil, "sai-nje", "Latn", } m["sai-tar-pro"] = { "Proto-Taranoan", nil, "sai-tar", "Latn", type = "reconstructed", } m["sai-teu"] = { "Teushen", 3519243, nil, "Latn", } m["sai-tim"] = { "Timote", nil, nil, "Latn", } m["sai-tpr"] = { "Taparita", 7684460, "sai-otm", "Latn", } m["sai-trr"] = { "Tarairiú", 7685313, nil, "Latn", } m["sai-wai"] = { "Waitaká", 16918610, nil, "Latn", } m["sai-way"] = { "Wayumará", nil, "sai-car", "Latn", } m["sai-wit-pro"] = { "Proto-Witotoan", nil, "sai-wit", "Latn", type = "reconstructed", } m["sai-wnm"] = { "Wanham", 16879440, "sai-cpc", "Latn", } m["sai-xoc"] = { -- contrast xoo, kzw, sai-kat "Xocó", 12953620, nil, "Latn", } m["sai-yao"] = { "tiếng Yao (Nam Mĩ)", nil, "sai-ven", "Latn", "Tiếng Yao (Nam Mĩ)", "Yao (Nam Mĩ)", } m["sai-yar"] = { -- not the same family as 'suy' "Yarumá", 3505859, "sai-pek", "Latn", } m["sai-yri"] = { "tiếng Yuri", nil, "sai-tyu", "Latn", "Tiếng Yuri", "Yuri", } m["sai-yup"] = { "Yupua", 8061430, "sai-tuc", "Latn", } m["sai-yur"] = { "Yurumanguí", 1281291, nil, "Latn", } m["sal-pro"] = { "tiếng Salish nguyên thủy", nil, "sal", "Latn", "Tiếng Salish nguyên thủy", "Salish nguyên thủy", type = "reconstructed", } m["sdv-daj-pro"] = { "Proto-Daju", nil, "sdv-daj", "Latn", type = "reconstructed", } m["sdv-eje-pro"] = { "Proto-Eastern Jebel", nil, "sdv-eje", "Latn", type = "reconstructed", } m["sdv-nil-pro"] = { "Proto-Nilotic", nil, "sdv-nil", "Latn", type = "reconstructed", } m["sdv-nyi-pro"] = { "Proto-Nyima", nil, "sdv-nyi", "Latn", type = "reconstructed", } m["sdv-tmn-pro"] = { "Proto-Taman", nil, "sdv-tmn", "Latn", type = "reconstructed", } m["sel-nor"] = { "tiếng Bắc Selkup", 30304565, "sel", "Cyrl", "Tiếng Bắc Selkup", "Bắc Selkup", } m["sel-pro"] = { "tiếng Selkup nguyên thủy", 128884235, "sel", "Latn", "Tiếng Selkup nguyên thủy", "Selkup nguyên thủy", type = "reconstructed", } m["sel-sou"] = { "tiếng Nam Selkup", 30304639, "sel", "Cyrl", "Tiếng Nam Selkup", "Nam Selkup", } m["sem-amm"] = { "Ammonite", 279181, "sem-can", "Phnx", translit = "Phnx-translit", } m["sem-amo"] = { "Amorite", 35941, "sem-nwe", "Xsux, Latn", } m["sem-cha"] = { "Chaha", nil, "sem-eth", "Ethi", translit = "Ethi-translit", ancestors = "sem-pro", } m["sem-dad"] = { "Dadanitic", 21838040, "sem-cen", "Narb", translit = "Narb-translit", } m["sem-dum"] = { "Dumaitic", nil, "sem-cen", "Narb", translit = "Narb-translit", } m["sem-has"] = { "Hasaitic", 3541433, "sem-cen", "Narb", translit = "Narb-translit", } m["sem-him"] = { "Himyaritic", 35604, "sem", "Arab, Sarb", } m["sem-his"] = { "Hismaic", 22948260, "sem-cen", "Narb", translit = "Narb-translit", } m["sem-mhr"] = { "Muher", 33743, "sem-eth", "Latn", } m["sem-pro"] = { "tiếng Semit nguyên thủy", 1658554, "sem", "Latn", "Tiếng Semit nguyên thủy", "Semit nguyên thủy", type = "reconstructed", } m["sem-saf"] = { "Safaitic", 472586, "sem-cen", "Narb", translit = "Narb-translit", } m["sem-srb"] = { "tiếng Nam Ả Rập cổ", 35025, "sem-osa", "Sarb", "Tiếng Nam Ả Rập cổ", "Nam Ả Rập cổ", translit = "Sarb-translit", } m["sem-tay"] = { "tiếng Tayma", 24912301, "sem-cen", "Narb", "Tiếng Tayma", "Tayma", translit = "Narb-translit", } m["sem-tha"] = { "Thamudic", 843030, "sem-cen", "Narb", translit = "Narb-translit", } m["sem-wes-pro"] = { "tiếng Semit Tây nguyên thủy", 98021726, "sem-wes", "Latn", "Tiếng Semit Tây nguyên thủy", "Semit Tây nguyên thủy", type = "reconstructed", } m["sio-pro"] = { -- NB this is not Proto-Siouan-Catawban 'nai-sca-pro' "tiếng Sioux nguyên thủy", 34181, "sio", "Latn", "Tiếng Sioux nguyên thủy", "Sioux nguyên thủy", type = "reconstructed", } m["sit-aao-pro"] = { "tiếng Naga Trung nguyên thủy", nil, "sit-aao", "Latn", "Tiếng Naga Trung nguyên thủy", "Naga Trung nguyên thủy", type = "reconstructed", } m["sit-bai-pro"] = { "tiếng Bạch nguyên thủy", nil, "sit-bai", "Latn", "Tiếng Bạch nguyên thủy", "Bạch nguyên thủy", type = "reconstructed", } m["sit-ban"] = { "Bangru", 56071779, "sit-hrs", "Latn", } m["sit-bdi-pro"] = { "tiếng Bod nguyên thủy", nil, "sit-bdi", "Latn", "Tiếng Bod nguyên thủy", "Bod nguyên thủy", type = "reconstructed", } m["sit-bok"] = { "tiếng Bokar", 4938727, "sit-tan", "Latn, Tibt", "Tiếng Bokar", "Bokar", translit = {Tibt = "Tibt-translit"}, override_translit = true, display_text = {Tibt = s["Tibt-displaytext"]}, entry_name = {Tibt = s["Tibt-entryname"]}, sort_key = {Tibt = "Tibt-sortkey"}, } m["sit-cha"] = { "Chairel", 5068066, "sit-luu", "Latn", } m["sit-gkh"] = { "Gokhy", 5578069, "tbq-lol", "Latn", } m["sit-hrs-pro"] = { "Proto-Hrusish", nil, "sit-hrs", type = "reconstructed", } m["sit-jap"] = { "tiếng Japhug", 3162245, "sit-egy", "Latn", "Tiếng Japhug", "Japhug", } m["sit-kha-pro"] = { "Proto-Kham", nil, "sit-kha", type = "reconstructed", } m["sit-liz"] = { "Lizu", 6660653, "sit-qia", "Latn", -- and Ersu Shaba } m["sit-lrn"] = { "tiếng Lư Nhân", 6660653, "sit-qia", nil, "Tiếng Lư Nhân", "Lư Nhân", } m["sit-luu-pro"] = { "Proto-Luish", nil, "sit-luu", type = "reconstructed", } m["sit-mor"] = { "Moran", 6909216, "tbq-bdg", "Latn", } m["sit-prn"] = { "Puiron", 7259048, "sit-zem", } m["sit-pro"] = { "tiếng Hán-Tạng nguyên thủy", 45961, "sit", "Latn", "Tiếng Hán-Tạng nguyên thủy", "Hán-Tạng nguyên thủy", type = "reconstructed", } m["sit-sit"] = { "tiếng Tứ Thổ", 19840830, "sit-egy", "Latn", "Tiếng Tứ Thổ", "Tứ Thổ", } m["sit-tan-pro"] = { "Proto-Tani", nil, "sit-tan", "Latn", -- needs verification type = "reconstructed", } m["sit-tgm"] = { "Tangam", 17041370, "sit-tan", "Latn", } m["sit-tos"] = { "Tosu", 7827899, "sit-qia", "Latn", -- also Ersu Shaba } m["sit-tsh"] = { "Tshobdun", 19840950, "sit-egy", "Latn", } m["sit-zbu"] = { "Zbu", 19841106, "sit-egy", "Latn", } m["sla-pro"] = { "tiếng Slav nguyên thủy", 747537, "sla", "Latn", "Tiếng Slav nguyên thủy", "Slav nguyên thủy", type = "reconstructed", entry_name = { remove_diacritics = c.grave .. c.acute .. c.tilde .. c.macron .. c.dgrave .. c.invbreve, remove_exceptions = {'ś'}, }, sort_key = { from = {"č", "ď", "ě", "ę", "ь", "ľ", "ň", "ǫ", "ř", "š", "ś", "ť", "ъ", "ž"}, to = {"c²", "d²", "e²", "e³", "i²", "l²", "nj", "o²", "r²", "s²", "s³", "t²", "u²", "z²"}, } } m["smi-pro"] = { "tiếng Sami nguyên thủy", 7251862, "smi", "Latn", "Tiếng Sami nguyên thủy", "Sami nguyên thủy", type = "reconstructed", sort_key = { from = {"ā", "č", "δ", "[ëē]", "ŋ", "ń", "ō", "š", "θ", "%([^()]+%)"}, to = {"a", "c²", "d", "e", "n²", "n³", "o", "s²", "t²"} }, } m["son-pro"] = { "Proto-Songhay", nil, "son", "Latn", type = "reconstructed", } m["sqj-pro"] = { "tiếng Albani nguyên thủy", 18210846, "sqj", "Latn", "Tiếng Albani nguyên thủy", "Albani nguyên thủy", type = "reconstructed", } m["ssa-klk-pro"] = { "Proto-Kuliak", nil, "ssa-klk", "Latn", type = "reconstructed", } m["ssa-kom-pro"] = { "tiếng Koman nguyên thủy", nil, "ssa-kom", "Latn", "Tiếng Koman nguyên thủy", "Koman nguyên thủy", type = "reconstructed", } m["ssa-pro"] = { "tiếng Nin-Sahara nguyên thủy", nil, "ssa", "Latn", "Tiếng Nin-Sahara nguyên thủy", "Nin-Sahara nguyên thủy", type = "reconstructed", } m["syd-fne"] = { "Forest Nenets", 1295107, "syd", "Cyrl", entry_name = {remove_diacritics = c.grave .. c.acute .. c.macron .. c.breve .. c.dotabove}, } m["syd-pro"] = { "tiếng Samoyed nguyên thủy", 7251863, "syd", "Latn", "Tiếng Samoyed nguyên thủy", "Samoyed nguyên thủy", type = "reconstructed", } m["tai-pro"] = { "tiếng Thái nguyên thủy", 6583709, "tai", "Latn", "Tiếng Thái nguyên thủy", "Thái nguyên thủy", type = "reconstructed", } m["tai-swe-pro"] = { "tiếng Tai Tây Nam nguyên thủy", nil, "tai-swe", "Latn", "Tiếng Tai Tây Nam nguyên thủy", "Tai Tây Nam nguyên thủy", type = "reconstructed", } m["tbq-bdg-pro"] = { "tiếng Bodo-Garo nguyên thủy", nil, "tbq-bdg", "Latn", "Tiếng Bodo-Garo nguyên thủy", "Bodo-Garo nguyên thủy", type = "reconstructed", } m["tbq-blg"] = { "Bailang", 2879843, "tbq-lob", "Hani", sort_key = "Hani-sortkey", } m["tbq-brm-pro"] = { "tiếng Miến nguyên thủy", nil, "tbq-brm", "Latn", type = "reconstructed", } m["tbq-gkh"] = { "Gokhy", 5578069, "tbq-sil", "Latn", } m["tbq-kuk-pro"] = { "tiếng Kuki-Chin nguyên thủy", nil, "tbq-kuk", "Latn", "Tiếng Kuki-Chin nguyên thủy", "Kuki-Chin nguyên thủy", type = "reconstructed", } m["tbq-lal-pro"] = { "Proto-Lalo", nil, "tbq-lol", "Latn", type = "reconstructed", } m["tbq-laz"] = { "Laze", 17007626, "sit-nax", } m["tbq-lob-pro"] = { "tiếng Lô Lô-Miến nguyên thủy", 116773224, "tbq-lob", "Latn", "Tiếng Lô Lô-Miến nguyên thủy", "Lô Lô-Miến nguyên thủy", type = "reconstructed", } m["tbq-lol-pro"] = { "tiếng Lô Lô nguyên thủy", 7251855, "tbq-lol", "Latn", type = "reconstructed", } m["tbq-ngo"] = { "Ngochang", nil, "tbq-brm", "Latn", } m["tbq-plg"] = { "Pai-lang", 2879843, "tbq-lob", "Hani, Latn", sort_key = {Hani = "Hani-sortkey"}, } -- tbq-pro is now etymology-only m["trk-dkh"] = { "tiếng Dukha", nil, "trk-sib", "Latn, Cyrl, Mong", "Tiếng Dukha", "Dukha", translit = {Mong = "Mong-translit"}, display_text = {Mong = s["Mong-displaytext"]}, entry_name = {Mong = s["Mong-entryname"]}, } m["trk-eog"] = { "tiếng Oghuz cổ sơ kỳ", nil, "trk-ogz", "ota-Arab", strip_diacritics = {["ota-Arab"] = "ar-stripdiacritics"}, } m["trk-fyk"] = { "tiếng Kyrgyz Phú Dụ", 2598963, "trk", "Latn", "Tiếng Kyrgyz Phú Dụ", "Kyrgyz Phú Dụ", } m["trk-oat"] = { "tiếng Thổ Nhĩ Kỳ Anatolia cổ", 7083390, "trk-ogz", "ota-Arab", strip_diacritics = {["ota-Arab"] = "ar-stripdiacritics"}, ancestors = "trk-eog", "Tiếng Thổ Nhĩ Kỳ Anatolia cổ", "Thổ Nhĩ Kỳ Anatolia cổ", } m["trk-pro"] = { "tiếng Turk nguyên thủy", 3657773, "trk", "Latn", "Tiếng Turk nguyên thủy", "Turk nguyên thủy", type = "reconstructed", } m["trk-soy"] = { "tiếng Soyot", 4426878, "trk", "Cyrl", "Tiếng Soyot", "Soyot", translit = "trk-soy-translit", } m["tup-gua-pro"] = { "tiếng Tupi-Guarani nguyên thủy", nil, "tup-gua", "Latn", "Tiếng Tupi-Guarani nguyên thủy", "Tupi-Guarani nguyên thủy", type = "reconstructed", } m["tup-kab"] = { "Kabishiana", 15302988, "tup", "Latn", } m["tup-pro"] = { "tiếng Tupi nguyên thủy", 10354700, "tup", "Latn", "Tiếng Tupi nguyên thủy", "Tupi nguyên thủy", type = "reconstructed", } m["tuw-alk"] = { "tiếng Alchuka", 113553616, "tuw-jrc", "Latn, Hans", "Tiếng Alchuka", "Alchuka", sort_key = {Hans = "Hani-sortkey"}, } m["tuw-bal"] = { "tiếng Bala", 86730632, "tuw-jrc", "Latn, Hans", "Tiếng Bala", "Bala", sort_key = {Hans = "Hani-sortkey"}, } m["tuw-kil"] = { "tiếng Kili", 6406892, "tuw", nil, "Tiếng Kili", "Kili", } m["tuw-pro"] = { "tiếng Tungus nguyên thủy", nil, "tuw", "Latn", "Tiếng Tungus nguyên thủy", "Tungus nguyên thủy", type = "reconstructed", } m["tuw-kkl"] = { "tiếng Kyakala", nil, "tuw", "Latn, Hani", "Tiếng Kyakala", "Kyakala", sort_key = {Hani = "Hani-sortkey"}, } m["tuw-sol"] = { "tiếng Solon", 30004, "tuw", nil, "Tiếng Solon", "Solon", } m["und-isa"] = { "Isaurian", 16956868, nil, -- "Xsux, Hluw, Latn", } m["und-kas"] = { "Kassite", 35612, nil, "Xsux", } m["und-mil"] = { "Milang", 6850761, nil, "Deva, Latn", } m["und-mmd"] = { "Mimi of Decorse", 6862206, nil, "Latn", } m["und-mmn"] = { "Mimi of Nachtigal", 6862207, nil, "Latn", } m["und-phi"] = { "Philistine", 2230924, nil, "Phnx", } m["und-wji"] = { "Western Jicaque", 3178610, "hok", "Latn", } m["urj-fin-pro"] = { "tiếng Finn nguyên thủy", 11883720, "urj-fin", "Latn", "Tiếng Finn nguyên thủy", "Finn nguyên thủy", type = "reconstructed", } m["urj-koo"] = { "tiếng Komi cổ", nil, "urj-prm", "Perm, Cyrs", "Tiếng Komi cổ", "Komi cổ", translit = "urj-koo-translit", sort_key = {Cyrs = s["Cyrs-sortkey"]}, } m["urj-kuk"] = { "Kukkuzi", 107410460, "urj-fin", "Latn", ancestors = "vot", } m["urj-kya"] = { "tiếng Komi-Yazva", 2365210, "urj-prm", "Cyrl", "Tiếng Komi-Yazva", "Komi-Yazva", translit = "kv-translit", override_translit = true, entry_name = {remove_diacritics = c.acute}, } m["urj-mdv-pro"] = { "tiếng Mordvin nguyên thủy", nil, "urj-mdv", "Latn", "Tiếng Mordvin nguyên thủy", "Mordvin nguyên thủy", type = "reconstructed", } m["urj-prm-pro"] = { "tiếng Perm nguyên thủy", nil, "urj-prm", "Latn", "Tiếng Perm nguyên thủy", "Perm nguyên thủy", type = "reconstructed", } m["urj-pro"] = { "tiếng Ural nguyên thủy", 288765, "urj", "Latn", "Tiếng Ural nguyên thủy", "Ural nguyên thủy", type = "reconstructed", } m["urj-ugr-pro"] = { "tiếng Ugria nguyên thủy", 156631, "urj-ugr", "Latn", "Tiếng Ugria nguyên thủy", "Ugria nguyên thủy", type = "reconstructed", } m["xnd-pro"] = { "Proto-Na-Dene", nil, "xnd", "Latn", type = "reconstructed", } m["xgn-mgr"] = { "tiếng Mangghuer", 34214, "mjg", "Latn", -- also Mong, Cyrl ? "Tiếng Mangghuer", "Mangghuer", } m["xgn-mgl"] = { "tiếng Mongghul", 34214, "mjg", "Latn", -- also Mong, Cyrl ? "Tiếng Mongghul", "Mongghul", } m["xgn-pro"] = { "tiếng Mông Cổ nguyên thủy", 2493677, "xgn", "Latn", "Tiếng Mông Cổ nguyên thủy", "Mông Cổ nguyên thủy", type = "reconstructed", } m["ypk-pro"] = { "Proto-Yupik", nil, "ypk", "Latn", type = "reconstructed", } m["yrk-for"] = { "Forest Nenets", 1295107, "yrk", "Cyrl", translit = "yrk-for-translit", strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.macron .. c.breve .. c.dotabove}, } m["yrk-tun"] = { "tiếng Nenets lãnh nguyên", 36452, "yrk", "Cyrl", "Tiếng Nenets lãnh nguyên", "Nenets lãnh nguyên", strip_diacritics = { from = {"ӑ", "а̄", "э̇", "ӣ", "ы̄", "ӯ", "ю̄", "я̆", "я̄"}, to = {"а", "а", "э", "и", "ы", "у", "ю", "я", "я"}, }, translit = "yrk-tun-translit", } m["zhx-min-pro"] = { "tiếng Mân nguyên thủy", 19646347, "zhx-min", "Latn", "Tiếng Mân nguyên thủy", "Mân nguyên thủy", type = "reconstructed", } m["zhx-sht"] = { "Shaozhou Tuhua", 1920769, "zhx", "Nshu, Hani, Hant, Hans", generate_forms = "zh-generateforms", sort_key = {Hani = "Hani-sortkey"}, } m["zhx-sic"] = { "tiếng Tứ Xuyên", 2278732, "zhx-man", "Hants", "Tiếng Tứ Xuyên", "Tứ Xuyên", generate_forms = "zh-generateforms", translit = "zh-translit", sort_key = "Hani-sortkey", } m["zhx-tai"] = { "tiếng Đài Sơn", 2208940, "zhx", "Hani, Hant, Hans", "Tiếng Đài Sơn", "Đài Sơn", ancestors = "yue", generate_forms = "zh-generateforms", translit = "zh-translit", sort_key = "Hani-sortkey", } m["zhx-taz"] = { "tiếng Taz", 3516511, "zhx", nil, "Tiếng Taz", "Taz", } m["zhx-twa"] = { "tiếng Đường Uông", 7683179, "zhx", "Hani", "Tiếng Đường Uông", "Đường Uông", } m["zle-ono"] = { "tiếng Novgorod cổ", 162013, "zle", "Cyrs, Glag", "Tiếng Novgorod cổ", "Novgorod cổ", translit = "Cyrs-Glag-translit", entry_name = {Cyrs = s["Cyrs-entryname"]}, sort_key = {Cyrs = s["Cyrs-sortkey"]}, } m["zle-ort"] = { "tiếng Ruthenia cổ", 13211, "zle", "Cyrs", "Tiếng Ruthenia cổ", "Ruthenia cổ", ancestors = "orv", translit = "zle-ort-translit", entry_name = { remove_diacritics = s["Cyrs-entryname"].remove_diacritics, remove_exceptions = {"Ї", "ї"} }, sort_key = s["Cyrs-sortkey"], } m["zls-chs"] = { "tiếng Slav Giáo hội", 33251, "zls", "Cyrs, Glag, Latn", "Tiếng Slav Giáo hội", "Slav Giáo hội", ancestors = "cu", translit = { Cyrs = "Cyrs-translit", Glag = "Glag-translit" }, entry_name = { Cyrs = s["Cyrs-entryname"] }, sort_key = { Cyrs = s["Cyrs-sortkey"] }, } m["zlw-ocs"] = { "tiếng Séc cổ", 593096, "zlw", "Latn", "Tiếng Séc cổ", "Séc cổ", } m["zlw-osk"] = { "tiếng Slovak cổ", 12776676, "zlw", "Latn", "Tiếng Slovak cổ", "Slovak cổ", } m["zlw-opl"] = { "tiếng Ba Lan cổ", 149838, "zlw-lch", "Latn", "Tiếng Ba Lan cổ", "Ba Lan cổ", entry_name = {remove_diacritics = c.ringabove}, } m["zlw-pom-pro"] = { "Proto-Pomeranian", 149588, "zlw-pom", "Latn", type = "reconstructed", } m["zlw-slv"] = { "tiếng Slovincia", 36822, "zlw-pom", "Latn", "Tiếng Slovincia", "Slovincia", ancestors = "zlw-pom-pro", entry_name = "zlw-slv-entryname" } m["aav-qal"] = { "tiếng Quảng Lâm", 19894302, "mkh-pal", "Latn", "Tiếng Quảng Lâm", "Quảng Lâm", } return require("Module:languages").finalizeData(m, "language") fd1vcun2dn49msoif6gk276du5pp8jk Mô đun:category tree/families 828 279377 2571723 2334756 2026-10-18T15:41:56Z Hiyuune 50834 2571723 Scribunto text/plain local raw_categories = {} local raw_handlers = {} local concat = table.concat local insert = table.insert ----------------------------------------------------------------------------- -- -- -- RAW CATEGORIES -- -- -- ----------------------------------------------------------------------------- raw_categories["Tất cả ngữ hệ"] = { topright = "{{commonscat|Languages by family}}\n{{wikipedia|Ngữ hệ}}", description = "Thể loại này liệt kê tất cả các trang mục từ theo [[ngữ hệ]].", parents = {"Tất cả"}, } raw_categories["Ngôn ngữ theo ngữ hệ"] = { topright = "{{commonscat|Languages by family}}\n{{wikipedia|Ngữ hệ}}", description = "This category contains all languages categorized hierarchically according to the [[language family]] they belong to.", additional = "Only top-level language families are shown here. For a full list of all language families, xem thêm [[:Thể loại:Tất cả ngữ hệ]] hoặc [[Wiktionary:Danh sách ngữ hệ]].", parents = { {name = "Tất cả ngôn ngữ", sort = " "}, {name = "Tất cả ngữ hệ", sort = " "}, }, } ----------------------------------------------------------------------------- -- -- -- RAW HANDLERS -- -- -- ----------------------------------------------------------------------------- local function family_is_not_a_family(fam) local famcode = fam:getCode() if famcode == "paa" then return false -- Papuan languages are not a family but have a category elseif famcode == "qfa-iso" or famcode == "qfa-not" then return true else local parfam = fam:getFamily() if parfam and parfam:getCode() == "qfa-not" then -- Constructed languages, sign languages, etc.; no category for them return true end end return false end local function infobox(fam) local ret = {} insert(ret, "<table class=\"wikitable\">\n") insert(ret, "<tr>\n<th colspan=\"2\" class=\"plainlinks\">[//vi.wiktionary.org/w/index.php?title=Module:families/data&action=edit Chỉnh sửa dữ liệu ngữ hệ]</th>\n</tr>\n") insert(ret, "<tr>\n<th>Tên chuẩn</th><td>" .. fam:getCanonicalName() .. "</td>\n</tr>\n") local otherNames = fam:getOtherNames() if otherNames then local names = {} for _, name in ipairs(otherNames) do insert(names, "<li>" .. name .. "</li>") end if #names > 0 then insert(ret, "<tr>\n<th>Tên khác</th><td><ul>" .. concat(names, "\n") .. "</ul></td>\n</tr>\n") end end local aliases = fam:getAliases() if aliases then local names = {} for _, name in ipairs(aliases) do insert(names, "<li>" .. name .. "</li>") end if #names > 0 then insert(ret, "<tr>\n<th>Tên hiệu</th><td><ul>" .. concat(names, "\n") .. "</ul></td>\n</tr>\n") end end local varieties = fam:getVarieties() if varieties then local names = {} for _, name in ipairs(varieties) do if type(name) == "string" then insert(names, "<li>" .. name .. "</li>") else assert(type(name) == "table") local first_var local subvars = {} for i, var in ipairs(name) do if i == 1 then first_var = var else insert(subvars, "<li>" .. var .. "</li>") end end if #subvars > 0 then insert(names, "<li><dl><dt>" .. first_var .. "</dt>\n<dd><ul>" .. concat(subvars, "\n") .. "</ul></dd></dl></li>") elseif first_var then insert(names, "<li>" .. first_var .. "</li>") end end end if #names > 0 then insert(ret, "<tr>\n<th>Biến thể</th><td><ul>" .. concat(names, "\n") .. "</ul></td>\n</tr>\n") end end insert(ret, "<tr>\n<th>[[Wiktionary:Families|Mã ngữ hệ]]</th><td><code>" .. fam:getCode() .. "</code></td>\n</tr>\n") insert(ret, "<tr>\n<th>[[w:en:Proto-language|Ngôn ngữ<br/>nguyên thủy]]</th><td>") local protoLanguage = fam:getProtoLanguage() if protoLanguage then insert(ret, "[[:Thể loại:" .. protoLanguage:getCategoryName() .. "|" .. protoLanguage:getCanonicalName() .. "]]") else insert(ret, "không có") end insert(ret, "</td>\n") insert(ret, "\n</tr>\n") local parent = fam:getFamily() if not parent then insert(ret, "<tr>\n<th>[[Wiktionary:Ngữ hệ|Họ ngữ hệ]]</th>\n<td>") insert(ret, "chưa được phân loại") elseif parent:getCode() == "qfa-not" then insert(ret, "<tr>\n<th>[[Wiktionary:Ngữ hệ|Họ ngữ hệ]]</th>\n<td>") insert(ret, "không phải là ngữ hệ") else local chain = {} while parent do if family_is_not_a_family(parent) then break end insert(chain, "[[:Thể loại:" .. parent:getCategoryName() .. "|" .. parent:getCanonicalName() .. "]]") parent = parent:getFamily() end if #chain == 0 then insert(ret, "<tr>\n<th>[[Wiktionary:Ngữ hệ|Họ ngữ hệ]]</th>\n<td>") insert(ret, "no parents") else insert(ret, "<tr>\n<th>[[Wiktionary:Ngữ hệ|Họ ngữ hệ]]</th>\n<td>") for i = #chain, 1, -1 do insert(ret, "<ul><li>" .. chain[i]) end insert(ret, string.rep("</li></ul>", #chain)) end end insert(ret, "</td>\n</tr>\n") if fam:getWikidataItem() and mw.wikibase then local link = '[' .. mw.wikibase.getEntityUrl(fam:getWikidataItem()) .. ' ' .. fam:getWikidataItem() .. ']' insert(ret, "<tr><th>Wikidata</th><td>" .. link .. "</td></tr>") end insert(ret, "</table>") return concat(ret) end insert(raw_handlers, function(data) local family = require("Module:families").getByCanonicalName(data.category) if not family then return nil end local parent_fam = family:getFamily() local first_parent if not parent_fam or family_is_not_a_family(parent_fam) then first_parent = "Ngôn ngữ theo ngữ hệ" else first_parent = parent_fam:getCategoryName() end local description, additional, topright = "", "" if not data.called_from_inside then topright = {} local wikipedia_art = family:getWikipediaArticle() if wikipedia_art then insert(topright, "{{wikipedia|" .. wikipedia_art .. "}}") end local commons_cat = family:getCommonsCategory() if commons_cat then insert(topright, "{{commonscat|" .. commons_cat:gsub("^Category:", "") .. "}}") end topright = #topright > 0 and concat(topright, "\n") or nil description = "Đây là thể loại chính của '''" .. family:getDisplayForm() .. "'''." additional = "Thông tin về " .. family:getCanonicalName() .. ":\n\n" .. infobox(family) end local parents = { first_parent, "Tất cả ngữ hệ", } if parent_fam and parent_fam:getCode() == "sgn" then insert(parents, "All sign languages") end return { canonical_name = family:getCategoryName(), topright = topright, description = description, additional = additional, parents = parents, breadcrumb = family:getCanonicalName(), can_be_empty = true, } end) return {RAW_CATEGORIES = raw_categories, RAW_HANDLERS = raw_handlers} g4rzlrk3a8463vcxp2c1d93nhds2pgz Bản mẫu:R:Online Etymology Dictionary 10 280770 2571771 2099455 2026-10-19T03:09:38Z Hiyuune 50834 2571771 wikitext text/x-wiki {{#invoke:quote|call_template |template=cite-web |author = Douglas Harper |entry = {{{entry|{{{1|{{pagename}}}}}}}}{{#if:{{{pos|}}}|&#32;({{{pos}}}{{#if:{{{noformat|}}}||.}})}} |entryurl = {{#if:{{{url|}}} | {{{url}}} | https://www.etymonline.com/word/{{urlencode:{{{entry|{{{1|{{pagename}}}}}}}}|PATH}}{{#if:{{{v|}}}|&#35;etymonline_v_{{{v}}}}} }} |work = [[w:en:Online Etymology Dictionary|Online Etymology Dictionary]] |year = 2001–{{CURRENTYEAR}} |accessdate = {{{accessdate|{{{2|}}}}}} |textparam = 3 |usenodot = 1 |allowparams = entry,1,pos,noformat,url,v,accessdate,2 }}<noinclude>{{documentation}}</noinclude> 7l0nek565qddznotoznlbzcs9dde4ur Mô đun:place/locations 828 282249 2571783 2570254 2026-10-19T03:29:11Z Hiyuune 50834 2571783 Scribunto text/plain local export = {} export.force_cat = false -- set to true to force category generation even on non-mainspace pages local m_table = require("Module:table") local string_utilities_module = "Module:string utilities" local en_utilities_module = "Module:en-utilities" local insert = table.insert local concat = table.concat local dump = mw.dumpObject local unpack = unpack or table.unpack -- Lua 5.2 compatibility --[==[ intro: This module contains data on all known locations, along with some lower-level code to process them (higher-level known-location code is in [[Module:place/placetypes]]). You must load this module using require(), not using mw.loadData(). ===Location data=== '''NOTE: In order to understand the following better, first read the introductory documentation in [[Module:place]], especially the section `More about known locations`.''' The bulk of the code in this module (after some helper functions and placetype tables) describes the known locations and their relationships. Locations are grouped into ''location groups'' that share some common properties (examples are states of the United States and cities in Brazil). Each location group is associated with two tables, a ''data table'' that lists the locations and their individual properties, and a ''metadata table'' that lists group-level properties and defaults for the location properties. Each metadata table points to the associated data table (i.e. contains the data table as its `data` field), and the global `locations` variable holds a list of all group metadata tables. A given location is generally described by three values: (a) the group metadata table for the group the location is part of; (b) the location's canonical ''key'', which is the actual key in the group's data table and is globally unique across all locations; and (c) the location's ''spec'', which is the initialized object describing the properties of the location and comes from the value in the data table corresponding to the canonical key, transformed by the `initialize_spec()` function. These are typically named `group`, `key` and `spec`, respectively and in that order, and are found in the arguments to many functions. In a per-group data table, the keys are either ''canonical keys'' describing locations (which, as mentioned above, must be globally unique) or ''alias keys'' specifying an allowed alias for a given location. There may be multiple aliases for a given location and the alias keys only need to be unique within a particular group data table, not across all groups. It is also possible for the same string to serve as an alias key in one group and a canonical key in another group. (For example, `Newcastle` appears as an alias key in two different groups, referring to two different locations, canonically known as `Newcastle upon Tyne`, for the city in England, and `Newcastle, New South Wales`, for the city in New South Wales, Úc; and `Birmingham` appears both as a canonical key in the group of English cities and an alias key for canonical `Birmingham, Alabama` in the group of US cities.) The corresponding value objects are different for canonical and alias keys. Corresponding to canonical keys are ''location specs'', describing the properies of the location that cannot be derived from default properties of the group or global defaults. Corresponding to alias keys are ''alias specs'', which are highly restricted in the properties they can contain, and whose properties do not have per-group defaults, but only global defaults. The canonical key is always the same as the bare category corresponding to the location, which is one of the reasons it must be globally unique. For example, the country of Georgia uses the canonical key `Georgia` and corresponding bare category [[:Category:Georgia]], while the US state of Georgia uses the canonical key `Georgia, USA` and corresponding bare category [[:Category:Georgia, USA]]. The following conventions are followed in naming keys: * Countries, ''country-like entities'' (which are a mixture of unrecognized de-facto states and dependent territories) and ''former countries'' (which also includes other types of polities, such as the Roman Empire) use their unqualified placename as the canonical key. (See the documentation for [[Module:place]] for the distinction between keys and placenames, which is critical to understand when working with location data.) This also applies to constituent countries (such as England, Aruba and the Faroe Islands) and constituent parts of grouped dependent territories (such as the island of Saint Helena, which is administratively part of the British overseas territory of Saint Helena, Ascension and Tristan da Cunha). * Cities (including prefecture-level cities in China, which behave in most respects more like non-city administrative divisions) also normally use their unqualified placename as the canonical key, but if this causes name conflicts or ambiguities, they use a ''qualified key'' containing either the country name or immediate containing division (if different) following a comma, such as the case of `Newcastle, New South Wales` and `Birmingham, Alabama` above. Examples of name conflicts are the two cities just given; examples of ambiguities are the major cities of León and Mérida in Mexico and city of Cartagena, Colombia, which are given the respective canonical keys of `León, Guanajuato`, `Mérida, Yucatán` and `Cartagena, Colombia` to avoid ambiguity with the well-known respective cities of the same name in Spain, even though none of those cities are large enough to be included as known locations in this module. (The cutoff is generally having a metro area of at least 1,000,000 inhabitants, although there are exceptions.) * Administrative divisions of countries, other than the exceptions noted above for constituent countries and dependent territories, use a qualified key that contains the name of the country or constituent country in it, e.g. `Normandy, France` (a region), `Calvados, France` (a department in the region of Normandy), `Herefordshire, England` (a ceremonial county), `Northwest Territories, Canada` (a territory), `Central Finland, Finland` (a region), `Antalya Province, Turkey` (a province), `Cluj County, Romania` (a county), `County Cork, Ireland` (a county) and `New York, USA` (a state). As shown in these various examples, (a) first and second-level divisions are sometimes both included (as in France, the United Kingdom and China); (b) the qualifier after the comma is sometimes a constituent country (England) instead of a country (United Kingdom), and is sometimes abbreviated (USA rather than United States or Unites States of America); (c) the word `the` is not normally included in the key even if the location is normally preceded by `the` when following a preposition (there is a property in the location and alias specs to indicate this), except in a very few cases (most notably `The Hague`); (d) the country is included as a qualifier even if it creates an apparent redundancy, as with `Central Finland, Finland`; and (e) sometimes the placetype is included in the key, as with provinces in Turkey and several other countries; states in Nigeria; and counties in Ireland, Romania and several other countries. Whether the placetype is included, and whether it follows or precedes the placename, depends on per-country conventions. For example, provinces in Turkey, Iran and several other countries (likewise for states in Nigeria, oblasts in Russia, etc.) conventionally include the word "Province", "State", "Oblast" etc. in their name because they are normally named after the largest city in the division, which would otherwise lead to ambiguity; and counties in Ireland and Northern Ireland (and likewise County Durham, England) normally have the word "County" preceding rather than following them in their conventional name, so we follow this practice. The Wikipedia article naming scheme for a given administrative division is a strong clue as to how the division is normally referred to, and we usually follow this practice. (A minor exception is that the Wikipedia articles for provinces in Iran, Laos and Thailand include the word `province` with an initial lowercase letter while provinces elsewhere, e.g. North and South Korea, Saudi Arabia and Turkey, use uppercase `Province`; we normalize to uppercase `Province` in all cases.) As mentioned above, associated with canonical keys in the group data table are location specs, which are objects containing properties. It is important here to distinguish ''initialized specs'' from ''uninitialized specs''. Unininitialized specs are as directly specified in [[Module:place/locations]], containing only those properties that differ from the per-group or global defaults. Initialized specs result from calling `initialize_spec()` on an uninitialized spec (it is idempotent in that it will do nothing if encountering an already-initialized spec). This copies all group-level defaults that are not overridden in the location spec itself from the group-level metadata table into the location spec, so that in general, no more reference need be made to the group to fetch the correct value of a given location property. (The initialization process also does more transformations in a few cases, noted below.) Note that the default value of a given property is stored under a key in the group metadata table that is preceded by the string `default_`; for example, the default value corresponding to the `placetype` property of a given location is specified in the `default_placetype` key in the group metadata table. The following are the properties of the location spec. * `placetype`: String specifying the placetype of the location (e.g. "quốc gia", "state", province"). This can also be a table of such types; in this case, the first listed type is the canonical type that will be used in descriptions, but the location will be recognized (e.g. in a holonym, or for categorizing into the bare category) when tagged with any of the specified types. The placetype '''must''' be either specified on an individual location or defaulted at the group level, or an error occurs. * `container`: Either a string, a ''canonicalized container'' structure or a list of either type, specifying the immediate ''container'' (or containers) of the given location. A container is another location which this location is considered to be directly part of, either politically or (above the country level) geographically. Some locations belong to multiple immediate containers; this applies especially to transcontinental countries such as Russia and Turkey. Containers can themselves have containers, forming a tree (or more correctly, a [[w:directed acyclic graph]]) of locations. The list of immediate container(s), followed by the container(s) of the container(s), etc., is termed the ''container trail'', and some functions compute and return this trail as part of their operation. When a location spec is initialized, the given container spec is canonicalized into ''canonical container form'', which consists of a list of canonicalized container structures, each of which is of the form `{key = "``container_key``", placetype = "``container_placetype``"}`, where ``container_key`` is a canonical location key and ``container_placetype`` should be the listed placetype for the location, or the first listed placetype if there are multiple. (FIXME: Since the key uniquely identifies the container location, we should eliminate the placetype from the container structure.) The list of canonicalized container structures is stored into the `.containers` field of the location spec (this happens even if the container value is unset in its uninitialized spec form, causing it to default to the corresponding group-level value), and the `.container` field is set to {nil}. The canonicalization process is described in more detail below under [[#Container spec canonicalization]]. * `divs`: List of recognized political divisions; e.g. for the Netherlands, a specification of the form `divs = {"provinces", "municipalities"}` will allow categories such as [[:Category:de:Provinces of the Netherlands]] and [[:Category:pt:Municipalities of the Netherlands]] to be created. Any division that appears here must also be found in `placetype_data`, or an error occurs. The entities appearing in the `divs` list can be structures as well as just strings; this is explained more below under [[#Location divisions]]. Additional political divisions that apply to all locations in a group can be specified at the group level using the group-only property `addl_divs`, which has the same format as `divs`. This is intended to be used in the situation where some division types are shared among all locations in the group and others differ from location to location. An example where this is used is the United States, where `census-designated places` is specified in the group-level `addl_divs` so that all 50 states have census-designated places categorized as e.g. [[:Category:Census-designated places in Arizona, USA]], but `counties` and `county seats` are specified in the group-level `default_divs` because not all states have counties and county seats (Alaska has boroughs and borough seats and Louisiana has parishes and parish seats), and some states have additional divisions (New Jersey and Pennsylvania also have boroughs, while Colorado and Connecticut have municipalities). Note that under most circumstances (particularly, if `container_parent_type` is not set as a property associated with the division type), any division type specified on a sub-country-level location must also be specified on all containers up through the country. For example, since French departments specify `communes` and `municipalities` in `default_divs`, the same division types must be (and are) specified on French regions and for France itself. * `keydesc`: String directly specifying a description of the location, for use in generating the contents of category pages related to the location. In place of a string, a function of three arguments (`group`, `key`, `spec`, as is normal for locations) that computes the location description can also be given. This is used, for example, for Russian federal subjects; see `construct_russia_federal_subject_keydesc`. The special string `+++` contained in the keydesc is replaced with the default value of the location description, which specifies the location's placename, placetype, and the corresponding values for each container in the container trail, generally up through (but not beyond) the country level; see `no_include_container_in_desc` below. The location description is used to construct the full description of various categories, such as bare location categories, whose description generally reads `"{{(((}}langname}}} terms related to the people, culture, or territory of ``keydesc``."` where ``keydesc`` is the specified or auto-constructed location description. * `fulldesc`: String overriding the full description for the bare location category (but not for any other category). This is currently used only for the location `Earth`, at the very top of the tree (because the standard `people, culture or territory of ...` text doesn't make sense here), and for `Antarctica` (because it has no permanent inhabitants). FIXME: This should be renamed `bare_category_fulldesc`. * `addl_parents`: Specify additional parents for the bare location category, in addition to the category or categories generated based on the immediate container(s). For example, `Hawaii, USA` specifies `Polynesia` as an additional parent category; both `North Korea` and `South Korea` specify `Korea` (which is a specially handled location category) as an additional parent; and `Earth` specifies `nature` (not a location category, but still a topic category) as an additional parent (which in this case becomes the first parent, as `Earth` has no container). The only restriction on the categories in `addl_parents` is that they must be topic categories, because each language-specific version of the bare location category gets the corresponding language-specific versions of the categories in `addl_parents`. FIXME: This shoudl be renamed `bare_category_addl_parents`. * `wp`: Spec describing how to construct the Wikipedia article for the location. Each spec is either `true` (equivalent to `"%l"`, i.e. use the full location placename directly) or a string containing formatting directives, indicating how to construct the article name. The allowed formatting directives are `%l` (the full location placename), `%e` (the elliptical location placename) and `%c` (the full placename of the first immediate container). For example, the default value of `wp` for the group of United States cities is `"%l, %c"` since the city articles tend to be named e.g. `Austin, Texas` (but with many exceptions, specified using `wp` fields at the city level). Another example is Thai provinces, which specify a group-level default of `"%e province"` as the Wikipedia articles have lowercase `province` in their name but the Thai province keys specified in this module have uppercase `Province`. Here we have to use `%e` to get the placename without the word `Province` in it. The default is `true`, which simply uses the full location placename as the article name. Note that the Wikipedia article, along with the Wikipedia and Commons category pages, are shown in the upper right of bare category pages. * `wpcat`: Spec describing how to construct the Wikipedia category page for the location (i.e. the page listing articles and categories relevant to the location). The format is the same as with `wp`, and it defaults to the value of `wp`. It rarely needs to be specified because the category page and the article page almost always follow the same format. * `commonscat`: Spec describing how to construct the Commons category page for the location (i.e. the page on the MediaWiki Commons site listing articles and categories relevant to the location). It has the same format as `wp` and `wpcat` and defaults to `wpcat`, which is usually (but not always) correct. * `the`: Boolean specifying whether a location should be preceded by `the` when following a preposition, e.g. in category names such as [[:Category:Cities in the Northern Territory, Úc]] and in old-style place descriptions when the location occurs as the first holonym, such as the city [[Darwin]] described using {{tl|place|city|terr/Northern Territory|c/Australia}}. Note that the global default for this and all Boolean properties is {nil}, which amounts to the same as {false}. * `british_spelling`: Boolean indicating whether the location in question uses British spelling. Currently this only affects whether the spelling `neighborhoods` or `neighbourhoods` is used in categories such as [[:Category:Neighborhoods of New York City]] and [[:Category:Neighbourhoods of Sydney]]. This usually needs to be set only at the top level (i.e. country or country-like entity), because lower-level entities look up the container trail for any container that has `british_spelling = true` set, and if found, assume that British spelling applies. The general principle used in setting this is that all countries in Europe, all dependent territories of any such country, all former British colonies, and any dependent territories of these former colonies, are assumed to use British spelling, while all other countries and associated dependent territories are assumed to use American spelling. This can potentially be modified on a case-by-case basis. * `is_city`: Boolean indicating whether the location in question is a city. This is explicitly set to `true` for city-states (e.g. Monaco and Vatican City), dependent territories that are cities (e.g. Hong Kong, Macau, Bonaire, Gibraltar, etc.), certain city-level administrative divisions (such as `City of Belfast, Northern Ireland`) and (through a group-levell setting) New York boroughs. In addition, it is set to `true` in initialize_spec() whenever the group-level `default_placetype == "thành phố"`, so that all cities get it set without explicitly needing to add a group-level setting for this. Note that the condition `default_placetype == "thành phố"` intentionally excludes Chinese prefecture-level cities, which aren't really cities in that (for example) they don't directly contain neighborhoods, but do contain cities within them. This setting is used in various places: (a) to add cities, rivers, etc. to categories like [[:Category:Rivers in Osaka, Nhật Bản]] and [[:Category:Cities in Wuhan]] for holonyms that are ''not'' cities; (b) to add districts, neighborhoods, and the like to categories like [[:Category:Neighborhoods of Brooklyn]] and [[:Category:Neighborhoods of Monaco]] for holoynms that ''are'' cities; (c) generally, to determine which "generic" placetypes (cities, rivers, neighborhoods, etc.) apply to the location. (Those that can occur with cities have a `generic_before_cities` setting in [[Module:place/placetypes]], and those that can occur with non-cities have a `generic_before_non_cities` setting.) * `is_former_place`: Boolean that should be set on former places such as the Soviet Union and the Roman Empire. For such places, categories such as [[:Category:fr:Rivers in the Soviet Union]] are neither generated nor recognized (more generally, no "generic" placetypes apply except for `places`), and category descriptions include the word `former`. * `overriding_bare_label_parents`: Document me! * `bare_category_parent_type`: Document me! * `no_container_cat`: Document me! * `no_container_parent`: Document me! * `no_generic_place_cat`: Document me! * `no_check_holonym_mismatch`: Document me! * `no_auto_augment_container`: Document me! * `no_include_container_in_desc`: Document me! ====Location divisions==== The `divs` field of a location describes the recognized political division types of that location. Specifying a given division type will cause places defined as being of the specified division type and with the location as a holonym will cause the place to be categorized as ` ``placetypes`` in/of ``location`` `; for example, specifying that the United States has `"states"` as a division will cause anything defined as {{tl|place|fr|state|c/US}} to be categorized under [[:Category:fr:States of the United States]]. Note that you do not have to explicitly specify division types for "generic" placetypes (those that have a `generic_before_non_cities` field if the location is not a city, or that have a `generic_before_cities` field if the location is a city); this includes things like cities, towns, villages, neighbo(u)rhoods and rivers. A given element in the `divs` list is usually a string naming a plural placetype; the placetype is automatically converted to the singular for recognizing the placetype in a {{tl|place}} spec, and irregular plurals such as `kibbutzim` are handled correctly as long as the placetype specifies an appropriate `plural` field (if the `plural` isn't explicitly given, the default singularization algorithm in [[Module:en-utilities]] is run, which gets most things correctly but has problems with `passes` and `fortresses`, which are singularized to `passe` and `fortresse`; for this reason, an explicit plural entry is added to terms in ''-ss''). In place of a string, an object can be given with the plural placetype in the `type` field; this allows additional properties to be specified along with the placetype. An example of this is the `divs` list for Canada: { ["Canada"] = {divs = { {type = "provinces", cat_as = "provinces and territories"}, {type = "territories", cat_as = "provinces and territories"}, "counties", "districts", "municipalities", "regional municipalities", "rural municipalities", "parishes", "Indian reserves", "census divisions", {type = "townships", prep = "in"}, }, ...}, } Here, both provinces and territories are set to categorize as `provinces and territories`, meaning that there is a single category [[:Category:Provinces and territories of Canada]] rather than separate categories for provinces and territories. Similar things are done for other countries that have more than one type of first-level administrative division (e.g. Australia, China, India and Pakistan). Note that any placetype listed under `cat_as` must exist in the table of placetypes in [[Module:place/placetypes]], and in fact there is a category-only entry there for `provinces and territories!` (the use of exclamation point following a plural placetype means that the placetype is present only for use in categories and won't be recognized as the placetype field in a {{tl|place}} description). In addition, townships are declared to use `in` rather than `of` as the preposition in the category; hence the category name will be [[:Category:Townships in Canada]] rather than [[:Category:Townships of Canada]]. (The use of `in` vs. `of` is somewhat related to whether a given placetype is an official administrative or statistical division of the location in question and comes in a defined list, in which case `of` should be used, or is more ill-defined, in which case `in` should be used; the default is `of`, and the use of `in` with `townships` is probably by analogy with the use of `in` with cities and towns.) Another more complex example is the divisions given for Quebec: { ["Quebec, Canada"] = {divs = { "counties", {type = "regional county municipalities", container_parent_type = "regional municipalities"}, {type = "regions", container_parent_type = false}, {type = "townships", prep = "in"}, {type = "parish municipalities", cat_as = {{type = "parishes", container_parent_type = "counties"}, "municipalities"}}, {type = "township municipalities", cat_as = {{type = "townships", prep = "in"}, "municipalities"}}, {type = "village municipalities", cat_as = {{type = "villages", prep = "in"}, "municipalities"}}, }, ...}, } Here, `container_parent_type` controls the second parent category of the placetype/location category associated with the entry. In this case, for example, [[:Category:Counties of Quebec, Canada]] will have [[:Category:Counties of Canada]] as its second or ''container-level'' parent. However, this doesn't make sense for `regional county municipalities`, which exist only in Quebec (so the parent category [[:Category:Regional county municipalities of Canada]] would have only one subcategory); but they are similar to regional municipalities in British Columbia, Nova Scotia and Ontario, so the `container_parent_type = "regional municipalities"` spec causes the container-level parent of this category to be [[:Category:Regional municipalities of Canada]]. Likewise, `regions` as administrative divisions (as opposed to mere geographic regions) exist only in Quebec; they have no equivalent elsewhere, so we disable the container-level parent using `container_parent_type = false`. The specs for `parish municipalities`, `township municipalities` and `village municipalities` show both that multiple types can be specified under `cat_as` (here, for example, we categorize `parish municipalities` as both `parishes` and `municipalities`) and that these types can themselves have properties, just as for entries directly under `divs`. Specifically, `{type = "parishes", container_parent_type = "counties"}` means that any place defined as a parish municipality in Quebec will be categorized under both [[:Category:Parishes of Quebec, Canada]] and [[:Category:Municipalities of Quebec, Canada]], and that the former will have a container-level parent of [[:Category:Counties of Canada]] (rather than the default of [[:Category:Parishes of Canada]]). Similarly, `township municipalities` will be categorized under both [[:Category:Townships in Quebec, Canada]] (''not'' [[:Category:Townships of Quebec, Canada]]) and [[:Category:Municipalities of Quebec, Canada]]. ====Container spec canonicalization==== A fully canonicalized container spec for a given location consists of a list of ''canonicalized container objects'', each with a `key` and `placetype` field. The `key` field should name the canonical key of some other location at a higher level (e.g. French cities are contained in French departments, which are contained in French regions, which are contained in France, which is contained in Europe, which is contained in Eurasia, which is contained in the Earth). The `placetype` field should correspond to the first (canonical) placetype listed for the key in question. The process of initializing a locaion spec converts the container spec in `.container` into a canonicalized spec in `.containers` and removes the spec from `.container`. It works as follows: # If the `container` field is missing, and there is a group-level `default_container` field, it is used in its place. For example, none of the Brazilian states listed in `brazil_states` specifies a container, but the group specifies `default_container = "Brazil"`. # A single string or canonicalized container object is allowed and made into a one-element list. # If a list element is a string that did ''not'' come from `default_container`, and there is a group-level `canonicalize_key_container` field, it is assumed to be a one-argument function and is called on the string to get a canonicalized container object. # Any remaining strings are assumed to be countries and are used directly as the `key`, with `placetype` set to `"quốc gia"`. ====Alias keys==== Aliases can be provided for canonical keys using ''alias keys''. Alias keys have a very different location spec structure from canonical keys. This structure does not, in general, have defaults at the group level and is not initialized using `initialize_spec()`, but is used as-is. The following properties are recognized in an alias location spec: * `alias_of`: The canonical key of which this key is an alias. Required. * `the`: If true, this alias key is preceded by `the` following a preposition. Defaults to the group-level `default_the` but does not pay attention to the value of `the` for the corresponding canonical key. * `display`: This is a display alias, meaning that holonyms using the placename corresponding to this alias will be converted to the placename corresponding to the canonical key when formatting the holonym for display. (Otherwise, the aliasing applies only to categorization.) If the value is true, the display canonicalization is to the placename of the canonical key; otherwise, the value should be a key whose corresponding placename is used when display canonicalizing. * `placetype`: The placetype of the alias. Rarely needs to be specified as it defaults to the canonical key's placetype, and if that is unspecified, to the group-level default placetype. ====Location group metadata tables==== As mentioned above, associated with each location group is a ''metadata table'' listing group-level properties. The metadata table contains two types of keys: group-level defaults (named like the corresponding location-level keys but preceded by `default_`, e.g. `default_placetype` corresponding to the location-level `placetype` key) and group-only keys, which are mostly functions. The following are the possible group-only keys: * `data`: This points to the group data table for the group, as described above. * `key_to_placename`: This is a function of one argument to transform the location's key (whether canonical or alias) into the full and elliptical placenames. The difference between full and elliptical placenames is described in the documentation for [[Module:place]], but in essence, it applies for keys that include the placetype in them (e.g. `Phuket Province, Thailand` or `County Mayo, Ireland`), in which case the full placename includes the placetype and the elliptical placename does not. For keys that do not include the placetype in them (e.g. `Arizona, USA` or `Gloucestershire, England`), the full and elliptical placenames are identical. Note that neither the full nor the elliptical placename includes the container in it; hence, for `Phuket Province, Thailand`, the full placename is `Phuket Province` and the elliptical placename is just `Phuket`. (Note that the full vs. elliptical placename distinction is intended only for handling cases where the placetype follows or precedes the raw placename and there is no difference between the two in whether they are normally preceded by `the`. More complex situations, such as `State of Mexico` (which normally takes `the`) vs. just `Mexico` (which doesn't), or `Islamabad Capital Territory` vs. just `Islamabad`, should be handled instead by aliases.) The `key_to_placename` function takes one argument, the key, and returns two arguments, the full and elliptical placenames, respectively. If left undefined, the default is to chop off anything starting with a comma and return the result as both full and elliptical placename, and if specifically set to `false`, the key is used directly as both full and elliptical placename. If it needs to be defined, it is best to use the helper function `make_key_to_placename`, if possible (or `make_irish_type_key_to_placename` in the case of Ireland and Northern Ireland, where `County` precedes), rather than rolling your own. In addition, you should use the global `key_to_placename` function (which takes care of the default implementation and such) rather than directly calling the function in the `key_to_placename` field. * `placename_to_key`: This is approximately the inverse of `key_to_placename`, transforming a placename (which can be either in full or elliptical form) into the corresponding key. As with `key_to_placename`, if you need to define this (generally, when the full and elliptical placenames are different), prefer using `make_placename_to_key` (or `make_irish_type_placename_to_key` for Ireland and Northern Ireland) to rolling your own. In addition, similarly to `key_to_placename`, use the global `placename_to_key` function to convert placenames to keys rather than directly invoking the function in the `placename_to_key` field. If the field is set to `false`, the placename is used unchanged as the key. Otherwise, the default algorithm works as follows: *# If the group-level `default_placetype == "thành phố"`, use the placename unchanged as the key. *# Otherwise, if the group-level `default_container` exists and is a string, append it to the placename after a comma + space and use the result as the key. *# Otherwise, if the group-level `default_container` is a canonical container object (an object with `key` and `placetype` fields), and the `placetype` field is either `country` or `constituent country`, append the `key` field to the placename after a comma + space and use the result as the key. *# Otherwise, use the placename unchanged as the key. * `canonicalize_key_container`: A function of one argument to convert the specified `container` field, when a string, to canonical form. Described in more detail above under [[#Container spec canonicalization]]. It is preferable to construct the function using `make_canonicalize_key_container`, if possible, rather than rolling your own. * `addl_divs`: Additional political divisions appended, for all locations in the group, to the list of divisions derived from the location-level `divs` or group-level `default_divs` fields to get the final list of divisions for the location. See [[#Location divisions]] for more details. ]==] ----------------------------------------------------------------------------------- -- Helper functions -- ----------------------------------------------------------------------------------- --[==[ Throw an error. `fmt` is a format string and the remaining arguments are passed through `mw.dumpObject` and then used to format the format string as if `fmt:format(...)` were called. In general, callers should use `internal_error` unless the error was due to bad user input rather than a logic error (which usually isn't the case in deep back-end code like this). ]==] function export.process_error(fmt, ...) local args = {...} for i = 1, select("#", ...) do args[i] = dump(args[i]) end return error(string.format(fmt, unpack(args))) end --[==[ Throw an internal error (a logic error that should never happen unless there is a bug in the code, as opposed to a user error triggered by bad input or a system error due to something like running out of memory or hitting a time limit). `fmt` is a format string and the remaining arguments are passed through `mw.dumpObject` and then used to format the format string as if `fmt:format(...)` were called. ]==] function export.internal_error(fmt, ...) export.process_error("Internal error: " .. fmt, ...) end local internal_error = export.internal_error -- Return whether `list_or_element` (a list of strings, or a single string) "contains" `item` (a string). If -- `list_or_element` is a list, this returns true if `item` is in the list; otherwise it returns true if `item` -- equals `list_or_element`. local function list_or_element_contains(list_or_element, item) if type(list_or_element) == "table" then return m_table.contains(list_or_element, item) and true or false end return list_or_element == item end --[==[ Call the location group's `key_to_placename` function if it exists (see the comment at the top of [[Module:place]] for the distinction between keys and placenames). Two values are returned, the full and elliptical placenames (e.g. full `"County Durham"` vs. elliptical `"Durham"`). If the group does not define `key_to_placename`, both full and elliptical placenames are computed by chopping off anything starting with a comma. ]==] function export.key_to_placename(group, key) if group.key_to_placename == false then return key, key end if group.key_to_placename then local full_placename, elliptical_placename = group.key_to_placename(key) if type(full_placename) ~= "string" then internal_error("Key %s returned a non-string full placename: %s", key, full_placename) end if type(elliptical_placename) ~= "string" then internal_error("Key %s returned a non-string elliptical placename: %s", key, elliptical_placename) end return full_placename, elliptical_placename end key = key:gsub(",.*", "") return key, key end --[==[ Call the location group's `placename_to_key` function if it exists (see the comment at the top of [[Module:place]] for the distinction between keys and placenames) and return the result. If `placename_to_key` exists with the value `false`, return the placename unchanged. If the group does not define `placename_to_key`, and it defines a `default_container` whose placetype is either `country` or `constituent country`, the container name is appended to the placename after a comma and a space. Otherwise the placename is returned unchanged. ]==] function export.placename_to_key(group, placename) if group.placename_to_key == false then return placename elseif group.placename_to_key then local key = group.placename_to_key(placename) if type(key) ~= "string" then internal_error("Placename %s returned a non-string key: %s", placename, key) end return key elseif group.default_placetype == "thành phố" then return placename else local defcon = group.default_container if not defcon then return placename elseif type(defcon) == "string" then return placename .. ", " .. defcon elseif type(defcon) == "table" and (defcon.placetype == "quốc gia" or defcon.placetype == "constituent country") then return placename .. ", " .. defcon.key else return placename end end end --[==[ Initialize the location spec `spec`, augmenting it with default values taken from `group` if the spec itself doesn't specify values for the properties. This sets `containers` to a canonicalized list of objects, each with `key` and `placetype` keys, describing the immediate containers of the location, and erases (sets to nil) the original non-canonicalized `container` field. (Most locations have only one immediate container but some, e.g. Russia, have more than one. Containers should be carefully distinguished from category parents. Generally the container is the first category parent, or the first ``n`` parents if there are ``n`` containers, but there may be additional category parents, which indicate some sort of relation between the category parent and the location but not necessarily one of containment.) This function is idempotent in that nothing happens if called more than once on the same spec. FIXME: Consider reimplementing this in a more standardly object-oriented way using metatables. ]==] function export.initialize_spec(group, key, spec) if spec.initialized then return end local container = spec.container local containers local container_from_default if not container then container = group.default_container container_from_default = true end if container then if type(container) == "string" or container.key then container = {container} end containers = {} for _, cont in ipairs(container) do if type(cont) == "string" then if group.canonicalize_key_container and not container_from_default then cont = group.canonicalize_key_container(cont) else cont = {key = cont, placetype = "quốc gia"} end end insert(containers, cont) end end spec.containers = containers spec.container = nil local function value_with_default(val, default_val) if val == nil then return default_val else return val end end local function set_or_default(prop) spec[prop] = value_with_default(spec[prop], group["default_" .. prop]) end set_or_default("placetype") if not spec.placetype then internal_error("No placetype found in key %s for spec %s or in group `default_placetype`", key, spec) end set_or_default("divs") spec.addl_divs = group.addl_divs for _, prop in ipairs { "keydesc", "fulldesc", "addl_parents", "overriding_bare_label_parents", "bare_category_parent_type", "wp", "wpcat", "commonscat", "british_spelling", "the", "no_container_cat", "no_container_parent", "no_generic_place_cat", "no_check_holonym_mismatch", "no_auto_augment_container", "no_include_container_in_desc", "is_city", "is_former_place", } do set_or_default(prop) end -- `default_placetype == "thành phố"` is correct; if `default_placetype` has something else like `prefecture-level city` -- as the canonical placetype but also lists `city` (as Chinese prefecture-level cities do), don't mark as -- is_city. spec.is_city = value_with_default(spec.is_city, group.default_placetype == "thành phố") spec.initialized = true end --[=[ Given a location group, key and possible placetypes that the placename must match, check if the key exists in the group with at least one of the group's key's placetypes matching one of the passed-in placetypes. If so, return two values: the group key (which potentially could differ from the passed-in key due to aliases) and the corresponding spec object, which (as with all functions that return spec objects) has been initialized using `initialize_spec()` (i.e. default property values have been copied from the group into the spec, if the spec doesn't itself specify a value for the property in question). `alias_resolution` controls how aliases are resolved. Normally, both display and category aliases are followed, and the returned key will reflect the canonical location key. However, if `alias_resolution` is {"none"}, no alias following happens. In that case, if the key specifies an alias, the spec for the alias rather than the spec for the canonical location is returned, and importantly, it is returned uninitialized, meaning that properties from the group are not copied into the spec. (If the key specifies a canonical location, its spec is returned initialized, as in the normal case where `alias_resolution` is unspecified.) The caller needs to check whether the returned spec is an alias by looking for an `alias_of` property. If `alias_resolution` is {"display"}, the behavior is the same as for {"none"} except that if the alias contains a setting `display = true`, the returned key will reflect the canonical location key, and if the alias contains a setting `display = ``string`` `, the returned key will reflect that string. This is a low-level function meant for internal use; external callers should generally use `get_matching_location` (for internally-derived locations), `find_matching_holonym_location` (for externally-derived locations) or `find_canonical_key` (for known-canonical locations where the placetype isn't known). ]=] local function find_matching_key_in_group(group, placetypes, key, alias_resolution) if alias_resolution ~= nil and alias_resolution ~= "none" and alias_resolution ~= "display" and alias_resolution ~= "all" then internal_error("Bad value for 'alias_resolution': %s", alias_resolution) end local spec = group.data[key] if not spec then return nil end local function check_correct_placetype(placetype) if type(placetype) == "table" then for _, pt in ipairs(placetype) do if list_or_element_contains(placetypes, pt) then return true end end return false else return list_or_element_contains(placetypes, placetype) end end if spec.alias_of then local resolved_key = spec.alias_of local resolved_spec = group.data[resolved_key] if not resolved_spec then internal_error("Key %s is an alias of %s, which doesn't exist", key, resolved_key) elseif resolved_spec.alias_of then internal_error("Key %s is an alias of %s, which is itself an alias; indirect aliasing not allowed", key, resolved_key) end if alias_resolution == "none" or alias_resolution == "display" then -- We could be working with non-initialized/defaulted spec, since we're pulling it directly from the group. local placetype = spec.placetype or resolved_spec.placetype or group.default_placetype if not placetype then internal_error("No placetype found for key %s in any of spec %s, alias-resolved spec %s or in group " .. "`default_placetype`", key, spec, resolved_spec) end if not check_correct_placetype(placetype) then return nil end if alias_resolution == "display" then if spec.display == true then key = resolved_key elseif spec.display then key = spec.display end end return key, spec end key = resolved_key spec = resolved_spec end -- We could be working with non-initialized/defaulted spec, since we're pulling it directly from the group. local placetype = spec.placetype or group.default_placetype if not placetype then internal_error("No placetype found for key %s in spec %s or group `default_placetype`", key, spec) end if not check_correct_placetype(placetype) then return nil end export.initialize_spec(group, key, spec) return key, spec end --[=[ Given a location group, placename and possible placetypes that the placename must match, check if the placename exists in the group with at least one of the placetypes of the key in the group that corresponds to the placename matching one of the passed-in placetypes. If so, return two values: the key corrsponding to the passed-in placename and the corresponding spec object. This is similar to `find_matching_key_in_group()` but works with placenames rather than keys. `alias_resolution` is as in `find_matching_key_in_group()`. This is a low-level function meant for internal use; external callers should generally use `get_matching_location` (for internally-derived locations), `find_matching_holonym_location` (for externally-derived locations) or `find_canonical_key` (for known-canonical locations where the placetype isn't known). ]=] local function find_matching_placename_in_group(group, placetypes, placename, alias_resolution) local key = export.placename_to_key(group, placename) return find_matching_key_in_group(group, placetypes, key, alias_resolution) end --[==[ If `key` is a canonical known location key (i.e. not an alias), return the corresponding group and initialized spec. If no such key exists, return {nil}. This throws an internal error if two locations with the same key are found. ]==] function export.find_canonical_key(key) local found_locations = {} for _, group in ipairs(export.locations) do local spec = group.data[key] if not spec then -- do nothing elseif spec.alias_of then mw.log(("Skipping alias '%s' of canonical '%s'"):format(key, spec.alias_of)) else insert(found_locations, {group, spec}) end end if not found_locations[1] then return nil elseif found_locations[2] then internal_error("Found multiple matching locations for canonical key %s: %s", key, found_locations) else local group, spec = unpack(found_locations[1]) export.initialize_spec(group, key, spec) return group, spec end end --[==[ Iterator that returns all locations matching a given description, where the description consists of either a placename or a key along with a list of possible placetypes. Usually there will be at most one such location. The iterator returns three values at each iteration: the location group, canonical key by which the location is known and the spec object describing the location. `data` contains the following possible fields: * `placetypes`: A list of possible placetypes, one of which must match one of the location's placetypes; or a string specifying a placetype, which must match one of the location's placetypes. This must be specified. * `placename`: The placename of the location. Either this or `key` must be specified. * `key`: The key of the location. Either this or `placename` must be specified. * `alias_resolution`: If specified, it behaves the same as for `find_matching_key_in_group`. The spec is normally initialized using `initialize_spec()` prior to it being returned (but may not be if `alias_resolution` is given and the specified key or placename is an alias; see the documentation for `find_matching_key_in_group`). ]==] function export.iterate_matching_location(data) local i = 0 local n = #export.locations return function() while true do i = i + 1 if i > n then break end local group = export.locations[i] local key, spec if data.placename then key, spec = find_matching_placename_in_group(group, data.placetypes, data.placename, data.alias_resolution) else if not data.key then internal_error("'.placename' or '.key' must be defined: %s", data) end key, spec = find_matching_key_in_group(group, data.placetypes, data.key, data.alias_resolution) end if key then return group, key, spec end end end end --[==[ Return the location matching a given description, where the description consists of either a placename or a key along with a list of possible placetypes. This is similar to `iterate_matching_location()` but throws an internal error if there is not exactly one location found; as such, it is for use with internally specified locations (such as the containers of known locations) rather than externally specified locations, which may not match a known location and in some cases may match multiple known locations. For finding an externally specified location, consider using `find_matching_holonym_location`, which returns {nil} rather than throwing an error if the location isn't found, but also (more importantly) checks to make sure there are no conflicting holonyms among the user-specified holonyms (e.g. {{tl|place|city|s/Delaware|c/USA|t=Newark}} will not match the known location `Newark` (in New Jersey, not Delaware). ]==] function export.get_matching_location(data) local all_found = {} for group, key, spec in export.iterate_matching_location(data) do insert(all_found, {group, key, spec}) end if not all_found[1] then internal_error("Couldn't find matching location for data %s", data) elseif all_found[2] then internal_error("Found multiple matching locations for data %s: %s", data, all_found) else return unpack(all_found[1]) end end --[==[ Successively iterate over a location's containers, and then the containers of those containers, etc. Keep in mind that locations may have multiple containers (e.g. Russia has both Europe and Asia as containers, and both Europe and Asia have Eurasia as their container). A given container will never be returned twice (e.g. in the case where a specific location A has locations B and C as containers, and B has C as its container, C will not be returned twice). An internal error happens if a container loop is detected. The return value is a list of location objects, each of which contains `group`, `key` and `spec` fields. ]==] function export.iterate_containers(group, key, spec) local keys_seen = {} keys_seen[key] = true local iterations = 0 local last_iteration_containers = {{group = group, key = key, spec = spec}} return function() iterations = iterations + 1 if iterations > 10 then internal_error("Probable loop in containers when processing key %s", key) end local next_iteration_containers = {} for _, location in ipairs(last_iteration_containers) do local containers = location.spec.containers if containers then for _, container in ipairs(containers) do local container_group, container_key, container_spec = export.get_matching_location { placetypes = container.placetype, key = container.key, } if not keys_seen[container_key] then insert(next_iteration_containers, { group = container_group, key = container_key, spec = container_spec }) keys_seen[container_key] = true end end end end if not next_iteration_containers[1] then return nil end last_iteration_containers = next_iteration_containers return next_iteration_containers end end --[==[ Given a placename, convert it into a link (two-part if `display_form` is given and differs from `placename`) and add `"the "` to the beginning if called for in `spec`. ]==] function export.construct_linked_placename(spec, placename, display_form) local linked_placename = display_form and placename ~= display_form and ("[[%s|%s]]"):format(placename, display_form) or ("[[%s]]"):format(placename) if spec.the then linked_placename = "the " .. linked_placename end return linked_placename end --[=[ This is typically used to define `key_to_placename`. It generates a function that chops off parts of a string (a location key), typically at the end, in order to get the full and elliptical versions of a placename. (See the documentation above for `key_to_placename` under "Location group tables" for the difference between full and elliptical placenames.) `container_patterns` is a Lua pattern or a list of possible patterns matching the container at the end of the key, which will be used to remove that container. If multiple patterns are specified, each one is tried until one matches. If `container_patterns` is omitted, this part of the process is skipped. The reulting string becomes the full placename. If `divtype_patterns` is specified, it is likewise either a Lua pattern or list of possible patterns to match and remove the political division affixed onto the end (or possibly the beginning) of the key in the keys of certain countries (such as South Korean and North Korean counties, which include the word "County" in the key). The resulting chopped string becomes the elliptical placename. If `divtype_patterns` is omitted, this part of the process is skipped and the full and elliptical placenames are the same. Typical usage is as follows: ``` key_to_placename = make_key_to_placename(", Anh$"), ``` or (when the political division is part of the key) ``` key_to_placename = make_key_to_placename(", Hàn Quốc$", "$") ``` ]=] local function make_key_to_placename(container_patterns, divtype_patterns) if type(container_patterns) == "string" then container_patterns = {container_patterns} end if type(divtype_patterns) == "string" then divtype_patterns = {divtype_patterns} end return function(key) local full_placename = key if container_patterns then for _, container_pattern in ipairs(container_patterns) do local nsubs full_placename, nsubs = full_placename:gsub(container_pattern, "") if nsubs > 0 then break end end end local elliptical_placename = full_placename if divtype_patterns then for _, divtype_pattern in ipairs(divtype_patterns) do local nsubs elliptical_placename, nsubs = elliptical_placename:gsub(divtype_pattern, "") if nsubs > 0 then break end end end return full_placename, elliptical_placename end end --[=[ This is typically used to define `placename_to_key`. It generates a function that appends a string to the end of a given placename to get the key (see the definition of `placename_to_key` above in the documentation under "Location group tables"). Optional `divtype_suffix` is a raw string (which should not contain hyphens or other characters that have special meaning in Lua patterns) to be appended first to the placename; if already present at the end, it is not appended. `container_suffix` is then added in the same fashion if given. Typical usage is like this: ``` placename_to_key = make_placename_to_key(", Anh") ``` (which will convert e.g. `"Hampshire"` into `"Hampshire, Anh"`) or ``` placename_to_key = make_placename_to_key(", Hàn Quốc", " County") ``` (which will convert e.g. `"Gangwon"` or `"Gangwon County"` into `"Gangwon, Hàn Quốc"`). ]=] local function make_placename_to_key(container_suffix, divtype_suffix) return function(placename) local key = placename if divtype_suffix then if not key:find(divtype_suffix .. "$") then key = key .. divtype_suffix end end if container_suffix then key = key .. container_suffix end return key end end --[=[ This is typically used to define `canonicalize_key_container`, which converts a container as specified in the location data into the canonical form containing both the full container key and its placetype. It generates a function to do the canonicalization of a given container. If the container is a string, `suffix` is appended onto the string (use {nil} or {""} if there is no suffix to append), and the placetype is set to `placetype`. Otherwise the container is left as-is. Typical usage is like this: ``` canonicalize_key_container = make_canonicalize_key_container(", Canada", "province") ``` which will convert e.g. `"Ontario"` into `{key = "Ontario, Canada", placetype = "province"}`. ]=] local function make_canonicalize_key_container(suffix, placetype) return function(container) if type(container) == "string" then return {key = container .. (suffix or ""), placetype = placetype} else return container end end end ----------------------------------------------------------------------------------- -- Top-level tables -- ----------------------------------------------------------------------------------- export.continents = { ["Trái Đất"] = {placetype = "planet", addl_parents = {"tự nhiên"}, fulldesc = "=là hành tinh thứ ba tính từ Mặt Trời", commonscat = "Earth"}, ["châu Phi"] = {placetype = "continent", commonscat = "Africa", container = {key = "Trái Đất", placetype = "planet"}}, ["châu Mỹ"] = {placetype = {"supercontinent", "continent"}, container = {key = "Trái Đất", placetype = "planet"}, keydesc = "[[America]], in the sense of [[North America]] and [[South America]] combined", wp = "Châu Mỹ"}, ["Americas"] = {alias_of = "châu Mỹ"}, ["America"] = {alias_of = "châu Mỹ"}, ["Bắc Mỹ"] = {placetype = "continent", container = {key = "châu Mỹ", placetype = "supercontinent"}}, ["Caribe"] = {the = true, placetype = {"continental region", "region"}, container = {key = "Bắc Mỹ", placetype = "continent"}}, ["Trung Mỹ"] = {placetype = {"continental region", "region"}, container = {key = "Bắc Mỹ", placetype = "continent"}}, ["Nam Mỹ"] = {placetype = "continent", container = {key = "châu Mỹ", placetype = "supercontinent"}}, ["châu Nam Cực"] = {placetype = "continent", container = {key = "Trái Đất", placetype = "planet"}, fulldesc = "=lục địa nằm xa về phía nam và tây nhất trên Trái Đất, chứa Cực Nam địa lý và nằm trong Vùng Nam Cực của Nam Bán cầu"}, ["Đại lục Á Âu"] = {placetype = {"supercontinent", "continent"}, container = {key = "Trái Đất", placetype = "planet"}, keydesc = "một khu vực đất đai rộng lớn, bao gồm châu Âu và châu Á"}, ["châu Á"] = {placetype = "continent", container = {key = "Đại lục Á Âu", placetype = "supercontinent"}}, ["châu Âu"] = {placetype = "continent", container = {key = "Đại lục Á Âu", placetype = "supercontinent"}}, ["châu Đại Dương"] = {placetype = "continent", container = {key = "Trái Đất", placetype = "planet"}}, ["Melanesia"] = {placetype = {"continental region", "region"}, container = {key = "châu Đại Dương", placetype = "continent"}}, ["Micronesia"] = {placetype = {"continental region", "region"}, container = {key = "châu Đại Dương", placetype = "continent"}}, ["Polynesia"] = {placetype = {"continental region", "region"}, container = {key = "châu Đại Dương", placetype = "continent"}}, } export.continents_group = { default_overriding_bare_label_parents = {}, -- container parents should be used default_divs = {{type = "quốc gia", prep = "của"}}, -- It's enough to mention the first-level continent or continent group. It seems excessive to write e.g. -- "El Salvador, a country in Central America, a continental region in North America, a continent in America, ...". default_no_include_container_in_desc = true, default_no_container_cat = true, default_no_container_parent = true, default_no_auto_augment_container = true, default_no_generic_place_cat = true, -- French Guyana is in France but not in Europe, which should not be an issue, so don't check holonym mismatches at -- this level. We also run into problems with supercontinents, which have "continent" as the fallback and cause -- mismatches. default_no_check_holonym_mismatch = true, data = export.continents, } -- Countries: including those with partial recognition that are normally considered countries (e.g. Kosovo, Taiwan). export.countries = { ["Afghanistan"] = {container = "châu Á", divs = {"provinces", "districts"}}, ["Albania"] = {container = "châu Âu", divs = {"counties", "municipalities", "communes", {type = "administrative units", cat_as = "communes"}, }, british_spelling = true}, ["Algeria"] = {container = "châu Phi", divs = {"provinces", "communes", "districts", "municipalities"}}, ["Andorra"] = {container = "châu Âu", divs = {"parishes"}, british_spelling = true}, ["Angola"] = {container = "châu Phi", divs = {"provinces", "municipalities"}}, ["Antigua and Barbuda"] = {container = "Caribe", divs = {"provinces"}, british_spelling = true}, ["Argentina"] = {container = "Nam Mỹ", divs = {"provinces", "departments", "municipalities"}}, ["Armenia"] = {container = {"châu Âu", "châu Á"}, divs = {"provinces", "districts", "municipalities"}, british_spelling = true}, ["Republic of Armenia"] = {alias_of = "Armenia"}, -- differs in "the" -- Both a country and continent ["Úc"] = {container = "châu Đại Dương", divs = { {type = "states", cat_as = "states and territories"}, {type = "territories", cat_as = "states and territories"}, {type = "ABBREVIATION_OF states", cat_as = "abbreviations of states and territories"}, {type = "ABBREVIATION_OF territories", cat_as = "abbreviations of states and territories"}, "local government areas", "dependent territories", }, british_spelling = true}, ["Australia"] = {alias_of = "Úc"}, ["Áo"] = {container = "châu Âu", divs = {"states", "districts", "municipalities"}, british_spelling = true}, ["Azerbaijan"] = {container = {"châu Âu", "châu Á"}, divs = {"districts", "municipalities"}, british_spelling = true}, ["Bahamas"] = {the = true, container = "Caribe", divs = {"districts"}, british_spelling = true, wp = "The %l"}, ["Bahrain"] = {container = "châu Á", divs = {"governorates"}}, ["Bangladesh"] = {container = "châu Á", divs = {"divisions", "districts", "municipalities"}, british_spelling = true}, ["Barbados"] = {container = "Caribe", divs = {"parishes"}, british_spelling = true}, ["Belarus"] = {container = "châu Âu", divs = {"regions", "districts"}, british_spelling = true}, ["Bỉ"] = {container = "châu Âu", divs = {"regions", "provinces", "municipalities"}, british_spelling = true}, ["Belize"] = {container = "Trung Mỹ", divs = {"districts"}, british_spelling = true}, ["Benin"] = {container = "châu Phi", divs = {"departments", "communes"}}, ["Bhutan"] = {container = "châu Á", divs = {"districts", "gewogs"}}, ["Bolivia"] = {container = "Nam Mỹ", divs = {"provinces", "departments", "municipalities"}}, ["Bosna và Hercegovina"] = {container = "châu Âu", divs = {"entities", "cantons", "municipalities"}, british_spelling = true}, ["Bosnia and Hercegovina"] = {alias_of = "Bosna và Hercegovina", display = true}, ["Bosnia và Hercegovina"] = {alias_of = "Bosna và Hercegovina", display = true}, ["Bosnia-Herzegovina"] = {alias_of = "Bosna và Hercegovina", display = true}, ["Bosnia-Hercegovina"] = {alias_of = "Bosna và Hercegovina", display = true}, ["Bosnia"] = {alias_of = "Bosna và Hercegovina", display = true}, ["Botswana"] = {container = "châu Phi", divs = {"districts", "subdistricts"}, british_spelling = true}, ["Brasil"] = {container = "Nam Mỹ", divs = { "states", "municipalities", "macroregions", {type = "ABBREVIATION_OF states", cat_as = "abbreviations of states"}, }}, ["Brazil"] = {alias_of = "Brasil", display = true}, ["Brunei"] = {container = "châu Á", divs = {"districts", "mukims"}, british_spelling = true}, ["Bulgaria"] = {container = "châu Âu", divs = {"provinces", "municipalities"}, british_spelling = true}, ["Burkina Faso"] = {container = "châu Phi", divs = {"regions", "departments", "provinces"}}, ["Burundi"] = {container = "châu Phi", divs = {"provinces", "communes"}}, ["Campuchia"] = {container = "châu Á", divs = {"provinces", "districts"}}, ["Cameroon"] = {container = "châu Phi", divs = {"regions", "departments"}}, ["Canada"] = {container = "Bắc Mỹ", divs = { {type = "provinces", cat_as = "provinces and territories"}, {type = "territories", cat_as = "provinces and territories"}, {type = "ABBREVIATION_OF provinces", cat_as = "abbreviations of provinces and territories"}, {type = "ABBREVIATION_OF territories", cat_as = "abbreviations of provinces and territories"}, "counties", "districts", "municipalities", "regional municipalities", "rural municipalities", "parishes", -- Don't change the following to something more politically correct (e.g. "First Nations reserves") until/unless -- the Canadian government makes a similar switch (and note that as of Apr 18 2025, the Wikipedia article is -- still at [[w:Indian reserves]]). "Indian reserves", "census divisions", {type = "townships", prep = "in"}, }, british_spelling = true}, ["Cape Verde"] = {container = "châu Phi", divs = {"municipalities", "parishes"}}, ["Cabo Verde"] = {alias_of = "Cape Verde", display = true}, ["Cộng hòa Trung Phi"] = {container = "châu Phi", divs = {"prefectures", "subprefectures"}}, ["CAR"] = {alias_of = "Cộng hòa Trung Phi", display = true}, ["C.A.R"] = {alias_of = "Cộng hòa Trung Phi", display = true}, ["Tchad"] = {container = "châu Phi", divs = {"regions", "departments"}}, ["Chad"] = {alias_of = "Tchad", display = true}, ["Chile"] = {container = "Nam Mỹ", divs = {"regions", "provinces", "communes"}}, ["Trung Quốc"] = {container = "châu Á", divs = { {type = "provinces", cat_as = "provinces and autonomous regions"}, {type = "autonomous regions", cat_as = "provinces and autonomous regions"}, {type = "FORMER provinces", cat_as = "former provinces"}, "special administrative regions", "prefectures", {type = "FORMER prefectures", cat_as = "former prefectures"}, "prefecture-level cities", {type = "counties", cat_as = "counties and county-level cities"}, {type = "county-level cities", cat_as = "counties and county-level cities"}, {type = "FORMER counties", cat_as = "former counties and county-level cities"}, {type = "FORMER county-level cities", cat_as = "former counties and county-level cities"}, -- "towns" (but not "townships") are automatically added as they are specified as generic_before_non_cities. "districts", {type = "FORMER districts", cat_as = "former districts"}, "subdistricts", "townships", "municipalities", {type = "direct-administered municipalities", cat_as = "municipalities"}, }}, ["People's Republic of China"] = {alias_of = "Trung Quốc"}, -- differs in "the" ["Colombia"] = {container = "Nam Mỹ", divs = {"departments", "municipalities"}}, ["Comoros"] = {the = true, container = "châu Phi", divs = {"autonomous islands"}}, ["Costa Rica"] = {container = "Trung Mỹ", divs = {"provinces", "cantons"}}, ["Croatia"] = {container = "châu Âu", divs = {"counties", "municipalities"}, british_spelling = true}, ["Cuba"] = {container = "Caribe", divs = {"provinces", "municipalities"}}, ["Cyprus"] = {container = {"châu Âu", "châu Á"}, divs = {"districts"}, british_spelling = true}, ["Czech Republic"] = {the = true, container = "châu Âu", divs = {"regions", "districts", "municipalities"}, british_spelling = true}, ["Czechia"] = {alias_of = "Czech Republic"}, -- differs in "the" ["Democratic Republic of the Congo"] = {the = true, container = "châu Phi", divs = {"provinces", "territories"}}, ["Congo"] = {alias_of = "Democratic Republic of the Congo", display = true, the = true}, ["DRC"] = {alias_of = "Democratic Republic of the Congo", display = true, the = true}, ["D.R.C"] = {alias_of = "Democratic Republic of the Congo", display = true, the = true}, ["Đan Mạch"] = {container = "châu Âu", divs = {"regions", "municipalities", "dependent territories"}, british_spelling = true, -- Wikipedia separates [[w:Denmark]] (constituent country) from [[w:Danish Realm]] (country) }, ["Djibouti"] = {container = "châu Phi", divs = {"regions", "districts"}}, ["Dominica"] = {container = "Caribe", divs = {"parishes"}, british_spelling = true}, ["Dominican Republic"] = {the = true, container = "Caribe", divs = {"provinces", "municipalities"}, keydesc = "the [[Dominican Republic]], the country that shares the [[Caribbean]] island of [[Hispaniola]] with [[Haiti]]"}, ["Đông Timor"] = {container = "châu Á", divs = {"municipalities"}, wp = "Timor-Leste"}, ["Timor-Leste"] = {alias_of = "Đông Timor", display = true}, ["Ecuador"] = {container = "Nam Mỹ", divs = {"provinces", "cantons"}}, ["Ai Cập"] = {container = "châu Phi", divs = {"governorates", "regions"}, british_spelling = true}, ["El Salvador"] = {container = "Trung Mỹ", divs = {"departments", "municipalities"}}, ["Guinea Xích Đạo"] = {container = "châu Phi", divs = {"provinces"}}, ["Eritrea"] = {container = "châu Phi", divs = {"regions", "subregions"}}, ["Estonia"] = {container = "châu Âu", divs = {"counties", "municipalities"}, british_spelling = true}, ["Eswatini"] = {container = "châu Phi", british_spelling = true}, ["Swaziland"] = {alias_of = "Eswatini", display = true}, ["Ethiopia"] = {container = "châu Phi", divs = {"regions", "zones"}}, ["Federated States of Micronesia"] = {the = true, container = "Micronesia", divs = {"states"}}, ["Micronesia"] = {alias_of = "Federated States of Micronesia"}, ["Fiji"] = {container = "Melanesia", divs = {"divisions", "provinces"}, british_spelling = true}, ["Phần Lan"] = {container = "châu Âu", divs = {"regions", "municipalities"}, british_spelling = true}, ["Pháp"] = {container = "châu Âu", divs = {"regions", "cantons", "collectivities", "communes", {type = "municipalities", cat_as = "communes"}, "departments", {type = "prefectures", cat_as = {"prefectures", "departmental capitals"}}, {type = "French prefectures", cat_as = {"prefectures", "departmental capitals"}}, "dependent territories", "territories", "provinces", }, british_spelling = true}, ["Gabon"] = {container = "châu Phi", divs = {"provinces", "departments"}}, ["Gambia"] = {the = true, container = "châu Phi", divs = {"divisions", "districts"}, british_spelling = true, wp = "The %l"}, ["Gruzia"] = {container = {"châu Âu", "châu Á"}, divs = {"regions", "districts"}, keydesc = "the country of [[Georgia]], in [[Eurasia]]", british_spelling = true, wp = "%l"}, ["Georgia"] = {alias_of = "Gruzia"}, ["Đức"] = {container = "châu Âu", divs = { "states", -- Bavaria, Baden-Württemberg, Hesse and North Rhine-Westphalia have administrative regions as divisions, but -- there aren't really enough of them to categorize per state. "regions", "municipalities", "districts"}, british_spelling = true}, ["Ghana"] = {container = "châu Phi", divs = {"regions", "districts"}, british_spelling = true}, ["Hy Lạp"] = {container = "châu Âu", divs = {"regions", "regional units", "municipalities", {type = "peripheries", cat_as = {"regions"}}, }, british_spelling = true}, ["Grenada"] = {container = "Caribe", divs = {"parishes"}, british_spelling = true}, ["Guatemala"] = {container = "Trung Mỹ", divs = {"departments", "municipalities"}}, ["Guinea"] = {container = "châu Phi", divs = {"regions", "prefectures"}}, ["Guinea-Bissau"] = {container = "châu Phi", divs = {"regions"}}, ["Guyana"] = {container = "Nam Mỹ", divs = {"regions"}, british_spelling = true}, ["Haiti"] = {container = "Caribe", divs = {"departments", "arrondissements"}}, ["Honduras"] = {container = "Trung Mỹ", divs = {"departments", "municipalities"}}, ["Hungary"] = {container = "châu Âu", divs = {"counties", "districts"}, british_spelling = true}, ["Iceland"] = {container = "châu Âu", divs = {"regions", "municipalities", "counties"}, british_spelling = true}, ["Ấn Độ"] = {container = "châu Á", divs = { {type = "states", cat_as = "states and union territories"}, {type = "union territories", cat_as = "states and union territories"}, {type = "ABBREVIATION_OF states", cat_as = "abbreviations of states and union territories"}, {type = "ABBREVIATION_OF union territories", cat_as = "abbreviations of states and union territories"}, "divisions", "districts", "municipalities", }, british_spelling = true}, ["Indonesia"] = {container = "châu Á", divs = {"regencies", "provinces", {type = "ABBREVIATION_OF provinces", cat_as = "abbreviations of provinces"}, }}, ["Iran"] = {container = "châu Á", divs = {"provinces", "counties"}}, ["Iraq"] = {container = "châu Á", divs = {"governorates", "districts"}}, ["Ireland"] = {container = "châu Âu", addl_parents = {"British Isles"}, divs = {"counties", "districts", "provinces"}, british_spelling = true, wp = "Republic of %l"}, ["Republic of Ireland"] = {alias_of = "Ireland"}, -- differs in "the" ["Israel"] = {container = "châu Á", divs = {"districts"}}, ["Ý"] = {container = "châu Âu", divs = { "regions", "provinces", "metropolitan cities", "municipalities", {type = "autonomous regions", cat_as = "regions"}, }, british_spelling = true}, ["Bờ Biển Ngà"] = {container = "châu Phi", divs = {"districts", "regions"}}, -- We should really be using Ivory Coast (common name) but there are political ramifications to the use of -- Côte d'Ivoire so don't make it a display alias. ["Côte d'Ivoire"] = {alias_of = "Bờ Biển Ngà"}, ["Jamaica"] = {container = "Caribe", divs = {"parishes"}, british_spelling = true}, ["Nhật Bản"] = {container = "châu Á", divs = {"prefectures", "subprefectures", "municipalities"}}, ["Jordan"] = {container = "châu Á", divs = {"governorates"}}, ["Kazakhstan"] = {container = {"châu Á", "châu Âu"}, divs = {"regions", "districts"}}, ["Kenya"] = {container = "châu Phi", divs = {"counties"}, british_spelling = true}, ["Kiribati"] = {container = "Micronesia", british_spelling = true}, ["Kosovo"] = {container = "châu Âu", divs = {"districts", "municipalities"}, british_spelling = true}, ["Kuwait"] = {container = "châu Á", divs = {"governorates", "areas"}}, ["Kyrgyzstan"] = {container = "châu Á", divs = {"regions", "districts"}}, ["Lào"] = {container = "châu Á", divs = {"provinces", "districts"}}, ["Latvia"] = {container = "châu Âu", divs = {"municipalities"}, british_spelling = true}, ["Lebanon"] = {container = "châu Á", divs = {"governorates", "districts"}}, ["Lesotho"] = {container = "châu Phi", divs = {"districts"}, british_spelling = true}, ["Liberia"] = {container = "châu Phi", divs = {"counties", "districts"}}, ["Libya"] = {container = "châu Phi", divs = {"districts", "municipalities"}}, ["Liechtenstein"] = {container = "châu Âu", divs = {"municipalities"}, british_spelling = true}, ["Litva"] = {container = "châu Âu", divs = {"counties", "municipalities"}, british_spelling = true}, ["Luxembourg"] = {container = "châu Âu", divs = {"cantons", "districts"}, british_spelling = true}, ["Madagascar"] = {container = "châu Phi", divs = {"regions", "districts"}}, ["Malawi"] = {container = "châu Phi", divs = {"regions", "districts"}, british_spelling = true}, ["Malaysia"] = {container = "châu Á", divs = {"states", "federal territories", "districts"}, british_spelling = true}, ["Maldives"] = {container = "châu Á", divs = {"provinces", "administrative atolls"}, british_spelling = true}, ["Mali"] = {container = "châu Phi", divs = {"regions", "cercles"}}, ["Malta"] = {container = "châu Âu", divs = {"regions", "local councils"}, british_spelling = true}, ["Marshall Islands"] = {the = true, container = "Micronesia", divs = {"municipalities"}}, ["Mauritania"] = {container = "châu Phi", divs = {"regions", "departments"}}, ["Mauritius"] = {container = "châu Phi", divs = {"districts"}, british_spelling = true}, ["Mexico"] = {container = "Bắc Mỹ", addl_parents = {"Trung Mỹ"}, divs = { "states", "municipalities", {type = "ABBREVIATION_OF states", cat_as = "abbreviations of states"}, }}, ["Moldova"] = {container = "châu Âu", divs = { {type = "districts", cat_as = "districts and autonomous territorial units"}, {type = "autonomous territorial units", cat_as = "districts and autonomous territorial units"}, "communes", "municipalities", }, british_spelling = true}, ["Monaco"] = {placetype = {"city-state", "quốc gia"}, container = "châu Âu", -- We want the first placetype to be 'city-state' so the description of Monaco says it's a city-state, but we -- want its parent to be "countries in Europe". bare_category_parent_type = {type = "quốc gia", prep = "của"}, is_city = true, british_spelling = true}, ["Mông Cổ"] = {container = "châu Á", divs = {"provinces", "districts"}}, ["Montenegro"] = {container = "châu Âu", divs = {"municipalities"}}, ["Maroc"] = {container = "châu Phi", divs = {"regions", "prefectures", "provinces"}}, ["Mozambique"] = {container = "châu Phi", divs = {"provinces", "districts"}}, ["Myanmar"] = {container = "châu Á", divs = {"regions", "states", "union territories", {type = "self-administered zones", cat_as = "self-administered areas"}, {type = "self-administered divisions", cat_as = "self-administered areas"}, "districts"}}, ["Burma"] = {alias_of = "Myanmar"}, -- not display-canonicalizing; has political connotations ["Namibia"] = {container = "châu Phi", divs = {"regions", "constituencies"}, british_spelling = true}, ["Nauru"] = {container = "Micronesia", divs = {"districts"}, british_spelling = true}, ["Nepal"] = {container = "châu Á", divs = {"provinces", "districts"}}, ["Netherlands"] = {the = true, placetype = {"quốc gia", "constituent country"}, container = "châu Âu", divs = {"provinces", "municipalities", {type = "FORMER municipalities", cat_as = "former municipalities"}, "dependent territories", "constituent countries"}, british_spelling = true, -- Wikipedia separates [[w:Netherlands]] (constituent country) from [[w:Kingdom of the Netherlands]] -- (country) }, ["New Zealand"] = {container = "Polynesia", divs = { "regions", "dependent territories", "territorial authorities", {type = "districts", cat_as = "territorial authorities"}, }, british_spelling = true}, ["Nicaragua"] = {container = "Trung Mỹ", divs = {"departments", "municipalities"}}, ["Niger"] = {container = "châu Phi", divs = {"regions", "departments"}}, ["Nigeria"] = {container = "châu Phi", divs = { "states", -- Categorize the Federal Capital Territory as a state because there's only one of it; we could categorize -- everything under 'states and territories' but that seems a bit pointless. {type = "federal territories", cat_as = "states"}, "local government areas", }, british_spelling = true}, ["Cộng hòa Dân chủ Nhân dân Triều Tiên"] = {container = "châu Á", addl_parents = {"Korea"}, divs = {"provinces", "counties"}}, ["North Macedonia"] = {container = "châu Âu", divs = {"regions", "municipalities"}, british_spelling = true}, ["Macedonia"] = {alias_of = "North Macedonia", display = true}, ["Republic of North Macedonia"] = {alias_of = "North Macedonia"}, -- differs in "the" ["Republic of Macedonia"] = {alias_of = "North Macedonia"}, -- differs in "the" ["Na Uy"] = {container = "châu Âu", divs = {"counties", "municipalities", "dependent territories", "districts", "unincorporated areas"}, british_spelling = true}, ["Oman"] = {container = "châu Á", divs = {"governorates", "provinces"}}, ["Pakistan"] = {container = "châu Á", divs = { {type = "provinces", cat_as = "provinces and territories"}, {type = "administrative territories", cat_as = "provinces and territories"}, {type = "federal territories", cat_as = "provinces and territories"}, {type = "territories", cat_as = "provinces and territories"}, "divisions", "districts", }, british_spelling = true}, ["Palau"] = {container = "Micronesia", divs = {"states"}}, ["Palestine"] = {container = "châu Á", divs = {"governorates"}}, ["State of Palestine"] = {alias_of = "Palestine"}, -- differs in "the" ["Panama"] = {container = "Trung Mỹ", divs = {"provinces", "districts"}}, ["Papua New Guinea"] = {container = "Melanesia", divs = {"provinces", "districts"}, british_spelling = true}, ["Paraguay"] = {container = "Nam Mỹ", divs = {"departments", "districts"}}, ["Peru"] = {container = "Nam Mỹ", divs = {"regions", "provinces", "districts"}}, ["Philippines"] = {the = true, container = "châu Á", divs = {"regions", "provinces", "districts", "municipalities", "barangays"}}, ["Ba Lan"] = {divs = {"voivodeships", "counties", {type = "Polish colonies", cat_as = {{type = "villages", prep = "in"}}}, }, container = "châu Âu", british_spelling = true}, ["Bồ Đào Nha"] = {container = "châu Âu", divs = { {type = "autonomous regions", cat_as = "districts and autonomous regions"}, {type = "districts", cat_as = "districts and autonomous regions"}, "provinces", "municipalities"}, british_spelling = true}, ["Qatar"] = {container = "châu Á", divs = {"municipalities", "zones"}}, ["Republic of the Congo"] = {the = true, container = "châu Phi", divs = {"departments", "districts"}}, ["Congo Republic"] = {alias_of = "Republic of the Congo", display = true, the = true}, ["Romania"] = {container = "châu Âu", divs = { "regions", "counties", "communes", {type = "ABBREVIATION_OF counties", cat_as = "abbreviations of counties"}, }, british_spelling = true}, ["Nga"] = {container = {"châu Âu", "châu Á"}, divs = { "federal subjects", "republics", "autonomous oblasts", "autonomous okrugs", "oblasts", "krais", "federal cities", "districts", "federal districts"}, british_spelling = true}, ["Rwanda"] = {container = "châu Phi", divs = {"provinces", "districts"}}, ["Saint Kitts and Nevis"] = {container = "Caribe", divs = {"parishes"}, british_spelling = true}, ["Saint Kitts"] = {alias_of = "Saint Kitts and Nevis", display = true}, ["Saint Lucia"] = {container = "Caribe", divs = {"districts"}, british_spelling = true}, ["Saint Vincent and the Grenadines"] = {container = "Caribe", divs = {"parishes"}, british_spelling = true}, ["Saint Vincent"] = {alias_of = "Saint Vincent and the Grenadines", display = true}, ["SVG"] = {alias_of = "Saint Vincent and the Grenadines", display = true}, ["S.V.G"] = {alias_of = "Saint Vincent and the Grenadines", display = true}, ["Samoa"] = {container = "Polynesia", divs = {"districts"}, british_spelling = true}, ["San Marino"] = {container = "châu Âu", divs = {"municipalities"}, british_spelling = true}, ["São Tomé and Príncipe"] = {container = "châu Phi", divs = {"districts"}}, ["São Tome and Principe"] = {alias_of = "São Tomé and Príncipe", display = true}, ["São Tomé"] = {alias_of = "São Tomé and Príncipe", display = true}, ["São Tome"] = {alias_of = "São Tomé and Príncipe", display = true}, ["Ả Rập Xê Út"] = {container = "châu Á", divs = {"provinces", "governorates"}}, ["Senegal"] = {container = "châu Phi", divs = {"regions", "departments"}}, ["Serbia"] = {container = "châu Âu", divs = {"districts", "municipalities", "autonomous provinces"}}, ["Seychelles"] = {container = "châu Phi", divs = {"districts"}, british_spelling = true}, ["Sierra Leone"] = {container = "châu Phi", divs = {"provinces", "districts"}, british_spelling = true}, ["Singapore"] = {container = "châu Á", divs = {"districts", "regions"}, british_spelling = true}, ["Slovakia"] = {container = "châu Âu", divs = {"regions", "districts"}, british_spelling = true}, ["Slovenia"] = {container = "châu Âu", divs = {"statistical regions", "municipalities"}, british_spelling = true}, -- Note: While the official name does not include "the" at the beginning, -- it sounds strange in English to leave it out and it's commonly included. ["Solomon Islands"] = {the = true, container = "Melanesia", divs = {"provinces"}, british_spelling = true}, ["Somalia"] = {container = "châu Phi", divs = {"regions", "districts"}}, ["South Africa"] = {container = "châu Phi", divs = { "provinces", "districts", {type = "district municipalities", cat_as = "districts"}, {type = "metropolitan municipalities", cat_as = "districts"}, "municipalities", }, british_spelling = true}, ["Hàn Quốc"] = {container = "châu Á", addl_parents = {"Korea"}, divs = {"provinces", "counties", "districts"}}, ["Nam Sudan"] = {container = "châu Phi", divs = {"regions", "states", "counties"}, british_spelling = true}, ["Tây Ban Nha"] = {container = "châu Âu", divs = {"autonomous communities", "provinces", "municipalities", "comarcas", "autonomous cities"}, british_spelling = true}, ["Sri Lanka"] = {container = "châu Á", divs = {"provinces", "districts"}, british_spelling = true}, ["Sudan"] = {container = "châu Phi", divs = {"states", "districts"}, british_spelling = true}, ["Suriname"] = {container = "Nam Mỹ", divs = {"districts"}}, ["Thụy Điển"] = {container = "châu Âu", divs = {"provinces", "counties", "municipalities"}, british_spelling = true}, ["Switzerland"] = {container = "châu Âu", divs = {"cantons", "municipalities", "districts"}, british_spelling = true}, ["Syria"] = {container = "châu Á", divs = {"governorates", "districts"}}, ["Đài Loan"] = {container = "châu Á", divs = {"counties", "districts", "townships", "special municipalities"}}, ["Republic of China"] = {alias_of = "Đài Loan"}, -- differs in "the", different political connotations ["Tajikistan"] = {container = "châu Á", divs = {"regions", "districts"}}, ["Tanzania"] = {container = "châu Phi", divs = {"regions", "districts"}, british_spelling = true}, ["Thái Lan"] = {container = "châu Á", divs = {"provinces", "districts", "subdistricts"}}, ["Togo"] = {container = "châu Phi", divs = {"provinces", "prefectures"}}, ["Tonga"] = {container = "Polynesia", divs = {"divisions"}, british_spelling = true}, ["Trinidad and Tobago"] = {container = "Caribe", divs = {"regions", "municipalities"}, british_spelling = true}, ["Tunisia"] = {container = "châu Phi", divs = {"governorates", "delegations"}}, ["Thổ Nhĩ Kỳ"] = {container = {"châu Âu", "châu Á"}, divs = {"provinces", "districts"}}, -- Foreign names generally get display-canonicalized. ["Türkiye"] = {alias_of = "Thổ Nhĩ Kỳ", display = true}, ["Turkmenistan"] = {container = "châu Á", divs = { -- The 5 regions are often also called provinces "regions", {type = "provinces", cat_as = "regions"}, "districts"}, }, ["Tuvalu"] = {container = "Polynesia", divs = {"atolls"}, british_spelling = true}, ["Uganda"] = {container = "châu Phi", divs = {"districts", "counties"}, british_spelling = true}, ["Ukraina"] = {container = "châu Âu", divs = { {type = "oblasts", cat_as = "oblasts and autonomous republics"}, {type = "autonomous republics", cat_as = "oblasts and autonomous republics"}, "raions", "hromadas", }, british_spelling = true}, ["United Arab Emirates"] = {the = true, container = "châu Á", divs = {"emirates"}}, -- Abbreviations get display-canonicalized. ["UAE"] = {alias_of = "United Arab Emirates", display = true, the = true}, ["U.A.E."] = {alias_of = "United Arab Emirates", display = true, the = true}, ["United Kingdom"] = {the = true, container = "châu Âu", addl_parents = {"British Isles"}, divs = {"constituent countries", "counties", "districts", "boroughs", "territories", "dependent territories", "traditional counties"}, keydesc = "the [[United Kingdom]] of Great Britain and Northern Ireland", british_spelling = true}, -- Abbreviations get display-canonicalized. ["UK"] = {alias_of = "United Kingdom", display = true, the = true}, ["U.K."] = {alias_of = "United Kingdom", display = true, the = true}, ["Hoa Kỳ"] = {container = "Bắc Mỹ", divs = {"counties", "county seats", "states", "territories", "dependent territories", {type = "ABBREVIATION_OF states", cat_as = "abbreviations of states"}, {type = "DEROGATORY_NAME_FOR states", cat_as = "derogatory names for states"}, {type = "NICKNAME_FOR states", cat_as = "nicknames for states"}, {type = "OFFICIAL_NICKNAME_FOR states", cat_as = "official nicknames for states"}, {type = "boroughs", prep = "in"}, -- exist in Pennsylvania and New Jersey "municipalities", -- these exist politically at least in Colorado and Connecticut {type = "census-designated places", prep = "in"}, {type = "unincorporated communities", prep = "in"}, -- Don't change the following to something more politically correct until/unless the US government makes a -- similar switch (and note that as of Apr 18 2025, the Wikipedia article is still at -- [[w:Indian reservations]]). "Indian reservations", }}, -- Abbreviations and long forms (when possible) get display-canonicalized. ["US"] = {alias_of = "Hoa Kỳ", display = true, the = true}, ["U.S."] = {alias_of = "Hoa Kỳ", display = true, the = true}, ["USA"] = {alias_of = "Hoa Kỳ", display = true, the = true}, ["U.S.A."] = {alias_of = "Hoa Kỳ", display = true, the = true}, ["United States of America"] = {alias_of = "Hoa Kỳ", display = true, the = true}, ["Uruguay"] = {container = "Nam Mỹ", divs = {"departments", "municipalities"}}, ["Uzbekistan"] = {container = "châu Á", divs = {"regions", "districts"}}, ["Vanuatu"] = {container = "Melanesia", divs = {"provinces"}, british_spelling = true}, ["Vatican City"] = {placetype = {"city-state", "quốc gia"}, container = "châu Âu", -- First placetype should be 'city-state' for to shown up in its description, -- Its parent should still be "countries in Europe". bare_category_parent_type = {type = "quốc gia", prep = "của"}, addl_parents = {"Rome"}, is_city = true, british_spelling = true}, ["Vatican"] = {alias_of = "Vatican City"}, -- differs in "the" ["Venezuela"] = {container = "Nam Mỹ", divs = {"states", "municipalities"}}, ["Việt Nam"] = {container = "châu Á", divs = {"provinces", "districts", "municipalities"}}, ["Western Sahara"] = {placetype = {"territory", "quốc gia"}, container = "châu Phi", bare_category_parent_type = {type = "quốc gia", prep = "của"}, }, -- Not display-canonicalizable both due to differences in 'the' and the sovereignty dispute over Western Sahara ["Sahrawi Arab Democratic Republic"] = {alias_of = "Western Sahara"}, ["SADR"] = {alias_of = "Sahrawi Arab Democratic Republic", display = true, the = true}, ["Yemen"] = {container = "châu Á", divs = {"governorates", "districts"}}, ["Zambia"] = {container = "châu Phi", divs = {"provinces", "districts"}, british_spelling = true}, ["Zimbabwe"] = {container = "châu Phi", divs = {"provinces", "districts"}, british_spelling = true}, } local function canonicalize_continent_container(key) if type(key) ~= "string" then return key end if export.continents[key] then return {key = key, placetype = export.continents[key].placetype} end internal_error("Unrecognized key %s in `canonicalize_continent_like`", key) end export.countries_group = { canonicalize_key_container = canonicalize_continent_container, default_overriding_bare_label_parents = {"+++", "quốc gia"}, default_placetype = "quốc gia", default_no_container_cat = true, default_no_container_parent = true, -- No need to augment country holonyms with continents; not needed for disambiguation. default_no_auto_augment_container = true, data = export.countries, } -- Country-like entities: typically overseas territories or de-facto independent countries, which in both cases -- are not internationally recognized as sovereign nations but which we treat similarly to countries. export.country_like_entities = { -- British Overseas Territory ["Akrotiri and Dhekelia"] = { placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Cyprus", "châu Âu", "châu Á"}, british_spelling = true, }, -- Åland: Listed as a region of Finland. Wikipedia lists this under "dependent territories" in -- [[w:List of sovereign states and dependent territories by continent]]. -- unincorporated territory of the United States ["American Samoa"] = { placetype = {"unincorporated territory", "overseas territory", "territory"}, container = "Hoa Kỳ", addl_parents = {"Polynesia"}, }, -- British Overseas Territory ["Anguilla"] = { placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Caribe"}, british_spelling = true, }, -- de-facto independent state, internationally recognized as part of Georgia ["Abkhazia"] = { placetype = {"unrecognized country", "quốc gia"}, addl_parents = {"Georgia", "châu Âu", "châu Á"}, divs = {"districts"}, keydesc = "the de-facto independent state of [[Abkhazia]], internationally recognized as part of the country of [[Georgia]]", british_spelling = true, }, -- Australian external territory ["Ashmore and Cartier Islands"] = { the = true, placetype = {"external territory", "territory"}, container = "Úc", addl_parents = {"châu Á"}, }, -- constituent country of the Netherlands ["Aruba"] = { placetype = {"constituent country", "quốc gia"}, container = "Netherlands", addl_parents = {"Caribe"}, british_spelling = true, }, -- British Overseas Territory ["Bermuda"] = { placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Bắc Mỹ"}, british_spelling = true, }, -- special municipality of the Netherlands ["Bonaire"] = { placetype = {"special municipality", "municipality", "overseas territory", "territory"}, container = "Netherlands", addl_parents = {"Caribe"}, is_city = true, british_spelling = true, }, -- British Overseas Territory ["British Indian Ocean Territory"] = { the = true, placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"châu Á"}, british_spelling = true, }, -- British Overseas Territory ["British Virgin Islands"] = { the = true, placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Caribe"}, british_spelling = true, }, -- Norwegian dependent territory ["Bouvet Island"] = { placetype = {"dependent territory", "territory"}, container = "Na Uy", addl_parents = {"châu Phi"}, british_spelling = true, }, -- British Overseas Territory ["Cayman Islands"] = { the = true, placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Caribe"}, british_spelling = true, }, -- Australian external territory ["Christmas Island"] = { placetype = {"external territory", "territory"}, container = "Úc", addl_parents = {"châu Á"}, british_spelling = true, }, -- Sui generis French "state private property" per Wikipedia; classify as overseas territory like the -- French Southern and Antarctic Lands. ["Clipperton Island"] = { placetype = {"overseas territory", "territory"}, container = "Pháp", addl_parents = {"Bắc Mỹ"}, }, -- Australian external territory; also called the Keeling Islands or (officially) the Cocos (Keeling) Islands ["Cocos Islands"] = { the = true, placetype = {"external territory", "territory"}, container = "Úc", addl_parents = {"châu Á"}, wp = "Cocos (Keeling) Islands", british_spelling = true, }, ["Cocos (Keeling) Islands"] = {alias_of = "Cocos Islands", display = true, the = true}, ["Keeling Islands"] = {alias_of = "Cocos Islands", display = true, the = true}, -- self-governing but in free association with New Zealand ["Cook Islands"] = { the = true, placetype = {"quốc gia"}, container = "New Zealand", addl_parents = {"Polynesia"}, british_spelling = true, }, -- constituent country of the Netherlands ["Curaçao"] = { placetype = {"constituent country", "quốc gia"}, container = "Netherlands", addl_parents = {"Caribe"}, british_spelling = true, }, -- special territory of Chile ["Easter Island"] = { placetype = {"special territory", "territory"}, container = "Chile", addl_parents = {"Polynesia"}, }, -- British Overseas Territory ["Falkland Islands"] = { the = true, placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Nam Mỹ"}, british_spelling = true, }, -- autonomous territory of Denmark ["Faroe Islands"] = { the = true, placetype = {"autonomous territory", "territory"}, container = "Đan Mạch", addl_parents = {"châu Âu"}, british_spelling = true, }, -- overseas department and region of France ["French Guiana"] = { placetype = {"overseas department", "department", "administrative region", "region"}, container = "Pháp", divs = {"communes"}, addl_parents = {"Nam Mỹ"}, british_spelling = true, }, -- overseas collectivity of France ["French Polynesia"] = { placetype = {"overseas collectivity", "collectivity"}, container = "Pháp", addl_parents = {"Polynesia"}, british_spelling = true, }, -- French overseas territory ["French Southern and Antarctic Lands"] = { the = true, placetype = {"overseas territory", "territory"}, container = "Pháp", addl_parents = {"châu Phi"}, }, -- British Overseas Territory ["Gibraltar"] = { placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"châu Âu"}, is_city = true, british_spelling = true, }, -- autonomous territory of Denmark ["Greenland"] = { placetype = {"autonomous territory", "territory"}, container = "Đan Mạch", addl_parents = {"Bắc Mỹ"}, divs = {"municipalities"}, british_spelling = true, }, -- overseas department and region of France ["Guadeloupe"] = { placetype = {"overseas department", "department", "administrative region", "region"}, container = "Pháp", addl_parents = {"Caribe"}, divs = {"communes"}, british_spelling = true, }, -- unincorporated territory of the United States ["Guam"] = { placetype = {"unincorporated territory", "overseas territory", "territory"}, container = "Hoa Kỳ", addl_parents = {"Micronesia"}, }, -- self-governing British Crown dependency; technically called the Bailiwick of Guernsey ["Guernsey"] = { placetype = {"crown dependency", "dependency", "dependent territory", "bailiwick", "territory"}, container = "United Kingdom", addl_parents = {"British Isles", "châu Âu"}, british_spelling = true, wp = "Bailiwick of %l", }, ["Bailiwick of Guernsey"] = {alias_of = "Guernsey"}, -- Australian external territory ["Heard Island and McDonald Islands"] = { the = true, placetype = {"external territory", "territory"}, container = "Úc", addl_parents = {"châu Phi"}, }, -- special administrative region of China ["Hồng Kông"] = { placetype = {"special administrative region", "thành phố"}, container = "Trung Quốc", is_city = true, british_spelling = true, }, -- self-governing British Crown dependency ["Isle of Man"] = { the = true, placetype = {"crown dependency", "dependency", "dependent territory", "territory"}, container = "United Kingdom", addl_parents = {"British Isles", "châu Âu"}, british_spelling = true, }, -- Norwegian unincorporated area ["Jan Mayen"] = { placetype = {"unincorporated area", "dependent territory", "territory", "island"}, container = "Na Uy", addl_parents = {"châu Âu"}, british_spelling = true, }, -- self-governing British Crown dependency; technically called the Bailiwick of Jersey ["Jersey"] = { placetype = {"crown dependency", "dependency", "dependent territory", "bailiwick", "territory"}, container = "United Kingdom", addl_parents = {"British Isles", "châu Âu"}, british_spelling = true, }, ["Bailiwick of Jersey"] = {alias_of = "Jersey"}, -- special administrative region of China ["Ma Cao"] = { placetype = {"special administrative region", "thành phố"}, container = "Trung Quốc", is_city = true, british_spelling = true, }, -- overseas department and region of France ["Martinique"] = { placetype = {"overseas department", "department", "administrative region", "region"}, container = "Pháp", divs = {"communes"}, addl_parents = {"Caribe"}, british_spelling = true, }, -- overseas department and region of France ["Mayotte"] = { placetype = {"overseas department", "department", "administrative region", "region"}, container = "Pháp", divs = {"communes"}, addl_parents = {"châu Phi"}, british_spelling = true, }, -- British Overseas Territory ["Montserrat"] = { placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Caribe"}, british_spelling = true, }, -- special collectivity of France ["New Caledonia"] = { placetype = {"special collectivity", "collectivity"}, container = "Pháp", addl_parents = {"Melanesia"}, british_spelling = true, }, -- dependent territory of New Zealand ["New Zealand Subantarctic Islands"] = { the = true, placetype = {"dependent territory", "territory"}, container = "New Zealand", addl_parents = {"Antarctica"}, british_spelling = true, }, -- self-governing but in free association with New Zealand ["Niue"] = { placetype = {"quốc gia"}, container = "New Zealand", addl_parents = {"Polynesia"}, british_spelling = true, }, -- Australian external territory ["Norfolk Island"] = { placetype = {"external territory", "territory"}, container = "Úc", addl_parents = {"Polynesia"}, british_spelling = true, }, -- de-facto independent state, internationally recognized as part of Cyprus ["Northern Cyprus"] = { placetype = {"unrecognized country", "quốc gia"}, addl_parents = {"Cyprus", "Thổ Nhĩ Kỳ", "châu Âu", "châu Á"}, divs = {"districts"}, keydesc = "the de-facto independent state of [[Northern Cyprus]], internationally recognized as part of the country of [[Cyprus]]", british_spelling = true, }, -- commonwealth, unincorporated territory of the United States ["Northern Mariana Islands"] = { the = true, placetype = {"commonwealth", "unincorporated territory", "overseas territory", "territory"}, container = "Hoa Kỳ", addl_parents = {"Micronesia"}, }, -- British Overseas Territory ["Pitcairn Islands"] = { the = true, placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Polynesia"}, british_spelling = true, }, -- commonwealth of the United States ["Puerto Rico"] = { placetype = {"commonwealth", "overseas territory", "territory"}, container = "Hoa Kỳ", addl_parents = {"Caribe"}, divs = {"municipalities"}, }, -- overseas department and region of France ["Réunion"] = { placetype = {"overseas department", "department", "administrative region", "region"}, container = "Pháp", divs = {"communes"}, addl_parents = {"châu Phi"}, british_spelling = true, }, -- special municipality of the Netherlands ["Saba"] = { placetype = {"special municipality", "municipality", "overseas territory", "territory"}, container = "Netherlands", addl_parents = {"Caribe"}, is_city = true, british_spelling = true, }, -- overseas collectivity of France ["Saint Barthélemy"] = { placetype = {"overseas collectivity", "collectivity"}, container = "Pháp", addl_parents = {"Caribe"}, british_spelling = true, }, -- British Overseas Territory ["Saint Helena, Ascension and Tristan da Cunha"] = { placetype = {"overseas territory", "territory"}, container = "United Kingdom", divs = {{type = "constituent parts", container_parent_type = false}}, addl_parents = {"Atlantic Ocean", "châu Phi"}, british_spelling = true, }, -- constituent parts of the combined oveseas territory ["Ascension Island"] = { placetype = {"constituent part", "territory", "island"}, container = {key = "Saint Helena, Ascension and Tristan da Cunha", placetype = "overseas territory"}, addl_parents = {"Atlantic Ocean"}, overriding_bare_label_parents = {}, no_container_cat = false, no_container_parent = false, no_auto_augment_container = false, }, ["Saint Helena"] = { placetype = {"constituent part", "territory", "island"}, container = {key = "Saint Helena, Ascension and Tristan da Cunha", placetype = "overseas territory"}, addl_parents = {"Atlantic Ocean"}, overriding_bare_label_parents = {}, no_container_cat = false, no_container_parent = false, no_auto_augment_container = false, }, ["Tristan da Cunha"] = { placetype = {"constituent part", "territory", "archipelago"}, container = {key = "Saint Helena, Ascension and Tristan da Cunha", placetype = "overseas territory"}, addl_parents = {"Atlantic Ocean"}, overriding_bare_label_parents = {}, no_container_cat = false, no_container_parent = false, no_auto_augment_container = false, }, -- overseas collectivity of France ["Saint Martin"] = { placetype = {"overseas collectivity", "collectivity"}, container = "Pháp", addl_parents = {"Caribe"}, british_spelling = true, }, -- overseas collectivity of France ["Saint Pierre and Miquelon"] = { placetype = {"overseas collectivity", "collectivity"}, container = "Pháp", divs = {"communes"}, addl_parents = {"Bắc Mỹ"}, british_spelling = true, }, -- special municipality of the Netherlands ["Sint Eustatius"] = { placetype = {"special municipality", "municipality", "overseas territory", "territory"}, container = "Netherlands", addl_parents = {"Caribe"}, is_city = true, british_spelling = true, }, -- constituent country of the Netherlands ["Sint Maarten"] = { placetype = {"constituent country", "quốc gia"}, container = "Netherlands", addl_parents = {"Caribe"}, british_spelling = true, }, -- de-facto independent state, internationally recognized as part of Somalia ["Somaliland"] = { placetype = {"unrecognized country", "quốc gia"}, addl_parents = {"Somalia", "châu Phi"}, keydesc = "the de-facto independent state of [[Somaliland]], internationally recognized as part of the country of [[Somalia]]", british_spelling = true, }, -- British Overseas Territory -- FIXME: We should form the group "South Georgia and the South Sandwich Islands" like we did for -- "Saint Helena, Ascension and Tristan da Cunha". ["South Georgia"] = { placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Atlantic Ocean"}, british_spelling = true, }, -- de-facto independent state, internationally recognized as part of Georgia ["South Ossetia"] = { placetype = {"unrecognized country", "quốc gia"}, addl_parents = {"Georgia", "châu Âu", "châu Á"}, keydesc = "the de-facto independent state of [[South Ossetia]], internationally recognized as part of the country of [[Georgia]]", british_spelling = true, }, -- British Overseas Territory ["South Sandwich Islands"] = { the = true, placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Atlantic Ocean"}, wp = true, wpcat = "South Georgia and the South Sandwich Islands", british_spelling = true, }, -- Norwegian unincorporated area ["Svalbard"] = { placetype = {"unincorporated area", "dependent territory", "territory", "archipelago"}, container = "Na Uy", addl_parents = {"châu Âu"}, british_spelling = true, }, -- dependent territory of New Zealand ["Tokelau"] = { placetype = {"dependent territory", "territory"}, container = "New Zealand", addl_parents = {"Polynesia"}, british_spelling = true, }, -- de-facto independent state, internationally recognized as part of Moldova ["Transnistria"] = { placetype = {"unrecognized country", "quốc gia"}, addl_parents = {"Moldova", "châu Âu"}, keydesc = "the de-facto independent state of [[Transnistria]], internationally recognized as part of [[Moldova]]", british_spelling = true, }, -- British Overseas Territory ["Turks and Caicos Islands"] = { the = true, placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Caribe"}, british_spelling = true, }, -- unincorporated territory of the United States ["United States Minor Outlying Islands"] = { the = true, placetype = {"unincorporated territory", "overseas territory", "territory"}, container = "Hoa Kỳ", addl_parents = {"Islands", "Micronesia", "Polynesia", "Caribe"}, }, -- FIXME: We should add entries for the other minor outlying islands. -- Baker Island (Oceania) -- Howland Island (Oceania) -- Jarvis Island (Oceania) -- Johnston Atoll (Oceania) -- Kingman Reef (Oceania) -- Midway Atoll (Oceania) -- Navassa Island (Caribbean) -- Palmyra Atoll (Oceania) -- Wake Island (Oceania) ["Wake Island"] = { placetype = {"unincorporated territory", "overseas territory", "territory"}, container = "Hoa Kỳ", addl_parents = {"Micronesia"}, }, -- unincorporated territory of the United States ["United States Virgin Islands"] = { the = true, placetype = {"unincorporated territory", "overseas territory", "territory"}, container = "Hoa Kỳ", addl_parents = {"Caribe"}, }, ["U.S. Virgin Islands"] = {alias_of = "United States Virgin Islands", display = true, the = true}, ["US Virgin Islands"] = {alias_of = "United States Virgin Islands", display = true, the = true}, -- overseas collectivity of France ["Wallis and Futuna"] = { placetype = {"overseas collectivity", "collectivity"}, container = "Pháp", addl_parents = {"Polynesia"}, british_spelling = true, }, } export.country_like_entities_group = { -- don't do any transformations between key and placename; in particular, don't chop off anything from -- "Saint Helena, Ascension and Tristan da Cunha". key_to_placename = false, placename_to_key = false, canonicalize_key_container = make_canonicalize_key_container(nil, "quốc gia"), default_overriding_bare_label_parents = {"country-like entities"}, default_no_container_cat = true, default_no_container_parent = true, -- These entities often aren't really part of their container; a village in Wallis and Futuna (an overseas -- collectivity of France in Polynesia), for example, shouldn't be treated as a village in France, nor as a village -- in Europe. default_no_auto_augment_container = true, data = export.country_like_entities, } -- Former countries and such; we don't create "Cities in ..." categories because they don't exist anymore export.former_countries = { -- de-facto independent state of Armenian ethnicity, internationally recognized as part of Azerbaijan -- (also known as Nagorno-Karabakh) -- NOTE: Formerly listed Armenia as a parent; this seems politically non-neutral so I've taken it out. ["Artsakh"] = { placetype = {"unrecognized country", "quốc gia"}, addl_parents = {"Azerbaijan", "châu Âu", "châu Á"}, keydesc = "the former de-facto independent state of [[Artsakh]], internationally recognized as part of [[Azerbaijan]]", british_spelling = true, }, ["Nagorno-Karabakh"] = {alias_of = "Artsakh"}, ["Czechoslovakia"] = {container = "châu Âu", british_spelling = true}, ["East Germany"] = {container = "châu Âu", addl_parents = {"Đức"}, british_spelling = true}, ["North Vietnam"] = {container = "châu Á", addl_parents = {"Vietnam"}}, ["Persia"] = {placetype = {"empire", "quốc gia"}, container = "châu Á", divs = {"provinces"}}, ["Byzantine Empire"] = { the = true, placetype = {"empire", "quốc gia"}, container = {"châu Âu", "châu Phi", "châu Á"}, addl_parents = {"Ancient Europe", "Ancient Near East"}, divs = { "provinces", "themes", }}, ["Roman Empire"] = { the = true, placetype = {"empire", "quốc gia"}, container = {"châu Âu", "châu Phi", "châu Á"}, addl_parents = {"Rome"}, divs = { "provinces", {type = "FORMER provinces", cat_as = "provinces"}, }}, ["Việt Nam Cộng hòa"] = {container = "châu Á", commonscat = "South Vietnam", addl_parents = {"Việt Nam"}}, ["Soviet Union"] = { the = true, container = {"châu Âu", "châu Á"}, divs = {"republics", "autonomous republics"}, british_spelling = true}, ["West Germany"] = {container = "châu Âu", addl_parents = {"Đức"}, british_spelling = true}, ["Yugoslavia"] = {container = "châu Âu", divs = {"districts"}, keydesc = "the former [[Kingdom of Yugoslavia]] (1918–1943) or the former [[Socialist Federal Republic of Yugoslavia]] (1943–1992)", british_spelling = true}, } export.former_countries_group = { canonicalize_key_container = canonicalize_continent_container, default_overriding_bare_label_parents = {"former countries and country-like entities"}, default_is_former_place = true, default_placetype = "quốc gia", default_no_container_cat = true, default_no_container_parent = true, -- No need to augment country holonyms with continents; not needed for disambiguation. default_no_auto_augment_container = true, data = export.former_countries, } ----------------------------------------------------------------------------------- -- Subpolity tables -- ----------------------------------------------------------------------------------- export.australia_states_and_territories = { ["Lãnh thổ Thủ đô Úc, Úc"] = {placetype = "territory"}, ["Jervis Bay Territory, Úc"] = {placetype = "territory"}, ["New South Wales, Úc"] = {}, ["Northern Territory, Úc"] = {placetype = "territory"}, ["Queensland, Úc"] = {}, ["South Australia, Úc"] = {}, ["Tasmania, Úc"] = {}, ["Victoria, Úc"] = {}, ["Western Australia, Úc"] = {}, } -- states and territories of Australia export.australia_group = { default_container = "Úc", default_placetype = "state", default_divs = "local government areas", data = export.australia_states_and_territories, } export.austria_states = { ["Vienna, Austria"] = {}, ["Lower Austria, Austria"] = {}, ["Upper Austria, Austria"] = {}, ["Styria, Austria"] = {}, ["Tyrol, Austria"] = {wp = "Tyrol (state)"}, ["Carinthia, Austria"] = {}, ["Salzburg, Austria"] = {wp = "Salzburg (state)"}, ["Vorarlberg, Austria"] = {}, ["Burgenland, Austria"] = {}, } -- states of Austria export.austria_group = { default_container = "Áo", default_placetype = "state", default_divs = "municipalities", data = export.austria_states, } export.bangladesh_divisions = { ["Barisal Division, Bangladesh"] = {}, ["Chittagong Division, Bangladesh"] = {}, ["Dhaka Division, Bangladesh"] = {}, ["Khulna Division, Bangladesh"] = {}, ["Mymensingh Division, Bangladesh"] = {}, ["Rajshahi Division, Bangladesh"] = {}, ["Rangpur Division, Bangladesh"] = {}, ["Sylhet Division, Bangladesh"] = {}, } -- divisions of Bangladesh export.bangladesh_group = { key_to_placename = make_key_to_placename(", Bangladesh$", " Division$"), placename_to_key = make_placename_to_key(", Bangladesh", " Division"), default_container = "Bangladesh", default_placetype = "division", default_divs = "districts", data = export.bangladesh_divisions, } export.brazil_states = { ["Acre, Brazil"] = {wp = "%l (state)"}, ["Alagoas, Brazil"] = {}, ["Amapá, Brazil"] = {}, ["Amazonas, Brazil"] = {wp = "%l (Brazilian state)"}, ["Bahia, Brazil"] = {}, ["Ceará, Brazil"] = {}, ["Distrito Federal, Brazil"] = {wp = "Federal District (Brazil)"}, ["Espírito Santo, Brazil"] = {}, ["Goiás, Brazil"] = {}, ["Maranhão, Brazil"] = {}, ["Mato Grosso, Brazil"] = {}, ["Mato Grosso do Sul, Brazil"] = {}, ["Minas Gerais, Brazil"] = {}, ["Pará, Brazil"] = {}, ["Paraíba, Brazil"] = {}, ["Paraná, Brazil"] = {wp = "%l (state)"}, ["Pernambuco, Brazil"] = {}, ["Piauí, Brazil"] = {}, ["Rio de Janeiro, Brazil"] = {wp = "%l (state)"}, ["Rio Grande do Norte, Brazil"] = {}, ["Rio Grande do Sul, Brazil"] = {}, ["Rondônia, Brazil"] = {}, ["Roraima, Brazil"] = {}, ["Santa Catarina, Brazil"] = {wp = "%l (state)"}, ["São Paulo, Brazil"] = {wp = "%l (state)"}, ["Sergipe, Brazil"] = {}, ["Tocantins, Brazil"] = {}, } -- states of Brazil export.brazil_group = { default_container = "Brazil", default_placetype = "state", default_divs = "municipalities", data = export.brazil_states, } -- provinces (a.k.a. oblasts) of Bulgaria export.bulgaria_provinces = { ["Blagoevgrad Province, Bulgaria"] = {}, ["Burgas Province, Bulgaria"] = {}, ["Dobrich Province, Bulgaria"] = {}, ["Gabrovo Province, Bulgaria"] = {}, ["Haskovo Province, Bulgaria"] = {}, ["Kardzhali Province, Bulgaria"] = {}, ["Kyustendil Province, Bulgaria"] = {}, ["Lovech Province, Bulgaria"] = {}, ["Montana Province, Bulgaria"] = {}, ["Pazardzhik Province, Bulgaria"] = {}, ["Pernik Province, Bulgaria"] = {}, ["Pleven Province, Bulgaria"] = {}, ["Plovdiv Province, Bulgaria"] = {}, ["Razgrad Province, Bulgaria"] = {}, ["Ruse Province, Bulgaria"] = {}, ["Shumen Province, Bulgaria"] = {}, ["Silistra Province, Bulgaria"] = {}, ["Sliven Province, Bulgaria"] = {}, ["Smolyan Province, Bulgaria"] = {}, ["Sofia City Province, Bulgaria"] = {}, ["Sofia Province, Bulgaria"] = {}, ["Stara Zagora Province, Bulgaria"] = {}, ["Targovishte Province, Bulgaria"] = {}, ["Varna Province, Bulgaria"] = {}, ["Veliko Tarnovo Province, Bulgaria"] = {}, ["Vidin Province, Bulgaria"] = {}, ["Vratsa Province, Bulgaria"] = {}, ["Yambol Province, Bulgaria"] = {}, } export.bulgaria_group = { key_to_placename = make_key_to_placename(", Bulgaria$", " Province$"), placename_to_key = make_placename_to_key(", Bulgaria", " Province"), default_container = "Bulgaria", --== source: https://en.wikipedia.org/wiki/NUTS_statistical_regions_of_Bulgaria == divs = {"regions", "planning regions", "provinces", "municipalities", "settlements"}, default_placetype = "province", data = export.bulgaria_provinces, } export.canada_provinces_and_territories = { ["Alberta, Canada"] = {divs = { {type = "municipal districts", container_parent_type = "rural municipalities"}, }}, ["British Columbia, Canada"] = {divs = {type = "regional districts", container_parent_type = false}, "regional municipalities", }, ["Manitoba, Canada"] = {divs = {"rural municipalities"}}, ["New Brunswick, Canada"] = {divs = {"counties", "parishes", {type = "civil parishes", cat_as = "parishes"}}}, ["Newfoundland and Labrador, Canada"] = {}, ["Northwest Territories, Canada"] = {the = true, placetype = "territory"}, ["Nova Scotia, Canada"] = {divs = {"counties", "regional municipalities"}}, ["Nunavut, Canada"] = {placetype = "territory"}, ["Ontario, Canada"] = {divs = {"counties", "regional municipalities", {type = "townships", prep = "in"}}}, ["Prince Edward Island, Canada"] = {divs = {"counties", "parishes", "rural municipalities"}}, ["Saskatchewan, Canada"] = {divs = {"rural municipalities"}}, ["Quebec, Canada"] = {divs = { "counties", {type = "regional county municipalities", container_parent_type = "regional municipalities"}, -- administrative regions have an official (but non-governmental) function but there don't appear to be any -- equivalent regions elsewhere in Canada, so disable the [[Category:Regions of Canada]] grouping {type = "regions", container_parent_type = false}, {type = "townships", prep = "in"}, {type = "parish municipalities", cat_as = {{type = "parishes", container_parent_type = "counties"}, "municipalities"}}, {type = "township municipalities", cat_as = {{type = "townships", prep = "in"}, "municipalities"}}, {type = "village municipalities", cat_as = {{type = "villages", prep = "in"}, "municipalities"}}, }}, ["Yukon, Canada"] = {placetype = "territory"}, ["Yukon Territory, Canada"] = {alias_of = "Yukon, Canada"}, } -- provinces and territories of Canada export.canada_group = { default_container = "Canada", default_placetype = "province", data = export.canada_provinces_and_territories, } export.china_provinces_and_autonomous_regions = { -- direct-administered municipalities are not here but below under prefecture-level cities ["Anhui, China"] = {}, ["Fujian, China"] = {}, ["Fuchien, China"] = {alias_of = "Fujian, China", display = true}, ["Gansu, China"] = {}, ["Guangdong, China"] = {}, ["Guangxi, China"] = {placetype = "autonomous region"}, ["Guizhou, China"] = {}, ["Hainan, China"] = {}, ["Hebei, China"] = {}, ["Heilongjiang, China"] = {}, ["Henan, China"] = {}, ["Hubei, China"] = {}, ["Hunan, China"] = {}, ["Inner Mongolia, China"] = {placetype = "autonomous region"}, ["Jiangsu, China"] = {}, ["Jiangxi, China"] = {}, ["Jilin, China"] = {}, ["Liaoning, China"] = {}, ["Ningxia, China"] = {placetype = "autonomous region"}, ["Qinghai, China"] = {}, ["Shaanxi, China"] = {}, ["Shandong, China"] = {}, ["Shanxi, China"] = {}, ["Sichuan, China"] = {}, ["Tibet, China"] = {placetype = "autonomous region", wp = "Tibet Autonomous Region"}, ["Xinjiang, China"] = {placetype = "autonomous region"}, ["Yunnan, China"] = {}, ["Zhejiang, China"] = {}, } -- provinces and autonomous regions of China export.china_group = { default_container = "Trung Quốc", default_placetype = "province", default_divs = { "prefectures", "prefecture-level cities", "districts", "subdistricts", "townships", {type = "counties", cat_as = "counties and county-level cities"}, {type = "county-level cities", cat_as = "counties and county-level cities"}, }, data = export.china_provinces_and_autonomous_regions, } export.china_prefecture_level_cities = { -- In China, a "prefecture-level city" is not a city in any real sense. It is rather a prefecture, which is an -- administrative unit smaller than a province but bigger than a county, which is administratively controlled by -- the chief city of the prefecture (which bears the same name as the prefecture), in a unified government. Prior -- to the mid-1980's, in fact, prefecture-level cities *were* prefectures, and a few of them (especially in the -- western portion of China) have not yet been converted. Generally a given province is entirely tiled by -- prefecture-level cities, another indication that they should be treated as prefectures and not cities per se. -- Yet another indication is that prefecture-level cities can contain counties and county-level cities (which, much -- like prefecture-level cities, are effectively counties surrounding a chief city of the county, again which bears -- the same name as the county-level city). -- -- For this reason, we treat prefecture-level cities as non-city political divisions, and separately enumerate the -- most populous so we can separately categorize districts and counties under them instead of lumping them at the -- province level. -- -- Note also that China separately distinguishes "urban area" from "metro area". Sometimes the two figures are -- identical but sometimes the metro area is larger (and very occasionally smaller, which I assume is an error). I'm -- guessing that the "urban area" is the contiguous urban area over a certain density while the metro area includes -- all urban areas above a certain density; when the latter is greater, it's because of satellite cities in the -- metro area separated by suburban/exurban or rural land. -- At first I chose all prefecture/province-level cities with a total prefecture/province-level population of at -- least 6,000,000 per the 2020 census with data taken from https://www.citypopulation.de/en/china/admin/ (a total -- of 67, including the four direct-administered municipalities), and also chose all prefecture/province-level -- cities whose "urban population" was at least 2,000,000 per the 2020 census with data taken from Wikipedia -- [[w:List of cities in China by population#Cities and towns by population]] (a total of 61 cities; if we cut off -- at 1.5 million we'd have 84 cities, and if we cut off at 1 million we'd have 105 cities). Merging them produces -- 87 cities. Note that this leaves off a few well-known cities (Guilin, Qiqihar, Kashgar, Lhasa, ...) but includes -- a lot of obscure cities. -- -- At a later date I added all cities from citypopulation.de whose "urban" population per the 2020 China census was -- >= 1 million, and then finally added all urban agglomerations from citypopulation.de whose 2025-01-01 estimate -- was >= 1 million. These are sorted below by the urban agglomeration value (which is generally of the "adm-urb" = -- "administrative area (urban population)" type) and sometimes groups nearby cities into a single agglomeration -- (most notably in the case of the Pearl River Delta, grouped under Guangzhou with an agglomeration population of -- 72,700,000 but including a large number of nearby large cities in the agglomeration (although for some reason not -- Hong Kong, maybe due to the administrative issues involved). In addition, citypopulation.de includes divisions -- under a prefecture-level city if they are city-like and have an agglomeration population of at least 1 million; -- this includes several county-level cities, one county and one district (Wanzhou, a "district" of Chongqing -- despite being 142 miles away). None of the county-level cities or counties have districts under them, only -- subdistricts, towns and townships. ["Guangzhou"] = {container = "Guangdong"}, -- 18.7 prefectural, 18.8 urban; sub-provincial city; 16.097 urban (72.700 adm-urb including Dongguan, Foshan, Huizhou, Jiangmen, Shenzhen, Zhongshan) per citypopulation.de ["Dongguan"] = {container = "Guangdong"}, -- 10.5 prefectural, 10.5 urban; 9.645 per citypopulation.de; included by citypopulation.de in Guangzhou agglomeration ["Foshan"] = {container = "Guangdong"}, -- 9.5 prefectural, 9.5 urban; 9.043 per citypopulation.de; included by citypopulation.de in Guangzhou agglomeration ["Huizhou"] = {container = "Guangdong"}, -- 6.0 prefectural, 2.5 urban; 2.900 per citypopulation.de; included by citypopulation.de in Guangzhou agglomeration ["Jiangmen"] = {container = "Guangdong"}, -- 4.798 prefectural, 2.7 urban; 1.795 per citypopulation.de; included by citypopulation.de in Guangzhou agglomeration ["Shenzhen"] = {container = "Guangdong"}, -- 17.5 prefectural, 14.7 urban; sub-provincial city; 17.445 per citypopulation.de; included by citypopulation.de in Guangzhou agglomeration ["Zhongshan"] = {container = "Guangdong"}, -- 4.418 prefectural, 4.4 urban; 3.842 per citypopulation.de; included by citypopulation.de in Guangzhou agglomeration ["Shanghai"] = {placetype = {"direct-administered municipality", "municipality", "thành phố"}}, -- 24.9 prefectural, 29.9 urban; 21.910 urban (41.600 adm-urb including Changshu, Changzhou, Suzhou, Wuxi) per citypopulation.de ["Changshu"] = {container = "Jiangsu"}, -- 1.231 urban per citypopulation.de; included by citypopulation.de in Shanghai agglomeration -- NOTE: Not to be confused with Cangzhou in Hebei ["Changzhou"] = {container = "Jiangsu"}, -- 5.278 prefectural, 3.6 urban; 3.187 urban per citypopulation.de; included by citypopulation.de in Shanghai agglomeration -- NOTE: There is also a prefecture-level city Suzhou in Anhui with 5.3 million prefectural inhabitants ["Suzhou"] = {container = "Jiangsu"}, -- 12.8 prefectural, 4.3 urban; 5.893 urban per citypopulation.de; included by citypopulation.de in Shanghai agglomeration ["Wuxi"] = {container = "Jiangsu"}, -- 7.5 prefectural, 3.3 urban; 3.957 per citypopulation.de; included by citypopulation.de in Shanghai agglomeration ["Beijing"] = {placetype = {"direct-administered municipality", "municipality", "thành phố"}}, -- 21.9 prefectural, 21.9 urban; 18.961 urban (21.500 adm-urb) per citypopulation.de ["Chengdu"] = {container = "Sichuan"}, -- 20.9 prefectural, 16.9 urban; sub-provincial city; 13.568 urban (18.100 adm-urb) per citypopulation.de ["Xiamen"] = {container = "Fujian"}, -- 5.163 prefectural, 5.2 urban; sub-provincial city; 4.617 urban (15.400 adm-urb including Jinjiang, Quanzhou, Putian) per citypopulation.de ["Jinjiang"] = {container = "Fujian"}, -- 1.416 urban per citypopulation.de; included by citypopulation.de in Xiamen agglomeration ["Quanzhou"] = {container = "Fujian"}, -- 8.8 prefectural, 1.7 urban (6.7 metro); 1.469 urban per citypopulation.de; included by citypopulation.de in Xiamen agglomeration ["Putian"] = {container = "Fujian"}, -- 3.210 prefectural, 2.0 urban; 1.539 urban per citypopulation.de; included by citypopulation.de in Xiamen agglomeration ["Hangzhou"] = {container = "Zhejiang"}, -- 11.9 prefectural, 10.7 urban; sub-provincial city; 9.236 urban (14.600 adm-urb including Shaoxing) per citypopulation.de ["Shaoxing"] = {container = "Zhejiang"}, -- 5.270 prefectural, 2.5 urban; 2.333 urban per citypopulation.de; included by citypopulation.de in Hangzhou agglomeration ["Xi'an"] = {container = "Shaanxi"}, -- 12.1 prefectural, 11.9 urban; sub-provincial city; 9.393 urban (13.400 adm-urb including Xianyang) per citypopulation.de ["Xianyang"] = {container = "Shaanxi"}, -- 1.193 urban per citypopulation.de; included by citypopulation.de in Xi'an agglomeration ["Chongqing"] = {placetype = {"direct-administered municipality", "municipality", "thành phố"}}, -- 32.1 prefectural, 16.9 urban; 9.581 urban (12.900 adm-urb) per citypopulation.de ["Wuhan"] = {container = "Hubei"}, -- 12.4 prefectural, 12.3 urban; sub-provincial city; 10.495 urban (12.600 adm-urb) per citypopulation.de ["Tianjin"] = {placetype = {"direct-administered municipality", "municipality", "thành phố"}}, -- 13.9 prefectural, 13.9 urban; 11.052 urban (11.700 adm-urb) per citypopulation.de ["Changsha"] = {container = "Hunan"}, -- 10.0 prefectural, 6.0 urban; 5.630 urban (11.500 adm-urb including Xiangtan, Zhuzhou) per citypopulation.de -- Changsha County -- 1.024 urban per citypopulation.de ["Zhuzhou"] = {container = "Hunan"}, -- 1.510 urban per citypopulation.de; included by citypopulation.de in Changsha agglomeration ["Zhengzhou"] = {container = "Henan"}, -- 12.6 prefectural, 6.7 urban; 6.461 urban (10.300 adm-urb) per citypopulation.de ["Nanjing"] = {container = "Jiangsu"}, -- 9.3 prefectural, 9.3 urban; sub-provincial city; 7.520 urban (9.500 adm-urb including Ma'anshan) per citypopulation.de ["Shenyang"] = {container = "Liaoning"}, -- 9.1 prefectural, 7.9 urban; sub-provincial city; 7.026 urban (8.800 adm-urb including Fushun) per citypopulation.de ["Fushun"] = {container = "Liaoning"}, -- 1.229 urban per citypopulation.de; included by citypopulation.de in Shenyang agglomeration ["Hefei"] = {container = "Anhui"}, -- 9.4 prefectural, 4.2 urban; 5.056 urban (8.200 adm-urb) per citypopulation.de ["Shantou"] = {container = "Guangdong"}, -- 5.502 prefectural, 4.3 urban; 3.839 urban (8.050 adm-urb including Chaozhou, Jieyang, Puning) per citypopulation.de ["Chaozhou"] = {container = "Guangdong"}, -- 1.254 urban per citypopulation.de; included by citypopulation.de in Shantou agglomeration ["Jieyang"] = {container = "Guangdong"}, -- 1.243 urban per citypopulation.de; included by citypopulation.de in Shantou agglomeration ["Qingdao"] = {container = "Shandong"}, -- 10.1 prefectural, 7.1 urban; sub-provincial city; 6.165 urban (7.700 adm-urb) per citypopulation.de ["Ningbo"] = {container = "Zhejiang"}, -- 9.4 prefectural, 5.1 urban; sub-provincial city; 3.731 urban (7.600 adm-urb including Cixi, Yuyao) per citypopulation.de ["Cixi"] = {container = "Zhejiang"}, -- 1.458 urban per citypopulation.de; included by citypopulation.de in Ningbo agglomeration ["Yuyao"] = {container = "Zhejiang"}, -- 1.014 urban per citypopulation.de; included by citypopulation.de in Ningbo agglomeration -- Hong Kong 7.500 agglomeration per citypopulation.de 2025-01-01 estimate including Kowloon, Victoria ["Wenzhou"] = {container = "Zhejiang"}, -- 9.6 prefectural, 3.6 urban; 2.582 urban (7.000 adm-urb including Rui'an, Cangnan, Pingyang) per citypopulation.de -- Rui'an is a "county-level city" of the "prefecture-level city" of Wenzhou but in fact is 19 miles away from Wenzhou city proper (urban core to urban core). ["Rui'an"] = {placetype = "county-level city", container = {key = "Wenzhou", placetype = "prefecture-level city"}, divs = {"subdistricts", "townships"}}, -- 1.013 urban per citypopulation.de; included by citypopulation.de in Wenzhou agglomeration ["Kunming"] = {container = "Yunnan"}, -- 8.5 prefectural, 6.0 urban; 5.273 urban (6.800 adm-urb) per citypopulation.de -- includes Láiwú city ["Jinan"] = {container = "Shandong", wp = "%l, %c"}, -- 9.2 prefectural, 8.4 urban; sub-provincial city; 5.648 urban (6.750 adm-urb) per citypopulation.de -- includes Xīnjí city ["Shijiazhuang"] = {container = "Hebei"}, -- 11.2 prefectural, 4.1 urban; 5.090 urban (6.450 adm-urb) per citypopulation.de ["Taiyuan"] = {container = "Shanxi"}, -- 5.304 prefectural, 4.5 urban; 4.304 urban (6.150 adm-urb) per citypopulation.de ["Harbin"] = {container = "Heilongjiang"}, -- 10.0 prefectural, 7.0 urban; sub-provincial city; 5.243 urban (5.550 adm-urb) per citypopulation.de ["Nanning"] = {container = {key = "Guangxi, China", placetype = "autonomous region"}}, -- 8.7 prefectural, 3.8 urban; 4.583 urban (5.550 adm-urb) per citypopulation.de ["Dalian"] = {container = "Liaoning"}, -- 7.5 prefectural, 5.7 urban; sub-provincial city; 4.914 urban (5.400 adm-urb) per citypopulation.de ["Guiyang"] = {container = "Guizhou"}, -- 5.987 prefectural, 3.5 urban; 4.021 urban (5.300 adm-urb) per citypopulation.de ["Changchun"] = {container = "Jilin"}, -- 9.1 prefectural, 5.7 urban; sub-provincial city; 4.557 urban (5.200 adm-urb) per citypopulation.de ["Nanchang"] = {container = "Jiangxi"}, -- 6.3 prefectural, 3.6 (3.9?) urban, 5.3 metro; 3.519 urban (5.150 adm-urb) per citypopulation.de ["Ürümqi"] = {container = {key = "Xinjiang, China", placetype = "autonomous region"}}, -- 4.054 prefectural, 4.3 urban; 3.843 urban (5.000 adm-urb) per citypopulation.de ["Urumqi"] = {alias_of = "Ürümqi", display = true}, ["Fuzhou"] = {container = "Fujian"}, -- 8.3 prefectural, 4.1 urban; 3.723 urban (4.775 adm-urb) per citypopulation.de ["Linyi"] = {container = "Shandong"}, -- 11.0 prefectural, 2.3 urban; 2.744 urban (4.650 adm-urb) per citypopulation.de ["Zibo"] = {container = "Shandong"}, -- 4.704 prefectural, 2.6 urban; 2.750 urban (3.975 adm-urb) per citypopulation.de ["Luoyang"] = {container = "Henan"}, -- 7.1 prefectural, 2.4 urban; 2.231 urban (3.750 adm-urb) per citypopulation.de ["Lanzhou"] = {container = "Gansu"}, -- 4.359 prefectural, 3.1 urban; 3.013 urban (3.575 adm-urb) per citypopulation.de ["Nantong"] = {container = "Jiangsu"}, -- 7.7 prefectural, 2.3 urban; 2.988 urban (3.475 adm-urb) citypopulation.de ["Weifang"] = {container = "Shandong"}, -- 9.4 prefectural, 2.7 urban; 1.998 urban (3.325 adm-urb) per citypopulation.de ["Jiangyin"] = {container = "Jiangsu"}, -- 1.331 urban (3.200 adm-urb including Zhangjiagang) per citypopulation.de ["Zhangjiagang"] = {container = "Jiangsu"}, -- 1.056 urban per citypopulation.de; included in Jiangyin figures ["Xuzhou"] = {container = "Jiangsu"}, -- 9.1 prefectural, 2.6 urban; 2.846 urban (3.150 adm-urb) per citypopulation.de ["Handan"] = {container = "Hebei"}, -- 9.4 prefectural, 2.8 urban; 2.095 urban (2.925 adm-urb) per citypopulation.de ["Hohhot"] = {container = {key = "Inner Mongolia, China", placetype = "autonomous region"}}, -- 3.446 prefectural, 2.7 urban; 2.373 urban (2.850 adm-urb) per citypopulation.de ["Haikou"] = {container = "Hainan"}, -- 2.873 prefectural, 2.3 urban; 2.349 urban (2.800 adm-urb) per citypopulation.de ["Tangshan"] = {container = "Hebei"}, -- 7.7 prefectural, 3.4 urban; 2.550 urban (2.750 adm-urb) per citypopulation.de ["Xinxiang"] = {container = "Henan"}, -- 6.3 prefectural, 1.2 urban, 2.7 metro; 1.271 urban (2.700 adm-urb) per citypopulation.de ["Yiwu"] = {container = "Zhejiang"}, -- 1.481 urban (2.700 adm-urb) per citypopulation.de ["Zhuhai"] = {container = "Guangdong"}, -- 2.439 prefectural, 2.4 urban; 2.207 urban (2.675 adm-urb) per citypopulation.de ["Taizhou, Zhejiang"] = {container = "Zhejiang"}, -- 6.6 prefectural, 1.6 urban; 1.486 urban (2.625 adm-urb) per citypopulation.de ["Taizhou"] = {alias_of = "Taizhou, Zhejiang"}, ["Yantai"] = {container = "Shandong"}, -- 7.1 prefectural, 2.5 urban; 2.312 urban (2.550 adm-urb) per citypopulation.de ["Yinchuan"] = {container = {key = "Ningxia, China", placetype = "autonomous region"}}, -- 1.663 urban (2.525 adm-urb) per citypopulation.de ["Liuzhou"] = {container = {key = "Guangxi, China", placetype = "autonomous region"}}, -- 4.157 prefectural, 2.2 urban; 2.205 urban (2.500 adm-urb) per citypopulation.de ["Anshan"] = {container = "Liaoning"}, -- 1.480 urban (2.350 adm-urb including Liáoyáng) per citypopulation.de ["Yangzhou"] = {container = "Jiangsu"}, -- 2.067 urban (2.300 adm-urb) per citypopulation.de ["Jiaxing"] = {container = "Zhejiang"}, -- 1.188 urban (2.275 adm-urb) per citypopulation.de ["Xining"] = {container = "Qinghai"}, -- 1.677 urban (2.250 adm-urb) per citypopulation.de -- includes Dìngzhōu city and Xióngān Xīnqū ["Baoding"] = {container = "Hebei"}, -- 11.5 prefectural, 2.0 urban; 1.940 urban (2.225 adm-urb) per citypopulation.de ["Baotou"] = {container = {key = "Inner Mongolia, China", placetype = "autonomous region"}}, -- 2.709 prefectural, 2.2 urban; 2.104 urban (2.200 adm-urb) per citypopulation.de ["Ganzhou"] = {container = "Jiangxi"}, -- 9.0 prefectural, 1.6 urban; 1.778 urban (2.150 adm-urb) per citypopulation.de ["Pingdingshan"] = {container = "Henan"}, -- 1.046 urban (2.100 adm-urb) per citypopulation.de ["Zunyi"] = {container = "Guizhou"}, -- 6.6 prefectural, 2.4 urban/metro; 1.675 urban (2.025 adm-urb) per citypopulation.de ["Bengbu"] = {container = "Anhui"}, -- 1.078 urban (2.000 adm-urb) per citypopulation.de ["Datong"] = {container = "Shanxi"}, -- 3.105 prefectural, 2.0 urban; 1.810 urban (2.000 adm-urb) per citypopulation.de ["Anyang"] = {container = "Henan"}, -- 1.188 urban (1.960 adm-urb) per citypopulation.de ["Huai'an"] = {container = "Jiangsu"}, -- 4.556 prefectural, 2.6 urban; 1.805 urban (1.940 adm-urb) per citypopulation.de ["Zaozhuang"] = {container = "Shandong"}, -- 1.350 urban (1.900 adm-urb) per citypopulation.de ["Zhanjiang"] = {container = "Guangdong"}, -- 7.0 prefectural, 1.9 urban; 1.401 urban (1.890 adm-urb) per citypopulation.de ["Huainan"] = {container = "Anhui"}, -- 1.256 urban (1.880 adm-urb) per citypopulation.de ["Jining"] = {container = "Shandong"}, -- 8.4 prefectural, 1.5 urban; 1.700 urban (1.880 adm-urb) per citypopulation.de ["Daqing"] = {container = "Heilongjiang"}, -- 1.604 urban (1.860 adm-urb) per citypopulation.de ["Wuhu"] = {container = "Anhui"}, -- 1.598 urban (1.850 adm-urb) per citypopulation.de ["Guilin"] = {container = {key = "Guangxi, China", placetype = "autonomous region"}}, -- 1.361 urban (1.830 adm-urb) per citypopulation.de ["Mianyang"] = {container = "Sichuan"}, -- 1.549 urban (1.800 adm-urb) per citypopulation.de ["Xiangyang"] = {container = "Hubei"}, -- 1.686 urban (1.800 adm-urb) per citypopulation.de ["Huzhou"] = {container = "Zhejiang"}, -- 1.084 urban (1.750 adm-urb) per citypopulation.de ["Puyang"] = {container = "Henan"}, -- 0.824 urban (1.750 adm-urb) per citypopulation.de ["Shangqiu"] = {container = "Henan"}, -- 7.8 prefectural, 1.9 urban (2.8 metro); 1.031 urban (1.750 adm-urb) per citypopulation.de ["Qinhuangdao"] = {container = "Hebei"}, -- 1.520 urban (1.740 adm-urb) per citypopulation.de ["Xingtai"] = {container = "Hebei"}, -- 7.1 prefectural, 971,000 urban; 1.5 urban (1.700 adm-urb) per citypopulation.de ["Nanyang"] = {container = "Henan", wp = "%l, %c"}, -- 9.7 prefectural, 2.1 urban/metro; 1.481 urban (1.680 adm-urb) per citypopulation.de ["Jiaozuo"] = {container = "Henan"}, -- 0.875 urban (1.640 adm-urb) per citypopulation.de ["Jilin City"] = {container = "Jilin"}, -- 1.509 urban (1.610 adm-urb) per citypopulation.de ["Jilin"] = {alias_of = "Jilin City"}, ["Jinhua"] = {container = "Zhejiang"}, -- 7.1 prefectural, 1.5 urban; 1.041 urban (1.590 adm-urb) per citypopulation.de ["Shangrao"] = {container = "Jiangxi"}, -- 6.5 prefectural, 2.1 urban, 1.3 metro [sic]; 1.342 urban (1.580 adm-urb) per citypopulation.de ["Heze"] = {container = "Shandong"}, -- 8.8 prefectural, 1.3 urban; 1.294 urban (1.570 adm-urb) per citypopulation.de ["Yulin"] = {container = {key = "Guangxi, China", placetype = "autonomous region"}, wp = "%l, %c"}, -- 0.878 urban (1.570 adm-urb) per citypopulation.de ["Tai'an"] = {container = "Shandong"}, -- 1.417 urban (1.560 adm-urb) per citypopulation.de ["Weihai"] = {container = "Shandong"}, -- 1.340 urban (1.510 adm-urb) per citypopulation.de -- Taizhou, Jiangsu would be here (1.490 adm-urb) but moved to china_prefecture_level_cities_2 to avoid clash ["Yancheng"] = {container = "Jiangsu"}, -- 6.7 prefectural, 1.6 urban; 1.353 urban (1.460 adm-urb) per citypopulation.de ["Zhangjiakou"] = {container = "Hebei"}, -- 1.339 urban (1.450 adm-urb) per citypopulation.de ["Maoming"] = {container = "Guangdong"}, -- 6.2 prefectural, 2.5 urban; 1.308 urban (1.440 adm-urb) per citypopulation.de ["Nanchong"] = {container = "Sichuan"}, -- 1.254 urban (1.440 adm-urb) per citypopulation.de ["Fuyang"] = {container = "Anhui", wp = "%l, %c"}, -- 8.2 prefectural, 2.1 urban; 1.191 urban (1.410 adm-urb) per citypopulation.de ["Xuchang"] = {container = "Henan"}, -- 0.850 urban (1.390 adm-urb) per citypopulation.de ["Yichang"] = {container = "Hubei"}, -- 1.284 urban (1.390 adm-urb) per citypopulation.de ["Dazhou"] = {container = "Sichuan"}, -- 1.136 urban (1.380 adm-urb) per citypopulation.de ["Kaifeng"] = {container = "Henan"}, -- 1.194 urban (1.340 adm-urb) per citypopulation.de ["Luzhou"] = {container = "Sichuan"}, -- 1.128 urban (1.340 adm-urb) per citypopulation.de ["Qingyuan"] = {container = "Guangdong"}, -- 1.198 urban (1.340 adm-urb) per citypopulation.de ["Huaibei"] = {container = "Anhui"}, -- 0.831 urban (1.330 adm-urb) per citypopulation.de ["Yibin"] = {container = "Sichuan"}, -- 1.101 urban (1.310 adm-urb) per citypopulation.de ["Lu'an"] = {container = "Anhui"}, -- 1.070 urban (1.300 adm-urb) per citypopulation.de ["Dezhou"] = {container = "Shandong"}, -- 0.843 urban (1.290 adm-urb) per citypopulation.de ["Rizhao"] = {container = "Shandong"}, -- 1.147 urban (1.270 adm-urb) per citypopulation.de ["Changzhi"] = {container = "Shanxi"}, -- 1.047 urban (1.250 adm-urb) per citypopulation.de ["Hengyang"] = {container = "Hunan"}, -- 6.6 prefectural, 1.5 urban; 1.185 urban (1.250 adm-urb) per citypopulation.de ["Jinzhou"] = {container = "Liaoning"}, -- 1.021 urban (1.240 adm-urb) per citypopulation.de ["Liaocheng"] = {container = "Shandong"}, -- 1.020 urban (1.240 adm-urb) per citypopulation.de ["Changde"] = {container = "Hunan"}, -- 1.101 urban (1.230 adm-urb) per citypopulation.de ["Suqian"] = {container = "Jiangsu"}, -- 1.082 urban (1.230 adm-urb) per citypopulation.de ["Xinyang"] = {container = "Henan"}, -- 6.2 prefectural, 1.4 urban/metro; 1.015 urban (1.230 adm-urb) per citypopulation.de ["Baoji"] = {container = "Shaanxi"}, -- 1.108 urban (1.220 adm-urb) per citypopulation.de ["Yueyang"] = {container = "Hunan"}, -- 1.125 urban (1.220 adm-urb) per citypopulation.de ["Zhenjiang"] = {container = "Jiangsu"}, -- 1.124 urban (1.210 adm-urb) per citypopulation.de -- Wanzhou is a "district" of the "direct-administered municipality" of Chongqing but in fact is 142 miles away from Chongqing city proper. ["Wanzhou"] = {placetype = "district", container = {key = "Chongqing", placetype = "direct-administered municipality"}, divs = {"subdistricts", "townships"}, wp = "%l, %c"}, -- 1.078 urban (1.190 adm-urb) per citypopulation.de ["Ulanhad"] = {container = {key = "Inner Mongolia, China", placetype = "autonomous region"}}, -- 1.093 urban (1.180 adm-urb) per citypopulation.de ["Chifeng"] = {alias_of = "Ulanhad"}, ["Ulankhad"] = {alias_of = "Ulanhad", display = true}, ["Ezhou"] = {container = "Hubei"}, -- < 0.750 urban (1.180 adm-urb) per citypopulation.de ["Zhaoqing"] = {container = "Guangdong"}, -- 1.036 urban (1.160 adm-urb) per citypopulation.de ["Lianyungang"] = {container = "Jiangsu"}, -- 4.599 prefectural, 2.0 urban; 1.071 urban (1.150 adm-urb) per citypopulation.de ["Qujing"] = {container = "Yunnan"}, -- 0.976 urban (1.150 adm-urb) per citypopulation.de -- Shuyang is a "county" of the "prefecture-level city" of Suqian but in fact is 38 miles away from Suqian city proper (urban core to urban core). -- The county itself is 37 miles by 34 miles. ["Shuyang"] = {placetype = "county", container = {key = "Suqian", placetype = "prefecture-level city"}, divs = {"subdistricts", "townships"}, wp = "%l County"}, -- 0.986 urban (1.120 adm-urb) per citypopulation.de -- Yongkang is a "county-level city" of the "prefecture-level city" of Jinhua but in fact is 32 miles away from Jinhua city proper (urban core to urban core). ["Yongkang"] = {placetype = "county-level city", container = {key = "Jinhua", placetype = "prefecture-level city"}, divs = {"subdistricts", "townships"}, wp = "%l, Zhejiang"}, -- < 0.750 urban (1.110 adm-urb) per citypopulation.de ["Zhoukou"] = {container = "Henan"}, -- 9.0 prefectural, 721,000 urban (1.6 metro); < 0.750 urban (1.100 adm-urb) per citypopulation.de ["Beihai"] = {container = {key = "Guangxi, China", placetype = "autonomous region"}}, -- < 1 urban (1.090 adm-urb) per citypopulation.de ["Jiujiang"] = {container = "Jiangxi"}, -- < 0.750 urban (1.080 adm-urb) per citypopulation.de ["Shaoyang"] = {container = "Hunan"}, -- 6.6 prefectural, 802,000 urban, 1.4 metro; < 1 urban (1.080 adm-urb) per citypopulation.de ["Chuzhou"] = {container = "Anhui"}, -- < 0.750 urban (1.070 adm-urb) per citypopulation.de ["Hengshui"] = {container = "Hebei"}, -- 0.885 urban (1.070 adm-urb) per citypopulation.de ["Shiyan"] = {container = "Hubei"}, -- 0.955 urban (1.070 adm-urb) per citypopulation.de ["Huludao"] = {container = "Liaoning"}, -- 0.764 urban (1.060 adm-urb) per citypopulation.de ["Dongying"] = {container = "Shandong"}, -- 0.961 urban (1.050 adm-urb) per citypopulation.de ["Guigang"] = {container = {key = "Guangxi, China", placetype = "autonomous region"}}, -- 0.921 urban (1.050 adm-urb) per citypopulation.de -- Liuyang is a "county-level city" of the "prefecture-level city" of Changsha but in fact is 47 miles away from Changsha city proper (urban core to urban core). ["Liuyang"] = {placetype = "county-level city", container = {key = "Changsha", placetype = "prefecture-level city"}, divs = {"subdistricts", "townships"}}, -- 0.886 urban (1.040 adm-urb) per citypopulation.de -- NOTE: Not to be confused with Changzhou in Jiangsu ["Cangzhou"] = {container = "Hebei"}, -- 7.3 prefectural, 621,000 urban; 0.759 urban (1.030 adm-urb) per citypopulation.de ["Liupanshui"] = {container = "Guizhou"}, -- < 0.750 urban (1.030 adm-urb) per citypopulation.de ["Panjin"] = {container = "Liaoning"}, -- 0.980 urban (1.030 adm-urb) per citypopulation.de ["Qiqihar"] = {container = "Heilongjiang"}, -- 1.030 urban (1.030 adm-urb) per citypopulation.de ["Linfen"] = {container = "Shanxi"}, -- < 0.750 urban (1.010 adm-urb) per citypopulation.de -- Tengzhou is a "county-level city" of the "prefecture-level city" of Zaozhuang but in fact is 30 miles away from Zaozhuang city proper (urban core to urban core). ["Tengzhou"] = {placetype = "county-level city", container = {key = "Zaozhuang", placetype = "prefecture-level city"}, divs = {"subdistricts", "townships"}}, -- 0.937 urban (1.010 adm-urb) per citypopulation.de -- 3 extra that got added in earlier incarnations and aren't found in the "major agglomerations of the world" page https://citypopulation.de/en/world/agglomerations/ reference date 2025-01-01 ["Kunshan"] = {container = "Jiangsu"}, -- 1.652 urban (2020 China census) per citypopulation.de ["Zhumadian"] = {container = "Henan"}, -- 7.0 prefectural, 722,000 urban per Wikipedia; 0.754 urban per citypopulation.de ["Bijie"] = {container = "Guizhou"}, -- 6.9 prefectural, ? urban, ? metro (not listed in Wikipedia); < 0.750 urban per citypopulation.de } export.china_prefecture_level_cities_group = { -- don't do any transformations between key and placename; in particular, don't chop off anything from -- "Taizhou, Zhejiang" or "Suzhou, Anhui". key_to_placename = false, placename_to_key = false, -- don't add ", China" to make the key default_container = "Trung Quốc", canonicalize_key_container = make_canonicalize_key_container(", China", "province"), -- Prefecture-level cities aren't really cities but allow them to be identified that way, as many people -- don't understand how Chinese administrative divisions work. default_placetype = {"prefecture-level city", "thành phố"}, default_divs = { -- "towns" (but not "townships") are automatically added as they are specified as generic_before_non_cities, -- and prefecture-level cities (as well as county-level cities) are considered non-cities. "districts", "subdistricts", "townships", {type = "counties", cat_as = "counties and county-level cities"}, {type = "county-level cities", cat_as = "counties and county-level cities"}, }, data = export.china_prefecture_level_cities, } -- Needed to avoid problems with two cities called Taizhou and Suzhou. export.china_prefecture_level_cities_2 = { -- NOTE: There is also a larger and better-known prefecture-level city Taizhou in Zhejiang. ["Taizhou, Jiangsu"] = {container = "Jiangsu"}, -- 1.3 urban (1.490 adm-urb) per citypopulation.de 2020 census ["Taizhou"] = {alias_of = "Taizhou, Jiangsu"}, -- NOTE: There is also a larger and better-known prefecture-level city Suzhou in Jiangsu. ["Suzhou, Anhui"] = {container = "Anhui"}, -- 5.3 prefectural, 1.766 metro and "urban"; < 1 urban (1.010 adm-urb) per citypopulation.de 2020 census -- hopefully this will work because we also have Suzhou as a key by itself for the larger, more-well-known Suzhou in Jiangsu ["Suzhou"] = {alias_of = "Suzhou, Anhui"}, } export.china_prefecture_level_cities_group_2 = { -- don't do any transformations between key and placename; in particular, don't chop off anything from -- "Taizhou, Jiangsu". placename_to_key = false, -- don't add ", China" to make the key default_container = "Trung Quốc", canonicalize_key_container = make_canonicalize_key_container(", China", "province"), -- Prefecture-level cities aren't really cities but allow them to be identified that way, as many people -- don't understand how Chinese administrative divisions work. default_placetype = {"prefecture-level city", "thành phố"}, default_divs = { -- "towns" (but not "townships") are automatically added as they are specified as generic_before_non_cities, -- and prefecture-level cities (as well as county-level cities) are considered non-cities. "districts", "subdistricts", "townships", {type = "counties", cat_as = "counties and county-level cities"}, {type = "county-level cities", cat_as = "counties and county-level cities"}, }, data = export.china_prefecture_level_cities_2, } export.finland_regions = { ["Lapland, Finland"] = {wp = "%l (%c)"}, ["North Ostrobothnia, Finland"] = {}, ["Northern Ostrobothnia, Finland"] = {alias_of = "North Ostrobothnia, Finland", display = true}, ["Kainuu, Finland"] = {}, ["North Karelia, Finland"] = {}, ["Northern Savonia, Finland"] = {}, ["North Savo, Finland"] = {alias_of = "Northern Savonia, Finland", display = true}, ["Southern Savonia, Finland"] = {}, ["South Savo, Finland"] = {alias_of = "Southern Savonia, Finland", display = true}, ["South Karelia, Finland"] = {}, ["Central Finland, Finland"] = {}, ["South Ostrobothnia, Finland"] = {}, ["Southern Ostrobothnia, Finland"] = {alias_of = "South Ostrobothnia, Finland", display = true}, ["Ostrobothnia, Finland"] = {wp = "%l (region)"}, ["Central Ostrobothnia, Finland"] = {}, ["Pirkanmaa, Finland"] = {}, ["Satakunta, Finland"] = {}, ["Päijänne Tavastia, Finland"] = {}, ["Päijät-Häme, Finland"] = {alias_of = "Päijänne Tavastia, Finland", display = true}, ["Tavastia Proper, Finland"] = {}, ["Kanta-Häme, Finland"] = {alias_of = "Tavastia Proper, Finland", display = true}, ["Kymenlaakso, Finland"] = {}, ["Uusimaa, Finland"] = {}, ["Southwest Finland, Finland"] = {}, ["Åland Islands, Finland"] = {the = true, wp = "Åland"}, ["Åland, Finland"] = {alias_of = "Åland Islands, Finland"}, -- differs in "the" } -- regions of Finland export.finland_group = { default_container = "Phần Lan", default_placetype = "region", default_divs = "municipalities", data = export.finland_regions, } export.france_administrative_regions = { ["Auvergne-Rhône-Alpes, France"] = {}, ["Bourgogne-Franche-Comté, France"] = {}, ["Brittany, France"] = {wp = "%l (administrative region)"}, ["Centre-Val de Loire, France"] = {}, ["Corsica, France"] = {}, -- overseas departments are handled in `export.country_like_entities` -- ["French Guiana"] = {}, ["Grand Est, France"] = {}, -- ["Guadeloupe"] = {}, ["Hauts-de-France, France"] = {}, ["Île-de-France, France"] = {}, -- ["Martinique"] = {}, -- ["Mayotte"] = {}, ["Normandy, France"] = {wp = "%l (administrative region)"}, ["Nouvelle-Aquitaine, France"] = {}, ["Occitania, France"] = {wp = "%l (administrative region)"}, ["Occitanie, France"] = {alias_of = "Occitania, France", display = true}, ["Pays de la Loire, France"] = {}, ["Provence-Alpes-Côte d'Azur, France"] = {}, -- ["Réunion"] = {}, } -- administrative regions of France export.france_group = { default_container = "Pháp", -- Canonically these are 'administrative regions' but also treat as 'region' ('administrative region' falls back -- to 'region'). default_placetype = "region", default_divs = { "communes", {type = "municipalities", cat_as = "communes"}, "departments", {type = "prefectures", cat_as = {"prefectures", "departmental capitals"}}, {type = "French prefectures", cat_as = {"prefectures", "departmental capitals"}}, }, data = export.france_administrative_regions, } export.france_departments = { ["Ain, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 01 ["Aisne, France"] = {container = "Hauts-de-France"}, -- 02 ["Allier, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 03 ["Alpes-de-Haute-Provence, France"] = {container = "Provence-Alpes-Côte d'Azur"}, -- 04 ["Hautes-Alpes, France"] = {container = "Provence-Alpes-Côte d'Azur"}, -- 05 ["Alpes-Maritimes, France"] = {container = "Provence-Alpes-Côte d'Azur"}, -- 06 ["Ardèche, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 07 ["Ardennes, France"] = {container = "Grand Est", wp = "%l (department)"}, -- 08 ["Ariège, France"] = {container = "Occitania", wp = "%l (department)"}, -- 09 ["Aube, France"] = {container = "Grand Est"}, -- 10 ["Aude, France"] = {container = "Occitania"}, -- 11 ["Aveyron, France"] = {container = "Occitania"}, -- 12 ["Bouches-du-Rhône, France"] = {container = "Provence-Alpes-Côte d'Azur"}, -- 13 ["Calvados, France"] = {container = "Normandy", wp = "%l (department)"}, -- 14 ["Cantal, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 15 ["Charente, France"] = {container = "Nouvelle-Aquitaine"}, -- 16 ["Charente-Maritime, France"] = {container = "Nouvelle-Aquitaine"}, -- 17 ["Cher, France"] = {container = "Centre-Val de Loire", wp = "%l (department)"}, -- 18 ["Corrèze, France"] = {container = "Nouvelle-Aquitaine"}, -- 19 ["Corse-du-Sud, France"] = {container = "Corsica"}, -- 2A ["Haute-Corse, France"] = {container = "Corsica"}, -- 2B ["Côte-d'Or, France"] = {container = "Bourgogne-Franche-Comté"}, -- 21 ["Côte d'Or, France"] = {alias_of = "Côte-d'Or, France", display = true}, ["Côtes-d'Armor, France"] = {container = "Brittany"}, -- 22 ["Côtes d'Armor, France"] = {alias_of = "Côtes-d'Armor, France", display = true}, ["Creuse, France"] = {container = "Nouvelle-Aquitaine"}, -- 23 ["Dordogne, France"] = {container = "Nouvelle-Aquitaine"}, -- 24 ["Doubs, France"] = {container = "Bourgogne-Franche-Comté"}, -- 25 ["Drôme, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 26 ["Eure, France"] = {container = "Normandy"}, -- 27 ["Eure-et-Loir, France"] = {container = "Centre-Val de Loire"}, -- 28 ["Finistère, France"] = {container = "Brittany"}, -- 29 ["Gard, France"] = {container = "Occitania"}, -- 30 ["Haute-Garonne, France"] = {container = "Occitania"}, -- 31 ["Gers, France"] = {container = "Occitania"}, -- 32 ["Gironde, France"] = {container = "Nouvelle-Aquitaine"}, -- 33 ["Hérault, France"] = {container = "Occitania"}, -- 34 ["Ille-et-Vilaine, France"] = {container = "Brittany"}, -- 35 ["Indre, France"] = {container = "Centre-Val de Loire"}, -- 36 ["Indre-et-Loire, France"] = {container = "Centre-Val de Loire"}, -- 37 ["Isère, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 38 ["Jura, France"] = {container = "Bourgogne-Franche-Comté", wp = "%l (department)"}, -- 39 ["Landes, France"] = {container = "Nouvelle-Aquitaine", wp = "%l (department)"}, -- 40 ["Loir-et-Cher, France"] = {container = "Centre-Val de Loire"}, -- 41 ["Loire, France"] = {container = "Auvergne-Rhône-Alpes", wp = "%l (department)"}, -- 42 ["Haute-Loire, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 43 ["Loire-Atlantique, France"] = {container = "Pays de la Loire"}, -- 44 ["Loiret, France"] = {container = "Centre-Val de Loire"}, -- 45 ["Lot, France"] = {container = "Occitania", wp = "%l (department)"}, -- 46 ["Lot-et-Garonne, France"] = {container = "Nouvelle-Aquitaine"}, -- 47 ["Lozère, France"] = {container = "Occitania"}, -- 48 ["Maine-et-Loire, France"] = {container = "Pays de la Loire"}, -- 49 ["Manche, France"] = {container = "Normandy"}, -- 50 ["Marne, France"] = {container = "Grand Est", wp = "%l (department)"}, -- 51 ["Haute-Marne, France"] = {container = "Grand Est"}, -- 52 ["Mayenne, France"] = {container = "Pays de la Loire"}, -- 53 ["Meurthe-et-Moselle, France"] = {container = "Grand Est"}, -- 54 ["Meuse, France"] = {container = "Grand Est", wp = "%l (department)"}, -- 55 ["Morbihan, France"] = {container = "Brittany"}, -- 56 ["Moselle, France"] = {container = "Grand Est", wp = "%l (department)"}, -- 57 ["Nièvre, France"] = {container = "Bourgogne-Franche-Comté"}, -- 58 ["Nord, France"] = {container = "Hauts-de-France", wp = "%l (French department)"}, -- 59 ["Oise, France"] = {container = "Hauts-de-France"}, -- 60 ["Orne, France"] = {container = "Normandy"}, -- 61 ["Pas-de-Calais, France"] = {container = "Hauts-de-France"}, -- 62 ["Puy-de-Dôme, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 63 ["Pyrénées-Atlantiques, France"] = {container = "Nouvelle-Aquitaine"}, -- 64 ["Hautes-Pyrénées, France"] = {container = "Occitania"}, -- 65 ["Pyrénées-Orientales, France"] = {container = "Occitania"}, -- 66 ["Bas-Rhin, France"] = {container = "Grand Est"}, -- 67 ["Haut-Rhin, France"] = {container = "Grand Est"}, -- 68 ["Rhône, France"] = {container = "Auvergne-Rhône-Alpes", wp = "%l (department)"}, -- 69D ["Metropolis of Lyon, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 69M ["Lyon Metropolis, France"] = {alias_of = "Metropolis of Lyon, France"}, ["Lyon, France"] = {alias_of = "Metropolis of Lyon, France"}, ["Haute-Saône, France"] = {container = "Bourgogne-Franche-Comté"}, -- 70 ["Saône-et-Loire, France"] = {container = "Bourgogne-Franche-Comté"}, -- 71 ["Sarthe, France"] = {container = "Pays de la Loire"}, -- 72 ["Savoie, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 73 ["Haute-Savoie, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 74 ["Paris, France"] = {container = "Île-de-France"}, -- 75 ["Seine-Maritime, France"] = {container = "Normandy"}, -- 76 ["Seine-et-Marne, France"] = {container = "Île-de-France"}, -- 77 ["Yvelines, France"] = {container = "Île-de-France"}, -- 78 ["Deux-Sèvres, France"] = {container = "Nouvelle-Aquitaine"}, -- 79 ["Somme, France"] = {container = "Hauts-de-France", wp = "%l (department)"}, -- 80 ["Tarn, France"] = {container = "Occitania", wp = "%l (department)"}, -- 81 ["Tarn-et-Garonne, France"] = {container = "Occitania"}, -- 82 ["Var, France"] = {container = "Provence-Alpes-Côte d'Azur", wp = "%l (department)"}, -- 83 ["Vaucluse, France"] = {container = "Provence-Alpes-Côte d'Azur"}, -- 84 ["Vendée, France"] = {container = "Pays de la Loire"}, -- 85 ["Vienne, France"] = {container = "Nouvelle-Aquitaine", wp = "%l (department)"}, -- 86 ["Haute-Vienne, France"] = {container = "Nouvelle-Aquitaine"}, -- 87 ["Vosges, France"] = {container = "Grand Est", wp = "%l (department)"}, -- 88 ["Yonne, France"] = {container = "Bourgogne-Franche-Comté"}, -- 89 ["Territoire de Belfort, France"] = {container = "Bourgogne-Franche-Comté"}, -- 90 ["Essonne, France"] = {container = "Île-de-France"}, -- 91 ["Hauts-de-Seine, France"] = {container = "Île-de-France"}, -- 92 ["Seine-Saint-Denis, France"] = {container = "Île-de-France"}, -- 93 ["Val-de-Marne, France"] = {container = "Île-de-France"}, -- 94 ["Val-d'Oise, France"] = {container = "Île-de-France"}, -- 95 --["Guadeloupe"] = {container = "Guadeloupe"}, -- 971 --["Martinique"] = {container = "Martinique"}, -- 972 --["Guyane"] = {container = "French Guiana", wp = "French Guiana"}, -- 973 --["La Réunion"] = {container = "Réunion", wp = "Réunion"}, -- 974 --["Mayotte"] = {container = "Mayotte"}, -- 976 } export.france_departments_group = { placename_to_key = make_placename_to_key(", France"), canonicalize_key_container = make_canonicalize_key_container(", France", "region"), default_placetype = "department", default_divs = { "communes", {type = "municipalities", cat_as = "communes"}, }, data = export.france_departments, } export.germany_states = { ["Baden-Württemberg, Germany"] = {}, ["Bavaria, Germany"] = {}, -- Berlin, Bremen and Hamburg are effectively city-states and don't have districts ([[Kreise]]), so override -- the default_divs setting. Better not to include them at all since they're included as cities down below. -- ["Berlin"] = {divs = {}}, ["Brandenburg, Germany"] = {}, -- ["Bremen"] = {divs = {}}, -- ["Hamburg"] = {divs = {}}, ["Hesse, Germany"] = {}, ["Lower Saxony, Germany"] = {}, ["Mecklenburg-Vorpommern, Germany"] = {}, ["Mecklenburg-Western Pomerania, Germany"] = {alias_of = "Mecklenburg-Vorpommern, Germany", display = true}, ["North Rhine-Westphalia, Germany"] = {}, ["Rhineland-Palatinate, Germany"] = {}, ["Saarland, Germany"] = {}, ["Saxony, Germany"] = {}, ["Saxony-Anhalt, Germany"] = {}, ["Schleswig-Holstein, Germany"] = {}, ["Thuringia, Germany"] = {}, } -- states of Germany export.germany_group = { default_container = "Đức", default_placetype = "state", default_divs = {"districts", "municipalities"}, data = export.germany_states, } export.greece_regions = { ["Attica, Greece"] = {wp = "%l (region)"}, ["Central Greece, Greece"] = {wp = "%l (administrative region)"}, ["Central Macedonia, Greece"] = {}, ["Crete, Greece"] = {}, ["Eastern Macedonia and Thrace, Greece"] = {}, ["Epirus, Greece"] = {wp = "%l (region)"}, ["Ionian Islands, Greece"] = {the = true, wp = "%l (region)"}, ["North Aegean, Greece"] = {the = true}, -- I would expect 'the Peloponnese' but Wikipedia mostly has categories like [[w:Category:Geography of Peloponnese (region)]] -- and [[w:Category:Buildings and structures in Peloponnese (region)]]; only [[w:Category:People from the Peloponnese (region)]] -- has "the" in it. ["Peloponnese, Greece"] = {wp = "%l (region)"}, ["South Aegean, Greece"] = {the = true}, ["Thessaly, Greece"] = {}, ["Western Greece, Greece"] = {}, ["Western Macedonia, Greece"] = {}, ["Mount Athos, Greece"] = {placetype = {"autonomous region", "region"}, wp = "Monastic community of Mount Athos"}, } -- regions of Greece export.greece_group = { default_container = "Hy Lạp", default_placetype = "region", data = export.greece_regions, } local india_polity_with_divisions = {"divisions", "districts"} local india_polity_without_divisions = {"districts"} -- States and union territories of India. Only some of them are divided into divisions. export.india_states_and_union_territories = { ["Andaman and Nicobar Islands, India"] = {the = true, placetype = "union territory", divs = india_polity_without_divisions}, ["Andhra Pradesh, India"] = {divs = india_polity_without_divisions}, ["Arunachal Pradesh, India"] = {divs = india_polity_with_divisions}, ["Assam, India"] = {divs = india_polity_with_divisions}, ["Bihar, India"] = {divs = india_polity_with_divisions}, ["Chandigarh, India"] = {placetype = "union territory", divs = india_polity_without_divisions}, ["Chhattisgarh, India"] = {divs = india_polity_with_divisions}, ["Dadra and Nagar Haveli and Daman and Diu, India"] = {placetype = "union territory", divs = india_polity_without_divisions}, ["Delhi, India"] = {placetype = "union territory", divs = india_polity_with_divisions}, ["Goa, India"] = {divs = india_polity_without_divisions}, ["Gujarat, India"] = {divs = india_polity_without_divisions}, ["Haryana, India"] = {divs = india_polity_with_divisions}, ["Himachal Pradesh, India"] = {divs = india_polity_with_divisions}, ["Jammu and Kashmir, India"] = {placetype = "union territory", divs = india_polity_with_divisions, wp = "%l (union territory)"}, ["Jharkhand, India"] = {divs = india_polity_with_divisions}, ["Karnataka, India"] = {divs = india_polity_with_divisions}, ["Kerala, India"] = {divs = india_polity_without_divisions}, ["Ladakh, India"] = {placetype = "union territory", divs = india_polity_with_divisions}, ["Lakshadweep, India"] = {placetype = "union territory", divs = india_polity_without_divisions}, ["Madhya Pradesh, India"] = {divs = india_polity_with_divisions}, ["Maharashtra, India"] = {divs = india_polity_with_divisions}, ["Manipur, India"] = {divs = india_polity_without_divisions}, ["Meghalaya, India"] = {divs = india_polity_with_divisions}, ["Mizoram, India"] = {divs = india_polity_without_divisions}, ["Nagaland, India"] = {divs = india_polity_with_divisions}, ["Odisha, India"] = {divs = india_polity_with_divisions}, ["Puducherry, India"] = {placetype = "union territory", divs = india_polity_without_divisions, wp = "%l (union territory)"}, ["Pondicherry, India"] = {alias_of = "Puducherry, India", display = true}, ["Punjab, India"] = {divs = india_polity_with_divisions, wp = "%l, %c"}, ["Rajasthan, India"] = {divs = india_polity_with_divisions}, ["Sikkim, India"] = {divs = india_polity_without_divisions}, ["Tamil Nadu, India"] = {divs = india_polity_without_divisions}, ["Telangana, India"] = {divs = india_polity_without_divisions}, ["Tripura, India"] = {divs = india_polity_without_divisions}, ["Uttar Pradesh, India"] = {divs = india_polity_with_divisions}, ["Uttarakhand, India"] = {divs = india_polity_with_divisions}, ["West Bengal, India"] = {divs = india_polity_with_divisions}, } -- states and union territories of India export.india_group = { default_container = "Ấn Độ", default_placetype = "state", data = export.india_states_and_union_territories, } export.indonesia_provinces = { ["Aceh, Indonesia"] = {}, ["Bali, Indonesia"] = {}, ["Bangka Belitung Islands, Indonesia"] = {the = true}, ["Banten, Indonesia"] = {}, ["Bengkulu, Indonesia"] = {}, ["Central Java, Indonesia"] = {}, ["Central Kalimantan, Indonesia"] = {}, ["Central Papua, Indonesia"] = {}, ["Central Sulawesi, Indonesia"] = {}, ["East Java, Indonesia"] = {}, ["East Kalimantan, Indonesia"] = {}, ["East Nusa Tenggara, Indonesia"] = {}, ["Gorontalo, Indonesia"] = {}, ["Highland Papua, Indonesia"] = {wp = "%l"}, ["Special Capital Region of Jakarta, Indonesia"] = {the = true, wp = "Jakarta"}, ["Jakarta, Indonesia"] = {alias_of = "Special Capital Region of Jakarta, Indonesia"}, ["Jambi, Indonesia"] = {}, ["Lampung, Indonesia"] = {}, ["Maluku, Indonesia"] = {}, ["North Kalimantan, Indonesia"] = {}, ["North Maluku, Indonesia"] = {}, ["North Sulawesi, Indonesia"] = {}, ["North Papua, Indonesia"] = {}, ["North Sumatra, Indonesia"] = {}, ["Papua, Indonesia"] = {wp = "%l (province)"}, ["Riau, Indonesia"] = {}, ["Riau Islands, Indonesia"] = {the = true}, ["Southeast Sulawesi, Indonesia"] = {}, ["South Kalimantan, Indonesia"] = {}, ["South Papua, Indonesia"] = {}, ["South Sulawesi, Indonesia"] = {}, ["South Sumatra, Indonesia"] = {}, ["Southwest Papua, Indonesia"] = {}, ["West Java, Indonesia"] = {}, ["West Kalimantan, Indonesia"] = {}, ["West Nusa Tenggara, Indonesia"] = {}, ["West Papua, Indonesia"] = {wp = "%l (province)"}, ["West Sulawesi, Indonesia"] = {}, ["West Sumatra, Indonesia"] = {}, ["Special Region of Yogyakarta, Indonesia"] = {the = true}, ["Yogyakarta, Indonesia"] = {alias_of = "Special Region of Yogyakarta, Indonesia"}, } -- provinces of Indonesia export.indonesia_group = { default_container = "Indonesia", default_placetype = "province", -- per https://www.quora.com/Does-Indonesia-use-British-or-American-English, Indonesia tends to use American -- spellings. data = export.indonesia_provinces, } export.iran_provinces = { ["Alborz Province, Iran"] = {}, -- abbreviation AL, capital [[w:Karaj]] ["Ardabil Province, Iran"] = {}, -- abbreviation AR, capital [[w:Ardabil]] ["Bushehr Province, Iran"] = {}, -- abbreviation BU, capital [[w:Bushehr]] ["Chaharmahal and Bakhtiari Province, Iran"] = {}, -- abbreviation CB, capital [[w:Shahr-e Kord]] ["East Azerbaijan Province, Iran"] = {}, -- abbreviation EA, capital [[w:Tabriz]] ["Fars Province, Iran"] = {}, -- abbreviation FA, capital [[w:Shiraz]] ["Pars Province, Iran"] = {alias_of = "Fars Province, Iran", display = true}, ["Gilan Province, Iran"] = {}, -- abbreviation GN, capital [[w:Rasht]] ["Golestan Province, Iran"] = {}, -- abbreviation GO, capital [[w:Gorgan]] ["Hamadan Province, Iran"] = {}, -- abbreviation HA, capital [[w:Hamadan]] ["Hormozgan Province, Iran"] = {}, -- abbreviation HO, capital [[w:Bandar Abbas]] ["Ilam Province, Iran"] = {}, -- abbreviation IL, capital [[w:Ilam, Iran|Ilam]] ["Isfahan Province, Iran"] = {}, -- abbreviation IS, capital [[w:Isfahan]] ["Kerman Province, Iran"] = {}, -- abbreviation KN, capital [[w:Kerman]] ["Kermanshah Province, Iran"] = {}, -- abbreviation KE, capital [[w:Kermanshah]] ["Khuzestan Province, Iran"] = {}, -- abbreviation KH, capital [[w:Ahvaz]] ["Kohgiluyeh and Boyer-Ahmad Province, Iran"] = {}, -- abbreviation KB, capital [[w:Yasuj]] ["Kurdistan Province, Iran"] = {}, -- abbreviation KU, capital [[w:Sanandaj]] ["Lorestan Province, Iran"] = {}, -- abbreviation LO, capital [[w:Khorramabad]] ["Markazi Province, Iran"] = {}, -- abbreviation MA, capital [[w:Arak, Iran|Arak]] ["Mazandaran Province, Iran"] = {}, -- abbreviation MN, capital [[w:Sari, Iran|Sari]] ["North Khorasan Province, Iran"] = {}, -- abbreviation NK, capital [[w:Bojnord]] ["Qazvin Province, Iran"] = {}, -- abbreviation QA, capital [[w:Qazvin]] ["Qom Province, Iran"] = {}, -- abbreviation QM, capital [[w:Qom]] ["Razavi Khorasan Province, Iran"] = {}, -- abbreviation RK, capital [[w:Mashhad]] ["Semnan Province, Iran"] = {}, -- abbreviation SE, capital [[w:Semnan, Iran|Semnan]] ["Sistan and Baluchestan Province, Iran"] = {}, -- abbreviation SB, capital [[w:Zahedan]] ["South Khorasan Province, Iran"] = {}, -- abbreviation SK, capital [[w:Birjand]] ["Tehran Province, Iran"] = {}, -- abbreviation TE, capital [[w:Tehran]] ["West Azerbaijan Province, Iran"] = {}, -- abbreviation WA, capital [[w:Urmia]] ["Yazd Province, Iran"] = {}, -- abbreviation YA, capital [[w:Yazd]] ["Zanjan Province, Iran"] = {}, -- abbreviation ZA, capital [[w:Zanjan, Iran|Zanjan]] } -- provinces of Iran export.iran_group = { key_to_placename = make_key_to_placename(", Iran", " Province$"), placename_to_key = make_placename_to_key(", Iran", " Province"), default_container = "Iran", default_placetype = "province", -- There aren't nearly enough counties of Iran currently entered in any language to allow for categorizing them -- per-province. (As of 2025-05-09, there are only 6 counties in each of [[Category:en:Counties of Iran]], -- [[Category:fa:Counties of Iran]] and [[Category:ar:Counties of Iran]].) -- default_divs = "counties", -- For obscure reasons, provinces of Iran, Laos, Thailand and Vietnam use lowercase 'province' default_wp = "%e province", data = export.iran_provinces, } export.ireland_counties = { ["County Carlow, Ireland"] = {}, ["County Cavan, Ireland"] = {}, ["County Clare, Ireland"] = {}, ["County Cork, Ireland"] = {}, ["County Donegal, Ireland"] = {}, ["County Dublin, Ireland"] = {}, ["County Galway, Ireland"] = {}, ["County Kerry, Ireland"] = {}, ["County Kildare, Ireland"] = {}, ["County Kilkenny, Ireland"] = {}, ["County Laois, Ireland"] = {}, ["County Leitrim, Ireland"] = {}, ["County Limerick, Ireland"] = {}, ["County Longford, Ireland"] = {}, ["County Louth, Ireland"] = {}, ["County Mayo, Ireland"] = {}, ["County Meath, Ireland"] = {}, ["County Monaghan, Ireland"] = {}, ["County Offaly, Ireland"] = {}, ["County Roscommon, Ireland"] = {}, ["County Sligo, Ireland"] = {}, ["County Tipperary, Ireland"] = {}, ["County Waterford, Ireland"] = {}, ["County Westmeath, Ireland"] = {}, ["County Wexford, Ireland"] = {}, ["County Wicklow, Ireland"] = {}, } local function make_irish_type_key_to_placename(container_pattern) return function(key) key = key:gsub(container_pattern, "") local elliptical_key = key:gsub("^County ", "") return key, elliptical_key end end local function make_irish_type_placename_to_key(container_suffix) return function(placename) if not placename:find("^County ") and not placename:find("^City ") then placename = "County " .. placename end return placename .. container_suffix end end -- counties of Ireland export.ireland_group = { key_to_placename = make_irish_type_key_to_placename(", Ireland$"), placename_to_key = make_irish_type_placename_to_key(", Ireland"), default_container = "Ireland", default_placetype = "county", data = export.ireland_counties, } export.italy_administrative_regions = { ["Abruzzo, Italy"] = {}, ["Aosta Valley, Italy"] = {placetype = {"autonomous region", "administrative region", "region"}}, ["Apulia, Italy"] = {}, ["Basilicata, Italy"] = {}, ["Calabria, Italy"] = {}, ["Campania, Italy"] = {}, ["Emilia-Romagna, Italy"] = {}, ["Friuli-Venezia Giulia, Italy"] = {placetype = {"autonomous region", "administrative region", "region"}}, ["Lazio, Italy"] = {}, ["Liguria, Italy"] = {}, ["Lombardy, Italy"] = {}, ["Marche, Italy"] = {}, ["Molise, Italy"] = {}, ["Piedmont, Italy"] = {}, ["Sardinia, Italy"] = {placetype = {"autonomous region", "administrative region", "region"}}, ["Sicily, Italy"] = {placetype = {"autonomous region", "administrative region", "region"}}, ["Trentino-Alto Adige, Italy"] = {placetype = {"autonomous region", "administrative region", "region"}}, ["Tuscany, Italy"] = {}, ["Umbria, Italy"] = {}, ["Veneto, Italy"] = {}, } -- administrative regions of Italy export.italy_group = { default_container = "Ý", default_placetype = "region", data = export.italy_administrative_regions, } -- table of Japanese prefectures; interpolated into the main 'places' table, but also needed separately export.japan_prefectures = { ["Aichi, Nhật Bản"] = {}, ["Akita, Nhật Bản"] = {}, ["Aomori, Nhật Bản"] = {}, ["Chiba, Nhật Bản"] = {}, ["Ehime, Nhật Bản"] = {}, ["Fukui, Nhật Bản"] = {}, ["Fukuoka, Nhật Bản"] = {}, ["Fukushima, Nhật Bản"] = {}, ["Gifu, Nhật Bản"] = {}, ["Gunma, Nhật Bản"] = {}, ["Hiroshima, Nhật Bản"] = {}, ["Hokkaidō, Nhật Bản"] = {divs = "subprefectures", wp = "Hokkaidō"}, ["Hyōgo, Nhật Bản"] = {}, ["Hyogo, Nhật Bản"] = {alias_of = "Hyōgo, Nhật Bản", display = true}, ["Ibaraki, Nhật Bản"] = {}, ["Ishikawa, Nhật Bản"] = {}, ["Iwate, Nhật Bản"] = {}, ["Kagawa, Nhật Bản"] = {}, ["Kagoshima, Nhật Bản"] = {}, ["Kanagawa, Nhật Bản"] = {}, ["Kōchi, Nhật Bản"] = {}, ["Kochi, Nhật Bản"] = {alias_of = "Kōchi, Nhật Bản", display = true}, ["Kumamoto, Nhật Bản"] = {}, ["Kyoto, Nhật Bản"] = {}, ["Mie, Nhật Bản"] = {}, ["Miyagi, Nhật Bản"] = {}, ["Miyazaki, Nhật Bản"] = {}, ["Nagano, Nhật Bản"] = {}, ["Nagasaki, Nhật Bản"] = {}, ["Nara, Nhật Bản"] = {}, ["Niigata, Nhật Bản"] = {}, ["Ōita, Nhật Bản"] = {}, ["Oita, Nhật Bản"] = {alias_of = "Ōita, Nhật Bản", display = true}, ["Okayama, Nhật Bản"] = {}, ["Okinawa, Nhật Bản"] = {}, ["Ōsaka, Nhật Bản"] = {}, ["Osaka, Nhật Bản"] = {alias_of = "Ōsaka, Nhật Bản", display = true}, ["Saga, Nhật Bản"] = {}, ["Saitama, Nhật Bản"] = {}, ["Shiga, Nhật Bản"] = {}, ["Shimane, Nhật Bản"] = {}, ["Shizuoka, Nhật Bản"] = {}, ["Tochigi, Nhật Bản"] = {}, ["Tokushima, Nhật Bản"] = {}, ["Tottori, Nhật Bản"] = {}, ["Toyama, Nhật Bản"] = {}, ["Wakayama, Nhật Bản"] = {}, ["Yamagata, Nhật Bản"] = {}, ["Yamaguchi, Nhật Bản"] = {}, ["Yamanashi, Nhật Bản"] = {}, } -- prefectures of Japan export.japan_group = { key_to_placename = make_key_to_placename(", Nhật Bản$", " $"), placename_to_key = make_placename_to_key(", Nhật Bản", ""), default_container = "Nhật Bản", default_placetype = "prefecture", data = export.japan_prefectures, } export.laos_provinces = { ["Attapeu Province, Laos"] = {}, ["Bokeo Province, Laos"] = {}, ["Bolikhamxai Province, Laos"] = {}, ["Champasak Province, Laos"] = {}, ["Houaphanh Province, Laos"] = {}, ["Khammouane Province, Laos"] = {}, ["Luang Namtha Province, Laos"] = {}, ["Luang Prabang Province, Laos"] = {}, ["Oudomxay Province, Laos"] = {}, ["Phongsaly Province, Laos"] = {}, ["Salavan Province, Laos"] = {}, ["Savannakhet Province, Laos"] = {}, ["Vientiane Province, Laos"] = {}, ["Vientiane Prefecture, Laos"] = {placetype = "prefecture", wp = "%l"}, ["Sainyabuli Province, Laos"] = {}, ["Sekong Province, Laos"] = {}, ["Xaisomboun Province, Laos"] = {}, ["Xiangkhouang Province, Laos"] = {}, } local function laos_placename_to_key(placename) if placename == "Vientiane Prefecture" then return placename .. ", Laos" end if placename:find(" Province$") then return placename .. ", Laos" end return placename .. " Province, Laos" end -- provinces of Laos export.laos_group = { key_to_placename = make_key_to_placename(", Laos$", {" Province$", " Prefecture$"}), placename_to_key = laos_placename_to_key, default_container = "Lào", default_placetype = "province", -- For obscure reasons, provinces of Iran, Laos, Thailand and Vietnam use lowercase 'province' default_wp = "%e province", data = export.laos_provinces, } export.lebanon_governorates = { ["Akkar Governorate, Lebanon"] = {}, ["Baalbek-Hermel Governorate, Lebanon"] = {}, ["Beirut Governorate, Lebanon"] = {}, ["Beqaa Governorate, Lebanon"] = {}, ["Keserwan-Jbeil Governorate, Lebanon"] = {}, ["Mount Lebanon Governorate, Lebanon"] = {}, ["Nabatieh Governorate, Lebanon"] = {}, -- These two are generic enough that we don't want to automatically augment a use of `gov/North Governorate` or -- `gov/South Governorate` with `c/Lebanon`. ["North Governorate, Lebanon"] = {no_auto_augment_container = true}, ["South Governorate, Lebanon"] = {no_auto_augment_container = true}, } -- governorates of Lebanon export.lebanon_group = { key_to_placename = make_key_to_placename(", Lebanon$", " Governorate$"), placename_to_key = make_placename_to_key(", Lebanon", " Governorate"), default_container = "Lebanon", default_placetype = "governorate", data = export.lebanon_governorates, } export.malaysia_states = { ["Johor, Malaysia"] = {}, ["Kedah, Malaysia"] = {}, ["Kelantan, Malaysia"] = {}, ["Malacca, Malaysia"] = {}, ["Negeri Sembilan, Malaysia"] = {}, ["Pahang, Malaysia"] = {}, ["Penang, Malaysia"] = {}, ["Perak, Malaysia"] = {}, ["Perlis, Malaysia"] = {}, ["Sabah, Malaysia"] = {}, ["Sarawak, Malaysia"] = {}, ["Selangor, Malaysia"] = {}, ["Terengganu, Malaysia"] = {}, } -- states of Malaysia export.malaysia_group = { default_container = "Malaysia", default_placetype = "state", default_wp = "%l, %c", data = export.malaysia_states, } export.malta_regions = { -- Some of the regions are generic enough that we don't want to automatically augment a use of e.g. -- `r/Northern Region` with `c/Malta`. In particular; -- * "Eastern Region" also occurs at least in Ghana, Uganda, Iceland, Nigeria, Venezuela, North Macedonia and -- El Salvador; -- * "Northern Region" also occurs at least in Ghana, Uganda, Malawi, Nigeria, Canada and South Africa; -- * "Western Region" also occurs at least in Abu Dhabi, Bahrain, South Africa, Ghana, Iceland, Nepal, Nigeria, -- Serbia and Uganda; -- * "Southern Region" also occurs at least in Nigeria, Eritrea, Iceland, Ireland, Malawi and Serbia. ["Eastern Region, Malta"] = {no_auto_augment_container = true}, ["Gozo Region, Malta"] = {wp = "%l"}, ["Northern Region, Malta"] = {no_auto_augment_container = true}, ["Port Region, Malta"] = {}, ["Southern Region, Malta"] = {no_auto_augment_container = true}, ["Western Region, Malta"] = {no_auto_augment_container = true}, } -- regions of Malta export.malta_group = { key_to_placename = make_key_to_placename(", Malta$", " Region"), placename_to_key = make_placename_to_key(", Malta", " Region"), default_container = "Malta", default_placetype = "region", default_wp = "%l, %c", default_the = true, data = export.malta_regions, } export.mexico_states = { ["Aguascalientes, Mexico"] = {}, ["Baja California, Mexico"] = {}, -- not display-canonicalizing because the "Norte" could be for emphasis ["Baja California Norte, Mexico"] = {alias_of = "Baja California, Mexico"}, ["Baja California Sur, Mexico"] = {}, ["Campeche, Mexico"] = {}, ["Chiapas, Mexico"] = {}, ["Chihuahua, Mexico"] = {wp = "%l (state)"}, ["Coahuila, Mexico"] = {}, ["Colima, Mexico"] = {}, ["Durango, Mexico"] = {}, ["Guanajuato, Mexico"] = {}, ["Guerrero, Mexico"] = {}, ["Hidalgo, Mexico"] = {wp = "%l (state)"}, ["Jalisco, Mexico"] = {}, ["State of Mexico, Mexico"] = {the = true}, ["Mexico, Mexico"] = {alias_of = "State of Mexico, Mexico"}, -- differs in "the" -- ["Mexico City, Mexico"] = {}, doesn't belong here because it's a city ["Michoacán, Mexico"] = {}, ["Michoacan, Mexico"] = {alias_of = "Michoacán, Mexico", display = true}, ["Morelos, Mexico"] = {}, ["Nayarit, Mexico"] = {}, ["Nuevo León, Mexico"] = {}, ["Nuevo Leon, Mexico"] = {alias_of = "Nuevo León, Mexico", display = true}, ["Oaxaca, Mexico"] = {}, ["Puebla, Mexico"] = {}, ["Querétaro, Mexico"] = {}, ["Queretaro, Mexico"] = {alias_of = "Querétaro, Mexico", display = true}, ["Quintana Roo, Mexico"] = {}, ["San Luis Potosí, Mexico"] = {}, ["San Luis Potosi, Mexico"] = {alias_of = "San Luis Potosí, Mexico", display = true}, ["Sinaloa, Mexico"] = {}, ["Sonora, Mexico"] = {}, ["Tabasco, Mexico"] = {}, ["Tamaulipas, Mexico"] = {}, ["Tlaxcala, Mexico"] = {}, ["Veracruz, Mexico"] = {}, ["Yucatán, Mexico"] = {}, ["Yucatan, Mexico"] = {alias_of = "Yucatán, Mexico", display = true}, ["Zacatecas, Mexico"] = {}, } -- Mexican states export.mexico_group = { default_container = "Mexico", default_placetype = "state", data = export.mexico_states, } export.moldova_districts_and_autonomous_territorial_units = { ["Anenii Noi District, Moldova"] = {}, -- capital [[Anenii Noi]] ["Basarabeasca District, Moldova"] = {}, -- capital [[Basarabeasca]] ["Briceni District, Moldova"] = {}, -- capital [[Briceni]] ["Cahul District, Moldova"] = {}, -- capital [[Cahul]] ["Cantemir District, Moldova"] = {}, -- capital [[Cantemir, Moldova|Cantemir]] ["Călărași District, Moldova"] = {}, -- capital [[Călărași, Moldova|Călărași]] ["Căușeni District, Moldova"] = {}, -- capital [[Căușeni]] ["Cimișlia District, Moldova"] = {}, -- capital [[Cimișlia]] ["Criuleni District, Moldova"] = {}, -- capital [[Criuleni]] ["Dondușeni District, Moldova"] = {}, -- capital [[Dondușeni]] ["Drochia District, Moldova"] = {}, -- capital [[Drochia]] ["Dubăsari District, Moldova"] = {}, -- capital [[Cocieri]] ["Edineț District, Moldova"] = {}, -- capital [[Edineț]] ["Fălești District, Moldova"] = {}, -- capital [[Fălești]] ["Florești District, Moldova"] = {}, -- capital [[Florești, Moldova|Florești]] ["Glodeni District, Moldova"] = {}, -- capital [[Glodeni]] ["Hîncești District, Moldova"] = {}, -- capital [[Hîncești]] ["Ialoveni District, Moldova"] = {}, -- capital [[Ialoveni]] ["Leova District, Moldova"] = {}, -- capital [[Leova]] ["Nisporeni District, Moldova"] = {}, -- capital [[Nisporeni]] ["Ocnița District, Moldova"] = {}, -- capital [[Ocnița]] ["Orhei District, Moldova"] = {}, -- capital [[Orhei]] ["Rezina District, Moldova"] = {}, -- capital [[Rezina]] ["Rîșcani District, Moldova"] = {}, -- capital [[Rîșcani]] ["Sîngerei District, Moldova"] = {}, -- capital [[Sîngerei]] ["Soroca District, Moldova"] = {}, -- capital [[Soroca]] ["Strășeni District, Moldova"] = {}, -- capital [[Strășeni]] ["Șoldănești District, Moldova"] = {}, -- capital [[Șoldănești]] ["Ștefan Vodă District, Moldova"] = {}, -- capital [[Ștefan Vodă]] ["Taraclia District, Moldova"] = {}, -- capital [[Taraclia]] ["Telenești District, Moldova"] = {}, -- capital [[Telenești]] ["Ungheni District, Moldova"] = {}, -- capital [[Ungheni]] ["Chișinău, Moldova"] = {placetype = "municipality"}, ["Bălți, Moldova"] = {placetype = "municipality"}, ["Gagauzia, Moldova"] = {placetype = {"autonomous territorial unit", "autonomous region", "region"}}, -- capital [[Comrat]] -- the remainder are under the de-facto control of the unrecognized state of Transnistria ["Bender, Moldova"] = {placetype = "municipality"}, ["Tighina, Moldova"] = {alias_of = "Bender, Moldova"}, ["Transnistria, Moldova"] = {placetype = {"autonomous territorial unit", "autonomous region", "region"}}, -- capital [[Tiraspol]] ["Left Bank of the Dniester, Moldova"] = {alias_of = "Transnistria, Moldova"}, ["Administrative-Territorial Units of the Left Bank of the Dniester, Moldova"] = {alias_of = "Transnistria, Moldova"}, } local function moldova_placename_to_key(placename) local elliptical_key = placename .. ", Moldova" if export.moldova_districts_and_autonomous_territorial_units[elliptical_key] then return elliptical_key end if placename:find(" District$") then return placename .. ", Moldova" end return placename .. " District, Moldova" end -- Moldovan districts (raions) and autonomous territorial units export.moldova_group = { key_to_placename = make_key_to_placename(", Moldova$", " District"), placename_to_key = moldova_placename_to_key, default_container = "Moldova", default_placetype = {"district", "raion"}, default_divs = "communes", data = export.moldova_districts_and_autonomous_territorial_units, } export.morocco_regions = { ["Tangier-Tetouan-Al Hoceima, Morocco"] = {}, ["Oriental, Morocco"] = {wp = "%l (%c)"}, ["L'Oriental, Morocco"] = {alias_of = "Oriental, Morocco", display = true}, ["Fez-Meknes, Morocco"] = {}, ["Rabat-Sale-Kenitra, Morocco"] = {wp = "Rabat-Salé-Kénitra"}, ["Rabat-Salé-Kénitra, Morocco"] = {alias_of = "Rabat-Sale-Kenitra, Morocco", display = true}, ["Beni Mellal-Khenifra, Morocco"] = {wp = "Béni Mellal-Khénifra"}, ["Béni Mellal-Khénifra, Morocco"] = {alias_of = "Beni Mellal-Khenifra, Morocco", display = true}, ["Casablanca-Settat, Morocco"] = {}, ["Marrakesh-Safi, Morocco"] = {wp = "Marrakesh–Safi"}, -- WP title has en-dash ["Marrakech-Safi, Morocco"] = {alias_of = "Marrakesh-Safi, Morocco", display = true}, ["Draa-Tafilalet, Morocco"] = {wp = "Drâa-Tafilalet"}, ["Drâa-Tafilalet, Morocco"] = {alias_of = "Draa-Tafilalet, Morocco", display = true}, ["Souss-Massa, Morocco"] = {}, ["Guelmim-Oued Noun, Morocco"] = { keydesc = "+++. '''NOTE:''' This region lies partly within the disputed territory of [[Western Sahara]]" }, ["Laayoune-Sakia El Hamra, Morocco"] = { wp = "Laâyoune-Sakia El Hamra", keydesc = "+++. '''NOTE:''' This region lies almost completely within the disputed territory of [[Western Sahara]]", }, ["Laâyoune-Sakia El Hamra, Morocco"] = {alias_of = "Laayoune-Sakia El Hamra, Morocco", display = true}, ["Dakhla-Oued Ed-Dahab, Morocco"] = { keydesc = "+++. '''NOTE:''' This region lies completely within the disputed territory of [[Western Sahara]]", }, } -- regions of Morocco export.morocco_group = { default_container = "Maroc", default_placetype = "region", data = export.morocco_regions, } export.egypt_governorates = { ["Cairo Governorate, Egypt"] = {}, ["Giza Governorate, Egypt"] = {}, ["Sharqia Governorate, Egypt"] = {}, ["Dakahlia Governorate, Egypt"] = {}, ["Beheira Governorate, Egypt"] = {}, ["Minya Governorate, Egypt"] = {}, ["Qalyubia Governorate, Egypt"] = {}, ["Sohag Governorate, Egypt"] = {}, ["Alexandria Governorate, Egypt"] = {}, ["Gharbia Governorate, Egypt"] = {}, ["Asyut Governorate, Egypt"] = {}, ["Monufia Governorate, Egypt"] = {}, ["Faiyum Governorate, Egypt"] = {}, ["Kafr El Sheikh Governorate, Egypt"] = {}, ["Qena Governorate, Egypt"] = {}, ["Beni Suef Governorate, Egypt"] = {}, ["Damietta Governorate, Egypt"] = {}, ["Aswan Governorate, Egypt"] = {}, ["Ismailia Governorate, Egypt"] = {}, ["Luxor Governorate, Egypt"] = {}, ["Suez Governorate, Egypt"] = {}, ["Port Said Governorate, Egypt"] = {}, ["Matrouh Governorate, Egypt"] = {}, ["North Sinai Governorate, Egypt"] = {}, ["Red Sea Governorate, Egypt"] = {}, ["New Valley Governorate, Egypt"] = {}, ["South Sinai Governorate, Egypt"] = {}, } -- governorates of Egypt export.egypt_group = { key_to_placename = make_key_to_placename(", Egypt$", " Governorate$"), placename_to_key = make_placename_to_key(", Egypt", " Governorate"), default_container = "Ai Cập", default_placetype = "governorate", data = export.egypt_governorates, } export.netherlands_provinces = { ["Drenthe, Netherlands"] = {}, ["Flevoland, Netherlands"] = {}, ["Friesland, Netherlands"] = {}, ["Gelderland, Netherlands"] = {}, ["Groningen, Netherlands"] = {wp = "%l (province)"}, ["Limburg, Netherlands"] = {wp = "%l (%c)"}, ["North Brabant, Netherlands"] = {}, -- Foreign forms get display-canonicalized. ["Noord-Brabant, Netherlands"] = {alias_of = "North Brabant, Netherlands", display = true}, ["North Holland, Netherlands"] = {}, ["Noord-Holland, Netherlands"] = {alias_of = "North Holland, Netherlands", display = true}, ["Overijssel, Netherlands"] = {}, ["South Holland, Netherlands"] = {}, ["Zuid-Holland, Netherlands"] = {alias_of = "South Holland, Netherlands", display = true}, ["Utrecht, Netherlands"] = {wp = "%l (province)"}, ["Zeeland, Netherlands"] = {}, } -- provinces of the Netherlands export.netherlands_group = { default_container = "Netherlands", default_placetype = "province", default_divs = "municipalities", data = export.netherlands_provinces, } export.new_zealand_regions = { -- North Island regions ["Northland, New Zealand"] = {wp = "%l Region"}, -- ISO 3166-2 code NZ-NTL, number 1, capital [[Whangārei]] ["Auckland, New Zealand"] = {wp = "%l Region"}, -- ISO 3166-2 code NZ-AUK, number 2, capital [[Auckland]] ["Waikato, New Zealand"] = {}, -- ISO 3166-2 code NZ-WKO, number 3, capital [[Hamilton, New Zealand|Hamilton]] ["Bay of Plenty, New Zealand"] = {the = true, wp = "%l Region"}, -- ISO 3166-2 code NZ-BOP, number 4, capital [[Whakatāne]] ["Gisborne, New Zealand"] = {placetype = {"region", "district"}, wp = "%l District"}, -- ISO 3166-2 code NZ-GIS, number 5, capital [[Gisborne, New Zealand|Gisborne]] ["Hawke's Bay, New Zealand"] = {}, -- ISO 3166-2 code NZ-HKB, number 6, capital [[Napier, New Zealand|Napier]] ["Taranaki, New Zealand"] = {}, -- ISO 3166-2 code NZ-TKI, number 7, capital [[Stratford, New Zealand|Stratford]] ["Manawatū-Whanganui, New Zealand"] = {}, -- ISO 3166-2 code NZ-MWT, number 8, capital [[Palmerston North]] ["Manawatu-Whanganui, New Zealand"] = {alias_of = "Manawatū-Whanganui, New Zealand", display = true}, ["Manawatu-Wanganui, New Zealand"] = {alias_of = "Manawatū-Whanganui, New Zealand", display = true}, ["Wellington, New Zealand"] = {wp = "%l Region"}, -- ISO 3166-2 code NZ-WGN, number 9, capital [[Wellington]] -- South Island regions ["Tasman, New Zealand"] = {placetype = {"region", "district"}, wp = "%l District"}, -- ISO 3166-2 code NZ-TAS, number 10, capital [[Richmond, New Zealand|Richmond]] ["Nelson, New Zealand"] = {placetype = {"region", "thành phố"}, wp = "%l, %c", is_city = true}, -- ISO 3166-2 code NZ-NSN, number 11, capital [[Nelson, New Zealand|Nelson]] ["Marlborough, New Zealand"] = {placetype = {"region", "district"}, wp = "%l District"}, -- ISO 3166-2 code NZ-MBH, number 12, capital [[Blenheim, New Zealand|Blenheim]] ["West Coast, New Zealand"] = {the = true, wp = "%l Region"}, -- ISO 3166-2 code NZ-WTC, number 13, capital [[Greymouth]] ["Canterbury, New Zealand"] = {wp = "%l Region"}, -- ISO 3166-2 code NZ-CAN, number 14, capital [[Christchurch]] ["Otago, New Zealand"] = {}, -- ISO 3166-2 code NZ-OTA, number 15, capital [[Dunedin]] ["Southland, New Zealand"] = {wp = "%l Region"}, -- ISO 3166-2 code NZ-STL, number 16, capital [[Invercargill]] } -- regions of New Zealand export.new_zealand_group = { default_container = "New Zealand", default_placetype = "region", data = export.new_zealand_regions, } export.nigeria_states = { ["Abia State, Nigeria"] = {}, ["Adamawa State, Nigeria"] = {}, ["Akwa Ibom State, Nigeria"] = {}, ["Anambra State, Nigeria"] = {}, ["Bauchi State, Nigeria"] = {}, ["Bayelsa State, Nigeria"] = {}, ["Benue State, Nigeria"] = {}, ["Borno State, Nigeria"] = {}, ["Cross River State, Nigeria"] = {}, ["Delta State, Nigeria"] = {}, ["Ebonyi State, Nigeria"] = {}, ["Edo State, Nigeria"] = {}, ["Ekiti State, Nigeria"] = {}, ["Enugu State, Nigeria"] = {}, ["Federal Capital Territory, Nigeria"] = { -- not a state but allow it to be referenced as one in holonyms placetype = {"federal territory", "territory", "state"}, the = true, wp = "%l (%c)", }, ["Gombe State, Nigeria"] = {}, ["Imo State, Nigeria"] = {}, ["Jigawa State, Nigeria"] = {}, ["Kaduna State, Nigeria"] = {}, ["Kano State, Nigeria"] = {}, ["Katsina State, Nigeria"] = {}, ["Kebbi State, Nigeria"] = {}, ["Kogi State, Nigeria"] = {}, ["Kwara State, Nigeria"] = {}, ["Lagos State, Nigeria"] = {}, ["Nasarawa State, Nigeria"] = {}, ["Niger State, Nigeria"] = {}, ["Ogun State, Nigeria"] = {}, ["Ondo State, Nigeria"] = {}, ["Osun State, Nigeria"] = {}, ["Oyo State, Nigeria"] = {}, ["Plateau State, Nigeria"] = {}, ["Rivers State, Nigeria"] = {}, ["Sokoto State, Nigeria"] = {}, ["Taraba State, Nigeria"] = {}, ["Yobe State, Nigeria"] = {}, ["Zamfara State, Nigeria"] = {}, } -- states of Nigeria export.nigeria_group = { key_to_placename = make_key_to_placename(", Nigeria$", " State$"), placename_to_key = make_placename_to_key(", Nigeria", " State"), default_container = "Nigeria", default_placetype = "state", data = export.nigeria_states, } export.north_korea_provinces = { ["Chagang Province, North Korea"] = {}, ["North Hamgyong Province, North Korea"] = {}, ["South Hamgyong Province, North Korea"] = {}, ["North Hwanghae Province, North Korea"] = {}, ["South Hwanghae Province, North Korea"] = {}, ["Kangwon Province, North Korea"] = {wp = "%l (%c)"}, ["North Pyongan Province, North Korea"] = {}, ["South Pyongan Province, North Korea"] = {}, ["Ryanggang Province, North Korea"] = {}, } -- provinces of North Korea export.north_korea_group = { key_to_placename = make_key_to_placename(", North Korea$", " Province$"), placename_to_key = make_placename_to_key(", North Korea", " Province"), default_container = "Cộng hòa Dân chủ Nhân dân Triều Tiên", default_placetype = "province", data = export.north_korea_provinces, } export.norwegian_counties = { ["Oslo, Norway"] = {}, ["Rogaland, Norway"] = {}, ["Møre og Romsdal, Norway"] = {}, ["Nordland, Norway"] = {}, ["Østfold, Norway"] = {}, ["Akershus, Norway"] = {}, ["Buskerud, Norway"] = {}, -- the following two were merged into Innlandet -- ["Hedmark, Norway"] = {}, -- ["Oppland, Norway"] = {}, ["Innlandet, Norway"] = {}, ["Vestfold, Norway"] = {}, ["Telemark, Norway"] = {}, -- the following two were merged into Agder -- ["Aust-Agder, Norway"] = {}, -- ["Vest-Agder, Norway"] = {}, ["Agder, Norway"] = {}, -- the following two were merged into Vestland -- ["Hordaland, Norway"] = {}, -- ["Sogn og Fjordane, Norway"] = {}, ["Vestland, Norway"] = {}, ["Trøndelag, Norway"] = {}, ["Troms, Norway"] = {}, ["Finnmark, Norway"] = {}, } -- counties of Norway export.norway_group = { default_container = "Na Uy", default_placetype = "county", data = export.norwegian_counties, } export.pakistan_provinces_and_territories = { ["Azad Kashmir, Pakistan"] = { placetype = {"administrative territory", "autonomous territory", "territory"}, }, ["Azad Jammu and Kashmir, Pakistan"] = {alias_of = "Azad Kashmir, Pakistan", display = true}, ["Balochistan, Pakistan"] = {wp = "%l, %c"}, ["Gilgit-Baltistan, Pakistan"] = { placetype = {"administrative territory", "territory"}, }, ["Islamabad Capital Territory, Pakistan"] = { the = true, divs = {}, -- no divisions placetype = {"federal territory", "administrative territory", "territory"}, }, -- Islamabad is an accepted alias for Islamabad Capital Territory given the above placetypes ["Islamabad, Pakistan"] = {alias_of = "Islamabad Capital Territory, Pakistan"}, ["Khyber Pakhtunkhwa, Pakistan"] = {}, ["Punjab, Pakistan"] = {wp = "%l, %c"}, ["Sindh, Pakistan"] = {}, } -- provinces and territories of Pakistan export.pakistan_group = { default_container = "Pakistan", default_placetype = "province", default_divs = "divisions", data = export.pakistan_provinces_and_territories, } export.philippines_provinces = { ["Abra, Philippines"] = {wp = "%l (province)"}, ["Agusan del Norte, Philippines"] = {}, ["Agusan del Sur, Philippines"] = {}, ["Aklan, Philippines"] = {}, ["Albay, Philippines"] = {}, ["Antique, Philippines"] = {wp = "%l (province)"}, ["Apayao, Philippines"] = {}, ["Aurora, Philippines"] = {wp = "%l (province)"}, ["Basilan, Philippines"] = {}, ["Bataan, Philippines"] = {}, ["Batanes, Philippines"] = {}, ["Batangas, Philippines"] = {}, ["Benguet, Philippines"] = {}, ["Biliran, Philippines"] = {}, ["Bohol, Philippines"] = {}, ["Bukidnon, Philippines"] = {}, ["Bulacan, Philippines"] = {}, ["Cagayan, Philippines"] = {}, ["Camarines Norte, Philippines"] = {}, ["Camarines Sur, Philippines"] = {}, ["Camiguin, Philippines"] = {}, ["Capiz, Philippines"] = {}, ["Catanduanes, Philippines"] = {}, ["Cavite, Philippines"] = {}, ["Cebu, Philippines"] = {}, ["Cotabato, Philippines"] = {}, ["Davao de Oro, Philippines"] = {}, ["Davao del Norte, Philippines"] = {}, ["Davao del Sur, Philippines"] = {}, ["Davao Occidental, Philippines"] = {}, ["Davao Oriental, Philippines"] = {}, ["Dinagat Islands, Philippines"] = {the = true}, ["Eastern Samar, Philippines"] = {}, ["Guimaras, Philippines"] = {}, ["Ifugao, Philippines"] = {}, ["Ilocos Norte, Philippines"] = {}, ["Ilocos Sur, Philippines"] = {}, ["Iloilo, Philippines"] = {}, ["Isabela, Philippines"] = {wp = "%l (province)"}, ["Kalinga, Philippines"] = {wp = "%l (province)"}, ["La Union, Philippines"] = {}, ["Laguna, Philippines"] = {wp = "%l (province)"}, ["Lanao del Norte, Philippines"] = {}, ["Lanao del Sur, Philippines"] = {}, ["Leyte, Philippines"] = {wp = "%l (province)"}, ["Maguindanao del Norte, Philippines"] = {}, ["Maguindanao del Sur, Philippines"] = {}, ["Marinduque, Philippines"] = {}, ["Masbate, Philippines"] = {}, ["Misamis Occidental, Philippines"] = {}, ["Misamis Oriental, Philippines"] = {}, ["Mountain Province, Philippines"] = {}, ["Negros Occidental, Philippines"] = {}, ["Negros Oriental, Philippines"] = {}, ["Northern Samar, Philippines"] = {}, ["Nueva Ecija, Philippines"] = {}, ["Nueva Vizcaya, Philippines"] = {}, ["Occidental Mindoro, Philippines"] = {}, ["Oriental Mindoro, Philippines"] = {}, ["Palawan, Philippines"] = {}, ["Pampanga, Philippines"] = {}, ["Pangasinan, Philippines"] = {}, ["Quezon, Philippines"] = {}, ["Quirino, Philippines"] = {}, ["Rizal, Philippines"] = {wp = "%l (province)"}, ["Romblon, Philippines"] = {}, ["Samar, Philippines"] = {wp = "%l (province)"}, ["Sarangani, Philippines"] = {}, ["Siquijor, Philippines"] = {}, ["Sorsogon, Philippines"] = {}, ["South Cotabato, Philippines"] = {}, ["Southern Leyte, Philippines"] = {}, ["Sultan Kudarat, Philippines"] = {}, ["Sulu, Philippines"] = {}, ["Surigao del Norte, Philippines"] = {}, ["Surigao del Sur, Philippines"] = {}, ["Tarlac, Philippines"] = {}, ["Tawi-Tawi, Philippines"] = {}, ["Zambales, Philippines"] = {}, ["Zamboanga del Norte, Philippines"] = {}, ["Zamboanga del Sur, Philippines"] = {}, ["Zamboanga Sibugay, Philippines"] = {}, -- not a province but treated as one; allow it to be referred to as a province in holonyms ["Metro Manila, Philippines"] = {placetype = {"region", "province"}}, } -- provinces of the Philippines export.philippines_group = { default_container = "Philippines", default_placetype = "province", default_divs = {"municipalities", "barangays"}, data = export.philippines_provinces, } export.poland_voivodeships = { ["Lower Silesian Voivodeship, Poland"] = {}, -- abbr DS, code 02, capital Wrocław ["Kuyavian-Pomeranian Voivodeship, Poland"] = {}, -- abbr KP, code 04, capital Bydgoszcz (seat of voivode), Toruń (seat of sejmik and marshal) ["Lublin Voivodeship, Poland"] = {}, -- abbr LU, code 06, capital Lublin ["Lubusz Voivodeship, Poland"] = {}, -- abbr LB, code 08, capital Gorzów Wielkopolski (seat of voivode), Zielona Góra (seat of sejmik and marshal) ["Lodz Voivodeship, Poland"] = {wp = "Łódź Voivodeship"}, -- abbr LD, code 10, capital Łódź ["Łódź Voivodeship, Poland"] = {alias_of = "Lodz Voivodeship, Poland", display = true, display_as_full = true}, ["Lesser Poland Voivodeship, Poland"] = {}, -- abbr MA, code 12, capital Kraków ["Masovian Voivodeship, Poland"] = {}, -- abbr MZ, code 14, capital Warsaw ["Opole Voivodeship, Poland"] = {}, -- abbr OP, code 16, capital Opole ["Subcarpathian Voivodeship, Poland"] = {}, -- abbr PK, code 18, capital Rzeszów ["Podlaskie Voivodeship, Poland"] = {}, -- abbr PD, code 20, capital Białystok ["Pomeranian Voivodeship, Poland"] = {}, -- abbr PM, code 22, capital Gdańsk ["Silesian Voivodeship, Poland"] = {}, -- abbr SL, code 24, capital Katowice ["Holy Cross Voivodeship, Poland"] = {wp = "Świętokrzyskie Voivodeship"}, -- abbr SK, code 26, capital Kielce ["Świętokrzyskie Voivodeship, Poland"] = {alias_of = "Holy Cross Voivodeship, Poland", display = true, display_as_full = true}, ["Warmian-Masurian Voivodeship, Poland"] = {}, -- abbr WN, code 28, capital Olsztyn ["Greater Poland Voivodeship, Poland"] = {}, -- abbr WP, code 30, capital Poznań ["West Pomeranian Voivodeship, Poland"] = {}, -- abbr ZP, code 32, capital Szczecin } -- voivodeships of Poland export.poland_group = { key_to_placename = make_key_to_placename(", Poland$", " Voivodeship$"), placename_to_key = make_placename_to_key(", Poland", " Voivodeship"), default_container = "Ba Lan", default_placetype = "voivodeship", default_divs = { -- "counties", -- not enough of them currently {type = "Polish colonies", cat_as = {{type = "villages", prep = "in"}}}, }, data = export.poland_voivodeships, } export.portugal_districts_and_autonomous_regions = { ["Azores, Portugal"] = {the = true, placetype = {"autonomous region", "region"}}, ["Aveiro District, Portugal"] = {}, ["Beja District, Portugal"] = {}, ["Braga District, Portugal"] = {}, ["Bragança District, Portugal"] = {}, ["Castelo Branco District, Portugal"] = {}, ["Coimbra District, Portugal"] = {}, ["Évora District, Portugal"] = {}, ["Faro District, Portugal"] = {}, ["Guarda District, Portugal"] = {}, ["Leiria District, Portugal"] = {}, ["Lisbon District, Portugal"] = {}, ["Lisboa District, Portugal"] = {alias_of = "Lisbon District, Portugal", display = true}, ["Madeira, Portugal"] = {placetype = {"autonomous region", "region"}}, ["Portalegre District, Portugal"] = {}, ["Porto District, Portugal"] = {}, ["Santarém District, Portugal"] = {}, ["Setúbal District, Portugal"] = {}, ["Viana do Castelo District, Portugal"] = {}, ["Vila Real District, Portugal"] = {}, ["Viseu District, Portugal"] = {}, } local function portugal_placename_to_key(placename) if placename == "Azores" or placename == "Madeira" then return placename .. ", Portugal" end if placename:find(" District$") then return placename .. ", Portugal" end return placename .. " District, Portugal" end -- districts and autonomous regions of Portugal export.portugal_group = { key_to_placename = make_key_to_placename(", Portugal$", " District$"), placename_to_key = portugal_placename_to_key, default_container = "Portugal", default_placetype = "district", default_divs = "municipalities", data = export.portugal_districts_and_autonomous_regions, } export.romania_counties = { ["Alba County, Romania"] = {}, ["Arad County, Romania"] = {}, ["Argeș County, Romania"] = {}, ["Bacău County, Romania"] = {}, ["Bihor County, Romania"] = {}, ["Bistrița-Năsăud County, Romania"] = {}, ["Botoșani County, Romania"] = {}, ["Brașov County, Romania"] = {}, ["Brăila County, Romania"] = {}, -- Bucharest: not in a county ["Buzău County, Romania"] = {}, ["Caraș-Severin County, Romania"] = {}, ["Cluj County, Romania"] = {}, ["Constanța County, Romania"] = {}, ["Covasna County, Romania"] = {}, ["Călărași County, Romania"] = {}, ["Dolj County, Romania"] = {}, ["Dâmbovița County, Romania"] = {}, ["Galați County, Romania"] = {}, ["Giurgiu County, Romania"] = {}, ["Gorj County, Romania"] = {}, ["Harghita County, Romania"] = {}, ["Hunedoara County, Romania"] = {}, ["Ialomița County, Romania"] = {}, ["Iași County, Romania"] = {}, ["Ilfov County, Romania"] = {}, ["Maramureș County, Romania"] = {}, ["Mehedinți County, Romania"] = {}, ["Mureș County, Romania"] = {}, ["Neamț County, Romania"] = {}, ["Olt County, Romania"] = {}, ["Prahova County, Romania"] = {}, ["Satu Mare County, Romania"] = {}, ["Sibiu County, Romania"] = {}, ["Suceava County, Romania"] = {}, ["Sălaj County, Romania"] = {}, ["Teleorman County, Romania"] = {}, ["Timiș County, Romania"] = {}, ["Tulcea County, Romania"] = {}, ["Vaslui County, Romania"] = {}, ["Vrancea County, Romania"] = {}, ["Vâlcea County, Romania"] = {}, } -- counties of Romania export.romania_group = { key_to_placename = make_key_to_placename(", Romania$", " County$"), placename_to_key = make_placename_to_key(", Romania", " County"), default_container = "Romania", default_placetype = "county", default_divs = "communes", data = export.romania_counties, } local function make_russia_federal_subject_spec(spectype, use_the, wp) return { placetype = spectype, the = not not use_the, bare_category_parent_type = {"federal subjects", spectype .. "s"}, wp = wp, } end local russia_autonomous_okrug_no_the = {placetype = {"autonomous okrug", "okrug"}, bare_category_parent_type = {"federal subjects", "autonomous okrugs"}} local russia_autonomous_okrug_the = {placetype = {"autonomous okrug", "okrug"}, bare_category_parent_type = {"federal subjects", "autonomous okrugs"}, the = true} local russia_krai = make_russia_federal_subject_spec("krai") local russia_oblast = make_russia_federal_subject_spec("oblast") local russia_republic_the = make_russia_federal_subject_spec("republic", "use the") local russia_republic_no_the = make_russia_federal_subject_spec("republic") export.russia_federal_subjects = { -- autonomous oblasts ["Jewish Autonomous Oblast, Russia"] = {the = true, placetype = {"autonomous oblast", "oblast"}, bare_category_parent_type = {"federal subjects", "autonomous oblasts"}}, -- autonomous okrugs ["Chukotka Autonomous Okrug, Russia"] = russia_autonomous_okrug_the, ["Chukotka, Russia"] = {alias_of = "Chukotka Autonomous Okrug, Russia"}, ["Khanty-Mansi Autonomous Okrug, Russia"] = russia_autonomous_okrug_the, ["Khanty-Mansia, Russia"] = {alias_of = "Khanty-Mansi Autonomous Okrug, Russia"}, ["Khantia-Mansia, Russia"] = {alias_of = "Khanty-Mansi Autonomous Okrug, Russia"}, ["Yugra, Russia"] = {alias_of = "Khanty-Mansi Autonomous Okrug, Russia"}, ["Nenets Autonomous Okrug, Russia"] = russia_autonomous_okrug_the, ["Nenetsia, Russia"] = {alias_of = "Nenets Autonomous Okrug, Russia"}, ["Yamalo-Nenets Autonomous Okrug, Russia"] = russia_autonomous_okrug_the, ["Yamalia, Russia"] = {alias_of = "Yamalo-Nenets Autonomous Okrug, Russia"}, -- krais ["Altai Krai, Russia"] = russia_krai, ["Kamchatka Krai, Russia"] = russia_krai, ["Khabarovsk Krai, Russia"] = russia_krai, ["Krasnodar Krai, Russia"] = russia_krai, ["Krasnoyarsk Krai, Russia"] = russia_krai, ["Perm Krai, Russia"] = russia_krai, ["Primorsky Krai, Russia"] = russia_krai, ["Stavropol Krai, Russia"] = russia_krai, ["Zabaykalsky Krai, Russia"] = russia_krai, -- oblasts ["Amur Oblast, Russia"] = russia_oblast, ["Arkhangelsk Oblast, Russia"] = russia_oblast, ["Astrakhan Oblast, Russia"] = russia_oblast, ["Belgorod Oblast, Russia"] = russia_oblast, ["Bryansk Oblast, Russia"] = russia_oblast, ["Chelyabinsk Oblast, Russia"] = russia_oblast, ["Irkutsk Oblast, Russia"] = russia_oblast, ["Ivanovo Oblast, Russia"] = russia_oblast, ["Kaliningrad Oblast, Russia"] = russia_oblast, ["Kaluga Oblast, Russia"] = russia_oblast, ["Kemerovo Oblast, Russia"] = russia_oblast, ["Kirov Oblast, Russia"] = russia_oblast, ["Kostroma Oblast, Russia"] = russia_oblast, ["Kurgan Oblast, Russia"] = russia_oblast, ["Kursk Oblast, Russia"] = russia_oblast, ["Leningrad Oblast, Russia"] = russia_oblast, ["Lipetsk Oblast, Russia"] = russia_oblast, ["Magadan Oblast, Russia"] = russia_oblast, ["Moscow Oblast, Russia"] = russia_oblast, ["Murmansk Oblast, Russia"] = russia_oblast, ["Nizhny Novgorod Oblast, Russia"] = russia_oblast, ["Novgorod Oblast, Russia"] = russia_oblast, ["Novosibirsk Oblast, Russia"] = russia_oblast, ["Omsk Oblast, Russia"] = russia_oblast, ["Orenburg Oblast, Russia"] = russia_oblast, ["Oryol Oblast, Russia"] = russia_oblast, ["Penza Oblast, Russia"] = russia_oblast, ["Pskov Oblast, Russia"] = russia_oblast, ["Rostov Oblast, Russia"] = russia_oblast, ["Ryazan Oblast, Russia"] = russia_oblast, ["Sakhalin Oblast, Russia"] = russia_oblast, ["Samara Oblast, Russia"] = russia_oblast, ["Saratov Oblast, Russia"] = russia_oblast, ["Smolensk Oblast, Russia"] = russia_oblast, ["Sverdlovsk Oblast, Russia"] = russia_oblast, ["Tambov Oblast, Russia"] = russia_oblast, ["Tomsk Oblast, Russia"] = russia_oblast, ["Tula Oblast, Russia"] = russia_oblast, ["Tver Oblast, Russia"] = russia_oblast, ["Tyumen Oblast, Russia"] = russia_oblast, ["Ulyanovsk Oblast, Russia"] = russia_oblast, ["Vladimir Oblast, Russia"] = russia_oblast, ["Volgograd Oblast, Russia"] = russia_oblast, ["Vologda Oblast, Russia"] = russia_oblast, ["Voronezh Oblast, Russia"] = russia_oblast, ["Yaroslavl Oblast, Russia"] = russia_oblast, -- republics -- -- We only need to include cases that aren't just shortened versions of the full federal subject name (i.e. where -- words like "Republic" and "Oblast" are omitted but the name is not otherwise modified; these are handled by -- key_to_placename). Non-display-canonicalizing aliases are generally due to differences in the presence or absence -- of "the". ["Adygea, Russia"] = russia_republic_no_the, ["Republic of Adygea, Russia"] = {alias_of = "Adygea, Russia"}, ["Bashkortostan, Russia"] = russia_republic_no_the, ["Republic of Bashkortostan, Russia"] = {alias_of = "Bashkortostan, Russia"}, ["Bashkiria, Russia"] = {alias_of = "Bashkortostan, Russia"}, ["Buryatia, Russia"] = russia_republic_no_the, ["Republic of Buryatia, Russia"] = {alias_of = "Buryatia, Russia"}, ["Dagestan, Russia"] = russia_republic_no_the, ["Republic of Dagestan, Russia"] = {alias_of = "Dagestan, Russia"}, ["Ingushetia, Russia"] = russia_republic_no_the, ["Republic of Ingushetia, Russia"] = {alias_of = "Ingushetia, Russia"}, ["Kalmykia, Russia"] = russia_republic_no_the, ["Republic of Kalmykia, Russia"] = {alias_of = "Kalmykia, Russia"}, ["Karelia, Russia"] = make_russia_federal_subject_spec("republic", nil, "Republic of Karelia"), ["Republic of Karelia, Russia"] = {alias_of = "Karelia, Russia"}, ["Khakassia, Russia"] = russia_republic_no_the, ["Republic of Khakassia, Russia"] = {alias_of = "Khakassia, Russia"}, ["Mordovia, Russia"] = russia_republic_no_the, ["Republic of Mordovia, Russia"] = {alias_of = "Mordovia, Russia"}, ["North Ossetia-Alania, Russia"] = make_russia_federal_subject_spec("republic", nil, "North Ossetia–Alania"), -- with en-dash ["Republic of North Ossetia-Alania, Russia"] = {alias_of = "North Ossetia-Alania, Russia"}, ["North Ossetia, Russia"] = {alias_of = "North Ossetia-Alania, Russia", display = true}, ["Alania, Russia"] = {alias_of = "North Ossetia-Alania, Russia", display = true}, ["Tatarstan, Russia"] = russia_republic_no_the, ["Republic of Tatarstan, Russia"] = {alias_of = "Tatarstan, Russia"}, ["Altai Republic, Russia"] = russia_republic_the, ["Chechnya, Russia"] = russia_republic_no_the, ["Chechen Republic, Russia"] = {alias_of = "Chechnya, Russia"}, ["Chuvashia, Russia"] = russia_republic_no_the, ["Chuvash Republic, Russia"] = {alias_of = "Chuvashia, Russia"}, ["Kabardino-Balkaria, Russia"] = russia_republic_no_the, ["Kabardino-Balkariya, Russia"] = {alias_of = "Kabardino-Balkaria, Russia", display = true}, ["Kabardino-Balkarian Republic, Russia"] = {alias_of = "Kabardino-Balkaria, Russia"}, ["Kabardino-Balkar Republic, Russia"] = {alias_of = "Kabardino-Balkaria, Russia", display = "Kabardino-Balkarian Republic, Russia"}, ["Karachay-Cherkessia, Russia"] = russia_republic_no_the, ["Karachay-Cherkess Republic, Russia"] = {alias_of = "Karachay-Cherkessia, Russia"}, ["Komi, Russia"] = make_russia_federal_subject_spec("republic", nil, "Komi Republic"), ["Komi Republic, Russia"] = {alias_of = "Komi, Russia"}, ["Mari El, Russia"] = russia_republic_no_the, ["Mari El Republic, Russia"] = {alias_of = "Mari El, Russia"}, ["Sakha, Russia"] = make_russia_federal_subject_spec("republic", nil, "Sakha Republic"), ["Sakha Republic, Russia"] = {alias_of = "Sakha, Russia"}, ["Yakutia, Russia"] = {alias_of = "Sakha, Russia"}, ["Yakutiya, Russia"] = {alias_of = "Sakha, Russia", display = "Yakutia, Russia"}, ["Republic of Yakutia (Sakha), Russia"] = {alias_of = "Sakha, Russia", display = "Sakha Republic, Russia", the = true}, ["Tuva, Russia"] = russia_republic_no_the, ["Tyva, Russia"] = {alias_of = "Tuva, Russia", display = true}, ["Tuva Republic, Russia"] = {alias_of = "Tuva, Russia"}, ["Tyva Republic, Russia"] = {alias_of = "Tuva, Russia", display= "Tuva Republic, Russia"}, ["Udmurtia, Russia"] = russia_republic_no_the, ["Udmurt Republic, Russia"] = {alias_of = "Udmurtia, Russia"}, -- Not included due to being unrecognized and only partly controlled: -- ["Crimea, Russia"] = make_russia_federal_subject_spec("republic", nil, "Republic of Crimea (Russia)") -- ["Donetsk People's Republic, Russia"] = russia_republic_the, -- ["Luhansk People's Republic, Russia"] = russia_republic_the, -- ["Zaporozhye Oblast, Russia"] = make_russia_federal_subject_spec("oblast", nil, "Russian occupation of Zaporizhzhia Oblast"), -- ["Kherson Oblast, Russia"] = make_russia_federal_subject_spec("oblast", nil, "Russian occupation of Kherson Oblast"), -- There are also federal cities (not included because they're cities): -- Moscow, Saint Petersburg; Sevastopol (unrecognized; same status as for "Crimea, Russia" above) } local function russia_key_to_placename(key) key = key:gsub(",.*", "") local full_placename = key if key == "Jewish Autonomous Oblast" then return full_placename, full_placename end local elliptical_placename for _, suffix in ipairs({"Krai", "Oblast"}) do elliptical_placename = key:match("^(.*) " .. suffix .. "$") if elliptical_placename then return full_placename, elliptical_placename end end return full_placename, full_placename end local function russia_placename_to_key(placename) local key = placename .. ", Russia" if export.russia_federal_subjects[key] then return key end -- We allow the user to say e.g. "obl/Samara" in place of "obl/Samara Oblast". for _, suffix in ipairs({"Krai", "Oblast"}) do local suffixed_key = placename .. " " .. suffix .. ", Russia" if export.russia_federal_subjects[suffixed_key] then return suffixed_key end end return placename .. ", Russia" end local function construct_russia_federal_subject_keydesc(group, key, spec) local placename = key:gsub(",.*", "") local linked_placename = export.construct_linked_placename(spec, placename) local placetype = spec.placetype if type(placetype) == "table" then placetype = placetype[1] end if placetype == "oblast" then -- Hack: Oblasts generally don't have entries under "Foo Oblast" -- but just under "Foo", so fix the linked key appropriately; -- doesn't apply to the Jewish Autonomous Oblast linked_placename = linked_placename:gsub(" Oblast%]%]", "%]%] Oblast") end return linked_placename .. ", a [[federal subject]] ([[" .. placetype .. "]]) of [[Russia]]" end -- federal subjects of Russia export.russia_group = { key_to_placename = russia_key_to_placename, placename_to_key = russia_placename_to_key, default_container = "Nga", default_keydesc = construct_russia_federal_subject_keydesc, default_overriding_bare_label_parents = {"federal subjects of Russia", "+++"}, data = export.russia_federal_subjects, } export.saudi_arabia_provinces = { ["Riyadh Province, Saudi Arabia"] = {}, ["Mecca Province, Saudi Arabia"] = {}, -- Name is too generic to assume it's in Saudi Arabia if not specified. ["Eastern Province, Saudi Arabia"] = {no_auto_augment_container = true, wp = "%l, %c"}, ["Medina Province, Saudi Arabia"] = {wp = "%l (%c)"}, ["Aseer Province, Saudi Arabia"] = {wp = "Asir"}, ["Asir Province, Saudi Arabia"] = {alias_of = "Aseer Province, Saudi Arabia", display = true}, ["Jazan Province, Saudi Arabia"] = {}, ["Qassim Province, Saudi Arabia"] = {wp = "Al-Qassim Province"}, ["Al-Qassim Province, Saudi Arabia"] = {alias_of = "Qassim Province, Saudi Arabia", display = true}, ["Tabuk Province, Saudi Arabia"] = {}, ["Hail Province, Saudi Arabia"] = {wp = "Ḥa'il Province"}, ["Ha'il Province, Saudi Arabia"] = {alias_of = "Hail Province, Saudi Arabia", display = true}, ["Ḥa'il Province, Saudi Arabia"] = {alias_of = "Hail Province, Saudi Arabia", display = true}, ["Al-Jouf Province, Saudi Arabia"] = {wp = "Al-Jawf Province"}, ["Al-Jawf Province, Saudi Arabia"] = {alias_of = "Al-Jouf Province, Saudi Arabia", display = true}, ["Najran Province, Saudi Arabia"] = {}, ["Northern Borders Province, Saudi Arabia"] = {}, ["Al-Bahah Province, Saudi Arabia"] = {}, } -- provinces of Saudi Arabia export.saudi_arabia_group = { key_to_placename = make_key_to_placename(", Saudi Arabia$", " Province$"), placename_to_key = make_placename_to_key(", Saudi Arabia", " Province"), default_container = "Ả Rập Xê Út", default_placetype = "province", data = export.saudi_arabia_provinces, } export.south_africa_provinces = { ["Eastern Cape, South Africa"] = {the = true}, ["Free State, South Africa"] = {the = true, wp = "%l (province)"}, ["Gauteng, South Africa"] = {}, ["KwaZulu-Natal, South Africa"] = {}, ["Limpopo, South Africa"] = {}, ["Mpumalanga, South Africa"] = {}, -- per Wikipedia and other sources, `North West` doesn't normally have `the` before it ["North West, South Africa"] = {wp = "%l (South African province)"}, ["Northern Cape, South Africa"] = {the = true}, ["Western Cape, South Africa"] = {the = true}, } -- provinces of South Africa export.south_africa_group = { default_container = "South Africa", default_placetype = "province", default_divs = "municipalities", data = export.south_africa_provinces, } export.south_korea_provinces = { ["North Chungcheong Province, South Korea"] = {}, ["South Chungcheong Province, South Korea"] = {}, ["Gangwon Province, South Korea"] = {wp = "%l, %c"}, ["Gyeonggi Province, South Korea"] = {}, ["North Gyeongsang Province, South Korea"] = {}, ["South Gyeongsang Province, South Korea"] = {}, ["North Jeolla Province, South Korea"] = {}, ["South Jeolla Province, South Korea"] = {}, ["Jeju Province, South Korea"] = {}, } -- provinces of South Korea export.south_korea_group = { key_to_placename = make_key_to_placename(", South Korea$", " Province$"), placename_to_key = make_placename_to_key(", South Korea", " Province"), default_container = "Hàn Quốc", default_placetype = "province", data = export.south_korea_provinces, } export.spain_autonomous_communities = { ["Andalusia, Spain"] = {}, ["Aragon, Spain"] = {}, ["Asturias, Spain"] = {}, ["Balearic Islands, Spain"] = {the = true}, ["Basque Country, Spain"] = {the = true, wp = "%l (autonomous community)"}, ["Canary Islands, Spain"] = {the = true}, ["Cantabria, Spain"] = {}, ["Castile and León, Spain"] = {}, ["Castilla-La Mancha, Spain"] = {wp = "Castilla–La Mancha"}, -- with en-dash ["Catalonia, Spain"] = {}, ["Community of Madrid, Spain"] = {the = true}, ["Extremadura, Spain"] = {}, ["Galicia, Spain"] = {wp = "%l (Spain)"}, ["La Rioja, Spain"] = {}, ["Murcia, Spain"] = {wp = "Region of %l"}, ["Navarre, Spain"] = {}, ["Valencia, Spain"] = {wp = "Valencian Community"}, ["Valencian Community, Spain"] = {alias_of = "Valencia, Spain"}, } -- autonomous communities of Spain export.spain_group = { default_container = "Tây Ban Nha", default_placetype = "autonomous community", default_divs = {"municipalities", "comarcas"}, data = export.spain_autonomous_communities, } export.taiwan_counties = { ["Changhua County, Taiwan"] = {}, ["Chiayi County, Taiwan"] = {}, ["Hsinchu County, Taiwan"] = {}, ["Hualien County, Taiwan"] = {}, ["Kinmen County, Taiwan"] = {wp = "Kinmen"}, ["Lienchiang County, Taiwan"] = {wp = "Matsu Islands"}, ["Miaoli County, Taiwan"] = {}, ["Nantou County, Taiwan"] = {}, ["Penghu County, Taiwan"] = {wp = "Penghu"}, ["Pingtung County, Taiwan"] = {}, ["Taitung County, Taiwan"] = {}, ["Yilan County, Taiwan"] = {wp = "%l, %c"}, ["Yunlin County, Taiwan"] = {}, } -- counties of Taiwan export.taiwan_group = { key_to_placename = make_key_to_placename(", Taiwan$", " County$"), placename_to_key = make_placename_to_key(", Taiwan", " County"), default_container = "Đài Loan", default_placetype = "county", default_divs = {"districts", "townships"}, data = export.taiwan_counties, } export.thailand_provinces = { -- Bangkok (special administrative area) ["Amnat Charoen Province, Thailand"] = {}, ["Ang Thong Province, Thailand"] = {}, ["Bueng Kan Province, Thailand"] = {}, ["Buriram Province, Thailand"] = {}, ["Chachoengsao Province, Thailand"] = {}, ["Chai Nat Province, Thailand"] = {}, ["Chaiyaphum Province, Thailand"] = {}, ["Chanthaburi Province, Thailand"] = {}, ["Chiang Mai Province, Thailand"] = {}, ["Chiang Rai Province, Thailand"] = {}, ["Chonburi Province, Thailand"] = {}, ["Chumphon Province, Thailand"] = {}, ["Kalasin Province, Thailand"] = {}, ["Kamphaeng Phet Province, Thailand"] = {}, ["Kanchanaburi Province, Thailand"] = {}, ["Khon Kaen Province, Thailand"] = {}, ["Krabi Province, Thailand"] = {}, ["Lampang Province, Thailand"] = {}, ["Lamphun Province, Thailand"] = {}, ["Loei Province, Thailand"] = {}, ["Lopburi Province, Thailand"] = {}, ["Mae Hong Son Province, Thailand"] = {}, ["Maha Sarakham Province, Thailand"] = {}, ["Mukdahan Province, Thailand"] = {}, ["Nakhon Nayok Province, Thailand"] = {}, ["Nakhon Pathom Province, Thailand"] = {}, ["Nakhon Phanom Province, Thailand"] = {}, ["Nakhon Ratchasima Province, Thailand"] = {}, ["Nakhon Sawon Province, Thailand"] = {}, ["Nakhon Si Thammarat Province, Thailand"] = {}, ["Nan Province, Thailand"] = {}, ["Narathiwat Province, Thailand"] = {}, ["Nong Bua Lamphu Province, Thailand"] = {}, ["Nong Khai Province, Thailand"] = {}, ["Nonthaburi Province, Thailand"] = {}, ["Pathum Thani Province, Thailand"] = {}, ["Pattani Province, Thailand"] = {}, ["Phang Nga Province, Thailand"] = {}, ["Phatthalung Province, Thailand"] = {}, ["Phayao Province, Thailand"] = {}, ["Phetchabun Province, Thailand"] = {}, ["Phetchaburi Province, Thailand"] = {}, ["Phichit Province, Thailand"] = {}, ["Phitsanulok Province, Thailand"] = {}, ["Phra Nakhon Si Ayutthaya Province, Thailand"] = {}, ["Phrae Province, Thailand"] = {}, ["Phuket Province, Thailand"] = {}, ["Prachinburi Province, Thailand"] = {}, ["Prachuap Khiri Khan Province, Thailand"] = {}, ["Ranong Province, Thailand"] = {}, ["Ratchaburi Province, Thailand"] = {}, ["Rayong Province, Thailand"] = {}, ["Roi Et Province, Thailand"] = {}, ["Sa Kaeo Province, Thailand"] = {}, ["Sakon Nakhon Province, Thailand"] = {}, ["Samut Prakan Province, Thailand"] = {}, ["Samut Sakhon Province, Thailand"] = {}, ["Samut Songkhram Province, Thailand"] = {}, ["Saraburi Province, Thailand"] = {}, ["Satun Province, Thailand"] = {}, ["Sing Buri Province, Thailand"] = {}, ["Sisaket Province, Thailand"] = {}, ["Songkhla Province, Thailand"] = {}, ["Sukhothai Province, Thailand"] = {}, ["Suphan Buri Province, Thailand"] = {}, ["Surat Thani Province, Thailand"] = {}, ["Surin Province, Thailand"] = {}, ["Tak Province, Thailand"] = {}, ["Trang Province, Thailand"] = {}, ["Trat Province, Thailand"] = {}, ["Ubon Ratchathani Province, Thailand"] = {}, ["Udon Thani Province, Thailand"] = {}, ["Uthai Thani Province, Thailand"] = {}, ["Uttaradit Province, Thailand"] = {}, ["Yala Province, Thailand"] = {}, ["Yasothon Province, Thailand"] = {}, } -- provinces of Thailand export.thailand_group = { key_to_placename = make_key_to_placename(", Thailand$", " Province$"), placename_to_key = make_placename_to_key(", Thailand", " Province"), default_container = "Thái Lan", default_placetype = "province", default_divs = "districts", -- For obscure reasons, provinces of Iran, Laos, Thailand and Vietnam use lowercase 'province' default_wp = "%e province", data = export.thailand_provinces, } export.turkey_provinces = { ["Adana Province, Turkey"] = {}, -- code 01 ["Adıyaman Province, Turkey"] = {}, -- code 02 ["Afyonkarahisar Province, Turkey"] = {}, -- code 03 ["Ağrı Province, Turkey"] = {}, -- code 04 ["Amasya Province, Turkey"] = {}, -- code 05 ["Ankara Province, Turkey"] = {}, -- code 06 ["Antalya Province, Turkey"] = {}, -- code 07 ["Artvin Province, Turkey"] = {}, -- code 08 ["Aydın Province, Turkey"] = {}, -- code 09 ["Balıkesir Province, Turkey"] = {}, -- code 10 ["Bilecik Province, Turkey"] = {}, -- code 11 ["Bingöl Province, Turkey"] = {}, -- code 12 ["Bitlis Province, Turkey"] = {}, -- code 13 ["Bolu Province, Turkey"] = {}, -- code 14 ["Burdur Province, Turkey"] = {}, -- code 15 ["Bursa Province, Turkey"] = {}, -- code 16 ["Çanakkale Province, Turkey"] = {}, -- code 17 ["Çankırı Province, Turkey"] = {}, -- code 18 ["Çorum Province, Turkey"] = {}, -- code 19 ["Denizli Province, Turkey"] = {}, -- code 20 ["Diyarbakır Province, Turkey"] = {}, -- code 21 ["Edirne Province, Turkey"] = {}, -- code 22 ["Elazığ Province, Turkey"] = {}, -- code 23 ["Elâzığ Province, Turkey"] = {alias_of = "Elazığ Province, Turkey", display = true}, ["Erzincan Province, Turkey"] = {}, -- code 24 ["Erzurum Province, Turkey"] = {}, -- code 25 ["Eskişehir Province, Turkey"] = {}, -- code 26 ["Gaziantep Province, Turkey"] = {}, -- code 27 ["Giresun Province, Turkey"] = {}, -- code 28 ["Gümüşhane Province, Turkey"] = {}, -- code 29 ["Hakkâri Province, Turkey"] = {}, -- code 30 ["Hakkari Province, Turkey"] = {alias_of = "Hakkâri Province, Turkey", display = true}, ["Hatay Province, Turkey"] = {}, -- code 31 ["Isparta Province, Turkey"] = {}, -- code 32 ["Mersin Province, Turkey"] = {}, -- code 33 -- ["Istanbul Province, Turkey"] = {}, -- code 34; this is coextensive with the city itself ["İzmir Province, Turkey"] = {}, -- code 35 ["Izmir Province, Turkey"] = {alias_of = "İzmir Province, Turkey", display = true}, ["Kars Province, Turkey"] = {}, -- code 36 ["Kastamonu Province, Turkey"] = {}, -- code 37 ["Kayseri Province, Turkey"] = {}, -- code 38 ["Kırklareli Province, Turkey"] = {}, -- code 39 ["Kırşehir Province, Turkey"] = {}, -- code 40 ["Kocaeli Province, Turkey"] = {}, -- code 41 ["Konya Province, Turkey"] = {}, -- code 42 ["Kütahya Province, Turkey"] = {}, -- code 43 ["Malatya Province, Turkey"] = {}, -- code 44 ["Manisa Province, Turkey"] = {}, -- code 45 ["Kahramanmaraş Province, Turkey"] = {}, -- code 46 ["Mardin Province, Turkey"] = {}, -- code 47 ["Muğla Province, Turkey"] = {}, -- code 48 ["Muş Province, Turkey"] = {}, -- code 49 ["Nevşehir Province, Turkey"] = {}, -- code 50 ["Niğde Province, Turkey"] = {}, -- code 51 ["Ordu Province, Turkey"] = {}, -- code 52 ["Rize Province, Turkey"] = {}, -- code 53 ["Sakarya Province, Turkey"] = {}, -- code 54 ["Samsun Province, Turkey"] = {}, -- code 55 ["Siirt Province, Turkey"] = {}, -- code 56 ["Sinop Province, Turkey"] = {}, -- code 57 ["Sivas Province, Turkey"] = {}, -- code 58 ["Tekirdağ Province, Turkey"] = {}, -- code 59 ["Tokat Province, Turkey"] = {}, -- code 60 ["Trabzon Province, Turkey"] = {}, -- code 61 ["Tunceli Province, Turkey"] = {}, -- code 62 ["Şanlıurfa Province, Turkey"] = {}, -- code 63 ["Uşak Province, Turkey"] = {}, -- code 64 ["Van Province, Turkey"] = {}, -- code 65 ["Yozgat Province, Turkey"] = {}, -- code 66 ["Zonguldak Province, Turkey"] = {}, -- code 67 ["Aksaray Province, Turkey"] = {}, -- code 68 ["Bayburt Province, Turkey"] = {}, -- code 69 ["Karaman Province, Turkey"] = {}, -- code 70 ["Kırıkkale Province, Turkey"] = {}, -- code 71 ["Batman Province, Turkey"] = {}, -- code 72 ["Şırnak Province, Turkey"] = {}, -- code 73 ["Bartın Province, Turkey"] = {}, -- code 74 ["Ardahan Province, Turkey"] = {}, -- code 75 ["Iğdır Province, Turkey"] = {}, -- code 76 ["Yalova Province, Turkey"] = {}, -- code 77 ["Karabük Province, Turkey"] = {}, -- code 78 ["Kilis Province, Turkey"] = {}, -- code 79 ["Osmaniye Province, Turkey"] = {}, -- code 80 ["Düzce Province, Turkey"] = {}, -- code 81 } -- provinces of Turkey export.turkey_group = { key_to_placename = make_key_to_placename(", Turkey$", " Province$"), placename_to_key = make_placename_to_key(", Turkey", " Province"), default_container = "Thổ Nhĩ Kỳ", default_placetype = "province", default_divs = "districts", data = export.turkey_provinces, } export.ukraine_oblasts = { ["Cherkasy Oblast, Ukraine"] = {}, -- capital [[Cherkasy]], license plate prefix CA, IA ["Chernihiv Oblast, Ukraine"] = {}, -- capital [[Chernihiv]], license plate prefix CB, IB ["Chernivtsi Oblast, Ukraine"] = {}, -- capital [[Chernivtsi]], license plate prefix CE, IE -- apparently will be renamed to 'Dnipro Oblast' ["Dnipropetrovsk Oblast, Ukraine"] = {}, -- capital [[Dnipro]], license plate prefix AE, KE ["Donetsk Oblast, Ukraine"] = {}, -- capital ''[[Donetsk]] ([[Kramatorsk]])'', license plate prefix AH, KH ["Ivano-Frankivsk Oblast, Ukraine"] = {}, -- capital [[Ivano-Frankivsk]], license plate prefix AT, KT ["Kharkiv Oblast, Ukraine"] = {}, -- capital [[Kharkiv]], license plate prefix AX, KX ["Kherson Oblast, Ukraine"] = {}, -- capital ''[[Kherson]]'', license plate prefix ''BT, HT'' ["Khmelnytskyi Oblast, Ukraine"] = {}, -- capital [[Khmelnytskyi]], license plate prefix BX, HX -- apparently will be renamed to 'Kropyvnytskyi Oblast' ["Kirovohrad Oblast, Ukraine"] = {}, -- capital [[Kropyvnytskyi]], license plate prefix BA, HA ["Kyiv Oblast, Ukraine"] = {}, -- capital [[Kyiv]], license plate prefix AI, KI ["Kiev Oblast, Ukraine"] = {alias_of = "Kyiv Oblast, Ukraine", display = true}, ["Luhansk Oblast, Ukraine"] = {}, -- capital ''[[Luhansk]] ([[Sievierodonetsk]])'', license plate prefix BB, HB ["Lviv Oblast, Ukraine"] = {}, -- capital [[Lviv]], license plate prefix BC, HC ["Mykolaiv Oblast, Ukraine"] = {}, -- capital [[Mykolaiv]], license plate prefix BE, HE ["Odesa Oblast, Ukraine"] = {}, -- capital [[Odesa]], license plate prefix BH, HH ["Odessa Oblast, Ukraine"] = {alias_of = "Odesa Oblast, Ukraine", display = true}, ["Poltava Oblast, Ukraine"] = {}, -- capital [[Poltava]], license plate prefix BI, HI ["Rivne Oblast, Ukraine"] = {}, -- capital [[Rivne]], license plate prefix BK, HK ["Sumy Oblast, Ukraine"] = {}, -- capital [[Sumy]], license plate prefix BM, HM ["Ternopil Oblast, Ukraine"] = {}, -- capital [[Ternopil]], license plate prefix BO, HO ["Vinnytsia Oblast, Ukraine"] = {}, -- capital [[Vinnytsia]], license plate prefix AB, KB ["Volyn Oblast, Ukraine"] = {}, -- capital [[Lutsk]], license plate prefix AC, KC ["Zakarpattia Oblast, Ukraine"] = {}, -- capital [[Uzhhorod]], license plate prefix AO, KO ["Zaporizhzhia Oblast, Ukraine"] = {}, -- capital ''[[Zaporizhzhia]]'', license plate prefix AP, KP ["Zaporizhia Oblast, Ukraine"] = {alias_of = "Zaporizhzhia Oblast, Ukraine", display = true}, ["Zhytomyr Oblast, Ukraine"] = {}, -- capital [[Zhytomyr]], license plate prefix AM, KM } -- oblasts of Ukraine export.ukraine_group = { key_to_placename = make_key_to_placename(", Ukraine$", " Oblast$"), placename_to_key = make_placename_to_key(", Ukraine", " Oblast"), default_container = "Ukraina", default_placetype = "oblast", default_divs = {"raions", "hromadas"}, data = export.ukraine_oblasts, } export.united_kingdom_constituent_countries = { ["England"] = {divs = { "counties", "districts", {type = "local government districts", cat_as = "districts"}, { type = "local government districts with borough status", cat_as = {"districts", "boroughs"}, }, {type = "boroughs", cat_as = {"districts", "boroughs"}}, {type = "civil parishes", container_parent_type = false}, }}, ["Northern Ireland"] = { placetype = {"constituent country", "province", "quốc gia"}, divs = {"counties", "districts"}, }, ["Scotland"] = {divs = { {type = "council areas", container_parent_type = false}, "districts", }}, ["Wales"] = {divs = { "counties", {type = "county boroughs", container_parent_type = false}, {type = "communities", container_parent_type = false}, {type = "Welsh communities", cat_as = {{type = "communities", container_parent_type = false}}}, }}, } -- constituent countries and provinces of the United Kingdom export.united_kingdom_group = { placename_to_key = false, default_container = "United Kingdom", default_placetype = {"constituent country", "quốc gia"}, addl_divs = { "traditional counties", {type = "historical counties", cat_as = "traditional counties"}, }, -- Don't create categories like 'Category:en:Towns in the United Kingdom' -- or 'Category:en:Places in the United Kingdom'. default_no_container_cat = true, data = export.united_kingdom_constituent_countries, } export.england_counties = { -- NOTE: We used to have various other "no longer" counties commented out, which seems to refer to counties that -- existed officially at some point between 1889 and 1974, which I have removed. I have only kept the three -- ceremonial counties that existed from 1974 (when ceremonial counties were created) to 1996, as well as those -- still considered "historic counties" per [[w:Historic counties of England]]. -- ["Avon, England"] = {wp = "%l (county)"}, -- no longer (1974 to 1996) ["Bedfordshire, England"] = {}, ["Berkshire, England"] = {}, -- ["Brighton and Hove, England"] = {}, -- city -- ["Bristol, England"] = {}, -- city ["Buckinghamshire, England"] = {}, ["Cambridgeshire, England"] = {}, ["Cheshire, England"] = {}, -- ["Cleveland, England"] = {wp = "%l (county)"}, -- no longer (1974 to 1996) ["Cornwall, England"] = {}, -- ["Cumberland, England"] = {}, -- no longer (historic county) ["Cumbria, England"] = {}, ["Derbyshire, England"] = {}, ["Devon, England"] = {}, ["Dorset, England"] = {}, ["County Durham, England"] = {}, ["East Sussex, England"] = {}, ["Essex, England"] = {}, ["Gloucestershire, England"] = {}, ["Greater London, England"] = {}, ["Greater Manchester, England"] = {}, ["Hampshire, England"] = {}, ["Herefordshire, England"] = {}, ["Hertfordshire, England"] = {}, -- ["Humberside, England"] = {}, -- no longer (1974 to 1996) -- ["Huntingdonshire, England"] = {}, -- no longer (historic county) ["Isle of Wight, England"] = {the = true}, ["Kent, England"] = {}, ["Lancashire, England"] = {}, ["Leicestershire, England"] = {}, ["Lincolnshire, England"] = {}, ["Merseyside, England"] = {}, -- ["Middlesex, England"] = {}, -- no longer (historic county) ["Norfolk, England"] = {}, ["Northamptonshire, England"] = {}, ["Northumberland, England"] = {}, ["North Yorkshire, England"] = {}, ["Nottinghamshire, England"] = {}, ["Oxfordshire, England"] = {}, ["Rutland, England"] = {}, ["Shropshire, England"] = {}, ["Somerset, England"] = {}, ["South Humberside, England"] = {}, ["South Yorkshire, England"] = {}, ["Staffordshire, England"] = {}, ["Suffolk, England"] = {}, ["Surrey, England"] = {}, -- ["Sussex, England"] = {}, -- no longer (historic county) ["Tyne and Wear, England"] = {}, ["Warwickshire, England"] = {}, ["West Midlands, England"] = {the = true, wp = "%l (county)"}, -- ["Westmorland, England"] = {}, -- no longer (historic county) ["West Sussex, England"] = {}, ["West Yorkshire, England"] = {}, ["Wiltshire, England"] = {}, ["Worcestershire, England"] = {}, -- ["Yorkshire, England"] = {}, -- no longer (historic county) ["East Riding of Yorkshire, England"] = {the = true}, } -- counties of England export.england_group = { default_container = {key = "England", placetype = "constituent country"}, default_placetype = "county", default_divs = { "districts", {type = "local government districts", cat_as = "districts"}, { type = "local government districts with borough status", cat_as = {"districts", "boroughs"}, }, {type = "boroughs", cat_as = {"districts", "boroughs"}}, "civil parishes", }, data = export.england_counties, } export.northern_ireland_counties = { ["County Antrim, Northern Ireland"] = {}, ["County Armagh, Northern Ireland"] = {}, ["City of Belfast, Northern Ireland"] = {the = true, is_city = true, wp = "Belfast"}, ["County Down, Northern Ireland"] = {}, ["County Fermanagh, Northern Ireland"] = {}, ["County Londonderry, Northern Ireland"] = {}, ["City of Derry, Northern Ireland"] = {the = true, is_city = true, wp = "Derry"}, ["County Tyrone, Northern Ireland"] = {}, } -- counties of Northern Ireland export.northern_ireland_group = { key_to_placename = make_irish_type_key_to_placename(", Northern Ireland$"), placename_to_key = make_irish_type_placename_to_key(", Northern Ireland"), default_container = {key = "Northern Ireland", placetype = "constituent country"}, default_placetype = "county", data = export.northern_ireland_counties, } export.scotland_council_areas = { ["Aberdeenshire, Scotland"] = {}, ["Angus, Scotland"] = {wp = "%l, %c"}, ["Argyll and Bute, Scotland"] = {}, ["City of Aberdeen, Scotland"] = {the = true, wp = "Aberdeen"}, ["Aberdeen"] = {alias_of = "City of Aberdeen, Scotland"}, ["Aberdeen City"] = {alias_of = "City of Aberdeen, Scotland"}, ["City of Dundee, Scotland"] = {the = true, wp = "Dundee"}, ["Dundee"] = {alias_of = "City of Dundee, Scotland"}, ["Dundee City"] = {alias_of = "City of Dundee, Scotland"}, ["City of Edinburgh, Scotland"] = {the = true, wp = "%l council area"}, ["Edinburgh"] = {alias_of = "City of Edinburgh, Scotland"}, ["City of Glasgow, Scotland"] = {the = true, wp = "Glasgow"}, ["Glasgow"] = {alias_of = "City of Glasgow, Scotland"}, ["Clackmannanshire, Scotland"] = {}, ["Dumfries and Galloway, Scotland"] = {}, ["East Ayrshire, Scotland"] = {}, ["East Dunbartonshire, Scotland"] = {}, ["East Lothian, Scotland"] = {}, ["East Renfrewshire, Scotland"] = {}, ["Falkirk, Scotland"] = {wp = "%l council area"}, ["Fife, Scotland"] = {}, ["Highland, Scotland"] = {wp = "%l council area"}, ["Inverclyde, Scotland"] = {}, ["Midlothian, Scotland"] = {}, ["Moray, Scotland"] = {}, ["North Ayrshire, Scotland"] = {}, ["North Lanarkshire, Scotland"] = {}, ["Orkney Islands, Scotland"] = {the = true}, ["Perth and Kinross, Scotland"] = {}, ["Renfrewshire, Scotland"] = {}, ["Scottish Borders, Scotland"] = {the = true}, ["Shetland Islands, Scotland"] = {the = true}, ["South Ayrshire, Scotland"] = {}, ["South Lanarkshire, Scotland"] = {}, ["Stirling, Scotland"] = {wp = "%l council area"}, ["West Dunbartonshire, Scotland"] = {}, ["West Lothian, Scotland"] = {}, ["Western Isles, Scotland"] = {the = true, wp = "Outer Hebrides"}, ["Na h-Eileanan Siar, Scotland"] = {alias_of = "Western Isles, Scotland"}, } -- council areas of Scotland export.scotland_group = { default_container = {key = "Scotland", placetype = "constituent country"}, default_placetype = "council area", data = export.scotland_council_areas, } export.wales_principal_areas = { ["Blaenau Gwent, Wales"] = {}, ["Bridgend, Wales"] = {wp = "%l County Borough"}, ["Caerphilly, Wales"] = {wp = "%l County Borough"}, -- ["Cardiff, Wales"] = {placetype = "thành phố"}, ["Carmarthenshire, Wales"] = {placetype = "county"}, ["Ceredigion, Wales"] = {placetype = "county"}, ["Conwy, Wales"] = {wp = "%l County Borough"}, ["Denbighshire, Wales"] = {placetype = "county"}, ["Flintshire, Wales"] = {placetype = "county"}, ["Gwynedd, Wales"] = {placetype = "county"}, ["Isle of Anglesey, Wales"] = {the = true, placetype = "county"}, ["Anglesey, Wales"] = {alias_of = "Isle of Anglesey, Wales"}, -- differs in "the" ["Merthyr Tydfil, Wales"] = {wp = "%l County Borough"}, ["Monmouthshire, Wales"] = {placetype = "county"}, ["Neath Port Talbot, Wales"] = {}, -- ["Newport, Wales"] = {placetype = "thành phố", wp = "%l, %c"}, ["Pembrokeshire, Wales"] = {placetype = "county"}, ["Powys, Wales"] = {placetype = "county"}, ["Rhondda Cynon Taf, Wales"] = {}, -- ["Swansea, Wales"] = {placetype = "thành phố"}, ["Torfaen, Wales"] = {}, ["Vale of Glamorgan, Wales"] = {the = true}, ["Wrexham, Wales"] = {wp = "%l County Borough"}, } -- principal areas (cities, counties and county boroughs) of Wales export.wales_group = { default_container = {key = "Wales", placetype = "constituent country"}, default_placetype = "county borough", data = export.wales_principal_areas, } export.united_states_states = { ["Alabama, USA"] = {}, ["Alaska, USA"] = {divs = { {type = "boroughs", container_parent_type = "counties"}, {type = "borough seats", container_parent_type = "county seats"}, }}, ["Arizona, USA"] = {}, ["Arkansas, USA"] = {}, ["California, USA"] = {}, ["Colorado, USA"] = {divs = {"counties", "county seats", "municipalities"}}, ["Connecticut, USA"] = {divs = {"counties", "county seats", "municipalities"}}, ["Delaware, USA"] = {}, ["Florida, USA"] = {}, ["Georgia, USA"] = {wp = "%l (U.S. state)"}, ["Hawaii, USA"] = {addl_parents = {"Polynesia"}}, ["Idaho, USA"] = {}, ["Illinois, USA"] = {}, ["Indiana, USA"] = {}, ["Iowa, USA"] = {}, ["Kansas, USA"] = {}, ["Kentucky, USA"] = {}, ["Louisiana, USA"] = {divs = { {type = "parishes", container_parent_type = "counties"}, {type = "parish seats", container_parent_type = "county seats"}, }}, ["Maine, USA"] = {}, ["Maryland, USA"] = {}, ["Massachusetts, USA"] = {}, ["Michigan, USA"] = {}, ["Minnesota, USA"] = {}, ["Mississippi, USA"] = {}, ["Missouri, USA"] = {}, ["Montana, USA"] = {}, ["Nebraska, USA"] = {}, ["Nevada, USA"] = {}, ["New Hampshire, USA"] = {}, ["New Jersey, USA"] = {divs = { "counties", "county seats", {type = "boroughs", prep = "in"}, }}, ["New Mexico, USA"] = {}, ["New York, USA"] = {wp = "%l (state)"}, ["North Carolina, USA"] = {}, ["North Dakota, USA"] = {}, ["Ohio, USA"] = {}, ["Oklahoma, USA"] = {}, ["Oregon, USA"] = {}, ["Pennsylvania, USA"] = {divs = { "counties", "county seats", {type = "boroughs", prep = "in"}, }}, ["Rhode Island, USA"] = {}, ["South Carolina, USA"] = {}, ["South Dakota, USA"] = {}, ["Tennessee, USA"] = {}, ["Texas, USA"] = {}, ["Utah, USA"] = {}, ["Vermont, USA"] = {}, ["Virginia, USA"] = {}, ["Washington, USA"] = {wp = "%l (state)"}, ["West Virginia, USA"] = {}, ["Wisconsin, USA"] = {}, ["Wyoming, USA"] = {}, } -- states of the United States export.united_states_group = { placename_to_key = make_placename_to_key(", USA"), default_container = "Hoa Kỳ", default_placetype = "state", default_divs = {"counties", "county seats"}, addl_divs = { {type = "census-designated places", prep = "in"}, {type = "unincorporated communities", prep = "in"}, }, data = export.united_states_states, } export.vietnam_provinces = { -- [[Northeast (Vietnam)|Northeast]] region ["Bắc Giang, Việt Nam"] = {}, -- capital [[Bắc Giang]] ["Bắc Kạn, Việt Nam"] = {}, -- capital [[Bắc Kạn]] ["Cao Bằng, Việt Nam"] = {}, -- capital [[Cao Bằng]] ["Hà Giang, Việt Nam"] = {}, -- capital [[Hà Giang]] ["Lạng Sơn, Việt Nam"] = {}, -- capital [[Lạng Sơn]] ["Phú Thọ, Việt Nam"] = {}, -- capital [[Việt Trì]] ["Quảng Ninh, Việt Nam"] = {}, -- capital [[Hạ Long]] ["Thái Nguyên, Việt Nam"] = {}, -- capital [[Thái Nguyên]] ["Tuyên Quang, Việt Nam"] = {}, -- capital [[Tuyên Quang]] -- [[Northwest (Vietnam)|Northwest]] region ["Lào Cai, Việt Nam"] = {}, -- capital [[Lào Cai]] ["Yên Bái, Việt Nam"] = {}, -- capital [[Yên Bái]] ["Điện Biên, Việt Nam"] = {}, -- capital [[Điện Biên Phủ]] ["Hòa Bình, Việt Nam"] = {}, ["Lai Châu, Việt Nam"] = {}, -- capital [[Lai Châu]] ["Sơn La, Việt Nam"] = {}, -- capital [[Sơn La]] -- [[Red River Delta]] region ["Bắc Ninh, Việt Nam"] = {}, -- capital [[Bắc Ninh]] ["Hà Nam, Việt Nam"] = {}, -- capital [[Phủ Lý]] ["Hải Dương, Việt Nam"] = {}, -- capital [[Hải Dương]] ["Hưng Yên, Việt Nam"] = {}, -- capital [[Hưng Yên]] ["Nam Định, Việt Nam"] = {}, -- capital [[Nam Định]] ["Ninh Bình, Việt Nam"] = {}, -- capital [[Ninh Bình|Hoa Lư]] ["Thái Bình, Việt Nam"] = {}, -- capital [[Thái Bình]] ["Vĩnh Phúc, Việt Nam"] = {}, -- capital [[Vĩnh Yên]] -- ["Hanoi"] = {placetype = {"municipality", "thành phố"}}, -- capital [[Hoàn Kiếm district]] -- ["Haiphong"] = {placetype = {"municipality", "thành phố"}}, -- capital [[Hồng Bàng district]] -- [[North Central Coast]] region ["Hà Tĩnh, Việt Nam"] = {}, -- capital [[Hà Tĩnh]] ["Nghệ An, Việt Nam"] = {}, -- capital [[Vinh]] ["Quảng Bình, Việt Nam"] = {}, -- capital [[Đồng Hới]] ["Quảng Trị, Việt Nam"] = {}, -- capital [[Đông Hà]] ["Thanh Hóa, Việt Nam"] = {}, -- ["Hue"] = {placetype = {"municipality", "thành phố"}, wp = "Huế"}, -- capital [[Thuận Hoá district]] -- [[Central Highlands (Vietnam)|Central Highlands]] region ["Đắk Lắk, Việt Nam"] = {}, -- capital [[Buôn Ma Thuột]] ["Đăk Nông, Việt Nam"] = {}, -- capital [[Gia Nghĩa]] ["Gia Lai, Việt Nam"] = {}, -- capital [[Pleiku]] ["Kon Tum, Việt Nam"] = {}, -- capital [[Kon Tum]] ["Lâm Đồng, Việt Nam"] = {}, -- capital [[Đà Lạt]] -- [[South Central Coast]] region ["Bình Định, Việt Nam"] = {}, -- capital [[Quy Nhon]] ["Bình Thuận, Việt Nam"] = {}, -- capital [[Phan Thiết]] ["Khánh Hòa, Việt Nam"] = {}, ["Ninh Thuận, Việt Nam"] = {}, -- capital [[Phan Rang–Tháp Chàm]] ["Phú Yên, Việt Nam"] = {}, -- capital [[Tuy Hoà]] ["Quảng Nam, Việt Nam"] = {}, -- capital [[Tam Kỳ]] ["Quảng Ngãi, Việt Nam"] = {}, -- capital [[Quảng Ngãi]] -- ["Da Nang"] = {placetype = {"municipality", "thành phố"}}, -- capital [[Hải Châu district]] -- [[Southeast (Vietnam)|Southeast]] region ["Bà Rịa–Vũng Tàu, Việt Nam"] = {}, -- capital [[Bà Rịa]] ["Bình Dương, Việt Nam"] = {}, -- capital [[Thủ Dầu Một]] ["Bình Phước, Việt Nam"] = {}, -- capital [[Đồng Xoài]] ["Đồng Nai, Việt Nam"] = {}, -- capital [[Biên Hoà]] ["Tây Ninh, Việt Nam"] = {}, -- capital [[Tây Ninh]] -- ["Thành phố Hồ Chí Minh"] = {placetype = {"municipality", "thành phố"}}, -- capital [[District 1, Thành phố Hồ Chí Minh|'''District 1''']] -- [[Mekong Delta]] region ["An Giang, Việt Nam"] = {}, -- capital [[Long Xuyên]] ["Bạc Liêu, Việt Nam"] = {}, -- capital [[Bạc Liêu]] ["Bến Tre, Việt Nam"] = {}, -- capital [[Bến Tre]] ["Cà Mau, Việt Nam"] = {}, -- capital [[Cà Mau]] ["Đồng Tháp, Việt Nam"] = {}, -- capital [[Cao Lãnh City|Cao Lãnh]] ["Hậu Giang, Việt Nam"] = {}, -- capital [[Vị Thanh]] ["Kiên Giang, Việt Nam"] = {}, -- capital [[Rạch Giá]] ["Long An, Việt Nam"] = {}, -- capital [[Tân An]] ["Sóc Trăng, Việt Nam"] = {}, -- capital [[Sóc Trăng]] ["Tiền Giang, Việt Nam"] = {}, -- capital [[Mỹ Tho]] ["Trà Vinh, Việt Nam"] = {}, -- capital [[Trà Vinh]] ["Vĩnh Long, Việt Nam"] = {}, -- capital [[Vĩnh Long]] -- ["Can Tho"] = {placetype = {"municipality", "thành phố"}, wp = "Cần Thơ"}, -- capital [[Ninh Kiều district]] } -- provinces of Vietnam export.vietnam_group = { key_to_placename = make_key_to_placename(", Việt Nam$", "$"), placename_to_key = make_placename_to_key(", Việt Nam", ""), default_container = "Việt Nam", default_placetype = "province", -- There may not be enough districts to subcategorize like this. -- default_divs = "districts", -- For obscure reasons, provinces of Iran, Laos, Thailand and Vietnam use lowercase 'province' default_wp = "%e", data = export.vietnam_provinces, } ----------------------------------------------------------------------------------- -- City data -- ----------------------------------------------------------------------------------- export.australia_cities = { ["Adelaide"] = {container = "South Australia"}, -- 1,450,000 (Agglomeration) ["Brisbane"] = {container = "Queensland"}, -- 3,450,000 (Conglomeration; including the Gold Coast [750,997 2024 estiamte]) ["Canberra"] = {container = {key = "Lãnh thổ Thủ đô Úc, Úc", placetype = "territory"}}, -- 510,641 (2024 estimate) ["Melbourne"] = {container = "Victoria"}, -- 5,200,000 (Agglomeration) ["Newcastle, New South Wales"] = {container = "New South Wales", wp = "%l, %c"}, -- 534,033 (2024 estimate) ["Newcastle"] = {alias_of = "Newcastle, New South Wales"}, ["Perth"] = {container = "Western Australia"}, -- 2,350,000 (Agglomeration) ["Sydney"] = {container = "New South Wales"}, -- 5,100,000 (Agglomeration) } export.australia_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", Úc", "state"), default_placetype = "thành phố", data = export.australia_cities, } export.brazil_cities = { -- Figures from citypopulation.de; retrieved 2025-04-27; reference date 2025-01-01. ["São Paulo"] = {container = "São Paulo"}, -- 22,600,000 (Consolidated Urban Area; including Guarulhos) ["Sao Paulo"] = {alias_of = "São Paulo", display = true}, ["Rio de Janeiro"] = {container = "Rio de Janeiro"}, -- 13,600,000 (Consolidated Urban Area) ["Belo Horizonte"] = {container = "Minas Gerais"}, -- 5,300,000 ["Recife"] = {container = "Pernambuco"}, -- 4,100,000 ["Porto Alegre"] = {container = "Rio Grande do Sul"}, -- 3,950,000 (Consolidated Urban Area) ["Brasília"] = {container = "Distrito Federal"}, -- 3,850,000 ["Brasilia"] = {alias_of = "Brasília", display = true}, ["Fortaleza"] = {container = "Ceará"}, -- 3,825,000 ["Salvador"] = {container = "Bahia", wp = "%l, %c", commonscat = "%l (%c)"}, -- 3,400,000 ["Curitiba"] = {container = "Paraná"}, -- 3,375,000 ["Campinas"] = {container = "São Paulo"}, -- 3,250,000 ["Goiânia"] = {container = "Goiás"}, -- 2,525,000 ["Goiania"] = {alias_of = "Goiânia", display = true}, ["Manaus"] = {container = "Amazonas"}, -- 2,275,000 ["Belém"] = {container = "Pará"}, -- 2,200,000 ["Belem"] = {alias_of = "Belém", display = true}, ["Vitória"] = {container = "Espírito Santo", wp = "%l, %c"}, -- 1,870,000 ["Vitoria"] = {alias_of = "Vitória", display = true}, ["Santos"] = {container = "São Paulo", wp = "%l, %c"}, -- 1,760,000 ["São Luís"] = {container = "Maranhão", wp = "%l, %c"}, -- 1,530,000 ["Sao Luis"] = {alias_of = "São Luís", display = true}, ["Natal"] = {container = "Rio Grande do Norte", wp = "%l, %c"}, -- 1,360,000 ["Florianópolis"] = {container = "Santa Catarina"}, -- 1,260,000 ["Florianopolis"] = {alias_of = "Florianópolis", display = true}, ["Maceió"] = {container = "Alagoas"}, -- 1,220,000 ["Maceio"] = {alias_of = "Maceió", display = true}, ["João Pessoa"] = {container = "Paraíba", wp = "%l, %c"}, -- 1,210,000 ["Joao Pessoa"] = {alias_of = "João Pessoa", display = true}, ["São José dos Campos"] = {container = "São Paulo"}, -- 1,090,000 ["Sao Jose dos Campos"] = {alias_of = "São José dos Campos", display = true}, ["Londrina"] = {container = "Paraná"}, -- 1,050,000 ["Teresina"] = {container = "Piauí"}, -- 1,040,000 } export.brazil_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", Brazil", "state"), default_placetype = "thành phố", data = export.brazil_cities, } export.canada_cities = { -- Figures from citypopulation.de; retrieved 2025-04-27; reference date 2025-01-01. ["Toronto"] = {container = "Ontario"}, -- 7,850,000 (Consolidated Urban Area; including Hamilton) ["Montreal"] = {container = "Quebec"}, -- 4,500,000 (Consolidated Urban Area) ["Vancouver"] = {container = "British Columbia"}, -- 3,175,000 (Consolidated Urban Area) ["Calgary"] = {container = "Alberta"}, -- 1,510,000 (Consolidated Urban Area) ["Edmonton"] = {container = "Alberta"}, -- 1,460,000 (Consolidated Urban Area) ["Ottawa"] = {container = "Ontario"}, -- 1,390,000 (Consolidated Urban Area) ["Quebec City"] = {container = "Quebec"}, -- 839,311 metro per Wikipedia (2021 census) ["Winnipeg"] = {container = "Manitoba"}, -- 834,678 metro per Wikipedia (2021 census) ["Hamilton"] = {container = "Ontario", wp = "%l, %c"}, -- 785,184 metro per Wikipedia (2021 census) ["Kitchener"] = {container = "Ontario", wp = "%l, %c"}, -- 575,847 metro per Wikipedia (2021 census) } export.canada_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", Canada", "province"), default_placetype = "thành phố", data = export.canada_cities, } export.france_cities = { -- Figures from citypopulation.de unless otherwise indicated; retrieved 2025-04-26; reference date 2025-01-01. ["Paris"] = {container = "Île-de-France"}, -- 11,500,000 (Conglomeration) ["Lyon"] = {container = "Auvergne-Rhône-Alpes"}, -- 2,050,000 (Conglomeration) ["Lyons"] = {alias_of = "Lyon", display = true}, ["Marseille"] = {container = "Provence-Alpes-Côte d'Azur"}, -- 1,710,000 (Conglomeration) ["Marseilles"] = {alias_of = "Marseille", display = true}, ["Lille"] = {container = "Hauts-de-France"}, -- 1,320,000 (Conglomeration) ["Bordeaux"] = {container = "Nouvelle-Aquitaine"}, -- 1,160,000 (Conglomeration) ["Toulouse"] = {container = "Occitania"}, -- 1,150,000 (Conglomeration) ["Nice"] = {container = "Provence-Alpes-Côte d'Azur"}, ["Nantes"] = {container = "Pays de la Loire"}, ["Strasbourg"] = {container = "Grand Est"}, ["Rennes"] = {container = "Brittany"}, } export.france_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", France", "region"), default_placetype = "thành phố", data = export.france_cities, } export.germany_cities = { -- Figures from citypopulation.de unless otherwise indicated; retrieved 2025-04-26; reference date 2025-01-01. -- listed under Rhein-Ruhr Area, total population 10,900,000 (Consolidated Urban Area) ["Cologne"] = {container = "North Rhine-Westphalia"}, ["Köln"] = {alias_of = "Cologne", display = true}, ["Düsseldorf"] = {container = "North Rhine-Westphalia"}, ["Dusseldorf"] = {alias_of = "Düsseldorf", display = true}, ["Dortmund"] = {container = "North Rhine-Westphalia"}, ["Essen"] = {container = "North Rhine-Westphalia"}, ["Duisberg"] = {container = "North Rhine-Westphalia"}, ["Berlin"] = {}, -- 4,700,000 ["Frankfurt"] = {container = "Hesse"}, -- 3,225,000 ["Frankfurt am Main"] = {alias_of = "Frankfurt"}, -- not a display alias as it's longer ["Hamburg"] = {}, -- 2,900,000 ["Munich"] = {container = "Bavaria"}, -- 2,300,000 ["Stuttgart"] = {container = "Baden-Württemberg"}, -- 2,300,000 ["Mannheim"] = {container = "Baden-Württemberg"}, -- 1,550,000 ["Nuremberg"] = {container = "Bavaria"}, -- 1,120,000 ["Hanover"] = {"Lower Saxony"}, -- 1,090,000 ["Bielefeld"] = {container = "North Rhine-Westphalia"}, -- 1,080,000 ["Leipzig"] = {container = "Saxony"}, -- 1,080,000 ["Aachen"] = {container = "North Rhine-Westphalia"}, -- 1,000,000 ["Aix-la-Chapelle"] = {alias_of = "Aachen"}, -- historical; not a display alias ["Bremen"] = {}, } export.germany_cities_group = { default_container = "Đức", canonicalize_key_container = make_canonicalize_key_container(", Germany", "state"), default_placetype = "thành phố", data = export.germany_cities, } export.india_cities = { -- This lists the 65 metro areas per Demographia's 2023 estimates, as found in -- [[w:List_of_million-plus_urban_agglomerations_in_India]]. The last census in India (as of April 2025) was -- conducted in 2011, and the results are not accurate any more. ["Delhi"] = {container = {key = "Delhi, India", placetype = "union territory"}}, -- 31,190,000 ["Mumbai"] = {container = "Maharashtra"}, -- 25,189,000 ["Kolkata"] = {container = "West Bengal"}, -- 21,747,000 ["Bangalore"] = {container = "Karnataka", wp = "Bengaluru"}, -- 15,257,000 ["Bengaluru"] = {alias_of = "Bangalore"}, ["Chennai"] = {container = "Tamil Nadu"}, -- 11,570,000 ["Hyderabad"] = {container = "Telangana"}, -- 9,797,000 ["Ahmedabad"] = {container = "Gujarat"}, -- 8,006,000 ["Pune"] = {container = "Maharashtra"}, -- 6,819,000 ["Surat"] = {container = "Gujarat"}, -- 6,601,000 ["Lucknow"] = {container = "Uttar Pradesh"}, -- 4,661,000 ["Jaipur"] = {container = "Rajasthan"}, -- 4,360,000 ["Kanpur"] = {container = "Uttar Pradesh"}, -- 4,350,000 ["Indore"] = {container = "Madhya Pradesh"}, -- 3,765,000 ["Nagpur"] = {container = "Maharashtra"}, -- 3,493,000 ["Patna"] = {container = "Bihar"}, -- 3,331,000 ["Varanasi"] = {container = "Uttar Pradesh"}, -- 3,229,000 ["Kozhikode"] = {container = "Kerala"}, -- 3,049,000 ["Thiruvananthapuram"] = {container = "Kerala"}, -- 2,851,000 ["Agra"] = {container = "Uttar Pradesh"}, -- 2,737,000 ["Bhopal"] = {container = "Madhya Pradesh"}, -- 2,562,000 ["Coimbatore"] = {container = "Tamil Nadu"}, -- 2,551,000 ["Allahabad"] = {container = "Uttar Pradesh", wp = "Prayagraj"}, -- 2,438,000 ["Prayagraj"] = {alias_of = "Allahabad"}, ["Kochi"] = {container = "Kerala"}, -- 2,381,000 ["Ludhiana"] = {container = "Punjab"}, -- 2,205,000 ["Vadodara"] = {container = "Gujarat"}, -- 2,182,000 ["Chandigarh"] = {container = {key = "Chandigarh, India", placetype = "union territory"}}, -- 2,168,000 ["Madurai"] = {container = "Tamil Nadu"}, -- 2,048,000 ["Meerut"] = {container = "Uttar Pradesh"}, -- 2,011,000 ["Visakhapatnam"] = {container = "Andhra Pradesh"}, -- 2,005,000 ["Jamshedpur"] = {container = "Jharkhand"}, -- 1,925,000 ["Malappuram"] = {container = "Kerala"}, -- 1,868,000 ["Nashik"] = {container = "Maharashtra"}, -- 1,810,000 ["Asansol"] = {container = "West Bengal"}, -- 1,720,000 ["Aligarh"] = {container = "Uttar Pradesh"}, -- 1,660,000 ["Ranchi"] = {container = "Jharkhand"}, -- 1,638,000 ["Thrissur"] = {container = "Kerala"}, -- 1,578,000 ["Kollam"] = {container = "Kerala"}, -- 1,576,000 ["Jabalpur"] = {container = "Madhya Pradesh"}, -- 1,533,000 ["Dhanbad"] = {container = "Jharkhand"}, -- 1,503,000 ["Jodhpur"] = {container = "Rajasthan"}, -- 1,497,000 ["Aurangabad"] = {container = "Maharashtra"}, -- 1,490,000 ["Chhatrapati Sambhajinagar"] = {alias_of = "Aurangabad"}, ["Rajkot"] = {container = "Gujarat"}, -- 1,487,000 ["Gwalior"] = {container = "Madhya Pradesh"}, -- 1,477,000 ["Raipur"] = {container = "Chhattisgarh"}, -- 1,429,000 ["Gorakhpur"] = {container = "Uttar Pradesh"}, -- 1,410,000 ["Kannur"] = {container = "Kerala"}, -- 1,360,000 ["Bareilly"] = {container = "Uttar Pradesh"}, -- 1,355,000 ["Guwahati"] = {container = "Assam"}, -- 1,355,000 ["Moradabad"] = {container = "Uttar Pradesh"}, -- 1,345,000 ["Amritsar"] = {container = "Punjab"}, -- 1,313,000 ["Mysore"] = {container = "Karnataka"}, -- 1,296,000 ["Bhilai"] = {container = "Chhattisgarh"}, -- 1,293,000 ["Durg-Bhilainagar"] = {alias_of = "Bhilai"}, ["Durg-Bhilai"] = {alias_of = "Bhilai"}, ["Durg"] = {alias_of = "Bhilai"}, ["Bhilainagar"] = {alias_of = "Bhilai"}, ["Vijayawada"] = {container = "Andhra Pradesh"}, -- 1,232,000 ["Srinagar"] = {container = {key = "Jammu and Kashmir, India", placetype = "union territory"}}, -- 1,212,000 ["Salem"] = {container = "Tamil Nadu", wp = "%l, %c"}, -- 1,189,000 ["Kota"] = {container = "Rajasthan"}, -- 1,172,000 ["Jalandhar"] = {container = "Punjab"}, -- 1,165,000 ["Saharanpur"] = {container = "Uttar Pradesh"}, -- 1,152,000 ["Dehradun"] = {container = "Uttarakhand"}, -- 1,136,000 ["Tiruchirappalli"] = {container = "Tamil Nadu"}, -- 1,131,000 ["Bhubaneswar"] = {container = "Odisha"}, -- 1,112,000 ["Jammu"] = {container = {key = "Jammu and Kashmir, India", placetype = "union territory"}}, -- 1,103,000 ["Solapur"] = {container = "Maharashtra"}, -- 1,082,000 ["Hubli-Dharwad"] = {container = "Karnataka", wp = "Hubli–Dharwad"}, -- 1,062,000; wp with en dash ["Hubli"] = {alias_of = "Hubli-Dharwad"}, ["Dharwad"] = {alias_of = "Hubli-Dharwad"}, ["Puducherry"] = {container = {key = "Puducherry, India", placetype = "union territory"}}, -- 1,024,000 ["Pondicherry"] = {alias_of = "Puducherry", display = true}, -- satellite/secondary cities of metro area (none in citypopulation.de) ["Ghaziabad"] = {container = "Uttar Pradesh"}, -- 1,729,000 city, 2,358,525 urban agglomeration per 2011 census; 3,406,061 2025 estimate from official website; part of Delhi metro area ["Faridabad"] = {container = "Haryana"}, -- 1,414,050 city per 2011 census; part of Delhi metro area ["Thane"] = {container = "Maharashtra"}, -- 1,841,488 city per 2011 census; part of Mumbai metro area ["Kalyan-Dombivli"] = {container = "Maharashtra"}, -- 1,246,381 city per 2011 census; part of Mumbai metro area ["Kalyan-Dombivali"] = {alias_of = "Kalyan-Dombivli", display = true}, ["Kalyan"] = {alias_of = "Kalyan-Dombivli"}, ["Dombivli"] = {alias_of = "Kalyan-Dombivli"}, ["Dombivali"] = {alias_of = "Kalyan-Dombivli"}, ["Vasai-Virar"] = {container = "Maharashtra"}, -- 1,221,233 city per 2011 census; part of Mumbai metro area ["Vasai"] = {alias_of = "Vasai-Virar"}, ["Virar"] = {alias_of = "Vasai-Virar"}, ["Navi Mumbai"] = {container = "Maharashtra"}, -- 1,120,547 city per 2011 census; part of Mumbai metro area ["Howrah"] = {container = "West Bengal"}, -- 1,077,075 city ("metropolis"), 2,811,344 "metro" per 2011 census; part of Kolkata metro area ["Pimpri-Chinchwad"] = {container = "Maharashtra"}, -- 1,727,692 per 2011 census; part of Pune metro area ["Pimpri Chinchwad"] = {alias_of = "Pimpri-Chinchwad", display = true}, } export.india_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", India", "state"), default_placetype = "thành phố", data = export.india_cities, } export.indonesia_cities = { -- cities where the city proper has more than 1,000,000 people as of mid-2023 estimate ["Jakarta"] = {container = "Special Capital Region of Jakarta", divs = { {type = "subdistricts", container_parent_type = false}, }}, ["Surabaya"] = {container = "East Java"}, ["Bekasi"] = {container = "West Java"}, -- part of Jakarta metro area ["Bandung"] = {container = "West Java"}, ["Medan"] = {container = "North Sumatra"}, ["Depok"] = {container = "West Java"}, -- part of Jakarta metro area ["Tangerang"] = {container = "Banten"}, -- part of Jakarta metro area ["Palembang"] = {container = "South Sumatra"}, ["Semarang"] = {container = "Central Java"}, ["Makassar"] = {container = "South Sulawesi"}, ["South Tangerang"] = {container = "Banten"}, -- part of Jakarta metro area ["Batam"] = {container = "Riau Islands"}, ["Bogor"] = {container = "West Java"}, -- part of Jakarta metro area ["Pekanbaru"] = {container = "Riau"}, ["Bandar Lampung"] = {container = "Lampung"}, -- other metro areas over 1,000,000 people ["Padang"] = {container = "West Sumatra"}, ["Samarinda"] = {container = "East Kalimantan"}, ["Malang"] = {container = "East Java"}, ["Yogyakarta"] = {container = "Special Region of Yogyakarta"}, ["Denpasar"] = {container = "Bali"}, ["Cirebon"] = {container = "West Java"}, ["Surakarta"] = {container = "Central Java"}, ["Banjarmasin"] = {container = "South Kalimantan"}, ["Tasikmalaya"] = {container = "West Java"}, } export.indonesia_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", Indonesia", "province"), default_placetype = "thành phố", data = export.indonesia_cities, } export.italy_cities = { -- Data per [[w:List_of_metropolitan_areas_of_Italy]]. There are several lists given; the most recent one, used -- here, only gives estimates as of Jan 1, 2014. ["Milan"] = {container = "Lombardy"}, -- 6,623,798 ["Naples"] = {container = "Campania"}, -- 5,294,546 ["Rome"] = {container = "Lazio"}, -- 4,447,881 ["Turin"] = {container = "Piedmont"}, -- 1,865,284 ["Venice"] = {container = "Veneto"}, -- 1,645,900 ["Florence"] = {container = "Tuscany"}, -- 1,485,030 ["Bari"] = {container = "Apulia"}, -- 1,257,459 ["Palermo"] = {container = "Sicily"}, -- 1,183,084 -- include a few just below 1,000,000 metro area that may be above it by now (depending on the definition). ["Catania"] = {container = "Sicily"}, -- 988,240 ["Brescia"] = {container = "Lombardy"}, -- 924,090 ["Genoa"] = {container = "Liguria"}, -- 861,318 } export.italy_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", Italy", "region"), default_placetype = "thành phố", data = export.italy_cities, } export.japan_cities = { -- Population figures from [[w:List of cities in Japan]]. Metro areas from -- [[w:List of metropolitan areas in Japan]]. ["Tokyo"] = {keydesc = "[[Tokyo]] Metropolis, the [[capital city]] and a [[prefecture]] of [[Japan]] (which is a country in [[Asia]])", placetype = {"thành phố", "tỉnh"}, divs = { {type = "quận đặc biệt", container_parent_type = false}, {type = "thành phố", prep = "của"}, }, }, ["Yokohama"] = {container = "Kanagawa"}, -- 3,697,894 ["Ōsaka"] = {container = "Ōsaka"}, -- 2,668,586 ["Osaka"] = {alias_of = "Ōsaka"}, ["Nagoya"] = {container = "Aichi"}, -- 2,283,289 -- FIXME, Hokkaido is handled specially. ["Sapporo"] = {container = "Hokkaidō"}, -- 1,918,096 ["Fukuoka"] = {container = "Fukuoka"}, -- 1,581,527 ["Kobe"] = {container = "Hyōgo"}, -- 1,530,847 ["Kyoto"] = {container = "Kyoto"}, -- 1,474,570 ["Kawasaki"] = {container = "Kanagawa", wp = "%l, Kanagawa"}, -- 1,373,630 ["Saitama"] = {container = "Saitama", wp = "%l (city)", commonscat = "%l, %c"}, -- 1,192,418 ["Hiroshima"] = {container = "Hiroshima"}, -- 1,163,806 ["Sendai"] = {container = "Miyagi"}, -- 1,029,552 -- the remaining cities are considered "central cities" in a 1,000,000+ metro area -- (sometimes there is more than one central city in the area). ["Kitakyushu"] = {container = "Fukuoka"}, -- 986,998 ["Chiba"] = {container = "Chiba", wp = "%l (city)", commonscat = "%l, %c"}, -- 938,695 ["Sakai"] = {container = "Ōsaka"}, -- 835,333 ["Niigata"] = {container = "Niigata", wp = "%l (city)", commonscat = "%l, %c"}, -- 813,053 ["Hamamatsu"] = {container = "Shizuoka"}, -- 811,431 ["Shizuoka"] = {container = "Shizuoka", wp = "%l (city)", commonscat = "%l, %c"}, -- 710,944 ["Sagamihara"] = {container = "Kanagawa"}, -- 706,342 ["Okayama"] = {container = "Okayama"}, -- 701,293 ["Kumamoto"] = {container = "Kumamoto"}, -- 670,348 ["Kagoshima"] = {container = "Kagoshima"}, -- 605,196 -- skipped 6 cities (Funabashi, Hachiōji, Kawaguchi, Himeji, Matsuyama, Higashiōsaka) -- with population in the range 509k - 587k because not central cities in any -- 1,000,000+ metro area. ["Utsunomiya"] = {container = "Tochigi"}, -- 507,833 } export.japan_cities_group = { default_container = "Nhật Bản", canonicalize_key_container = make_canonicalize_key_container(", Nhật Bản", "prefecture"), default_placetype = "thành phố", data = export.japan_cities, } export.mexico_cities = { ["Mexico City"] = {}, -- its own state ["Monterrey"] = {container = "Nuevo León"}, ["Guadalajara"] = {container = "Jalisco"}, ["Puebla"] = {container = "Puebla", wp = "%l (city)"}, ["Toluca"] = {container = "State of Mexico"}, ["Tijuana"] = {container = "Baja California"}, -- Include the state in the category for León due to possible confusion with León, Spain. ["León, Guanajuato"] = {container = "Guanajuato", wp = "%l, %c"}, ["León"] = {alias_of = "León, Guanajuato"}, ["Leon"] = {alias_of = "León, Guanajuato", display = true}, ["Querétaro"] = {container = "Querétaro", wp = "%l (city)"}, ["Queretaro"] = {alias_of = "Querétaro", display = true}, ["Ciudad Juárez"] = {container = "Chihuahua"}, ["Juárez"] = {alias_of = "Ciudad Juárez"}, ["Juarez"] = {alias_of = "Ciudad Juárez", display = "Juárez"}, ["Torreón"] = {container = "Coahuila"}, ["Torreon"] = {alias_of = "Torreón", display = true}, -- Include the state in the category for Mérida due to possible confusion with Mérida, Spain or -- Mérida, Venezuela. ["Mérida, Yucatán"] = {container = "Yucatán", wp = "%l, %c"}, ["Mérida"] = {alias_of = "Mérida, Yucatán"}, ["Merida"] = {alias_of = "Mérida, Yucatán", display = true}, ["San Luis Potosí"] = {container = "San Luis Potosí", wp = "%l (city)"}, ["San Luis Potosi"] = {alias_of = "San Luis Potosí", display = true}, ["Aguascalientes"] = {container = "Aguascalientes", wp = "%l (city)"}, ["Mexicali"] = {container = "Baja California"}, } export.mexico_cities_group = { default_container = "Mexico", canonicalize_key_container = make_canonicalize_key_container(", Mexico", "state"), default_placetype = "thành phố", data = export.mexico_cities, } export.nigeria_cities = { -- Figures from citypopulation.de unless otherwise indicated; retrieved 2025-04-26; reference date 2025-01-01. ["Lagos"] = {container = "Lagos"}, -- 21,300,000 (unindicated; population of low reliability) ["Kano"] = {container = "Kano", wp = "%l (city)"}, -- 5,350,000 (unindicated; population of low reliability) ["Ibadan"] = {container = "Oyo"}, -- 3,400,000 (unindicated; population of low reliability) ["Abuja"] = {container = {key = "Federal Capital Territory, Nigeria", placetype = "federal territory"}}, -- 3,050,000 (unindicated; population of low reliability) ["Port Harcourt"] = {container = "Rivers"}, -- 2,250,000 (unindicated; population of low reliability) ["Kaduna"] = {container = "Kaduna"}, -- 1,980,000 (unindicated; population of low reliability) ["Benin City"] = {container = "Edo"}, -- 1,790,000 (unindicated; population of low reliability) ["Aba"] = {container = "Abia", wp = "%l, Nigeria"}, -- 1,280,000 (unindicated; population of low reliability) ["Onitsha"] = {container = "Anambra"}, -- 1,230,000 (unindicated; population of low reliability) ["Maiduguri"] = {container = "Borno"}, -- 1,190,000 (unindicated; population of low reliability) ["Ilorin"] = {container = "Kwara"}, -- 1,160,000 (unindicated; population of low reliability) ["Sokoto"] = {container = "Sokoto", wp = "%l (city)"}, -- 1,140,000 (unindicated; population of low reliability) ["Jos"] = {container = "Plateau"}, -- 1,110,000 (unindicated; population of low reliability) ["Zaria"] = {container = "Kaduna"}, -- 1,050,000 (unindicated; population of low reliability) ["Enugu"] = {container = "Enugu", wp = "%l (city)"}, -- 1,010,000 (unindicated; population of low reliability) } export.nigeria_cities_group = { default_container = "Nigeria", canonicalize_key_container = make_canonicalize_key_container(" State, Nigeria", "state"), default_placetype = "thành phố", data = export.nigeria_cities, } export.pakistan_cities = { -- Figures from citypopulation.de; retrieved 2025-04-26; reference date 2025-01-01. ["Karachi"] = {container = "Sindh"}, -- 21,000,000 (Consolidated Urban Area) ["Lahore"] = {container = "Punjab"}, -- 14,600,000 (Consolidated Urban Area) ["Rawalpindi"] = {container = "Punjab"}, -- 5,600,000 (Consolidated Urban Area; including Islamabad) ["Islamabad"] = {container = {key = "Islamabad Capital Territory, Pakistan", placetype = "federal territory"}}, -- 5,600,000 (Consolidated Urban Area; including Rawalpindi) ["Faisalabad"] = {container = "Punjab"}, -- 4,125,000 (Consolidated Urban Area) ["Gujranwala"] = {container = "Punjab"}, -- 3,450,000 (Consolidated Urban Area) -- there is also Hyderabad in India (very confusing) ["Hyderabad, Pakistan"] = {container = "Sindh", wp = "%l, %c"}, -- 2,475,000 (Consolidated Urban Area) ["Hyderabad"] = {alias_of = "Hyderabad, Pakistan"}, ["Multan"] = {container = "Punjab"}, -- 2,425,000 (Consolidated Urban Area) ["Peshawar"] = {container = "Khyber Pakhtunkhwa"}, -- 2,150,000 (Consolidated Urban Area) ["Quetta"] = {container = "Balochistan"}, -- 1,720,000 (Urban Area) ["Sargodha"] = {container = "Punjab"}, -- 1,080,000 (Urban Area) ["Sialkot"] = {container = "Punjab"}, -- 1,050,000 (Consolidated Urban Area) } export.pakistan_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", Pakistan", "province"), default_placetype = "thành phố", data = export.pakistan_cities, } export.philippines_cities = { -- Skipped some cities in Metro Manila (Taguig, Pasig) which don't have districts. -- Other cities outside Metro Manila skipped as not central city in their urban area. ["Quezon City"] = {container = {key = "Metro Manila, Philippines", placetype = "region"}}, -- Don't display-canonicalize Foo to Foo City as it may make the display weird. ["Quezon"] = {alias_of = "Quezon City"}, ["Manila"] = {container = {key = "Metro Manila, Philippines", placetype = "region"}}, ["Davao City"] = {container = "Davao del Sur"}, ["Davao"] = {alias_of = "Davao City"}, ["Caloocan"] = {container = {key = "Metro Manila, Philippines", placetype = "region"}}, ["Zamboanga City"] = {container = "Zamboanga del Sur"}, ["Zamboanga"] = {alias_of = "Zamboanga City"}, ["Cebu City"] = {container = "Cebu"}, ["Cebu"] = {alias_of = "Cebu City"}, ["Antipolo"] = {container = "Rizal"}, ["Cagayan de Oro"] = {container = "Misamis Oriental"}, ["Dasmariñas"] = {container = "Cavite"}, ["Dasmarinas"] = {alias_of = "Dasmariñas", display = true}, ["General Santos"] = {container = "South Cotabato"}, ["San Jose del Monte"] = {container = "Bulacan"}, ["Bacolod"] = {container = "Negros Occidental"}, ["Calamba"] = {container = "Laguna", wp = "%l, %c"}, ["Angeles"] = {container = "Pampanga", wp = "Angeles City"}, ["Angeles City"] = {alias_of = "Angeles"}, ["Iloilo City"] = {container = "Iloilo"}, ["Iloilo"] = {alias_of = "Iloilo City"}, } export.philippines_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", Philippines", "province"), default_placetype = "thành phố", data = export.philippines_cities, } export.russia_cities = { -- Figures from citypopulation.de; retrieved 2025-04-26; reference date 2025-01-01. ["Moscow"] = {}, -- 18,800,000 (Agglomeration) ["Sankt-Peterburg"] = {}, -- 6,350,000 (Agglomeration) ["Saint Petersburg"] = {alias_of = "Sankt-Peterburg"}, ["Novosibirsk"] = {container = "Novosibirsk Oblast"}, -- 1,820,000 (Agglomeration) ["Yekaterinburg"] = {container = "Sverdlovsk Oblast"}, -- 1,810,000 (Agglomeration) ["Nizhny Novgorod"] = {container = "Nizhny Novgorod Oblast"}, -- 1,620,000 (Agglomeration) ["Kazan"] = {container = {key = "Tatarstan, Russia", placetype = "republic"}}, -- 1,560,000 (Agglomeration) ["Chelyabinsk"] = {container = "Chelyabinsk Oblast"}, -- 1,430,000 (Agglomeration) ["Rostov-on-Don"] = {container = "Rostov Oblast"}, -- 1,390,000 (Agglomeration) ["Rostov-na-Donu"] = {alias_of = "Rostov-on-Don", display = true}, ["Krasnodar"] = {container = {key = "Krasnodar Krai, Russia", placetype = "krai"}}, -- 1,370,000 (Agglomeration) ["Samara"] = {container = "Samara Oblast"}, -- 1,350,000 (Agglomeration) ["Krasnoyarsk"] = {container = {key = "Krasnoyarsk Krai, Russia", placetype = "krai"}}, -- 1,270,000 (Agglomeration) ["Ufa"] = {container = {key = "Bashkortostan, Russia", placetype = "republic"}}, -- 1,230,000 (Agglomeration) ["Saratov"] = {container = "Saratov Oblast"}, -- 1,170,000 (Agglomeration) ["Omsk"] = {container = "Omsk Oblast"}, -- 1,140,000 (Agglomeration) ["Voronezh"] = {container = "Voronezh Oblast"}, -- 1,130,000 (Agglomeration) ["Volgograd"] = {container = "Volgograd Oblast"}, -- 1,080,000 (Agglomeration) ["Perm"] = {container = {key = "Perm Krai, Russia", placetype = "krai"}, wp = "%l, Russia"}, -- 1,070,000 (Agglomeration) } export.russia_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", Russia", "oblast"), default_container = "Nga", default_placetype = "thành phố", data = export.russia_cities, } export.saudi_arabia_cities = { -- Figures for the first five from [[w:List of cities and towns in Saudi Arabia]] as of 2022. Unclear if these are -- metro, urban or city proper figures. ["Riyadh"] = {container = "Riyadh"}, -- 7,000,100; 7,700,000 per citypopulation.de 2025-01-01 (Agglomeration) ["Jeddah"] = {container = "Mecca"}, -- 3,751,917; 3,950,000 per citypopulation.de 2025-01-01 (Agglomeration) ["Jedda"] = {alias_of = "Jeddah", display = true}, ["Jiddah"] = {alias_of = "Jeddah", display = true}, ["Jidda"] = {alias_of = "Jeddah", display = true}, ["Dammam"] = {container = "Eastern"}, -- 2,638,166; 2,925,000 per citypopulation.de 2025-01-01 (Agglomeration) ["Mecca"] = {container = "Mecca"}, -- 2,385,509; 2,675,000 per citypopulation.de 2025-01-01 (Agglomeration) ["Makkah"] = {alias_of = "Mecca", display = true}, ["Medina"] = {container = "Medina"}, -- 1,477,023; 1,530,000 per citypopulation.de 2025-01-01 (City) ["Hofuf"] = {container = "Eastern"}, -- 1,060,000 per citypopulation.de 2025-01-01 (Agglomeration) ["Khamis Mushait"] = {container = "Aseer"}, -- 1,030,000 per citypopulation.de 2025-01-01 (Agglomeration) ["Khamis Mushayt"] = {alias_of = "Khamis Mushait", display = true}, } export.saudi_arabia_cities_group = { canonicalize_key_container = make_canonicalize_key_container(" Province, Saudi Arabia", "province"), default_placetype = "thành phố", data = export.saudi_arabia_cities, } export.south_korea_cities = { -- All cities listed are not associated with any county. ["Seoul"] = {}, ["Busan"] = {}, ["Incheon"] = {}, ["Daegu"] = {}, ["Daejeon"] = {}, ["Gwangju"] = {}, ["Ulsan"] = {}, } export.south_korea_cities_group = { default_container = "Hàn Quốc", canonicalize_key_container = make_canonicalize_key_container(" County, South Korea", "province"), default_placetype = "thành phố", data = export.south_korea_cities, } export.spain_cities = { ["Madrid"] = {container = "Community of Madrid"}, ["Barcelona"] = {container = "Catalonia"}, ["Valencia"] = {container = "Valencia"}, ["Seville"] = {container = "Andalusia"}, ["Bilbao"] = {container = "Basque Country"}, } export.spain_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", Spain", "autonomous community"), default_placetype = "thành phố", data = export.spain_cities, } export.taiwan_cities = { ["Tân Bắc"] = {}, ["New Taipei"] = {alias_of = "Tân Bắc", display = true}, ["Đài Trung"] = {}, ["Cao Hùng"] = {wp = "%l, Đài Loan"}, ["Đài Bắc"] = {}, ["Đào Viên"] = {}, ["Đài Nam"] = {}, -- these last three are not special municipalities ["Gia Nghĩa"] = {placetype = "thành phố"}, ["Tân Trúc"] = {placetype = "thành phố"}, ["Cơ Long"] = {placetype = "thành phố"}, } export.taiwan_cities_group = { placename_to_key = false, -- don't add ", Taiwan" to make the key canonicalize_key_container = make_canonicalize_key_container(", Taiwan", "county"), default_container = "Đài Loan", default_placetype = {"special municipality", "municipality", "thành phố"}, default_is_city = true, default_divs = {"districts"}, data = export.taiwan_cities, } -- NOTE: It's OK to mix cities from different constituent countries; as long as the immediate container is correct, -- everything else will be figured out. export.united_kingdom_cities = { ["London"] = {container = "Greater London"}, ["Manchester"] = {container = "Greater Manchester"}, ["Birmingham"] = {container = "West Midlands"}, ["Liverpool"] = {container = "Merseyside"}, ["Glasgow"] = {container = {key = "City of Glasgow, Scotland", placetype = "council area"}}, ["Leeds"] = {container = "West Yorkshire"}, ["Newcastle upon Tyne"] = {container = "Tyne and Wear"}, ["Newcastle"] = {alias_of = "Newcastle upon Tyne"}, ["Bristol"] = {container = {key = "England", placetype = "constituent country"}}, ["Cardiff"] = {container = {key = "Wales", placetype = "constituent country"}}, ["Portsmouth"] = {container = "Hampshire"}, ["Edinburgh"] = {container = {key = "City of Edinburgh, Scotland", placetype = "council area"}}, -- under 1,000,000 people but principal areas of Wales; requested by [[User:Donnanz]] ["Swansea"] = {container = {key = "Wales", placetype = "constituent country"}}, ["Newport"] = {container = {key = "Wales", placetype = "constituent country"}, wp = "Newport, Wales"}, } export.united_kingdom_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", England", "county"), default_placetype = "thành phố", data = export.united_kingdom_cities, } export.united_states_cities = { -- top 50 CSA's by population, with the top and sometimes 2nd or 3rd city listed ["New York City"] = {container = "New York", wp = "%l", divs = { {type = "boroughs", container_parent_type = false}, }}, -- Don't display-canonicalize as it may make the display weird (e.g. in the context New York, New York). ["New York"] = {alias_of = "New York City"}, ["Newark"] = {container = "New Jersey"}, ["Los Angeles"] = {container = "California", wp = "%l"}, ["Long Beach"] = {container = "California"}, ["Riverside"] = {container = "California"}, ["Chicago"] = {container = "Illinois", wp = "%l"}, ["Washington, D.C."] = {wp = "%l"}, ["Washington, DC"] = {alias_of = "Washington, D.C.", display = true}, ["Washington D.C."] = {alias_of = "Washington, D.C.", display = true}, ["Washington DC"] = {alias_of = "Washington, D.C.", display = true}, -- Don't display-canonicalize as it may make the display weird (e.g. if the holonym is followed by a District of -- Columbia holonym). ["Washington"] = {alias_of = "Washington, D.C."}, ["Baltimore"] = {container = "Maryland", wp = "%l"}, -- to avoid conflict with San Jose in Costa Rica ["San Jose, California"] = {container = "California"}, ["San Jose"] = {alias_of = "San Jose, California"}, ["San Francisco"] = {container = "California", wp = "%l"}, ["Oakland"] = {container = "California"}, ["Boston"] = {container = "Massachusetts", wp = "%l"}, ["Providence"] = {container = "Rhode Island"}, ["Dallas"] = {container = "Texas", wp = "%l", commonscat = "%l, %c"}, ["Fort Worth"] = {container = "Texas"}, ["Philadelphia"] = {container = "Pennsylvania", wp = "%l"}, ["Houston"] = {container = "Texas", wp = "%l"}, ["Miami"] = {container = "Florida", wp = "%l", commonscat = "%l, %c"}, ["Atlanta"] = {container = "Georgia", wp = "%l"}, ["Detroit"] = {container = "Michigan", wp = "%l"}, ["Phoenix"] = {container = "Arizona", wp = "%l", commonscat = "%l, %c"}, ["Mesa"] = {container = "Arizona"}, ["Seattle"] = {container = "Washington", wp = "%l"}, ["Orlando"] = {container = "Florida"}, ["Minneapolis"] = {container = "Minnesota", wp = "%l"}, ["Cleveland"] = {container = "Ohio", wp = "%l", commonscat = "%l, %c"}, ["Denver"] = {container = "Colorado", wp = "%l", commonscat = "%l, %c"}, ["San Diego"] = {container = "California", wp = "%l", commonscat = "%l, %c"}, ["Portland"] = {container = "Oregon"}, ["Tampa"] = {container = "Florida"}, ["St. Louis"] = {container = "Missouri", wp = "%l", commonscat = "%l, %c"}, ["Saint Louis"] = {alias_of = "St. Louis", display = true}, ["Charlotte"] = {container = "North Carolina"}, ["Sacramento"] = {container = "California"}, ["Pittsburgh"] = {container = "Pennsylvania", wp = "%l"}, ["Salt Lake City"] = {container = "Utah", wp = "%l"}, ["San Antonio"] = {container = "Texas", wp = "%l", commonscat = "%l, %c"}, ["Columbus"] = {container = "Ohio"}, ["Kansas City"] = {container = "Missouri", wp = "%l metropolitan area", commonscat = "%l, %c"}, ["Indianapolis"] = {container = "Indiana", wp = "%l"}, ["Las Vegas"] = {container = "Nevada", wp = "%l"}, ["Cincinnati"] = {container = "Ohio", wp = "%l", commonscat = "%l, %c"}, ["Austin"] = {container = "Texas"}, ["Milwaukee"] = {container = "Wisconsin", wp = "%l", commonscat = "%l, %c"}, ["Raleigh"] = {container = "North Carolina"}, ["Nashville"] = {container = "Tennessee"}, ["Virginia Beach"] = {container = "Virginia"}, ["Norfolk"] = {container = "Virginia"}, ["Greensboro"] = {container = "North Carolina"}, ["Winston-Salem"] = {container = "North Carolina"}, ["Jacksonville"] = {container = "Florida"}, ["New Orleans"] = {container = "Louisiana", wp = "%l"}, ["Louisville"] = {container = "Kentucky"}, ["Greenville"] = {container = "South Carolina"}, ["Hartford"] = {container = "Connecticut"}, ["Oklahoma City"] = {container = "Oklahoma", wp = "%l"}, ["Grand Rapids"] = {container = "Michigan"}, ["Memphis"] = {container = "Tennessee"}, ["Birmingham, Alabama"] = {container = "Alabama"}, ["Birmingham"] = {alias_of = "Birmingham, Alabama"}, ["Fresno"] = {container = "California"}, ["Richmond"] = {container = "Virginia"}, ["Harrisburg"] = {container = "Pennsylvania"}, -- any major city of top 50 MSA's that's missed by previous ["Buffalo"] = {container = "New York"}, -- any of the top 50 city by city population that's missed by previous ["El Paso"] = {container = "Texas"}, ["Albuquerque"] = {container = "New Mexico"}, ["Tucson"] = {container = "Arizona"}, ["Colorado Springs"] = {container = "Colorado"}, ["Omaha"] = {container = "Nebraska"}, ["Tulsa"] = {container = "Oklahoma"}, -- skip Arlington, Texas; too obscure and likely to be interpreted as Arlington, Virginia } export.united_states_cities_group = { default_container = "Hoa Kỳ", canonicalize_key_container = make_canonicalize_key_container(", USA", "state"), default_placetype = "thành phố", default_wp = "%l, %c", data = export.united_states_cities, } export.new_york_boroughs = { ["Bronx"] = {the = true, wp = "The Bronx"}, ["Brooklyn"] = {}, ["Manhattan"] = {}, ["Queens"] = {}, ["Staten Island"] = {}, } export.new_york_boroughs_group = { default_container = {key = "New York City", placetype = "thành phố"}, default_placetype = "borough", default_is_city = true, data = export.new_york_boroughs, } export.vietnam_cities = { -- Figures from citypopulation.de (retrieved 2025-04-26; reference date 2025-01-01) unless otherwise indicated. ["Thành phố Hồ Chí Minh"] = {}, -- 14,300,000 (Agglomeration; inclunding Bien Hoa) ["Sài Gòn"] = {alias_of = "Thành phố Hồ Chí Minh"}, ["Hanoi"] = {}, -- 7,350,000 (Agglomeration) ["Da Nang"] = {}, -- 1,500,000 (Agglomeration) ["Danang"] = {alias_of = "Da Nang", display = true}, ["Haiphong"] = {}, -- 1,450,000 (Agglomeration) ["Hai Phong"] = {alias_of = "Haiphong", display = true}, -- This is the one entry in this list that is not a province-level municipality; instead it's a "provincial city" -- meaning it is directly under its province as opposed to being contained in a district. ["Bien Hoa"] = {placetype = "thành phố", container = "Đồng Nai", wp = "Biên Hòa"}, -- 1,272,235 (2022 city population per Wikipedia) ["Biên Hòa"] = {alias_of = "Bien Hoa", display = true}, ["Biên Hoà"] = {alias_of = "Bien Hoa", display = true}, -- These two not in citypopulation.de because the urban population may be slightly under 1,000,000, but they are -- both province-level municipalities and close to the 1,000,000 mark. ["Can Tho"] = {wp = "Cần Thơ"}, -- 1,456,000 municipality (2019 census), 994,704 urban (2022 General Statistics Office of Vietnam estimate); capital [[Ninh Kiều district]] ["Cần Thơ"] = {alias_of = "Can Tho", display = true}, ["Huế"] = {wp = "Huế"}, -- 1,257,000 municipality (2019 census), 840,000 urban (2022 General Statistics Office of Vietnam estimate); -- capital [[Thuận Hóa district]] ["Hue"] = {alias_of = "Hue", display = true}, } export.vietnam_cities_group = { placename_to_key = false, -- don't add ", Vietnam" to make the key default_container = "Việt Nam", canonicalize_key_container = make_canonicalize_key_container(" , Việt Nam", "province"), -- Most of the cities listed are province-level municipalities in addition, which contain a certain amount of -- rural territory surrounding the city, but not enough to separate the municipality from the city as distinct -- known locations. default_placetype = {"municipality", "thành phố"}, default_is_city = true, -- There may not be enough districts to subcategorize like this. -- default_divs = "districts", data = export.vietnam_cities, } export.misc_cities = { ------------------ Africa ------------------- -- Sorted by country and then within the country, by decreasing population; figures from citypopulation.de -- (retrieved 2025-04-26; reference date 2025-01-01) unless otherwise indicated; combined with data from -- [[w:List of urban areas in Africa by population]]. ["Algiers"] = {container = "Algeria"}, -- 4,325,000 (Consolidated Urban Area) ["Oran"] = {container = "Algeria"}, -- 1,640,000 (Consolidated Urban Area) ["Luanda"] = {container = "Angola"}, -- 9,650,000 (Urban Area) ["Benguela"] = {container = "Angola"}, -- 1,420,000 (Urban Area) ["Cotonou"] = {container = "Benin"}, -- 2,150,000 (Agglomeration) ["Ouagadougou"] = {container = "Burkina Faso"}, -- 3,425,000 (Agglomeration) ["Bobo-Dioulasso"] = {container = "Burkina Faso"}, -- 1,100,000 (Agglomeration) ["Bujumbura"] = {container = "Burundi"}, -- 1,143,202 (Urban Area 2023 per PopulationStat, cited in Wikipedia) ["Yaoundé"] = {container = "Cameroon"}, -- 3,975,000 (City) ["Yaounde"] = {alias_of = "Yaoundé", display = true}, ["Douala"] = {container = "Cameroon"}, -- 3,900,000 (City) ["Bangui"] = {container = "Central African Republic"}, -- 1,680,000 (Agglomeration) ["N'Djamena"] = {container = "Chad"}, -- 1,950,000 (City) ["Ndjamena"] = {alias_of = "N'Djamena", display = true}, ["Kinshasa"] = {container = "Democratic Republic of the Congo"}, -- 16,300,000 (City; population of low reliability) ["Lubumbashi"] = {container = "Democratic Republic of the Congo"}, -- 2,875,000 (City; population of low reliability) ["Mbuji-Mayi"] = {container = "Democratic Republic of the Congo"}, -- 2,500,000 (City; population of low reliability) ["Kananga"] = {container = "Democratic Republic of the Congo"}, -- 1,370,000 (City; population of low reliability) ["Kisangani"] = {container = "Democratic Republic of the Congo"}, -- 1,300,000 (City; population of low reliability) ["Bukavu"] = {container = "Democratic Republic of the Congo"}, -- 1,100,000 (City; population of low reliability) ["Goma"] = {container = "Democratic Republic of the Congo"}, -- 1,010,000 (City; population of low reliability) ["Tshikapa"] = {container = "Democratic Republic of the Congo"}, -- 1,020,468 (2023 Wikipedia [[w:List of cities with over one million inhabitants]] from populationstat.com; not in citypopulation.de) ["Cairo"] = {container = "Ai Cập"}, -- 22,800,000 (Agglomeration, including Giza and Subhra El Kheima) ["Alexandria"] = {container = "Ai Cập"}, -- 6,250,000 (Agglomeration) ["Giza"] = {container = "Ai Cập"}, -- 4,458,135 (2023 from citypopulation.de) ["Shubra El Kheima"] = {container = "Ai Cập"}, -- 1,240,239 (2021 from citypopulation.de) ["Asmara"] = {container = "Eritrea"}, -- 1,090,000 (City; population of low reliability) ["Asmera"] = {alias_of = "Asmara", display = true}, ["Addis Ababa"] = {container = "Ethiopia"}, -- 4,825,000 (Agglomeration) ["Banjul"] = {container = "Gambia"}, -- 1,170,000 (Agglomeration) ["Accra"] = {container = "Ghana"}, -- 6,800,000 (Agglomeration) ["Kumasi"] = {container = "Ghana"}, -- 2,900,000 (Agglomeration) ["Conakry"] = {container = "Guinea"}, -- 2,975,000 (Consolidated Urban Area) ["Abidjan"] = {container = "Bờ Biển Ngà"}, -- 7,050,000 (Agglomeration) ["Nairobi"] = {container = "Kenya"}, -- 6,900,000 (unindicated) ["Mombasa"] = {container = "Kenya"}, -- 1,370,000 (City) ["Monrovia"] = {container = "Liberia"}, -- 1,940,000 (Urban Area) ["Tripoli"] = {container = "Libya", wp = "%l, %c"}, -- 1,870,000 (unindicated) ["Antananarivo"] = {container = "Madagascar"}, -- 3,150,000 (Agglomeration) ["Lilongwe"] = {container = "Malawi"}, -- 1,210,000 (City) ["Bamako"] = {container = "Mali"}, -- 5,700,000 (Agglomeration) ["Nouakchott"] = {container = "Mauritania"}, -- 1,500,000 (City) ["Casablanca"] = {container = {key = "Casablanca-Settat, Morocco", placetype = "region"}}, -- 4,450,000 (Municipality (urban population)) ["Rabat"] = {container = {key = "Rabat-Sale-Kenitra, Morocco", placetype = "region"}}, -- 2,125,000 (Municipality (urban population)) ["Tangier"] = {container = {key = "Tangier-Tetouan-Al Hoceima, Morocco", placetype = "region"}}, -- 1,410,000 (Municipality (urban population)) ["Tanger"] = {alias_of = "Tangier", display = true}, ["Tangiers"] = {alias_of = "Tangier", display = true}, ["Fez"] = {container = {key = "Fez-Meknes, Morocco", placetype = "region"}, wp = "%l, Morocco"}, -- 1,310,000 (Municipality (urban population)) ["Fes"] = {alias_of = "Fez", display = true}, ["Fès"] = {alias_of = "Fez", display = true}, ["Agadir"] = {container = {key = "Souss-Massa, Morocco", placetype = "region"}}, -- 1,270,000 (Municipality (urban population)) ["Marrakesh"] = {container = {key = "Marrakesh-Safi, Morocco", placetype = "region"}}, -- 1,140,000 (Municipality (urban population)) ["Marrakech"] = {alias_of = "Marrakesh", display = true}, ["Maputo"] = {container = "Mozambique"}, -- 2,575,000 (Agglomeration) ["Niamey"] = {container = "Niger"}, -- 1,530,000 (City) ["Brazzaville"] = {container = "Republic of the Congo"}, -- 2,475,000 (Agglomeration) ["Pointe-Noire"] = {container = "Republic of the Congo"}, -- 1,480,000 (City) ["Kigali"] = {container = "Rwanda"}, -- 1,960,000 (Municipality (urban population)) ["Dakar"] = {container = "Senegal"}, -- 4,225,000 (Agglomeration) ["Touba"] = {container = "Senegal"}, -- 1,320,000 (Agglomeration) ["Freetown"] = {container = "Sierra Leone"}, -- 1,420,000 (Agglomeration) ["Mogadishu"] = {container = "Somalia"}, -- 2,250,000 (unindicated; population of low reliability) ["Johannesburg"] = {container = {key = "Gauteng, South Africa", placetype = "province"}}, -- 14,800,000 (Consolidated Urban Area; including Pretoria, Soweto, etc.) ["Cape Town"] = {container = {key = "Western Cape, South Africa", placetype = "province"}}, -- 5,100,000 (Consolidated Urban Area) ["Durban"] = {container = {key = "KwaZulu-Natal, South Africa", placetype = "province"}}, -- 3,900,000 (Consolidated Urban Area) ["Pretoria"] = {container = {key = "Gauteng, South Africa", placetype = "province"}}, -- 2,921,488 (2011 census) ["Port Elizabeth"] = {container = {key = "Eastern Cape, South Africa", placetype = "province"}, wp = "Gqeberha"}, -- 1,200,000 (Consolidated Urban Area) ["Gqeberha"] = {alias_of = "Port Elizabeth"}, -- official name; not a display alias ["Khartoum"] = {container = "Sudan"}, -- 7,200,000 (unindicated; population of low reliability) ["Dar es Salaam"] = {container = "Tanzania"}, -- 6,650,000 (Agglomeration) ["Mwanza"] = {container = "Tanzania"}, -- 1,340,000 (Agglomeration) ["Mwanza City"] = {alias_of = "Mwanza", display = true}, ["Arusha"] = {container = "Tanzania"}, -- 1,190,000 (Agglomeration) ["Zanzibar"] = {container = "Tanzania"}, -- 1,030,000 (Agglomeration) ["Lomé"] = {container = "Togo"}, -- 2,625,000 (unindicated) ["Lome"] = {alias_of = "Lomé", display = true}, ["Tunis"] = {container = "Tunisia"}, -- 2,725,000 (Municipality (urban population)) ["Sousse"] = {container = "Tunisia"}, -- 1,180,000 (Municipality (urban population)) ["Soussa"] = {alias_of = "Sousse", display = true}, ["Kampala"] = {container = "Uganda"}, -- 4,300,000 (unindicated) ["Lusaka"] = {container = "Zambia"}, -- 3,000,000 (Consolidated Urban Area) ["Harare"] = {container = "Zimbabwe"}, -- 2,675,000 (Agglomeration) ------------------ Asia ------------------- -- sorted by country and then within the country, by decreasing population; figures from citypopulation.de -- (retrieved 2025-04-26; reference date 2025-01-01) unless otherwise indicated. ["Kabul"] = {container = "Afghanistan"}, -- 5,250,000 (Agglomeration) ["Baku"] = {container = "Azerbaijan"}, -- 3,725,000 (Administrative Area (urban population)) ["Manama"] = {container = "Bahrain"}, -- 1,560,000 (unindicated) ["Dhaka"] = {container = {key = "Dhaka Division, Bangladesh", placetype = "division"}}, -- 23,100,000 (Agglomeration) ["Dacca"] = {alias_of = "Dhaka", display = true}, ["Chittagong"] = {container = {key = "Chittagong Division, Bangladesh", placetype = "division"}}, -- 5,050,000 (Agglomeration) ["Gazipur"] = {container = {key = "Dhaka Division, Bangladesh", placetype = "division"}}, -- 2,674,697 (City per 2022; countied in citypopulation.de as part of Dhaka metro area) ["Khulna"] = {container = {key = "Khulna Division, Bangladesh", placetype = "division"}}, -- 1,210,000 (Agglomeration) ["Phnom Penh"] = {container = "Campuchia"}, -- 2,925,000 (Agglomeration) ["Tehran"] = {container = {key = "Tehran Province, Iran", placetype = "province"}}, -- 16,800,000 (Agglomeration) ["Teheran"] = {alias_of = "Tehran", display = true}, ["Mashhad"] = {container = {key = "Razavi Khorasan Province, Iran", placetype = "province"}}, -- 3,475,000 (Agglomeration) ["Mashad"] = {alias_of = "Mashhad", display = true}, ["Meshhed"] = {alias_of = "Mashhad", display = true}, ["Meshed"] = {alias_of = "Mashhad", display = true}, ["Isfahan"] = {container = {key = "Isfahan Province, Iran", placetype = "province"}}, -- 3,425,000 (Agglomeration) ["Esfahan"] = {alias_of = "Isfahan", display = true}, ["Tabriz"] = {container = {key = "East Azerbaijan Province, Iran", placetype = "province"}}, -- 1,970,000 (Agglomeration) ["Shiraz"] = {container = {key = "Fars Province, Iran", placetype = "province"}}, -- 1,950,000 (Agglomeration) ["Ahvaz"] = {container = {key = "Khuzestan Province, Iran", placetype = "province"}}, -- 1,550,000 (Agglomeration) ["Qom"] = {container = {key = "Qom Province, Iran", placetype = "province"}}, -- 1,450,000 (City) ["Kermanshah"] = {container = {key = "Kermanshah Province, Iran", placetype = "province"}}, -- 1,130,000 (City) ["Baghdad"] = {container = "Iraq"}, -- 7,800,000 (Administrative Area (urban population)) ["Basra"] = {container = "Iraq"}, -- 1,710,000 (Administrative Area (urban population)) ["Mosul"] = {container = "Iraq"}, -- 1,550,000 (Administrative Area (urban population)) ["Erbil"] = {container = "Iraq"}, -- 1,220,000 (Administrative Area (urban population)) ["Kirkuk"] = {container = "Iraq"}, -- 1,160,000 (Administrative Area (urban population)) ["Najaf"] = {container = "Iraq"}, -- 1,050,000 (Administrative Area (urban population)) ["Tel Aviv"] = {container = "Israel"}, -- 3,000,000 (Agglomeration) -- Jerusalem is not recognized internationally as part of either Israel or Palestine, but as a -- [[w:corpus separatum]], so put the container as "châu Á" and list Israel and Palestine as additional parents for -- categorization purposes. ["Jerusalem"] = {container = {key = "châu Á", placetype = "continent"}, addl_parents = {"Israel", "Palestine"}}, -- 1,080,000 (Agglomeration) ["Amman"] = {container = "Jordan"}, -- 6,150,000 (unindicated) ["Irbid"] = {container = "Jordan"}, -- 1,070,000 (unindicated) ["Almaty"] = {container = "Kazakhstan"}, -- 2,700,000 (Agglomeration) ["Alma-Ata"] = {alias_of = "Almaty"}, -- former name, sometimes still used; don't display-canonicalize ["Astana"] = {container = "Kazakhstan"}, -- 1,600,000 (Agglomeration) ["Shymkent"] = {container = "Kazakhstan"}, -- 1,370,000 (Agglomeration) ["Kuwait City"] = {container = "Kuwait"}, -- 5,050,000 (Agglomeration) ["Bishkek"] = {container = "Kyrgyzstan"}, -- 1,540,000 (Agglomeration) ["Beirut"] = {container = "Lebanon"}, -- 1,930,000 (unindicated; population of low reliability) -- Kuala Lumpur is a federal capital city, not in any state ["Kuala Lumpur"] = {container = "Malaysia"}, -- 9,550,000 (Agglomeration) -- there are various George Towns and Georgetowns ["George Town, Malaysia"] = {container = {key = "Penang, Malaysia", placetype = "state"}, wp = "%l, %c"}, -- 2,075,000 (Agglomeration) ["George Town"] = {alias_of = "George Town, Malaysia"}, ["Ulaanbaatar"] = {container = "Mông Cổ"}, -- 1,610,000 (City) ["Ulan Bator"] = {alias_of = "Ulaanbaatar", display = true}, ["Yangon"] = {container = "Myanmar"}, -- 5,650,000 (Municipality (urban population)) ["Rangoon"] = {alias_of = "Yangon", display = true}, ["Mandalay"] = {container = "Myanmar"}, -- 1,600,000 (Municipality (urban population)) ["Kathmandu"] = {container = "Nepal"}, -- 3,175,000 (Agglomeration) -- Pyongyang is a directly governed city, not in any province ["Pyongyang"] = {container = "Cộng hòa Dân chủ Nhân dân Triều Tiên"}, -- 3,025,000 (Administrative Area (urban population)) ["Muscat"] = {container = "Oman"}, -- 1,620,000 (Agglomeration) ["Gaza"] = {container = "Palestine", wp = "Gaza City"}, -- 2,275,000 (unindicated) ["Gaza City"] = {alias_of = "Gaza"}, ["Doha"] = {container = "Qatar"}, -- 2,650,000 (Agglomeration) ["Colombo"] = {container = "Sri Lanka"}, -- 4,975,000 (unindicated) ["Damascus"] = {container = "Syria"}, -- 3,975,000 (unindicated; population of low reliability) ["Aleppo"] = {container = "Syria"}, -- 1,980,000 (unindicated; population of low reliability) ["Dushanbe"] = {container = "Tajikistan"}, -- 1,270,000 (City) ["Bangkok"] = {container = "Thái Lan"}, -- 21,800,000 (Agglomeration) -- Chiang Mai not in citypopulation.de, but 1,198,000 urban population in 2021 per Wikipedia -- [[w:List_of_municipalities_in_Thailand#Largest_cities_by_urban_population]] ["Chiang Mai"] = {container = {key = "Chiang Mai Province, Thailand", placetype = "province"}}, ["Chonburi"] = {container = {key = "Chonburi Province, Thailand", placetype = "province"}}, -- 1,570,000 (Agglomeration; including Pattaya) -- metro area population stats from https://www.statista.com/statistics/255483/biggest-cities-in-turkey/ as of 2021; -- second source is citypopulation.de reference date 2025-01-01. ["Istanbul"] = {placetype = {"thành phố", "province"}, divs = {"districts"}, container = "Thổ Nhĩ Kỳ"}, -- 15.2 million; 16,000,000 (Agglomeration) ["İstanbul"] = {alias_of = "Istanbul", display = true}, ["Ankara"] = {container = {key = "Ankara Province, Turkey", placetype = "province"}}, -- 5.15 million; 5,200,000 (Agglomeration) ["Izmir"] = {container = {key = "İzmir Province, Turkey", placetype = "province"}, wp = "İzmir"}, -- 2.95 million; 3,025,000 (Agglomeration) ["İzmir"] = {alias_of = "Izmir", display = true}, ["Bursa"] = {container = {key = "Bursa Province, Turkey", placetype = "province"}}, -- 2.02 million; 2,200,000 (Agglomeration) ["Adana"] = {container = {key = "Adana Province, Turkey", placetype = "province"}}, -- 1.77 million; 1,780,000 (Agglomeration) ["Gaziantep"] = {container = {key = "Gaziantep Province, Turkey", placetype = "province"}}, -- 1.71 million; 1,750,000 (Agglomeration) ["Antalya"] = {container = {key = "Antalya Province, Turkey", placetype = "province"}}, -- 1.3 million; 1,400,000 (Agglomeration) ["Konya"] = {container = {key = "Konya Province, Turkey", placetype = "province"}}, -- 1.35 million; 1,390,000 (Agglomeration) ["Diyarbakır"] = {container = {key = "Diyarbakır Province, Turkey", placetype = "province"}}, -- 1.07 million; 1,100,000 (Agglomeration) -- Diyarbakır is more common per Ngrams and Google Scholar, but Diyarbakir is the Kurdish form, so we should not -- display-canonicalize to the Turkish form Diyarbakır. ["Diyarbakir"] = {alias_of = "Diyarbakır"}, ["Mersin"] = {container = {key = "Mersin Province, Turkey", placetype = "province"}}, -- 1.03 million; 1,060,000 (Agglomeration) ["Ashgabat"] = {container = "Turkmenistan"}, -- 1,150,000 (Agglomeration) ["Dubai"] = {container = "United Arab Emirates"}, -- 6,050,000 (Agglomeration; including Sharjah) ["Abu Dhabi"] = {container = "United Arab Emirates"}, -- 1,850,000 (City) ["Sharjah"] = {container = "United Arab Emirates"}, -- 1,800,000 (Metro area 2022-2023 per Wikipedia; separate from Dubai) ["Tashkent"] = {container = "Uzbekistan"}, -- 3,850,000 (unindicated) ["Sanaa"] = {container = "Yemen"}, -- 3,275,000 (City; population of low reliability) ["Sana'a"] = {alias_of = "Sanaa", display = true}, ["Aden"] = {container = "Yemen"}, -- 1,079,060 (?; 2023 estimate from World Population Review per Wikipedia) ------------------ Europe or Europe-like (Caucasus etc.) --------------------- ["Yerevan"] = {container = "Armenia"}, -- 1,520,000 (Agglomeration) ["Vienna"] = {container = "Áo"}, -- 2,375,000 (Agglomeration) ["Minsk"] = {container = "Belarus"}, -- 2,100,000 (unindicated) ["Brussels"] = {container = "Bỉ"}, -- 2,800,000 (Consolidated Urban Area) ["Antwerp"] = {container = "Bỉ"}, -- 1,270,000 (Consolidated Urban Area) ["Sofia"] = {container = "Bulgaria"}, -- 1,260,000 (Agglomeration) ["Zagreb"] = {container = "Croatia"}, ["Prague"] = {container = "Czech Republic"}, -- 1,470,000 (Agglomeration) ["Brno"] = {container = "Czech Republic"}, -- 729,405 (metro area per Wikipedia as of 2024-01-01 Czech Statistical Office) ["Olomouc"] = {container = "Czech Republic"}, -- 102,293 (city; included only because someone went crazy creating Olomouc-related terms) ["Copenhagen"] = {container = "Đan Mạch"}, -- 1,800,000 (Consolidated Urban Area) ["Helsinki"] = {container = {key = "Uusimaa, Finland", placetype = "region"}}, -- 1,560,000 (Consolidated Urban Area) ["Tbilisi"] = {container = "Georgia"}, -- 1,430,000 (Agglomeration) ["Athens"] = {container = "Hy Lạp"}, ["Thessaloniki"] = {container = "Hy Lạp"}, ["Budapest"] = {container = "Hungary"}, -- FIXME, per Wikipedia "County Dublin" is now the "Dublin Region" ["Dublin"] = {container = {key = "County Dublin, Ireland", placetype = "county"}}, ["Riga"] = {container = "Latvia"}, ["Amsterdam"] = {container = {key = "North Holland, Netherlands", placetype = "province"}}, ["Rotterdam"] = {container = {key = "South Holland, Netherlands", placetype = "province"}}, ["The Hague"] = {container = {key = "South Holland, Netherlands", placetype = "province"}}, -- Christchurch (metro 546,600) and Wellington (metro 439,800) are too small to make it. ["Auckland"] = {container = {key = "Auckland, New Zealand", placetype = "region"}}, ["Oslo"] = {container = {key = "Oslo, Norway", placetype = "county"}}, ["Warsaw"] = {container = {key = "Masovian Voivodeship, Poland", placetype = "voivodeship"}}, ["Katowice"] = {container = {key = "Silesian Voivodeship, Poland", placetype = "voivodeship"}}, --- Ngrams (up through 2022) and Google Scholar (>= 2024) confirms the common form "Krakow" without accent. ["Krakow"] = {container = {key = "Lesser Poland Voivodeship, Poland", placetype = "voivodeship"}, wp = "Kraków"}, ["Kraków"] = {alias_of = "Krakow", display = true}, ["Cracow"] = {alias_of = "Krakow", display = true}, --- Ngrams (up through 2022) and Google Scholar (>= 2024) confirm "Gdańsk" and "Poznań" with accent. ["Gdańsk"] = {container = {key = "Pomeranian Voivodeship, Poland", placetype = "voivodeship"}}, ["Gdansk"] = {alias_of = "Gdańsk", display = true}, ["Poznań"] = {container = {key = "Greater Poland Voivodeship, Poland", placetype = "voivodeship"}}, ["Poznan"] = {alias_of = "Poznań", display = true}, --- Ngrams (up through 2022) and Google Scholar (>= 2024) confirms the common form "Lodz" without accents. ["Lodz"] = {container = {key = "Lodz Voivodeship, Poland", placetype = "voivodeship"}, wp = "Łódź"}, ["Łódź"] = {alias_of = "Lodz", display = true}, ["Lisbon"] = {container = {key = "Lisbon District, Portugal", placetype = "district"}}, ["Porto"] = {container = {key = "Porto District, Portugal", placetype = "district"}}, ["Oporto"] = {alias_of = "Porto", display = true}, ["Bucharest"] = {container = "Romania"}, ["Belgrade"] = {container = "Serbia"}, ["Stockholm"] = {container = "Thụy Điển"}, ["Zurich"] = {container = "Switzerland"}, --- Ngrams (up through 2022) and Google Scholar (>= 2024) confirms the common form "Zurich" without umlaut. --- Even Wikipedia uses the form without umlaut. ["Zürich"] = {alias_of = "Zurich", display = true}, ["Kyiv"] = {container = "Ukraina"}, -- not in Kyiv Oblast -- Don't display-canonicalize Kiev -> Kyiv because in ancient contexts, Kiev is still more common. ["Kiev"] = {alias_of = "Kyiv"}, ["Kharkiv"] = {container = {key = "Kharkiv Oblast, Ukraine", placetype = "oblast"}}, ["Odessa"] = {container = {key = "Odesa Oblast, Ukraine", placetype = "oblast"}, wp = "Odesa"}, -- Don't display-canonicalize Odesa -> Odessa because it may be interpreted as a political statement. ["Odesa"] = {alias_of = "Odessa"}, ------------------ North America, South America --------------------- -- Primary figures from citypopulation.de retrieved on 2025-04-26 (reference date 2025-01-01); -- Wikipedia metropolitan figures from [[w:List of metropolitan areas in the Americas]] based on per-country data; -- Wikipedia city limits figures from [[w:List of largest cities in the Americas]]. ["Buenos Aires"] = {container = "Argentina"}, -- 16,800,000 (Consolidated Urban Area; 13,985,794 metropolitan area per Wikipedia) ["Córdoba, Argentina"] = {container = "Argentina", wp = "%l, %c"}, -- 1,810,000 (Consolidated Urban Area; 1,505,25 city limits per Wikipedia) -- to avoid confusion with Córdoba in Spain ["Córdoba"] = {alias_of = "Córdoba, Argentina"}, ["Cordoba"] = {alias_of = "Córdoba, Argentina", display = "Córdoba"}, ["Rosario"] = {container = "Argentina", wp = "%l, Santa Fe"}, -- 1,510,000 (Consolidated Urban Area; 1,348,725 metropolitan area per Wikipedia) ["Mendoza"] = {container = "Argentina", wp = "%l, %c"}, -- 1,180,000 (Consolidated Urban Area) ["San Miguel de Tucumán"] = {container = "Argentina"}, -- 1,110,000 (Consolidated Urban Area) ["Tucumán"] = {alias_of = "San Miguel de Tucumán"}, ["Tucuman"] = {alias_of = "San Miguel de Tucumán", display = "Tucumán"}, ["Santa Cruz de la Sierra"] = {container = "Bolivia"}, -- 1,960,000 (Consolidated Urban Area); 1,606,671 (city limits per Wikipedia) ["Santa Cruz"] = {alias_of = "Santa Cruz de la Sierra"}, ["La Paz"] = {container = "Bolivia"}, -- 1,870,000 (Consolidated Urban Area; composed of El Alto, now slightly larger, and La Paz) ["El Alto"] = {container = "Bolivia"}, ["Cochabamba"] = {container = "Bolivia"}, -- 1,280,000 (Consolidated Urban Area) ["Santiago"] = {container = "Chile"}, -- 8,400,000 (Consolidated Urban Area; 6,903,479 city limits? per Wikipedia) ["Valparaíso"] = {container = "Chile"}, -- 1,060,000 (Consolidated Urban Area) ["Valparaiso"] = {alias_of = "Valparaíso"}, -- 1,060,000 (Consolidated Urban Area) ["Bogotá"] = {container = "Colombia"}, -- 10,600,000 (Agglomeration; 12,772,828 metropolitan area per Wikipedia) ["Bogota"] = {alias_of = "Bogotá", display = true}, ["Medellín"] = {container = "Colombia"}, -- 4,350,000 (Agglomeration; 4,068,000 metropolitan area per Wikipedia) ["Medellin"] = {alias_of = "Medellín", display = true}, ["Cali"] = {container = "Colombia"}, -- 2,975,000 (Agglomeration; 2,837,000 metropolitan area per Wikipedia) ["Barranquilla"] = {container = "Colombia"}, -- 2,375,000 (Agglomeration; 1,341,160 city limits per Wikipedia) ["Bucaramanga"] = {container = "Colombia"}, -- 1,380,000 (Agglomeration) ["Cartagena, Colombia"] = {container = "Colombia", wp = "%l, %c"}, -- 1,250,000 (Agglomeration) -- to avoid confusion with Cartagena, Spain ["Cartagena"] = {alias_of = "Cartagena, Colombia"}, ["Cúcuta"] = {container = "Colombia"}, -- 1,130,000 (Agglomeration) ["Cucuta"] = {alias_of = "Cúcuta", display = true}, -- to avoid conflict with San Jose, California ["San José, Costa Rica"] = {container = "Costa Rica", wp = "%l, %c"}, -- 2,450,000 (Municipality (urban population); 3,160,000 metropolitan area per Wikipedia) ["San José"] = {alias_of = "San José, Costa Rica"}, ["San Jose"] = {alias_of = "San José, Costa Rica"}, -- display = "San José"; causes error due to San Jose alias for California city; FIXME ["Havana"] = {container = "Cuba"}, -- 2,150,000 (City; 2,137,847 city limits? per Wikipedia) ["Santo Domingo"] = {container = "Dominican Republic"}, -- 3,900,000 (Municipality (urban population); 4,274,651 ??? per Wikipedia) ["Guayaquil"] = {container = "Ecuador"}, -- 3,350,000 (Agglomeration; 3,092,000 metro area? per Wikipedia) ["Quito"] = {container = "Ecuador"}, -- 2,875,000 (Agglomeration; 2,889,703 metro area? per Wikipedia) ["San Salvador"] = {container = "El Salvador"}, -- 1,580,000 (Municipality (urban population)) ["Guatemala City"] = {container = "Guatemala"}, -- 3,375,000 (Municipality (urban population); 3,160,000 metro area? per Wikipedia) ["Port-au-Prince"] = {container = "Haiti"}, -- 3,050,000 (Agglomeration; population of low reliability; 2,915,000 metro area? per Wikipedia) ["San Pedro Sula"] = {container = "Honduras"}, -- 1,330,000 (Consolidated Urban Area) ["Tegucigalpa"] = {container = "Honduras"}, -- 1,220,000 (Urban Area) ["Managua"] = {container = "Nicaragua"}, -- 1,400,000 (Consolidated Urban Area) ["Panama City"] = {container = "Panama"}, -- 1,430,000 (Urban Area) ["Asunción"] = {container = "Paraguay"}, -- 2,350,000 (Municipality (urban population)) ["Lima"] = {container = "Peru"}, -- 12,000,000 (Agglomeration; 11,283,787 ??? per Wikipedia) ["Arequipa"] = {container = "Peru"}, -- 1,210,000 (Agglomeration) ["San Juan"] = {container = {key = "Puerto Rico", placetype = "commonwealth"}, wp = "%l, %c"}, -- 1,910,000 (Consolidated Urban Area) ["Montevideo"] = {container = "Uruguay"}, -- 1,810,000 (Agglomeration; 1,302,954 ??? per Wikipedia) ["Caracas"] = {container = "Venezuela"}, -- 3,850,000 (Consolidated Urban Area; 5,243,301 ??? per Wikipedia) ["Maracaibo"] = {container = "Venezuela"}, -- 2,825,000 (Consolidated Urban Area; 5,278,448 ??? per Wikipedia) -- to avoid confusion with Valencia (city and autonomous community of Spain) ["Valencia, Venezuela"] = {container = "Venezuela", wp = "%l, %c"}, -- 2,100,000 (Consolidated Urban Area) ["Valencia"] = {alias_of = "Valencia, Venezuela"}, ["Maracay"] = {container = "Venezuela"}, -- 1,480,000 (Consolidated Urban Area) ["Barquisimeto"] = {container = "Venezuela"}, -- 1,360,000 (Consolidated Urban Area) } export.misc_cities_group = { canonicalize_key_container = make_canonicalize_key_container(nil, "quốc gia"), default_placetype = "thành phố", data = export.misc_cities, } --[==[ var: List of all known locations, in groups. The first group lists continents and continental regions, followed by three groups listing top-level locations: countries, "country-like entities" (de-facto/unrecognized/etc. countries and dependent territories) and former polities (countries, empires, etc.). After that come first-level subpolities (administrative divisions) of several, mostly large, countries, followed by groups of cities. China and the United Kingdom include second-level subpolities (in the case of China, only the largest ones as the full list runs in the hundreds). ]==] export.locations = { export.continents_group, export.countries_group, export.country_like_entities_group, export.former_countries_group, export.australia_group, export.austria_group, export.bangladesh_group, export.brazil_group, export.bulgaria_group, export.canada_group, export.china_group, export.china_prefecture_level_cities_group, export.china_prefecture_level_cities_group_2, export.egypt_group, export.finland_group, export.france_group, export.france_departments_group, export.germany_group, export.greece_group, export.india_group, export.indonesia_group, export.iran_group, export.ireland_group, export.italy_group, export.japan_group, export.laos_group, export.lebanon_group, export.malaysia_group, export.malta_group, export.mexico_group, export.moldova_group, export.morocco_group, export.netherlands_group, export.new_zealand_group, export.nigeria_group, export.north_korea_group, export.norway_group, export.pakistan_group, export.philippines_group, export.poland_group, export.portugal_group, export.romania_group, export.russia_group, export.saudi_arabia_group, export.south_africa_group, export.south_korea_group, export.spain_group, export.taiwan_group, export.thailand_group, export.turkey_group, export.ukraine_group, export.united_kingdom_group, export.united_states_group, export.england_group, export.northern_ireland_group, export.scotland_group, export.wales_group, export.vietnam_group, export.australia_cities_group, export.brazil_cities_group, export.canada_cities_group, export.france_cities_group, export.germany_cities_group, export.india_cities_group, export.indonesia_cities_group, export.italy_cities_group, export.japan_cities_group, export.mexico_cities_group, export.nigeria_cities_group, export.pakistan_cities_group, export.philippines_cities_group, export.russia_cities_group, export.saudi_arabia_cities_group, export.south_korea_cities_group, export.spain_cities_group, export.taiwan_cities_group, export.united_kingdom_cities_group, export.united_states_cities_group, export.new_york_boroughs_group, export.vietnam_cities_group, export.misc_cities_group, } return export 87p60qjqcueo0n9niqzr1gr4o8o6apx Mô đun:labels/data/lang/ru 828 287755 2571781 2565236 2026-10-19T03:26:28Z Hiyuune 50834 2571781 Scribunto text/plain local insert = table.insert local tostring = tostring local labels = {} labels["Afghanistan"] = { aliases = {"Afghan"}, Wikipedia = true, regional_categories = "Afghanistan", } labels["Alaska"] = { aliases = {"Alaskan","Alaskan Russian"}, Wikipedia = "en:Alaskan Russian", regional_categories = "Alaska", } labels["Áo"] = { aliases = {"Austria","Austrian"}, Wikipedia = true, regional_categories = "Áo", } labels["Azerbaijan"] = { Wikipedia = true, regional_categories = true, } labels["Belarus"] = { aliases = {"Belarusian"}, Wikipedia = true, regional_categories = "Belarus", } labels["Krym"] = { aliases = {"Crimea","Crimean"}, Wikipedia = true, regional_categories = "Krym", } labels["Donbass"] = { Wikipedia = true, regional_categories = true, } labels["Estonia"] = { aliases = {"Estonian"}, Wikipedia = true, regional_categories = "Estonia", } labels["Đức"] = { aliases = {"German","Germany"}, -- comment this alias out if it causes problems Wikipedia = true, regional_categories = "Đức", } labels["Nhật Bản"] = { aliases = {"Japan"}, Wikipedia = "en:Japanese people in Russia", regional_categories = "Nhật Bản", } labels["Kazakhstan"] = { aliases = {"Kazakhstani", "Kazakh"}, Wikipedia = {"en:Russians in Kazakhstan", "ru:Русский язык в Казахстане"}, regional_categories = "Kazakhstan", } labels["Kazan"] = { Wikipedia = true, regional_categories = true, } labels["Latvia"] = { aliases = {"Latvian"}, Wikipedia = true, regional_categories = "Latvia", } labels["tiếng Nga trung đại"] = { aliases = {"Old Russian","Middle Russian"}, Wikipedia = "en:Early Modern Russian", plain_categories = true, } labels["Moldova"] = { aliases = {"Moldovan"}, regional_categories = "Moldova", } labels["Moskva"] = { aliases = {"Moscow"}, Wikipedia = true, regional_categories = true, } labels["Viễn Bắc"] = { aliases = {"Northern Russia"}, Wikipedia = "en:Northern Russian dialects", regional_categories = "Viễn Bắc", } labels["Orenburg"] = { Wikipedia = true, regional_categories = true, } labels["Pskov"] = { Wikipedia = true, regional_categories = true, } labels["Sankt-Peterburg"] = { aliases = {"Saint Petersburg","St Petersburg", "St. Petersburg"}, Wikipedia = true, regional_categories = true, } labels["Sakhalin"] = { Wikipedia = true, regional_categories = true, } labels["Siberia"] = { aliases = {"Siberian"}, Wikipedia = "en:Siberian dialects", regional_categories = "Siberia", } labels["Southern Russia"] = { aliases = {"Southern Russia","southern Russia", "Southern Russian", "southern Russian", "South Russia", "south Russia", "South of Russia", "south of Russia"}, Wikipedia = true, regional_categories = "Southern", } labels["Thụy Sĩ"] = { aliases = {"Swiss","Switzerland"}, Wikipedia = true, regional_categories = true, } labels["Ukraina"] = { aliases = {"Ukrainian","Ukraine"}, Wikipedia = true, regional_categories = "Ukraina", } local prereform_prefixes = {"PR", "PRO", "ru-PR", "ru-PRO"} local function prereform(year, wp) year = tostring(year) local aliases = {"trước " .. year, "trước cải cách chính tả " .. year, "trước cải cách chính tả" .. year, "trước cải cách chính tả " .. year} for _, prefix in ipairs(prereform_prefixes) do if year == "1918" then insert(aliases, prefix) end insert(aliases, prefix .. year) insert(aliases, prefix .. "-" .. year) end labels["chính tả trước năm " .. year] = { aliases = aliases, Wikipedia = wp, } end prereform("1918", "en:Reforms of Russian orthography#Post-revolution reform") prereform("1956", "en:Reforms of Russian orthography#Mid-20th-century changes") return require("Module:labels").finalize_data(labels) mx1949jeqc6z65b1dkglsflbxbguzdj Mô đun:ang-noun 828 289681 2571798 2258781 2026-10-19T08:06:59Z Hiyuune 50834 2571798 Scribunto text/plain local m_links = require("Module:links") local strutils = require("Module:string utilities") local lang = require("Module:languages").getByCode("ang") local export = {} local m_inflection_table = require("Module:inflection-table") local cases = { "nom", "acc", "gen", "dat" } local numbers = { "sg", "pl" } local slots_to_accel_form = {} for _, case in ipairs(cases) do for _, number in ipairs(numbers) do slots_to_accel_form[case .. "_" .. number] = case .. "|" .. number:sub(1, 1) end end local slots_to_args = { nom_sg = 1, nom_pl = 2, acc_sg = 3, acc_pl = 4, gen_sg = 5, gen_pl = 6, dat_sg = 7, dat_pl = 8, } function export.make_table(frame) local parent_args = frame:getParent().args local params = { ["title"] = true, -- To be removed. ["type"] = true, ["width"] = true, ["style"] = true, ["num"] = true, ["g"] = true, ["gender"] = {alias_of = "g"}, } for slot, arg in pairs(slots_to_args) do params[arg] = {list = slot} end local args = require("Module:parameters").process(parent_args, params) local table_args = { style = args.style == "right" and "float:right; clear:right;" or "", width = args.width or "30", } local accel_lemma_sg = args[slots_to_args.nom_sg][1] local accel_lemma_pl = args[slots_to_args.nom_pl][1] local accel_lemma = accel_lemma_sg and accel_lemma_sg ~= "—" and accel_lemma_sg ~= "-" and accel_lemma_sg:gsub(",.*", "") or accel_lemma_pl and accel_lemma_pl ~= "—" and accel_lemma_pl ~= "-" and accel_lemma_pl:gsub(",.*", "") or nil for slot, accel_form in pairs(slots_to_accel_form) do local form_args = args[slots_to_args[slot]] if #form_args == 0 then form_args = {"—"} end local forms = {} for _, form_arg in ipairs(form_args) do for _, form in ipairs(mw.text.split(form_arg, ", *")) do table.insert(forms, form) end end local table_arg = {} for _, form in ipairs(forms) do table.insert(table_arg, form == "—" and form or m_links.full_link{ lang = lang, term = form, accel = { form = accel_form, lemma = accel_lemma, } }) table_args[slot] = table.concat(table_arg, ", ") end end if args.num == "pl" then table_args.nom_sg = "—" table_args.acc_sg = "—" table_args.gen_sg = "—" table_args.dat_sg = "—" elseif args.num == "sg" then table_args.nom_pl = "—" table_args.acc_pl = "—" table_args.gen_pl = "—" table_args.dat_pl = "—" end local type = '' if args["type"] then type = type .. (args["type"]:gsub("^%l", string.upper)) end if args.g then type = type .. " (" .. ( args.g == "m" and "giống đực" or args.g == "f" and "giống cái" or args.g == "n" and "giống trung" or error("Không rõ giống '" .. args.g .. "'") ) .. ")" end type = type .. ':' local table = type .. (type and '\n') table = table .. m_inflection_table.make_top{ title = '-', palette = 'indigo' } table = table .. [=[ ! ! số ít ! số nhiều |- ! [[nominative case|danh cách]] | data-accel-col=1 | {nom_sg} | data-accel-col=2 | {nom_pl} |- ! [[accusative case|đối cách]] | data-accel-col=1 | {acc_sg} | data-accel-col=2 | {acc_pl} |- ! [[genitive case|sinh cách]] | data-accel-col=1 | {gen_sg} | data-accel-col=2 | {gen_pl} |- ! [[dative case|dữ cách]] | data-accel-col=1 | {dat_sg} | data-accel-col=2 | {dat_pl} ]=] table = table .. m_inflection_table.make_bottom{} return strutils.format(table, table_args) end return export -- For Vim, so we get 4-space tabs -- vim: set ts=4 sw=4 noet: mgg7qb5ey4eyaavz5dqizbz5u30qdxv Bản mẫu:ang-decl-noun-a-n 10 289694 2571799 2122175 2026-10-19T08:08:00Z Hiyuune 50834 2571799 wikitext text/x-wiki {{#invoke:checkparams|error}}<!-- Validate template parameters -->{{ang-decl-noun<!-- -->|type=thân từ a mạnh<!-- -->|1={{{nomsg|{{{1}}}}}}<!-- -->|3={{{nomsg|{{{1}}}}}}<!-- -->|5={{{1}}}{{#if:{{{vowel|}}}||e}}s<!-- -->|7={{{datsg|{{{1}}}{{#if:{{{vowel|}}}||e}}}}}<!-- -->|2={{#if:{{{short|}}}|{{{2|{{{1}}}}}}{{#if:{{{vowel|}}}||u}}|{{{nomsg|{{{2|{{{1}}}}}}}}}}}<!-- -->|4={{#if:{{{short|}}}|{{{2|{{{1}}}}}}{{#if:{{{vowel|}}}||u}}|{{{nomsg|{{{2|{{{1}}}}}}}}}}}<!-- -->|6={{{2|{{{1}}}}}}{{#if:{{{vowel|}}}|n}}a<!-- -->|8={{{2|{{{1}}}}}}{{#if:{{{vowel|}}}||u}}m{{#if:{{{vowel|}}}|,{{{2|{{{1}}}}}}um}}<!-- -->|num={{{num|}}}<!-- -->|title={{{title|}}}<!-- -->}}<!-- -->{{cln|ang|Danh từ thân từ a giống trung}}<!-- --><noinclude>{{documentation}}</noinclude> kpcwzgood2kzh5ekwuwh8y2dtrd4hfx abroþennes 0 289754 2571750 2282673 2026-10-18T16:48:47Z Hiyuune 50834 2571750 wikitext text/x-wiki =={{langname|en}}== ==={{section|alt}}=== * {{alter|ang|ābroþennys}} * {{alter|ang|ābroðennes||chính tả edh}} ==={{section|etym}}=== Từ {{suffix|ang|ābroþen|nes}}. ==={{section|pron}}=== * {{ang-IPA|ābroþennes}} ==={{section|n}}=== {{ang-noun|ābroþennes|f}} # Sự [[đần độn]], sự [[hèn nhát]], một [[khuyết điểm]], sự [[sa ngã]]. # Sự [[thoái hóa]], sự [[hèn hạ]], sự [[sa ngã]]. #* '''1921''', Joseph Bosworth & Thomas Northcote Toller, An Anglo-Saxon Dictionary Online #*: {{quote|ang|Ongēan ðæs mōdes strengðe se dēofol forgifð '''ābroðennysse'''.|t=Ác quỷ ban cho sự sa ngã để đổi lấy sức mạnh của linh hồn.}} ===={{section|decl}}==== {{ang-decl-noun-o-f|ābroþenness|nomsg=ābroþennes}} ==={{section|ref}}=== * {{R:ang:BT|ĀBROÐENNES|ref=000110}} * {{R:ang:BT|ĀBROÞENNES|ref=037390}} aca7f890spros2i9i6yyuvz9zilmwi1 abroþennys 0 289756 2571749 2282681 2026-10-18T16:48:31Z Hiyuune 50834 /* Danh từ */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]) 2571749 wikitext text/x-wiki =={{langname|ang}}== ==={{section|pron}}=== * {{ang-IPA|ābroþennys}} ==={{section|n}}=== {{ang-noun|ābroþennys|f}} # {{alternative form of|ang|ābroþennes}} ===={{section|decl}}==== {{ang-decl-noun-o-f|ābroþennyss|nomsg=ābroþennys}} 8fie0zwnkhlkaclc85fbqhjgcag7m2p acyrrednes 0 289803 2571656 2320249 2026-10-18T14:01:53Z TheHighFighter2 42988 /* Danh từ */ 2571656 wikitext text/x-wiki =={{langname|ang}}== ==={{section|alt}}=== * {{alter|ang|āċerrednes|āċirrednes}} ==={{section|etym}}=== Tương đương với {{suffix|ang|āċyrred|nes}}. ==={{section|pron}}=== * {{ang-IPA|āċyrrednes}} ==={{section|n}}=== {{ang-noun|āċyrrednes|f}} # [[ác cảm|Ác cảm]], [[quay lưng]] lại. # Sự [[bội giáo]], sự [[nổi loạn]]. ===={{section|decl}}==== {{ang-decl-noun-o-f|āċyrredness|nomsg=āċyrrednes}} ===={{section|drv}}==== * {{l|ang|onweġāċyrrednes}} ==={{section|ref}}=== * {{R:ang:BT|ĀĊYRREDNES|ref=000242}} hkv9p2lwch339kn4fnc2idy0gkth73o adlieg 0 289805 2571746 2321066 2026-10-18T16:47:14Z Hiyuune 50834 /* {{section|n}} */ 2571746 wikitext text/x-wiki =={{langname|ang}}== ==={{section|alt}}=== * {{alter|ang|ādlēġ|ādlīġ}} ==={{section|etym}}=== Tương đương với {{compound|ang|ād|līeġ}}. ==={{section|pron}}=== * {{ang-IPA|ād-līeġ}} ==={{section|n}}=== {{ang-noun|ādlīeġ|m|ādlīeġas}} {{tlb|ang|Tây Saxon}} # [[ngọn lửa|Ngọn lửa]] của [[đống]] [[tang lễ]]. ===={{section|decl}}==== {{ang-decl-noun-a-m|ādlīeġ}} ==={{section|ref}}=== * Joseph Bosworth, edited by T. Northcote Toller, An Anglo-Saxon Dictionary, Oxford, Clarendon Press and 1882 * T. Northcote Toller, An Anglo-Saxon Dictionary: Supplement, Oxford, Clarendon Press and 1921 {{C|ang|Chết|Lửa}} ad6f6kd9gvprye6oo5jbbwu4r6cdvd5 æboc 0 289808 2571754 2322536 2026-10-18T16:50:05Z Hiyuune 50834 2571754 wikitext text/x-wiki =={{langname|ang}}== ==={{section|etym}}=== Từ ghép giữa {{compound|ang|ǣ|bōc}}. ==={{section|pron}}=== * {{ang-IPA|ǣ-bōc}} ==={{section|n}}=== {{ang-noun|ǣbōc|f}} # [[sách luật|Sách luật]]. ===={{section|decl}}==== {{ang-decl-noun-cons-f|ǣbōc|ǣbēċ}} ==={{section|ref}}=== * {{R:ang:BT|ǣbōc|ref=037554}} {{topics|ang|Sách}} {{topics|ang|Luật}} chjhfplnhd9mco77rjewuh7rlinyi7y æcced 0 289810 2571794 2338890 2026-10-19T06:05:42Z TheHighFighter2 42988 2571794 wikitext text/x-wiki =={{langname|ang}}== ==={{section|pron}}=== * {{ang-IPA|æċċed}} ==={{section|noun}}=== {{ang-noun|æċċed|n|æċċed}} # {{alt form|ang|æċed|t=giấm}}. ===={{section|decl}}==== {{ang-decl-noun-a-n|æċċed|num=sg}} 88901vnye2aijn4tmstyc16h1y1di29 æcerceorl 0 289817 2571753 2322368 2026-10-18T16:49:51Z Hiyuune 50834 2571753 wikitext text/x-wiki =={{langname|ang}}== ==={{section|etym}}=== Từ ghép giữa {{affix|ang|æcer|ċeorl}}. ==={{section|pron}}=== * {{ang-IPA|æcer-ċeorl}} ==={{section|noun}}=== {{ang-noun|æcerċeorl|m}} # Một người [[nông dân]], người [[đi cày]]. ===={{section|decl}}==== {{ang-decl-noun-a-m|æcerċeorl}} mke70fqt5o7hg5uqdb83n1uehvlwzvk Mô đun:grc-decl/decl/data 828 291431 2571732 2289184 2026-10-18T16:26:17Z Hiyuune 50834 2571732 Scribunto text/plain local module_path = 'Module:grc-decl/decl' local m_decl_static_data = mw.loadData(module_path .. '/classes') local m_paradigms = mw.loadData(module_path .. '/staticdata/paradigms') local m_dialect_groups = mw.loadData(module_path .. '/staticdata/dialects') local m_accent = require('Module:grc-accent') local m_links = require('Module:links') local m_str_utils = require("Module:string utilities") local check_type = require('libraryUtil').checkType local grc = require('Module:languages').getByCode('grc') local codepoint = m_str_utils.codepoint local deep_copy = require('Module:table').deepCopy local syllables = m_accent.syllables local toNFC = mw.ustring.toNFC local toNFD = mw.ustring.toNFD local umatch = m_str_utils.match local usub = m_str_utils.sub local grc_utilities_data local function get_grc_utilities_data() grc_utilities_data, get_grc_utilities_data = mw.loadData('Module:grc-utilities/data'), nil return grc_utilities_data end local export = { inflections = {}, adjinflections = m_decl_static_data.adjinflections, adjinflections_con = m_decl_static_data.adjinflections_con, } local function ine(var) if var == '' then return nil else return var end end local function quote(text) return '“' .. text .. '”' end local function mention(alt) return m_links.full_link({ alt = alt, lang = grc }, 'term') end local dental_lookup = { ['δ'] = '*-δς', ['θ'] = '*-θς', ['τ'] = '*-τς', } -- Return one of the three options, or an error message. -- suffix is true if args[1] does not contain an accent mark and begins in a hyphen. local function accent_switch(accent_term, if_oxytone, if_perispomenon, otherwise, error_message, unaccented_suffix) local value -- accent_term can be nil if this is a paradigm for an unaccented_suffix. check_type('accent_term', 1, accent_term, 'string', unaccented_suffix) if accent_term == 'oxytone' then value = if_oxytone elseif accent_term == 'perispomenon' then value = if_perispomenon else value = otherwise end return value or error_message and error(error_message) end local function uncontracted_error(contracted, dialect, nom_ending) if contracted == false and (dialect == 'att' or dialect == 'koi' or dialect == 'byz') then --[[Special:WhatLinksHere/Wiktionary:Tracking/grc-decl/uncontracted error]] require('Module:debug').track('grc-decl/uncontracted error') mw.log('In the Attic, Koine, or Byzantine dialects, nouns in ' .. quote(nom_ending) .. ' are contracted. Remove ' .. quote('con') .. ' from the ' .. quote('form') .. ' parameter or change the dialect.') end end local function nonrecessive_error(accent_term, error_message) if accent_term == 'oxytone' or accent_term == 'perispomenon' then error(error_message) end end local function some(t, func) for _, item in ipairs(t) do if func(item) then return true end end return false end -- FIXME: use ... to handle an arbitrary number of dialects local function dial_condition(actual_dialect, dialect1, dialect2) if not actual_dialect then return false end if type(dialect1) == "string" then return actual_dialect == dialect1 or dialect2 and actual_dialect == dialect2 or m_dialect_groups[dialect1] and m_dialect_groups[dialect1][actual_dialect] elseif type(dialect1) == "table" then return some(dialect1, function(dialect) return dial_condition(actual_dialect, dialect) end) end end local function dial_form_multi(args, forms, dialects) local actual_dialect = args.dial if not actual_dialect then return end local ctable = args.ctable -- Forms is an array of tables containing individual forms in -- the same dialect or dialects: -- { <case–number>, <form> } -- Dialects is a sequence of strings or tables: -- "<dialect code>" -- or -- { "<dialect code 1>", "<dialect code 2>", ... } if dialects then if dial_condition(actual_dialect, dialects) then for _, form in ipairs(forms) do if type(form[2]) == 'string' then ctable[form[1]] = form[2] end end end -- Forms is a sequence of tables: -- { <case–number>, <form>, <dialect code> } -- or -- { <case–number>, <form>, { <dialect code 1>, <dialect code 2>, ... } } elseif type(forms) == 'table' then for _, form_data in ipairs(forms) do if dial_condition(actual_dialect, form_data[3]) and type(form_data[2]) == 'string' then ctable[form_data[1]] = form_data[2] end end end end -- FIXME: use ... to handle an arbitrary number of dialects local function dial_form(args, f, suffix, dialect1, dialect2) if dial_condition(args.dial, dialect1, dialect2) then args.ctable[f] = suffix end end -- Should Aeolic be moved here? local function dial_forms_first(args) dial_form_multi(args, { { 'GS', '$ᾱς/$ᾱῠ̈', 'ara' }, { 'DS', '$η', 'boi' }, -- 104.3 { 'DS', '$αι', { 'ara', 'ele' } }, { 'DS', '$ᾱ', { 'the', 'les' } }, { 'GD', '$αιῐ̈ν', 'epi' }, { 'GD', '$αιῠ̈ν', 'ark' }, { 'GD', '$ην', 'boi' }, { 'GD', '$αιαις/$αιαιρ', 'ele' }, { 'NP', '$η', 'boi' }, { 'GP', '$ᾱ́ων/$έων/$ῶν', 'epi' }, -- 104.6 { 'GP', '$έων/$ῶν', 'ion' }, { 'GP', '$ᾶν', 'nonIA' }, { 'GP', '$ᾱ́ων/$ᾶν', 'lyr' }, { 'GP', '$ᾱ́ων', 'boi' }, { 'DP', '$ῃσῐ(ν)/$ῃς/$αις', 'epi' }, -- 104.7 { 'DP', '$ῃσῐ(ν)', 'ion' }, { 'DP', '$ᾱσῐ(ν)/$ᾳσῐ(ν)', 'ato' }, { 'DP', '$αις/$αισῐ(ν)', 'lyr' }, { 'DP', '$ης', 'boi' }, { 'DP', '$ᾳσῐ/$αισῐ', 'les' }, { 'AP', '$ᾰς', 'buck78' }, -- 104.8 { 'AP', '$ᾱ̆ς', 'lyr' }, { 'AP', '$ᾰ(ν)ς', { 'kre', 'arg' } }, { 'AP', '$αις', 'les' }, { 'AP', '$ᾰς/$αις/$αιρ', 'ele' }, }) end local function dial_forms_first_oxy(args) dial_form_multi(args, { { 'GS', '$ᾶς/$ᾶῠ̈', 'ara' }, { 'DS', '$ῆ', 'boi' }, -- 104.3 { 'DS', '$αῖ', { 'ara', 'ele' } }, { 'DS', '$ᾱ', 'les' }, -- recessive { 'DS', '$ᾶ', 'the' }, { 'GD', '$αῖῐ̈ν', 'epi' }, { 'GD', '$αῖῠ̈ν', 'ark' }, { 'GD', '$ῆν', 'boi' }, { 'GD', '$αίαις/$αίαιρ', 'ele' }, { 'NP', '$ή', 'boi' }, { 'GP', '$ᾱ́ων/$έων/$ῶν', 'epi' }, -- 104.6 { 'GP', '$έων/$ῶν', 'ion' }, { 'GP', '$ᾶν', 'nonIA' }, { 'GP', '$ᾱ́ων/$ᾶν', 'lyr' }, { 'GP', '$ᾱ́ων', 'boi' }, { 'DP', '$ῇσῐ(ν)/$ῇς/$αῖς', 'epi' }, -- 104.7 { 'DP', '$ῇσῐ(ν)', 'ion' }, { 'DP', '$ᾶσῐ(ν)/$ᾷσῐ(ν)', 'ato' }, { 'DP', '$αῖς/$αῖσῐ(ν)', 'lyr' }, { 'DP', '$ῆς', 'boi' }, { 'DP', '$ᾳσῐ/$αισῐ', 'les' }, -- recessive { 'AP', '$ᾰ́ς', 'buck78' }, -- 104.8 { 'AP', '$ᾱ̆́ς', 'lyr' }, { 'AP', '$ᾰ́(ν)ς', { 'kre', 'arg' } }, { 'AP', '$αις', 'les' }, -- recessive { 'AP', '$ᾰ́ς/$αίς/$αίρ', 'ele' }, }) end export.inflections['1st-alp'] = function(args) local suffix = accent_switch(args.accent.term, '', '_con', '_pax', nil, args.suffix) args.ctable = deep_copy(m_paradigms['alp' .. suffix]) if args.accent.term == 'oxytone' then dial_forms_first_oxy(args) else if args.like_adjective then args.ctable['GP'] = '$ων' end if args.accent.term ~= 'perispomenon' then dial_forms_first(args) end end end --[=[ Only difference from "1st-alp-pax" and "1st-eta-pax" is that because of the "-prx", [[Module:grc-decl/decl]] doesn't shift the accent to the end of the stem in all forms. Used only in 1st-and-2nd-declension adjectives. ]=] -- export.inflections['1st-alp-prx'] = export.inflections['1st-alp-pax'] -- export.inflections['1st-eta-prx'] = export.inflections['1st-eta-pax'] export.inflections['1st-eta'] = function(args) local suffix = accent_switch(args.accent.term, '', '_con', '_pax', nil, args.suffix) args.ctable = deep_copy(m_paradigms['eta' .. suffix]) if args.accent.term == 'oxytone' then -- Assuming this applies for perispomenon as well as oxytone. dial_forms_first_oxy(args) dial_form(args, 'DP', '$ῆσῐ(ν)/$ῇσῐ(ν)', 'ato') elseif args.accent.term ~= 'perispomenon' then if args.like_adjective then args.ctable['GP'] = '$ων' end dial_forms_first(args) dial_form(args, 'DP', '$ησῐ(ν)/$ῃσῐ(ν)', 'ato') end end -- Always recessive, except in adjectives or derivatives of them. local function short_alpha(code) return function(args) if code == 'als' then -- Ionic and Epic have eta, not alpha, in all forms except the -- nominative and accusative singular. if args.dial == 'ion' or args.dial == 'epi' then short_alpha('ets')(args) return end elseif code ~= 'ets' then error('Invalid code ' .. tostring(code)) end local accent_on_ultima = args.like_adjective and '_prx' or nil local suffix = accent_switch(args.accent.term, accent_on_ultima, accent_on_ultima, '_prx', 'First-declension feminine nouns with nominative singular in ' .. 'short alpha must have recessive accent.', args.suffix) args.ctable = deep_copy(m_paradigms[code .. suffix]) dial_forms_first(args) if code == 'ets' then dial_form(args, 'DP', '$ησῐ(ν)/$ῃσῐ(ν)', 'ato') end end end export.inflections['1st-als'] = short_alpha('als') export.inflections['1st-ets'] = short_alpha('ets') local function dial_forms_first_M(args) dial_form_multi(args, { { 'GS', '$ᾱο/$εω/$ω', 'epi' }, { 'GS', '$εω/$ω', 'ion' }, { 'GS', '$ᾱ', 'nonIA' }, { 'GS', '$ᾱ(ο)', 'lyr' }, { 'GS', '$ᾱο', 'boi' }, { 'GS', '$ᾱῠ̈', 'ark' }, { 'GS', '$ᾱ(ῠ̈)', 'kyp' }, { 'GS', '$ᾱ(ς)', { 'meg', 'northwest' } }, -- 105.2 }) end local function dial_forms_first_M_oxy(args) dial_form_multi(args, { { 'GS', '$ᾶο/$έω/$ῶ', 'epi' }, { 'GS', '$έω/$ῶ', 'ion' }, { 'GS', '$ᾶ', 'nonIA' }, { 'GS', '$ᾶ(ο)', 'lyr' }, { 'GS', '$ᾶο', 'boi' }, { 'GS', '$ᾶῠ̈', 'ark' }, { 'GS', '$ᾶ(ῠ̈)', 'kyp' }, { 'GS', '$ᾶ(ς)', { 'meg', 'northwest' } }, -- 105.2 }) end local function first_m(vowel) return function(args) local suffix = accent_switch(args.accent.term, '', '_con', '_pax', nil, args.suffix) args.ctable = deep_copy(m_paradigms['M_' .. vowel .. suffix]) -- [[ἰδιώτης]], genitive singular ἰδιώτεω, not *ἰδιωτέω, -- at least in Herodotus 1.123. if args.dial == 'ion' or args.dial == 'epi' then args.synaeresis = true end if args.accent.term == 'oxytone' then dial_forms_first_oxy(args) dial_forms_first_M_oxy(args) if vowel == 'eta' then dial_form(args, 'DP', '$ῆσῐ(ν)/$ῇσῐ(ν)', 'ato') end elseif args.accent.term ~= 'perispomenon' then dial_forms_first(args) dial_forms_first_M(args) if vowel == 'eta' then dial_form(args, 'DP', '$ησῐ(ν)/$ῃσῐ(ν)', 'ato') end end local voc = args.voc if voc == 'α' or voc == 'ᾰ' or usub(args.stem, -1) == 'τ' then args.ctable['VS'] = '$ᾰ' end end end export.inflections['1st-M-alp'] = first_m('alp') export.inflections['1st-M-eta'] = first_m('eta') local function dial_forms_second(args, neuter) mw.log(mw.dumpObject(neuter)) dial_form_multi(args, { { 'GS', '$οιο/$ου', 'epi' }, -- 106.1 { 'GS', '$οι(ο)', 'the' }, { 'GS', '$ω/$οιο', 'lyr' }, { 'GS', '$ω', { 'severe', 'boi' } }, { 'GS', '$ω(ν)', 'kyp' }, { 'DS', '$ω', 'les' }, -- 106.2 { 'DS', '$ου', 'the' }, { 'DS', '$οι', { 'ele', 'boi', 'ara', 'eub' } }, { 'GD', '$οιῐ̈ν', 'epi' }, -- 106.6 { 'GD', '$οιῠ̈ν', 'ark' }, { 'GD', '$οιοις/$οιοιρ', 'ele' }, { 'GP', '$ουν', 'the' }, { 'DP', '$οισῐ(ν)/$οις', 'epi' }, -- 106.4 { 'DP', '$οισῐ(ν)', { 'ato', 'ion' } }, { 'DP', '$οις/$οισῐ(ν)', 'lyr' }, { 'DP', '$οισῐ(ν)', 'les' }, }) if not neuter then dial_form_multi(args, { { 'ND', '$ου', 'the' }, -- 23 { 'AP', '$ως', { 'lyr', 'severe' } }, -- 106.5 { 'AP', '$ος', 'buck78' }, { 'AP', '$ο(ν)ς', { 'kre', 'arg' } }, { 'AP', '$οις', 'les' }, { 'AP', '$ος/$οις/$οιρ', 'ele' }, }) end end local function dial_forms_second_oxy(args, neuter) mw.log(mw.dumpObject(neuter)) dial_form_multi(args, { { 'GS', '$οῖο/$οῦ', 'epi' }, -- 106.1 { 'GS', '$οῖ(ο)', 'the' }, { 'GS', '$ῶ/$οῖο', 'lyr' }, { 'GS', '$ῶ', { 'severe', 'boi' } }, { 'GS', '$ῶ(ν)', 'kyp' }, { 'DS', '$ω', 'les' }, -- 106.2; les is recessive { 'DS', '$οῦ', 'the' }, { 'DS', '$οῖ', { 'ele', 'boi', 'ara', 'eub' } }, { 'GD', '$οῖῐ̈ν', 'epi' }, -- 106.6 { 'GD', '$οῖῠ̈ν', 'ark' }, { 'GD', '$οίοις/$οίοιρ', 'ele' }, { 'GP', '$οῦν', 'the' }, { 'DP', '$οῖσῐ(ν)/$οῖς', 'epi' }, -- 106.4 { 'DP', '$οῖσῐ(ν)', { 'ato', 'ion' } }, { 'DP', '$οῖς/$οῖσῐ(ν)', 'lyr' }, { 'DP', '$οισῐ(ν)', 'les' }, -- recessive }) if not neuter then dial_form_multi(args, { { 'ND', '$ού', 'the' }, -- 23 { 'AP', '$ώς', { 'lyr', 'severe' } }, -- 106.5 { 'AP', '$ός', 'buck78' }, { 'AP', '$ό(ν)ς', { 'kre', 'arg' } }, { 'AP', '$οις', 'les' }, -- recessive { 'AP', '$ός/$οίς/$οίρ', 'ele' }, }) end end -- For nouns like λόγος and ἔργον. local function second_basic(gender_code) return function(args) local suffix = accent_switch(args.accent.term, '', nil, '_prx', 'Perispomenon basic second-declension nouns not supported.', args.suffix) args.ctable = deep_copy(m_paradigms['second' .. (gender_code or '') .. suffix]) if args.accent.term == 'oxytone' then dial_forms_second_oxy(args, gender_code == '_N') else dial_forms_second(args, gender_code == '_N') end end end export.inflections['2nd'] = second_basic() export.inflections['2nd-N'] = second_basic('_N') local function second_contracted(gender_code) return function(args) local suffix = accent_switch(args.accent.term, nil, '', '_pax', 'Oxytone contracted second-declension nouns are not supported.', args.suffix) if gender_code == '_N' and suffix == '_pax' then error('Paroxytone contracted neuter second-declension nouns are not supported') end args.ctable = deep_copy(m_paradigms['second' .. (gender_code or '') .. '_con' .. suffix]) end end export.inflections['2nd-con'] = second_contracted() export.inflections['2nd-N-con'] = second_contracted('_N', true) local function second_Attic(gender) return function(args) local suffix = accent_switch(args.accent.term, '', '_con', '_prx', nil, args.suffix) if gender == '_N' and suffix == '_con' then error('Perispomenon Attic declension neuter nouns are not supported.') end args.force_antepenult = true args.ctable = deep_copy(m_paradigms['second' .. (gender or '') .. '_att' .. suffix]) end end export.inflections['2nd-att'] = second_Attic() export.inflections['2nd-N-att'] = second_Attic('_N') --[[ In order: - vowel before ντ at end of stem, or declension category - masculine nominative singular ending - neuter nominative singular ending - segment preceding ῐ in dative plural ]] local nt = { ['ο'] = { 'ων', 'ον', 'ουσ' }, -- ἔχων (ἔχω) ['1&3-ουντ'] = { 'ους', 'ον', 'ουσ' }, -- δούς (δίδωμι) ['ου'] = { 'ων', 'ουν', 'ουσ' }, -- ποιῶν (ποιέω), δηλῶν (δηλόω) ['ε'] = { 'εις', 'εν', 'εισ' }, -- θείς (τίθημι), ἀχθείς (ἄγω) ['η'] = { 'ης', 'ην', 'ῃσ' }, -- φωνῆς () ['ω'] = { 'ων', 'ων', 'ωσ' }, -- ζῶν (ζάω) } -- Get nominative singular and dative plural (minus ῐ(ν)) for ντ-stems. local function handle_nt(base, decl_type, gender, is_neuter, adjective, arg1, arg2) local m_data, NS, DP = grc_utilities_data or get_grc_utilities_data() base = toNFD(base) -- Here we must match α, ε, η, ι, ο, υ, ω, or ου (with any number of -- diacritics) followed by ντ. local whole_match, vowel, diacritic = umatch(base, '((ου)(' .. m_data.combining_diacritic .. '*)ντ)$') if whole_match == nil then whole_match, vowel, diacritic = umatch(base, '(([αεηιουω])(' .. m_data.combining_diacritic .. '*)ντ)$') end if not whole_match then error('Something is wrong with the stem ' .. base .. '.') end local nom_base = base:gsub(whole_match, '') -- Declension type has priority over vowel because δούς (δοντ-) and -- λαβών (λαβόντ-) have the same stem vowel, but different masculine -- nominative singulars. local data = nt[decl_type] or nt[vowel] if data then if adjective then NS = nom_base .. (is_neuter and data[2] or data[1]) end DP = nom_base .. data[3] elseif umatch(diacritic, "^" .. m_data.length.optional .. "$") then if vowel then local intermediate_base, macron = nom_base .. vowel, m_data.diacritics.macron DP = intermediate_base .. macron .. 'σ' if adjective then if is_neuter then NS = intermediate_base .. diacritic .. 'ν' else NS = intermediate_base .. macron .. 'ς' end end else error('Failed to generate nominative singular and dative plural for ' .. quote(arg1) .. ', ' .. quote(arg2) .. '.') end else error('Invalid diacritic ' .. (type(diacritic) == 'string' and string.format("U+%X", codepoint(diacritic)) or tostring(diacritic)) .. ') in the stem ' .. base .. '.') end if not (adjective or gender[1]) then gender[1] = 'M' gender.M = true end return NS, DP end local finals = { ['β'] = 'ψ', ['γ'] = 'ξ', ['κ'] = 'ξ', ['κτ'] = 'ξ', ['π'] = 'ψ', ['πτ'] = 'ψ', ['ϙ'] = 'ξ', ['φ'] = 'ψ', ['χ'] = 'ξ', --[[ ['τ'] = , ['δ'] = , ['θ'] = , --]] } local function new_gender(gender) return { gender, [gender] = true } end -- is_neuter: boolean -- accent_alternating: boolean local function third_nom(args, is_neuter, accent_alternating) -- strings local arg1, arg2, base = args[1], args[2], toNFC(args.stem) local ctable = args.ctable -- output local NS, DS, AS, DP = ctable.NS, ctable.DS, ctable.AS, ctable.DP -- boolean local adjective = args.like_adjective -- tables local gender, notes = args.gender, args.notes --[[ local notes = { labial = 'Nominative singular ' .. mention('-ψ') .. (('φβ'):find(last1) and ' is a neutralization of ' or ' is a respelling of ') .. mention(last1) .. ' + the nominative singular suffix ' .. mention('-ς') .. '.', velar_dental = 'Nominative singular ' .. mention('-ξ') .. ' is a neutralization of ' .. mention(last2) .. ' + the nominative singular suffix ' .. mention('-ς') .. '.', 'Nominative singular ' .. mention('-ξ') .. (umatch('χγ', last1) and ' is a neutralization of ' or ' is a respelling of ') .. mention(last1) .. ' + the nominative singular suffix ' .. mention('-ς') .. '.' } --]] local identifying_ending = umatch(base, '[κνπ]τ$') or usub(base, -1) local NS_ending = finals[identifying_ending] if NS_ending then NS = base:gsub(identifying_ending .. "$", NS_ending) DP = NS end if not (NS or DP) then local decl_type = args.decl_type local nom_base = usub(base, 1, -2) if identifying_ending == 'ντ' then -- May also add gender. NS, DP = handle_nt(base, decl_type, gender, is_neuter, adjective, arg1, arg2) elseif ('τδθ'):find(identifying_ending) then DP = nom_base .. 'σ' if not (adjective or gender[1]) then if base:match("τητ$") or umatch(base, "[δθ]$") then gender = new_gender('F') elseif umatch(base, "[ηω]τ$") then gender = new_gender('M') elseif umatch(toNFD(base), "α" .. (grc_utilities_data or get_grc_utilities_data()).length.mandatory .. "τ$") then gender = new_gender('N') end end local final_ot = base:match("οτ$") if final_ot and not is_neuter then NS = base:gsub('οτ$', 'ως') elseif is_neuter and not final_ot then NS = nom_base else NS = nom_base .. 'ς' end if arg1:find('ς$') then table.insert(notes, 'Nominative singular ' .. mention('-ς') .. ' arose by reduction of the original cluster ' .. mention(dental_lookup[identifying_ending]) .. '.') end elseif ('ϝϳλρν'):find(identifying_ending) then if usub(base, -1) ~= 'ν' then DP = base .. 'σ' else DP = nom_base .. 'σ' end if is_neuter then NS = base else local vowel = usub(base, -2, -2) if vowel == 'ε' then NS = usub(base, 1, -3) .. 'η' .. identifying_ending elseif vowel == 'ο' then NS = usub(base, 1, -3) .. 'ω' .. identifying_ending elseif vowel == 'ῑ' then --ῥίς etc. NS = nom_base .. 'ς' elseif (vowel == 'ᾰ' and gender[1] ~= 'N') then NS = usub(base, 1, -3) .. 'ᾱς' else NS = base end end if not gender[1] then if umatch(base, '[γδ]ον$') then gender[1] = 'F' elseif umatch(toNFD(base), "α" .. (grc_utilities_data or get_grc_utilities_data()).length.optional .. "ρ$") then gender[1] = 'N' else gender[1] = 'M' end end elseif identifying_ending == 'σ' then DP = base if is_neuter and not adjective then NS = nom_base .. 'ς' else NS = usub(base, 1, -3) .. 'ης' end elseif identifying_ending == 'ω' then -- m_paradigms.lp_prx.NS is nil. Is the condition correct? if NS == m_paradigms.lp_prx.NS then DS = nom_base .. 'ῳ/$ῐ̈' AS = '$/$ᾰ' else DS = '$ῐ̈́' AS = '$/$ᾰ́' end DP = nom_base .. 'ωσ' NS = nom_base .. 'ως' gender[1] = gender[1] or 'M' else error('Stem does not end in a consonant: ' .. base) end end -- This overrides any assignment done above. Better to improve the code -- above or prevent it from assigning NS. if not adjective then NS = arg1 end if DP then if accent_alternating then DP = DP .. 'ῐ́(ν)' else DP = DP .. 'ῐ(ν)' end end ctable.DS, ctable.AS = DS, AS ctable.NS, ctable.DP = NS, DP args.gender = gender end local function dial_forms_third(args) if not args.ctable.DP then require('Module:debug').track('grc-decl/no dative plural') mw.log("no DP: " .. args[1] .. ", " .. args[2]) end dial_form_multi(args, { { 'GD', '$οιῐ̈ν' }, { 'DP', (args.ctable['DP'] and (args.ctable['DP'] .. '/') or '') .. '$εσῐ(ν)/$εσσῐ(ν)' }, }, 'epi') dial_form_multi(args, { { 'AS', '$ᾰν', 'kyp' }, { 'GD', '$οιῠ̈ν', 'ark' }, { 'DP', '$εσσῐ(ν)', 'dor' }, { 'DP', '$εσσῐ', { 'les', 'the', 'boi' } }, { 'DP', '$οις', { 'lok', 'ele' } }, { 'AP', '$ες', 'ark' }, { 'AP', '$ες/$ερ', 'ele' }, { 'AP', '$ᾰ(ν)ς', { 'kre', 'arg' } }, }) end local function dial_forms_third_oxy(args) dial_form_multi(args, { { 'GD', '$οῖῐ̈ν' }, { 'DP', (args.ctable['DP'] and (args.ctable['DP'] .. '/') or '') .. '$εσῐ(ν)/$εσσῐ(ν)' }, }, 'epi') dial_form_multi(args, { { 'AS', '$ᾰν', 'kyp' }, { 'GD', '$οῖῠ̈ν', 'ark' }, { 'DP', '$εσσῐ(ν)', 'dor' }, { 'DP', '$εσσῐ', { 'les', 'the', 'boi' } }, { 'DP', '$οῖς', { 'lok', 'ele' } }, { 'AP', '$ες', 'ark' }, { 'AP', '$ες/$ερ', 'ele' }, { 'AP', '$ᾰ(ν)ς', { 'kre', 'arg' } }, }) end -- For instance, [[μείζων]]. local function third_comparative(args, neuter) local short_stem, count = args.stem:gsub('ον$', '') if count ~= 1 then error('Stem failure.') end if neuter then dial_form(args, 'NP', '$ᾰ/' .. short_stem .. 'ω', 'att') else dial_form_multi(args, { { 'AS', '$ᾰ/' .. short_stem .. 'ω'}, { 'NP', '$ες/' .. short_stem .. 'ους' }, { 'AP', '$ᾰς/' .. short_stem .. 'ους' }, }, 'att') end end -- These nouns are monosyllabic, but unlike most they do not accent the ending -- of the genitive–dative dual and genitive plural: παίδων, not *παιδῶν. local monosyllabic_exceptions = require("Module:table/listToSet"){"δᾴς", "δμώς", "ἦρ", "θώς", "κῆρ", "οὖς", "παῖς", "Τρώς", "φῶς"} -- Other exceptions: contracted forms like ἔαρος > ἦρος (not *ἠρός). -- The source for this is Smyth § 252. local function third(neuter) return function (args) local decl_type = args.decl_type if decl_type:find('ντ$') and syllables(args[1], 'eq', 1) then -- [[Special:WhatLinksHere/Wiktionary:Tracking/grc-decl/monosyllabic nt]] require('Module:debug').track('grc-decl/monosyllabic nt') end -- This tracks monosyllabic nouns or adjectives that have alternating accent -- position. Masculine and neuter participles (with stems in -ντ) and -- suffixes do not. local accent_alternating = not (args.suffix or args.stem:find('ντ$')) and syllables(args[1], 'eq', 1) args.accent_alternating = accent_alternating local accent_on_ultima = accent_alternating and '' or '_prx' local suffix = accent_switch(args.accent.term, accent_on_ultima, accent_on_ultima, '_prx', nil, args.suffix) args.ctable = deep_copy(m_paradigms[(neuter and 'N_' or '') .. 'lp' .. suffix]) if not (args.NS and args.DP) then third_nom(args, neuter, accent_alternating) end if args.comparative then third_comparative(args, neuter) end if not neuter then local stem = toNFC(args.stem) if umatch(stem, "ῐ̈?[δτ]$") or umatch(stem, "ῑ̈?θ$") then local i_stem = usub(stem, 1, -2) if args.accent.term ~= 'oxytone' then local n_stem = i_stem .. 'ν' dial_form(args, 'AS', n_stem, 'att') dial_form(args, 'AS', n_stem .. "/$ᾰ", { 'koi', 'ion', 'epi', 'lat' } ) end args.ctable['VS'] = args['VS'] or i_stem elseif usub(stem, -2) == 'ντ' and (not args.like_adjective or decl_type == '1&3-εσσ' or decl_type == '1&3-εσσ-con' or decl_type == '3rd-cons') then args.ctable['VS'] = args['VS'] or usub(stem, 1, -2) elseif args.accent.term ~= 'oxytone' and args.accent.term ~= 'perispomenon' and umatch(stem, '[ρν]$') then args.ctable['VS'] = args['VS'] or stem -- What's an example of this? elseif usub(stem, -1) == 'ε' then args.ctable['VS'] = args['VS'] or stem .. 'ς' end if args.accent.term == 'perispomenon' then args.ctable['NS'] = args[1] end end if accent_alternating then dial_forms_third_oxy(args) if monosyllabic_exceptions[toNFC(args[1])] then -- Remove accent marks: that is, make the form be accented on the -- stem. args.ctable.GD = m_accent.strip_tone(args.ctable.GD) args.ctable.GP = m_accent.strip_tone(args.ctable.GP) end else dial_forms_third(args) end end end export.inflections['3rd-cons'] = third(false) export.inflections['3rd-N-cons'] = third(true) local function dial_forms_es(args, neuter) dial_form_multi(args, { { 'GS', '$εος', 'nonIA' }, { 'GS', '$ῐος', 'buck9' }, { 'GS', '$εος/$ευς', { 'ion', 'epi' } }, { 'DS', '$εῐ̈/$ει', { 'ion', 'epi' } }, { 'ND', '$εε/$ει', { 'ion', 'epi' } }, { 'GD', '$έοιν', { 'nonIA', 'ion' } }, { 'GD', '$έοιῐ̈ν', 'epi' }, { 'GD', '$έοιῠ̈ν', 'ark' }, { 'GD', '$ῐ́οιν', 'buck9' }, { 'GP', '$εων', { 'nonIA', 'ion', 'epi' } }, { 'GP', '$ῐων', 'buck9' }, { 'DP', '$εσῐ(ν)/$εσσῐ(ν)/$έεσσῐ(ν)', 'epi' } }) if neuter then dial_form_multi(args, { { 'NP', '$εᾰ', { 'nonIA', 'ion', 'epi' } }, }) else dial_form_multi(args, { { 'AS', '$εᾰ', { 'nonIA', 'ion', 'epi' } }, { 'AS', '$ῐᾰ', 'buck9' }, { 'NP', '$εες/$εις', { 'nonIA', 'ion', 'epi' } }, { 'AP', '$εᾰς', { 'nonIA', 'ion', 'epi' } }, { 'AP', '$ῐᾰς', 'buck9' }, }) end end local function dial_forms_es_oxy(args, neuter) dial_form_multi(args, { { 'GS', '$έος', 'nonIA' }, { 'GS', '$ῐ́ος', 'buck9' }, { 'GS', '$έος/$εῦς', { 'ion', 'epi' } }, { 'DS', '$έῐ̈/$εῖ', { 'ion', 'epi' } }, { 'ND', '$έε/$εῖ', { 'ion', 'epi' } }, { 'GD', '$έοιν', { 'nonIA', 'ion' } }, { 'GD', '$εοῖῐ̈ν', 'epi' }, { 'GD', '$εοῖῠ̈ν', 'ark' }, { 'GD', '$ῐ́οιν', 'buck9' }, { 'GP', '$έων', { 'nonIA', 'ion', 'epi' } }, { 'GP', '$ῐ́ων', 'buck9' }, { 'DP', '$έσῐ(ν)/$έσσῐ(ν)/$έεσσῐ(ν)', 'epi' } }) if neuter then dial_form_multi(args, { { 'NP', '$έᾰ', { 'nonIA', 'ion', 'epi' } }, }) else dial_form_multi(args, { { 'AS', '$έᾰ', { 'nonIA', 'ion', 'epi' } }, { 'AS', '$ῐ́ᾰ', 'buck9' }, { 'NP', '$έες/$εῖς', { 'nonIA', 'ion', 'epi' } }, { 'AP', '$έᾰς', { 'nonIA', 'ion', 'epi' } }, { 'AP', '$ῐ́ᾰς', 'buck9' }, }) end end -- Adjectives with these endings have persistent accent (Smyth 292c): -- εὐώδης, εὐῶδες. local persistent_es = { ['ώδης'] = true, ['ώλης'] = true, ['ώρης'] = true, ['ήρης'] = true, } -- How to deal with τριήρων, not *τριηρῶν (Smyth 264)? local function es_adj(gender_code, open) return function(args) uncontracted_error(args.contracted or not open, args.dial, '-ης') local suffix = accent_switch(args.accent.term, '', nil, '_prx', 'Perispomenon third-declension forms in -ης not supported.', args.suffix) args.ctable = deep_copy(m_paradigms[(gender_code or '') .. 'es_adj' .. suffix .. (open and '_open' or '')]) -- Most adjectives of this type have recessive accent. Set accent to -- antepenult. if not args.suffix and not persistent_es[toNFC(usub(args[1], -4))] then args.accent.position = -3 end if args.accent.term == 'oxytone' then dial_forms_es_oxy(args, gender_code == 'N_') else dial_forms_es(args, gender_code == 'N_') end if gender_code ~= 'N_' then dial_form(args, 'NS', '$εῖς', 'boi', 'the') end end end export.inflections['3rd-εσ'] = es_adj() export.inflections['3rd-N-εσ'] = es_adj('N_') export.inflections['3rd-εσ-open'] = es_adj(nil, true) export.inflections['3rd-N-εσ-open'] = es_adj('N_', true) local function _os(gender_code, open) return function(args) uncontracted_error(args.contracted or not open, args.dial, '-ως') local suffix = accent_switch(args.accent.term, '', nil, '_prx', nil, args.suffix) args.ctable = deep_copy(m_paradigms[(gender_code or '') .. 'os' .. suffix .. (open and '_open' or '')]) end end export.inflections['3rd-οσ'] = _os() export.inflections['3rd-N-οσ'] = _os('N_') export.inflections['3rd-οσ-open'] = _os(nil, true) export.inflections['3rd-N-οσ-open'] = _os('N_', true) local function neuter_os(open) return function(args) nonrecessive_error(args.accent.term, 'Third-declension neuter nouns in -ος must be accented recessively') uncontracted_error(args.contracted or not open, args.dial, '-ος') args.ctable = deep_copy(m_paradigms['N_es_prx' .. (open and '_open' or '')]) dial_forms_es(args, true) end end export.inflections['3rd-N-ος'] = neuter_os() export.inflections['3rd-N-ος-open'] = neuter_os(true) local function neuter_as(open) return function(args) nonrecessive_error(args.accent.term, 'Third-declension neuter nouns in -ας must be accented recessively') uncontracted_error(args.contracted or not open, args.dial, '-ᾰς') args.ctable = deep_copy(m_paradigms['N_as_prx' .. (open and '_open' or '')]) end end export.inflections['3rd-N-ᾰσ'] = neuter_as() export.inflections['3rd-N-ᾰσ-open'] = neuter_as(true) local function kles(open) return function(args) local dialect = args.dial uncontracted_error(args.contracted or not open, dialect, '-κλης') if dialect == 'ion' or dialect == 'epi' then open = true end args.ctable = deep_copy(m_paradigms['kles' .. (open and '_open' or '')]) args.number = { 'S', S = true } args.recessive_VS = true if open then dial_form_multi(args, { { 'GS', '$κλῆος/$κλέος' }, { 'DS', '$κλῆῐ̈/$κλέῐ̈' }, { 'AS', '$κλῆᾰ/$κλέᾱ' }, }, {'ion', 'epi' }) else dial_form_multi(args, { { 'GS', '$κλέος', 'nonIA' }, { 'GS', '$κλεῖος', 'boi' }, }) end end end export.inflections['3rd-κλῆς'] = kles() export.inflections['3rd-κλῆς-open'] = kles(true) local function dial_forms_weak_iu(args, neuter) dial_form_multi(args, { { 'GS', '$έος', { 'ion', 'epi' } }, { 'DS', '$εῖ', { 'att', 'koi' } }, { 'DS', '$έῐ̈/$εῖ', { 'ion', 'epi', 'lat' } }, { 'ND', '$εῖ', 'att' }, { 'ND', '$έε/$εῖ', { 'ion', 'epi' } }, { 'GD', '$έοιῐ̈ν', 'epi' }, { 'GD', '$έοιῠ̈ν', 'ark' }, { 'DP', '$έσῐ(ν)/$έσσῐ(ν)/$έεσσῐ(ν)', 'epi' }, { 'DP', '$έεσσῐ(ν)', 'dor' }} ) if not neuter then dial_form_multi(args, { { 'NP', '$εῖς', 'att' }, { 'NP', '$εῖς/$έες', 'koi' }, { 'NP', '$έες/$εῖς', { 'ion', 'epi', 'lat' } }, { 'AP', '$εῖς', { 'att', 'koi' } }, }) end end local function dial_forms_weak_iu_prx(args, neuter) dial_form_multi(args, { { 'GS', '$εος', { 'ion', 'epi' } }, { 'DS', '$ει', { 'att', 'koi' } }, { 'DS', '$εῐ̈/$ει', { 'ion', 'epi', 'lat' } }, { 'ND', '$ει', 'att' }, { 'ND', '$εε/$ει', { 'ion', 'epi' } }, { 'GD', '$έοιῐ̈ν', 'epi' }, { 'GD', '$έοιῠ̈ν', 'ark' }, { 'DP', '$εσῐ(ν)/$εσσῐ(ν)/$έεσσῐ(ν)', 'epi' }, { 'DP', '$έεσσῐ(ν)', 'dor' } }) if neuter then dial_form_multi(args, { { 'NP', '$η/$εᾰ', 'att' }, }) else dial_form_multi(args, { { 'NP', '$εις', 'att' }, { 'NP', '$εις/$εες', 'koi' }, { 'NP', '$εες/$εις', { 'ion', 'epi', 'lat' } }, { 'AP', '$εις', { 'att', 'koi' } }, }) end end local function weak_iu(vowel, gender, adj_decl) return function(args) local suffix = accent_switch(args.accent.term, '', nil, '_prx', nil, args.suffix) args.ctable = deep_copy(m_paradigms[(gender or '') .. 'weak_' .. vowel .. (adj_decl and '_adj' or '') .. suffix]) if not args.like_adjective then args.synaeresis = true end local neuter = gender == 'N_' if args.accent.term == 'oxytone' then dial_forms_weak_iu(args, neuter) else dial_forms_weak_iu_prx(args, neuter) end end end export.inflections['3rd-weak-ι'] = weak_iu('i') export.inflections['3rd-N-weak-ι'] = weak_iu('i', 'N_') export.inflections['3rd-weak-ι-adj'] = weak_iu('i', nil, true) export.inflections['3rd-N-weak-ι-adj'] = weak_iu('i', 'N_', true) export.inflections['3rd-weak-υ'] = weak_iu('u') export.inflections['3rd-N-weak-υ'] = weak_iu('u', 'N_') export.inflections['3rd-weak-υ-adj'] = weak_iu('u', nil, true) export.inflections['3rd-N-weak-υ-adj'] = weak_iu('u', 'N_', true) export.inflections['3rd-pure-ι'] = function(args) nonrecessive_error("Nouns in -ῐς cannot be accented on the ultima") args.ctable = deep_copy(m_paradigms.pure_i_prx) dial_form_multi(args, { { 'GS', '$ῐος/$ηος' }, { 'DS', '$ῐῐ̈/$ῑ/$ηῐ̈/$ει' }, { 'GD', '$ῐ́οιῐ̈ν' }, { 'NP', '$ῐες/$ηες' }, { 'DP', '$ῐσῐ(ν)/$ῐσσῐ(ν)/$ῐ́εσσῐ(ν)' }, { 'AP', '$ῐᾰς/$ηᾰς/$ῑς' }, }, 'epi') dial_form_multi(args, { { 'GD', '$ῐ́οιῠ̈ν', 'ark' }, { 'DP', '$ῐ́εσσῐ(ν)', 'dor' }, }) end export.inflections['3rd-N-pure-ι-prx'] = function(args) args.ctable = deep_copy(m_paradigms.N_pure_i_prx) end export.inflections['3rd-N-pure-ι-pax'] = export.inflections['3rd-N-pure-ι-prx'] local function dial_forms_u_oxy_or_con(args, neuter) dial_form_multi(args, { { 'DS', '$ῠ́ῐ̈/$υῖ', { 'att', 'koi', 'ion', 'epi', 'lat' } }, { 'ND', '$ῠ́ε/$ῦ', 'att' }, { 'GD', '$ῠ́οιῐ̈ν', 'epi' }, { 'GD', '$ῠ́οιῠ̈ν', 'ark' }, { 'DP', '$ῠ́σῐ(ν)/$ῠ́σσῐ(ν)/$ῠ́εσσῐ(ν)', 'epi' }, { 'DP', '$ῠ́εσσῐ(ν)', 'dor' }, }) if not neuter then dial_form_multi(args, { { 'NP', '$ῠ́ες/$ῦς', 'att' }, { 'AP', '$ῦς/$ῠ́ᾰς', { 'att', 'koi' } }, }) end end local function dial_forms_u_prx(args, neuter) dial_form_multi(args, { { 'DS', '$ῠῐ̈/$υι', { 'att', 'koi', 'ion', 'epi', 'lat' } }, { 'ND', '$ῠε/$ῡ', 'att' }, { 'GD', '$ῠ́οιῐ̈ν', 'epi' }, { 'GD', '$ῠ́οιῠ̈ν', 'ark' }, { 'DP', '$ῠσῐ(ν)/$ῠσσῐ(ν)/$ῠ́εσσῐ(ν)', 'epi' }, { 'DP', '$ῠ́εσσῐ(ν)', 'dor' }, }) if not neuter then dial_form_multi(args, { { 'NP', '$ῠες/$ῡς', 'att' }, { 'AP', '$ῡς/$ῠᾰς', 'att', 'koi' }, { 'AP', '$ῠᾰς/$ῡς', { 'ion', 'epi', 'lat' } }, }) end end local function dial_forms_u_mono(args) dial_form_multi(args, { { 'DS', '$ῠῐ̈́/$υί', { 'att', 'koi', 'ion', 'epi', 'lat' } }, { 'GD', '$ῠοῖῐ̈ν', 'epi' }, { 'GD', '$ῠοῖῠ̈ν', 'ark' }, { 'DP', '$ῠσῐ́(ν)/$ῠσσῐ́(ν)/$ῠ́εσσῐ(ν)', 'epi' }, }) end local function pure_u_short(gender_code) return function(args) local suffix = accent_switch(args.accent.term, '', nil, '_prx', nil, args.suffix) args.ctable = deep_copy(m_paradigms[(gender_code or '') .. 'pure_u' .. suffix]) local neuter = gender_code == 'N_' if args.accent.term == 'oxytone' then dial_forms_u_oxy_or_con(args, neuter) elseif args.accent.term ~= 'perispomenon' then dial_forms_u_prx(args, neuter) end end end export.inflections['3rd-pure-υ'] = pure_u_short() export.inflections['3rd-N-pure-υ'] = pure_u_short('N_') -- TODO: add optional long ῡ in Epic oblique forms. local function pure_u_long(gender_code) return function(args) local accent = args.accent.term local suffix = accent_switch(accent, '', '_con', '_prx', nil, args.suffix) local mono = syllables(args[1], 'eq', 1) args.ctable = deep_copy(m_paradigms[(gender_code or '') .. 'pure_u_long' .. suffix .. (mono and '_mono' or '')]) local neuter = gender_code == 'N_' if accent == 'oxytone' or accent == 'perispomenon' then dial_forms_u_oxy_or_con(args, neuter) else dial_forms_u_prx(args, neuter) end if mono then dial_forms_u_mono(args) end end end export.inflections['3rd-pure-υ-long'] = pure_u_long() export.inflections['3rd-N-pure-υ-long'] = pure_u_long('N_') local function third_eus(contracted) return function(args) -- Maybe only Attic actually? local dialect = args.dial if contracted and not (dialect == 'att' or dialect == 'koi' or dialect == 'byz') then error('Only Attic, Koine, or Byzantine Greek have contracted declined forms for nouns in -ευς.') end if dialect == 'kyp' or dialect == 'boi' then args.ctable = deep_copy(m_paradigms.eus_hwos) elseif dialect == 'les' or dialect == 'epi' then args.ctable = deep_copy(m_paradigms.eus_hos) dial_form_multi(args, { { 'GS', '$ῆος/$έος' }, { 'DS', '$ῆῐ̈/$έῐ̈/$εῖ' }, { 'AS', '$ῆᾰ/$έᾰ' }, { 'ND', '$ῆε/$ῆ/$έε/$εῖ' }, { 'GD', '$ήοιῐ̈ν/$έοιῐ̈ν' }, { 'NP', '$ῆες/$ῆς/$έες/$εῖς' }, { 'GP', '$ήων/$έων' }, { 'DP', '$εῦσῐ(ν)/$ήεσσῐ(ν)' }, { 'AP', '$ῆᾰς/$έᾰς' }, }, 'epi') elseif dialect == 'the' or dialect == 'ele' then args.ctable = deep_copy(m_paradigms.eus_eios) else if contracted then args.ctable = deep_copy(m_paradigms.eus_con) table.insert(args.titleapp, '[[Appendix:Ancient Greek contraction|contracted]]') else args.ctable = deep_copy(m_paradigms.eus) end dial_form_multi(args, { { 'NS', '$ής', 'ara' }, { 'GS', '$έος', { 'nonIA', 'ion' } }, { 'DS', '$εῖ', 'att' }, { 'DS', '$έῐ̈/$εῖ', 'ion' }, { 'AS', '$έᾰ/$ῆ', 'ion' }, { 'AS', '$έᾰ', 'nonIA' }, { 'AS', '$ήν', 'ara' }, { 'AS', '$ῆ', { 'doric', 'del' } }, { 'AS', '$έᾰ', { 'lok', 'kre' } }, { 'GD', '$έοιῠ̈ν', 'ark' }, { 'NP', '$έες/$εῖς', 'ion' }, { 'NP', '$εῖς', 'nonIA' }, { 'NP', '$ῆς', { 'koa', 'lak' } }, { 'NP', '$ῆς', 'ara' }, { 'NP', '$έες', 'kre' }, { 'NP', '$εῖς', 'late' }, { 'DP', '$έεσσῐ(ν)', 'dor' }, -- this is somewhat conjectured { 'AP', '$έᾰς', { 'nonIA', 'ion' } }, }) --[[ Contraction only for nouns with vowel before -ευς. ]] if umatch(args.stem, '[αεηιουω]' .. (grc_utilities_data or get_grc_utilities_data()).length.optional .. '$') then dial_form_multi(args, { { 'GS', '$έως/$ῶς' }, { 'AS', '$έᾱ/$ᾶ' }, { 'GP', '$έων/$ῶν' }, { 'AP', '$έᾱς/$ᾶς' }, }, 'att') table.insert(args.notes, 'The first form is uncontracted, the second [[Appendix:Ancient Greek contraction|contracted]].') elseif contracted then error('Forms with a stem ending in ' .. require('Module:grc-utilities').tag(usub(args.stem, -1)) .. ' do not have contracted forms.') end end end end export.inflections['3rd-ευς'] = third_eus(false) export.inflections['3rd-ευς-con'] = third_eus(true) export.inflections['3rd-οι'] = function(args) args.ctable = deep_copy(m_paradigms.oi) dial_form_multi(args, { { 'GS', '$ῶς', 'sever' }, { 'AS', '$οῦν', 'ion' }, }) end local function get_param_code(number) if number.F then return 'full' end local param_code = (number.S and 'S' or '') .. (number.D and 'D' or '') .. (number.P and 'P' or '') if param_code == '' then error('Could not decide which table of forms to use.') end return param_code end -- irregular masculine or feminine nouns export.inflections['irreg'] = function(args) local params = m_decl_static_data.irregular.noun.masculine_feminine if args.gender.N then return export.inflections['irregN'](args) end local number = args.number local param_code = get_param_code(number) local forms = params[param_code] args.declheader = 'irreg' local ctable = {} local found_forms = false for i = 2, args.maxindex do local code = forms[i] local arg1 = ine(args[i]) if code then local arg2 = ine(args[code]) if arg1 and arg2 then error('Two forms specified for ' .. code .. ': ' .. arg1 .. ' and ' .. arg2 '.') end local number_code = code:sub(2, 2) if arg1 or arg2 then if number[number_code] then found_forms = true else error('The number ' .. number_code .. ' is not specified in the form parameter.') end end ctable[code] = arg1 or arg2 elseif arg1 then local abbr = { S = 'singular', D = 'dual', P = 'plural', } local numbers = mw.text.listToText(require('Module:fun').map(function(code) return abbr[code] or code end, number )) local singular = not number[2] error('Parameter ' .. i .. ' has been given, but only ' .. #forms .. ' parameters are needed because the number' .. (singular and '' or 's') .. ' specified in the form parameter ' .. (singular and 'is ' or 'are ') .. numbers .. '.') end end if not found_forms then error('No displayable forms found.') end args.ctable = ctable end -- irregular neuter nouns export.inflections['irregN'] = function(args) --neuter irregular nouns local params = m_decl_static_data.irregular.noun.neuter local number = args.number local param_code = get_param_code(number) local forms = params[param_code] local ctable = {} for i = 2, args.maxindex do local code = forms[i] local arg1 = args[i] if code then local arg2 = args[code] if arg1 and arg2 then error('Two forms given for form ' .. code .. ': ' .. arg1 .. ' in parameter ' .. i .. ' and ' .. arg2 .. ' in parameter ' .. code .. '. Choose one or put both in the same parameter separated by slashes.') end ctable[code] = arg1 or arg2 elseif arg1 then error('Parameter ' .. i .. ', ' .. arg1 .. ', does not have a case and number assigned to it.') end end for form, source in pairs(forms.redirects) do ctable[form] = args[form] or ctable[source] end args.ctable = ctable end -- irregular adjectives export.inflections['irreg-adj'] = function(args) local params = m_decl_static_data.irregular.adjective local number = args.number local param_code = get_param_code(number) local forms = params[param_code] local atable = {} for i = 2, args.maxindex do local code = forms[i] local arg1 = ine(args[i]) if code then local arg2 = ine(args[code]) if arg1 and arg2 then error('Two forms given for form ' .. code .. ': ' .. arg1 .. ' in parameter ' .. i .. ' and ' .. arg2 .. ' in parameter ' .. code .. '. Choose one or put both in the same parameter separated by slashes.') end atable[code] = arg1 or arg2 else if arg1 then error('No gender, case, and number assigned to parameter ' .. i .. ': ' .. tostring(arg1) .. '. Only ' .. #forms .. ' parameters are needed.') end end end for form, source in pairs(forms.redirects) do atable[form] = args[form] or atable[source] end if number.D then for target_case, source_case in pairs { A = 'N', V = 'N', D = 'G' } do for _, gender in ipairs { 'M', 'F', 'N' } do local target = gender .. target_case .. 'D' atable[target] = args[target] or atable[target] or atable[gender .. source_case .. 'D'] target = gender .. 'VP' atable[target] = args[target] or atable[target] or atable[gender .. 'NP'] end end end args.atable = atable end export.inflections['indecl'] = function(args) args.ctable = deep_copy(m_paradigms.indecl) args.stem = { args[2] } end return export 3uueq2116loiuyaybyb7d5531nlmkxf Mô đun:grc-decl/decl/staticdata/paradigms 828 291435 2571735 2127419 2026-10-18T16:33:26Z Hiyuune 50834 2571735 Scribunto text/plain local export = {} local deep_copy = require("Module:table/deepCopy") export.headers = { ['1st'] = '[[Phụ lục:Biến cách tiếng Hy Lạp cổ loại 1|Biến cách loại 2]]', ['2nd'] = '[[Phụ lục:Biến cách tiếng Hy Lạp cổ loại 2|Biến cách loại 2]]', ['3rd'] = '[[Phụ lục:Biến cách tiếng Hy Lạp cổ loại 3|Biến cách loại 3]]', ['Attic'] = '[[Phụ lục:Biến cách tiếng Hy Lạp Attica|Biến cách Attica loại 2]]', ['irreg'] = 'Biến cách bất quy tắc', ['decl'] = 'Biến cách', } export.art_att = {} export.art_att.M = { decl = 'irreg', NS = 'ὁ', GS = 'τοῦ', DS = 'τῷ', AS = 'τὸν', VS = 'ὦ', ND = 'τὼ', GD = 'τοῖν', NP = 'οἱ', GP = 'τῶν', DP = 'τοῖς', AP = 'τοὺς', } export.art_att.F = { decl = 'irreg', NS = 'ἡ', GS = 'τῆς', DS = 'τῇ', AS = 'τὴν', VS = 'ὦ', ND = 'τὼ', GD = 'τοῖν', NP = 'αἱ', GP = 'τῶν', DP = 'ταῖς', AP = 'τᾱ̀ς', } export.art_att.N = { decl = 'irreg', NS = 'τὸ', GS = 'τοῦ', DS = 'τῷ', AS = 'τὸ', VS = 'ὦ', ND = 'τὼ', GD = 'τοῖν', NP = 'τᾰ̀', GP = 'τῶν', DP = 'τοῖς', AP = 'τᾰ̀', } for gender, articles in pairs(export.art_att) do articles.AD = articles.ND articles.DD = articles.GD end export.alp_pax = { decl = '1st', g = 'F', NS = '$ᾱ', GS = '$ᾱς', DS = '$ᾳ', AS = '$ᾱν', ND = '$ᾱ', GD = '$αιν', NP = '$αι', GP = '$ῶν', DP = '$αις', AP = '$ᾱς', } export.eta_pax = { decl = '1st', g = 'F', NS = '$η', GS = '$ης', DS = '$ῃ', AS = '$ην', ND = '$ᾱ', GD = '$αιν', NP = '$αι', GP = '$ῶν', DP = '$αις', AP = '$ᾱς', } export.alp = { decl = '1st', g = 'F', NS = '$ᾱ́', GS = '$ᾶς', DS = '$ᾷ', AS = '$ᾱ́ν', ND = '$ᾱ́', GD = '$αῖν', NP = '$αί', GP = '$ῶν', DP = '$αῖς', AP = '$ᾱ́ς', } export.eta = { decl = '1st', g = 'F', NS = '$ή', GS = '$ῆς', DS = '$ῇ', AS = '$ήν', ND = '$ᾱ́', GD = '$αῖν', NP = '$αί', GP = '$ῶν', DP = '$αῖς', AP = '$ᾱ́ς', } export.als_prx = { decl = '1st', g = 'F', NS = '$ᾰ', GS = '$ᾱς', DS = '$ᾳ', AS = '$ᾰν', ND = '$ᾱ', GD = '$αιν', NP = '$αι', GP = '$ῶν', DP = '$αις', AP = '$ᾱς', } export.ets_prx = { decl = '1st', g = 'F', NS = '$ᾰ', GS = '$ης', DS = '$ῃ', AS = '$ᾰν', ND = '$ᾱ', GD = '$αιν', NP = '$αι', GP = '$ῶν', DP = '$αις', AP = '$ᾱς', } export.alp_con = { decl = '1st', g = 'F', NS = '$ᾶ', GS = '$ᾶς', DS = '$ᾷ', AS = '$ᾶν', ND = '$ᾶ', GD = '$αῖν', NP = '$αῖ', GP = '$ῶν', DP = '$αῖς', AP = '$ᾶς', } export.eta_con = { decl = '1st', g = 'F', NS = '$ῆ', GS = '$ῆς', DS = '$ῇ', AS = '$ῆν', ND = '$ᾶ', GD = '$αῖν', NP = '$αῖ', GP = '$ῶν', DP = '$αῖς', AP = '$ᾶς', } export.M_alp_pax = { decl = '1st', g = 'M', NS = '$ᾱς', GS = '$ου', DS = '$ᾳ', AS = '$ᾱν', VS = '$ᾱ', ND = '$ᾱ', GD = '$αιν', NP = '$αι', GP = '$ῶν', DP = '$αις', AP = '$ᾱς', } export.M_eta_pax = { decl = '1st', g = 'M', NS = '$ης', GS = '$ου', DS = '$ῃ', AS = '$ην', VS = '$η', ND = '$ᾱ', GD = '$αιν', NP = '$αι', GP = '$ῶν', DP = '$αις', AP = '$ᾱς', } export.M_alp = { decl = '1st', g = 'M', NS = '$ᾱ́ς', GS = '$οῦ', DS = '$ᾷ', AS = '$ᾱ́ν', VS = '$ᾱ́', ND = '$ᾱ́', GD = '$αῖν', NP = '$αί', GP = '$ῶν', DP = '$αῖς', AP = '$ᾱ́ς', } export.M_eta = { decl = '1st', g = 'M', NS = '$ής', GS = '$οῦ', DS = '$ῇ', AS = '$ήν', VS = '$ή', ND = '$ᾱ́', GD = '$αῖν', NP = '$αί', GP = '$ῶν', DP = '$αῖς', AP = '$ᾱ́ς', } export.M_alp_con = { decl = '1st', g = 'M', NS = '$ᾶς', GS = '$ᾶ', DS = '$ᾷ', AS = '$ᾶν', VS = '$ᾶ', ND = '$ᾶ', GD = '$αῖν', NP = '$αῖ', GP = '$ῶν', DP = '$αῖς', AP = '$ᾶς', } export.M_eta_con = { decl = '1st', g = 'M', NS = '$ῆς', GS = '$οῦ', DS = '$ῇ', AS = '$ῆν', VS = '$ῆ', ND = '$ᾶ', GD = '$αῖν', NP = '$αῖ', GP = '$ῶν', DP = '$αῖς', AP = '$ᾶς', } export.second = { decl = '2nd', g = 'M', NS = '$ός', GS = '$οῦ', DS = '$ῷ', AS = '$όν', VS = '$έ', ND = '$ώ', GD = '$οῖν', NP = '$οί', GP = '$ῶν', DP = '$οῖς', AP = '$ούς', } export.second_N = { decl = '2nd', g = 'N', NS = '$όν', GS = '$οῦ', DS = '$ῷ', ND = '$ώ', GD = '$οῖν', NP = '$ᾰ́', GP = '$ῶν', DP = '$οῖς', } export.second_prx = { decl = '2nd', g = 'M', NS = '$ος', GS = '$ου', DS = '$ῳ', AS = '$ον', VS = '$ε', ND = '$ω', GD = '$οιν', NP = '$οι', GP = '$ων', DP = '$οις', AP = '$ους', } export.second_N_prx = { decl = '2nd', g = 'N', NS = '$ον', GS = '$ου', DS = '$ῳ', ND = '$ω', GD = '$οιν', NP = '$ᾰ', GP = '$ων', DP = '$οις', } export.second_con = { decl = '2nd', g = 'M', NS = '$οῦς', GS = '$οῦ', DS = '$ῷ', AS = '$οῦν', VS = '$οῦ', -- Grammars traditionally give -ώ for the ND, but I can find 3 attestations of -ῶ -- (διπλῶ twice at Eur.Hel.1664 & Eur.Phoen.1362, and χαλκῶ at Luc.Iupp.trag.12), -- whereas -ώ is only attested once (διπλὼ at Eur.Phoen.1362 in certain editions). ND = '$ῶ/$ώ', GD = '$οῖν', NP = '$οῖ', GP = '$ῶν', DP = '$οῖς', AP = '$οῦς', } export.second_N_con = { decl = '2nd', g = 'N', NS = '$οῦν', GS = '$οῦ', DS = '$ῷ', -- See comment at second_con for the ND. ND = '$ῶ/$ώ', GD = '$οῖν', NP = '$ᾶ', GP = '$ῶν', DP = '$οῖς', } export.second_con_pax = { decl = '2nd', g = 'M', NS = '$ους', GS = '$ου', DS = '$ῳ', AS = '$ουν', VS = '$ου', ND = '$ω', GD = '$οιν', NP = '$οι', GP = '$ων', DP = '$οις', AP = '$ους', } export.second_N_con_pax = { decl = '2nd', g = 'N', NS = '$ουν', GS = '$ου', DS = '$ῳ', ND = '$ω', GD = '$οιν', NP = '$ᾱ', GP = '$ων', DP = '$οις', } export.second_att = { decl = 'Attic', g = 'M', NS = '$ώς', GS = '$ώ', DS = '$ῴ', AS = '$ώ(ν)', ND = '$ώ', GD = '$ῴν', NP = '$ῴ', GP = '$ών', DP = '$ῴς', AP = '$ώς', } export.second_att_prx = { decl = 'Attic', g = 'M', NS = '$ως', GS = '$ω', DS = '$ῳ', AS = '$ω(ν)', ND = '$ω', GD = '$ῳν', NP = '$ῳ', GP = '$ων', DP = '$ῳς', AP = '$ως', } export.second_N_att_prx = { decl = 'Attic', g = 'M', NS = '$ων', GS = '$ω', DS = '$ῳ', ND = '$ω', GD = '$ῳν', NP = '$ᾰ', GP = '$ων', DP = '$ῳς', } export.second_att_con = { decl = 'Attic', g = 'M', NS = '$ῶς', GS = '$ῶ', DS = '$ῷ', AS = '$ῶ(ν)', ND = '$ῶ', GD = '$ῷν', NP = '$ῷ', GP = '$ῶν', DP = '$ῷς', AP = '$ῶς', } export.lp = { decl = '3rd', GS = '$ός', DS = '$ῐ́', AS = '$ᾰ', ND = '$ε', GD = '$οῖν', NP = '$ες', GP = '$ῶν', AP = '$ᾰς', } export.lp_prx = { decl = '3rd', GS = '$ος', DS = '$ῐ', AS = '$ᾰ', ND = '$ε', GD = '$οιν', NP = '$ες', GP = '$ων', AP = '$ᾰς', } export.es_adj = { decl = '3rd', NS = '$ής', GS = '$οῦς', DS = '$εῖ', AS = '$ῆ', VS = '$ές', ND = '$εῖ', GD = '$οῖν', NP = '$εῖς', GP = '$ῶν', DP = '$έσῐ(ν)', AP = '$εῖς', adjective = true, } export.os = { decl = '3rd', NS = '$ώς', GS = '$οῦς', DS = '$οῖ', AS = '$ῶ', VS = '$ός', ND = '$οῦ', GD = '$οῖν', NP = '$οῦς', GP = '$ῶν', DP = '$όσῐ(ν)', AP = '$ῶς', } export.es_adj_prx = { decl = '3rd', NS = '$ης', GS = '$ους', DS = '$ει', AS = '$η', VS = '$ες', ND = '$ει', GD = '$οιν', NP = '$εις', GP = '$ων', DP = '$εσῐ(ν)', AP = '$εις', adjective = true, } export.os_prx = { decl = '3rd', NS = '$ως', GS = '$ους', DS = '$οι', AS = '$ω', VS = '$ος', ND = '$ου', GD = '$οιν', NP = '$ους', GP = '$ων', DP = '$οσῐ(ν)', AP = '$ως', } export.es_adj_open = { decl = '3rd', NS = '$ής', GS = '$έος', DS = '$έῐ̈', AS = '$έᾰ', VS = '$ές', ND = '$έε', GD = '$έοιν', NP = '$έες', GP = '$έων', DP = '$έσῐ(ν)', AP = '$έᾰς', adjective = true, } export.os_open = { decl = '3rd', NS = '$ώς', GS = '$όος', DS = '$όῐ̈', AS = '$όᾰ', VS = '$ός', ND = '$όε', GD = '$όοιν', NP = '$όες', GP = '$όων', DP = '$όσῐ(ν)', AP = '$όᾰς', } export.es_adj_prx_open = { decl = '3rd', NS = '$ης', GS = '$εος', DS = '$εῐ̈', AS = '$εᾰ', VS = '$ες', ND = '$εε', GD = '$εοιν', NP = '$εες', GP = '$εων', DP = '$εσῐ(ν)', AP = '$εᾰς', adjective = true, } export.os_prx_open = { decl = '3rd', NS = '$ως', GS = '$οος', DS = '$οῐ̈', AS = '$οᾰ', VS = '$ος', ND = '$οε', GD = '$οοιν', NP = '$οες', GP = '$οων', DP = '$οσῐ(ν)', AP = '$οᾰς', } export.N_lp = { decl = '3rd', g = 'N', GS = '$ός', DS = '$ῐ́', ND = '$ε', GD = '$οῖν', NP = '$ᾰ', GP = '$ῶν', } export.N_lp_prx = { decl = '3rd', g = 'N', GS = '$ος', DS = '$ῐ', ND = '$ε', GD = '$οιν', NP = '$ᾰ', GP = '$ων', } export.N_es_adj = { decl = '3rd', g = 'N', NS = '$ές', GS = '$οῦς', DS = '$εῖ', ND = '$εῖ', GD = '$οῖν', NP = '$ῆ', GP = '$ῶν', DP = '$έσῐ(ν)', adjective = true, } export.N_es_adj_prx = { decl = '3rd', g = 'N', NS = '$ες', GS = '$ους', DS = '$ει', ND = '$ει', GD = '$οιν', NP = '$η', GP = '$ων', DP = '$εσῐ(ν)', adjective = true, } export.N_es_prx = { decl = '3rd', g = 'N', NS = '$ος', GS = '$ους', DS = '$ει', ND = '$ει', GD = '$οῖν', NP = '$η', GP = '$ῶν', DP = '$εσῐ(ν)', } export.N_as_prx = { decl = '3rd', g = 'N', NS = '$ᾰς', GS = '$ως', DS = '$αι/$ᾳ', ND = '$ᾱ', GD = '$ῷν', NP = '$ᾱ', GP = '$ῶν', DP = '$ᾰσῐ(ν)', } export.N_os_prx = { decl = '3rd', g = 'N', NS = '$ος', GS = '$ους', DS = '$οι', ND = '$ου', GD = '$οῖν', NP = '$ω', GP = '$ῶν', DP = '$οσῐ(ν)', } export.N_es_adj_open = { decl = '3rd', g = 'N', NS = '$ές', GS = '$έος', DS = '$έῐ̈', ND = '$έε', GD = '$έοιν', NP = '$έᾰ', GP = '$έων', DP = '$έσῐ(ν)', adjective = true, } export.N_es_adj_prx_open = { decl = '3rd', g = 'N', NS = '$ες', GS = '$εος', DS = '$εῐ̈', ND = '$εε', GD = '$εοιν', NP = '$εᾰ', GP = '$εων', DP = '$εσῐ(ν)', adjective = true, } export.N_es_prx_open = { decl = '3rd', g = 'N', NS = '$ος', GS = '$εος', DS = '$εῐ̈', ND = '$εε', GD = '$έοιν', NP = '$εᾰ', GP = '$έων', DP = '$εσῐ(ν)', } export.N_as_prx_open = { decl = '3rd', g = 'N', NS = '$ᾰς', GS = '$ᾰος', DS = '$ᾰῐ̈', ND = '$ᾰε', GD = '$ᾰ́οιν', NP = '$ᾰᾰ', GP = '$ᾰ́ων', DP = '$ᾰσῐ(ν)', } export.N_os_prx_open = { decl = '3rd', g = 'N', NS = '$ος', GS = '$οος', DS = '$οῐ̈', ND = '$οε', GD = '$όοιν', NP = '$οᾰ', GP = '$όων', DP = '$οσῐ(ν)', } export.kles = { decl = '3rd', g = 'M', NS = '$κλῆς', GS = '$κλέους', DS = '$κλεῖ', AS = '$κλέᾱ', VS = '$κλεις', } export.kles_open = { decl = '3rd', g = 'M', NS = '$κλέης', GS = '$κλέους', DS = '$κλέει', AS = '$κλέᾱ', VS = '$κλεες', } -- Weak ῐ export.weak_i = { decl = '3rd', NS = '$ῐ́ς', GS = '$έως', DS = '$έῐ̈', AS = '$ῐ́ν', VS = '$ῐ́', ND = '$έε', GD = '$έοιν', NP = '$έες', GP = '$έων', DP = '$εσῐ(ν)', AP = '$έᾰς', } export.weak_i_adj = deep_copy(export.weak_i) export.weak_i_adj.GS = '$έος' export.N_weak_i = { decl = '3rd', g = 'N', NS = '$ῐ́', GS = '$έως', DS = '$έῐ̈', ND = '$έε', GD = '$έοιν', NP = '$έᾰ', GP = '$εων', DP = '$εσῐ(ν)', } export.N_weak_i_adj = deep_copy(export.N_weak_i) export.N_weak_i_adj.GS = '$έος' export.weak_i_prx = { decl = '3rd', NS = '$ῐς', GS = '$εως', DS = '$εῐ̈', AS = '$ῐν', VS = '$ῐ', ND = '$εε', GD = '$έοιν', NP = '$εες', GP = '$εων', DP = '$εσῐ(ν)', AP = '$εᾰς', } export.weak_i_adj_prx = deep_copy(export.weak_i_prx) export.weak_i_adj_prx.GS = '$εος' export.weak_i_adj_prx.GP = '$έων' export.N_weak_i_prx = { decl = '3rd', g = 'N', NS = '$ῐ', GS = '$εως', DS = '$εῐ̈', ND = '$εε', GD = '$έοιν', NP = '$εᾰ', GP = '$εων', DP = '$εσῐ(ν)', } export.N_weak_i_adj_prx = deep_copy(export.N_weak_i_prx) export.N_weak_i_adj_prx.GS = '$εος' export.N_weak_i_adj_prx.GP = '$έων' -- Weak ῠ export.weak_u = { decl = '3rd', NS = '$ῠ́ς', GS = '$έως', DS = '$έῐ̈', AS = '$ῠ́ν', VS = '$ῠ́', ND = '$έε', GD = '$έοιν', NP = '$έες', GP = '$έων', DP = '$έσῐ(ν)', AP = '$έᾰς', } export.weak_u_adj = deep_copy(export.weak_u) export.weak_u_adj.GS = '$έος' export.N_weak_u = { decl = '3rd', g = 'N', NS = '$ῠ́', GS = '$έως', DS = '$έῐ̈', ND = '$έε', GD = '$έοιν', NP = '$έᾰ', GP = '$έων', DP = '$έσῐ(ν)', } export.N_weak_u_adj = deep_copy(export.N_weak_u) export.N_weak_u_adj.GS = '$έος' export.weak_u_prx = { decl = '3rd', NS = '$ῠς', GS = '$εως', DS = '$εῐ̈', AS = '$ῠν', VS = '$ῠ', ND = '$εε', GD = '$έοιν', NP = '$εες', GP = '$εων', DP = '$εσῐ(ν)', AP = '$εᾰς', } export.weak_u_adj_prx = deep_copy(export.weak_u_prx) export.weak_u_adj_prx.GS = '$εος' export.weak_u_adj_prx.GP = '$έων' export.N_weak_u_prx = { decl = '3rd', g = 'N', NS = '$ῠ', GS = '$εως', DS = '$εῐ̈', ND = '$εε', GD = '$έοιν', NP = '$εᾰ', GP = '$εων', DP = '$εσῐ(ν)', } export.N_weak_u_adj_prx = deep_copy(export.N_weak_u_prx) export.N_weak_u_adj_prx.GS = '$εος' export.N_weak_u_adj_prx.GP = '$έων' -- Pure ῐ export.pure_i_prx = { decl = '3rd', NS = '$ῐς', GS = '$ῐος', DS = '$ῑ', AS = '$ῐν', VS = '$ῐ', ND = '$ῐε', GD = '$ῐ́οιν', NP = '$ῐες', GP = '$ῐ́ων', DP = '$ῐσῐ(ν)', AP = '$ῑς/$ῐᾰς', } export.N_pure_i_prx = { decl = '3rd', g = 'N', NS = '$ῐ', GS = '$ῐος', DS = '$ῑ', ND = '$ῐε', GD = '$ῐ́οιν', NP = '$ῐες', GP = '$ῐ́ων', DP = '$ῐσῐ(ν)', } -- Pure ῠ export.pure_u = { decl = '3rd', NS = '$ῠ́ς', GS = '$ῠ́ος', DS = '$ῠ́ῐ̈', AS = '$ῠ́ν', VS = '$ῠ́', ND = '$ῠ́ε', GD = '$ῠ́οιν', NP = '$ῠ́ες', GP = '$ῠ́ων', DP = '$ῠ́σῐ(ν)', AP = '$ῠ́ᾰς', } export.N_pure_u = { decl = '3rd', NS = '$ῠ́', GS = '$ῠ́ος', DS = '$ῠ́ῐ̈', ND = '$ῠ́ε', GD = '$ῠ́οιν', NP = '$ῠ́ᾰ', GP = '$ῠ́ων', DP = '$ῠ́σῐ(ν)', } export.pure_u_prx = { decl = '3rd', NS = '$ῠς', GS = '$ῠος', DS = '$ῠῐ̈', AS = '$ῠν', VS = '$ῠ', ND = '$ῠε', GD = '$ῠ́οιν', NP = '$ῠες', GP = '$ῠ́ων', DP = '$ῠσῐ(ν)', AP = '$ῠᾰς', } export.N_pure_u_prx = { decl = '3rd', g = 'N', NS = '$ῠ', GS = '$ῠος', DS = '$ῠῐ̈', ND = '$ῠε', GD = '$ῠ́οιν', NP = '$ῠᾰ', GP = '$ῠ́ων', DP = '$ῠσῐ(ν)', } -- Pure ῡ export.pure_u_long = { decl = '3rd', NS = '$ῡ́ς', GS = '$ῠ́ος', DS = '$ῠ́ῐ̈', AS = '$ῡ́ν', VS = '$ῡ́', ND = '$ῠ́ε', GD = '$ῠ́οιν', NP = '$ῠ́ες', GP = '$ῠ́ων', DP = '$ῠ́σῐ(ν)', AP = '$ῠ́ᾰς', } export.pure_u_long_mono = { decl = '3rd', NS = '$ῡ́ς', GS = '$ῠός', DS = '$ῠῐ̈́', AS = '$ῡ́ν', VS = '$ῡ́', ND = '$ῠ́ε', GD = '$ῠοῖν', NP = '$ῠ́ες', GP = '$ῠῶν', DP = '$ῠσῐ́(ν)', AP = '$ῠ́ᾰς', } export.pure_u_long_prx = { decl = '3rd', NS = '$ῡς', GS = '$ῠος', DS = '$ῠῐ̈', AS = '$ῡν', VS = '$ῡ', ND = '$ῠε', GD = '$ῠ́οιν', NP = '$ῠες', GP = '$ῠ́ων', DP = '$ῠσῐ(ν)', AP = '$ῠᾰς', } export.pure_u_long_con = { decl = '3rd', NS = '$ῦς', GS = '$ῠ́ος', DS = '$ῠ́ῐ̈', AS = '$ῦν', VS = '$ῦ', ND = '$ῠ́ε', GD = '$ῠ́οιν', NP = '$ῠ́ες', GP = '$ῠ́ων', DP ='$ῠ́σῐ(ν)', AP = '$ῠ́ᾰς', } export.pure_u_long_con_mono = { decl = '3rd', NS = '$ῦς', GS = '$ῠός', DS = '$ῠῐ̈́', AS = '$ῦν', VS = '$ῦ', ND = '$ῠ́ε', GD = '$ῠοῖν', NP = '$ῠ́ες', GP = '$ῠῶν', DP ='$ῠσῐ́(ν)', AP = '$ῠ́ᾰς', } -- ευς export.eus = { decl = '3rd', g = 'M', NS = '$εύς', GS = '$έως', DS = '$έῐ̈/$εῖ', AS = '$έᾱ', VS = '$εῦ', ND = '$ῆ', GD = '$έοιν', NP = '$ῆς/$εῖς', GP = '$έων', DP = '$εῦσῐ(ν)', AP = '$έᾱς', } export.eus_con = { decl = '3rd', g = 'M', NS = '$εύς', GS = '$ῶς', DS = '$εῖ', AS = '$ᾶ', VS = '$εῦ', ND = '$ῆ', GD = '$οῖν', NP = '$ῆς/$εῖς', GP = '$ῶν', DP = '$εῦσῐ(ν)', AP = '$ᾶς', } export.eus_hwos = { decl = '3rd', g = 'M', NS = '$εύς', GS = '$ῆϝος', DS = '$ῆϝῐ', AS = '$ῆϝᾰ', VS = '$εῦ', ND = '$ῆϝε', GD = '$ήϝοιν', NP = '$ῆϝες', GP = '$ήϝων', DP = '$εῦσῐ(ν)', AP = '$ῆϝᾰς', } export.eus_hos = { decl = '3rd', g = 'M', NS = '$εύς', GS = '$ῆος', DS = '$ῆῐ̈', AS = '$ῆᾰ', VS = '$εῦ', ND = '$ῆε', GD = '$ήοιν', NP = '$ῆες', GP = '$ήων', DP = '$εῦσῐ(ν)', AP = '$ῆᾰς', } export.eus_eios = { decl = '3rd', g = 'M', NS = '$εύς', GS = '$εῖος', DS = '$εῖῐ̈', AS = '$εῖᾰ', VS = '$εῦ', ND = '$εῖε', GD = '$είοιν', NP = '$εῖες', GP = '$είων', DP = '$εῦσῐ(ν)', AP = '$εῖᾰς', } export.oi = { decl = '3rd', g = 'F', NS = '$ώ', GS = '$οῦς', DS = '$οῖ', AS = '$ώ', VS = '$οῖ', ND = '$ώ', GD = '$οῖν', NP = '$οί', GP = '$ῶν', DP = '$οῖς', AP = '$ούς', } export.irreg = { decl = 'irreg', NS = 1, GS = 2, DS = 3, AS = 4, VS = 5, ND = 6, GD = 7, NP = 8, GP = 9, DP = 10, AP = 11, } export.indecl = { decl = 'decl', NS = 1, GS = 1, DS = 1, ND = 1, GD = 1, NP = 1, GP = 1, DP = 1, } return export oh7sxjpbgqahblqd0titn3b2sbmftxm Mô đun:grc-decl/decl/staticdata/dialects 828 291436 2571734 2127420 2026-10-18T16:28:52Z Hiyuune 50834 2571734 Scribunto text/plain return { ['ark'] = { ara = true, kyp = true, ark = true, }, ['severe'] = { ara = true, kyp = true, ark = true, ele = true, lak = true, her = true, kre = true, les = true, }, -- lesbian was omitted from §25 — by mistake? ['buck9'] = { boi = true, kyp = true, lak = true, her = true, kre = true, }, ['buck78'] = { the = true, ark = true, ara = true, kyp = true, thr = true, kyr = true, koa = true, }, ['northwest'] = { pho = true, del = true, lok = true, ele = true, }, ['doric'] = { dor = true, cho = true, buc = true, lak = true, her = true, meg = true, kor = true, ker = true, arg = true, rho = true, pam = true, koa = true, thr = true, kyr = true, kre = true }, ['west'] = { dor = true, cho = true, buc = true, pho = true, del = true, lok = true, ele = true, lak = true, her = true, meg = true, kor = true, ker = true, arg = true, rho = true, pam = true, koa = true, thr = true, kyr = true, kre = true, }, ['nonIA'] = { lyr = true, dor = true, cho = true, buc = true, ara = true, kyp = true, ark = true, les = true, the = true, boi = true, pho = true, del = true, lok = true, ele = true, lak = true, her = true, meg = true, kor = true, ker = true, arg = true, rho = true, pam = true, koa = true, thr = true, kyr = true, kre = true, }, } pg1j5ct5n07rn7kp3fpn1y5aa1s1pdt Mô đun:families/canonical names 828 291753 2571717 2571230 2026-10-18T15:35:40Z Hiyuune 50834 2571717 Scribunto text/plain return { ["Adamawa"] = "alv-ada", ["Admiralty Islands"] = "poz-aay", ["Aizi"] = "kro-aiz", ["Alacalufan"] = "aqa", ["Almora"] = "sit-alm", ["Ao"] = "sit-aao", ["Apachean"] = "apa", ["Arafundi"] = "paa-arf", ["Arai-Samaia"] = "paa-asa", ["Arandic"] = "aus-rnd", ["Arauan"] = "auf", ["Araucanian"] = "sai-ara", ["Nhóm ngôn ngữ Armenia"] = "hyx", ["Arnhem"] = "aus-arn", ["Asturleonese"] = "roa-asl", ["Athabaskan"] = "ath", ["Axioid"] = "tbq-axi", ["Ayere-Ahan"] = "alv-aah", ["Aymaran"] = "sai-aym", ["Bafia"] = "bnt-baf", ["Bafo-Bonkeng"] = "bnt-bbo", ["Baga"] = "alv-bag", ["Bagirmi"] = "csu-bgr", ["Baining"] = "paa-bng", ["Bak"] = "alv-bak", ["Baka"] = "nic-nkb", ["Nhóm ngôn ngữ Bali-Sasak-Sumbawa"] = "poz-bss", ["Bambukic"] = "alv-bam", ["Bamileke"] = "bai", ["Banda"] = "bad", ["Bangi-Moi"] = "bnt-bmo", ["Bangi-Ntomba"] = "bnt-bnm", ["Bangi-Tetela"] = "bnt-bte", ["Banyum"] = "alv-bny", ["Barbacoan"] = "sai-bar", ["Bari"] = "sdv-bri", ["Basa"] = "nic-bas", ["Batak"] = "btk", ["Bati-Angba"] = "bnt-bta", ["Be"] = "qfa-onb", ["Beboid"] = "nic-beb", ["Bekwilic"] = "bnt-bek", ["Bena-Kinga"] = "bnt-bki", ["Bendi"] = "nic-ben", ["Beromic"] = "nic-beo", ["Beti"] = "bnt-btb", ["Bhil"] = "inc-bhi", ["Bi-Ka"] = "tbq-bka", ["Bikwin-Jen"] = "alv-bwj", ["Birri-Kresh"] = "csu-bkr", ["Bisoid"] = "tbq-bis", ["Boan"] = "bnt-boa", ["Bodo-Garo"] = "tbq-bdg", ["Boma-Dzing"] = "bnt-bdz", ["Bongo-Bagirmi"] = "csu-bba", ["Bongo-Baka"] = "csu-bbk", ["Boran"] = "sai-bor", ["Botatwe"] = "bnt-bot", ["Bua"] = "alv-bua", ["Buja-Ngombe"] = "bnt-bun", ["Buli-Koma"] = "nic-buk", ["Bunuban"] = "aus-bub", ["Bushoong"] = "bnt-bsh", ["Bwa"] = "nic-bwa", ["Bété"] = "kro-bet", ["Bình thoại"] = "zhx-pin", ["Caddoan"] = "cdd", ["Cahuapanan"] = "sai-cah", ["Cangin"] = "alv-cng", ["Caspian"] = "ira-csp", ["Catacaoan"] = "sai-ctc", ["Catawban"] = "nai-cat", ["Central Banda"] = "bad-cnt", ["Central Delta"] = "nic-cde", ["Central Dravidian"] = "dra-cen", ["Central Great Andamanese"] = "qfa-adc", ["Central Indo-Aryan"] = "inc-cen", ["Central Iranian"] = "ira-cen", ["Central Jê"] = "sai-cje", ["Central Kiranti"] = "sit-kic", ["Central Maluku"] = "poz-cma", ["Central Mande"] = "dmn-mdc", ["Nhóm ngôn ngữ Trung New South Wales"] = "aus-cww", ["Central Ring"] = "nic-rnc", ["Nhóm ngôn ngữ Trung Sudan"] = "csu", ["Central Tano"] = "alv-ctn", ["Central Teke"] = "bnt-tkc", ["Central Tivoid"] = "nic-tvc", ["Cerrado"] = "sai-cer", ["Chaga"] = "bnt-chg", ["Chaga-Taita"] = "bnt-cht", ["Chapacuran"] = "sai-cpc", ["Charruan"] = "sai-crn", ["Chatino"] = "omq-cha", ["Chibchan"] = "cba", ["Chimakuan"] = "chi", ["Chinantecan"] = "omq-chi", ["Chinookan"] = "nai-ckn", ["Chitrali"] = "inc-chi", ["Chocoan"] = "sai-chc", ["Chokwe-Luchazi"] = "bnt-clu", ["Chonan"] = "sai-cho", ["Chumashan"] = "nai-chu", ["Circassian"] = "cau-cir", ["Comorian"] = "bnt-com", ["Continental Celtic"] = "cel-con", ["Coosan"] = "nai-coo", ["Cross River"] = "nic-cri", ["Cuicatec"] = "omq-cui", ["Cupan"] = "azc-cup", ["Nhóm ngôn ngữ Dagbani"] = "nic-dag", ["Daju"] = "sdv-daj", ["Dakoid"] = "nic-dak", ["Nhóm ngôn ngữ Dakota"] = "sio-dkt", ["Dalmatian Romance"] = "roa-dal", ["Daly"] = "aus-dal", ["Nhóm ngôn ngữ Dargwa"] = "cau-drg", ["Delta Edoid"] = "alv-dlt", ["Dene-Yeniseian"] = "qfa-dny", ["Dhegihan"] = "sio-dhe", ["Dhimalish"] = "sit-dhi", ["Dida"] = "kro-did", ["Dinka-Nuer"] = "sdv-dnu", ["Dogon"] = "qfa-dgn", ["Downriver Phula"] = "tbq-drp", ["Duru"] = "alv-dur", ["Dyirbalic"] = "aus-dyb", ["East Geelvink Bay"] = "paa-egb", ["East Germanic"] = "gme", ["East Manding"] = "dmn-emn", ["East Ometo"] = "omv-eom", ["East Plateau"] = "nic-ple", ["East Tsezian"] = "cau-ets", ["East-West Upper Cross River"] = "nic-uce", ["Eastern Beboid"] = "nic-bbe", ["Eastern Central Sudanic"] = "csu-ecs", ["Eastern Dardic"] = "inc-dre", ["Eastern Gbaya"] = "alv-gbf", ["Eastern Grassfields"] = "nic-gre", ["Eastern Gurunsi"] = "nic-gne", ["Eastern Hindi"] = "inc-hie", ["Eastern Jebel"] = "sdv-eje", ["Eastern Kiranti"] = "sit-kie", ["Eastern Kru"] = "kro-ekr", ["Eastern Ngbaka"] = "nic-nke", ["Eastern Nilotic"] = "sdv-nie", ["Eastern Oti-Volta"] = "nic-eov", ["Eastern Polynesian"] = "poz-pep", ["Eastern Romance"] = "roa-eas", ["Eastern Samur"] = "cau-esm", ["Eastern Sudanic"] = "sdv", ["Ede"] = "alv-ede", ["Edekiri"] = "alv-edk", ["Edo-Esan-Ora"] = "alv-eeo", ["Ekoid"] = "nic-eko", ["Engan"] = "paa-eng", ["Escarpment Dogon"] = "nic-dge", ["Eskimo"] = "esx-esk", ["Fali"] = "alv-fli", ["Finisterre"] = "ngf-fin", ["French Sign Languages"] = "sgn-fsl", ["Frisian"] = "gmw-fri", ["Fula-Wolof"] = "alv-fwo", ["Fur"] = "ssa-fur", ["Furu"] = "nic-fru", ["Ga-Dangme"] = "alv-gda", ["Gallo-Italic"] = "roa-git", ["Garawan"] = "aus-gar", ["Gbanziri"] = "nic-nkg", ["Gbaya"] = "alv-gba", ["Gelao"] = "qfa-gel", ["German Sign Languages"] = "sgn-gsl", ["Ghana-Togo Mountain"] = "alv-gtm", ["Nhóm ngôn ngữ Goidel"] = "cel-gae", ["Gondi"] = "dra-gon", ["Gondi-Kui"] = "dra-gki", ["Gonga"] = "omv-gon", ["Goroka"] = "ngf-gor", ["Nhóm ngôn ngữ Graeco-Phrygia"] = "ine-grp", ["Grassfields"] = "nic-grf", ["Great Andamanese"] = "qfa-adm", ["Great Lakes Bantu"] = "bnt-glb", ["Greater Siangic"] = "sit-gsi", ["Grebo"] = "kro-grb", ["Guahiban"] = "sai-guh", ["Guaicuruan"] = "sai-guc", ["Guang"] = "alv-gng", ["Guianan"] = "sai-gui", ["Gunwinyguan"] = "aus-gun", ["Gur"] = "nic-gur", ["Gurma"] = "nic-grm", ["Gurunsi"] = "nic-gns", ["Halmahera-Cenderawasih"] = "poz-hce", ["Harákmbut"] = "sai-har", ["Harákmbut-Katukinan"] = "sai-hkt", ["Haya-Jita"] = "bnt-haj", ["Highland Phula"] = "tbq-hph", ["Hill Nubian"] = "nub-hil", ["Hispano-Celtic"] = "cel-his", ["Hmong"] = "hmn", ["Hokan"] = "hok", ["Hrusish"] = "sit-hrs", ["Hurro-Urartian"] = "qfa-hur", ["Ibibio-Efik"] = "nic-ief", ["Idomoid"] = "alv-ido", ["Igboid"] = "alv-igb", ["Ijoid"] = "ijo", ["Insular Indo-Aryan"] = "inc-ins", ["Insular Scandinavian"] = "gmq-ins", ["Inuit"] = "esx-inu", ["Irish Anglo-Norman"] = "gmw-ian", ["Ngữ hệ Iroquois"] = "iro", ["Irula-Muduga"] = "dra-imd", ["Italo-Dalmatian"] = "roa-itd", ["Japanese Sign Languages"] = "sgn-jsl", ["Jarawa"] = "nic-jrw", ["Jarawan"] = "nic-jrn", ["Jarrakan"] = "aus-jar", ["Jera"] = "nic-jer", ["Jicaquean"] = "nai-jcq", ["Jingphoic"] = "sit-jnp", ["Jino"] = "tbq-jin", ["Jirajaran"] = "sai-jir", ["Jogo-Jeri"] = "dmn-jje", ["Jola"] = "alv-jol", ["Jola-Felupe"] = "alv-jfe", ["Jê"] = "sai-jee", ["Ka-Togo"] = "alv-ktg", ["Kaba"] = "csu-kab", ["Kachin-Luic"] = "sit-jpl", ["Kadu"] = "qfa-kad", ["Kainantu-Goroka"] = "paa-kag", ["Kako"] = "bnt-kak", ["Kalahari Khoe"] = "khi-kal", ["Kalamian"] = "phi-kal", ["Kalapuyan"] = "nai-klp", ["Kalenjin"] = "sdv-kln", ["Kambari"] = "nic-kam", ["Kamuku"] = "nic-kmk", ["Karaboro"] = "alv-krb", ["Karnic"] = "aus-kar", ["Kashmiric"] = "inc-kas", ["Katloid"] = "nic-ktl", ["Katukinan"] = "sai-ktk", ["Kavango"] = "bnt-kav", ["Kavango-Southwest Bantu"] = "bnt-ksb", ["Kazhuoish"] = "tbq-kzh", ["Kele"] = "bnt-kel", ["Kele-Tsogo"] = "bnt-kts", ["Keresan"] = "nai-ker", ["Khanty"] = "kca", ["Kho-Bwa"] = "sit-khb", ["Khoe"] = "khi-kho", ["Khoe-Kwadi"] = "khi-kkw", ["Khoekhoe"] = "khi-khk", ["Kikuyu-Kamba"] = "bnt-kka", ["Kilombero"] = "bnt-kil", ["Kim"] = "alv-kim", ["Kimbundu"] = "bnt-kmb", ["Kinnauric"] = "sit-kin", ["Kipchak-Cuman"] = "trk-kcu", ["Kiranti"] = "sit-kir", ["Kissi"] = "alv-kis", ["Kiwaian"] = "paa-kiw", ["Kodagu"] = "dra-kod", ["Kohistani"] = "inc-koh", ["Kolami-Naiki"] = "dra-knk", ["Komisenian"] = "ira-kms", ["Komo-Bira"] = "bnt-kbi", ["Konda-Kui"] = "dra-kki", ["Kongo"] = "bnt-kng", ["Konyak"] = "sit-kon", ["Konyak-Chang"] = "sit-kch", ["Koraga"] = "dra-kor", ["Kpala"] = "nic-nkk", ["Kpwe"] = "bnt-kpw", ["Kra"] = "qfa-kra", ["Kuikuroan"] = "sai-kui", ["Kulango"] = "alv-kul", ["Kuliak"] = "ssa-klk", ["Kunar"] = "inc-kun", ["Kurukh-Malto"] = "dra-kml", ["Kwomtari"] = "paa-kwm", ["Kx'a"] = "khi-kxa", ["Kyirong-Kagate"] = "sit-kyk", ["Kyrgyz-Kipchak"] = "trk-kkp", ["Nhóm ngôn ngữ Lagoon"] = "alv-lag", ["Lahoish"] = "tbq-lho", ["Lahuli-Spiti"] = "sit-las", ["Lakes Plain"] = "paa-lkp", ["Lalo"] = "tbq-lal", ["Lampungic"] = "poz-lgx", ["Land Dayak"] = "day", ["Nhóm ngôn ngữ Latinh-Faliscan"] = "itc-laf", ["Lawoish"] = "tbq-lwo", ["Lebonya"] = "bnt-leb", ["Left May"] = "qfa-mal", ["Lega-Binja"] = "bnt-lgb", ["Leko"] = "alv-lek", ["Leko-Nimbari"] = "alv-lni", ["Lenape"] = "del", ["Lencan"] = "nai-len", ["Lendu"] = "csu-lnd", ["Lezghian"] = "cau-lzg", ["Limba"] = "alv-lim", ["Lipo-Lolopo"] = "tbq-llo", ["Lisoish"] = "tbq-lso", ["Logooli-Kuria"] = "bnt-lok", ["Lotuko-Maa"] = "sdv-lma", ["Low German"] = "gmw-lgm", ["Lower Cross River"] = "nic-lcr", ["Lower Sepik"] = "paa-lsp", ["Luba"] = "bnt-lub", ["Luban"] = "bnt-lbn", ["Luish"] = "sit-luu", ["Lunda"] = "bnt-lun", ["Luo"] = "sdv-luo", ["Luwic"] = "ine-luw", ["Macro-Chibchan"] = "qfa-mch", ["Macro-Jê"] = "sai-mje", ["Nhóm ngôn ngữ Madang"] = "ngf-mad", ["Madiya"] = "dra-mdy", ["Maiduan"] = "nai-mdu", ["Mairasi"] = "paa-mai", ["Makaa"] = "bnt-mka", ["Makaa-Njem"] = "bnt-mnj", ["Makua"] = "bnt-mak", ["Malayalamoid"] = "dra-mal", ["Malto"] = "dra-mlo", ["Nhóm ngôn ngữ Mambiloid"] = "nic-mmb", ["Mamfe"] = "nic-mam", ["Manding"] = "dmn-man", ["Manding-Jogo"] = "dmn-mjo", ["Manding-Mokole"] = "dmn-mmo", ["Manding-Vai"] = "dmn-mva", ["Manenguba"] = "bnt-mne", ["Mangbetu"] = "csu-maa", ["Mangbutu-Lese"] = "csu-mle", ["Maninka"] = "dmn-mnk", ["Mano-Dan"] = "dmn-mda", ["Mao"] = "omv-mao", ["Mapoyan"] = "sai-map", ["Nhóm ngôn ngữ Mari"] = "chm", ["Maringic"] = "sit-mar", ["Masaba-Luhya"] = "bnt-msl", ["Mascoian"] = "sai-mas", ["Mataco-Guaicuru"] = "sai-mgc", ["Matacoan"] = "sai-mtc", ["Mazanderani-Shahmirzadi"] = "ira-msh", ["Mazatecan"] = "omq-maz", ["Mba"] = "nic-mbc", ["Mbaka"] = "nic-nkm", ["Mbam"] = "nic-mba", ["Mbete"] = "bnt-mbt", ["Mbeya"] = "bnt-mby", ["Mbinga"] = "bnt-mbi", ["Mbole-Enya"] = "bnt-mbe", ["Mboshi"] = "bnt-mbo", ["Mboshi-Buja"] = "bnt-mbb", ["Mbugwe-Rangi"] = "bnt-mra", ["Mbum"] = "alv-mbm", ["Mbum-Day"] = "alv-mbd", ["Median"] = "xme", ["Mel"] = "alv-mel", ["Nhóm ngôn ngữ Micronesia"] = "poz-mic", ["Midzu"] = "sit-mdz", ["Mijikenda"] = "bnt-mij", ["Mirndi"] = "aus-mir", ["Mississippi Valley Siouan"] = "sio-msv", ["Missouri River Siouan"] = "sio-mor", ["Misumalpan"] = "nai-min", ["Mixe-Zoquean"] = "nai-miz", ["Mokole"] = "dmn-mok", ["Momo"] = "nic-mom", ["Mondzish"] = "sit-mnz", ["Mongo"] = "bnt-mon", ["Nhóm ngôn ngữ Mordvin"] = "urj-mdv", ["Moru-Madi"] = "csu-mma", ["Moré"] = "nic-mre", ["Mruic"] = "sit-mru", ["Muji"] = "tbq-muj", ["Mumuye"] = "alv-mum", ["Mumuye-Yendang"] = "alv-mye", ["Munji-Yidgha"] = "ira-mny", ["Muran"] = "sai-mur", ["Muria"] = "dra-mur", ["Muskogean"] = "nai-mus", ["Mwika"] = "bnt-mwi", ["Mân"] = "zhx-min", ["Mân Nam"] = "zhx-nan", ["Mân nội địa"] = "zhx-inm", ["Mân ven biển"] = "zhx-com", ["Na-Dene"] = "xnd", ["Na-Togo"] = "alv-ntg", ["Nadahup"] = "sai-nad", ["Naic"] = "sit-nax", ["Naish"] = "sit-nas", ["Nalu"] = "alv-nal", ["Nambikwaran"] = "sai-nmk", ["Nanaic"] = "tuw-nan", ["Nandi-Markweta"] = "sdv-nma", ["Nanga-Walo"] = "nic-nwa", ["Nasoid"] = "tbq-nas", ["Ndzem-Bomwali"] = "bnt-ndb", ["Nenets"] = "yrk", ["New Caledonian"] = "poz-cln", ["Newaric"] = "sit-new", ["Ngayarda"] = "aus-nga", ["Ngbaka"] = "nic-ngk", ["Ngbandi"] = "nic-ngd", ["Ngemba"] = "nic-nge", ["Ngondi-Ngiri"] = "bnt-ngn", ["Nguni"] = "bnt-ngu", ["Nilotic"] = "sdv-nil", ["Nimboran"] = "paa-nim", ["Ninzic"] = "nic-nin", ["Nisoish"] = "tbq-nso", ["Nisu"] = "tbq-nis", ["Nkambe"] = "nic-nka", ["North Athabaskan"] = "ath-nor", ["North Bougainville"] = "paa-nbo", ["North Dravidian"] = "dra-nor", ["North Halmahera"] = "paa-nha", ["Nhóm ngôn ngữ Bắc Iroquois"] = "iro-nor", ["Nhóm ngôn ngữ Bắc Ometo"] = "omv-nom", ["North Plateau Dogon"] = "nic-npd", ["North Sarawakan"] = "poz-swa", ["North Siberian Turkic"] = "trk-nsb", ["North-Central Vanuatu"] = "poz-vnc", ["North-South Upper Cross River"] = "nic-ucn", ["Northeast Bantu"] = "bnt-bne", ["Northeast Coast Bantu"] = "bnt-ncb", ["Northeastern Neo-Aramaic"] = "sem-nna", ["Northern Eastern Sudanic"] = "sdv-nes", ["Northern Great Andamanese"] = "qfa-adn", ["Northern Gurunsi"] = "nic-gnn", ["Northern Jê"] = "sai-nje", ["Northern Luo"] = "sdv-lon", ["Northern Nuristani"] = "nur-nor", ["Northern Ring"] = "nic-rnn", ["Northern Tivoid"] = "nic-tvn", ["Northern Yeniseian"] = "qfa-yno", ["Northwest Kainji"] = "nic-knn", ["Nhóm ngôn ngữ Tây Bắc Edoid"] = "alv-nwd", ["Northwestern Indo-Aryan"] = "inc-nwe", ["Northwestern Mande"] = "dmn-mnw", ["Nubian"] = "nub", ["Nun"] = "nic-nun", ["Nupe-Gbagyi"] = "alv-ngb", ["Nupoid"] = "alv-nup", ["Nuristani"] = "iir-nur", ["Nusoish"] = "tbq-nus", ["Nwa-Beng"] = "dmn-nbe", ["Nyali"] = "bnt-nya", ["Nyanga-Buyi"] = "bnt-nyb", ["Nyima"] = "sdv-nyi", ["Nyoro-Ganda"] = "bnt-nyg", ["Nyulnyulan"] = "aus-nyu", ["Nyun"] = "alv-nyn", ["Nzebi"] = "bnt-nze", ["Occitano-Romance"] = "roa-ocr", ["Ogoni"] = "nic-ogo", ["Ohio Valley Siouan"] = "sio-ohv", ["Ok"] = "ngf-okk", ["Old South Arabian"] = "sem-osa", ["Nhóm ngôn ngữ Ometo"] = "omv-ome", ["Oti-Volta"] = "nic-ovo", ["Oto-Pamean"] = "omq-otp", ["Otomacoan"] = "sai-otm", ["Otomi"] = "oto-otm", ["Otomian"] = "oto", ["Ovambo"] = "bnt-ova", ["Oïl"] = "roa-oil", ["Pacific Coast Athabaskan"] = "ath-pco", ["Pakanic"] = "mkh-pkn", ["Pakawan"] = "nai-pak", ["Palaihnihan"] = "nai-pal", ["Papel"] = "alv-pap", ["Pare"] = "bnt-par", ["Parji-Gadaba"] = "dra-pgd", ["Parukotoan"] = "sai-prk", ["Pashayi"] = "inc-pas", ["Pathan"] = "ira-pat", ["Pauwasi"] = "paa-pau", ["Pekodian"] = "sai-pek", ["Pemongan"] = "sai-pem", ["Pende"] = "bnt-pen", ["Permic"] = "urj-prm", ["Phla-Pherá"] = "alv-pph", ["Phowa"] = "tbq-phw", ["Plains Dogon"] = "nic-pld", ["Plateau Penutian"] = "nai-plp", ["Pomeranian"] = "zlw-pom", ["Pomo-Bomwali"] = "bnt-pob", ["Pomoan"] = "nai-pom", ["Popolocan"] = "omq-pop", ["Potou-Tano"] = "alv-ptn", ["Prakrit"] = "pra", ["Punjabi-Lahnda"] = "inc-pan", ["Qiangic"] = "sit-qia", ["Quan thoại"] = "zhx-man", ["Quảng Châu"] = "zhx-yue", ["Ramu"] = "paa-ram", ["Rashad"] = "nic-ras", ["Rgyalrongic"] = "sit-rgy", ["Rhaeto-Romance"] = "roa-rhe", ["Ring"] = "nic-rng", ["Riverine Phula"] = "tbq-rph", ["Romani"] = "inc-rom", ["Rufiji-Ruvuma"] = "bnt-rur", ["Rukwa"] = "bnt-ruk", ["Rungwe"] = "bnt-run", ["Ruvu"] = "bnt-ruv", ["Ruvuma"] = "bnt-rvm", ["Sabaki"] = "bnt-sab", ["Sabi"] = "bnt-sbi", ["Sahaptian"] = "nai-shp", ["Saharan"] = "ssa-sah", ["Sakan"] = "xsc-sak", ["Sal"] = "tbq-bkj", ["Samo"] = "dmn-sam", ["Samogo"] = "dmn-smg", ["Samur"] = "cau-sam", ["Sanglechi-Ishkashimi"] = "ira-sgi", ["Sara"] = "csu-sar", ["Sawabantu"] = "bnt-saw", ["Sena"] = "bnt-sna", ["Senari"] = "alv-snr", ["Sentani"] = "paa-sen", ["Sere"] = "nic-ser", ["Seuta"] = "bnt-seu", ["Shastan"] = "nai-shs", ["Shi-Havu"] = "bnt-shh", ["Shinaic"] = "inc-shn", ["Shiroro"] = "nic-shi", ["Shona"] = "bnt-sho", ["Shughni-Yazghulami"] = "ira-shy", ["Siberian Turkic"] = "trk-sib", ["Siloid"] = "tbq-sil", ["Sindhi"] = "inc-snd", ["Siouan"] = "sio", ["Siouan-Catawban"] = "nai-sca", ["Sisaala"] = "nic-sis", ["Sko"] = "paa-msk", ["Slavey"] = "den", ["Sogdic"] = "ira-sgc", ["Sogdo-Bactrian"] = "ira-sbc", ["Soko-Kele"] = "bnt-ske", ["Soninke-Bobo"] = "dmn-snb", ["Sorbian"] = "wen", ["Sotho-Tswana"] = "bnt-sts", ["South Bird's Head"] = "ngf-sbh", ["South Bougainville"] = "paa-sbo", ["South Plateau"] = "nic-pls", ["South Siberian Turkic"] = "trk-ssb", ["South Sulawesi"] = "poz-ssw", ["Southeastern Aramaic"] = "sem-ase", ["Southeastern Mande"] = "dmn-mse", ["Southern Bantu"] = "bnt-bso", ["Southern Gbaya"] = "alv-gbs", ["Southern Great Andamanese"] = "qfa-ads", ["Southern Indo-Aryan"] = "inc-sou", ["Southern Jê"] = "sai-sje", ["Southern Luo"] = "sdv-los", ["Southern Nilotic"] = "sdv-nis", ["Southern Nuristani"] = "nur-sou", ["Southern Samur"] = "cau-ssm", ["Southern Yeniseian"] = "qfa-yso", ["Southwest Bantu"] = "bnt-swb", ["Southwest Grassfields"] = "nic-grs", ["Southwestern Edoid"] = "alv-swd", ["Southwestern Mande"] = "dmn-msw", ["Sunda-Sulawesi"] = "poz-sus", ["Suppire-Mamara"] = "alv-sma", ["Susu-Yalunka"] = "dmn-sya", ["Swahili"] = "bnt-swh", ["Ta-Arawakan"] = "awd-taa", ["Tacanan"] = "sai-tac", ["Tagwana-Djimini"] = "alv-tdj", ["Takama"] = "bnt-tkm", ["Takic"] = "azc-tak", ["Talodi"] = "alv-tal", ["Taloid"] = "tbq-tal", ["Taman"] = "sdv-tmn", ["Tamil-Kodagu"] = "dra-tkd", ["Tamil-Malayalam"] = "dra-tml", ["Tamiloid"] = "dra-tam", ["Tangkhul-Maring"] = "sit-tma", ["Tangkic"] = "aus-tnk", ["Tangsa-Nocte"] = "sit-tno", ["Tani"] = "sit-tan", ["Taracahitic"] = "azc-trc", ["Taranoan"] = "sai-tar", ["Tarokoid"] = "nic-tar", ["Tatic"] = "xme-ttc", ["Teke"] = "bnt-tek", ["Teke-Mbede"] = "bnt-tmb", ["Tenda"] = "alv-ten", ["Tequistlatecan"] = "nai-tqn", ["Teso-Turkana"] = "sdv-ttu", ["Tetela"] = "bnt-tet", ["Ticuna-Yuri"] = "sai-tyu", ["Timor-Alor-Pantar"] = "qfa-tap", ["Tocharian"] = "ine-toc", ["Toda-Kota"] = "dra-tkt", ["Tomini-Tolitoli"] = "poz-tot", ["Tor-Kwerba"] = "paa-tkw", ["Torricelli"] = "qfa-tor", ["Totozoquean"] = "nai-tot", ["Ngữ hệ Liên New Guinea"] = "ngf", ["Tsezian"] = "cau-tsz", ["Tshangla"] = "sit-tsk", ["Tsimshianic"] = "nai-tsi", ["Tsogo"] = "bnt-tso", ["Tswa-Ronga"] = "bnt-tsr", ["Tucanoan"] = "sai-tuc", ["Tupi-Guarani"] = "tup-gua", ["Tuu"] = "khi-tuu", ["Nhóm ngôn ngữ Ubangi"] = "nic-ubg", ["Ugric"] = "urj-ugr", ["Upper Cross River"] = "nic-ucr", ["Upriver Phula"] = "tbq-urp", ["Uru-Chipaya"] = "sai-ucp", ["Utian"] = "nai-utn", ["Vai-Kono"] = "dmn-vak", ["Vainakh"] = "cau-vay", ["Vale"] = "csu-val", ["Venezuelan Cariban"] = "sai-ven", ["Waja-Kam"] = "alv-wjk", ["Ngữ hệ Wakashan"] = "wak", ["Wara-Natyoro"] = "alv-wan", ["Wee"] = "kro-wee", ["West Baltic"] = "bat-wes", ["West Dogon"] = "nic-dgw", ["West Himalayish"] = "sit-whm", ["West Manding"] = "dmn-wmn", ["West Mbam"] = "nic-mbw", ["West Papuan"] = "paa-wpa", ["West Tsezian"] = "cau-wts", ["Western Gbaya"] = "alv-gbw", ["Western Gurunsi"] = "nic-gnw", ["Western Hindi"] = "inc-hiw", ["Western Kiranti"] = "sit-kiw", ["Western Kru"] = "kro-wkr", ["Western Mande"] = "dmn-mdw", ["Western Ngbaka"] = "nic-nkw", ["Western Nilotic"] = "sdv-niw", ["Western Oti-Volta"] = "nic-wov", ["Western Pahari"] = "him", ["Western Ring"] = "nic-rnw", ["Western Samur"] = "cau-wsm", ["Wichí"] = "sai-wic", ["Wintuan"] = "nai-wtq", ["Witotoan"] = "sai-wit", ["Worrorran"] = "aus-wor", ["Yaka"] = "bnt-yak", ["Yam"] = "paa-yam", ["Yambasa"] = "nic-ymb", ["Yangmanic"] = "aus-yng", ["Yanomami"] = "sai-ynm", ["Yasa-Kombe"] = "bnt-yko", ["Yeniseian"] = "qfa-yen", ["Yidinyic"] = "aus-yid", ["Yok-Utian"] = "nai-you", ["Yokuts"] = "yok", ["Yolngu"] = "aus-yol", ["Yom-Nawdm"] = "nic-yon", ["Yoruba"] = "alv-yor", ["Yoruboid"] = "alv-yrd", ["Yuat"] = "paa-yua", ["Yuin-Kuric"] = "aus-yuk", ["Yukian"] = "nai-ykn", ["Yukpan"] = "sai-yuk", ["Yukubenic"] = "nic-ykb", ["Yungur"] = "alv-yun", ["Yupik"] = "ypk", ["Zamba-Binza"] = "bnt-zbi", ["Zamucoan"] = "sai-zam", ["Zan"] = "ccs-zan", ["Zande"] = "znd", ["Zaparoan"] = "sai-zap", ["Zapotec"] = "omq-zpc", ["Zapotecan"] = "omq-zap", ["Zeme"] = "sit-zem", ["Ngôn ngữ nhân tạo"] = "art", ["contact"] = "qfa-cnt", ["creole or pidgin"] = "crp", ["mixed"] = "qfa-mix", ["ngôn ngữ cơ tầng"] = "qfa-sub", ["Ngữ hệ Ainu"] = "qfa-ain", ["Ngữ hệ Algic"] = "aql", ["Ngữ hệ Arawak"] = "awd", ["Ngữ hệ Carib"] = "sai-car", ["Ngữ hệ Chukotka-Kamchatka"] = "qfa-cka", ["Ngữ hệ Dravida"] = "dra", ["Ngữ hệ Hmông-Miền"] = "hmx", ["Ngữ hệ Huarpe"] = "sai-hrp", ["Ngữ hệ Hán-Tạng"] = "sit", ["Ngữ hệ Iwaidja"] = "aus-wdj", ["Ngữ hệ Iwam"] = "paa-iwm", ["Ngữ hệ Jivaro"] = "sai-jiv", ["Ngữ hệ Kartvelia"] = "ccs", ["Ngữ hệ Kiowa-Tanoa"] = "nai-kta", ["Ngữ hệ Kra-Dai"] = "qfa-tak", ["Ngữ hệ Maya"] = "myn", ["Ngữ hệ Mông Cổ"] = "xgn", ["Ngữ hệ Nam Á"] = "aav", ["Ngữ hệ Nam Đảo"] = "map", ["Ngữ hệ Nhật Bản-Lưu Cầu"] = "jpx", ["Ngữ hệ Niger-Congo"] = "nic", ["Ngữ hệ Nin-Sahara"] = "ssa", ["Ngữ hệ Oto-Mangue"] = "omq", ["Ngữ hệ Pama–Nyungar"] = "aus-pam", ["Ngữ hệ Pano-Tacana"] = "sai-pat", ["Ngữ hệ Papua"] = "paa", ["Ngữ hệ Phi-Á"] = "afa", ["Ngữ hệ Quechua"] = "qwe", ["Ngữ hệ Salish"] = "sal", ["Ngữ hệ Sepik"] = "paa-sep", ["Ngữ hệ Thượng Tami"] = "paa-brd", ["Ngữ hệ Tiên Ti-Mông Cổ"] = "qfa-xgs", ["Ngữ hệ Totonac"] = "nai-ttn", ["Ngữ hệ Triều Tiên"] = "qfa-kor", ["Ngữ hệ Tungus"] = "tuw", ["Ngữ hệ Tupi"] = "tup", ["Ngữ hệ Turk"] = "trk", ["Ngữ hệ Tyrseni"] = "qfa-tyn", ["Ngữ hệ Tây Bắc Kavkaz"] = "cau-nwc", ["Ngữ hệ Ural"] = "urj", ["Ngữ hệ Ute-Aztec"] = "azc", ["Ngữ hệ Vascon"] = "euq", ["Ngữ hệ Xinca"] = "nai-xin", ["Ngữ hệ Yukaghir"] = "qfa-yuk", ["Ngữ hệ Yuman-Cochimí"] = "nai-yuc", ["Ngữ hệ vùng vịnh Papua"] = "paa-pag", ["Ngữ hệ Önge"] = "qfa-ong", ["Ngữ hệ Đông Bắc Kavkaz"] = "cau-nec", ["Ngữ hệ Ấn-Âu"] = "ine", ["Ngữ tộc Mixtec"] = "omq-mix", ["Nhóm ngôn ngữ Aari"] = "omv-aro", ["Nhóm ngôn ngữ Abenaki-Penobscot"] = "alg-abp", ["Nhóm ngôn ngữ Abkhaz-Abaza"] = "cau-abz", ["Nhóm ngôn ngữ Ai Cập"] = "egx", ["Nhóm ngôn ngữ Albani"] = "sqj", ["Nhóm ngôn ngữ Algonquin"] = "alg", ["Nhóm ngôn ngữ Alumic"] = "nic-alu", ["Nhóm ngôn ngữ Andic"] = "cau-and", ["Nhóm ngôn ngữ Angami-Pochuri"] = "tbq-anp", ["Nhóm ngôn ngữ Angan"] = "ngf-ang", ["Nhóm ngôn ngữ Anh"] = "gmw-ang", ["Nhóm ngôn ngữ Anh-Frisia"] = "gmw-afr", ["Nhóm ngôn ngữ Aram"] = "sem-ara", ["Nhóm ngôn ngữ Aram Tây"] = "sem-arw", ["Nhóm ngôn ngữ Aram Đông"] = "sem-are", ["Nhóm ngôn ngữ Arapahoe"] = "alg-ara", ["Nhóm ngôn ngữ Asli"] = "mkh-asl", ["Nhóm ngôn ngữ Atayal"] = "map-ata", ["Nhóm ngôn ngữ Avar-Andic"] = "cau-ava", ["Nhóm ngôn ngữ Bahnar"] = "mkh-ban", ["Nhóm ngôn ngữ Bahnar Bắc"] = "mkh-nbn", ["Nhóm ngôn ngữ Balt-Slav"] = "ine-bsl", ["Nhóm ngôn ngữ Bantoid"] = "nic-bod", ["Nhóm ngôn ngữ Bantoid-Cross"] = "nic-bcr", ["Nhóm ngôn ngữ Bantu"] = "bnt", ["Nhóm ngôn ngữ Basaa"] = "bnt-bsa", ["Nhóm ngôn ngữ Bengal-Assam"] = "inc-bas", ["Nhóm ngôn ngữ Benue-Congo"] = "nic-bco", ["Nhóm ngôn ngữ Berber"] = "ber", ["Nhóm ngôn ngữ Bihar"] = "inc-bih", ["Nhóm ngôn ngữ Bisa-Busa"] = "dmn-bbu", ["Nhóm ngôn ngữ Bod"] = "sit-bdi", ["Nhóm ngôn ngữ Bod Đông"] = "sit-ebo", ["Nhóm ngôn ngữ Britton"] = "cel-bry", ["Nhóm ngôn ngữ Bungku-Tolaki"] = "poz-btk", ["Nhóm ngôn ngữ Bạch"] = "sit-bai", ["Nhóm ngôn ngữ Bạch Bắc"] = "sit-nba", ["Nhóm ngôn ngữ Bắc Bantoid"] = "nic-bdn", ["Nhóm ngôn ngữ Bắc Borneo"] = "poz-bnn", ["Nhóm ngôn ngữ Bắc Lưu Cầu"] = "jpx-nry", ["Nhóm ngôn ngữ Bắc Ấn-Arya"] = "inc-nor", ["Nhóm ngôn ngữ Bắc-Trung Edoid"] = "alv-nce", ["Nhóm ngôn ngữ Bố Ương"] = "qfa-buy", ["Nhóm ngôn ngữ Bối-Cát Triệu"] = "qfa-bej", ["Nhóm ngôn ngữ Bối-Thái"] = "qfa-bet", ["Nhóm ngôn ngữ Canaan"] = "sem-can", ["Nhóm ngôn ngữ Castilla"] = "roa-cas", ["Nhóm ngôn ngữ Celebes"] = "poz-clb", ["Nhóm ngôn ngữ Celt"] = "cel", ["Nhóm ngôn ngữ Celt hải đảo"] = "cel-ins", ["Nhóm ngôn ngữ Chukotka"] = "qfa-ckn", ["Nhóm ngôn ngữ Châu Đại Dương"] = "poz-oce", ["Nhóm ngôn ngữ Chăm"] = "cmc", ["Nhóm ngôn ngữ Cushit"] = "cus", ["Nhóm ngôn ngữ Cơ Tu"] = "mkh-kat", ["Nhóm ngôn ngữ Dard"] = "inc-dar", ["Nhóm ngôn ngữ Dizi"] = "omv-diz", ["Nhóm ngôn ngữ Edoid"] = "alv-edo", ["Nhóm ngôn ngữ Eskimo-Aleut"] = "esx", ["Nhóm ngôn ngữ Ewenic"] = "tuw-ewe", ["Nhóm ngôn ngữ Finn"] = "urj-fin", ["Nhóm ngôn ngữ Gbe"] = "alv-gbe", ["Nhóm ngôn ngữ German"] = "gem", ["Nhóm ngôn ngữ German Biển Bắc"] = "gmw-nsg", ["Nhóm ngôn ngữ German Bắc"] = "gmq", ["Nhóm ngôn ngữ German Tây"] = "gmw", ["Nhóm ngôn ngữ Gruzia-Zan"] = "ccs-gzn", ["Nhóm ngôn ngữ Heiban"] = "alv-hei", ["Nhóm ngôn ngữ Hlai"] = "qfa-lic", ["Nhóm ngôn ngữ Hà Nhì"] = "tbq-han", ["Nhóm ngôn ngữ Hán"] = "zhx", ["Nhóm ngôn ngữ Hán-Bạch"] = "sit-sba", ["Nhóm ngôn ngữ Hạ Franken"] = "gmw-frk", ["Nhóm ngôn ngữ Iberia-Rôman"] = "roa-ibe", ["Nhóm ngôn ngữ Iran"] = "ira", ["Nhóm ngôn ngữ Jukunoid"] = "nic-jkn", ["Nhóm ngôn ngữ Kaili-Pamona"] = "poz-kal", ["Nhóm ngôn ngữ Kainji"] = "nic-knj", ["Nhóm ngôn ngữ Kannada"] = "dra-kan", ["Nhóm ngôn ngữ Karen"] = "kar", ["Nhóm ngôn ngữ Karluk"] = "trk-kar", ["Nhóm ngôn ngữ Kauru"] = "nic-kau", ["Nhóm ngôn ngữ Kham"] = "sit-kha", ["Nhóm ngôn ngữ Khasi"] = "aav-khs", ["Nhóm ngôn ngữ Khmer"] = "mkh-kmr", ["Nhóm ngôn ngữ Khơ Mú"] = "mkh-khm", ["Nhóm ngôn ngữ Kipchak"] = "trk-kip", ["Nhóm ngôn ngữ Kipchak-Bulgar"] = "trk-kbu", ["Nhóm ngôn ngữ Kipchak-Nogai"] = "trk-kno", ["Nhóm ngôn ngữ Koman"] = "ssa-kom", ["Nhóm ngôn ngữ Kru"] = "kro", ["Nhóm ngôn ngữ Kuki-Chin"] = "tbq-kuk", ["Nhóm ngôn ngữ Kurd"] = "ku", ["Nhóm ngôn ngữ Kutubuan"] = "paa-kut", ["Nhóm ngôn ngữ Kwa"] = "alv-kwa", ["Nhóm ngôn ngữ Ladakh-Balti"] = "sit-lab", ["Nhóm ngôn ngữ Lechite"] = "zlw-lch", ["Nhóm ngôn ngữ Liên Mông Cổ"] = "qfa-xgx", ["Nhóm ngôn ngữ Lô Lô"] = "tbq-lol", ["Nhóm ngôn ngữ Lô Lô Bắc"] = "tbq-nlo", ["Nhóm ngôn ngữ Lô Lô Nam"] = "tbq-slo", ["Nhóm ngôn ngữ Lô Lô Đông Nam"] = "tbq-sel", ["Nhóm ngôn ngữ Lô Lô–Miến"] = "tbq-lob", ["Nhóm ngôn ngữ Lưu Cầu"] = "jpx-ryu", ["Nhóm ngôn ngữ Mande"] = "dmn", ["Nhóm ngôn ngữ Manobo"] = "mno", ["Nhóm ngôn ngữ Mansi"] = "mns", ["Nhóm ngôn ngữ Masa"] = "cdc-mas", ["Nhóm ngôn ngữ Media-Parthia"] = "ira-mpr", ["Nhóm ngôn ngữ Mixtec"] = "omq-mxt", ["Nhóm ngôn ngữ Miến"] = "tbq-brm", ["Nhóm ngôn ngữ Miến-Khương"] = "tbq-buq", ["Nhóm ngôn ngữ Miền"] = "hmx-mie", ["Nhóm ngôn ngữ Monguor"] = "mjg", ["Nhóm ngôn ngữ Muna-Buton"] = "poz-mun", ["Nhóm ngôn ngữ Munda"] = "mun", ["Nhóm ngôn ngữ Mã Lai"] = "poz-mly", ["Nhóm ngôn ngữ Mã Lai-Chăm"] = "poz-mcm", ["Nhóm ngôn ngữ Mã Lai-Sumbawa"] = "poz-msa", ["Nhóm ngôn ngữ Mã Lai-Đa Đảo"] = "poz", ["Nhóm ngôn ngữ Mã Lai-Đa Đảo Trung-Đông"] = "poz-cet", ["Nhóm ngôn ngữ Mã Lai-Đa Đảo Đông"] = "pqe", ["Nhóm ngôn ngữ Môn"] = "mkh-mnc", ["Nhóm ngôn ngữ Môn-Khmer"] = "mkh", ["Nhóm ngôn ngữ Mảng"] = "mkh-mng", ["Nhóm ngôn ngữ Nahua"] = "azc-nah", ["Nhóm ngôn ngữ Nahua Durango"] = "azc-dur", ["Nhóm ngôn ngữ Nahua Huasteca"] = "azc-hua", ["Nhóm ngôn ngữ Nakh"] = "cau-nkh", ["Nhóm ngôn ngữ Nam Bantoid"] = "nic-bds", ["Nhóm ngôn ngữ Nam Cushit"] = "cus-sou", ["Nhóm ngôn ngữ Nam Dravida"] = "dra-sou", ["Nhóm ngôn ngữ Nam Dravida I"] = "dra-sdo", ["Nhóm ngôn ngữ Nam Dravida II"] = "dra-sdt", ["Nhóm ngôn ngữ Nam Lưu Cầu"] = "jpx-sry", ["Nhóm ngôn ngữ Nam Mông Cổ"] = "xgn-sou", ["Nhóm ngôn ngữ Nam Ả Rập hiện đại"] = "sem-sar", ["Nhóm ngôn ngữ Nawiki"] = "awd-nwk", ["Nhóm ngôn ngữ Nicobar"] = "aav-nic", ["Nhóm ngôn ngữ Numic"] = "azc-num", ["Nhóm ngôn ngữ Nung"] = "sit-nng", ["Nhóm ngôn ngữ Nyasa"] = "bnt-nys", ["Nhóm ngôn ngữ Nữ Chân"] = "tuw-jrc", ["Nhóm ngôn ngữ Oghur"] = "trk-ogr", ["Nhóm ngôn ngữ Oghuz"] = "trk-ogz", ["Nhóm ngôn ngữ Omo"] = "omv", ["Nhóm ngôn ngữ Ormur-Parachi"] = "ira-orp", ["Nhóm ngôn ngữ Osco-Umbria"] = "itc-sbl", ["Nhóm ngôn ngữ Pahari"] = "inc-pah", ["Nhóm ngôn ngữ Palaung"] = "mkh-pal", ["Nhóm ngôn ngữ Paman"] = "aus-pmn", ["Nhóm ngôn ngữ Pano"] = "sai-pan", ["Nhóm ngôn ngữ Pear"] = "mkh-pea", ["Nhóm ngôn ngữ Philippines"] = "phi", ["Nhóm ngôn ngữ Piman"] = "azc-pim", ["Nhóm ngôn ngữ Plateau"] = "nic-plt", ["Nhóm ngôn ngữ Platoid"] = "nic-pla", ["Nhóm ngôn ngữ Pnar-Khasi-Lyngngam"] = "aav-pkl", ["Nhóm ngôn ngữ Rajasthan"] = "raj", ["Nhóm ngôn ngữ Rôman"] = "roa", ["Nhóm ngôn ngữ Sa Pa-Thái Tây Nam"] = "tai-sap", ["Nhóm ngôn ngữ Sabah"] = "poz-san", ["Nhóm ngôn ngữ Sac-Fox-Kickapoo"] = "alg-sfk", ["Nhóm ngôn ngữ Saka-Wakhi"] = "xsc-skw", ["Nhóm ngôn ngữ Saluan-Banggai"] = "poz-slb", ["Nhóm ngôn ngữ Sama-Bajaw"] = "poz-sbj", ["Nhóm ngôn ngữ Sami"] = "smi", ["Nhóm ngôn ngữ Samoyed"] = "syd", ["Nhóm ngôn ngữ Sarmatia"] = "xsc-sar", ["Nhóm ngôn ngữ Savanna"] = "alv-sav", ["Nhóm ngôn ngữ Scythia"] = "xsc", ["Nhóm ngôn ngữ Selkup"] = "sel", ["Nhóm ngôn ngữ Semit"] = "sem", ["Nhóm ngôn ngữ Semit Ethiopia"] = "sem-eth", ["Nhóm ngôn ngữ Semit Trung"] = "sem-cen", ["Nhóm ngôn ngữ Semit Tây"] = "sem-wes", ["Nhóm ngôn ngữ Semit Tây Bắc"] = "sem-nwe", ["Nhóm ngôn ngữ Semit Đông"] = "sem-eas", ["Nhóm ngôn ngữ Senegambia"] = "alv-sng", ["Nhóm ngôn ngữ Senufo"] = "alv-snf", ["Nhóm ngôn ngữ Shirongol"] = "xgn-shr", ["Nhóm ngôn ngữ Shughni-Roshani"] = "ira-shr", ["Nhóm ngôn ngữ Shughni-Yazghulami-Munji"] = "ira-sym", ["Nhóm ngôn ngữ Sira"] = "bnt-sir", ["Nhóm ngôn ngữ Slav Nam"] = "zls", ["Nhóm ngôn ngữ Slav Tây"] = "zlw", ["Nhóm ngôn ngữ Slav Đông"] = "zle", ["Nhóm ngôn ngữ Somali"] = "cus-som", ["Nhóm ngôn ngữ Songhay"] = "son", ["Nhóm ngôn ngữ Talodi-Heiban"] = "alv-the", ["Nhóm ngôn ngữ Tamang"] = "sit-tam", ["Nhóm ngôn ngữ Tamil-Kannada"] = "dra-tkn", ["Nhóm ngôn ngữ Tangkhul"] = "sit-tng", ["Nhóm ngôn ngữ Tchad"] = "cdc", ["Nhóm ngôn ngữ Telugu"] = "dra-tel", ["Nhóm ngôn ngữ Thái"] = "tai", ["Nhóm ngôn ngữ Thái Bắc"] = "tai-nor", ["Nhóm ngôn ngữ Thái Sùng Tả"] = "tai-cho", ["Nhóm ngôn ngữ Thái Trung tâm"] = "tai-cen", ["Nhóm ngôn ngữ Thái Tây Nam"] = "tai-swe", ["Nhóm ngôn ngữ Thái-Long"] = "sit-cln", ["Nhóm ngôn ngữ Thổ Gia"] = "sit-tja", ["Nhóm ngôn ngữ Timor"] = "poz-tim", ["Nhóm ngôn ngữ Tivoid"] = "nic-tiv", ["Nhóm ngôn ngữ Tiểu Á"] = "ine-ana", ["Nhóm ngôn ngữ Triqui"] = "omq-tri", ["Nhóm ngôn ngữ Trung Cushit"] = "cus-cen", ["Nhóm ngôn ngữ Trung Mông Cổ"] = "xgn-cen", ["Nhóm ngôn ngữ Trung Plateau"] = "nic-plc", ["Nhóm ngôn ngữ Trung Tchad"] = "cdc-cbm", ["Nhóm ngôn ngữ Trung Thái Bình Dương"] = "poz-pcc", ["Nhóm ngôn ngữ Trung-Đông Châu Đại Dương"] = "poz-occ", ["Nhóm ngôn ngữ Tsou"] = "map-tsu", ["Nhóm ngôn ngữ Tulu-Koraga"] = "dra-tlk", ["Nhóm ngôn ngữ Turk chung"] = "trk-cmn", ["Nhóm ngôn ngữ Tày"] = "tai-tay", ["Nhóm ngôn ngữ Tân Aram Trung"] = "sem-cna", ["Nhóm ngôn ngữ Tây Barito"] = "poz-brw", ["Nhóm ngôn ngữ Tây Britton"] = "cel-brw", ["Nhóm ngôn ngữ Tây Bắc Iran"] = "ira-nwi", ["Nhóm ngôn ngữ Tây Bắc Sumatra"] = "poz-nws", ["Nhóm ngôn ngữ Tây Châu Đại Dương"] = "poz-ocw", ["Nhóm ngôn ngữ Tây Iran"] = "ira-wes", ["Nhóm ngôn ngữ Tây Nam Britton"] = "cel-brs", ["Nhóm ngôn ngữ Tây Nam Iran"] = "ira-swi", ["Nhóm ngôn ngữ Tây Nam Pama–Nyungar"] = "aus-psw", ["Nhóm ngôn ngữ Tây Rôman"] = "roa-wes", ["Nhóm ngôn ngữ Tây Scandinavia"] = "gmq-wes", ["Nhóm ngôn ngữ Tây Tchad"] = "cdc-wst", ["Nhóm ngôn ngữ Tây Ấn-Aryan"] = "inc-wes", ["Nhóm ngôn ngữ Tạng"] = "sit-tib", ["Nhóm ngôn ngữ Tạng-Miến"] = "tbq", ["Nhóm ngôn ngữ Udeghe"] = "tuw-udg", ["Nhóm ngôn ngữ Việt"] = "mkh-vie", ["Nhóm ngôn ngữ Volta-Congo"] = "nic-vco", ["Nhóm ngôn ngữ Volta-Niger"] = "alv-von", ["Nhóm ngôn ngữ Văn Ma-Thái Tây Nam"] = "tai-wen", ["Nhóm ngôn ngữ Wotu-Wolio"] = "poz-wot", ["Nhóm ngôn ngữ Yekhee"] = "alv-yek", ["Nhóm ngôn ngữ Zaza-Goran"] = "ira-zgr", ["Nhóm ngôn ngữ biệt lập"] = "qfa-iso", ["Nhóm ngôn ngữ gốc Balt"] = "bat", ["Nhóm ngôn ngữ gốc Hy Lạp"] = "grk", ["Nhóm ngôn ngữ gốc Slav"] = "sla", ["Nhóm ngôn ngữ gốc Ý"] = "itc", ["Nhóm ngôn ngữ Ý-Tây Rôman"] = "roa-iwr", ["Nhóm ngôn ngữ Đa Đảo"] = "poz-pol", ["Nhóm ngôn ngữ Đa Đảo hạt nhân"] = "poz-pnp", ["Nhóm ngôn ngữ Đông Algonquin"] = "alg-eas", ["Nhóm ngôn ngữ Đông Balt"] = "bat-eas", ["Nhóm ngôn ngữ Đông Barito"] = "poz-bre", ["Nhóm ngôn ngữ Đông Bắc Iran"] = "ira-nei", ["Nhóm ngôn ngữ Đông Cushit"] = "cus-eas", ["Nhóm ngôn ngữ Đông Cushit Cao nguyên"] = "cus-hec", ["Nhóm ngôn ngữ Đông Kainji"] = "nic-kne", ["Nhóm ngôn ngữ Đông Mande"] = "dmn-mde", ["Nhóm ngôn ngữ Đông Nam Iran"] = "ira-sei", ["Nhóm ngôn ngữ Đông Nam Solomon"] = "poz-sls", ["Nhóm ngôn ngữ Đông Scandinavia"] = "gmq-eas", ["Nhóm ngôn ngữ Đông Tchad"] = "cdc-est", ["Nhóm ngôn ngữ Đông Ấn-Arya"] = "inc-eas", ["Nhóm ngôn ngữ Đại Bạch"] = "sit-mba", ["Nhóm ngôn ngữ Đại Magar"] = "sit-gma", ["Nhóm ngôn ngữ Đại Tây Dương-Congo"] = "alv", ["Nhóm ngôn ngữ Động-Thủy"] = "qfa-kms", ["Nhóm ngôn ngữ Đức cao địa"] = "gmw-hgm", ["Nhóm ngôn ngữ Ả Rập"] = "sem-arb", ["Nhóm ngôn ngữ Ấn-Arya"] = "inc", ["Nhóm ngôn ngữ Ấn-Arya cổ"] = "inc-old", ["Nhóm ngôn ngữ Ấn-Arya trung đại"] = "inc-mid", ["Nhóm ngôn ngữ Ấn-Iran"] = "iir", ["not a family"] = "qfa-not", ["sign"] = "sgn", ["Tiếng Hindustan"] = "inc-hnd", ["Nhóm ngôn ngữ Iran trung đại"] = "ira-mid", } t15ywrn6k0zgfowqosfh8maarla2vp7 2571720 2571717 2026-10-18T15:37:33Z Hiyuune 50834 2571720 Scribunto text/plain return { ["Adamawa"] = "alv-ada", ["Admiralty Islands"] = "poz-aay", ["Aizi"] = "kro-aiz", ["Alacalufan"] = "aqa", ["Almora"] = "sit-alm", ["Ao"] = "sit-aao", ["Apachean"] = "apa", ["Arafundi"] = "paa-arf", ["Arai-Samaia"] = "paa-asa", ["Arandic"] = "aus-rnd", ["Arauan"] = "auf", ["Araucanian"] = "sai-ara", ["Nhóm ngôn ngữ Armenia"] = "hyx", ["Arnhem"] = "aus-arn", ["Asturleonese"] = "roa-asl", ["Athabaskan"] = "ath", ["Axioid"] = "tbq-axi", ["Ayere-Ahan"] = "alv-aah", ["Aymaran"] = "sai-aym", ["Bafia"] = "bnt-baf", ["Bafo-Bonkeng"] = "bnt-bbo", ["Baga"] = "alv-bag", ["Bagirmi"] = "csu-bgr", ["Baining"] = "paa-bng", ["Bak"] = "alv-bak", ["Baka"] = "nic-nkb", ["Nhóm ngôn ngữ Bali-Sasak-Sumbawa"] = "poz-bss", ["Bambukic"] = "alv-bam", ["Bamileke"] = "bai", ["Nhóm ngôn ngữ Banda"] = "bad", ["Bangi-Moi"] = "bnt-bmo", ["Bangi-Ntomba"] = "bnt-bnm", ["Bangi-Tetela"] = "bnt-bte", ["Banyum"] = "alv-bny", ["Barbacoan"] = "sai-bar", ["Bari"] = "sdv-bri", ["Basa"] = "nic-bas", ["Batak"] = "btk", ["Bati-Angba"] = "bnt-bta", ["Be"] = "qfa-onb", ["Beboid"] = "nic-beb", ["Bekwilic"] = "bnt-bek", ["Bena-Kinga"] = "bnt-bki", ["Bendi"] = "nic-ben", ["Beromic"] = "nic-beo", ["Beti"] = "bnt-btb", ["Bhil"] = "inc-bhi", ["Bi-Ka"] = "tbq-bka", ["Bikwin-Jen"] = "alv-bwj", ["Birri-Kresh"] = "csu-bkr", ["Bisoid"] = "tbq-bis", ["Boan"] = "bnt-boa", ["Bodo-Garo"] = "tbq-bdg", ["Boma-Dzing"] = "bnt-bdz", ["Bongo-Bagirmi"] = "csu-bba", ["Bongo-Baka"] = "csu-bbk", ["Boran"] = "sai-bor", ["Botatwe"] = "bnt-bot", ["Bua"] = "alv-bua", ["Buja-Ngombe"] = "bnt-bun", ["Buli-Koma"] = "nic-buk", ["Bunuban"] = "aus-bub", ["Bushoong"] = "bnt-bsh", ["Bwa"] = "nic-bwa", ["Bété"] = "kro-bet", ["Bình thoại"] = "zhx-pin", ["Caddoan"] = "cdd", ["Cahuapanan"] = "sai-cah", ["Cangin"] = "alv-cng", ["Caspian"] = "ira-csp", ["Catacaoan"] = "sai-ctc", ["Catawban"] = "nai-cat", ["Central Banda"] = "bad-cnt", ["Central Delta"] = "nic-cde", ["Central Dravidian"] = "dra-cen", ["Central Great Andamanese"] = "qfa-adc", ["Central Indo-Aryan"] = "inc-cen", ["Central Iranian"] = "ira-cen", ["Central Jê"] = "sai-cje", ["Central Kiranti"] = "sit-kic", ["Central Maluku"] = "poz-cma", ["Central Mande"] = "dmn-mdc", ["Nhóm ngôn ngữ Trung New South Wales"] = "aus-cww", ["Central Ring"] = "nic-rnc", ["Nhóm ngôn ngữ Trung Sudan"] = "csu", ["Central Tano"] = "alv-ctn", ["Central Teke"] = "bnt-tkc", ["Central Tivoid"] = "nic-tvc", ["Cerrado"] = "sai-cer", ["Chaga"] = "bnt-chg", ["Chaga-Taita"] = "bnt-cht", ["Chapacuran"] = "sai-cpc", ["Charruan"] = "sai-crn", ["Chatino"] = "omq-cha", ["Chibchan"] = "cba", ["Chimakuan"] = "chi", ["Chinantecan"] = "omq-chi", ["Chinookan"] = "nai-ckn", ["Chitrali"] = "inc-chi", ["Chocoan"] = "sai-chc", ["Chokwe-Luchazi"] = "bnt-clu", ["Chonan"] = "sai-cho", ["Chumashan"] = "nai-chu", ["Circassian"] = "cau-cir", ["Comorian"] = "bnt-com", ["Continental Celtic"] = "cel-con", ["Coosan"] = "nai-coo", ["Cross River"] = "nic-cri", ["Cuicatec"] = "omq-cui", ["Cupan"] = "azc-cup", ["Nhóm ngôn ngữ Dagbani"] = "nic-dag", ["Daju"] = "sdv-daj", ["Dakoid"] = "nic-dak", ["Nhóm ngôn ngữ Dakota"] = "sio-dkt", ["Dalmatian Romance"] = "roa-dal", ["Daly"] = "aus-dal", ["Nhóm ngôn ngữ Dargwa"] = "cau-drg", ["Delta Edoid"] = "alv-dlt", ["Dene-Yeniseian"] = "qfa-dny", ["Dhegihan"] = "sio-dhe", ["Dhimalish"] = "sit-dhi", ["Dida"] = "kro-did", ["Dinka-Nuer"] = "sdv-dnu", ["Dogon"] = "qfa-dgn", ["Downriver Phula"] = "tbq-drp", ["Duru"] = "alv-dur", ["Dyirbalic"] = "aus-dyb", ["East Geelvink Bay"] = "paa-egb", ["East Germanic"] = "gme", ["East Manding"] = "dmn-emn", ["East Ometo"] = "omv-eom", ["East Plateau"] = "nic-ple", ["East Tsezian"] = "cau-ets", ["East-West Upper Cross River"] = "nic-uce", ["Eastern Beboid"] = "nic-bbe", ["Eastern Central Sudanic"] = "csu-ecs", ["Eastern Dardic"] = "inc-dre", ["Eastern Gbaya"] = "alv-gbf", ["Eastern Grassfields"] = "nic-gre", ["Eastern Gurunsi"] = "nic-gne", ["Eastern Hindi"] = "inc-hie", ["Eastern Jebel"] = "sdv-eje", ["Eastern Kiranti"] = "sit-kie", ["Eastern Kru"] = "kro-ekr", ["Eastern Ngbaka"] = "nic-nke", ["Eastern Nilotic"] = "sdv-nie", ["Eastern Oti-Volta"] = "nic-eov", ["Eastern Polynesian"] = "poz-pep", ["Eastern Romance"] = "roa-eas", ["Eastern Samur"] = "cau-esm", ["Eastern Sudanic"] = "sdv", ["Ede"] = "alv-ede", ["Edekiri"] = "alv-edk", ["Edo-Esan-Ora"] = "alv-eeo", ["Ekoid"] = "nic-eko", ["Engan"] = "paa-eng", ["Escarpment Dogon"] = "nic-dge", ["Eskimo"] = "esx-esk", ["Fali"] = "alv-fli", ["Finisterre"] = "ngf-fin", ["French Sign Languages"] = "sgn-fsl", ["Frisian"] = "gmw-fri", ["Fula-Wolof"] = "alv-fwo", ["Fur"] = "ssa-fur", ["Furu"] = "nic-fru", ["Ga-Dangme"] = "alv-gda", ["Gallo-Italic"] = "roa-git", ["Garawan"] = "aus-gar", ["Gbanziri"] = "nic-nkg", ["Gbaya"] = "alv-gba", ["Gelao"] = "qfa-gel", ["German Sign Languages"] = "sgn-gsl", ["Ghana-Togo Mountain"] = "alv-gtm", ["Nhóm ngôn ngữ Goidel"] = "cel-gae", ["Gondi"] = "dra-gon", ["Gondi-Kui"] = "dra-gki", ["Gonga"] = "omv-gon", ["Goroka"] = "ngf-gor", ["Nhóm ngôn ngữ Graeco-Phrygia"] = "ine-grp", ["Grassfields"] = "nic-grf", ["Great Andamanese"] = "qfa-adm", ["Great Lakes Bantu"] = "bnt-glb", ["Greater Siangic"] = "sit-gsi", ["Grebo"] = "kro-grb", ["Guahiban"] = "sai-guh", ["Guaicuruan"] = "sai-guc", ["Guang"] = "alv-gng", ["Guianan"] = "sai-gui", ["Gunwinyguan"] = "aus-gun", ["Gur"] = "nic-gur", ["Gurma"] = "nic-grm", ["Gurunsi"] = "nic-gns", ["Halmahera-Cenderawasih"] = "poz-hce", ["Harákmbut"] = "sai-har", ["Harákmbut-Katukinan"] = "sai-hkt", ["Haya-Jita"] = "bnt-haj", ["Highland Phula"] = "tbq-hph", ["Hill Nubian"] = "nub-hil", ["Hispano-Celtic"] = "cel-his", ["Hmong"] = "hmn", ["Hokan"] = "hok", ["Hrusish"] = "sit-hrs", ["Hurro-Urartian"] = "qfa-hur", ["Ibibio-Efik"] = "nic-ief", ["Idomoid"] = "alv-ido", ["Igboid"] = "alv-igb", ["Ijoid"] = "ijo", ["Insular Indo-Aryan"] = "inc-ins", ["Insular Scandinavian"] = "gmq-ins", ["Inuit"] = "esx-inu", ["Irish Anglo-Norman"] = "gmw-ian", ["Ngữ hệ Iroquois"] = "iro", ["Irula-Muduga"] = "dra-imd", ["Italo-Dalmatian"] = "roa-itd", ["Japanese Sign Languages"] = "sgn-jsl", ["Jarawa"] = "nic-jrw", ["Jarawan"] = "nic-jrn", ["Jarrakan"] = "aus-jar", ["Jera"] = "nic-jer", ["Jicaquean"] = "nai-jcq", ["Jingphoic"] = "sit-jnp", ["Jino"] = "tbq-jin", ["Jirajaran"] = "sai-jir", ["Jogo-Jeri"] = "dmn-jje", ["Jola"] = "alv-jol", ["Jola-Felupe"] = "alv-jfe", ["Jê"] = "sai-jee", ["Ka-Togo"] = "alv-ktg", ["Kaba"] = "csu-kab", ["Kachin-Luic"] = "sit-jpl", ["Kadu"] = "qfa-kad", ["Kainantu-Goroka"] = "paa-kag", ["Kako"] = "bnt-kak", ["Kalahari Khoe"] = "khi-kal", ["Kalamian"] = "phi-kal", ["Kalapuyan"] = "nai-klp", ["Kalenjin"] = "sdv-kln", ["Kambari"] = "nic-kam", ["Kamuku"] = "nic-kmk", ["Karaboro"] = "alv-krb", ["Karnic"] = "aus-kar", ["Kashmiric"] = "inc-kas", ["Katloid"] = "nic-ktl", ["Katukinan"] = "sai-ktk", ["Kavango"] = "bnt-kav", ["Kavango-Southwest Bantu"] = "bnt-ksb", ["Kazhuoish"] = "tbq-kzh", ["Kele"] = "bnt-kel", ["Kele-Tsogo"] = "bnt-kts", ["Keresan"] = "nai-ker", ["Khanty"] = "kca", ["Kho-Bwa"] = "sit-khb", ["Khoe"] = "khi-kho", ["Khoe-Kwadi"] = "khi-kkw", ["Khoekhoe"] = "khi-khk", ["Kikuyu-Kamba"] = "bnt-kka", ["Kilombero"] = "bnt-kil", ["Kim"] = "alv-kim", ["Kimbundu"] = "bnt-kmb", ["Kinnauric"] = "sit-kin", ["Kipchak-Cuman"] = "trk-kcu", ["Kiranti"] = "sit-kir", ["Kissi"] = "alv-kis", ["Kiwaian"] = "paa-kiw", ["Kodagu"] = "dra-kod", ["Kohistani"] = "inc-koh", ["Kolami-Naiki"] = "dra-knk", ["Komisenian"] = "ira-kms", ["Komo-Bira"] = "bnt-kbi", ["Konda-Kui"] = "dra-kki", ["Kongo"] = "bnt-kng", ["Konyak"] = "sit-kon", ["Konyak-Chang"] = "sit-kch", ["Koraga"] = "dra-kor", ["Kpala"] = "nic-nkk", ["Kpwe"] = "bnt-kpw", ["Kra"] = "qfa-kra", ["Kuikuroan"] = "sai-kui", ["Kulango"] = "alv-kul", ["Kuliak"] = "ssa-klk", ["Kunar"] = "inc-kun", ["Kurukh-Malto"] = "dra-kml", ["Kwomtari"] = "paa-kwm", ["Kx'a"] = "khi-kxa", ["Kyirong-Kagate"] = "sit-kyk", ["Kyrgyz-Kipchak"] = "trk-kkp", ["Nhóm ngôn ngữ Lagoon"] = "alv-lag", ["Lahoish"] = "tbq-lho", ["Lahuli-Spiti"] = "sit-las", ["Lakes Plain"] = "paa-lkp", ["Lalo"] = "tbq-lal", ["Lampungic"] = "poz-lgx", ["Land Dayak"] = "day", ["Nhóm ngôn ngữ Latinh-Faliscan"] = "itc-laf", ["Lawoish"] = "tbq-lwo", ["Lebonya"] = "bnt-leb", ["Left May"] = "qfa-mal", ["Lega-Binja"] = "bnt-lgb", ["Leko"] = "alv-lek", ["Leko-Nimbari"] = "alv-lni", ["Lenape"] = "del", ["Lencan"] = "nai-len", ["Lendu"] = "csu-lnd", ["Lezghian"] = "cau-lzg", ["Limba"] = "alv-lim", ["Lipo-Lolopo"] = "tbq-llo", ["Lisoish"] = "tbq-lso", ["Logooli-Kuria"] = "bnt-lok", ["Lotuko-Maa"] = "sdv-lma", ["Low German"] = "gmw-lgm", ["Lower Cross River"] = "nic-lcr", ["Lower Sepik"] = "paa-lsp", ["Luba"] = "bnt-lub", ["Luban"] = "bnt-lbn", ["Luish"] = "sit-luu", ["Lunda"] = "bnt-lun", ["Luo"] = "sdv-luo", ["Luwic"] = "ine-luw", ["Macro-Chibchan"] = "qfa-mch", ["Macro-Jê"] = "sai-mje", ["Nhóm ngôn ngữ Madang"] = "ngf-mad", ["Madiya"] = "dra-mdy", ["Maiduan"] = "nai-mdu", ["Mairasi"] = "paa-mai", ["Makaa"] = "bnt-mka", ["Makaa-Njem"] = "bnt-mnj", ["Makua"] = "bnt-mak", ["Malayalamoid"] = "dra-mal", ["Malto"] = "dra-mlo", ["Nhóm ngôn ngữ Mambiloid"] = "nic-mmb", ["Mamfe"] = "nic-mam", ["Manding"] = "dmn-man", ["Manding-Jogo"] = "dmn-mjo", ["Manding-Mokole"] = "dmn-mmo", ["Manding-Vai"] = "dmn-mva", ["Manenguba"] = "bnt-mne", ["Mangbetu"] = "csu-maa", ["Mangbutu-Lese"] = "csu-mle", ["Maninka"] = "dmn-mnk", ["Mano-Dan"] = "dmn-mda", ["Mao"] = "omv-mao", ["Mapoyan"] = "sai-map", ["Nhóm ngôn ngữ Mari"] = "chm", ["Maringic"] = "sit-mar", ["Masaba-Luhya"] = "bnt-msl", ["Mascoian"] = "sai-mas", ["Mataco-Guaicuru"] = "sai-mgc", ["Matacoan"] = "sai-mtc", ["Mazanderani-Shahmirzadi"] = "ira-msh", ["Mazatecan"] = "omq-maz", ["Mba"] = "nic-mbc", ["Mbaka"] = "nic-nkm", ["Mbam"] = "nic-mba", ["Mbete"] = "bnt-mbt", ["Mbeya"] = "bnt-mby", ["Mbinga"] = "bnt-mbi", ["Mbole-Enya"] = "bnt-mbe", ["Mboshi"] = "bnt-mbo", ["Mboshi-Buja"] = "bnt-mbb", ["Mbugwe-Rangi"] = "bnt-mra", ["Mbum"] = "alv-mbm", ["Mbum-Day"] = "alv-mbd", ["Median"] = "xme", ["Mel"] = "alv-mel", ["Nhóm ngôn ngữ Micronesia"] = "poz-mic", ["Midzu"] = "sit-mdz", ["Mijikenda"] = "bnt-mij", ["Mirndi"] = "aus-mir", ["Mississippi Valley Siouan"] = "sio-msv", ["Missouri River Siouan"] = "sio-mor", ["Misumalpan"] = "nai-min", ["Mixe-Zoquean"] = "nai-miz", ["Mokole"] = "dmn-mok", ["Momo"] = "nic-mom", ["Mondzish"] = "sit-mnz", ["Mongo"] = "bnt-mon", ["Nhóm ngôn ngữ Mordvin"] = "urj-mdv", ["Moru-Madi"] = "csu-mma", ["Moré"] = "nic-mre", ["Mruic"] = "sit-mru", ["Muji"] = "tbq-muj", ["Mumuye"] = "alv-mum", ["Mumuye-Yendang"] = "alv-mye", ["Munji-Yidgha"] = "ira-mny", ["Muran"] = "sai-mur", ["Muria"] = "dra-mur", ["Muskogean"] = "nai-mus", ["Mwika"] = "bnt-mwi", ["Mân"] = "zhx-min", ["Mân Nam"] = "zhx-nan", ["Mân nội địa"] = "zhx-inm", ["Mân ven biển"] = "zhx-com", ["Na-Dene"] = "xnd", ["Na-Togo"] = "alv-ntg", ["Nadahup"] = "sai-nad", ["Naic"] = "sit-nax", ["Naish"] = "sit-nas", ["Nalu"] = "alv-nal", ["Nambikwaran"] = "sai-nmk", ["Nanaic"] = "tuw-nan", ["Nandi-Markweta"] = "sdv-nma", ["Nanga-Walo"] = "nic-nwa", ["Nasoid"] = "tbq-nas", ["Ndzem-Bomwali"] = "bnt-ndb", ["Nenets"] = "yrk", ["New Caledonian"] = "poz-cln", ["Newaric"] = "sit-new", ["Ngayarda"] = "aus-nga", ["Ngbaka"] = "nic-ngk", ["Ngbandi"] = "nic-ngd", ["Ngemba"] = "nic-nge", ["Ngondi-Ngiri"] = "bnt-ngn", ["Nguni"] = "bnt-ngu", ["Nilotic"] = "sdv-nil", ["Nimboran"] = "paa-nim", ["Ninzic"] = "nic-nin", ["Nisoish"] = "tbq-nso", ["Nisu"] = "tbq-nis", ["Nkambe"] = "nic-nka", ["North Athabaskan"] = "ath-nor", ["North Bougainville"] = "paa-nbo", ["North Dravidian"] = "dra-nor", ["North Halmahera"] = "paa-nha", ["Nhóm ngôn ngữ Bắc Iroquois"] = "iro-nor", ["Nhóm ngôn ngữ Bắc Ometo"] = "omv-nom", ["North Plateau Dogon"] = "nic-npd", ["North Sarawakan"] = "poz-swa", ["North Siberian Turkic"] = "trk-nsb", ["North-Central Vanuatu"] = "poz-vnc", ["North-South Upper Cross River"] = "nic-ucn", ["Northeast Bantu"] = "bnt-bne", ["Northeast Coast Bantu"] = "bnt-ncb", ["Northeastern Neo-Aramaic"] = "sem-nna", ["Northern Eastern Sudanic"] = "sdv-nes", ["Northern Great Andamanese"] = "qfa-adn", ["Northern Gurunsi"] = "nic-gnn", ["Northern Jê"] = "sai-nje", ["Northern Luo"] = "sdv-lon", ["Northern Nuristani"] = "nur-nor", ["Northern Ring"] = "nic-rnn", ["Northern Tivoid"] = "nic-tvn", ["Northern Yeniseian"] = "qfa-yno", ["Northwest Kainji"] = "nic-knn", ["Nhóm ngôn ngữ Tây Bắc Edoid"] = "alv-nwd", ["Northwestern Indo-Aryan"] = "inc-nwe", ["Northwestern Mande"] = "dmn-mnw", ["Nubian"] = "nub", ["Nun"] = "nic-nun", ["Nupe-Gbagyi"] = "alv-ngb", ["Nupoid"] = "alv-nup", ["Nuristani"] = "iir-nur", ["Nusoish"] = "tbq-nus", ["Nwa-Beng"] = "dmn-nbe", ["Nyali"] = "bnt-nya", ["Nyanga-Buyi"] = "bnt-nyb", ["Nyima"] = "sdv-nyi", ["Nyoro-Ganda"] = "bnt-nyg", ["Nyulnyulan"] = "aus-nyu", ["Nyun"] = "alv-nyn", ["Nzebi"] = "bnt-nze", ["Occitano-Romance"] = "roa-ocr", ["Ogoni"] = "nic-ogo", ["Ohio Valley Siouan"] = "sio-ohv", ["Ok"] = "ngf-okk", ["Old South Arabian"] = "sem-osa", ["Nhóm ngôn ngữ Ometo"] = "omv-ome", ["Oti-Volta"] = "nic-ovo", ["Oto-Pamean"] = "omq-otp", ["Otomacoan"] = "sai-otm", ["Otomi"] = "oto-otm", ["Otomian"] = "oto", ["Ovambo"] = "bnt-ova", ["Oïl"] = "roa-oil", ["Pacific Coast Athabaskan"] = "ath-pco", ["Pakanic"] = "mkh-pkn", ["Pakawan"] = "nai-pak", ["Palaihnihan"] = "nai-pal", ["Papel"] = "alv-pap", ["Pare"] = "bnt-par", ["Parji-Gadaba"] = "dra-pgd", ["Parukotoan"] = "sai-prk", ["Pashayi"] = "inc-pas", ["Pathan"] = "ira-pat", ["Pauwasi"] = "paa-pau", ["Pekodian"] = "sai-pek", ["Pemongan"] = "sai-pem", ["Pende"] = "bnt-pen", ["Permic"] = "urj-prm", ["Phla-Pherá"] = "alv-pph", ["Phowa"] = "tbq-phw", ["Plains Dogon"] = "nic-pld", ["Plateau Penutian"] = "nai-plp", ["Pomeranian"] = "zlw-pom", ["Pomo-Bomwali"] = "bnt-pob", ["Pomoan"] = "nai-pom", ["Popolocan"] = "omq-pop", ["Potou-Tano"] = "alv-ptn", ["Prakrit"] = "pra", ["Punjabi-Lahnda"] = "inc-pan", ["Qiangic"] = "sit-qia", ["Quan thoại"] = "zhx-man", ["Quảng Châu"] = "zhx-yue", ["Ramu"] = "paa-ram", ["Rashad"] = "nic-ras", ["Rgyalrongic"] = "sit-rgy", ["Rhaeto-Romance"] = "roa-rhe", ["Ring"] = "nic-rng", ["Riverine Phula"] = "tbq-rph", ["Romani"] = "inc-rom", ["Rufiji-Ruvuma"] = "bnt-rur", ["Rukwa"] = "bnt-ruk", ["Rungwe"] = "bnt-run", ["Ruvu"] = "bnt-ruv", ["Ruvuma"] = "bnt-rvm", ["Sabaki"] = "bnt-sab", ["Sabi"] = "bnt-sbi", ["Sahaptian"] = "nai-shp", ["Saharan"] = "ssa-sah", ["Sakan"] = "xsc-sak", ["Sal"] = "tbq-bkj", ["Samo"] = "dmn-sam", ["Samogo"] = "dmn-smg", ["Samur"] = "cau-sam", ["Sanglechi-Ishkashimi"] = "ira-sgi", ["Sara"] = "csu-sar", ["Sawabantu"] = "bnt-saw", ["Sena"] = "bnt-sna", ["Senari"] = "alv-snr", ["Sentani"] = "paa-sen", ["Sere"] = "nic-ser", ["Seuta"] = "bnt-seu", ["Shastan"] = "nai-shs", ["Shi-Havu"] = "bnt-shh", ["Shinaic"] = "inc-shn", ["Shiroro"] = "nic-shi", ["Shona"] = "bnt-sho", ["Shughni-Yazghulami"] = "ira-shy", ["Siberian Turkic"] = "trk-sib", ["Siloid"] = "tbq-sil", ["Sindhi"] = "inc-snd", ["Siouan"] = "sio", ["Siouan-Catawban"] = "nai-sca", ["Sisaala"] = "nic-sis", ["Sko"] = "paa-msk", ["Slavey"] = "den", ["Sogdic"] = "ira-sgc", ["Sogdo-Bactrian"] = "ira-sbc", ["Soko-Kele"] = "bnt-ske", ["Soninke-Bobo"] = "dmn-snb", ["Sorbian"] = "wen", ["Sotho-Tswana"] = "bnt-sts", ["South Bird's Head"] = "ngf-sbh", ["South Bougainville"] = "paa-sbo", ["South Plateau"] = "nic-pls", ["South Siberian Turkic"] = "trk-ssb", ["South Sulawesi"] = "poz-ssw", ["Southeastern Aramaic"] = "sem-ase", ["Southeastern Mande"] = "dmn-mse", ["Southern Bantu"] = "bnt-bso", ["Southern Gbaya"] = "alv-gbs", ["Southern Great Andamanese"] = "qfa-ads", ["Southern Indo-Aryan"] = "inc-sou", ["Southern Jê"] = "sai-sje", ["Southern Luo"] = "sdv-los", ["Southern Nilotic"] = "sdv-nis", ["Southern Nuristani"] = "nur-sou", ["Southern Samur"] = "cau-ssm", ["Southern Yeniseian"] = "qfa-yso", ["Southwest Bantu"] = "bnt-swb", ["Southwest Grassfields"] = "nic-grs", ["Southwestern Edoid"] = "alv-swd", ["Southwestern Mande"] = "dmn-msw", ["Sunda-Sulawesi"] = "poz-sus", ["Suppire-Mamara"] = "alv-sma", ["Susu-Yalunka"] = "dmn-sya", ["Swahili"] = "bnt-swh", ["Ta-Arawakan"] = "awd-taa", ["Tacanan"] = "sai-tac", ["Tagwana-Djimini"] = "alv-tdj", ["Takama"] = "bnt-tkm", ["Takic"] = "azc-tak", ["Talodi"] = "alv-tal", ["Taloid"] = "tbq-tal", ["Taman"] = "sdv-tmn", ["Tamil-Kodagu"] = "dra-tkd", ["Tamil-Malayalam"] = "dra-tml", ["Tamiloid"] = "dra-tam", ["Tangkhul-Maring"] = "sit-tma", ["Tangkic"] = "aus-tnk", ["Tangsa-Nocte"] = "sit-tno", ["Tani"] = "sit-tan", ["Taracahitic"] = "azc-trc", ["Taranoan"] = "sai-tar", ["Tarokoid"] = "nic-tar", ["Tatic"] = "xme-ttc", ["Teke"] = "bnt-tek", ["Teke-Mbede"] = "bnt-tmb", ["Tenda"] = "alv-ten", ["Tequistlatecan"] = "nai-tqn", ["Teso-Turkana"] = "sdv-ttu", ["Tetela"] = "bnt-tet", ["Ticuna-Yuri"] = "sai-tyu", ["Timor-Alor-Pantar"] = "qfa-tap", ["Tocharian"] = "ine-toc", ["Toda-Kota"] = "dra-tkt", ["Tomini-Tolitoli"] = "poz-tot", ["Tor-Kwerba"] = "paa-tkw", ["Torricelli"] = "qfa-tor", ["Totozoquean"] = "nai-tot", ["Ngữ hệ Liên New Guinea"] = "ngf", ["Tsezian"] = "cau-tsz", ["Tshangla"] = "sit-tsk", ["Tsimshianic"] = "nai-tsi", ["Tsogo"] = "bnt-tso", ["Tswa-Ronga"] = "bnt-tsr", ["Tucanoan"] = "sai-tuc", ["Tupi-Guarani"] = "tup-gua", ["Tuu"] = "khi-tuu", ["Nhóm ngôn ngữ Ubangi"] = "nic-ubg", ["Ugric"] = "urj-ugr", ["Upper Cross River"] = "nic-ucr", ["Upriver Phula"] = "tbq-urp", ["Uru-Chipaya"] = "sai-ucp", ["Utian"] = "nai-utn", ["Vai-Kono"] = "dmn-vak", ["Vainakh"] = "cau-vay", ["Vale"] = "csu-val", ["Venezuelan Cariban"] = "sai-ven", ["Waja-Kam"] = "alv-wjk", ["Ngữ hệ Wakashan"] = "wak", ["Wara-Natyoro"] = "alv-wan", ["Wee"] = "kro-wee", ["West Baltic"] = "bat-wes", ["West Dogon"] = "nic-dgw", ["West Himalayish"] = "sit-whm", ["West Manding"] = "dmn-wmn", ["West Mbam"] = "nic-mbw", ["West Papuan"] = "paa-wpa", ["West Tsezian"] = "cau-wts", ["Western Gbaya"] = "alv-gbw", ["Western Gurunsi"] = "nic-gnw", ["Western Hindi"] = "inc-hiw", ["Western Kiranti"] = "sit-kiw", ["Western Kru"] = "kro-wkr", ["Western Mande"] = "dmn-mdw", ["Western Ngbaka"] = "nic-nkw", ["Western Nilotic"] = "sdv-niw", ["Western Oti-Volta"] = "nic-wov", ["Western Pahari"] = "him", ["Western Ring"] = "nic-rnw", ["Western Samur"] = "cau-wsm", ["Wichí"] = "sai-wic", ["Wintuan"] = "nai-wtq", ["Witotoan"] = "sai-wit", ["Worrorran"] = "aus-wor", ["Yaka"] = "bnt-yak", ["Yam"] = "paa-yam", ["Yambasa"] = "nic-ymb", ["Yangmanic"] = "aus-yng", ["Yanomami"] = "sai-ynm", ["Yasa-Kombe"] = "bnt-yko", ["Yeniseian"] = "qfa-yen", ["Yidinyic"] = "aus-yid", ["Yok-Utian"] = "nai-you", ["Yokuts"] = "yok", ["Yolngu"] = "aus-yol", ["Yom-Nawdm"] = "nic-yon", ["Yoruba"] = "alv-yor", ["Yoruboid"] = "alv-yrd", ["Yuat"] = "paa-yua", ["Yuin-Kuric"] = "aus-yuk", ["Yukian"] = "nai-ykn", ["Yukpan"] = "sai-yuk", ["Yukubenic"] = "nic-ykb", ["Yungur"] = "alv-yun", ["Yupik"] = "ypk", ["Zamba-Binza"] = "bnt-zbi", ["Zamucoan"] = "sai-zam", ["Zan"] = "ccs-zan", ["Zande"] = "znd", ["Zaparoan"] = "sai-zap", ["Zapotec"] = "omq-zpc", ["Zapotecan"] = "omq-zap", ["Zeme"] = "sit-zem", ["Ngôn ngữ nhân tạo"] = "art", ["contact"] = "qfa-cnt", ["creole or pidgin"] = "crp", ["mixed"] = "qfa-mix", ["ngôn ngữ cơ tầng"] = "qfa-sub", ["Ngữ hệ Ainu"] = "qfa-ain", ["Ngữ hệ Algic"] = "aql", ["Ngữ hệ Arawak"] = "awd", ["Ngữ hệ Carib"] = "sai-car", ["Ngữ hệ Chukotka-Kamchatka"] = "qfa-cka", ["Ngữ hệ Dravida"] = "dra", ["Ngữ hệ Hmông-Miền"] = "hmx", ["Ngữ hệ Huarpe"] = "sai-hrp", ["Ngữ hệ Hán-Tạng"] = "sit", ["Ngữ hệ Iwaidja"] = "aus-wdj", ["Ngữ hệ Iwam"] = "paa-iwm", ["Ngữ hệ Jivaro"] = "sai-jiv", ["Ngữ hệ Kartvelia"] = "ccs", ["Ngữ hệ Kiowa-Tanoa"] = "nai-kta", ["Ngữ hệ Kra-Dai"] = "qfa-tak", ["Ngữ hệ Maya"] = "myn", ["Ngữ hệ Mông Cổ"] = "xgn", ["Ngữ hệ Nam Á"] = "aav", ["Ngữ hệ Nam Đảo"] = "map", ["Ngữ hệ Nhật Bản-Lưu Cầu"] = "jpx", ["Ngữ hệ Niger-Congo"] = "nic", ["Ngữ hệ Nin-Sahara"] = "ssa", ["Ngữ hệ Oto-Mangue"] = "omq", ["Ngữ hệ Pama–Nyungar"] = "aus-pam", ["Ngữ hệ Pano-Tacana"] = "sai-pat", ["Ngữ hệ Papua"] = "paa", ["Ngữ hệ Phi-Á"] = "afa", ["Ngữ hệ Quechua"] = "qwe", ["Ngữ hệ Salish"] = "sal", ["Ngữ hệ Sepik"] = "paa-sep", ["Ngữ hệ Thượng Tami"] = "paa-brd", ["Ngữ hệ Tiên Ti-Mông Cổ"] = "qfa-xgs", ["Ngữ hệ Totonac"] = "nai-ttn", ["Ngữ hệ Triều Tiên"] = "qfa-kor", ["Ngữ hệ Tungus"] = "tuw", ["Ngữ hệ Tupi"] = "tup", ["Ngữ hệ Turk"] = "trk", ["Ngữ hệ Tyrseni"] = "qfa-tyn", ["Ngữ hệ Tây Bắc Kavkaz"] = "cau-nwc", ["Ngữ hệ Ural"] = "urj", ["Ngữ hệ Ute-Aztec"] = "azc", ["Ngữ hệ Vascon"] = "euq", ["Ngữ hệ Xinca"] = "nai-xin", ["Ngữ hệ Yukaghir"] = "qfa-yuk", ["Ngữ hệ Yuman-Cochimí"] = "nai-yuc", ["Ngữ hệ vùng vịnh Papua"] = "paa-pag", ["Ngữ hệ Önge"] = "qfa-ong", ["Ngữ hệ Đông Bắc Kavkaz"] = "cau-nec", ["Ngữ hệ Ấn-Âu"] = "ine", ["Ngữ tộc Mixtec"] = "omq-mix", ["Nhóm ngôn ngữ Aari"] = "omv-aro", ["Nhóm ngôn ngữ Abenaki-Penobscot"] = "alg-abp", ["Nhóm ngôn ngữ Abkhaz-Abaza"] = "cau-abz", ["Nhóm ngôn ngữ Ai Cập"] = "egx", ["Nhóm ngôn ngữ Albani"] = "sqj", ["Nhóm ngôn ngữ Algonquin"] = "alg", ["Nhóm ngôn ngữ Alumic"] = "nic-alu", ["Nhóm ngôn ngữ Andic"] = "cau-and", ["Nhóm ngôn ngữ Angami-Pochuri"] = "tbq-anp", ["Nhóm ngôn ngữ Angan"] = "ngf-ang", ["Nhóm ngôn ngữ Anh"] = "gmw-ang", ["Nhóm ngôn ngữ Anh-Frisia"] = "gmw-afr", ["Nhóm ngôn ngữ Aram"] = "sem-ara", ["Nhóm ngôn ngữ Aram Tây"] = "sem-arw", ["Nhóm ngôn ngữ Aram Đông"] = "sem-are", ["Nhóm ngôn ngữ Arapahoe"] = "alg-ara", ["Nhóm ngôn ngữ Asli"] = "mkh-asl", ["Nhóm ngôn ngữ Atayal"] = "map-ata", ["Nhóm ngôn ngữ Avar-Andic"] = "cau-ava", ["Nhóm ngôn ngữ Bahnar"] = "mkh-ban", ["Nhóm ngôn ngữ Bahnar Bắc"] = "mkh-nbn", ["Nhóm ngôn ngữ Balt-Slav"] = "ine-bsl", ["Nhóm ngôn ngữ Bantoid"] = "nic-bod", ["Nhóm ngôn ngữ Bantoid-Cross"] = "nic-bcr", ["Nhóm ngôn ngữ Bantu"] = "bnt", ["Nhóm ngôn ngữ Basaa"] = "bnt-bsa", ["Nhóm ngôn ngữ Bengal-Assam"] = "inc-bas", ["Nhóm ngôn ngữ Benue-Congo"] = "nic-bco", ["Nhóm ngôn ngữ Berber"] = "ber", ["Nhóm ngôn ngữ Bihar"] = "inc-bih", ["Nhóm ngôn ngữ Bisa-Busa"] = "dmn-bbu", ["Nhóm ngôn ngữ Bod"] = "sit-bdi", ["Nhóm ngôn ngữ Bod Đông"] = "sit-ebo", ["Nhóm ngôn ngữ Britton"] = "cel-bry", ["Nhóm ngôn ngữ Bungku-Tolaki"] = "poz-btk", ["Nhóm ngôn ngữ Bạch"] = "sit-bai", ["Nhóm ngôn ngữ Bạch Bắc"] = "sit-nba", ["Nhóm ngôn ngữ Bắc Bantoid"] = "nic-bdn", ["Nhóm ngôn ngữ Bắc Borneo"] = "poz-bnn", ["Nhóm ngôn ngữ Bắc Lưu Cầu"] = "jpx-nry", ["Nhóm ngôn ngữ Bắc Ấn-Arya"] = "inc-nor", ["Nhóm ngôn ngữ Bắc-Trung Edoid"] = "alv-nce", ["Nhóm ngôn ngữ Bố Ương"] = "qfa-buy", ["Nhóm ngôn ngữ Bối-Cát Triệu"] = "qfa-bej", ["Nhóm ngôn ngữ Bối-Thái"] = "qfa-bet", ["Nhóm ngôn ngữ Canaan"] = "sem-can", ["Nhóm ngôn ngữ Castilla"] = "roa-cas", ["Nhóm ngôn ngữ Celebes"] = "poz-clb", ["Nhóm ngôn ngữ Celt"] = "cel", ["Nhóm ngôn ngữ Celt hải đảo"] = "cel-ins", ["Nhóm ngôn ngữ Chukotka"] = "qfa-ckn", ["Nhóm ngôn ngữ Châu Đại Dương"] = "poz-oce", ["Nhóm ngôn ngữ Chăm"] = "cmc", ["Nhóm ngôn ngữ Cushit"] = "cus", ["Nhóm ngôn ngữ Cơ Tu"] = "mkh-kat", ["Nhóm ngôn ngữ Dard"] = "inc-dar", ["Nhóm ngôn ngữ Dizi"] = "omv-diz", ["Nhóm ngôn ngữ Edoid"] = "alv-edo", ["Nhóm ngôn ngữ Eskimo-Aleut"] = "esx", ["Nhóm ngôn ngữ Ewenic"] = "tuw-ewe", ["Nhóm ngôn ngữ Finn"] = "urj-fin", ["Nhóm ngôn ngữ Gbe"] = "alv-gbe", ["Nhóm ngôn ngữ German"] = "gem", ["Nhóm ngôn ngữ German Biển Bắc"] = "gmw-nsg", ["Nhóm ngôn ngữ German Bắc"] = "gmq", ["Nhóm ngôn ngữ German Tây"] = "gmw", ["Nhóm ngôn ngữ Gruzia-Zan"] = "ccs-gzn", ["Nhóm ngôn ngữ Heiban"] = "alv-hei", ["Nhóm ngôn ngữ Hlai"] = "qfa-lic", ["Nhóm ngôn ngữ Hà Nhì"] = "tbq-han", ["Nhóm ngôn ngữ Hán"] = "zhx", ["Nhóm ngôn ngữ Hán-Bạch"] = "sit-sba", ["Nhóm ngôn ngữ Hạ Franken"] = "gmw-frk", ["Nhóm ngôn ngữ Iberia-Rôman"] = "roa-ibe", ["Nhóm ngôn ngữ Iran"] = "ira", ["Nhóm ngôn ngữ Jukunoid"] = "nic-jkn", ["Nhóm ngôn ngữ Kaili-Pamona"] = "poz-kal", ["Nhóm ngôn ngữ Kainji"] = "nic-knj", ["Nhóm ngôn ngữ Kannada"] = "dra-kan", ["Nhóm ngôn ngữ Karen"] = "kar", ["Nhóm ngôn ngữ Karluk"] = "trk-kar", ["Nhóm ngôn ngữ Kauru"] = "nic-kau", ["Nhóm ngôn ngữ Kham"] = "sit-kha", ["Nhóm ngôn ngữ Khasi"] = "aav-khs", ["Nhóm ngôn ngữ Khmer"] = "mkh-kmr", ["Nhóm ngôn ngữ Khơ Mú"] = "mkh-khm", ["Nhóm ngôn ngữ Kipchak"] = "trk-kip", ["Nhóm ngôn ngữ Kipchak-Bulgar"] = "trk-kbu", ["Nhóm ngôn ngữ Kipchak-Nogai"] = "trk-kno", ["Nhóm ngôn ngữ Koman"] = "ssa-kom", ["Nhóm ngôn ngữ Kru"] = "kro", ["Nhóm ngôn ngữ Kuki-Chin"] = "tbq-kuk", ["Nhóm ngôn ngữ Kurd"] = "ku", ["Nhóm ngôn ngữ Kutubuan"] = "paa-kut", ["Nhóm ngôn ngữ Kwa"] = "alv-kwa", ["Nhóm ngôn ngữ Ladakh-Balti"] = "sit-lab", ["Nhóm ngôn ngữ Lechite"] = "zlw-lch", ["Nhóm ngôn ngữ Liên Mông Cổ"] = "qfa-xgx", ["Nhóm ngôn ngữ Lô Lô"] = "tbq-lol", ["Nhóm ngôn ngữ Lô Lô Bắc"] = "tbq-nlo", ["Nhóm ngôn ngữ Lô Lô Nam"] = "tbq-slo", ["Nhóm ngôn ngữ Lô Lô Đông Nam"] = "tbq-sel", ["Nhóm ngôn ngữ Lô Lô–Miến"] = "tbq-lob", ["Nhóm ngôn ngữ Lưu Cầu"] = "jpx-ryu", ["Nhóm ngôn ngữ Mande"] = "dmn", ["Nhóm ngôn ngữ Manobo"] = "mno", ["Nhóm ngôn ngữ Mansi"] = "mns", ["Nhóm ngôn ngữ Masa"] = "cdc-mas", ["Nhóm ngôn ngữ Media-Parthia"] = "ira-mpr", ["Nhóm ngôn ngữ Mixtec"] = "omq-mxt", ["Nhóm ngôn ngữ Miến"] = "tbq-brm", ["Nhóm ngôn ngữ Miến-Khương"] = "tbq-buq", ["Nhóm ngôn ngữ Miền"] = "hmx-mie", ["Nhóm ngôn ngữ Monguor"] = "mjg", ["Nhóm ngôn ngữ Muna-Buton"] = "poz-mun", ["Nhóm ngôn ngữ Munda"] = "mun", ["Nhóm ngôn ngữ Mã Lai"] = "poz-mly", ["Nhóm ngôn ngữ Mã Lai-Chăm"] = "poz-mcm", ["Nhóm ngôn ngữ Mã Lai-Sumbawa"] = "poz-msa", ["Nhóm ngôn ngữ Mã Lai-Đa Đảo"] = "poz", ["Nhóm ngôn ngữ Mã Lai-Đa Đảo Trung-Đông"] = "poz-cet", ["Nhóm ngôn ngữ Mã Lai-Đa Đảo Đông"] = "pqe", ["Nhóm ngôn ngữ Môn"] = "mkh-mnc", ["Nhóm ngôn ngữ Môn-Khmer"] = "mkh", ["Nhóm ngôn ngữ Mảng"] = "mkh-mng", ["Nhóm ngôn ngữ Nahua"] = "azc-nah", ["Nhóm ngôn ngữ Nahua Durango"] = "azc-dur", ["Nhóm ngôn ngữ Nahua Huasteca"] = "azc-hua", ["Nhóm ngôn ngữ Nakh"] = "cau-nkh", ["Nhóm ngôn ngữ Nam Bantoid"] = "nic-bds", ["Nhóm ngôn ngữ Nam Cushit"] = "cus-sou", ["Nhóm ngôn ngữ Nam Dravida"] = "dra-sou", ["Nhóm ngôn ngữ Nam Dravida I"] = "dra-sdo", ["Nhóm ngôn ngữ Nam Dravida II"] = "dra-sdt", ["Nhóm ngôn ngữ Nam Lưu Cầu"] = "jpx-sry", ["Nhóm ngôn ngữ Nam Mông Cổ"] = "xgn-sou", ["Nhóm ngôn ngữ Nam Ả Rập hiện đại"] = "sem-sar", ["Nhóm ngôn ngữ Nawiki"] = "awd-nwk", ["Nhóm ngôn ngữ Nicobar"] = "aav-nic", ["Nhóm ngôn ngữ Numic"] = "azc-num", ["Nhóm ngôn ngữ Nung"] = "sit-nng", ["Nhóm ngôn ngữ Nyasa"] = "bnt-nys", ["Nhóm ngôn ngữ Nữ Chân"] = "tuw-jrc", ["Nhóm ngôn ngữ Oghur"] = "trk-ogr", ["Nhóm ngôn ngữ Oghuz"] = "trk-ogz", ["Nhóm ngôn ngữ Omo"] = "omv", ["Nhóm ngôn ngữ Ormur-Parachi"] = "ira-orp", ["Nhóm ngôn ngữ Osco-Umbria"] = "itc-sbl", ["Nhóm ngôn ngữ Pahari"] = "inc-pah", ["Nhóm ngôn ngữ Palaung"] = "mkh-pal", ["Nhóm ngôn ngữ Paman"] = "aus-pmn", ["Nhóm ngôn ngữ Pano"] = "sai-pan", ["Nhóm ngôn ngữ Pear"] = "mkh-pea", ["Nhóm ngôn ngữ Philippines"] = "phi", ["Nhóm ngôn ngữ Piman"] = "azc-pim", ["Nhóm ngôn ngữ Plateau"] = "nic-plt", ["Nhóm ngôn ngữ Platoid"] = "nic-pla", ["Nhóm ngôn ngữ Pnar-Khasi-Lyngngam"] = "aav-pkl", ["Nhóm ngôn ngữ Rajasthan"] = "raj", ["Nhóm ngôn ngữ Rôman"] = "roa", ["Nhóm ngôn ngữ Sa Pa-Thái Tây Nam"] = "tai-sap", ["Nhóm ngôn ngữ Sabah"] = "poz-san", ["Nhóm ngôn ngữ Sac-Fox-Kickapoo"] = "alg-sfk", ["Nhóm ngôn ngữ Saka-Wakhi"] = "xsc-skw", ["Nhóm ngôn ngữ Saluan-Banggai"] = "poz-slb", ["Nhóm ngôn ngữ Sama-Bajaw"] = "poz-sbj", ["Nhóm ngôn ngữ Sami"] = "smi", ["Nhóm ngôn ngữ Samoyed"] = "syd", ["Nhóm ngôn ngữ Sarmatia"] = "xsc-sar", ["Nhóm ngôn ngữ Savanna"] = "alv-sav", ["Nhóm ngôn ngữ Scythia"] = "xsc", ["Nhóm ngôn ngữ Selkup"] = "sel", ["Nhóm ngôn ngữ Semit"] = "sem", ["Nhóm ngôn ngữ Semit Ethiopia"] = "sem-eth", ["Nhóm ngôn ngữ Semit Trung"] = "sem-cen", ["Nhóm ngôn ngữ Semit Tây"] = "sem-wes", ["Nhóm ngôn ngữ Semit Tây Bắc"] = "sem-nwe", ["Nhóm ngôn ngữ Semit Đông"] = "sem-eas", ["Nhóm ngôn ngữ Senegambia"] = "alv-sng", ["Nhóm ngôn ngữ Senufo"] = "alv-snf", ["Nhóm ngôn ngữ Shirongol"] = "xgn-shr", ["Nhóm ngôn ngữ Shughni-Roshani"] = "ira-shr", ["Nhóm ngôn ngữ Shughni-Yazghulami-Munji"] = "ira-sym", ["Nhóm ngôn ngữ Sira"] = "bnt-sir", ["Nhóm ngôn ngữ Slav Nam"] = "zls", ["Nhóm ngôn ngữ Slav Tây"] = "zlw", ["Nhóm ngôn ngữ Slav Đông"] = "zle", ["Nhóm ngôn ngữ Somali"] = "cus-som", ["Nhóm ngôn ngữ Songhay"] = "son", ["Nhóm ngôn ngữ Talodi-Heiban"] = "alv-the", ["Nhóm ngôn ngữ Tamang"] = "sit-tam", ["Nhóm ngôn ngữ Tamil-Kannada"] = "dra-tkn", ["Nhóm ngôn ngữ Tangkhul"] = "sit-tng", ["Nhóm ngôn ngữ Tchad"] = "cdc", ["Nhóm ngôn ngữ Telugu"] = "dra-tel", ["Nhóm ngôn ngữ Thái"] = "tai", ["Nhóm ngôn ngữ Thái Bắc"] = "tai-nor", ["Nhóm ngôn ngữ Thái Sùng Tả"] = "tai-cho", ["Nhóm ngôn ngữ Thái Trung tâm"] = "tai-cen", ["Nhóm ngôn ngữ Thái Tây Nam"] = "tai-swe", ["Nhóm ngôn ngữ Thái-Long"] = "sit-cln", ["Nhóm ngôn ngữ Thổ Gia"] = "sit-tja", ["Nhóm ngôn ngữ Timor"] = "poz-tim", ["Nhóm ngôn ngữ Tivoid"] = "nic-tiv", ["Nhóm ngôn ngữ Tiểu Á"] = "ine-ana", ["Nhóm ngôn ngữ Triqui"] = "omq-tri", ["Nhóm ngôn ngữ Trung Cushit"] = "cus-cen", ["Nhóm ngôn ngữ Trung Mông Cổ"] = "xgn-cen", ["Nhóm ngôn ngữ Trung Plateau"] = "nic-plc", ["Nhóm ngôn ngữ Trung Tchad"] = "cdc-cbm", ["Nhóm ngôn ngữ Trung Thái Bình Dương"] = "poz-pcc", ["Nhóm ngôn ngữ Trung-Đông Châu Đại Dương"] = "poz-occ", ["Nhóm ngôn ngữ Tsou"] = "map-tsu", ["Nhóm ngôn ngữ Tulu-Koraga"] = "dra-tlk", ["Nhóm ngôn ngữ Turk chung"] = "trk-cmn", ["Nhóm ngôn ngữ Tày"] = "tai-tay", ["Nhóm ngôn ngữ Tân Aram Trung"] = "sem-cna", ["Nhóm ngôn ngữ Tây Barito"] = "poz-brw", ["Nhóm ngôn ngữ Tây Britton"] = "cel-brw", ["Nhóm ngôn ngữ Tây Bắc Iran"] = "ira-nwi", ["Nhóm ngôn ngữ Tây Bắc Sumatra"] = "poz-nws", ["Nhóm ngôn ngữ Tây Châu Đại Dương"] = "poz-ocw", ["Nhóm ngôn ngữ Tây Iran"] = "ira-wes", ["Nhóm ngôn ngữ Tây Nam Britton"] = "cel-brs", ["Nhóm ngôn ngữ Tây Nam Iran"] = "ira-swi", ["Nhóm ngôn ngữ Tây Nam Pama–Nyungar"] = "aus-psw", ["Nhóm ngôn ngữ Tây Rôman"] = "roa-wes", ["Nhóm ngôn ngữ Tây Scandinavia"] = "gmq-wes", ["Nhóm ngôn ngữ Tây Tchad"] = "cdc-wst", ["Nhóm ngôn ngữ Tây Ấn-Aryan"] = "inc-wes", ["Nhóm ngôn ngữ Tạng"] = "sit-tib", ["Nhóm ngôn ngữ Tạng-Miến"] = "tbq", ["Nhóm ngôn ngữ Udeghe"] = "tuw-udg", ["Nhóm ngôn ngữ Việt"] = "mkh-vie", ["Nhóm ngôn ngữ Volta-Congo"] = "nic-vco", ["Nhóm ngôn ngữ Volta-Niger"] = "alv-von", ["Nhóm ngôn ngữ Văn Ma-Thái Tây Nam"] = "tai-wen", ["Nhóm ngôn ngữ Wotu-Wolio"] = "poz-wot", ["Nhóm ngôn ngữ Yekhee"] = "alv-yek", ["Nhóm ngôn ngữ Zaza-Goran"] = "ira-zgr", ["Nhóm ngôn ngữ biệt lập"] = "qfa-iso", ["Nhóm ngôn ngữ gốc Balt"] = "bat", ["Nhóm ngôn ngữ gốc Hy Lạp"] = "grk", ["Nhóm ngôn ngữ gốc Slav"] = "sla", ["Nhóm ngôn ngữ gốc Ý"] = "itc", ["Nhóm ngôn ngữ Ý-Tây Rôman"] = "roa-iwr", ["Nhóm ngôn ngữ Đa Đảo"] = "poz-pol", ["Nhóm ngôn ngữ Đa Đảo hạt nhân"] = "poz-pnp", ["Nhóm ngôn ngữ Đông Algonquin"] = "alg-eas", ["Nhóm ngôn ngữ Đông Balt"] = "bat-eas", ["Nhóm ngôn ngữ Đông Barito"] = "poz-bre", ["Nhóm ngôn ngữ Đông Bắc Iran"] = "ira-nei", ["Nhóm ngôn ngữ Đông Cushit"] = "cus-eas", ["Nhóm ngôn ngữ Đông Cushit Cao nguyên"] = "cus-hec", ["Nhóm ngôn ngữ Đông Kainji"] = "nic-kne", ["Nhóm ngôn ngữ Đông Mande"] = "dmn-mde", ["Nhóm ngôn ngữ Đông Nam Iran"] = "ira-sei", ["Nhóm ngôn ngữ Đông Nam Solomon"] = "poz-sls", ["Nhóm ngôn ngữ Đông Scandinavia"] = "gmq-eas", ["Nhóm ngôn ngữ Đông Tchad"] = "cdc-est", ["Nhóm ngôn ngữ Đông Ấn-Arya"] = "inc-eas", ["Nhóm ngôn ngữ Đại Bạch"] = "sit-mba", ["Nhóm ngôn ngữ Đại Magar"] = "sit-gma", ["Nhóm ngôn ngữ Đại Tây Dương-Congo"] = "alv", ["Nhóm ngôn ngữ Động-Thủy"] = "qfa-kms", ["Nhóm ngôn ngữ Đức cao địa"] = "gmw-hgm", ["Nhóm ngôn ngữ Ả Rập"] = "sem-arb", ["Nhóm ngôn ngữ Ấn-Arya"] = "inc", ["Nhóm ngôn ngữ Ấn-Arya cổ"] = "inc-old", ["Nhóm ngôn ngữ Ấn-Arya trung đại"] = "inc-mid", ["Nhóm ngôn ngữ Ấn-Iran"] = "iir", ["not a family"] = "qfa-not", ["sign"] = "sgn", ["Tiếng Hindustan"] = "inc-hnd", ["Nhóm ngôn ngữ Iran trung đại"] = "ira-mid", } ceah30o46dfqn0gj504hcxzsnv1kmgt 2571756 2571720 2026-10-18T16:52:40Z Hiyuune 50834 2571756 Scribunto text/plain return { ["Adamawa"] = "alv-ada", ["Admiralty Islands"] = "poz-aay", ["Aizi"] = "kro-aiz", ["Alacalufan"] = "aqa", ["Almora"] = "sit-alm", ["Ao"] = "sit-aao", ["Apachean"] = "apa", ["Arafundi"] = "paa-arf", ["Arai-Samaia"] = "paa-asa", ["Arandic"] = "aus-rnd", ["Arauan"] = "auf", ["Araucanian"] = "sai-ara", ["Nhóm ngôn ngữ Armenia"] = "hyx", ["Arnhem"] = "aus-arn", ["Asturleonese"] = "roa-asl", ["Athabaskan"] = "ath", ["Axioid"] = "tbq-axi", ["Ayere-Ahan"] = "alv-aah", ["Aymaran"] = "sai-aym", ["Bafia"] = "bnt-baf", ["Bafo-Bonkeng"] = "bnt-bbo", ["Baga"] = "alv-bag", ["Bagirmi"] = "csu-bgr", ["Baining"] = "paa-bng", ["Bak"] = "alv-bak", ["Baka"] = "nic-nkb", ["Nhóm ngôn ngữ Bali-Sasak-Sumbawa"] = "poz-bss", ["Bambukic"] = "alv-bam", ["Bamileke"] = "bai", ["Nhóm ngôn ngữ Banda"] = "bad", ["Bangi-Moi"] = "bnt-bmo", ["Bangi-Ntomba"] = "bnt-bnm", ["Bangi-Tetela"] = "bnt-bte", ["Banyum"] = "alv-bny", ["Barbacoan"] = "sai-bar", ["Bari"] = "sdv-bri", ["Basa"] = "nic-bas", ["Batak"] = "btk", ["Bati-Angba"] = "bnt-bta", ["Be"] = "qfa-onb", ["Beboid"] = "nic-beb", ["Bekwilic"] = "bnt-bek", ["Bena-Kinga"] = "bnt-bki", ["Bendi"] = "nic-ben", ["Beromic"] = "nic-beo", ["Beti"] = "bnt-btb", ["Bhil"] = "inc-bhi", ["Bi-Ka"] = "tbq-bka", ["Bikwin-Jen"] = "alv-bwj", ["Birri-Kresh"] = "csu-bkr", ["Bisoid"] = "tbq-bis", ["Boan"] = "bnt-boa", ["Bodo-Garo"] = "tbq-bdg", ["Boma-Dzing"] = "bnt-bdz", ["Bongo-Bagirmi"] = "csu-bba", ["Bongo-Baka"] = "csu-bbk", ["Boran"] = "sai-bor", ["Botatwe"] = "bnt-bot", ["Bua"] = "alv-bua", ["Buja-Ngombe"] = "bnt-bun", ["Buli-Koma"] = "nic-buk", ["Bunuban"] = "aus-bub", ["Bushoong"] = "bnt-bsh", ["Bwa"] = "nic-bwa", ["Bété"] = "kro-bet", ["Bình thoại"] = "zhx-pin", ["Caddoan"] = "cdd", ["Cahuapanan"] = "sai-cah", ["Cangin"] = "alv-cng", ["Caspian"] = "ira-csp", ["Catacaoan"] = "sai-ctc", ["Catawban"] = "nai-cat", ["Central Banda"] = "bad-cnt", ["Central Delta"] = "nic-cde", ["Central Dravidian"] = "dra-cen", ["Central Great Andamanese"] = "qfa-adc", ["Central Indo-Aryan"] = "inc-cen", ["Central Iranian"] = "ira-cen", ["Central Jê"] = "sai-cje", ["Central Kiranti"] = "sit-kic", ["Central Maluku"] = "poz-cma", ["Central Mande"] = "dmn-mdc", ["Nhóm ngôn ngữ Trung New South Wales"] = "aus-cww", ["Central Ring"] = "nic-rnc", ["Nhóm ngôn ngữ Trung Sudan"] = "csu", ["Central Tano"] = "alv-ctn", ["Central Teke"] = "bnt-tkc", ["Central Tivoid"] = "nic-tvc", ["Cerrado"] = "sai-cer", ["Chaga"] = "bnt-chg", ["Chaga-Taita"] = "bnt-cht", ["Chapacuran"] = "sai-cpc", ["Charruan"] = "sai-crn", ["Chatino"] = "omq-cha", ["Chibchan"] = "cba", ["Chimakuan"] = "chi", ["Chinantecan"] = "omq-chi", ["Chinookan"] = "nai-ckn", ["Chitrali"] = "inc-chi", ["Chocoan"] = "sai-chc", ["Chokwe-Luchazi"] = "bnt-clu", ["Chonan"] = "sai-cho", ["Chumashan"] = "nai-chu", ["Circassian"] = "cau-cir", ["Comorian"] = "bnt-com", ["Continental Celtic"] = "cel-con", ["Coosan"] = "nai-coo", ["Cross River"] = "nic-cri", ["Cuicatec"] = "omq-cui", ["Cupan"] = "azc-cup", ["Nhóm ngôn ngữ Dagbani"] = "nic-dag", ["Daju"] = "sdv-daj", ["Dakoid"] = "nic-dak", ["Nhóm ngôn ngữ Dakota"] = "sio-dkt", ["Dalmatian Romance"] = "roa-dal", ["Daly"] = "aus-dal", ["Nhóm ngôn ngữ Dargwa"] = "cau-drg", ["Delta Edoid"] = "alv-dlt", ["Dene-Yeniseian"] = "qfa-dny", ["Dhegihan"] = "sio-dhe", ["Dhimalish"] = "sit-dhi", ["Dida"] = "kro-did", ["Dinka-Nuer"] = "sdv-dnu", ["Dogon"] = "qfa-dgn", ["Downriver Phula"] = "tbq-drp", ["Duru"] = "alv-dur", ["Dyirbalic"] = "aus-dyb", ["East Geelvink Bay"] = "paa-egb", ["East Germanic"] = "gme", ["East Manding"] = "dmn-emn", ["East Ometo"] = "omv-eom", ["East Plateau"] = "nic-ple", ["East Tsezian"] = "cau-ets", ["East-West Upper Cross River"] = "nic-uce", ["Eastern Beboid"] = "nic-bbe", ["Eastern Central Sudanic"] = "csu-ecs", ["Eastern Dardic"] = "inc-dre", ["Eastern Gbaya"] = "alv-gbf", ["Eastern Grassfields"] = "nic-gre", ["Eastern Gurunsi"] = "nic-gne", ["Eastern Hindi"] = "inc-hie", ["Eastern Jebel"] = "sdv-eje", ["Eastern Kiranti"] = "sit-kie", ["Eastern Kru"] = "kro-ekr", ["Eastern Ngbaka"] = "nic-nke", ["Eastern Nilotic"] = "sdv-nie", ["Eastern Oti-Volta"] = "nic-eov", ["Eastern Polynesian"] = "poz-pep", ["Eastern Romance"] = "roa-eas", ["Eastern Samur"] = "cau-esm", ["Eastern Sudanic"] = "sdv", ["Ede"] = "alv-ede", ["Edekiri"] = "alv-edk", ["Edo-Esan-Ora"] = "alv-eeo", ["Ekoid"] = "nic-eko", ["Engan"] = "paa-eng", ["Escarpment Dogon"] = "nic-dge", ["Eskimo"] = "esx-esk", ["Fali"] = "alv-fli", ["Finisterre"] = "ngf-fin", ["French Sign Languages"] = "sgn-fsl", ["Frisian"] = "gmw-fri", ["Fula-Wolof"] = "alv-fwo", ["Fur"] = "ssa-fur", ["Furu"] = "nic-fru", ["Ga-Dangme"] = "alv-gda", ["Gallo-Italic"] = "roa-git", ["Garawan"] = "aus-gar", ["Gbanziri"] = "nic-nkg", ["Gbaya"] = "alv-gba", ["Gelao"] = "qfa-gel", ["German Sign Languages"] = "sgn-gsl", ["Ghana-Togo Mountain"] = "alv-gtm", ["Nhóm ngôn ngữ Goidel"] = "cel-gae", ["Gondi"] = "dra-gon", ["Gondi-Kui"] = "dra-gki", ["Gonga"] = "omv-gon", ["Goroka"] = "ngf-gor", ["Nhóm ngôn ngữ Graeco-Phrygia"] = "ine-grp", ["Grassfields"] = "nic-grf", ["Great Andamanese"] = "qfa-adm", ["Great Lakes Bantu"] = "bnt-glb", ["Greater Siangic"] = "sit-gsi", ["Grebo"] = "kro-grb", ["Guahiban"] = "sai-guh", ["Guaicuruan"] = "sai-guc", ["Guang"] = "alv-gng", ["Guianan"] = "sai-gui", ["Gunwinyguan"] = "aus-gun", ["Gur"] = "nic-gur", ["Gurma"] = "nic-grm", ["Gurunsi"] = "nic-gns", ["Halmahera-Cenderawasih"] = "poz-hce", ["Harákmbut"] = "sai-har", ["Harákmbut-Katukinan"] = "sai-hkt", ["Haya-Jita"] = "bnt-haj", ["Highland Phula"] = "tbq-hph", ["Hill Nubian"] = "nub-hil", ["Hispano-Celtic"] = "cel-his", ["Hmong"] = "hmn", ["Hokan"] = "hok", ["Hrusish"] = "sit-hrs", ["Hurro-Urartian"] = "qfa-hur", ["Ibibio-Efik"] = "nic-ief", ["Idomoid"] = "alv-ido", ["Igboid"] = "alv-igb", ["Ijoid"] = "ijo", ["Insular Indo-Aryan"] = "inc-ins", ["Insular Scandinavian"] = "gmq-ins", ["Inuit"] = "esx-inu", ["Irish Anglo-Norman"] = "gmw-ian", ["Ngữ hệ Iroquois"] = "iro", ["Irula-Muduga"] = "dra-imd", ["Italo-Dalmatian"] = "roa-itd", ["Japanese Sign Languages"] = "sgn-jsl", ["Jarawa"] = "nic-jrw", ["Jarawan"] = "nic-jrn", ["Jarrakan"] = "aus-jar", ["Jera"] = "nic-jer", ["Jicaquean"] = "nai-jcq", ["Jingphoic"] = "sit-jnp", ["Jino"] = "tbq-jin", ["Jirajaran"] = "sai-jir", ["Jogo-Jeri"] = "dmn-jje", ["Jola"] = "alv-jol", ["Jola-Felupe"] = "alv-jfe", ["Jê"] = "sai-jee", ["Ka-Togo"] = "alv-ktg", ["Kaba"] = "csu-kab", ["Kachin-Luic"] = "sit-jpl", ["Kadu"] = "qfa-kad", ["Kainantu-Goroka"] = "paa-kag", ["Kako"] = "bnt-kak", ["Kalahari Khoe"] = "khi-kal", ["Kalamian"] = "phi-kal", ["Kalapuyan"] = "nai-klp", ["Kalenjin"] = "sdv-kln", ["Kambari"] = "nic-kam", ["Kamuku"] = "nic-kmk", ["Karaboro"] = "alv-krb", ["Karnic"] = "aus-kar", ["Kashmiric"] = "inc-kas", ["Katloid"] = "nic-ktl", ["Katukinan"] = "sai-ktk", ["Kavango"] = "bnt-kav", ["Kavango-Southwest Bantu"] = "bnt-ksb", ["Kazhuoish"] = "tbq-kzh", ["Kele"] = "bnt-kel", ["Kele-Tsogo"] = "bnt-kts", ["Keresan"] = "nai-ker", ["Khanty"] = "kca", ["Kho-Bwa"] = "sit-khb", ["Khoe"] = "khi-kho", ["Khoe-Kwadi"] = "khi-kkw", ["Khoekhoe"] = "khi-khk", ["Kikuyu-Kamba"] = "bnt-kka", ["Kilombero"] = "bnt-kil", ["Kim"] = "alv-kim", ["Kimbundu"] = "bnt-kmb", ["Kinnauric"] = "sit-kin", ["Kipchak-Cuman"] = "trk-kcu", ["Kiranti"] = "sit-kir", ["Kissi"] = "alv-kis", ["Kiwaian"] = "paa-kiw", ["Kodagu"] = "dra-kod", ["Kohistani"] = "inc-koh", ["Kolami-Naiki"] = "dra-knk", ["Komisenian"] = "ira-kms", ["Komo-Bira"] = "bnt-kbi", ["Konda-Kui"] = "dra-kki", ["Kongo"] = "bnt-kng", ["Konyak"] = "sit-kon", ["Konyak-Chang"] = "sit-kch", ["Koraga"] = "dra-kor", ["Kpala"] = "nic-nkk", ["Kpwe"] = "bnt-kpw", ["Kra"] = "qfa-kra", ["Kuikuroan"] = "sai-kui", ["Kulango"] = "alv-kul", ["Kuliak"] = "ssa-klk", ["Kunar"] = "inc-kun", ["Kurukh-Malto"] = "dra-kml", ["Kwomtari"] = "paa-kwm", ["Kx'a"] = "khi-kxa", ["Kyirong-Kagate"] = "sit-kyk", ["Kyrgyz-Kipchak"] = "trk-kkp", ["Nhóm ngôn ngữ Lagoon"] = "alv-lag", ["Lahoish"] = "tbq-lho", ["Lahuli-Spiti"] = "sit-las", ["Lakes Plain"] = "paa-lkp", ["Lalo"] = "tbq-lal", ["Lampungic"] = "poz-lgx", ["Land Dayak"] = "day", ["Nhóm ngôn ngữ Latinh-Faliscan"] = "itc-laf", ["Lawoish"] = "tbq-lwo", ["Lebonya"] = "bnt-leb", ["Left May"] = "qfa-mal", ["Lega-Binja"] = "bnt-lgb", ["Leko"] = "alv-lek", ["Leko-Nimbari"] = "alv-lni", ["Lenape"] = "del", ["Lencan"] = "nai-len", ["Lendu"] = "csu-lnd", ["Lezghian"] = "cau-lzg", ["Limba"] = "alv-lim", ["Lipo-Lolopo"] = "tbq-llo", ["Lisoish"] = "tbq-lso", ["Logooli-Kuria"] = "bnt-lok", ["Lotuko-Maa"] = "sdv-lma", ["Low German"] = "gmw-lgm", ["Lower Cross River"] = "nic-lcr", ["Lower Sepik"] = "paa-lsp", ["Luba"] = "bnt-lub", ["Luban"] = "bnt-lbn", ["Luish"] = "sit-luu", ["Lunda"] = "bnt-lun", ["Luo"] = "sdv-luo", ["Luwic"] = "ine-luw", ["Macro-Chibchan"] = "qfa-mch", ["Macro-Jê"] = "sai-mje", ["Nhóm ngôn ngữ Madang"] = "ngf-mad", ["Madiya"] = "dra-mdy", ["Maiduan"] = "nai-mdu", ["Mairasi"] = "paa-mai", ["Makaa"] = "bnt-mka", ["Makaa-Njem"] = "bnt-mnj", ["Makua"] = "bnt-mak", ["Nhóm ngôn ngữ Malayalam"] = "dra-mal", ["Malto"] = "dra-mlo", ["Nhóm ngôn ngữ Mambiloid"] = "nic-mmb", ["Mamfe"] = "nic-mam", ["Manding"] = "dmn-man", ["Manding-Jogo"] = "dmn-mjo", ["Manding-Mokole"] = "dmn-mmo", ["Manding-Vai"] = "dmn-mva", ["Manenguba"] = "bnt-mne", ["Mangbetu"] = "csu-maa", ["Mangbutu-Lese"] = "csu-mle", ["Maninka"] = "dmn-mnk", ["Mano-Dan"] = "dmn-mda", ["Mao"] = "omv-mao", ["Mapoyan"] = "sai-map", ["Nhóm ngôn ngữ Mari"] = "chm", ["Maringic"] = "sit-mar", ["Masaba-Luhya"] = "bnt-msl", ["Mascoian"] = "sai-mas", ["Mataco-Guaicuru"] = "sai-mgc", ["Matacoan"] = "sai-mtc", ["Mazanderani-Shahmirzadi"] = "ira-msh", ["Mazatecan"] = "omq-maz", ["Mba"] = "nic-mbc", ["Mbaka"] = "nic-nkm", ["Mbam"] = "nic-mba", ["Mbete"] = "bnt-mbt", ["Mbeya"] = "bnt-mby", ["Mbinga"] = "bnt-mbi", ["Mbole-Enya"] = "bnt-mbe", ["Mboshi"] = "bnt-mbo", ["Mboshi-Buja"] = "bnt-mbb", ["Mbugwe-Rangi"] = "bnt-mra", ["Mbum"] = "alv-mbm", ["Mbum-Day"] = "alv-mbd", ["Median"] = "xme", ["Mel"] = "alv-mel", ["Nhóm ngôn ngữ Micronesia"] = "poz-mic", ["Midzu"] = "sit-mdz", ["Mijikenda"] = "bnt-mij", ["Mirndi"] = "aus-mir", ["Mississippi Valley Siouan"] = "sio-msv", ["Missouri River Siouan"] = "sio-mor", ["Misumalpan"] = "nai-min", ["Mixe-Zoquean"] = "nai-miz", ["Mokole"] = "dmn-mok", ["Momo"] = "nic-mom", ["Mondzish"] = "sit-mnz", ["Mongo"] = "bnt-mon", ["Nhóm ngôn ngữ Mordvin"] = "urj-mdv", ["Moru-Madi"] = "csu-mma", ["Moré"] = "nic-mre", ["Mruic"] = "sit-mru", ["Muji"] = "tbq-muj", ["Mumuye"] = "alv-mum", ["Mumuye-Yendang"] = "alv-mye", ["Munji-Yidgha"] = "ira-mny", ["Muran"] = "sai-mur", ["Muria"] = "dra-mur", ["Muskogean"] = "nai-mus", ["Mwika"] = "bnt-mwi", ["Mân"] = "zhx-min", ["Mân Nam"] = "zhx-nan", ["Mân nội địa"] = "zhx-inm", ["Mân ven biển"] = "zhx-com", ["Na-Dene"] = "xnd", ["Na-Togo"] = "alv-ntg", ["Nadahup"] = "sai-nad", ["Naic"] = "sit-nax", ["Naish"] = "sit-nas", ["Nalu"] = "alv-nal", ["Nambikwaran"] = "sai-nmk", ["Nanaic"] = "tuw-nan", ["Nandi-Markweta"] = "sdv-nma", ["Nanga-Walo"] = "nic-nwa", ["Nasoid"] = "tbq-nas", ["Ndzem-Bomwali"] = "bnt-ndb", ["Nenets"] = "yrk", ["New Caledonian"] = "poz-cln", ["Newaric"] = "sit-new", ["Ngayarda"] = "aus-nga", ["Ngbaka"] = "nic-ngk", ["Ngbandi"] = "nic-ngd", ["Ngemba"] = "nic-nge", ["Ngondi-Ngiri"] = "bnt-ngn", ["Nguni"] = "bnt-ngu", ["Nilotic"] = "sdv-nil", ["Nimboran"] = "paa-nim", ["Ninzic"] = "nic-nin", ["Nisoish"] = "tbq-nso", ["Nisu"] = "tbq-nis", ["Nkambe"] = "nic-nka", ["North Athabaskan"] = "ath-nor", ["North Bougainville"] = "paa-nbo", ["North Dravidian"] = "dra-nor", ["North Halmahera"] = "paa-nha", ["Nhóm ngôn ngữ Bắc Iroquois"] = "iro-nor", ["Nhóm ngôn ngữ Bắc Ometo"] = "omv-nom", ["North Plateau Dogon"] = "nic-npd", ["North Sarawakan"] = "poz-swa", ["North Siberian Turkic"] = "trk-nsb", ["North-Central Vanuatu"] = "poz-vnc", ["North-South Upper Cross River"] = "nic-ucn", ["Northeast Bantu"] = "bnt-bne", ["Northeast Coast Bantu"] = "bnt-ncb", ["Northeastern Neo-Aramaic"] = "sem-nna", ["Northern Eastern Sudanic"] = "sdv-nes", ["Northern Great Andamanese"] = "qfa-adn", ["Northern Gurunsi"] = "nic-gnn", ["Northern Jê"] = "sai-nje", ["Northern Luo"] = "sdv-lon", ["Northern Nuristani"] = "nur-nor", ["Northern Ring"] = "nic-rnn", ["Northern Tivoid"] = "nic-tvn", ["Northern Yeniseian"] = "qfa-yno", ["Northwest Kainji"] = "nic-knn", ["Nhóm ngôn ngữ Tây Bắc Edoid"] = "alv-nwd", ["Northwestern Indo-Aryan"] = "inc-nwe", ["Northwestern Mande"] = "dmn-mnw", ["Nubian"] = "nub", ["Nun"] = "nic-nun", ["Nupe-Gbagyi"] = "alv-ngb", ["Nupoid"] = "alv-nup", ["Nuristani"] = "iir-nur", ["Nusoish"] = "tbq-nus", ["Nwa-Beng"] = "dmn-nbe", ["Nyali"] = "bnt-nya", ["Nyanga-Buyi"] = "bnt-nyb", ["Nyima"] = "sdv-nyi", ["Nyoro-Ganda"] = "bnt-nyg", ["Nyulnyulan"] = "aus-nyu", ["Nyun"] = "alv-nyn", ["Nzebi"] = "bnt-nze", ["Occitano-Romance"] = "roa-ocr", ["Ogoni"] = "nic-ogo", ["Ohio Valley Siouan"] = "sio-ohv", ["Ok"] = "ngf-okk", ["Old South Arabian"] = "sem-osa", ["Nhóm ngôn ngữ Ometo"] = "omv-ome", ["Oti-Volta"] = "nic-ovo", ["Oto-Pamean"] = "omq-otp", ["Otomacoan"] = "sai-otm", ["Otomi"] = "oto-otm", ["Otomian"] = "oto", ["Ovambo"] = "bnt-ova", ["Oïl"] = "roa-oil", ["Pacific Coast Athabaskan"] = "ath-pco", ["Pakanic"] = "mkh-pkn", ["Pakawan"] = "nai-pak", ["Palaihnihan"] = "nai-pal", ["Papel"] = "alv-pap", ["Pare"] = "bnt-par", ["Parji-Gadaba"] = "dra-pgd", ["Parukotoan"] = "sai-prk", ["Pashayi"] = "inc-pas", ["Pathan"] = "ira-pat", ["Pauwasi"] = "paa-pau", ["Pekodian"] = "sai-pek", ["Pemongan"] = "sai-pem", ["Pende"] = "bnt-pen", ["Permic"] = "urj-prm", ["Phla-Pherá"] = "alv-pph", ["Phowa"] = "tbq-phw", ["Plains Dogon"] = "nic-pld", ["Plateau Penutian"] = "nai-plp", ["Pomeranian"] = "zlw-pom", ["Pomo-Bomwali"] = "bnt-pob", ["Pomoan"] = "nai-pom", ["Popolocan"] = "omq-pop", ["Potou-Tano"] = "alv-ptn", ["Prakrit"] = "pra", ["Punjabi-Lahnda"] = "inc-pan", ["Qiangic"] = "sit-qia", ["Quan thoại"] = "zhx-man", ["Quảng Châu"] = "zhx-yue", ["Ramu"] = "paa-ram", ["Rashad"] = "nic-ras", ["Rgyalrongic"] = "sit-rgy", ["Rhaeto-Romance"] = "roa-rhe", ["Ring"] = "nic-rng", ["Riverine Phula"] = "tbq-rph", ["Romani"] = "inc-rom", ["Rufiji-Ruvuma"] = "bnt-rur", ["Rukwa"] = "bnt-ruk", ["Rungwe"] = "bnt-run", ["Ruvu"] = "bnt-ruv", ["Ruvuma"] = "bnt-rvm", ["Sabaki"] = "bnt-sab", ["Sabi"] = "bnt-sbi", ["Sahaptian"] = "nai-shp", ["Saharan"] = "ssa-sah", ["Sakan"] = "xsc-sak", ["Sal"] = "tbq-bkj", ["Samo"] = "dmn-sam", ["Samogo"] = "dmn-smg", ["Samur"] = "cau-sam", ["Sanglechi-Ishkashimi"] = "ira-sgi", ["Sara"] = "csu-sar", ["Sawabantu"] = "bnt-saw", ["Sena"] = "bnt-sna", ["Senari"] = "alv-snr", ["Sentani"] = "paa-sen", ["Sere"] = "nic-ser", ["Seuta"] = "bnt-seu", ["Shastan"] = "nai-shs", ["Shi-Havu"] = "bnt-shh", ["Shinaic"] = "inc-shn", ["Shiroro"] = "nic-shi", ["Shona"] = "bnt-sho", ["Shughni-Yazghulami"] = "ira-shy", ["Siberian Turkic"] = "trk-sib", ["Siloid"] = "tbq-sil", ["Sindhi"] = "inc-snd", ["Siouan"] = "sio", ["Siouan-Catawban"] = "nai-sca", ["Sisaala"] = "nic-sis", ["Sko"] = "paa-msk", ["Slavey"] = "den", ["Sogdic"] = "ira-sgc", ["Sogdo-Bactrian"] = "ira-sbc", ["Soko-Kele"] = "bnt-ske", ["Soninke-Bobo"] = "dmn-snb", ["Sorbian"] = "wen", ["Sotho-Tswana"] = "bnt-sts", ["South Bird's Head"] = "ngf-sbh", ["South Bougainville"] = "paa-sbo", ["South Plateau"] = "nic-pls", ["South Siberian Turkic"] = "trk-ssb", ["South Sulawesi"] = "poz-ssw", ["Southeastern Aramaic"] = "sem-ase", ["Southeastern Mande"] = "dmn-mse", ["Southern Bantu"] = "bnt-bso", ["Southern Gbaya"] = "alv-gbs", ["Southern Great Andamanese"] = "qfa-ads", ["Southern Indo-Aryan"] = "inc-sou", ["Southern Jê"] = "sai-sje", ["Southern Luo"] = "sdv-los", ["Southern Nilotic"] = "sdv-nis", ["Southern Nuristani"] = "nur-sou", ["Southern Samur"] = "cau-ssm", ["Southern Yeniseian"] = "qfa-yso", ["Southwest Bantu"] = "bnt-swb", ["Southwest Grassfields"] = "nic-grs", ["Southwestern Edoid"] = "alv-swd", ["Southwestern Mande"] = "dmn-msw", ["Sunda-Sulawesi"] = "poz-sus", ["Suppire-Mamara"] = "alv-sma", ["Susu-Yalunka"] = "dmn-sya", ["Swahili"] = "bnt-swh", ["Ta-Arawakan"] = "awd-taa", ["Tacanan"] = "sai-tac", ["Tagwana-Djimini"] = "alv-tdj", ["Takama"] = "bnt-tkm", ["Takic"] = "azc-tak", ["Talodi"] = "alv-tal", ["Taloid"] = "tbq-tal", ["Taman"] = "sdv-tmn", ["Tamil-Kodagu"] = "dra-tkd", ["Tamil-Malayalam"] = "dra-tml", ["Tamiloid"] = "dra-tam", ["Tangkhul-Maring"] = "sit-tma", ["Tangkic"] = "aus-tnk", ["Tangsa-Nocte"] = "sit-tno", ["Tani"] = "sit-tan", ["Taracahitic"] = "azc-trc", ["Taranoan"] = "sai-tar", ["Tarokoid"] = "nic-tar", ["Tatic"] = "xme-ttc", ["Teke"] = "bnt-tek", ["Teke-Mbede"] = "bnt-tmb", ["Tenda"] = "alv-ten", ["Tequistlatecan"] = "nai-tqn", ["Teso-Turkana"] = "sdv-ttu", ["Tetela"] = "bnt-tet", ["Ticuna-Yuri"] = "sai-tyu", ["Timor-Alor-Pantar"] = "qfa-tap", ["Tocharian"] = "ine-toc", ["Toda-Kota"] = "dra-tkt", ["Tomini-Tolitoli"] = "poz-tot", ["Tor-Kwerba"] = "paa-tkw", ["Torricelli"] = "qfa-tor", ["Totozoquean"] = "nai-tot", ["Ngữ hệ Liên New Guinea"] = "ngf", ["Tsezian"] = "cau-tsz", ["Tshangla"] = "sit-tsk", ["Tsimshianic"] = "nai-tsi", ["Tsogo"] = "bnt-tso", ["Tswa-Ronga"] = "bnt-tsr", ["Tucanoan"] = "sai-tuc", ["Tupi-Guarani"] = "tup-gua", ["Tuu"] = "khi-tuu", ["Nhóm ngôn ngữ Ubangi"] = "nic-ubg", ["Ugric"] = "urj-ugr", ["Upper Cross River"] = "nic-ucr", ["Upriver Phula"] = "tbq-urp", ["Uru-Chipaya"] = "sai-ucp", ["Utian"] = "nai-utn", ["Vai-Kono"] = "dmn-vak", ["Vainakh"] = "cau-vay", ["Vale"] = "csu-val", ["Venezuelan Cariban"] = "sai-ven", ["Waja-Kam"] = "alv-wjk", ["Ngữ hệ Wakashan"] = "wak", ["Wara-Natyoro"] = "alv-wan", ["Wee"] = "kro-wee", ["West Baltic"] = "bat-wes", ["West Dogon"] = "nic-dgw", ["West Himalayish"] = "sit-whm", ["West Manding"] = "dmn-wmn", ["West Mbam"] = "nic-mbw", ["West Papuan"] = "paa-wpa", ["West Tsezian"] = "cau-wts", ["Western Gbaya"] = "alv-gbw", ["Western Gurunsi"] = "nic-gnw", ["Western Hindi"] = "inc-hiw", ["Western Kiranti"] = "sit-kiw", ["Western Kru"] = "kro-wkr", ["Western Mande"] = "dmn-mdw", ["Western Ngbaka"] = "nic-nkw", ["Western Nilotic"] = "sdv-niw", ["Western Oti-Volta"] = "nic-wov", ["Western Pahari"] = "him", ["Western Ring"] = "nic-rnw", ["Western Samur"] = "cau-wsm", ["Wichí"] = "sai-wic", ["Wintuan"] = "nai-wtq", ["Witotoan"] = "sai-wit", ["Worrorran"] = "aus-wor", ["Yaka"] = "bnt-yak", ["Yam"] = "paa-yam", ["Yambasa"] = "nic-ymb", ["Yangmanic"] = "aus-yng", ["Yanomami"] = "sai-ynm", ["Yasa-Kombe"] = "bnt-yko", ["Yeniseian"] = "qfa-yen", ["Yidinyic"] = "aus-yid", ["Yok-Utian"] = "nai-you", ["Yokuts"] = "yok", ["Yolngu"] = "aus-yol", ["Yom-Nawdm"] = "nic-yon", ["Yoruba"] = "alv-yor", ["Yoruboid"] = "alv-yrd", ["Yuat"] = "paa-yua", ["Yuin-Kuric"] = "aus-yuk", ["Yukian"] = "nai-ykn", ["Yukpan"] = "sai-yuk", ["Yukubenic"] = "nic-ykb", ["Yungur"] = "alv-yun", ["Yupik"] = "ypk", ["Zamba-Binza"] = "bnt-zbi", ["Zamucoan"] = "sai-zam", ["Zan"] = "ccs-zan", ["Zande"] = "znd", ["Zaparoan"] = "sai-zap", ["Zapotec"] = "omq-zpc", ["Zapotecan"] = "omq-zap", ["Zeme"] = "sit-zem", ["Ngôn ngữ nhân tạo"] = "art", ["contact"] = "qfa-cnt", ["creole or pidgin"] = "crp", ["mixed"] = "qfa-mix", ["ngôn ngữ cơ tầng"] = "qfa-sub", ["Ngữ hệ Ainu"] = "qfa-ain", ["Ngữ hệ Algic"] = "aql", ["Ngữ hệ Arawak"] = "awd", ["Ngữ hệ Carib"] = "sai-car", ["Ngữ hệ Chukotka-Kamchatka"] = "qfa-cka", ["Ngữ hệ Dravida"] = "dra", ["Ngữ hệ Hmông-Miền"] = "hmx", ["Ngữ hệ Huarpe"] = "sai-hrp", ["Ngữ hệ Hán-Tạng"] = "sit", ["Ngữ hệ Iwaidja"] = "aus-wdj", ["Ngữ hệ Iwam"] = "paa-iwm", ["Ngữ hệ Jivaro"] = "sai-jiv", ["Ngữ hệ Kartvelia"] = "ccs", ["Ngữ hệ Kiowa-Tanoa"] = "nai-kta", ["Ngữ hệ Kra-Dai"] = "qfa-tak", ["Ngữ hệ Maya"] = "myn", ["Ngữ hệ Mông Cổ"] = "xgn", ["Ngữ hệ Nam Á"] = "aav", ["Ngữ hệ Nam Đảo"] = "map", ["Ngữ hệ Nhật Bản-Lưu Cầu"] = "jpx", ["Ngữ hệ Niger-Congo"] = "nic", ["Ngữ hệ Nin-Sahara"] = "ssa", ["Ngữ hệ Oto-Mangue"] = "omq", ["Ngữ hệ Pama–Nyungar"] = "aus-pam", ["Ngữ hệ Pano-Tacana"] = "sai-pat", ["Ngữ hệ Papua"] = "paa", ["Ngữ hệ Phi-Á"] = "afa", ["Ngữ hệ Quechua"] = "qwe", ["Ngữ hệ Salish"] = "sal", ["Ngữ hệ Sepik"] = "paa-sep", ["Ngữ hệ Thượng Tami"] = "paa-brd", ["Ngữ hệ Tiên Ti-Mông Cổ"] = "qfa-xgs", ["Ngữ hệ Totonac"] = "nai-ttn", ["Ngữ hệ Triều Tiên"] = "qfa-kor", ["Ngữ hệ Tungus"] = "tuw", ["Ngữ hệ Tupi"] = "tup", ["Ngữ hệ Turk"] = "trk", ["Ngữ hệ Tyrseni"] = "qfa-tyn", ["Ngữ hệ Tây Bắc Kavkaz"] = "cau-nwc", ["Ngữ hệ Ural"] = "urj", ["Ngữ hệ Ute-Aztec"] = "azc", ["Ngữ hệ Vascon"] = "euq", ["Ngữ hệ Xinca"] = "nai-xin", ["Ngữ hệ Yukaghir"] = "qfa-yuk", ["Ngữ hệ Yuman-Cochimí"] = "nai-yuc", ["Ngữ hệ vùng vịnh Papua"] = "paa-pag", ["Ngữ hệ Önge"] = "qfa-ong", ["Ngữ hệ Đông Bắc Kavkaz"] = "cau-nec", ["Ngữ hệ Ấn-Âu"] = "ine", ["Ngữ tộc Mixtec"] = "omq-mix", ["Nhóm ngôn ngữ Aari"] = "omv-aro", ["Nhóm ngôn ngữ Abenaki-Penobscot"] = "alg-abp", ["Nhóm ngôn ngữ Abkhaz-Abaza"] = "cau-abz", ["Nhóm ngôn ngữ Ai Cập"] = "egx", ["Nhóm ngôn ngữ Albani"] = "sqj", ["Nhóm ngôn ngữ Algonquin"] = "alg", ["Nhóm ngôn ngữ Alumic"] = "nic-alu", ["Nhóm ngôn ngữ Andic"] = "cau-and", ["Nhóm ngôn ngữ Angami-Pochuri"] = "tbq-anp", ["Nhóm ngôn ngữ Angan"] = "ngf-ang", ["Nhóm ngôn ngữ Anh"] = "gmw-ang", ["Nhóm ngôn ngữ Anh-Frisia"] = "gmw-afr", ["Nhóm ngôn ngữ Aram"] = "sem-ara", ["Nhóm ngôn ngữ Aram Tây"] = "sem-arw", ["Nhóm ngôn ngữ Aram Đông"] = "sem-are", ["Nhóm ngôn ngữ Arapahoe"] = "alg-ara", ["Nhóm ngôn ngữ Asli"] = "mkh-asl", ["Nhóm ngôn ngữ Atayal"] = "map-ata", ["Nhóm ngôn ngữ Avar-Andic"] = "cau-ava", ["Nhóm ngôn ngữ Bahnar"] = "mkh-ban", ["Nhóm ngôn ngữ Bahnar Bắc"] = "mkh-nbn", ["Nhóm ngôn ngữ Balt-Slav"] = "ine-bsl", ["Nhóm ngôn ngữ Bantoid"] = "nic-bod", ["Nhóm ngôn ngữ Bantoid-Cross"] = "nic-bcr", ["Nhóm ngôn ngữ Bantu"] = "bnt", ["Nhóm ngôn ngữ Basaa"] = "bnt-bsa", ["Nhóm ngôn ngữ Bengal-Assam"] = "inc-bas", ["Nhóm ngôn ngữ Benue-Congo"] = "nic-bco", ["Nhóm ngôn ngữ Berber"] = "ber", ["Nhóm ngôn ngữ Bihar"] = "inc-bih", ["Nhóm ngôn ngữ Bisa-Busa"] = "dmn-bbu", ["Nhóm ngôn ngữ Bod"] = "sit-bdi", ["Nhóm ngôn ngữ Bod Đông"] = "sit-ebo", ["Nhóm ngôn ngữ Britton"] = "cel-bry", ["Nhóm ngôn ngữ Bungku-Tolaki"] = "poz-btk", ["Nhóm ngôn ngữ Bạch"] = "sit-bai", ["Nhóm ngôn ngữ Bạch Bắc"] = "sit-nba", ["Nhóm ngôn ngữ Bắc Bantoid"] = "nic-bdn", ["Nhóm ngôn ngữ Bắc Borneo"] = "poz-bnn", ["Nhóm ngôn ngữ Bắc Lưu Cầu"] = "jpx-nry", ["Nhóm ngôn ngữ Bắc Ấn-Arya"] = "inc-nor", ["Nhóm ngôn ngữ Bắc-Trung Edoid"] = "alv-nce", ["Nhóm ngôn ngữ Bố Ương"] = "qfa-buy", ["Nhóm ngôn ngữ Bối-Cát Triệu"] = "qfa-bej", ["Nhóm ngôn ngữ Bối-Thái"] = "qfa-bet", ["Nhóm ngôn ngữ Canaan"] = "sem-can", ["Nhóm ngôn ngữ Castilla"] = "roa-cas", ["Nhóm ngôn ngữ Celebes"] = "poz-clb", ["Nhóm ngôn ngữ Celt"] = "cel", ["Nhóm ngôn ngữ Celt hải đảo"] = "cel-ins", ["Nhóm ngôn ngữ Chukotka"] = "qfa-ckn", ["Nhóm ngôn ngữ Châu Đại Dương"] = "poz-oce", ["Nhóm ngôn ngữ Chăm"] = "cmc", ["Nhóm ngôn ngữ Cushit"] = "cus", ["Nhóm ngôn ngữ Cơ Tu"] = "mkh-kat", ["Nhóm ngôn ngữ Dard"] = "inc-dar", ["Nhóm ngôn ngữ Dizi"] = "omv-diz", ["Nhóm ngôn ngữ Edoid"] = "alv-edo", ["Nhóm ngôn ngữ Eskimo-Aleut"] = "esx", ["Nhóm ngôn ngữ Ewenic"] = "tuw-ewe", ["Nhóm ngôn ngữ Finn"] = "urj-fin", ["Nhóm ngôn ngữ Gbe"] = "alv-gbe", ["Nhóm ngôn ngữ German"] = "gem", ["Nhóm ngôn ngữ German Biển Bắc"] = "gmw-nsg", ["Nhóm ngôn ngữ German Bắc"] = "gmq", ["Nhóm ngôn ngữ German Tây"] = "gmw", ["Nhóm ngôn ngữ Gruzia-Zan"] = "ccs-gzn", ["Nhóm ngôn ngữ Heiban"] = "alv-hei", ["Nhóm ngôn ngữ Hlai"] = "qfa-lic", ["Nhóm ngôn ngữ Hà Nhì"] = "tbq-han", ["Nhóm ngôn ngữ Hán"] = "zhx", ["Nhóm ngôn ngữ Hán-Bạch"] = "sit-sba", ["Nhóm ngôn ngữ Hạ Franken"] = "gmw-frk", ["Nhóm ngôn ngữ Iberia-Rôman"] = "roa-ibe", ["Nhóm ngôn ngữ Iran"] = "ira", ["Nhóm ngôn ngữ Jukunoid"] = "nic-jkn", ["Nhóm ngôn ngữ Kaili-Pamona"] = "poz-kal", ["Nhóm ngôn ngữ Kainji"] = "nic-knj", ["Nhóm ngôn ngữ Kannada"] = "dra-kan", ["Nhóm ngôn ngữ Karen"] = "kar", ["Nhóm ngôn ngữ Karluk"] = "trk-kar", ["Nhóm ngôn ngữ Kauru"] = "nic-kau", ["Nhóm ngôn ngữ Kham"] = "sit-kha", ["Nhóm ngôn ngữ Khasi"] = "aav-khs", ["Nhóm ngôn ngữ Khmer"] = "mkh-kmr", ["Nhóm ngôn ngữ Khơ Mú"] = "mkh-khm", ["Nhóm ngôn ngữ Kipchak"] = "trk-kip", ["Nhóm ngôn ngữ Kipchak-Bulgar"] = "trk-kbu", ["Nhóm ngôn ngữ Kipchak-Nogai"] = "trk-kno", ["Nhóm ngôn ngữ Koman"] = "ssa-kom", ["Nhóm ngôn ngữ Kru"] = "kro", ["Nhóm ngôn ngữ Kuki-Chin"] = "tbq-kuk", ["Nhóm ngôn ngữ Kurd"] = "ku", ["Nhóm ngôn ngữ Kutubuan"] = "paa-kut", ["Nhóm ngôn ngữ Kwa"] = "alv-kwa", ["Nhóm ngôn ngữ Ladakh-Balti"] = "sit-lab", ["Nhóm ngôn ngữ Lechite"] = "zlw-lch", ["Nhóm ngôn ngữ Liên Mông Cổ"] = "qfa-xgx", ["Nhóm ngôn ngữ Lô Lô"] = "tbq-lol", ["Nhóm ngôn ngữ Lô Lô Bắc"] = "tbq-nlo", ["Nhóm ngôn ngữ Lô Lô Nam"] = "tbq-slo", ["Nhóm ngôn ngữ Lô Lô Đông Nam"] = "tbq-sel", ["Nhóm ngôn ngữ Lô Lô–Miến"] = "tbq-lob", ["Nhóm ngôn ngữ Lưu Cầu"] = "jpx-ryu", ["Nhóm ngôn ngữ Mande"] = "dmn", ["Nhóm ngôn ngữ Manobo"] = "mno", ["Nhóm ngôn ngữ Mansi"] = "mns", ["Nhóm ngôn ngữ Masa"] = "cdc-mas", ["Nhóm ngôn ngữ Media-Parthia"] = "ira-mpr", ["Nhóm ngôn ngữ Mixtec"] = "omq-mxt", ["Nhóm ngôn ngữ Miến"] = "tbq-brm", ["Nhóm ngôn ngữ Miến-Khương"] = "tbq-buq", ["Nhóm ngôn ngữ Miền"] = "hmx-mie", ["Nhóm ngôn ngữ Monguor"] = "mjg", ["Nhóm ngôn ngữ Muna-Buton"] = "poz-mun", ["Nhóm ngôn ngữ Munda"] = "mun", ["Nhóm ngôn ngữ Mã Lai"] = "poz-mly", ["Nhóm ngôn ngữ Mã Lai-Chăm"] = "poz-mcm", ["Nhóm ngôn ngữ Mã Lai-Sumbawa"] = "poz-msa", ["Nhóm ngôn ngữ Mã Lai-Đa Đảo"] = "poz", ["Nhóm ngôn ngữ Mã Lai-Đa Đảo Trung-Đông"] = "poz-cet", ["Nhóm ngôn ngữ Mã Lai-Đa Đảo Đông"] = "pqe", ["Nhóm ngôn ngữ Môn"] = "mkh-mnc", ["Nhóm ngôn ngữ Môn-Khmer"] = "mkh", ["Nhóm ngôn ngữ Mảng"] = "mkh-mng", ["Nhóm ngôn ngữ Nahua"] = "azc-nah", ["Nhóm ngôn ngữ Nahua Durango"] = "azc-dur", ["Nhóm ngôn ngữ Nahua Huasteca"] = "azc-hua", ["Nhóm ngôn ngữ Nakh"] = "cau-nkh", ["Nhóm ngôn ngữ Nam Bantoid"] = "nic-bds", ["Nhóm ngôn ngữ Nam Cushit"] = "cus-sou", ["Nhóm ngôn ngữ Nam Dravida"] = "dra-sou", ["Nhóm ngôn ngữ Nam Dravida I"] = "dra-sdo", ["Nhóm ngôn ngữ Nam Dravida II"] = "dra-sdt", ["Nhóm ngôn ngữ Nam Lưu Cầu"] = "jpx-sry", ["Nhóm ngôn ngữ Nam Mông Cổ"] = "xgn-sou", ["Nhóm ngôn ngữ Nam Ả Rập hiện đại"] = "sem-sar", ["Nhóm ngôn ngữ Nawiki"] = "awd-nwk", ["Nhóm ngôn ngữ Nicobar"] = "aav-nic", ["Nhóm ngôn ngữ Numic"] = "azc-num", ["Nhóm ngôn ngữ Nung"] = "sit-nng", ["Nhóm ngôn ngữ Nyasa"] = "bnt-nys", ["Nhóm ngôn ngữ Nữ Chân"] = "tuw-jrc", ["Nhóm ngôn ngữ Oghur"] = "trk-ogr", ["Nhóm ngôn ngữ Oghuz"] = "trk-ogz", ["Nhóm ngôn ngữ Omo"] = "omv", ["Nhóm ngôn ngữ Ormur-Parachi"] = "ira-orp", ["Nhóm ngôn ngữ Osco-Umbria"] = "itc-sbl", ["Nhóm ngôn ngữ Pahari"] = "inc-pah", ["Nhóm ngôn ngữ Palaung"] = "mkh-pal", ["Nhóm ngôn ngữ Paman"] = "aus-pmn", ["Nhóm ngôn ngữ Pano"] = "sai-pan", ["Nhóm ngôn ngữ Pear"] = "mkh-pea", ["Nhóm ngôn ngữ Philippines"] = "phi", ["Nhóm ngôn ngữ Piman"] = "azc-pim", ["Nhóm ngôn ngữ Plateau"] = "nic-plt", ["Nhóm ngôn ngữ Platoid"] = "nic-pla", ["Nhóm ngôn ngữ Pnar-Khasi-Lyngngam"] = "aav-pkl", ["Nhóm ngôn ngữ Rajasthan"] = "raj", ["Nhóm ngôn ngữ Rôman"] = "roa", ["Nhóm ngôn ngữ Sa Pa-Thái Tây Nam"] = "tai-sap", ["Nhóm ngôn ngữ Sabah"] = "poz-san", ["Nhóm ngôn ngữ Sac-Fox-Kickapoo"] = "alg-sfk", ["Nhóm ngôn ngữ Saka-Wakhi"] = "xsc-skw", ["Nhóm ngôn ngữ Saluan-Banggai"] = "poz-slb", ["Nhóm ngôn ngữ Sama-Bajaw"] = "poz-sbj", ["Nhóm ngôn ngữ Sami"] = "smi", ["Nhóm ngôn ngữ Samoyed"] = "syd", ["Nhóm ngôn ngữ Sarmatia"] = "xsc-sar", ["Nhóm ngôn ngữ Savanna"] = "alv-sav", ["Nhóm ngôn ngữ Scythia"] = "xsc", ["Nhóm ngôn ngữ Selkup"] = "sel", ["Nhóm ngôn ngữ Semit"] = "sem", ["Nhóm ngôn ngữ Semit Ethiopia"] = "sem-eth", ["Nhóm ngôn ngữ Semit Trung"] = "sem-cen", ["Nhóm ngôn ngữ Semit Tây"] = "sem-wes", ["Nhóm ngôn ngữ Semit Tây Bắc"] = "sem-nwe", ["Nhóm ngôn ngữ Semit Đông"] = "sem-eas", ["Nhóm ngôn ngữ Senegambia"] = "alv-sng", ["Nhóm ngôn ngữ Senufo"] = "alv-snf", ["Nhóm ngôn ngữ Shirongol"] = "xgn-shr", ["Nhóm ngôn ngữ Shughni-Roshani"] = "ira-shr", ["Nhóm ngôn ngữ Shughni-Yazghulami-Munji"] = "ira-sym", ["Nhóm ngôn ngữ Sira"] = "bnt-sir", ["Nhóm ngôn ngữ Slav Nam"] = "zls", ["Nhóm ngôn ngữ Slav Tây"] = "zlw", ["Nhóm ngôn ngữ Slav Đông"] = "zle", ["Nhóm ngôn ngữ Somali"] = "cus-som", ["Nhóm ngôn ngữ Songhay"] = "son", ["Nhóm ngôn ngữ Talodi-Heiban"] = "alv-the", ["Nhóm ngôn ngữ Tamang"] = "sit-tam", ["Nhóm ngôn ngữ Tamil-Kannada"] = "dra-tkn", ["Nhóm ngôn ngữ Tangkhul"] = "sit-tng", ["Nhóm ngôn ngữ Tchad"] = "cdc", ["Nhóm ngôn ngữ Telugu"] = "dra-tel", ["Nhóm ngôn ngữ Thái"] = "tai", ["Nhóm ngôn ngữ Thái Bắc"] = "tai-nor", ["Nhóm ngôn ngữ Thái Sùng Tả"] = "tai-cho", ["Nhóm ngôn ngữ Thái Trung tâm"] = "tai-cen", ["Nhóm ngôn ngữ Thái Tây Nam"] = "tai-swe", ["Nhóm ngôn ngữ Thái-Long"] = "sit-cln", ["Nhóm ngôn ngữ Thổ Gia"] = "sit-tja", ["Nhóm ngôn ngữ Timor"] = "poz-tim", ["Nhóm ngôn ngữ Tivoid"] = "nic-tiv", ["Nhóm ngôn ngữ Tiểu Á"] = "ine-ana", ["Nhóm ngôn ngữ Triqui"] = "omq-tri", ["Nhóm ngôn ngữ Trung Cushit"] = "cus-cen", ["Nhóm ngôn ngữ Trung Mông Cổ"] = "xgn-cen", ["Nhóm ngôn ngữ Trung Plateau"] = "nic-plc", ["Nhóm ngôn ngữ Trung Tchad"] = "cdc-cbm", ["Nhóm ngôn ngữ Trung Thái Bình Dương"] = "poz-pcc", ["Nhóm ngôn ngữ Trung-Đông Châu Đại Dương"] = "poz-occ", ["Nhóm ngôn ngữ Tsou"] = "map-tsu", ["Nhóm ngôn ngữ Tulu-Koraga"] = "dra-tlk", ["Nhóm ngôn ngữ Turk chung"] = "trk-cmn", ["Nhóm ngôn ngữ Tày"] = "tai-tay", ["Nhóm ngôn ngữ Tân Aram Trung"] = "sem-cna", ["Nhóm ngôn ngữ Tây Barito"] = "poz-brw", ["Nhóm ngôn ngữ Tây Britton"] = "cel-brw", ["Nhóm ngôn ngữ Tây Bắc Iran"] = "ira-nwi", ["Nhóm ngôn ngữ Tây Bắc Sumatra"] = "poz-nws", ["Nhóm ngôn ngữ Tây Châu Đại Dương"] = "poz-ocw", ["Nhóm ngôn ngữ Tây Iran"] = "ira-wes", ["Nhóm ngôn ngữ Tây Nam Britton"] = "cel-brs", ["Nhóm ngôn ngữ Tây Nam Iran"] = "ira-swi", ["Nhóm ngôn ngữ Tây Nam Pama–Nyungar"] = "aus-psw", ["Nhóm ngôn ngữ Tây Rôman"] = "roa-wes", ["Nhóm ngôn ngữ Tây Scandinavia"] = "gmq-wes", ["Nhóm ngôn ngữ Tây Tchad"] = "cdc-wst", ["Nhóm ngôn ngữ Tây Ấn-Aryan"] = "inc-wes", ["Nhóm ngôn ngữ Tạng"] = "sit-tib", ["Nhóm ngôn ngữ Tạng-Miến"] = "tbq", ["Nhóm ngôn ngữ Udeghe"] = "tuw-udg", ["Nhóm ngôn ngữ Việt"] = "mkh-vie", ["Nhóm ngôn ngữ Volta-Congo"] = "nic-vco", ["Nhóm ngôn ngữ Volta-Niger"] = "alv-von", ["Nhóm ngôn ngữ Văn Ma-Thái Tây Nam"] = "tai-wen", ["Nhóm ngôn ngữ Wotu-Wolio"] = "poz-wot", ["Nhóm ngôn ngữ Yekhee"] = "alv-yek", ["Nhóm ngôn ngữ Zaza-Goran"] = "ira-zgr", ["Nhóm ngôn ngữ biệt lập"] = "qfa-iso", ["Nhóm ngôn ngữ gốc Balt"] = "bat", ["Nhóm ngôn ngữ gốc Hy Lạp"] = "grk", ["Nhóm ngôn ngữ gốc Slav"] = "sla", ["Nhóm ngôn ngữ gốc Ý"] = "itc", ["Nhóm ngôn ngữ Ý-Tây Rôman"] = "roa-iwr", ["Nhóm ngôn ngữ Đa Đảo"] = "poz-pol", ["Nhóm ngôn ngữ Đa Đảo hạt nhân"] = "poz-pnp", ["Nhóm ngôn ngữ Đông Algonquin"] = "alg-eas", ["Nhóm ngôn ngữ Đông Balt"] = "bat-eas", ["Nhóm ngôn ngữ Đông Barito"] = "poz-bre", ["Nhóm ngôn ngữ Đông Bắc Iran"] = "ira-nei", ["Nhóm ngôn ngữ Đông Cushit"] = "cus-eas", ["Nhóm ngôn ngữ Đông Cushit Cao nguyên"] = "cus-hec", ["Nhóm ngôn ngữ Đông Kainji"] = "nic-kne", ["Nhóm ngôn ngữ Đông Mande"] = "dmn-mde", ["Nhóm ngôn ngữ Đông Nam Iran"] = "ira-sei", ["Nhóm ngôn ngữ Đông Nam Solomon"] = "poz-sls", ["Nhóm ngôn ngữ Đông Scandinavia"] = "gmq-eas", ["Nhóm ngôn ngữ Đông Tchad"] = "cdc-est", ["Nhóm ngôn ngữ Đông Ấn-Arya"] = "inc-eas", ["Nhóm ngôn ngữ Đại Bạch"] = "sit-mba", ["Nhóm ngôn ngữ Đại Magar"] = "sit-gma", ["Nhóm ngôn ngữ Đại Tây Dương-Congo"] = "alv", ["Nhóm ngôn ngữ Động-Thủy"] = "qfa-kms", ["Nhóm ngôn ngữ Đức cao địa"] = "gmw-hgm", ["Nhóm ngôn ngữ Ả Rập"] = "sem-arb", ["Nhóm ngôn ngữ Ấn-Arya"] = "inc", ["Nhóm ngôn ngữ Ấn-Arya cổ"] = "inc-old", ["Nhóm ngôn ngữ Ấn-Arya trung đại"] = "inc-mid", ["Nhóm ngôn ngữ Ấn-Iran"] = "iir", ["not a family"] = "qfa-not", ["sign"] = "sgn", ["Tiếng Hindustan"] = "inc-hnd", ["Nhóm ngôn ngữ Iran trung đại"] = "ira-mid", } aadhwmol716f65lqjw0sm5ifc3qi6pn अग्निपर्वत 0 293661 2571608 2567151 2026-10-18T12:21:35Z Hiyuune 50834 /* Biến cách */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]) 2571608 wikitext text/x-wiki =={{langname|sa}}== ==={{section|alt}}=== {{sa-alt}} ==={{section|etym}}=== {{com+|sa|अग्नि|पर्वत|t1=lửa|t2=núi}} ==={{section|pron}}=== {{sa-IPA}} ==={{section|n}}=== {{sa-noun|m}} # [[núi lửa|Núi lửa]]. ===={{section|decl}}==== {{sa-ndecl|agniparvata<m>}} ===={{section|desc}}==== * {{desc|kn|ಅಗ್ನಿಪರ್ವತ|bor=1}} * {{desc|ml|അഗ്നിപർവ്വതം|bor=1}} * {{desc|te|అగ్నిపర్వతము|lbor=1}} ==={{section|ref}}=== * {{R:MW|0005}} 4mglvxzxq84pfsx0qb6v6n7eko5hpy4 2571619 2571608 2026-10-18T12:37:47Z Hiyuune 50834 Hồi sửa về bản sửa đổi 2567151 của [[Special:Contributions/Hiyuune|Hiyuune]] ([[User talk:Hiyuune|talk]]) 2571619 wikitext text/x-wiki =={{langname|sa}}== ==={{section|alt}}=== {{sa-alt}} ==={{section|etym}}=== {{com+|sa|अग्नि|पर्वत|t1=lửa|t2=núi}} ==={{section|pron}}=== {{sa-IPA}} ==={{section|n}}=== {{sa-noun|m}} # [[núi lửa|Núi lửa]]. ===={{section|decl}}==== {{sa-decl-noun-m|agniparvata}} ===={{section|desc}}==== * {{desc|kn|ಅಗ್ನಿಪರ್ವತ|bor=1}} * {{desc|ml|അഗ്നിപർവ്വതം|bor=1}} * {{desc|te|అగ్నిపర్వతము|lbor=1}} ==={{section|ref}}=== * {{R:MW|0005}} jxblehcmblg3yfmtoa4wshlnmprdg7c Mô đun:sa-decl 828 293666 2571607 2567270 2026-10-18T12:21:20Z Hiyuune 50834 2571607 Scribunto text/plain --[==[ This module implements the declension tables of Sanskrit nouns and numerals ({{tl|sa-ndecl}}) and of adjectives ({{tl|sa-adecl}}). Authorship: originally written by [[User:Dragonoid76]] and [[User:Benwing2]], with the declension rules of [[User:Exarchus]]; rewritten by [[User:Fenakhay]] in October 2026. TERMINOLOGY: * "head" = The form given in the call: the nominative singular, or the stem for consonant stems. It is followed by an inline spec of indicators, e.g. `{{sa-ndecl|devá<m>}}` or `{{sa-adecl|kṛṣṇá<f:kṛṣṇā́.novedic>}}`. * "stem class" = One way of declining, e.g. the a-stems, the i- and u-stems or the root stems. The classes in [[Module:sa-decl/data]] are tried on the head in order, and the first one that takes it gives the "stem" (the head minus its ending). The class's other stems are made from that one; see `Analysis:vowelStems`. * "slot" = A particular combination of case and number, e.g. `nom_s` or `loc_p`. Each slot is one cell of a table. * "form group" = One set of endings from [[Module:sa-decl/data]], together with the stems, accent and sandhi options in force when it was added. A table is made of the forms of its groups, each joined with `join` in [[Module:sa-utilities]]. Everything is worked out in SLP1, and shown in the script of the head (or of the page name) with the IAST below. The classes, by area: * The call: `Spec` (the inline spec of a head), `Overrides` (the cell parameters) and `ScriptBridge` (conversion between the input script and SLP1). * The analysis: `Head` (finds the stem class of a head), `Analysis` (the decisions of one stem class, with one method per class that adds `FormGroup`s) and `FormGenerator` (makes the forms of a group). * The result: `Declension` (one table, with the forms of every slot, its notes and its categories), `AdjectiveDeclension` (the tables of an adjective) and `TableRenderer`. Other modules used: [[Module:sa-decl/data]] (the endings and every other table, loaded with mw.loadData), [[Module:sa-utilities]] (sandhi), [[Module:inflection-table]] (the frame of each table, and the box around an adjective's tables) and [[Module:inflection utilities]] (the links, transliteration, accelerators and footnotes in the cells). ]==] local export = {} local M = require("Module:module loader").init { require = { inflection_table = "Module:inflection-table", inflection_utilities = "Module:inflection utilities", JSON = "Module:JSON", links = "Module:links", parameters = "Module:parameters", parse_utilities = "Module:parse utilities", sa_utilities = "Module:sa-utilities", scripts = "Module:scripts", utilities = "Module:utilities", }, loadData = { data = "Module:sa-decl/data", headword_data = "Module:headword/data", }, lazy = { lang = function() return require("Module:languages").getByCode("sa") end, }, } ------------------------------------------------------------------------------------------------------------------------ -- Script -- ------------------------------------------------------------------------------------------------------------------------ --[==[ Convert the call's input to SLP1, and SLP1 to the display script and to IAST. The display script is the script of the head. If the head is in IAST (i.e. Latin), it is the script of the page name instead, and failing that, Devanagari. Latin input is read as IAST; anything else goes through the display script's converter. ]==] local ScriptBridge = {} ScriptBridge.__index = ScriptBridge function ScriptBridge.new(head, pagename) local script = M.lang:findBestScript(head) if script:getCode() == "None" then script = M.lang:findBestScript(pagename) end if script:getCode() == "None" then script = M.scripts.getByCode("Deva") end local code = script:getCode() return setmetatable({ script = script, code = code, from_native = require("Module:sa-utilities/translit/" .. code .. "-to-SLP1").tr, to_native = require("Module:sa-utilities/translit/SLP1-to-" .. code).tr, from_iast = require("Module:sa-utilities/translit/IAST-to-SLP1").tr, to_iast = require("Module:sa-utilities/translit/SLP1-to-IAST").tr, }, ScriptBridge) end function ScriptBridge:toSlp1(text) if M.lang:findBestScript(text):getCode() == "None" then return self.from_iast(text) end return self.from_native(text) end -- Only Devanagari shows the accents, so strip them for any other script. function ScriptBridge:toNative(slp1) if self.code ~= "Deva" then slp1 = string.gsub(slp1, M.sa_utilities.accent, "") end return self.to_native(slp1) end function ScriptBridge:toIast(slp1) return self.to_iast(slp1) end ------------------------------------------------------------------------------------------------------------------------ -- Spec -- ------------------------------------------------------------------------------------------------------------------------ --[==[ The inline spec of a head, `HEAD<NAME.NAME:VALUE...>`. `Spec.parse` parses it and checks it against the indicators of `template` (`noun` or `adjective`, as keyed in `data.indicators`). The result has `head`, as written (empty means the page name), and `indicators`, keyed by name. An indicator's value is a list for a list indicator, a Spec for a spec value, and {true} for a flag. A spec value (the feminine and neuter heads of {{tl|sa-adecl}}) is itself a head with a spec of its own. It is parsed with `nested` set, and then only takes the indicators that apply to a single stem. ]==] local Spec = {} Spec.__index = Spec local function spec_error(message, text) error(message .. " in the spec '" .. text .. "'.", 0) end -- Split `text` at `separator` (a Lua pattern), except inside angle brackets. local function split_outside_brackets(text, separator) local parts = {} local segments = M.parse_utilities.parse_balanced_segment_run(text, "<", ">") for _, group in ipairs(M.parse_utilities.split_alternating_runs(segments, separator)) do table.insert(parts, table.concat(group)) end return parts end function Spec.parse(text, template, nested) text = mw.text.trim(text) local spec = setmetatable({head = text, indicators = {}}, Spec) local registry = M.data.indicators[template] local segments = M.parse_utilities.parse_balanced_segment_run(text, "<", ">") if #segments > 3 or segments[#segments] ~= "" and #segments > 1 then spec_error("Only one <...> may follow the head", text) end spec.head = mw.text.trim(segments[1]) if string.find(spec.head, ",", 1, true) then spec_error("The head is one form", text) end local needs_gender = template == "noun" and not nested if #segments == 1 then if needs_gender then spec_error("Give the gender: <m>, <f>, <n>, <num> or <pers>", text) end return spec end local inside = string.match(segments[2], "^<(.*)>$") local groups = {} for _, indicator in ipairs(split_outside_brackets(inside, "%.")) do local name, value = string.match(indicator, "^%s*([^:<]-)%s*:%s*(.-)%s*$") if not name then name = mw.text.trim(indicator) end local definition = registry[name] if definition and definition.alias then name = definition.alias definition = registry[name] end if not definition or nested and (definition.value == "spec" or definition.group == "gender") then local names = {} for known, known_definition in pairs(registry) do if not nested or known_definition.value ~= "spec" and known_definition.group ~= "gender" then table.insert(names, known) end end table.sort(names) spec_error(("Unrecognized indicator '%s'; the indicators are %s"):format(name, table.concat(names, ", ")), text) end if spec.indicators[name] ~= nil then spec_error(("The indicator '%s' is given twice"):format(name), text) end if definition.group and definition.group ~= "numbers" then if groups[definition.group] then spec_error(("The indicators '%s' and '%s' exclude each other"):format(groups[definition.group], name), text) end groups[definition.group] = name end if definition.value and (value == nil or value == "") then spec_error(("The indicator '%s' needs a value ('%s:...')"):format(name, name), text) elseif not definition.value and value ~= nil then spec_error(("The indicator '%s' takes no value"):format(name), text) end if definition.value == nil then value = true elseif definition.value == "spec" then if definition.list then local specs = {} for _, item in ipairs(split_outside_brackets(value, "%s*,%s*")) do table.insert(specs, Spec.parse(item, template, true)) end value = specs else value = Spec.parse(value, template, true) end elseif definition.list then local values = mw.text.split(value, "%s*,%s*") for _, item in ipairs(values) do if definition.values and not definition.values[item] then spec_error(("'%s' is not a value of '%s'"):format(item, name), text) end end value = values elseif definition.values and not definition.values[value] then local values = {} for known in pairs(definition.values) do table.insert(values, known) end table.sort(values) spec_error(("'%s' is not a value of '%s'; the values are %s"):format(value, name, table.concat(values, ", ")), text) end spec.indicators[name] = value end -- A manual table can do without a gender. if needs_gender and not groups.gender and not spec.indicators.manual then spec_error("Give the gender: <m>, <f>, <n>, <num> or <pers>", text) end return spec end --[==[ Return the stem properties set by the indicators of `spec`, with SLP1 values (see `export.decline_table`), on top of `inherited`. When `spec` belongs to one of an adjective's heads, `inherited` holds the adjective's shared properties. ]==] function Spec:properties(bridge, inherited) local properties = {} for key, value in pairs(inherited or {}) do properties[key] = value end local indicators = self.indicators if indicators.root then properties.root = true elseif indicators.nonroot then properties.root = false end if indicators.contract then properties.contract = true elseif indicators.nocontract then properties.contract = false end for name, property in pairs({vrki = "vrki", pron = "pron", novedic = "novedic", diaspirate = "diaspirate", participle = "participle", nonasal = "nonasal", han = "han", svarita = "svarita", ["ḷ"] = "retroflex_l"}) do if indicators[name] then properties[property] = true end end if indicators.r then properties.r = bridge.from_iast(indicators.r) end if indicators.final then properties.final = bridge.from_iast(indicators.final) end if indicators.feminine then properties.feminine = {} for _, form in ipairs(indicators.feminine) do table.insert(properties.feminine, bridge:toSlp1(form)) end end if indicators.sg or indicators.du or indicators.pl then properties.numbers = {s = indicators.sg, d = indicators.du, p = indicators.pl} end -- The pronominal declension is never a root declension, even for a monosyllable such as tā́. if properties.pron then properties.root = false end return properties end ------------------------------------------------------------------------------------------------------------------------ -- Overrides -- ------------------------------------------------------------------------------------------------------------------------ --[==[ The cell parameters. `Overrides.parse` returns, for each slot, its forms as given: a comma-separated list, each form followed by any `[footnote]`s, or `-` for no form. ]==] local Overrides = {} Overrides.__index = Overrides function Overrides.parse(values) local overrides = setmetatable({slots = {}}, Overrides) for slot, value in pairs(values) do local forms = {} local segments = M.parse_utilities.parse_balanced_segment_run(value, "[", "]") for _, group in ipairs(M.parse_utilities.split_alternating_runs(segments, "%s*,%s*")) do local footnotes = {} for i = 2, #group - 1, 2 do if mw.text.trim(group[i + 1]) ~= "" then error(("Text after a footnote in %s=%s"):format(slot, value), 0) end table.insert(footnotes, string.match(group[i], "^%[(.*)%]$")) end local form = mw.text.trim(group[1]) if form ~= "" then table.insert(forms, {written = form, footnotes = footnotes}) end end overrides.slots[slot] = forms end return overrides end ------------------------------------------------------------------------------------------------------------------------ -- Analysis -- ------------------------------------------------------------------------------------------------------------------------ --[==[ A head in SLP1. `detectClass` finds its stem class by trying the classes of `data.classes` in order. It returns the id of the first class whose genders include `gender` and one of whose patterns matches (taking the pattern's `when` or `unless` property into account), along with the stem the pattern captures. ]==] local Head = {} Head.__index = Head function Head.new(slp1) return setmetatable({slp1 = slp1}, Head) end function Head:detectClass(gender, properties) for _, class in ipairs(M.data.classes) do if class.genders[gender] then for _, pattern in ipairs(class.patterns) do local text, when, unless = pattern, nil, nil if type(pattern) == "table" then text, when, unless = pattern[1], pattern.when, pattern.unless end if (when == nil or properties[when] == true) and (unless == nil or not properties[unless]) then local stem = string.match(self.slp1, text) if stem then return class.id, stem end end end end end return nil end --[==[ One set of endings of a stem class, as added by `Analysis:add`. `class` and `set` locate it in `data.endings`, `accent` is what `@` stands for, and `stems` maps the stem keys to stems. `head` is what the `+` endings attach to, and `options` is a copy of the analysis's sandhi options at the time the group was added. ]==] local FormGroup = {} FormGroup.__index = FormGroup function FormGroup.new(fields) return setmetatable(fields, FormGroup) end --[==[ The decisions made for one stem class. An analysis starts with the head and its gender, whether the table is one of an adjective's (`adjective`), the properties set by the indicators (see `export.decline_table`) and the other heads the table looks at (`links`). The class's method then sets the `accent` that `@` stands for (the head's final accent), makes the `stems` (`base` plus whatever the class needs) and adjusts the sandhi `options`, which each group copies when it is added. What comes out is the list of `groups`, the `type` (a key of `data.types`), the `categories` (keys of `data.categories`) and the `general_notes` (keys of `data.general_notes`). ]==] local Analysis = {} Analysis.__index = Analysis function Analysis.new(input) local properties = input.properties local accented = string.match(input.head, M.sa_utilities.accent) ~= nil local analysis = setmetatable({ head = input.head, gender = input.gender, adjective = input.adjective or false, properties = properties, links = input.links or {}, class = input.class, accent = "", stems = {base = input.base}, options = { accented = accented, initial_svarita = properties.svarita or false, root_han = properties.han or false, }, groups = {}, type = nil, categories = {}, general_notes = {}, }, Analysis) -- An initial tvy-, dvy-, try-, dry- or ny- counts as two syllables, so the vocative gets an initial svarita. if accented and analysis:inLexicon("initial_svarita") then analysis.options.initial_svarita = true end return analysis end --[==[ Add the set `set` of the class's endings, with the current stems and options. `extra` can override fields of the group, e.g. to use a different `accent`. ]==] function Analysis:add(set, extra) if not M.data.endings[self.class][set] then error(("Internal error: no set '%s' of the %s endings"):format(set, self.class)) end local options, stems = {}, {} for key, value in pairs(self.options) do options[key] = value end for key, value in pairs(self.stems) do stems[key] = value end local group = {class = self.class, set = set, accent = self.accent, stems = stems, head = self.head, options = options} for key, value in pairs(extra or {}) do group[key] = value end table.insert(self.groups, FormGroup.new(group)) end function Analysis:category(key) table.insert(self.categories, key) end function Analysis:generalNote(key) table.insert(self.general_notes, key) end -- Return true if the list `name` of `data.lexicon` takes this head (or this class's stem, as the list's `subject` -- says). function Analysis:inLexicon(name) local list = M.data.lexicon[name] local subject = list.subject == "head" and self.head or self.stems.base for _, pattern in ipairs(list.except or {}) do if string.match(subject, pattern) then return false end end for _, pattern in ipairs(list.patterns) do if string.match(subject, pattern) then return true end end return false end function Analysis:headMatches(pattern) return string.match(self.head, pattern) ~= nil end function Analysis:baseMatches(pattern) return string.match(self.stems.base, pattern) ~= nil end function Analysis:monosyllabic() return M.sa_utilities.is_monosyllabic(self.head) end --[==[ Make the stems of a class ending in `vowel`, besides `base`. They are keyed as follows: `final_unaccented` (the base plus the vowel), `raised` and `raised_unaccented` (the vowel raised one grade, with and without the head's final accent), `lengthened` and `lengthened_unaccented` (the same for the lengthened vowel), `raised_glide` (the base plus ''a'' with the head's accent, plus ''v'') and `glide` (the base plus the vowel's semivowel). ]==] function Analysis:vowelStems(vowel) local utilities, base, accent = M.sa_utilities, self.stems.base, self.accent local function stem(key, ending) if ending then self.stems[key] = base .. ending end end stem("final_unaccented", vowel) stem("raised", utilities.up_one_grade[vowel .. accent]) stem("raised_unaccented", utilities.up_one_grade[vowel]) stem("lengthened", utilities.lengthen[vowel .. accent]) stem("lengthened_unaccented", utilities.lengthen[vowel]) stem("raised_glide", "a" .. accent .. "v") stem("glide", utilities.vowel_to_cons[vowel]) end -- The gender-neutral numerals: ṣáṣ; káti, táti and yáti; and páñca(n) and the like. function Analysis:numeral() self.accent = string.match(self.head, "(/?)[nz]?$") self.type = "numeral" if self:headMatches("a/?z$") then self:add("sas") self:category("numeral_s") elseif self:headMatches("ti$") then self:add("ti") self:category("numeral_i") else self:add("an_direct") -- The oblique endings take the head's own accent, wherever it falls. self:add("an_oblique", {accent = string.find(self.head, "/", 1, true) and "/" or ""}) self:category("numeral_an") end end -- The a-stems, masculine and neuter, including the pronominal declension. function Analysis:aStem() self.accent = string.match(self.head, "(" .. M.sa_utilities.accent .. "?)$") local pronominal = self.properties.pron self.type = pronominal and "pronominal_a" or "a" -- A stem-final s doesn't become ṣ (ṛbīsa, bisa). self.options.keep_stem_s = true if self.gender == "m" then self:add("masculine_direct") self:add(pronominal and "pronominal_masculine_plural" or "masculine_plural") else self:add("neuter_direct") end self:add(pronominal and "pronominal_oblique" or "nominal_oblique") self:add("oblique") -- The Vedic instrumental singular in -ā of the oxytone abstracts in -tva(na) (Lanman p.335f.). self:add(self:headMatches("tva?n?a/$") and "tva_instrumental" or "instrumental") -- The Vedic genitive/locative dual in -os after -y- (Wackernagel III p.98-99 §48a). self:add(self:baseMatches(".y$") and "genitive_dual_after_y" or "genitive_dual") self:category("a") end -- The i- and u-stems. function Analysis:shortIUStem() local vowel, accent = string.match(self.head, "([iu])(/?)$") self.accent = accent self.type = vowel self:vowelStems(vowel) if self:inLexicon("sakhi") then self:add("sakhi") elseif self.gender == "m" then if self:inLexicon("strong_masculine_i_u") then self:add("strong_masculine_singular") else self:add(self:inLexicon("vedic_instrumental_masculine") and "masculine_instrumental_vedic" or "masculine_instrumental") self:add("masculine_dative_ablative") end if vowel == "i" then -- Whitney §336f self:add("masculine_locative_i") elseif self:inLexicon("rigvedic_locative_u") then self:add("masculine_locative_u_rigvedic") else self:add("masculine_locative") end self:add("masculine_direct") elseif self.gender == "f" then self:add(vowel == "i" and "feminine_instrumental_locative_i" or "feminine_instrumental_locative_u") self:add("feminine") self:add("feminine_" .. vowel) else -- Adjectives and nouns differ in the neuter (Whitney §344). if self.adjective then self:add(self:inLexicon("strong_neuter_adjective_u") and "strong_neuter_adjective" or "neuter_adjective_dative_ablative") self:add(vowel == "i" and "neuter_adjective_locative_i" or "neuter_adjective_locative_u") self:add("neuter_adjective_genitive_dual") else self:add(self:inLexicon("strong_neuter_noun_u") and "strong_neuter_noun" or "neuter_noun_dative_ablative") self:add(vowel == "i" and "neuter_noun_locative_i" or "neuter_noun_locative_u") self:add("neuter_noun_genitive_dual") end self:add("neuter_direct") self:add(self:inLexicon("vedic_instrumental_neuter_u") and "madhu_instrumental" or "neuter_instrumental") end self:add("oblique") self:category(vowel) end -- The ā-stems, both derived (feminine) and root stems. function Analysis:longAStem() if self.gender == "n" then -- We don't build a neuter on the masculine nominatives in -ās that go with neuter nouns (Whitney §367b, -- Wackernagel III p.129). error("The neuter of radical stems in -ā ends in -a.", 0) end self.accent = string.match(self.head, "(" .. M.sa_utilities.accent .. "?)$") local pronominal, root = self.properties.pron, self.properties.root self.type = pronominal and "pronominal_long_a" or "long_a" local monosyllabic = self:monosyllabic() local masculine = self.links.masculine local derived = not (root or monosyllabic) or monosyllabic and (root == false or masculine ~= nil and string.match(masculine, "a/?$") ~= nil) if derived then if self.gender == "m" then error("Add <root> if this is a root noun or adjective.", 0) end self:category("long_a") self:add(pronominal and "pronominal_derived" or "derived") self:add("derived_direct") self:add(self:baseMatches(".y$") and "genitive_dual_after_y" or "genitive_dual") else self:category("root_long_a") if self.gender == "m" then self:generalNote("root_long_a_masculine") self:add("root_masculine") else -- The derived declension, except for the nominative singular (Macdonell p.249ff.). self:add("root_feminine") self:add(self:baseMatches(".y$") and "genitive_dual_after_y" or "genitive_dual") end end self:add("oblique") end -- The ī- and ū-stems: strī, the derived stems (the vṛkī-, devī- and ū-declensions) and the root stems. function Analysis:longIUStem() if self.gender == "n" then -- The Vedic forms that could come from a neuter ī-stem (Whitney §367b) are better given by hand. error("The neuter of radical stems in -ī/ū ends in -i/u.", 0) end local vowel, accent = string.match(self.head, "([IU])(/?)$") self.accent = accent self.type = vowel == "I" and "long_i" or "long_u" self:vowelStems(vowel) local properties, masculine = self.properties, self.links.masculine local monosyllabic = self:monosyllabic() local feminine = self.gender == "f" if self:inLexicon("stri") and not (masculine and string.match(masculine, "stf/?$")) then self.options.iy_uv_before_vowel = true self:add("stri") elseif not (properties.root or monosyllabic) or monosyllabic and properties.root == false or properties.han then if properties.vrki then -- The vṛkī́-declension (Whitney §355ff.), given as the older forms of the later declension. if vowel == "U" then error("The vṛkī́-declension (<vrki>) is a declension of ī-stems.", 0) end self:category("vrki") self:generalNote("vrki") if properties.contract == false then self.options.iy_uv_before_vowel = true end self:add("vrki") self:add(accent == "" and "vrki_instrumental_barytone" or "vrki_instrumental_oxytone") self:add(accent == "" and "vrki_genitive_dual_barytone" or "vrki_genitive_dual_oxytone") elseif vowel == "I" then self:category("long_i") self:add("devi") -- The Rigvedic genitive plural in -īnā́m (Whitney §319a). self:add(accent == "" and "devi_genitive_plural_barytone" or "devi_genitive_plural_oxytone") else -- Whitney §356a, given as the older forms of §364 (Wackernagel III p.189). if not self.adjective then self:category("long_u") elseif self.gender == "m" then self:category("long_u") elseif masculine and string.match(masculine, "u" .. M.sa_utilities.accent .. "?$") and not self:inLexicon("classical_long_u_feminine") then self:generalNote("vedic_long_u_feminine") end if self:baseMatches("y$") or self:inLexicon("vedic_uv") then -- With the Vedic -úv- (Macdonell p.290 §384a). self:add("vedic_uv") else self:add("u_derived") self:add(accent == "" and "u_instrumental_barytone" or "u_instrumental_oxytone") self:add(accent == "" and "u_genitive_dual_barytone" or "u_genitive_dual_oxytone") end self:add("u_nominative_genitive") end self:add("derived_oblique") self:add(vowel == "I" and "derived_vocative_i" or "derived_vocative_u") else self:category(vowel == "I" and "root_long_i" or "root_long_u") if monosyllabic then -- Root nouns (Whitney §351; Wackernagel III p.181). self.options.iy_uv_before_vowel = true self:add(feminine and "root_monosyllabic_feminine" or "root_monosyllabic") self:add("root_monosyllabic_oblique") else -- Compounds of root nouns (Whitney §352; Wackernagel III §91a p.179, §100a, §100eα p.192-193; Macdonell -- p.268, 288). These are uncontracted after two consonants, and the ū-stems also when accented, except in -- -sū/-ṣū. local utilities = M.sa_utilities local uncontracted = properties.contract == false or properties.contract ~= true and ( self:baseMatches(utilities.consonant .. utilities.consonant .. "$") or vowel == "U" and (self:headMatches(utilities.accent) and not self:baseMatches("[sz]$") or self:inLexicon("uncontracted_long_u_compound")) or vowel == "I" and (self:inLexicon("uncontracted_long_i_compound") or self:baseMatches("D$") and self:baseMatches(utilities.accent))) if uncontracted then -- -Ciy-/-Cuv- before a vowel. self.options.iy_uv_before_vowel = true self:add(feminine and "uncontracted_locative_feminine" or "uncontracted_locative") else self:add((accent ~= "" and "contracted_locative_oxytone" or "contracted_locative") .. (feminine and "_feminine" or "")) end self:add(feminine and "compound_feminine_dative_ablative" or "compound_dative_ablative") self:add("compound_oblique") end self:add("root_common") end end -- The ṛ-stems. function Analysis:vocalicRStem() local r = self.properties.r if self.gender == "f" and r == "A" and self:baseMatches("t$") and not self:baseMatches("^s?t$") then error("The feminine of adjectives in -tṛ ends in -trī.", 0) end self.accent = string.match(self.head, "(/?)$") self.type = "vocalic_r" self.stems.lengthened_unaccented = self.stems.base .. "F" if self.gender == "n" then self:add("neuter") else if not r then error("Give the vowel of the accusative singular with <r:a> or <r:ā>.", 0) end self:add("masculine_feminine") self:add(r == "a" and "strong_short_a" or "strong_long_a") self:add(self.gender == "f" and "feminine_accusative_plural" or "masculine_accusative_plural") end self:add("oblique") self:category("vocalic_r") end -- The consonantal root stems. These also cover the stems in -āt/-it/-ut/-ṛt, -akt and -ās/-os, and púṃs. function Analysis:rootStem() local utilities = M.sa_utilities local vowel, accent, extra, final = string.match(self.head, "(" .. utilities.vowel .. ")(" .. utilities.accent .. "?)([rM]?)([kgGcjwqtTdDpBmrzShs]t?)$") if string.match(final, "[jSh]") and not self.properties.final then error("Give the final consonant of the nominative singular with <final:k> or <final:ṭ>.", 0) end self.accent = accent self.type = "root" self.options.root_noun = true self.options.final_obstruent = self.properties.final self.options.diaspirate = self.properties.diaspirate or false local nasal = string.gsub(final, ".", utilities.homorganic_nasal) self.stems.neuter_plural = self.stems.base .. vowel .. accent .. nasal .. final self.stems.neuter_plural_unaccented = self.stems.base .. vowel .. nasal .. final if self.gender == "n" then -- The neuter nominative plural, with the nasal (Whitney §389c). self:add((string.match(final, "[mr]") == nil and extra == "") and "neuter_plural_nasal" or "neuter_plural") end if self:inLexicon("pums") then self:add("pums") elseif self:monosyllabic() and not (accent == "\\" or self.options.initial_svarita) then self:add(self.gender == "n" and "monosyllabic_neuter_direct" or "monosyllabic_direct") self:add("monosyllabic_oblique") self:add(final == "s" and "monosyllabic_locative_plural_s" or "monosyllabic_locative_plural") else if self.gender == "n" then self:add("polysyllabic_neuter_direct") else self:add("polysyllabic_direct") -- The Vedic masculine nominative singular of the adjectives in -dṛ́ś (Wackernagel III p.246). self:add((self.gender == "m" and self:inLexicon("vedic_nominative_drs")) and "drs_nominative" or "polysyllabic_nominative") end self:add("polysyllabic_oblique") self:add(final == "s" and "polysyllabic_locative_plural_s" or "polysyllabic_locative_plural") end self:category("root") end -- The as-, is- and us-stems, including the comparatives in -yas. function Analysis:sStem() local utilities = M.sa_utilities local vowel, accent = string.match(self.head, "([aiu])(" .. utilities.accent .. "?)s$") self.accent = accent self.type = vowel .. "s" local base = self.stems.base self.stems.neuter_plural = base .. utilities.lengthen[vowel] .. accent .. "Ms" self.stems.neuter_plural_unaccented = base .. utilities.lengthen[vowel] .. "Ms" local comparative = vowel == "a" and (self:baseMatches("[^aAiK/\\]" .. utilities.accent .. "?y$") or self:baseMatches("jyA/?y$")) if comparative and self.gender ~= "n" then if self.gender ~= "m" then error("The feminine of comparatives in -yas ends in -yasī.", 0) end self:add("comparative_masculine") elseif self.gender == "m" or self.gender == "f" then if vowel == "a" then self:add("as_direct") else self:add("is_us_direct") -- The Vedic vocative (Wackernagel III p.292 §152c). self:add(vowel == "i" and "is_vocative" or "us_vocative") end self:add("masculine_feminine_dual") else -- Compound adjectives in -as (Macdonell p.226; Whitney §418a). if self.adjective and vowel == "a" and not comparative and (self:baseMatches(utilities.vowel .. ".*" .. utilities.vowel) or self:baseMatches("^sv")) then self:add("compound_as_neuter_nominative") else self:add("neuter_nominative") end self:add("neuter_direct") end self:add("oblique") self:category(comparative and "comparative" or vowel .. "s") end -- The an-stems. function Analysis:anStem() local utilities = M.sa_utilities self.accent = string.match(self.head, "a(" .. utilities.accent .. "?)n$") self.type = "an" self.options.retroflex_stem_n = true local properties = self.properties local contract = properties.contract if not self:baseMatches(utilities.consonant .. "[NYRnmyrlv]$") then contract = true end if self.gender == "n" then -- Wackernagel III p.238 presupposes a neuter plural -hāni for -han. self:add("neuter_direct") self:add(properties.han and "han_neuter_nominative" or "neuter_nominative") self:add(contract and "contracted_neuter_dual" or "neuter_dual") else self:add("masculine_nominative_vocative") if properties.han or self:inLexicon("short_strong_an") then self:add("short_strong") self:add(properties.han and "han_accusative_plural" or "short_strong_accusative_plural") else -- Whitney §426b; Wackernagel III p.267. self:add(self:inLexicon("optional_short_strong_an") and "optional_short_strong" or "strong") self:add(contract and "contracted_accusative_plural" or "uncontracted_accusative_plural") end end -- The Vedic locative singular without -i (Whitney §425c). self:add(contract and "contracted_oblique" or "uncontracted_oblique") self:add("oblique") self:category("an") end -- The in-stems. function Analysis:inStem() self.accent = string.match(self.head, "i(" .. M.sa_utilities.accent .. "?)n$") self.type = "in" self.options.retroflex_stem_n = true self:add(self.gender == "n" and "neuter_direct" or "masculine_direct") self:add("oblique") self:category("in") end -- The at-stems: the participles in -at (and -āt), and the stems in -vat/-mat. function Analysis:atStem() local consonant, vowel, accent = string.match(self.head, "([mv]?)([aA])(" .. M.sa_utilities.accent .. "?)t$") self.accent = accent local properties = self.properties local long = vowel == "A" and "long_a" or "short_a" if self:headMatches("[vm]a/?t$") and not properties.participle then self.type = consonant .. "at" self:add(self.gender == "n" and "vat_neuter" or "vat_masculine") self:add("vat_oblique") self:category(consonant .. "at") return end self.type = "at" if properties.nonasal then -- Participles like júhvat, with no nasal in the strong stem. self:add(self.gender == "n" and "nonasal_neuter" or "nonasal_masculine") self:add("nonasal_oblique") else if self.gender ~= "n" then self:add("participle_masculine_" .. long) else -- The neuter nominative dual is the feminine stem (Whitney §443a, though this may be artificial: §447b). local feminines = properties.feminine or self.links.feminine if not feminines or not feminines[1] then error("Give the nominative dual (the feminine stem) with <feminine:...>.", 0) end self.stems.feminine = feminines[1] self.stems.second_feminine = feminines[2] self:add(feminines[2] and "neuter_dual_two_feminines" or "neuter_dual_feminine") -- The Rigvedic neuter plural in -ānti (Wackernagel III p.262). self:add("participle_neuter_plural_" .. long) self:add("participle_neuter_singular") self:add("participle_neuter_singular_" .. long) end self:add("participle_oblique_" .. long) end self:add("oblique") self:add("oblique_" .. long) self:category("at") end -- The añc-stems, which have a strong stem (the head), a middle stem in -ac- and a weakest stem. function Analysis:ancStem() local consonant, vowel, accent = string.match(self.head, "([yv]?)([aA])(" .. M.sa_utilities.accent .. "?)Yc$") self.accent = accent self.type = "anc" local middle = string.gsub(self.stems.base, "Yc$", "c") self.stems.base = middle self:add(self.gender == "m" and "masculine_direct" or "neuter_direct") self:add("middle_oblique") local weakest if vowel == "A" then weakest = middle elseif self:inLexicon("tiryanc") then weakest = string.gsub(middle, "ya(/?)c$", "a%1Sc") elseif consonant ~= "" then weakest = string.gsub(middle, "([yv])a([/\\]?)c$", function(semivowel, stem_accent) return (semivowel == "y" and "I" or "U") .. (stem_accent == "" and "" or "/") .. "c" end) elseif self:inLexicon("ud_anc") then weakest = string.gsub(middle, "ac$", "Ic") else error("This añc-stem is not supported.", 0) end self.stems.weakest = weakest if vowel == "A" or accent ~= "/" then self:add(self.gender == "m" and "masculine_accusative_plural" or "neuter_dual") self:add("weakest_oblique") else -- Oxytones have both accentuations (Whitney §410). self:add(self.gender == "m" and "oxytone_masculine_accusative_plural" or "oxytone_neuter_dual") self:add("oxytone_weakest_oblique") end self:add("copies") self:category("anc") end -- The o-stem gó, the au-stem nau and the ai-stem rái, and their compounds. function Analysis:diphthongStem(vowel, type) self.accent = string.match(self.head, vowel .. "(" .. M.sa_utilities.accent .. "?)$") self.type = type self:add("all") self:category(type) end -- The vāṃs-stems, i.e. the perfect participles. function Analysis:vamsStem() local utilities = M.sa_utilities self.accent = string.match(self.head, "vA(" .. utilities.accent .. "?)Ms$") self.type = "vams" local base = self.stems.base local weak if self:inLexicon("vams_glide") or self:baseMatches("u$") then weak = base .. "v" elseif self:baseMatches("U$") then weak = string.gsub(base, "U$", "uv") elseif self:inLexicon("vams_keep_i") then weak = base elseif self:baseMatches("[aAIuUfFxeEoO]" .. utilities.accent .. "?M?" .. utilities.consonant .. "+i$") or self:inLexicon("vams_drop_i") then -- The i of śiśrivā́ṃs and the like belongs to the root. weak = string.gsub(base, "i$", "") elseif self.properties.retroflex_l then weak = string.gsub(string.gsub(base, "q$", "L"), "Q$", "Lh") else weak = base end self.stems.weak = weak self:add(self.gender == "m" and "masculine_direct" or "neuter_direct") self:add("oblique") self:category("vams") end -- The personal pronouns. Their forms are whole forms on an empty stem, and the head (ahám or tvám) says which person. function Analysis:personal() local first = self:headMatches("^a") self.type = first and "first_person" or "second_person" self.stems.base = "" self:add(first and "first" or "second") end local CLASS_METHODS = { numeral = Analysis.numeral, a = Analysis.aStem, short_iu = Analysis.shortIUStem, long_a = Analysis.longAStem, long_iu = Analysis.longIUStem, vocalic_r = Analysis.vocalicRStem, root = Analysis.rootStem, s = Analysis.sStem, an = Analysis.anStem, ["in"] = Analysis.inStem, at = Analysis.atStem, anc = Analysis.ancStem, o = function(analysis) analysis:diphthongStem("o", "o") end, au = function(analysis) analysis:diphthongStem("O", "au") end, ai = function(analysis) analysis:diphthongStem("E", "ai") end, vams = Analysis.vamsStem, personal = Analysis.personal, } ------------------------------------------------------------------------------------------------------------------------ -- Generation -- ------------------------------------------------------------------------------------------------------------------------ --[==[ Generate the forms of form groups, slot by slot. Each form is `{slp1 = ..., note = KEY, stem = ..., ending = ..., options = {...}, position = N}`, i.e. the joined form, its note, the inputs to `join` and the position of the ending within its cell. With `novedic`, the Vedic endings are left out, and the remaining endings keep their positions. A cell that copies another (`"[nom]"`) is filled in once every group has run. ]==] local FormGenerator = {} FormGenerator.__index = FormGenerator local ENDING_FLAGS = {"iy_uv_before_vowel", "keep_s_before_voiceless", "strip_stem_accent"} function FormGenerator.new(novedic) return setmetatable({novedic = novedic}, FormGenerator) end function FormGenerator:form(group, ending, case, position) local text, note, stem_key = ending, nil, nil if type(ending) == "table" then text, note, stem_key = ending[1], ending.note, ending.stem end if self.novedic and note and M.data.notes[note].vedic then return nil end local stem if string.sub(text, 1, 1) == "+" then text = string.sub(text, 2) stem = group.head elseif stem_key then stem = group.stems[stem_key] or error(("Internal error: no stem '%s' in %s.%s"):format(stem_key, group.class, group.set)) else stem = group.stems.base end text = string.gsub(text, "@", group.accent) local options = {} for key, value in pairs(group.options) do options[key] = value end if type(ending) == "table" then for _, flag in ipairs(ENDING_FLAGS) do if ending[flag] then options[flag] = true end end end options.recessive_accent = case == "voc" return {slp1 = M.sa_utilities.join(stem, text, options), note = note, stem = stem, ending = text, options = options, position = position} end --[==[ Generate the forms of `groups`. Return `cells` (slot -> list of forms) and `copies` (slot -> the slot it copies). Each slot is filled by one group only. ]==] function FormGenerator:generate(groups) local cells, copies = {}, {} for _, group in ipairs(groups) do for number, cases in pairs(M.data.endings[group.class][group.set]) do for case, cell in pairs(cases) do local slot = case .. "_" .. number if cells[slot] or copies[slot] then error(("Internal error: the slot %s is filled twice (%s.%s)"):format(slot, group.class, group.set)) end local copied = type(cell) == "string" and string.match(cell, "^%[(.*)%]$") if copied then copies[slot] = copied .. "_" .. number else local forms = {} if type(cell) == "string" then cell = {cell} end for position, ending in ipairs(cell) do local form = self:form(group, ending, case, position) if form then table.insert(forms, form) end end cells[slot] = forms end end end end -- Follow copies of copies back to the cell they come from. for slot in pairs(copies) do local source, seen = copies[slot], {[slot] = true} while copies[source] do if seen[source] then error("Internal error: the copies of " .. slot .. " go round in a circle") end seen[source] = true source = copies[source] end if not cells[source] then error(("Internal error: the slot %s copies %s, which is empty"):format(slot, source)) end copies[slot] = source end return cells, copies end ------------------------------------------------------------------------------------------------------------------------ -- Declension -- ------------------------------------------------------------------------------------------------------------------------ -- Return the cases of a table of class `class`: those listed in its entry in `data.classes`, or else every case except -- the enclitic ones. local function cases_of(class) local codes for _, entry in ipairs(M.data.classes) do if entry.id == class then codes = entry.cases end end local cases = {} for _, case in ipairs(M.data.cases) do local listed = not codes and not case.enclitic for _, code in ipairs(codes or {}) do listed = listed or code == case.code end if listed then table.insert(cases, case) end end return cases end -- Return the description of a table of gender `gender` and type `type` that titles and error messages use, e.g. -- "masculine a-stem" or "first-person pronoun". A manual table gives just its gender ("neuter"), or the empty string -- if it has none. local function table_kind(gender, type) local words = {} local entry = gender and M.data.genders[gender] if entry and entry.in_title ~= false then table.insert(words, entry.name:lower()) end if type then table.insert(words, M.data.types[type]) end return table.concat(words, " ") end --[==[ One table. It holds the `head` (in SLP1), the `gender`, the stem `class` and `type`, the `numbers` and `cases` shown and the forms of every slot: `slots[slot]` is a list of `{slp1 = ..., notes = {text...}}`, empty if the slot has no form. It also keeps the form `groups` it was declined with, the generated forms in `generated` and the slots that copy another in `copies`, as well as its `categories` and `general_notes` (keys into `data`) and the `user_notes` given in the call. ]==] local Declension = {} Declension.__index = Declension function Declension.new(analysis, cells, copies, numbers) local declension = setmetatable({ head = analysis.head, gender = analysis.gender, adjective = analysis.adjective, class = analysis.class, type = analysis.type, numbers = numbers, cases = cases_of(analysis.class), groups = analysis.groups, generated = cells, copies = copies, slots = {}, overridden = {}, categories = analysis.categories, general_notes = analysis.general_notes, user_notes = {}, }, Declension) for _, case in ipairs(declension.cases) do for _, number in ipairs(M.data.numbers) do local slot = case.code .. "_" .. number.code if numbers[number.code] and not cells[copies[slot] or slot] then error(("Internal error: no forms for the slot %s (%s)"):format(slot, analysis.class)) end local forms = {} for _, form in ipairs(cells[copies[slot] or slot] or {}) do table.insert(forms, {slp1 = form.slp1, notes = form.note and {M.data.notes[form.note].text} or {}}) end declension.slots[slot] = forms end end return declension end --[==[ Make a manual table (`<manual>`), which has no stem class and no generated forms: every slot starts out empty and is filled by the cell parameters. `gender` can be {nil}. ]==] function Declension.manual(head, gender, numbers) local cells = {} for _, case in ipairs(M.data.cases) do for _, number in ipairs(M.data.numbers) do cells[case.code .. "_" .. number.code] = {} end end return Declension.new({head = head, gender = gender, adjective = false, class = "manual", groups = {}, categories = {}, general_notes = {}}, cells, {}, numbers) end --[==[ Replace the forms of `slot` with `forms` from `Overrides`. These are written in IAST or in the display script, and read with `bridge`; a form of `-` means no form. ]==] function Declension:override(slot, forms, bridge) if not self.slots[slot] then error(("'%s' is not a cell of this table"):format(slot), 0) end local replaced = {} for _, form in ipairs(forms) do if form.written ~= "-" then table.insert(replaced, {slp1 = bridge:toSlp1(form.written), notes = form.footnotes, override = true}) end end self.slots[slot] = replaced self.overridden[slot] = true end --[==[ Return the names of the table's categories. `kind` is `noun` ({{tl|sa-ndecl}}), `adjective` (the masculine table of an adjective) or `numeral`. An adjective's other tables have no categories. ]==] function Declension:categoryNames(kind) local names = {} if kind then for _, key in ipairs(self.categories) do table.insert(names, M.data.categories[key][kind]) end end return names end -- Return the texts of the table's general notes. function Declension:generalNoteTexts() local texts = {} for _, key in ipairs(self.general_notes) do table.insert(texts, M.data.general_notes[key]) end return texts end --[==[ Return the data of the table for bots (`json=1`). This has the head, the gender, the stem class and type, the numbers shown, and for each slot its forms in SLP1, in the display script and in IAST, with their notes. It also has the user's notes, the general notes, the categories of `kind` (see `categoryNames`) and whether `nocat` was given. ]==] function Declension:toJson(bridge, kind, nocat) local slots = {} for slot, forms in pairs(self.slots) do local list = {} for _, form in ipairs(forms) do table.insert(list, { slp1 = form.slp1, form = bridge:toNative(form.slp1), translit = bridge:toIast(form.slp1), notes = form.notes, override = form.override, }) end slots[slot] = list end local numbers = {} for _, number in ipairs(M.data.numbers) do if self.numbers[number.code] then table.insert(numbers, number.code) end end return { head = self.head, gender = self.gender, class = self.class, type = M.data.types[self.type], numbers = numbers, slots = slots, user_notes = self.user_notes, general_notes = self:generalNoteTexts(), categories = self:categoryNames(kind), nocat = nocat or false, } end ------------------------------------------------------------------------------------------------------------------------ -- The table -- ------------------------------------------------------------------------------------------------------------------------ --[==[ Render a `Declension` as a table with [[Module:inflection-table]]. There is a column for each number shown and a row for each case, and each row is marked with `data-case` so that scripts can reorder the cases. The cells come from [[Module:inflection utilities]]' `show_forms`, which gives each form in the display script, linked with an accelerator for `lemma`, with its IAST below. The notes go under the table. `kind` says which categories to add (see `Declension:categoryNames`); with {nil}, none are added. ]==] local TableRenderer = {} TableRenderer.__index = TableRenderer function TableRenderer.new(declension, bridge, lemma, kind) return setmetatable({declension = declension, bridge = bridge, lemma = lemma, kind = kind}, TableRenderer) end -- Return the numbers shown, in order. function TableRenderer:numbers() local numbers = {} for _, number in ipairs(M.data.numbers) do if self.declension.numbers[number.code] then table.insert(numbers, number) end end return numbers end -- Return the accelerator tags of a slot: the case, then the gender for an adjective's table, then the number. function TableRenderer:accel(case, number) local declension = self.declension local tags = {case.accel} if declension.adjective then table.insert(tags, M.data.genders[declension.gender].accel) end table.insert(tags, number.accel) return table.concat(tags, "|") end -- Return the forms of every slot shown, as linked text (an em dash for none), and the footnotes, numbered case by -- case. function TableRenderer:cells() local declension, bridge = self.declension, self.bridge local formtable, slot_list = {}, {} for _, case in ipairs(declension.cases) do for _, number in ipairs(self:numbers()) do local slot = case.code .. "_" .. number.code local forms = declension.slots[slot] if forms[1] then local list = {} for _, form in ipairs(forms) do local footnotes if form.notes[1] then footnotes = {} for _, note in ipairs(form.notes) do table.insert(footnotes, "[" .. note .. "]") end end table.insert(list, {form = bridge:toNative(form.slp1), translit = bridge:toIast(form.slp1), footnotes = footnotes}) end formtable[slot] = list end table.insert(slot_list, {slot, self:accel(case, number)}) end end M.inflection_utilities.show_forms(formtable, { lang = M.lang, lemmas = {self.lemma}, slot_list = slot_list, include_translit = true, }) return formtable, formtable.footnote end -- "Masculine a-stem declension of देव" function TableRenderer:title() local declension, bridge = self.declension, self.bridge local head = M.links.full_link({lang = M.lang, sc = bridge.script, alt = bridge:toNative(declension.head), tr = "-"}) local kind = table_kind(declension.gender, declension.type) if kind == "" then return "Declension of " .. head end return mw.ustring.upper(mw.ustring.sub(kind, 1, 1)) .. mw.ustring.sub(kind, 2) .. " declension of " .. head end function TableRenderer:render() local declension = self.declension local cells, footnotes = self:cells() local lines = {M.inflection_table.make_top{ title = self:title(), palette = "blue", tall = "yes", lang = "sa", class = "sticky-left-column", }} -- make_top has already opened the first row. table.insert(lines, '! class="outer" |') for _, number in ipairs(self:numbers()) do table.insert(lines, '! class="outer" | ' .. number.name) end for _, case in ipairs(declension.cases) do table.insert(lines, ('|- data-case="%s"'):format(case.code)) table.insert(lines, "! " .. case.name) for _, number in ipairs(self:numbers()) do table.insert(lines, "| " .. cells[case.code .. "_" .. number.code]) end end local notes = {} if footnotes ~= "" then table.insert(notes, footnotes) end for _, note in ipairs(declension.user_notes) do table.insert(notes, note) end for _, note in ipairs(declension:generalNoteTexts()) do table.insert(notes, note) end table.insert(lines, M.inflection_table.make_bottom{notes = table.concat(notes, "<br />")}) local categories = declension:categoryNames(self.kind) if categories[1] then table.insert(lines, M.utilities.format_categories(categories, M.lang)) end return table.concat(lines, "\n") end ------------------------------------------------------------------------------------------------------------------------ -- The call -- ------------------------------------------------------------------------------------------------------------------------ local ALL_NUMBERS = {s = true, d = true, p = true} --[==[ Decline one table without a frame. `input` has the following fields: * `head`: the head, in SLP1; * `gender`: `m`, `f`, `n` or `num` (the numerals); * `adjective`: true if the table is one of an adjective's tables; * `properties`: what the indicators set, in SLP1: `root` (true, false for `nonroot`, or nil), `vrki`, `pron`, `novedic`, `r` (`a` or `A`), `final` (`k`, `w` or `t`), `diaspirate`, `participle`, `nonasal`, `contract` (true, false for `nocontract`, or nil), `han`, `svarita`, `retroflex_l`, `feminine` (a list of stems) and `numbers` (a set of s/d/p); * `links`: the other heads of an adjective that the table looks at, i.e. `masculine` (for a feminine table) and `feminine` (a list, for the neuter table). Return the Declension. ]==] function export.decline_table(input) local properties = input.properties or {} local class, base = Head.new(input.head):detectClass(input.gender, properties) if not class then error("No declension class could be detected. Please check the head or specify the declension.", 0) end local analysis = Analysis.new{head = input.head, base = base, gender = input.gender, adjective = input.adjective, properties = properties, links = input.links, class = class} CLASS_METHODS[class](analysis) local cells, copies = FormGenerator.new(properties.novedic):generate(analysis.groups) local numbers = input.gender == "num" and {p = true} or properties.numbers or ALL_NUMBERS return Declension.new(analysis, cells, copies, numbers) end -- Return true if a table of class `class` and gender `gender` uses the indicator defined by `definition`. local function uses(definition, class, gender) return (definition.classes == nil or definition.classes[class] == true) and (definition.genders == nil or definition.genders[gender] == true) end -- Return the cell parameters of a table from `args`, by slot. Each parameter is the slot preceded by `prefix` (`m_`, -- `f2_`, etc.). local function cell_values(args, prefix) local values = {} for _, case in ipairs(M.data.cases) do for _, number in ipairs(M.data.numbers) do local slot = case.code .. "_" .. number.code values[slot] = args[prefix .. slot] end end return values end local function cell_parameters(params, prefix) for _, case in ipairs(M.data.cases) do for _, number in ipairs(M.data.numbers) do params[prefix .. case.code .. "_" .. number.code] = {} end end end --[==[ Implement {{tl|sa-ndecl}} without a frame, for other modules and for testing. `args` are the template's arguments and `pagename` is the page's title. Return the Declension, its ScriptBridge and the processed args. ]==] function export.decline_noun(args, pagename) local params = { [1] = {}, note = {list = true}, nocat = {type = "boolean"}, json = {type = "boolean"}, } cell_parameters(params, "") args = M.parameters.process(args, params) local spec = Spec.parse(args[1] or "", "noun") local head = spec.head ~= "" and spec.head or pagename local bridge = ScriptBridge.new(head, pagename) local gender for name, definition in pairs(M.data.indicators.noun) do if definition.group == "gender" and spec.indicators[name] then gender = name end end local properties = spec:properties(bridge) local declension if spec.indicators.manual then for name, definition in pairs(M.data.indicators.noun) do if spec.indicators[name] and name ~= "manual" and definition.group ~= "gender" and definition.group ~= "numbers" then error(("The indicator '%s' does not apply to a manual table"):format(name), 0) end end declension = Declension.manual(bridge:toSlp1(head), gender, gender == "num" and {p = true} or properties.numbers or ALL_NUMBERS) else declension = export.decline_table{head = bridge:toSlp1(head), gender = gender, properties = properties} for name in pairs(spec.indicators) do local definition = M.data.indicators.noun[name] if definition.group ~= "gender" and not uses(definition, declension.class, gender) then error(("The indicator '%s' does not apply to a %s"):format(name, table_kind(gender, declension.type)), 0) end end end for slot, forms in pairs(Overrides.parse(cell_values(args, "")).slots) do declension:override(slot, forms, bridge) end declension.user_notes = args.note return declension, bridge, args end --[==[ The tables of an adjective, each a Declension, in this order: the masculine, a feminine for each head of `f:` (by default the masculine head), and the neuter (the head of `n:`, by default the masculine head). ]==] local AdjectiveDeclension = {} AdjectiveDeclension.__index = AdjectiveDeclension --[==[ Implement {{tl|sa-adecl}} without a frame, for other modules and for testing. `args` are the template's arguments and `pagename` is the page's title. Return the AdjectiveDeclension, its ScriptBridge and the processed args. ]==] function export.decline_adjective(args, pagename) local params = { [1] = {}, nocat = {type = "boolean"}, json = {type = "boolean"}, } local spec = Spec.parse(args[1] or "", "adjective") local feminine_specs = spec.indicators.f or {Spec.parse("", "adjective", true)} local prefixes = {"m_", "n_"} for position = 1, #feminine_specs do table.insert(prefixes, position == 1 and "f_" or "f" .. position .. "_") end for _, prefix in ipairs(prefixes) do cell_parameters(params, prefix) params[prefix .. "note"] = {list = true} end args = M.parameters.process(args, params) local masculine_head = spec.head ~= "" and spec.head or pagename local bridge = ScriptBridge.new(masculine_head, pagename) local shared = spec:properties(bridge) local masculine_slp1 = bridge:toSlp1(masculine_head) -- One entry per table, with its head (and any spec of its own), gender, cell prefix and links. local tables = {{spec = nil, slp1 = masculine_slp1, gender = "m", prefix = "m_"}} local feminine_stems = {} for position, feminine_spec in ipairs(feminine_specs) do local slp1 = feminine_spec.head ~= "" and bridge:toSlp1(feminine_spec.head) or masculine_slp1 table.insert(feminine_stems, slp1) table.insert(tables, {spec = feminine_spec, slp1 = slp1, gender = "f", prefix = position == 1 and "f_" or "f" .. position .. "_", links = {masculine = masculine_slp1}}) end local neuter_spec = spec.indicators.n table.insert(tables, {spec = neuter_spec, slp1 = neuter_spec and neuter_spec.head ~= "" and bridge:toSlp1(neuter_spec.head) or masculine_slp1, gender = "n", prefix = "n_", links = {feminine = {feminine_stems[1], feminine_stems[2]}}}) local adjective = setmetatable({tables = {}}, AdjectiveDeclension) local used = {} for _, item in ipairs(tables) do local properties = item.spec and item.spec:properties(bridge, shared) or shared local declension = export.decline_table{head = item.slp1, gender = item.gender, adjective = true, properties = properties, links = item.links} for name, definition in pairs(M.data.indicators.adjective) do if spec.indicators[name] and definition.value ~= "spec" and uses(definition, declension.class, item.gender) then used[name] = true end end for name in pairs(item.spec and item.spec.indicators or {}) do if not uses(M.data.indicators.adjective[name], declension.class, item.gender) then error(("The indicator '%s' does not apply to the %s"):format(name, table_kind(item.gender, declension.type)), 0) end end for slot, forms in pairs(Overrides.parse(cell_values(args, item.prefix)).slots) do declension:override(slot, forms, bridge) end declension.user_notes = args[item.prefix .. "note"] table.insert(adjective.tables, declension) end for name, definition in pairs(M.data.indicators.adjective) do if spec.indicators[name] and definition.value ~= "spec" and not used[name] then error(("The indicator '%s' applies to none of the tables"):format(name), 0) end end return adjective, bridge, args end -- Return the kind of categories a noun table adds (see `Declension:categoryNames`). local function noun_kind(declension) return declension.class == "numeral" and "numeral" or "noun" end --[==[Entry point of {{tl|sa-ndecl}}. Return the table, or with {{para|json|1}}, its data as JSON.]==] function export.noun(frame) local pagename = M.headword_data.pagename local declension, bridge, args = export.decline_noun(frame:getParent().args, pagename) local kind = noun_kind(declension) if args.json then return M.JSON.toJSON(declension:toJson(bridge, kind, args.nocat)) end return TableRenderer.new(declension, bridge, pagename, not args.nocat and kind or nil):render() end --[==[ Entry point of {{tl|sa-adecl}}. Return the tables one above the other in an untitled inflection box (`make_box` of [[Module:inflection-table]], as {{tl|inflection-box-top}} makes), or with {{para|json|1}}, their data as JSON (`{tables = {...}}`). Only the masculine table adds categories. ]==] function export.adjective(frame) local pagename = M.headword_data.pagename local adjective, bridge, args = export.decline_adjective(frame:getParent().args, pagename) if args.json then local tables = {} for position, declension in ipairs(adjective.tables) do table.insert(tables, declension:toJson(bridge, position == 1 and "adjective" or nil, args.nocat)) end return M.JSON.toJSON({tables = tables}) end local rendered = {} for position, declension in ipairs(adjective.tables) do local kind = position == 1 and not args.nocat and "adjective" or nil table.insert(rendered, TableRenderer.new(declension, bridge, pagename, kind):render()) end return M.inflection_table.make_box({title = "-", flow = "vertical"}, "\n" .. table.concat(rendered, "\n") .. "\n") end return export ry1m1zephd0iidobkk0e49rrpe5ffhn 2571609 2571607 2026-10-18T12:22:40Z Hiyuune 50834 Hồi sửa về bản sửa đổi 2567270 của [[Special:Contributions/Hiyuune|Hiyuune]] ([[User talk:Hiyuune|talk]]): Phục hồi phiên bản cũ 2571609 Scribunto text/plain local export = {} local m_para = require("Module:parameters") local m_links = require("Module:links") local m_utils = require("Module:utilities") local lang = require("Module:languages").getByCode("sa") local m_script_utils = require("Module:script utilities") local sa_decl_data = require("Module:sa-decl/data") local SLP_to_IAST = require("Module:sa-utilities/translit/SLP1-to-IAST") local sa_utils_translit = require("Module:sa-utilities/translit") local m_inflection_table = require("Module:inflection-table") local PAGENAME = mw.loadData("Module:headword/data").pagename local sub = mw.ustring.sub local gsub = mw.ustring.gsub local match = mw.ustring.match local len = mw.ustring.len local accent = '[/\\]' local genders = { m = 'giống đực', f = 'giống cái', n = 'giống trung', gneut = 'giống trung lập' } local cases = { { 'nom', 'danh cách' }, { 'acc', 'đối cách' }, { 'ins', 'cách công cụ' }, { 'dat', 'dữ cách' }, { 'abl', 'ly cách' }, { 'gen', 'sinh cách' }, { 'loc', 'định vị cách' }, { 'voc', 'hô cách' } } local super_nums = {'¹', '²', '³', '⁴', '⁵', '⁶', '⁷', '⁸', '⁹', [0]='⁰'} local function to_super(num) local annotation = gsub(num, ".", super_nums) return annotation end local function get_form_note_tags(form_notes, data) local output = {} if type(form_notes) ~= 'table' then form_notes = { form_notes } end for _, form_note in ipairs(form_notes) do if type(data.form_notes[form_note]) ~= "number" then table.insert(data.form_notes_out, form_note) data.form_notes[form_note] = #data.form_notes_out end table.insert(output, to_super(data.form_notes[form_note])) end return table.concat(output) end local function make_header(args, data, sc_cache) local width = '40' local reverse_trd = (sc_cache.scCode == "Deva" and sc_cache.reverse_tr(args.lemma)) or sc_cache.reverse_tr(gsub(args.lemma, accent, "")) local title = 'Biến cách ' .. data.decl_type .. ' ' .. ' ' .. genders[args.g] .. ' của ' .. m_links.full_link({ term = nil, alt = reverse_trd, tr = "-", lang = lang, sc = sc_cache.sc }) local header = { m_inflection_table.make_top{ title = title, palette = 'blue', tall = 'yes', } } table.insert(header, '!\n') if args.n:find('s') then table.insert(header, '! số ít\n') end if args.n:find('d') then table.insert(header, '! số đôi\n') end if args.n:find('p') then table.insert(header, '! số nhiều\n') end return table.concat(header) end local function make_cell(args, data, code, num, sc_cache) local tag = code .. '_' .. num local forms, links, trs = {}, {}, {} if args[tag] then forms = mw.text.split(sc_cache.tr(args[tag]), '%s*[,]%s*') else forms = data.forms[tag] end if not forms then error("Internal error: No forms for slot '" .. tag .. "'") end for i, form in ipairs(forms) do if form == "" then -- in case of form reduced to zero by 'novedic' parameter -- do nothing else local form_note_tag = get_form_note_tags(forms['note' .. i] or {}, data) -- a superscript number at the end of manually added forms should not be part of the (linked) form if match(form, "[¹²³⁴⁵⁶⁷⁸⁹]$") then extra_note_tag = gsub(form, "^.+(.)$", "%1") form = gsub(form, ".$", "") else extra_note_tag = "" end if form == "-" then table.insert(links, m_links.full_link({ term = nil, alt = '-', lang = lang, sc = sc_cache.sc })) else -- strip accent before reverse tr for non-Deva scripts local reverse_trd = (sc_cache.scCode == "Deva" and sc_cache.reverse_tr(form)) or sc_cache.reverse_tr(gsub(form, accent, "")) table.insert(links, m_links.full_link({ term = reverse_trd, alt = reverse_trd .. form_note_tag .. extra_note_tag, tr = SLP_to_IAST.tr(form) .. form_note_tag .. extra_note_tag, lang = lang, sc = sc_cache.sc })) end end end return table.concat { '| ', table.concat(links, '<br>'), '\n' } end local function format_notes(args, data) local output = {} if #data.form_notes_out > 0 or #data.general_notes > 0 or #args.note > 0 then for i, form_note in ipairs(data.form_notes_out) do table.insert(output, '* ' .. to_super(i) .. form_note) end for _, note in ipairs(args.note) do table.insert(output, '* ' .. note) end for _, general_note in ipairs(data.general_notes) do table.insert(output, '* ' .. general_note) end return table.concat(output, '\n') .. '\n' else return '' end end local function make_table_noun(args, data, sc_cache) local output = { make_header(args, data, sc_cache) } for _, case in ipairs(cases) do local code, name = case[1], case[2] table.insert(output, '|-\n') table.insert(output, '! ' .. name .. '\n') if args.n:find('s') then table.insert(output, make_cell(args, data, code, 's', sc_cache)) end if args.n:find('d') then table.insert(output, make_cell(args, data, code, 'd', sc_cache)) end if args.n:find('p') then table.insert(output, make_cell(args, data, code, 'p', sc_cache)) end end table.insert(output, m_inflection_table.make_bottom{ notes = format_notes(args, data) }) if not args.nocat and #data.categories > 0 then table.insert(output, m_utils.format_categories(data.categories, lang)) end return table.concat(output) end local function get_sc_details(args) local sc, scCode if args.sc then sc = require("Module:scripts").getByCode(args.sc) scCode = args.sc else sc = lang:findBestScript(args.lemma) scCode = sc:getCode() if scCode == 'None' then sc = lang:findBestScript(PAGENAME) scCode = sc:getCode() if scCode == 'None' then return get_sc_details({sc = "Deva"}) end end end local tr, reverse_tr = sa_utils_translit.retrieve_tr_modules(scCode) return { tr = tr, reverse_tr = reverse_tr, sc = sc, scCode = scCode } end function export.show(frame) local params = { lemma = { default = PAGENAME }, decl = true, n = { default = 'sdp', set = {'s', 'd', 'p', 'sd', 'sp', 'dp', 'sdp'} }, sc = true, [1] = { alias_of = 'lemma' }, nom_s = true, nom_d = true, nom_p = true, acc_s = true, acc_d = true, acc_p = true, ins_s = true, ins_d = true, ins_p = true, dat_s = true, dat_d = true, dat_p = true, abl_s = true, abl_d = true, abl_p = true, gen_s = true, gen_d = true, gen_p = true, loc_s = true, loc_d = true, loc_p = true, voc_s = true, voc_d = true, voc_p = true, note = { list = true }, root = { type = 'boolean' }, vrki = { type = 'boolean' }, -- for 'vṛkī' declension pronominal = { type = 'boolean' }, -- use pronominal declension, e.g. for 'sarva' novedic = { default = false, type = "boolean" }, -- disable extra Vedic forms nv = {alias_of = 'novedic'}, norigvedic = { default = false, type = "boolean" }, -- disable Rigvedic forms r_stem_a = true, at_nom_s = { type = 'boolean' }, ambig_final = true, -- for stems on -j, -ś or -h diaspirate = { type = 'boolean' }, -- for diaspirate roots like 'duh' participle = { type = 'boolean' }, contract = { type = 'boolean' }, han = { type = 'boolean' }, -- for root 'han' voc_svar = { type = 'boolean' }, -- to indicate that the vocative should have initial svarita adj = { type = 'boolean' }, -- internal argument for categorizing adjectives masc_stem = true, -- to pass on masculine fem_stem = true, -- to pass on feminine as neuter nom.du. for participles fem2_stem = true, retroflex_l = { type = 'boolean' }, nocat = true, } local data = { forms = {}, categories = {}, decl_type = nil, form_notes = {}, form_notes_out = {}, general_notes = {}, } local g = frame.args[1] if g == 'gneut' then -- no number spec for gender-neutral numerals params.n = nil end local args = m_para.process(frame:getParent().args, params) args.g = g if args.g == 'gneut' then args.n = 'p' -- plural number-only end if args.pronominal then args.root = false -- the pronominal endings override the usual declension pattern end local sc_cache = get_sc_details(args) args.lemma = sc_cache.tr(args.lemma) args.has_accent = match(args.lemma, accent) if args.has_accent and (match(args.lemma, "^[td][rv]y") or (match(args.lemma, "^ny") and not match(args.lemma, "^nya/$"))) then args.voc_svar = true end for decl, decl_data in pairs(sa_decl_data) do if decl_data.detect(args) then sa_decl_data[decl](args, data) break end end if data.decl_type == nil then error("Không rõ lớp biến cách. Vui lòng kiểm tra mục từ biến thể hình thái hoặc chỉ rõ lớp biến cách.") end return make_table_noun(args, data, sc_cache) end return export dmxp5s62bryjr3nqco6x8xeuqo0hhtk 2571611 2571609 2026-10-18T12:23:31Z Hiyuune 50834 Restored revision 2571607 by [[Special:Contributions/Hiyuune|Hiyuune]] ([[en:w:User:BrandonXLF/Restorer|Restorer]]) 2571611 Scribunto text/plain --[==[ This module implements the declension tables of Sanskrit nouns and numerals ({{tl|sa-ndecl}}) and of adjectives ({{tl|sa-adecl}}). Authorship: originally written by [[User:Dragonoid76]] and [[User:Benwing2]], with the declension rules of [[User:Exarchus]]; rewritten by [[User:Fenakhay]] in October 2026. TERMINOLOGY: * "head" = The form given in the call: the nominative singular, or the stem for consonant stems. It is followed by an inline spec of indicators, e.g. `{{sa-ndecl|devá<m>}}` or `{{sa-adecl|kṛṣṇá<f:kṛṣṇā́.novedic>}}`. * "stem class" = One way of declining, e.g. the a-stems, the i- and u-stems or the root stems. The classes in [[Module:sa-decl/data]] are tried on the head in order, and the first one that takes it gives the "stem" (the head minus its ending). The class's other stems are made from that one; see `Analysis:vowelStems`. * "slot" = A particular combination of case and number, e.g. `nom_s` or `loc_p`. Each slot is one cell of a table. * "form group" = One set of endings from [[Module:sa-decl/data]], together with the stems, accent and sandhi options in force when it was added. A table is made of the forms of its groups, each joined with `join` in [[Module:sa-utilities]]. Everything is worked out in SLP1, and shown in the script of the head (or of the page name) with the IAST below. The classes, by area: * The call: `Spec` (the inline spec of a head), `Overrides` (the cell parameters) and `ScriptBridge` (conversion between the input script and SLP1). * The analysis: `Head` (finds the stem class of a head), `Analysis` (the decisions of one stem class, with one method per class that adds `FormGroup`s) and `FormGenerator` (makes the forms of a group). * The result: `Declension` (one table, with the forms of every slot, its notes and its categories), `AdjectiveDeclension` (the tables of an adjective) and `TableRenderer`. Other modules used: [[Module:sa-decl/data]] (the endings and every other table, loaded with mw.loadData), [[Module:sa-utilities]] (sandhi), [[Module:inflection-table]] (the frame of each table, and the box around an adjective's tables) and [[Module:inflection utilities]] (the links, transliteration, accelerators and footnotes in the cells). ]==] local export = {} local M = require("Module:module loader").init { require = { inflection_table = "Module:inflection-table", inflection_utilities = "Module:inflection utilities", JSON = "Module:JSON", links = "Module:links", parameters = "Module:parameters", parse_utilities = "Module:parse utilities", sa_utilities = "Module:sa-utilities", scripts = "Module:scripts", utilities = "Module:utilities", }, loadData = { data = "Module:sa-decl/data", headword_data = "Module:headword/data", }, lazy = { lang = function() return require("Module:languages").getByCode("sa") end, }, } ------------------------------------------------------------------------------------------------------------------------ -- Script -- ------------------------------------------------------------------------------------------------------------------------ --[==[ Convert the call's input to SLP1, and SLP1 to the display script and to IAST. The display script is the script of the head. If the head is in IAST (i.e. Latin), it is the script of the page name instead, and failing that, Devanagari. Latin input is read as IAST; anything else goes through the display script's converter. ]==] local ScriptBridge = {} ScriptBridge.__index = ScriptBridge function ScriptBridge.new(head, pagename) local script = M.lang:findBestScript(head) if script:getCode() == "None" then script = M.lang:findBestScript(pagename) end if script:getCode() == "None" then script = M.scripts.getByCode("Deva") end local code = script:getCode() return setmetatable({ script = script, code = code, from_native = require("Module:sa-utilities/translit/" .. code .. "-to-SLP1").tr, to_native = require("Module:sa-utilities/translit/SLP1-to-" .. code).tr, from_iast = require("Module:sa-utilities/translit/IAST-to-SLP1").tr, to_iast = require("Module:sa-utilities/translit/SLP1-to-IAST").tr, }, ScriptBridge) end function ScriptBridge:toSlp1(text) if M.lang:findBestScript(text):getCode() == "None" then return self.from_iast(text) end return self.from_native(text) end -- Only Devanagari shows the accents, so strip them for any other script. function ScriptBridge:toNative(slp1) if self.code ~= "Deva" then slp1 = string.gsub(slp1, M.sa_utilities.accent, "") end return self.to_native(slp1) end function ScriptBridge:toIast(slp1) return self.to_iast(slp1) end ------------------------------------------------------------------------------------------------------------------------ -- Spec -- ------------------------------------------------------------------------------------------------------------------------ --[==[ The inline spec of a head, `HEAD<NAME.NAME:VALUE...>`. `Spec.parse` parses it and checks it against the indicators of `template` (`noun` or `adjective`, as keyed in `data.indicators`). The result has `head`, as written (empty means the page name), and `indicators`, keyed by name. An indicator's value is a list for a list indicator, a Spec for a spec value, and {true} for a flag. A spec value (the feminine and neuter heads of {{tl|sa-adecl}}) is itself a head with a spec of its own. It is parsed with `nested` set, and then only takes the indicators that apply to a single stem. ]==] local Spec = {} Spec.__index = Spec local function spec_error(message, text) error(message .. " in the spec '" .. text .. "'.", 0) end -- Split `text` at `separator` (a Lua pattern), except inside angle brackets. local function split_outside_brackets(text, separator) local parts = {} local segments = M.parse_utilities.parse_balanced_segment_run(text, "<", ">") for _, group in ipairs(M.parse_utilities.split_alternating_runs(segments, separator)) do table.insert(parts, table.concat(group)) end return parts end function Spec.parse(text, template, nested) text = mw.text.trim(text) local spec = setmetatable({head = text, indicators = {}}, Spec) local registry = M.data.indicators[template] local segments = M.parse_utilities.parse_balanced_segment_run(text, "<", ">") if #segments > 3 or segments[#segments] ~= "" and #segments > 1 then spec_error("Only one <...> may follow the head", text) end spec.head = mw.text.trim(segments[1]) if string.find(spec.head, ",", 1, true) then spec_error("The head is one form", text) end local needs_gender = template == "noun" and not nested if #segments == 1 then if needs_gender then spec_error("Give the gender: <m>, <f>, <n>, <num> or <pers>", text) end return spec end local inside = string.match(segments[2], "^<(.*)>$") local groups = {} for _, indicator in ipairs(split_outside_brackets(inside, "%.")) do local name, value = string.match(indicator, "^%s*([^:<]-)%s*:%s*(.-)%s*$") if not name then name = mw.text.trim(indicator) end local definition = registry[name] if definition and definition.alias then name = definition.alias definition = registry[name] end if not definition or nested and (definition.value == "spec" or definition.group == "gender") then local names = {} for known, known_definition in pairs(registry) do if not nested or known_definition.value ~= "spec" and known_definition.group ~= "gender" then table.insert(names, known) end end table.sort(names) spec_error(("Unrecognized indicator '%s'; the indicators are %s"):format(name, table.concat(names, ", ")), text) end if spec.indicators[name] ~= nil then spec_error(("The indicator '%s' is given twice"):format(name), text) end if definition.group and definition.group ~= "numbers" then if groups[definition.group] then spec_error(("The indicators '%s' and '%s' exclude each other"):format(groups[definition.group], name), text) end groups[definition.group] = name end if definition.value and (value == nil or value == "") then spec_error(("The indicator '%s' needs a value ('%s:...')"):format(name, name), text) elseif not definition.value and value ~= nil then spec_error(("The indicator '%s' takes no value"):format(name), text) end if definition.value == nil then value = true elseif definition.value == "spec" then if definition.list then local specs = {} for _, item in ipairs(split_outside_brackets(value, "%s*,%s*")) do table.insert(specs, Spec.parse(item, template, true)) end value = specs else value = Spec.parse(value, template, true) end elseif definition.list then local values = mw.text.split(value, "%s*,%s*") for _, item in ipairs(values) do if definition.values and not definition.values[item] then spec_error(("'%s' is not a value of '%s'"):format(item, name), text) end end value = values elseif definition.values and not definition.values[value] then local values = {} for known in pairs(definition.values) do table.insert(values, known) end table.sort(values) spec_error(("'%s' is not a value of '%s'; the values are %s"):format(value, name, table.concat(values, ", ")), text) end spec.indicators[name] = value end -- A manual table can do without a gender. if needs_gender and not groups.gender and not spec.indicators.manual then spec_error("Give the gender: <m>, <f>, <n>, <num> or <pers>", text) end return spec end --[==[ Return the stem properties set by the indicators of `spec`, with SLP1 values (see `export.decline_table`), on top of `inherited`. When `spec` belongs to one of an adjective's heads, `inherited` holds the adjective's shared properties. ]==] function Spec:properties(bridge, inherited) local properties = {} for key, value in pairs(inherited or {}) do properties[key] = value end local indicators = self.indicators if indicators.root then properties.root = true elseif indicators.nonroot then properties.root = false end if indicators.contract then properties.contract = true elseif indicators.nocontract then properties.contract = false end for name, property in pairs({vrki = "vrki", pron = "pron", novedic = "novedic", diaspirate = "diaspirate", participle = "participle", nonasal = "nonasal", han = "han", svarita = "svarita", ["ḷ"] = "retroflex_l"}) do if indicators[name] then properties[property] = true end end if indicators.r then properties.r = bridge.from_iast(indicators.r) end if indicators.final then properties.final = bridge.from_iast(indicators.final) end if indicators.feminine then properties.feminine = {} for _, form in ipairs(indicators.feminine) do table.insert(properties.feminine, bridge:toSlp1(form)) end end if indicators.sg or indicators.du or indicators.pl then properties.numbers = {s = indicators.sg, d = indicators.du, p = indicators.pl} end -- The pronominal declension is never a root declension, even for a monosyllable such as tā́. if properties.pron then properties.root = false end return properties end ------------------------------------------------------------------------------------------------------------------------ -- Overrides -- ------------------------------------------------------------------------------------------------------------------------ --[==[ The cell parameters. `Overrides.parse` returns, for each slot, its forms as given: a comma-separated list, each form followed by any `[footnote]`s, or `-` for no form. ]==] local Overrides = {} Overrides.__index = Overrides function Overrides.parse(values) local overrides = setmetatable({slots = {}}, Overrides) for slot, value in pairs(values) do local forms = {} local segments = M.parse_utilities.parse_balanced_segment_run(value, "[", "]") for _, group in ipairs(M.parse_utilities.split_alternating_runs(segments, "%s*,%s*")) do local footnotes = {} for i = 2, #group - 1, 2 do if mw.text.trim(group[i + 1]) ~= "" then error(("Text after a footnote in %s=%s"):format(slot, value), 0) end table.insert(footnotes, string.match(group[i], "^%[(.*)%]$")) end local form = mw.text.trim(group[1]) if form ~= "" then table.insert(forms, {written = form, footnotes = footnotes}) end end overrides.slots[slot] = forms end return overrides end ------------------------------------------------------------------------------------------------------------------------ -- Analysis -- ------------------------------------------------------------------------------------------------------------------------ --[==[ A head in SLP1. `detectClass` finds its stem class by trying the classes of `data.classes` in order. It returns the id of the first class whose genders include `gender` and one of whose patterns matches (taking the pattern's `when` or `unless` property into account), along with the stem the pattern captures. ]==] local Head = {} Head.__index = Head function Head.new(slp1) return setmetatable({slp1 = slp1}, Head) end function Head:detectClass(gender, properties) for _, class in ipairs(M.data.classes) do if class.genders[gender] then for _, pattern in ipairs(class.patterns) do local text, when, unless = pattern, nil, nil if type(pattern) == "table" then text, when, unless = pattern[1], pattern.when, pattern.unless end if (when == nil or properties[when] == true) and (unless == nil or not properties[unless]) then local stem = string.match(self.slp1, text) if stem then return class.id, stem end end end end end return nil end --[==[ One set of endings of a stem class, as added by `Analysis:add`. `class` and `set` locate it in `data.endings`, `accent` is what `@` stands for, and `stems` maps the stem keys to stems. `head` is what the `+` endings attach to, and `options` is a copy of the analysis's sandhi options at the time the group was added. ]==] local FormGroup = {} FormGroup.__index = FormGroup function FormGroup.new(fields) return setmetatable(fields, FormGroup) end --[==[ The decisions made for one stem class. An analysis starts with the head and its gender, whether the table is one of an adjective's (`adjective`), the properties set by the indicators (see `export.decline_table`) and the other heads the table looks at (`links`). The class's method then sets the `accent` that `@` stands for (the head's final accent), makes the `stems` (`base` plus whatever the class needs) and adjusts the sandhi `options`, which each group copies when it is added. What comes out is the list of `groups`, the `type` (a key of `data.types`), the `categories` (keys of `data.categories`) and the `general_notes` (keys of `data.general_notes`). ]==] local Analysis = {} Analysis.__index = Analysis function Analysis.new(input) local properties = input.properties local accented = string.match(input.head, M.sa_utilities.accent) ~= nil local analysis = setmetatable({ head = input.head, gender = input.gender, adjective = input.adjective or false, properties = properties, links = input.links or {}, class = input.class, accent = "", stems = {base = input.base}, options = { accented = accented, initial_svarita = properties.svarita or false, root_han = properties.han or false, }, groups = {}, type = nil, categories = {}, general_notes = {}, }, Analysis) -- An initial tvy-, dvy-, try-, dry- or ny- counts as two syllables, so the vocative gets an initial svarita. if accented and analysis:inLexicon("initial_svarita") then analysis.options.initial_svarita = true end return analysis end --[==[ Add the set `set` of the class's endings, with the current stems and options. `extra` can override fields of the group, e.g. to use a different `accent`. ]==] function Analysis:add(set, extra) if not M.data.endings[self.class][set] then error(("Internal error: no set '%s' of the %s endings"):format(set, self.class)) end local options, stems = {}, {} for key, value in pairs(self.options) do options[key] = value end for key, value in pairs(self.stems) do stems[key] = value end local group = {class = self.class, set = set, accent = self.accent, stems = stems, head = self.head, options = options} for key, value in pairs(extra or {}) do group[key] = value end table.insert(self.groups, FormGroup.new(group)) end function Analysis:category(key) table.insert(self.categories, key) end function Analysis:generalNote(key) table.insert(self.general_notes, key) end -- Return true if the list `name` of `data.lexicon` takes this head (or this class's stem, as the list's `subject` -- says). function Analysis:inLexicon(name) local list = M.data.lexicon[name] local subject = list.subject == "head" and self.head or self.stems.base for _, pattern in ipairs(list.except or {}) do if string.match(subject, pattern) then return false end end for _, pattern in ipairs(list.patterns) do if string.match(subject, pattern) then return true end end return false end function Analysis:headMatches(pattern) return string.match(self.head, pattern) ~= nil end function Analysis:baseMatches(pattern) return string.match(self.stems.base, pattern) ~= nil end function Analysis:monosyllabic() return M.sa_utilities.is_monosyllabic(self.head) end --[==[ Make the stems of a class ending in `vowel`, besides `base`. They are keyed as follows: `final_unaccented` (the base plus the vowel), `raised` and `raised_unaccented` (the vowel raised one grade, with and without the head's final accent), `lengthened` and `lengthened_unaccented` (the same for the lengthened vowel), `raised_glide` (the base plus ''a'' with the head's accent, plus ''v'') and `glide` (the base plus the vowel's semivowel). ]==] function Analysis:vowelStems(vowel) local utilities, base, accent = M.sa_utilities, self.stems.base, self.accent local function stem(key, ending) if ending then self.stems[key] = base .. ending end end stem("final_unaccented", vowel) stem("raised", utilities.up_one_grade[vowel .. accent]) stem("raised_unaccented", utilities.up_one_grade[vowel]) stem("lengthened", utilities.lengthen[vowel .. accent]) stem("lengthened_unaccented", utilities.lengthen[vowel]) stem("raised_glide", "a" .. accent .. "v") stem("glide", utilities.vowel_to_cons[vowel]) end -- The gender-neutral numerals: ṣáṣ; káti, táti and yáti; and páñca(n) and the like. function Analysis:numeral() self.accent = string.match(self.head, "(/?)[nz]?$") self.type = "numeral" if self:headMatches("a/?z$") then self:add("sas") self:category("numeral_s") elseif self:headMatches("ti$") then self:add("ti") self:category("numeral_i") else self:add("an_direct") -- The oblique endings take the head's own accent, wherever it falls. self:add("an_oblique", {accent = string.find(self.head, "/", 1, true) and "/" or ""}) self:category("numeral_an") end end -- The a-stems, masculine and neuter, including the pronominal declension. function Analysis:aStem() self.accent = string.match(self.head, "(" .. M.sa_utilities.accent .. "?)$") local pronominal = self.properties.pron self.type = pronominal and "pronominal_a" or "a" -- A stem-final s doesn't become ṣ (ṛbīsa, bisa). self.options.keep_stem_s = true if self.gender == "m" then self:add("masculine_direct") self:add(pronominal and "pronominal_masculine_plural" or "masculine_plural") else self:add("neuter_direct") end self:add(pronominal and "pronominal_oblique" or "nominal_oblique") self:add("oblique") -- The Vedic instrumental singular in -ā of the oxytone abstracts in -tva(na) (Lanman p.335f.). self:add(self:headMatches("tva?n?a/$") and "tva_instrumental" or "instrumental") -- The Vedic genitive/locative dual in -os after -y- (Wackernagel III p.98-99 §48a). self:add(self:baseMatches(".y$") and "genitive_dual_after_y" or "genitive_dual") self:category("a") end -- The i- and u-stems. function Analysis:shortIUStem() local vowel, accent = string.match(self.head, "([iu])(/?)$") self.accent = accent self.type = vowel self:vowelStems(vowel) if self:inLexicon("sakhi") then self:add("sakhi") elseif self.gender == "m" then if self:inLexicon("strong_masculine_i_u") then self:add("strong_masculine_singular") else self:add(self:inLexicon("vedic_instrumental_masculine") and "masculine_instrumental_vedic" or "masculine_instrumental") self:add("masculine_dative_ablative") end if vowel == "i" then -- Whitney §336f self:add("masculine_locative_i") elseif self:inLexicon("rigvedic_locative_u") then self:add("masculine_locative_u_rigvedic") else self:add("masculine_locative") end self:add("masculine_direct") elseif self.gender == "f" then self:add(vowel == "i" and "feminine_instrumental_locative_i" or "feminine_instrumental_locative_u") self:add("feminine") self:add("feminine_" .. vowel) else -- Adjectives and nouns differ in the neuter (Whitney §344). if self.adjective then self:add(self:inLexicon("strong_neuter_adjective_u") and "strong_neuter_adjective" or "neuter_adjective_dative_ablative") self:add(vowel == "i" and "neuter_adjective_locative_i" or "neuter_adjective_locative_u") self:add("neuter_adjective_genitive_dual") else self:add(self:inLexicon("strong_neuter_noun_u") and "strong_neuter_noun" or "neuter_noun_dative_ablative") self:add(vowel == "i" and "neuter_noun_locative_i" or "neuter_noun_locative_u") self:add("neuter_noun_genitive_dual") end self:add("neuter_direct") self:add(self:inLexicon("vedic_instrumental_neuter_u") and "madhu_instrumental" or "neuter_instrumental") end self:add("oblique") self:category(vowel) end -- The ā-stems, both derived (feminine) and root stems. function Analysis:longAStem() if self.gender == "n" then -- We don't build a neuter on the masculine nominatives in -ās that go with neuter nouns (Whitney §367b, -- Wackernagel III p.129). error("The neuter of radical stems in -ā ends in -a.", 0) end self.accent = string.match(self.head, "(" .. M.sa_utilities.accent .. "?)$") local pronominal, root = self.properties.pron, self.properties.root self.type = pronominal and "pronominal_long_a" or "long_a" local monosyllabic = self:monosyllabic() local masculine = self.links.masculine local derived = not (root or monosyllabic) or monosyllabic and (root == false or masculine ~= nil and string.match(masculine, "a/?$") ~= nil) if derived then if self.gender == "m" then error("Add <root> if this is a root noun or adjective.", 0) end self:category("long_a") self:add(pronominal and "pronominal_derived" or "derived") self:add("derived_direct") self:add(self:baseMatches(".y$") and "genitive_dual_after_y" or "genitive_dual") else self:category("root_long_a") if self.gender == "m" then self:generalNote("root_long_a_masculine") self:add("root_masculine") else -- The derived declension, except for the nominative singular (Macdonell p.249ff.). self:add("root_feminine") self:add(self:baseMatches(".y$") and "genitive_dual_after_y" or "genitive_dual") end end self:add("oblique") end -- The ī- and ū-stems: strī, the derived stems (the vṛkī-, devī- and ū-declensions) and the root stems. function Analysis:longIUStem() if self.gender == "n" then -- The Vedic forms that could come from a neuter ī-stem (Whitney §367b) are better given by hand. error("The neuter of radical stems in -ī/ū ends in -i/u.", 0) end local vowel, accent = string.match(self.head, "([IU])(/?)$") self.accent = accent self.type = vowel == "I" and "long_i" or "long_u" self:vowelStems(vowel) local properties, masculine = self.properties, self.links.masculine local monosyllabic = self:monosyllabic() local feminine = self.gender == "f" if self:inLexicon("stri") and not (masculine and string.match(masculine, "stf/?$")) then self.options.iy_uv_before_vowel = true self:add("stri") elseif not (properties.root or monosyllabic) or monosyllabic and properties.root == false or properties.han then if properties.vrki then -- The vṛkī́-declension (Whitney §355ff.), given as the older forms of the later declension. if vowel == "U" then error("The vṛkī́-declension (<vrki>) is a declension of ī-stems.", 0) end self:category("vrki") self:generalNote("vrki") if properties.contract == false then self.options.iy_uv_before_vowel = true end self:add("vrki") self:add(accent == "" and "vrki_instrumental_barytone" or "vrki_instrumental_oxytone") self:add(accent == "" and "vrki_genitive_dual_barytone" or "vrki_genitive_dual_oxytone") elseif vowel == "I" then self:category("long_i") self:add("devi") -- The Rigvedic genitive plural in -īnā́m (Whitney §319a). self:add(accent == "" and "devi_genitive_plural_barytone" or "devi_genitive_plural_oxytone") else -- Whitney §356a, given as the older forms of §364 (Wackernagel III p.189). if not self.adjective then self:category("long_u") elseif self.gender == "m" then self:category("long_u") elseif masculine and string.match(masculine, "u" .. M.sa_utilities.accent .. "?$") and not self:inLexicon("classical_long_u_feminine") then self:generalNote("vedic_long_u_feminine") end if self:baseMatches("y$") or self:inLexicon("vedic_uv") then -- With the Vedic -úv- (Macdonell p.290 §384a). self:add("vedic_uv") else self:add("u_derived") self:add(accent == "" and "u_instrumental_barytone" or "u_instrumental_oxytone") self:add(accent == "" and "u_genitive_dual_barytone" or "u_genitive_dual_oxytone") end self:add("u_nominative_genitive") end self:add("derived_oblique") self:add(vowel == "I" and "derived_vocative_i" or "derived_vocative_u") else self:category(vowel == "I" and "root_long_i" or "root_long_u") if monosyllabic then -- Root nouns (Whitney §351; Wackernagel III p.181). self.options.iy_uv_before_vowel = true self:add(feminine and "root_monosyllabic_feminine" or "root_monosyllabic") self:add("root_monosyllabic_oblique") else -- Compounds of root nouns (Whitney §352; Wackernagel III §91a p.179, §100a, §100eα p.192-193; Macdonell -- p.268, 288). These are uncontracted after two consonants, and the ū-stems also when accented, except in -- -sū/-ṣū. local utilities = M.sa_utilities local uncontracted = properties.contract == false or properties.contract ~= true and ( self:baseMatches(utilities.consonant .. utilities.consonant .. "$") or vowel == "U" and (self:headMatches(utilities.accent) and not self:baseMatches("[sz]$") or self:inLexicon("uncontracted_long_u_compound")) or vowel == "I" and (self:inLexicon("uncontracted_long_i_compound") or self:baseMatches("D$") and self:baseMatches(utilities.accent))) if uncontracted then -- -Ciy-/-Cuv- before a vowel. self.options.iy_uv_before_vowel = true self:add(feminine and "uncontracted_locative_feminine" or "uncontracted_locative") else self:add((accent ~= "" and "contracted_locative_oxytone" or "contracted_locative") .. (feminine and "_feminine" or "")) end self:add(feminine and "compound_feminine_dative_ablative" or "compound_dative_ablative") self:add("compound_oblique") end self:add("root_common") end end -- The ṛ-stems. function Analysis:vocalicRStem() local r = self.properties.r if self.gender == "f" and r == "A" and self:baseMatches("t$") and not self:baseMatches("^s?t$") then error("The feminine of adjectives in -tṛ ends in -trī.", 0) end self.accent = string.match(self.head, "(/?)$") self.type = "vocalic_r" self.stems.lengthened_unaccented = self.stems.base .. "F" if self.gender == "n" then self:add("neuter") else if not r then error("Give the vowel of the accusative singular with <r:a> or <r:ā>.", 0) end self:add("masculine_feminine") self:add(r == "a" and "strong_short_a" or "strong_long_a") self:add(self.gender == "f" and "feminine_accusative_plural" or "masculine_accusative_plural") end self:add("oblique") self:category("vocalic_r") end -- The consonantal root stems. These also cover the stems in -āt/-it/-ut/-ṛt, -akt and -ās/-os, and púṃs. function Analysis:rootStem() local utilities = M.sa_utilities local vowel, accent, extra, final = string.match(self.head, "(" .. utilities.vowel .. ")(" .. utilities.accent .. "?)([rM]?)([kgGcjwqtTdDpBmrzShs]t?)$") if string.match(final, "[jSh]") and not self.properties.final then error("Give the final consonant of the nominative singular with <final:k> or <final:ṭ>.", 0) end self.accent = accent self.type = "root" self.options.root_noun = true self.options.final_obstruent = self.properties.final self.options.diaspirate = self.properties.diaspirate or false local nasal = string.gsub(final, ".", utilities.homorganic_nasal) self.stems.neuter_plural = self.stems.base .. vowel .. accent .. nasal .. final self.stems.neuter_plural_unaccented = self.stems.base .. vowel .. nasal .. final if self.gender == "n" then -- The neuter nominative plural, with the nasal (Whitney §389c). self:add((string.match(final, "[mr]") == nil and extra == "") and "neuter_plural_nasal" or "neuter_plural") end if self:inLexicon("pums") then self:add("pums") elseif self:monosyllabic() and not (accent == "\\" or self.options.initial_svarita) then self:add(self.gender == "n" and "monosyllabic_neuter_direct" or "monosyllabic_direct") self:add("monosyllabic_oblique") self:add(final == "s" and "monosyllabic_locative_plural_s" or "monosyllabic_locative_plural") else if self.gender == "n" then self:add("polysyllabic_neuter_direct") else self:add("polysyllabic_direct") -- The Vedic masculine nominative singular of the adjectives in -dṛ́ś (Wackernagel III p.246). self:add((self.gender == "m" and self:inLexicon("vedic_nominative_drs")) and "drs_nominative" or "polysyllabic_nominative") end self:add("polysyllabic_oblique") self:add(final == "s" and "polysyllabic_locative_plural_s" or "polysyllabic_locative_plural") end self:category("root") end -- The as-, is- and us-stems, including the comparatives in -yas. function Analysis:sStem() local utilities = M.sa_utilities local vowel, accent = string.match(self.head, "([aiu])(" .. utilities.accent .. "?)s$") self.accent = accent self.type = vowel .. "s" local base = self.stems.base self.stems.neuter_plural = base .. utilities.lengthen[vowel] .. accent .. "Ms" self.stems.neuter_plural_unaccented = base .. utilities.lengthen[vowel] .. "Ms" local comparative = vowel == "a" and (self:baseMatches("[^aAiK/\\]" .. utilities.accent .. "?y$") or self:baseMatches("jyA/?y$")) if comparative and self.gender ~= "n" then if self.gender ~= "m" then error("The feminine of comparatives in -yas ends in -yasī.", 0) end self:add("comparative_masculine") elseif self.gender == "m" or self.gender == "f" then if vowel == "a" then self:add("as_direct") else self:add("is_us_direct") -- The Vedic vocative (Wackernagel III p.292 §152c). self:add(vowel == "i" and "is_vocative" or "us_vocative") end self:add("masculine_feminine_dual") else -- Compound adjectives in -as (Macdonell p.226; Whitney §418a). if self.adjective and vowel == "a" and not comparative and (self:baseMatches(utilities.vowel .. ".*" .. utilities.vowel) or self:baseMatches("^sv")) then self:add("compound_as_neuter_nominative") else self:add("neuter_nominative") end self:add("neuter_direct") end self:add("oblique") self:category(comparative and "comparative" or vowel .. "s") end -- The an-stems. function Analysis:anStem() local utilities = M.sa_utilities self.accent = string.match(self.head, "a(" .. utilities.accent .. "?)n$") self.type = "an" self.options.retroflex_stem_n = true local properties = self.properties local contract = properties.contract if not self:baseMatches(utilities.consonant .. "[NYRnmyrlv]$") then contract = true end if self.gender == "n" then -- Wackernagel III p.238 presupposes a neuter plural -hāni for -han. self:add("neuter_direct") self:add(properties.han and "han_neuter_nominative" or "neuter_nominative") self:add(contract and "contracted_neuter_dual" or "neuter_dual") else self:add("masculine_nominative_vocative") if properties.han or self:inLexicon("short_strong_an") then self:add("short_strong") self:add(properties.han and "han_accusative_plural" or "short_strong_accusative_plural") else -- Whitney §426b; Wackernagel III p.267. self:add(self:inLexicon("optional_short_strong_an") and "optional_short_strong" or "strong") self:add(contract and "contracted_accusative_plural" or "uncontracted_accusative_plural") end end -- The Vedic locative singular without -i (Whitney §425c). self:add(contract and "contracted_oblique" or "uncontracted_oblique") self:add("oblique") self:category("an") end -- The in-stems. function Analysis:inStem() self.accent = string.match(self.head, "i(" .. M.sa_utilities.accent .. "?)n$") self.type = "in" self.options.retroflex_stem_n = true self:add(self.gender == "n" and "neuter_direct" or "masculine_direct") self:add("oblique") self:category("in") end -- The at-stems: the participles in -at (and -āt), and the stems in -vat/-mat. function Analysis:atStem() local consonant, vowel, accent = string.match(self.head, "([mv]?)([aA])(" .. M.sa_utilities.accent .. "?)t$") self.accent = accent local properties = self.properties local long = vowel == "A" and "long_a" or "short_a" if self:headMatches("[vm]a/?t$") and not properties.participle then self.type = consonant .. "at" self:add(self.gender == "n" and "vat_neuter" or "vat_masculine") self:add("vat_oblique") self:category(consonant .. "at") return end self.type = "at" if properties.nonasal then -- Participles like júhvat, with no nasal in the strong stem. self:add(self.gender == "n" and "nonasal_neuter" or "nonasal_masculine") self:add("nonasal_oblique") else if self.gender ~= "n" then self:add("participle_masculine_" .. long) else -- The neuter nominative dual is the feminine stem (Whitney §443a, though this may be artificial: §447b). local feminines = properties.feminine or self.links.feminine if not feminines or not feminines[1] then error("Give the nominative dual (the feminine stem) with <feminine:...>.", 0) end self.stems.feminine = feminines[1] self.stems.second_feminine = feminines[2] self:add(feminines[2] and "neuter_dual_two_feminines" or "neuter_dual_feminine") -- The Rigvedic neuter plural in -ānti (Wackernagel III p.262). self:add("participle_neuter_plural_" .. long) self:add("participle_neuter_singular") self:add("participle_neuter_singular_" .. long) end self:add("participle_oblique_" .. long) end self:add("oblique") self:add("oblique_" .. long) self:category("at") end -- The añc-stems, which have a strong stem (the head), a middle stem in -ac- and a weakest stem. function Analysis:ancStem() local consonant, vowel, accent = string.match(self.head, "([yv]?)([aA])(" .. M.sa_utilities.accent .. "?)Yc$") self.accent = accent self.type = "anc" local middle = string.gsub(self.stems.base, "Yc$", "c") self.stems.base = middle self:add(self.gender == "m" and "masculine_direct" or "neuter_direct") self:add("middle_oblique") local weakest if vowel == "A" then weakest = middle elseif self:inLexicon("tiryanc") then weakest = string.gsub(middle, "ya(/?)c$", "a%1Sc") elseif consonant ~= "" then weakest = string.gsub(middle, "([yv])a([/\\]?)c$", function(semivowel, stem_accent) return (semivowel == "y" and "I" or "U") .. (stem_accent == "" and "" or "/") .. "c" end) elseif self:inLexicon("ud_anc") then weakest = string.gsub(middle, "ac$", "Ic") else error("This añc-stem is not supported.", 0) end self.stems.weakest = weakest if vowel == "A" or accent ~= "/" then self:add(self.gender == "m" and "masculine_accusative_plural" or "neuter_dual") self:add("weakest_oblique") else -- Oxytones have both accentuations (Whitney §410). self:add(self.gender == "m" and "oxytone_masculine_accusative_plural" or "oxytone_neuter_dual") self:add("oxytone_weakest_oblique") end self:add("copies") self:category("anc") end -- The o-stem gó, the au-stem nau and the ai-stem rái, and their compounds. function Analysis:diphthongStem(vowel, type) self.accent = string.match(self.head, vowel .. "(" .. M.sa_utilities.accent .. "?)$") self.type = type self:add("all") self:category(type) end -- The vāṃs-stems, i.e. the perfect participles. function Analysis:vamsStem() local utilities = M.sa_utilities self.accent = string.match(self.head, "vA(" .. utilities.accent .. "?)Ms$") self.type = "vams" local base = self.stems.base local weak if self:inLexicon("vams_glide") or self:baseMatches("u$") then weak = base .. "v" elseif self:baseMatches("U$") then weak = string.gsub(base, "U$", "uv") elseif self:inLexicon("vams_keep_i") then weak = base elseif self:baseMatches("[aAIuUfFxeEoO]" .. utilities.accent .. "?M?" .. utilities.consonant .. "+i$") or self:inLexicon("vams_drop_i") then -- The i of śiśrivā́ṃs and the like belongs to the root. weak = string.gsub(base, "i$", "") elseif self.properties.retroflex_l then weak = string.gsub(string.gsub(base, "q$", "L"), "Q$", "Lh") else weak = base end self.stems.weak = weak self:add(self.gender == "m" and "masculine_direct" or "neuter_direct") self:add("oblique") self:category("vams") end -- The personal pronouns. Their forms are whole forms on an empty stem, and the head (ahám or tvám) says which person. function Analysis:personal() local first = self:headMatches("^a") self.type = first and "first_person" or "second_person" self.stems.base = "" self:add(first and "first" or "second") end local CLASS_METHODS = { numeral = Analysis.numeral, a = Analysis.aStem, short_iu = Analysis.shortIUStem, long_a = Analysis.longAStem, long_iu = Analysis.longIUStem, vocalic_r = Analysis.vocalicRStem, root = Analysis.rootStem, s = Analysis.sStem, an = Analysis.anStem, ["in"] = Analysis.inStem, at = Analysis.atStem, anc = Analysis.ancStem, o = function(analysis) analysis:diphthongStem("o", "o") end, au = function(analysis) analysis:diphthongStem("O", "au") end, ai = function(analysis) analysis:diphthongStem("E", "ai") end, vams = Analysis.vamsStem, personal = Analysis.personal, } ------------------------------------------------------------------------------------------------------------------------ -- Generation -- ------------------------------------------------------------------------------------------------------------------------ --[==[ Generate the forms of form groups, slot by slot. Each form is `{slp1 = ..., note = KEY, stem = ..., ending = ..., options = {...}, position = N}`, i.e. the joined form, its note, the inputs to `join` and the position of the ending within its cell. With `novedic`, the Vedic endings are left out, and the remaining endings keep their positions. A cell that copies another (`"[nom]"`) is filled in once every group has run. ]==] local FormGenerator = {} FormGenerator.__index = FormGenerator local ENDING_FLAGS = {"iy_uv_before_vowel", "keep_s_before_voiceless", "strip_stem_accent"} function FormGenerator.new(novedic) return setmetatable({novedic = novedic}, FormGenerator) end function FormGenerator:form(group, ending, case, position) local text, note, stem_key = ending, nil, nil if type(ending) == "table" then text, note, stem_key = ending[1], ending.note, ending.stem end if self.novedic and note and M.data.notes[note].vedic then return nil end local stem if string.sub(text, 1, 1) == "+" then text = string.sub(text, 2) stem = group.head elseif stem_key then stem = group.stems[stem_key] or error(("Internal error: no stem '%s' in %s.%s"):format(stem_key, group.class, group.set)) else stem = group.stems.base end text = string.gsub(text, "@", group.accent) local options = {} for key, value in pairs(group.options) do options[key] = value end if type(ending) == "table" then for _, flag in ipairs(ENDING_FLAGS) do if ending[flag] then options[flag] = true end end end options.recessive_accent = case == "voc" return {slp1 = M.sa_utilities.join(stem, text, options), note = note, stem = stem, ending = text, options = options, position = position} end --[==[ Generate the forms of `groups`. Return `cells` (slot -> list of forms) and `copies` (slot -> the slot it copies). Each slot is filled by one group only. ]==] function FormGenerator:generate(groups) local cells, copies = {}, {} for _, group in ipairs(groups) do for number, cases in pairs(M.data.endings[group.class][group.set]) do for case, cell in pairs(cases) do local slot = case .. "_" .. number if cells[slot] or copies[slot] then error(("Internal error: the slot %s is filled twice (%s.%s)"):format(slot, group.class, group.set)) end local copied = type(cell) == "string" and string.match(cell, "^%[(.*)%]$") if copied then copies[slot] = copied .. "_" .. number else local forms = {} if type(cell) == "string" then cell = {cell} end for position, ending in ipairs(cell) do local form = self:form(group, ending, case, position) if form then table.insert(forms, form) end end cells[slot] = forms end end end end -- Follow copies of copies back to the cell they come from. for slot in pairs(copies) do local source, seen = copies[slot], {[slot] = true} while copies[source] do if seen[source] then error("Internal error: the copies of " .. slot .. " go round in a circle") end seen[source] = true source = copies[source] end if not cells[source] then error(("Internal error: the slot %s copies %s, which is empty"):format(slot, source)) end copies[slot] = source end return cells, copies end ------------------------------------------------------------------------------------------------------------------------ -- Declension -- ------------------------------------------------------------------------------------------------------------------------ -- Return the cases of a table of class `class`: those listed in its entry in `data.classes`, or else every case except -- the enclitic ones. local function cases_of(class) local codes for _, entry in ipairs(M.data.classes) do if entry.id == class then codes = entry.cases end end local cases = {} for _, case in ipairs(M.data.cases) do local listed = not codes and not case.enclitic for _, code in ipairs(codes or {}) do listed = listed or code == case.code end if listed then table.insert(cases, case) end end return cases end -- Return the description of a table of gender `gender` and type `type` that titles and error messages use, e.g. -- "masculine a-stem" or "first-person pronoun". A manual table gives just its gender ("neuter"), or the empty string -- if it has none. local function table_kind(gender, type) local words = {} local entry = gender and M.data.genders[gender] if entry and entry.in_title ~= false then table.insert(words, entry.name:lower()) end if type then table.insert(words, M.data.types[type]) end return table.concat(words, " ") end --[==[ One table. It holds the `head` (in SLP1), the `gender`, the stem `class` and `type`, the `numbers` and `cases` shown and the forms of every slot: `slots[slot]` is a list of `{slp1 = ..., notes = {text...}}`, empty if the slot has no form. It also keeps the form `groups` it was declined with, the generated forms in `generated` and the slots that copy another in `copies`, as well as its `categories` and `general_notes` (keys into `data`) and the `user_notes` given in the call. ]==] local Declension = {} Declension.__index = Declension function Declension.new(analysis, cells, copies, numbers) local declension = setmetatable({ head = analysis.head, gender = analysis.gender, adjective = analysis.adjective, class = analysis.class, type = analysis.type, numbers = numbers, cases = cases_of(analysis.class), groups = analysis.groups, generated = cells, copies = copies, slots = {}, overridden = {}, categories = analysis.categories, general_notes = analysis.general_notes, user_notes = {}, }, Declension) for _, case in ipairs(declension.cases) do for _, number in ipairs(M.data.numbers) do local slot = case.code .. "_" .. number.code if numbers[number.code] and not cells[copies[slot] or slot] then error(("Internal error: no forms for the slot %s (%s)"):format(slot, analysis.class)) end local forms = {} for _, form in ipairs(cells[copies[slot] or slot] or {}) do table.insert(forms, {slp1 = form.slp1, notes = form.note and {M.data.notes[form.note].text} or {}}) end declension.slots[slot] = forms end end return declension end --[==[ Make a manual table (`<manual>`), which has no stem class and no generated forms: every slot starts out empty and is filled by the cell parameters. `gender` can be {nil}. ]==] function Declension.manual(head, gender, numbers) local cells = {} for _, case in ipairs(M.data.cases) do for _, number in ipairs(M.data.numbers) do cells[case.code .. "_" .. number.code] = {} end end return Declension.new({head = head, gender = gender, adjective = false, class = "manual", groups = {}, categories = {}, general_notes = {}}, cells, {}, numbers) end --[==[ Replace the forms of `slot` with `forms` from `Overrides`. These are written in IAST or in the display script, and read with `bridge`; a form of `-` means no form. ]==] function Declension:override(slot, forms, bridge) if not self.slots[slot] then error(("'%s' is not a cell of this table"):format(slot), 0) end local replaced = {} for _, form in ipairs(forms) do if form.written ~= "-" then table.insert(replaced, {slp1 = bridge:toSlp1(form.written), notes = form.footnotes, override = true}) end end self.slots[slot] = replaced self.overridden[slot] = true end --[==[ Return the names of the table's categories. `kind` is `noun` ({{tl|sa-ndecl}}), `adjective` (the masculine table of an adjective) or `numeral`. An adjective's other tables have no categories. ]==] function Declension:categoryNames(kind) local names = {} if kind then for _, key in ipairs(self.categories) do table.insert(names, M.data.categories[key][kind]) end end return names end -- Return the texts of the table's general notes. function Declension:generalNoteTexts() local texts = {} for _, key in ipairs(self.general_notes) do table.insert(texts, M.data.general_notes[key]) end return texts end --[==[ Return the data of the table for bots (`json=1`). This has the head, the gender, the stem class and type, the numbers shown, and for each slot its forms in SLP1, in the display script and in IAST, with their notes. It also has the user's notes, the general notes, the categories of `kind` (see `categoryNames`) and whether `nocat` was given. ]==] function Declension:toJson(bridge, kind, nocat) local slots = {} for slot, forms in pairs(self.slots) do local list = {} for _, form in ipairs(forms) do table.insert(list, { slp1 = form.slp1, form = bridge:toNative(form.slp1), translit = bridge:toIast(form.slp1), notes = form.notes, override = form.override, }) end slots[slot] = list end local numbers = {} for _, number in ipairs(M.data.numbers) do if self.numbers[number.code] then table.insert(numbers, number.code) end end return { head = self.head, gender = self.gender, class = self.class, type = M.data.types[self.type], numbers = numbers, slots = slots, user_notes = self.user_notes, general_notes = self:generalNoteTexts(), categories = self:categoryNames(kind), nocat = nocat or false, } end ------------------------------------------------------------------------------------------------------------------------ -- The table -- ------------------------------------------------------------------------------------------------------------------------ --[==[ Render a `Declension` as a table with [[Module:inflection-table]]. There is a column for each number shown and a row for each case, and each row is marked with `data-case` so that scripts can reorder the cases. The cells come from [[Module:inflection utilities]]' `show_forms`, which gives each form in the display script, linked with an accelerator for `lemma`, with its IAST below. The notes go under the table. `kind` says which categories to add (see `Declension:categoryNames`); with {nil}, none are added. ]==] local TableRenderer = {} TableRenderer.__index = TableRenderer function TableRenderer.new(declension, bridge, lemma, kind) return setmetatable({declension = declension, bridge = bridge, lemma = lemma, kind = kind}, TableRenderer) end -- Return the numbers shown, in order. function TableRenderer:numbers() local numbers = {} for _, number in ipairs(M.data.numbers) do if self.declension.numbers[number.code] then table.insert(numbers, number) end end return numbers end -- Return the accelerator tags of a slot: the case, then the gender for an adjective's table, then the number. function TableRenderer:accel(case, number) local declension = self.declension local tags = {case.accel} if declension.adjective then table.insert(tags, M.data.genders[declension.gender].accel) end table.insert(tags, number.accel) return table.concat(tags, "|") end -- Return the forms of every slot shown, as linked text (an em dash for none), and the footnotes, numbered case by -- case. function TableRenderer:cells() local declension, bridge = self.declension, self.bridge local formtable, slot_list = {}, {} for _, case in ipairs(declension.cases) do for _, number in ipairs(self:numbers()) do local slot = case.code .. "_" .. number.code local forms = declension.slots[slot] if forms[1] then local list = {} for _, form in ipairs(forms) do local footnotes if form.notes[1] then footnotes = {} for _, note in ipairs(form.notes) do table.insert(footnotes, "[" .. note .. "]") end end table.insert(list, {form = bridge:toNative(form.slp1), translit = bridge:toIast(form.slp1), footnotes = footnotes}) end formtable[slot] = list end table.insert(slot_list, {slot, self:accel(case, number)}) end end M.inflection_utilities.show_forms(formtable, { lang = M.lang, lemmas = {self.lemma}, slot_list = slot_list, include_translit = true, }) return formtable, formtable.footnote end -- "Masculine a-stem declension of देव" function TableRenderer:title() local declension, bridge = self.declension, self.bridge local head = M.links.full_link({lang = M.lang, sc = bridge.script, alt = bridge:toNative(declension.head), tr = "-"}) local kind = table_kind(declension.gender, declension.type) if kind == "" then return "Declension of " .. head end return mw.ustring.upper(mw.ustring.sub(kind, 1, 1)) .. mw.ustring.sub(kind, 2) .. " declension of " .. head end function TableRenderer:render() local declension = self.declension local cells, footnotes = self:cells() local lines = {M.inflection_table.make_top{ title = self:title(), palette = "blue", tall = "yes", lang = "sa", class = "sticky-left-column", }} -- make_top has already opened the first row. table.insert(lines, '! class="outer" |') for _, number in ipairs(self:numbers()) do table.insert(lines, '! class="outer" | ' .. number.name) end for _, case in ipairs(declension.cases) do table.insert(lines, ('|- data-case="%s"'):format(case.code)) table.insert(lines, "! " .. case.name) for _, number in ipairs(self:numbers()) do table.insert(lines, "| " .. cells[case.code .. "_" .. number.code]) end end local notes = {} if footnotes ~= "" then table.insert(notes, footnotes) end for _, note in ipairs(declension.user_notes) do table.insert(notes, note) end for _, note in ipairs(declension:generalNoteTexts()) do table.insert(notes, note) end table.insert(lines, M.inflection_table.make_bottom{notes = table.concat(notes, "<br />")}) local categories = declension:categoryNames(self.kind) if categories[1] then table.insert(lines, M.utilities.format_categories(categories, M.lang)) end return table.concat(lines, "\n") end ------------------------------------------------------------------------------------------------------------------------ -- The call -- ------------------------------------------------------------------------------------------------------------------------ local ALL_NUMBERS = {s = true, d = true, p = true} --[==[ Decline one table without a frame. `input` has the following fields: * `head`: the head, in SLP1; * `gender`: `m`, `f`, `n` or `num` (the numerals); * `adjective`: true if the table is one of an adjective's tables; * `properties`: what the indicators set, in SLP1: `root` (true, false for `nonroot`, or nil), `vrki`, `pron`, `novedic`, `r` (`a` or `A`), `final` (`k`, `w` or `t`), `diaspirate`, `participle`, `nonasal`, `contract` (true, false for `nocontract`, or nil), `han`, `svarita`, `retroflex_l`, `feminine` (a list of stems) and `numbers` (a set of s/d/p); * `links`: the other heads of an adjective that the table looks at, i.e. `masculine` (for a feminine table) and `feminine` (a list, for the neuter table). Return the Declension. ]==] function export.decline_table(input) local properties = input.properties or {} local class, base = Head.new(input.head):detectClass(input.gender, properties) if not class then error("No declension class could be detected. Please check the head or specify the declension.", 0) end local analysis = Analysis.new{head = input.head, base = base, gender = input.gender, adjective = input.adjective, properties = properties, links = input.links, class = class} CLASS_METHODS[class](analysis) local cells, copies = FormGenerator.new(properties.novedic):generate(analysis.groups) local numbers = input.gender == "num" and {p = true} or properties.numbers or ALL_NUMBERS return Declension.new(analysis, cells, copies, numbers) end -- Return true if a table of class `class` and gender `gender` uses the indicator defined by `definition`. local function uses(definition, class, gender) return (definition.classes == nil or definition.classes[class] == true) and (definition.genders == nil or definition.genders[gender] == true) end -- Return the cell parameters of a table from `args`, by slot. Each parameter is the slot preceded by `prefix` (`m_`, -- `f2_`, etc.). local function cell_values(args, prefix) local values = {} for _, case in ipairs(M.data.cases) do for _, number in ipairs(M.data.numbers) do local slot = case.code .. "_" .. number.code values[slot] = args[prefix .. slot] end end return values end local function cell_parameters(params, prefix) for _, case in ipairs(M.data.cases) do for _, number in ipairs(M.data.numbers) do params[prefix .. case.code .. "_" .. number.code] = {} end end end --[==[ Implement {{tl|sa-ndecl}} without a frame, for other modules and for testing. `args` are the template's arguments and `pagename` is the page's title. Return the Declension, its ScriptBridge and the processed args. ]==] function export.decline_noun(args, pagename) local params = { [1] = {}, note = {list = true}, nocat = {type = "boolean"}, json = {type = "boolean"}, } cell_parameters(params, "") args = M.parameters.process(args, params) local spec = Spec.parse(args[1] or "", "noun") local head = spec.head ~= "" and spec.head or pagename local bridge = ScriptBridge.new(head, pagename) local gender for name, definition in pairs(M.data.indicators.noun) do if definition.group == "gender" and spec.indicators[name] then gender = name end end local properties = spec:properties(bridge) local declension if spec.indicators.manual then for name, definition in pairs(M.data.indicators.noun) do if spec.indicators[name] and name ~= "manual" and definition.group ~= "gender" and definition.group ~= "numbers" then error(("The indicator '%s' does not apply to a manual table"):format(name), 0) end end declension = Declension.manual(bridge:toSlp1(head), gender, gender == "num" and {p = true} or properties.numbers or ALL_NUMBERS) else declension = export.decline_table{head = bridge:toSlp1(head), gender = gender, properties = properties} for name in pairs(spec.indicators) do local definition = M.data.indicators.noun[name] if definition.group ~= "gender" and not uses(definition, declension.class, gender) then error(("The indicator '%s' does not apply to a %s"):format(name, table_kind(gender, declension.type)), 0) end end end for slot, forms in pairs(Overrides.parse(cell_values(args, "")).slots) do declension:override(slot, forms, bridge) end declension.user_notes = args.note return declension, bridge, args end --[==[ The tables of an adjective, each a Declension, in this order: the masculine, a feminine for each head of `f:` (by default the masculine head), and the neuter (the head of `n:`, by default the masculine head). ]==] local AdjectiveDeclension = {} AdjectiveDeclension.__index = AdjectiveDeclension --[==[ Implement {{tl|sa-adecl}} without a frame, for other modules and for testing. `args` are the template's arguments and `pagename` is the page's title. Return the AdjectiveDeclension, its ScriptBridge and the processed args. ]==] function export.decline_adjective(args, pagename) local params = { [1] = {}, nocat = {type = "boolean"}, json = {type = "boolean"}, } local spec = Spec.parse(args[1] or "", "adjective") local feminine_specs = spec.indicators.f or {Spec.parse("", "adjective", true)} local prefixes = {"m_", "n_"} for position = 1, #feminine_specs do table.insert(prefixes, position == 1 and "f_" or "f" .. position .. "_") end for _, prefix in ipairs(prefixes) do cell_parameters(params, prefix) params[prefix .. "note"] = {list = true} end args = M.parameters.process(args, params) local masculine_head = spec.head ~= "" and spec.head or pagename local bridge = ScriptBridge.new(masculine_head, pagename) local shared = spec:properties(bridge) local masculine_slp1 = bridge:toSlp1(masculine_head) -- One entry per table, with its head (and any spec of its own), gender, cell prefix and links. local tables = {{spec = nil, slp1 = masculine_slp1, gender = "m", prefix = "m_"}} local feminine_stems = {} for position, feminine_spec in ipairs(feminine_specs) do local slp1 = feminine_spec.head ~= "" and bridge:toSlp1(feminine_spec.head) or masculine_slp1 table.insert(feminine_stems, slp1) table.insert(tables, {spec = feminine_spec, slp1 = slp1, gender = "f", prefix = position == 1 and "f_" or "f" .. position .. "_", links = {masculine = masculine_slp1}}) end local neuter_spec = spec.indicators.n table.insert(tables, {spec = neuter_spec, slp1 = neuter_spec and neuter_spec.head ~= "" and bridge:toSlp1(neuter_spec.head) or masculine_slp1, gender = "n", prefix = "n_", links = {feminine = {feminine_stems[1], feminine_stems[2]}}}) local adjective = setmetatable({tables = {}}, AdjectiveDeclension) local used = {} for _, item in ipairs(tables) do local properties = item.spec and item.spec:properties(bridge, shared) or shared local declension = export.decline_table{head = item.slp1, gender = item.gender, adjective = true, properties = properties, links = item.links} for name, definition in pairs(M.data.indicators.adjective) do if spec.indicators[name] and definition.value ~= "spec" and uses(definition, declension.class, item.gender) then used[name] = true end end for name in pairs(item.spec and item.spec.indicators or {}) do if not uses(M.data.indicators.adjective[name], declension.class, item.gender) then error(("The indicator '%s' does not apply to the %s"):format(name, table_kind(item.gender, declension.type)), 0) end end for slot, forms in pairs(Overrides.parse(cell_values(args, item.prefix)).slots) do declension:override(slot, forms, bridge) end declension.user_notes = args[item.prefix .. "note"] table.insert(adjective.tables, declension) end for name, definition in pairs(M.data.indicators.adjective) do if spec.indicators[name] and definition.value ~= "spec" and not used[name] then error(("The indicator '%s' applies to none of the tables"):format(name), 0) end end return adjective, bridge, args end -- Return the kind of categories a noun table adds (see `Declension:categoryNames`). local function noun_kind(declension) return declension.class == "numeral" and "numeral" or "noun" end --[==[Entry point of {{tl|sa-ndecl}}. Return the table, or with {{para|json|1}}, its data as JSON.]==] function export.noun(frame) local pagename = M.headword_data.pagename local declension, bridge, args = export.decline_noun(frame:getParent().args, pagename) local kind = noun_kind(declension) if args.json then return M.JSON.toJSON(declension:toJson(bridge, kind, args.nocat)) end return TableRenderer.new(declension, bridge, pagename, not args.nocat and kind or nil):render() end --[==[ Entry point of {{tl|sa-adecl}}. Return the tables one above the other in an untitled inflection box (`make_box` of [[Module:inflection-table]], as {{tl|inflection-box-top}} makes), or with {{para|json|1}}, their data as JSON (`{tables = {...}}`). Only the masculine table adds categories. ]==] function export.adjective(frame) local pagename = M.headword_data.pagename local adjective, bridge, args = export.decline_adjective(frame:getParent().args, pagename) if args.json then local tables = {} for position, declension in ipairs(adjective.tables) do table.insert(tables, declension:toJson(bridge, position == 1 and "adjective" or nil, args.nocat)) end return M.JSON.toJSON({tables = tables}) end local rendered = {} for position, declension in ipairs(adjective.tables) do local kind = position == 1 and not args.nocat and "adjective" or nil table.insert(rendered, TableRenderer.new(declension, bridge, pagename, kind):render()) end return M.inflection_table.make_box({title = "-", flow = "vertical"}, "\n" .. table.concat(rendered, "\n") .. "\n") end return export ry1m1zephd0iidobkk0e49rrpe5ffhn 2571614 2571611 2026-10-18T12:29:30Z Hiyuune 50834 2571614 Scribunto text/plain --[==[ This module implements the declension tables of Sanskrit nouns and numerals ({{tl|sa-ndecl}}) and of adjectives ({{tl|sa-adecl}}). Authorship: originally written by [[User:Dragonoid76]] and [[User:Benwing2]], with the declension rules of [[User:Exarchus]]; rewritten by [[User:Fenakhay]] in October 2026. TERMINOLOGY: * "head" = The form given in the call: the nominative singular, or the stem for consonant stems. It is followed by an inline spec of indicators, e.g. `{{sa-ndecl|devá<m>}}` or `{{sa-adecl|kṛṣṇá<f:kṛṣṇā́.novedic>}}`. * "stem class" = One way of declining, e.g. the a-stems, the i- and u-stems or the root stems. The classes in [[Module:sa-decl/data]] are tried on the head in order, and the first one that takes it gives the "stem" (the head minus its ending). The class's other stems are made from that one; see `Analysis:vowelStems`. * "slot" = A particular combination of case and number, e.g. `nom_s` or `loc_p`. Each slot is one cell of a table. * "form group" = One set of endings from [[Module:sa-decl/data]], together with the stems, accent and sandhi options in force when it was added. A table is made of the forms of its groups, each joined with `join` in [[Module:sa-utilities]]. Everything is worked out in SLP1, and shown in the script of the head (or of the page name) with the IAST below. The classes, by area: * The call: `Spec` (the inline spec of a head), `Overrides` (the cell parameters) and `ScriptBridge` (conversion between the input script and SLP1). * The analysis: `Head` (finds the stem class of a head), `Analysis` (the decisions of one stem class, with one method per class that adds `FormGroup`s) and `FormGenerator` (makes the forms of a group). * The result: `Declension` (one table, with the forms of every slot, its notes and its categories), `AdjectiveDeclension` (the tables of an adjective) and `TableRenderer`. Other modules used: [[Module:sa-decl/data]] (the endings and every other table, loaded with mw.loadData), [[Module:sa-utilities]] (sandhi), [[Module:inflection-table]] (the frame of each table, and the box around an adjective's tables) and [[Module:inflection utilities]] (the links, transliteration, accelerators and footnotes in the cells). ]==] local export = {} local M = require("Module:module loader").init { require = { inflection_table = "Module:inflection-table", inflection_utilities = "Module:inflection utilities", JSON = "Module:JSON", links = "Module:links", parameters = "Module:parameters", parse_utilities = "Module:parse utilities", sa_utilities = "Module:sa-utilities", scripts = "Module:scripts", utilities = "Module:utilities", }, loadData = { data = "Module:sa-decl/data", headword_data = "Module:headword/data", }, lazy = { lang = function() return require("Module:languages").getByCode("sa") end, }, } ------------------------------------------------------------------------------------------------------------------------ -- Script -- ------------------------------------------------------------------------------------------------------------------------ --[==[ Convert the call's input to SLP1, and SLP1 to the display script and to IAST. The display script is the script of the head. If the head is in IAST (i.e. Latin), it is the script of the page name instead, and failing that, Devanagari. Latin input is read as IAST; anything else goes through the display script's converter. ]==] local ScriptBridge = {} ScriptBridge.__index = ScriptBridge function ScriptBridge.new(head, pagename) local script = M.lang:findBestScript(head) if script:getCode() == "None" then script = M.lang:findBestScript(pagename) end if script:getCode() == "None" then script = M.scripts.getByCode("Deva") end local code = script:getCode() return setmetatable({ script = script, code = code, from_native = require("Module:sa-utilities/translit/" .. code .. "-to-SLP1").tr, to_native = require("Module:sa-utilities/translit/SLP1-to-" .. code).tr, from_iast = require("Module:sa-utilities/translit/IAST-to-SLP1").tr, to_iast = require("Module:sa-utilities/translit/SLP1-to-IAST").tr, }, ScriptBridge) end function ScriptBridge:toSlp1(text) if M.lang:findBestScript(text):getCode() == "None" then return self.from_iast(text) end return self.from_native(text) end -- Only Devanagari shows the accents, so strip them for any other script. function ScriptBridge:toNative(slp1) if self.code ~= "Deva" then slp1 = string.gsub(slp1, M.sa_utilities.accent, "") end return self.to_native(slp1) end function ScriptBridge:toIast(slp1) return self.to_iast(slp1) end ------------------------------------------------------------------------------------------------------------------------ -- Spec -- ------------------------------------------------------------------------------------------------------------------------ --[==[ The inline spec of a head, `HEAD<NAME.NAME:VALUE...>`. `Spec.parse` parses it and checks it against the indicators of `template` (`noun` or `adjective`, as keyed in `data.indicators`). The result has `head`, as written (empty means the page name), and `indicators`, keyed by name. An indicator's value is a list for a list indicator, a Spec for a spec value, and {true} for a flag. A spec value (the feminine and neuter heads of {{tl|sa-adecl}}) is itself a head with a spec of its own. It is parsed with `nested` set, and then only takes the indicators that apply to a single stem. ]==] local Spec = {} Spec.__index = Spec local function spec_error(message, text) error(message .. " in the spec '" .. text .. "'.", 0) end -- Split `text` at `separator` (a Lua pattern), except inside angle brackets. local function split_outside_brackets(text, separator) local parts = {} local segments = M.parse_utilities.parse_balanced_segment_run(text, "<", ">") for _, group in ipairs(M.parse_utilities.split_alternating_runs(segments, separator)) do table.insert(parts, table.concat(group)) end return parts end function Spec.parse(text, template, nested) text = mw.text.trim(text) local spec = setmetatable({head = text, indicators = {}}, Spec) local registry = M.data.indicators[template] local segments = M.parse_utilities.parse_balanced_segment_run(text, "<", ">") if #segments > 3 or segments[#segments] ~= "" and #segments > 1 then spec_error("Only one <...> may follow the head", text) end spec.head = mw.text.trim(segments[1]) if string.find(spec.head, ",", 1, true) then spec_error("The head is one form", text) end local needs_gender = template == "noun" and not nested if #segments == 1 then if needs_gender then spec_error("Give the gender: <m>, <f>, <n>, <num> or <pers>", text) end return spec end local inside = string.match(segments[2], "^<(.*)>$") local groups = {} for _, indicator in ipairs(split_outside_brackets(inside, "%.")) do local name, value = string.match(indicator, "^%s*([^:<]-)%s*:%s*(.-)%s*$") if not name then name = mw.text.trim(indicator) end local definition = registry[name] if definition and definition.alias then name = definition.alias definition = registry[name] end if not definition or nested and (definition.value == "spec" or definition.group == "gender") then local names = {} for known, known_definition in pairs(registry) do if not nested or known_definition.value ~= "spec" and known_definition.group ~= "gender" then table.insert(names, known) end end table.sort(names) spec_error(("Unrecognized indicator '%s'; the indicators are %s"):format(name, table.concat(names, ", ")), text) end if spec.indicators[name] ~= nil then spec_error(("The indicator '%s' is given twice"):format(name), text) end if definition.group and definition.group ~= "numbers" then if groups[definition.group] then spec_error(("The indicators '%s' and '%s' exclude each other"):format(groups[definition.group], name), text) end groups[definition.group] = name end if definition.value and (value == nil or value == "") then spec_error(("The indicator '%s' needs a value ('%s:...')"):format(name, name), text) elseif not definition.value and value ~= nil then spec_error(("The indicator '%s' takes no value"):format(name), text) end if definition.value == nil then value = true elseif definition.value == "spec" then if definition.list then local specs = {} for _, item in ipairs(split_outside_brackets(value, "%s*,%s*")) do table.insert(specs, Spec.parse(item, template, true)) end value = specs else value = Spec.parse(value, template, true) end elseif definition.list then local values = mw.text.split(value, "%s*,%s*") for _, item in ipairs(values) do if definition.values and not definition.values[item] then spec_error(("'%s' is not a value of '%s'"):format(item, name), text) end end value = values elseif definition.values and not definition.values[value] then local values = {} for known in pairs(definition.values) do table.insert(values, known) end table.sort(values) spec_error(("'%s' is not a value of '%s'; the values are %s"):format(value, name, table.concat(values, ", ")), text) end spec.indicators[name] = value end -- A manual table can do without a gender. if needs_gender and not groups.gender and not spec.indicators.manual then spec_error("Give the gender: <m>, <f>, <n>, <num> or <pers>", text) end return spec end --[==[ Return the stem properties set by the indicators of `spec`, with SLP1 values (see `export.decline_table`), on top of `inherited`. When `spec` belongs to one of an adjective's heads, `inherited` holds the adjective's shared properties. ]==] function Spec:properties(bridge, inherited) local properties = {} for key, value in pairs(inherited or {}) do properties[key] = value end local indicators = self.indicators if indicators.root then properties.root = true elseif indicators.nonroot then properties.root = false end if indicators.contract then properties.contract = true elseif indicators.nocontract then properties.contract = false end for name, property in pairs({vrki = "vrki", pron = "pron", novedic = "novedic", diaspirate = "diaspirate", participle = "participle", nonasal = "nonasal", han = "han", svarita = "svarita", ["ḷ"] = "retroflex_l"}) do if indicators[name] then properties[property] = true end end if indicators.r then properties.r = bridge.from_iast(indicators.r) end if indicators.final then properties.final = bridge.from_iast(indicators.final) end if indicators.feminine then properties.feminine = {} for _, form in ipairs(indicators.feminine) do table.insert(properties.feminine, bridge:toSlp1(form)) end end if indicators.sg or indicators.du or indicators.pl then properties.numbers = {s = indicators.sg, d = indicators.du, p = indicators.pl} end -- The pronominal declension is never a root declension, even for a monosyllable such as tā́. if properties.pron then properties.root = false end return properties end ------------------------------------------------------------------------------------------------------------------------ -- Overrides -- ------------------------------------------------------------------------------------------------------------------------ --[==[ The cell parameters. `Overrides.parse` returns, for each slot, its forms as given: a comma-separated list, each form followed by any `[footnote]`s, or `-` for no form. ]==] local Overrides = {} Overrides.__index = Overrides function Overrides.parse(values) local overrides = setmetatable({slots = {}}, Overrides) for slot, value in pairs(values) do local forms = {} local segments = M.parse_utilities.parse_balanced_segment_run(value, "[", "]") for _, group in ipairs(M.parse_utilities.split_alternating_runs(segments, "%s*,%s*")) do local footnotes = {} for i = 2, #group - 1, 2 do if mw.text.trim(group[i + 1]) ~= "" then error(("Text after a footnote in %s=%s"):format(slot, value), 0) end table.insert(footnotes, string.match(group[i], "^%[(.*)%]$")) end local form = mw.text.trim(group[1]) if form ~= "" then table.insert(forms, {written = form, footnotes = footnotes}) end end overrides.slots[slot] = forms end return overrides end ------------------------------------------------------------------------------------------------------------------------ -- Analysis -- ------------------------------------------------------------------------------------------------------------------------ --[==[ A head in SLP1. `detectClass` finds its stem class by trying the classes of `data.classes` in order. It returns the id of the first class whose genders include `gender` and one of whose patterns matches (taking the pattern's `when` or `unless` property into account), along with the stem the pattern captures. ]==] local Head = {} Head.__index = Head function Head.new(slp1) return setmetatable({slp1 = slp1}, Head) end function Head:detectClass(gender, properties) for _, class in ipairs(M.data.classes) do if class.genders[gender] then for _, pattern in ipairs(class.patterns) do local text, when, unless = pattern, nil, nil if type(pattern) == "table" then text, when, unless = pattern[1], pattern.when, pattern.unless end if (when == nil or properties[when] == true) and (unless == nil or not properties[unless]) then local stem = string.match(self.slp1, text) if stem then return class.id, stem end end end end end return nil end --[==[ One set of endings of a stem class, as added by `Analysis:add`. `class` and `set` locate it in `data.endings`, `accent` is what `@` stands for, and `stems` maps the stem keys to stems. `head` is what the `+` endings attach to, and `options` is a copy of the analysis's sandhi options at the time the group was added. ]==] local FormGroup = {} FormGroup.__index = FormGroup function FormGroup.new(fields) return setmetatable(fields, FormGroup) end --[==[ The decisions made for one stem class. An analysis starts with the head and its gender, whether the table is one of an adjective's (`adjective`), the properties set by the indicators (see `export.decline_table`) and the other heads the table looks at (`links`). The class's method then sets the `accent` that `@` stands for (the head's final accent), makes the `stems` (`base` plus whatever the class needs) and adjusts the sandhi `options`, which each group copies when it is added. What comes out is the list of `groups`, the `type` (a key of `data.types`), the `categories` (keys of `data.categories`) and the `general_notes` (keys of `data.general_notes`). ]==] local Analysis = {} Analysis.__index = Analysis function Analysis.new(input) local properties = input.properties local accented = string.match(input.head, M.sa_utilities.accent) ~= nil local analysis = setmetatable({ head = input.head, gender = input.gender, adjective = input.adjective or false, properties = properties, links = input.links or {}, class = input.class, accent = "", stems = {base = input.base}, options = { accented = accented, initial_svarita = properties.svarita or false, root_han = properties.han or false, }, groups = {}, type = nil, categories = {}, general_notes = {}, }, Analysis) -- An initial tvy-, dvy-, try-, dry- or ny- counts as two syllables, so the vocative gets an initial svarita. if accented and analysis:inLexicon("initial_svarita") then analysis.options.initial_svarita = true end return analysis end --[==[ Add the set `set` of the class's endings, with the current stems and options. `extra` can override fields of the group, e.g. to use a different `accent`. ]==] function Analysis:add(set, extra) if not M.data.endings[self.class][set] then error(("Internal error: no set '%s' of the %s endings"):format(set, self.class)) end local options, stems = {}, {} for key, value in pairs(self.options) do options[key] = value end for key, value in pairs(self.stems) do stems[key] = value end local group = {class = self.class, set = set, accent = self.accent, stems = stems, head = self.head, options = options} for key, value in pairs(extra or {}) do group[key] = value end table.insert(self.groups, FormGroup.new(group)) end function Analysis:category(key) table.insert(self.categories, key) end function Analysis:generalNote(key) table.insert(self.general_notes, key) end -- Return true if the list `name` of `data.lexicon` takes this head (or this class's stem, as the list's `subject` -- says). function Analysis:inLexicon(name) local list = M.data.lexicon[name] local subject = list.subject == "head" and self.head or self.stems.base for _, pattern in ipairs(list.except or {}) do if string.match(subject, pattern) then return false end end for _, pattern in ipairs(list.patterns) do if string.match(subject, pattern) then return true end end return false end function Analysis:headMatches(pattern) return string.match(self.head, pattern) ~= nil end function Analysis:baseMatches(pattern) return string.match(self.stems.base, pattern) ~= nil end function Analysis:monosyllabic() return M.sa_utilities.is_monosyllabic(self.head) end --[==[ Make the stems of a class ending in `vowel`, besides `base`. They are keyed as follows: `final_unaccented` (the base plus the vowel), `raised` and `raised_unaccented` (the vowel raised one grade, with and without the head's final accent), `lengthened` and `lengthened_unaccented` (the same for the lengthened vowel), `raised_glide` (the base plus ''a'' with the head's accent, plus ''v'') and `glide` (the base plus the vowel's semivowel). ]==] function Analysis:vowelStems(vowel) local utilities, base, accent = M.sa_utilities, self.stems.base, self.accent local function stem(key, ending) if ending then self.stems[key] = base .. ending end end stem("final_unaccented", vowel) stem("raised", utilities.up_one_grade[vowel .. accent]) stem("raised_unaccented", utilities.up_one_grade[vowel]) stem("lengthened", utilities.lengthen[vowel .. accent]) stem("lengthened_unaccented", utilities.lengthen[vowel]) stem("raised_glide", "a" .. accent .. "v") stem("glide", utilities.vowel_to_cons[vowel]) end -- The gender-neutral numerals: ṣáṣ; káti, táti and yáti; and páñca(n) and the like. function Analysis:numeral() self.accent = string.match(self.head, "(/?)[nz]?$") self.type = "numeral" if self:headMatches("a/?z$") then self:add("sas") self:category("numeral_s") elseif self:headMatches("ti$") then self:add("ti") self:category("numeral_i") else self:add("an_direct") -- The oblique endings take the head's own accent, wherever it falls. self:add("an_oblique", {accent = string.find(self.head, "/", 1, true) and "/" or ""}) self:category("numeral_an") end end -- The a-stems, masculine and neuter, including the pronominal declension. function Analysis:aStem() self.accent = string.match(self.head, "(" .. M.sa_utilities.accent .. "?)$") local pronominal = self.properties.pron self.type = pronominal and "pronominal_a" or "a" -- A stem-final s doesn't become ṣ (ṛbīsa, bisa). self.options.keep_stem_s = true if self.gender == "m" then self:add("masculine_direct") self:add(pronominal and "pronominal_masculine_plural" or "masculine_plural") else self:add("neuter_direct") end self:add(pronominal and "pronominal_oblique" or "nominal_oblique") self:add("oblique") -- The Vedic instrumental singular in -ā of the oxytone abstracts in -tva(na) (Lanman p.335f.). self:add(self:headMatches("tva?n?a/$") and "tva_instrumental" or "instrumental") -- The Vedic genitive/locative dual in -os after -y- (Wackernagel III p.98-99 §48a). self:add(self:baseMatches(".y$") and "genitive_dual_after_y" or "genitive_dual") self:category("a") end -- The i- and u-stems. function Analysis:shortIUStem() local vowel, accent = string.match(self.head, "([iu])(/?)$") self.accent = accent self.type = vowel self:vowelStems(vowel) if self:inLexicon("sakhi") then self:add("sakhi") elseif self.gender == "m" then if self:inLexicon("strong_masculine_i_u") then self:add("strong_masculine_singular") else self:add(self:inLexicon("vedic_instrumental_masculine") and "masculine_instrumental_vedic" or "masculine_instrumental") self:add("masculine_dative_ablative") end if vowel == "i" then -- Whitney §336f self:add("masculine_locative_i") elseif self:inLexicon("rigvedic_locative_u") then self:add("masculine_locative_u_rigvedic") else self:add("masculine_locative") end self:add("masculine_direct") elseif self.gender == "f" then self:add(vowel == "i" and "feminine_instrumental_locative_i" or "feminine_instrumental_locative_u") self:add("feminine") self:add("feminine_" .. vowel) else -- Adjectives and nouns differ in the neuter (Whitney §344). if self.adjective then self:add(self:inLexicon("strong_neuter_adjective_u") and "strong_neuter_adjective" or "neuter_adjective_dative_ablative") self:add(vowel == "i" and "neuter_adjective_locative_i" or "neuter_adjective_locative_u") self:add("neuter_adjective_genitive_dual") else self:add(self:inLexicon("strong_neuter_noun_u") and "strong_neuter_noun" or "neuter_noun_dative_ablative") self:add(vowel == "i" and "neuter_noun_locative_i" or "neuter_noun_locative_u") self:add("neuter_noun_genitive_dual") end self:add("neuter_direct") self:add(self:inLexicon("vedic_instrumental_neuter_u") and "madhu_instrumental" or "neuter_instrumental") end self:add("oblique") self:category(vowel) end -- The ā-stems, both derived (feminine) and root stems. function Analysis:longAStem() if self.gender == "n" then -- We don't build a neuter on the masculine nominatives in -ās that go with neuter nouns (Whitney §367b, -- Wackernagel III p.129). error("The neuter of radical stems in -ā ends in -a.", 0) end self.accent = string.match(self.head, "(" .. M.sa_utilities.accent .. "?)$") local pronominal, root = self.properties.pron, self.properties.root self.type = pronominal and "pronominal_long_a" or "long_a" local monosyllabic = self:monosyllabic() local masculine = self.links.masculine local derived = not (root or monosyllabic) or monosyllabic and (root == false or masculine ~= nil and string.match(masculine, "a/?$") ~= nil) if derived then if self.gender == "m" then error("Add <root> if this is a root noun or adjective.", 0) end self:category("long_a") self:add(pronominal and "pronominal_derived" or "derived") self:add("derived_direct") self:add(self:baseMatches(".y$") and "genitive_dual_after_y" or "genitive_dual") else self:category("root_long_a") if self.gender == "m" then self:generalNote("root_long_a_masculine") self:add("root_masculine") else -- The derived declension, except for the nominative singular (Macdonell p.249ff.). self:add("root_feminine") self:add(self:baseMatches(".y$") and "genitive_dual_after_y" or "genitive_dual") end end self:add("oblique") end -- The ī- and ū-stems: strī, the derived stems (the vṛkī-, devī- and ū-declensions) and the root stems. function Analysis:longIUStem() if self.gender == "n" then -- The Vedic forms that could come from a neuter ī-stem (Whitney §367b) are better given by hand. error("The neuter of radical stems in -ī/ū ends in -i/u.", 0) end local vowel, accent = string.match(self.head, "([IU])(/?)$") self.accent = accent self.type = vowel == "I" and "long_i" or "long_u" self:vowelStems(vowel) local properties, masculine = self.properties, self.links.masculine local monosyllabic = self:monosyllabic() local feminine = self.gender == "f" if self:inLexicon("stri") and not (masculine and string.match(masculine, "stf/?$")) then self.options.iy_uv_before_vowel = true self:add("stri") elseif not (properties.root or monosyllabic) or monosyllabic and properties.root == false or properties.han then if properties.vrki then -- The vṛkī́-declension (Whitney §355ff.), given as the older forms of the later declension. if vowel == "U" then error("The vṛkī́-declension (<vrki>) is a declension of ī-stems.", 0) end self:category("vrki") self:generalNote("vrki") if properties.contract == false then self.options.iy_uv_before_vowel = true end self:add("vrki") self:add(accent == "" and "vrki_instrumental_barytone" or "vrki_instrumental_oxytone") self:add(accent == "" and "vrki_genitive_dual_barytone" or "vrki_genitive_dual_oxytone") elseif vowel == "I" then self:category("long_i") self:add("devi") -- The Rigvedic genitive plural in -īnā́m (Whitney §319a). self:add(accent == "" and "devi_genitive_plural_barytone" or "devi_genitive_plural_oxytone") else -- Whitney §356a, given as the older forms of §364 (Wackernagel III p.189). if not self.adjective then self:category("long_u") elseif self.gender == "m" then self:category("long_u") elseif masculine and string.match(masculine, "u" .. M.sa_utilities.accent .. "?$") and not self:inLexicon("classical_long_u_feminine") then self:generalNote("vedic_long_u_feminine") end if self:baseMatches("y$") or self:inLexicon("vedic_uv") then -- With the Vedic -úv- (Macdonell p.290 §384a). self:add("vedic_uv") else self:add("u_derived") self:add(accent == "" and "u_instrumental_barytone" or "u_instrumental_oxytone") self:add(accent == "" and "u_genitive_dual_barytone" or "u_genitive_dual_oxytone") end self:add("u_nominative_genitive") end self:add("derived_oblique") self:add(vowel == "I" and "derived_vocative_i" or "derived_vocative_u") else self:category(vowel == "I" and "root_long_i" or "root_long_u") if monosyllabic then -- Root nouns (Whitney §351; Wackernagel III p.181). self.options.iy_uv_before_vowel = true self:add(feminine and "root_monosyllabic_feminine" or "root_monosyllabic") self:add("root_monosyllabic_oblique") else -- Compounds of root nouns (Whitney §352; Wackernagel III §91a p.179, §100a, §100eα p.192-193; Macdonell -- p.268, 288). These are uncontracted after two consonants, and the ū-stems also when accented, except in -- -sū/-ṣū. local utilities = M.sa_utilities local uncontracted = properties.contract == false or properties.contract ~= true and ( self:baseMatches(utilities.consonant .. utilities.consonant .. "$") or vowel == "U" and (self:headMatches(utilities.accent) and not self:baseMatches("[sz]$") or self:inLexicon("uncontracted_long_u_compound")) or vowel == "I" and (self:inLexicon("uncontracted_long_i_compound") or self:baseMatches("D$") and self:baseMatches(utilities.accent))) if uncontracted then -- -Ciy-/-Cuv- before a vowel. self.options.iy_uv_before_vowel = true self:add(feminine and "uncontracted_locative_feminine" or "uncontracted_locative") else self:add((accent ~= "" and "contracted_locative_oxytone" or "contracted_locative") .. (feminine and "_feminine" or "")) end self:add(feminine and "compound_feminine_dative_ablative" or "compound_dative_ablative") self:add("compound_oblique") end self:add("root_common") end end -- The ṛ-stems. function Analysis:vocalicRStem() local r = self.properties.r if self.gender == "f" and r == "A" and self:baseMatches("t$") and not self:baseMatches("^s?t$") then error("The feminine of adjectives in -tṛ ends in -trī.", 0) end self.accent = string.match(self.head, "(/?)$") self.type = "vocalic_r" self.stems.lengthened_unaccented = self.stems.base .. "F" if self.gender == "n" then self:add("neuter") else if not r then error("Give the vowel of the accusative singular with <r:a> or <r:ā>.", 0) end self:add("masculine_feminine") self:add(r == "a" and "strong_short_a" or "strong_long_a") self:add(self.gender == "f" and "feminine_accusative_plural" or "masculine_accusative_plural") end self:add("oblique") self:category("vocalic_r") end -- The consonantal root stems. These also cover the stems in -āt/-it/-ut/-ṛt, -akt and -ās/-os, and púṃs. function Analysis:rootStem() local utilities = M.sa_utilities local vowel, accent, extra, final = string.match(self.head, "(" .. utilities.vowel .. ")(" .. utilities.accent .. "?)([rM]?)([kgGcjwqtTdDpBmrzShs]t?)$") if string.match(final, "[jSh]") and not self.properties.final then error("Give the final consonant of the nominative singular with <final:k> or <final:ṭ>.", 0) end self.accent = accent self.type = "root" self.options.root_noun = true self.options.final_obstruent = self.properties.final self.options.diaspirate = self.properties.diaspirate or false local nasal = string.gsub(final, ".", utilities.homorganic_nasal) self.stems.neuter_plural = self.stems.base .. vowel .. accent .. nasal .. final self.stems.neuter_plural_unaccented = self.stems.base .. vowel .. nasal .. final if self.gender == "n" then -- The neuter nominative plural, with the nasal (Whitney §389c). self:add((string.match(final, "[mr]") == nil and extra == "") and "neuter_plural_nasal" or "neuter_plural") end if self:inLexicon("pums") then self:add("pums") elseif self:monosyllabic() and not (accent == "\\" or self.options.initial_svarita) then self:add(self.gender == "n" and "monosyllabic_neuter_direct" or "monosyllabic_direct") self:add("monosyllabic_oblique") self:add(final == "s" and "monosyllabic_locative_plural_s" or "monosyllabic_locative_plural") else if self.gender == "n" then self:add("polysyllabic_neuter_direct") else self:add("polysyllabic_direct") -- The Vedic masculine nominative singular of the adjectives in -dṛ́ś (Wackernagel III p.246). self:add((self.gender == "m" and self:inLexicon("vedic_nominative_drs")) and "drs_nominative" or "polysyllabic_nominative") end self:add("polysyllabic_oblique") self:add(final == "s" and "polysyllabic_locative_plural_s" or "polysyllabic_locative_plural") end self:category("root") end -- The as-, is- and us-stems, including the comparatives in -yas. function Analysis:sStem() local utilities = M.sa_utilities local vowel, accent = string.match(self.head, "([aiu])(" .. utilities.accent .. "?)s$") self.accent = accent self.type = vowel .. "s" local base = self.stems.base self.stems.neuter_plural = base .. utilities.lengthen[vowel] .. accent .. "Ms" self.stems.neuter_plural_unaccented = base .. utilities.lengthen[vowel] .. "Ms" local comparative = vowel == "a" and (self:baseMatches("[^aAiK/\\]" .. utilities.accent .. "?y$") or self:baseMatches("jyA/?y$")) if comparative and self.gender ~= "n" then if self.gender ~= "m" then error("The feminine of comparatives in -yas ends in -yasī.", 0) end self:add("comparative_masculine") elseif self.gender == "m" or self.gender == "f" then if vowel == "a" then self:add("as_direct") else self:add("is_us_direct") -- The Vedic vocative (Wackernagel III p.292 §152c). self:add(vowel == "i" and "is_vocative" or "us_vocative") end self:add("masculine_feminine_dual") else -- Compound adjectives in -as (Macdonell p.226; Whitney §418a). if self.adjective and vowel == "a" and not comparative and (self:baseMatches(utilities.vowel .. ".*" .. utilities.vowel) or self:baseMatches("^sv")) then self:add("compound_as_neuter_nominative") else self:add("neuter_nominative") end self:add("neuter_direct") end self:add("oblique") self:category(comparative and "comparative" or vowel .. "s") end -- The an-stems. function Analysis:anStem() local utilities = M.sa_utilities self.accent = string.match(self.head, "a(" .. utilities.accent .. "?)n$") self.type = "an" self.options.retroflex_stem_n = true local properties = self.properties local contract = properties.contract if not self:baseMatches(utilities.consonant .. "[NYRnmyrlv]$") then contract = true end if self.gender == "n" then -- Wackernagel III p.238 presupposes a neuter plural -hāni for -han. self:add("neuter_direct") self:add(properties.han and "han_neuter_nominative" or "neuter_nominative") self:add(contract and "contracted_neuter_dual" or "neuter_dual") else self:add("masculine_nominative_vocative") if properties.han or self:inLexicon("short_strong_an") then self:add("short_strong") self:add(properties.han and "han_accusative_plural" or "short_strong_accusative_plural") else -- Whitney §426b; Wackernagel III p.267. self:add(self:inLexicon("optional_short_strong_an") and "optional_short_strong" or "strong") self:add(contract and "contracted_accusative_plural" or "uncontracted_accusative_plural") end end -- The Vedic locative singular without -i (Whitney §425c). self:add(contract and "contracted_oblique" or "uncontracted_oblique") self:add("oblique") self:category("an") end -- The in-stems. function Analysis:inStem() self.accent = string.match(self.head, "i(" .. M.sa_utilities.accent .. "?)n$") self.type = "in" self.options.retroflex_stem_n = true self:add(self.gender == "n" and "neuter_direct" or "masculine_direct") self:add("oblique") self:category("in") end -- The at-stems: the participles in -at (and -āt), and the stems in -vat/-mat. function Analysis:atStem() local consonant, vowel, accent = string.match(self.head, "([mv]?)([aA])(" .. M.sa_utilities.accent .. "?)t$") self.accent = accent local properties = self.properties local long = vowel == "A" and "long_a" or "short_a" if self:headMatches("[vm]a/?t$") and not properties.participle then self.type = consonant .. "at" self:add(self.gender == "n" and "vat_neuter" or "vat_masculine") self:add("vat_oblique") self:category(consonant .. "at") return end self.type = "at" if properties.nonasal then -- Participles like júhvat, with no nasal in the strong stem. self:add(self.gender == "n" and "nonasal_neuter" or "nonasal_masculine") self:add("nonasal_oblique") else if self.gender ~= "n" then self:add("participle_masculine_" .. long) else -- The neuter nominative dual is the feminine stem (Whitney §443a, though this may be artificial: §447b). local feminines = properties.feminine or self.links.feminine if not feminines or not feminines[1] then error("Give the nominative dual (the feminine stem) with <feminine:...>.", 0) end self.stems.feminine = feminines[1] self.stems.second_feminine = feminines[2] self:add(feminines[2] and "neuter_dual_two_feminines" or "neuter_dual_feminine") -- The Rigvedic neuter plural in -ānti (Wackernagel III p.262). self:add("participle_neuter_plural_" .. long) self:add("participle_neuter_singular") self:add("participle_neuter_singular_" .. long) end self:add("participle_oblique_" .. long) end self:add("oblique") self:add("oblique_" .. long) self:category("at") end -- The añc-stems, which have a strong stem (the head), a middle stem in -ac- and a weakest stem. function Analysis:ancStem() local consonant, vowel, accent = string.match(self.head, "([yv]?)([aA])(" .. M.sa_utilities.accent .. "?)Yc$") self.accent = accent self.type = "anc" local middle = string.gsub(self.stems.base, "Yc$", "c") self.stems.base = middle self:add(self.gender == "m" and "masculine_direct" or "neuter_direct") self:add("middle_oblique") local weakest if vowel == "A" then weakest = middle elseif self:inLexicon("tiryanc") then weakest = string.gsub(middle, "ya(/?)c$", "a%1Sc") elseif consonant ~= "" then weakest = string.gsub(middle, "([yv])a([/\\]?)c$", function(semivowel, stem_accent) return (semivowel == "y" and "I" or "U") .. (stem_accent == "" and "" or "/") .. "c" end) elseif self:inLexicon("ud_anc") then weakest = string.gsub(middle, "ac$", "Ic") else error("This añc-stem is not supported.", 0) end self.stems.weakest = weakest if vowel == "A" or accent ~= "/" then self:add(self.gender == "m" and "masculine_accusative_plural" or "neuter_dual") self:add("weakest_oblique") else -- Oxytones have both accentuations (Whitney §410). self:add(self.gender == "m" and "oxytone_masculine_accusative_plural" or "oxytone_neuter_dual") self:add("oxytone_weakest_oblique") end self:add("copies") self:category("anc") end -- The o-stem gó, the au-stem nau and the ai-stem rái, and their compounds. function Analysis:diphthongStem(vowel, type) self.accent = string.match(self.head, vowel .. "(" .. M.sa_utilities.accent .. "?)$") self.type = type self:add("all") self:category(type) end -- The vāṃs-stems, i.e. the perfect participles. function Analysis:vamsStem() local utilities = M.sa_utilities self.accent = string.match(self.head, "vA(" .. utilities.accent .. "?)Ms$") self.type = "vams" local base = self.stems.base local weak if self:inLexicon("vams_glide") or self:baseMatches("u$") then weak = base .. "v" elseif self:baseMatches("U$") then weak = string.gsub(base, "U$", "uv") elseif self:inLexicon("vams_keep_i") then weak = base elseif self:baseMatches("[aAIuUfFxeEoO]" .. utilities.accent .. "?M?" .. utilities.consonant .. "+i$") or self:inLexicon("vams_drop_i") then -- The i of śiśrivā́ṃs and the like belongs to the root. weak = string.gsub(base, "i$", "") elseif self.properties.retroflex_l then weak = string.gsub(string.gsub(base, "q$", "L"), "Q$", "Lh") else weak = base end self.stems.weak = weak self:add(self.gender == "m" and "masculine_direct" or "neuter_direct") self:add("oblique") self:category("vams") end -- The personal pronouns. Their forms are whole forms on an empty stem, and the head (ahám or tvám) says which person. function Analysis:personal() local first = self:headMatches("^a") self.type = first and "first_person" or "second_person" self.stems.base = "" self:add(first and "first" or "second") end local CLASS_METHODS = { numeral = Analysis.numeral, a = Analysis.aStem, short_iu = Analysis.shortIUStem, long_a = Analysis.longAStem, long_iu = Analysis.longIUStem, vocalic_r = Analysis.vocalicRStem, root = Analysis.rootStem, s = Analysis.sStem, an = Analysis.anStem, ["in"] = Analysis.inStem, at = Analysis.atStem, anc = Analysis.ancStem, o = function(analysis) analysis:diphthongStem("o", "o") end, au = function(analysis) analysis:diphthongStem("O", "au") end, ai = function(analysis) analysis:diphthongStem("E", "ai") end, vams = Analysis.vamsStem, personal = Analysis.personal, } ------------------------------------------------------------------------------------------------------------------------ -- Generation -- ------------------------------------------------------------------------------------------------------------------------ --[==[ Generate the forms of form groups, slot by slot. Each form is `{slp1 = ..., note = KEY, stem = ..., ending = ..., options = {...}, position = N}`, i.e. the joined form, its note, the inputs to `join` and the position of the ending within its cell. With `novedic`, the Vedic endings are left out, and the remaining endings keep their positions. A cell that copies another (`"[nom]"`) is filled in once every group has run. ]==] local FormGenerator = {} FormGenerator.__index = FormGenerator local ENDING_FLAGS = {"iy_uv_before_vowel", "keep_s_before_voiceless", "strip_stem_accent"} function FormGenerator.new(novedic) return setmetatable({novedic = novedic}, FormGenerator) end function FormGenerator:form(group, ending, case, position) local text, note, stem_key = ending, nil, nil if type(ending) == "table" then text, note, stem_key = ending[1], ending.note, ending.stem end if self.novedic and note and M.data.notes[note].vedic then return nil end local stem if string.sub(text, 1, 1) == "+" then text = string.sub(text, 2) stem = group.head elseif stem_key then stem = group.stems[stem_key] or error(("Internal error: no stem '%s' in %s.%s"):format(stem_key, group.class, group.set)) else stem = group.stems.base end text = string.gsub(text, "@", group.accent) local options = {} for key, value in pairs(group.options) do options[key] = value end if type(ending) == "table" then for _, flag in ipairs(ENDING_FLAGS) do if ending[flag] then options[flag] = true end end end options.recessive_accent = case == "voc" return {slp1 = M.sa_utilities.join(stem, text, options), note = note, stem = stem, ending = text, options = options, position = position} end --[==[ Generate the forms of `groups`. Return `cells` (slot -> list of forms) and `copies` (slot -> the slot it copies). Each slot is filled by one group only. ]==] function FormGenerator:generate(groups) local cells, copies = {}, {} for _, group in ipairs(groups) do for number, cases in pairs(M.data.endings[group.class][group.set]) do for case, cell in pairs(cases) do local slot = case .. "_" .. number if cells[slot] or copies[slot] then error(("Internal error: the slot %s is filled twice (%s.%s)"):format(slot, group.class, group.set)) end local copied = type(cell) == "string" and string.match(cell, "^%[(.*)%]$") if copied then copies[slot] = copied .. "_" .. number else local forms = {} if type(cell) == "string" then cell = {cell} end for position, ending in ipairs(cell) do local form = self:form(group, ending, case, position) if form then table.insert(forms, form) end end cells[slot] = forms end end end end -- Follow copies of copies back to the cell they come from. for slot in pairs(copies) do local source, seen = copies[slot], {[slot] = true} while copies[source] do if seen[source] then error("Internal error: the copies of " .. slot .. " go round in a circle") end seen[source] = true source = copies[source] end if not cells[source] then error(("Internal error: the slot %s copies %s, which is empty"):format(slot, source)) end copies[slot] = source end return cells, copies end ------------------------------------------------------------------------------------------------------------------------ -- Declension -- ------------------------------------------------------------------------------------------------------------------------ -- Return the cases of a table of class `class`: those listed in its entry in `data.classes`, or else every case except -- the enclitic ones. local function cases_of(class) local codes for _, entry in ipairs(M.data.classes) do if entry.id == class then codes = entry.cases end end local cases = {} for _, case in ipairs(M.data.cases) do local listed = not codes and not case.enclitic for _, code in ipairs(codes or {}) do listed = listed or code == case.code end if listed then table.insert(cases, case) end end return cases end -- Return the description of a table of gender `gender` and type `type` that titles and error messages use, e.g. -- "masculine a-stem" or "first-person pronoun". A manual table gives just its gender ("neuter"), or the empty string -- if it has none. local function table_kind(gender, type) local words = {} local entry = gender and M.data.genders[gender] if entry and entry.in_title ~= false then table.insert(words, entry.name:lower()) end if type then table.insert(words, M.data.types[type]) end return table.concat(words, " ") end --[==[ One table. It holds the `head` (in SLP1), the `gender`, the stem `class` and `type`, the `numbers` and `cases` shown and the forms of every slot: `slots[slot]` is a list of `{slp1 = ..., notes = {text...}}`, empty if the slot has no form. It also keeps the form `groups` it was declined with, the generated forms in `generated` and the slots that copy another in `copies`, as well as its `categories` and `general_notes` (keys into `data`) and the `user_notes` given in the call. ]==] local Declension = {} Declension.__index = Declension function Declension.new(analysis, cells, copies, numbers) local declension = setmetatable({ head = analysis.head, gender = analysis.gender, adjective = analysis.adjective, class = analysis.class, type = analysis.type, numbers = numbers, cases = cases_of(analysis.class), groups = analysis.groups, generated = cells, copies = copies, slots = {}, overridden = {}, categories = analysis.categories, general_notes = analysis.general_notes, user_notes = {}, }, Declension) for _, case in ipairs(declension.cases) do for _, number in ipairs(M.data.numbers) do local slot = case.code .. "_" .. number.code if numbers[number.code] and not cells[copies[slot] or slot] then error(("Internal error: no forms for the slot %s (%s)"):format(slot, analysis.class)) end local forms = {} for _, form in ipairs(cells[copies[slot] or slot] or {}) do table.insert(forms, {slp1 = form.slp1, notes = form.note and {M.data.notes[form.note].text} or {}}) end declension.slots[slot] = forms end end return declension end --[==[ Make a manual table (`<manual>`), which has no stem class and no generated forms: every slot starts out empty and is filled by the cell parameters. `gender` can be {nil}. ]==] function Declension.manual(head, gender, numbers) local cells = {} for _, case in ipairs(M.data.cases) do for _, number in ipairs(M.data.numbers) do cells[case.code .. "_" .. number.code] = {} end end return Declension.new({head = head, gender = gender, adjective = false, class = "manual", groups = {}, categories = {}, general_notes = {}}, cells, {}, numbers) end --[==[ Replace the forms of `slot` with `forms` from `Overrides`. These are written in IAST or in the display script, and read with `bridge`; a form of `-` means no form. ]==] function Declension:override(slot, forms, bridge) if not self.slots[slot] then error(("'%s' is not a cell of this table"):format(slot), 0) end local replaced = {} for _, form in ipairs(forms) do if form.written ~= "-" then table.insert(replaced, {slp1 = bridge:toSlp1(form.written), notes = form.footnotes, override = true}) end end self.slots[slot] = replaced self.overridden[slot] = true end --[==[ Return the names of the table's categories. `kind` is `noun` ({{tl|sa-ndecl}}), `adjective` (the masculine table of an adjective) or `numeral`. An adjective's other tables have no categories. ]==] function Declension:categoryNames(kind) local names = {} if kind then for _, key in ipairs(self.categories) do table.insert(names, M.data.categories[key][kind]) end end return names end -- Return the texts of the table's general notes. function Declension:generalNoteTexts() local texts = {} for _, key in ipairs(self.general_notes) do table.insert(texts, M.data.general_notes[key]) end return texts end --[==[ Return the data of the table for bots (`json=1`). This has the head, the gender, the stem class and type, the numbers shown, and for each slot its forms in SLP1, in the display script and in IAST, with their notes. It also has the user's notes, the general notes, the categories of `kind` (see `categoryNames`) and whether `nocat` was given. ]==] function Declension:toJson(bridge, kind, nocat) local slots = {} for slot, forms in pairs(self.slots) do local list = {} for _, form in ipairs(forms) do table.insert(list, { slp1 = form.slp1, form = bridge:toNative(form.slp1), translit = bridge:toIast(form.slp1), notes = form.notes, override = form.override, }) end slots[slot] = list end local numbers = {} for _, number in ipairs(M.data.numbers) do if self.numbers[number.code] then table.insert(numbers, number.code) end end return { head = self.head, gender = self.gender, class = self.class, type = M.data.types[self.type], numbers = numbers, slots = slots, user_notes = self.user_notes, general_notes = self:generalNoteTexts(), categories = self:categoryNames(kind), nocat = nocat or false, } end ------------------------------------------------------------------------------------------------------------------------ -- The table -- ------------------------------------------------------------------------------------------------------------------------ --[==[ Render a `Declension` as a table with [[Module:inflection-table]]. There is a column for each number shown and a row for each case, and each row is marked with `data-case` so that scripts can reorder the cases. The cells come from [[Module:inflection utilities]]' `show_forms`, which gives each form in the display script, linked with an accelerator for `lemma`, with its IAST below. The notes go under the table. `kind` says which categories to add (see `Declension:categoryNames`); with {nil}, none are added. ]==] local TableRenderer = {} TableRenderer.__index = TableRenderer function TableRenderer.new(declension, bridge, lemma, kind) return setmetatable({declension = declension, bridge = bridge, lemma = lemma, kind = kind}, TableRenderer) end -- Return the numbers shown, in order. function TableRenderer:numbers() local numbers = {} for _, number in ipairs(M.data.numbers) do if self.declension.numbers[number.code] then table.insert(numbers, number) end end return numbers end -- Return the accelerator tags of a slot: the case, then the gender for an adjective's table, then the number. function TableRenderer:accel(case, number) local declension = self.declension local tags = {case.accel} if declension.adjective then table.insert(tags, M.data.genders[declension.gender].accel) end table.insert(tags, number.accel) return table.concat(tags, "|") end -- Return the forms of every slot shown, as linked text (an em dash for none), and the footnotes, numbered case by -- case. function TableRenderer:cells() local declension, bridge = self.declension, self.bridge local formtable, slot_list = {}, {} for _, case in ipairs(declension.cases) do for _, number in ipairs(self:numbers()) do local slot = case.code .. "_" .. number.code local forms = declension.slots[slot] if forms[1] then local list = {} for _, form in ipairs(forms) do local footnotes if form.notes[1] then footnotes = {} for _, note in ipairs(form.notes) do table.insert(footnotes, "[" .. note .. "]") end end table.insert(list, {form = bridge:toNative(form.slp1), translit = bridge:toIast(form.slp1), footnotes = footnotes}) end formtable[slot] = list end table.insert(slot_list, {slot, self:accel(case, number)}) end end M.inflection_utilities.show_forms(formtable, { lang = M.lang, lemmas = {self.lemma}, slot_list = slot_list, include_translit = true, }) return formtable, formtable.footnote end -- "Masculine a-stem declension of देव" function TableRenderer:title() local declension, bridge = self.declension, self.bridge local head = M.links.full_link({lang = M.lang, sc = bridge.script, alt = bridge:toNative(declension.head), tr = "-"}) local kind = table_kind(declension.gender, declension.type) if kind == "" then return "Biến cách của " .. head end return mw.ustring.upper("Biến cách " .. mw.ustring.sub(kind, 2) .. mw.ustring.sub(kind, 1, 1)) .. " của " .. head end function TableRenderer:render() local declension = self.declension local cells, footnotes = self:cells() local lines = {M.inflection_table.make_top{ title = self:title(), palette = "blue", tall = "yes", lang = "sa", class = "sticky-left-column", }} -- make_top has already opened the first row. table.insert(lines, '! class="outer" |') for _, number in ipairs(self:numbers()) do table.insert(lines, '! class="outer" | ' .. number.name) end for _, case in ipairs(declension.cases) do table.insert(lines, ('|- data-case="%s"'):format(case.code)) table.insert(lines, "! " .. case.name) for _, number in ipairs(self:numbers()) do table.insert(lines, "| " .. cells[case.code .. "_" .. number.code]) end end local notes = {} if footnotes ~= "" then table.insert(notes, footnotes) end for _, note in ipairs(declension.user_notes) do table.insert(notes, note) end for _, note in ipairs(declension:generalNoteTexts()) do table.insert(notes, note) end table.insert(lines, M.inflection_table.make_bottom{notes = table.concat(notes, "<br />")}) local categories = declension:categoryNames(self.kind) if categories[1] then table.insert(lines, M.utilities.format_categories(categories, M.lang)) end return table.concat(lines, "\n") end ------------------------------------------------------------------------------------------------------------------------ -- The call -- ------------------------------------------------------------------------------------------------------------------------ local ALL_NUMBERS = {s = true, d = true, p = true} --[==[ Decline one table without a frame. `input` has the following fields: * `head`: the head, in SLP1; * `gender`: `m`, `f`, `n` or `num` (the numerals); * `adjective`: true if the table is one of an adjective's tables; * `properties`: what the indicators set, in SLP1: `root` (true, false for `nonroot`, or nil), `vrki`, `pron`, `novedic`, `r` (`a` or `A`), `final` (`k`, `w` or `t`), `diaspirate`, `participle`, `nonasal`, `contract` (true, false for `nocontract`, or nil), `han`, `svarita`, `retroflex_l`, `feminine` (a list of stems) and `numbers` (a set of s/d/p); * `links`: the other heads of an adjective that the table looks at, i.e. `masculine` (for a feminine table) and `feminine` (a list, for the neuter table). Return the Declension. ]==] function export.decline_table(input) local properties = input.properties or {} local class, base = Head.new(input.head):detectClass(input.gender, properties) if not class then error("No declension class could be detected. Please check the head or specify the declension.", 0) end local analysis = Analysis.new{head = input.head, base = base, gender = input.gender, adjective = input.adjective, properties = properties, links = input.links, class = class} CLASS_METHODS[class](analysis) local cells, copies = FormGenerator.new(properties.novedic):generate(analysis.groups) local numbers = input.gender == "num" and {p = true} or properties.numbers or ALL_NUMBERS return Declension.new(analysis, cells, copies, numbers) end -- Return true if a table of class `class` and gender `gender` uses the indicator defined by `definition`. local function uses(definition, class, gender) return (definition.classes == nil or definition.classes[class] == true) and (definition.genders == nil or definition.genders[gender] == true) end -- Return the cell parameters of a table from `args`, by slot. Each parameter is the slot preceded by `prefix` (`m_`, -- `f2_`, etc.). local function cell_values(args, prefix) local values = {} for _, case in ipairs(M.data.cases) do for _, number in ipairs(M.data.numbers) do local slot = case.code .. "_" .. number.code values[slot] = args[prefix .. slot] end end return values end local function cell_parameters(params, prefix) for _, case in ipairs(M.data.cases) do for _, number in ipairs(M.data.numbers) do params[prefix .. case.code .. "_" .. number.code] = {} end end end --[==[ Implement {{tl|sa-ndecl}} without a frame, for other modules and for testing. `args` are the template's arguments and `pagename` is the page's title. Return the Declension, its ScriptBridge and the processed args. ]==] function export.decline_noun(args, pagename) local params = { [1] = {}, note = {list = true}, nocat = {type = "boolean"}, json = {type = "boolean"}, } cell_parameters(params, "") args = M.parameters.process(args, params) local spec = Spec.parse(args[1] or "", "noun") local head = spec.head ~= "" and spec.head or pagename local bridge = ScriptBridge.new(head, pagename) local gender for name, definition in pairs(M.data.indicators.noun) do if definition.group == "gender" and spec.indicators[name] then gender = name end end local properties = spec:properties(bridge) local declension if spec.indicators.manual then for name, definition in pairs(M.data.indicators.noun) do if spec.indicators[name] and name ~= "manual" and definition.group ~= "gender" and definition.group ~= "numbers" then error(("The indicator '%s' does not apply to a manual table"):format(name), 0) end end declension = Declension.manual(bridge:toSlp1(head), gender, gender == "num" and {p = true} or properties.numbers or ALL_NUMBERS) else declension = export.decline_table{head = bridge:toSlp1(head), gender = gender, properties = properties} for name in pairs(spec.indicators) do local definition = M.data.indicators.noun[name] if definition.group ~= "gender" and not uses(definition, declension.class, gender) then error(("The indicator '%s' does not apply to a %s"):format(name, table_kind(gender, declension.type)), 0) end end end for slot, forms in pairs(Overrides.parse(cell_values(args, "")).slots) do declension:override(slot, forms, bridge) end declension.user_notes = args.note return declension, bridge, args end --[==[ The tables of an adjective, each a Declension, in this order: the masculine, a feminine for each head of `f:` (by default the masculine head), and the neuter (the head of `n:`, by default the masculine head). ]==] local AdjectiveDeclension = {} AdjectiveDeclension.__index = AdjectiveDeclension --[==[ Implement {{tl|sa-adecl}} without a frame, for other modules and for testing. `args` are the template's arguments and `pagename` is the page's title. Return the AdjectiveDeclension, its ScriptBridge and the processed args. ]==] function export.decline_adjective(args, pagename) local params = { [1] = {}, nocat = {type = "boolean"}, json = {type = "boolean"}, } local spec = Spec.parse(args[1] or "", "adjective") local feminine_specs = spec.indicators.f or {Spec.parse("", "adjective", true)} local prefixes = {"m_", "n_"} for position = 1, #feminine_specs do table.insert(prefixes, position == 1 and "f_" or "f" .. position .. "_") end for _, prefix in ipairs(prefixes) do cell_parameters(params, prefix) params[prefix .. "note"] = {list = true} end args = M.parameters.process(args, params) local masculine_head = spec.head ~= "" and spec.head or pagename local bridge = ScriptBridge.new(masculine_head, pagename) local shared = spec:properties(bridge) local masculine_slp1 = bridge:toSlp1(masculine_head) -- One entry per table, with its head (and any spec of its own), gender, cell prefix and links. local tables = {{spec = nil, slp1 = masculine_slp1, gender = "m", prefix = "m_"}} local feminine_stems = {} for position, feminine_spec in ipairs(feminine_specs) do local slp1 = feminine_spec.head ~= "" and bridge:toSlp1(feminine_spec.head) or masculine_slp1 table.insert(feminine_stems, slp1) table.insert(tables, {spec = feminine_spec, slp1 = slp1, gender = "f", prefix = position == 1 and "f_" or "f" .. position .. "_", links = {masculine = masculine_slp1}}) end local neuter_spec = spec.indicators.n table.insert(tables, {spec = neuter_spec, slp1 = neuter_spec and neuter_spec.head ~= "" and bridge:toSlp1(neuter_spec.head) or masculine_slp1, gender = "n", prefix = "n_", links = {feminine = {feminine_stems[1], feminine_stems[2]}}}) local adjective = setmetatable({tables = {}}, AdjectiveDeclension) local used = {} for _, item in ipairs(tables) do local properties = item.spec and item.spec:properties(bridge, shared) or shared local declension = export.decline_table{head = item.slp1, gender = item.gender, adjective = true, properties = properties, links = item.links} for name, definition in pairs(M.data.indicators.adjective) do if spec.indicators[name] and definition.value ~= "spec" and uses(definition, declension.class, item.gender) then used[name] = true end end for name in pairs(item.spec and item.spec.indicators or {}) do if not uses(M.data.indicators.adjective[name], declension.class, item.gender) then error(("The indicator '%s' does not apply to the %s"):format(name, table_kind(item.gender, declension.type)), 0) end end for slot, forms in pairs(Overrides.parse(cell_values(args, item.prefix)).slots) do declension:override(slot, forms, bridge) end declension.user_notes = args[item.prefix .. "note"] table.insert(adjective.tables, declension) end for name, definition in pairs(M.data.indicators.adjective) do if spec.indicators[name] and definition.value ~= "spec" and not used[name] then error(("The indicator '%s' applies to none of the tables"):format(name), 0) end end return adjective, bridge, args end -- Return the kind of categories a noun table adds (see `Declension:categoryNames`). local function noun_kind(declension) return declension.class == "numeral" and "numeral" or "noun" end --[==[Entry point of {{tl|sa-ndecl}}. Return the table, or with {{para|json|1}}, its data as JSON.]==] function export.noun(frame) local pagename = M.headword_data.pagename local declension, bridge, args = export.decline_noun(frame:getParent().args, pagename) local kind = noun_kind(declension) if args.json then return M.JSON.toJSON(declension:toJson(bridge, kind, args.nocat)) end return TableRenderer.new(declension, bridge, pagename, not args.nocat and kind or nil):render() end --[==[ Entry point of {{tl|sa-adecl}}. Return the tables one above the other in an untitled inflection box (`make_box` of [[Module:inflection-table]], as {{tl|inflection-box-top}} makes), or with {{para|json|1}}, their data as JSON (`{tables = {...}}`). Only the masculine table adds categories. ]==] function export.adjective(frame) local pagename = M.headword_data.pagename local adjective, bridge, args = export.decline_adjective(frame:getParent().args, pagename) if args.json then local tables = {} for position, declension in ipairs(adjective.tables) do table.insert(tables, declension:toJson(bridge, position == 1 and "adjective" or nil, args.nocat)) end return M.JSON.toJSON({tables = tables}) end local rendered = {} for position, declension in ipairs(adjective.tables) do local kind = position == 1 and not args.nocat and "adjective" or nil table.insert(rendered, TableRenderer.new(declension, bridge, pagename, kind):render()) end return M.inflection_table.make_box({title = "-", flow = "vertical"}, "\n" .. table.concat(rendered, "\n") .. "\n") end return export km9hs7id5wcv83eas8bkwtdxf1n895b 2571615 2571614 2026-10-18T12:30:25Z Hiyuune 50834 2571615 Scribunto text/plain --[==[ This module implements the declension tables of Sanskrit nouns and numerals ({{tl|sa-ndecl}}) and of adjectives ({{tl|sa-adecl}}). Authorship: originally written by [[User:Dragonoid76]] and [[User:Benwing2]], with the declension rules of [[User:Exarchus]]; rewritten by [[User:Fenakhay]] in October 2026. TERMINOLOGY: * "head" = The form given in the call: the nominative singular, or the stem for consonant stems. It is followed by an inline spec of indicators, e.g. `{{sa-ndecl|devá<m>}}` or `{{sa-adecl|kṛṣṇá<f:kṛṣṇā́.novedic>}}`. * "stem class" = One way of declining, e.g. the a-stems, the i- and u-stems or the root stems. The classes in [[Module:sa-decl/data]] are tried on the head in order, and the first one that takes it gives the "stem" (the head minus its ending). The class's other stems are made from that one; see `Analysis:vowelStems`. * "slot" = A particular combination of case and number, e.g. `nom_s` or `loc_p`. Each slot is one cell of a table. * "form group" = One set of endings from [[Module:sa-decl/data]], together with the stems, accent and sandhi options in force when it was added. A table is made of the forms of its groups, each joined with `join` in [[Module:sa-utilities]]. Everything is worked out in SLP1, and shown in the script of the head (or of the page name) with the IAST below. The classes, by area: * The call: `Spec` (the inline spec of a head), `Overrides` (the cell parameters) and `ScriptBridge` (conversion between the input script and SLP1). * The analysis: `Head` (finds the stem class of a head), `Analysis` (the decisions of one stem class, with one method per class that adds `FormGroup`s) and `FormGenerator` (makes the forms of a group). * The result: `Declension` (one table, with the forms of every slot, its notes and its categories), `AdjectiveDeclension` (the tables of an adjective) and `TableRenderer`. Other modules used: [[Module:sa-decl/data]] (the endings and every other table, loaded with mw.loadData), [[Module:sa-utilities]] (sandhi), [[Module:inflection-table]] (the frame of each table, and the box around an adjective's tables) and [[Module:inflection utilities]] (the links, transliteration, accelerators and footnotes in the cells). ]==] local export = {} local M = require("Module:module loader").init { require = { inflection_table = "Module:inflection-table", inflection_utilities = "Module:inflection utilities", JSON = "Module:JSON", links = "Module:links", parameters = "Module:parameters", parse_utilities = "Module:parse utilities", sa_utilities = "Module:sa-utilities", scripts = "Module:scripts", utilities = "Module:utilities", }, loadData = { data = "Module:sa-decl/data", headword_data = "Module:headword/data", }, lazy = { lang = function() return require("Module:languages").getByCode("sa") end, }, } ------------------------------------------------------------------------------------------------------------------------ -- Script -- ------------------------------------------------------------------------------------------------------------------------ --[==[ Convert the call's input to SLP1, and SLP1 to the display script and to IAST. The display script is the script of the head. If the head is in IAST (i.e. Latin), it is the script of the page name instead, and failing that, Devanagari. Latin input is read as IAST; anything else goes through the display script's converter. ]==] local ScriptBridge = {} ScriptBridge.__index = ScriptBridge function ScriptBridge.new(head, pagename) local script = M.lang:findBestScript(head) if script:getCode() == "None" then script = M.lang:findBestScript(pagename) end if script:getCode() == "None" then script = M.scripts.getByCode("Deva") end local code = script:getCode() return setmetatable({ script = script, code = code, from_native = require("Module:sa-utilities/translit/" .. code .. "-to-SLP1").tr, to_native = require("Module:sa-utilities/translit/SLP1-to-" .. code).tr, from_iast = require("Module:sa-utilities/translit/IAST-to-SLP1").tr, to_iast = require("Module:sa-utilities/translit/SLP1-to-IAST").tr, }, ScriptBridge) end function ScriptBridge:toSlp1(text) if M.lang:findBestScript(text):getCode() == "None" then return self.from_iast(text) end return self.from_native(text) end -- Only Devanagari shows the accents, so strip them for any other script. function ScriptBridge:toNative(slp1) if self.code ~= "Deva" then slp1 = string.gsub(slp1, M.sa_utilities.accent, "") end return self.to_native(slp1) end function ScriptBridge:toIast(slp1) return self.to_iast(slp1) end ------------------------------------------------------------------------------------------------------------------------ -- Spec -- ------------------------------------------------------------------------------------------------------------------------ --[==[ The inline spec of a head, `HEAD<NAME.NAME:VALUE...>`. `Spec.parse` parses it and checks it against the indicators of `template` (`noun` or `adjective`, as keyed in `data.indicators`). The result has `head`, as written (empty means the page name), and `indicators`, keyed by name. An indicator's value is a list for a list indicator, a Spec for a spec value, and {true} for a flag. A spec value (the feminine and neuter heads of {{tl|sa-adecl}}) is itself a head with a spec of its own. It is parsed with `nested` set, and then only takes the indicators that apply to a single stem. ]==] local Spec = {} Spec.__index = Spec local function spec_error(message, text) error(message .. " in the spec '" .. text .. "'.", 0) end -- Split `text` at `separator` (a Lua pattern), except inside angle brackets. local function split_outside_brackets(text, separator) local parts = {} local segments = M.parse_utilities.parse_balanced_segment_run(text, "<", ">") for _, group in ipairs(M.parse_utilities.split_alternating_runs(segments, separator)) do table.insert(parts, table.concat(group)) end return parts end function Spec.parse(text, template, nested) text = mw.text.trim(text) local spec = setmetatable({head = text, indicators = {}}, Spec) local registry = M.data.indicators[template] local segments = M.parse_utilities.parse_balanced_segment_run(text, "<", ">") if #segments > 3 or segments[#segments] ~= "" and #segments > 1 then spec_error("Only one <...> may follow the head", text) end spec.head = mw.text.trim(segments[1]) if string.find(spec.head, ",", 1, true) then spec_error("The head is one form", text) end local needs_gender = template == "noun" and not nested if #segments == 1 then if needs_gender then spec_error("Give the gender: <m>, <f>, <n>, <num> or <pers>", text) end return spec end local inside = string.match(segments[2], "^<(.*)>$") local groups = {} for _, indicator in ipairs(split_outside_brackets(inside, "%.")) do local name, value = string.match(indicator, "^%s*([^:<]-)%s*:%s*(.-)%s*$") if not name then name = mw.text.trim(indicator) end local definition = registry[name] if definition and definition.alias then name = definition.alias definition = registry[name] end if not definition or nested and (definition.value == "spec" or definition.group == "gender") then local names = {} for known, known_definition in pairs(registry) do if not nested or known_definition.value ~= "spec" and known_definition.group ~= "gender" then table.insert(names, known) end end table.sort(names) spec_error(("Unrecognized indicator '%s'; the indicators are %s"):format(name, table.concat(names, ", ")), text) end if spec.indicators[name] ~= nil then spec_error(("The indicator '%s' is given twice"):format(name), text) end if definition.group and definition.group ~= "numbers" then if groups[definition.group] then spec_error(("The indicators '%s' and '%s' exclude each other"):format(groups[definition.group], name), text) end groups[definition.group] = name end if definition.value and (value == nil or value == "") then spec_error(("The indicator '%s' needs a value ('%s:...')"):format(name, name), text) elseif not definition.value and value ~= nil then spec_error(("The indicator '%s' takes no value"):format(name), text) end if definition.value == nil then value = true elseif definition.value == "spec" then if definition.list then local specs = {} for _, item in ipairs(split_outside_brackets(value, "%s*,%s*")) do table.insert(specs, Spec.parse(item, template, true)) end value = specs else value = Spec.parse(value, template, true) end elseif definition.list then local values = mw.text.split(value, "%s*,%s*") for _, item in ipairs(values) do if definition.values and not definition.values[item] then spec_error(("'%s' is not a value of '%s'"):format(item, name), text) end end value = values elseif definition.values and not definition.values[value] then local values = {} for known in pairs(definition.values) do table.insert(values, known) end table.sort(values) spec_error(("'%s' is not a value of '%s'; the values are %s"):format(value, name, table.concat(values, ", ")), text) end spec.indicators[name] = value end -- A manual table can do without a gender. if needs_gender and not groups.gender and not spec.indicators.manual then spec_error("Give the gender: <m>, <f>, <n>, <num> or <pers>", text) end return spec end --[==[ Return the stem properties set by the indicators of `spec`, with SLP1 values (see `export.decline_table`), on top of `inherited`. When `spec` belongs to one of an adjective's heads, `inherited` holds the adjective's shared properties. ]==] function Spec:properties(bridge, inherited) local properties = {} for key, value in pairs(inherited or {}) do properties[key] = value end local indicators = self.indicators if indicators.root then properties.root = true elseif indicators.nonroot then properties.root = false end if indicators.contract then properties.contract = true elseif indicators.nocontract then properties.contract = false end for name, property in pairs({vrki = "vrki", pron = "pron", novedic = "novedic", diaspirate = "diaspirate", participle = "participle", nonasal = "nonasal", han = "han", svarita = "svarita", ["ḷ"] = "retroflex_l"}) do if indicators[name] then properties[property] = true end end if indicators.r then properties.r = bridge.from_iast(indicators.r) end if indicators.final then properties.final = bridge.from_iast(indicators.final) end if indicators.feminine then properties.feminine = {} for _, form in ipairs(indicators.feminine) do table.insert(properties.feminine, bridge:toSlp1(form)) end end if indicators.sg or indicators.du or indicators.pl then properties.numbers = {s = indicators.sg, d = indicators.du, p = indicators.pl} end -- The pronominal declension is never a root declension, even for a monosyllable such as tā́. if properties.pron then properties.root = false end return properties end ------------------------------------------------------------------------------------------------------------------------ -- Overrides -- ------------------------------------------------------------------------------------------------------------------------ --[==[ The cell parameters. `Overrides.parse` returns, for each slot, its forms as given: a comma-separated list, each form followed by any `[footnote]`s, or `-` for no form. ]==] local Overrides = {} Overrides.__index = Overrides function Overrides.parse(values) local overrides = setmetatable({slots = {}}, Overrides) for slot, value in pairs(values) do local forms = {} local segments = M.parse_utilities.parse_balanced_segment_run(value, "[", "]") for _, group in ipairs(M.parse_utilities.split_alternating_runs(segments, "%s*,%s*")) do local footnotes = {} for i = 2, #group - 1, 2 do if mw.text.trim(group[i + 1]) ~= "" then error(("Text after a footnote in %s=%s"):format(slot, value), 0) end table.insert(footnotes, string.match(group[i], "^%[(.*)%]$")) end local form = mw.text.trim(group[1]) if form ~= "" then table.insert(forms, {written = form, footnotes = footnotes}) end end overrides.slots[slot] = forms end return overrides end ------------------------------------------------------------------------------------------------------------------------ -- Analysis -- ------------------------------------------------------------------------------------------------------------------------ --[==[ A head in SLP1. `detectClass` finds its stem class by trying the classes of `data.classes` in order. It returns the id of the first class whose genders include `gender` and one of whose patterns matches (taking the pattern's `when` or `unless` property into account), along with the stem the pattern captures. ]==] local Head = {} Head.__index = Head function Head.new(slp1) return setmetatable({slp1 = slp1}, Head) end function Head:detectClass(gender, properties) for _, class in ipairs(M.data.classes) do if class.genders[gender] then for _, pattern in ipairs(class.patterns) do local text, when, unless = pattern, nil, nil if type(pattern) == "table" then text, when, unless = pattern[1], pattern.when, pattern.unless end if (when == nil or properties[when] == true) and (unless == nil or not properties[unless]) then local stem = string.match(self.slp1, text) if stem then return class.id, stem end end end end end return nil end --[==[ One set of endings of a stem class, as added by `Analysis:add`. `class` and `set` locate it in `data.endings`, `accent` is what `@` stands for, and `stems` maps the stem keys to stems. `head` is what the `+` endings attach to, and `options` is a copy of the analysis's sandhi options at the time the group was added. ]==] local FormGroup = {} FormGroup.__index = FormGroup function FormGroup.new(fields) return setmetatable(fields, FormGroup) end --[==[ The decisions made for one stem class. An analysis starts with the head and its gender, whether the table is one of an adjective's (`adjective`), the properties set by the indicators (see `export.decline_table`) and the other heads the table looks at (`links`). The class's method then sets the `accent` that `@` stands for (the head's final accent), makes the `stems` (`base` plus whatever the class needs) and adjusts the sandhi `options`, which each group copies when it is added. What comes out is the list of `groups`, the `type` (a key of `data.types`), the `categories` (keys of `data.categories`) and the `general_notes` (keys of `data.general_notes`). ]==] local Analysis = {} Analysis.__index = Analysis function Analysis.new(input) local properties = input.properties local accented = string.match(input.head, M.sa_utilities.accent) ~= nil local analysis = setmetatable({ head = input.head, gender = input.gender, adjective = input.adjective or false, properties = properties, links = input.links or {}, class = input.class, accent = "", stems = {base = input.base}, options = { accented = accented, initial_svarita = properties.svarita or false, root_han = properties.han or false, }, groups = {}, type = nil, categories = {}, general_notes = {}, }, Analysis) -- An initial tvy-, dvy-, try-, dry- or ny- counts as two syllables, so the vocative gets an initial svarita. if accented and analysis:inLexicon("initial_svarita") then analysis.options.initial_svarita = true end return analysis end --[==[ Add the set `set` of the class's endings, with the current stems and options. `extra` can override fields of the group, e.g. to use a different `accent`. ]==] function Analysis:add(set, extra) if not M.data.endings[self.class][set] then error(("Internal error: no set '%s' of the %s endings"):format(set, self.class)) end local options, stems = {}, {} for key, value in pairs(self.options) do options[key] = value end for key, value in pairs(self.stems) do stems[key] = value end local group = {class = self.class, set = set, accent = self.accent, stems = stems, head = self.head, options = options} for key, value in pairs(extra or {}) do group[key] = value end table.insert(self.groups, FormGroup.new(group)) end function Analysis:category(key) table.insert(self.categories, key) end function Analysis:generalNote(key) table.insert(self.general_notes, key) end -- Return true if the list `name` of `data.lexicon` takes this head (or this class's stem, as the list's `subject` -- says). function Analysis:inLexicon(name) local list = M.data.lexicon[name] local subject = list.subject == "head" and self.head or self.stems.base for _, pattern in ipairs(list.except or {}) do if string.match(subject, pattern) then return false end end for _, pattern in ipairs(list.patterns) do if string.match(subject, pattern) then return true end end return false end function Analysis:headMatches(pattern) return string.match(self.head, pattern) ~= nil end function Analysis:baseMatches(pattern) return string.match(self.stems.base, pattern) ~= nil end function Analysis:monosyllabic() return M.sa_utilities.is_monosyllabic(self.head) end --[==[ Make the stems of a class ending in `vowel`, besides `base`. They are keyed as follows: `final_unaccented` (the base plus the vowel), `raised` and `raised_unaccented` (the vowel raised one grade, with and without the head's final accent), `lengthened` and `lengthened_unaccented` (the same for the lengthened vowel), `raised_glide` (the base plus ''a'' with the head's accent, plus ''v'') and `glide` (the base plus the vowel's semivowel). ]==] function Analysis:vowelStems(vowel) local utilities, base, accent = M.sa_utilities, self.stems.base, self.accent local function stem(key, ending) if ending then self.stems[key] = base .. ending end end stem("final_unaccented", vowel) stem("raised", utilities.up_one_grade[vowel .. accent]) stem("raised_unaccented", utilities.up_one_grade[vowel]) stem("lengthened", utilities.lengthen[vowel .. accent]) stem("lengthened_unaccented", utilities.lengthen[vowel]) stem("raised_glide", "a" .. accent .. "v") stem("glide", utilities.vowel_to_cons[vowel]) end -- The gender-neutral numerals: ṣáṣ; káti, táti and yáti; and páñca(n) and the like. function Analysis:numeral() self.accent = string.match(self.head, "(/?)[nz]?$") self.type = "numeral" if self:headMatches("a/?z$") then self:add("sas") self:category("numeral_s") elseif self:headMatches("ti$") then self:add("ti") self:category("numeral_i") else self:add("an_direct") -- The oblique endings take the head's own accent, wherever it falls. self:add("an_oblique", {accent = string.find(self.head, "/", 1, true) and "/" or ""}) self:category("numeral_an") end end -- The a-stems, masculine and neuter, including the pronominal declension. function Analysis:aStem() self.accent = string.match(self.head, "(" .. M.sa_utilities.accent .. "?)$") local pronominal = self.properties.pron self.type = pronominal and "pronominal_a" or "a" -- A stem-final s doesn't become ṣ (ṛbīsa, bisa). self.options.keep_stem_s = true if self.gender == "m" then self:add("masculine_direct") self:add(pronominal and "pronominal_masculine_plural" or "masculine_plural") else self:add("neuter_direct") end self:add(pronominal and "pronominal_oblique" or "nominal_oblique") self:add("oblique") -- The Vedic instrumental singular in -ā of the oxytone abstracts in -tva(na) (Lanman p.335f.). self:add(self:headMatches("tva?n?a/$") and "tva_instrumental" or "instrumental") -- The Vedic genitive/locative dual in -os after -y- (Wackernagel III p.98-99 §48a). self:add(self:baseMatches(".y$") and "genitive_dual_after_y" or "genitive_dual") self:category("a") end -- The i- and u-stems. function Analysis:shortIUStem() local vowel, accent = string.match(self.head, "([iu])(/?)$") self.accent = accent self.type = vowel self:vowelStems(vowel) if self:inLexicon("sakhi") then self:add("sakhi") elseif self.gender == "m" then if self:inLexicon("strong_masculine_i_u") then self:add("strong_masculine_singular") else self:add(self:inLexicon("vedic_instrumental_masculine") and "masculine_instrumental_vedic" or "masculine_instrumental") self:add("masculine_dative_ablative") end if vowel == "i" then -- Whitney §336f self:add("masculine_locative_i") elseif self:inLexicon("rigvedic_locative_u") then self:add("masculine_locative_u_rigvedic") else self:add("masculine_locative") end self:add("masculine_direct") elseif self.gender == "f" then self:add(vowel == "i" and "feminine_instrumental_locative_i" or "feminine_instrumental_locative_u") self:add("feminine") self:add("feminine_" .. vowel) else -- Adjectives and nouns differ in the neuter (Whitney §344). if self.adjective then self:add(self:inLexicon("strong_neuter_adjective_u") and "strong_neuter_adjective" or "neuter_adjective_dative_ablative") self:add(vowel == "i" and "neuter_adjective_locative_i" or "neuter_adjective_locative_u") self:add("neuter_adjective_genitive_dual") else self:add(self:inLexicon("strong_neuter_noun_u") and "strong_neuter_noun" or "neuter_noun_dative_ablative") self:add(vowel == "i" and "neuter_noun_locative_i" or "neuter_noun_locative_u") self:add("neuter_noun_genitive_dual") end self:add("neuter_direct") self:add(self:inLexicon("vedic_instrumental_neuter_u") and "madhu_instrumental" or "neuter_instrumental") end self:add("oblique") self:category(vowel) end -- The ā-stems, both derived (feminine) and root stems. function Analysis:longAStem() if self.gender == "n" then -- We don't build a neuter on the masculine nominatives in -ās that go with neuter nouns (Whitney §367b, -- Wackernagel III p.129). error("The neuter of radical stems in -ā ends in -a.", 0) end self.accent = string.match(self.head, "(" .. M.sa_utilities.accent .. "?)$") local pronominal, root = self.properties.pron, self.properties.root self.type = pronominal and "pronominal_long_a" or "long_a" local monosyllabic = self:monosyllabic() local masculine = self.links.masculine local derived = not (root or monosyllabic) or monosyllabic and (root == false or masculine ~= nil and string.match(masculine, "a/?$") ~= nil) if derived then if self.gender == "m" then error("Add <root> if this is a root noun or adjective.", 0) end self:category("long_a") self:add(pronominal and "pronominal_derived" or "derived") self:add("derived_direct") self:add(self:baseMatches(".y$") and "genitive_dual_after_y" or "genitive_dual") else self:category("root_long_a") if self.gender == "m" then self:generalNote("root_long_a_masculine") self:add("root_masculine") else -- The derived declension, except for the nominative singular (Macdonell p.249ff.). self:add("root_feminine") self:add(self:baseMatches(".y$") and "genitive_dual_after_y" or "genitive_dual") end end self:add("oblique") end -- The ī- and ū-stems: strī, the derived stems (the vṛkī-, devī- and ū-declensions) and the root stems. function Analysis:longIUStem() if self.gender == "n" then -- The Vedic forms that could come from a neuter ī-stem (Whitney §367b) are better given by hand. error("The neuter of radical stems in -ī/ū ends in -i/u.", 0) end local vowel, accent = string.match(self.head, "([IU])(/?)$") self.accent = accent self.type = vowel == "I" and "long_i" or "long_u" self:vowelStems(vowel) local properties, masculine = self.properties, self.links.masculine local monosyllabic = self:monosyllabic() local feminine = self.gender == "f" if self:inLexicon("stri") and not (masculine and string.match(masculine, "stf/?$")) then self.options.iy_uv_before_vowel = true self:add("stri") elseif not (properties.root or monosyllabic) or monosyllabic and properties.root == false or properties.han then if properties.vrki then -- The vṛkī́-declension (Whitney §355ff.), given as the older forms of the later declension. if vowel == "U" then error("The vṛkī́-declension (<vrki>) is a declension of ī-stems.", 0) end self:category("vrki") self:generalNote("vrki") if properties.contract == false then self.options.iy_uv_before_vowel = true end self:add("vrki") self:add(accent == "" and "vrki_instrumental_barytone" or "vrki_instrumental_oxytone") self:add(accent == "" and "vrki_genitive_dual_barytone" or "vrki_genitive_dual_oxytone") elseif vowel == "I" then self:category("long_i") self:add("devi") -- The Rigvedic genitive plural in -īnā́m (Whitney §319a). self:add(accent == "" and "devi_genitive_plural_barytone" or "devi_genitive_plural_oxytone") else -- Whitney §356a, given as the older forms of §364 (Wackernagel III p.189). if not self.adjective then self:category("long_u") elseif self.gender == "m" then self:category("long_u") elseif masculine and string.match(masculine, "u" .. M.sa_utilities.accent .. "?$") and not self:inLexicon("classical_long_u_feminine") then self:generalNote("vedic_long_u_feminine") end if self:baseMatches("y$") or self:inLexicon("vedic_uv") then -- With the Vedic -úv- (Macdonell p.290 §384a). self:add("vedic_uv") else self:add("u_derived") self:add(accent == "" and "u_instrumental_barytone" or "u_instrumental_oxytone") self:add(accent == "" and "u_genitive_dual_barytone" or "u_genitive_dual_oxytone") end self:add("u_nominative_genitive") end self:add("derived_oblique") self:add(vowel == "I" and "derived_vocative_i" or "derived_vocative_u") else self:category(vowel == "I" and "root_long_i" or "root_long_u") if monosyllabic then -- Root nouns (Whitney §351; Wackernagel III p.181). self.options.iy_uv_before_vowel = true self:add(feminine and "root_monosyllabic_feminine" or "root_monosyllabic") self:add("root_monosyllabic_oblique") else -- Compounds of root nouns (Whitney §352; Wackernagel III §91a p.179, §100a, §100eα p.192-193; Macdonell -- p.268, 288). These are uncontracted after two consonants, and the ū-stems also when accented, except in -- -sū/-ṣū. local utilities = M.sa_utilities local uncontracted = properties.contract == false or properties.contract ~= true and ( self:baseMatches(utilities.consonant .. utilities.consonant .. "$") or vowel == "U" and (self:headMatches(utilities.accent) and not self:baseMatches("[sz]$") or self:inLexicon("uncontracted_long_u_compound")) or vowel == "I" and (self:inLexicon("uncontracted_long_i_compound") or self:baseMatches("D$") and self:baseMatches(utilities.accent))) if uncontracted then -- -Ciy-/-Cuv- before a vowel. self.options.iy_uv_before_vowel = true self:add(feminine and "uncontracted_locative_feminine" or "uncontracted_locative") else self:add((accent ~= "" and "contracted_locative_oxytone" or "contracted_locative") .. (feminine and "_feminine" or "")) end self:add(feminine and "compound_feminine_dative_ablative" or "compound_dative_ablative") self:add("compound_oblique") end self:add("root_common") end end -- The ṛ-stems. function Analysis:vocalicRStem() local r = self.properties.r if self.gender == "f" and r == "A" and self:baseMatches("t$") and not self:baseMatches("^s?t$") then error("The feminine of adjectives in -tṛ ends in -trī.", 0) end self.accent = string.match(self.head, "(/?)$") self.type = "vocalic_r" self.stems.lengthened_unaccented = self.stems.base .. "F" if self.gender == "n" then self:add("neuter") else if not r then error("Give the vowel of the accusative singular with <r:a> or <r:ā>.", 0) end self:add("masculine_feminine") self:add(r == "a" and "strong_short_a" or "strong_long_a") self:add(self.gender == "f" and "feminine_accusative_plural" or "masculine_accusative_plural") end self:add("oblique") self:category("vocalic_r") end -- The consonantal root stems. These also cover the stems in -āt/-it/-ut/-ṛt, -akt and -ās/-os, and púṃs. function Analysis:rootStem() local utilities = M.sa_utilities local vowel, accent, extra, final = string.match(self.head, "(" .. utilities.vowel .. ")(" .. utilities.accent .. "?)([rM]?)([kgGcjwqtTdDpBmrzShs]t?)$") if string.match(final, "[jSh]") and not self.properties.final then error("Give the final consonant of the nominative singular with <final:k> or <final:ṭ>.", 0) end self.accent = accent self.type = "root" self.options.root_noun = true self.options.final_obstruent = self.properties.final self.options.diaspirate = self.properties.diaspirate or false local nasal = string.gsub(final, ".", utilities.homorganic_nasal) self.stems.neuter_plural = self.stems.base .. vowel .. accent .. nasal .. final self.stems.neuter_plural_unaccented = self.stems.base .. vowel .. nasal .. final if self.gender == "n" then -- The neuter nominative plural, with the nasal (Whitney §389c). self:add((string.match(final, "[mr]") == nil and extra == "") and "neuter_plural_nasal" or "neuter_plural") end if self:inLexicon("pums") then self:add("pums") elseif self:monosyllabic() and not (accent == "\\" or self.options.initial_svarita) then self:add(self.gender == "n" and "monosyllabic_neuter_direct" or "monosyllabic_direct") self:add("monosyllabic_oblique") self:add(final == "s" and "monosyllabic_locative_plural_s" or "monosyllabic_locative_plural") else if self.gender == "n" then self:add("polysyllabic_neuter_direct") else self:add("polysyllabic_direct") -- The Vedic masculine nominative singular of the adjectives in -dṛ́ś (Wackernagel III p.246). self:add((self.gender == "m" and self:inLexicon("vedic_nominative_drs")) and "drs_nominative" or "polysyllabic_nominative") end self:add("polysyllabic_oblique") self:add(final == "s" and "polysyllabic_locative_plural_s" or "polysyllabic_locative_plural") end self:category("root") end -- The as-, is- and us-stems, including the comparatives in -yas. function Analysis:sStem() local utilities = M.sa_utilities local vowel, accent = string.match(self.head, "([aiu])(" .. utilities.accent .. "?)s$") self.accent = accent self.type = vowel .. "s" local base = self.stems.base self.stems.neuter_plural = base .. utilities.lengthen[vowel] .. accent .. "Ms" self.stems.neuter_plural_unaccented = base .. utilities.lengthen[vowel] .. "Ms" local comparative = vowel == "a" and (self:baseMatches("[^aAiK/\\]" .. utilities.accent .. "?y$") or self:baseMatches("jyA/?y$")) if comparative and self.gender ~= "n" then if self.gender ~= "m" then error("The feminine of comparatives in -yas ends in -yasī.", 0) end self:add("comparative_masculine") elseif self.gender == "m" or self.gender == "f" then if vowel == "a" then self:add("as_direct") else self:add("is_us_direct") -- The Vedic vocative (Wackernagel III p.292 §152c). self:add(vowel == "i" and "is_vocative" or "us_vocative") end self:add("masculine_feminine_dual") else -- Compound adjectives in -as (Macdonell p.226; Whitney §418a). if self.adjective and vowel == "a" and not comparative and (self:baseMatches(utilities.vowel .. ".*" .. utilities.vowel) or self:baseMatches("^sv")) then self:add("compound_as_neuter_nominative") else self:add("neuter_nominative") end self:add("neuter_direct") end self:add("oblique") self:category(comparative and "comparative" or vowel .. "s") end -- The an-stems. function Analysis:anStem() local utilities = M.sa_utilities self.accent = string.match(self.head, "a(" .. utilities.accent .. "?)n$") self.type = "an" self.options.retroflex_stem_n = true local properties = self.properties local contract = properties.contract if not self:baseMatches(utilities.consonant .. "[NYRnmyrlv]$") then contract = true end if self.gender == "n" then -- Wackernagel III p.238 presupposes a neuter plural -hāni for -han. self:add("neuter_direct") self:add(properties.han and "han_neuter_nominative" or "neuter_nominative") self:add(contract and "contracted_neuter_dual" or "neuter_dual") else self:add("masculine_nominative_vocative") if properties.han or self:inLexicon("short_strong_an") then self:add("short_strong") self:add(properties.han and "han_accusative_plural" or "short_strong_accusative_plural") else -- Whitney §426b; Wackernagel III p.267. self:add(self:inLexicon("optional_short_strong_an") and "optional_short_strong" or "strong") self:add(contract and "contracted_accusative_plural" or "uncontracted_accusative_plural") end end -- The Vedic locative singular without -i (Whitney §425c). self:add(contract and "contracted_oblique" or "uncontracted_oblique") self:add("oblique") self:category("an") end -- The in-stems. function Analysis:inStem() self.accent = string.match(self.head, "i(" .. M.sa_utilities.accent .. "?)n$") self.type = "in" self.options.retroflex_stem_n = true self:add(self.gender == "n" and "neuter_direct" or "masculine_direct") self:add("oblique") self:category("in") end -- The at-stems: the participles in -at (and -āt), and the stems in -vat/-mat. function Analysis:atStem() local consonant, vowel, accent = string.match(self.head, "([mv]?)([aA])(" .. M.sa_utilities.accent .. "?)t$") self.accent = accent local properties = self.properties local long = vowel == "A" and "long_a" or "short_a" if self:headMatches("[vm]a/?t$") and not properties.participle then self.type = consonant .. "at" self:add(self.gender == "n" and "vat_neuter" or "vat_masculine") self:add("vat_oblique") self:category(consonant .. "at") return end self.type = "at" if properties.nonasal then -- Participles like júhvat, with no nasal in the strong stem. self:add(self.gender == "n" and "nonasal_neuter" or "nonasal_masculine") self:add("nonasal_oblique") else if self.gender ~= "n" then self:add("participle_masculine_" .. long) else -- The neuter nominative dual is the feminine stem (Whitney §443a, though this may be artificial: §447b). local feminines = properties.feminine or self.links.feminine if not feminines or not feminines[1] then error("Give the nominative dual (the feminine stem) with <feminine:...>.", 0) end self.stems.feminine = feminines[1] self.stems.second_feminine = feminines[2] self:add(feminines[2] and "neuter_dual_two_feminines" or "neuter_dual_feminine") -- The Rigvedic neuter plural in -ānti (Wackernagel III p.262). self:add("participle_neuter_plural_" .. long) self:add("participle_neuter_singular") self:add("participle_neuter_singular_" .. long) end self:add("participle_oblique_" .. long) end self:add("oblique") self:add("oblique_" .. long) self:category("at") end -- The añc-stems, which have a strong stem (the head), a middle stem in -ac- and a weakest stem. function Analysis:ancStem() local consonant, vowel, accent = string.match(self.head, "([yv]?)([aA])(" .. M.sa_utilities.accent .. "?)Yc$") self.accent = accent self.type = "anc" local middle = string.gsub(self.stems.base, "Yc$", "c") self.stems.base = middle self:add(self.gender == "m" and "masculine_direct" or "neuter_direct") self:add("middle_oblique") local weakest if vowel == "A" then weakest = middle elseif self:inLexicon("tiryanc") then weakest = string.gsub(middle, "ya(/?)c$", "a%1Sc") elseif consonant ~= "" then weakest = string.gsub(middle, "([yv])a([/\\]?)c$", function(semivowel, stem_accent) return (semivowel == "y" and "I" or "U") .. (stem_accent == "" and "" or "/") .. "c" end) elseif self:inLexicon("ud_anc") then weakest = string.gsub(middle, "ac$", "Ic") else error("This añc-stem is not supported.", 0) end self.stems.weakest = weakest if vowel == "A" or accent ~= "/" then self:add(self.gender == "m" and "masculine_accusative_plural" or "neuter_dual") self:add("weakest_oblique") else -- Oxytones have both accentuations (Whitney §410). self:add(self.gender == "m" and "oxytone_masculine_accusative_plural" or "oxytone_neuter_dual") self:add("oxytone_weakest_oblique") end self:add("copies") self:category("anc") end -- The o-stem gó, the au-stem nau and the ai-stem rái, and their compounds. function Analysis:diphthongStem(vowel, type) self.accent = string.match(self.head, vowel .. "(" .. M.sa_utilities.accent .. "?)$") self.type = type self:add("all") self:category(type) end -- The vāṃs-stems, i.e. the perfect participles. function Analysis:vamsStem() local utilities = M.sa_utilities self.accent = string.match(self.head, "vA(" .. utilities.accent .. "?)Ms$") self.type = "vams" local base = self.stems.base local weak if self:inLexicon("vams_glide") or self:baseMatches("u$") then weak = base .. "v" elseif self:baseMatches("U$") then weak = string.gsub(base, "U$", "uv") elseif self:inLexicon("vams_keep_i") then weak = base elseif self:baseMatches("[aAIuUfFxeEoO]" .. utilities.accent .. "?M?" .. utilities.consonant .. "+i$") or self:inLexicon("vams_drop_i") then -- The i of śiśrivā́ṃs and the like belongs to the root. weak = string.gsub(base, "i$", "") elseif self.properties.retroflex_l then weak = string.gsub(string.gsub(base, "q$", "L"), "Q$", "Lh") else weak = base end self.stems.weak = weak self:add(self.gender == "m" and "masculine_direct" or "neuter_direct") self:add("oblique") self:category("vams") end -- The personal pronouns. Their forms are whole forms on an empty stem, and the head (ahám or tvám) says which person. function Analysis:personal() local first = self:headMatches("^a") self.type = first and "first_person" or "second_person" self.stems.base = "" self:add(first and "first" or "second") end local CLASS_METHODS = { numeral = Analysis.numeral, a = Analysis.aStem, short_iu = Analysis.shortIUStem, long_a = Analysis.longAStem, long_iu = Analysis.longIUStem, vocalic_r = Analysis.vocalicRStem, root = Analysis.rootStem, s = Analysis.sStem, an = Analysis.anStem, ["in"] = Analysis.inStem, at = Analysis.atStem, anc = Analysis.ancStem, o = function(analysis) analysis:diphthongStem("o", "o") end, au = function(analysis) analysis:diphthongStem("O", "au") end, ai = function(analysis) analysis:diphthongStem("E", "ai") end, vams = Analysis.vamsStem, personal = Analysis.personal, } ------------------------------------------------------------------------------------------------------------------------ -- Generation -- ------------------------------------------------------------------------------------------------------------------------ --[==[ Generate the forms of form groups, slot by slot. Each form is `{slp1 = ..., note = KEY, stem = ..., ending = ..., options = {...}, position = N}`, i.e. the joined form, its note, the inputs to `join` and the position of the ending within its cell. With `novedic`, the Vedic endings are left out, and the remaining endings keep their positions. A cell that copies another (`"[nom]"`) is filled in once every group has run. ]==] local FormGenerator = {} FormGenerator.__index = FormGenerator local ENDING_FLAGS = {"iy_uv_before_vowel", "keep_s_before_voiceless", "strip_stem_accent"} function FormGenerator.new(novedic) return setmetatable({novedic = novedic}, FormGenerator) end function FormGenerator:form(group, ending, case, position) local text, note, stem_key = ending, nil, nil if type(ending) == "table" then text, note, stem_key = ending[1], ending.note, ending.stem end if self.novedic and note and M.data.notes[note].vedic then return nil end local stem if string.sub(text, 1, 1) == "+" then text = string.sub(text, 2) stem = group.head elseif stem_key then stem = group.stems[stem_key] or error(("Internal error: no stem '%s' in %s.%s"):format(stem_key, group.class, group.set)) else stem = group.stems.base end text = string.gsub(text, "@", group.accent) local options = {} for key, value in pairs(group.options) do options[key] = value end if type(ending) == "table" then for _, flag in ipairs(ENDING_FLAGS) do if ending[flag] then options[flag] = true end end end options.recessive_accent = case == "voc" return {slp1 = M.sa_utilities.join(stem, text, options), note = note, stem = stem, ending = text, options = options, position = position} end --[==[ Generate the forms of `groups`. Return `cells` (slot -> list of forms) and `copies` (slot -> the slot it copies). Each slot is filled by one group only. ]==] function FormGenerator:generate(groups) local cells, copies = {}, {} for _, group in ipairs(groups) do for number, cases in pairs(M.data.endings[group.class][group.set]) do for case, cell in pairs(cases) do local slot = case .. "_" .. number if cells[slot] or copies[slot] then error(("Internal error: the slot %s is filled twice (%s.%s)"):format(slot, group.class, group.set)) end local copied = type(cell) == "string" and string.match(cell, "^%[(.*)%]$") if copied then copies[slot] = copied .. "_" .. number else local forms = {} if type(cell) == "string" then cell = {cell} end for position, ending in ipairs(cell) do local form = self:form(group, ending, case, position) if form then table.insert(forms, form) end end cells[slot] = forms end end end end -- Follow copies of copies back to the cell they come from. for slot in pairs(copies) do local source, seen = copies[slot], {[slot] = true} while copies[source] do if seen[source] then error("Internal error: the copies of " .. slot .. " go round in a circle") end seen[source] = true source = copies[source] end if not cells[source] then error(("Internal error: the slot %s copies %s, which is empty"):format(slot, source)) end copies[slot] = source end return cells, copies end ------------------------------------------------------------------------------------------------------------------------ -- Declension -- ------------------------------------------------------------------------------------------------------------------------ -- Return the cases of a table of class `class`: those listed in its entry in `data.classes`, or else every case except -- the enclitic ones. local function cases_of(class) local codes for _, entry in ipairs(M.data.classes) do if entry.id == class then codes = entry.cases end end local cases = {} for _, case in ipairs(M.data.cases) do local listed = not codes and not case.enclitic for _, code in ipairs(codes or {}) do listed = listed or code == case.code end if listed then table.insert(cases, case) end end return cases end -- Return the description of a table of gender `gender` and type `type` that titles and error messages use, e.g. -- "masculine a-stem" or "first-person pronoun". A manual table gives just its gender ("neuter"), or the empty string -- if it has none. local function table_kind(gender, type) local words = {} local entry = gender and M.data.genders[gender] if entry and entry.in_title ~= false then table.insert(words, entry.name:lower()) end if type then table.insert(words, M.data.types[type]) end return table.concat(words, " ") end --[==[ One table. It holds the `head` (in SLP1), the `gender`, the stem `class` and `type`, the `numbers` and `cases` shown and the forms of every slot: `slots[slot]` is a list of `{slp1 = ..., notes = {text...}}`, empty if the slot has no form. It also keeps the form `groups` it was declined with, the generated forms in `generated` and the slots that copy another in `copies`, as well as its `categories` and `general_notes` (keys into `data`) and the `user_notes` given in the call. ]==] local Declension = {} Declension.__index = Declension function Declension.new(analysis, cells, copies, numbers) local declension = setmetatable({ head = analysis.head, gender = analysis.gender, adjective = analysis.adjective, class = analysis.class, type = analysis.type, numbers = numbers, cases = cases_of(analysis.class), groups = analysis.groups, generated = cells, copies = copies, slots = {}, overridden = {}, categories = analysis.categories, general_notes = analysis.general_notes, user_notes = {}, }, Declension) for _, case in ipairs(declension.cases) do for _, number in ipairs(M.data.numbers) do local slot = case.code .. "_" .. number.code if numbers[number.code] and not cells[copies[slot] or slot] then error(("Internal error: no forms for the slot %s (%s)"):format(slot, analysis.class)) end local forms = {} for _, form in ipairs(cells[copies[slot] or slot] or {}) do table.insert(forms, {slp1 = form.slp1, notes = form.note and {M.data.notes[form.note].text} or {}}) end declension.slots[slot] = forms end end return declension end --[==[ Make a manual table (`<manual>`), which has no stem class and no generated forms: every slot starts out empty and is filled by the cell parameters. `gender` can be {nil}. ]==] function Declension.manual(head, gender, numbers) local cells = {} for _, case in ipairs(M.data.cases) do for _, number in ipairs(M.data.numbers) do cells[case.code .. "_" .. number.code] = {} end end return Declension.new({head = head, gender = gender, adjective = false, class = "manual", groups = {}, categories = {}, general_notes = {}}, cells, {}, numbers) end --[==[ Replace the forms of `slot` with `forms` from `Overrides`. These are written in IAST or in the display script, and read with `bridge`; a form of `-` means no form. ]==] function Declension:override(slot, forms, bridge) if not self.slots[slot] then error(("'%s' is not a cell of this table"):format(slot), 0) end local replaced = {} for _, form in ipairs(forms) do if form.written ~= "-" then table.insert(replaced, {slp1 = bridge:toSlp1(form.written), notes = form.footnotes, override = true}) end end self.slots[slot] = replaced self.overridden[slot] = true end --[==[ Return the names of the table's categories. `kind` is `noun` ({{tl|sa-ndecl}}), `adjective` (the masculine table of an adjective) or `numeral`. An adjective's other tables have no categories. ]==] function Declension:categoryNames(kind) local names = {} if kind then for _, key in ipairs(self.categories) do table.insert(names, M.data.categories[key][kind]) end end return names end -- Return the texts of the table's general notes. function Declension:generalNoteTexts() local texts = {} for _, key in ipairs(self.general_notes) do table.insert(texts, M.data.general_notes[key]) end return texts end --[==[ Return the data of the table for bots (`json=1`). This has the head, the gender, the stem class and type, the numbers shown, and for each slot its forms in SLP1, in the display script and in IAST, with their notes. It also has the user's notes, the general notes, the categories of `kind` (see `categoryNames`) and whether `nocat` was given. ]==] function Declension:toJson(bridge, kind, nocat) local slots = {} for slot, forms in pairs(self.slots) do local list = {} for _, form in ipairs(forms) do table.insert(list, { slp1 = form.slp1, form = bridge:toNative(form.slp1), translit = bridge:toIast(form.slp1), notes = form.notes, override = form.override, }) end slots[slot] = list end local numbers = {} for _, number in ipairs(M.data.numbers) do if self.numbers[number.code] then table.insert(numbers, number.code) end end return { head = self.head, gender = self.gender, class = self.class, type = M.data.types[self.type], numbers = numbers, slots = slots, user_notes = self.user_notes, general_notes = self:generalNoteTexts(), categories = self:categoryNames(kind), nocat = nocat or false, } end ------------------------------------------------------------------------------------------------------------------------ -- The table -- ------------------------------------------------------------------------------------------------------------------------ --[==[ Render a `Declension` as a table with [[Module:inflection-table]]. There is a column for each number shown and a row for each case, and each row is marked with `data-case` so that scripts can reorder the cases. The cells come from [[Module:inflection utilities]]' `show_forms`, which gives each form in the display script, linked with an accelerator for `lemma`, with its IAST below. The notes go under the table. `kind` says which categories to add (see `Declension:categoryNames`); with {nil}, none are added. ]==] local TableRenderer = {} TableRenderer.__index = TableRenderer function TableRenderer.new(declension, bridge, lemma, kind) return setmetatable({declension = declension, bridge = bridge, lemma = lemma, kind = kind}, TableRenderer) end -- Return the numbers shown, in order. function TableRenderer:numbers() local numbers = {} for _, number in ipairs(M.data.numbers) do if self.declension.numbers[number.code] then table.insert(numbers, number) end end return numbers end -- Return the accelerator tags of a slot: the case, then the gender for an adjective's table, then the number. function TableRenderer:accel(case, number) local declension = self.declension local tags = {case.accel} if declension.adjective then table.insert(tags, M.data.genders[declension.gender].accel) end table.insert(tags, number.accel) return table.concat(tags, "|") end -- Return the forms of every slot shown, as linked text (an em dash for none), and the footnotes, numbered case by -- case. function TableRenderer:cells() local declension, bridge = self.declension, self.bridge local formtable, slot_list = {}, {} for _, case in ipairs(declension.cases) do for _, number in ipairs(self:numbers()) do local slot = case.code .. "_" .. number.code local forms = declension.slots[slot] if forms[1] then local list = {} for _, form in ipairs(forms) do local footnotes if form.notes[1] then footnotes = {} for _, note in ipairs(form.notes) do table.insert(footnotes, "[" .. note .. "]") end end table.insert(list, {form = bridge:toNative(form.slp1), translit = bridge:toIast(form.slp1), footnotes = footnotes}) end formtable[slot] = list end table.insert(slot_list, {slot, self:accel(case, number)}) end end M.inflection_utilities.show_forms(formtable, { lang = M.lang, lemmas = {self.lemma}, slot_list = slot_list, include_translit = true, }) return formtable, formtable.footnote end -- "Masculine a-stem declension of देव" function TableRenderer:title() local declension, bridge = self.declension, self.bridge local head = M.links.full_link({lang = M.lang, sc = bridge.script, alt = bridge:toNative(declension.head), tr = "-"}) local kind = table_kind(declension.type, declension.gender) if kind == "" then return "Biến cách của " .. head end return mw.ustring.upper("Biến cách " .. mw.ustring.sub(kind, 1, 1)) .. mw.ustring.sub(kind, 2) .. " của " .. head end function TableRenderer:render() local declension = self.declension local cells, footnotes = self:cells() local lines = {M.inflection_table.make_top{ title = self:title(), palette = "blue", tall = "yes", lang = "sa", class = "sticky-left-column", }} -- make_top has already opened the first row. table.insert(lines, '! class="outer" |') for _, number in ipairs(self:numbers()) do table.insert(lines, '! class="outer" | ' .. number.name) end for _, case in ipairs(declension.cases) do table.insert(lines, ('|- data-case="%s"'):format(case.code)) table.insert(lines, "! " .. case.name) for _, number in ipairs(self:numbers()) do table.insert(lines, "| " .. cells[case.code .. "_" .. number.code]) end end local notes = {} if footnotes ~= "" then table.insert(notes, footnotes) end for _, note in ipairs(declension.user_notes) do table.insert(notes, note) end for _, note in ipairs(declension:generalNoteTexts()) do table.insert(notes, note) end table.insert(lines, M.inflection_table.make_bottom{notes = table.concat(notes, "<br />")}) local categories = declension:categoryNames(self.kind) if categories[1] then table.insert(lines, M.utilities.format_categories(categories, M.lang)) end return table.concat(lines, "\n") end ------------------------------------------------------------------------------------------------------------------------ -- The call -- ------------------------------------------------------------------------------------------------------------------------ local ALL_NUMBERS = {s = true, d = true, p = true} --[==[ Decline one table without a frame. `input` has the following fields: * `head`: the head, in SLP1; * `gender`: `m`, `f`, `n` or `num` (the numerals); * `adjective`: true if the table is one of an adjective's tables; * `properties`: what the indicators set, in SLP1: `root` (true, false for `nonroot`, or nil), `vrki`, `pron`, `novedic`, `r` (`a` or `A`), `final` (`k`, `w` or `t`), `diaspirate`, `participle`, `nonasal`, `contract` (true, false for `nocontract`, or nil), `han`, `svarita`, `retroflex_l`, `feminine` (a list of stems) and `numbers` (a set of s/d/p); * `links`: the other heads of an adjective that the table looks at, i.e. `masculine` (for a feminine table) and `feminine` (a list, for the neuter table). Return the Declension. ]==] function export.decline_table(input) local properties = input.properties or {} local class, base = Head.new(input.head):detectClass(input.gender, properties) if not class then error("No declension class could be detected. Please check the head or specify the declension.", 0) end local analysis = Analysis.new{head = input.head, base = base, gender = input.gender, adjective = input.adjective, properties = properties, links = input.links, class = class} CLASS_METHODS[class](analysis) local cells, copies = FormGenerator.new(properties.novedic):generate(analysis.groups) local numbers = input.gender == "num" and {p = true} or properties.numbers or ALL_NUMBERS return Declension.new(analysis, cells, copies, numbers) end -- Return true if a table of class `class` and gender `gender` uses the indicator defined by `definition`. local function uses(definition, class, gender) return (definition.classes == nil or definition.classes[class] == true) and (definition.genders == nil or definition.genders[gender] == true) end -- Return the cell parameters of a table from `args`, by slot. Each parameter is the slot preceded by `prefix` (`m_`, -- `f2_`, etc.). local function cell_values(args, prefix) local values = {} for _, case in ipairs(M.data.cases) do for _, number in ipairs(M.data.numbers) do local slot = case.code .. "_" .. number.code values[slot] = args[prefix .. slot] end end return values end local function cell_parameters(params, prefix) for _, case in ipairs(M.data.cases) do for _, number in ipairs(M.data.numbers) do params[prefix .. case.code .. "_" .. number.code] = {} end end end --[==[ Implement {{tl|sa-ndecl}} without a frame, for other modules and for testing. `args` are the template's arguments and `pagename` is the page's title. Return the Declension, its ScriptBridge and the processed args. ]==] function export.decline_noun(args, pagename) local params = { [1] = {}, note = {list = true}, nocat = {type = "boolean"}, json = {type = "boolean"}, } cell_parameters(params, "") args = M.parameters.process(args, params) local spec = Spec.parse(args[1] or "", "noun") local head = spec.head ~= "" and spec.head or pagename local bridge = ScriptBridge.new(head, pagename) local gender for name, definition in pairs(M.data.indicators.noun) do if definition.group == "gender" and spec.indicators[name] then gender = name end end local properties = spec:properties(bridge) local declension if spec.indicators.manual then for name, definition in pairs(M.data.indicators.noun) do if spec.indicators[name] and name ~= "manual" and definition.group ~= "gender" and definition.group ~= "numbers" then error(("The indicator '%s' does not apply to a manual table"):format(name), 0) end end declension = Declension.manual(bridge:toSlp1(head), gender, gender == "num" and {p = true} or properties.numbers or ALL_NUMBERS) else declension = export.decline_table{head = bridge:toSlp1(head), gender = gender, properties = properties} for name in pairs(spec.indicators) do local definition = M.data.indicators.noun[name] if definition.group ~= "gender" and not uses(definition, declension.class, gender) then error(("The indicator '%s' does not apply to a %s"):format(name, table_kind(gender, declension.type)), 0) end end end for slot, forms in pairs(Overrides.parse(cell_values(args, "")).slots) do declension:override(slot, forms, bridge) end declension.user_notes = args.note return declension, bridge, args end --[==[ The tables of an adjective, each a Declension, in this order: the masculine, a feminine for each head of `f:` (by default the masculine head), and the neuter (the head of `n:`, by default the masculine head). ]==] local AdjectiveDeclension = {} AdjectiveDeclension.__index = AdjectiveDeclension --[==[ Implement {{tl|sa-adecl}} without a frame, for other modules and for testing. `args` are the template's arguments and `pagename` is the page's title. Return the AdjectiveDeclension, its ScriptBridge and the processed args. ]==] function export.decline_adjective(args, pagename) local params = { [1] = {}, nocat = {type = "boolean"}, json = {type = "boolean"}, } local spec = Spec.parse(args[1] or "", "adjective") local feminine_specs = spec.indicators.f or {Spec.parse("", "adjective", true)} local prefixes = {"m_", "n_"} for position = 1, #feminine_specs do table.insert(prefixes, position == 1 and "f_" or "f" .. position .. "_") end for _, prefix in ipairs(prefixes) do cell_parameters(params, prefix) params[prefix .. "note"] = {list = true} end args = M.parameters.process(args, params) local masculine_head = spec.head ~= "" and spec.head or pagename local bridge = ScriptBridge.new(masculine_head, pagename) local shared = spec:properties(bridge) local masculine_slp1 = bridge:toSlp1(masculine_head) -- One entry per table, with its head (and any spec of its own), gender, cell prefix and links. local tables = {{spec = nil, slp1 = masculine_slp1, gender = "m", prefix = "m_"}} local feminine_stems = {} for position, feminine_spec in ipairs(feminine_specs) do local slp1 = feminine_spec.head ~= "" and bridge:toSlp1(feminine_spec.head) or masculine_slp1 table.insert(feminine_stems, slp1) table.insert(tables, {spec = feminine_spec, slp1 = slp1, gender = "f", prefix = position == 1 and "f_" or "f" .. position .. "_", links = {masculine = masculine_slp1}}) end local neuter_spec = spec.indicators.n table.insert(tables, {spec = neuter_spec, slp1 = neuter_spec and neuter_spec.head ~= "" and bridge:toSlp1(neuter_spec.head) or masculine_slp1, gender = "n", prefix = "n_", links = {feminine = {feminine_stems[1], feminine_stems[2]}}}) local adjective = setmetatable({tables = {}}, AdjectiveDeclension) local used = {} for _, item in ipairs(tables) do local properties = item.spec and item.spec:properties(bridge, shared) or shared local declension = export.decline_table{head = item.slp1, gender = item.gender, adjective = true, properties = properties, links = item.links} for name, definition in pairs(M.data.indicators.adjective) do if spec.indicators[name] and definition.value ~= "spec" and uses(definition, declension.class, item.gender) then used[name] = true end end for name in pairs(item.spec and item.spec.indicators or {}) do if not uses(M.data.indicators.adjective[name], declension.class, item.gender) then error(("The indicator '%s' does not apply to the %s"):format(name, table_kind(item.gender, declension.type)), 0) end end for slot, forms in pairs(Overrides.parse(cell_values(args, item.prefix)).slots) do declension:override(slot, forms, bridge) end declension.user_notes = args[item.prefix .. "note"] table.insert(adjective.tables, declension) end for name, definition in pairs(M.data.indicators.adjective) do if spec.indicators[name] and definition.value ~= "spec" and not used[name] then error(("The indicator '%s' applies to none of the tables"):format(name), 0) end end return adjective, bridge, args end -- Return the kind of categories a noun table adds (see `Declension:categoryNames`). local function noun_kind(declension) return declension.class == "numeral" and "numeral" or "noun" end --[==[Entry point of {{tl|sa-ndecl}}. Return the table, or with {{para|json|1}}, its data as JSON.]==] function export.noun(frame) local pagename = M.headword_data.pagename local declension, bridge, args = export.decline_noun(frame:getParent().args, pagename) local kind = noun_kind(declension) if args.json then return M.JSON.toJSON(declension:toJson(bridge, kind, args.nocat)) end return TableRenderer.new(declension, bridge, pagename, not args.nocat and kind or nil):render() end --[==[ Entry point of {{tl|sa-adecl}}. Return the tables one above the other in an untitled inflection box (`make_box` of [[Module:inflection-table]], as {{tl|inflection-box-top}} makes), or with {{para|json|1}}, their data as JSON (`{tables = {...}}`). Only the masculine table adds categories. ]==] function export.adjective(frame) local pagename = M.headword_data.pagename local adjective, bridge, args = export.decline_adjective(frame:getParent().args, pagename) if args.json then local tables = {} for position, declension in ipairs(adjective.tables) do table.insert(tables, declension:toJson(bridge, position == 1 and "adjective" or nil, args.nocat)) end return M.JSON.toJSON({tables = tables}) end local rendered = {} for position, declension in ipairs(adjective.tables) do local kind = position == 1 and not args.nocat and "adjective" or nil table.insert(rendered, TableRenderer.new(declension, bridge, pagename, kind):render()) end return M.inflection_table.make_box({title = "-", flow = "vertical"}, "\n" .. table.concat(rendered, "\n") .. "\n") end return export 6ojabdwom4xxa8e294guge4idcbemw2 2571616 2571615 2026-10-18T12:31:06Z Hiyuune 50834 2571616 Scribunto text/plain --[==[ This module implements the declension tables of Sanskrit nouns and numerals ({{tl|sa-ndecl}}) and of adjectives ({{tl|sa-adecl}}). Authorship: originally written by [[User:Dragonoid76]] and [[User:Benwing2]], with the declension rules of [[User:Exarchus]]; rewritten by [[User:Fenakhay]] in October 2026. TERMINOLOGY: * "head" = The form given in the call: the nominative singular, or the stem for consonant stems. It is followed by an inline spec of indicators, e.g. `{{sa-ndecl|devá<m>}}` or `{{sa-adecl|kṛṣṇá<f:kṛṣṇā́.novedic>}}`. * "stem class" = One way of declining, e.g. the a-stems, the i- and u-stems or the root stems. The classes in [[Module:sa-decl/data]] are tried on the head in order, and the first one that takes it gives the "stem" (the head minus its ending). The class's other stems are made from that one; see `Analysis:vowelStems`. * "slot" = A particular combination of case and number, e.g. `nom_s` or `loc_p`. Each slot is one cell of a table. * "form group" = One set of endings from [[Module:sa-decl/data]], together with the stems, accent and sandhi options in force when it was added. A table is made of the forms of its groups, each joined with `join` in [[Module:sa-utilities]]. Everything is worked out in SLP1, and shown in the script of the head (or of the page name) with the IAST below. The classes, by area: * The call: `Spec` (the inline spec of a head), `Overrides` (the cell parameters) and `ScriptBridge` (conversion between the input script and SLP1). * The analysis: `Head` (finds the stem class of a head), `Analysis` (the decisions of one stem class, with one method per class that adds `FormGroup`s) and `FormGenerator` (makes the forms of a group). * The result: `Declension` (one table, with the forms of every slot, its notes and its categories), `AdjectiveDeclension` (the tables of an adjective) and `TableRenderer`. Other modules used: [[Module:sa-decl/data]] (the endings and every other table, loaded with mw.loadData), [[Module:sa-utilities]] (sandhi), [[Module:inflection-table]] (the frame of each table, and the box around an adjective's tables) and [[Module:inflection utilities]] (the links, transliteration, accelerators and footnotes in the cells). ]==] local export = {} local M = require("Module:module loader").init { require = { inflection_table = "Module:inflection-table", inflection_utilities = "Module:inflection utilities", JSON = "Module:JSON", links = "Module:links", parameters = "Module:parameters", parse_utilities = "Module:parse utilities", sa_utilities = "Module:sa-utilities", scripts = "Module:scripts", utilities = "Module:utilities", }, loadData = { data = "Module:sa-decl/data", headword_data = "Module:headword/data", }, lazy = { lang = function() return require("Module:languages").getByCode("sa") end, }, } ------------------------------------------------------------------------------------------------------------------------ -- Script -- ------------------------------------------------------------------------------------------------------------------------ --[==[ Convert the call's input to SLP1, and SLP1 to the display script and to IAST. The display script is the script of the head. If the head is in IAST (i.e. Latin), it is the script of the page name instead, and failing that, Devanagari. Latin input is read as IAST; anything else goes through the display script's converter. ]==] local ScriptBridge = {} ScriptBridge.__index = ScriptBridge function ScriptBridge.new(head, pagename) local script = M.lang:findBestScript(head) if script:getCode() == "None" then script = M.lang:findBestScript(pagename) end if script:getCode() == "None" then script = M.scripts.getByCode("Deva") end local code = script:getCode() return setmetatable({ script = script, code = code, from_native = require("Module:sa-utilities/translit/" .. code .. "-to-SLP1").tr, to_native = require("Module:sa-utilities/translit/SLP1-to-" .. code).tr, from_iast = require("Module:sa-utilities/translit/IAST-to-SLP1").tr, to_iast = require("Module:sa-utilities/translit/SLP1-to-IAST").tr, }, ScriptBridge) end function ScriptBridge:toSlp1(text) if M.lang:findBestScript(text):getCode() == "None" then return self.from_iast(text) end return self.from_native(text) end -- Only Devanagari shows the accents, so strip them for any other script. function ScriptBridge:toNative(slp1) if self.code ~= "Deva" then slp1 = string.gsub(slp1, M.sa_utilities.accent, "") end return self.to_native(slp1) end function ScriptBridge:toIast(slp1) return self.to_iast(slp1) end ------------------------------------------------------------------------------------------------------------------------ -- Spec -- ------------------------------------------------------------------------------------------------------------------------ --[==[ The inline spec of a head, `HEAD<NAME.NAME:VALUE...>`. `Spec.parse` parses it and checks it against the indicators of `template` (`noun` or `adjective`, as keyed in `data.indicators`). The result has `head`, as written (empty means the page name), and `indicators`, keyed by name. An indicator's value is a list for a list indicator, a Spec for a spec value, and {true} for a flag. A spec value (the feminine and neuter heads of {{tl|sa-adecl}}) is itself a head with a spec of its own. It is parsed with `nested` set, and then only takes the indicators that apply to a single stem. ]==] local Spec = {} Spec.__index = Spec local function spec_error(message, text) error(message .. " in the spec '" .. text .. "'.", 0) end -- Split `text` at `separator` (a Lua pattern), except inside angle brackets. local function split_outside_brackets(text, separator) local parts = {} local segments = M.parse_utilities.parse_balanced_segment_run(text, "<", ">") for _, group in ipairs(M.parse_utilities.split_alternating_runs(segments, separator)) do table.insert(parts, table.concat(group)) end return parts end function Spec.parse(text, template, nested) text = mw.text.trim(text) local spec = setmetatable({head = text, indicators = {}}, Spec) local registry = M.data.indicators[template] local segments = M.parse_utilities.parse_balanced_segment_run(text, "<", ">") if #segments > 3 or segments[#segments] ~= "" and #segments > 1 then spec_error("Only one <...> may follow the head", text) end spec.head = mw.text.trim(segments[1]) if string.find(spec.head, ",", 1, true) then spec_error("The head is one form", text) end local needs_gender = template == "noun" and not nested if #segments == 1 then if needs_gender then spec_error("Give the gender: <m>, <f>, <n>, <num> or <pers>", text) end return spec end local inside = string.match(segments[2], "^<(.*)>$") local groups = {} for _, indicator in ipairs(split_outside_brackets(inside, "%.")) do local name, value = string.match(indicator, "^%s*([^:<]-)%s*:%s*(.-)%s*$") if not name then name = mw.text.trim(indicator) end local definition = registry[name] if definition and definition.alias then name = definition.alias definition = registry[name] end if not definition or nested and (definition.value == "spec" or definition.group == "gender") then local names = {} for known, known_definition in pairs(registry) do if not nested or known_definition.value ~= "spec" and known_definition.group ~= "gender" then table.insert(names, known) end end table.sort(names) spec_error(("Unrecognized indicator '%s'; the indicators are %s"):format(name, table.concat(names, ", ")), text) end if spec.indicators[name] ~= nil then spec_error(("The indicator '%s' is given twice"):format(name), text) end if definition.group and definition.group ~= "numbers" then if groups[definition.group] then spec_error(("The indicators '%s' and '%s' exclude each other"):format(groups[definition.group], name), text) end groups[definition.group] = name end if definition.value and (value == nil or value == "") then spec_error(("The indicator '%s' needs a value ('%s:...')"):format(name, name), text) elseif not definition.value and value ~= nil then spec_error(("The indicator '%s' takes no value"):format(name), text) end if definition.value == nil then value = true elseif definition.value == "spec" then if definition.list then local specs = {} for _, item in ipairs(split_outside_brackets(value, "%s*,%s*")) do table.insert(specs, Spec.parse(item, template, true)) end value = specs else value = Spec.parse(value, template, true) end elseif definition.list then local values = mw.text.split(value, "%s*,%s*") for _, item in ipairs(values) do if definition.values and not definition.values[item] then spec_error(("'%s' is not a value of '%s'"):format(item, name), text) end end value = values elseif definition.values and not definition.values[value] then local values = {} for known in pairs(definition.values) do table.insert(values, known) end table.sort(values) spec_error(("'%s' is not a value of '%s'; the values are %s"):format(value, name, table.concat(values, ", ")), text) end spec.indicators[name] = value end -- A manual table can do without a gender. if needs_gender and not groups.gender and not spec.indicators.manual then spec_error("Give the gender: <m>, <f>, <n>, <num> or <pers>", text) end return spec end --[==[ Return the stem properties set by the indicators of `spec`, with SLP1 values (see `export.decline_table`), on top of `inherited`. When `spec` belongs to one of an adjective's heads, `inherited` holds the adjective's shared properties. ]==] function Spec:properties(bridge, inherited) local properties = {} for key, value in pairs(inherited or {}) do properties[key] = value end local indicators = self.indicators if indicators.root then properties.root = true elseif indicators.nonroot then properties.root = false end if indicators.contract then properties.contract = true elseif indicators.nocontract then properties.contract = false end for name, property in pairs({vrki = "vrki", pron = "pron", novedic = "novedic", diaspirate = "diaspirate", participle = "participle", nonasal = "nonasal", han = "han", svarita = "svarita", ["ḷ"] = "retroflex_l"}) do if indicators[name] then properties[property] = true end end if indicators.r then properties.r = bridge.from_iast(indicators.r) end if indicators.final then properties.final = bridge.from_iast(indicators.final) end if indicators.feminine then properties.feminine = {} for _, form in ipairs(indicators.feminine) do table.insert(properties.feminine, bridge:toSlp1(form)) end end if indicators.sg or indicators.du or indicators.pl then properties.numbers = {s = indicators.sg, d = indicators.du, p = indicators.pl} end -- The pronominal declension is never a root declension, even for a monosyllable such as tā́. if properties.pron then properties.root = false end return properties end ------------------------------------------------------------------------------------------------------------------------ -- Overrides -- ------------------------------------------------------------------------------------------------------------------------ --[==[ The cell parameters. `Overrides.parse` returns, for each slot, its forms as given: a comma-separated list, each form followed by any `[footnote]`s, or `-` for no form. ]==] local Overrides = {} Overrides.__index = Overrides function Overrides.parse(values) local overrides = setmetatable({slots = {}}, Overrides) for slot, value in pairs(values) do local forms = {} local segments = M.parse_utilities.parse_balanced_segment_run(value, "[", "]") for _, group in ipairs(M.parse_utilities.split_alternating_runs(segments, "%s*,%s*")) do local footnotes = {} for i = 2, #group - 1, 2 do if mw.text.trim(group[i + 1]) ~= "" then error(("Text after a footnote in %s=%s"):format(slot, value), 0) end table.insert(footnotes, string.match(group[i], "^%[(.*)%]$")) end local form = mw.text.trim(group[1]) if form ~= "" then table.insert(forms, {written = form, footnotes = footnotes}) end end overrides.slots[slot] = forms end return overrides end ------------------------------------------------------------------------------------------------------------------------ -- Analysis -- ------------------------------------------------------------------------------------------------------------------------ --[==[ A head in SLP1. `detectClass` finds its stem class by trying the classes of `data.classes` in order. It returns the id of the first class whose genders include `gender` and one of whose patterns matches (taking the pattern's `when` or `unless` property into account), along with the stem the pattern captures. ]==] local Head = {} Head.__index = Head function Head.new(slp1) return setmetatable({slp1 = slp1}, Head) end function Head:detectClass(gender, properties) for _, class in ipairs(M.data.classes) do if class.genders[gender] then for _, pattern in ipairs(class.patterns) do local text, when, unless = pattern, nil, nil if type(pattern) == "table" then text, when, unless = pattern[1], pattern.when, pattern.unless end if (when == nil or properties[when] == true) and (unless == nil or not properties[unless]) then local stem = string.match(self.slp1, text) if stem then return class.id, stem end end end end end return nil end --[==[ One set of endings of a stem class, as added by `Analysis:add`. `class` and `set` locate it in `data.endings`, `accent` is what `@` stands for, and `stems` maps the stem keys to stems. `head` is what the `+` endings attach to, and `options` is a copy of the analysis's sandhi options at the time the group was added. ]==] local FormGroup = {} FormGroup.__index = FormGroup function FormGroup.new(fields) return setmetatable(fields, FormGroup) end --[==[ The decisions made for one stem class. An analysis starts with the head and its gender, whether the table is one of an adjective's (`adjective`), the properties set by the indicators (see `export.decline_table`) and the other heads the table looks at (`links`). The class's method then sets the `accent` that `@` stands for (the head's final accent), makes the `stems` (`base` plus whatever the class needs) and adjusts the sandhi `options`, which each group copies when it is added. What comes out is the list of `groups`, the `type` (a key of `data.types`), the `categories` (keys of `data.categories`) and the `general_notes` (keys of `data.general_notes`). ]==] local Analysis = {} Analysis.__index = Analysis function Analysis.new(input) local properties = input.properties local accented = string.match(input.head, M.sa_utilities.accent) ~= nil local analysis = setmetatable({ head = input.head, gender = input.gender, adjective = input.adjective or false, properties = properties, links = input.links or {}, class = input.class, accent = "", stems = {base = input.base}, options = { accented = accented, initial_svarita = properties.svarita or false, root_han = properties.han or false, }, groups = {}, type = nil, categories = {}, general_notes = {}, }, Analysis) -- An initial tvy-, dvy-, try-, dry- or ny- counts as two syllables, so the vocative gets an initial svarita. if accented and analysis:inLexicon("initial_svarita") then analysis.options.initial_svarita = true end return analysis end --[==[ Add the set `set` of the class's endings, with the current stems and options. `extra` can override fields of the group, e.g. to use a different `accent`. ]==] function Analysis:add(set, extra) if not M.data.endings[self.class][set] then error(("Internal error: no set '%s' of the %s endings"):format(set, self.class)) end local options, stems = {}, {} for key, value in pairs(self.options) do options[key] = value end for key, value in pairs(self.stems) do stems[key] = value end local group = {class = self.class, set = set, accent = self.accent, stems = stems, head = self.head, options = options} for key, value in pairs(extra or {}) do group[key] = value end table.insert(self.groups, FormGroup.new(group)) end function Analysis:category(key) table.insert(self.categories, key) end function Analysis:generalNote(key) table.insert(self.general_notes, key) end -- Return true if the list `name` of `data.lexicon` takes this head (or this class's stem, as the list's `subject` -- says). function Analysis:inLexicon(name) local list = M.data.lexicon[name] local subject = list.subject == "head" and self.head or self.stems.base for _, pattern in ipairs(list.except or {}) do if string.match(subject, pattern) then return false end end for _, pattern in ipairs(list.patterns) do if string.match(subject, pattern) then return true end end return false end function Analysis:headMatches(pattern) return string.match(self.head, pattern) ~= nil end function Analysis:baseMatches(pattern) return string.match(self.stems.base, pattern) ~= nil end function Analysis:monosyllabic() return M.sa_utilities.is_monosyllabic(self.head) end --[==[ Make the stems of a class ending in `vowel`, besides `base`. They are keyed as follows: `final_unaccented` (the base plus the vowel), `raised` and `raised_unaccented` (the vowel raised one grade, with and without the head's final accent), `lengthened` and `lengthened_unaccented` (the same for the lengthened vowel), `raised_glide` (the base plus ''a'' with the head's accent, plus ''v'') and `glide` (the base plus the vowel's semivowel). ]==] function Analysis:vowelStems(vowel) local utilities, base, accent = M.sa_utilities, self.stems.base, self.accent local function stem(key, ending) if ending then self.stems[key] = base .. ending end end stem("final_unaccented", vowel) stem("raised", utilities.up_one_grade[vowel .. accent]) stem("raised_unaccented", utilities.up_one_grade[vowel]) stem("lengthened", utilities.lengthen[vowel .. accent]) stem("lengthened_unaccented", utilities.lengthen[vowel]) stem("raised_glide", "a" .. accent .. "v") stem("glide", utilities.vowel_to_cons[vowel]) end -- The gender-neutral numerals: ṣáṣ; káti, táti and yáti; and páñca(n) and the like. function Analysis:numeral() self.accent = string.match(self.head, "(/?)[nz]?$") self.type = "numeral" if self:headMatches("a/?z$") then self:add("sas") self:category("numeral_s") elseif self:headMatches("ti$") then self:add("ti") self:category("numeral_i") else self:add("an_direct") -- The oblique endings take the head's own accent, wherever it falls. self:add("an_oblique", {accent = string.find(self.head, "/", 1, true) and "/" or ""}) self:category("numeral_an") end end -- The a-stems, masculine and neuter, including the pronominal declension. function Analysis:aStem() self.accent = string.match(self.head, "(" .. M.sa_utilities.accent .. "?)$") local pronominal = self.properties.pron self.type = pronominal and "pronominal_a" or "a" -- A stem-final s doesn't become ṣ (ṛbīsa, bisa). self.options.keep_stem_s = true if self.gender == "m" then self:add("masculine_direct") self:add(pronominal and "pronominal_masculine_plural" or "masculine_plural") else self:add("neuter_direct") end self:add(pronominal and "pronominal_oblique" or "nominal_oblique") self:add("oblique") -- The Vedic instrumental singular in -ā of the oxytone abstracts in -tva(na) (Lanman p.335f.). self:add(self:headMatches("tva?n?a/$") and "tva_instrumental" or "instrumental") -- The Vedic genitive/locative dual in -os after -y- (Wackernagel III p.98-99 §48a). self:add(self:baseMatches(".y$") and "genitive_dual_after_y" or "genitive_dual") self:category("a") end -- The i- and u-stems. function Analysis:shortIUStem() local vowel, accent = string.match(self.head, "([iu])(/?)$") self.accent = accent self.type = vowel self:vowelStems(vowel) if self:inLexicon("sakhi") then self:add("sakhi") elseif self.gender == "m" then if self:inLexicon("strong_masculine_i_u") then self:add("strong_masculine_singular") else self:add(self:inLexicon("vedic_instrumental_masculine") and "masculine_instrumental_vedic" or "masculine_instrumental") self:add("masculine_dative_ablative") end if vowel == "i" then -- Whitney §336f self:add("masculine_locative_i") elseif self:inLexicon("rigvedic_locative_u") then self:add("masculine_locative_u_rigvedic") else self:add("masculine_locative") end self:add("masculine_direct") elseif self.gender == "f" then self:add(vowel == "i" and "feminine_instrumental_locative_i" or "feminine_instrumental_locative_u") self:add("feminine") self:add("feminine_" .. vowel) else -- Adjectives and nouns differ in the neuter (Whitney §344). if self.adjective then self:add(self:inLexicon("strong_neuter_adjective_u") and "strong_neuter_adjective" or "neuter_adjective_dative_ablative") self:add(vowel == "i" and "neuter_adjective_locative_i" or "neuter_adjective_locative_u") self:add("neuter_adjective_genitive_dual") else self:add(self:inLexicon("strong_neuter_noun_u") and "strong_neuter_noun" or "neuter_noun_dative_ablative") self:add(vowel == "i" and "neuter_noun_locative_i" or "neuter_noun_locative_u") self:add("neuter_noun_genitive_dual") end self:add("neuter_direct") self:add(self:inLexicon("vedic_instrumental_neuter_u") and "madhu_instrumental" or "neuter_instrumental") end self:add("oblique") self:category(vowel) end -- The ā-stems, both derived (feminine) and root stems. function Analysis:longAStem() if self.gender == "n" then -- We don't build a neuter on the masculine nominatives in -ās that go with neuter nouns (Whitney §367b, -- Wackernagel III p.129). error("The neuter of radical stems in -ā ends in -a.", 0) end self.accent = string.match(self.head, "(" .. M.sa_utilities.accent .. "?)$") local pronominal, root = self.properties.pron, self.properties.root self.type = pronominal and "pronominal_long_a" or "long_a" local monosyllabic = self:monosyllabic() local masculine = self.links.masculine local derived = not (root or monosyllabic) or monosyllabic and (root == false or masculine ~= nil and string.match(masculine, "a/?$") ~= nil) if derived then if self.gender == "m" then error("Add <root> if this is a root noun or adjective.", 0) end self:category("long_a") self:add(pronominal and "pronominal_derived" or "derived") self:add("derived_direct") self:add(self:baseMatches(".y$") and "genitive_dual_after_y" or "genitive_dual") else self:category("root_long_a") if self.gender == "m" then self:generalNote("root_long_a_masculine") self:add("root_masculine") else -- The derived declension, except for the nominative singular (Macdonell p.249ff.). self:add("root_feminine") self:add(self:baseMatches(".y$") and "genitive_dual_after_y" or "genitive_dual") end end self:add("oblique") end -- The ī- and ū-stems: strī, the derived stems (the vṛkī-, devī- and ū-declensions) and the root stems. function Analysis:longIUStem() if self.gender == "n" then -- The Vedic forms that could come from a neuter ī-stem (Whitney §367b) are better given by hand. error("The neuter of radical stems in -ī/ū ends in -i/u.", 0) end local vowel, accent = string.match(self.head, "([IU])(/?)$") self.accent = accent self.type = vowel == "I" and "long_i" or "long_u" self:vowelStems(vowel) local properties, masculine = self.properties, self.links.masculine local monosyllabic = self:monosyllabic() local feminine = self.gender == "f" if self:inLexicon("stri") and not (masculine and string.match(masculine, "stf/?$")) then self.options.iy_uv_before_vowel = true self:add("stri") elseif not (properties.root or monosyllabic) or monosyllabic and properties.root == false or properties.han then if properties.vrki then -- The vṛkī́-declension (Whitney §355ff.), given as the older forms of the later declension. if vowel == "U" then error("The vṛkī́-declension (<vrki>) is a declension of ī-stems.", 0) end self:category("vrki") self:generalNote("vrki") if properties.contract == false then self.options.iy_uv_before_vowel = true end self:add("vrki") self:add(accent == "" and "vrki_instrumental_barytone" or "vrki_instrumental_oxytone") self:add(accent == "" and "vrki_genitive_dual_barytone" or "vrki_genitive_dual_oxytone") elseif vowel == "I" then self:category("long_i") self:add("devi") -- The Rigvedic genitive plural in -īnā́m (Whitney §319a). self:add(accent == "" and "devi_genitive_plural_barytone" or "devi_genitive_plural_oxytone") else -- Whitney §356a, given as the older forms of §364 (Wackernagel III p.189). if not self.adjective then self:category("long_u") elseif self.gender == "m" then self:category("long_u") elseif masculine and string.match(masculine, "u" .. M.sa_utilities.accent .. "?$") and not self:inLexicon("classical_long_u_feminine") then self:generalNote("vedic_long_u_feminine") end if self:baseMatches("y$") or self:inLexicon("vedic_uv") then -- With the Vedic -úv- (Macdonell p.290 §384a). self:add("vedic_uv") else self:add("u_derived") self:add(accent == "" and "u_instrumental_barytone" or "u_instrumental_oxytone") self:add(accent == "" and "u_genitive_dual_barytone" or "u_genitive_dual_oxytone") end self:add("u_nominative_genitive") end self:add("derived_oblique") self:add(vowel == "I" and "derived_vocative_i" or "derived_vocative_u") else self:category(vowel == "I" and "root_long_i" or "root_long_u") if monosyllabic then -- Root nouns (Whitney §351; Wackernagel III p.181). self.options.iy_uv_before_vowel = true self:add(feminine and "root_monosyllabic_feminine" or "root_monosyllabic") self:add("root_monosyllabic_oblique") else -- Compounds of root nouns (Whitney §352; Wackernagel III §91a p.179, §100a, §100eα p.192-193; Macdonell -- p.268, 288). These are uncontracted after two consonants, and the ū-stems also when accented, except in -- -sū/-ṣū. local utilities = M.sa_utilities local uncontracted = properties.contract == false or properties.contract ~= true and ( self:baseMatches(utilities.consonant .. utilities.consonant .. "$") or vowel == "U" and (self:headMatches(utilities.accent) and not self:baseMatches("[sz]$") or self:inLexicon("uncontracted_long_u_compound")) or vowel == "I" and (self:inLexicon("uncontracted_long_i_compound") or self:baseMatches("D$") and self:baseMatches(utilities.accent))) if uncontracted then -- -Ciy-/-Cuv- before a vowel. self.options.iy_uv_before_vowel = true self:add(feminine and "uncontracted_locative_feminine" or "uncontracted_locative") else self:add((accent ~= "" and "contracted_locative_oxytone" or "contracted_locative") .. (feminine and "_feminine" or "")) end self:add(feminine and "compound_feminine_dative_ablative" or "compound_dative_ablative") self:add("compound_oblique") end self:add("root_common") end end -- The ṛ-stems. function Analysis:vocalicRStem() local r = self.properties.r if self.gender == "f" and r == "A" and self:baseMatches("t$") and not self:baseMatches("^s?t$") then error("The feminine of adjectives in -tṛ ends in -trī.", 0) end self.accent = string.match(self.head, "(/?)$") self.type = "vocalic_r" self.stems.lengthened_unaccented = self.stems.base .. "F" if self.gender == "n" then self:add("neuter") else if not r then error("Give the vowel of the accusative singular with <r:a> or <r:ā>.", 0) end self:add("masculine_feminine") self:add(r == "a" and "strong_short_a" or "strong_long_a") self:add(self.gender == "f" and "feminine_accusative_plural" or "masculine_accusative_plural") end self:add("oblique") self:category("vocalic_r") end -- The consonantal root stems. These also cover the stems in -āt/-it/-ut/-ṛt, -akt and -ās/-os, and púṃs. function Analysis:rootStem() local utilities = M.sa_utilities local vowel, accent, extra, final = string.match(self.head, "(" .. utilities.vowel .. ")(" .. utilities.accent .. "?)([rM]?)([kgGcjwqtTdDpBmrzShs]t?)$") if string.match(final, "[jSh]") and not self.properties.final then error("Give the final consonant of the nominative singular with <final:k> or <final:ṭ>.", 0) end self.accent = accent self.type = "root" self.options.root_noun = true self.options.final_obstruent = self.properties.final self.options.diaspirate = self.properties.diaspirate or false local nasal = string.gsub(final, ".", utilities.homorganic_nasal) self.stems.neuter_plural = self.stems.base .. vowel .. accent .. nasal .. final self.stems.neuter_plural_unaccented = self.stems.base .. vowel .. nasal .. final if self.gender == "n" then -- The neuter nominative plural, with the nasal (Whitney §389c). self:add((string.match(final, "[mr]") == nil and extra == "") and "neuter_plural_nasal" or "neuter_plural") end if self:inLexicon("pums") then self:add("pums") elseif self:monosyllabic() and not (accent == "\\" or self.options.initial_svarita) then self:add(self.gender == "n" and "monosyllabic_neuter_direct" or "monosyllabic_direct") self:add("monosyllabic_oblique") self:add(final == "s" and "monosyllabic_locative_plural_s" or "monosyllabic_locative_plural") else if self.gender == "n" then self:add("polysyllabic_neuter_direct") else self:add("polysyllabic_direct") -- The Vedic masculine nominative singular of the adjectives in -dṛ́ś (Wackernagel III p.246). self:add((self.gender == "m" and self:inLexicon("vedic_nominative_drs")) and "drs_nominative" or "polysyllabic_nominative") end self:add("polysyllabic_oblique") self:add(final == "s" and "polysyllabic_locative_plural_s" or "polysyllabic_locative_plural") end self:category("root") end -- The as-, is- and us-stems, including the comparatives in -yas. function Analysis:sStem() local utilities = M.sa_utilities local vowel, accent = string.match(self.head, "([aiu])(" .. utilities.accent .. "?)s$") self.accent = accent self.type = vowel .. "s" local base = self.stems.base self.stems.neuter_plural = base .. utilities.lengthen[vowel] .. accent .. "Ms" self.stems.neuter_plural_unaccented = base .. utilities.lengthen[vowel] .. "Ms" local comparative = vowel == "a" and (self:baseMatches("[^aAiK/\\]" .. utilities.accent .. "?y$") or self:baseMatches("jyA/?y$")) if comparative and self.gender ~= "n" then if self.gender ~= "m" then error("The feminine of comparatives in -yas ends in -yasī.", 0) end self:add("comparative_masculine") elseif self.gender == "m" or self.gender == "f" then if vowel == "a" then self:add("as_direct") else self:add("is_us_direct") -- The Vedic vocative (Wackernagel III p.292 §152c). self:add(vowel == "i" and "is_vocative" or "us_vocative") end self:add("masculine_feminine_dual") else -- Compound adjectives in -as (Macdonell p.226; Whitney §418a). if self.adjective and vowel == "a" and not comparative and (self:baseMatches(utilities.vowel .. ".*" .. utilities.vowel) or self:baseMatches("^sv")) then self:add("compound_as_neuter_nominative") else self:add("neuter_nominative") end self:add("neuter_direct") end self:add("oblique") self:category(comparative and "comparative" or vowel .. "s") end -- The an-stems. function Analysis:anStem() local utilities = M.sa_utilities self.accent = string.match(self.head, "a(" .. utilities.accent .. "?)n$") self.type = "an" self.options.retroflex_stem_n = true local properties = self.properties local contract = properties.contract if not self:baseMatches(utilities.consonant .. "[NYRnmyrlv]$") then contract = true end if self.gender == "n" then -- Wackernagel III p.238 presupposes a neuter plural -hāni for -han. self:add("neuter_direct") self:add(properties.han and "han_neuter_nominative" or "neuter_nominative") self:add(contract and "contracted_neuter_dual" or "neuter_dual") else self:add("masculine_nominative_vocative") if properties.han or self:inLexicon("short_strong_an") then self:add("short_strong") self:add(properties.han and "han_accusative_plural" or "short_strong_accusative_plural") else -- Whitney §426b; Wackernagel III p.267. self:add(self:inLexicon("optional_short_strong_an") and "optional_short_strong" or "strong") self:add(contract and "contracted_accusative_plural" or "uncontracted_accusative_plural") end end -- The Vedic locative singular without -i (Whitney §425c). self:add(contract and "contracted_oblique" or "uncontracted_oblique") self:add("oblique") self:category("an") end -- The in-stems. function Analysis:inStem() self.accent = string.match(self.head, "i(" .. M.sa_utilities.accent .. "?)n$") self.type = "in" self.options.retroflex_stem_n = true self:add(self.gender == "n" and "neuter_direct" or "masculine_direct") self:add("oblique") self:category("in") end -- The at-stems: the participles in -at (and -āt), and the stems in -vat/-mat. function Analysis:atStem() local consonant, vowel, accent = string.match(self.head, "([mv]?)([aA])(" .. M.sa_utilities.accent .. "?)t$") self.accent = accent local properties = self.properties local long = vowel == "A" and "long_a" or "short_a" if self:headMatches("[vm]a/?t$") and not properties.participle then self.type = consonant .. "at" self:add(self.gender == "n" and "vat_neuter" or "vat_masculine") self:add("vat_oblique") self:category(consonant .. "at") return end self.type = "at" if properties.nonasal then -- Participles like júhvat, with no nasal in the strong stem. self:add(self.gender == "n" and "nonasal_neuter" or "nonasal_masculine") self:add("nonasal_oblique") else if self.gender ~= "n" then self:add("participle_masculine_" .. long) else -- The neuter nominative dual is the feminine stem (Whitney §443a, though this may be artificial: §447b). local feminines = properties.feminine or self.links.feminine if not feminines or not feminines[1] then error("Give the nominative dual (the feminine stem) with <feminine:...>.", 0) end self.stems.feminine = feminines[1] self.stems.second_feminine = feminines[2] self:add(feminines[2] and "neuter_dual_two_feminines" or "neuter_dual_feminine") -- The Rigvedic neuter plural in -ānti (Wackernagel III p.262). self:add("participle_neuter_plural_" .. long) self:add("participle_neuter_singular") self:add("participle_neuter_singular_" .. long) end self:add("participle_oblique_" .. long) end self:add("oblique") self:add("oblique_" .. long) self:category("at") end -- The añc-stems, which have a strong stem (the head), a middle stem in -ac- and a weakest stem. function Analysis:ancStem() local consonant, vowel, accent = string.match(self.head, "([yv]?)([aA])(" .. M.sa_utilities.accent .. "?)Yc$") self.accent = accent self.type = "anc" local middle = string.gsub(self.stems.base, "Yc$", "c") self.stems.base = middle self:add(self.gender == "m" and "masculine_direct" or "neuter_direct") self:add("middle_oblique") local weakest if vowel == "A" then weakest = middle elseif self:inLexicon("tiryanc") then weakest = string.gsub(middle, "ya(/?)c$", "a%1Sc") elseif consonant ~= "" then weakest = string.gsub(middle, "([yv])a([/\\]?)c$", function(semivowel, stem_accent) return (semivowel == "y" and "I" or "U") .. (stem_accent == "" and "" or "/") .. "c" end) elseif self:inLexicon("ud_anc") then weakest = string.gsub(middle, "ac$", "Ic") else error("This añc-stem is not supported.", 0) end self.stems.weakest = weakest if vowel == "A" or accent ~= "/" then self:add(self.gender == "m" and "masculine_accusative_plural" or "neuter_dual") self:add("weakest_oblique") else -- Oxytones have both accentuations (Whitney §410). self:add(self.gender == "m" and "oxytone_masculine_accusative_plural" or "oxytone_neuter_dual") self:add("oxytone_weakest_oblique") end self:add("copies") self:category("anc") end -- The o-stem gó, the au-stem nau and the ai-stem rái, and their compounds. function Analysis:diphthongStem(vowel, type) self.accent = string.match(self.head, vowel .. "(" .. M.sa_utilities.accent .. "?)$") self.type = type self:add("all") self:category(type) end -- The vāṃs-stems, i.e. the perfect participles. function Analysis:vamsStem() local utilities = M.sa_utilities self.accent = string.match(self.head, "vA(" .. utilities.accent .. "?)Ms$") self.type = "vams" local base = self.stems.base local weak if self:inLexicon("vams_glide") or self:baseMatches("u$") then weak = base .. "v" elseif self:baseMatches("U$") then weak = string.gsub(base, "U$", "uv") elseif self:inLexicon("vams_keep_i") then weak = base elseif self:baseMatches("[aAIuUfFxeEoO]" .. utilities.accent .. "?M?" .. utilities.consonant .. "+i$") or self:inLexicon("vams_drop_i") then -- The i of śiśrivā́ṃs and the like belongs to the root. weak = string.gsub(base, "i$", "") elseif self.properties.retroflex_l then weak = string.gsub(string.gsub(base, "q$", "L"), "Q$", "Lh") else weak = base end self.stems.weak = weak self:add(self.gender == "m" and "masculine_direct" or "neuter_direct") self:add("oblique") self:category("vams") end -- The personal pronouns. Their forms are whole forms on an empty stem, and the head (ahám or tvám) says which person. function Analysis:personal() local first = self:headMatches("^a") self.type = first and "first_person" or "second_person" self.stems.base = "" self:add(first and "first" or "second") end local CLASS_METHODS = { numeral = Analysis.numeral, a = Analysis.aStem, short_iu = Analysis.shortIUStem, long_a = Analysis.longAStem, long_iu = Analysis.longIUStem, vocalic_r = Analysis.vocalicRStem, root = Analysis.rootStem, s = Analysis.sStem, an = Analysis.anStem, ["in"] = Analysis.inStem, at = Analysis.atStem, anc = Analysis.ancStem, o = function(analysis) analysis:diphthongStem("o", "o") end, au = function(analysis) analysis:diphthongStem("O", "au") end, ai = function(analysis) analysis:diphthongStem("E", "ai") end, vams = Analysis.vamsStem, personal = Analysis.personal, } ------------------------------------------------------------------------------------------------------------------------ -- Generation -- ------------------------------------------------------------------------------------------------------------------------ --[==[ Generate the forms of form groups, slot by slot. Each form is `{slp1 = ..., note = KEY, stem = ..., ending = ..., options = {...}, position = N}`, i.e. the joined form, its note, the inputs to `join` and the position of the ending within its cell. With `novedic`, the Vedic endings are left out, and the remaining endings keep their positions. A cell that copies another (`"[nom]"`) is filled in once every group has run. ]==] local FormGenerator = {} FormGenerator.__index = FormGenerator local ENDING_FLAGS = {"iy_uv_before_vowel", "keep_s_before_voiceless", "strip_stem_accent"} function FormGenerator.new(novedic) return setmetatable({novedic = novedic}, FormGenerator) end function FormGenerator:form(group, ending, case, position) local text, note, stem_key = ending, nil, nil if type(ending) == "table" then text, note, stem_key = ending[1], ending.note, ending.stem end if self.novedic and note and M.data.notes[note].vedic then return nil end local stem if string.sub(text, 1, 1) == "+" then text = string.sub(text, 2) stem = group.head elseif stem_key then stem = group.stems[stem_key] or error(("Internal error: no stem '%s' in %s.%s"):format(stem_key, group.class, group.set)) else stem = group.stems.base end text = string.gsub(text, "@", group.accent) local options = {} for key, value in pairs(group.options) do options[key] = value end if type(ending) == "table" then for _, flag in ipairs(ENDING_FLAGS) do if ending[flag] then options[flag] = true end end end options.recessive_accent = case == "voc" return {slp1 = M.sa_utilities.join(stem, text, options), note = note, stem = stem, ending = text, options = options, position = position} end --[==[ Generate the forms of `groups`. Return `cells` (slot -> list of forms) and `copies` (slot -> the slot it copies). Each slot is filled by one group only. ]==] function FormGenerator:generate(groups) local cells, copies = {}, {} for _, group in ipairs(groups) do for number, cases in pairs(M.data.endings[group.class][group.set]) do for case, cell in pairs(cases) do local slot = case .. "_" .. number if cells[slot] or copies[slot] then error(("Internal error: the slot %s is filled twice (%s.%s)"):format(slot, group.class, group.set)) end local copied = type(cell) == "string" and string.match(cell, "^%[(.*)%]$") if copied then copies[slot] = copied .. "_" .. number else local forms = {} if type(cell) == "string" then cell = {cell} end for position, ending in ipairs(cell) do local form = self:form(group, ending, case, position) if form then table.insert(forms, form) end end cells[slot] = forms end end end end -- Follow copies of copies back to the cell they come from. for slot in pairs(copies) do local source, seen = copies[slot], {[slot] = true} while copies[source] do if seen[source] then error("Internal error: the copies of " .. slot .. " go round in a circle") end seen[source] = true source = copies[source] end if not cells[source] then error(("Internal error: the slot %s copies %s, which is empty"):format(slot, source)) end copies[slot] = source end return cells, copies end ------------------------------------------------------------------------------------------------------------------------ -- Declension -- ------------------------------------------------------------------------------------------------------------------------ -- Return the cases of a table of class `class`: those listed in its entry in `data.classes`, or else every case except -- the enclitic ones. local function cases_of(class) local codes for _, entry in ipairs(M.data.classes) do if entry.id == class then codes = entry.cases end end local cases = {} for _, case in ipairs(M.data.cases) do local listed = not codes and not case.enclitic for _, code in ipairs(codes or {}) do listed = listed or code == case.code end if listed then table.insert(cases, case) end end return cases end -- Return the description of a table of gender `gender` and type `type` that titles and error messages use, e.g. -- "masculine a-stem" or "first-person pronoun". A manual table gives just its gender ("neuter"), or the empty string -- if it has none. local function table_kind(gender, type) local words = {} local entry = gender and M.data.genders[gender] if entry and entry.in_title ~= false then table.insert(words, entry.name:lower()) end if type then table.insert(words, M.data.types[type]) end return table.concat(words, " ") end --[==[ One table. It holds the `head` (in SLP1), the `gender`, the stem `class` and `type`, the `numbers` and `cases` shown and the forms of every slot: `slots[slot]` is a list of `{slp1 = ..., notes = {text...}}`, empty if the slot has no form. It also keeps the form `groups` it was declined with, the generated forms in `generated` and the slots that copy another in `copies`, as well as its `categories` and `general_notes` (keys into `data`) and the `user_notes` given in the call. ]==] local Declension = {} Declension.__index = Declension function Declension.new(analysis, cells, copies, numbers) local declension = setmetatable({ head = analysis.head, gender = analysis.gender, adjective = analysis.adjective, class = analysis.class, type = analysis.type, numbers = numbers, cases = cases_of(analysis.class), groups = analysis.groups, generated = cells, copies = copies, slots = {}, overridden = {}, categories = analysis.categories, general_notes = analysis.general_notes, user_notes = {}, }, Declension) for _, case in ipairs(declension.cases) do for _, number in ipairs(M.data.numbers) do local slot = case.code .. "_" .. number.code if numbers[number.code] and not cells[copies[slot] or slot] then error(("Internal error: no forms for the slot %s (%s)"):format(slot, analysis.class)) end local forms = {} for _, form in ipairs(cells[copies[slot] or slot] or {}) do table.insert(forms, {slp1 = form.slp1, notes = form.note and {M.data.notes[form.note].text} or {}}) end declension.slots[slot] = forms end end return declension end --[==[ Make a manual table (`<manual>`), which has no stem class and no generated forms: every slot starts out empty and is filled by the cell parameters. `gender` can be {nil}. ]==] function Declension.manual(head, gender, numbers) local cells = {} for _, case in ipairs(M.data.cases) do for _, number in ipairs(M.data.numbers) do cells[case.code .. "_" .. number.code] = {} end end return Declension.new({head = head, gender = gender, adjective = false, class = "manual", groups = {}, categories = {}, general_notes = {}}, cells, {}, numbers) end --[==[ Replace the forms of `slot` with `forms` from `Overrides`. These are written in IAST or in the display script, and read with `bridge`; a form of `-` means no form. ]==] function Declension:override(slot, forms, bridge) if not self.slots[slot] then error(("'%s' is not a cell of this table"):format(slot), 0) end local replaced = {} for _, form in ipairs(forms) do if form.written ~= "-" then table.insert(replaced, {slp1 = bridge:toSlp1(form.written), notes = form.footnotes, override = true}) end end self.slots[slot] = replaced self.overridden[slot] = true end --[==[ Return the names of the table's categories. `kind` is `noun` ({{tl|sa-ndecl}}), `adjective` (the masculine table of an adjective) or `numeral`. An adjective's other tables have no categories. ]==] function Declension:categoryNames(kind) local names = {} if kind then for _, key in ipairs(self.categories) do table.insert(names, M.data.categories[key][kind]) end end return names end -- Return the texts of the table's general notes. function Declension:generalNoteTexts() local texts = {} for _, key in ipairs(self.general_notes) do table.insert(texts, M.data.general_notes[key]) end return texts end --[==[ Return the data of the table for bots (`json=1`). This has the head, the gender, the stem class and type, the numbers shown, and for each slot its forms in SLP1, in the display script and in IAST, with their notes. It also has the user's notes, the general notes, the categories of `kind` (see `categoryNames`) and whether `nocat` was given. ]==] function Declension:toJson(bridge, kind, nocat) local slots = {} for slot, forms in pairs(self.slots) do local list = {} for _, form in ipairs(forms) do table.insert(list, { slp1 = form.slp1, form = bridge:toNative(form.slp1), translit = bridge:toIast(form.slp1), notes = form.notes, override = form.override, }) end slots[slot] = list end local numbers = {} for _, number in ipairs(M.data.numbers) do if self.numbers[number.code] then table.insert(numbers, number.code) end end return { head = self.head, gender = self.gender, class = self.class, type = M.data.types[self.type], numbers = numbers, slots = slots, user_notes = self.user_notes, general_notes = self:generalNoteTexts(), categories = self:categoryNames(kind), nocat = nocat or false, } end ------------------------------------------------------------------------------------------------------------------------ -- The table -- ------------------------------------------------------------------------------------------------------------------------ --[==[ Render a `Declension` as a table with [[Module:inflection-table]]. There is a column for each number shown and a row for each case, and each row is marked with `data-case` so that scripts can reorder the cases. The cells come from [[Module:inflection utilities]]' `show_forms`, which gives each form in the display script, linked with an accelerator for `lemma`, with its IAST below. The notes go under the table. `kind` says which categories to add (see `Declension:categoryNames`); with {nil}, none are added. ]==] local TableRenderer = {} TableRenderer.__index = TableRenderer function TableRenderer.new(declension, bridge, lemma, kind) return setmetatable({declension = declension, bridge = bridge, lemma = lemma, kind = kind}, TableRenderer) end -- Return the numbers shown, in order. function TableRenderer:numbers() local numbers = {} for _, number in ipairs(M.data.numbers) do if self.declension.numbers[number.code] then table.insert(numbers, number) end end return numbers end -- Return the accelerator tags of a slot: the case, then the gender for an adjective's table, then the number. function TableRenderer:accel(case, number) local declension = self.declension local tags = {case.accel} if declension.adjective then table.insert(tags, M.data.genders[declension.gender].accel) end table.insert(tags, number.accel) return table.concat(tags, "|") end -- Return the forms of every slot shown, as linked text (an em dash for none), and the footnotes, numbered case by -- case. function TableRenderer:cells() local declension, bridge = self.declension, self.bridge local formtable, slot_list = {}, {} for _, case in ipairs(declension.cases) do for _, number in ipairs(self:numbers()) do local slot = case.code .. "_" .. number.code local forms = declension.slots[slot] if forms[1] then local list = {} for _, form in ipairs(forms) do local footnotes if form.notes[1] then footnotes = {} for _, note in ipairs(form.notes) do table.insert(footnotes, "[" .. note .. "]") end end table.insert(list, {form = bridge:toNative(form.slp1), translit = bridge:toIast(form.slp1), footnotes = footnotes}) end formtable[slot] = list end table.insert(slot_list, {slot, self:accel(case, number)}) end end M.inflection_utilities.show_forms(formtable, { lang = M.lang, lemmas = {self.lemma}, slot_list = slot_list, include_translit = true, }) return formtable, formtable.footnote end -- "Masculine a-stem declension of देव" function TableRenderer:title() local declension, bridge = self.declension, self.bridge local head = M.links.full_link({lang = M.lang, sc = bridge.script, alt = bridge:toNative(declension.head), tr = "-"}) local kind = table_kind(declension.gender, declension.type) if kind == "" then return "Biến cách của " .. head end return mw.ustring.upper("Biến cách " .. mw.ustring.sub(kind, 1, 1)) .. mw.ustring.sub(kind, 2) .. " của " .. head end function TableRenderer:render() local declension = self.declension local cells, footnotes = self:cells() local lines = {M.inflection_table.make_top{ title = self:title(), palette = "blue", tall = "yes", lang = "sa", class = "sticky-left-column", }} -- make_top has already opened the first row. table.insert(lines, '! class="outer" |') for _, number in ipairs(self:numbers()) do table.insert(lines, '! class="outer" | ' .. number.name) end for _, case in ipairs(declension.cases) do table.insert(lines, ('|- data-case="%s"'):format(case.code)) table.insert(lines, "! " .. case.name) for _, number in ipairs(self:numbers()) do table.insert(lines, "| " .. cells[case.code .. "_" .. number.code]) end end local notes = {} if footnotes ~= "" then table.insert(notes, footnotes) end for _, note in ipairs(declension.user_notes) do table.insert(notes, note) end for _, note in ipairs(declension:generalNoteTexts()) do table.insert(notes, note) end table.insert(lines, M.inflection_table.make_bottom{notes = table.concat(notes, "<br />")}) local categories = declension:categoryNames(self.kind) if categories[1] then table.insert(lines, M.utilities.format_categories(categories, M.lang)) end return table.concat(lines, "\n") end ------------------------------------------------------------------------------------------------------------------------ -- The call -- ------------------------------------------------------------------------------------------------------------------------ local ALL_NUMBERS = {s = true, d = true, p = true} --[==[ Decline one table without a frame. `input` has the following fields: * `head`: the head, in SLP1; * `gender`: `m`, `f`, `n` or `num` (the numerals); * `adjective`: true if the table is one of an adjective's tables; * `properties`: what the indicators set, in SLP1: `root` (true, false for `nonroot`, or nil), `vrki`, `pron`, `novedic`, `r` (`a` or `A`), `final` (`k`, `w` or `t`), `diaspirate`, `participle`, `nonasal`, `contract` (true, false for `nocontract`, or nil), `han`, `svarita`, `retroflex_l`, `feminine` (a list of stems) and `numbers` (a set of s/d/p); * `links`: the other heads of an adjective that the table looks at, i.e. `masculine` (for a feminine table) and `feminine` (a list, for the neuter table). Return the Declension. ]==] function export.decline_table(input) local properties = input.properties or {} local class, base = Head.new(input.head):detectClass(input.gender, properties) if not class then error("No declension class could be detected. Please check the head or specify the declension.", 0) end local analysis = Analysis.new{head = input.head, base = base, gender = input.gender, adjective = input.adjective, properties = properties, links = input.links, class = class} CLASS_METHODS[class](analysis) local cells, copies = FormGenerator.new(properties.novedic):generate(analysis.groups) local numbers = input.gender == "num" and {p = true} or properties.numbers or ALL_NUMBERS return Declension.new(analysis, cells, copies, numbers) end -- Return true if a table of class `class` and gender `gender` uses the indicator defined by `definition`. local function uses(definition, class, gender) return (definition.classes == nil or definition.classes[class] == true) and (definition.genders == nil or definition.genders[gender] == true) end -- Return the cell parameters of a table from `args`, by slot. Each parameter is the slot preceded by `prefix` (`m_`, -- `f2_`, etc.). local function cell_values(args, prefix) local values = {} for _, case in ipairs(M.data.cases) do for _, number in ipairs(M.data.numbers) do local slot = case.code .. "_" .. number.code values[slot] = args[prefix .. slot] end end return values end local function cell_parameters(params, prefix) for _, case in ipairs(M.data.cases) do for _, number in ipairs(M.data.numbers) do params[prefix .. case.code .. "_" .. number.code] = {} end end end --[==[ Implement {{tl|sa-ndecl}} without a frame, for other modules and for testing. `args` are the template's arguments and `pagename` is the page's title. Return the Declension, its ScriptBridge and the processed args. ]==] function export.decline_noun(args, pagename) local params = { [1] = {}, note = {list = true}, nocat = {type = "boolean"}, json = {type = "boolean"}, } cell_parameters(params, "") args = M.parameters.process(args, params) local spec = Spec.parse(args[1] or "", "noun") local head = spec.head ~= "" and spec.head or pagename local bridge = ScriptBridge.new(head, pagename) local gender for name, definition in pairs(M.data.indicators.noun) do if definition.group == "gender" and spec.indicators[name] then gender = name end end local properties = spec:properties(bridge) local declension if spec.indicators.manual then for name, definition in pairs(M.data.indicators.noun) do if spec.indicators[name] and name ~= "manual" and definition.group ~= "gender" and definition.group ~= "numbers" then error(("The indicator '%s' does not apply to a manual table"):format(name), 0) end end declension = Declension.manual(bridge:toSlp1(head), gender, gender == "num" and {p = true} or properties.numbers or ALL_NUMBERS) else declension = export.decline_table{head = bridge:toSlp1(head), gender = gender, properties = properties} for name in pairs(spec.indicators) do local definition = M.data.indicators.noun[name] if definition.group ~= "gender" and not uses(definition, declension.class, gender) then error(("The indicator '%s' does not apply to a %s"):format(name, table_kind(gender, declension.type)), 0) end end end for slot, forms in pairs(Overrides.parse(cell_values(args, "")).slots) do declension:override(slot, forms, bridge) end declension.user_notes = args.note return declension, bridge, args end --[==[ The tables of an adjective, each a Declension, in this order: the masculine, a feminine for each head of `f:` (by default the masculine head), and the neuter (the head of `n:`, by default the masculine head). ]==] local AdjectiveDeclension = {} AdjectiveDeclension.__index = AdjectiveDeclension --[==[ Implement {{tl|sa-adecl}} without a frame, for other modules and for testing. `args` are the template's arguments and `pagename` is the page's title. Return the AdjectiveDeclension, its ScriptBridge and the processed args. ]==] function export.decline_adjective(args, pagename) local params = { [1] = {}, nocat = {type = "boolean"}, json = {type = "boolean"}, } local spec = Spec.parse(args[1] or "", "adjective") local feminine_specs = spec.indicators.f or {Spec.parse("", "adjective", true)} local prefixes = {"m_", "n_"} for position = 1, #feminine_specs do table.insert(prefixes, position == 1 and "f_" or "f" .. position .. "_") end for _, prefix in ipairs(prefixes) do cell_parameters(params, prefix) params[prefix .. "note"] = {list = true} end args = M.parameters.process(args, params) local masculine_head = spec.head ~= "" and spec.head or pagename local bridge = ScriptBridge.new(masculine_head, pagename) local shared = spec:properties(bridge) local masculine_slp1 = bridge:toSlp1(masculine_head) -- One entry per table, with its head (and any spec of its own), gender, cell prefix and links. local tables = {{spec = nil, slp1 = masculine_slp1, gender = "m", prefix = "m_"}} local feminine_stems = {} for position, feminine_spec in ipairs(feminine_specs) do local slp1 = feminine_spec.head ~= "" and bridge:toSlp1(feminine_spec.head) or masculine_slp1 table.insert(feminine_stems, slp1) table.insert(tables, {spec = feminine_spec, slp1 = slp1, gender = "f", prefix = position == 1 and "f_" or "f" .. position .. "_", links = {masculine = masculine_slp1}}) end local neuter_spec = spec.indicators.n table.insert(tables, {spec = neuter_spec, slp1 = neuter_spec and neuter_spec.head ~= "" and bridge:toSlp1(neuter_spec.head) or masculine_slp1, gender = "n", prefix = "n_", links = {feminine = {feminine_stems[1], feminine_stems[2]}}}) local adjective = setmetatable({tables = {}}, AdjectiveDeclension) local used = {} for _, item in ipairs(tables) do local properties = item.spec and item.spec:properties(bridge, shared) or shared local declension = export.decline_table{head = item.slp1, gender = item.gender, adjective = true, properties = properties, links = item.links} for name, definition in pairs(M.data.indicators.adjective) do if spec.indicators[name] and definition.value ~= "spec" and uses(definition, declension.class, item.gender) then used[name] = true end end for name in pairs(item.spec and item.spec.indicators or {}) do if not uses(M.data.indicators.adjective[name], declension.class, item.gender) then error(("The indicator '%s' does not apply to the %s"):format(name, table_kind(item.gender, declension.type)), 0) end end for slot, forms in pairs(Overrides.parse(cell_values(args, item.prefix)).slots) do declension:override(slot, forms, bridge) end declension.user_notes = args[item.prefix .. "note"] table.insert(adjective.tables, declension) end for name, definition in pairs(M.data.indicators.adjective) do if spec.indicators[name] and definition.value ~= "spec" and not used[name] then error(("The indicator '%s' applies to none of the tables"):format(name), 0) end end return adjective, bridge, args end -- Return the kind of categories a noun table adds (see `Declension:categoryNames`). local function noun_kind(declension) return declension.class == "numeral" and "numeral" or "noun" end --[==[Entry point of {{tl|sa-ndecl}}. Return the table, or with {{para|json|1}}, its data as JSON.]==] function export.noun(frame) local pagename = M.headword_data.pagename local declension, bridge, args = export.decline_noun(frame:getParent().args, pagename) local kind = noun_kind(declension) if args.json then return M.JSON.toJSON(declension:toJson(bridge, kind, args.nocat)) end return TableRenderer.new(declension, bridge, pagename, not args.nocat and kind or nil):render() end --[==[ Entry point of {{tl|sa-adecl}}. Return the tables one above the other in an untitled inflection box (`make_box` of [[Module:inflection-table]], as {{tl|inflection-box-top}} makes), or with {{para|json|1}}, their data as JSON (`{tables = {...}}`). Only the masculine table adds categories. ]==] function export.adjective(frame) local pagename = M.headword_data.pagename local adjective, bridge, args = export.decline_adjective(frame:getParent().args, pagename) if args.json then local tables = {} for position, declension in ipairs(adjective.tables) do table.insert(tables, declension:toJson(bridge, position == 1 and "adjective" or nil, args.nocat)) end return M.JSON.toJSON({tables = tables}) end local rendered = {} for position, declension in ipairs(adjective.tables) do local kind = position == 1 and not args.nocat and "adjective" or nil table.insert(rendered, TableRenderer.new(declension, bridge, pagename, kind):render()) end return M.inflection_table.make_box({title = "-", flow = "vertical"}, "\n" .. table.concat(rendered, "\n") .. "\n") end return export l0c98zmwb8ucmdoefjsxtlfsh7jpedg 2571617 2571616 2026-10-18T12:31:47Z Hiyuune 50834 2571617 Scribunto text/plain --[==[ This module implements the declension tables of Sanskrit nouns and numerals ({{tl|sa-ndecl}}) and of adjectives ({{tl|sa-adecl}}). Authorship: originally written by [[User:Dragonoid76]] and [[User:Benwing2]], with the declension rules of [[User:Exarchus]]; rewritten by [[User:Fenakhay]] in October 2026. TERMINOLOGY: * "head" = The form given in the call: the nominative singular, or the stem for consonant stems. It is followed by an inline spec of indicators, e.g. `{{sa-ndecl|devá<m>}}` or `{{sa-adecl|kṛṣṇá<f:kṛṣṇā́.novedic>}}`. * "stem class" = One way of declining, e.g. the a-stems, the i- and u-stems or the root stems. The classes in [[Module:sa-decl/data]] are tried on the head in order, and the first one that takes it gives the "stem" (the head minus its ending). The class's other stems are made from that one; see `Analysis:vowelStems`. * "slot" = A particular combination of case and number, e.g. `nom_s` or `loc_p`. Each slot is one cell of a table. * "form group" = One set of endings from [[Module:sa-decl/data]], together with the stems, accent and sandhi options in force when it was added. A table is made of the forms of its groups, each joined with `join` in [[Module:sa-utilities]]. Everything is worked out in SLP1, and shown in the script of the head (or of the page name) with the IAST below. The classes, by area: * The call: `Spec` (the inline spec of a head), `Overrides` (the cell parameters) and `ScriptBridge` (conversion between the input script and SLP1). * The analysis: `Head` (finds the stem class of a head), `Analysis` (the decisions of one stem class, with one method per class that adds `FormGroup`s) and `FormGenerator` (makes the forms of a group). * The result: `Declension` (one table, with the forms of every slot, its notes and its categories), `AdjectiveDeclension` (the tables of an adjective) and `TableRenderer`. Other modules used: [[Module:sa-decl/data]] (the endings and every other table, loaded with mw.loadData), [[Module:sa-utilities]] (sandhi), [[Module:inflection-table]] (the frame of each table, and the box around an adjective's tables) and [[Module:inflection utilities]] (the links, transliteration, accelerators and footnotes in the cells). ]==] local export = {} local M = require("Module:module loader").init { require = { inflection_table = "Module:inflection-table", inflection_utilities = "Module:inflection utilities", JSON = "Module:JSON", links = "Module:links", parameters = "Module:parameters", parse_utilities = "Module:parse utilities", sa_utilities = "Module:sa-utilities", scripts = "Module:scripts", utilities = "Module:utilities", }, loadData = { data = "Module:sa-decl/data", headword_data = "Module:headword/data", }, lazy = { lang = function() return require("Module:languages").getByCode("sa") end, }, } ------------------------------------------------------------------------------------------------------------------------ -- Script -- ------------------------------------------------------------------------------------------------------------------------ --[==[ Convert the call's input to SLP1, and SLP1 to the display script and to IAST. The display script is the script of the head. If the head is in IAST (i.e. Latin), it is the script of the page name instead, and failing that, Devanagari. Latin input is read as IAST; anything else goes through the display script's converter. ]==] local ScriptBridge = {} ScriptBridge.__index = ScriptBridge function ScriptBridge.new(head, pagename) local script = M.lang:findBestScript(head) if script:getCode() == "None" then script = M.lang:findBestScript(pagename) end if script:getCode() == "None" then script = M.scripts.getByCode("Deva") end local code = script:getCode() return setmetatable({ script = script, code = code, from_native = require("Module:sa-utilities/translit/" .. code .. "-to-SLP1").tr, to_native = require("Module:sa-utilities/translit/SLP1-to-" .. code).tr, from_iast = require("Module:sa-utilities/translit/IAST-to-SLP1").tr, to_iast = require("Module:sa-utilities/translit/SLP1-to-IAST").tr, }, ScriptBridge) end function ScriptBridge:toSlp1(text) if M.lang:findBestScript(text):getCode() == "None" then return self.from_iast(text) end return self.from_native(text) end -- Only Devanagari shows the accents, so strip them for any other script. function ScriptBridge:toNative(slp1) if self.code ~= "Deva" then slp1 = string.gsub(slp1, M.sa_utilities.accent, "") end return self.to_native(slp1) end function ScriptBridge:toIast(slp1) return self.to_iast(slp1) end ------------------------------------------------------------------------------------------------------------------------ -- Spec -- ------------------------------------------------------------------------------------------------------------------------ --[==[ The inline spec of a head, `HEAD<NAME.NAME:VALUE...>`. `Spec.parse` parses it and checks it against the indicators of `template` (`noun` or `adjective`, as keyed in `data.indicators`). The result has `head`, as written (empty means the page name), and `indicators`, keyed by name. An indicator's value is a list for a list indicator, a Spec for a spec value, and {true} for a flag. A spec value (the feminine and neuter heads of {{tl|sa-adecl}}) is itself a head with a spec of its own. It is parsed with `nested` set, and then only takes the indicators that apply to a single stem. ]==] local Spec = {} Spec.__index = Spec local function spec_error(message, text) error(message .. " in the spec '" .. text .. "'.", 0) end -- Split `text` at `separator` (a Lua pattern), except inside angle brackets. local function split_outside_brackets(text, separator) local parts = {} local segments = M.parse_utilities.parse_balanced_segment_run(text, "<", ">") for _, group in ipairs(M.parse_utilities.split_alternating_runs(segments, separator)) do table.insert(parts, table.concat(group)) end return parts end function Spec.parse(text, template, nested) text = mw.text.trim(text) local spec = setmetatable({head = text, indicators = {}}, Spec) local registry = M.data.indicators[template] local segments = M.parse_utilities.parse_balanced_segment_run(text, "<", ">") if #segments > 3 or segments[#segments] ~= "" and #segments > 1 then spec_error("Only one <...> may follow the head", text) end spec.head = mw.text.trim(segments[1]) if string.find(spec.head, ",", 1, true) then spec_error("The head is one form", text) end local needs_gender = template == "noun" and not nested if #segments == 1 then if needs_gender then spec_error("Give the gender: <m>, <f>, <n>, <num> or <pers>", text) end return spec end local inside = string.match(segments[2], "^<(.*)>$") local groups = {} for _, indicator in ipairs(split_outside_brackets(inside, "%.")) do local name, value = string.match(indicator, "^%s*([^:<]-)%s*:%s*(.-)%s*$") if not name then name = mw.text.trim(indicator) end local definition = registry[name] if definition and definition.alias then name = definition.alias definition = registry[name] end if not definition or nested and (definition.value == "spec" or definition.group == "gender") then local names = {} for known, known_definition in pairs(registry) do if not nested or known_definition.value ~= "spec" and known_definition.group ~= "gender" then table.insert(names, known) end end table.sort(names) spec_error(("Unrecognized indicator '%s'; the indicators are %s"):format(name, table.concat(names, ", ")), text) end if spec.indicators[name] ~= nil then spec_error(("The indicator '%s' is given twice"):format(name), text) end if definition.group and definition.group ~= "numbers" then if groups[definition.group] then spec_error(("The indicators '%s' and '%s' exclude each other"):format(groups[definition.group], name), text) end groups[definition.group] = name end if definition.value and (value == nil or value == "") then spec_error(("The indicator '%s' needs a value ('%s:...')"):format(name, name), text) elseif not definition.value and value ~= nil then spec_error(("The indicator '%s' takes no value"):format(name), text) end if definition.value == nil then value = true elseif definition.value == "spec" then if definition.list then local specs = {} for _, item in ipairs(split_outside_brackets(value, "%s*,%s*")) do table.insert(specs, Spec.parse(item, template, true)) end value = specs else value = Spec.parse(value, template, true) end elseif definition.list then local values = mw.text.split(value, "%s*,%s*") for _, item in ipairs(values) do if definition.values and not definition.values[item] then spec_error(("'%s' is not a value of '%s'"):format(item, name), text) end end value = values elseif definition.values and not definition.values[value] then local values = {} for known in pairs(definition.values) do table.insert(values, known) end table.sort(values) spec_error(("'%s' is not a value of '%s'; the values are %s"):format(value, name, table.concat(values, ", ")), text) end spec.indicators[name] = value end -- A manual table can do without a gender. if needs_gender and not groups.gender and not spec.indicators.manual then spec_error("Give the gender: <m>, <f>, <n>, <num> or <pers>", text) end return spec end --[==[ Return the stem properties set by the indicators of `spec`, with SLP1 values (see `export.decline_table`), on top of `inherited`. When `spec` belongs to one of an adjective's heads, `inherited` holds the adjective's shared properties. ]==] function Spec:properties(bridge, inherited) local properties = {} for key, value in pairs(inherited or {}) do properties[key] = value end local indicators = self.indicators if indicators.root then properties.root = true elseif indicators.nonroot then properties.root = false end if indicators.contract then properties.contract = true elseif indicators.nocontract then properties.contract = false end for name, property in pairs({vrki = "vrki", pron = "pron", novedic = "novedic", diaspirate = "diaspirate", participle = "participle", nonasal = "nonasal", han = "han", svarita = "svarita", ["ḷ"] = "retroflex_l"}) do if indicators[name] then properties[property] = true end end if indicators.r then properties.r = bridge.from_iast(indicators.r) end if indicators.final then properties.final = bridge.from_iast(indicators.final) end if indicators.feminine then properties.feminine = {} for _, form in ipairs(indicators.feminine) do table.insert(properties.feminine, bridge:toSlp1(form)) end end if indicators.sg or indicators.du or indicators.pl then properties.numbers = {s = indicators.sg, d = indicators.du, p = indicators.pl} end -- The pronominal declension is never a root declension, even for a monosyllable such as tā́. if properties.pron then properties.root = false end return properties end ------------------------------------------------------------------------------------------------------------------------ -- Overrides -- ------------------------------------------------------------------------------------------------------------------------ --[==[ The cell parameters. `Overrides.parse` returns, for each slot, its forms as given: a comma-separated list, each form followed by any `[footnote]`s, or `-` for no form. ]==] local Overrides = {} Overrides.__index = Overrides function Overrides.parse(values) local overrides = setmetatable({slots = {}}, Overrides) for slot, value in pairs(values) do local forms = {} local segments = M.parse_utilities.parse_balanced_segment_run(value, "[", "]") for _, group in ipairs(M.parse_utilities.split_alternating_runs(segments, "%s*,%s*")) do local footnotes = {} for i = 2, #group - 1, 2 do if mw.text.trim(group[i + 1]) ~= "" then error(("Text after a footnote in %s=%s"):format(slot, value), 0) end table.insert(footnotes, string.match(group[i], "^%[(.*)%]$")) end local form = mw.text.trim(group[1]) if form ~= "" then table.insert(forms, {written = form, footnotes = footnotes}) end end overrides.slots[slot] = forms end return overrides end ------------------------------------------------------------------------------------------------------------------------ -- Analysis -- ------------------------------------------------------------------------------------------------------------------------ --[==[ A head in SLP1. `detectClass` finds its stem class by trying the classes of `data.classes` in order. It returns the id of the first class whose genders include `gender` and one of whose patterns matches (taking the pattern's `when` or `unless` property into account), along with the stem the pattern captures. ]==] local Head = {} Head.__index = Head function Head.new(slp1) return setmetatable({slp1 = slp1}, Head) end function Head:detectClass(gender, properties) for _, class in ipairs(M.data.classes) do if class.genders[gender] then for _, pattern in ipairs(class.patterns) do local text, when, unless = pattern, nil, nil if type(pattern) == "table" then text, when, unless = pattern[1], pattern.when, pattern.unless end if (when == nil or properties[when] == true) and (unless == nil or not properties[unless]) then local stem = string.match(self.slp1, text) if stem then return class.id, stem end end end end end return nil end --[==[ One set of endings of a stem class, as added by `Analysis:add`. `class` and `set` locate it in `data.endings`, `accent` is what `@` stands for, and `stems` maps the stem keys to stems. `head` is what the `+` endings attach to, and `options` is a copy of the analysis's sandhi options at the time the group was added. ]==] local FormGroup = {} FormGroup.__index = FormGroup function FormGroup.new(fields) return setmetatable(fields, FormGroup) end --[==[ The decisions made for one stem class. An analysis starts with the head and its gender, whether the table is one of an adjective's (`adjective`), the properties set by the indicators (see `export.decline_table`) and the other heads the table looks at (`links`). The class's method then sets the `accent` that `@` stands for (the head's final accent), makes the `stems` (`base` plus whatever the class needs) and adjusts the sandhi `options`, which each group copies when it is added. What comes out is the list of `groups`, the `type` (a key of `data.types`), the `categories` (keys of `data.categories`) and the `general_notes` (keys of `data.general_notes`). ]==] local Analysis = {} Analysis.__index = Analysis function Analysis.new(input) local properties = input.properties local accented = string.match(input.head, M.sa_utilities.accent) ~= nil local analysis = setmetatable({ head = input.head, gender = input.gender, adjective = input.adjective or false, properties = properties, links = input.links or {}, class = input.class, accent = "", stems = {base = input.base}, options = { accented = accented, initial_svarita = properties.svarita or false, root_han = properties.han or false, }, groups = {}, type = nil, categories = {}, general_notes = {}, }, Analysis) -- An initial tvy-, dvy-, try-, dry- or ny- counts as two syllables, so the vocative gets an initial svarita. if accented and analysis:inLexicon("initial_svarita") then analysis.options.initial_svarita = true end return analysis end --[==[ Add the set `set` of the class's endings, with the current stems and options. `extra` can override fields of the group, e.g. to use a different `accent`. ]==] function Analysis:add(set, extra) if not M.data.endings[self.class][set] then error(("Internal error: no set '%s' of the %s endings"):format(set, self.class)) end local options, stems = {}, {} for key, value in pairs(self.options) do options[key] = value end for key, value in pairs(self.stems) do stems[key] = value end local group = {class = self.class, set = set, accent = self.accent, stems = stems, head = self.head, options = options} for key, value in pairs(extra or {}) do group[key] = value end table.insert(self.groups, FormGroup.new(group)) end function Analysis:category(key) table.insert(self.categories, key) end function Analysis:generalNote(key) table.insert(self.general_notes, key) end -- Return true if the list `name` of `data.lexicon` takes this head (or this class's stem, as the list's `subject` -- says). function Analysis:inLexicon(name) local list = M.data.lexicon[name] local subject = list.subject == "head" and self.head or self.stems.base for _, pattern in ipairs(list.except or {}) do if string.match(subject, pattern) then return false end end for _, pattern in ipairs(list.patterns) do if string.match(subject, pattern) then return true end end return false end function Analysis:headMatches(pattern) return string.match(self.head, pattern) ~= nil end function Analysis:baseMatches(pattern) return string.match(self.stems.base, pattern) ~= nil end function Analysis:monosyllabic() return M.sa_utilities.is_monosyllabic(self.head) end --[==[ Make the stems of a class ending in `vowel`, besides `base`. They are keyed as follows: `final_unaccented` (the base plus the vowel), `raised` and `raised_unaccented` (the vowel raised one grade, with and without the head's final accent), `lengthened` and `lengthened_unaccented` (the same for the lengthened vowel), `raised_glide` (the base plus ''a'' with the head's accent, plus ''v'') and `glide` (the base plus the vowel's semivowel). ]==] function Analysis:vowelStems(vowel) local utilities, base, accent = M.sa_utilities, self.stems.base, self.accent local function stem(key, ending) if ending then self.stems[key] = base .. ending end end stem("final_unaccented", vowel) stem("raised", utilities.up_one_grade[vowel .. accent]) stem("raised_unaccented", utilities.up_one_grade[vowel]) stem("lengthened", utilities.lengthen[vowel .. accent]) stem("lengthened_unaccented", utilities.lengthen[vowel]) stem("raised_glide", "a" .. accent .. "v") stem("glide", utilities.vowel_to_cons[vowel]) end -- The gender-neutral numerals: ṣáṣ; káti, táti and yáti; and páñca(n) and the like. function Analysis:numeral() self.accent = string.match(self.head, "(/?)[nz]?$") self.type = "numeral" if self:headMatches("a/?z$") then self:add("sas") self:category("numeral_s") elseif self:headMatches("ti$") then self:add("ti") self:category("numeral_i") else self:add("an_direct") -- The oblique endings take the head's own accent, wherever it falls. self:add("an_oblique", {accent = string.find(self.head, "/", 1, true) and "/" or ""}) self:category("numeral_an") end end -- The a-stems, masculine and neuter, including the pronominal declension. function Analysis:aStem() self.accent = string.match(self.head, "(" .. M.sa_utilities.accent .. "?)$") local pronominal = self.properties.pron self.type = pronominal and "pronominal_a" or "a" -- A stem-final s doesn't become ṣ (ṛbīsa, bisa). self.options.keep_stem_s = true if self.gender == "m" then self:add("masculine_direct") self:add(pronominal and "pronominal_masculine_plural" or "masculine_plural") else self:add("neuter_direct") end self:add(pronominal and "pronominal_oblique" or "nominal_oblique") self:add("oblique") -- The Vedic instrumental singular in -ā of the oxytone abstracts in -tva(na) (Lanman p.335f.). self:add(self:headMatches("tva?n?a/$") and "tva_instrumental" or "instrumental") -- The Vedic genitive/locative dual in -os after -y- (Wackernagel III p.98-99 §48a). self:add(self:baseMatches(".y$") and "genitive_dual_after_y" or "genitive_dual") self:category("a") end -- The i- and u-stems. function Analysis:shortIUStem() local vowel, accent = string.match(self.head, "([iu])(/?)$") self.accent = accent self.type = vowel self:vowelStems(vowel) if self:inLexicon("sakhi") then self:add("sakhi") elseif self.gender == "m" then if self:inLexicon("strong_masculine_i_u") then self:add("strong_masculine_singular") else self:add(self:inLexicon("vedic_instrumental_masculine") and "masculine_instrumental_vedic" or "masculine_instrumental") self:add("masculine_dative_ablative") end if vowel == "i" then -- Whitney §336f self:add("masculine_locative_i") elseif self:inLexicon("rigvedic_locative_u") then self:add("masculine_locative_u_rigvedic") else self:add("masculine_locative") end self:add("masculine_direct") elseif self.gender == "f" then self:add(vowel == "i" and "feminine_instrumental_locative_i" or "feminine_instrumental_locative_u") self:add("feminine") self:add("feminine_" .. vowel) else -- Adjectives and nouns differ in the neuter (Whitney §344). if self.adjective then self:add(self:inLexicon("strong_neuter_adjective_u") and "strong_neuter_adjective" or "neuter_adjective_dative_ablative") self:add(vowel == "i" and "neuter_adjective_locative_i" or "neuter_adjective_locative_u") self:add("neuter_adjective_genitive_dual") else self:add(self:inLexicon("strong_neuter_noun_u") and "strong_neuter_noun" or "neuter_noun_dative_ablative") self:add(vowel == "i" and "neuter_noun_locative_i" or "neuter_noun_locative_u") self:add("neuter_noun_genitive_dual") end self:add("neuter_direct") self:add(self:inLexicon("vedic_instrumental_neuter_u") and "madhu_instrumental" or "neuter_instrumental") end self:add("oblique") self:category(vowel) end -- The ā-stems, both derived (feminine) and root stems. function Analysis:longAStem() if self.gender == "n" then -- We don't build a neuter on the masculine nominatives in -ās that go with neuter nouns (Whitney §367b, -- Wackernagel III p.129). error("The neuter of radical stems in -ā ends in -a.", 0) end self.accent = string.match(self.head, "(" .. M.sa_utilities.accent .. "?)$") local pronominal, root = self.properties.pron, self.properties.root self.type = pronominal and "pronominal_long_a" or "long_a" local monosyllabic = self:monosyllabic() local masculine = self.links.masculine local derived = not (root or monosyllabic) or monosyllabic and (root == false or masculine ~= nil and string.match(masculine, "a/?$") ~= nil) if derived then if self.gender == "m" then error("Add <root> if this is a root noun or adjective.", 0) end self:category("long_a") self:add(pronominal and "pronominal_derived" or "derived") self:add("derived_direct") self:add(self:baseMatches(".y$") and "genitive_dual_after_y" or "genitive_dual") else self:category("root_long_a") if self.gender == "m" then self:generalNote("root_long_a_masculine") self:add("root_masculine") else -- The derived declension, except for the nominative singular (Macdonell p.249ff.). self:add("root_feminine") self:add(self:baseMatches(".y$") and "genitive_dual_after_y" or "genitive_dual") end end self:add("oblique") end -- The ī- and ū-stems: strī, the derived stems (the vṛkī-, devī- and ū-declensions) and the root stems. function Analysis:longIUStem() if self.gender == "n" then -- The Vedic forms that could come from a neuter ī-stem (Whitney §367b) are better given by hand. error("The neuter of radical stems in -ī/ū ends in -i/u.", 0) end local vowel, accent = string.match(self.head, "([IU])(/?)$") self.accent = accent self.type = vowel == "I" and "long_i" or "long_u" self:vowelStems(vowel) local properties, masculine = self.properties, self.links.masculine local monosyllabic = self:monosyllabic() local feminine = self.gender == "f" if self:inLexicon("stri") and not (masculine and string.match(masculine, "stf/?$")) then self.options.iy_uv_before_vowel = true self:add("stri") elseif not (properties.root or monosyllabic) or monosyllabic and properties.root == false or properties.han then if properties.vrki then -- The vṛkī́-declension (Whitney §355ff.), given as the older forms of the later declension. if vowel == "U" then error("The vṛkī́-declension (<vrki>) is a declension of ī-stems.", 0) end self:category("vrki") self:generalNote("vrki") if properties.contract == false then self.options.iy_uv_before_vowel = true end self:add("vrki") self:add(accent == "" and "vrki_instrumental_barytone" or "vrki_instrumental_oxytone") self:add(accent == "" and "vrki_genitive_dual_barytone" or "vrki_genitive_dual_oxytone") elseif vowel == "I" then self:category("long_i") self:add("devi") -- The Rigvedic genitive plural in -īnā́m (Whitney §319a). self:add(accent == "" and "devi_genitive_plural_barytone" or "devi_genitive_plural_oxytone") else -- Whitney §356a, given as the older forms of §364 (Wackernagel III p.189). if not self.adjective then self:category("long_u") elseif self.gender == "m" then self:category("long_u") elseif masculine and string.match(masculine, "u" .. M.sa_utilities.accent .. "?$") and not self:inLexicon("classical_long_u_feminine") then self:generalNote("vedic_long_u_feminine") end if self:baseMatches("y$") or self:inLexicon("vedic_uv") then -- With the Vedic -úv- (Macdonell p.290 §384a). self:add("vedic_uv") else self:add("u_derived") self:add(accent == "" and "u_instrumental_barytone" or "u_instrumental_oxytone") self:add(accent == "" and "u_genitive_dual_barytone" or "u_genitive_dual_oxytone") end self:add("u_nominative_genitive") end self:add("derived_oblique") self:add(vowel == "I" and "derived_vocative_i" or "derived_vocative_u") else self:category(vowel == "I" and "root_long_i" or "root_long_u") if monosyllabic then -- Root nouns (Whitney §351; Wackernagel III p.181). self.options.iy_uv_before_vowel = true self:add(feminine and "root_monosyllabic_feminine" or "root_monosyllabic") self:add("root_monosyllabic_oblique") else -- Compounds of root nouns (Whitney §352; Wackernagel III §91a p.179, §100a, §100eα p.192-193; Macdonell -- p.268, 288). These are uncontracted after two consonants, and the ū-stems also when accented, except in -- -sū/-ṣū. local utilities = M.sa_utilities local uncontracted = properties.contract == false or properties.contract ~= true and ( self:baseMatches(utilities.consonant .. utilities.consonant .. "$") or vowel == "U" and (self:headMatches(utilities.accent) and not self:baseMatches("[sz]$") or self:inLexicon("uncontracted_long_u_compound")) or vowel == "I" and (self:inLexicon("uncontracted_long_i_compound") or self:baseMatches("D$") and self:baseMatches(utilities.accent))) if uncontracted then -- -Ciy-/-Cuv- before a vowel. self.options.iy_uv_before_vowel = true self:add(feminine and "uncontracted_locative_feminine" or "uncontracted_locative") else self:add((accent ~= "" and "contracted_locative_oxytone" or "contracted_locative") .. (feminine and "_feminine" or "")) end self:add(feminine and "compound_feminine_dative_ablative" or "compound_dative_ablative") self:add("compound_oblique") end self:add("root_common") end end -- The ṛ-stems. function Analysis:vocalicRStem() local r = self.properties.r if self.gender == "f" and r == "A" and self:baseMatches("t$") and not self:baseMatches("^s?t$") then error("The feminine of adjectives in -tṛ ends in -trī.", 0) end self.accent = string.match(self.head, "(/?)$") self.type = "vocalic_r" self.stems.lengthened_unaccented = self.stems.base .. "F" if self.gender == "n" then self:add("neuter") else if not r then error("Give the vowel of the accusative singular with <r:a> or <r:ā>.", 0) end self:add("masculine_feminine") self:add(r == "a" and "strong_short_a" or "strong_long_a") self:add(self.gender == "f" and "feminine_accusative_plural" or "masculine_accusative_plural") end self:add("oblique") self:category("vocalic_r") end -- The consonantal root stems. These also cover the stems in -āt/-it/-ut/-ṛt, -akt and -ās/-os, and púṃs. function Analysis:rootStem() local utilities = M.sa_utilities local vowel, accent, extra, final = string.match(self.head, "(" .. utilities.vowel .. ")(" .. utilities.accent .. "?)([rM]?)([kgGcjwqtTdDpBmrzShs]t?)$") if string.match(final, "[jSh]") and not self.properties.final then error("Give the final consonant of the nominative singular with <final:k> or <final:ṭ>.", 0) end self.accent = accent self.type = "root" self.options.root_noun = true self.options.final_obstruent = self.properties.final self.options.diaspirate = self.properties.diaspirate or false local nasal = string.gsub(final, ".", utilities.homorganic_nasal) self.stems.neuter_plural = self.stems.base .. vowel .. accent .. nasal .. final self.stems.neuter_plural_unaccented = self.stems.base .. vowel .. nasal .. final if self.gender == "n" then -- The neuter nominative plural, with the nasal (Whitney §389c). self:add((string.match(final, "[mr]") == nil and extra == "") and "neuter_plural_nasal" or "neuter_plural") end if self:inLexicon("pums") then self:add("pums") elseif self:monosyllabic() and not (accent == "\\" or self.options.initial_svarita) then self:add(self.gender == "n" and "monosyllabic_neuter_direct" or "monosyllabic_direct") self:add("monosyllabic_oblique") self:add(final == "s" and "monosyllabic_locative_plural_s" or "monosyllabic_locative_plural") else if self.gender == "n" then self:add("polysyllabic_neuter_direct") else self:add("polysyllabic_direct") -- The Vedic masculine nominative singular of the adjectives in -dṛ́ś (Wackernagel III p.246). self:add((self.gender == "m" and self:inLexicon("vedic_nominative_drs")) and "drs_nominative" or "polysyllabic_nominative") end self:add("polysyllabic_oblique") self:add(final == "s" and "polysyllabic_locative_plural_s" or "polysyllabic_locative_plural") end self:category("root") end -- The as-, is- and us-stems, including the comparatives in -yas. function Analysis:sStem() local utilities = M.sa_utilities local vowel, accent = string.match(self.head, "([aiu])(" .. utilities.accent .. "?)s$") self.accent = accent self.type = vowel .. "s" local base = self.stems.base self.stems.neuter_plural = base .. utilities.lengthen[vowel] .. accent .. "Ms" self.stems.neuter_plural_unaccented = base .. utilities.lengthen[vowel] .. "Ms" local comparative = vowel == "a" and (self:baseMatches("[^aAiK/\\]" .. utilities.accent .. "?y$") or self:baseMatches("jyA/?y$")) if comparative and self.gender ~= "n" then if self.gender ~= "m" then error("The feminine of comparatives in -yas ends in -yasī.", 0) end self:add("comparative_masculine") elseif self.gender == "m" or self.gender == "f" then if vowel == "a" then self:add("as_direct") else self:add("is_us_direct") -- The Vedic vocative (Wackernagel III p.292 §152c). self:add(vowel == "i" and "is_vocative" or "us_vocative") end self:add("masculine_feminine_dual") else -- Compound adjectives in -as (Macdonell p.226; Whitney §418a). if self.adjective and vowel == "a" and not comparative and (self:baseMatches(utilities.vowel .. ".*" .. utilities.vowel) or self:baseMatches("^sv")) then self:add("compound_as_neuter_nominative") else self:add("neuter_nominative") end self:add("neuter_direct") end self:add("oblique") self:category(comparative and "comparative" or vowel .. "s") end -- The an-stems. function Analysis:anStem() local utilities = M.sa_utilities self.accent = string.match(self.head, "a(" .. utilities.accent .. "?)n$") self.type = "an" self.options.retroflex_stem_n = true local properties = self.properties local contract = properties.contract if not self:baseMatches(utilities.consonant .. "[NYRnmyrlv]$") then contract = true end if self.gender == "n" then -- Wackernagel III p.238 presupposes a neuter plural -hāni for -han. self:add("neuter_direct") self:add(properties.han and "han_neuter_nominative" or "neuter_nominative") self:add(contract and "contracted_neuter_dual" or "neuter_dual") else self:add("masculine_nominative_vocative") if properties.han or self:inLexicon("short_strong_an") then self:add("short_strong") self:add(properties.han and "han_accusative_plural" or "short_strong_accusative_plural") else -- Whitney §426b; Wackernagel III p.267. self:add(self:inLexicon("optional_short_strong_an") and "optional_short_strong" or "strong") self:add(contract and "contracted_accusative_plural" or "uncontracted_accusative_plural") end end -- The Vedic locative singular without -i (Whitney §425c). self:add(contract and "contracted_oblique" or "uncontracted_oblique") self:add("oblique") self:category("an") end -- The in-stems. function Analysis:inStem() self.accent = string.match(self.head, "i(" .. M.sa_utilities.accent .. "?)n$") self.type = "in" self.options.retroflex_stem_n = true self:add(self.gender == "n" and "neuter_direct" or "masculine_direct") self:add("oblique") self:category("in") end -- The at-stems: the participles in -at (and -āt), and the stems in -vat/-mat. function Analysis:atStem() local consonant, vowel, accent = string.match(self.head, "([mv]?)([aA])(" .. M.sa_utilities.accent .. "?)t$") self.accent = accent local properties = self.properties local long = vowel == "A" and "long_a" or "short_a" if self:headMatches("[vm]a/?t$") and not properties.participle then self.type = consonant .. "at" self:add(self.gender == "n" and "vat_neuter" or "vat_masculine") self:add("vat_oblique") self:category(consonant .. "at") return end self.type = "at" if properties.nonasal then -- Participles like júhvat, with no nasal in the strong stem. self:add(self.gender == "n" and "nonasal_neuter" or "nonasal_masculine") self:add("nonasal_oblique") else if self.gender ~= "n" then self:add("participle_masculine_" .. long) else -- The neuter nominative dual is the feminine stem (Whitney §443a, though this may be artificial: §447b). local feminines = properties.feminine or self.links.feminine if not feminines or not feminines[1] then error("Give the nominative dual (the feminine stem) with <feminine:...>.", 0) end self.stems.feminine = feminines[1] self.stems.second_feminine = feminines[2] self:add(feminines[2] and "neuter_dual_two_feminines" or "neuter_dual_feminine") -- The Rigvedic neuter plural in -ānti (Wackernagel III p.262). self:add("participle_neuter_plural_" .. long) self:add("participle_neuter_singular") self:add("participle_neuter_singular_" .. long) end self:add("participle_oblique_" .. long) end self:add("oblique") self:add("oblique_" .. long) self:category("at") end -- The añc-stems, which have a strong stem (the head), a middle stem in -ac- and a weakest stem. function Analysis:ancStem() local consonant, vowel, accent = string.match(self.head, "([yv]?)([aA])(" .. M.sa_utilities.accent .. "?)Yc$") self.accent = accent self.type = "anc" local middle = string.gsub(self.stems.base, "Yc$", "c") self.stems.base = middle self:add(self.gender == "m" and "masculine_direct" or "neuter_direct") self:add("middle_oblique") local weakest if vowel == "A" then weakest = middle elseif self:inLexicon("tiryanc") then weakest = string.gsub(middle, "ya(/?)c$", "a%1Sc") elseif consonant ~= "" then weakest = string.gsub(middle, "([yv])a([/\\]?)c$", function(semivowel, stem_accent) return (semivowel == "y" and "I" or "U") .. (stem_accent == "" and "" or "/") .. "c" end) elseif self:inLexicon("ud_anc") then weakest = string.gsub(middle, "ac$", "Ic") else error("This añc-stem is not supported.", 0) end self.stems.weakest = weakest if vowel == "A" or accent ~= "/" then self:add(self.gender == "m" and "masculine_accusative_plural" or "neuter_dual") self:add("weakest_oblique") else -- Oxytones have both accentuations (Whitney §410). self:add(self.gender == "m" and "oxytone_masculine_accusative_plural" or "oxytone_neuter_dual") self:add("oxytone_weakest_oblique") end self:add("copies") self:category("anc") end -- The o-stem gó, the au-stem nau and the ai-stem rái, and their compounds. function Analysis:diphthongStem(vowel, type) self.accent = string.match(self.head, vowel .. "(" .. M.sa_utilities.accent .. "?)$") self.type = type self:add("all") self:category(type) end -- The vāṃs-stems, i.e. the perfect participles. function Analysis:vamsStem() local utilities = M.sa_utilities self.accent = string.match(self.head, "vA(" .. utilities.accent .. "?)Ms$") self.type = "vams" local base = self.stems.base local weak if self:inLexicon("vams_glide") or self:baseMatches("u$") then weak = base .. "v" elseif self:baseMatches("U$") then weak = string.gsub(base, "U$", "uv") elseif self:inLexicon("vams_keep_i") then weak = base elseif self:baseMatches("[aAIuUfFxeEoO]" .. utilities.accent .. "?M?" .. utilities.consonant .. "+i$") or self:inLexicon("vams_drop_i") then -- The i of śiśrivā́ṃs and the like belongs to the root. weak = string.gsub(base, "i$", "") elseif self.properties.retroflex_l then weak = string.gsub(string.gsub(base, "q$", "L"), "Q$", "Lh") else weak = base end self.stems.weak = weak self:add(self.gender == "m" and "masculine_direct" or "neuter_direct") self:add("oblique") self:category("vams") end -- The personal pronouns. Their forms are whole forms on an empty stem, and the head (ahám or tvám) says which person. function Analysis:personal() local first = self:headMatches("^a") self.type = first and "first_person" or "second_person" self.stems.base = "" self:add(first and "first" or "second") end local CLASS_METHODS = { numeral = Analysis.numeral, a = Analysis.aStem, short_iu = Analysis.shortIUStem, long_a = Analysis.longAStem, long_iu = Analysis.longIUStem, vocalic_r = Analysis.vocalicRStem, root = Analysis.rootStem, s = Analysis.sStem, an = Analysis.anStem, ["in"] = Analysis.inStem, at = Analysis.atStem, anc = Analysis.ancStem, o = function(analysis) analysis:diphthongStem("o", "o") end, au = function(analysis) analysis:diphthongStem("O", "au") end, ai = function(analysis) analysis:diphthongStem("E", "ai") end, vams = Analysis.vamsStem, personal = Analysis.personal, } ------------------------------------------------------------------------------------------------------------------------ -- Generation -- ------------------------------------------------------------------------------------------------------------------------ --[==[ Generate the forms of form groups, slot by slot. Each form is `{slp1 = ..., note = KEY, stem = ..., ending = ..., options = {...}, position = N}`, i.e. the joined form, its note, the inputs to `join` and the position of the ending within its cell. With `novedic`, the Vedic endings are left out, and the remaining endings keep their positions. A cell that copies another (`"[nom]"`) is filled in once every group has run. ]==] local FormGenerator = {} FormGenerator.__index = FormGenerator local ENDING_FLAGS = {"iy_uv_before_vowel", "keep_s_before_voiceless", "strip_stem_accent"} function FormGenerator.new(novedic) return setmetatable({novedic = novedic}, FormGenerator) end function FormGenerator:form(group, ending, case, position) local text, note, stem_key = ending, nil, nil if type(ending) == "table" then text, note, stem_key = ending[1], ending.note, ending.stem end if self.novedic and note and M.data.notes[note].vedic then return nil end local stem if string.sub(text, 1, 1) == "+" then text = string.sub(text, 2) stem = group.head elseif stem_key then stem = group.stems[stem_key] or error(("Internal error: no stem '%s' in %s.%s"):format(stem_key, group.class, group.set)) else stem = group.stems.base end text = string.gsub(text, "@", group.accent) local options = {} for key, value in pairs(group.options) do options[key] = value end if type(ending) == "table" then for _, flag in ipairs(ENDING_FLAGS) do if ending[flag] then options[flag] = true end end end options.recessive_accent = case == "voc" return {slp1 = M.sa_utilities.join(stem, text, options), note = note, stem = stem, ending = text, options = options, position = position} end --[==[ Generate the forms of `groups`. Return `cells` (slot -> list of forms) and `copies` (slot -> the slot it copies). Each slot is filled by one group only. ]==] function FormGenerator:generate(groups) local cells, copies = {}, {} for _, group in ipairs(groups) do for number, cases in pairs(M.data.endings[group.class][group.set]) do for case, cell in pairs(cases) do local slot = case .. "_" .. number if cells[slot] or copies[slot] then error(("Internal error: the slot %s is filled twice (%s.%s)"):format(slot, group.class, group.set)) end local copied = type(cell) == "string" and string.match(cell, "^%[(.*)%]$") if copied then copies[slot] = copied .. "_" .. number else local forms = {} if type(cell) == "string" then cell = {cell} end for position, ending in ipairs(cell) do local form = self:form(group, ending, case, position) if form then table.insert(forms, form) end end cells[slot] = forms end end end end -- Follow copies of copies back to the cell they come from. for slot in pairs(copies) do local source, seen = copies[slot], {[slot] = true} while copies[source] do if seen[source] then error("Internal error: the copies of " .. slot .. " go round in a circle") end seen[source] = true source = copies[source] end if not cells[source] then error(("Internal error: the slot %s copies %s, which is empty"):format(slot, source)) end copies[slot] = source end return cells, copies end ------------------------------------------------------------------------------------------------------------------------ -- Declension -- ------------------------------------------------------------------------------------------------------------------------ -- Return the cases of a table of class `class`: those listed in its entry in `data.classes`, or else every case except -- the enclitic ones. local function cases_of(class) local codes for _, entry in ipairs(M.data.classes) do if entry.id == class then codes = entry.cases end end local cases = {} for _, case in ipairs(M.data.cases) do local listed = not codes and not case.enclitic for _, code in ipairs(codes or {}) do listed = listed or code == case.code end if listed then table.insert(cases, case) end end return cases end -- Return the description of a table of gender `gender` and type `type` that titles and error messages use, e.g. -- "masculine a-stem" or "first-person pronoun". A manual table gives just its gender ("neuter"), or the empty string -- if it has none. local function table_kind(gender, type) local words = {} local entry = gender and M.data.genders[gender] if entry and entry.in_title ~= false then table.insert(words, entry.name:lower()) end if type then table.insert(words, M.data.types[type]) end return table.concat(words, " ") end --[==[ One table. It holds the `head` (in SLP1), the `gender`, the stem `class` and `type`, the `numbers` and `cases` shown and the forms of every slot: `slots[slot]` is a list of `{slp1 = ..., notes = {text...}}`, empty if the slot has no form. It also keeps the form `groups` it was declined with, the generated forms in `generated` and the slots that copy another in `copies`, as well as its `categories` and `general_notes` (keys into `data`) and the `user_notes` given in the call. ]==] local Declension = {} Declension.__index = Declension function Declension.new(analysis, cells, copies, numbers) local declension = setmetatable({ head = analysis.head, gender = analysis.gender, adjective = analysis.adjective, class = analysis.class, type = analysis.type, numbers = numbers, cases = cases_of(analysis.class), groups = analysis.groups, generated = cells, copies = copies, slots = {}, overridden = {}, categories = analysis.categories, general_notes = analysis.general_notes, user_notes = {}, }, Declension) for _, case in ipairs(declension.cases) do for _, number in ipairs(M.data.numbers) do local slot = case.code .. "_" .. number.code if numbers[number.code] and not cells[copies[slot] or slot] then error(("Internal error: no forms for the slot %s (%s)"):format(slot, analysis.class)) end local forms = {} for _, form in ipairs(cells[copies[slot] or slot] or {}) do table.insert(forms, {slp1 = form.slp1, notes = form.note and {M.data.notes[form.note].text} or {}}) end declension.slots[slot] = forms end end return declension end --[==[ Make a manual table (`<manual>`), which has no stem class and no generated forms: every slot starts out empty and is filled by the cell parameters. `gender` can be {nil}. ]==] function Declension.manual(head, gender, numbers) local cells = {} for _, case in ipairs(M.data.cases) do for _, number in ipairs(M.data.numbers) do cells[case.code .. "_" .. number.code] = {} end end return Declension.new({head = head, gender = gender, adjective = false, class = "manual", groups = {}, categories = {}, general_notes = {}}, cells, {}, numbers) end --[==[ Replace the forms of `slot` with `forms` from `Overrides`. These are written in IAST or in the display script, and read with `bridge`; a form of `-` means no form. ]==] function Declension:override(slot, forms, bridge) if not self.slots[slot] then error(("'%s' is not a cell of this table"):format(slot), 0) end local replaced = {} for _, form in ipairs(forms) do if form.written ~= "-" then table.insert(replaced, {slp1 = bridge:toSlp1(form.written), notes = form.footnotes, override = true}) end end self.slots[slot] = replaced self.overridden[slot] = true end --[==[ Return the names of the table's categories. `kind` is `noun` ({{tl|sa-ndecl}}), `adjective` (the masculine table of an adjective) or `numeral`. An adjective's other tables have no categories. ]==] function Declension:categoryNames(kind) local names = {} if kind then for _, key in ipairs(self.categories) do table.insert(names, M.data.categories[key][kind]) end end return names end -- Return the texts of the table's general notes. function Declension:generalNoteTexts() local texts = {} for _, key in ipairs(self.general_notes) do table.insert(texts, M.data.general_notes[key]) end return texts end --[==[ Return the data of the table for bots (`json=1`). This has the head, the gender, the stem class and type, the numbers shown, and for each slot its forms in SLP1, in the display script and in IAST, with their notes. It also has the user's notes, the general notes, the categories of `kind` (see `categoryNames`) and whether `nocat` was given. ]==] function Declension:toJson(bridge, kind, nocat) local slots = {} for slot, forms in pairs(self.slots) do local list = {} for _, form in ipairs(forms) do table.insert(list, { slp1 = form.slp1, form = bridge:toNative(form.slp1), translit = bridge:toIast(form.slp1), notes = form.notes, override = form.override, }) end slots[slot] = list end local numbers = {} for _, number in ipairs(M.data.numbers) do if self.numbers[number.code] then table.insert(numbers, number.code) end end return { head = self.head, gender = self.gender, class = self.class, type = M.data.types[self.type], numbers = numbers, slots = slots, user_notes = self.user_notes, general_notes = self:generalNoteTexts(), categories = self:categoryNames(kind), nocat = nocat or false, } end ------------------------------------------------------------------------------------------------------------------------ -- The table -- ------------------------------------------------------------------------------------------------------------------------ --[==[ Render a `Declension` as a table with [[Module:inflection-table]]. There is a column for each number shown and a row for each case, and each row is marked with `data-case` so that scripts can reorder the cases. The cells come from [[Module:inflection utilities]]' `show_forms`, which gives each form in the display script, linked with an accelerator for `lemma`, with its IAST below. The notes go under the table. `kind` says which categories to add (see `Declension:categoryNames`); with {nil}, none are added. ]==] local TableRenderer = {} TableRenderer.__index = TableRenderer function TableRenderer.new(declension, bridge, lemma, kind) return setmetatable({declension = declension, bridge = bridge, lemma = lemma, kind = kind}, TableRenderer) end -- Return the numbers shown, in order. function TableRenderer:numbers() local numbers = {} for _, number in ipairs(M.data.numbers) do if self.declension.numbers[number.code] then table.insert(numbers, number) end end return numbers end -- Return the accelerator tags of a slot: the case, then the gender for an adjective's table, then the number. function TableRenderer:accel(case, number) local declension = self.declension local tags = {case.accel} if declension.adjective then table.insert(tags, M.data.genders[declension.gender].accel) end table.insert(tags, number.accel) return table.concat(tags, "|") end -- Return the forms of every slot shown, as linked text (an em dash for none), and the footnotes, numbered case by -- case. function TableRenderer:cells() local declension, bridge = self.declension, self.bridge local formtable, slot_list = {}, {} for _, case in ipairs(declension.cases) do for _, number in ipairs(self:numbers()) do local slot = case.code .. "_" .. number.code local forms = declension.slots[slot] if forms[1] then local list = {} for _, form in ipairs(forms) do local footnotes if form.notes[1] then footnotes = {} for _, note in ipairs(form.notes) do table.insert(footnotes, "[" .. note .. "]") end end table.insert(list, {form = bridge:toNative(form.slp1), translit = bridge:toIast(form.slp1), footnotes = footnotes}) end formtable[slot] = list end table.insert(slot_list, {slot, self:accel(case, number)}) end end M.inflection_utilities.show_forms(formtable, { lang = M.lang, lemmas = {self.lemma}, slot_list = slot_list, include_translit = true, }) return formtable, formtable.footnote end -- "Masculine a-stem declension of देव" function TableRenderer:title() local declension, bridge = self.declension, self.bridge local head = M.links.full_link({lang = M.lang, sc = bridge.script, alt = bridge:toNative(declension.head), tr = "-"}) local kind = table_kind(declension.gender, declension.type) if kind == "" then return "Biến cách của " .. head end return mw.ustring.upper(mw.ustring.sub(kind, 1, 1)) .. mw.ustring.sub(kind, 2) .. " của " .. head end function TableRenderer:render() local declension = self.declension local cells, footnotes = self:cells() local lines = {M.inflection_table.make_top{ title = self:title(), palette = "blue", tall = "yes", lang = "sa", class = "sticky-left-column", }} -- make_top has already opened the first row. table.insert(lines, '! class="outer" |') for _, number in ipairs(self:numbers()) do table.insert(lines, '! class="outer" | ' .. number.name) end for _, case in ipairs(declension.cases) do table.insert(lines, ('|- data-case="%s"'):format(case.code)) table.insert(lines, "! " .. case.name) for _, number in ipairs(self:numbers()) do table.insert(lines, "| " .. cells[case.code .. "_" .. number.code]) end end local notes = {} if footnotes ~= "" then table.insert(notes, footnotes) end for _, note in ipairs(declension.user_notes) do table.insert(notes, note) end for _, note in ipairs(declension:generalNoteTexts()) do table.insert(notes, note) end table.insert(lines, M.inflection_table.make_bottom{notes = table.concat(notes, "<br />")}) local categories = declension:categoryNames(self.kind) if categories[1] then table.insert(lines, M.utilities.format_categories(categories, M.lang)) end return table.concat(lines, "\n") end ------------------------------------------------------------------------------------------------------------------------ -- The call -- ------------------------------------------------------------------------------------------------------------------------ local ALL_NUMBERS = {s = true, d = true, p = true} --[==[ Decline one table without a frame. `input` has the following fields: * `head`: the head, in SLP1; * `gender`: `m`, `f`, `n` or `num` (the numerals); * `adjective`: true if the table is one of an adjective's tables; * `properties`: what the indicators set, in SLP1: `root` (true, false for `nonroot`, or nil), `vrki`, `pron`, `novedic`, `r` (`a` or `A`), `final` (`k`, `w` or `t`), `diaspirate`, `participle`, `nonasal`, `contract` (true, false for `nocontract`, or nil), `han`, `svarita`, `retroflex_l`, `feminine` (a list of stems) and `numbers` (a set of s/d/p); * `links`: the other heads of an adjective that the table looks at, i.e. `masculine` (for a feminine table) and `feminine` (a list, for the neuter table). Return the Declension. ]==] function export.decline_table(input) local properties = input.properties or {} local class, base = Head.new(input.head):detectClass(input.gender, properties) if not class then error("No declension class could be detected. Please check the head or specify the declension.", 0) end local analysis = Analysis.new{head = input.head, base = base, gender = input.gender, adjective = input.adjective, properties = properties, links = input.links, class = class} CLASS_METHODS[class](analysis) local cells, copies = FormGenerator.new(properties.novedic):generate(analysis.groups) local numbers = input.gender == "num" and {p = true} or properties.numbers or ALL_NUMBERS return Declension.new(analysis, cells, copies, numbers) end -- Return true if a table of class `class` and gender `gender` uses the indicator defined by `definition`. local function uses(definition, class, gender) return (definition.classes == nil or definition.classes[class] == true) and (definition.genders == nil or definition.genders[gender] == true) end -- Return the cell parameters of a table from `args`, by slot. Each parameter is the slot preceded by `prefix` (`m_`, -- `f2_`, etc.). local function cell_values(args, prefix) local values = {} for _, case in ipairs(M.data.cases) do for _, number in ipairs(M.data.numbers) do local slot = case.code .. "_" .. number.code values[slot] = args[prefix .. slot] end end return values end local function cell_parameters(params, prefix) for _, case in ipairs(M.data.cases) do for _, number in ipairs(M.data.numbers) do params[prefix .. case.code .. "_" .. number.code] = {} end end end --[==[ Implement {{tl|sa-ndecl}} without a frame, for other modules and for testing. `args` are the template's arguments and `pagename` is the page's title. Return the Declension, its ScriptBridge and the processed args. ]==] function export.decline_noun(args, pagename) local params = { [1] = {}, note = {list = true}, nocat = {type = "boolean"}, json = {type = "boolean"}, } cell_parameters(params, "") args = M.parameters.process(args, params) local spec = Spec.parse(args[1] or "", "noun") local head = spec.head ~= "" and spec.head or pagename local bridge = ScriptBridge.new(head, pagename) local gender for name, definition in pairs(M.data.indicators.noun) do if definition.group == "gender" and spec.indicators[name] then gender = name end end local properties = spec:properties(bridge) local declension if spec.indicators.manual then for name, definition in pairs(M.data.indicators.noun) do if spec.indicators[name] and name ~= "manual" and definition.group ~= "gender" and definition.group ~= "numbers" then error(("The indicator '%s' does not apply to a manual table"):format(name), 0) end end declension = Declension.manual(bridge:toSlp1(head), gender, gender == "num" and {p = true} or properties.numbers or ALL_NUMBERS) else declension = export.decline_table{head = bridge:toSlp1(head), gender = gender, properties = properties} for name in pairs(spec.indicators) do local definition = M.data.indicators.noun[name] if definition.group ~= "gender" and not uses(definition, declension.class, gender) then error(("The indicator '%s' does not apply to a %s"):format(name, table_kind(gender, declension.type)), 0) end end end for slot, forms in pairs(Overrides.parse(cell_values(args, "")).slots) do declension:override(slot, forms, bridge) end declension.user_notes = args.note return declension, bridge, args end --[==[ The tables of an adjective, each a Declension, in this order: the masculine, a feminine for each head of `f:` (by default the masculine head), and the neuter (the head of `n:`, by default the masculine head). ]==] local AdjectiveDeclension = {} AdjectiveDeclension.__index = AdjectiveDeclension --[==[ Implement {{tl|sa-adecl}} without a frame, for other modules and for testing. `args` are the template's arguments and `pagename` is the page's title. Return the AdjectiveDeclension, its ScriptBridge and the processed args. ]==] function export.decline_adjective(args, pagename) local params = { [1] = {}, nocat = {type = "boolean"}, json = {type = "boolean"}, } local spec = Spec.parse(args[1] or "", "adjective") local feminine_specs = spec.indicators.f or {Spec.parse("", "adjective", true)} local prefixes = {"m_", "n_"} for position = 1, #feminine_specs do table.insert(prefixes, position == 1 and "f_" or "f" .. position .. "_") end for _, prefix in ipairs(prefixes) do cell_parameters(params, prefix) params[prefix .. "note"] = {list = true} end args = M.parameters.process(args, params) local masculine_head = spec.head ~= "" and spec.head or pagename local bridge = ScriptBridge.new(masculine_head, pagename) local shared = spec:properties(bridge) local masculine_slp1 = bridge:toSlp1(masculine_head) -- One entry per table, with its head (and any spec of its own), gender, cell prefix and links. local tables = {{spec = nil, slp1 = masculine_slp1, gender = "m", prefix = "m_"}} local feminine_stems = {} for position, feminine_spec in ipairs(feminine_specs) do local slp1 = feminine_spec.head ~= "" and bridge:toSlp1(feminine_spec.head) or masculine_slp1 table.insert(feminine_stems, slp1) table.insert(tables, {spec = feminine_spec, slp1 = slp1, gender = "f", prefix = position == 1 and "f_" or "f" .. position .. "_", links = {masculine = masculine_slp1}}) end local neuter_spec = spec.indicators.n table.insert(tables, {spec = neuter_spec, slp1 = neuter_spec and neuter_spec.head ~= "" and bridge:toSlp1(neuter_spec.head) or masculine_slp1, gender = "n", prefix = "n_", links = {feminine = {feminine_stems[1], feminine_stems[2]}}}) local adjective = setmetatable({tables = {}}, AdjectiveDeclension) local used = {} for _, item in ipairs(tables) do local properties = item.spec and item.spec:properties(bridge, shared) or shared local declension = export.decline_table{head = item.slp1, gender = item.gender, adjective = true, properties = properties, links = item.links} for name, definition in pairs(M.data.indicators.adjective) do if spec.indicators[name] and definition.value ~= "spec" and uses(definition, declension.class, item.gender) then used[name] = true end end for name in pairs(item.spec and item.spec.indicators or {}) do if not uses(M.data.indicators.adjective[name], declension.class, item.gender) then error(("The indicator '%s' does not apply to the %s"):format(name, table_kind(item.gender, declension.type)), 0) end end for slot, forms in pairs(Overrides.parse(cell_values(args, item.prefix)).slots) do declension:override(slot, forms, bridge) end declension.user_notes = args[item.prefix .. "note"] table.insert(adjective.tables, declension) end for name, definition in pairs(M.data.indicators.adjective) do if spec.indicators[name] and definition.value ~= "spec" and not used[name] then error(("The indicator '%s' applies to none of the tables"):format(name), 0) end end return adjective, bridge, args end -- Return the kind of categories a noun table adds (see `Declension:categoryNames`). local function noun_kind(declension) return declension.class == "numeral" and "numeral" or "noun" end --[==[Entry point of {{tl|sa-ndecl}}. Return the table, or with {{para|json|1}}, its data as JSON.]==] function export.noun(frame) local pagename = M.headword_data.pagename local declension, bridge, args = export.decline_noun(frame:getParent().args, pagename) local kind = noun_kind(declension) if args.json then return M.JSON.toJSON(declension:toJson(bridge, kind, args.nocat)) end return TableRenderer.new(declension, bridge, pagename, not args.nocat and kind or nil):render() end --[==[ Entry point of {{tl|sa-adecl}}. Return the tables one above the other in an untitled inflection box (`make_box` of [[Module:inflection-table]], as {{tl|inflection-box-top}} makes), or with {{para|json|1}}, their data as JSON (`{tables = {...}}`). Only the masculine table adds categories. ]==] function export.adjective(frame) local pagename = M.headword_data.pagename local adjective, bridge, args = export.decline_adjective(frame:getParent().args, pagename) if args.json then local tables = {} for position, declension in ipairs(adjective.tables) do table.insert(tables, declension:toJson(bridge, position == 1 and "adjective" or nil, args.nocat)) end return M.JSON.toJSON({tables = tables}) end local rendered = {} for position, declension in ipairs(adjective.tables) do local kind = position == 1 and not args.nocat and "adjective" or nil table.insert(rendered, TableRenderer.new(declension, bridge, pagename, kind):render()) end return M.inflection_table.make_box({title = "-", flow = "vertical"}, "\n" .. table.concat(rendered, "\n") .. "\n") end return export e5fbl2b1wlevziofn6okf6ssbhkw0on 2571618 2571617 2026-10-18T12:37:16Z Hiyuune 50834 Hồi sửa về bản sửa đổi 2567270 của [[Special:Contributions/Hiyuune|Hiyuune]] ([[User talk:Hiyuune|talk]]) 2571618 Scribunto text/plain local export = {} local m_para = require("Module:parameters") local m_links = require("Module:links") local m_utils = require("Module:utilities") local lang = require("Module:languages").getByCode("sa") local m_script_utils = require("Module:script utilities") local sa_decl_data = require("Module:sa-decl/data") local SLP_to_IAST = require("Module:sa-utilities/translit/SLP1-to-IAST") local sa_utils_translit = require("Module:sa-utilities/translit") local m_inflection_table = require("Module:inflection-table") local PAGENAME = mw.loadData("Module:headword/data").pagename local sub = mw.ustring.sub local gsub = mw.ustring.gsub local match = mw.ustring.match local len = mw.ustring.len local accent = '[/\\]' local genders = { m = 'giống đực', f = 'giống cái', n = 'giống trung', gneut = 'giống trung lập' } local cases = { { 'nom', 'danh cách' }, { 'acc', 'đối cách' }, { 'ins', 'cách công cụ' }, { 'dat', 'dữ cách' }, { 'abl', 'ly cách' }, { 'gen', 'sinh cách' }, { 'loc', 'định vị cách' }, { 'voc', 'hô cách' } } local super_nums = {'¹', '²', '³', '⁴', '⁵', '⁶', '⁷', '⁸', '⁹', [0]='⁰'} local function to_super(num) local annotation = gsub(num, ".", super_nums) return annotation end local function get_form_note_tags(form_notes, data) local output = {} if type(form_notes) ~= 'table' then form_notes = { form_notes } end for _, form_note in ipairs(form_notes) do if type(data.form_notes[form_note]) ~= "number" then table.insert(data.form_notes_out, form_note) data.form_notes[form_note] = #data.form_notes_out end table.insert(output, to_super(data.form_notes[form_note])) end return table.concat(output) end local function make_header(args, data, sc_cache) local width = '40' local reverse_trd = (sc_cache.scCode == "Deva" and sc_cache.reverse_tr(args.lemma)) or sc_cache.reverse_tr(gsub(args.lemma, accent, "")) local title = 'Biến cách ' .. data.decl_type .. ' ' .. ' ' .. genders[args.g] .. ' của ' .. m_links.full_link({ term = nil, alt = reverse_trd, tr = "-", lang = lang, sc = sc_cache.sc }) local header = { m_inflection_table.make_top{ title = title, palette = 'blue', tall = 'yes', } } table.insert(header, '!\n') if args.n:find('s') then table.insert(header, '! số ít\n') end if args.n:find('d') then table.insert(header, '! số đôi\n') end if args.n:find('p') then table.insert(header, '! số nhiều\n') end return table.concat(header) end local function make_cell(args, data, code, num, sc_cache) local tag = code .. '_' .. num local forms, links, trs = {}, {}, {} if args[tag] then forms = mw.text.split(sc_cache.tr(args[tag]), '%s*[,]%s*') else forms = data.forms[tag] end if not forms then error("Internal error: No forms for slot '" .. tag .. "'") end for i, form in ipairs(forms) do if form == "" then -- in case of form reduced to zero by 'novedic' parameter -- do nothing else local form_note_tag = get_form_note_tags(forms['note' .. i] or {}, data) -- a superscript number at the end of manually added forms should not be part of the (linked) form if match(form, "[¹²³⁴⁵⁶⁷⁸⁹]$") then extra_note_tag = gsub(form, "^.+(.)$", "%1") form = gsub(form, ".$", "") else extra_note_tag = "" end if form == "-" then table.insert(links, m_links.full_link({ term = nil, alt = '-', lang = lang, sc = sc_cache.sc })) else -- strip accent before reverse tr for non-Deva scripts local reverse_trd = (sc_cache.scCode == "Deva" and sc_cache.reverse_tr(form)) or sc_cache.reverse_tr(gsub(form, accent, "")) table.insert(links, m_links.full_link({ term = reverse_trd, alt = reverse_trd .. form_note_tag .. extra_note_tag, tr = SLP_to_IAST.tr(form) .. form_note_tag .. extra_note_tag, lang = lang, sc = sc_cache.sc })) end end end return table.concat { '| ', table.concat(links, '<br>'), '\n' } end local function format_notes(args, data) local output = {} if #data.form_notes_out > 0 or #data.general_notes > 0 or #args.note > 0 then for i, form_note in ipairs(data.form_notes_out) do table.insert(output, '* ' .. to_super(i) .. form_note) end for _, note in ipairs(args.note) do table.insert(output, '* ' .. note) end for _, general_note in ipairs(data.general_notes) do table.insert(output, '* ' .. general_note) end return table.concat(output, '\n') .. '\n' else return '' end end local function make_table_noun(args, data, sc_cache) local output = { make_header(args, data, sc_cache) } for _, case in ipairs(cases) do local code, name = case[1], case[2] table.insert(output, '|-\n') table.insert(output, '! ' .. name .. '\n') if args.n:find('s') then table.insert(output, make_cell(args, data, code, 's', sc_cache)) end if args.n:find('d') then table.insert(output, make_cell(args, data, code, 'd', sc_cache)) end if args.n:find('p') then table.insert(output, make_cell(args, data, code, 'p', sc_cache)) end end table.insert(output, m_inflection_table.make_bottom{ notes = format_notes(args, data) }) if not args.nocat and #data.categories > 0 then table.insert(output, m_utils.format_categories(data.categories, lang)) end return table.concat(output) end local function get_sc_details(args) local sc, scCode if args.sc then sc = require("Module:scripts").getByCode(args.sc) scCode = args.sc else sc = lang:findBestScript(args.lemma) scCode = sc:getCode() if scCode == 'None' then sc = lang:findBestScript(PAGENAME) scCode = sc:getCode() if scCode == 'None' then return get_sc_details({sc = "Deva"}) end end end local tr, reverse_tr = sa_utils_translit.retrieve_tr_modules(scCode) return { tr = tr, reverse_tr = reverse_tr, sc = sc, scCode = scCode } end function export.show(frame) local params = { lemma = { default = PAGENAME }, decl = true, n = { default = 'sdp', set = {'s', 'd', 'p', 'sd', 'sp', 'dp', 'sdp'} }, sc = true, [1] = { alias_of = 'lemma' }, nom_s = true, nom_d = true, nom_p = true, acc_s = true, acc_d = true, acc_p = true, ins_s = true, ins_d = true, ins_p = true, dat_s = true, dat_d = true, dat_p = true, abl_s = true, abl_d = true, abl_p = true, gen_s = true, gen_d = true, gen_p = true, loc_s = true, loc_d = true, loc_p = true, voc_s = true, voc_d = true, voc_p = true, note = { list = true }, root = { type = 'boolean' }, vrki = { type = 'boolean' }, -- for 'vṛkī' declension pronominal = { type = 'boolean' }, -- use pronominal declension, e.g. for 'sarva' novedic = { default = false, type = "boolean" }, -- disable extra Vedic forms nv = {alias_of = 'novedic'}, norigvedic = { default = false, type = "boolean" }, -- disable Rigvedic forms r_stem_a = true, at_nom_s = { type = 'boolean' }, ambig_final = true, -- for stems on -j, -ś or -h diaspirate = { type = 'boolean' }, -- for diaspirate roots like 'duh' participle = { type = 'boolean' }, contract = { type = 'boolean' }, han = { type = 'boolean' }, -- for root 'han' voc_svar = { type = 'boolean' }, -- to indicate that the vocative should have initial svarita adj = { type = 'boolean' }, -- internal argument for categorizing adjectives masc_stem = true, -- to pass on masculine fem_stem = true, -- to pass on feminine as neuter nom.du. for participles fem2_stem = true, retroflex_l = { type = 'boolean' }, nocat = true, } local data = { forms = {}, categories = {}, decl_type = nil, form_notes = {}, form_notes_out = {}, general_notes = {}, } local g = frame.args[1] if g == 'gneut' then -- no number spec for gender-neutral numerals params.n = nil end local args = m_para.process(frame:getParent().args, params) args.g = g if args.g == 'gneut' then args.n = 'p' -- plural number-only end if args.pronominal then args.root = false -- the pronominal endings override the usual declension pattern end local sc_cache = get_sc_details(args) args.lemma = sc_cache.tr(args.lemma) args.has_accent = match(args.lemma, accent) if args.has_accent and (match(args.lemma, "^[td][rv]y") or (match(args.lemma, "^ny") and not match(args.lemma, "^nya/$"))) then args.voc_svar = true end for decl, decl_data in pairs(sa_decl_data) do if decl_data.detect(args) then sa_decl_data[decl](args, data) break end end if data.decl_type == nil then error("Không rõ lớp biến cách. Vui lòng kiểm tra mục từ biến thể hình thái hoặc chỉ rõ lớp biến cách.") end return make_table_noun(args, data, sc_cache) end return export dmxp5s62bryjr3nqco6x8xeuqo0hhtk Mô đun:sa-utilities 828 293669 2571613 2565771 2026-10-18T12:25:42Z Hiyuune 50834 2571613 Scribunto text/plain --[==[ Sanskrit phonology in SLP1, shared by [[Module:sa-verb]] and [[Module:sa-decl/data]]: character classes, the vowel grade and consonant tables, and `join`, the internal sandhi engine that puts a stem and an ending together. Every string here is SLP1, one ASCII character per sound, so the plain `string` library is enough. `/` marks the udātta and `\\` the svarita, written after their vowel. `join` runs a fixed pipeline of named rules (see `RULES` below), each with the paragraph of Whitney's ''Sanskrit Grammar'' it implements where one is known. `join_traced` returns the ids of the rules that fired as well, for tests. Rewritten by [[User:Fenakhay]] in October 2026; the rules are those of the earlier `internal_sandhi`. ]==] local export = {} export.consonant_list = "kKgGNcCjJYwWqQRtTdDnpPbBmyrlLvSzsh" export.consonant = "[" .. export.consonant_list .. "]" export.accent = "[/\\]" export.vowel_list = "aAiIuUfFxXeEoO" export.vowel = "[" .. export.vowel_list .. "]" export.vowel_with_accent = export.vowel .. export.accent .. "?" export.stop_list = "kKgGcCjJwWqQtTdDpPbB" export.stop = "[" .. export.stop_list .. "]" --[==[ Raise a vowel one grade (guṇa; vṛddhi for `a` and the guṇa vowels). It is possible that this should include guṇa of sonorants into CV configurations (e.g. i/ī -> ya -> yā). ]==] export.up_one_grade = { ['a'] = 'A', ['A'] = 'A', ['a/'] = 'A/', ['A/'] = 'A/', ['a\\'] = 'A\\', ['A\\'] = 'A\\', ['i'] = 'e', ['I'] = 'e', ['i/'] = 'e/', ['I/'] = 'e/', ['i\\'] = 'e\\', ['I\\'] = 'e\\', ['u'] = 'o', ['U'] = 'o', ['u/'] = 'o/', ['U/'] = 'o/', ['u\\'] = 'o\\', ['U\\'] = 'o\\', ['e'] = 'E', ['E'] = 'E', ['e/'] = 'E/', ['E/'] = 'E/', ['e\\'] = 'E\\', ['E\\'] = 'E\\', ['o'] = 'O', ['O'] = 'O', ['o/'] = 'O/', ['O/'] = 'O/', ['o\\'] = 'O\\', ['O\\'] = 'O\\', ['f'] = 'ar', ['F'] = 'ar', ['f/'] = 'a/r', ['F/'] = 'a/r', ['f\\'] = 'a\\r', ['F\\'] = 'a\\r', ['x'] = 'al', ['x/'] = 'a/l', ['x\\'] = 'a\\l', } --[==[Lengthen a vowel.]==] export.lengthen = { ['a'] = 'A', ['A'] = 'A', ['a/'] = 'A/', ['A/'] = 'A/', ['a\\'] = 'A\\', ['A\\'] = 'A\\', ['i'] = 'I', ['I'] = 'I', ['i/'] = 'I/', ['I/'] = 'I/', ['i\\'] = 'I\\', ['I\\'] = 'I\\', ['u'] = 'U', ['U'] = 'U', ['u/'] = 'U/', ['U/'] = 'U/', ['u\\'] = 'U\\', ['U\\'] = 'U\\', ['f'] = 'F', ['F'] = 'F', ['f/'] = 'F/', ['F/'] = 'F/', ['f\\'] = 'F\\', ['F\\'] = 'F\\', } --[==[Shorten a vowel (the reverse of `lengthen`).]==] export.shorten = { ['a'] = 'a', ['A'] = 'a', ['a/'] = 'a/', ['A/'] = 'a/', ['a\\'] = 'a\\', ['A\\'] = 'a\\', ['i'] = 'i', ['I'] = 'i', ['i/'] = 'i/', ['I/'] = 'i/', ['i\\'] = 'i\\', ['I\\'] = 'i\\', ['u'] = 'u', ['U'] = 'u', ['u/'] = 'u/', ['U/'] = 'u/', ['u\\'] = 'u\\', ['U\\'] = 'u\\', ['f'] = 'f', ['F'] = 'f', ['f/'] = 'f/', ['F/'] = 'f/', ['f\\'] = 'f\\', ['F\\'] = 'f\\', } --[==[Split a diphthong into a/ā and a glide.]==] export.split_diphthong = { ['e'] = 'ay', ['e/'] = 'a/y', ['e\\'] = 'a\\y', ['E'] = 'Ay', ['E/'] = 'A/y', ['E\\'] = 'A\\y', ['o'] = 'av', ['o/'] = 'a/v', ['o\\'] = 'a\\v', ['O'] = 'Av', ['O/'] = 'A/v', ['O\\'] = 'A\\v', } --[==[The consonant of a syllabic sonorant.]==] export.vowel_to_cons = { ['i'] = 'y', ['I'] = 'y', ['u'] = 'v', ['U'] = 'v', ['f'] = 'r', ['F'] = 'r', ['x'] = 'l', ['X'] = 'l', } --[==[ The absolute final value of each stop (and of `Y` and `z`). The identities (`k` = `k`) are there so that the table can be given to `string.gsub` for any stop. ]==] export.to_final = { ['k'] = 'k', ['K'] = 'k', ['g'] = 'k', ['G'] = 'k', ['c'] = 'k', ['C'] = 'w', ['J'] = 'w', -- the value for 'J' is theoretical ['w'] = 'w', ['W'] = 'w', ['q'] = 'w', ['Q'] = 'w', ['L'] = 'w', ['t'] = 't', ['T'] = 't', ['d'] = 't', ['D'] = 't', ['p'] = 'p', ['P'] = 'p', ['b'] = 'p', ['B'] = 'p', ['Y'] = 'N', ['z'] = 'w', } --[==[Remove the aspiration of a stop.]==] export.deaspirate = { ['K'] = 'k', ['G'] = 'g', ['C'] = 'c', ['J'] = 'j', ['W'] = 'w', ['Q'] = 'q', ['T'] = 't', ['D'] = 'd', ['P'] = 'p', ['B'] = 'b', } --[==[Aspirate a voiced stop.]==] export.aspirate = { ['g'] = 'G', ['j'] = 'J', ['q'] = 'Q', ['d'] = 'D', ['b'] = 'B' } --[==[Voice an unvoiced stop.]==] export.to_voiced = { ['k'] = 'g', ['c'] = 'j', ['w'] = 'q', ['t'] = 'd', ['p'] = 'b' } --[==[The nasal (or anusvāra) that a nasal becomes before each consonant.]==] export.homorganic_nasal = { ['k'] = 'N', ['K'] = 'N', ['g'] = 'N', ['G'] = 'N', ['c'] = 'Y', ['C'] = 'Y', ['j'] = 'Y', ['J'] = 'Y', ['w'] = 'R', ['W'] = 'R', ['q'] = 'R', ['Q'] = 'R', ['t'] = 'n', ['T'] = 'n', ['d'] = 'n', ['D'] = 'n', ['p'] = 'm', ['P'] = 'm', ['b'] = 'm', ['B'] = 'm', ['r'] = 'M', ['l'] = 'M', -- or 'l~' ['S'] = 'M', ['z'] = 'M', ['s'] = 'M', ['h'] = 'M' } --[==[ Whether `text` is one syllable. Sandhi is not applied first, so a potential phonemic form like /dā́rv/ (realised [dā́ru]) counts as one syllable. ]==] function export.is_monosyllabic(text) return string.match(text, "^" .. export.consonant .. "*" .. export.vowel_with_accent .. "[HM~]?" .. export.consonant .. "*$") ~= nil end ------------------------------------------------------------------------------------------------------------------------ -- Internal sandhi -- ------------------------------------------------------------------------------------------------------------------------ -- The ā/a + glide pairs that a diphthong is joined back from. local join_diphthong = { ['ay'] = 'e', ['a/y'] = 'e/', ['a\\y'] = 'e\\', ['Ay'] = 'E', ['A/y'] = 'E/', ['A\\y'] = 'E\\', ['av'] = 'o', ['a/v'] = 'o/', ['a\\v'] = 'o\\', ['Av'] = 'O', ['A/v'] = 'O/', ['A\\v'] = 'O\\', } local cons_to_vowel = { ['y'] = 'i', ['r'] = 'f', ['v'] = 'u', ['l'] = 'x' } local to_velar = { ['c'] = 'k', ['j'] = 'g', ['h'] = 'G' } -- A vowel followed by its homorganic glide. local insert_glide = { ['i'] = 'iy', ['I'] = 'iy', ['i/'] = 'i/y', ['I/'] = 'i/y', ['i\\'] = 'i\\y', ['I\\'] = 'i\\y', ['u'] = 'uv', ['U'] = 'uv', ['u/'] = 'u/v', ['U/'] = 'u/v', ['u\\'] = 'u\\v', ['U\\'] = 'u\\v', } local dental_to_retroflex = { ['t'] = 'w', ['T'] = 'W', ['d'] = 'q', ['D'] = 'Q', ['n'] = 'R', ['s'] = 'z' } local first_of_word_final_cluster = "(" .. export.consonant .. "+)$" -- Consonants and vowels that block the spread of nasal retroflexion (nati). local nati_blockers = "[^cCjJYwWqQRtTdDnSslL]*" --[==[ The options `join` takes, each a boolean unless said otherwise. Any other key is an error. * `accented`: the word carries accent marks, so they are combined (see the accent rules). * `strip_stem_accent`: remove every accent mark from the stem. * `recessive_accent`: move the accent to the first syllable (the vocative). * `initial_svarita`: with `recessive_accent`, put a svarita rather than an udātta on the first syllable of a stem that begins with consonant + y/v. * `no_final_sandhi`: leave the end of the word as it is (for a form used inside a word, such as a participle stem). * `iy_uv_before_vowel`: i/ī/u/ū become iy/uv before a vowel instead of y/v (monosyllabic root nouns, and sometimes to avoid three consonants in a row). * `j_retroflex`: j becomes ṣ before t/th (and ṭ word-finally) instead of k. * `h_velar`: h + t/th/d/dh gives g + dh (duh + -tá = dugdhá) instead of ḍh (lih + -tá = līḍhá); word-final h becomes k. * `vedic_l`: ḷ(h) rather than ḍ(h) between vowels. * `final_obstruent` (a string): the word-final consonant of a stem in -j/-ś/-h (which is unpredictably a velar or a retroflex), or a replacement for the usual final in a few exceptional words. Used for the bare stem (empty ending) and before the pada endings -bhyām/-bhis/-bhyas/-su. * `diaspirate`: the root has two aspirates, and the first one shows when the second loses its aspiration (budh > bhut). * `keep_stem_s`: a stem-final s stays s after i/u/ṛ/k etc. (no ruki): the roots pis, niṃs, hiṃs; tresur from tras. * `no_bartholomae`: no Bartholomae's law (for dadh-). * `palatal_to_velar`: c/j (and h with `h_velar`) become velar before the ending, as in the derivative suffix -vāṃs. * `root_noun`: a monosyllabic root noun; i/u lengthen before r/s plus a consonant (gir, pur + -bhis). * `root_han`: the root han, whose h becomes gh before n. * `retroflex_stem_n`: a stem-final n can become ṇ by nasal retroflexion. * `keep_s_before_voiceless`: s stays s, rather than becoming visarga, before k/p/ṣ/s/ś. ]==] local OPTIONS = { accented = true, strip_stem_accent = true, recessive_accent = true, initial_svarita = true, no_final_sandhi = true, iy_uv_before_vowel = true, j_retroflex = true, h_velar = true, vedic_l = true, final_obstruent = true, diaspirate = true, keep_stem_s = true, no_bartholomae = true, palatal_to_velar = true, root_noun = true, root_han = true, retroflex_stem_n = true, keep_s_before_voiceless = true, } --[==[ The working state of one `join`: the stem and ending as the rules change them, the `options`, and the `trace` of the rule ids that fired. ]==] local Junction = {} Junction.__index = Junction function Junction.new(stem, ending, options) for key in pairs(options) do if not OPTIONS[key] then local valid = {} for name in pairs(OPTIONS) do table.insert(valid, name) end table.sort(valid) error(("Unrecognized sandhi option '%s'; the options are %s."):format(key, table.concat(valid, ", "))) end end return setmetatable({stem = stem, ending = ending, options = options, trace = {}}, Junction) end function Junction:stemEndsWith(pattern) return string.match(self.stem, pattern .. "$") ~= nil end function Junction:endingStartsWith(pattern) return string.match(self.ending, "^" .. pattern) ~= nil end function Junction:replaceStem(pattern, replacement) self.stem = (string.gsub(self.stem, pattern, replacement)) end function Junction:replaceEnding(pattern, replacement) self.ending = (string.gsub(self.ending, pattern, replacement)) end --[==[Run the first rule of `rules` that applies, if any.]==] function Junction:applyFirst(rules) for _, rule in ipairs(rules) do if rule.applies(self) then table.insert(self.trace, rule.id) rule.apply(self) return true end end return false end --[==[Run every rule of `rules` that applies, in order, each tested after the ones before it have run.]==] function Junction:applyAll(rules) for _, rule in ipairs(rules) do if rule.applies(self) then table.insert(self.trace, rule.id) rule.apply(self) end end end -- The first consonant aspirated in a diaspirate root (budh > bhud-), if the stem has two voiced stops. local function aspirate_diaspirate(stem) return (string.gsub(stem, "(.*)([gdb])([^gdb]+[gdb]?)$", function(before, consonant, after) return before .. export.aspirate[consonant] .. after end)) end -- Before an ending that starts with a consonant (only the first that applies). CV, C + semivowel and C + nasal are -- left alone. local before_consonant_rules = { { id = "root-noun-vowel-lengthening", whitney = "§392", applies = function(junction) return junction.options.root_noun and junction:stemEndsWith("[iu][/\\]?[rs]") and not junction:stemEndsWith("catu/?r") end, apply = function(junction) junction:replaceStem("([iu][/\\]?)([rs])$", function(vowel, consonant) return export.lengthen[vowel] .. consonant end) end, }, { -- śvan > śunā; cakruḥ > cakṛma. Sequences like 'trv' occur (śatrvos), so such an ending is given as 'os'. id = "vocalize-final-semivowel", applies = function(junction) return junction:stemEndsWith(export.consonant .. "[yrv]") end, apply = function(junction) junction:replaceStem(".$", cons_to_vowel) end, }, { -- no word-initial y- cluster (eti, yanti) id = "initial-y-to-i", applies = function(junction) return junction.stem == "y" end, apply = function(junction) junction.stem = "i" end, }, { -- yuvan > yūnā; iyaja > īje; babhūva > babhūtha. Not after two consonants. id = "iy-uv-to-long-vowel", whitney = "§800d, §800j", applies = function(junction) return (junction:stemEndsWith("[uU][/\\]?v") or junction:stemEndsWith("[iI][/\\]?y")) and junction:endingStartsWith("[^yrl]") end, apply = function(junction) if not junction:stemEndsWith(export.consonant .. export.consonant .. "[iu][/\\]?[yv]") then junction:replaceStem("([iIuU][/\\]?)[yv]$", function(vowel) return export.lengthen[vowel] end) end end, }, { id = "join-diphthong", applies = function(junction) return junction:stemEndsWith("a[/\\]?[vy]") and junction:endingStartsWith("[^yrl]") end, apply = function(junction) junction:replaceStem("(a[/\\]?[vy])$", function(diphthong) return join_diphthong[diphthong] end) end, }, { -- the historical vocalization of PIE syllabic nasals; not before -y (optative), as 'gmy' occurs id = "vocalize-nasal", applies = function(junction) return junction:stemEndsWith(export.consonant .. "[nmY]") end, apply = function(junction) if junction:endingStartsWith("[mv]") then junction:replaceStem(".$", "an") elseif junction:endingStartsWith("[tTDBs]") then junction:replaceStem(".$", "a") end end, }, } -- The verbal endings -s and -t after a consonant (and the nominal -s after a consonant stem, which only serves to -- lengthen the vowel of -ir/-ur stems). local drop_ending_rule = { id = "drop-s-t-after-consonant", whitney = "§555", applies = function(junction) return junction:stemEndsWith("[" .. export.consonant_list .. "M]") and string.match(junction.ending, "^[st]$") ~= nil end, apply = function(junction) junction.ending = "" end, } -- With no ending left (only the first that applies). local zero_ending_rules = { { id = "final-m-to-n", applies = function(junction) return junction:stemEndsWith("[mM]") end, apply = function(junction) junction:replaceStem(".$", "n") end, }, { id = "diaspirate-final", applies = function(junction) return junction.options.diaspirate end, apply = function(junction) junction.stem = aspirate_diaspirate(junction.stem) end, }, } -- A vowel-final stem before a vowel-initial ending (only the first that applies). The stem's last vowel is in -- `junction.last` (with its accent in `junction.last_accent`) and the ending's first vowel in `junction.first`; both -- have been taken off the stem and the ending. local vowel_rules = { { id = "glide-before-vowel", applies = function(junction) return junction.options.iy_uv_before_vowel and string.match(junction.last, "[iIuU]") ~= nil end, apply = function(junction) junction.stem = junction.stem .. insert_glide[junction.last .. junction.last_accent] junction.ending = junction.first .. junction.ending end, }, { id = "split-diphthong", applies = function(junction) return export.split_diphthong[junction.last] ~= nil end, apply = function(junction) junction.stem = junction.stem .. export.split_diphthong[junction.last .. junction.last_accent] junction.ending = junction.first .. junction.ending end, }, { id = "homorganic-vowels", applies = function(junction) return string.lower(junction.last) == string.lower(junction.first) end, apply = function(junction) junction.ending = string.upper(junction.first) .. junction.last_accent .. junction.ending end, }, { id = "a-plus-vowel", applies = function(junction) return string.lower(junction.last) == "a" end, apply = function(junction) junction.ending = export.up_one_grade[junction.first .. junction.last_accent] .. junction.ending end, }, { -- a stem-final udātta becomes an ending-initial svarita; dyu- > divā id = "vowel-to-semivowel", applies = function(junction) return export.vowel_to_cons[junction.last] ~= nil end, apply = function(junction) junction:replaceStem("L$", "q") junction:replaceStem("Lh$", "Q") junction.stem = junction.stem .. export.vowel_to_cons[junction.last] junction.ending = junction.first .. (junction.last_accent == "/" and "\\" or "") .. junction.ending if string.match(junction.stem, "^" .. export.consonant .. "*yv$") then junction:replaceStem("..$", "iv") end end, }, } -- Before the pada endings -bhyām, -bhis, -bhyas and -su, the stem ends as a word would (first the cluster, then the -- final; only the first rule of each that applies). local pada_cluster_rules = { { id = "pada-kz-to-w", applies = function(junction) return junction:stemEndsWith("kz") end, apply = function(junction) junction:replaceStem("..$", "w") end, }, { id = "pada-r-plus-stop-kept", whitney = "§150b", applies = function(junction) return junction:stemEndsWith(export.vowel_with_accent .. "r[" .. export.stop_list .. "SzhL]") end, apply = function() end, }, { id = "pada-cluster-simplification", applies = function(junction) return junction:stemEndsWith(export.consonant .. export.consonant) end, apply = function(junction) junction:replaceStem(first_of_word_final_cluster, function(cluster) return string.sub(cluster, 1, 1) end) end, }, } local pada_final_rules = { { id = "pada-given-final", applies = function(junction) return junction:stemEndsWith("[jSh]") or junction.options.final_obstruent end, apply = function(junction) if not junction.options.final_obstruent then error(("The stem '%s' needs the option final_obstruent before the ending '%s'."):format(junction.stem, junction.ending)) end junction:replaceStem(".$", junction.options.final_obstruent) end, }, { id = "pada-final-stop", applies = function(junction) return junction:stemEndsWith("[KgGcCJWqQTdDPbBz]") end, apply = function(junction) junction:replaceStem(".$", export.to_final) end, }, { id = "pada-m-to-n", applies = function(junction) return junction:stemEndsWith("m") end, apply = function(junction) junction:replaceStem(".$", "n") end, }, { -- the loss of z with compensatory lengthening before a voiced consonant (FIXME: what about médha- < *mázdha-?) id = "pada-as-to-o", applies = function(junction) return junction:stemEndsWith("[aA][/\\]?s") and junction:endingStartsWith("[rgGdDbByvjJqQlLhnm]") end, apply = function(junction) junction:replaceStem("([aA])([/\\]?)s$", function(vowel, accent) return (vowel == "a" and "o" or "A") .. accent end) end, }, { id = "pada-final-s", applies = function(junction) return junction:stemEndsWith("s") end, apply = function(junction) if junction:endingStartsWith("[kKpPzsS]") then junction:replaceStem(".$", junction.options.keep_s_before_voiceless and "s" or "H") elseif junction:endingStartsWith("[gGjJqQdDbByvlLhnm]") then junction:replaceStem(".$", "r") end end, }, } -- Before any other consonant ending, first this ... local s_aorist_rule = { id = "s-aorist-s-loss", whitney = "§881", applies = function(junction) return (junction:stemEndsWith("[^rnm]") and junction:endingStartsWith("s[tT]")) or junction:endingStartsWith("sD") end, apply = function(junction) junction:replaceEnding("^s", "") end, } -- ... then these (only the first that applies) ... local cluster_preparation_rules = { { -- diaspirate verbs before -dhve/-dhvam: Janda & Joseph (2002), "Sanskrit as she has been misanalyzed", 28-29 id = "diaspirate-before-dhv", applies = function(junction) return junction.options.diaspirate and junction:endingStartsWith("Dv") end, apply = function(junction) junction.stem = aspirate_diaspirate(junction.stem) end, }, { id = "simplify-jj-sc", applies = function(junction) return (junction:stemEndsWith("jj") or junction:stemEndsWith("Sc")) and junction:endingStartsWith("[tTdDs]") end, apply = function(junction) junction:replaceStem(".$", "") end, }, } -- ... then these (only the first that applies) ... local cluster_rules = { { id = "kz-before-consonant", applies = function(junction) return junction:stemEndsWith("kz") end, apply = function(junction) if junction:endingStartsWith("s") then junction:replaceStem("..$", "k") elseif junction:endingStartsWith("[tT]") then junction:replaceStem("Nkz$", "Mz") junction:replaceStem("kz$", "z") elseif junction:endingStartsWith("[dD]") then junction:replaceStem("Nkz$", "Rq") junction:replaceStem("kz$", "q") end end, }, { id = "c-jh-to-k", applies = function(junction) return junction:stemEndsWith("[cJ]") and junction:endingStartsWith("[tTdDs]") end, apply = function(junction) junction:replaceStem("Y.$", "Nk") junction:replaceStem("[cJ]$", "k") end, }, { id = "palatal-before-s", applies = function(junction) return junction:stemEndsWith("[jCSzh]") and junction:endingStartsWith("s") end, apply = function(junction) junction:replaceStem("[YM].$", "Nk") junction:replaceStem("[jCSzh]$", "k") end, }, { id = "palatal-before-dental", applies = function(junction) return junction:stemEndsWith("[jCSz]") and junction:endingStartsWith("[tTdD]") end, apply = function(junction) if junction.options.j_retroflex or junction.options.final_obstruent == "w" or junction:stemEndsWith("[CSz]") then if junction:endingStartsWith("[tT]") then junction:replaceStem("Y[jC]$", "Mz") junction:replaceStem("[jCS]$", "z") else junction:replaceStem("[YM].$", "Rq") junction:replaceStem("[jCSz]$", "q") end else junction:replaceStem("Yj$", "Nk") junction:replaceStem("j$", "k") end end, }, { -- vah (sometimes also sah) > voḍh-; {a, i, u}h + {t, th, d, dh} > {ā, ī, ū}ḍh: Bartholomae's law with -- retroflexion and compensatory lengthening id = "h-before-dental", whitney = "§224b", applies = function(junction) return junction:stemEndsWith("h") and junction:endingStartsWith("[tTdD]") end, apply = function(junction) if junction.options.h_velar then junction:replaceStem("h$", "g") junction:replaceEnding("^.", "D") return end if junction:stemEndsWith("va/?h") then junction:replaceStem("a(/?)h$", "o%1") else junction:replaceStem("([aiu]?)([/\\]?)h$", function(vowel, accent) return (export.lengthen[vowel] or "") .. accent end) junction:replaceStem("M$", "R") end if junction.options.vedic_l and junction:endingStartsWith("." .. export.vowel) then junction:replaceEnding("^.", "Lh") else junction:replaceEnding("^.", "Q") end end, }, { id = "palatal-to-velar", whitney = "§216j", applies = function(junction) return junction.options.palatal_to_velar and ((junction:stemEndsWith("[cj]") and not junction.options.j_retroflex) or (junction:stemEndsWith("h") and junction.options.h_velar)) end, apply = function(junction) junction:replaceStem(".$", to_velar) junction:replaceStem("[YM](.)$", "N%1") end, }, { id = "as-before-dhi", whitney = "§166", applies = function(junction) return junction:stemEndsWith("As") and string.match(junction.ending, "^Di/?$") ~= nil end, apply = function(junction) junction:replaceStem("s$", "") end, }, { -- Whitney's reading of dhv from s + dhv as ddhv; sometimes also in nouns before -bhis etc. id = "s-before-dh-bh", whitney = "§612, §166, §232", applies = function(junction) return junction:stemEndsWith(".s") and junction:endingStartsWith("[DB]") end, apply = function(junction) junction:replaceStem("Ms$", "nd") junction:replaceStem("s$", "d") end, }, { -- the (largely theoretical) middle of asti id = "lone-s-dropped", applies = function(junction) return junction.stem == "s" and junction:endingStartsWith("[sD]") end, apply = function(junction) junction.stem = "" end, }, { -- m > ṃ before h, ś, ṣ, s, homorganic before stops, n before m/v id = "m-before-consonant", whitney = "§212", applies = function(junction) return junction:stemEndsWith("m") end, apply = function(junction) if junction:endingStartsWith("[kKgGcCjJwWqQtTdDSzsh]") then junction:replaceStem("m$", export.homorganic_nasal[string.sub(junction.ending, 1, 1)]) elseif junction:endingStartsWith("[mv]") then junction:replaceStem("m$", "n") end end, }, { id = "n-before-sibilant", applies = function(junction) return junction:stemEndsWith("n") end, apply = function(junction) if junction:endingStartsWith("[Szs]") then junction:replaceStem(".$", "M") end end, }, { id = "aspirate-before-consonant", whitney = "§153", applies = function(junction) return junction:stemEndsWith("[KGWQTDPB]") and junction:endingStartsWith("[^NYRnmyrlv]") end, apply = function(junction) -- Bartholomae's law if junction:stemEndsWith("[GQDB]") and junction:endingStartsWith("[tT]") and not junction.options.no_bartholomae then junction:replaceEnding("^.", "D") end junction:replaceStem(".$", export.deaspirate) end, }, } -- ... and this last. local devoicing_rule = { id = "devoice-before-voiceless", applies = function(junction) return junction:stemEndsWith("[gqbd]") and junction:endingStartsWith("[kKcCwWtTpPSzs]") end, apply = function(junction) junction:replaceStem(".$", export.to_final) end, } -- After every consonant ending, pada or not (only the first that applies), then the diaspirate rule. local voicing_rules = { { id = "voice-before-voiced-stop", applies = function(junction) return junction:stemEndsWith("[kwp]") and junction:endingStartsWith("[gGjJqQdDbB]") end, apply = function(junction) junction:replaceStem(".$", export.to_voiced) end, }, { id = "t-before-voiced-stop", applies = function(junction) return junction:stemEndsWith("t") and junction:endingStartsWith("[gGdDbB]") end, apply = function(junction) junction:replaceStem(".$", "d") end, }, } -- The aspiration throwback of a diaspirate root, also before nominal endings in bh-. local diaspirate_rule = { id = "diaspirate-throwback", applies = function(junction) return junction.options.diaspirate and junction:stemEndsWith("[^GDBh]") and junction:endingStartsWith("[^QD]") end, apply = function(junction) junction.stem = aspirate_diaspirate(junction.stem) end, } local function run_cluster(junction) junction:replaceStem("L$", "q") junction:replaceStem("Lh$", "Q") if junction:endingStartsWith("B[iy]") or string.match(junction.ending, "^su" .. export.accent .. "?$") then -- the pada endings -bhyām, -bhis, -bhyas, -su (Whitney §111a) junction:applyFirst(pada_cluster_rules) junction:applyFirst(pada_final_rules) else junction:applyAll({s_aorist_rule}) junction:applyFirst(cluster_preparation_rules) junction:applyFirst(cluster_rules) junction:applyAll({devoicing_rule}) end junction:applyFirst(voicing_rules) junction:applyAll({diaspirate_rule}) end -- The junction itself, by what the ending starts with (only the first that applies; the vowel case is handled first). local junction_rules = { { -- the middle s-aorist second plural id = "s-dh-after-vowel", applies = function(junction) return junction:stemEndsWith(export.vowel_with_accent .. "M?") and junction:endingStartsWith("sD") end, apply = function(junction) if junction:stemEndsWith("[iIeEfFxuUoO][/\\]?") then junction:replaceEnding("^..", "Q") else junction:replaceEnding("^..", "D") junction:replaceStem("M$", "n") end end, }, { id = "n-after-palatal", applies = function(junction) return junction:stemEndsWith("[cj]") and junction:endingStartsWith("n") end, apply = function(junction) junction:replaceEnding("^.", "Y") end, }, { id = "han-before-n", applies = function(junction) return junction.options.root_han and junction:endingStartsWith("n") end, apply = function(junction) junction:replaceStem("h$", "G") end, }, { id = "consonant-cluster", applies = function(junction) return junction:stemEndsWith(export.consonant) and junction:endingStartsWith(export.consonant) end, apply = run_cluster, }, } -- RUKI, the spread of retroflexion into a dental cluster, and nasal retroflexion (nati), in this order. local retroflexion_rules = { { id = "ruki-ending-s", applies = function(junction) return junction:stemEndsWith("[iIeEfFxuUoOrk][/\\]?[HM]?") end, apply = function(junction) junction:replaceEnding("^([HM]?)s([^rfF])", "%1z%2") junction:replaceEnding("^[HM]?z[tTdDns]*", function(cluster) return (string.gsub(cluster, ".", dental_to_retroflex)) end) end, }, { id = "ruki-stem-s", applies = function(junction) return junction:stemEndsWith("[iIeEfFxuUoOrk][/\\]?[HM]?s") and junction:endingStartsWith("[^rfF]") and not junction.options.keep_stem_s end, apply = function(junction) junction:replaceStem("s$", "z") end, }, { id = "retroflex-dental-cluster", applies = function(junction) return junction:stemEndsWith("[zqwR]") end, apply = function(junction) junction:replaceEnding("^[tTdDns]*", function(cluster) return (string.gsub(cluster, ".", dental_to_retroflex)) end) end, }, { id = "nati-ending", applies = function(junction) return junction:stemEndsWith("[zrfF]" .. nati_blockers) and not (junction.options.root_han and junction:stemEndsWith("G") and junction:endingStartsWith("n")) end, apply = function(junction) junction:replaceEnding("^(" .. nati_blockers .. ")n([aAiIeEfFxuUoOynmv])", "%1R%2") end, }, { -- not by default: compounds in -na with the trigger in the first member keep their n id = "nati-stem", applies = function(junction) return junction.options.retroflex_stem_n and junction:stemEndsWith("[zrfF]" .. nati_blockers .. "n") and junction:endingStartsWith("[aAiIuUxeEoOnmyv]") end, apply = function(junction) junction:replaceStem("n$", "R") end, }, { -- an unblocked trigger inside the ending itself id = "nati-within-ending", applies = function(junction) return string.find(junction.ending, "[zrfF]" .. nati_blockers .. "n[aAiIuUxeEoOnmyv]") ~= nil end, apply = function(junction) junction:replaceEnding("([zrfF]" .. nati_blockers .. ")n([aAiIuUxeEoOnmyv])", "%1R%2") end, }, } --[==[ The stem and ending joined with their accents combined: with `recessive_accent` the accent moves to the first syllable (or, for a suffix, is dropped); otherwise an accented ending takes the accent from a stem accented on its last syllable. Accent does not yet move between stem and ending in other ways. ]==] function Junction:combineAccent() local stem, ending, options = self.stem, self.ending, self.options if options.accented then if string.match(stem, "^%-") and options.recessive_accent then table.insert(self.trace, "recessive-accent-suffix") stem = string.gsub(stem, export.accent, "") ending = string.gsub(ending, export.accent, "") elseif options.recessive_accent and not string.match(stem, "^" .. export.consonant .. "*" .. export.vowel .. "\\") then table.insert(self.trace, "recessive-accent") local combined = string.gsub(stem .. ending, export.accent, "") if options.initial_svarita and string.match(combined, "^" .. export.consonant .. "+[vy]" .. export.vowel) then return (string.gsub(combined, "^(" .. export.consonant .. "+" .. export.vowel .. ")", "%1\\")) end return (string.gsub(combined, "^(" .. export.consonant .. "*" .. export.vowel .. ")", "%1/")) elseif options.strip_stem_accent or (string.match(stem, export.accent .. export.consonant .. "*$") and string.match(ending, export.accent)) then table.insert(self.trace, "stem-accent-yields") stem = string.gsub(stem, export.accent, "") end end return stem .. ending end --[==[ `text` in absolute final position. `final_obstruent`, `j_retroflex` and `h_velar` decide the outcome of a final j/ś/h (spáś- > spáṭ, but náś- > nák); with `final_obstruent` it replaces whatever consonant ends the word. ]==] local function absolute_final(text, final_obstruent, j_retroflex, h_velar) local function ends_with(pattern) return string.match(text, pattern .. "$") ~= nil end local function replace(pattern, replacement) text = (string.gsub(text, pattern, replacement)) end if ends_with("kz") then replace("..$", "w") elseif ends_with("Ms") then replace("..$", "n") elseif ends_with(export.vowel_with_accent .. "r[" .. export.stop_list .. "SzhL]") then -- a final r + stop stays (Whitney §150b; the endings -s/-t after a consonant are already gone) elseif ends_with(export.consonant .. export.consonant) then replace(first_of_word_final_cluster, function(cluster) return string.sub(cluster, 1, 1) end) end -- ḷh, v and y don't occur finally, and are not handled. if final_obstruent then replace(".$", final_obstruent) elseif ends_with("[kwtpNRnmlaAiIuUeEoOfFxXH][/\\]?") then -- already a possible final elseif ends_with("M") then replace(".$", "m") elseif ends_with("[sr]") then replace(".$", "H") elseif ends_with("[KgGcCJWqQTdDPbBYzL]") then replace(".$", export.to_final) elseif ends_with("[jhS]") then if j_retroflex then replace("j$", "w") elseif h_velar then replace("h$", "k") else replace(".$", {['j'] = 'k', ['h'] = 'w', ['S'] = 'w'}) end end return text end function Junction:run() local options = self.options if self:endingStartsWith(export.consonant) then self:applyFirst(before_consonant_rules) end self:applyAll({drop_ending_rule}) if self.ending == "" then self:applyFirst(zero_ending_rules) return absolute_final(self:combineAccent(), options.final_obstruent, options.j_retroflex, options.h_velar) elseif self:endingStartsWith(export.vowel) then if self:stemEndsWith(export.vowel_with_accent) then local stem, last, last_accent = string.match(self.stem, "^(.*)(" .. export.vowel .. ")(" .. export.accent .. "?)$") self.stem, self.last, self.last_accent = stem, last, last_accent self.first, self.ending = string.match(self.ending, "^(.)(.*)$") self:applyFirst(vowel_rules) end else self:applyFirst(junction_rules) end self:applyAll(retroflexion_rules) local combined = self:combineAccent() if options.no_final_sandhi then return combined end return absolute_final(combined) end --[==[ `stem` and `ending` (SLP1) joined with internal sandhi and their accents combined, then put in absolute final position unless `options.no_final_sandhi`. `options` is a table of the options described above `OPTIONS`, or {nil}. ]==] function export.join(stem, ending, options) return Junction.new(stem, ending, options or {}):run() end --[==[Like `join`, and also returns the list of the ids of the rules that fired, in order (for tests).]==] function export.join_traced(stem, ending, options) local junction = Junction.new(stem, ending, options or {}) local result = junction:run() return result, junction.trace end return export h1lysyd1q9gz59ftalko89ov2wk684j 2571620 2571613 2026-10-18T12:38:28Z Hiyuune 50834 Restored revision 2565771 by [[Special:Contributions/Hiyuune|Hiyuune]] ([[en:w:User:BrandonXLF/Restorer|Restorer]]) 2571620 Scribunto text/plain local export = {} -- Common regex patterns: export.consonant_list = "kKgGNcCjJYwWqQRtTdDnpPbBmyrlLvSzsh" export.consonant = "[" .. export.consonant_list .. "]" export.accent = "[/\\]" export.vowel_list = "aAiIuUfFxXeEoO" export.vowel = "[" .. export.vowel_list .. "]" export.vowel_with_accent = export.vowel .. export.accent .. "?" export.stop_list = "kKgGcCjJwWqQtTdDpPbB" export.stop = "[" .. export.stop_list .. "]" -- Abbreviated helper functions: local match = string.match local gsub = string.gsub -- All we need for SLP1! Much faster than mw.ustring.gsub local sub = string.sub local lower = string.lower local upper = string.upper --[=[Detects whether a specified text ends in a given pattern. Parameters: text (String): the text to be tested pattern (String): the query pattern to be tested on the end of the text. Return: Boolean ]=] local function ends_with(text, pattern) return match(text, pattern .. "$") end --[=[Detects whether a specified text begins in a given pattern. Parameters: text (String): the text to be tested pattern (String): the query pattern to be tested on the beginning of the text. Return: Boolean ]=] local function starts_with(text, pattern) return match(text, "^" .. pattern) end -- Common transformation types: --[=[ Increase a vowel one grade (guṇation). It is possible that this should include provisions for guṇation of sonorants into CV configurations (e.g. i/ī -> ya -> yā, etc.). Perhaps will need to be updated. ]=] export.up_one_grade = { ['a'] = 'A', ['A'] = 'A', ['a/'] = 'A/', ['A/'] = 'A/', ['a\\'] = 'A\\', ['A\\'] = 'A\\', ['i'] = 'e', ['I'] = 'e', ['i/'] = 'e/', ['I/'] = 'e/', ['i\\'] = 'e\\', ['I\\'] = 'e\\', ['u'] = 'o', ['U'] = 'o', ['u/'] = 'o/', ['U/'] = 'o/', ['u\\'] = 'o\\', ['U\\'] = 'o\\', ['e'] = 'E', ['E'] = 'E', ['e/'] = 'E/', ['E/'] = 'E/', ['e\\'] = 'E\\', ['E\\'] = 'E\\', ['o'] = 'O', ['O'] = 'O', ['o/'] = 'O/', ['O/'] = 'O/', ['o\\'] = 'O\\', ['O\\'] = 'O\\', ['f'] = 'ar', ['F'] = 'ar', ['f/'] = 'a/r', ['F/'] = 'a/r', ['f\\'] = 'a\\r', ['F\\'] = 'a\\r', ['x'] = 'al', ['x/'] = 'a/l', ['x\\'] = 'a\\l', } -- Lengthen a vowel export.lengthen = { ['a'] = 'A', ['A'] = 'A', ['a/'] = 'A/', ['A/'] = 'A/', ['a\\'] = 'A\\', ['A\\'] = 'A\\', ['i'] = 'I', ['I'] = 'I', ['i/'] = 'I/', ['I/'] = 'I/', ['i\\'] = 'I\\', ['I\\'] = 'I\\', ['u'] = 'U', ['U'] = 'U', ['u/'] = 'U/', ['U/'] = 'U/', ['u\\'] = 'U\\', ['U\\'] = 'U\\', ['f'] = 'F', ['F'] = 'F', ['f/'] = 'F/', ['F/'] = 'F/', ['f\\'] = 'F\\', ['F\\'] = 'F\\', } -- Decrease vowel one grade (reverse of above) export.shorten = { ['a'] = 'a', ['A'] = 'a', ['a/'] = 'a/', ['A/'] = 'a/', ['a\\'] = 'a\\', ['A\\'] = 'a\\', ['i'] = 'i', ['I'] = 'i', ['i/'] = 'i/', ['I/'] = 'i/', ['i\\'] = 'i\\', ['I\\'] = 'i\\', ['u'] = 'u', ['U'] = 'u', ['u/'] = 'u/', ['U/'] = 'u/', ['u\\'] = 'u\\', ['U\\'] = 'u\\', ['f'] = 'f', ['F'] = 'f', ['f/'] = 'f/', ['F/'] = 'f/', ['f\\'] = 'f\\', ['F\\'] = 'f\\', } -- Convert a monosegmental (or at least monoliteral) diphthong into a/ā + glide. export.split_diphthong = { ['e'] = 'ay', ['e/'] = 'a/y', ['e\\'] = 'a\\y', ['E'] = 'Ay', ['E/'] = 'A/y', ['E\\'] = 'A\\y', ['o'] = 'av', ['o/'] = 'a/v', ['o\\'] = 'a\\v', ['O'] = 'Av', ['O/'] = 'A/v', ['O\\'] = 'A\\v', } -- reverse of above local join_diphthong = { ['ay'] = 'e', ['a/y'] = 'e/', ['a\\y'] = 'e\\', ['Ay'] = 'E', ['A/y'] = 'E/', ['A\\y'] = 'E\\', ['av'] = 'o', ['a/v'] = 'o/', ['a\\v'] = 'o\\', ['Av'] = 'O', ['A/v'] = 'O/', ['A\\v'] = 'O\\', } -- Convert a syllabic sonorant to its associated consonantal form. export.vowel_to_cons = { ['i'] = 'y', ['I'] = 'y', ['u'] = 'v', ['U'] = 'v', ['f'] = 'r', ['F'] = 'r', ['x'] = 'l', ['X'] = 'l', } local cons_to_vowel = { ['y'] = 'i', ['r'] = 'f', ['v'] = 'u', ['l'] = 'x' } local to_velar = { ['c'] = 'k', ['j'] = 'g', ['h'] = 'G' } -- Add a homorganic glide to a vowel local insert_glide = { ['i'] = 'iy', ['I'] = 'iy', ['i/'] = 'i/y', ['I/'] = 'i/y', ['i\\'] = 'i\\y', ['I\\'] = 'i\\y', ['u'] = 'uv', ['U'] = 'uv', ['u/'] = 'u/v', ['U/'] = 'u/v', ['u\\'] = 'u\\v', ['U\\'] = 'u\\v', } --[=[Convert all unambiguous stops to their absolute final value. The equivalent values (e.g. k = k) may be redundant given the implementation of absolute_final and internal_sandhi below. ]=] export.to_final = { ['k'] = 'k', ['K'] = 'k', ['g'] = 'k', ['G'] = 'k', ['c'] = 'k', ['C'] = 'w', ['J'] = 'w', -- value for 'J' is theoretical ['w'] = 'w', ['W'] = 'w', ['q'] = 'w', ['Q'] = 'w', ['L'] = 'w', ['t'] = 't', ['T'] = 't', ['d'] = 't', ['D'] = 't', ['p'] = 'p', ['P'] = 'p', ['b'] = 'p', ['B'] = 'p', ['Y'] = 'N', ['z'] = 'w', } -- Convert dental to retroflex local function dental_to_retroflex(str) local changes = { ['t'] = 'w', ['T'] = 'W', ['d'] = 'q', ['D'] = 'Q', ['n'] = 'R', ['s'] = 'z', } return gsub(str, '.', changes) end -- Remove aspiration export.deaspirate = { ['K'] = 'k', ['G'] = 'g', ['C'] = 'c', ['J'] = 'j', ['W'] = 'w', ['Q'] = 'q', ['T'] = 't', ['D'] = 'd', ['P'] = 'p', ['B'] = 'b', } export.aspirate = { ['g'] = 'G', ['j'] = 'J', ['q'] = 'Q', ['d'] = 'D', ['b'] = 'B' } export.to_voiced = { ['k'] = 'g', ['c'] = 'j', ['w'] = 'q', ['t'] = 'd', ['p'] = 'b' } export.homorganic_nasal = { ['k'] = 'N', ['K'] = 'N', ['g'] = 'N', ['G'] = 'N', ['c'] = 'Y', ['C'] = 'Y', ['j'] = 'Y', ['J'] = 'Y', ['w'] = 'R', ['W'] = 'R', ['q'] = 'R', ['Q'] = 'R', ['t'] = 'n', ['T'] = 'n', ['d'] = 'n', ['D'] = 'n', ['p'] = 'm', ['P'] = 'm', ['b'] = 'm', ['B'] = 'm', ['r'] = 'M', ['l'] = 'M', -- or 'l~' ['S'] = 'M', ['z'] = 'M', ['s'] = 'M', ['h'] = 'M' } --[=[Detects whether a word is monosyllabic. This function does not apply sandhi to determing whether a potential phonemic form like /dā́rv/ would be syllabified to [dā́ru]. This might need to be changed. Parameters: text (String): the text to be checked for monosyllabicity Return: Boolean ]=] function export.is_monosyllabic(text) return match(text, "^" .. export.consonant .. "*" .. export.vowel_with_accent .. "[HM~]?" .. export.consonant .. "*$") end --[=[Transforms a word to its absolute final sandhi form. Parameters: text (String): the text to be converted to final sandhi position ambig_final (String): an indication of what outcome j/ś/h should have as these will unpredictably produce either a retroflex or a velar stop in final position (e.g. spáś- > spáṭ 'spy' vs. náś- > nák 'night'). Required for j/ś/h-final strings. Return: String ]=] local function absolute_final(text, ambig_final, j_to_z, h_to_g) if ends_with(text, "kz") then -- final -kṣ > ṭ text = gsub(text, "..$", "w") elseif ends_with(text, "Ms") then text = gsub(text, "..$", "n") -- final r + stop is allowed in stem, see Whitney §150b (endings -s/-t after consonant have been eliminated previously) elseif ends_with(text, export.vowel_with_accent .. "r[" .. export.stop_list .. "SzhL]") then -- do nothing elseif ends_with(text, export.consonant .. export.consonant) then -- at least 2 consonants -- Take the first of the cluster. text = gsub(text, "(" .. export.consonant .. "+)$", function(cluster) return sub(cluster, 1, 1) end) end -- ḷh, v, and y are not handled as they should not appear finally. Perhaps wrong. if ambig_final then -- in case of -j/ś/h, but also to override the normal value in a few exceptional cases text = gsub(text, ".$", ambig_final) elseif ends_with(text, "[kwtpNRnmlaAiIuUeEoOfFxXH][/\\]?") then -- do nothing elseif ends_with(text, "M") then -- just in case, ṃ > m text = gsub(text, ".$", "m") elseif ends_with(text, "[sr]") then -- convert to final visarga text = gsub(text, ".$", "H") elseif ends_with(text, "[KgGcCJWqQTdDPbBYzL]") then -- Handle final stops. text = gsub(text, ".$", export.to_final) elseif ends_with(text, "[jhS]") then -- see also ambig_final above if j_to_z then text = gsub(text, "j$", "w") elseif h_to_g then text = gsub(text, "h$", "k") else text = gsub(text, ".$", {['j'] = 'k', ['h'] = 'w', ['S'] = 'w'}) -- most common values end end return text end --[=[Applying retroflexion to a stem and ending without joining them. This include RUKI, ṣ-cluster harmony, and nasal retroflexions. Parameters: stem (String): the stem to receive an ending ending (String): the ending to be affixed Return: String (stem), String (ending) ]=] function export.retroflexion(stem, ending, no_retroflex_s, han, stem_final_n) -- Does the stem end in a RUKI environment? if ends_with(stem, "[iIeEfFxuUoOrk][/\\]?[HM]?") then ending = gsub(ending, "^([HM]?)s([^rfF])", "%1z%2") -- Convert ending-initial s > ṣ not followed by [rṛṝ]. ending = gsub(ending, "^[HM]?z[tTdDns]*", dental_to_retroflex) end -- Does the stem end in a RUKI environment followed by s and the ending not start with [rṛṝ]? if ends_with(stem, "[iIeEfFxuUoOrk][/\\]?[HM]?s") and starts_with(ending, "[^rfF]") and not no_retroflex_s == true then stem = gsub(stem, "s$", "z") -- Convert stem-final s > ṣ end if ends_with(stem, "[zqwR]") then -- Does the stem end in a retroflex? -- Convert an ending-initial dental (cluster) to retroflex ending = gsub(ending, "^[tTdDns]*", dental_to_retroflex) end -- Does the stem contain a nasal harmony trigger without intervening blockers? if ends_with(stem, "[zrfF][^cCjJYwWqQRtTdDnSslL]*") and not (han and ends_with(stem, "G") and starts_with(ending, "n")) then -- Convert all retroflexable n > ṇ in the ending ending = gsub(ending, "^([^cCjJYwWqQRtTdDnSslL]*)n([aAiIeEfFxuUoOynmv])", "%1R%2") end -- Does the stem contain a nasal harmony trigger without intervening blockers and stem-final n? -- (Compounds ending in -na (with nasal harmony trigger in first member) shouldn't have there 'n' retroflexed) if stem_final_n and ends_with(stem, "[zrfF][^cCjJYwWqQRtTdDnSslL]*n") and starts_with(ending, "[aAiIuUxeEoOnmyv]") then stem = gsub(stem, "n$", "R") -- Convert stem-final n > ṇ end -- For safety, does the ending contain an unblocked nasal harmony trigger and unretroflexed n? ending = gsub(ending, "([zrfF][^cCjJYwWqQRtTdDnSslL]*)n([aAiIuUxeEoOnmyv])", "%1R%2") return stem, ending end --[=[Combine a stem and ending while modifiying the accentuation. This does not currently account for mobility of accent between the stem and ending. Parameters: stem (String): the stem to receive an ending ending (String): the ending to be affixed has_accent (Boolean): whether the word has an accent to be modified at all accent_override (Boolean): whether to strip the stem of accent recessive (Boolean): whether the accent must be moved to the leftmost vowel (in the vocative) voc_svar (Boolean): to indicate that the first syllable should get svarita in the vocative Return: String ]=] local function combine_accent(stem, ending, has_accent, accent_override, recessive, voc_svar) if has_accent then if starts_with(stem, "-") and recessive then -- suffix in vocative case stem = gsub(stem, export.accent, "") ending = gsub(ending, export.accent, "") -- vocative; no change if first syllable has svarita elseif recessive and not starts_with(stem, export.consonant .. "*" .. export.vowel .. "\\") then local combined = stem .. ending -- combine word combined = gsub(combined, export.accent, "") -- remove any accent if voc_svar and match(combined, "^" .. export.consonant .. "+[vy]" .. export.vowel) then combined = gsub(combined, "^(" .. export.consonant .. "+" .. export.vowel .. ")", "%1\\") -- svarita on first vowel else combined = gsub(combined, "^(" .. export.consonant .. "*" .. export.vowel .. ")", "%1/") -- udatta on first vowel end return combined elseif accent_override or (ends_with(stem, export.accent .. export.consonant .. "*") and match(ending, export.accent)) then stem = gsub(stem, export.accent, "") -- remove all accents from stem ending = gsub(ending, "\\", "/") -- convert svarita to udatta on ending end end return stem .. ending end local function aspirate_diaspirate(stem) stem = gsub(stem, "(.*)([gdb])([^gdb]+[gdb]?)$", function(pre, cons, post) return (pre .. export.aspirate[cons]) .. post end) return stem end --[=[Return a word-stem combined with a given ending while handling internal sandhi and accentuation. Please see the implementation for details. Parameters: input_table (Table): This table is expected to contain the items: stem (String): the stem to receive an ending ending (String): the ending to be affixed has_accent (Boolean): whether the word has an accent to be modified no_syncope (Boolean): whether ī/ū should be changed to iy/uv before vowels (instead of y/v); for monosyllabic root nouns + (not always) their compounds, and sometimes to avoid 3 consonants in a row accent_override (Boolean): whether to strip the stem of accent recessive (Boolean): whether the accent must be moved to the leftmost vowel (e.g. in the vocative) j_to_z (Boolean): whether to convert j > ṣ before {t, th} instead of j > k h_to_g (Boolean): whether to convert h > g before {t, th, d, dh} (duh + -tá = dugdhá) instead of h + t > ḍh (lih + -tá = līḍhá) retroflex_l (Boolean): produces ḷ(h) instead of ḍ(h) intervocalically (Vedic variant) non_final (Boolean): if true, will not apply word-final sandhi (i.e. convert s to visarga) Return: String ]=] function export.internal_sandhi(input_table) local stem, ending = input_table.stem, input_table.ending local last -- last segment of the stem local acc -- the accent local first -- the first segment of the ending local combined -- the combined form -- explicitly ignored are CV, C + semivowel, or C + nasal if starts_with(ending, export.consonant) then -- {i, u} > {ī, ū} /__[rs]C if stem is monosyllabic (e.g. gir, pur + ā-śis) if ends_with(stem, "[iu][/\\]?[rs]") and input_table.root and not ends_with(stem, "catu/?r") then stem = gsub(stem, "([iu][/\\]?)([rs])$", function(vow, cons) return export.lengthen[vow] .. cons end) -- consonant + y/r/v + consonant from ending -- note that sequences like 'trv' can occur, e.g. śatrvos, gen.dual of śatru, so the case ending should be given as 'os' there, not 'vos' elseif ends_with(stem, export.consonant .. "[yrv]") then -- e.g. śvan > śunā / cakruḥ > cakṛma stem = gsub(stem, ".$", cons_to_vowel) -- no word-initial clusters with y-, for verb 'eti, yanti' elseif stem == "y" then stem = "i" -- e.g. yuvan > yūnā / iyaja > īje (Whitney §800j) / babhūva > babhūtha (§800d) elseif (ends_with(stem, "[uU][/\\]?v") or ends_with(stem, "[iI][/\\]?y") ) and starts_with(ending, "[^yrl]") then if ends_with(stem, export.consonant..export.consonant.."[iu][/\\]?[yv]") then -- do nothing else stem = gsub(stem, "([iIuU][/\\]?)[yv]$", function(vow) return export.lengthen[vow] end) end elseif ends_with(stem, "a[/\\]?[vy]") and starts_with(ending, "[^yrl]") then stem = gsub(stem, "(a[/\\]?[vy])$", function(diph) return join_diphthong[diph] end) -- historical vocalisation of PIE nasal vowels; omitting endings starting with 'y' (optative) as 'gmy' actually occurs elseif ends_with(stem, export.consonant .. "[nmY]") then if starts_with(ending, "[mv]") then stem = gsub(stem, ".$", "an") elseif starts_with(ending, "[tTDBs]") then stem = gsub(stem, ".$", "a") end end end -- remove -s/-t verbal endings after consonant (Whitney §555) -- plus -s after nominal consonant stem (used to provoke a long vowel in -ir/-ur stems) if ends_with(stem, "[" .. export.consonant_list .. "M]") and match(ending, "^[st]$") then ending = gsub(ending, ".", "") end if ending == "" then if ends_with(stem, "[mM]") then -- final 'm' of a root becomes 'n' stem = gsub(stem, ".$", "n") elseif input_table.diaspirate then -- budh > bhut, etc. stem = aspirate_diaspirate(stem) end -- combine_accent for vocatives without ending combined = combine_accent(stem, ending, input_table.has_accent, input_table.accent_override, input_table.recessive, input_table.voc_svar) return absolute_final(combined, input_table.ambig_final, input_table.j_to_z, input_table.h_to_g) -- all cases of ending starts with vowel elseif starts_with(ending, export.vowel) then if ends_with(stem, export.vowel_with_accent) then -- stem ends with vowel -- strip last vowel and accent off stem stem, last, acc = match(stem, "^(.*)(" .. export.vowel .. ")(" .. export.accent .. "?)$") -- strip first vowel off ending first, ending = match(ending, "^(.)(.*)$") if match(last, '[iIuU]') and (input_table.no_syncope or input_table.e_no_syncope) then stem = stem .. insert_glide[last .. acc] ending = first .. ending elseif export.split_diphthong[last] then -- Can a stem-final guna and vrddhi be split into V + sonorant? stem = stem .. export.split_diphthong[last .. acc] ending = first .. ending elseif lower(last) == lower(first) then -- homorganic vowels ending = upper(first) .. acc .. ending elseif lower(last) == "a" then -- gunation and vrddhization after stem-final a. ending = export.up_one_grade[first .. acc] .. ending elseif export.vowel_to_cons[last] then -- Can the stem-final vowel be made consonantal? stem = gsub(stem, "L$", "q"); stem = gsub(stem, "Lh$", "Q") -- convert ḷ(h) to ḍ(h) stem = stem .. export.vowel_to_cons[last] ending = first .. (acc == "/" and "\\" or "") .. ending -- Convert stem-final udatta to ending-initial svarita if match(stem, "^" .. export.consonant .. "*yv$") then -- dyu- > divā stem = gsub(stem, "..$", "iv") end end end -- endings starting with consonants -- for middle s-aorist 2nd plural elseif ends_with(stem, export.vowel_with_accent .. 'M?') and starts_with(ending, "sD") then if ends_with(stem, "[iIeEfFxuUoO][/\\]?") then ending = gsub(ending, '^..', 'Q') else ending = gsub(ending, '^..', 'D') stem = gsub(stem, 'M$', 'n') end -- n > ñ /__{c, j} elseif ends_with(stem, "[cj]") and starts_with(ending, "n") then ending = gsub(ending, "^.", "Y") elseif input_table.han and starts_with(ending, "n") then stem = gsub(stem, 'h$', 'G') -- All other C- + -C interactions elseif ends_with(stem, export.consonant) and starts_with(ending, export.consonant) then stem = gsub(stem, "L$", "q"); stem = gsub(stem, "Lh$", "Q") -- convert ḷ(h) to ḍ(h) -- for nominal endings -bhyām, -bhis, -bhyas, -su (see Whitney §111a) if starts_with(ending, "B[iy]") or starts_with(ending, "su" .. export.accent .. "?$") then if ends_with(stem, "kz") then -- final -kṣ > ṭ stem = gsub(stem, "..$", "w") -- final r + stop is allowed in stem, see Whitney §150b elseif ends_with(stem, export.vowel_with_accent .. "r[" .. export.stop_list .. "SzhL]") then -- do nothing elseif ends_with(stem, export.consonant .. export.consonant) then -- at least 2 consonants -- take the first of the cluster stem = gsub(stem, "(" .. export.consonant .. "+)$", function(cluster) return sub(cluster, 1, 1) end) end if ends_with(stem, "[jSh]") or input_table.ambig_final then stem = gsub(stem, ".$", input_table.ambig_final) -- in case of -j/ś/h, but also to override the normal value in a few exceptional cases elseif ends_with(stem, "[KgGcCJWqQTdDPbBz]") then stem = gsub(stem, ".$", export.to_final) elseif ends_with(stem, "m") then stem = gsub(stem, ".$", "n") -- Loss of {z, ẓ} with compensatory lengthening before voiced consonant. (FIXME: but what about the médha- < *mázdha- type?) elseif ends_with(stem, "[aA][/\\]?s") and starts_with(ending, "[rgGdDbByvjJqQlLhnm]") then stem = gsub(stem, "([aA])([/\\]?)s$", function(vow, acc) return (vow == "a" and "o" or "A") .. acc end) -- final s-allophones elseif ends_with(stem, "s") then if starts_with(ending, "[kKpPzsS]") then if input_table.s_before_skp then stem = gsub(stem, ".$", "s") else stem = gsub(stem, ".$", "H") -- visarga end elseif starts_with(ending, "[gGjJqQdDbByvlLhnm]") then -- s > r stem = gsub(stem, ".$", "r") -- outcommented because not relevant to internal sandhi -- elseif starts_with(ending, "[cCwW]") then -- homorganic fricative -- local homorg_s = { -- ['c'] = 'S', ['C'] = 'S', -- ['w'] = 'z', ['W'] = 'z', -- } -- stem = gsub(stem, ".$", homorg_s[sub(ending, 1, 1)]) -- elseif starts_with(ending, "r") then -- Loss of z before r with compensatory lengthening before voiced consonant. -- stem = gsub(stem, "(" .. export.vowel .. "[/\\])[sHr]$", function(vow) return export.lengthen[vow] or vow end) end end -- if ends_with(stem, "w") and starts_with(ending, "n") then -- for 'ṣaṇṇām' -- stem = gsub(stem, "w$", "R") -- end else -- for all other endings -- s-aorist (Whitney §881) if (ends_with(stem, "[^rnm]") and starts_with(ending, "s[tT]")) or starts_with(ending, "sD") then ending = gsub(ending, '^s', '') end -- diaspirate verbs with -dhve/-dhvam ending, see paper "Sanskrit as she has been misanalyzed ..." (Janda & Joseph, 2002), p.28-29 if input_table.diaspirate and starts_with(ending, "Dv") then stem = aspirate_diaspirate(stem) elseif (ends_with(stem, "jj") or ends_with(stem, "Sc")) and starts_with(ending, "[tTdDs]") then stem = gsub(stem, ".$", "") -- further treated below end if ends_with(stem, "kz") then -- roots on -kṣ if starts_with(ending, "s") then stem = gsub(stem, "..$", 'k') elseif starts_with(ending, "[tT]") then stem = gsub(stem, "Nkz$", 'Mz') stem = gsub(stem, "kz$", 'z') elseif starts_with(ending, "[dD]") then stem = gsub(stem, "Nkz$", 'Rq') stem = gsub(stem, "kz$", 'q') end elseif ends_with(stem, "[cJ]") and starts_with(ending, "[tTdDs]") then stem = gsub(stem, "Y.$", 'Nk') stem = gsub(stem, "[cJ]$", 'k') elseif ends_with(stem, "[jCSzh]") and starts_with(ending, "s") then stem = gsub(stem, "[YM].$", 'Nk') stem = gsub(stem, "[jCSzh]$", 'k') elseif ends_with(stem, "[jCSz]") and starts_with(ending, "[tTdD]") then if input_table.j_to_z or input_table.ambig_final == "w" or ends_with(stem, "[CSz]") then if starts_with(ending, "[tT]") then stem = gsub(stem, 'Y[jC]$', 'Mz') stem = gsub(stem, "[jCS]$", 'z') else stem = gsub(stem, '[YM].$', 'Rq') stem = gsub(stem, '[jCSz]$', 'q') end else stem = gsub(stem, "Yj$", 'Nk') stem = gsub(stem, "j$", 'k') end elseif ends_with(stem, "h") and starts_with(ending, "[tTdD]") then if input_table.h_to_g then stem = gsub(stem, "h$", "g") ending = gsub(ending, "^.", "D") else if ends_with(stem, "va/?h") then -- root 'vah' (sometimes also 'sah', see Whitney §224b) stem = gsub(stem, "a(/?)h$", "o%1") else -- {a, i, u}h + {t, th, d, dh} > {ā, ī, ū}ḍh (Bartholomae's Law with retroflection and compensatory lengthening) stem = gsub(stem, "([aiu]?)([/\\]?)h$", function(vow, acc) return (export.lengthen[vow] or "") .. acc end) stem = gsub(stem, 'M$', 'R') end if input_table.retroflex_l and starts_with(ending, "." .. export.vowel) then ending = gsub(ending, "^.", "Lh") else ending = gsub(ending, "^.", "Q") end end -- -vāṃs, see Whitney §216 j elseif input_table.deriv and ((ends_with(stem, "[cj]") and not input_table.j_to_z) or (ends_with(stem, "h") and input_table.h_to_g)) then stem = gsub(stem, ".$", to_velar) stem = gsub(stem, "[YM](.)$", "N%1") -- e.g. śādhi (Whitney §166) elseif ends_with(stem, "As") and match(ending, "^Di/?$") then stem = gsub(stem, "s$", "") -- following Whitney's convention at §612 of interpreting 'dhv' from 's + dhv' as 'ddhv' (see also §166 and §232) -- sometimes also in nouns + -bhis, etc. (normally handled by input_table.final above) elseif ends_with(stem, ".s") and starts_with(ending, "[DB]") then stem = gsub(stem, "Ms$", "nd") stem = gsub(stem, "s$", "d") -- for the (basically theoretical) middle voice of 'asti' elseif stem == "s" and starts_with(ending, "[sD]") then stem = "" elseif ends_with(stem, "m") then -- if stem ends in m -- m > ṃ before {h, ś, ṣ, s} and homorganic before stops (Whitney §212) if starts_with(ending, "[kKgGcCjJwWqQtTdDSzsh]") then stem = gsub(stem, "m$", export.homorganic_nasal[sub(ending, 1, 1)]) elseif starts_with(ending, "[mv]") then stem = gsub(stem, "m$", "n") end elseif ends_with(stem, "n") then -- if stem ends in n if starts_with(ending, "[Szs]") then -- n > ṃ /__{ś, ṣ, s} stem = gsub(stem, ".$", "M") end elseif ends_with(stem, "[KGWQTDPB]") and starts_with(ending, "[^NYRnmyrlv]") then -- Whitney §153 -- Bartholomae's Law if ends_with(stem, "[GQDB]") and starts_with(ending, "[tT]") and not input_table.no_bartholomae == true then ending = gsub(ending, "^.", "D") end stem = gsub(stem, ".$", export.deaspirate) end -- {g, ḍ, d, b} > {k, ṭ, t, p} before following unvoiced stop/sibilant if ends_with(stem, "[gqbd]") and starts_with(ending, "[kKcCwWtTpPSzs]") then stem = gsub(stem, ".$", export.to_final) end end -- general rules for both 'final' (pāda) endings and others (outcommented lines are only relevant for external sandhi) if ends_with(stem, "[kwp]") then if starts_with(ending, "[gGjJqQdDbB]") then -- {k, ṭ, p} > {g, ḍ, b} before following voiced stop stem = gsub(stem, ".$", export.to_voiced) -- elseif starts_with(ending, "h") then -- {k, ṭ, p}h > {ggh, ḍḍh, bbh} -- stem = gsub(stem, ".$", export.to_voiced) -- ending = gsub(ending, "^.", gsub(stem, ".$", {['k'] = 'G', ['w'] = 'Q', ['p'] = 'B'})) end elseif ends_with(stem, "t") then if starts_with(ending, "[gGdDbB]") then -- t > d /__{g(h), d(h), b(h)} stem = gsub(stem, ".$", "d") -- elseif starts_with(ending, "h") then -- t + h > ddh -- stem = gsub(stem, ".$", "d") -- ending = gsub(ending, "^.", "D") -- elseif starts_with(ending, "[cCjJwWqQ]") then -- homorganic with following stop -- local t_pre_palatal_retroflex = -- { ['c'] = 'c', ['C'] = 'c', ['j'] = 'j', ['J'] = 'j', -- ['w'] = 'w', ['W'] = 'w', ['q'] = 'q', ['Q'] = 'q', } -- stem = gsub(stem, ".$", t_pre_palatal_retroflex[sub(ending, 1, 1)]) -- elseif starts_with(ending, "S") then -- tś > cch -- stem = gsub(stem, ".$", "c") -- ending = gsub(ending, "^.", "C") -- elseif starts_with(ending, "l") then -- stem = gsub(stem, ".$", "l") end end -- note that nominal endings with -bh also trigger aspiration throwback if input_table.diaspirate and ends_with(stem, "[^GDBh]") and starts_with(ending, "[^QD]") then stem = aspirate_diaspirate(stem) end end stem, ending = export.retroflexion(stem, ending, input_table.no_retroflex_s, input_table.han, input_table.stem_final_n) combined = combine_accent(stem, ending, input_table.has_accent, input_table.accent_override, input_table.recessive, input_table.voc_svar) if input_table.non_final then return combined end return absolute_final(combined) end return export icmvjqmtyfdc8d6r3wnhpjdhekjcthx Mô đun:zlw-opl-IPA 828 294867 2571739 2252970 2026-10-18T16:40:38Z Hiyuune 50834 2571739 Scribunto text/plain local export = {} local m_IPA = require("Module:IPA") local m_table = require("Module:table") local lang = require("Module:languages").getByCode("zlw-opl") local rsub = mw.ustring.gsub local rlower = mw.ustring.lower local rfind = mw.ustring.find local consonants = "bdfɡxjkɫlmnprstvzʒʃɲɕʑʲ" local C = "[" .. consonants .. "]" local vowels = "aiɨuɛɔæ̃ɑ̃" local V = "[" .. vowels .. "]" local voiceless_consonant = "ptsʃɕkx" local voiced_consonant = "bdzʒʑɡ" local function track(page) require("Module:debug").track("zlw-opl-IPA/" .. page) return true end local function rsub_repeatedly(term, foo, bar) while true do local new_term = rsub(term, foo, bar) if new_term == term then return term end term = new_term end end local digraphs = { ["ch"] = "x", ["cz"] = "tʃ", ["b́"] = "bʲ", ["rz"] = "R", ["sz"] = "ʃ" } local devoicing = { ["b"] = "p", ["d"] = "t", ["z"] = "s", ["ʒ"] = "ʃ", ["ʑ"] = "ɕ", ["ɡ"] = "k", ["v"] = "f" } local voicing = { ["p"] = "b", ["t"] = "d", ["s"] = "z", ["ʃ"] = "ʒ", ["ɕ"] = "ʑ", ["k"] = "ɡ", ["f"] = "v" } local function flatmap(items, fun) local new = {} for _, item in ipairs(items) do local results = fun(item) for _, result in ipairs(results) do table.insert(new, result) end end return new end local phon = { ["a"] = "a", ["ą"] = "ɑ̃", ["b"] = "b", ["c"] = "ts", ["ć"] = "tɕ", ["d"] = "d", ["e"] = "ɛ", ["ę"] = "æ̃", ["f"] = "f", ["g"] = "ɡ", ["h"] = "x", ["i"] = "i", ["j"] = "j", ["k"] = "k", ["l"] = "lʲ", ["ł"] = "ɫ", ["m"] = "m", ["ḿ"] = "mʲ", ["n"] = "n", ["ń"] = "ɲ", ["o"] = "ɔ", ["ó"] = "ɔː", ["p"] = "p", ["ṕ"] = "pʲ", ["r"] = "r", ["s"] = "s", ["ś"] = "ɕ", ["t"] = "t", ["u"] = "u", ["w"] = "v", ["ẃ"] = "vʲ", ["y"] = "ɨ", ["z"] = "z", ["ż"] = "ʒ", ["ź"] = "ʑ", [":"] = "ː", ["?"] = "(ː)" } function export.phonemic(text, post) text = rlower(text) text = rsub(text, " | ", "# | #") text = "##" .. rsub(text, " ", "# #") .. "##" -- basic phonology text = rsub(text, "ts", "tss") for digraph, replacement in pairs(digraphs) do text = rsub(text, digraph, replacement) end text = rsub(text, "r̝", "R") text = rsub(text, ".", phon) text = rsub(text, "si(" .. V .. ")", "ɕ%1") text = rsub(text, "zi(" .. V .. ")", "ʑ%1") text = rsub(text, "si", "ɕi") text = rsub(text, "zi", "ʑi") text = rsub(text, "bi", "bʲi") text = rsub(text, "pi", "pʲi") text = rsub(text, "mi", "mʲi") text = rsub(text, "wi", "wʲi") text = rsub(text, "fi", "fʲi") -- palatalisation text = rsub(text, "(" .. C .. ")i(" .. V .. ")", "%1ʲ%2") text = rsub(text, "Ri(" .. V .. ")", "Rj%1") text = rsub(text, "ni(" .. C .. ")", "ɲi%1") text = rsub(text, "nʲ", "ɲ") text = rsub(text, "nj", "ɲ") text = rsub(text, "sʲ", "ɕ") text = rsub(text, "zʲ", "ʑ") text = rsub(text, "jʲ", "ʲ") text = rsub(text, "ʲʲ", "ʲ") text = rsub(text, "ɨ", "i") text = rsub(text, "kʲ", "k") text = rsub(text, "ɡʲ", "ɡ") local function voice_backward(sound, following) return voicing[sound] .. following end local function devoice_backward(sound, following) return devoicing[sound] .. following end local function voice_forward(preceding, sound) return preceding .. voicing[sound] end local function devoice_forward(preceding, sound) return preceding .. devoicing[sound] end local function final_devoicing(sound, following) return devoicing[sound] .. following .. "#" end text = rsub_repeatedly(text, "([" .. voiced_consonant .. "v])([Rʲ]?)#", final_devoicing) text = rsub_repeatedly(text, "v([" .. voiceless_consonant .. "])", "f%1") text = rsub_repeatedly(text, "f([" .. voiced_consonant .. "])", "v%1") text = rsub_repeatedly(text, "([" .. voiced_consonant .. "])([f])", voice_forward) text = rsub_repeatedly(text, "([" .. voiceless_consonant .. "])([v])", devoice_forward) text = rsub_repeatedly(text, "([" .. voiced_consonant .. "])([" .. voiceless_consonant .. "])", devoice_backward) text = rsub_repeatedly(text, "([" .. voiceless_consonant .. "])([" .. voiced_consonant .. "])", voice_backward) -- rzy text = rsub(text, "Rɨ", "Ri") text = rsub(text, "(" .. V .. ")'", "'%1") text = rsub(text, "#(" .. C .. "+ʲ?)'", "#'%1") text = rsub(text, " (" .. C .. "+ʲ?)'", " '%1") text = rsub(text, "(" .. C .. "ʲ?)'", "'%1") text = rsub(text, "t's", "'ts") text = rsub(text, "'", "ˈ") text = rsub(text, "-", ""); -- affricates text = rsub(text, "[ʃʒ]", "%1ʲ") -- affricates text = rsub(text, "t([sɕʃ])", "t͡%1ʲ") text = rsub(text, "d([zʑʒ])", "d͡%1ʲ") -- suffixes text = rsub(text, "^ˈ%-", "-") -- resolution text = rsub(text, "jʲ", "j") text = rsub(text, "ʃʲ#", "ʃ#") text = rsub(text, "ʲʲ", "ʲ") text = rsub(text, "R", "r̝") local variants = {text} local function flatmap_and_sub_pre(from, to1, to2) variants = flatmap( variants, function(item) if rfind(item, from) then local retval = {rsub_repeatedly(item, from, to1)} if to2 then m_table.insertIfNot(retval, rsub_repeatedly(item, from, to2)) end return retval else return {item} end end ) end if post ~= nil then flatmap_and_sub_pre("iː", "i") flatmap_and_sub_pre("ɨː", "ɨ") flatmap_and_sub_pre("uː", "u") flatmap_and_sub_pre("ɔː", "o") flatmap_and_sub_pre("ɛː", "e") flatmap_and_sub_pre("aː", "ɒ") flatmap_and_sub_pre("i%(ː%)", "i") flatmap_and_sub_pre("ɨ%(ː%)", "ɨ") flatmap_and_sub_pre("u%(ː%)", "u") flatmap_and_sub_pre("a%(ː%)", "a", "ɒ") flatmap_and_sub_pre("ɔ%(ː%)", "ɔ", "o") flatmap_and_sub_pre("ɛ%(ː%)", "ɛ", "e") end flatmap_and_sub_pre("#", "") return variants end function export.IPA(frame) local terms = {} local args = frame:getParent().args local currentTitle = mw.loadData("Module:headword/data").pagename for _, term in ipairs(args) do if term == currentTitle then track("redundant") end table.insert(terms, term) end if #terms == 0 then terms = {currentTitle} end local results1, results2 = {}, {} for _, term in ipairs(terms) do local variantsPre = export.phonemic(term) for _, variant in ipairs(variantsPre) do table.insert(results1, {pron = "/" .. variant .. "/"}) end local variantsPost = export.phonemic(term, true) for _, variant in ipairs(variantsPost) do table.insert(results2, {pron = "/" .. variant .. "/"}) end end results1[1].q = {"tk. 10–15 CN"} results2[1].q = {"tk. 15 CN"} return "*" .. m_IPA.format_IPA_full { lang = lang, items = results1 } .. "\n*" .. m_IPA.format_IPA_full { lang = lang, items = results2 } end return export 5u7dpz8rxotdskh8iuafvf4qo81rbam سيورقاماق 0 297464 2571796 2142335 2026-10-19T07:55:46Z Hiyuune 50834 2571796 wikitext text/x-wiki =={{langname|zkh}}== ==={{section|etym}}=== Vay mượn từ {{der|zkh|zh|罪}} {{suffix|zkh||alt2=ورقا}}. Cùng gốc với {{cog|xqa||tr=soyurqamaq}}, {{cog|chg||tr=soyurga-}}, {{cog|oui||tr=tsoyurka-}}. ==={{section|v}}=== {{head|zkh|Động từ|tr=soyurqamaq}} # [[ủng hộ]]. ===={{section|drv}}==== * {{l|zkh|سيورغال|tr=soyurğal}} ==={{section|ref}}=== * Abdullahoğlu, H. (2010). Temir Kutluğ Yarlığı. Türkiyat Mecmuası, 3(0), 207-228. Retrieved from [https://dergipark.org.tr/tr/pub/iuturkiyat/issue/18498/194937] * {{cite-book |author= Özyetgin, A. Melek |chapter=Temir Kutluk Yarlığı [1397] |title=Altın Ordu, Kırım ve Kazan Sahasına Ait Yarlık ve Bitiklerin Dil ve Üslup Yönünden İncelemesi |url=https://kutuphane.ttk.gov.tr/details?id=423625&materialType=KT&query=alt%C4%B1n+ordu%2C+k%C4%B1r%C4%B1m+ve+kazan+sahas%C4%B1na |location=Ankara |publisher=Türk Dil Kurumu yayınları |year=1996 |pages=106, 177, 253 |isbn=975160799X }} * Çetin, E. (2021). Karahanlı Türkçesi Metinlerinde Manihaist ve Budist Çevreye Ait Bazı Sözcükler. Türkiyat Mecmuası 31(1), 199-223. Retrieved from [https://dergipark.org.tr/tr/pub/iuturkiyat/issue/61214/910599] * Ölmez, Mehmet. (2010). Dil Verileri Işığında soyurgal ve Kökeni. Trans-Turkic Studies Festschrift in Honour of Marcel Erdal, 167-175. f4ttr5qdj073p12hhjrtvnziuyc0p3o βλασφημέω 0 297751 2571760 2233189 2026-10-19T02:51:35Z Hiyuune 50834 2571760 wikitext text/x-wiki =={{langname|grc}}== ==={{ĐM|etym}}=== {{suffix|grc|βλάσφημος|έω}} ==={{ĐM|pron}}=== {{grc-IPA|βλᾰσφημέω}} ==={{ĐM|v}}=== {{grc-verb}} # [[nói|Nói]] một cách [[tục tĩu]] về những điều [[thiêng liêng]], [[báng bổ]]. # [[nói|Nói]] [[xấu]], [[vu khống]]. ===={{ĐM|infl}}==== {{grc-conj|pres-con-e|βλασφημ}} {{grc-conj|imperf-con-e|ἐβλασφημ}} {{grc-conj|fut|βλασφημησ|βλασφημηθ}} {{grc-conj|aor-1|ἐβλασφημησ|βλασφημησ|ἐβλασφημηθ|βλασφημηθ}} {{grc-conj|perf|βεβλασφημηκ|βεβλασφημη}} {{grc-conj|plup|ἐβεβλασφημηκ|ἐβεβλασφημη}} ===={{ĐM|desc}}==== * {{desc|la-lat|blasphēmō}} * {{desc|en|blame}}, from Old French blasmer, from Late Latin blasphēmō. ==={{ĐM|ref}}=== * {{R:LSJ}} * {{R:Middle Liddell}} * {{R:Bailly}} * {{R:BDAG}} * {{R:DGE}} * {{R:Strong's|G|987}} 5bm4zsdp9zn4gm8mgwnwxoha1qyqeie 2571761 2571760 2026-10-19T02:52:40Z Hiyuune 50834 2571761 wikitext text/x-wiki =={{langname|grc}}== ==={{ĐM|etym}}=== {{suffix|grc|βλάσφημος|έω}} ==={{ĐM|pron}}=== {{grc-IPA|βλᾰσφημέω}} ==={{ĐM|v}}=== {{grc-verb}} # [[nói|Nói]] một cách [[tục tĩu]] về những điều [[thiêng liêng]], [[báng bổ]]. # [[nói|Nói]] [[xấu]], [[vu khống]]. ===={{ĐM|infl}}==== {{grc-conj|pres-con-e|βλασφημ}} {{grc-conj|imperf-con-e|ἐβλασφημ}} {{grc-conj|fut|βλασφημησ|βλασφημηθ}} {{grc-conj|aor-1|ἐβλασφημησ|βλασφημησ|ἐβλασφημηθ|βλασφημηθ}} {{grc-conj|perf|βεβλασφημηκ|βεβλασφημη}} {{grc-conj|plup|ἐβεβλασφημηκ|ἐβεβλασφημη}} ===={{ĐM|desc}}==== * {{desc|la-lat|blasphēmō}} * {{desc|en|blame}}, từ tiếng Pháp cổ blasmer, từ tiếng Latinh hậu kỳ blasphēmō. ==={{ĐM|ref}}=== * {{R:LSJ}} * {{R:Middle Liddell}} * {{R:Bailly}} * {{R:BDAG}} * {{R:DGE}} * {{R:Strong's|G|987}} jmwi6f35rtl34np66qywxsc8jstvqt5 aysha 0 302116 2571639 2156913 2026-10-18T13:28:41Z TheHighFighter2 42988 /* */ 2571639 wikitext text/x-wiki =={{langname|kxc}}== ==={{ĐM|interrog}}=== {{head|kxc|Từ nghi vấn}} # [[ở|Ở]] [[đâu]]. ==={{ĐM|reference}}=== * {{Chú thích sách|author=Borale Matewos|url=https://www.sil.org/system/files/reapdata/12/07/70/120770007088788814762090621972698906243/English_Afaa_Xonso_Amharic_School_Dictionary_2022.pdf|title=English - Afaa Xonso - Amharic School Dictionary|year=2022|publisher=SIL Ethiopia, SNNPRS Education|page=167}} iulbwfqhhb6zcqybigiqegf5v8wwvk6 atorrarse 0 302869 2571784 2153159 2026-10-19T03:31:33Z Hiyuune 50834 2571784 wikitext text/x-wiki =={{langname|gnc}}== ==={{section|v}}=== {{head|gnc|Động từ}} # [[cúi]] [[mình]] để [[trốn]]. ==={{section|ref}}=== * Esteban, José M. 2003. Vocabulario canario guanche. Autores científico-técnicos y académicos 30:119-129. 9kxhjapzgbmvy4zexv99z4cd3zjw9ic atrof 0 306386 2571786 2165157 2026-10-19T03:37:45Z Hiyuune 50834 2571786 wikitext text/x-wiki =={{langname|uz}}== ==={{section|etym}}=== {{bor+|uz|ar|أَطْرَاف}}, dạng số nhiều của {{der|uz|ar|طَرَف}}. So sánh với {{cog|ug|ئەتراپ}} và {{cog|tr|etraf}}. {{root|uz|ar|ط ر ف}} ==={{section|pron}}=== * {{hyph|uz|at|rof}} ==={{section|n}}=== {{uz-noun}} # [[vùng]] [[lân cận]], [[phụ cận]]. ===={{section|decl}}==== {{uz-decl-noun}} ===={{section|drv}}==== {{col|uz|atroflab}} ==={{section|further}}=== * {{R:uz:IZOH}} 4p6suc3epuucyiwnkxp9ijrsiknc7jj râk 0 307203 2571699 2348541 2026-10-18T15:04:21Z WhoAlone 40420 2571699 wikitext text/x-wiki {{-crv-}} {{-noun-}} {{head|crv|Danh từ}} # [[nước]]. {{-references-}} * ''Comparative list of words and numerals in the six dialects of the Nicobar islands'', in ''A Dictionary of the Central Nicobarese Language'' {{C|crv|Nước}} =={{langname|ncb}}== ==={{ĐM|noun}}=== {{head|ncb|Danh từ}} # {{label|ncb|Nancowry}} [[nước]]. #:{{synonym|ncb|dâk}} ==={{ĐM|ref}}=== * [http://www.sealang.net/monkhmer/database/retrieve.pl?language=Nancowry&sort=gloss&format=html Tiếng Nicobar Trung (Nancowry)] tại Cơ sở Dữ liệu Môn-Khmer {{c|ncb|Nước}} ok84gt9bilctrqov0zapuawtwc08jev labuť 0 315755 2571622 2184399 2026-10-18T13:00:56Z Hiyuune 50834 2571622 wikitext text/x-wiki {{also|labut|Labuť}} =={{langname|cs}}== {{wp|cs:}} ==={{section|etym}}=== {{ety|cs|:inh|zlw-ocs:[[labut]], [[labud]]<ety:inh<sla-pro:*olbǫdь>>|text=2|tree=1}} ==={{section|pron}}=== * {{cs-IPA}} * {{audio|cs|LL-Q9056 (ces)-Ghost4Man-labuť.wav}} * {{rhymes|cs|buc}} * {{hyphenation|cs|la|buť}} ==={{section|n}}=== {{cs-noun|f}} # [[thiên nga|Thiên nga]]. ===={{section|decl}}==== {{cs-ndecl|f}} ===={{section|drv}}==== {{col|cs|title=tính từ|labutí|labuťový}} {{col|cs|title=danh từ|labutě|labutěnka|labutice|labutička|labutinka|labuťák|labuťátko|labuťka}} ==={{section|further}}=== * {{R:cs:PSJC}} * {{R:cs:SSJC}} * {{R:cs:IJP}} =={{langname|sk}}== {{wp|sk:}} ==={{section|etym}}=== {{etymon|sk|:inh|sla-pro:*ȏlbǭdь}} {{inh+|sk|sla-pro|*olbǫdь}}, từ {{der|sk|ine-pro|*h₂elbʰós}}. ==={{section|pron}}=== * {{sk-IPA}} * {{audio|sk|LL-Q9058 (slk)-TomášPolonec-labuť.wav|a=Bratislava}} ==={{section|n}}=== {{sk-noun|f|adj=labutí}} # [[thiên nga|Thiên nga]]. ===={{section|decl}}==== {{sk-ndecl|f}} ===={{section|drv}}==== {{col|sk |Labuť<g:f> |labuťka<g:f> |labutienka<g:f> |labuť spevavá<g:f> |labuť veľká<g:f> |labuť malá<g:f> }} ==={{section|further}}=== * {{R:sk:SDK}} 772nn5hzrdzg35hoyj76romkf84vpwv atraccions 0 319568 2571785 2191972 2026-10-19T03:36:18Z Hiyuune 50834 2571785 wikitext text/x-wiki {{also|atraccións}} =={{langname|ca}}== ==={{section|pron}}=== * {{ca-IPA|atraccións}} * {{rhymes|ca|ons|s=4}} ==={{section|n}}=== {{head|ca|Biến thể hình thái danh từ|g=f-p}} # {{plural of|ca|atracció}} 1k38l7s7es5hp3dczzq8hzio0u4dbso feun 0 327366 2571662 2208670 2026-10-18T14:52:42Z WhoAlone 40420 2571662 wikitext text/x-wiki =={{langname|tef}}== ==={{ĐM|noun}}=== {{head|tef|Danh từ}} # [[rốn]]. ==={{ĐM|ref}}=== * ''Lurö Dictionary: Lurö (Nicobarese) - English - Hindi'' (2020). Anvita Abbi, Vysakh R. {{c|tef|Bộ phận cơ thể}} gdehw8cbh66vsfkry0dz9p8bv1ixkmj fòn kinseu 0 327367 2571663 2208671 2026-10-18T14:53:29Z WhoAlone 40420 2571663 wikitext text/x-wiki =={{langname|tef}}== ==={{ĐM|noun}}=== {{head|tef|Danh từ}} # [[hình vuông]]. ==={{ĐM|ref}}=== * ''Lurö Dictionary: Lurö (Nicobarese) - English - Hindi'' (2020). Anvita Abbi, Vysakh R. {{c|tef|Hình học}} 29y5v5wwtruji4mai861zmf4wr0f9ut fönöḵ 0 327368 2571667 2208672 2026-10-18T14:56:19Z WhoAlone 40420 2571667 wikitext text/x-wiki =={{langname|tef}}== ==={{ĐM|noun}}=== {{head|tef|Danh từ}} # [[còi]]. ==={{ĐM|ref}}=== * ''Lurö Dictionary: Lurö (Nicobarese) - English - Hindi'' (2020). Anvita Abbi, Vysakh R. {{c|tef|Dụng cụ|Âm thanh}} rh59bo3bwo4g6wvgox6uy47wf33z730 fönong-nyi-cò 0 327369 2571668 2217141 2026-10-18T14:56:28Z WhoAlone 40420 2571668 wikitext text/x-wiki =={{langname|tef}}== ==={{ĐM|noun}}=== {{head|tef|Danh từ}} # Một [[dụng cụ]] nặng dùng để đóng một cái nêm vào một khúc gỗ để chẻ nó ra. ==={{ĐM|ref}}=== * ''Lurö Dictionary: Lurö (Nicobarese) - English - Hindi'' (2020). Anvita Abbi, Vysakh R. {{C|tef|Dụng cụ}} g51eq6gw3fj0tf2jqc55qgqtoz6z6fb ful a inliöng 0 327370 2571669 2208676 2026-10-18T14:56:47Z WhoAlone 40420 2571669 wikitext text/x-wiki =={{langname|tef}}== ==={{ĐM|noun}}=== {{head|tef|Danh từ}} #[[san hô]] [[não]]. ==={{ĐM|ref}}=== * ''Lurö Dictionary: Lurö (Nicobarese) - English - Hindi'' (2020). Anvita Abbi, Vysakh R. {{C|tef|Động vật}} bxkzf8yla0w1y5slwz0basbwjtoi0ch ful öneumö 0 327381 2571670 2208709 2026-10-18T14:56:55Z WhoAlone 40420 2571670 wikitext text/x-wiki =={{langname|tef}}== ==={{ĐM|noun}}=== {{head|tef|Danh từ}} # [[vòng hoa]], [[tràng hoa]], [[dây hoa]]. ==={{ĐM|ref}}=== * ''Lurö Dictionary: Lurö (Nicobarese) - English - Hindi'' (2020). Anvita Abbi, Vysakh R. {{c|tef|Hoa}} 5mre3wpwrpywup8f243qxqcab7iabau hachi 0 327382 2571673 2208710 2026-10-18T14:57:47Z WhoAlone 40420 2571673 wikitext text/x-wiki =={{langname|tef}}== ==={{ĐM|noun}}=== {{head|tef|Danh từ}} # [[hành động]] [[đánh nhau]]. ==={{ĐM|ref}}=== * ''Lurö Dictionary: Lurö (Nicobarese) - English - Hindi'' (2020). Anvita Abbi, Vysakh R. {{c|tef|Hoạt động của con người|Bạo lực}} srkimf2xp1qoh95aa468v0af87lduaa haich lönit 0 327383 2571674 2208712 2026-10-18T14:57:54Z WhoAlone 40420 2571674 wikitext text/x-wiki =={{langname|tef}}== ==={{ĐM|noun}}=== {{head|tef|Danh từ}} # [[vành khuyên]] [[họng]] [[vàng]]. ==={{ĐM|ref}}=== * ''Lurö Dictionary: Lurö (Nicobarese) - English - Hindi'' (2020). Anvita Abbi, Vysakh R. {{c|tef|Lớp Chim}} hlklvyo9yez7t9qwbkmow2irxb76z94 haich yönok 0 327384 2571676 2208713 2026-10-18T14:58:08Z WhoAlone 40420 2571676 wikitext text/x-wiki =={{langname|tef}}== ==={{ĐM|noun}}=== {{head|tef|Danh từ}} # [[chim]] [[hút]] [[mật]] [[họng]] [[tím]]. ==={{ĐM|ref}}=== * ''Lurö Dictionary: Lurö (Nicobarese) - English - Hindi'' (2020). Anvita Abbi, Vysakh R. {{c|tef|Lớp Chim}} ru31uo78ql2hdl78rd3hsbt7vuk1nyw haṅah 0 327385 2571677 2208715 2026-10-18T14:58:25Z WhoAlone 40420 2571677 wikitext text/x-wiki =={{langname|tef}}== ==={{ĐM|noun}}=== {{head|tef|Danh từ}} # [[gió]]. ==={{ĐM|ref}}=== * ''Lurö Dictionary: Lurö (Nicobarese) - English - Hindi'' (2020). Anvita Abbi, Vysakh R. {{c|tef|Hiện tượng khí quyển}} qz7hdp7otb2l2qj9b8pvv6jx14yh9rb hanong 0 327386 2571679 2208716 2026-10-18T14:58:37Z WhoAlone 40420 2571679 wikitext text/x-wiki =={{langname|tef}}== ==={{ĐM|noun}}=== {{head|tef|Danh từ}} # [[anh em]] [[trai]]. ==={{ĐM|ref}}=== * ''Lurö Dictionary: Lurö (Nicobarese) - English - Hindi'' (2020). Anvita Abbi, Vysakh R. {{c|tef|Thành viên nam trong gia đình}} gyxqx8aj0xz0us4bthx1tjnk3e5o5m4 hayö 0 327387 2571681 2208718 2026-10-18T14:58:59Z WhoAlone 40420 2571681 wikitext text/x-wiki =={{langname|tef}}== ==={{ĐM|noun}}=== {{head|tef|Danh từ}} # [[bãi biển]]. ==={{ĐM|ref}}=== * ''Lurö Dictionary: Lurö (Nicobarese) - English - Hindi'' (2020). Anvita Abbi, Vysakh R. {{c|tef|Tự nhiên}} fykcoaswwymv16sy924qqorlti60fye hehöyön 0 327388 2571683 2208720 2026-10-18T14:59:18Z WhoAlone 40420 2571683 wikitext text/x-wiki =={{langname|tef}}== ==={{ĐM|noun}}=== {{head|tef|Danh từ}} # [[mùa]] [[săn bắn]] (giữa tháng 3 và 4). ==={{ĐM|ref}}=== * ''Lurö Dictionary: Lurö (Nicobarese) - English - Hindi'' (2020). Anvita Abbi, Vysakh R. {{c|tef|Mùa|Săn bắn}} 359fsc6oyqoadakp9t94l1a9adcaw4w heich 0 327389 2571688 2208721 2026-10-18T15:00:11Z WhoAlone 40420 2571688 wikitext text/x-wiki =={{langname|tef}}== ==={{ĐM|noun}}=== {{head|tef|Danh từ}} # [[thịt]] người hoặc động vật vẫn còn trong cơ thể. ==={{ĐM|ref}}=== * ''Lurö Dictionary: Lurö (Nicobarese) - English - Hindi'' (2020). Anvita Abbi, Vysakh R. {{C|tef|Động vật}} b0wd0rsedlgu3pok5s331rwci55q98e heòh 0 327392 2571691 2208725 2026-10-18T15:00:54Z WhoAlone 40420 2571691 wikitext text/x-wiki =={{langname|tef}}== ==={{ĐM|noun}}=== {{head|tef|Danh từ}} # một [[vòng hoa]]/[[dây chuyền]] đeo quanh cổ có mặt [[dây chuyền]]. ==={{ĐM|ref}}=== * ''Lurö Dictionary: Lurö (Nicobarese) - English - Hindi'' (2020). Anvita Abbi, Vysakh R. {{c|tef|Trang phục}} pskgy8ygkuconvskkponh49jzgxw32k hiluö 0 327398 2571697 2208732 2026-10-18T15:03:44Z WhoAlone 40420 2571697 wikitext text/x-wiki =={{langname|tef}}== ==={{ĐM|noun}}=== {{head|tef|Danh từ}} # Những tấm ván trơn làm bằng cây leo dùng để làm mũ, hộp, v.v. ==={{ĐM|ref}}=== * ''Lurö Dictionary: Lurö (Nicobarese) - English - Hindi'' (2020). Anvita Abbi, Vysakh R. {{c|tef|Dụng cụ}} sronlzihttba1x0cgk5kx3cs5owe4yq hinean eyöj 0 327399 2571696 2208733 2026-10-18T15:03:36Z WhoAlone 40420 2571696 wikitext text/x-wiki =={{langname|tef}}== ==={{ĐM|noun}}=== {{head|tef|Danh từ}} # Tấm ván gỗ ở giữa xuồng mà người ta ngồi. ==={{ĐM|ref}}=== * ''Lurö Dictionary: Lurö (Nicobarese) - English - Hindi'' (2020). Anvita Abbi, Vysakh R. {{c|tef|Dụng cụ}} 1unsqceekurs12ubirv7ec6baah7a0a hineat 0 327400 2571702 2208734 2026-10-18T15:06:04Z WhoAlone 40420 2571702 wikitext text/x-wiki =={{langname|tef}}== ==={{ĐM|noun}}=== {{head|tef|Danh từ}} # [[chảo]] [[rán]]. ==={{ĐM|ref}}=== * ''Lurö Dictionary: Lurö (Nicobarese) - English - Hindi'' (2020). Anvita Abbi, Vysakh R. {{c|tef|Dụng cụ nhà bếp}} a1oklg87mtp8121klvmocw5gzg17omn hineat ruti 0 327401 2571703 2208735 2026-10-18T15:06:39Z WhoAlone 40420 2571703 wikitext text/x-wiki =={{langname|tef}}== ==={{ĐM|noun}}=== {{head|tef|Danh từ}} # [[chảo]] làm món [[roti]]. ==={{ĐM|ref}}=== * ''Lurö Dictionary: Lurö (Nicobarese) - English - Hindi'' (2020). Anvita Abbi, Vysakh R. {{c|tef|Dụng cụ nhà bếp}} htw86og125ii0xi4dcgrfjqut3t6kcz hinheang-nang 0 327402 2571711 2208736 2026-10-18T15:08:59Z WhoAlone 40420 2571711 wikitext text/x-wiki =={{langname|tef}}== ==={{ĐM|noun}}=== {{head|tef|Danh từ}} # [[đồng hồ]] đeo tay. ==={{ĐM|ref}}=== * ''Lurö Dictionary: Lurö (Nicobarese) - English - Hindi'' (2020). Anvita Abbi, Vysakh R. {{c|tef|Máy móc|Thời gian}} bu82f440ckn8hnin2kajuiozpawly1h hinhuchiö 0 327405 2571712 2208740 2026-10-18T15:09:10Z WhoAlone 40420 2571712 wikitext text/x-wiki =={{langname|tef}}== ==={{ĐM|noun}}=== {{head|tef|Danh từ}} # [[thùng]] dùng để thu gom đồ uống từ cây dừa. ==={{ĐM|ref}}=== * ''Lurö Dictionary: Lurö (Nicobarese) - English - Hindi'' (2020). Anvita Abbi, Vysakh R. {{c|tef|Dụng cụ}} dswpxhzstddnm1zwjgyefcyhe0cdav7 hiniyeu 0 327406 2571710 2208741 2026-10-18T15:08:46Z WhoAlone 40420 2571710 wikitext text/x-wiki =={{langname|tef}}== ==={{ĐM|noun}}=== {{head|tef|Danh từ}} # [[súng]]. ==={{ĐM|ref}}=== * ''Lurö Dictionary: Lurö (Nicobarese) - English - Hindi'' (2020). Anvita Abbi, Vysakh R. {{c|tef|Vũ khí}} 44vx4g8yc9e596uorkg89romhyb7noi hinkuk 0 327407 2571706 2208742 2026-10-18T15:06:55Z WhoAlone 40420 2571706 wikitext text/x-wiki =={{langname|tef}}== ==={{ĐM|noun}}=== {{head|tef|Danh từ}} # [[trái]] [[bánh mì]]. ==={{ĐM|ref}}=== * ''Lurö Dictionary: Lurö (Nicobarese) - English - Hindi'' (2020). Anvita Abbi, Vysakh R. {{c|tef|Trái cây}} 2lmoetninesyk1o0a9d5rozpaxamivf palei 0 330242 2571604 2571603 2026-10-18T11:59:18Z Hiyuune 50834 2571604 wikitext text/x-wiki =={{langname|ibh}}== ==={{ĐM|noun}}=== {{head|ibh|Danh từ}} # [[vợ]]. ==={{ĐM|ref}}=== * Tam Thi Minh Nguyen, ''A grammar of Bih ''(2013) =={{langname|cja}}== ==={{ĐM|etym}}=== Cùng gốc với {{cog|cja|plai}}. ==={{ĐM|pron}}=== * {{IPA|cjm|/ˈpa.leɪ/}} ==={{ĐM|n}}=== {{head|cjm|Danh từ|chính tả Akhar Thrah|ꨚꨤꨬ}} # [[làng]]. =={{langname|ro}}== ==={{ĐM|n}}=== {{head|ro|Biến thể hình thái danh từ}} # {{infl of|ro|pală||gen//dat|def|s}} nyey2api66etx5e1577o6i4w4wk9tj3 tiwesdæg 0 336228 2571744 2222881 2026-10-18T16:46:21Z Hiyuune 50834 /* Danh từ */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]) 2571744 wikitext text/x-wiki =={{langname|ang}}== ==={{ĐM|etymology}}=== {{root|ang|ine-pro|*dyew-}} Từ {{inherited|ang|gmw-pro|*Tīwas dag||thứ ba|lit=ngày của Tiw}}, một cách diễn giải tiếng Đức của {{derived|ang|la|dies Martis}}, bản thân nó là bản dịch của {{derived|ang|grc|Ἄρεως ἡμέρα}} (Bản dịch tiếng La Mã). ==={{ĐM|pron}}=== * {{ang-IPA|tīwes-dæġ}} ==={{ĐM|n}}=== {{ang-noun|tīwesdæġ|m}} # [[thứ ba|Thứ ba]]. ===={{ĐM|decl}}==== {{ang-decl-noun-a-m|tīwesdæġ|tīwesdag}} ===={{ĐM|desc}}==== * {{desctree|enm|Tewesday}} fwi2koj84m6ia3cccusaeqypkq9sfjv wodnesdæg 0 336234 2571752 2222888 2026-10-18T16:49:40Z Hiyuune 50834 2571752 wikitext text/x-wiki =={{langname|ang}}== ==={{ĐM|alter}}=== * {{alter|ang|*wēdnesdæġ|wōdnesdœġ}} ==={{ĐM|etymology}}=== Từ {{compound|ang|Wōdnes|gloss1=gen. của {{mention|ang|Wōden}}|dæġ|t2=ngày}}, từ {{inherited|ang|gmw-pro|*Wōdanas dag}}, bản dịch sao phổng của {{derived|ang|la|diēs Mercuriī}}. ==={{ĐM|pron}}=== * {{ang-IPA|wōdnes-dæġ}} ==={{ĐM|n}}=== {{ang-noun|wōdnesdæġ|m}} # [[thứ tư|Thứ tư]]. ===={{ĐM|decl}}==== {{ang-decl-noun-a-m|wōdnesdæġ|wōdnesdag}} ===={{ĐM|desc}}==== * {{desctree|enm|Wednesday}} 8osfc9t719oeu4j7upyr3bcs6ztuft9 wodnesdœg 0 336240 2571738 2222894 2026-10-18T16:39:30Z Hiyuune 50834 /* Tiếng Anh cổ */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]) 2571738 wikitext text/x-wiki =={{langname|ang}}== ==={{ĐM|n}}=== {{ang-noun|wōdnesdœġ|m}} # {{alternative form of|ang|wōdnesdæġ}} po59pfv2p89w9b4ahek04anvoj8s9y4 þunresdæg 0 336268 2571745 2222950 2026-10-18T16:46:45Z Hiyuune 50834 /* Danh từ */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]) 2571745 wikitext text/x-wiki =={{langname|ang}}== ==={{ĐM|etymology}}=== {{dercat|ang|la}} Từ {{inherited|ang|gmw-pro|*Þunras dag|t=thứ năm}}. Tương đương với {{compound|ang|þunor|alt1=Þunres|t1=sấm, sét|dæġ|t2=ngày}}. ==={{ĐM|pron}}=== * {{ang-IPA|þunres-dæġ}} ==={{ĐM|noun}}=== {{ang-noun|þunresdæġ|m}} # [[thứ năm|Thứ năm]]. ===={{ĐM|decl}}==== {{ang-decl-noun-a-m|þunresdæġ|þunresdag}} ===={{ĐM|rel}}==== * {{l|ang|þursdæġ}} {{qualifier|có thể là một sự thâu hẹp hoặc có nguồn gốc từ một ngôn ngữ Bắc Đức}} 9ae7fx9ahx8xi1mcephkqau5v4oktg8 frigedæg 0 336284 2571741 2222961 2026-10-18T16:45:17Z Hiyuune 50834 /* Danh từ */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]) 2571741 wikitext text/x-wiki =={{langname|ang}}== ==={{ĐM|alter}}=== * {{alter|ang|frigdæg}} ==={{ĐM|etymology}}=== Từ {{inherited|ang|gmw-pro|*Frījā dag}}, dịch mô phỏng của {{derived|ang|la|diēs Veneris||thứ sáu|lit=ngày của Sao Kim}}. ==={{ĐM|pron}}=== * {{ang-IPA|frīġe-dæġ}} ==={{ĐM|n}}=== {{ang-noun|m|frīġedæġ}} # [[thứ sáu|Thứ sáu]]. ===={{ĐM|decl}}==== {{ang-decl-noun-a-m|frīġedæġ|frīġedag}} ===={{ĐM|derived}}==== * {{l|ang|frīġeniht||đêm thứ năm}} * {{l|ang|frīġeǣfen||đêm thứ năm}} ===={{ĐM|desc}}==== * {{desctree|enm|Friday}} 0oum3itid2z9lpnsgfwp9ich3h3cw7j 2571742 2571741 2026-10-18T16:45:26Z Hiyuune 50834 /* Danh từ */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]) 2571742 wikitext text/x-wiki =={{langname|ang}}== ==={{ĐM|alter}}=== * {{alter|ang|frigdæg}} ==={{ĐM|etymology}}=== Từ {{inherited|ang|gmw-pro|*Frījā dag}}, dịch mô phỏng của {{derived|ang|la|diēs Veneris||thứ sáu|lit=ngày của Sao Kim}}. ==={{ĐM|pron}}=== * {{ang-IPA|frīġe-dæġ}} ==={{ĐM|n}}=== {{ang-noun|frīġedæġ|m}} # [[thứ sáu|Thứ sáu]]. ===={{ĐM|decl}}==== {{ang-decl-noun-a-m|frīġedæġ|frīġedag}} ===={{ĐM|derived}}==== * {{l|ang|frīġeniht||đêm thứ năm}} * {{l|ang|frīġeǣfen||đêm thứ năm}} ===={{ĐM|desc}}==== * {{desctree|enm|Friday}} 20t8kvr4y6svh268ez67nnfncsgkpll sunnandæg 0 336352 2571743 2223049 2026-10-18T16:45:59Z Hiyuune 50834 2571743 wikitext text/x-wiki =={{langname|ang}}== ==={{ĐM|etymology}}=== Từ {{inherited|ang|gmw-pro|*sunnōn dag}}, bản dịch sao phỏng của {{derived|ang|la|dies Solis}}. Cùng nguồn gốc với {{cognate|ofs|sunnandei}}, {{cognate|osx|sunnundag}}, {{cognate|goh|sunnuntag}}, {{cognate|non|sunnudagr}}. Tương đương với {{mention|ang|sunne|sunnan}} (“Mặt Trời”) + {{mention|ang|dæġ||ngày}}. ==={{ĐM|pron}}=== * {{ang-IPA|sunnan-dæġ}} ==={{ĐM|n}}=== {{ang-noun|sunnandæġ|m}} # [[Chủ nhật]]. ===={{ĐM|decl}}==== {{ang-decl-noun-a-m|sunnandæġ|sunnandag}} ===={{ĐM|derived}}==== * {{l|ang|Palmsunnandæġ||Chúa Nhật Lễ Lá}} * {{l|ang|sunnanmorgen||sáng Chủ Nhật}} * {{l|ang|sunnanniht||tối thứ bảy}} * {{l|ang|sunnanǣfen||tối thứ bảy}} ===={{ĐM|desc}}==== * {{desctree|enm|Sunnenday}} 0dyy34hlrzh7cqf5lxxd2s1czqmdscl atroflar 0 346430 2571787 2241225 2026-10-19T03:38:18Z Hiyuune 50834 /* Tiếng Uzbek */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]) 2571787 wikitext text/x-wiki =={{langname|uz}}== ==={{ĐM|noun}}=== {{head|uz|Biến thể hình thái danh từ}} # {{plural of|uz|atrof}} gz1fesdov5azive846lr1auqwg6tioo Thể loại:Tiếng Aranadan 14 356099 2571757 2260538 2026-10-18T16:52:53Z Hiyuune 50834 2571757 wikitext text/x-wiki {{auto cat|Ấn Độ}} b6cgao1hemkzo2nbgswr2fkvypvfr5v ὠκέα 0 364433 2571759 2287177 2026-10-18T18:52:29Z Hiyuune 50834 2571759 wikitext text/x-wiki =={{langname|grc}}== ==={{section|pron}}=== {{grc-IPA|ὠκέᾰ}} ==={{section|adj}}=== {{grc-adjective form|ὠκέᾰ}} # {{infl of|grc|ὠκῠ́ς||nom//voc|ở|f|s|;|nom//acc//voc|ở|n|p}} gr3zga6txt4uya6xq57w56f9hjru8p1 ὠκύς 0 364436 2571733 2289153 2026-10-18T16:26:32Z Hiyuune 50834 /* Biến cách */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]) 2571733 wikitext text/x-wiki =={{langname|grc}}== ==={{section|alt}}=== * {{alter|grc|ὠκήεις||koi|poi}} ==={{section|etym}}=== {{root|grc|ine-pro|*h₁eḱ-}} Từ {{inh|grc|ine-pro|*HéHḱus|*h₁oh₁ḱús|t=nhanh}}. Cùng gốc với {{cog|sa|आशु|tr=āśú}} và {{cog|la|ocior}}, có thể liên quan đến {{mention|grc|ἵππος}}. ==={{section|pron}}=== {{grc-IPA|ὠκῠ́ς}} ==={{section|adj}}=== {{grc-adj-1&3|ὠκῠ́ς|ὠκέᾰ|f2=ὠκεῖᾰ|ὠκῠ́}} # {{lb|grc|chiefly|poetic}} [[nhanh|Nhanh]] ===={{section|decl}}==== {{grc-adecl|ὠκῠ́ς|ὠκεῖᾰ |FNS=ὠκέᾰ/ὠκεῖᾰ |super=ὤκῐστος/ὠκῠ́τᾰτος |dial=att}} {{grc-adecl|ὠκῠ́ς|ὠκεῖᾰ |MDS=ὠκεῖ/ὠκέῐ̈ |FNS=ὠκέᾰ |NDS=ὠκεῖ/ὠκέῐ̈ |adv=ὦκᾰ/ὠκῠ́ |comp=ὠκῑ́ων/ὠκῠ́τερος |super=ὤκῐστος/ὠκῠ́τᾰτος |dial=epi}} {{grc-adecl|ὠκῠ́ς|ὠκεῖᾰ |MNP=ὠκέες |FNS=ὠκέᾰ |super=ὤκῐστος/ὠκῠ́τᾰτος |dial=ion}} ===={{section|syn}}==== * {{l|grc|ταχύς}} ===={{section|drv}}==== {{col3|grc |πόδας ὠκύς |ποδώκης |ὠκύροος |ὠκύπορος }} ===={{section|rel}}==== * {{l|grc|ὀξύς}} * {{l|grc|ἀκή}} * {{l|grc|ἀκμή}} ==={{section|ref}}=== * {{R:LSJ}} * {{R:Middle Liddell}} * {{R:Autenrieth}} * {{R:Bailly}} * {{R:Cunliffe}} * {{R:Slater}} * {{R:Woodhouse}} 8v1zlt0l5hx0c4a8qa0ekeafzu3mrmg hægel 0 373586 2571655 2307945 2026-10-18T13:58:45Z TheHighFighter2 42988 2571655 wikitext text/x-wiki =={{langname|ang}}== ==={{section|pron}}=== * {{ang-IPA|hæġel}} ==={{section|n}}=== {{ang-noun|hæġel|m}} # {{alternative form of|ang|hæġl}}. ===={{section|decl}}==== {{ang-decl-noun-a-m|hæġel}} bbz8ja1fq4jg1a0wo1wy806zo9axvkl cise 0 373862 2571751 2308592 2026-10-18T16:49:25Z Hiyuune 50834 2571751 wikitext text/x-wiki =={{langname|ang}}== ==={{section|pron}}=== * {{ang-IPA|ċīse}} ==={{section|n}}=== {{ang-noun|ċīse|m}} {{tlb|ang|Early West Saxon|}} # {{alternative form of|ang|ċīese}} ===={{section|decl}}==== {{ang-decl-noun-ja-m|ċīs}} readr63hp7a4pixyaup2025a9gka8xp hunticge 0 374192 2571650 2309360 2026-10-18T13:49:19Z TheHighFighter2 42988 /* Danh từ */ 2571650 wikitext text/x-wiki =={{langname|ang}}== ==={{section|alt}}=== * {{alt|ang|hundiċġe}} * {{alt|ang|huntiċġean|hundiċġean||bổ cách, số nhiều}} ==={{section|etym}}=== Từ {{suffix|ang|huntan|-iċġe}}. ==={{section|pron}}=== * {{ang-IPA|huntiċġe}} ==={{section|n}}=== {{ang-noun|huntiċġe|f}} # Người [[đàn bà]] đi [[săn]]. #: {{syn|ang|huntiestre}} ===={{section|decl}}==== {{ang-decl-noun-n-f|huntiċġ}} ===={{section|rel}}==== * {{l|ang|hunta}} 0qer8ql0eixr28h6kp7493bx8xkr00d gagolle 0 374197 2571640 2309365 2026-10-18T13:30:31Z TheHighFighter2 42988 /* Danh từ */ 2571640 wikitext text/x-wiki =={{langname|ang}}== ==={{section|pron}}=== * {{ang-IPA|gagolle}} ==={{section|n}}=== {{ang-noun||mf}} # {{alternative form of|ang|gagel}}. ===={{section|decl}}==== {{ang-decl-noun-n-f|gagoll}} 1euczekto4pddus79oic87m1y3nkbmp gagel 0 374201 2571643 2309370 2026-10-18T13:33:38Z TheHighFighter2 42988 2571643 wikitext text/x-wiki =={{langname|ang}}== ==={{section|alt}}=== * {{alter|ang|gagelle|gagille|gagolle||weak}} ==={{section|etym}}=== Từ {{inh|ang|gem-pro|*gagulaz}}. ==={{section|n}}=== {{ang-noun||mf}} # {{taxfmt|Myrica gale|loài}}. ===={{section|decl}}==== {{ang-decl-noun-a-m|gagel}} ==={{section|ref}}=== * {{R:ang:BT|gagel|ref=13200}} glk1xpr9hrit38skfmzagip19akz5ow 2571644 2571643 2026-10-18T13:34:13Z TheHighFighter2 42988 2571644 wikitext text/x-wiki =={{langname|ang}}== ==={{section|alt}}=== * {{alter|ang|gagelle|gagille|gagolle||yếu}} ==={{section|etym}}=== Từ {{inh|ang|gem-pro|*gagulaz}}. ==={{section|n}}=== {{ang-noun||mf}} # {{taxfmt|Myrica gale|loài}}. ===={{section|decl}}==== {{ang-decl-noun-a-m|gagel}} ==={{section|ref}}=== * {{R:ang:BT|gagel|ref=13200}} 7nqi2ee3xk9ilrhl8iycquyfq7r00kp gagille 0 374266 2571642 2309508 2026-10-18T13:32:11Z TheHighFighter2 42988 2571642 wikitext text/x-wiki =={{langname|ang}}== ==={{section|pron}}=== * {{ang-IPA|gagille}} ==={{section|n}}=== {{ang-noun||mf}} # {{alternative form of|ang|gagel}}. ===={{section|decl}}==== {{ang-decl-noun-n-f|gagill}} bbys3ybc890u94yoz8dditb0tu3ctj0 gagelle 0 374272 2571641 2309517 2026-10-18T13:31:24Z TheHighFighter2 42988 2571641 wikitext text/x-wiki =={{langname|ang}}== ==={{section|pron}}=== * {{ang-IPA|gagelle}} ==={{section|n}}=== {{ang-noun||mf}} # {{alternative form of|ang|gagel}}. ===={{section|decl}}==== {{ang-decl-noun-n-f|gagell}} ffzuqzxabb76374er2gc7pbfpvffjjw frignys 0 374276 2571651 2309522 2026-10-18T13:51:21Z TheHighFighter2 42988 /* Tiếng Anh cổ */ 2571651 wikitext text/x-wiki =={{langname|ang}}== ==={{section|pron}}=== * {{ang-IPA|friġnys}} ==={{section|n}}=== {{ang-noun|friġnys|f}} # {{alternative form of|ang|frigenes}}. ===={{section|decl}}==== {{ang-decl-noun-o-f|friġnyss|nomsg=friġnys}} p98trzyyep3djrntr6dk33l2otvzbqg Từ tái tạo:Tiếng Anh cổ/sweordfisc 0 375158 2571748 2311101 2026-10-18T16:48:04Z Hiyuune 50834 2571748 wikitext text/x-wiki {{reconstruction}} =={{langname|ang}}== ==={{section|pron}}=== {{dercat|ang|gmw-pro|inh=1}} Từ {{inh|ang|gem-pro|*swerdafiskaz}}. Cùng gốc với {{cog|gml|swertvisch}}, {{cog|goh|swertfisc}}, {{cog|non|sverðfiskr}}. ==={{section|pron}}=== * {{ang-IPA|sweord-fisċ}} ==={{section|n}}=== {{ang-noun|*sweordfisċ|m|*sweordfiscas}} # [[cá kiếm|Cá kiếm]]. ===={{section|decl}}==== {{ang-decl-noun-a-m|*sweordfisċ|*sweordfisc}} ===={{section|desc}}==== * {{desc|enm|swerdfysche}} ** {{desc|en|swordfish}} {{C|ang|Họ Cá thu ngừ}} [[en:Reconstruction:Old English/sweordfisc]] j4hdlwn0vuyrcl21zfudw0d9rxaus6p geligre 0 377465 2571652 2315916 2026-10-18T13:53:50Z TheHighFighter2 42988 2571652 wikitext text/x-wiki =={{langname|ang}}== ==={{ĐM|alter}}=== * {{alter|ang|ġeliġere|ġeliġer}} ==={{ĐM|etym}}=== Từ {{inh|ang|gem-pro|*galigriją}}, tức tương đương {{prefix|ang|ġe|*liġre}}. Cùng gốc với {{cog|got|𐌲𐌰𐌻𐌹𐌲𐍂𐌹}}. ==={{ĐM|pron}}=== * {{ang-IPA|ġeliġre}} ==={{ĐM|noun}}=== {{ang-noun|ġeliġre|n|ġeliġru}} # Sự ăn nằm với ai đó; {{lb|ang|by extension}} [[gian dâm]]; [[ngoại tình]]. ===={{ĐM|der}}==== * {{l|ang|dyrneġeliġere}} ===={{ĐM|rel}}==== * {{l|ang|forliġre}} hs480lcgozwe61simfw34fez485hpjk 2571653 2571652 2026-10-18T13:54:22Z TheHighFighter2 42988 /* Danh từ */ 2571653 wikitext text/x-wiki =={{langname|ang}}== ==={{ĐM|alter}}=== * {{alter|ang|ġeliġere|ġeliġer}} ==={{ĐM|etym}}=== Từ {{inh|ang|gem-pro|*galigriją}}, tức tương đương {{prefix|ang|ġe|*liġre}}. Cùng gốc với {{cog|got|𐌲𐌰𐌻𐌹𐌲𐍂𐌹}}. ==={{ĐM|pron}}=== * {{ang-IPA|ġeliġre}} ==={{ĐM|noun}}=== {{ang-noun|ġeliġre|n|ġeliġru}} # Sự [[ăn nằm]] với ai đó; {{lb|ang|by extension}} [[gian dâm]]; [[ngoại tình]]. ===={{ĐM|der}}==== * {{l|ang|dyrneġeliġere}} ===={{ĐM|rel}}==== * {{l|ang|forliġre}} 7d3o6i06rec159djcp3augg9gwpx8k1 sibbegedriht 0 378916 2571729 2318919 2026-10-18T16:21:35Z Hiyuune 50834 /* Tiếng Anh cổ */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]) 2571729 wikitext text/x-wiki =={{langname|ang}}== ==={{section|etym}}=== Từ {{compound|ang|sibb|gedryht}}. ==={{section|pron}}=== * {{ang-IPA|sibbe-ġedriht}} ==={{section|n}}=== {{ang-noun|sibbeġedriht|f}} # {{lb|ang|poetic}} [[băng đảng|Băng đảng]] anh em. snx0fj8l720zm7x0xuswn2lm5yb2jhm geleorednys 0 389663 2571654 2338891 2026-10-18T13:55:24Z TheHighFighter2 42988 2571654 wikitext text/x-wiki =={{langname|ang}}== ==={{section|pron}}=== * {{ang-IPA|ġeleorednys}} ==={{section|n}}=== {{ang-noun|ġeleorednys|f}} # {{alternative form of|ang|ġeleorednes}}. 0a12n3lf2fsf6uxwhpqlxladm7tjc7h ærfæder 0 394914 2571649 2348766 2026-10-18T13:47:14Z TheHighFighter2 42988 2571649 wikitext text/x-wiki =={{langname|ang}}== ==={{ĐM|etym}}=== Từ {{com|ang|ǣr|t1=trước|fæder|t2=cha}}. ==={{ĐM|pron}}=== * {{ang-IPA|ǣr-fæder}} ==={{ĐM|noun}}=== {{ang-noun|ǣrfæder|m}} # [[tổ tiên|Tổ tiên]]. {{topics|ang|Mọi người}} 0gwmysro133yyu1q37wjfamww8lysi0 ingewinn 0 400442 2571647 2363578 2026-10-18T13:43:46Z TheHighFighter2 42988 2571647 wikitext text/x-wiki =={{langname|ang}}== ==={{ĐM|etym}}=== Từ {{prefix|ang|in|ġewinn}}. ==={{ĐM|pron}}=== * {{ang-IPA|in-ġewinn}} ==={{ĐM|noun}}=== {{ang-noun|inġewinn|n}} # [[nội chiến|Nội chiến]]. #: {{syn|ang|inġefeoht}} ===={{ĐM|decl}}==== {{ang-decl-noun-a-n|inġewinn}} szb6n9lbskpuq9qbjyqjpedbajiyom5 beorþorþinen 0 406633 2571636 2442290 2026-10-18T13:26:12Z TheHighFighter2 42988 /* Noun */ 2571636 wikitext text/x-wiki =={{langname|ang}}== ==={{ĐM|alter}}=== * {{alter|ang|byrþorþīnen|byrþþignenu}} ==={{ĐM|etym}}=== Từ {{compound|ang|beorþor|þīnen|t1=sự sinh đẻ|t2=nữ phụ tá, người hầu gái}}. ==={{ĐM|pron}}=== * {{ang-IPA|beorþor-þīnen}} ===Noun=== {{ang-noun|beorþorþīnen|f}} # [[bà đỡ|Bà đỡ]]. ===={{ĐM|decl}}==== {{ang-decl-noun-o-f|beorþorþīnenn|nomsg=beorþorþīnen}} ==={{ĐM|ref}}=== * {{R:ang:BT|beorþorþīnen|ref=003774}} {{C|ang|Nghề nghiệp|Nữ giới}} n08jn4w5llqs7qsfv9utqdvboj6e5sq 2571638 2571636 2026-10-18T13:26:46Z TheHighFighter2 42988 2571638 wikitext text/x-wiki =={{langname|ang}}== ==={{ĐM|alter}}=== * {{alter|ang|byrþorþīnen|byrþþignenu}} ==={{ĐM|etym}}=== Từ {{compound|ang|beorþor|þīnen|t1=sự sinh đẻ|t2=nữ phụ tá, người hầu gái}}. ==={{ĐM|pron}}=== * {{ang-IPA|beorþor-þīnen}} ==={{ĐM|noun}}=== {{ang-noun|beorþorþīnen|f}} # [[bà đỡ|Bà đỡ]]. ===={{ĐM|decl}}==== {{ang-decl-noun-o-f|beorþorþīnenn|nomsg=beorþorþīnen}} ==={{ĐM|ref}}=== * {{R:ang:BT|beorþorþīnen|ref=003774}} {{C|ang|Nghề nghiệp|Nữ giới}} b1rez30hdqc5rz8k35wzcq9xii5d3p1 Từ tái tạo:Tiếng Ấn-Âu nguyên thủy/-wós 0 414383 2571815 2560156 2026-10-19T08:41:23Z Hiyuune 50834 /* Tiếng Ấn-Âu nguyên thủy */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]) 2571815 wikitext text/x-wiki {{also|Từ tái tạo:Tiếng Ấn-Âu nguyên thủy/-wṓs}} {{reconstructed}} =={{langname|ine-pro}}== {{etymon|ine-pro|id=hậu tố tính từ|pos=suffix}} ==={{section|suffix}}=== {{head|ine-pro|Hậu tố|cat2=Dạng hậu tố tính từ|head=*-wós}} # {{non-gloss|Tạo các dạng của tính từ với thân của động từ.}} ===={{section|infl}}==== {{ine-decl-adj|-wó}} ===={{section|drv}}==== {{suffixsee|ine-pro}} * {{l|ine-pro||*-iHwós}} ** {{desc|ae|-𐬌𐬎𐬎𐬀}} {{q|cf. {{l|ae|𐬠𐬁𐬨𐬀𐬥𐬌𐬎𐬎𐬀}} từ {{l|ae|𐬠𐬁𐬨𐬀}}}} ** {{desctree|grc|-εῖος|qq=một phần}} ** {{desc|la|-īvus}} {{see desc}} ===={{section|desc}}==== * {{desctree|ine-bsl-pro|*-was}} * {{desc|gem-pro|*-waz}} * {{desc|cel-pro|*-wos}} * {{desc|grk-pro|*-wós}} ** {{desc|grc|-ός}} * {{desc|iir-pro|*-wás}} ** {{desc|inc-pro|*-wás}} *** {{desc|sa|-व|tr=-vá}} ** {{desc|ira-pro|*-wáh}} *** {{desc|ae|-𐬎𐬎𐬀}} *** {{desc|lrc|ڤںە|tr=və}} [[en:Reconstruction:Proto-Indo-European/-wós]] nlt7ik9iztp7opwfcufsln90raldc47 Mô đun:sa-decl/sandbox 828 420612 2571610 2026-10-18T12:22:57Z Hiyuune 50834 Trang mới: “--[==[ This module implements the declension tables of Sanskrit nouns and numerals ({{tl|sa-ndecl}}) and of adjectives ({{tl|sa-adecl}}). Authorship: originally written by [[User:Dragonoid76]] and [[User:Benwing2]], with the declension rules of [[User:Exarchus]]; rewritten by [[User:Fenakhay]] in October 2026. TERMINOLOGY: * "head" = The form given in the call: the nominative singular, or the stem for consonant stems. It is followed by an inline spec of indicators, e…” 2571610 Scribunto text/plain --[==[ This module implements the declension tables of Sanskrit nouns and numerals ({{tl|sa-ndecl}}) and of adjectives ({{tl|sa-adecl}}). Authorship: originally written by [[User:Dragonoid76]] and [[User:Benwing2]], with the declension rules of [[User:Exarchus]]; rewritten by [[User:Fenakhay]] in October 2026. TERMINOLOGY: * "head" = The form given in the call: the nominative singular, or the stem for consonant stems. It is followed by an inline spec of indicators, e.g. `{{sa-ndecl|devá<m>}}` or `{{sa-adecl|kṛṣṇá<f:kṛṣṇā́.novedic>}}`. * "stem class" = One way of declining, e.g. the a-stems, the i- and u-stems or the root stems. The classes in [[Module:sa-decl/data]] are tried on the head in order, and the first one that takes it gives the "stem" (the head minus its ending). The class's other stems are made from that one; see `Analysis:vowelStems`. * "slot" = A particular combination of case and number, e.g. `nom_s` or `loc_p`. Each slot is one cell of a table. * "form group" = One set of endings from [[Module:sa-decl/data]], together with the stems, accent and sandhi options in force when it was added. A table is made of the forms of its groups, each joined with `join` in [[Module:sa-utilities]]. Everything is worked out in SLP1, and shown in the script of the head (or of the page name) with the IAST below. The classes, by area: * The call: `Spec` (the inline spec of a head), `Overrides` (the cell parameters) and `ScriptBridge` (conversion between the input script and SLP1). * The analysis: `Head` (finds the stem class of a head), `Analysis` (the decisions of one stem class, with one method per class that adds `FormGroup`s) and `FormGenerator` (makes the forms of a group). * The result: `Declension` (one table, with the forms of every slot, its notes and its categories), `AdjectiveDeclension` (the tables of an adjective) and `TableRenderer`. Other modules used: [[Module:sa-decl/data]] (the endings and every other table, loaded with mw.loadData), [[Module:sa-utilities]] (sandhi), [[Module:inflection-table]] (the frame of each table, and the box around an adjective's tables) and [[Module:inflection utilities]] (the links, transliteration, accelerators and footnotes in the cells). ]==] local export = {} local M = require("Module:module loader").init { require = { inflection_table = "Module:inflection-table", inflection_utilities = "Module:inflection utilities", JSON = "Module:JSON", links = "Module:links", parameters = "Module:parameters", parse_utilities = "Module:parse utilities", sa_utilities = "Module:sa-utilities", scripts = "Module:scripts", utilities = "Module:utilities", }, loadData = { data = "Module:sa-decl/data", headword_data = "Module:headword/data", }, lazy = { lang = function() return require("Module:languages").getByCode("sa") end, }, } ------------------------------------------------------------------------------------------------------------------------ -- Script -- ------------------------------------------------------------------------------------------------------------------------ --[==[ Convert the call's input to SLP1, and SLP1 to the display script and to IAST. The display script is the script of the head. If the head is in IAST (i.e. Latin), it is the script of the page name instead, and failing that, Devanagari. Latin input is read as IAST; anything else goes through the display script's converter. ]==] local ScriptBridge = {} ScriptBridge.__index = ScriptBridge function ScriptBridge.new(head, pagename) local script = M.lang:findBestScript(head) if script:getCode() == "None" then script = M.lang:findBestScript(pagename) end if script:getCode() == "None" then script = M.scripts.getByCode("Deva") end local code = script:getCode() return setmetatable({ script = script, code = code, from_native = require("Module:sa-utilities/translit/" .. code .. "-to-SLP1").tr, to_native = require("Module:sa-utilities/translit/SLP1-to-" .. code).tr, from_iast = require("Module:sa-utilities/translit/IAST-to-SLP1").tr, to_iast = require("Module:sa-utilities/translit/SLP1-to-IAST").tr, }, ScriptBridge) end function ScriptBridge:toSlp1(text) if M.lang:findBestScript(text):getCode() == "None" then return self.from_iast(text) end return self.from_native(text) end -- Only Devanagari shows the accents, so strip them for any other script. function ScriptBridge:toNative(slp1) if self.code ~= "Deva" then slp1 = string.gsub(slp1, M.sa_utilities.accent, "") end return self.to_native(slp1) end function ScriptBridge:toIast(slp1) return self.to_iast(slp1) end ------------------------------------------------------------------------------------------------------------------------ -- Spec -- ------------------------------------------------------------------------------------------------------------------------ --[==[ The inline spec of a head, `HEAD<NAME.NAME:VALUE...>`. `Spec.parse` parses it and checks it against the indicators of `template` (`noun` or `adjective`, as keyed in `data.indicators`). The result has `head`, as written (empty means the page name), and `indicators`, keyed by name. An indicator's value is a list for a list indicator, a Spec for a spec value, and {true} for a flag. A spec value (the feminine and neuter heads of {{tl|sa-adecl}}) is itself a head with a spec of its own. It is parsed with `nested` set, and then only takes the indicators that apply to a single stem. ]==] local Spec = {} Spec.__index = Spec local function spec_error(message, text) error(message .. " in the spec '" .. text .. "'.", 0) end -- Split `text` at `separator` (a Lua pattern), except inside angle brackets. local function split_outside_brackets(text, separator) local parts = {} local segments = M.parse_utilities.parse_balanced_segment_run(text, "<", ">") for _, group in ipairs(M.parse_utilities.split_alternating_runs(segments, separator)) do table.insert(parts, table.concat(group)) end return parts end function Spec.parse(text, template, nested) text = mw.text.trim(text) local spec = setmetatable({head = text, indicators = {}}, Spec) local registry = M.data.indicators[template] local segments = M.parse_utilities.parse_balanced_segment_run(text, "<", ">") if #segments > 3 or segments[#segments] ~= "" and #segments > 1 then spec_error("Only one <...> may follow the head", text) end spec.head = mw.text.trim(segments[1]) if string.find(spec.head, ",", 1, true) then spec_error("The head is one form", text) end local needs_gender = template == "noun" and not nested if #segments == 1 then if needs_gender then spec_error("Give the gender: <m>, <f>, <n>, <num> or <pers>", text) end return spec end local inside = string.match(segments[2], "^<(.*)>$") local groups = {} for _, indicator in ipairs(split_outside_brackets(inside, "%.")) do local name, value = string.match(indicator, "^%s*([^:<]-)%s*:%s*(.-)%s*$") if not name then name = mw.text.trim(indicator) end local definition = registry[name] if definition and definition.alias then name = definition.alias definition = registry[name] end if not definition or nested and (definition.value == "spec" or definition.group == "gender") then local names = {} for known, known_definition in pairs(registry) do if not nested or known_definition.value ~= "spec" and known_definition.group ~= "gender" then table.insert(names, known) end end table.sort(names) spec_error(("Unrecognized indicator '%s'; the indicators are %s"):format(name, table.concat(names, ", ")), text) end if spec.indicators[name] ~= nil then spec_error(("The indicator '%s' is given twice"):format(name), text) end if definition.group and definition.group ~= "numbers" then if groups[definition.group] then spec_error(("The indicators '%s' and '%s' exclude each other"):format(groups[definition.group], name), text) end groups[definition.group] = name end if definition.value and (value == nil or value == "") then spec_error(("The indicator '%s' needs a value ('%s:...')"):format(name, name), text) elseif not definition.value and value ~= nil then spec_error(("The indicator '%s' takes no value"):format(name), text) end if definition.value == nil then value = true elseif definition.value == "spec" then if definition.list then local specs = {} for _, item in ipairs(split_outside_brackets(value, "%s*,%s*")) do table.insert(specs, Spec.parse(item, template, true)) end value = specs else value = Spec.parse(value, template, true) end elseif definition.list then local values = mw.text.split(value, "%s*,%s*") for _, item in ipairs(values) do if definition.values and not definition.values[item] then spec_error(("'%s' is not a value of '%s'"):format(item, name), text) end end value = values elseif definition.values and not definition.values[value] then local values = {} for known in pairs(definition.values) do table.insert(values, known) end table.sort(values) spec_error(("'%s' is not a value of '%s'; the values are %s"):format(value, name, table.concat(values, ", ")), text) end spec.indicators[name] = value end -- A manual table can do without a gender. if needs_gender and not groups.gender and not spec.indicators.manual then spec_error("Give the gender: <m>, <f>, <n>, <num> or <pers>", text) end return spec end --[==[ Return the stem properties set by the indicators of `spec`, with SLP1 values (see `export.decline_table`), on top of `inherited`. When `spec` belongs to one of an adjective's heads, `inherited` holds the adjective's shared properties. ]==] function Spec:properties(bridge, inherited) local properties = {} for key, value in pairs(inherited or {}) do properties[key] = value end local indicators = self.indicators if indicators.root then properties.root = true elseif indicators.nonroot then properties.root = false end if indicators.contract then properties.contract = true elseif indicators.nocontract then properties.contract = false end for name, property in pairs({vrki = "vrki", pron = "pron", novedic = "novedic", diaspirate = "diaspirate", participle = "participle", nonasal = "nonasal", han = "han", svarita = "svarita", ["ḷ"] = "retroflex_l"}) do if indicators[name] then properties[property] = true end end if indicators.r then properties.r = bridge.from_iast(indicators.r) end if indicators.final then properties.final = bridge.from_iast(indicators.final) end if indicators.feminine then properties.feminine = {} for _, form in ipairs(indicators.feminine) do table.insert(properties.feminine, bridge:toSlp1(form)) end end if indicators.sg or indicators.du or indicators.pl then properties.numbers = {s = indicators.sg, d = indicators.du, p = indicators.pl} end -- The pronominal declension is never a root declension, even for a monosyllable such as tā́. if properties.pron then properties.root = false end return properties end ------------------------------------------------------------------------------------------------------------------------ -- Overrides -- ------------------------------------------------------------------------------------------------------------------------ --[==[ The cell parameters. `Overrides.parse` returns, for each slot, its forms as given: a comma-separated list, each form followed by any `[footnote]`s, or `-` for no form. ]==] local Overrides = {} Overrides.__index = Overrides function Overrides.parse(values) local overrides = setmetatable({slots = {}}, Overrides) for slot, value in pairs(values) do local forms = {} local segments = M.parse_utilities.parse_balanced_segment_run(value, "[", "]") for _, group in ipairs(M.parse_utilities.split_alternating_runs(segments, "%s*,%s*")) do local footnotes = {} for i = 2, #group - 1, 2 do if mw.text.trim(group[i + 1]) ~= "" then error(("Text after a footnote in %s=%s"):format(slot, value), 0) end table.insert(footnotes, string.match(group[i], "^%[(.*)%]$")) end local form = mw.text.trim(group[1]) if form ~= "" then table.insert(forms, {written = form, footnotes = footnotes}) end end overrides.slots[slot] = forms end return overrides end ------------------------------------------------------------------------------------------------------------------------ -- Analysis -- ------------------------------------------------------------------------------------------------------------------------ --[==[ A head in SLP1. `detectClass` finds its stem class by trying the classes of `data.classes` in order. It returns the id of the first class whose genders include `gender` and one of whose patterns matches (taking the pattern's `when` or `unless` property into account), along with the stem the pattern captures. ]==] local Head = {} Head.__index = Head function Head.new(slp1) return setmetatable({slp1 = slp1}, Head) end function Head:detectClass(gender, properties) for _, class in ipairs(M.data.classes) do if class.genders[gender] then for _, pattern in ipairs(class.patterns) do local text, when, unless = pattern, nil, nil if type(pattern) == "table" then text, when, unless = pattern[1], pattern.when, pattern.unless end if (when == nil or properties[when] == true) and (unless == nil or not properties[unless]) then local stem = string.match(self.slp1, text) if stem then return class.id, stem end end end end end return nil end --[==[ One set of endings of a stem class, as added by `Analysis:add`. `class` and `set` locate it in `data.endings`, `accent` is what `@` stands for, and `stems` maps the stem keys to stems. `head` is what the `+` endings attach to, and `options` is a copy of the analysis's sandhi options at the time the group was added. ]==] local FormGroup = {} FormGroup.__index = FormGroup function FormGroup.new(fields) return setmetatable(fields, FormGroup) end --[==[ The decisions made for one stem class. An analysis starts with the head and its gender, whether the table is one of an adjective's (`adjective`), the properties set by the indicators (see `export.decline_table`) and the other heads the table looks at (`links`). The class's method then sets the `accent` that `@` stands for (the head's final accent), makes the `stems` (`base` plus whatever the class needs) and adjusts the sandhi `options`, which each group copies when it is added. What comes out is the list of `groups`, the `type` (a key of `data.types`), the `categories` (keys of `data.categories`) and the `general_notes` (keys of `data.general_notes`). ]==] local Analysis = {} Analysis.__index = Analysis function Analysis.new(input) local properties = input.properties local accented = string.match(input.head, M.sa_utilities.accent) ~= nil local analysis = setmetatable({ head = input.head, gender = input.gender, adjective = input.adjective or false, properties = properties, links = input.links or {}, class = input.class, accent = "", stems = {base = input.base}, options = { accented = accented, initial_svarita = properties.svarita or false, root_han = properties.han or false, }, groups = {}, type = nil, categories = {}, general_notes = {}, }, Analysis) -- An initial tvy-, dvy-, try-, dry- or ny- counts as two syllables, so the vocative gets an initial svarita. if accented and analysis:inLexicon("initial_svarita") then analysis.options.initial_svarita = true end return analysis end --[==[ Add the set `set` of the class's endings, with the current stems and options. `extra` can override fields of the group, e.g. to use a different `accent`. ]==] function Analysis:add(set, extra) if not M.data.endings[self.class][set] then error(("Internal error: no set '%s' of the %s endings"):format(set, self.class)) end local options, stems = {}, {} for key, value in pairs(self.options) do options[key] = value end for key, value in pairs(self.stems) do stems[key] = value end local group = {class = self.class, set = set, accent = self.accent, stems = stems, head = self.head, options = options} for key, value in pairs(extra or {}) do group[key] = value end table.insert(self.groups, FormGroup.new(group)) end function Analysis:category(key) table.insert(self.categories, key) end function Analysis:generalNote(key) table.insert(self.general_notes, key) end -- Return true if the list `name` of `data.lexicon` takes this head (or this class's stem, as the list's `subject` -- says). function Analysis:inLexicon(name) local list = M.data.lexicon[name] local subject = list.subject == "head" and self.head or self.stems.base for _, pattern in ipairs(list.except or {}) do if string.match(subject, pattern) then return false end end for _, pattern in ipairs(list.patterns) do if string.match(subject, pattern) then return true end end return false end function Analysis:headMatches(pattern) return string.match(self.head, pattern) ~= nil end function Analysis:baseMatches(pattern) return string.match(self.stems.base, pattern) ~= nil end function Analysis:monosyllabic() return M.sa_utilities.is_monosyllabic(self.head) end --[==[ Make the stems of a class ending in `vowel`, besides `base`. They are keyed as follows: `final_unaccented` (the base plus the vowel), `raised` and `raised_unaccented` (the vowel raised one grade, with and without the head's final accent), `lengthened` and `lengthened_unaccented` (the same for the lengthened vowel), `raised_glide` (the base plus ''a'' with the head's accent, plus ''v'') and `glide` (the base plus the vowel's semivowel). ]==] function Analysis:vowelStems(vowel) local utilities, base, accent = M.sa_utilities, self.stems.base, self.accent local function stem(key, ending) if ending then self.stems[key] = base .. ending end end stem("final_unaccented", vowel) stem("raised", utilities.up_one_grade[vowel .. accent]) stem("raised_unaccented", utilities.up_one_grade[vowel]) stem("lengthened", utilities.lengthen[vowel .. accent]) stem("lengthened_unaccented", utilities.lengthen[vowel]) stem("raised_glide", "a" .. accent .. "v") stem("glide", utilities.vowel_to_cons[vowel]) end -- The gender-neutral numerals: ṣáṣ; káti, táti and yáti; and páñca(n) and the like. function Analysis:numeral() self.accent = string.match(self.head, "(/?)[nz]?$") self.type = "numeral" if self:headMatches("a/?z$") then self:add("sas") self:category("numeral_s") elseif self:headMatches("ti$") then self:add("ti") self:category("numeral_i") else self:add("an_direct") -- The oblique endings take the head's own accent, wherever it falls. self:add("an_oblique", {accent = string.find(self.head, "/", 1, true) and "/" or ""}) self:category("numeral_an") end end -- The a-stems, masculine and neuter, including the pronominal declension. function Analysis:aStem() self.accent = string.match(self.head, "(" .. M.sa_utilities.accent .. "?)$") local pronominal = self.properties.pron self.type = pronominal and "pronominal_a" or "a" -- A stem-final s doesn't become ṣ (ṛbīsa, bisa). self.options.keep_stem_s = true if self.gender == "m" then self:add("masculine_direct") self:add(pronominal and "pronominal_masculine_plural" or "masculine_plural") else self:add("neuter_direct") end self:add(pronominal and "pronominal_oblique" or "nominal_oblique") self:add("oblique") -- The Vedic instrumental singular in -ā of the oxytone abstracts in -tva(na) (Lanman p.335f.). self:add(self:headMatches("tva?n?a/$") and "tva_instrumental" or "instrumental") -- The Vedic genitive/locative dual in -os after -y- (Wackernagel III p.98-99 §48a). self:add(self:baseMatches(".y$") and "genitive_dual_after_y" or "genitive_dual") self:category("a") end -- The i- and u-stems. function Analysis:shortIUStem() local vowel, accent = string.match(self.head, "([iu])(/?)$") self.accent = accent self.type = vowel self:vowelStems(vowel) if self:inLexicon("sakhi") then self:add("sakhi") elseif self.gender == "m" then if self:inLexicon("strong_masculine_i_u") then self:add("strong_masculine_singular") else self:add(self:inLexicon("vedic_instrumental_masculine") and "masculine_instrumental_vedic" or "masculine_instrumental") self:add("masculine_dative_ablative") end if vowel == "i" then -- Whitney §336f self:add("masculine_locative_i") elseif self:inLexicon("rigvedic_locative_u") then self:add("masculine_locative_u_rigvedic") else self:add("masculine_locative") end self:add("masculine_direct") elseif self.gender == "f" then self:add(vowel == "i" and "feminine_instrumental_locative_i" or "feminine_instrumental_locative_u") self:add("feminine") self:add("feminine_" .. vowel) else -- Adjectives and nouns differ in the neuter (Whitney §344). if self.adjective then self:add(self:inLexicon("strong_neuter_adjective_u") and "strong_neuter_adjective" or "neuter_adjective_dative_ablative") self:add(vowel == "i" and "neuter_adjective_locative_i" or "neuter_adjective_locative_u") self:add("neuter_adjective_genitive_dual") else self:add(self:inLexicon("strong_neuter_noun_u") and "strong_neuter_noun" or "neuter_noun_dative_ablative") self:add(vowel == "i" and "neuter_noun_locative_i" or "neuter_noun_locative_u") self:add("neuter_noun_genitive_dual") end self:add("neuter_direct") self:add(self:inLexicon("vedic_instrumental_neuter_u") and "madhu_instrumental" or "neuter_instrumental") end self:add("oblique") self:category(vowel) end -- The ā-stems, both derived (feminine) and root stems. function Analysis:longAStem() if self.gender == "n" then -- We don't build a neuter on the masculine nominatives in -ās that go with neuter nouns (Whitney §367b, -- Wackernagel III p.129). error("The neuter of radical stems in -ā ends in -a.", 0) end self.accent = string.match(self.head, "(" .. M.sa_utilities.accent .. "?)$") local pronominal, root = self.properties.pron, self.properties.root self.type = pronominal and "pronominal_long_a" or "long_a" local monosyllabic = self:monosyllabic() local masculine = self.links.masculine local derived = not (root or monosyllabic) or monosyllabic and (root == false or masculine ~= nil and string.match(masculine, "a/?$") ~= nil) if derived then if self.gender == "m" then error("Add <root> if this is a root noun or adjective.", 0) end self:category("long_a") self:add(pronominal and "pronominal_derived" or "derived") self:add("derived_direct") self:add(self:baseMatches(".y$") and "genitive_dual_after_y" or "genitive_dual") else self:category("root_long_a") if self.gender == "m" then self:generalNote("root_long_a_masculine") self:add("root_masculine") else -- The derived declension, except for the nominative singular (Macdonell p.249ff.). self:add("root_feminine") self:add(self:baseMatches(".y$") and "genitive_dual_after_y" or "genitive_dual") end end self:add("oblique") end -- The ī- and ū-stems: strī, the derived stems (the vṛkī-, devī- and ū-declensions) and the root stems. function Analysis:longIUStem() if self.gender == "n" then -- The Vedic forms that could come from a neuter ī-stem (Whitney §367b) are better given by hand. error("The neuter of radical stems in -ī/ū ends in -i/u.", 0) end local vowel, accent = string.match(self.head, "([IU])(/?)$") self.accent = accent self.type = vowel == "I" and "long_i" or "long_u" self:vowelStems(vowel) local properties, masculine = self.properties, self.links.masculine local monosyllabic = self:monosyllabic() local feminine = self.gender == "f" if self:inLexicon("stri") and not (masculine and string.match(masculine, "stf/?$")) then self.options.iy_uv_before_vowel = true self:add("stri") elseif not (properties.root or monosyllabic) or monosyllabic and properties.root == false or properties.han then if properties.vrki then -- The vṛkī́-declension (Whitney §355ff.), given as the older forms of the later declension. if vowel == "U" then error("The vṛkī́-declension (<vrki>) is a declension of ī-stems.", 0) end self:category("vrki") self:generalNote("vrki") if properties.contract == false then self.options.iy_uv_before_vowel = true end self:add("vrki") self:add(accent == "" and "vrki_instrumental_barytone" or "vrki_instrumental_oxytone") self:add(accent == "" and "vrki_genitive_dual_barytone" or "vrki_genitive_dual_oxytone") elseif vowel == "I" then self:category("long_i") self:add("devi") -- The Rigvedic genitive plural in -īnā́m (Whitney §319a). self:add(accent == "" and "devi_genitive_plural_barytone" or "devi_genitive_plural_oxytone") else -- Whitney §356a, given as the older forms of §364 (Wackernagel III p.189). if not self.adjective then self:category("long_u") elseif self.gender == "m" then self:category("long_u") elseif masculine and string.match(masculine, "u" .. M.sa_utilities.accent .. "?$") and not self:inLexicon("classical_long_u_feminine") then self:generalNote("vedic_long_u_feminine") end if self:baseMatches("y$") or self:inLexicon("vedic_uv") then -- With the Vedic -úv- (Macdonell p.290 §384a). self:add("vedic_uv") else self:add("u_derived") self:add(accent == "" and "u_instrumental_barytone" or "u_instrumental_oxytone") self:add(accent == "" and "u_genitive_dual_barytone" or "u_genitive_dual_oxytone") end self:add("u_nominative_genitive") end self:add("derived_oblique") self:add(vowel == "I" and "derived_vocative_i" or "derived_vocative_u") else self:category(vowel == "I" and "root_long_i" or "root_long_u") if monosyllabic then -- Root nouns (Whitney §351; Wackernagel III p.181). self.options.iy_uv_before_vowel = true self:add(feminine and "root_monosyllabic_feminine" or "root_monosyllabic") self:add("root_monosyllabic_oblique") else -- Compounds of root nouns (Whitney §352; Wackernagel III §91a p.179, §100a, §100eα p.192-193; Macdonell -- p.268, 288). These are uncontracted after two consonants, and the ū-stems also when accented, except in -- -sū/-ṣū. local utilities = M.sa_utilities local uncontracted = properties.contract == false or properties.contract ~= true and ( self:baseMatches(utilities.consonant .. utilities.consonant .. "$") or vowel == "U" and (self:headMatches(utilities.accent) and not self:baseMatches("[sz]$") or self:inLexicon("uncontracted_long_u_compound")) or vowel == "I" and (self:inLexicon("uncontracted_long_i_compound") or self:baseMatches("D$") and self:baseMatches(utilities.accent))) if uncontracted then -- -Ciy-/-Cuv- before a vowel. self.options.iy_uv_before_vowel = true self:add(feminine and "uncontracted_locative_feminine" or "uncontracted_locative") else self:add((accent ~= "" and "contracted_locative_oxytone" or "contracted_locative") .. (feminine and "_feminine" or "")) end self:add(feminine and "compound_feminine_dative_ablative" or "compound_dative_ablative") self:add("compound_oblique") end self:add("root_common") end end -- The ṛ-stems. function Analysis:vocalicRStem() local r = self.properties.r if self.gender == "f" and r == "A" and self:baseMatches("t$") and not self:baseMatches("^s?t$") then error("The feminine of adjectives in -tṛ ends in -trī.", 0) end self.accent = string.match(self.head, "(/?)$") self.type = "vocalic_r" self.stems.lengthened_unaccented = self.stems.base .. "F" if self.gender == "n" then self:add("neuter") else if not r then error("Give the vowel of the accusative singular with <r:a> or <r:ā>.", 0) end self:add("masculine_feminine") self:add(r == "a" and "strong_short_a" or "strong_long_a") self:add(self.gender == "f" and "feminine_accusative_plural" or "masculine_accusative_plural") end self:add("oblique") self:category("vocalic_r") end -- The consonantal root stems. These also cover the stems in -āt/-it/-ut/-ṛt, -akt and -ās/-os, and púṃs. function Analysis:rootStem() local utilities = M.sa_utilities local vowel, accent, extra, final = string.match(self.head, "(" .. utilities.vowel .. ")(" .. utilities.accent .. "?)([rM]?)([kgGcjwqtTdDpBmrzShs]t?)$") if string.match(final, "[jSh]") and not self.properties.final then error("Give the final consonant of the nominative singular with <final:k> or <final:ṭ>.", 0) end self.accent = accent self.type = "root" self.options.root_noun = true self.options.final_obstruent = self.properties.final self.options.diaspirate = self.properties.diaspirate or false local nasal = string.gsub(final, ".", utilities.homorganic_nasal) self.stems.neuter_plural = self.stems.base .. vowel .. accent .. nasal .. final self.stems.neuter_plural_unaccented = self.stems.base .. vowel .. nasal .. final if self.gender == "n" then -- The neuter nominative plural, with the nasal (Whitney §389c). self:add((string.match(final, "[mr]") == nil and extra == "") and "neuter_plural_nasal" or "neuter_plural") end if self:inLexicon("pums") then self:add("pums") elseif self:monosyllabic() and not (accent == "\\" or self.options.initial_svarita) then self:add(self.gender == "n" and "monosyllabic_neuter_direct" or "monosyllabic_direct") self:add("monosyllabic_oblique") self:add(final == "s" and "monosyllabic_locative_plural_s" or "monosyllabic_locative_plural") else if self.gender == "n" then self:add("polysyllabic_neuter_direct") else self:add("polysyllabic_direct") -- The Vedic masculine nominative singular of the adjectives in -dṛ́ś (Wackernagel III p.246). self:add((self.gender == "m" and self:inLexicon("vedic_nominative_drs")) and "drs_nominative" or "polysyllabic_nominative") end self:add("polysyllabic_oblique") self:add(final == "s" and "polysyllabic_locative_plural_s" or "polysyllabic_locative_plural") end self:category("root") end -- The as-, is- and us-stems, including the comparatives in -yas. function Analysis:sStem() local utilities = M.sa_utilities local vowel, accent = string.match(self.head, "([aiu])(" .. utilities.accent .. "?)s$") self.accent = accent self.type = vowel .. "s" local base = self.stems.base self.stems.neuter_plural = base .. utilities.lengthen[vowel] .. accent .. "Ms" self.stems.neuter_plural_unaccented = base .. utilities.lengthen[vowel] .. "Ms" local comparative = vowel == "a" and (self:baseMatches("[^aAiK/\\]" .. utilities.accent .. "?y$") or self:baseMatches("jyA/?y$")) if comparative and self.gender ~= "n" then if self.gender ~= "m" then error("The feminine of comparatives in -yas ends in -yasī.", 0) end self:add("comparative_masculine") elseif self.gender == "m" or self.gender == "f" then if vowel == "a" then self:add("as_direct") else self:add("is_us_direct") -- The Vedic vocative (Wackernagel III p.292 §152c). self:add(vowel == "i" and "is_vocative" or "us_vocative") end self:add("masculine_feminine_dual") else -- Compound adjectives in -as (Macdonell p.226; Whitney §418a). if self.adjective and vowel == "a" and not comparative and (self:baseMatches(utilities.vowel .. ".*" .. utilities.vowel) or self:baseMatches("^sv")) then self:add("compound_as_neuter_nominative") else self:add("neuter_nominative") end self:add("neuter_direct") end self:add("oblique") self:category(comparative and "comparative" or vowel .. "s") end -- The an-stems. function Analysis:anStem() local utilities = M.sa_utilities self.accent = string.match(self.head, "a(" .. utilities.accent .. "?)n$") self.type = "an" self.options.retroflex_stem_n = true local properties = self.properties local contract = properties.contract if not self:baseMatches(utilities.consonant .. "[NYRnmyrlv]$") then contract = true end if self.gender == "n" then -- Wackernagel III p.238 presupposes a neuter plural -hāni for -han. self:add("neuter_direct") self:add(properties.han and "han_neuter_nominative" or "neuter_nominative") self:add(contract and "contracted_neuter_dual" or "neuter_dual") else self:add("masculine_nominative_vocative") if properties.han or self:inLexicon("short_strong_an") then self:add("short_strong") self:add(properties.han and "han_accusative_plural" or "short_strong_accusative_plural") else -- Whitney §426b; Wackernagel III p.267. self:add(self:inLexicon("optional_short_strong_an") and "optional_short_strong" or "strong") self:add(contract and "contracted_accusative_plural" or "uncontracted_accusative_plural") end end -- The Vedic locative singular without -i (Whitney §425c). self:add(contract and "contracted_oblique" or "uncontracted_oblique") self:add("oblique") self:category("an") end -- The in-stems. function Analysis:inStem() self.accent = string.match(self.head, "i(" .. M.sa_utilities.accent .. "?)n$") self.type = "in" self.options.retroflex_stem_n = true self:add(self.gender == "n" and "neuter_direct" or "masculine_direct") self:add("oblique") self:category("in") end -- The at-stems: the participles in -at (and -āt), and the stems in -vat/-mat. function Analysis:atStem() local consonant, vowel, accent = string.match(self.head, "([mv]?)([aA])(" .. M.sa_utilities.accent .. "?)t$") self.accent = accent local properties = self.properties local long = vowel == "A" and "long_a" or "short_a" if self:headMatches("[vm]a/?t$") and not properties.participle then self.type = consonant .. "at" self:add(self.gender == "n" and "vat_neuter" or "vat_masculine") self:add("vat_oblique") self:category(consonant .. "at") return end self.type = "at" if properties.nonasal then -- Participles like júhvat, with no nasal in the strong stem. self:add(self.gender == "n" and "nonasal_neuter" or "nonasal_masculine") self:add("nonasal_oblique") else if self.gender ~= "n" then self:add("participle_masculine_" .. long) else -- The neuter nominative dual is the feminine stem (Whitney §443a, though this may be artificial: §447b). local feminines = properties.feminine or self.links.feminine if not feminines or not feminines[1] then error("Give the nominative dual (the feminine stem) with <feminine:...>.", 0) end self.stems.feminine = feminines[1] self.stems.second_feminine = feminines[2] self:add(feminines[2] and "neuter_dual_two_feminines" or "neuter_dual_feminine") -- The Rigvedic neuter plural in -ānti (Wackernagel III p.262). self:add("participle_neuter_plural_" .. long) self:add("participle_neuter_singular") self:add("participle_neuter_singular_" .. long) end self:add("participle_oblique_" .. long) end self:add("oblique") self:add("oblique_" .. long) self:category("at") end -- The añc-stems, which have a strong stem (the head), a middle stem in -ac- and a weakest stem. function Analysis:ancStem() local consonant, vowel, accent = string.match(self.head, "([yv]?)([aA])(" .. M.sa_utilities.accent .. "?)Yc$") self.accent = accent self.type = "anc" local middle = string.gsub(self.stems.base, "Yc$", "c") self.stems.base = middle self:add(self.gender == "m" and "masculine_direct" or "neuter_direct") self:add("middle_oblique") local weakest if vowel == "A" then weakest = middle elseif self:inLexicon("tiryanc") then weakest = string.gsub(middle, "ya(/?)c$", "a%1Sc") elseif consonant ~= "" then weakest = string.gsub(middle, "([yv])a([/\\]?)c$", function(semivowel, stem_accent) return (semivowel == "y" and "I" or "U") .. (stem_accent == "" and "" or "/") .. "c" end) elseif self:inLexicon("ud_anc") then weakest = string.gsub(middle, "ac$", "Ic") else error("This añc-stem is not supported.", 0) end self.stems.weakest = weakest if vowel == "A" or accent ~= "/" then self:add(self.gender == "m" and "masculine_accusative_plural" or "neuter_dual") self:add("weakest_oblique") else -- Oxytones have both accentuations (Whitney §410). self:add(self.gender == "m" and "oxytone_masculine_accusative_plural" or "oxytone_neuter_dual") self:add("oxytone_weakest_oblique") end self:add("copies") self:category("anc") end -- The o-stem gó, the au-stem nau and the ai-stem rái, and their compounds. function Analysis:diphthongStem(vowel, type) self.accent = string.match(self.head, vowel .. "(" .. M.sa_utilities.accent .. "?)$") self.type = type self:add("all") self:category(type) end -- The vāṃs-stems, i.e. the perfect participles. function Analysis:vamsStem() local utilities = M.sa_utilities self.accent = string.match(self.head, "vA(" .. utilities.accent .. "?)Ms$") self.type = "vams" local base = self.stems.base local weak if self:inLexicon("vams_glide") or self:baseMatches("u$") then weak = base .. "v" elseif self:baseMatches("U$") then weak = string.gsub(base, "U$", "uv") elseif self:inLexicon("vams_keep_i") then weak = base elseif self:baseMatches("[aAIuUfFxeEoO]" .. utilities.accent .. "?M?" .. utilities.consonant .. "+i$") or self:inLexicon("vams_drop_i") then -- The i of śiśrivā́ṃs and the like belongs to the root. weak = string.gsub(base, "i$", "") elseif self.properties.retroflex_l then weak = string.gsub(string.gsub(base, "q$", "L"), "Q$", "Lh") else weak = base end self.stems.weak = weak self:add(self.gender == "m" and "masculine_direct" or "neuter_direct") self:add("oblique") self:category("vams") end -- The personal pronouns. Their forms are whole forms on an empty stem, and the head (ahám or tvám) says which person. function Analysis:personal() local first = self:headMatches("^a") self.type = first and "first_person" or "second_person" self.stems.base = "" self:add(first and "first" or "second") end local CLASS_METHODS = { numeral = Analysis.numeral, a = Analysis.aStem, short_iu = Analysis.shortIUStem, long_a = Analysis.longAStem, long_iu = Analysis.longIUStem, vocalic_r = Analysis.vocalicRStem, root = Analysis.rootStem, s = Analysis.sStem, an = Analysis.anStem, ["in"] = Analysis.inStem, at = Analysis.atStem, anc = Analysis.ancStem, o = function(analysis) analysis:diphthongStem("o", "o") end, au = function(analysis) analysis:diphthongStem("O", "au") end, ai = function(analysis) analysis:diphthongStem("E", "ai") end, vams = Analysis.vamsStem, personal = Analysis.personal, } ------------------------------------------------------------------------------------------------------------------------ -- Generation -- ------------------------------------------------------------------------------------------------------------------------ --[==[ Generate the forms of form groups, slot by slot. Each form is `{slp1 = ..., note = KEY, stem = ..., ending = ..., options = {...}, position = N}`, i.e. the joined form, its note, the inputs to `join` and the position of the ending within its cell. With `novedic`, the Vedic endings are left out, and the remaining endings keep their positions. A cell that copies another (`"[nom]"`) is filled in once every group has run. ]==] local FormGenerator = {} FormGenerator.__index = FormGenerator local ENDING_FLAGS = {"iy_uv_before_vowel", "keep_s_before_voiceless", "strip_stem_accent"} function FormGenerator.new(novedic) return setmetatable({novedic = novedic}, FormGenerator) end function FormGenerator:form(group, ending, case, position) local text, note, stem_key = ending, nil, nil if type(ending) == "table" then text, note, stem_key = ending[1], ending.note, ending.stem end if self.novedic and note and M.data.notes[note].vedic then return nil end local stem if string.sub(text, 1, 1) == "+" then text = string.sub(text, 2) stem = group.head elseif stem_key then stem = group.stems[stem_key] or error(("Internal error: no stem '%s' in %s.%s"):format(stem_key, group.class, group.set)) else stem = group.stems.base end text = string.gsub(text, "@", group.accent) local options = {} for key, value in pairs(group.options) do options[key] = value end if type(ending) == "table" then for _, flag in ipairs(ENDING_FLAGS) do if ending[flag] then options[flag] = true end end end options.recessive_accent = case == "voc" return {slp1 = M.sa_utilities.join(stem, text, options), note = note, stem = stem, ending = text, options = options, position = position} end --[==[ Generate the forms of `groups`. Return `cells` (slot -> list of forms) and `copies` (slot -> the slot it copies). Each slot is filled by one group only. ]==] function FormGenerator:generate(groups) local cells, copies = {}, {} for _, group in ipairs(groups) do for number, cases in pairs(M.data.endings[group.class][group.set]) do for case, cell in pairs(cases) do local slot = case .. "_" .. number if cells[slot] or copies[slot] then error(("Internal error: the slot %s is filled twice (%s.%s)"):format(slot, group.class, group.set)) end local copied = type(cell) == "string" and string.match(cell, "^%[(.*)%]$") if copied then copies[slot] = copied .. "_" .. number else local forms = {} if type(cell) == "string" then cell = {cell} end for position, ending in ipairs(cell) do local form = self:form(group, ending, case, position) if form then table.insert(forms, form) end end cells[slot] = forms end end end end -- Follow copies of copies back to the cell they come from. for slot in pairs(copies) do local source, seen = copies[slot], {[slot] = true} while copies[source] do if seen[source] then error("Internal error: the copies of " .. slot .. " go round in a circle") end seen[source] = true source = copies[source] end if not cells[source] then error(("Internal error: the slot %s copies %s, which is empty"):format(slot, source)) end copies[slot] = source end return cells, copies end ------------------------------------------------------------------------------------------------------------------------ -- Declension -- ------------------------------------------------------------------------------------------------------------------------ -- Return the cases of a table of class `class`: those listed in its entry in `data.classes`, or else every case except -- the enclitic ones. local function cases_of(class) local codes for _, entry in ipairs(M.data.classes) do if entry.id == class then codes = entry.cases end end local cases = {} for _, case in ipairs(M.data.cases) do local listed = not codes and not case.enclitic for _, code in ipairs(codes or {}) do listed = listed or code == case.code end if listed then table.insert(cases, case) end end return cases end -- Return the description of a table of gender `gender` and type `type` that titles and error messages use, e.g. -- "masculine a-stem" or "first-person pronoun". A manual table gives just its gender ("neuter"), or the empty string -- if it has none. local function table_kind(gender, type) local words = {} local entry = gender and M.data.genders[gender] if entry and entry.in_title ~= false then table.insert(words, entry.name:lower()) end if type then table.insert(words, M.data.types[type]) end return table.concat(words, " ") end --[==[ One table. It holds the `head` (in SLP1), the `gender`, the stem `class` and `type`, the `numbers` and `cases` shown and the forms of every slot: `slots[slot]` is a list of `{slp1 = ..., notes = {text...}}`, empty if the slot has no form. It also keeps the form `groups` it was declined with, the generated forms in `generated` and the slots that copy another in `copies`, as well as its `categories` and `general_notes` (keys into `data`) and the `user_notes` given in the call. ]==] local Declension = {} Declension.__index = Declension function Declension.new(analysis, cells, copies, numbers) local declension = setmetatable({ head = analysis.head, gender = analysis.gender, adjective = analysis.adjective, class = analysis.class, type = analysis.type, numbers = numbers, cases = cases_of(analysis.class), groups = analysis.groups, generated = cells, copies = copies, slots = {}, overridden = {}, categories = analysis.categories, general_notes = analysis.general_notes, user_notes = {}, }, Declension) for _, case in ipairs(declension.cases) do for _, number in ipairs(M.data.numbers) do local slot = case.code .. "_" .. number.code if numbers[number.code] and not cells[copies[slot] or slot] then error(("Internal error: no forms for the slot %s (%s)"):format(slot, analysis.class)) end local forms = {} for _, form in ipairs(cells[copies[slot] or slot] or {}) do table.insert(forms, {slp1 = form.slp1, notes = form.note and {M.data.notes[form.note].text} or {}}) end declension.slots[slot] = forms end end return declension end --[==[ Make a manual table (`<manual>`), which has no stem class and no generated forms: every slot starts out empty and is filled by the cell parameters. `gender` can be {nil}. ]==] function Declension.manual(head, gender, numbers) local cells = {} for _, case in ipairs(M.data.cases) do for _, number in ipairs(M.data.numbers) do cells[case.code .. "_" .. number.code] = {} end end return Declension.new({head = head, gender = gender, adjective = false, class = "manual", groups = {}, categories = {}, general_notes = {}}, cells, {}, numbers) end --[==[ Replace the forms of `slot` with `forms` from `Overrides`. These are written in IAST or in the display script, and read with `bridge`; a form of `-` means no form. ]==] function Declension:override(slot, forms, bridge) if not self.slots[slot] then error(("'%s' is not a cell of this table"):format(slot), 0) end local replaced = {} for _, form in ipairs(forms) do if form.written ~= "-" then table.insert(replaced, {slp1 = bridge:toSlp1(form.written), notes = form.footnotes, override = true}) end end self.slots[slot] = replaced self.overridden[slot] = true end --[==[ Return the names of the table's categories. `kind` is `noun` ({{tl|sa-ndecl}}), `adjective` (the masculine table of an adjective) or `numeral`. An adjective's other tables have no categories. ]==] function Declension:categoryNames(kind) local names = {} if kind then for _, key in ipairs(self.categories) do table.insert(names, M.data.categories[key][kind]) end end return names end -- Return the texts of the table's general notes. function Declension:generalNoteTexts() local texts = {} for _, key in ipairs(self.general_notes) do table.insert(texts, M.data.general_notes[key]) end return texts end --[==[ Return the data of the table for bots (`json=1`). This has the head, the gender, the stem class and type, the numbers shown, and for each slot its forms in SLP1, in the display script and in IAST, with their notes. It also has the user's notes, the general notes, the categories of `kind` (see `categoryNames`) and whether `nocat` was given. ]==] function Declension:toJson(bridge, kind, nocat) local slots = {} for slot, forms in pairs(self.slots) do local list = {} for _, form in ipairs(forms) do table.insert(list, { slp1 = form.slp1, form = bridge:toNative(form.slp1), translit = bridge:toIast(form.slp1), notes = form.notes, override = form.override, }) end slots[slot] = list end local numbers = {} for _, number in ipairs(M.data.numbers) do if self.numbers[number.code] then table.insert(numbers, number.code) end end return { head = self.head, gender = self.gender, class = self.class, type = M.data.types[self.type], numbers = numbers, slots = slots, user_notes = self.user_notes, general_notes = self:generalNoteTexts(), categories = self:categoryNames(kind), nocat = nocat or false, } end ------------------------------------------------------------------------------------------------------------------------ -- The table -- ------------------------------------------------------------------------------------------------------------------------ --[==[ Render a `Declension` as a table with [[Module:inflection-table]]. There is a column for each number shown and a row for each case, and each row is marked with `data-case` so that scripts can reorder the cases. The cells come from [[Module:inflection utilities]]' `show_forms`, which gives each form in the display script, linked with an accelerator for `lemma`, with its IAST below. The notes go under the table. `kind` says which categories to add (see `Declension:categoryNames`); with {nil}, none are added. ]==] local TableRenderer = {} TableRenderer.__index = TableRenderer function TableRenderer.new(declension, bridge, lemma, kind) return setmetatable({declension = declension, bridge = bridge, lemma = lemma, kind = kind}, TableRenderer) end -- Return the numbers shown, in order. function TableRenderer:numbers() local numbers = {} for _, number in ipairs(M.data.numbers) do if self.declension.numbers[number.code] then table.insert(numbers, number) end end return numbers end -- Return the accelerator tags of a slot: the case, then the gender for an adjective's table, then the number. function TableRenderer:accel(case, number) local declension = self.declension local tags = {case.accel} if declension.adjective then table.insert(tags, M.data.genders[declension.gender].accel) end table.insert(tags, number.accel) return table.concat(tags, "|") end -- Return the forms of every slot shown, as linked text (an em dash for none), and the footnotes, numbered case by -- case. function TableRenderer:cells() local declension, bridge = self.declension, self.bridge local formtable, slot_list = {}, {} for _, case in ipairs(declension.cases) do for _, number in ipairs(self:numbers()) do local slot = case.code .. "_" .. number.code local forms = declension.slots[slot] if forms[1] then local list = {} for _, form in ipairs(forms) do local footnotes if form.notes[1] then footnotes = {} for _, note in ipairs(form.notes) do table.insert(footnotes, "[" .. note .. "]") end end table.insert(list, {form = bridge:toNative(form.slp1), translit = bridge:toIast(form.slp1), footnotes = footnotes}) end formtable[slot] = list end table.insert(slot_list, {slot, self:accel(case, number)}) end end M.inflection_utilities.show_forms(formtable, { lang = M.lang, lemmas = {self.lemma}, slot_list = slot_list, include_translit = true, }) return formtable, formtable.footnote end -- "Masculine a-stem declension of देव" function TableRenderer:title() local declension, bridge = self.declension, self.bridge local head = M.links.full_link({lang = M.lang, sc = bridge.script, alt = bridge:toNative(declension.head), tr = "-"}) local kind = table_kind(declension.gender, declension.type) if kind == "" then return "Declension of " .. head end return mw.ustring.upper(mw.ustring.sub(kind, 1, 1)) .. mw.ustring.sub(kind, 2) .. " declension of " .. head end function TableRenderer:render() local declension = self.declension local cells, footnotes = self:cells() local lines = {M.inflection_table.make_top{ title = self:title(), palette = "blue", tall = "yes", lang = "sa", class = "sticky-left-column", }} -- make_top has already opened the first row. table.insert(lines, '! class="outer" |') for _, number in ipairs(self:numbers()) do table.insert(lines, '! class="outer" | ' .. number.name) end for _, case in ipairs(declension.cases) do table.insert(lines, ('|- data-case="%s"'):format(case.code)) table.insert(lines, "! " .. case.name) for _, number in ipairs(self:numbers()) do table.insert(lines, "| " .. cells[case.code .. "_" .. number.code]) end end local notes = {} if footnotes ~= "" then table.insert(notes, footnotes) end for _, note in ipairs(declension.user_notes) do table.insert(notes, note) end for _, note in ipairs(declension:generalNoteTexts()) do table.insert(notes, note) end table.insert(lines, M.inflection_table.make_bottom{notes = table.concat(notes, "<br />")}) local categories = declension:categoryNames(self.kind) if categories[1] then table.insert(lines, M.utilities.format_categories(categories, M.lang)) end return table.concat(lines, "\n") end ------------------------------------------------------------------------------------------------------------------------ -- The call -- ------------------------------------------------------------------------------------------------------------------------ local ALL_NUMBERS = {s = true, d = true, p = true} --[==[ Decline one table without a frame. `input` has the following fields: * `head`: the head, in SLP1; * `gender`: `m`, `f`, `n` or `num` (the numerals); * `adjective`: true if the table is one of an adjective's tables; * `properties`: what the indicators set, in SLP1: `root` (true, false for `nonroot`, or nil), `vrki`, `pron`, `novedic`, `r` (`a` or `A`), `final` (`k`, `w` or `t`), `diaspirate`, `participle`, `nonasal`, `contract` (true, false for `nocontract`, or nil), `han`, `svarita`, `retroflex_l`, `feminine` (a list of stems) and `numbers` (a set of s/d/p); * `links`: the other heads of an adjective that the table looks at, i.e. `masculine` (for a feminine table) and `feminine` (a list, for the neuter table). Return the Declension. ]==] function export.decline_table(input) local properties = input.properties or {} local class, base = Head.new(input.head):detectClass(input.gender, properties) if not class then error("No declension class could be detected. Please check the head or specify the declension.", 0) end local analysis = Analysis.new{head = input.head, base = base, gender = input.gender, adjective = input.adjective, properties = properties, links = input.links, class = class} CLASS_METHODS[class](analysis) local cells, copies = FormGenerator.new(properties.novedic):generate(analysis.groups) local numbers = input.gender == "num" and {p = true} or properties.numbers or ALL_NUMBERS return Declension.new(analysis, cells, copies, numbers) end -- Return true if a table of class `class` and gender `gender` uses the indicator defined by `definition`. local function uses(definition, class, gender) return (definition.classes == nil or definition.classes[class] == true) and (definition.genders == nil or definition.genders[gender] == true) end -- Return the cell parameters of a table from `args`, by slot. Each parameter is the slot preceded by `prefix` (`m_`, -- `f2_`, etc.). local function cell_values(args, prefix) local values = {} for _, case in ipairs(M.data.cases) do for _, number in ipairs(M.data.numbers) do local slot = case.code .. "_" .. number.code values[slot] = args[prefix .. slot] end end return values end local function cell_parameters(params, prefix) for _, case in ipairs(M.data.cases) do for _, number in ipairs(M.data.numbers) do params[prefix .. case.code .. "_" .. number.code] = {} end end end --[==[ Implement {{tl|sa-ndecl}} without a frame, for other modules and for testing. `args` are the template's arguments and `pagename` is the page's title. Return the Declension, its ScriptBridge and the processed args. ]==] function export.decline_noun(args, pagename) local params = { [1] = {}, note = {list = true}, nocat = {type = "boolean"}, json = {type = "boolean"}, } cell_parameters(params, "") args = M.parameters.process(args, params) local spec = Spec.parse(args[1] or "", "noun") local head = spec.head ~= "" and spec.head or pagename local bridge = ScriptBridge.new(head, pagename) local gender for name, definition in pairs(M.data.indicators.noun) do if definition.group == "gender" and spec.indicators[name] then gender = name end end local properties = spec:properties(bridge) local declension if spec.indicators.manual then for name, definition in pairs(M.data.indicators.noun) do if spec.indicators[name] and name ~= "manual" and definition.group ~= "gender" and definition.group ~= "numbers" then error(("The indicator '%s' does not apply to a manual table"):format(name), 0) end end declension = Declension.manual(bridge:toSlp1(head), gender, gender == "num" and {p = true} or properties.numbers or ALL_NUMBERS) else declension = export.decline_table{head = bridge:toSlp1(head), gender = gender, properties = properties} for name in pairs(spec.indicators) do local definition = M.data.indicators.noun[name] if definition.group ~= "gender" and not uses(definition, declension.class, gender) then error(("The indicator '%s' does not apply to a %s"):format(name, table_kind(gender, declension.type)), 0) end end end for slot, forms in pairs(Overrides.parse(cell_values(args, "")).slots) do declension:override(slot, forms, bridge) end declension.user_notes = args.note return declension, bridge, args end --[==[ The tables of an adjective, each a Declension, in this order: the masculine, a feminine for each head of `f:` (by default the masculine head), and the neuter (the head of `n:`, by default the masculine head). ]==] local AdjectiveDeclension = {} AdjectiveDeclension.__index = AdjectiveDeclension --[==[ Implement {{tl|sa-adecl}} without a frame, for other modules and for testing. `args` are the template's arguments and `pagename` is the page's title. Return the AdjectiveDeclension, its ScriptBridge and the processed args. ]==] function export.decline_adjective(args, pagename) local params = { [1] = {}, nocat = {type = "boolean"}, json = {type = "boolean"}, } local spec = Spec.parse(args[1] or "", "adjective") local feminine_specs = spec.indicators.f or {Spec.parse("", "adjective", true)} local prefixes = {"m_", "n_"} for position = 1, #feminine_specs do table.insert(prefixes, position == 1 and "f_" or "f" .. position .. "_") end for _, prefix in ipairs(prefixes) do cell_parameters(params, prefix) params[prefix .. "note"] = {list = true} end args = M.parameters.process(args, params) local masculine_head = spec.head ~= "" and spec.head or pagename local bridge = ScriptBridge.new(masculine_head, pagename) local shared = spec:properties(bridge) local masculine_slp1 = bridge:toSlp1(masculine_head) -- One entry per table, with its head (and any spec of its own), gender, cell prefix and links. local tables = {{spec = nil, slp1 = masculine_slp1, gender = "m", prefix = "m_"}} local feminine_stems = {} for position, feminine_spec in ipairs(feminine_specs) do local slp1 = feminine_spec.head ~= "" and bridge:toSlp1(feminine_spec.head) or masculine_slp1 table.insert(feminine_stems, slp1) table.insert(tables, {spec = feminine_spec, slp1 = slp1, gender = "f", prefix = position == 1 and "f_" or "f" .. position .. "_", links = {masculine = masculine_slp1}}) end local neuter_spec = spec.indicators.n table.insert(tables, {spec = neuter_spec, slp1 = neuter_spec and neuter_spec.head ~= "" and bridge:toSlp1(neuter_spec.head) or masculine_slp1, gender = "n", prefix = "n_", links = {feminine = {feminine_stems[1], feminine_stems[2]}}}) local adjective = setmetatable({tables = {}}, AdjectiveDeclension) local used = {} for _, item in ipairs(tables) do local properties = item.spec and item.spec:properties(bridge, shared) or shared local declension = export.decline_table{head = item.slp1, gender = item.gender, adjective = true, properties = properties, links = item.links} for name, definition in pairs(M.data.indicators.adjective) do if spec.indicators[name] and definition.value ~= "spec" and uses(definition, declension.class, item.gender) then used[name] = true end end for name in pairs(item.spec and item.spec.indicators or {}) do if not uses(M.data.indicators.adjective[name], declension.class, item.gender) then error(("The indicator '%s' does not apply to the %s"):format(name, table_kind(item.gender, declension.type)), 0) end end for slot, forms in pairs(Overrides.parse(cell_values(args, item.prefix)).slots) do declension:override(slot, forms, bridge) end declension.user_notes = args[item.prefix .. "note"] table.insert(adjective.tables, declension) end for name, definition in pairs(M.data.indicators.adjective) do if spec.indicators[name] and definition.value ~= "spec" and not used[name] then error(("The indicator '%s' applies to none of the tables"):format(name), 0) end end return adjective, bridge, args end -- Return the kind of categories a noun table adds (see `Declension:categoryNames`). local function noun_kind(declension) return declension.class == "numeral" and "numeral" or "noun" end --[==[Entry point of {{tl|sa-ndecl}}. Return the table, or with {{para|json|1}}, its data as JSON.]==] function export.noun(frame) local pagename = M.headword_data.pagename local declension, bridge, args = export.decline_noun(frame:getParent().args, pagename) local kind = noun_kind(declension) if args.json then return M.JSON.toJSON(declension:toJson(bridge, kind, args.nocat)) end return TableRenderer.new(declension, bridge, pagename, not args.nocat and kind or nil):render() end --[==[ Entry point of {{tl|sa-adecl}}. Return the tables one above the other in an untitled inflection box (`make_box` of [[Module:inflection-table]], as {{tl|inflection-box-top}} makes), or with {{para|json|1}}, their data as JSON (`{tables = {...}}`). Only the masculine table adds categories. ]==] function export.adjective(frame) local pagename = M.headword_data.pagename local adjective, bridge, args = export.decline_adjective(frame:getParent().args, pagename) if args.json then local tables = {} for position, declension in ipairs(adjective.tables) do table.insert(tables, declension:toJson(bridge, position == 1 and "adjective" or nil, args.nocat)) end return M.JSON.toJSON({tables = tables}) end local rendered = {} for position, declension in ipairs(adjective.tables) do local kind = position == 1 and not args.nocat and "adjective" or nil table.insert(rendered, TableRenderer.new(declension, bridge, pagename, kind):render()) end return M.inflection_table.make_box({title = "-", flow = "vertical"}, "\n" .. table.concat(rendered, "\n") .. "\n") end return export ry1m1zephd0iidobkk0e49rrpe5ffhn Bản mẫu:sa-ndecl 10 420613 2571612 2026-10-18T12:23:38Z Hiyuune 50834 Trang mới: “<includeonly>{{#invoke:sa-decl|noun}}</includeonly><!-- --><noinclude>{{documentation}}</noinclude>” 2571612 wikitext text/x-wiki <includeonly>{{#invoke:sa-decl|noun}}</includeonly><!-- --><noinclude>{{documentation}}</noinclude> 6mntmbo3znukojteof821vbeak3xk0k hǫfðagerð 0 420614 2571623 2026-10-18T13:02:34Z Hiyuune 50834 + non 2571623 wikitext text/x-wiki =={{langname|non}}== ==={{section|etym}}=== {{compound+|non|hǫfuð|gerð}}. ==={{section|n}}=== {{non-noun|f|hǫfðagerðar|hǫfðagerðar}} # [[tấm ván]] đầu [[giường]]. ===={{section|decl}}==== {{non-decl-f-o|hǫfðagerð}} ===={{section|desc}}==== * {{desc|gmq-oda|howeth gærdh}} ** {{desc|da|hovedgærde}} *** {{desc|nb|hodegjerde}} **** {{desc|nn|hovudgjerde|bor=1}} * {{desc|gmq-osw|hovudhgærdh|hofþagærþ}} ** {{desc|sv|huvudgärd}} ebai1wb4nkqf8qau67kua44nwg21ynq Bản mẫu:non-decl-f-o 10 420615 2571624 2026-10-18T13:03:37Z Hiyuune 50834 Trang mới: “{{#invoke:checkparams|warn}}<!-- Validate template parameters -->{{non-decl-blank-{{{form|full}}}{{#if:{{{indef|}}}|-indef}} | title = {{{title|''{{pagename}}''}}} | stem = thân từ ''ō'' mạnh | g = giống cái | nsi = {{{nsi|{{{ns|{{{2|{{{1}}}}}}}}}}}} | asi = {{{asi|{{{asv|{{{as|{{{2|{{{1}}}}}}}}}}}}}}} | dsi = {{{dsi|{{{dsv|{{{ds|{{{2|{{{1}}}}}}}}}}}}}}} | gsi = {{{gsi|{{{gsv|{{{gs|{{{1}}}ar}}}}}}}}} | nsd = {{{nsd|{{{ns|{{{2|{{{1}}}}}}}}}in}}} | asd = {{{asd|{{{…” 2571624 wikitext text/x-wiki {{#invoke:checkparams|warn}}<!-- Validate template parameters -->{{non-decl-blank-{{{form|full}}}{{#if:{{{indef|}}}|-indef}} | title = {{{title|''{{pagename}}''}}} | stem = thân từ ''ō'' mạnh | g = giống cái | nsi = {{{nsi|{{{ns|{{{2|{{{1}}}}}}}}}}}} | asi = {{{asi|{{{asv|{{{as|{{{2|{{{1}}}}}}}}}}}}}}} | dsi = {{{dsi|{{{dsv|{{{ds|{{{2|{{{1}}}}}}}}}}}}}}} | gsi = {{{gsi|{{{gsv|{{{gs|{{{1}}}ar}}}}}}}}} | nsd = {{{nsd|{{{ns|{{{2|{{{1}}}}}}}}}in}}} | asd = {{{asd|{{{asv|{{{as|{{{2|{{{1}}}}}}}}}i}}}na}}} | dsd = {{{dsd|{{{dsv|{{{ds|{{{2|{{{1}}}}}}}}}i}}}nni}}} | gsd = {{{gsd|{{{gsv|{{{gs|{{{1}}}ar}}}}}}innar}}} | npi = {{{npi|{{{np|{{{1}}}ar}}}}}} | api = {{{api|{{{ap|{{{1}}}ar}}}}}} | dpi = {{{dpi|{{{dp|{{{2|{{{1}}}}}}um}}}}}} | gpi = {{{gpi|{{{gp|{{{1}}}a}}}}}} | npd = {{{npd|{{{np|{{{1}}}ar}}}nar}}} | apd = {{{apd|{{{ap|{{{1}}}ar}}}nar}}} | dpd = {{{dpd|{{{dp|{{{2|{{{1}}}}}}u}}}num}}} | gpd = {{{gpd|{{{gp|{{{1}}}a}}}nna}}} | notes = {{{notes|}}} }}<includeonly>{{cln|non|Danh từ thân từ ō}}</includeonly><noinclude>{{documentation}}</noinclude> 47il7zqiu7m21060juerpvp5ifzbo3o Bản mẫu:non-conj-weak1-long 10 420616 2571625 2026-10-18T13:07:50Z Hiyuune 50834 Trang mới: “{{#invoke:checkparams|warn|4}}<!-- Validate template parameters 4= is not used but included on many calls -->{{non-conj-blank-{{{voice|full}}} |personal={{{personal|yes}}} |title1=Bảng chia động từ của ''{{pagename}}'' &mdash; {{#ifeq:{{{personal|yes}}}|phi|nhân xưng,|}} thể chủ động (lớp 1 yếu) |title2=Bảng chia động từ của ''{{pagename}}'' &mdash; {{#ifeq:{{{personal|yes}}}|phi|nhân xưng,|}} thể bị động trung gian (lớp 1 yếu)…” 2571625 wikitext text/x-wiki {{#invoke:checkparams|warn|4}}<!-- Validate template parameters 4= is not used but included on many calls -->{{non-conj-blank-{{{voice|full}}} |personal={{{personal|yes}}} |title1=Bảng chia động từ của ''{{pagename}}'' &mdash; {{#ifeq:{{{personal|yes}}}|phi|nhân xưng,|}} thể chủ động (lớp 1 yếu) |title2=Bảng chia động từ của ''{{pagename}}'' &mdash; {{#ifeq:{{{personal|yes}}}|phi|nhân xưng,|}} thể bị động trung gian (lớp 1 yếu) |infinitive={{{1v|{{{1j|{{{1}}}}}}}}}a |pres_part={{{1v|{{{1j|{{{1}}}}}}}}}andi |past_part={{{2}}}r |pres_ind_1sg={{{1v|{{{1}}}}}}i |pres_ind_2sg={{{1v|{{{1}}}}}}ir |pres_ind_3sg={{{1v|{{{1}}}}}}ir |pres_ind_1pl={{{1j|{{{1}}}}}}um |pres_ind_2pl={{{1v|{{{1}}}}}}ið |pres_ind_3pl={{{1v|{{{1j|{{{1}}}}}}}}}a |pres_sub_1sg={{{1v|{{{1j|{{{1}}}}}}}}}a |pres_sub_2sg={{{1v|{{{1}}}}}}ir |pres_sub_3sg={{{1v|{{{1}}}}}}i |pres_sub_1pl={{{1v|{{{1}}}}}}im |pres_sub_2pl={{{1v|{{{1}}}}}}ið |pres_sub_3pl={{{1v|{{{1}}}}}}i |impr_2sg={{{1}}}, {{{1v|{{{1}}}}}}i |impr_1pl={{{1j|{{{1}}}}}}um |impr_2pl={{{1v|{{{1}}}}}}ið |past_ind_1sg={{{2}}}a |past_ind_2sg={{{2}}}ir |past_ind_3sg={{{2}}}i |past_ind_1pl={{{2u|{{{2}}}}}}um |past_ind_2pl={{{2u|{{{2}}}}}}uð |past_ind_3pl={{{2u|{{{2}}}}}}u |past_sub_1sg={{{3|{{{2}}}}}}a |past_sub_2sg={{{3|{{{2}}}}}}ir |past_sub_3sg={{{3|{{{2}}}}}}i |past_sub_1pl={{{3|{{{2}}}}}}im |past_sub_2pl={{{3|{{{2}}}}}}ið |past_sub_3pl={{{3|{{{2}}}}}}i |mp_infinitive={{{1v|{{{1j|{{{1}}}}}}}}}ask |mp_pres_part={{{1v|{{{1j|{{{1}}}}}}}}}andisk |mp_past_part={{{2s|{{{1}}}z}}}k |mp_pres_ind_1sg={{{1j|{{{1}}}}}}umk |mp_pres_ind_2sg={{{1v|{{{1}}}}}}isk |mp_pres_ind_3sg={{{1v|{{{1}}}}}}isk |mp_pres_ind_1pl={{{1j|{{{1}}}}}}umsk |mp_pres_ind_2pl={{{1v|{{{1}}}}}}izk |mp_pres_ind_3pl={{{1v|{{{1j|{{{1}}}}}}}}}ask |mp_pres_sub_1sg={{{1j|{{{1}}}}}}umk |mp_pres_sub_2sg={{{1v|{{{1}}}}}}isk |mp_pres_sub_3sg={{{1v|{{{1}}}}}}isk |mp_pres_sub_1pl={{{1v|{{{1}}}}}}imsk |mp_pres_sub_2pl={{{1v|{{{1}}}}}}izk |mp_pres_sub_3pl={{{1v|{{{1}}}}}}isk |mp_impr_2sg={{{1s|{{{1}}}s}}}k, {{{1v|{{{1}}}}}}isk |mp_impr_1pl={{{1j|{{{1}}}}}}umsk |mp_impr_2pl={{{1v|{{{1}}}}}}izk |mp_past_ind_1sg={{{2u|{{{2}}}}}}umk |mp_past_ind_2sg={{{2}}}isk |mp_past_ind_3sg={{{2}}}isk |mp_past_ind_1pl={{{2u|{{{2}}}}}}umsk |mp_past_ind_2pl={{{2u|{{{2}}}}}}uzk |mp_past_ind_3pl={{{2u|{{{2}}}}}}usk |mp_past_sub_1sg={{{3|{{{2}}}}}}umk |mp_past_sub_2sg={{{3|{{{2}}}}}}isk |mp_past_sub_3sg={{{3|{{{2}}}}}}isk |mp_past_sub_1pl={{{3|{{{2}}}}}}imsk |mp_past_sub_2pl={{{3|{{{2}}}}}}izk |mp_past_sub_3pl={{{3|{{{2}}}}}}isk }}<includeonly>{{catlangname|non|Động từ lớp 1 yếu thân từ nặng}}</includeonly><noinclude>{{documentation}}</noinclude> lwdneyuxdkudf3tyx45xqmb0a08bdce gǿða 0 420617 2571626 2026-10-18T13:08:40Z Hiyuune 50834 + non 2571626 wikitext text/x-wiki =={{langname|non}}== ==={{section|etym}}=== Từ {{inh|non|gem-pro|*gōdijaną}}. ==={{section|v}}=== {{non-verb|gǿddi|gǿddu|gǿddr}} # [[làm giàu|Làm giàu]], làm [[phong phú]]. ===={{section|forms}}==== {{non-conj-weak1-long|gǿð|gǿdd|gǿdd|gǿdd}} ===={{section|desc}}==== * {{desc|is|gæða}} * {{desc|nn|gjø|gjøde}} * {{desc|gmq-osw|gø̄þa}} ** {{desc|sv|göda}} * {{desc|gmq-oda|gøtæ}} ** {{desc|da|gøde}} bep66849st7of0jrg51253xaer2qrzs Thể loại:Động từ tiếng Bắc Âu cổ 14 420618 2571627 2026-10-18T13:09:03Z Hiyuune 50834 Trang mới: “{{auto cat}}” 2571627 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx fægja 0 420619 2571628 2026-10-18T13:11:43Z Hiyuune 50834 + non, is 2571628 wikitext text/x-wiki =={{langname|non}}== ==={{section|etym}}=== Từ {{inh|non|gem-pro|*fēgijaną}}, có liên quan đến {{m|gem-pro|*fagjaną}}. Xem thêm {{m|non|fága}}. ==={{section|v}}=== {{head|non|Động từ}} # [[đánh|Đánh]] [[bóng]]. ===={{section|desc}}==== * {{desc|is|fægja}} * {{desc|gmq-osw|*fæghia|;|der2=1|landafæghir|landafæghi}} ** {{desc|sv|feja|fäja}} * {{desc|gmq-oda|*fæghæ}} ** {{desc|da|feje}} * {{desc|enm|feȝen|feyen|bor=1}} ** {{desc|en|fay|qq=phương ngữ}} ** {{desc|sco|fey}} =={{langname|is}}== ==={{section|etym}}=== Từ {{inh|is|non|fægja}}, từ {{inh|is|gem-pro|*fēgijaną}}, liên quan đến {{m|gem-pro|*fagjaną}}. Xem thêm {{m|is|fága}}. ==={{section|pron}}=== * {{is-IPA}} * {{rhymes|is|aiːja|s=2}} ==={{section|v}}=== {{is-verb-weak|fægði|fægt}} # [[đánh|Đánh]] [[bóng]]. #: {{syn|is|fága|pússa}} ===={{section|forms}}==== {{is-conj-w2|f|æ|g|j=j}} orwkrmmzwrpes5fxybwz9vg6m3bii2v fægjandi 0 420620 2571629 2026-10-18T13:12:49Z Hiyuune 50834 + is 2571629 wikitext text/x-wiki =={{langname|is}}== ==={{section|v}}=== {{head|is|Biến thể hình thái động từ}} # {{infl of|is|fægja||part|pres|act}} 80t51gj4nsdby1zmf63ofzrt1vzpcui fægi 0 420621 2571630 2026-10-18T13:13:52Z Hiyuune 50834 + is 2571630 wikitext text/x-wiki =={{langname|is}}== ==={{section|v}}=== {{head|is|Biến thể hình thái động từ}} # {{infl of|is|fægja||ind//sub|pres|act|ở|1|s|;|sub|pres|act|ở|3|s//p}} 9nn6joo7hd2trvkpacjb593v7eyiysu auðmýkja 0 420622 2571632 2026-10-18T13:18:28Z Hiyuune 50834 + non, is 2571632 wikitext text/x-wiki =={{langname|non}}== ==={{section|etym}}=== Từ {{suffix|non|auðmjúkr|ja}}. ==={{section|v}}=== {{non-verb}} # [[làm nhục]], [[sỉ nhục]]. ===={{section|desc}}==== * {{desc|is|auðmýkja}} * {{desc|fo|eyðmýkja}} * {{desc|nn|audmykja}} * {{desc|gmq-osw|öþmiuka}} ** {{desc|sv|ödmjuka}} * {{desc|gmq-oda|øthmykæ}} ** {{desc|da|ydmyge}} *** {{desc|nb|ydmyke}} =={{langname|is}}== ==={{section|etym}}=== Từ {{af|is|auð-|mýkja}}. So sánh với {{cog|nn|audmykja}}, {{cog|sv|ödmjuka}} và {{cog|da|ydmyge}} (từ đây có thêm {{cog|nb|ydmyke}}). ==={{section|pron}}=== * {{is-IPA|[-mý]}} ==={{section|v}}=== {{is-verb-weak|auðmýkti|auðmýkt}} # [[làm nhục]], [[sỉ nhục]] {{+obj|is|acc}} #: {{syn|is|niðurlægja|lítillækka}} ===={{section|forms}}==== {{is-conj-w2|auðm|ý|k|j=j}} ===={{section|drv}}==== * {{l|is|auðmýking}} * {{l|is|auðmýkandi}} ===={{section|rel}}==== * {{l|is|auðmjúkur}} * {{l|is|auðmýkt}} 6t0lqtkqqsz3n0k2ov1lhbsjopzt99x 辱める 0 420623 2571633 2026-10-18T13:21:22Z Hiyuune 50834 Trang mới: “=={{langname|ja}}== {{ja-kanjitab|はずかし|yomi=k|alt=恥ずかしめる}} ==={{section|pron}}=== {{ja-pron|はずかしめる|acc=5}} {{ja-acc-table|verb-ichidan|はずかしめる|acc=5|て-form-acc=4}} ==={{section|v}}=== {{ja-verb|はずかしめる|type=2|tr=trans|hhira=はづかしめる}} # [[làm nhục]], [[sỉ nhục]]; [[hổ thẹn]]. #: {{ja-usex|人の前で'''辱める'''|ひと の まえ で '''はずかしめる'''|Làm nhục anh ấy/cô ấy t…” 2571633 wikitext text/x-wiki =={{langname|ja}}== {{ja-kanjitab|はずかし|yomi=k|alt=恥ずかしめる}} ==={{section|pron}}=== {{ja-pron|はずかしめる|acc=5}} {{ja-acc-table|verb-ichidan|はずかしめる|acc=5|て-form-acc=4}} ==={{section|v}}=== {{ja-verb|はずかしめる|type=2|tr=trans|hhira=はづかしめる}} # [[làm nhục]], [[sỉ nhục]]; [[hổ thẹn]]. #: {{ja-usex|人の前で'''辱める'''|ひと の まえ で '''はずかしめる'''|Làm nhục anh ấy/cô ấy trước mặt mọi người.}} # [[cưỡng hiếp]], [[hiếp dâm]], [[cưỡng dâm]]. ===={{section|forms}}==== {{ja-ichi|辱め|はずかしめ|hazukashime}} ==={{section|ref}}=== * {{R:Kanjipedia Kotoba|0003562600}} hvfx1o2701ylyki3xlyp4zq1ktonf8y þekkjask 0 420624 2571634 2026-10-18T13:23:42Z Hiyuune 50834 + non 2571634 wikitext text/x-wiki =={{langname|non}}== ==={{section|etym}} 1=== Dạng phái sinh của tính từ {{m|non|þekkr}}. ===={{section|v}}==== {{non-verb}} # Làm [[vui lòng]]; làm [[vừa lòng]]. ====={{section|desc}}===== * {{desc|is|þekkjast}} * {{desc|nn|tekkjast}} * {{desc|no|tekkes}} * {{desc|sv|täckas}} * {{desc|da|tækkes}} ==={{section|etym}} 2=== {{nonlemma}} ===={{section|v}}==== {{non-verb}} # {{infl of|non|þekkja||mp}} cia0pn8jifkdxhbhyymrlg19nau64n5 Mô đun:Babel/data/s 828 420625 2571645 2026-10-18T13:37:09Z TheHighFighter2 42988 Trang mới: “return { -------------------------- sa -------------------------- ["sa-0"] = "एषः सदस्यः '''[[$2|संस्कृतेन]]''' लेखितुं '''न''' शक्नोति (अथवा तु बहुकष्टेन ज्ञातुं प्रभवति ।)।", ["sa-1"] = "एषः सदस्यः '''[[$1|सरल]]'''-'''[[$2|संस्कृतेन]]''' लेखितुं शक्नोति ।", ["sa-2"] = "…” 2571645 Scribunto text/plain return { -------------------------- sa -------------------------- ["sa-0"] = "एषः सदस्यः '''[[$2|संस्कृतेन]]''' लेखितुं '''न''' शक्नोति (अथवा तु बहुकष्टेन ज्ञातुं प्रभवति ।)।", ["sa-1"] = "एषः सदस्यः '''[[$1|सरल]]'''-'''[[$2|संस्कृतेन]]''' लेखितुं शक्नोति ।", ["sa-2"] = "एषः सदस्यः '''[[$1|माध्यमिक]]'''-'''[[$2|संस्कृतेन]]''' लेखितुं शक्नोति ।", ["sa-3"] = "एषः सदस्यः '''[[$1|उत्तमतया]] [[$2|संस्कृतेन]]''' लेखितुं शक्नोति ।", ["sa-4"] = "एषः सदस्यः '''[[$1|मातृभाषावत्]]'''-'''[[$2|संस्कृतम्]]''' अवगच्छति ।", ["sa-5"] = "एषः सदस्यः '''[[$1|उत्कृष्टरीत्या]]'''-'''[[$2|संस्कृतेन]]''' लेखितुं शक्नोति ।", ["sa-N"] = "एतस्य सदस्यस्य '''[[$1|मातृभाषा]] [[$2|संस्कृतम्‌]]''' अस्ति ।", -------------------------- sah -------------------------- ["sah-0"] = "{Бу эр киһи/Бу дьахтар} '''[[$2|саха тылын]] билбэт''' (эбэтэр мөлтөхтүк өйдүүр).", ["sah-1"] = "{Бу кыттааччы эр киһи/Бу кыттааччы дьахтар} '''[[$2|саха тылын]] [[$1|син кыратык]]''' билэр.", ["sah-2"] = "{Бу кыттааччы эр киһи/Бу кыттааччы дьахтар} '''[[$2|саха тылын]] [[$1|ортотук]]''' билэр.", ["sah-3"] = "{Бу кыттааччы эр киһи/Бу кыттааччы дьахтар} '''[[$2|саха тылын]] [[$1|бэркэ]]''' билэр.", ["sah-4"] = "{Бу кыттааччы эр киһи/Бу кыттааччы дьахтар} '''[[$2|саха тылын]] [[$1|төрөөбүт тылын курдук]]''' билэр.", ["sah-5"] = "{Бу кыттааччы эр киһи/Бу кыттааччы дьахтар} '''[[$2|саха тылын]] [[$1|тыл үөрэхтээҕин таһымынан]]''' билэр.", ["sah-N"] = "{Бу кыттааччы эр киһиэхэ/Бу кыттааччы дьахтарга} '''[[$2|саха тыла]] [[$1|төрөөбүт тыла]]''' буолар.", -------------------------- sat -------------------------- ["sat-0"] = "ᱱᱩᱭ ᱵᱮᱵᱷᱟᱨᱤᱭᱟᱹ ᱦᱟᱜ ᱫᱚ ᱜᱮᱭᱟᱱ '''ᱵᱟᱹᱱᱩᱜ-ᱟ [[$2|ᱥᱟᱱᱛᱟᱲᱤ]]''' ᱨᱮ ᱫᱚ (ᱟᱨᱵᱟᱝ ᱟᱹᱰᱤ ᱢᱩᱥᱠᱤᱞ ᱛᱮ ᱵᱩᱡᱷᱹᱣ ᱫᱟᱲᱮᱭᱟᱜ-ᱟ ) ᱾", ["sat-1"] = "ᱱᱩᱭ ᱵᱮᱵᱷᱟᱨᱤᱭᱟᱹ ᱦᱟᱜ ᱫᱚ '''[[$1|ᱱᱟᱥᱮ ᱫᱷᱟᱨᱟ]]''' ᱜᱮᱭᱟᱱ ᱢᱮᱱᱟᱜ-ᱟ '''[[$2|ᱥᱟᱱᱛᱟᱲᱤ]]''' ᱨᱮᱱᱟᱜ ᱾", ["sat-2"] = "ᱱᱩᱭ ᱵᱮᱵᱷᱟᱨᱤᱭᱟᱹ ᱦᱟᱜ ᱫᱚ '''[[$1|ᱛᱟᱞᱟᱢᱟᱞᱟ]]''' ᱜᱮᱭᱟᱱ ᱢᱮᱱᱟᱜ-ᱟ '''[[$2|ᱥᱟᱱᱛᱟᱲᱤ]]''' ᱨᱮᱱᱟᱜ ᱾", ["sat-3"] = "ᱱᱩᱭ ᱵᱮᱵᱷᱟᱨᱤᱭᱟᱹ ᱦᱟᱜ ᱫᱚ '''[[$1|ᱫᱟᱫᱚᱱ]]''' ᱜᱮᱭᱟᱱ ᱢᱮᱱᱟᱜ-ᱟ '''[[$2|ᱥᱟᱱᱛᱟᱲᱤ]]''' ᱨᱮᱱᱟᱜ ᱾", ["sat-4"] = "ᱱᱩᱭ ᱵᱮᱵᱷᱟᱨᱤᱭᱟᱹ ᱦᱟᱜ ᱫᱚ '''[[$1|ᱟᱭᱳ ᱟᱲᱟᱝ ᱥᱩᱯᱩᱨ]]''' ᱜᱮᱭᱟᱱ ᱢᱮᱱᱟᱜ-ᱟ '''[[$2|ᱥᱟᱱᱛᱟᱲᱤ]]''' ᱨᱮᱱᱟᱜ ᱾", ["sat-5"] = "ᱱᱩᱭ ᱵᱮᱵᱷᱟᱨᱤᱭᱟᱹ ᱦᱟᱜ ᱫᱚ '''[[$1|ᱩᱫᱟᱹᱢ]]''' ᱜᱮᱭᱟᱱ ᱢᱮᱱᱟᱜ-ᱟ '''[[$2|ᱥᱟᱱᱛᱟᱲᱤ]]''' ᱨᱮᱱᱟᱜ ᱾", ["sat-N"] = "ᱱᱩᱭ ᱵᱮᱵᱷᱟᱨᱤᱭᱟᱹ ᱦᱟᱜ ᱫᱚ '''[[$1|ᱟᱭᱳ ᱟᱲᱟᱝ ᱞᱮᱠᱟ]]''' ᱵᱩᱯᱩᱡᱷᱟᱹᱣ ᱢᱮᱱᱟᱜ-ᱟ '''[[$2|ᱥᱟᱱᱛᱟᱲᱤ]]''' ᱨᱮᱱᱟᱜ ᱾", -------------------------- sc -------------------------- ["sc-0"] = "Custu impitadore '''non cumprendet''' su '''[[$2|sardu]]''', o ddu cumprendet cun apentu mannu.", ["sc-1"] = "Custu impitadore podet agiudare, ca unu '''[[$1|azicu]]''' de '''[[$2|sardu]]''' lu connoschet.", ["sc-2"] = "Custu impitadore podet agiudare, ca connoschet su '''[[$2|sardu]]''' e lu '''[[$1|cumprendet]]'''.", ["sc-3"] = "Custu impitadore podet agiudare '''[[$1|meda]]''', ca ischit faeddare e iscrìere su '''[[$2|sardu]]''' comente si tocat.", ["sc-4"] = "Custu impitadore faeddat su '''[[$2|sardu]]''' in manera '''[[$1|perfeta]]'''.", ["sc-5"] = "Custu impitadore connoschet su '''[[$2|Sardu]]''' a livellu '''[[$1|profesionale]]'''.", ["sc-N"] = "Custu impitadore faeddat su '''[[$2|sardu]]''' comente '''[[$1|limba mama]]'''.", -------------------------- scn -------------------------- ["scn-0"] = "St'utenti '''nun sapi cumunicari''' n '''[[$2|sicilianu]]''' (o sulu lu capisci cu assai difficultati).\n\nSt'utenti '''nun àvi nuḍḍa''' cumpatenza 'n '''[[$2|sicilianu]]''' (o ci veni difficurtusu assai).", ["scn-1"] = "St'utenti àvi un liveḍḍu di cumpatenza '''[[$1|basi]]''' 'n '''[[$2|sicilianu]]'''.", ["scn-2"] = "St'utenti àvi un liveḍḍu di cumpatenza '''[[$1|minzanu]]''' 'n '''[[$2|sicilianu]]'''.", ["scn-3"] = "St'utenti àvi un liveḍḍu di cumpatenza '''[[$1|avanzatu]]''' 'n '''[[$2|sicilianu]]'''.", ["scn-4"] = "St'utenti àvi un liveḍḍu di cumpatenza '''[[$1|quasi matrilingua]]''' 'n '''[[$2|sicilianu]]'''.", ["scn-5"] = "St'utenti àvi un liveḍḍu di cumpatenza '''[[$1|prufissiunali]]''' 'n '''[[$2|sicilianu]]'''.", ["scn-N"] = "St'utenti àvi un liveḍḍu di cumpatenza '''[[$1|matrilingua]]''' 'n '''[[$2|sicilianu]]'''.", -------------------------- sco -------------------------- ["sco-0"] = "This uiser haes '''nae''' knawledge o '''[[$2|Scots]]''' (or unnerstaunds it wi ae fair amoont o diffeecultie).", ["sco-1"] = "This uiser can contreebute wi ae '''[[$1|laich]]''' level o '''[[$2|Scots]]'''.", ["sco-2"] = "This uiser can contreebute wi ae '''[[$1|middlin]]''' level o '''[[$2|Scots]]'''.", ["sco-3"] = "This uiser can contreebute wi ae '''[[$1|heich]]''' level o '''[[$2|Scots]]'''.", ["sco-4"] = "This uiser haes '''[[$1|awmaist mither tounge]]''' knawledge o '''[[$2|Scots]]'''.", ["sco-5"] = "This uiser knaws enouch '''[[$2|Scots]]''' tae '''[[$1|owerset]]''' fair weel.", ["sco-N"] = "This uiser haes '''[[$2|Scots]]''' aes ae '''[[$1|mither tung]]'''.", -------------------------- scz -------------------------- ["scz-0"] = "Dis user '''døsna understaand [[$2|Shaetlan]]''' (or it's a braa tryst fir dem tae understaand).", ["scz-1"] = "Dis user can contribute wi a '''[[$1|basic]]''' level o '''[[$2|Shaetlan]]'''.", ["scz-2"] = "Dis user can contribute wi a '''[[$1|middlin]]''' level o '''[[$2|Shaetlan]]'''.", ["scz-3"] = "Dis user can contribute wi a '''[[$1|advanced]]''' level o '''[[$2|Shaetlan]]'''.", ["scz-4"] = "Dis user can contribute wi a '''[[$1|jüst-aboot-broad]]''' level o '''[[$2|Shaetlan]]'''.", ["scz-5"] = "Dis user can contribute wi a '''[[$1|fully broad]]''' level o '''[[$2|Shaetlan]]'''.", ["scz-N"] = "Dis user is '''[[$1|native]] [[$2|Shaetlan]]'''-spokken.", -------------------------- sd -------------------------- ["sd-0"] = "هن واپرائيندڙ کي '''[[$2|سنڌيءَ]]''' جي '''ڪا ڄاڻ ناهي''' (يا ان کي تمام مشڪل سان سمجھندو آهي).", ["sd-1"] = "هن واپرائيندڙ کي '''[[$2|سنڌي]]'''ءَ جي '''[[$1|بنيادي]]''' ڄاڻ آهي.", ["sd-2"] = "هن واپرائيندڙ کي '''[[$2|سنڌي]]'''ءَ جي '''[[$1|وچولي]]''' ڄاڻ آهي.", ["sd-3"] = "هن واپرائيندڙ کي '''[[$2|سنڌي]]'''ءَ جي '''[[$1|متقدم]]''' ڄاڻ آهي.", ["sd-4"] = "هن واپرائيندڙ کي '''[[$2|سنڌي]]'''ءَ سان تقريبن '''[[$1|مادري زبان طور ڳالھائيندڙ]]''' جيتري واقفيت آهي.", ["sd-5"] = "هن واپرائيندڙ کي '''[[$2|سنڌي]]'''ءَ جي '''[[$1|پيشورانہ]]''' ڄاڻ آهي.", ["sd-N"] = "هن واپرائيندڙ کي '''[[$2|سنڌيءَ]]''' جي '''[[$1|ڏيھي]]''' پروڙ آهي.", -------------------------- sdc -------------------------- ["sdc-0"] = "Chisthu utenti '''nò''' ha cunnisciènzia di '''[[$2|sassaresu]]''' (o soru pó cumprindillu cun difficulthai umbè manna).", ["sdc-1"] = "Chisthu utenti pó cuntribuì cun un libellu '''[[$1|símprizi]]''' di '''[[$2|sassaresu]]'''.", ["sdc-2"] = "Chisthu utenti pó cuntribuì cun un libellu '''[[$1|mèdiu]]''' di '''[[$2|sassaresu]]'''.", ["sdc-3"] = "Chisthu utenti pó cuntribuì cun un libellu '''[[$1|abanzaddu]]''' di '''[[$2|sassaresu]]'''.", ["sdc-4"] = "Chisthu utenti fabedda '''[[$2|sassaresu]] [[$1|guasi cumenti una linga madre]]'''.", ["sdc-5"] = "Chisthu utenti fabedda '''[[$2|sassaresu]]''' cun un libellu '''[[$1|prufissionari]]'''.", ["sdc-N"] = "Chisthu utenti fabedda '''[[$2|sassaresu]]''' cumenti '''[[$1|linga madre]]'''.", -------------------------- sdh -------------------------- ["sdh-N"] = "{'''[[$1|زوان داڵگی]]''' هەێ کاربەرە '''[[$2|کوردی خوارینە]]'''/'''[[$1|زوان داڵگی]]''' هەێ کاربەرە '''[[$2|کوردی خوارینە]]'''.}", -------------------------- se -------------------------- ["se-0"] = "Dát geavaheaddji máhttá '''[[$2|davvisámegiela]] hui veaháš dahje ii máhte dan ollege'''.", ["se-1"] = "Dát geavaheaddji máhttá '''[[$1|veaháš]] [[$2|davvisámegiela]]'''", ["se-2"] = "Dát geavaheaddji máhttá '''[[$2|davvisámegiela]] [[$1|viehka bures]]'''", ["se-3"] = "Dát geavaheaddji máhttá '''[[$2|davvisámegiela]] [[$1|hui bures]]'''", ["se-4"] = "Dát geavaheaddji máhttá '''[[$2|davvisámegiela]] [[$1|dego eatnigiela]]'''", ["se-5"] = "Dát geavaheaddji máhttá '''[[$2|davvisámegiela]] [[$1|ámmátlaš dásis]]'''", ["se-N"] = " Dát geavaheaddji máhttá '''[[$2|davvisámegiela]] [[$1|eatnigiellan]]'''", -------------------------- sg -------------------------- ["sg-0"] = "Nyîmbâ sô ahînga '''[[$2|sängö]] kêtê pëpe''' wala lo mä nî na kötä pâsi mîngi.", ["sg-1"] = "Nyîmbâ sô ahînga '''[[$2|sängö]] [[$1|nzönî kêtê]]'''", ["sg-2"] = "Nyîmbâ sô ahînga '''[[$2|sängö]] [[$1|nzönî alîngbi na nî]]'''", ["sg-3"] = "Nyîmbâ sô ahînga '''[[$2|sängö]] [[$1|taâ nzönî]]'''.", ["sg-4"] = "Nyîmbâ sô ahînga yângâ tî '''[[$2|sängö]]''' ndurü na '''[[$1|lkôzo yângâ]]'''", ["sg-5"] = "Nyîmbâ sô ahînga yângâ tî '''[[$2|sängö]]''' töngana '''[[$1|kpëngbä wakua]]''' nî.", ["sg-N"] = "Nyîmbâ sô ahînga '''[[$2|sängö]]''' pendere mîngi, tënë tî sô ayeke '''[[$1|kôzo yângâ]]''' tî lo.", -------------------------- sga -------------------------- ["sga-1"] = "Attá foglaimm '''[[$1|bunaid]]''' inna '''[[$2|Sen-Goídilce]]''' ocin scríbnid se.", ["sga-2"] = "Attá foglaimm '''[[$1|medóndae]]''' inna '''[[$2|Sen-Goídilce]]''' ocin scríbnid se.", ["sga-3"] = "Attá foglaimm '''[[$1|ard]]''' inna '''[[$2|Sen-Goidilce]]''' ocin scribnid se.", -------------------------- sgs -------------------------- ["sgs-0"] = "Tas nauduotuos '''nasopront [[$2|žemaitiu kalbuos]]''' (a sopronta nuognē mažā).", ["sgs-1"] = "Tas nauduotuos gal prisėdietė pri pruojekta '''[[$1|pradėnė līgė]] [[$2|žemaitiu kalbuo]]'''.", ["sgs-2"] = "Tas nauduotuos gal prisėdietė pri pruojekta '''[[$1|vėdotėnė līgė]] [[$2|žemaitiu kalbuo]]'''.", ["sgs-3"] = "Tas nauduotuos gal prisėdietė pri pruojekta '''[[$1|aukšta līgė]] [[$2|žemaitiu kalbuo]]'''.", ["sgs-4"] = "Tas nauduotuos '''[[$2|žemaitėškā]]''' rokoujės zars tāp, būktās ton ruoda būtom anuo '''[[$1|gėmtojė]]'''.", ["sgs-N"] = "Tuo nauduotuojė '''[[$1|gimta kalba]]''' īr '''[[$2|žemaitiu]]'''.", -------------------------- sh-Latn -------------------------- ["sh-Latn-0"] = "Ovaj korisnik '''ne''' zna '''[[$2|srpskohrvatski]]''' (ili razumije sa znatnim poteškoćama).", ["sh-Latn-1"] = "Ovaj korisnik zna '''[[$2|srpskohrvatski]]''' na '''[[$1|osnovnoj]]''' razini.", ["sh-Latn-2"] = "Ovaj korisnik zna '''[[$2|srpskohrvatski]]''' na '''[[$1|srednjoj]]''' razini.", ["sh-Latn-3"] = "Ovaj korisnik zna '''[[$2|srpskohrvatski]]''' na '''[[$1|naprednoj]]''' razini.", ["sh-Latn-4"] = "Ovaj korisnik zna '''[[$2|srpskohrvatski]]''' na razini '''[[$1|skoro izvornoga govornika]]'''.", ["sh-Latn-5"] = "Ovaj korisnik zna '''[[$2|srpskohrvatski]]''' na '''[[$1|profesionalnoj]]''' razini.", ["sh-Latn-N"] = "Ovaj korisnik govori '''[[$2|srpskohrvatski]]''' kao '''[[$1|materinski jezik]]'''.", -------------------------- sh -------------------------- ["sh-0"] = "Ovaj korisnik '''ne''' zna '''[[$2|srpskohrvatski]]''' (ili razumije sa znatnim poteškoćama).", ["sh-1"] = "Ovaj korisnik zna '''[[$2|srpskohrvatski]]''' na '''[[$1|osnovnoj]]''' razini.", ["sh-2"] = "Ovaj korisnik zna '''[[$2|srpskohrvatski]]''' na '''[[$1|srednjoj]]''' razini.", ["sh-3"] = "Ovaj korisnik zna '''[[$2|srpskohrvatski]]''' na '''[[$1|naprednoj]]''' razini.", ["sh-4"] = "Ovaj korisnik zna '''[[$2|srpskohrvatski]]''' na razini '''[[$1|skoro izvornoga govornika]]'''.", ["sh-5"] = "Ovaj korisnik zna '''[[$2|srpskohrvatski]]''' na '''[[$1|profesionalnoj]]''' razini.", ["sh-N"] = "Ovaj korisnik govori '''[[$2|srpskohrvatski]]''' kao '''[[$1|materinski jezik]]'''.", -------------------------- shi -------------------------- ["shi-0"] = "Amswuri ad '''ur''' akk issn i '''[[$2|Tclḥit]]''' (nɣ ar tt ittfham s tmmara iggutn).", ["shi-1"] = "Amswuri ad issn '''[[$1|imikk]]''' i '''[[$2|Tclḥit]]'''.", ["shi-2"] = "Amswuri ad dars yat tussna '''[[$1|tanmmast]]''' ɣ '''[[$2|Tclḥit]]'''.", ["shi-3"] = "Amswuri ad issn '''[[$1|bahra]]''' i '''[[$2|Tclḥit]]'''.", ["shi-4"] = "Amswuri ad dars yat tussna '''[[$1|yattuyn]]''' ɣ '''[[$2|Tclḥit]]'''.", ["shi-5"] = "Amswuri ad dars yat tussna '''[[$1|lli igan iḥtirafiya]]''' ɣ '''[[$2|Tclḥit]]'''.", ["shi-N"] = "Amswuri ad tga dars '''[[$2|Taclḥit]] [[$1|ils izwarn]]'''.", -------------------------- shn -------------------------- ["shn-0"] = "ၽူႈၸႂ်ႉတိုဝ်းၵေႃႉၼႆႉ မီးတၢင်းႁူႉ '''ဢမ်ႇမီး''' ၽႃႇသႃႇ'''[[$2|တႆး]]''' (ဢမ်ႇၼၼ် ပွင်ႇၸႂ်မၼ်း ယၢပ်ႇၽိုတ်ႇၼႃႇ)။", ["shn-1"] = "ၽူႈၸႂ်ႉတိုဝ်းၵေႃႉၼႆႉမီး '''[[$1|ၸၼ်ႉပိုၼ်ႉထၢၼ်]]''' ပိုၼ်ႉႁူႉၵဵဝ်ႇလူၺ်ႈ'''[[$2|ဢင်းၵိတ်ႉ]]'''.", ["shn-2"] = "ၽူႈၸႂ်ႉတိုဝ်းၵေႃႈၼႆႉမီး '''[[$1|ၸၼ်ႉထၢၼ်ႈၵၢင်]]''' ပိုၼ်ႉႁူႉၵဵဝ်ႇလူၺ်ႈ '''[[$2|ဢင်းၵိတ်ႉ]]'''.", ["shn-3"] = "ၽူႈၸႂ်ႉတိုဝ်းၵေႃႈၼႆႉမီး '''[[$1|ၸၼ်ႉထၢၼ်ႈသုင်]]''' ပိုၼ်ႉႁူႉၵဵဝ်ႇလူၺ်ႈ'''[[$2|ဢင်းၵိတ်ႉ]]'''.", ["shn-4"] = "ၽူႈၸႂ်ႉတိုဝ်းၵေႃႉၼႆႉမီး '''[[$1|ၸၼ်ႉထၢၼ်ၸမ်ၸမ်ၵႂၢမ်းငဝ်ႈ]]''' ပိုၼ်ႉႁူႉၵဵဝ်ႇလူၺ်ႈ '''[[$2|ဢင်းၵိတ်ႉ]]'''.", ["shn-5"] = "ၽူႈၸႂ်ႉတိုဝ်းၵေႃႉၼႆႉမီး'''[[$1|ၸၼ်ႉထၢၼ်ႈလူင်ႉလႅၼ်ႇ]]''' ပိုၼ်ႉႁူႉၵဵဝ်ႇလူၺ်ႈ'''[[$2|ဢင်းၵိတ်ႉ]]'''.", ["shn-N"] = "ၽူႈၸႂ်ႉတိုဝ်းၵေႃႉၼႆႉမီး '''[[$1|ၸၼ်ႉထၢၼ်ႈၵႂၢမ်းငဝ်ႈ]]''' ၼႂ်းၵၢၼ်ႁူႉပွင်ႇၸႂ် '''[[$2|ဢင်းၵိတ်ႉ]]'''.", -------------------------- shy -------------------------- ["shy-0"] = "This user has '''no''' knowledge of '''[[$2|Tacawit / ⵝⴰⵛⴰⵡⵉⵝ]]''' (or understands it with considerable difficulty).", ["shy-1"] = "This user has '''[[$1|basic]]''' knowledge of '''[[$2|Tacawit / ⵝⴰⵛⴰⵡⵉⵝ]]'''.", ["shy-2"] = "This user has '''[[$1|intermediate]]''' knowledge of '''[[$2|Tacawit / ⵝⴰⵛⴰⵡⵉⵝ]]'''.", ["shy-3"] = "This user has '''[[$1|advanced]]''' knowledge of '''[[$2|Tacawit / ⵝⴰⵛⴰⵡⵉⵝ]]'''.", ["shy-4"] = "This user has '''[[$1|near native speaker]]''' knowledge of '''[[$2|Tacawit / ⵝⴰⵛⴰⵡⵉⵝ]]'''.", ["shy-5"] = "This user has '''[[$1|professional]]''' knowledge of '''[[$2|Tacawit / ⵝⴰⵛⴰⵡⵉⵝ]]'''.", ["shy-N"] = "This user has a '''[[$1|native]]''' understanding of '''[[$2|Tacawit / ⵝⴰⵛⴰⵡⵉⵝ]]'''.", -------------------------- si -------------------------- ["si-0"] = "මෙම පරිශීලකයා‍ට '''[[$2|සිංහල භාෂාව]]''' පිළිබඳ දැනුමක් '''නැත''' (හෝ ඉතාමත් අපහසුවෙන් එය තේරුම් ගනියි).", ["si-1"] = "මෙම පරිශීලකයා‍ට '''[[$2|සිංහල භාෂාව]]''' පිළිබඳ '''[[$1|මූලික]]''' දැනුමක් ඇත.", ["si-2"] = "මෙම පරිශීලකයාහට '''[[$2|සිංහල භාෂාව]]''' පිළිබඳ '''[[$1|අතරමැදි]]''' දැනුමක් ඇත.", ["si-3"] = "මෙම පරිශීලකයා‍ට '''[[$2|සිංහල භාෂාව]]''' පිළිබඳ '''[[$1|උසස්]]''' දැනුමක් ඇත.", ["si-4"] = "මෙම පරිශීලකයාහට '''[[$2|සිංහල භාෂාව]]''' පිළිබඳ '''[[$1|ස්වදේශීය කථකයෙකුට සමීප]]''' දැනුමක් ඇත.", ["si-5"] = "මෙම පරිශීලකයා‍ට '''[[$2|සිංහල භාෂාව]]''' පිළිබඳ '''[[$1| වෘත්තිමය]]''' දැනුමක් ඇත.", ["si-N"] = "මෙම පරිශීලකහට '''[[$2|සිංහල භාෂාව]]''' පිළිබඳ '''[[$1|ස්වභාෂා]]''' දැනුමක් ඇත.", -------------------------- sjd -------------------------- ["sjd-0"] = "Тэдт оаннӭй '''эйй тӣдҍ [[$2|кӣллт са̄мь кӣл]]''' (вай моа̄дтъенне кӣллтса̄мас оа̄нташт).", ["sjd-1"] = "Тэдт оаннӭй '''[[$1|ва̄нас]] [[$2|кӣллт са̄мь кӣл]]''' оа̄нташт.", ["sjd-2"] = "Тэдт оаннӭй те̄дт '''[[$2|кӣллт са̄мь кӣл]] [[$1|кэскмусс ре̄вьнэсьт]]'''.", ["sjd-3"] = "Тэдт оаннӭй '''[[$2|кӣллт са̄мь кӣл]] [[$1|пуэраст]]''' оанн.", ["sjd-4"] = "Тэдт оаннӭй те̄дт '''[[$2|кӣллт са̄мь кӣл]] [[$1|маль гу ӣжесь е̄ннҍкӣлл]]'''.", ["sjd-5"] = "Тэдт оаннӭй '''[[$2|кӣллт са̄мь кӣл]] [[$1|чепельт]]''' оанн.", ["sjd-N"] = "'''[[$2|Кӣллт са̄мь кӣлл]]''' лӣ тэнн оаннӭй '''[[$1|е̄ннҍкӣлл]]'''.", -------------------------- sje -------------------------- ["sje-0"] = "Dán anejin '''ij lä akktak [[$2|bidumsámegiella]]'''máhtto (vaj skenij dav bär ållå nievret).", ["sje-1"] = "Dájna adnejijn lä '''[[$1|binná]] [[$2|bidumsámegiella]]'''máhtto.", ["sje-2"] = "Dán adnejin lä '''[[$1|muddágis]] [[$2|bidumsámegiella]]'''máhtto.", ["sje-3"] = "Dájna adnejin lä '''[[$1|vuođolatj]] [[$2|bidumsámegiella]]'''máhtto.", ["sje-4"] = "Dán adnejin lä '''[[$1|varrga äddnegielalatj]] [[$2|bidumsámegiella]]'''máhtto.", ["sje-5"] = "Dájna adnejijn lä '''[[$1|bargolatj]] [[$2|bidumsámegiella]]'''máhtto.", ["sje-N"] = "Dájna adnejijn lä '''[[$1|äddnegielalatj]] [[$2|bidumsámegiella]]'''máhtto.", -------------------------- sjn -------------------------- ["sjn-1"] = "I iuithron hen gâr ist '''[[$1|dithen]]''' o lam '''[[$2|Edhellen]]'''.", -------------------------- sjt -------------------------- ["sjt-1"] = "Таттӥ э̄ннӓй '''[[$2|тарье са̄мя кӣлы]] [[$1|ва̄нас а̄нтша]]'''.", -------------------------- sk -------------------------- ["sk-0"] = "Tento užívateľ '''nerozumie''' po '''[[$2|slovensky]]''' (alebo rozumie so značnými problémami).", ["sk-1"] = "Tento užívateľ má '''[[$1|základné]]''' znalosti '''[[$2|slovenčiny]]'''.", ["sk-2"] = "Tento užívateľ má '''[[$1|stredné]]''' znalosti '''[[$2|slovenčiny]]'''.", ["sk-3"] = "Tento užívateľ má '''[[$1|pokročilé]]''' znalosti '''[[$2|slovenčiny]]'''.", ["sk-4"] = "Tento užívateľ má znalosti '''[[$2|slovenčiny]] [[$1|takmer na úrovni materinského jazyka]]'''.", ["sk-5"] = "Tento užívateľ má '''[[$1|profesionálne]]''' znalosti '''[[$2|slovenčiny]]'''.", ["sk-N"] = "Tento užívateľ má '''[[$2|slovenčinu]]''' ako '''[[$1|materinský jazyk]]'''.", -------------------------- skr -------------------------- ["skr-0"] = "ایہ صارف '''[[$2|سرائیکی]]''' نال '''اݨ سونہاں'''ہے۔ (یا سمجھݨ وچ اوکھ تھیندی ہے)۔", ["skr-1"] = "ایہ صارف '''[[$2|سرائیکی]]''' دا '''[[$1|بنیادی]]''' علم رکھدا ہے۔", ["skr-2"] = "ایہ ورتݨ آلا '''[[$2|سرائیکی]]''' کوں '''[[$1|درمیانے]]''' درجے تائیں ڄاݨدے۔", ["skr-3"] = "ایں صارف کوں '''[[$2|سرائیکی]]''' نال '''[[$1|خاصی]]''' واقفیت ہے۔", ["skr-4"] = "ایں صارف کوں '''[[$2|سرائیکی]]'''نال'''[[$1| مادری زبان]]''' دے معیار وانگوں ڄاݨ سن٘ڄاݨ ہے۔", ["skr-5"] = "ایہ صارف '''[[$2|سرائیکی]]''' کا '''[[$1|پیشہ ورانہ]]''' علم رکھد ہے۔", ["skr-N"] = "'''[[$2|سرائیکی]]''' ایں صارف دی '''[[$1|مادری زبان]]''' ہے۔", -------------------------- sl -------------------------- ["sl-0"] = "Uporabnik '''ne govori [[$2|slovenščine]]''' ali ima velike težave pri razumevanju.", ["sl-1"] = "Uporabnik pozna '''[[$1|osnove]] [[$2|slovenskega jezika]]'''.", ["sl-2"] = "Uporabnik '''[[$1|srednje dobro]]''' govori '''[[$2|slovenščino]]'''.", ["sl-3"] = "Uporabnik '''[[$1|zelo dobro]]''' govori '''[[$2|slovenščino]]'''.", ["sl-4"] = "Uporabnik govori '''[[$1|slovensko]]''' skoraj '''[[$2|enako dobro kakor prvi jezik]]'''.", ["sl-5"] = "Uporabnik govori '''[[$2|slovenščino]]''' na '''[[$1|profesionalni]]''' ravni.", ["sl-N"] = "Uporabnik govori '''[[$1|slovenščino]]''' kot '''[[$2|materni jezik]]'''.", -------------------------- sla-pro -------------------------- ["sla-pro-1"] = "Sь uživateľь '''[[$2|ęzykъ Slověnьskъ]]''' na stǫpeni '''[[$1|osnovьnomь]]''' znajetь.", ["sla-pro-2"] = "{Sь uživateľь/ Sa uživateľьka} '''[[$2|ęzykъ Slověnьskъ]]''' na stǫpeni '''[[$1|serdьnomь]]''' znajetь.", ["sla-pro-3"] = "{Sь uživateľь/ Sa uživateľьka} '''[[$2|ęzykъ Slověnьskъ]] [[$1|dobrě]]''' znajetь.", -------------------------- sli -------------------------- ["sli-0"] = "Dieser Benutzer beherrscht '''[[$2|Schläsch]] nee''' (oder verstieht is nur mit beträchtlicha Schwierigkeita).", ["sli-1"] = "Dieser Benutzer koann [[$1|a wing]] '''[[$2|Schläsch]]'''.", ["sli-2"] = "Dieser Benutzer beherrscht '''[[$2|Schläsch]]''' uff '''[[$1|fortgeschrittenem]]''' Niveau.", ["sli-3"] = "Dieser Benutzer beherrscht '''[[$2|Schläsch]]''' uff '''[[$1|hohem]]''' Niveau.", ["sli-4"] = "Dieser Benutzer beherrscht '''[[$2|Schläsch]]''' uff '''[[$1|muttersproachlichem Niveau]]'''.", ["sli-5"] = "Dieser Benutzer beherrscht '''[[$2|Schläsch]]''' uff '''[[$1|professionellem]]''' Niveau.", ["sli-N"] = "Dieser Benutzer ies a echte schläsche Lerge un spricht '''[[$2|Schläsch]]''' als '''[[$1|Muttersproache]]'''.", -------------------------- slr -------------------------- ["slr-2"] = "Bu yarığuci '''[[$2|Salırçanı]] [[$1|otta]]''' eñgeklikde olanbar.", -------------------------- sm -------------------------- ["sm-1"] = "Lenei tagata mafai sao ma se laugatasi le '''[[$1|mea muamua]]''' o '''[[$2|gagana samoa]]'''.", -------------------------- smn -------------------------- ["smn-0"] = "Taat kevttee máttá '''uáli jo uccáá teikkâ ij määti ollágin [[$2|anarâškielâ]]'''.", ["smn-1"] = "Taat kevttee máttá '''[[$1|váhá]] [[$2|anarâškielâ]]'''.", ["smn-2"] = "Taat kevttee máttá '''[[$2|anarâškielâ]] [[$1|viehâ pyereest]]'''.", ["smn-3"] = "Taat kevttee máttá '''[[$2|anarâškielâ]] [[$1|uáli jo pyereest]]'''.", ["smn-4"] = "Taat kevttee máttá '''[[$2|anarâškielâ]] [[$1|masa eenikielâlâš sárnoo náál]]'''.", ["smn-5"] = "Taat kevttee máttá '''[[$2|anarâškielâ]] [[$1|áámmátlii tääsist]]'''.", ["smn-N"] = "Taan kevttee '''[[$1|eenikielâ]]''' lii '''[[$2|anarâškielâ]]'''.", -------------------------- sn -------------------------- ["sn-0"] = "Mushandisi uyu '''haana''' ruzivo rwe '''[[$2|Chishona]]''' (kana kuti anokonekana kakuru pakuchinzwisisa).", ["sn-1"] = "Mushandisi uyu ane ruzivo '''[[$1|rwechekutanga]]''' rwe '''[[$2|Chishona]]'''.", ["sn-2"] = "Mushandisi uyu ane ruzivo '''[[$1|rwechechipakati]]''' rwe '''[[$2|Chishona]]'''.", ["sn-3"] = "Mushandisi uyu ane ruzivo '''[[$1|rwukurukwazvo]]''' rwe '''[[$2|Chishona]]'''.", ["sn-4"] = "Mushandisi uyu ane ruzivo '''[[$1|rwunenge rwechizvarwa]]''' rwe '''[[$2|Chishona]]'''.", ["sn-5"] = "Mushandisi uyu ane ruzivo '''[[$1|rwechinyanzvi]]''' rwe '''[[$2|Chishona]]'''.", ["sn-N"] = "Mushandisi uyu ane nzwisiso ye '''[[$1|chizvarwa]]''' ye '''[[$2|Chishona]]'''.", -------------------------- so -------------------------- ["so-0"] = "Isticmaalahan waxba kama yaqaano af '''[[$2|Soomaaliga]]''' (ama wuxuu ka yaqaanaa wax aad iyo '''aad u yar''').", ["so-1"] = "Isticmaalahan wuxuu '''[[$2|Soomaaliga]]''' ugu hadlaa si '''[[$1|aad u yar]]'''.", ["so-2"] = "Isticmaalahan wuxuu '''[[$2|Soomaaliga]]''' ugu hadlaa si '''[[$1|dhaxdhaxaad ah]]'''.", ["so-3"] = "Isticmaalahan wuxuu '''[[$2|Soomaaliga]]''' ugu hadlaa si '''[[$1|aad u fiican]]'''.", ["so-4"] = "Isticmaalahan wuxuu '''[[$2|Soomaaliga]]''' ugu hadlaa sida afkiisa '''[[$1|hooyo]]''' oo kale.", ["so-N"] = "Isticmaalahan '''[[$2|Soomaaliga]]''' waa '''[[$1|afkiisa hooyo]]'''.", -------------------------- sq -------------------------- ["sq-0"] = "{Ky përdorues/Kjo përdoruese} '''nuk ka''' njohuri të '''[[$2|gjuhës shqipe]]''' (ose e kupton me vështirësi të madhe).", ["sq-1"] = "{Ky përdorues/Kjo përdoruese} ka njohuri '''[[$1|të kufizuar]]''' të '''[[$2|gjuhës shqipe]]'''.", ["sq-2"] = "{Ky përdorues/Kjo përdoruese} ka njohuri '''[[$1|thelbësore]]''' të '''[[$2|gjuhës shqipe]]'''.", ["sq-3"] = "{Ky përdorues/Kjo përdoruese} ka njohuri '''[[$1|të thellë]]''' të '''[[$2|gjuhës shqipe]]'''.", ["sq-4"] = "{Ky përdorues/Kjo përdoruese} ka njohuri '''[[$1|afërsisht amtare]]''' të '''[[$2|gjuhës shqipe]]'''.", ["sq-5"] = "{Ky përdorues/Kjo përdoruese} ka njohuri '''[[$1|profesionale]]''' të '''[[$2|gjuhës shqipe]]'''.", ["sq-N"] = "{Ky përdorues/Kjo përdoruese} ka njohuri '''[[$1|amtare]]''' të '''[[$2|gjuhës shqipe]]'''.", -------------------------- sr -------------------------- ["sr-0"] = "{Овај корисник/Ова корисница/Овај корисник} '''не''' зна '''[[$2|српски језик]]''' (или га разуме са знатним потешкоћама).", ["sr-1"] = "{Овај корисник/Ова корисница/Овај корисник} има '''[[$1|основно]]''' познавање '''[[$2|српског језика]]'''.", ["sr-2"] = "{Овај корисник/Ова корисница/Овај корисник} разуме '''[[$2|српски језик]]''' на '''[[$1|средњем]]''' нивоу.", ["sr-3"] = "{Овај корисник/Ова корисница/Овај корисник} '''[[$1|доста добро]]''' познаје '''[[$2|српски језик]]'''.", ["sr-4"] = "{Овај корисник/Ова корисница/Овај корисник} '''[[$1|течно]]''' говори '''[[$2|српски језик]]'''.", ["sr-5"] = "{Овај корисник/Ова корисница/Овај корисник} зна '''[[$2|српски језик]]''' на '''[[$1|професионалном]]''' нивоу.", ["sr-N"] = "'''[[$1|Матерњи језик]]''' {овог корисника/ове кориснице/овог корисника} је '''[[$2|српски]]'''.", -------------------------- sr-Latn -------------------------- ["sr-Latn-0"] = "{Ovaj korisnik/Ova korisnica/Ovaj korisnik} '''ne''' zna '''[[$2|srpski jezik]]''' (ili ga razume sa znatnim poteškoćama).", ["sr-Latn-1"] = "{Ovaj korisnik/Ova korisnica/Ovaj korisnik} ima '''[[$1|osnovno]]''' poznavanje '''[[$2|srpskog jezika]]'''.", ["sr-Latn-2"] = "{Ovaj korisnik/Ova korisnica/Ovaj korisnik} razume '''[[$2|srpski jezik]]''' na '''[[$1|srednjem]]''' nivou.", ["sr-Latn-3"] = "{Ovaj korisnik/Ova korisnica/Ovaj korisnik} '''[[$1|dosta dobro]]''' poznaje '''[[$2|srpski jezik]]'''.", ["sr-Latn-4"] = "{Ovaj korisnik/Ova korisnica/Ovaj korisnik} '''[[$1|tečno]]''' govori '''[[$2|srpski jezik]]'''.", ["sr-Latn-5"] = "{Ovaj korisnik/Ova korisnica/Ovaj korisnik} zna '''[[$2|srpski jezik]]''' na '''[[$1|profesionalnom]]''' nivou.", ["sr-Latn-N"] = "'''[[$1|Maternji jezik]]''' {ovog korisnika/ove korisnice/ovog korisnika} je '''[[$2|srpski]]'''.", -------------------------- srn -------------------------- ["srn-0"] = "Disi masyin abi '''no takifustani''' fu a '''[[$2|Sranantongo]]''' (efu kan a frustan nanga pasar muliki).", -------------------------- ss -------------------------- ["ss-0"] = "Umuntfu '''cha ukhulúma [[$2|siSwati]]''' (cha uva).", -------------------------- st -------------------------- ["st-0"] = "Motho enwa o tseba ho ngola 0 '''[[$2|Sesotho]]'''.", -------------------------- stq -------------------------- ["stq-0"] = "Dissen Benutser behärsket '''[[$2|Seeltersk]] nit''' (of ferstoant et man stuur).", ["stq-1"] = "Dissen Benutser behärsket '''[[$2|Seeltersk]]''' ap '''[[$1|gruundlääsende]]''' Ieuwene.", ["stq-2"] = "Dissen Benutser kon '''[[$1|oarich]] [[$2|Seelters]]''' baale.", ["stq-3"] = "Dissen Benutser kon '''[[$1|goud]] [[$2|Seeltersk]]''' baale.", ["stq-4"] = "Dissen Benutser boalt '''[[$1|slonk]] [[$2|Seeltersk]]'''.", ["stq-5"] = "Dissen Benutser behärsket '''[[$2|Seeltersk]]''' ap '''[[$1|professionelle]]''' Ieuwene.", ["stq-N"] = "Dissen Benutser boalt '''[[$2|Seeltersk]]''' as '''[[$1|Määmesproake]]'''.", -------------------------- sty -------------------------- ["sty-0"] = "'''[[$2|Себертатар тел]]'''не '''пелмәйте''' (начар аңнайты)", ["sty-1"] = "'''[[$2|Себертатар тел]]'''не '''[[$1|пашлапҡы]]'''тай пеләте.", ["sty-2"] = "'''[[$2|Себертатар тел]]'''не '''[[$1|уртаҡца]]''' пеләте.", ["sty-3"] = "'''[[$2|Себертатар тел]]'''не '''[[$1|йаҡшы]]''' пеләте.", ["sty-4"] = "'''[[$2|Себертатар тел]]'''не үс '''[[$1|туған тел]]'''ен шигелле пеләте.", ["sty-5"] = "'''[[$2|Себертатар тел]]'''не '''[[$1|профессиональтай]]''' пеләте.", ["sty-N"] = "'''[[$1|Туған тел]]'''е '''[[$2|Себертатар тел]]'''.", -------------------------- su -------------------------- ["su-0"] = "Pamaké ieu '''teu''' ngarti '''[[$2|basa Sunda]]''' (atawa saeutik-saeutik ngartina).", ["su-1"] = "Pamaké ieu gaduh kamampuan '''[[$2|basa Sunda]]''' hambalan '''[[$1|dasar]]'''.", ["su-2"] = "Pamaké ieu gaduh kamampuan '''[[$2|basa Sunda]]''' hambalan '''[[$1|panengah]]'''.", ["su-3"] = "Pamaké ieu '''[[$1|mahér]] [[$2|basa Sunda]]'''.", ["su-4"] = "Pamaké ieu tiasa '''[[$2|basa Sunda]]''' anu '''[[$1|sampurna]]'''.", ["su-5"] = "Pamaké ieu tiasa '''[[$2|basa Sunda]]''' anu '''[[$1|mahér tur sampurna]]'''.", ["su-N"] = "Pamaké ieu '''[[$1|tulen]]''' bisa '''[[$2|basa Sunda]]''' .", -------------------------- sv -------------------------- ["sv-0"] = "Den här användaren har '''inga''' kunskaper i '''[[$2|svenska]]''' (eller förstår det bara med en stor svårighet).", ["sv-1"] = "Den här användaren har '''[[$1|grundläggande]]''' kunskaper i '''[[$2|svenska]]'''.", ["sv-2"] = "Den här användaren har '''[[$1|medelgoda]]''' kunskaper i '''[[$2|svenska]]'''.", ["sv-3"] = "Den här användaren har '''[[$1|avancerade]]''' kunskaper i '''[[$2|svenska]]'''.", ["sv-4"] = "Den här användaren kan '''[[$2|svenska]] [[$1|nästan på modersmålsnivå]]'''.", ["sv-5"] = "Den här användaren har '''[[$1|professionella]]''' kunskaper i '''[[$2|svenska]]'''.", ["sv-N"] = "Den här användaren har '''[[$2|svenska]]''' som '''[[$1|modersmål]]'''.", -------------------------- sw -------------------------- ["sw-0"] = "Mtumiaji huyu '''hajui [[$2|Kiswahili]]''' (au anaelewa kidogo sana).", ["sw-1"] = "Mtumiaji huyu ni mwongeaji wa '''[[$2|Kiswahili]]''' cha kiwango cha '''[[$1|Msingi]]'''.", ["sw-2"] = "Mtumiaji huyu ni mwongeaji wa '''[[$2|Kiswahili]]''' cha kiwango cha '''[[$1|Wastani]]'''.", ["sw-3"] = "Mtumiaji huyu ni mwongeaji wa '''[[$2|Kiswahili]]''' kiwango '''[[$1|cha Juu]]'''.", ["sw-4"] = "Mtumiaji huyu ni mwongeaji wa '''[[$2|Kiswahili]]''' cha kiwango cha '''[[$1|Juu Kabisa]]'''.", ["sw-5"] = "Mtumiaji huyu ni mwongeaji wa '''[[$2|Kiswahili]]''' cha kiwango cha '''[[$1|Utaalamu]]'''.", ["sw-N"] = "Mtumiaji huyu ni mwongeaji wa '''[[$2|Kiswahili]] [[$1|Fasaha]]'''.", -------------------------- swg -------------------------- ["swg-2"] = "{Dr Benutzr/Die Benutzrin} hot '''[[$1|middlare]] [[$2|Schwäbischkenntnisse]]'''.", -------------------------- sxu -------------------------- ["sxu-0"] = "Dor Benutzor hior sprischt '''gorgeen [[$2|Sächs'sch]]'''.", ["sxu-1"] = "Dor Benutzor hior kann krad ma' '''[[$1|ä ganz kleenes bissl]] [[$2|Sächs'sch]]''', 's is abbor eing'sch nisch dor Rede wärt.", ["sxu-2"] = "Dor Benutzor hior is eing'sch schonn '''[[$1|nisch ohne]]''' im '''[[$2|Sächs'sch]]''' Spräschn.", ["sxu-3"] = "Dor Benutzor hior sprischt schonn '''[[$2|Sächs'sch]] [[$1|wie's beese Tior]]'''.", ["sxu-4"] = "Dor Benutzor hior sprischt so dolle '''[[$2|Sächs'sch]] [[$1|als wäror aus Sachsn]]'''.", ["sxu-N"] = "Dor Benutzor hior is ä rüscht'schor '''[[$1|Muddorsprachlor]]''' vom '''[[$2|Sächs'sch]]'''n.", -------------------------- syc -------------------------- ["syc-1"] = "ܗܢܐ ܡܦܠܚܢܐ ܡ̇ܨܐ ܡܘܣܦܘ ܒܡܕܥܐ '''[[$1|ܫܪܫܢܝܐ]]''' ܕ'''[[$2|ܠܫܢܐ ܣܘܪܝܝܐ]]'''.", ["syc-3"] = "ܗܢܐ ܡܦܠܚܢܐ ܡ̇ܨܐ ܡܘܣܦܘ ܒܡܕܥܐ '''[[$1|ܥܠܝܐ]]''' ܕ'''[[$2|ܠܫܢܐ ܣܘܪܝܝܐ]]'''.", -------------------------- syl -------------------------- ["syl-0"] = "ꠁ ꠛꠦꠛꠀꠞꠇꠞ꠆ꠞꠣꠞ '''[[$2|ꠍꠤꠟꠐꠤ]]''' ꠅꠞ ꠃꠙꠞꠦ ꠇꠥꠘꠥ ꠉꠤꠀꠘ '''ꠘꠣꠁ''' (ꠀꠞꠘꠣꠄ ꠔꠥꠞꠣ ꠄꠖꠤꠇꠡꠦꠖꠤꠇ ꠅꠁꠟꠦ ꠛꠥꠎꠂꠘ꠆ꠘꠣ) ⁕", ["syl-1"] = "ꠁꠛꠦꠛꠀꠞꠇꠞ꠆ꠞꠣꠞ '''[[$1|ꠕꠥꠞꠣ]]''' ꠉꠤꠀꠘ ꠀꠌꠦ '''[[$2|ꠍꠤꠟꠐꠤ]]''' ꠝꠣꠔꠧꠞ ꠃꠙꠞꠦ", ["syl-2"] = "ꠁꠛꠦꠛꠀꠞꠇꠞ꠆ꠞꠣꠞ '''[[$1|ꠝꠥꠐꠣꠝꠥꠐꠤ]]''' ꠉꠤꠀꠘ ꠀꠌꠦ '''[[$2|ꠍꠤꠟꠐꠤ]]''' ꠝꠣꠔꠧꠞ ꠃꠙꠞꠦ", ["syl-3"] = "ꠁꠛꠦꠛꠀꠞꠇꠞ꠆ꠞꠣꠞ '''[[$1|ꠛꠣꠇ꠆ꠇꠣ]]''' ꠉꠤꠀꠘ ꠀꠌꠦ '''[[$2|ꠍꠤꠟꠐꠤ]]''' ꠝꠣꠔꠧꠞ ꠃꠙꠞꠦ", ["syl-4"] = "ꠁ ꠛꠦꠛꠀꠞꠇꠞ꠆ꠞꠣꠞ '''[[$1|ꠘꠣꠉꠞꠤ/ꠖꠦꠡꠤ ꠝꠣꠔ꠆ꠞꠣꠞ ꠟꠣꠈꠣꠘ]]''' ꠉꠤꠀꠘ ꠀꠍꠦ '''[[$2|ꠍꠤꠟꠐ]]''' ꠅꠞ ꠜꠣꠡꠣꠞ ꠃꠙꠞꠦ ⁕", ["syl-5"] = "ꠁ ꠛꠦꠛꠀꠞꠇꠞ꠆ꠞꠣꠞ '''[[$1|ꠇꠣꠝꠣꠁ ꠇꠞ꠆ꠞꠣꠞ ꠝꠔꠅ]]''' ꠉꠤꠀꠘ ꠀꠍꠦ '''[[$2|ꠍꠤꠟꠐꠤ]]''' ꠝꠣꠔꠞ ꠃꠙꠞꠦ ⁕", ["syl-N"] = "ꠁ ꠛꠦꠛꠀꠞꠇꠞ꠆ꠞꠣꠞ '''[[$2|ꠍꠤꠟꠐ ꠅꠞ]]''' ꠜꠣꠡꠣꠞ ꠃꠙꠞꠦ '''[[$1|ꠘꠣꠉꠞꠤ/ꠖꠦꠡꠤ]]''' ꠀꠘꠝꠣꠘ ꠛꠥꠎ ꠀꠍꠦ ⁕", -------------------------- szl -------------------------- ["szl-0"] = "{Tyn używŏcz/Ta używŏczka/Tyn używŏcz} '''niy gŏdŏ''' po '''[[$2|ślōnsku]]'''.", ["szl-1"] = "{Tyn używŏcz/Ta używŏczka/Tyn używŏcz} znŏ yno '''[[$1|źdźebko]] [[$2|ślōnskij gŏdki]]'''.", ["szl-2"] = "{Tyn używŏcz/Ta używŏczka/Tyn używŏcz} mŏ '''[[$1|strzedniõ]]''' wiadōmość '''[[$2|ślōnskij gŏdki]]'''.", ["szl-3"] = "{Tyn używŏcz/Ta używŏczka/Tyn używŏcz} mŏ '''[[$1|ganc dobrõ]]''' wiadōmość '''[[$2|ślōnskij gŏdki]]'''.", ["szl-4"] = "{Tyn używŏcz/Ta używŏczka/Tyn używŏcz} mŏ '''[[$2|ślōnskõ gŏdkã]] [[$1|bezma jak rodzimõ]]'''.", ["szl-N"] = "'''[[$2|Ślōnski]]''' to je '''[[$1|rodzimŏ gŏdka]]''' ôd {tego używŏcza/tyj używŏczki/tego używŏcza}.", -------------------------- szy -------------------------- ["szy-0"] = "tina misaungayay '''caay''' matineng saca kaliyuhan matineng '''[[$2|Taywan Hulam a kamu]]''' (saca izaw ku cacay a kaliyuhan matineng).", ["szy-1"] = "tina misaungayay matineng '''[[$1|tapabaway a cakat]]''' da’su a '''[[$2|kamu nu Sakizaya]]'''.", ["szy-2"] = "tina misaungayay matineng '''[[$1|teban a cakat]]''' da’su a '''[[$2|kamu nu Sakizya]]'''.", ["szy-3"] = "tina misaungayay matineng '''[[$1| tapabaway a cakat ]]''' da’su a '''[[$2|kamu nu Sakizaya]]'''.", ["szy-4"] = "tina misaungayay matineng '''[[$1|micapi tu kamu nu ina]]''' tanusukay '''[[$2|kamu nu Sakizaya]]'''", ["szy-5"] = "tina misaungayay matineng '''[[$1|mitesekay]]''' da’su a '''[[$2|kamu nu Sakizaya]]'''.", ["szy-N"] = "tina misaungayay matineng'''[[$1|kamu-nina]]''' da’su a '''[[$2|kamu nu Sakizaya]]'''.", } 5spuoopw013iu1xvj09l37mmrkn4unm Mô đun:Babel/data/p 828 420626 2571646 2026-10-18T13:40:31Z TheHighFighter2 42988 Trang mới: “return { -------------------------- pa -------------------------- ["pa-0"] = "ਇਸ ਵਰਤੋਂਕਾਰ ਕੋਲ਼ '''[[$2|ਪੰਜਾਬੀ]]''' ਦਾ ਕੋਈ ਗਿਆਨ '''ਨਹੀਂ''' ਹੈ (ਜਾਂ ਸਮਝਣੀ ਬਹੁਤ ਔਖੀ ਹੈ)।", ["pa-1"] = "ਇਸ ਵਰਤੋਂਕਾਰ ਕੋਲ਼ '''[[$2|ਪੰਜਾਬੀ]]''' ਦਾ '''[[$1|ਮੁਢਲਾ]]''' ਗਿਆਨ ਹੈ।", ["pa-2"] = "ਇਸ ਵਰਤੋਂਕਾਰ ਕ…” 2571646 Scribunto text/plain return { -------------------------- pa -------------------------- ["pa-0"] = "ਇਸ ਵਰਤੋਂਕਾਰ ਕੋਲ਼ '''[[$2|ਪੰਜਾਬੀ]]''' ਦਾ ਕੋਈ ਗਿਆਨ '''ਨਹੀਂ''' ਹੈ (ਜਾਂ ਸਮਝਣੀ ਬਹੁਤ ਔਖੀ ਹੈ)।", ["pa-1"] = "ਇਸ ਵਰਤੋਂਕਾਰ ਕੋਲ਼ '''[[$2|ਪੰਜਾਬੀ]]''' ਦਾ '''[[$1|ਮੁਢਲਾ]]''' ਗਿਆਨ ਹੈ।", ["pa-2"] = "ਇਸ ਵਰਤੋਂਕਾਰ ਕੋਲ਼ '''[[$2|ਪੰਜਾਬੀ]]''' ਦਾ '''[[$1|ਵਿਚਕਾਰਲੇ]]''' ਪੱਧਰ ਦਾ ਗਿਆਨ ਹੈ।", ["pa-3"] = "ਇਸ ਵਰਤੋਂਕਾਰ ਕੋਲ਼ '''[[$2|ਪੰਜਾਬੀ]]''' ਦਾ '''[[$1|ਉੱਚ]]''' ਪੱਧਰ ਦਾ ਗਿਆਨ ਹੈ।", ["pa-4"] = "ਇਸ ਵਰਤੋਂਕਾਰ ਕੋਲ਼ '''[[$2|ਪੰਜਾਬੀ]]''' ਦਾ '''[[$1|ਲਗਭਗ ਮੂਲ ਬੋਲਣ ਵਾਲ਼ੇ ਜਿੰਨਾ]]''' ਗਿਆਨ ਹੈ।", ["pa-5"] = "ਇਸ ਵਰਤੋਂਕਾਰ ਕੋਲ਼ '''[[$2|ਪੰਜਾਬੀ]]''' ਦਾ '''[[$1|ਪੇਸ਼ੇਵਰ]]''' ਗਿਆਨ ਹੈ।", ["pa-N"] = "ਇਸ ਵਰਤੋਂਕਾਰ ਕੋਲ਼ '''[[$2|ਪੰਜਾਬੀ]]''' ਦੀ '''[[$1|ਮੂਲ]]''' ਸਮਝ ਹੈ।", -------------------------- pag -------------------------- ["pag-0"] = "'''Agton sarag''' ya balot so mangusar na '''[[$2|salitan Pangasinan]]'''.", ["pag-N"] = "Sarag na ayan manag-usar so '''[[$1|twan]] [[$2|Salitan Pangasinan]]'''.", -------------------------- pal -------------------------- ["pal-0"] = "Ēn kārwar '''[[$2|Pārsīg]]''' rāy ma uzwārēd.", ["pal-1"] = " Uzwārišn ī uzwān ī '''[[$2|Pārsīg]]''' ī ēn kārwar, '''[[$1|frādomīh]]''' ast.", ["pal-2"] = "Ēn kārwār pad radag ī '''[[$1|Andarmayānag]]''' ī uzwān ī '''[[$2|Pārsīg]]''' āšnāg ast.", ["pal-3"] = "Ēn kārwār pad radag ī '''[[$1|Ahrāftag]]''' ī uzwān ī '''[[$2|Pārsīg]]'''.", ["pal-4"] = "Ēn kārwar '''[[$2|Pārsīg]]''' rāy '''[[$1|Nazdist]]''' ī uzwān ī mādarīg wāžēd. <hr/> sc=Avst| 𐬉𐬥𐬹 𐬐𐬁𐬭𐬡𐬀𐬭𐬹 '''[[$2|𐬞𐬁𐬭𐬯𐬍𐬔𐬹]]''' 𐬹𐬭𐬁𐬌𐬌 '''[[$1|𐬥𐬀𐬰𐬛𐬌𐬯𐬙𐬹]]''' 𐬍 𐬎𐬰𐬡𐬁𐬥𐬹 𐬍 𐬨𐬁𐬛𐬀𐬭𐬍𐬔𐬹 𐬡𐬁𐬲𐬉𐬛𐬺", -------------------------- pam -------------------------- ["pam-N"] = "Ing tagagamit a ini '''[[$1|katutubo]]''' ya magsalita ning '''[[$2|Kapampangan]]'''.", -------------------------- pap -------------------------- ["pap-0"] = "E uzadónan aki '''no''' ta komprondé '''[[$2|Papiamentu]]'''.", ["pap-1"] = "E uzadónan aki por papia '''[[$2|Papiamentu]]''' na un nivel '''[[$1|básiko]]'''.", ["pap-2"] = "E uzadónan aki por papia '''[[$2|Papiamentu]]''' na un nivel '''[[$1|intermedio]]'''.", ["pap-3"] = "E uzadónan aki por kontribuí na '''[[$2|Papiamentu]]''' na un nivel '''[[$1|avansá]]'''.", ["pap-4"] = "Pa e uzadónan aki, '''[[$2|Papiamentu]]''' ta nan '''[[$1|di dos idioma]]'''.", ["pap-N"] = "E uzadónan aki por papia '''[[$2|Papiamentu]]''' na un nivel '''[[$1|nativo]]'''.", -------------------------- pcd -------------------------- ["pcd-0"] = "Echl uzeu-lo, i n'bave '''poin''' in '''[[$2|Picard]]''' (ou bin i pérle un tiot peu in picard)", ["pcd-1"] = "Echl uzeu-lo, il o un '''[[$1|basique]]''' pérlache in '''[[$2|picard]]'''.", ["pcd-2"] = "Echl uzeu-lo, il o un '''[[$1|mouéyin]]''' pérlache in '''[[$2|picard]]'''.", ["pcd-3"] = "Echl uzeu-lo, il o un parlache '''[[$1|avanché]]''' in '''[[$2|picard]]'''.", ["pcd-4"] = "Pou echl uzeu-lo, ch' '''[[$2|Picard]]''' ch'est '''[[$1|quasimint conme l'langue éd chés pérints]]'''.", ["pcd-5"] = "Echl uzeu-lo, il o un parlache '''[[$1|proféchionnèl]]''' in '''[[$2|picard]]'''.", ["pcd-N"] = "Pou echl'uzeu-lo, ch' '''[[$2|Picard]]''' ch'est '''[[$1|l'langue éd ses pérints]]'''.", -------------------------- pdc -------------------------- ["pdc-0"] = "Daer Yuuser do schwetzt '''ken [[$2|Pennsilfaanisch Deitsch]]'''.", ["pdc-1"] = "Daer Yuuser do schwetzt '''[[$1|en wennich]] [[$2|Pennsilfaanisch Deitsch]]'''.", ["pdc-2"] = "Daer Yuuser do schwetzt '''[[$1|gans guud]] [[$2|Pennsilfaanisch Deitsch]]'''.", ["pdc-3"] = "Daer Yuuser do schwetzt '''[[$1|aartlich guud]] [[$2|Pennsilfaanisch Deitsch]]'''.", ["pdc-4"] = "Daer Yuuser do schwetzt '''[[$2|Pennsilfaanisch Deitsch]]''', wie ass '''[[$1|Muddersproch]]'''.", ["pdc-5"] = "Daer Yuuser do schwetzt '''[[$2|Pennsilfaanisch Deitsch]]''' uff '''[[$1|professionellem]]''' Level.", ["pdc-N"] = "Dem Yuuser do sei '''[[$1|Mudderschprooch]]''' iss '''[[$2|Pennsilfaanisch Deitsch]]'''.", -------------------------- pdt -------------------------- ["pdt-1"] = "Dis Benutza redt '''[[$1|en bet]] [[$2|Plautdietsch]]'''.", ["pdt-2"] = "Dis Benutza redt '''[[$1|nich schlachjt]] [[$2|Plautdietsch]]'''.", ["pdt-3"] = "Dis Benutza redt '''[[$1|goot]] [[$2|Plautdietsch]]'''.", ["pdt-4"] = "Dis Benutza redt '''[[$2|Plautdietsch]] [[$1|meist soo goot aus ne Muttasproak]]'''.", ["pdt-N"] = "'''[[$2|Plautdietsch]]''' es fe disem Benutza '''[[$1|Muttasproak]]'''.", -------------------------- peq -------------------------- ["peq-4"] = "ma:mu ʔuy:adu:yey '''[[$2|ʔayha čahnu]]''' hil:aw '''[[$1|ʔahčahčaymeṭ̓]]''' čanhodemʔdu.", -------------------------- pfl -------------------------- ["pfl-0"] = "De Bnudza babbld '''kä [[$2|Pälzisch]]''' (oda hod greeßere Schwierischkaide dmid).", ["pfl-1"] = "De Bnudza babbld '''[[$1|e bissl]] [[$2|Pälzisch]]'''.", ["pfl-2"] = "De Bnudza babbld '''[[$1|goans gud]] [[$2|Pälzisch]]''' .", ["pfl-3"] = "De Bnudza babbld '''[[$1|arisch gud]] [[$2|Pälzisch]]'''.", ["pfl-4"] = "De Bnudza babbld '''[[$2|Pälzisch]]''', faschd wie sai '''[[$1|Muddaschbrooch]]'''.", ["pfl-5"] = "De Bnudza babbld '''[[$2|Pälzisch]]''' uffm '''[[$1|fachlische]]''' Niwo.", ["pfl-N"] = "De Bnudza babbld '''[[$2|Pälzisch]]''' als soi '''[[$1|Muddaschbrooch]]'''.", -------------------------- pi -------------------------- ["pi-0"] = "अयं पुग्गलो '''[[$2|पाळिभासा]]'''यं '''अप्पस्सुतो'''॥ (उदाहु कसिरेपि अवगच्छति)။", ["pi-3"] = "एसो योजको '''[[$2|उत्तमायं]] [[$1|पालियं]]''' वोहारं कत्तुं सक्कोति।", ["pi-N"] = "अयं पुग्गलो '''[[$2|पाळिभासायं]] [[$1|पदेसमूलकमेन]]''' पारं गतो॥", -------------------------- piu -------------------------- ["piu-0"] = "Palyalpala ngaatja nintitjarra '''wiya [[$2|Pintupi-Luritja]]'''ku (tjinguru palyuna tayiti tjinguru kulintjaku).", ["piu-1"] = "Palyalpala ngaatja ninti '''[[$1|wiima]] [[$2|Pintupi-Luritja]]'''.", ["piu-2"] = "Palyalpala ngaatja ninti '''[[$1|ngururrpa]] [[$2|Pintupi-Luritja]]'''.", ["piu-3"] = "Palyalpala ngaatja ninti '''[[$1|palya]] [[$2|Pintupi-Luritja]]'''.", ["piu-4"] = "Palyalpala ngaatja ninti '''[[$1|palyalingku]] [[$2|Pintupi-Luritja]]'''.", ["piu-5"] = "Palyalpala ngaatja ninti '''[[$1|yatjikilingku]] [[$2|Pintupi-Luritja]]'''.", ["piu-N"] = "Palyalpala ngaatja '''[[$2|Pintupi-Luritja]]''' wangkapayi '''[[$1|palumpa wangka]]''' pilinypa.", -------------------------- pl -------------------------- ["pl-0"] = "{Ten użytkownik/Ta użytkowniczka} '''nie rozumie''' języka '''[[$2|polskiego]]''' (albo ma z nim olbrzymie trudności).", ["pl-1"] = "{Ten użytkownik/Ta użytkowniczka} posługuje się '''[[$2|językiem polskim]]''' na poziomie '''[[$1|podstawowym]]'''.", ["pl-2"] = "{Ten użytkownik/Ta użytkowniczka} posługuje się '''[[$2|językiem polskim]]''' na poziomie '''[[$1|średnio zaawansowanym]]'''.", ["pl-3"] = "{Ten użytkownik/Ta użytkowniczka} posługuje się '''[[$2|językiem polskim]]''' na poziomie '''[[$1|zaawansowanym]]'''.", ["pl-4"] = "{Ten użytkownik/Ta użytkowniczka} posługuje się '''[[$2|językiem polskim]]''' prawie tak samo biegle, jak '''[[$1|językiem ojczystym]]'''.", ["pl-5"] = "{Ten użytkownik/Ta użytkowniczka} posługuje się '''[[$2|językiem polskim]]''' na równi z '''[[$1|językiem ojczystym]]'''.", ["pl-N"] = "'''[[$2|Polski]]''' jest '''[[$1|językiem ojczystym]]''' {tego użytkownika/tej użytkowniczki}.", -------------------------- pms -------------------------- ["pms-0"] = "St'utent-sì a l'ha '''gnun-e''' conossense dël '''[[$2|Piemontèis]]''' (o a lo capiss con motobin ëd dificoltà).", ["pms-1"] = "St'utent-sì a l'ha na conossensa '''[[$1|limità]]''' dël '''[[$2|Piemontèis]]'''.", ["pms-2"] = "St'utent-sì a l'ha na conossensa '''[[$1|antërmedia]]''' dël '''[[$2|Piemontèis]]'''.", ["pms-3"] = "St'utent-sì a l'ha na conossensa '''[[$1|avansà]]''' dël '''[[$2|Piemontèis]]'''.", ["pms-4"] = "St'utent-sì a l'ha na conossensa '''[[$1|scasi nativa]]''' dël '''[[$2|Piemontèis]]'''.", ["pms-5"] = "St'utent-sì a l'ha na conossensa '''[[$1|professional]]''' dël '''[[$2|Piemontèis]]'''.", ["pms-N"] = "St'utent-sì a l'ha un livel '''[[$1|nativ]]''' ëd '''[[$2|Piemontèis]]'''.", -------------------------- pnb -------------------------- ["pnb-0"] = "ایہ ورتنوالا '''[[$2|پنجابی]]''' نوں '''نئیں''' جاندا (یا اینوں مشکل نال سمجھدا اے)۔", ["pnb-1"] = "ایہ ورتن آلا '''[[$2|پنجابی]]''' دے بارے وچ '''[[$1|بنیادی]]''' جانکاری رکھدا اے۔", ["pnb-2"] = "ایہ ورتن آلا '''[[$2|پنجابی]]''' دے بارے وچ '''[[$1|درمیانی]]''' جانکاری رکھدا اے۔", ["pnb-3"] = "اے ورتن آلا '''[[$2|پنجابی]]''' دے بارے چ '''[[$1|چوکھی]]''' جانکاری رکھدا اے۔", ["pnb-4"] = "ایہ ورتن آلا '''[[$2|پنجابی]]''' دے بارے وچ '''[[$1|چنگی بھلی]]''' جانکاری رکھدا اے۔", ["pnb-5"] = "ایہ ورتن آلا '''[[$2|پنجابی]]''' دے بارے وچ '''[[$1|پروفشنل]]''' جانکاری رکھدا اے۔", ["pnb-N"] = "اے ورتن آلا '''[[$2|پنجابی]]''' دے بارے وچ '''[[$1|ماں بولی]]''' جڈی جانکاری رکھدا اے۔", -------------------------- pnt -------------------------- ["pnt-0"] = "Ατός ο χρήστες '''ξάι''' 'κ εγροικά τα '''[[$2|Ποντιακά]]''' (ή με τρανόν ζορ).", ["pnt-1"] = "Ατός ο χρήστες καλατσέβ '''[[$1|έναν ξάι]] [[$2|Ποντιακά]]'''.", ["pnt-2"] = "Ατός ο χρήστες καλατσέβ '''[[$1|ολίγα]] [[$2|Ποντιακά]]'''.", ["pnt-3"] = "Ατός ο χρήστες καλατσέβ '''[[$1|τσιπ καλά]] [[$2|Ποντιακά]]'''.", ["pnt-4"] = "Ατός ο χρήστες καλατσέβ '''[[$1|σκυρά]] [[$2|Ποντιακά]]'''.", ["pnt-5"] = "Ατός ο χρήστες καλατσέβ '''[[$1|επαγγελματικά]] [[$2|Ποντιακά]]'''.", ["pnt-N"] = "Ατός ο χρήστες εχ' '''[[$1|μητρικόν]]''' λαλίαν τα '''[[$2|Ποντιακά]]'''.", -------------------------- pot -------------------------- ["pot-0"] = "'''Cho''' ta '''[[$2|Bodwéwadmimosi]]''' ode bémadzet.", ["pot-1"] = "'''[[$1|Bkéji]]''' ta '''[[$2|Bodwéwadmimo]]''' ode bémadzet.", ["pot-2"] = "'''[[$1|Énwék]]''' ta '''[[$2|Bodwéwadmimo]]''' ode bémadzet.", ["pot-3"] = "'''[[$1|Mno]]''' ta '''[[$2|Bodwéwadmimo]]''' ode bémadzet.", -------------------------- ppl -------------------------- ["ppl-1"] = "Ini usuarioj nemi tik ne \"ajachtu taksalis\" wan kimati '''[[$1|chiupi]] [[$2|Nawataketzalis]]'''.", ["ppl-2"] = "Ini usuarioj nemi tik ne \"tajku ujti\" wan kimati '''[[$1|yek]]''' ne '''[[$2|Nawataketzalis]]'''.", ["ppl-3"] = "Ini usuarioj nemi tik ne \"ujtamilis\" wan kimati '''[[$1|sujsul yek]]''' ne '''[[$2|Nawataketzalis]]'''.", ["ppl-4"] = "Ini usuarioj nemi tik ne \"weytamachtilis\" wan kimati '''[[$1|sea yek]]''' ne '''[[$2|Nawataketzalis]]'''.", -------------------------- pra -------------------------- ["pra-1"] = "{एसो सब्भो/एसा सब्भा} '''[[$1|सरले]] [[$2|पाइअभासे]]''' सहज्जं काउं सक्केइ ।", ["pra-2"] = "{एसो सब्भो/एसा सब्भा} '''[[$1|मज्झमे]] [[$2|पाइअभासे]]''' सहज्जं काउं सक्केइ ।", ["pra-3"] = "{एसो सब्भो/एसा सब्भा} '''[[$1|उण्णये]] [[$2|पाइअभासे]]''' सहज्जं काउं सक्क ेइ ।", -------------------------- prg -------------------------- ["prg-0"] = "Šis terpautajs '''ni izpresta [[$2|prūsiskan]]''' (anga turri sen stan debīkans prōblamans).", ["prg-1"] = "Šis terpautajs zinna '''[[$2|prūsiskan]]''' na '''[[$1|gruntiskan]]''' līgmenin.", ["prg-2"] = "Šis terpautajs zinna '''[[$2|prūsiskan]]''' na '''[[$1|sirdan]]''' līgmenin.", ["prg-3"] = "Šis terpautajs zinna '''[[$2|prūsiskan]]''' na '''[[$1|ēmpirsin treppusin]]''' līgmenin.", ["prg-4"] = "Šis terpautajs zinna '''[[$2|prūsiskan]]''' ēst stawīdiskai, kāigi '''[[$1|gīmtan]]'''.", ["prg-N"] = "'''[[$2|Prūsiskan]]''' ast '''[[$1|gimta]]''' bilā šisse terpautajas.", -------------------------- prs -------------------------- ["prs-0"] = "این کاربر '''هیچ''' دانشی از زبان '''[[$2|دری]]''' ندارد (یا به سختی می‌فهمد).", ["prs-1"] = "این کاربر دانش '''[[$1|ابتدایی]]''' از زبان '''[[$2|دری]]''' دارد.", ["prs-2"] = "این کاربر دانش '''[[$1|میانی]]''' از زبان '''[[$2|دری]]''' دارد.", ["prs-3"] = "این کاربر دانش '''[[$1|پیشرفته]]''' از زبان '''[[$2|دری]]''' دارد.", ["prs-4"] = "این کاربر دانش '''[[$1|نزدیک به زبان مادری]]''' از '''[[$2|دری]]''' دارد.", ["prs-5"] = "این کاربر دانش '''[[$1|حرفه‌ای]]''' از زبان '''[[$2|دری]]''' دارد.", ["prs-N"] = "این کاربر فهم '''[[$1|مادری]]''' از زبان '''[[$2|دری]]''' دارد.", -------------------------- ps -------------------------- ["ps-0"] = "دا کارن په '''[[$2|پښتو]]''' ژبه '''هېڅ نه''' پوهېږي (او يا هم په ډېرې سختۍ سره ډېر لږ پرې پوهېږي).", ["ps-1"] = "دا کارن تر '''[[$1|بنسټيزې کچې]]''' په '''[[$2|پښتو]]''' ژبې پوهېږي.", ["ps-2"] = "دا کارن تر '''[[$1|منځوۍ کچې]]''' په '''[[$2|پښتو]]''' ژبې پوهېږي.", ["ps-3"] = "دا کارن تر '''[[$1|پرمختللې کچې]]''' په '''[[$2|پښتو]]''' ژبې پوهېږي.", ["ps-4"] = "دا کارن تر '''[[$1|مورنۍ کچې]]''' په '''[[$2|پښتو]]''' ژبې پوهېږي.", ["ps-5"] = "دا کارن تر '''[[$1|کارپوهنيزې کچې]]''' په '''[[$2|پښتو]]''' ژبې پوهېږي.", ["ps-N"] = "د دې کارن '''[[$1|مورنۍ]]''' ژبه '''[[$2|پښتو]]''' ده.", -------------------------- pt -------------------------- ["pt-0"] = "{Este utilizador/Esta utilizadora} '''não compreende [[$2|português]]''' (ou compreende com dificuldades consideráveis).", ["pt-1"] = "{Este utilizador/Esta utilizadora} tem um nível '''[[$1|básico]]''' de '''[[$2|português]]'''.", ["pt-2"] = "{Este utilizador/Esta utilizadora} tem um nível '''[[$1|médio]]''' de '''[[$2|português]]'''.", ["pt-3"] = "{Este utilizador/Esta utilizadora} tem um nível '''[[$1|avançado]]''' de '''[[$2|português]]'''.", ["pt-4"] = "{Este utilizador/Esta utilizadora} tem um nível '''[[$1|quase nativo]]''' de '''[[$2|português]]'''.", ["pt-5"] = "{Este utilizador/Esta utilizadora} tem um nível '''[[$1|profissional]]''' de '''[[$2|português]]'''.", ["pt-N"] = "{Este utilizador/Esta utilizadora} tem como língua '''[[$1|materna]]''' o '''[[$2|português]]'''.", -------------------------- pt-BR -------------------------- ["pt-BR-0"] = "{Este usuário/Esta usuária} '''não compreende [[$2|português]]''' (ou compreende com dificuldades consideráveis).", ["pt-BR-1"] = "{Este usuário/Esta usuária} pode contribuir com um nível '''[[$1|básico]]''' de '''[[$2|português brasileiro]]'''.", ["pt-BR-2"] = "{Este usuário/Esta usuária} pode contribuir com um nível '''[[$1|médio]]''' de '''[[$2|português brasileiro]]'''.", ["pt-BR-3"] = "{Este usuário/Esta usuária} pode contribuir com um nível '''[[$1|avançado]]''' de '''[[$2|português brasileiro]]'''.", ["pt-BR-4"] = "{Este usuário/Esta usuária} pode contribuir com um nível '''[[$1|quase nativo]]''' de '''[[$2|português brasileiro]]'''.", ["pt-BR-5"] = "{Este usuário/Esta usuária} pode contribuir com um nível '''[[$1|profissional]]''' de '''[[$2|português brasileiro]]'''.", ["pt-BR-N"] = "{Este usuário/Esta usuária} tem como língua '''[[$1|materna]]''' o '''[[$2|português brasileiro]]'''.", -------------------------- pt-PT -------------------------- ["pt-PT-0"] = "{Este utilizador/Esta utilizadora} '''não compreende [[$2|português]]''' (ou compreende com dificuldades consideráveis).", ["pt-PT-1"] = "{Este utilizador/Esta utilizadora} pode contribuir com um nível '''[[$1|básico]]''' de '''[[$2|português europeu]]'''.", ["pt-PT-2"] = "{Este utilizador/Esta utilizadora} pode contribuir com um nível '''[[$1|médio]]''' de '''[[$2|português europeu]]'''.", ["pt-PT-3"] = "{Este utilizador/Esta utilizadora} pode contribuir com um nível '''[[$1|avançado]]''' de '''[[$2|português europeu]]'''.", ["pt-PT-4"] = "{Este utilizador/Esta utilizadora} pode contribuir com um nível '''[[$1|quase nativo]]''' de '''[[$2|português europeu]]'''.", ["pt-PT-5"] = "{Este utilizador/Esta utilizadora} pode contribuir com um nível '''[[$1|profissional]]''' de '''[[$2|português europeu]]'''.", ["pt-PT-N"] = "{Este utilizador/Esta utilizadora} tem como língua '''[[$1|materna]]''' o '''[[$2|português europeu]]'''.", -------------------------- pwn -------------------------- ["pwn-0"] = "'''inika''' kemeljang aicu a caucau ta '''[[$2|pinayuanan]]'''.", ["pwn-1"] = "macaqu a '''[[$1|pagalju]]''' tua '''[[$2|pinayuanan]]''' aicu a caucau.", ["pwn-2"] = "'''[[$1|kemeljang]]''' aicu a caucau tua '''[[$2|pinayuanan]]'''.", ["pwn-3"] = "'''[[$1|macaqu]]''' aicu a caucau tua '''[[$2|pinayuanan]]'''.", ["pwn-4"] = "'''[[$2|pinayuanan]]''' naicu a caucau '''[[$1|namaya tua kinakaian]]''' nimadju.", ["pwn-5"] = "'''[[$2|pinayuanan]]''' a '''[[$1|kinacaqu]]''' naicu a caucau.", ["pwn-N"] = "'''[[$2|pinayuanan]]''' a '''[[$1|kinakaian]]''' naicu a caucau.", } lg7j4qnuv383z1t876ktcc8opbxv35w はずかしめる 0 420627 2571657 2026-10-18T14:49:01Z WhoAlone 40420 Trang mới: “=={{langname|ja}}== {{ja-see|辱める}}” 2571657 wikitext text/x-wiki =={{langname|ja}}== {{ja-see|辱める}} 3h22udg5ocbu75xfr3vu5ivhkuwqetl hazukashimeru 0 420628 2571658 2026-10-18T14:49:18Z WhoAlone 40420 Trang mới: “=={{langname|ja}}== ==={{ĐM|rom}}=== {{ja-romaji}} # {{ja-romanization of|はずかしめる}}” 2571658 wikitext text/x-wiki =={{langname|ja}}== ==={{ĐM|rom}}=== {{ja-romaji}} # {{ja-romanization of|はずかしめる}} 8svkk5i3wrsmmwnoy5cp2duh9vnwea4 恥ずかしめる 0 420629 2571659 2026-10-18T14:49:42Z WhoAlone 40420 Trang mới: “=={{langname|ja}}== {{ja-see|辱める}}” 2571659 wikitext text/x-wiki =={{langname|ja}}== {{ja-see|辱める}} 3h22udg5ocbu75xfr3vu5ivhkuwqetl はづかしめる 0 420630 2571660 2026-10-18T14:49:57Z WhoAlone 40420 Trang mới: “=={{langname|ja}}== {{ja-see|辱める}}” 2571660 wikitext text/x-wiki =={{langname|ja}}== {{ja-see|辱める}} 3h22udg5ocbu75xfr3vu5ivhkuwqetl Thể loại:tef:Hình học 14 420631 2571664 2026-10-18T14:53:45Z WhoAlone 40420 Trang mới: “{{auto cat}}” 2571664 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Thể loại:tef:Toán học 14 420632 2571665 2026-10-18T14:54:12Z WhoAlone 40420 Trang mới: “{{auto cat}}” 2571665 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Thể loại:tef:Khoa học hình thức 14 420633 2571666 2026-10-18T14:55:14Z WhoAlone 40420 Trang mới: “{{auto cat}}” 2571666 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Thể loại:tef:Âm thanh 14 420634 2571671 2026-10-18T14:57:20Z WhoAlone 40420 Trang mới: “{{auto cat}}” 2571671 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Thể loại:tef:Hoa 14 420635 2571672 2026-10-18T14:57:25Z WhoAlone 40420 Trang mới: “{{auto cat}}” 2571672 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Thể loại:tef:Bạo lực 14 420636 2571675 2026-10-18T14:58:01Z WhoAlone 40420 Trang mới: “{{auto cat}}” 2571675 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Thể loại:tef:Hiện tượng khí quyển 14 420637 2571680 2026-10-18T14:58:41Z WhoAlone 40420 Trang mới: “{{auto cat}}” 2571680 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx ɨ̂ 0 420638 2571682 2026-10-18T14:59:08Z Lcsnes 40261 Trang mới: “{{minitoc}} {{-Latn-}} ==={{ĐM|desction}}=== {{mul-letter}} #[[chữ cái|Chữ cái]] '''[[i]] viết thường''' với nét sổ ngang giữa chữ ([[barred]]) và dấu nón ◌̂ ([[circumflex]]). ==={{ĐM|see}}=== {{Latn-script}} =={{langname|agq}}== ==={{ĐM|letter}}=== {{letter|agq}} #Chữ cái '''{{l|agq|ɨ}} viết thường''' với dấu thanh giáng ([[◌̂ ]]). ==={{ĐM|see}}=== *{{letters|lang=agq|sc=Latn|qual=Bảng chữ cái Latinh tiếng Aghem|Aa|…” 2571682 wikitext text/x-wiki {{minitoc}} {{-Latn-}} ==={{ĐM|desction}}=== {{mul-letter}} #[[chữ cái|Chữ cái]] '''[[i]] viết thường''' với nét sổ ngang giữa chữ ([[barred]]) và dấu nón ◌̂ ([[circumflex]]). ==={{ĐM|see}}=== {{Latn-script}} =={{langname|agq}}== ==={{ĐM|letter}}=== {{letter|agq}} #Chữ cái '''{{l|agq|ɨ}} viết thường''' với dấu thanh giáng ([[◌̂ ]]). ==={{ĐM|see}}=== *{{letters|lang=agq|sc=Latn|qual=Bảng chữ cái Latinh tiếng Aghem|Aa|(Àà)|(Āā)|(Ââ)|(Ǎǎ)|Bb|Bv/bv|Ch/ch|Dd|Dz/dz|Ee|(Èè)|(Ēē)|(Êê)|(Ěě)|Ɛɛ|(Ɛ̀/ɛ̀)|(Ɛ̄/ɛ̄)|(Ɛ̂/ɛ̂)|(Ɛ̌/ɛ̌)|Ff|Gg|Gb/gb|Gh/gh|Hh|Ii|(Ìì)|(Īī)|(Îî)|(Ǐǐ)|Ɨɨ|(Ɨ̀/ɨ̀)|(Ɨ̄/ɨ̄)|(Ɨ̂/ɨ̂)|(Ɨ̌/ɨ̌)|Kk|Kp/kp|ʼ|Ll|Mm|(M̀/m̀)|Nn|(Ǹ/ǹ)|Ŋŋ|Oo|(Òò)|(Ōō)|(Ôô)|(Ǒǒ)|Ɔɔ|(Ɔ̀/ɔ̀)|(Ɔ̄/ɔ̄)|(Ɔ̂/ɔ̂)|(Ɔ̌/ɔ̌)|Pp|Pf/pf|Ss|Sh/sh|Tt|Ts/ts|Uu|(Ùù)|(Ūū)|(Ûû)|(Ǔǔ)|Uw/uw|Ʉʉ|(Ʉ̀/ʉ̀)|(Ʉ̄/ʉ̄)|(Ʉ̂/ʉ̂)|(Ʉ̌/ʉ̌)|Vv|Ww|Yy|Zz}} ==={{ĐM|ref}}=== *{{Chú thích web|agq|work=To kə Kəzə̀ kə̀ Fughu ko|author=Cameroon Association for Bible Translation and Literacy|year=2024|entryurl=https://www.bible.com/bible/2620/1TH.2.AGQ|entry=1 Tɛ̀sàlonìan 2}} =={{langname|azo}}== ==={{ĐM|letter}}=== {{letter|azo}} #Chữ '''{{l|azo|ɨ}} viết thường''' với dấu thanh giáng ([[◌̂ ]]). ==={{ĐM|see}}=== *{{letters|lang=azo|sc=Latn|qual=Bảng chữ cái Latinh tiếng Awing|Aa|(Áá)|(Ǎǎ)|(Ââ)|Bb|Ch/ch|Dd|Ee|(Éé)|(Ěě)|(Êê)|Ɛɛ|(Ɛ́/ɛ́)|(Ɛ̌/ɛ̌)|(Ɛ̂/ɛ̂)|Əǝ|(Ə́/ə́)|(Ə̌/ə̌)|(Ə̂/ə̂)|Ff|Gg|Gh/gh|Hh|Ii|(Íí)|(Ǐǐ)|(Îî)|Ɨɨ|(Ɨ́/ɨ́)|(Ɨ̌/ɨ̌)|(Ɨ̂/ɨ̂)|Jj|Kk|’|Ll|Mm|Nn|Ny/ny|Ŋŋ|Oo|(Óó)|(Ǒǒ)|(Ôô)|Ɔɔ|(Ɔ́/ɔ́)|(Ɔ̌/ɔ̌)|(Ɔ̂/ɔ̂)|Pp|Ss|Sh/sh|Tt|Ts/ts|Uu|(Úú)|(Ǔǔ)|(Ûû)|Ww|Yy|Zz}} ==={{ĐM|ref}}=== *{{Chú thích sách|author=Christian Alomofor & Stephen C. Anderson|year=2005|title=[https://www.sil.org/system/files/reapdata/33/83/42/33834255287962977958743868519142841172/AwingOrthography2005.pdf Awing orthography guide]|publisher=SIL Cameroon|location=Cameroon}} *{{Chú thích web|azo|work=TƏka yi Fîə|author=Cameroon Association for Bible Translation and Literacy|year=2024|entryurl=https://www.bible.com/bible/3005/MAT.3.AZO|entry=Matyo 3}} =={{langname|liy}}== ==={{ĐM|letter}}=== {{letter|liy}} #Chữ '''{{l|liy|ɨ}} viết thường''' với dấu thanh cao ([[◌̂ ]]). ==={{ĐM|see}}=== *{{letters|lang=liy|sc=Latn|qual=Bảng chữ cái Latinh tiếng Banda-Bambari|Aa|Bb|Dd|Dj/dj|Ee|Əə|Ff|Gg|Gb/gb|Hh|Ii|Ɨɨ|Jj|Kk|Kp/kp|Ll|Mm|Nn|Ny/ny|Oo|Ɔɔ|Pp|Rr|Ss|Sh/sh|Tt|Tsh/tsh|Uu|Ʉʉ|Vv|Ww|Wl/wl|Yy|Zz|'}} ==={{ĐM|ref}}=== *{{Chú thích web|liy|work=Banda-Linda NT|author=The Seed Company|year=2025|entryurl=https://www.bible.com/bible/4561/MAT.1.LIY|entry=Matiɔ 1}} =={{langname|bgj}}== ==={{ĐM|letter}}=== {{letter|bgj}} #Chữ '''{{l|bgj|ɨ}} viết thường''' với dấu thanh giáng cao ([[◌̂ ]]). ==={{ĐM|see}}=== *{{letters|lang=bgj|sc=Latn|qual=Bảng chữ cái Latinh tiếng Bangolan|Aa|(Áá)|(Ââ)|(Ǎǎ)|Bb|Ch/ch|Dd|Ee|(Éé)|(Êê)|(Ěě)|Ɛɛ|(Ɛ́/ɛ́)|(Ɛ̂/ɛ̂)|(Ɛ̌/ɛ̌)|Əə|(Ə́/ə́)|(Ə̂/ə̂)|(Ə̌/ə̌)|Ff|Gg|Gb/gb|Hh|Ii|(Íí)|(Îî)|(Ǐǐ)|Ɨɨ|(Ɨ́/ɨ́)|(Ɨ̂/ɨ̂)|(Ɨ̌/ɨ̌)|Jj|Kk|Kp/kp|Ll|Mm|Nn|Ŋŋ|Oo|(Óó)|(Ôô)|(Ǒǒ)|Ɔɔ|(Ɔ́/ɔ́)|(Ɔ̂/ɔ̂)|(Ɔ̌/ɔ̌)|Pp|Ss|Sh/sh|Tt|Ts/ts|Uu|(Úú)|(Ûû)|(Ǔǔ)|Vv|Ww|Yy|Zz|ʼ}} ==={{ĐM|ref}}=== *{{Chú thích sách|en|author=Mathaus Njeck|title=[https://www.sil.org/system/files/reapdata/13/00/60/130060160739887579529135215520124239222/BangolanOrthographyJuly2004paginated.pdf Bangolan orthography statement]|year=1994|publisher=The National Association of Cameroonian language Committees (NACALCO)|location=Yaoundé, Cameroon}} =={{langname|bmv}}== ==={{ĐM|letter}}=== {{letter|bmv}} #Chữ '''{{l|bmv|ɨ}} viết thường''' với dấu thanh giáng cao-thấp ([[◌̂ ]]). #:{{quote|bmv|Wùna mò Wâ mù wù kòŋ, mu saŋle kum wûn han'''ɨ̂'''ŋ.|Nầy là Con yêu-dấu của ta, đẹp lòng ta mọi đàng. ([[s:Ma-thi-ơ/3#3:17|Ma-thi-ơ 3:17]])}} ==={{ĐM|ref}}=== *{{Chú thích web|bmv|work=Ŋwàklù Fùyèn Kàn Mù Fê (Cameron)|author=Wycliffe Bible Translators, Inc.|year=2026|entryurl=https://www.bible.com/bible/2175/MAT.3.BMV|entry=Matiyò 3}} =={{langname|fvr}}== ==={{ĐM|letter}}=== {{letter|fvr}} #Chữ '''{{l|fvr|ɨ}} viết thường''' với dấu thanh giáng ([[◌̂ ]]). ==={{ĐM|see}}=== *{{letters|lang=fvr|sc=Latn|qual=Bảng chữ cái Latinh tiếng Fur|Aa|(Áá)|(Ââ)|(Ǎǎ)|A̱/a̱|(Á̱/á̱)|(Â̱/â̱)|(Ǎ̱/ǎ̱)|Bb|Dd|Ee|(Éé)|(Êê)|(Ěě)|Ff|Gg|Hh|Ii|(Íí)|(Îî)|Ɨɨ|(Ɨ́/ɨ́)|(Ɨ̂/ɨ̂)|(Ɨ̌/ɨ̌)|Jj|Kk|Ll|Mm|Nn|Ŋŋ|Ny/ny|Oo|(Óó)|(Ôô)|(Ǒǒ)|Pp|Rr|Ss|Tt|Uu|(Úú)|(Ûû)|(Ǔǔ)|Ʉʉ|(Ʉ́/ʉ́)|(Ʉ̂/ʉ̂)|(Ʉ̌/ʉ̌)|Ww|Yy|Zz}} =={{langname|ozm}}== ==={{ĐM|letter}}=== {{letter|ozm}} #Chữ '''{{l|ozm|ɨ}} viết thường''' với dấu thanh giáng ([[◌̂ ]]). #:{{ux|ozm|án'''ɨ̂'''n'''ɨ̂'''n|sự [[to lớn]]|inline=1}} ===={{ĐM|see}}==== *{{letters|lang=ozm|sc=Latn|qual=Bảng chữ cái Latinh tiếng Koonzime|Aa|(Áá)|(Ââ)|(Ǎǎ)|Bb|Ch/ch|Dd|Ee|(Éé)|(Êê)|(Ěě)|Ff|Gg|Gh/gh|Ii|(Íí)|(Îî)|(Ǐǐ)|Ɨɨ|Jj|Kk|ʼ|Ll|Mm|Nn|Ŋŋ|Oo|(Óó)|(Ôô)|(Ǒǒ)|Œœ|(Œ́/œ́)|(Œ̂/œ̂)|(Œ̌/œ̌)|Øø|(Ǿ/ǿ)|(Ø̂/ø̂)|(Ø̌/ø̌)|Ɔɔ|(Ɔ́/ɔ́)|(Ɔ̂/ɔ̂)|(Ɔ̌/ɔ̌)|Pp|Rr|Ss|Tt|Uu|(Úú)|(Ûû)|(Ǔǔ)|Ʉʉ|(Ʉ́/ʉ́)|(Ʉ̂/ʉ̂)|(Ʉ̌/ʉ̌)|Vv|Ww|Yy|Zz}} *{{letters|lang=ozm|sc=Latn|qual=Bảng chữ cái Latinh phương ngữ Badwe'e|Aa|(Áá)|(Ââ)|(Ǎǎ)|Bb|Cc|Dd|Ee|(Éé)|(Êê)|(Ěě)|Ɛɛ|(Ɛ́/ɛ́)|(Ɛ̂/ɛ̂)|(Ɛ̌/ɛ̌)|Ff|Gg|Hh|Ii|(Íí)|(Îî)|(Ǐǐ)|Ɨɨ|(Ɨ́/ɨ́)|(Ɨ̂/ɨ̂)|(Ɨ̌/ɨ̌)|Jj|Kk|ʼ|Ll|Mm|Nn|Ŋŋ|Oo|(Óó)|(Ôô)|(Ǒǒ)|Œœ|(Œ́/œ́)|(Œ̂/œ̂)|(Œ̌/œ̌)|Ɔɔ|(Ɔ́/ɔ́)|(Ɔ̂/ɔ̂)|(Ɔ̌/ɔ̌)|Pp|Rr|Ss|Tt|Uu|(Úú)|(Ûû)|(Ǔǔ)|Ʉʉ|(Ʉ́/ʉ́)|(Ʉ̂/ʉ̂)|(Ʉ̌/ʉ̌)|Vv|Ww|Yy|Zz}} ==={{ĐM|ref}}=== *{{Chú thích sách|author=Keith et Mary BEAVON|year=1996|title=[https://www.sil.org/system/files/reapdata/59/30/31/59303154511464185976905859246531766148/KoonzimeLexique.pdf Lexique Koonzime - Français]|publisher=SIL|location=Yaoundé, Cameroon|page=8}} *{{Chú thích web|ozm|work=Kálar Nzyɛ̌m : Ejwán é Sáá|author=Cameroon Association for Bible Translation and Literacy|year=2024|entryurl=https://www.bible.com/bible/2387/MAT.1.OZM|entry=Matthieu 1}} =={{langname|knp}}== ==={{ĐM|letter}}=== {{letter|knp}} #Chữ '''{{l|knp|ɨ}} viết thường''' với dấu thanh giáng ([[◌̂ ]]). #:{{quote|knp|sé wo gwàh kfwír síì ti, kə wo kfwâgh ngà wo bá: nìní lé mɨ̀ kǔm ŋjáŋ ŋdǔng wù mánî, háa wù dôo mɨ́ mànií, mɨ́ wùàr k'''ɨ̂'''ɨn?|Ru-tơ bèn sấp mình xuống dưới chơn người, cúi đầu đến đất, mà thưa rằng: Vì duyên-cớ nào tôi được ơn trước mặt ông, đến đỗi ông đoái-xem tôi, vốn là một người ngoại-bang? ([[s:Ru-tơ/2#2:10|Ru-tơ 2:10]])}}󠌋󠌋󠌋 ==={{ĐM|see}}=== *{{letters|lang=knp|sc=Latn|qual=Bảng chữ cái Latinh tiếng Kwanja|Aa|(A̋/a̋)|(Áá)|(Àà)|(Ȁȁ)|(Ǎǎ)|(Ââ)|Bb|Cc|Dd|Ee|(E̋/e̋)|(Éé)|(Èè)|(Ȅȅ)|(Ěě)|(Êê)|Ɛɛ|(Ɛ̋/ɛ̋)|(Ɛ́/ɛ́)|(Ɛ̀/ɛ̀)|(Ɛ̏/ɛ̏)|(Ɛ̌/ɛ̌)|(Ɛ̂/ɛ̂)|Əə|(Ə̋/ə̋)|(Ə́/ə́)|(Ə̀/ə̀)|(Ə̏/ə̏)|(Ə̌/ə̌)|(Ə̂/ə̂)|Ff|Gg|Gb/gb|Hh|Ii|(I̋/i̋)|(Íí)|(Ìì)|(Ȉȉ)|(Ǐǐ)|(Îî)|Ɨɨ|(Ɨ̋/ɨ̋)|(Ɨ́/ɨ́)|(Ɨ̀/ɨ̀)|(Ɨ̏/ɨ̏)|(Ɨ̌/ɨ̌)|(Ɨ̂/ɨ̂)|Jj|Kk|Kp/kp|Ll|Mm|Nn|Ny/ny|Ŋŋ|Oo|(Őő)|(Óó)|(Òò)|(Ȍȍ)|(Ǒǒ)|(Ôô)|Ɔɔ|(Ɔ̋/ɔ̋)|(Ɔ́/ɔ́)|(Ɔ̀/ɔ̀)|(Ɔ̏/ɔ̏)|(Ɔ̌/ɔ̌)|(Ɔ̂/ɔ̂)|Pp|Rr|Ss|Tt|Uu|(Űű)|(Úú)|(Ùù)|(Ȕȕ)|(Ǔǔ)|(Ûû)|Ʉʉ|(Ʉ̋/ʉ̋)|(Ʉ́/ʉ́)|(Ʉ̀/ʉ̀)|(Ʉ̏/ʉ̏)|(Ʉ̌/ʉ̌)|(Ʉ̂/ʉ̂)|Vv|Ww|Yy}} ==={{ĐM|ref}}=== *{{Chú thích sách|fr|author=Joan & Martin Weber|year=2008|title=[https://www.sil.org/system/files/reapdata/10/85/21/108521937454046977451763994759809460134/KwanjaOrthographyGuide2008_u.pdf Précis d'orthographe pour la langue kwanja (dialecte súndànɨ́)]|publisher=Eglise Evangélique Luthérienne du Cameroun, Association Nationale des Comités de Langues Camerounaises (ANACLAC)|location=Cameroun}} *{{Chú thích web|knp|author=Wycliffe Associates|work=Ndung Regular Bible|publisher=Bible in Every Language|year=2022|entryurl=https://bibleineverylanguage.org/resources/languages/knp-x-ndung?resource-type=Ndung%20reg&book=RUT&chapter=2|entry=Derwa rúìt 2}} =={{langname|mas}}== ==={{ĐM|letter}}=== {{letter|mas}} #Chữ '''{{l|mas|ɨ}} viết thường''' với dấu thanh giáng ([[◌̂ ]]). #:{{ux|mas|mádâ'''ɨ̂'''|sự [[ngu ngốc]]|inline=1}} ==={{ĐM|see}}=== *{{letters|lang=mas|sc=Latn|qual=Bảng chữ cái Latinh tiếng Maasai|Aa|(Áá)|(Àà)|(Ââ)|Bb|Cc|Dd|Ee|(Éé)|(Èè)|(Êê)|Ɛɛ|(Ɛ́/ɛ́)|(Ɛ̀/ɛ̀)|(Ɛ̂/ɛ̂)|Gg|Hh|Ii|(Íí)|(Ìì)|(Îî)|Ɨɨ|(Ɨ́/ɨ́)|(Ɨ̀/ɨ̀)|(Ɨ̂/ɨ̂)|Jj|Kk|Ll|Mm|Nn|Ny/ny|Ŋŋ|Oo|(Óó)|(Òò)|(Ôô)|Ɔɔ|(Ɔ́/ɔ́)|(Ɔ̀/ɔ̀)|(Ɔ̂/ɔ̂)|Pp|Rr|Rr/rr|Ss|Sh/sh|Tt|Uu|(Úú)|(Ùù)|(Ûû)|Ʉʉ|(Ʉ́/ʉ́)|(Ʉ̀/ʉ̀)|(Ʉ̂/ʉ̂)|Ww|Wu/wu|Yy|Yi/yi|'}} ==={{ĐM|ref}}=== *{{Chú thích web|author=Leonard Ole-Kotikash & Doris L. Payne|work=Maa dictionary|entry=Ɨ - ɨ|year=2008|url=https://pages.uoregon.edu/maasai/Maa%20Lexicon/lexicon/main.htm}} =={{langname|nzk}}== ==={{ĐM|letter}}=== {{letter|nzk}} #Chữ '''{{l|nzk|ɨ}} viết thường''' với dấu thanh cao ([[◌̂ ]]). #:{{quote|nzk|Êne gä, ânɨ wɨ̈lɨ̈g'''ɨ̂''' gëge mbɨ̈tɨ̈ näa gbägba mbɨ̈tɨ̈ ngbä të nzakala|Nào, chúng ta cùng học đọc và viết tiếng Nzakara nhé}} ==={{ĐM|see}}=== *{{letters|lang=nzk|sc=Latn|qual=Bảng chữ cái Latinh tiếng Nzakara|a|b|d|e|f|g|gb|i|ɨ|k|kp|l|m|mb|mv|n|nd|ng|ngb|ny|nz|o|p|s|t|u|ʉ|v|w|y|z}} ==={{ĐM|ref}}=== *{{Chú thích sách|fr|author=Primael-Elie Naguili|editor=François Saboundou|year=2017|title=Êne gä, ânɨ wɨ̈lɨ̈gɨ̂ gëge mbɨ̈tɨ̈ näa gbägba mbɨ̈tɨ̈ ngbä të nzakala|publisher=ACATBA et SIL International|location=Bangui, RCA}} =={{langname|pny}}== ==={{ĐM|letter}}=== {{letter|pny}} #Chữ '''{{l|pny|ɨ}} viết thường''' với dấu thanh giáng ([[◌̂ ]]). #:{{quote|pny|Wə̀ ghə̀ ambo mbyàŋnə̀ yɨ̀k'''ɨ̂''', wə̀ tiitə̀ a ghobə lo pobə kɨ mbə nɨ àzhìʼtə̀.|Cũng phải khuyên những người tuổi trẻ ở cho có tiết-độ. ([[s:Tít/2#2:6|Tít 2:6]])}} ==={{ĐM|see}}=== *{{letters|lang=pny|sc=Latn|qual=Bảng chữ cái Latinh tiếng Pinyin|Aa|Bb|Ch/ch|Dd|Ee|Əə|Ff|Gg|Gh/gh|Ii|Ɨɨ|Jj|Kk|Ll|Mm|Nn|Ŋy/ŋy|Ŋŋ|Oo|Pp|Rr|Ss|Sh/sh|Tt|Ts/ts|Uu|Ʉʉ|Ww|Ẅẅ|Yy|Zz|Zh/zh|ʼ}} ==={{ĐM|ref}}=== *{{Chú thích sách|en|url=https://www.sil.org/system/files/reapdata/11/63/68/116368153881838354190738753164484733004/PinyinOrthographyRevised2005.pdf|author=Anderson, Stephen C., Njeck, Mathaus|year=2005|title=The Pinyin orthography guide|publisher=Cameroon Association for Bible Translation (CABTAL)|location=Yaounde, Cameroon}} *{{Chú thích web|pny|work=Pinyin|author=Cameroon Association for Bible Translation and Literacy|year=2017|entryurl=https://www.bible.com/bible/2159/TIT.2.PNY|entry=Titus 2}} docur2t8cim4xmymnbhq1fvj0o9n0qn Thể loại:tef:Mùa 14 420639 2571684 2026-10-18T14:59:26Z WhoAlone 40420 Trang mới: “{{auto cat}}” 2571684 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Thể loại:tef:Săn bắn 14 420640 2571685 2026-10-18T14:59:29Z WhoAlone 40420 Trang mới: “{{auto cat}}” 2571685 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Thể loại:tef:Sự kiện theo chu kỳ 14 420641 2571686 2026-10-18T14:59:35Z WhoAlone 40420 Trang mới: “{{auto cat}}” 2571686 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Thể loại:tef:Khí quyển 14 420642 2571687 2026-10-18T14:59:46Z WhoAlone 40420 Trang mới: “{{auto cat}}” 2571687 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Thể loại:tef:Trồng trọt 14 420643 2571692 2026-10-18T15:01:00Z WhoAlone 40420 Trang mới: “{{auto cat}}” 2571692 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Thể loại:tef:Thực vật học 14 420644 2571693 2026-10-18T15:01:14Z WhoAlone 40420 Trang mới: “{{auto cat}}” 2571693 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Thể loại:tef:Nông nghiệp 14 420645 2571694 2026-10-18T15:01:16Z WhoAlone 40420 Trang mới: “{{auto cat}}” 2571694 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Thể loại:tef:Trang phục 14 420646 2571695 2026-10-18T15:02:08Z WhoAlone 40420 Trang mới: “{{auto cat}}” 2571695 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Thể loại:ncb:Nước 14 420647 2571700 2026-10-18T15:04:50Z WhoAlone 40420 Trang mới: “{{auto cat}}” 2571700 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Thể loại:ncb:Chất lỏng 14 420648 2571701 2026-10-18T15:05:49Z WhoAlone 40420 Trang mới: “{{auto cat}}” 2571701 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Thể loại:ncb:Danh sách chủ đề thuộc nhóm tập hợp 14 420649 2571704 2026-10-18T15:06:46Z WhoAlone 40420 Trang mới: “{{auto cat}}” 2571704 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Thể loại:ncb:Vật chất 14 420650 2571705 2026-10-18T15:06:48Z WhoAlone 40420 Trang mới: “{{auto cat}}” 2571705 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Thể loại:ncb:Tự nhiên 14 420651 2571707 2026-10-18T15:07:35Z WhoAlone 40420 Trang mới: “{{auto cat}}” 2571707 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Thể loại:ncb:Hóa học 14 420652 2571708 2026-10-18T15:07:37Z WhoAlone 40420 Trang mới: “{{auto cat}}” 2571708 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Thể loại:ncb:Khoa học 14 420653 2571709 2026-10-18T15:08:38Z WhoAlone 40420 Trang mới: “{{auto cat}}” 2571709 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Thể loại:tef:Vũ khí 14 420654 2571713 2026-10-18T15:10:34Z WhoAlone 40420 Trang mới: “{{auto cat}}” 2571713 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Thể loại:tef:Quân sự 14 420655 2571714 2026-10-18T15:10:51Z WhoAlone 40420 Trang mới: “{{auto cat}}” 2571714 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Thể loại:Nhóm ngôn ngữ Ubangi 14 420656 2571718 2026-10-18T15:35:57Z Hiyuune 50834 Trang mới: “{{auto cat}}” 2571718 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Thể loại:Tiếng Ubangi nguyên thủy 14 420657 2571719 2026-10-18T15:36:40Z Hiyuune 50834 Trang mới: “{{auto cat}}” 2571719 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Thể loại:Nhóm ngôn ngữ Banda 14 420658 2571722 2026-10-18T15:38:41Z Hiyuune 50834 Trang mới: “{{auto cat}}” 2571722 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Thể loại:Mục từ theo ngữ hệ 14 420659 2571725 2026-10-18T15:42:11Z Hiyuune 50834 Hiyuune đã đổi [[Thể loại:Mục từ theo ngữ hệ]] thành [[Thể loại:Tất cả ngữ hệ]] 2571725 wikitext text/x-wiki {{Đổi hướng thể loại|Thể loại:Tất cả ngữ hệ}} 2kl319dh74y6vo5dbvoseqmkx27jsg1 Thể loại:Tiếng Iwaidja nguyên thủy 14 420660 2571728 2026-10-18T15:47:14Z Hiyuune 50834 Trang mới: “{{auto cat}}” 2571728 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Bản mẫu:list:ngày trong tuần/pl 10 420661 2571740 2026-10-18T16:42:30Z Hiyuune 50834 Trang mới: “{{#invoke:topic list|show |hypernym=[[dzień|dni]] [[tydzień|tygodnia]] |poniedziałek |wtorek |środa |czwartek |piątek |sobota |niedziela }}<noinclude>{{list doc}}</noinclude>” 2571740 wikitext text/x-wiki {{#invoke:topic list|show |hypernym=[[dzień|dni]] [[tydzień|tygodnia]] |poniedziałek |wtorek |środa |czwartek |piątek |sobota |niedziela }}<noinclude>{{list doc}}</noinclude> na8eisbo39n00o8quyiw0fnzviu0w66 Thể loại:Nhóm ngôn ngữ Malayalam 14 420662 2571758 2026-10-18T16:53:12Z Hiyuune 50834 Trang mới: “{{auto cat}}” 2571758 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx ὠκεῖα 0 420663 2571762 2026-10-19T02:53:55Z Hiyuune 50834 + grc 2571762 wikitext text/x-wiki =={{langname|grc}}== ==={{section|pron}}=== {{grc-IPA|ὠκεῖᾰ}} ==={{section|adj}}=== {{grc-adjective form|ὠκεῖᾰ}} # {{lb|grc|att}} {{infl of|grc|ὠκῠ́ς||nom//voc|ở|f|s}} ambxi00udrgfg1b51i6qx6idyogqnaa νύξ 0 420664 2571763 2026-10-19T02:56:44Z Hiyuune 50834 + grc 2571763 wikitext text/x-wiki {{also|Νύξ}} =={{langname|grc}}== ==={{section|etym}}=== {{ety|grc|:inh|grk-pro:*nukts<ety:inh<ine-pro:*nókʷts>>}} Từ {{inh|grc|grk-pro|*nuks}}, từ {{inh|grc|ine-pro|*nókʷts|t=đêm; tối}}. Các từ cùng gốc bao gồm {{cog|la|nox}}, {{cog|sa|नक्त्|tr=nákt}}, {{cog|cu|нощь}}, {{cog|lt|naktìs}}, {{cog|sq|natë}} và {{cog|ang|niht}} (từ đây có {{cog|en|night}}).<ref>{{R:grc:Beekes|head=νύξ, νυκτός|page=1027}}</ref> ==={{section|pron}}=== {{grc-IPA|νῠ́ξ}} ==={{section|n}}=== {{grc-noun|νῠ́ξ|νῠκτός|f|third}} # [[đêm|Đêm]]; [[tối]]. ===={{section|decl}}==== {{grc-decl|form=F|νῠ́ξ|νῠκτός|dial=att}} {{grc-decl|form=F|νῠ́ξ|νῠκτός|dial=epi}} {{grc-decl|form=F|νῠ́ξ|νῠκτός|dial=ion}} ===={{section|drv}}==== {{col|grc |νῠκτᾰλωπῐ́ᾱ |νῠκτᾰ́λωψ |νῠκτερῐ́ς |νῠκτηγορέω |νῠκτηγορῐ́ᾱ |νῠκτηρεφής |νῠκτῐ́ |νῠκτῐ́βρομος |νῠκτῐλᾰθραιοφᾰ́γος |νῠκτῐ́πλᾱγκτος |νῠκτῐπλᾰνής |νῠκτῐπόλος |νῠκτῐ́σεμνος |νῠκτῐφᾰής |νῠκτῐ́φᾰντος |νῠκτῐ́φοιτος |νῠκτοφῠ́λᾰξ |νῠ́κτωρ |νῠχθήμερον |νῠχθήμερος |Νῠ́ξ |πᾰννῠ́χῐος |πᾰννῠχῐ́ς }} ===={{section|desc}}==== * {{desc|el|νυξ|νύκτα|νύχτα}} * {{desc|grk-ita|νύφτα}} * {{desc|grk-mar|ны́хта}} * {{desc|tsd|νιούτθα}} ==={{section|ref}}=== {{reflist}} ==={{section|further}}=== * {{R:grc:LSJ}} * {{R:grc:Woodhouse|1018}} {{C|grc|Thành phần trong ngày}} gya5l8nr6d56cemqskxhzpz0q0jscgy νύκτε 0 420665 2571764 2026-10-19T02:58:02Z Hiyuune 50834 + grc 2571764 wikitext text/x-wiki =={{langname|grc}}== ==={{section|alt}}=== * {{alt|grc|νῠ́κτ'||apocopic}} ==={{section|pron}}=== {{grc-IPA|νῠ́κτε}} ==={{section|n}}=== {{grc-noun form|νῠ́κτε}} # {{infl of|grc|νῠ́ξ||nom//acc//voc|d}} 6us2m6196xwyz46mtnnyo9akkxg4g50 Bản mẫu:grc-article form 10 420666 2571765 2026-10-19T03:00:38Z Hiyuune 50834 Trang mới: “{{#invoke:grc-headword|show|Biến thể hình thái trợ từ}}<noinclude>{{documentation}}{{tcat|hw}}</noinclude>” 2571765 wikitext text/x-wiki {{#invoke:grc-headword|show|Biến thể hình thái trợ từ}}<noinclude>{{documentation}}{{tcat|hw}}</noinclude> q0ncgsqc793efwoy37t2hxekep5yace Mô đun:data tables/dataM226 828 420667 2571766 2026-10-19T03:01:31Z Hiyuune 50834 Trang mới: “local freezer = { } local la_RMA_index_to_phrases = { } local grc_RWoodhouse_lemma_to_infinitives = { ["θερίζω"]={"ἐνθρίζειν","θερίδδειν","θερίζειν","θερίσαι","θερίσασθαι","θεριεῖν"},["διαδείκνυμι"]={"διαδεικνύναι"}} local la_NLW_headwords_to_path = { ["paruiloquus"]={"0/005984"},["perextersus"]={"2/007986"},["periuriosus"]={"3/012803"},["squitrinium"]={"2/014974"},["subattritus"]={"1/0042…” 2571766 Scribunto text/plain local freezer = { } local la_RMA_index_to_phrases = { } local grc_RWoodhouse_lemma_to_infinitives = { ["θερίζω"]={"ἐνθρίζειν","θερίδδειν","θερίζειν","θερίσαι","θερίσασθαι","θεριεῖν"},["διαδείκνυμι"]={"διαδεικνύναι"}} local la_NLW_headwords_to_path = { ["paruiloquus"]={"0/005984"},["perextersus"]={"2/007986"},["periuriosus"]={"3/012803"},["squitrinium"]={"2/014974"},["subattritus"]={"1/004233"},["supportatio"]={"0/001608"},["suspiciosus"]={"3/005387"},["tumorositas"]={"0/007572"},["uomituritio"]={"2/016970"}} local grc_RLBG_lemma_to_index = { ["βοσκάς"]={"12787"},["γλάρος"]={"14173"},["δράκος"]={"18267"},["δράκος"]={"18268"},["ζυγίζω"]={"29375"},["θλάτης"]={"31311"},["καινοσύντακτος"]={"33276"},["κάρδος"]={"34566"},["κάρμης"]={"34604"},["κριθής"]={"39555"},["κωδυία"]={"40351"},["λαβόρα"]={"40474"},["πηγάνω"]={"56809"},["ἀγριοφλησκούνιον"]={"674"},["ἀείκομος"]={"1106"},["αἰθαλώνω"]={"1463"},["ἀμφίδιον"]={"3290"},["ἀμφιέλιξ"]={"3303"},["ἀνήλικος"]={"4888"},["ἀνήνεμος"]={"4896"},["αὐχάομαι"]={"11019"},["δυσπραγέω"]={"19085"},["ἐκβατέον"]={"20544"},["ἐμφάνεια"]={"22418"},["εὐανθίζω"]={"27740"},["εὐφήμημα"]={"28807"},["ζωοτρόφος"]={"29537"},["κουφόπους"]={"39253"},["οὐγγιάζω"]={"51047"},["παρασφάζω"]={"53804"},["παρορατής"]={"54425"},["πεπερίτης"]={"55363"},["ἀμακάριστος"]={"2901"},["ἀμφωσημασία"]={"3437"},["ἀνεκβιάστως"]={"4499"},["ἀνέκπρακτος"]={"4524"},["ἀνενεργήτως"]={"4616"},["ἀντεγχειρέω"]={"5437"},["ἀντιστάτημα"]={"6168"},["ἀποκάρφισμα"]={"7548"},["ἀποκαταντάω"]={"7556"},["Ἀρειανιστής"]={"8793"},["ἀρτιθάνατος"]={"9238"},["ἀστροφάνεια"]={"9974"},["βασιλείδιον"]={"12034"},["δολιογνώμων"]={"17953"},["ἐγκατάδυσις"]={"19573"},["ἐγκαταστάζω"]={"19624"},["ἐκστρώννυμι"]={"21399"},["ἐπαπείλησις"]={"25072"},["ἐπιδερματίς"]={"25545"},["κακοριζικία"]={"33515"},["κουβούκλιον"]={"38979"},["λογοπείθεια"]={"42102"},["ὀκτάδραχμος"]={"49093"},["ὀρθοβλεπτέω"]={"50575"}} local la_RMA_lemmas_no_collision_to_ix_phrase = { ["os"]={"1155","1176","1178","1756","1757","1860","1862","1925","1931","1932","2344","3089","3302"}} local grc_RCunliffe_lemma_to_index = { ["φῄς"]={"9428"},["τεθνεῶτι"]={"8799"},["κάλπις"]={"5194"},["κατήϊε"]={"5415"},["τοιγάρ"]={"8973"},["διασκίδνημι"]={"2233"},["δειδίσκομαι"]={"2092"}} local grc_RWoodhouse_lemma_to_headwords = { ["Λύκιος"]={"lycia"},["δορκάς"]={"antelope","doe","gazelle","hind"},["δωρεάν"]={"gratis","nothing"},["θίασος"]={"band","reveller","roisterer","rout"},["καταλλάσσεσθαι"]={"make","reconcile"},["λέσχαι"]={"conversation","discourse","talk","tattle"},["μεταχερίζεσθαι"]={"prosecute"},["παίζων"]={"playfully"},["πλεκτή"]={"coil","cord","rope"},["σήπειν"]={"canker","decompose","poison","rot"},["σκοπία"]={"look-out"},["χορεία"]={"choral","dance"},["ἐντὸς"]={"net"},["καταρρυής"]={"streaming"},["κυβερνᾶν"]={"direct","govern","guide","helm","manage","manœuvre","navigate","pilot","rule","sail","steer"},["λελῇσθαι"]={"carry"},["σωφροσύνη"]={"abstemiousness","abstinence","asceticism","continence","control","discretion","judiciousness","moderation","prudence","restraint","sagacity","self-denial","sobriety","temperance","wisdom"},["τετραρχία"]={"tetrarchy"},["ἐκδρομαί"]={"skirmishing parties"},["ἐμβήσειν"]={"embark","ship"},["ἐξαίρειν"]={"agitate","dignify","elevate","excite","lift","raise","rouse","stir"},["ἐρείκειν"]={"break","crush","dash","piece"},["Κροτωνιᾶτις"]={"croton"},["αυνδικάζειν"]={"assessor"},["γενειάσκειν"]={"beard"},["τῆς"]={"lamb","sex"}} return {["freezer"]=freezer,["la_RMA_index_to_phrases"]=la_RMA_index_to_phrases,["grc_RWoodhouse_lemma_to_infinitives"]=grc_RWoodhouse_lemma_to_infinitives,["la_NLW_headwords_to_path"]=la_NLW_headwords_to_path,["grc_RLBG_lemma_to_index"]=grc_RLBG_lemma_to_index,["la_RMA_lemmas_no_collision_to_ix_phrase"]=la_RMA_lemmas_no_collision_to_ix_phrase,["grc_RCunliffe_lemma_to_index"]=grc_RCunliffe_lemma_to_index,["grc_RWoodhouse_lemma_to_headwords"]=grc_RWoodhouse_lemma_to_headwords} ancuap7ub230f2ja4avs2txzr907fww τῆς 0 420668 2571767 2026-10-19T03:02:09Z Hiyuune 50834 Trang mới: “{{also|της|-της|-τής}} =={{langname|grc}}== ==={{section|alt}}=== * {{alter|grc|τᾶς||Doric|Aeolic}} ==={{section|pron}}=== {{grc-IPA}} ==={{section|article}}=== {{grc-article form}} # {{lb|grc|att|ion}} {{infl of|grc|ὁ||gen|ở|f|s}} ===={{section|desc}}==== * {{desc|el|της}} ==={{section|pronoun}}=== {{grc-pronoun form}} # {{lb|grc|att|epi|ion}} {{infl of|grc|ὁ<pos:đại từ chỉ định>,ὅ<pos:đại từ quan hệ>||gen|ở|f|s}} ==={{…” 2571767 wikitext text/x-wiki {{also|της|-της|-τής}} =={{langname|grc}}== ==={{section|alt}}=== * {{alter|grc|τᾶς||Doric|Aeolic}} ==={{section|pron}}=== {{grc-IPA}} ==={{section|article}}=== {{grc-article form}} # {{lb|grc|att|ion}} {{infl of|grc|ὁ||gen|ở|f|s}} ===={{section|desc}}==== * {{desc|el|της}} ==={{section|pronoun}}=== {{grc-pronoun form}} # {{lb|grc|att|epi|ion}} {{infl of|grc|ὁ<pos:đại từ chỉ định>,ὅ<pos:đại từ quan hệ>||gen|ở|f|s}} ==={{section|ref}}=== * {{R:grc:Woodhouse}} 92jbeigk24q94v60uqaqq5unwr35j4v Bản mẫu:R:Etymonline 10 420669 2571772 2026-10-19T03:09:51Z Hiyuune 50834 Đổi hướng đến [[Bản mẫu:R:Online Etymology Dictionary]] 2571772 wikitext text/x-wiki #redirect [[Bản mẫu:R:Online Etymology Dictionary]] pbprg5xvwbr8gdniyg032xcsatk17mq Bản mẫu:R:Webster 10 420670 2571774 2026-10-19T03:11:28Z Hiyuune 50834 Đổi hướng đến [[Bản mẫu:R:Webster 1913]] 2571774 wikitext text/x-wiki #redirect [[Template:R:Webster 1913]] f5yjgk09lr0y2babuubbvulpgd4a1fb Từ tái tạo:Tiếng H'Mông-Miền nguyên thủy/djuŋᴴ 0 420671 2571793 2026-10-19T03:51:18Z Hiyuune 50834 Trang mới: “{{reconstructed}} =={{langname|hmx-pro}}== ==={{section|num}}=== {{head|hmx-pro|Số từ|head=*djuŋᴴ}} # [[bảy|Bảy]]. ===={{section|desc}}==== * {{desc|mww|xya}} ==={{section|ref}}=== * {{R:hmx-pro:Ratliff 2010}} * {{R:hmx-pro:Chen 2013}} * {{R:hmx-mie:Mao 2004}} [[en:Reconstruction:Proto-Hmong-Mien/djuŋᴴ]]” 2571793 wikitext text/x-wiki {{reconstructed}} =={{langname|hmx-pro}}== ==={{section|num}}=== {{head|hmx-pro|Số từ|head=*djuŋᴴ}} # [[bảy|Bảy]]. ===={{section|desc}}==== * {{desc|mww|xya}} ==={{section|ref}}=== * {{R:hmx-pro:Ratliff 2010}} * {{R:hmx-pro:Chen 2013}} * {{R:hmx-mie:Mao 2004}} [[en:Reconstruction:Proto-Hmong-Mien/djuŋᴴ]] 4dywijol1fgjd9erty4x0lrranxrxbx Từ tái tạo:Tiếng Latinh/massicius 0 420672 2571800 2026-10-19T08:12:37Z Hiyuune 50834 Trang mới: “{{reconstructed}} =={{langname|la}}== ==={{section|etym}}=== {{ety|la|title=*massīcius|:af|massa|-īcius<id:dài>|text=+|tree=1}} ==={{section|adj}}=== {{la-adj|*massīcius}}<ref>{{cite-journal|de|last=Leumann |first=Manu |authorlink=Manu Leumann |year=1918 |title=Die Adjektiva auf {{m|la||-ī̆cius}}|journal=Glotta |volume=9 |issue=2/3 |jstor=40264956 |page=156}}</ref> {{tlb|la|PIWR}} # [[to lớn|To lớn]], [[vững chắc]]. ===={{section|desc}}==== {{top2}} * Nh…” 2571800 wikitext text/x-wiki {{reconstructed}} =={{langname|la}}== ==={{section|etym}}=== {{ety|la|title=*massīcius|:af|massa|-īcius<id:dài>|text=+|tree=1}} ==={{section|adj}}=== {{la-adj|*massīcius}}<ref>{{cite-journal|de|last=Leumann |first=Manu |authorlink=Manu Leumann |year=1918 |title=Die Adjektiva auf {{m|la||-ī̆cius}}|journal=Glotta |volume=9 |issue=2/3 |jstor=40264956 |page=156}}</ref> {{tlb|la|PIWR}} # [[to lớn|To lớn]], [[vững chắc]]. ===={{section|desc}}==== {{top2}} * Nhóm ngôn ngữ Ý-Rôman: ** {{desc|it|massiccio}} ** {{desc|scn|massizzu}} ** {{desc|vec|massisso}} * Nhóm ngôn ngữ Gaul-Rôman Bắc: ** {{desc|frp|machí}} ** {{desc|fro|massiz}} *** {{desc|fr|massif|qq=suffix replaced}} * Nhóm ngôn ngữ Gaul-Rôman Nam: ** {{desc|ca|massís}} ** {{desc|oc|massís}} * Nhóm ngôn ngữ Iberia-Rôman: ** {{desc|roa-ole}} *** {{desc|ast|macizu}} ** {{desc|roa-opt|maçiço}} *** {{desc|gl|macizo}} *** {{desc|pt|maciço}} ** {{desc|osp|maçiço}} *** {{desc|es|macizo}} {{bottom}} ==={{section|ref}}=== {{reflist}} [[en:Reconstruction:Latin/massicius]] pn6p3njlvw7f384llwq6sh64fv4grh4 公證人 0 420673 2571803 2026-10-19T08:16:09Z Hiyuune 50834 + zh 2571803 wikitext text/x-wiki {{also|公证人}} =={{langname|zh}}== {{zh-forms|s=公证人|type=21}} {{wp|zh:}} ==={{section|pron}}=== {{zh-pron |m=gōngzhèngrén |c=gung1 zing3 jan4 |cat=n }} ==={{section|n}}=== {{head|zh|Danh từ}} # [[công chứng viên]]. ===={{section|syn}}==== * {{zh-l|公證員}} {{C|zh|Luật pháp|Nghề nghiệp}} cdf1ffh6vg8xo26hhdx7arkj6es4j50 公证人 0 420674 2571804 2026-10-19T08:16:30Z Hiyuune 50834 Trang mới: “{{also|公證人}} =={{langname|zh}}== {{zh-see|公證人}}” 2571804 wikitext text/x-wiki {{also|公證人}} =={{langname|zh}}== {{zh-see|公證人}} svjp6ebi9flzydsoqfrkd2px91hvnja 证 0 420675 2571805 2026-10-19T08:17:04Z Hiyuune 50834 Trang mới: “{{also|證|証}} {{character info}} =={{langname|mul}}== {{stroke order|strokes=7}} {{Han simplified forms|證|証|证}} ==={{ĐM|han}}=== {{Han char|rn=149|rad=讠|as=05|sn=7|four=|canj=IVMYM|ids=⿰讠正}} ===={{ĐM|ref}}==== * {{Han ref|kx=1188.181|hdz=63952.010|uh=8BC1}}” 2571805 wikitext text/x-wiki {{also|證|証}} {{character info}} =={{langname|mul}}== {{stroke order|strokes=7}} {{Han simplified forms|證|証|证}} ==={{ĐM|han}}=== {{Han char|rn=149|rad=讠|as=05|sn=7|four=|canj=IVMYM|ids=⿰讠正}} ===={{ĐM|ref}}==== * {{Han ref|kx=1188.181|hdz=63952.010|uh=8BC1}} qse4s8ziy9uls2mmp5td5dbv682isqw Thể loại:Mục từ tham chiếu đến nguyên từ bị thiếu tiếng Pháp 14 420676 2571809 2026-10-19T08:25:02Z Hiyuune 50834 Trang mới: “{{auto cat}}” 2571809 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx 诅 0 420677 2571810 2026-10-19T08:26:34Z Hiyuune 50834 Trang mới: “{{also|詛}} {{character info}} =={{langname|mul}}== ==={{section|han}}=== {{Han char|rn=149|rad=讠|as=05|sn=7|four=|canj=IVBM|ids=⿰讠且}} ===={{section|ref}}==== * {{Han ref|kx=1188.181|hdz=63953.090|uh=8BC5}} =={{langname|zh}}== ==={{section|glyph origin}}=== {{Han simp|詛|f=言|t=讠}}. ==={{section|dfn}}=== {{zh-see|詛}}” 2571810 wikitext text/x-wiki {{also|詛}} {{character info}} =={{langname|mul}}== ==={{section|han}}=== {{Han char|rn=149|rad=讠|as=05|sn=7|four=|canj=IVBM|ids=⿰讠且}} ===={{section|ref}}==== * {{Han ref|kx=1188.181|hdz=63953.090|uh=8BC5}} =={{langname|zh}}== ==={{section|glyph origin}}=== {{Han simp|詛|f=言|t=讠}}. ==={{section|dfn}}=== {{zh-see|詛}} df0r23wy9h7f0wuxzobwvl7l0wy3t4v следования 0 420678 2571812 2026-10-19T08:29:01Z Hiyuune 50834 + ru 2571812 wikitext text/x-wiki =={{langname|ru}}== ==={{section|pron}}=== * {{ru-IPA|сле́дования}} ==={{section|n}}=== {{head|ru|Biến thể hình thái danh từ|head=сле́дования|g=n-in|g2=n-in-p}} # {{inflection of|ru|сле́дование||gen|s|;|nom//acc|p}} c9ucrsuryirssfobn4gdwyj87rj7ll3 nominativus 0 420679 2571814 2026-10-19T08:40:33Z Hiyuune 50834 Trang mới: “=={{langname|nl}}== ==={{section|etym}}=== Vay mượn từ {{bor|nl|la|nominativus}}. ==={{section|n}}=== {{nl-noun|m|nominativi,-en|-}} # {{lb|nl|grammar}} [[danh cách]] hoặc một từ nằm trong nó. ===={{section|syn}}==== * {{l|nl|eerste naamval}} * {{l|nl|nominatief}} {{C|nl|Cách ngữ pháp}} =={{langname|la}}== ==={{section|etym}}=== {{ety|la|title=nōminātīvus|:af|nomino<alt:nōminō>|-ivus<alt:-īvus>|:calque|grc:ὀνομαστική|text=+|tree=…” 2571814 wikitext text/x-wiki =={{langname|nl}}== ==={{section|etym}}=== Vay mượn từ {{bor|nl|la|nominativus}}. ==={{section|n}}=== {{nl-noun|m|nominativi,-en|-}} # {{lb|nl|grammar}} [[danh cách]] hoặc một từ nằm trong nó. ===={{section|syn}}==== * {{l|nl|eerste naamval}} * {{l|nl|nominatief}} {{C|nl|Cách ngữ pháp}} =={{langname|la}}== ==={{section|etym}}=== {{ety|la|title=nōminātīvus|:af|nomino<alt:nōminō>|-ivus<alt:-īvus>|:calque|grc:ὀνομαστική|text=+|tree=1}} ==={{section|pron}}=== * {{la-IPA|nōminātīvus}} ==={{section|adj}}=== {{la-adj|nōminātīvus}} # {{lb|la|grammar}} [[danh cách]]. ===={{section|decl}}==== {{la-adecl|nōminātīvus}} ==={{section|ref}}=== * {{R:la:L&S}} * {{R:la:du Cange}} * {{R:la:Gaffiot}} gln32vdde5awei3vn96uyxd8pjoq9av 2571828 2571814 2026-10-19T09:53:28Z TheHighFighter2 42988 /* Danh từ */ 2571828 wikitext text/x-wiki =={{langname|nl}}== ==={{section|etym}}=== Vay mượn từ {{bor|nl|la|nominativus}}. ==={{section|n}}=== {{nl-noun|m|nominativi,-en|-}} # {{lb|nl|grammar}} [[danh cách|Danh cách]] hoặc một từ ở cách này. ===={{section|syn}}==== * {{l|nl|eerste naamval}} * {{l|nl|nominatief}} {{C|nl|Cách ngữ pháp}} =={{langname|la}}== ==={{section|etym}}=== {{ety|la|title=nōminātīvus|:af|nomino<alt:nōminō>|-ivus<alt:-īvus>|:calque|grc:ὀνομαστική|text=+|tree=1}} ==={{section|pron}}=== * {{la-IPA|nōminātīvus}} ==={{section|adj}}=== {{la-adj|nōminātīvus}} # {{lb|la|grammar}} [[danh cách]]. ===={{section|decl}}==== {{la-adecl|nōminātīvus}} ==={{section|ref}}=== * {{R:la:L&S}} * {{R:la:du Cange}} * {{R:la:Gaffiot}} rrh9iqqwfmax3bsysxu8n1gwpm49uz2 ὀνομαστική 0 420680 2571819 2026-10-19T08:47:48Z Hiyuune 50834 + grc 2571819 wikitext text/x-wiki {{also|ονομαστική}} =={{langname|grc}}== ==={{section|pron}}=== {{grc-IPA|ὀνομᾰστῐκή}} ==={{section|adj}}=== {{grc-adjective form|ὀνομᾰστῐκή}} # {{infl of|grc|ὀνομᾰστῐκός||nom//voc|ở|f|s}} ==={{section|n}}=== {{grc-noun|head=ὀνομᾰστῐκή|ὀνομᾰστῐκῆς|f|first}} # {{lb|grc|grammar}} {{ellipsis of|grc|[[πτῶσις]] [[ὀνομαστική]]|t=[[danh cách]]}} ===={{section|decl}}==== {{grc-decl|ὀνομᾰστῐκή|ῆς}} ===={{section|desc}}==== * {{desc|el|ονομαστική}} * {{desc|la|nōminātīvus|calq=1}} ==={{section|further}}=== * {{R:grc:LSJ|ὀνομαστικός}} pimi0vytyeabqr7f4r5iznczlk5osye следований 0 420681 2571820 2026-10-19T08:54:24Z Hiyuune 50834 Trang mới: “{{also|следовании}} =={{langname|ru}}== ==={{section|pron}}=== * {{ru-IPA|сле́дований}} ==={{section|n}}=== {{head|ru|Biến thể hình thái danh từ|head=сле́дований|g=n-in-p}} # {{inflection of|ru|сле́дование||gen|p}}” 2571820 wikitext text/x-wiki {{also|следовании}} =={{langname|ru}}== ==={{section|pron}}=== * {{ru-IPA|сле́дований}} ==={{section|n}}=== {{head|ru|Biến thể hình thái danh từ|head=сле́дований|g=n-in-p}} # {{inflection of|ru|сле́дование||gen|p}} hs2w8bdhc5mcsouer5yoc8nvb6l9y4q chromoendoscopy 0 420682 2571822 2026-10-19T09:15:24Z Hiyuune 50834 + en 2571822 wikitext text/x-wiki =={{langname|en}}== {{wp|en:}} ==={{section|etym}}=== Từ {{prefix|en|chromo|endoscopy}}. ==={{section|n}}=== {{en-noun|-|+}} # [[nội soi]] [[nhuộm]] [[màu]]. #: {{syn|en|chromoscopy}} esc7sp2ssg0adpcqfh80wutjevqjev6 chromoendoscopies 0 420683 2571823 2026-10-19T09:15:58Z Hiyuune 50834 + en 2571823 wikitext text/x-wiki =={{langname|en}}== ==={{section|n}}=== {{head|en|Biến thể hình thái danh từ}} # {{plural of|en|chromoendoscopy}} 2j54c7dcc31vu9u7r31xcveabwm9eho Mô đun:number list/data/clm 828 420684 2571826 2026-10-19T09:40:27Z Hiyuune 50834 Trang mới: “local export = {numbers = {}} local numbers = export.numbers numbers[1] = { cardinal = "nə́c̕uʔ", } numbers[2] = { cardinal = "čə́saʔ", } numbers[3] = { cardinal = "ɬíxʷ", } numbers[4] = { cardinal = "ŋús", } numbers[5] = { cardinal = "ɬq̕áčš", } numbers[6] = { cardinal = "t̕x̣ə́ŋ", } numbers[7] = { cardinal = "c̕úʔkʷs", } numbers[8] = { cardinal = "táʔcs", } numbers[9] = { cardinal = "tə́kʷxʷ", } numbers[10] = { cardinal = "ʔ…” 2571826 Scribunto text/plain local export = {numbers = {}} local numbers = export.numbers numbers[1] = { cardinal = "nə́c̕uʔ", } numbers[2] = { cardinal = "čə́saʔ", } numbers[3] = { cardinal = "ɬíxʷ", } numbers[4] = { cardinal = "ŋús", } numbers[5] = { cardinal = "ɬq̕áčš", } numbers[6] = { cardinal = "t̕x̣ə́ŋ", } numbers[7] = { cardinal = "c̕úʔkʷs", } numbers[8] = { cardinal = "táʔcs", } numbers[9] = { cardinal = "tə́kʷxʷ", } numbers[10] = { cardinal = "ʔúpən", } numbers[11] = { cardinal = "ʔúpən ʔiʔ či nə́c̕uʔ", } numbers[12] = { cardinal = "ʔúpən ʔiʔ či čə́saʔ", } numbers[13] = { cardinal = "ʔúpən ʔiʔ či ɬíxʷ", } numbers[14] = { cardinal = "ʔúpən ʔiʔ či ŋús", } numbers[15] = { cardinal = "ʔúpən ʔiʔ či ɬq̕áčš", } numbers[16] = { cardinal = "ʔúpən ʔiʔ či t̕x̣ə́ŋ", } numbers[17] = { cardinal = "ʔúpən ʔiʔ či c̕úʔkʷs", } numbers[18] = { cardinal = "ʔúpən ʔiʔ či táʔcs", } numbers[19] = { cardinal = "ʔúpən ʔiʔ či tə́kʷxʷ", } numbers[20] = { cardinal = "nəc̕xʷk̕ʷə́s", } numbers[21] = { cardinal = "nəc̕xʷk̕ʷə́s ʔiʔ či nə́c̕uʔ", } numbers[22] = { cardinal = "nəc̕xʷk̕ʷə́s ʔiʔ či čə́saʔ", } numbers[23] = { cardinal = "nəc̕xʷk̕ʷə́s ʔiʔ či ɬíxʷ", } numbers[24] = { cardinal = "nəc̕xʷk̕ʷə́s ʔiʔ či ŋús", } numbers[25] = { cardinal = "nəc̕xʷk̕ʷə́s ʔiʔ či ɬq̕áčš", } numbers[26] = { cardinal = "nəc̕xʷk̕ʷə́s ʔiʔ či t̕x̣ə́ŋ", } numbers[27] = { cardinal = "nəc̕xʷk̕ʷə́s ʔiʔ či c̕úʔkʷs", } numbers[28] = { cardinal = "nəc̕xʷk̕ʷə́s ʔiʔ či táʔcs", } numbers[29] = { cardinal = "nəc̕xʷk̕ʷə́s ʔiʔ či tə́kʷxʷ", } numbers[30] = { cardinal = "ɬxʷɬšáʔ", } numbers[40] = { cardinal = "ŋəsɬšáʔ", } numbers[50] = { cardinal = "ɬq̕čšɬšáʔ", } numbers[60] = { cardinal = "t̕x̣əŋɬšáʔ", } numbers[70] = { cardinal = "c̕aʔkʷsɬšáʔ", } numbers[80] = { cardinal = "taʔcsɬšáʔ", } numbers[90] = { cardinal = "təkʷxʷɬšáʔ", } numbers[100] = { cardinal = "snáč̕əwəč", } numbers[200] = { cardinal = "čə́saʔ snáč̕əwəč", } numbers[300] = { cardinal = "ɬíxʷ snáč̕əwəč", } numbers[400] = { cardinal = "ŋús snáč̕əwəč", } numbers[500] = { cardinal = "ɬq̕áčš snáč̕əwəč", } numbers[600] = { cardinal = "t̕x̣ə́ŋ snáč̕əwəč", } numbers[700] = { cardinal = "c̕úʔkʷs snáč̕əwəč", } numbers[800] = { cardinal = "táʔcs snáč̕əwəč", } numbers[900] = { cardinal = "tə́kʷxʷ snáč̕əwəč", } numbers[1000] = { cardinal = "ʔúpən snáč̕əwəč", } return export endxtqmg54n2wc0a10gmf2q56hcx2ei Mô đun:zh/data/dial-syn/楓糖漿 828 420685 2571827 2026-10-19T09:41:54Z Hiyuune 50834 Trang mới: “local export = {} export.list = { ["title"] = "", ["meaning"] = "siro phong", ["note"] = "", ["Classical"] = { "" }, ["Formal"] = { "-" }, ["Taxonomic"] = { "" }, ["Beijing"] = { "" }, ["Beijing-MY"] = { "" }, ["Beijing-HR"] = { "" }, ["Beijing-YQ"] = { "" }, ["Beijing-CP"] = { "" }, ["Beijing-MTG"] = { "" }, ["Beijing-FS"] = { "" }, ["Taiwan"] = { "楓糖漿", "楓葉糖漿" }, --楓樹糖漿, 槭糖漿?…” 2571827 Scribunto text/plain local export = {} export.list = { ["title"] = "", ["meaning"] = "siro phong", ["note"] = "", ["Classical"] = { "" }, ["Formal"] = { "-" }, ["Taxonomic"] = { "" }, ["Beijing"] = { "" }, ["Beijing-MY"] = { "" }, ["Beijing-HR"] = { "" }, ["Beijing-YQ"] = { "" }, ["Beijing-CP"] = { "" }, ["Beijing-MTG"] = { "" }, ["Beijing-FS"] = { "" }, ["Taiwan"] = { "楓糖漿", "楓葉糖漿" }, --楓樹糖漿, 槭糖漿? ["Tianjin-WQ"] = { "" }, ["Langfang"] = { "" }, ["Chengde"] = { "" }, ["Ulan Hot"] = { "" }, ["Tongliao"] = { "" }, ["Chifeng"] = { "" }, ["Hailar"] = { "" }, ["Heihe"] = { "" }, ["Nenjiang"] = { "" }, ["Mohe"] = { "" }, ["Qiqihar"] = { "" }, ["Tailai"] = { "" }, ["Jixian-HLJ"] = { "" }, ["Lanxi-M"] = { "" }, ["Boli"] = { "" }, ["Jiayin"] = { "" }, ["Muling"] = { "" }, ["Dongning"] = { "" }, ["Ning'an"] = { "" }, ["Linkou"] = { "" }, ["Zhaozhou"] = { "" }, ["Zhaodong"] = { "" }, ["Jixi-M"] = { "" }, ["Mishan"] = { "" }, ["Harbin"] = { "" }, ["Shangzhi"] = { "" }, ["Yingchengzi"] = { "" }, ["Jiamusi"] = { "" }, ["Tongjiang-M"] = { "" }, ["Baicheng"] = { "" }, ["Da'an"] = { "" }, ["Songyuan"] = { "" }, ["Changchun"] = { "" }, ["Yushu"] = { "" }, ["Jilin"] = { "" }, ["Siping"] = { "" }, ["Liaoyuan"] = { "" }, ["Dunhua"] = { "" }, ["Hunchun"] = { "" }, ["Baishan"] = { "" }, ["Tonghua"] = { "" }, ["Shenyang"] = { "" }, ["Anshan"] = { "" }, ["Tieling"] = { "" }, ["Jinzhou"] = { "" }, ["Jingzhou-SS"] = { "" }, ["Malaysia-M"] = { "" }, ["Singapore-M"] = { "" }, ["Taz"] = { "" }, ["Tianjin"] = { "" }, ["Tianjin-JZ"] = { "" }, ["Tianjin-BD"] = { "" }, ["Tianjin-NH"] = { "" }, ["Tianjin-HG"] = { "" }, ["Tianjin-TG"] = { "" }, ["Tianjin-DG"] = { "" }, ["Tianjin-JN"] = { "" }, ["Tianjin-DL"] = { "" }, ["Tianjin-JH"] = { "" }, ["Tianjin-XQ"] = { "" }, ["Tianjin-BC"] = { "" }, ["Beijing-PG"] = { "" }, ["Tangshan"] = { "" }, ["Qinhuangdao"] = { "" }, ["Cangzhou"] = { "" }, ["Xianxian"] = { "" }, ["Xianxian-XY"] = { "" }, ["Baoding"] = { "" }, ["Dingxing"] = { "" }, ["Xiong'an"] = { "" }, ["Shijiazhuang"] = { "" }, ["Xingtai"] = { "" }, ["Hengshui"] = { "" }, ["Lijin"] = { "" }, ["Binzhou"] = { "" }, ["Wudi"] = { "" }, ["Weicheng"] = { "" }, ["Fangzi"] = { "" }, ["Changle-WF"] = { "" }, ["Shouguang"] = { "" }, ["Rizhao"] = { "" }, ["Wulian"] = { "" }, ["Jinan"] = { "" }, ["Zhangqiu"] = { "" }, ["Liaocheng"] = { "" }, ["Dezhou"] = { "" }, ["Tai'an"] = { "" }, ["Xintai"] = { "" }, ["Zibo"] = { "" }, ["Zichuan"] = { "" }, ["Boshan"] = { "" }, ["Yinan"] = { "" }, ["Dalian"] = { "" }, ["Dandong"] = { "" }, ["Yantai"] = { "" }, ["Muping"] = { "" }, ["Laizhou"] = { "" }, ["Weihai"] = { "" }, ["Wendeng"] = { "" }, ["Rongcheng"] = { "" }, ["Qingdao"] = { "" }, ["Chengyang"] = { "" }, ["Jimo"] = { "" }, ["Laixi"] = { "" }, ["Pingdu"] = { "" }, ["Jiaozhou"] = { "" }, ["Jiaonan"] = { "" }, ["Hanting"] = { "" }, ["Changyi"] = { "" }, ["Gaomi"] = { "" }, ["Zhucheng"] = { "" }, ["Anqiu"] = { "" }, ["Linqu"] = { "" }, ["Qingzhou"] = { "" }, ["Yishui"] = { "" }, ["Hulin-XL"] = { "" }, ["Linjiang"] = { "" }, ["Ji'an-M"] = { "" }, ["Luoyang"] = { "" }, ["Luoning"] = { "" }, ["Sanmenxia"] = { "" }, ["Lingbao"] = { "" }, ["Luohe"] = { "" }, ["Zhumadian"] = { "" }, ["Biyang"] = { "" }, ["Zhoukou"] = { "" }, ["Dancheng"] = { "" }, ["Xuchang"] = { "" }, ["Changge"] = { "" }, ["Pingdingshan"] = { "" }, ["Lushan-M"] = { "" }, ["Nanyang"] = { "" }, ["Xixia"] = { "" }, ["Dengzhou"] = { "" }, ["Zaozhuang"] = { "" }, ["Ningyang"] = { "" }, ["Jining-M"] = { "" }, ["Linyi"] = { "" }, ["Heze"] = { "" }, ["Daming"] = { "" }, ["Yuncheng"] = { "" }, ["Wenxi"] = { "" }, ["Longxing"] = { "" }, ["Yongji"] = { "" }, ["Wanrong"] = { "" }, ["Ronghe"] = { "" }, ["Linfen"] = { "" }, ["Jixian"] = { "" }, ["Huozhou"] = { "" }, ["Hongtong"] = { "" }, ["Shangqiu"] = { "" }, ["Yongcheng"] = { "" }, ["Yuanyang"] = { "" }, ["Zhengzhou"] = { "" }, ["Kaifeng"] = { "" }, ["Lankao"] = { "" }, ["Changyuan"] = { "" }, ["Xunxian"] = { "" }, ["Puyang"] = { "" }, ["Fanxian"] = { "" }, ["Xinyang"] = { "" }, ["Gushi"] = { "" }, ["Shangluo"] = { "" }, ["Luonan"] = { "" }, ["Danfeng"] = { "" }, ["Shangnan"] = { "" }, ["Shanyang"] = { "" }, ["Zhen'an"] = { "" }, ["Hanbin"] = { "" }, ["Hanbin-XH"] = { "" }, ["Baihe"] = { "" }, ["Baihe-MP"] = { "" }, ["Pingli"] = { "" }, ["Xunyang"] = { "" }, ["Lueyang"] = { "" }, ["Mianxian"] = { "" }, ["Yangxian"] = { "" }, ["Xi'an"] = { "" }, ["Weiyang"] = { "" }, ["Baqiao"] = { "" }, ["Yanliang"] = { "" }, ["Lintong"] = { "" }, ["Chang'an"] = { "" }, ["Huyi"] = { "" }, ["Gaoling"] = { "" }, ["Zhouzhi"] = { "" }, ["Lantian"] = { "" }, ["Xianyang"] = { "" }, ["Xingping"] = { "" }, ["Wugong"] = { "" }, ["Qianxian"] = { "" }, ["Liquan"] = { "" }, ["Jingyang"] = { "" }, ["Sanyuan-M"] = { "" }, ["Yongshou"] = { "" }, ["Changwu"] = { "" }, ["Tongchuan"] = { "" }, ["Yaozhou"] = { "" }, ["Yijun"] = { "" }, ["Weinan"] = { "" }, ["Weinan-HZ"] = { "" }, ["Hancheng"] = { "" }, ["Huayin"] = { "" }, ["Tongguan"] = { "" }, ["Dali-SX"] = { "" }, ["Heyang"] = { "" }, ["Chengcheng"] = { "" }, ["Baishui"] = { "" }, ["Pucheng-M"] = { "" }, ["Fuping"] = { "" }, ["Huanglong"] = { "" }, ["Yichuan"] = { "" }, ["Huangling"] = { "" }, ["Luochuan"] = { "" }, ["Fuxian"] = { "" }, ["Dingbian"] = { "" }, ["Baoji"] = { "" }, ["Baoji-CC"] = { "" }, ["Fengxiang"] = { "" }, ["Qishan"] = { "" }, ["Fufeng"] = { "" }, ["Meixian-M"] = { "" }, ["Taibai"] = { "" }, ["Fengxian-SX"] = { "" }, ["Qianyang"] = { "" }, ["Longxian"] = { "" }, ["Linyou"] = { "" }, ["Yanchi"] = { "" }, ["Guyuan"] = { "" }, ["Xiji"] = { "" }, ["Longde"] = { "" }, ["Jingyuan"] = { "" }, ["Tianshui"] = { "" }, ["Hezuo"] = { "" }, ["Xining"] = { "" }, ["Menyuan"] = { "" }, ["Yanqi"] = { "" }, ["Dunhuang"] = { "" }, ["Xuzhou"] = { "" }, ["Xuzhou-JW"] = { "" }, ["Pizhou"] = { "" }, ["Suining"] = { "" }, ["Peixian"] = { "" }, ["Xinyi-M"] = { "" }, ["Fengxian-M"] = { "" }, ["Suqian"] = { "" }, ["Ganyu"] = { "" }, ["Donghai"] = { "" }, ["Fuyang"] = { "" }, ["Bengbu"] = { "" }, ["Suzhou-M"] = { "" }, ["Huaibei"] = { "" }, ["Bozhou"] = { "" }, ["Guangde-QC"] = { "" }, ["Qimen-AL-Jun"] = { "" }, ["Anji-HN"] = { "" }, ["Gansu-DG"] = { "" }, ["Shaanxi-DG"] = { "" }, ["Yinchuan"] = { "" }, ["Lingwu"] = { "" }, ["Najiahu"] = { "" }, ["Wuzhong"] = { "" }, ["Tongxin"] = { "" }, ["Zhongwei"] = { "" }, ["Bayanhot"] = { "" }, ["Lanzhou"] = { "" }, ["Jiuquan"] = { "" }, ["Shandan"] = { "" }, ["Wuwei-GS"] = { "" }, ["Wuwei-GS-ZY"] = { "" }, ["Tianzhu"] = { "" }, ["Hami"] = { "" }, ["Changji"] = { "" }, ["Ürümqi"] = { "" }, ["Dabancheng-XG"] = { "" }, ["Midong-CSZ"] = { "" }, ["Ürümqi-BFG"] = { "" }, ["Jimsar"] = { "" }, ["Chengdu"] = { "" }, ["Xindu"] = { "" }, ["Xindu-XF"] = { "" }, ["Huayang"] = { "" }, ["Pidu"] = { "" }, ["Wenjiang"] = { "" }, ["Shuangliu"] = { "" }, ["Xinjin"] = { "" }, ["Jintang"] = { "" }, ["Pengzhou"] = { "" }, ["Dujiangyan"] = { "" }, ["Chongzhou"] = { "" }, ["Dayi"] = { "" }, ["Pujiang-M"] = { "" }, ["Qionglai"] = { "" }, ["Jianyang-M"] = { "" }, ["Xiaojin"] = { "" }, ["Jinchuan"] = { "" }, ["Songpan"] = { "" }, ["Maoxian"] = { "" }, ["Lixian"] = { "" }, ["Wenchuan"] = { "" }, ["Deyang"] = { "" }, ["Luojiang"] = { "" }, ["Mianzhu"] = { "" }, ["Shifang"] = { "" }, ["Guanghan"] = { "" }, ["Zhongjiang"] = { "" }, ["Ziyang-SC"] = { "" }, ["Anyue"] = { "" }, ["Lezhi"] = { "" }, ["Mianyang"] = { "" }, ["Anzhou"] = { "" }, ["Zitong"] = { "" }, ["Jiangyou"] = { "" }, ["Jiangyou-ZM"] = { "" }, ["Pingwu"] = { "" }, ["Beichuan"] = { "" }, ["Yanting"] = { "" }, ["Santai"] = { "" }, ["Guangyuan"] = { "" }, ["Zhaohua"] = { "" }, ["Cangxi"] = { "" }, ["Jiange"] = { "" }, ["Meishan"] = { "" }, ["Pengshan"] = { "" }, ["Danling"] = { "" }, ["Hongya"] = { "" }, ["Qingshen"] = { "" }, ["Renshou"] = { "" }, ["Luzhou"] = { "" }, ["Naxi"] = { "" }, ["Luxian"] = { "" }, ["Xuyong"] = { "" }, ["Gulin"] = { "" }, ["Hejiang"] = { "" }, ["Yibin"] = { "" }, ["Nanxi"] = { "" }, ["Pingshan-M"] = { "" }, ["Gaoxian"] = { "" }, ["Changning-M"] = { "" }, ["Gongxian"] = { "" }, ["Xingwen-GS"] = { "" }, ["Xingwen-BWS"] = { "" }, ["Jiang'an"] = { "" }, ["Junlian"] = { "" }, ["Leshan"] = { "" }, ["Jiajiang"] = { "" }, ["Emeishan"] = { "" }, ["Ebian"] = { "" }, ["Qianwei"] = { "" }, ["Mabian"] = { "" }, ["Jingyan"] = { "" }, ["Neijiang"] = { "" }, ["Zizhong"] = { "" }, ["Weiyuan"] = { "" }, ["Longchang"] = { "" }, ["Suining-SC"] = { "" }, ["Pengxi"] = { "" }, ["Shehong"] = { "" }, ["Guang'an"] = { "" }, ["Yuechi"] = { "" }, ["Wusheng"] = { "" }, ["Linshui"] = { "" }, ["Nanchong"] = { "" }, ["Nanbu"] = { "" }, ["Langzhong"] = { "" }, ["Yilong"] = { "" }, ["Yingshan"] = { "" }, ["Peng'an"] = { "" }, ["Dazhou"] = { "" }, ["Dazhu"] = { "" }, ["Kaijiang"] = { "" }, ["Wanyuan"] = { "" }, ["Xuanhan"] = { "" }, ["Bazhong"] = { "" }, ["Tongjiang"] = { "" }, ["Nanjiang"] = { "" }, ["Hanyuan"] = { "" }, ["Xichang"] = { "" }, ["Zigong"] = { "" }, ["Fushun"] = { "" }, ["Rongxian-M"] = { "" }, ["Muli"] = { "" }, ["Leibo"] = { "" }, ["Chongqing"] = { "" }, ["Chongqing-JB"] = { "" }, ["Chongqing-JLP"] = { "" }, ["Chongqing-DDK"] = { "" }, ["Chongqing-SPB"] = { "" }, ["Chongqing-BN"] = { "" }, ["Chongqing-NA"] = { "" }, ["Chongqing-QIJ"] = { "" }, ["Chongqing-QJ-WS"] = { "" }, ["Chongqing-YB"] = { "" }, ["Chongqing-BB"] = { "" }, ["Chongqing-NC"] = { "" }, ["Chongqing-WL"] = { "" }, ["Chongqing-DZ"] = { "" }, ["Chongqing-RC"] = { "" }, ["Chongqing-YC"] = { "" }, ["Chongqing-BS"] = { "" }, ["Chongqing-TL"] = { "" }, ["Chongqing-TN"] = { "" }, ["Chongqing-HC"] = { "" }, ["Chongqing-CS"] = { "" }, ["Chongqing-FL"] = { "" }, ["Chongqing-JJ"] = { "" }, ["Chongqing-WZ"] = { "" }, ["Chongqing-SZ"] = { "" }, ["Chongqing-KZ"] = { "" }, ["Chongqing-CK"] = { "" }, ["Chongqing-DJ"] = { "" }, ["Chongqing-LP"] = { "" }, ["Chongqing-FD"] = { "" }, ["Chongqing-ZX"] = { "" }, ["Chongqing-QJ"] = { "" }, ["Chongqing-PS"] = { "" }, ["Chongqing-YY"] = { "" }, ["Chongqing-XS"] = { "" }, ["Chongqing-YNY"] = { "" }, ["Chongqing-WX"] = { "" }, ["Chongqing-FJ"] = { "" }, ["Chongqing-WS"] = { "" }, ["Wuhan"] = { "" }, ["Jiangxia"] = { "" }, ["Caidian"] = { "" }, ["Xinzhou-HB"] = { "" }, ["Huangpi"] = { "" }, ["Hanchuan"] = { "" }, ["Suizhou"] = { "" }, ["Suixian"] = { "" }, ["Yichang"] = { "" }, ["Dangyang"] = { "" }, ["Zhijiang"] = { "" }, ["Yidu"] = { "" }, ["Changyang"] = { "" }, ["Xingshan"] = { "" }, ["Zigui"] = { "" }, ["Wufeng"] = { "" }, ["Enshi"] = { "" }, ["Hefeng"] = { "" }, ["Badong"] = { "" }, ["Xuan'en"] = { "" }, ["Laifeng"] = { "" }, ["Lichuan-M"] = { "" }, ["Jianshi"] = { "" }, ["Xianfeng"] = { "" }, ["Xiangyang"] = { "" }, ["Laohekou"] = { "" }, ["Baokang"] = { "" }, ["Nanzhang"] = { "" }, ["Zaoyang"] = { "" }, ["Yicheng"] = { "" }, ["Gucheng"] = { "" }, ["Jingzhou"] = { "" }, ["Jiangling"] = { "" }, ["Shishou"] = { "" }, ["Gong'an"] = { "" }, ["Songzi"] = { "" }, ["Jingmen"] = { "" }, ["Zhongxiang"] = { "" }, ["Jingshan"] = { "" }, ["Tianmen"] = { "" }, ["Xiantao"] = { "" }, ["Qianjiang"] = { "" }, ["Shennongjia"] = { "" }, ["Shiyan"] = { "" }, ["Zhuxi"] = { "" }, ["Zhushan"] = { "" }, ["Yunxi"] = { "" }, ["Yunyang"] = { "" }, ["Danjiangkou"] = { "" }, ["Fangxian"] = { "" }, ["Lhasa"] = { "" }, ["Guiyang"] = { "" }, ["Huaxi"] = { "" }, ["Zunyi"] = { "" }, ["Tongzi"] = { "" }, ["Renhuai"] = { "" }, ["Bijie"] = { "" }, ["Jinsha-M"] = { "" }, ["Dafang"] = { "" }, ["Weining"] = { "" }, ["Liupanshui"] = { "" }, ["Liuzhi"] = { "" }, ["Xingyi"] = { "" }, ["Anshun"] = { "" }, ["Duyun"] = { "" }, ["Pingtang"] = { "" }, ["Fuquan"] = { "" }, ["Weng'an"] = { "" }, ["Kaili"] = { "" }, ["Liping-GZ"] = { "" }, ["Zhenyuan"] = { "" }, ["Tongren"] = { "" }, ["Sinan"] = { "" }, ["Yuping"] = { "" }, ["Liping"] = { "" }, ["Zhaotong"] = { "" }, ["Shuifu"] = { "" }, ["Daguan"] = { "" }, ["Baoshan-M"] = { "" }, ["Dali"] = { "" }, ["Kunming"] = { "" }, ["Qujing"] = { "" }, ["Wenshan"] = { "" }, ["Mengzi"] = { "" }, ["Lancang"] = { "" }, ["Weixi"] = { "" }, ["Pu'er"] = { "" }, ["Lincang"] = { "" }, ["Guilin"] = { "" }, ["Lingui"] = { "" }, ["Guanyang"] = { "" }, ["Lipu"] = { "" }, ["Pingle"] = { "" }, ["Yangshuo"] = { "" }, ["Liuzhou"] = { "" }, ["Liuzhou-LR"] = { "" }, ["Luzhai"] = { "" }, ["Sanjiang-DZ"] = { "" }, ["Nanning-M"] = { "" }, ["Yongning-FJ"] = { "" }, ["Wuming"] = { "" }, ["Wuming-FC"] = { "" }, ["Binyang-M"] = { "" }, ["Shanglin"] = { "" }, ["Yizhou"] = { "" }, ["Jinchengjiang"] = { "" }, ["Luocheng"] = { "" }, ["Fengshan"] = { "" }, ["Tianlin-LP"] = { "" }, ["Tianlin-PT"] = { "" }, ["Leye"] = { "" }, ["Lingyun"] = { "" }, ["Longlin"] = { "" }, ["Xilin"] = { "" }, ["Xiangzhou-NL"] = { "" }, ["Jishou"] = { "" }, ["Changde"] = { "" }, ["Zhangjiajie"] = { "" }, ["Yongzhou"] = { "" }, ["Chenzhou"] = { "" }, ["Huaihua"] = { "" }, ["Huitong"] = { "" }, ["Xiangtan-JN"] = { "" }, ["Ganzhou-M"] = { "" }, ["Shiquan"] = { "" }, ["Ziyang"] = { "" }, ["Ningshan"] = { "" }, ["Langao"] = { "" }, ["Zhenping"] = { "" }, ["Hanzhong"] = { "" }, ["Nanzheng"] = { "" }, ["Ningqiang"] = { "" }, ["Liuba"] = { "" }, ["Chenggu"] = { "" }, ["Foping"] = { "" }, ["Xixiang"] = { "" }, ["Zhenba"] = { "" }, ["Anji-HB"] = { "" }, ["Kokang"] = { "" }, ["Dagudi"] = { "" }, ["Reshuitang"] = { "" }, ["Mae Salong"] = { "" }, ["Mae Sai"] = { "" }, ["Oudomxay"] = { "" }, ["Siantar"] = { "" }, ["Nanjing"] = { "" }, ["Pukou"] = { "" }, ["Luhe-M"] = { "" }, ["Lishui-M"] = { "" }, ["Yangzhou"] = { "" }, ["Jiangdu"] = { "" }, ["Baoying"] = { "" }, ["Gaoyou"] = { "" }, ["Yizheng"] = { "" }, ["Taizhou-M"] = { "" }, ["Taixing"] = { "" }, ["Jiangyan"] = { "" }, ["Jingjiang-DX"] = { "" }, ["Zhenjiang"] = { "" }, ["Jurong"] = { "" }, ["Yangzhong"] = { "" }, ["Jintan-XG"] = { "" }, ["Lianyungang"] = { "" }, ["Haizhou"] = { "" }, ["Guanyun"] = { "" }, ["Guannan"] = { "" }, ["Huai'an"] = { "" }, ["Huai'an-HA"] = { "" }, ["Huaiyin"] = { "" }, ["Hongze"] = { "" }, ["Lianshui"] = { "" }, ["Xuyi"] = { "" }, ["Jinhu"] = { "" }, ["Xinghua"] = { "" }, ["Nantong"] = { "" }, ["Rugao"] = { "" }, ["Rudong"] = { "" }, ["Hai'an"] = { "" }, ["Yancheng"] = { "" }, ["Dongtai"] = { "" }, ["Binhai"] = { "" }, ["Sheyang"] = { "" }, ["Dafeng"] = { "" }, ["Funing"] = { "" }, ["Jianhu"] = { "" }, ["Xiangshui"] = { "" }, ["Shuyang"] = { "" }, ["Sihong"] = { "" }, ["Siyang"] = { "" }, ["Anqing"] = { "" }, ["Tongcheng"] = { "" }, ["Zongyang"] = { "" }, ["Chizhou"] = { "" }, ["Qingyang"] = { "" }, ["Wuhu"] = { "" }, ["Wuhu-QS"] = { "" }, ["Wanzhi"] = { "" }, ["Jinghu"] = { "" }, ["Fanchang"] = { "" }, ["Wuwei"] = { "" }, ["Hanshan"] = { "" }, ["Hexian"] = { "" }, ["Ma'anshan"] = { "" }, ["Dangtu"] = { "" }, ["Xuancheng"] = { "" }, ["Langxi"] = { "" }, ["Guangde"] = { "" }, ["Tongling"] = { "" }, ["Hefei"] = { "" }, ["Feidong"] = { "" }, ["Feixi"] = { "" }, ["Chaohu"] = { "" }, ["Lujiang"] = { "" }, ["Changfeng"] = { "" }, ["Huainan"] = { "" }, ["Lu'an"] = { "" }, ["Jin'an-QSH"] = { "" }, ["Shucheng"] = { "" }, ["Huoshan"] = { "" }, ["Chuzhou"] = { "" }, ["Lai'an"] = { "" }, ["Quanjiao"] = { "" }, ["Mingguang"] = { "" }, ["Tianchang"] = { "" }, ["Echeng"] = { "" }, ["Huangshi"] = { "" }, ["Huanggang"] = { "" }, ["Hong'an"] = { "" }, ["Macheng"] = { "" }, ["Luotian"] = { "" }, ["Yingshan-HB"] = { "" }, ["Xishui"] = { "" }, ["Huangmei"] = { "" }, ["Wuxue"] = { "" }, ["Qichun"] = { "" }, ["Xiaogan"] = { "" }, ["Anlu"] = { "" }, ["Yingcheng"] = { "" }, ["Yunmeng"] = { "" }, ["Dawu"] = { "" }, ["Guangshui"] = { "" }, ["Zhashui"] = { "" }, ["Jiujiang"] = { "" }, ["Ruichang"] = { "" }, ["Anji-AQ"] = { "" }, ["Jinhua-M-SDJ"] = { "" }, ["Dianbai-Jun"] = { "" }, ["Qinzhou-M"] = { "" }, ["Pinghai-Jun"] = { "" }, ["Ningguo-GK"] = { "" }, ["Changle-QJ"] = { "" }, ["Yanping"] = { "" }, ["Wuping-ZS-Jun"] = { "" }, ["Jiangshan-M-NBD"] = { "" }, ["Kaihua-M-HB"] = { "" }, ["Yushan-M-HY"] = { "" }, ["Juexi"] = { "" }, ["Taiyuan"] = { "" }, ["Jiancaoping"] = { "" }, ["Jinyuan"] = { "" }, ["Qingxu"] = { "" }, ["Loufan"] = { "" }, ["Taigu"] = { "" }, ["Pingyao"] = { "" }, ["Heshun"] = { "" }, ["Qixian"] = { "" }, ["Yangyuan"] = { "" }, ["Datong"] = { "" }, ["Yunzhou"] = { "" }, ["Yunzhou-XCT"] = { "" }, ["Tianzhen"] = { "" }, ["Guangling"] = { "" }, ["Shuozhou"] = { "" }, ["Shanyin"] = { "" }, ["Pinglu"] = { "" }, ["Pingding"] = { "" }, ["Xinzhou"] = { "" }, ["Wutai"] = { "" }, ["Daixian"] = { "" }, ["Wuzhai"] = { "" }, ["Lishi"] = { "" }, ["Shilou"] = { "" }, ["Fenyang"] = { "" }, ["Lanxian"] = { "" }, ["Linxian"] = { "" }, ["Wenshui"] = { "" }, ["Xiaoyi"] = { "" }, ["Fenxi"] = { "" }, ["Xixian"] = { "" }, ["Changzhi"] = { "" }, ["Tunliu"] = { "" }, ["Shangdang"] = { "" }, ["Baochang"] = { "" }, ["Linhe"] = { "" }, ["Pingshun"] = { "" }, ["Zhangzi"] = { "" }, ["Qinxian"] = { "" }, ["Jincheng"] = { "" }, ["Lingchuan"] = { "" }, ["Yangcheng"] = { "" }, ["Gaoping"] = { "" }, ["Jining"] = { "" }, ["Liangcheng"] = { "" }, ["Hohhot"] = { "" }, ["Baotou"] = { "" }, ["Dongsheng"] = { "" }, ["Haibowan"] = { "" }, ["Erenhot"] = { "" }, ["Pingshan"] = { "" }, ["Luquan"] = { "" }, ["Zhangjiakou"] = { "" }, ["Chongli"] = { "" }, ["Handan"] = { "" }, ["Linzhang"] = { "" }, ["Anyang"] = { "" }, ["Linzhou"] = { "" }, ["Hebi"] = { "" }, ["Xinxiang"] = { "" }, ["Huojia"] = { "" }, ["Jiaozuo"] = { "" }, ["Qinyang"] = { "" }, ["Wenxian"] = { "" }, ["Wuzhi"] = { "" }, ["Jiyuan"] = { "" }, ["Suide"] = { "" }, ["Zizhou"] = { "" }, ["Mizhi"] = { "" }, ["Jiaxian"] = { "" }, ["Wubu"] = { "" }, ["Shenmu"] = { "" }, ["Fugu"] = { "" }, ["Yulin-J"] = { "" }, ["Hengshan-J"] = { "" }, ["Jingbian"] = { "" }, ["Yan'an"] = { "" }, ["Ansai"] = { "" }, ["Ganquan"] = { "" }, ["Zhidan"] = { "" }, ["Wuqi-J"] = { "" }, ["Qingjian"] = { "" }, ["Zichang"] = { "" }, ["Yanchuan"] = { "" }, ["Yanchang"] = { "" }, ["Shanghai"] = { "" }, ["Yangpu"] = { "" }, ["Xinzhuang"] = { "" }, ["Zhenru"] = { "" }, ["Songjiang"] = { "" }, ["Chuansha"] = { "" }, ["Nanhui"] = { "" }, ["Zhoupu"] = { "" }, ["Huinan"] = { "" }, ["Fengxian"] = { "" }, ["Jinshan"] = { "" }, ["Qingpu"] = { "" }, ["Jiading"] = { "" }, ["Baoshan-SCD"] = { "" }, ["Baoshan-LD"] = { "" }, ["Baoshan-YP"] = { "" }, ["Chongming"] = { "" }, ["Suzhou"] = { "" }, ["Shengpu"] = { "" }, ["Xishan"] = { "" }, ["Wujiang-SL"] = { "" }, ["Wujiang-LL"] = { "" }, ["Wujiang-SZ"] = { "" }, ["Wuxi"] = { "" }, ["Changshu"] = { "" }, ["Kunshan"] = { "" }, ["Taicang"] = { "" }, ["Zhangjiagang"] = { "" }, ["Tongzhou"] = { "" }, ["Qidong"] = { "" }, ["Qidong-LS"] = { "" }, ["Haimen"] = { "" }, ["Haimen-SJ"] = { "" }, ["Rudong-W"] = { "" }, ["Jiaxing"] = { "" }, ["Jiashan"] = { "" }, ["Pinghu"] = { "" }, ["Haining-YG"] = { "" }, ["Haining-XS"] = { "" }, ["Tongxiang"] = { "" }, ["Haiyan"] = { "" }, ["Changzhou"] = { "" }, ["Liyang"] = { "" }, ["Jintan"] = { "" }, ["Yixing"] = { "" }, ["Danyang"] = { "" }, ["Danyang-TJQ"] = { "" }, ["Jingjiang"] = { "" }, ["Jiangyin"] = { "" }, ["Gaochun"] = { "" }, ["Gaochun-ZB"] = { "" }, ["Huzhou"] = { "" }, ["Huzhou-SL"] = { "" }, ["Changxing"] = { "" }, ["Anji"] = { "" }, ["Anji-XF"] = { "" }, ["Deqing-W"] = { "" }, ["Deqing-GT"] = { "" }, ["Hangzhou"] = { "" }, ["Yuhang"] = { "" }, ["Lin'an"] = { "" }, ["Lin'an-CH"] = { "" }, ["Lin'an-YQ"] = { "" }, ["Fuyang-W"] = { "" }, ["Fuyang-XD"] = { "" }, ["Xiaoshan"] = { "" }, ["Tonglu"] = { "" }, ["Fenshui-WS"] = { "" }, ["Shaoxing"] = { "" }, ["Shaoxing-KQ"] = { "" }, ["Shangyu"] = { "" }, ["Zhuji"] = { "" }, ["Zhuji-WJJ"] = { "" }, ["Shengzhou"] = { "" }, ["Shengzhou-CR"] = { "" }, ["Shengzhou-TP"] = { "" }, ["Xinchang"] = { "" }, ["Ningbo"] = { "" }, ["Zhenhai"] = { "" }, ["Fenghua"] = { "" }, ["Beilun"] = { "" }, ["Yinzhou"] = { "" }, ["Yuyao"] = { "" }, ["Cixi"] = { "" }, ["Xiangshan"] = { "" }, ["Ninghai"] = { "" }, ["Zhoushan"] = { "" }, ["Dinghai"] = { "" }, ["Daishan"] = { "" }, ["Shengsi"] = { "" }, ["Jiaojiang"] = { "" }, ["Huangyan"] = { "" }, ["Tiantai"] = { "" }, ["Xianju"] = { "" }, ["Sanmen"] = { "" }, ["Linhai"] = { "" }, ["Wenling"] = { "" }, ["Yuhuan"] = { "" }, ["Yuhuan-DMY"] = { "" }, ["Yuhuan-CM"] = { "" }, ["Wenzhou"] = { "" }, ["Yueqing"] = { "" }, ["Yongjia"] = { "" }, ["Yongjia-FL"] = { "" }, ["Rui'an"] = { "" }, ["Longgang"] = { "" }, ["Dongtou"] = { "" }, ["Cangnan-HS"] = { "" }, ["Cangnan-JX"] = { "" }, ["Cangnan-PC"] = { "" }, ["Pingyang"] = { "" }, ["Taishun"] = { "" }, ["Wencheng"] = { "" }, ["Lishui"] = { "" }, ["Qingtian"] = { "" }, ["Jinyun"] = { "" }, ["Xuanping"] = { "" }, ["Songyang-XP"] = { "" }, ["Songyang-GS"] = { "" }, ["Yunhe"] = { "" }, ["Jingning"] = { "" }, ["Qingyuan-W"] = { "" }, ["Longquan"] = { "" }, ["Quzhou"] = { "" }, ["Qujiang-DZ"] = { "" }, ["Suichang"] = { "" }, ["Jiangshan"] = { "" }, ["Changshan"] = { "" }, ["Kaihua"] = { "" }, ["Longyou"] = { "" }, ["Jinhua"] = { "" }, ["Tangxi"] = { "" }, ["Yiwu"] = { "" }, ["Yongkang"] = { "" }, ["Pujiang"] = { "" }, ["Dongyang"] = { "" }, ["Pan'an"] = { "" }, ["Wuyi"] = { "" }, ["Lanxi"] = { "" }, ["Shangrao"] = { "" }, ["Shangrao-Rail"] = { "" }, ["Shangrao-ZF"] = { "" }, ["Guangfeng"] = { "" }, ["Yushan"] = { "" }, ["Yanshan-JC"] = { "" }, ["Hengfeng-GY"] = { "" }, ["Xuancheng-YC"] = { "" }, ["Xuancheng-JP"] = { "" }, ["Wuhu-LL"] = { "" }, ["Tongling-W"] = { "" }, ["Nanling"] = { "" }, ["Yi'an-WS"] = { "" }, ["Huangshan"] = { "" }, ["Jingxian"] = { "" }, ["Jingxian-ZJ"] = { "" }, ["Shitai-JZ"] = { "" }, ["Pucheng"] = { "" }, ["Changsha"] = { "" }, ["Yiyang-X"] = { "" }, ["Liuyang-YA"] = { "" }, ["Xiangtan"] = { "" }, ["Xiangtan-CES"] = { "" }, ["Miluo-CL"] = { "" }, ["Xiangxiang"] = { "" }, ["Xiangxiang-MQ"] = { "" }, ["Loudi"] = { "" }, ["Shuangfeng"] = { "" }, ["Xinhua"] = { "" }, ["Lianyuan"] = { "" }, ["Shaoyang"] = { "" }, ["Lengshuitan"] = { "" }, ["Zhuzhou"] = { "" }, ["Longhui"] = { "" }, ["Suining-X"] = { "" }, ["Dongkou-HQ"] = { "" }, ["Wugang"] = { "" }, ["Hengyang"] = { "" }, ["Hengyang County"] = { "" }, ["Hengshan"] = { "" }, ["Hengshan-BG"] = { "" }, ["Qiyang"] = { "" }, ["Quanzhou-X"] = { "" }, ["Guanyang-X"] = { "" }, ["Qinglong-CL"] = { "" }, ["Nanchong-CL"] = { "" }, ["Nanchang"] = { "" }, ["Xinjian-WC"] = { "" }, ["Nanchang-TC"] = { "" }, ["Anyi"] = { "" }, ["Hukou"] = { "" }, ["Lushan"] = { "" }, ["Yongxiu"] = { "" }, ["Gongqingcheng-JY"] = { "" }, ["Xiushui"] = { "" }, ["Pengze"] = { "" }, ["Duchang"] = { "" }, ["Duchang-TT"] = { "" }, ["Duchang-YF"] = { "" }, ["Wuning-QK"] = { "" }, ["Poyang"] = { "" }, ["Poyang-MT"] = { "" }, ["Yugan"] = { "" }, ["Wannian"] = { "" }, ["Yiyang"] = { "" }, ["Hengfeng"] = { "" }, ["Yanshan-HK"] = { "" }, ["Yanshan-YP"] = { "" }, ["Shangrao-SX"] = { "" }, ["Shangrao-HM"] = { "" }, ["Yushan-G"] = { "" }, ["Jingdezhen"] = { "" }, ["Leping"] = { "" }, ["Yichun"] = { "" }, ["Yifeng"] = { "" }, ["Gao'an"] = { "" }, ["Fengxin"] = { "" }, ["Shanggao"] = { "" }, ["Wanzai"] = { "" }, ["Fengcheng"] = { "" }, ["Fengcheng-ST"] = { "" }, ["Xinyu"] = { "" }, ["Fuzhou-G"] = { "" }, ["Linchuan-SDD"] = { "" }, ["Dongxiang"] = { "" }, ["Nancheng"] = { "" }, ["Nanfeng"] = { "" }, ["Yihuang"] = { "" }, ["Lichuan"] = { "" }, ["Chongren"] = { "" }, ["Pingxiang"] = { "" }, ["Lianhua"] = { "" }, ["Luxi"] = { "" }, ["Ji'an"] = { "" }, ["Jishui-LT"] = { "" }, ["Yongfeng"] = { "" }, ["Taihe"] = { "" }, ["Xiajiang"] = { "" }, ["Yongxin"] = { "" }, ["Yingtan"] = { "" }, ["Yujiang"] = { "" }, ["Guixi"] = { "" }, ["Susong"] = { "" }, ["Susong-HT"] = { "" }, ["Susong-GL"] = { "" }, ["Wangjiang"] = { "" }, ["Qianshan"] = { "" }, ["Huaining"] = { "" }, ["Huaining-SP"] = { "" }, ["Yuexi"] = { "" }, ["Taihu"] = { "" }, ["Dongzhi"] = { "" }, ["Shitai"] = { "" }, ["Yangxin"] = { "" }, ["Yangxin-GH"] = { "" }, ["Daye"] = { "" }, ["Xianning"] = { "" }, ["Xianning-MQ"] = { "" }, ["Jiayu"] = { "" }, ["Chongyang"] = { "" }, ["Chibi"] = { "" }, ["Tongshan"] = { "" }, ["Tongcheng-G"] = { "" }, ["Jianli"] = { "" }, ["Yueyang"] = { "" }, ["Yueyang-BX"] = { "" }, ["Linxiang"] = { "" }, ["Pingjiang-XJ"] = { "" }, ["Pingjiang-NJ"] = { "" }, ["Liuyang"] = { "" }, ["Liuyang-DY"] = { "" }, ["Liuyang-FY"] = { "" }, ["Liling-BTT"] = { "" }, ["Liling-BS"] = { "" }, ["Youxian"] = { "" }, ["Chaling"] = { "" }, ["Changning"] = { "" }, ["Changning-TS"] = { "" }, ["Leiyang"] = { "" }, ["Anren"] = { "" }, ["Zixing-XN"] = { "" }, ["Longhui-LDZ"] = { "" }, ["Dongkou"] = { "" }, ["Dongkou-SJ"] = { "" }, ["Jianning"] = { "" }, ["Taining"] = { "" }, ["Hanbin-NT"] = { "" }, ["Jinxian"] = { "" }, ["Jinxi"] = { "" }, ["Le'an"] = { "" }, ["Guangchang"] = { "" }, ["Anfu"] = { "" }, ["Suichuan"] = { "" }, ["Wan'an"] = { "" }, ["Jing'an"] = { "" }, ["Zhangshu"] = { "" }, ["Xingan"] = { "" }, ["Fenyi"] = { "" }, ["Meixian"] = { "" }, ["Xingning"] = { "" }, ["Dabu"] = { "" }, ["Dabu-XH"] = { "" }, ["Dabu-TY"] = { "" }, ["Dabu-GB"] = { "" }, ["Fengshun-TK"] = { "" }, ["Fengshun-LH"] = { "" }, ["Fengshun-HJ"] = { "" }, ["Fengshun-FL"] = { "" }, ["Fengshun-PT"] = { "" }, ["Huizhou"] = { "" }, ["Huizhou-SK"] = { "" }, ["Huizhou-HL"] = { "" }, ["Huiyang"] = { "" }, ["Huidong-PS"] = { "" }, ["Huidong-DL"] = { "" }, ["Dongguan-H"] = { "" }, ["Longmen-PL"] = { "" }, ["Longmen-LX"] = { "" }, ["Boluo"] = { "" }, ["Shenzhen-H"] = { "" }, ["Shenzhen-H-LH"] = { "" }, ["Shenzhen-HG"] = { "" }, ["Zengcheng-ZG"] = { "" }, ["Zhongshan-WGS"] = { "" }, ["Zhongshan-NLHS"] = { "" }, ["Wuhua-SZ"] = { "" }, ["Wuhua-HC"] = { "" }, ["Wuhua-CB"] = { "" }, ["Wuhua-MY"] = { "" }, ["Wuhua-ML"] = { "" }, ["Heyuan"] = { "" }, ["Zijin"] = { "" }, ["Zijin-GZ"] = { "" }, ["Longchuan-TC"] = { "" }, ["Longchuan-SD"] = { "" }, ["Heping-LZ"] = { "" }, ["Lianping"] = { "" }, ["Lianping-ZX"] = { "" }, ["Lianping-LJ"] = { "" }, ["Wengyuan"] = { "" }, ["Nanxiong-ZJ"] = { "" }, ["Qujiang"] = { "" }, ["Lechang-MH"] = { "" }, ["Xinfeng-MT"] = { "" }, ["Xinfeng-DX"] = { "" }, ["Xiaosanjiang"] = { "" }, ["Liannan"] = { "" }, ["Conghua-H"] = { "" }, ["Jiexi"] = { "" }, ["Jiexi-HZ"] = { "" }, ["Luhe"] = { "" }, ["Raoping-XF"] = { "" }, ["Xiuzhuan"] = { "" }, ["Pinghe-JF"] = { "" }, ["Nanjing-ML"] = { "" }, ["Nanjing-BL"] = { "" }, ["Changting"] = { "" }, ["Shanghang"] = { "" }, ["Shanghang-GT"] = { "" }, ["Yongding"] = { "" }, ["Yongding-XY"] = { "" }, ["Yongding-GB"] = { "" }, ["Yongding-HK"] = { "" }, ["Longyan-WA"] = { "" }, ["Wuping"] = { "" }, ["Wuping-ZS"] = { "" }, ["Wuping-Y"] = { "" }, ["Wuping-WD"] = { "" }, ["Pingyu"] = { "" }, ["Liancheng"] = { "" }, ["Liancheng-PT"] = { "" }, ["Liancheng-JX"] = { "" }, ["Liancheng-ZB"] = { "" }, ["Liancheng-LY"] = { "" }, ["Ninghua"] = { "" }, ["Qingliu"] = { "" }, ["Yudu"] = { "" }, ["Ningdu"] = { "" }, ["Ruijin"] = { "" }, ["Shicheng"] = { "" }, ["Shangyou"] = { "" }, ["Sandu"] = { "" }, ["Ganzhou-PL"] = { "" }, ["Nankang"] = { "" }, ["Dayu"] = { "" }, ["Quannan"] = { "" }, ["Dingnan"] = { "" }, ["Longnan"] = { "" }, ["Xunwu"] = { "" }, ["Anyuan"] = { "" }, ["Huichang"] = { "" }, ["Chongyi"] = { "" }, ["Xingguo"] = { "" }, ["Yunhe-JST"] = { "" }, ["Tonggu"] = { "" }, ["Fengxin-ZX"] = { "" }, ["Miaoli"] = { "" }, ["Zaoqiao"] = { "" }, ["Touwu"] = { "" }, ["Nanzhuang"] = { "" }, ["Shitan"] = { "" }, ["Sanwan"] = { "" }, ["Toufen"] = { "" }, ["Gongguan"] = { "" }, ["Taoyuan"] = { "" }, ["Longtan"] = { "" }, ["Zhuolan-SX"] = { "" }, ["Guanxi"] = { "" }, ["Changhua-PT"] = { "" }, ["Liudui"] = { "" }, ["Wuluo"] = { "" }, ["Daluguan"] = { "" }, ["Jiadong"] = { "" }, ["Meinong"] = { "" }, ["Shanlin"] = { "" }, ["Hsinchu"] = { "" }, ["Guanxi-DP"] = { "" }, ["Guanxi-LQW"] = { "" }, ["Xinwu-HL"] = { "" }, ["Dongshi"] = { "" }, ["Raoping"] = { "" }, ["Guanxi-RP"] = { "" }, ["Hukou-RP"] = { "" }, ["Liujia-RP"] = { "" }, ["Zhongli-ZB-RP"] = { "" }, ["Zhongli-XN-RP"] = { "" }, ["Zhongli-GL-RP"] = { "" }, ["Pingzhen-NS-RP"] = { "" }, ["Xinwu-TZ-RP"] = { "" }, ["Guanyin-XP-RP"] = { "" }, ["Zhuolan-RP"] = { "" }, ["Yunlin"] = { "" }, ["Daxi"] = { "" }, ["Guoxing"] = { "" }, ["Hong Kong-H"] = { "" }, ["Tangkou"] = { "" }, ["Sanjia"] = { "" }, ["Sihe"] = { "" }, ["Qianpai"] = { "" }, ["Xindong"] = { "" }, ["Shalang"] = { "" }, ["Xin'an"] = { "" }, ["Shijiao"] = { "" }, ["Qingping"] = { "" }, ["Xihe"] = { "" }, ["Fumian-XS"] = { "" }, ["Luchuan-LC"] = { "" }, ["Luchuan-DQ"] = { "" }, ["Luchuan-SH"] = { "" }, ["Luchuan-WS"] = { "" }, ["Bobai-SH"] = { "" }, ["Bobai-LT"] = { "" }, ["Bobai-LP"] = { "" }, ["Bobai-LJ"] = { "" }, ["Bobai-CT"] = { "" }, ["Tang'an"] = { "" }, ["Beiliu-GH"] = { "" }, ["Beiliu-MM"] = { "" }, ["Xingye-GF"] = { "" }, ["Rongxian-XD"] = { "" }, ["Mashan-PL"] = { "" }, ["Binyang-WL"] = { "" }, ["Hengxian-XY"] = { "" }, ["Guigang-H-WL"] = { "" }, ["Guigang-H-QX"] = { "" }, ["Guigang-H-BT"] = { "" }, ["Guiping-H-JT"] = { "" }, ["Guiping-H-DX"] = { "" }, ["Pingnan-H-GA"] = { "" }, ["Lingui-H-XJ"] = { "" }, ["Lipu-SDT"] = { "" }, ["Lipu-DSG"] = { "" }, ["Pingle-H"] = { "" }, ["Yangshuo-JB"] = { "" }, ["Tianlin-GL"] = { "" }, ["Qinzhou-H"] = { "" }, ["Guidong"] = { "" }, ["Rongchang-PL"] = { "" }, ["Chengdu-H-LT"] = { "" }, ["Longquanyi-H-SL"] = { "" }, ["Qingbaijiang-H-LW"] = { "" }, ["Xindu-H-SBT"] = { "" }, ["Xindu-H-HXC"] = { "" }, ["Xindu-H-XD"] = { "" }, ["Weiyuan-H"] = { "" }, ["Yilong-H"] = { "" }, ["Xichang-H"] = { "" }, ["Sabah-B"] = { "" }, ["Sabah-L"] = { "" }, ["Sabah-HY"] = { "" }, ["Sabah-HP"] = { "" }, ["Kuala Lumpur-H-HY"] = { "" }, ["Kuala Lumpur-H"] = { "" }, ["Senai"] = { "" }, ["Senai-JX"] = { "" }, ["Kuching"] = { "" }, ["Sungai Tapang"] = { "" }, ["Singkawang"] = { "" }, ["Pontianak-MX"] = { "" }, ["Mempawah"] = { "" }, ["Metal"] = { "" }, ["Singapore-MX"] = { "" }, ["Singapore-DB"] = { "" }, ["Belait-H"] = { "" }, ["Bangkok-MX"] = { "" }, ["Bangkok-FS"] = { "" }, ["Bangkok-JX"] = { "" }, ["Yangon-H"] = { "" }, ["Ho Chi Minh City-H"] = { "" }, ["Jixi"] = { "" }, ["Shexian"] = { "" }, ["Shexian-XG"] = { "" }, ["Shexian-DGY"] = { "" }, ["Shexian-SY"] = { "" }, ["Tunxi"] = { "" }, ["Huizhou-HZ"] = { "" }, ["Xiuning"] = { "" }, ["Yixian"] = { "" }, ["Qimen"] = { "" }, ["Qimen-AL-Min"] = { "" }, ["Wuyuan"] = { "" }, ["Wuyuan-QK"] = { "" }, ["Wuyuan-JW"] = { "" }, ["Fuliang"] = { "" }, ["Fuliang-EH"] = { "" }, ["Dexing"] = { "" }, ["Dexing-ZC"] = { "" }, ["Jingde"] = { "" }, ["Zhanda"] = { "" }, ["Chun'an"] = { "" }, ["Sui'an"] = { "" }, ["Jiande"] = { "" }, ["Shouchang"] = { "" }, ["Guangzhou"] = { "" }, ["Hong Kong"] = { "楓糖漿", "楓葉糖漿" }, ["HK Weitou"] = { "" }, ["Kam Tin"] = { "" }, ["Shek Pik"] = { "" }, ["Ting Kok"] = { "" }, ["Tung Ping Chau"] = { "" }, ["Sam Mun Tsai"] = { "" }, ["Macau"] = { "" }, ["Macau-Tanka"] = { "" }, ["Guangzhou-XJ"] = { "" }, ["Guangzhou-LX"] = { "" }, ["Guangzhou-HP"] = { "" }, ["Luogang"] = { "" }, ["Guangzhou-LH"] = { "" }, ["Guangzhou-MT"] = { "" }, ["Guangzhou-JS"] = { "" }, ["Guangzhou-XS"] = { "" }, ["Guangzhou-SJ"] = { "" }, ["Guangzhou-JC"] = { "" }, ["Guangzhou-LG"] = { "" }, ["Guangzhou-RH"] = { "" }, ["Guangzhou-ZL"] = { "" }, ["Guangzhou-ZLT"] = { "" }, ["Guangzhou-JF"] = { "" }, ["Panyu"] = { "" }, ["Huadu"] = { "" }, ["Conghua"] = { "" }, ["Zengcheng"] = { "" }, ["Zengcheng-XT"] = { "" }, ["Foshan"] = { "" }, ["Nanhai"] = { "" }, ["Shunde"] = { "" }, ["Sanshui"] = { "" }, ["Gaoming"] = { "" }, ["Zhongshan"] = { "" }, ["Zhongshan-HC"] = { "" }, ["Zhongshan-NL"] = { "" }, ["Zhongshan-CKM"] = { "" }, ["Zhongshan-XL"] = { "" }, ["Zhongshan-DS"] = { "" }, ["Zhongshan-TB"] = { "" }, ["Zhongshan-HL"] = { "" }, ["Zhongshan-DF"] = { "" }, ["Zhongshan-NT"] = { "" }, ["Zhongshan-FS"] = { "" }, ["Zhongshan-SL"] = { "" }, ["Zhongshan-GK"] = { "" }, ["Zhongshan-HP"] = { "" }, ["Zhongshan-SJ"] = { "" }, ["Zhongshan-LW"] = { "" }, ["Zhongshan-MZ"] = { "" }, ["Zhongshan-GZ"] = { "" }, ["Zhongshan-BF"] = { "" }, ["Zhongshan-TZ"] = { "" }, ["Zhongshan-TG"] = { "" }, ["Zhuhai"] = { "" }, ["Zhuhai-TJW"] = { "" }, ["Doumen-T"] = { "" }, ["Doumen-S"] = { "" }, ["Jiangmen"] = { "" }, ["Xinhui"] = { "" }, ["Taishan"] = { "" }, ["Taishan-GH"] = { "" }, ["Kaiping"] = { "" }, ["Enping"] = { "" }, ["Heshan"] = { "" }, ["Heshan-SP"] = { "" }, ["Malan"] = { "" }, ["Malan-BTQ"] = { "" }, ["Malan-MHD"] = { "" }, ["Malan-SZP"] = { "" }, ["Malan-BLH"] = { "" }, ["Dongguan"] = { "" }, ["Shenzhen-C-LH"] = { "" }, ["Shenzhen-NT"] = { "" }, ["Shenzhen-XX"] = { "" }, ["Bao'an"] = { "" }, ["Yantian"] = { "" }, ["Dapeng"] = { "" }, ["Shenzhen-PD"] = { "" }, ["Pingshan-ZM"] = { "" }, ["Ebu-ZM"] = { "" }, ["Longmen"] = { "" }, ["Qingyuan"] = { "" }, ["Fogang"] = { "" }, ["Yingde"] = { "" }, ["Yangshan"] = { "" }, ["Lianshan"] = { "" }, ["Lianshan-YH"] = { "" }, ["Lianzhou"] = { "" }, ["Shaoguan"] = { "" }, ["Qujiang-C"] = { "" }, ["Renhua"] = { "" }, ["Lechang"] = { "" }, ["Gaoyao"] = { "" }, ["Sihui"] = { "" }, ["Guangning"] = { "" }, ["Deqing"] = { "" }, ["Huaiji"] = { "" }, ["Huaiji-LC"] = { "" }, ["Fengkai"] = { "" }, ["Fengkai-JK"] = { "" }, ["Fengkai-LD"] = { "" }, ["Yunfu"] = { "" }, ["Xinxing"] = { "" }, ["Luoding"] = { "" }, ["Luoding-SL"] = { "" }, ["Yunan"] = { "" }, ["Yangjiang"] = { "" }, ["Yangdong"] = { "" }, ["Yangdong-YS"] = { "" }, ["Yangchun"] = { "" }, ["Yangxi"] = { "" }, ["Xinyi"] = { "" }, ["Maoming"] = { "" }, ["Maoming-YJ"] = { "" }, ["Gaozhou"] = { "" }, ["Huazhou"] = { "" }, ["Huazhou-CQ"] = { "" }, ["Zhanjiang"] = { "" }, ["Lianjiang"] = { "" }, ["Lianjiang-CB"] = { "" }, ["Wuchuan"] = { "" }, ["Wuchuan-ML"] = { "" }, ["Nanning"] = { "" }, ["Nanning-Tanka"] = { "" }, ["Wuzhou"] = { "" }, ["Wuzhou-LX"] = { "" }, ["Cangwu-SQ"] = { "" }, ["Cangwu-LB"] = { "" }, ["Tengxian"] = { "" }, ["Yulin"] = { "" }, ["Rongxian"] = { "" }, ["Hepu"] = { "" }, ["Hepu-ST"] = { "" }, ["Guiping"] = { "" }, ["Guiping-JT"] = { "" }, ["Guiping-JK"] = { "" }, ["Guiping-MD"] = { "" }, ["Guiping-ML"] = { "" }, ["Pingnan-PN"] = { "" }, ["Pingnan-DZ"] = { "" }, ["Pingnan-GC"] = { "" }, ["Mengshan"] = { "" }, ["Mengshan-XX"] = { "" }, ["Mengshan-CT"] = { "" }, ["Guigang-GC"] = { "" }, ["Guigang-NJ"] = { "" }, ["Guigang-PD"] = { "" }, ["Beiliu"] = { "" }, ["Beiliu-TL"] = { "" }, ["Beiliu-XC"] = { "" }, ["Baise"] = { "" }, ["Tiandong"] = { "" }, ["Tiandong-LF"] = { "" }, ["Tianyang"] = { "" }, ["Pingguo"] = { "" }, ["Pingguo-SX"] = { "" }, ["Bobai"] = { "" }, ["Lingshan"] = { "" }, ["Pubei"] = { "" }, ["Qinzhou"] = { "" }, ["Qinzhou-XD"] = { "" }, ["Qinzhou-CT"] = { "" }, ["Qinzhou-NS"] = { "" }, ["Qinzhou-XNJ"] = { "" }, ["Beihai"] = { "" }, ["Beihai-NK"] = { "" }, ["Beihai-YP"] = { "" }, ["Beihai-QG"] = { "" }, ["Beihai-QG-CB"] = { "" }, ["Ningming"] = { "" }, ["Hengxian"] = { "" }, ["Pumen"] = { "" }, ["Zhaoping"] = { "" }, ["Fangchenggang-FC"] = { "" }, ["Dongxing"] = { "" }, ["Chongzuo-LT"] = { "" }, ["Fusui-QJ"] = { "" }, ["Lingchuan-C-YJ"] = { "" }, ["Pingle-C-MJ"] = { "" }, ["Pingle-C-SS"] = { "" }, ["Lipu-ZC"] = { "" }, ["Danzhou"] = { "" }, ["Sanya-YL"] = { "" }, ["Kuala Lumpur"] = { "" }, ["Penang-C"] = { "" }, ["Ipoh"] = { "" }, ["Sarikei-C"] = { "" }, ["Singapore-C"] = { "" }, ["Jakarta-C"] = { "" }, ["Ho Chi Minh City"] = { "" }, ["Mong Cai"] = { "" }, ["Phnom Penh-C"] = { "" }, ["Yangon-C"] = { "" }, ["Mandalay-C"] = { "" }, ["Bangkok-C"] = { "" }, ["Betong"] = { "" }, ["Manila-C"] = { "" }, ["Nanning-P"] = { "" }, ["Nanning-P-SJ"] = { "" }, ["Nanning-P-GJY"] = { "" }, ["Nanning-P-ZGL"] = { "" }, ["Nanning-P-XXJD"] = { "" }, ["Nanning-P-SL"] = { "" }, ["Nanning-P-XX"] = { "" }, ["Nanning-P-SC"] = { "" }, ["Binyang"] = { "" }, ["Binyang-XQ"] = { "" }, ["Hengxian-P"] = { "" }, ["Wuxuan-JJ"] = { "" }, ["Wuxuan-ZC"] = { "" }, ["Chongzuo-P"] = { "" }, ["Chongzuo-P-XH"] = { "" }, ["Fusui-P"] = { "" }, ["Liucheng-P"] = { "" }, ["Liucheng-P-GZ"] = { "" }, ["Liucheng-P-DP"] = { "" }, ["Rongshui"] = { "" }, ["Yizhou-P-DS"] = { "" }, ["Luocheng-P"] = { "" }, ["Baise-P"] = { "" }, ["Guilin-P"] = { "" }, ["Guilin-P-CY"] = { "" }, ["Guilin-P-DBZ"] = { "" }, ["Guilin-P-ZY"] = { "" }, ["Guilin-P-DB"] = { "" }, ["Guilin-P-YJ"] = { "" }, ["Guilin-P-QJ"] = { "" }, ["Lingui-P-WT"] = { "" }, ["Lingui-P-HS"] = { "" }, ["Lingui-P-LJ"] = { "" }, ["Lingui-P-LT"] = { "" }, ["Lingchuan-P"] = { "" }, ["Lingchuan-P-GQ"] = { "" }, ["Lingchuan-P-GD"] = { "" }, ["Lingchuan-P-TX"] = { "" }, ["Lingchuan-P-SZ"] = { "" }, ["Lingchuan-P-GP"] = { "" }, ["Lingchuan-P-LT"] = { "" }, ["Guanyang-P"] = { "" }, ["Quanzhou-P"] = { "" }, ["Pingle-P"] = { "" }, ["Pingle-P-XTM"] = { "" }, ["Yangshuo-P"] = { "" }, ["Yangshuo-P-PT"] = { "" }, ["Yongfu-P-JX"] = { "" }, ["Yongfu-P-CS"] = { "" }, ["Zhongshan-GA"] = { "" }, ["Xiamen"] = { "" }, ["Xiamen-HS"] = { "" }, ["Tong'an"] = { "" }, ["Quanzhou"] = { "" }, ["Jinjiang"] = { "" }, ["Nan'an"] = { "" }, ["Shishi"] = { "" }, ["Hui'an"] = { "" }, ["Anxi"] = { "" }, ["Yongchun"] = { "" }, ["Dehua"] = { "" }, ["Zhangzhou"] = { "" }, ["Longhai"] = { "" }, ["Changtai"] = { "" }, ["Hua'an"] = { "" }, ["Nanjing-MN"] = { "" }, ["Pinghe"] = { "" }, ["Zhangpu"] = { "" }, ["Yunxiao"] = { "" }, ["Zhao'an"] = { "" }, ["Zhao'an-SD"] = { "" }, ["Zhao'an-TY"] = { "" }, ["Zhao'an-WS"] = { "" }, ["Dongshan"] = { "" }, ["Taipei"] = { "" }, ["Wanhua"] = { "" }, ["Tamsui"] = { "" }, ["Sanxia"] = { "" }, ["Pingxi"] = { "" }, ["Kaohsiung"] = { "" }, ["Cijin"] = { "" }, ["Hongmaogang"] = { "" }, ["Dalinpu"] = { "" }, ["Tianliao"] = { "" }, ["Cieding"] = { "" }, ["Xinwu-YX"] = { "" }, ["Yilan"] = { "" }, ["Luodong"] = { "" }, ["Toucheng"] = { "" }, ["Lukang"] = { "" }, ["Yongjing-MN"] = { "" }, ["Caotun"] = { "" }, ["Taichung"] = { "" }, ["Wuqi"] = { "" }, ["Tainan"] = { "" }, ["Anping"] = { "" }, ["Shanhua"] = { "" }, ["Jiali"] = { "" }, ["Taitung"] = { "" }, ["Green Island"] = { "" }, ["Hsinchu-MN"] = { "" }, ["Miaoli-MN"] = { "" }, ["Mailiao"] = { "" }, ["Taixi"] = { "" }, ["Lunbei"] = { "" }, ["Chiayi"] = { "" }, ["Chiayi-TB"] = { "" }, ["Chiayi-SS"] = { "" }, ["Chiayi-ZP"] = { "" }, ["Chiayi-DP"] = { "" }, ["Chiayi-ZQ"] = { "" }, ["Chiayi-DL"] = { "" }, ["Chiayi-XK"] = { "" }, ["Chiayi-MX"] = { "" }, ["Chiayi-PZ"] = { "" }, ["Chiayi-LJ"] = { "" }, ["Chiayi-ST"] = { "" }, ["Chiayi-FL"] = { "" }, ["Chiayi-ALS"] = { "" }, ["Chiayi-LC"] = { "" }, ["Chiayi-YZ"] = { "" }, ["Chiayi-XG"] = { "" }, ["Chiayi-MS"] = { "" }, ["Chiayi-DS"] = { "" }, ["Chiayi-BD"] = { "" }, ["Chiayi-WL"] = { "" }, ["Pingtung"] = { "" }, ["Baoli"] = { "" }, ["Liuqiu"] = { "" }, ["Gabulong"] = { "" }, ["Kinmen"] = { "" }, ["Jinsha"] = { "" }, ["Magong"] = { "" }, ["Pengnan"] = { "" }, ["Xiyu"] = { "" }, ["Huxi"] = { "" }, ["Wangan"] = { "" }, ["Cimei"] = { "" }, ["Huayu"] = { "" }, ["Zhongtun"] = { "" }, ["Houliao"] = { "" }, ["Tongliang"] = { "" }, ["Jibei"] = { "" }, ["Malaysia-MN"] = { "" }, ["Melaka"] = { "" }, ["Labuan"] = { "" }, ["Klang"] = { "" }, ["Singapore-MN"] = { "" }, ["Philippine-MN"] = { "" }, ["Medan"] = { "" }, ["Seri Begawan"] = { "" }, ["Ho Chi Minh City-MN"] = { "" }, ["Yangon-MN"] = { "" }, ["Longyan"] = { "" }, ["Shizhong"] = { "" }, ["Zhangping"] = { "" }, ["Yongfu"] = { "" }, ["Datian"] = { "" }, ["Datian-GP"] = { "" }, ["Youxi-JM"] = { "" }, ["Youxi-XQ"] = { "" }, ["Shunchang-PS"] = { "" }, ["Xiapu-SS"] = { "" }, ["Putian-MN"] = { "" }, ["Pingnan"] = { "" }, ["Pingnan-PT"] = { "" }, ["Pingnan-SJ"] = { "" }, ["Guiping-XW"] = { "" }, ["Guiping-DS"] = { "" }, ["Guilin-MN-BYG"] = { "" }, ["Pingle-MN"] = { "" }, ["Qinzhou-MN"] = { "" }, ["Lechang-TT"] = { "" }, ["Renhua-CSB"] = { "" }, ["Yingde-YZ"] = { "" }, ["Yunan-LT"] = { "" }, ["Heyuan-NJ"] = { "" }, ["Hangzhou-PF"] = { "" }, ["Cangnan-MN"] = { "" }, ["Yuhuan-KM"] = { "" }, ["Wenling-RS"] = { "" }, ["Yixing-SB"] = { "" }, ["Guangfeng-NSD"] = { "" }, ["Hengfeng-YJ"] = { "" }, ["Yushan-ZH"] = { "" }, ["Langxi-FL"] = { "" }, ["Chaozhou"] = { "" }, ["Raoping-MN-T"] = { "" }, ["Shantou"] = { "" }, ["Chenghai"] = { "" }, ["Chenghai-DX"] = { "" }, ["Chaoyang"] = { "" }, ["Nan'ao-HZ"] = { "" }, ["Nan'ao-YA"] = { "" }, ["Jieyang"] = { "" }, ["Puning"] = { "" }, ["Lufeng"] = { "" }, ["Haifeng"] = { "" }, ["Fengshun-MN-LH"] = { "" }, ["Fengshun-MN-HJ"] = { "" }, ["Yuen Chau Tsai-MN"] = { "" }, ["Sha Tau Kok-MN"] = { "" }, ["Thailand-MN-T"] = { "" }, ["Chiang Mai-MN-T"] = { "" }, ["Hat Yai-MN-T"] = { "" }, ["Cambodia-MN-T"] = { "" }, ["Ho Chi Minh City-MN-T"] = { "" }, ["Vientiane-MN-T"] = { "" }, ["Johor Bahru"] = { "" }, ["Penang-MN-T"] = { "" }, ["Singapore-MN-T"] = { "" }, ["Batam-MN-T"] = { "" }, ["Pontianak-MN-T"] = { "" }, ["Leizhou"] = { "" }, ["Dianbai-XD"] = { "" }, ["Wenchang"] = { "" }, ["Haikou"] = { "" }, ["Chengmai"] = { "" }, ["Qionghai"] = { "" }, ["Wanning"] = { "" }, ["Tunchang"] = { "" }, ["Singapore-MN-H"] = { "" }, ["Belait-MN-H"] = { "" }, ["Putian"] = { "" }, ["Putian-DH"] = { "" }, ["Putian-JK"] = { "" }, ["Putian-NR"] = { "" }, ["Xianyou"] = { "" }, ["Xianyou-FT"] = { "" }, ["Xianyou-YY"] = { "" }, ["Fuding-AY"] = { "" }, ["Shaxi"] = { "" }, ["Sanxiang"] = { "" }, ["Nanlang"] = { "" }, ["Fuzhou"] = { "" }, ["Changle"] = { "" }, ["Lianjiang-MD"] = { "" }, ["Tailu"] = { "" }, ["Minhou"] = { "" }, ["Fuqing"] = { "" }, ["Pingtan"] = { "" }, ["Yongtai"] = { "" }, ["Minqing"] = { "" }, ["Gutian"] = { "" }, ["Pingnan-MD"] = { "" }, ["Luoyuan"] = { "" }, ["Fu'an"] = { "" }, ["Ningde"] = { "" }, ["Xiapu"] = { "" }, ["Zherong"] = { "" }, ["Shouning"] = { "" }, ["Zhouning"] = { "" }, ["Fuding"] = { "" }, ["Youxi"] = { "" }, ["Youxi-XY"] = { "" }, ["Youxi-YZ"] = { "" }, ["Youxi-TC"] = { "" }, ["Youxi-ZX"] = { "" }, ["Matsu"] = { "" }, ["Taishun-MD"] = { "" }, ["Cangnan-MD"] = { "" }, ["Guanhaiwei"] = { "" }, ["Longyou-LS"] = { "" }, ["Singapore-MD-FQ"] = { "" }, ["Sitiawan-MD-GT"] = { "" }, ["Sibu-MD-MQ"] = { "" }, ["Jian'ou"] = { "" }, ["Dikou"] = { "" }, ["Yanping-XY"] = { "" }, ["Yanping-XD"] = { "" }, ["Songxi"] = { "" }, ["Zhenghe"] = { "" }, ["Zhenqian"] = { "" }, ["Shunchang-YD"] = { "" }, ["Jianyang"] = { "" }, ["Huangkeng"] = { "" }, ["Wuyishan"] = { "" }, ["Shibei"] = { "" }, ["Yong'an"] = { "" }, ["Sanyuan"] = { "" }, ["Shaxian"] = { "" }, ["Yanping-WT"] = { "" }, ["Shaowu"] = { "" }, ["Guangze"] = { "" }, ["Jiangle"] = { "" }, ["Mingxi"] = { "" }, ["Shunchang"] = { "" }, ["Ningde-She"] = { "" }, ["Fu'an-She"] = { "" }, ["Fuding-She"] = { "" }, ["Zhouning-She"] = { "" }, ["Xiapu-She"] = { "" }, ["Shouning-She"] = { "" }, ["Gutian-She"] = { "" }, ["Luoyuan-She"] = { "" }, ["Sanming-She"] = { "" }, ["Shunchang-She"] = { "" }, ["Hua'an-She"] = { "" }, ["Zhangping-She"] = { "" }, ["Guixi-She"] = { "" }, ["Yanshan-She"] = { "" }, ["Wuning-She"] = { "" }, ["Cangnan-She"] = { "" }, ["Jingning-She"] = { "" }, ["Jingning-ZK-She"] = { "" }, ["Lishui-She"] = { "" }, ["Longyou-She"] = { "" }, ["Lin'an-She"] = { "" }, ["Jiande-She"] = { "" }, ["Jinhua-She"] = { "" }, ["Ningguo-She"] = { "" }, ["Chaozhou-She"] = { "" }, ["Fengshun-She"] = { "" }, ["Guzhang-WX"] = { "" }, ["Yuanling-WX"] = { "" }, ["Luxi-WX"] = { "" }, ["Luxi-WX-LJT"] = { "" }, ["Luxi-WX-LJT-2"] = { "" }, ["Chengbu-WX"] = { "" }, ["Jiande-JXYM"] = { "" }, ["Jinhua-JXYM"] = { "" }, ["Lanxi-JXYM"] = { "" }, ["Tunxi-JXYM"] = { "" }, ["Jiangyong"] = { "" }, ["Dong'an"] = { "" }, ["Qujiang-DC"] = { "" }, ["Wujiang-XY"] = { "" }, ["Zhenjiang-SB"] = { "" }, ["Renhua-ZT"] = { "" }, ["Renhua-ST"] = { "" }, ["Ruyuan-GT"] = { "" }, ["Lechang-CL"] = { "" }, ["Lechang-BX"] = { "" }, ["Lechang-HP"] = { "" }, ["Lechang-GT"] = { "" }, ["Lechang-SX"] = { "" }, ["Lianzhou-XZ"] = { "" }, ["Lianzhou-BA"] = { "" }, ["Lianzhou-YC"] = { "" }, ["Lianzhou-XA"] = { "" }, ["Lianzhou-FY"] = { "" }, } return export 0ylrifz946005fsdslox5vhvtpj1hnc ἀέκων 0 420686 2571830 2026-10-19T11:18:38Z Hiyuune 50834 /* */ 2571830 wikitext text/x-wiki =={{langname|grc}}== ==={{section|pron}}=== {{grc-IPA|ᾰ̓έκων}} ==={{section|adj}}=== {{grc-adj-1&3|ᾰ̓έκων|ᾰ̓έκουσᾰ|ᾰ̓έκον}} # {{alt form|grc|ᾱ̓́κων|from=epi}} ===={{section|decl}}==== {{grc-adecl|ᾰ̓έκων|ουσα|dial=epi}} mm7wiqh59bluydeai2cw3lsli064cjm