Wiktionary viwiktionary https://vi.wiktionary.org/wiki/Wiktionary:Trang_Ch%C3%ADnh MediaWiki 1.47.0-wmf.22 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 edit 0 3790 2568765 2536939 2026-10-06T06:27:16Z Hiyuune 50834 2568765 wikitext text/x-wiki {{also|Edit|édit|edit.}} =={{langname|en}}== {{wp|en:}} ==={{section|etym}}=== {{root|en|ine-pro|*deh₃-}} {{ety|en|:bf|editor|:influence|fr:-|tree=+}} {{back-form|en|editor}}, do ảnh hưởng từ {{uder|en|fr|éditer||chỉnh sửa, xuất bản}} và {{uder|en|la|editus}}. ==={{section|pron}}=== * {{enPR|ĕdʹĭt|a=UK}}, {{IPA|en|/ˈɛdɪt/}} * {{audio|en|LL-Q1860 (eng)-Vealhurl-edit.wav|a=Southern England}} * {{enPR|ĕdʹĭt|a=US}}, {{IPA|en|/ˈɛdɪt/|[ˈɛɾɪʔ]|[ˈɛɾɪt̚]}} * {{rhymes|en|ɛdɪt|s=2}} ==={{section|n}}=== {{wikidata lexeme|L12586}} {{en-noun}} # Sự [[đổi]], sự [[thay đổi]], sự [[biến đổi]], sự [[sửa đổi]], sự [[chỉnh]] lại ([[văn bản]] trong [[tài liệu]]). # {{lb|en|comedy}} Sự [[gián đoạn]] hoặc [[thay đổi]] cảnh diễn đột ngột. # Sự [[biên tập]]. ===={{section|drv}}==== {{col3|en|edit conflict|edit distance|null edit|edit war|heavy edit|light edit|edit warrior|hex-edit|radio edit|splice edit|stutter edit|logo edit|edit audio}} ==={{section|v}}=== {{wikidata lexeme|L175}} {{en-verb}} # {{lb|en|transitive}} [[biên tập|Biên tập]]; [[chỉnh sửa]]; [[sửa đổi]]. # [[chọn lọc|Chọn lọc]], [[cắt xén]], [[thêm bớt]] ([[tin]] của [[phóng viên]] [[báo]] [[gửi]] về). # Làm [[chủ bút]] (ở một [[tờ]] [[báo]]). ===={{section|drv}}==== {{col|en|coedit|editability|editathon|editless|editome|evil edit|misedit|overedit|postedit|preedit|unedit|line edit|copy edit|edit out|editable|edition|editor|editorial|editosome|subedit|re-edit|self-edit|edit in}} ==={{section|ref}}=== * {{R:FVDP|db=ev}} ==={{section|ana}}=== * {{anagrams|en|a=deit|-tide|DIET|Diet|diet|dite|diët|tide|tied}} =={{langname|id}}== ==={{section|etym}}=== {{bor+|id|en|edit}}. ==={{section|pron}}=== * {{id-pr|é.dit}} ==={{section|v}}=== {{head|id|verb|dang nguyên|edit|mệnh lệnh|edit|thông tục|edit|thể chủ động|mengedit|thể bị động thường|diedit|thể bị động tính đối lập|teredit}} # [[chỉnh sửa|Chỉnh sửa]]; [[sửa đổi]]. #: {{syn|id|sunting}} ===={{section|drv}}==== {{col|id |editan|mengedit|mengeditkan|pengedit|pengeditan |diedit|dieditkan }} ===={{section|rel}}==== {{col|id |edisi |editor |editorial }} ==={{section|further}}=== * {{R:KBBI Daring}} =={{langname|la}}== ==={{section|etym}} 1=== ===={{section|pron}} 1==== * {{la-IPA}} ====={{section|v}}===== {{head|la|vf}} # {{infl of|la|edō<t:ăn>||ind//sub|pres|act|ở|3|s}} ===={{section|pron}} 2==== * {{la-IPA|ēdit}} ===={{section|v}}==== {{head|la|vf|head=ēdit}} # {{infl of|la|edō<t:ăn>||ind|perf|act|ở|3|s}} ==={{section|etym}} 2=== ===={{section|pron}}==== * {{la-IPA|ēdit}} ===={{section|v}}==== {{head|la|vf|head=ēdit}} # {{infl of|la|ēdō||ind|pres|act|ở|3|s}} =={{langname|ms}}== ==={{section|etym}}=== {{bor+|ms|en|edit}}. ==={{section|pron}}=== * {{IPA|ms|[ɛ.dit]}} * {{rhymes|ms|dit|it|s2=2}} * {{hyph|ms|e|dit}} ==={{section|v}}=== {{head|ms|Động từ|chính tả Jawi|ايديت|thể chủ động trang trọng|mengedit|bị động ở ngôi thứ ba|diedit}} # [[chỉnh sửa|Chỉnh sửa]]; [[sửa đổi]]. #: {{syn|ms|sunting}} ===={{section|rel}}==== {{col4|ms | edisi | editor | editorial }} ==={{section|further}}=== * {{R:PRPM}} =={{langname|tl}}== ==={{section|etym}}=== {{ety|tl|:bor|en:edit|text=+|tree=1}} ==={{section|pron}}=== {{tl-pr}} ==={{section|n}}=== {{tl-noun|b=+}} # [[chỉnh sửa|Chỉnh sửa]]; [[sửa đổi]]. #: {{syn|tl|edita|ayos|wasto|pagbabago|modipikasyon}} ===={{section|drv}}==== {{col3|tl|iedit|mag-edit|tagaedit|pag-eedit|magpaedit|maedit|makaedit}} ===={{section|rel}}==== {{col3|tl|edisyon|editoryal|editor}} ==={{section|further}}=== * {{R:KWF Diksiyonaryo}} * {{R:Pambansang Diksiyonaryo}} {{C|tl|Máy tính|Internet}} hifezk7fskuwsl9l21vz27j7ppdz07z 2568766 2568765 2026-10-06T06:28:52Z Hiyuune 50834 /* Động từ */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]) 2568766 wikitext text/x-wiki {{also|Edit|édit|edit.}} =={{langname|en}}== {{wp|en:}} ==={{section|etym}}=== {{root|en|ine-pro|*deh₃-}} {{ety|en|:bf|editor|:influence|fr:-|tree=+}} {{back-form|en|editor}}, do ảnh hưởng từ {{uder|en|fr|éditer||chỉnh sửa, xuất bản}} và {{uder|en|la|editus}}. ==={{section|pron}}=== * {{enPR|ĕdʹĭt|a=UK}}, {{IPA|en|/ˈɛdɪt/}} * {{audio|en|LL-Q1860 (eng)-Vealhurl-edit.wav|a=Southern England}} * {{enPR|ĕdʹĭt|a=US}}, {{IPA|en|/ˈɛdɪt/|[ˈɛɾɪʔ]|[ˈɛɾɪt̚]}} * {{rhymes|en|ɛdɪt|s=2}} ==={{section|n}}=== {{wikidata lexeme|L12586}} {{en-noun}} # Sự [[đổi]], sự [[thay đổi]], sự [[biến đổi]], sự [[sửa đổi]], sự [[chỉnh]] lại ([[văn bản]] trong [[tài liệu]]). # {{lb|en|comedy}} Sự [[gián đoạn]] hoặc [[thay đổi]] cảnh diễn đột ngột. # Sự [[biên tập]]. ===={{section|drv}}==== {{col3|en|edit conflict|edit distance|null edit|edit war|heavy edit|light edit|edit warrior|hex-edit|radio edit|splice edit|stutter edit|logo edit|edit audio}} ==={{section|v}}=== {{wikidata lexeme|L175}} {{en-verb}} # {{lb|en|transitive}} [[biên tập|Biên tập]]; [[chỉnh sửa]]; [[sửa đổi]]. # [[chọn lọc|Chọn lọc]], [[cắt xén]], [[thêm bớt]] ([[tin]] của [[phóng viên]] [[báo]] [[gửi]] về). # Làm [[chủ bút]] (ở một [[tờ]] [[báo]]). ===={{section|drv}}==== {{col|en|coedit|editability|editathon|editless|editome|evil edit|misedit|overedit|postedit|preedit|unedit|line edit|copy edit|edit out|editable|edition|editor|editorial|editosome|subedit|re-edit|self-edit|edit in}} ==={{section|ref}}=== * {{R:FVDP|db=ev}} ==={{section|ana}}=== * {{anagrams|en|a=deit|-tide|DIET|Diet|diet|dite|diët|tide|tied}} =={{langname|id}}== ==={{section|etym}}=== {{bor+|id|en|edit}}. ==={{section|pron}}=== * {{id-pr|é.dit}} ==={{section|v}}=== {{head|id|verb|dạng nguyên|edit|mệnh lệnh|edit|thông tục|edit|thể chủ động|mengedit|thể bị động thường|diedit|thể bị động tính đối lập|teredit}} # [[chỉnh sửa|Chỉnh sửa]]; [[sửa đổi]]. #: {{syn|id|sunting}} ===={{section|drv}}==== {{col|id |editan|mengedit|mengeditkan|pengedit|pengeditan |diedit|dieditkan }} ===={{section|rel}}==== {{col|id |edisi |editor |editorial }} ==={{section|further}}=== * {{R:KBBI Daring}} =={{langname|la}}== ==={{section|etym}} 1=== ===={{section|pron}} 1==== * {{la-IPA}} ====={{section|v}}===== {{head|la|vf}} # {{infl of|la|edō<t:ăn>||ind//sub|pres|act|ở|3|s}} ===={{section|pron}} 2==== * {{la-IPA|ēdit}} ===={{section|v}}==== {{head|la|vf|head=ēdit}} # {{infl of|la|edō<t:ăn>||ind|perf|act|ở|3|s}} ==={{section|etym}} 2=== ===={{section|pron}}==== * {{la-IPA|ēdit}} ===={{section|v}}==== {{head|la|vf|head=ēdit}} # {{infl of|la|ēdō||ind|pres|act|ở|3|s}} =={{langname|ms}}== ==={{section|etym}}=== {{bor+|ms|en|edit}}. ==={{section|pron}}=== * {{IPA|ms|[ɛ.dit]}} * {{rhymes|ms|dit|it|s2=2}} * {{hyph|ms|e|dit}} ==={{section|v}}=== {{head|ms|Động từ|chính tả Jawi|ايديت|thể chủ động trang trọng|mengedit|bị động ở ngôi thứ ba|diedit}} # [[chỉnh sửa|Chỉnh sửa]]; [[sửa đổi]]. #: {{syn|ms|sunting}} ===={{section|rel}}==== {{col4|ms | edisi | editor | editorial }} ==={{section|further}}=== * {{R:PRPM}} =={{langname|tl}}== ==={{section|etym}}=== {{ety|tl|:bor|en:edit|text=+|tree=1}} ==={{section|pron}}=== {{tl-pr}} ==={{section|n}}=== {{tl-noun|b=+}} # [[chỉnh sửa|Chỉnh sửa]]; [[sửa đổi]]. #: {{syn|tl|edita|ayos|wasto|pagbabago|modipikasyon}} ===={{section|drv}}==== {{col3|tl|iedit|mag-edit|tagaedit|pag-eedit|magpaedit|maedit|makaedit}} ===={{section|rel}}==== {{col3|tl|edisyon|editoryal|editor}} ==={{section|further}}=== * {{R:KWF Diksiyonaryo}} * {{R:Pambansang Diksiyonaryo}} {{C|tl|Máy tính|Internet}} 825870vmejuejhby1rpr5u3xk3jtm98 2568767 2568766 2026-10-06T06:29:25Z Hiyuune 50834 /* Động từ */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]) 2568767 wikitext text/x-wiki {{also|Edit|édit|edit.}} =={{langname|en}}== {{wp|en:}} ==={{section|etym}}=== {{root|en|ine-pro|*deh₃-}} {{ety|en|:bf|editor|:influence|fr:-|tree=+}} {{back-form|en|editor}}, do ảnh hưởng từ {{uder|en|fr|éditer||chỉnh sửa, xuất bản}} và {{uder|en|la|editus}}. ==={{section|pron}}=== * {{enPR|ĕdʹĭt|a=UK}}, {{IPA|en|/ˈɛdɪt/}} * {{audio|en|LL-Q1860 (eng)-Vealhurl-edit.wav|a=Southern England}} * {{enPR|ĕdʹĭt|a=US}}, {{IPA|en|/ˈɛdɪt/|[ˈɛɾɪʔ]|[ˈɛɾɪt̚]}} * {{rhymes|en|ɛdɪt|s=2}} ==={{section|n}}=== {{wikidata lexeme|L12586}} {{en-noun}} # Sự [[đổi]], sự [[thay đổi]], sự [[biến đổi]], sự [[sửa đổi]], sự [[chỉnh]] lại ([[văn bản]] trong [[tài liệu]]). # {{lb|en|comedy}} Sự [[gián đoạn]] hoặc [[thay đổi]] cảnh diễn đột ngột. # Sự [[biên tập]]. ===={{section|drv}}==== {{col3|en|edit conflict|edit distance|null edit|edit war|heavy edit|light edit|edit warrior|hex-edit|radio edit|splice edit|stutter edit|logo edit|edit audio}} ==={{section|v}}=== {{wikidata lexeme|L175}} {{en-verb}} # {{lb|en|transitive}} [[biên tập|Biên tập]]; [[chỉnh sửa]]; [[sửa đổi]]. # [[chọn lọc|Chọn lọc]], [[cắt xén]], [[thêm bớt]] ([[tin]] của [[phóng viên]] [[báo]] [[gửi]] về). # Làm [[chủ bút]] (ở một [[tờ]] [[báo]]). ===={{section|drv}}==== {{col|en|coedit|editability|editathon|editless|editome|evil edit|misedit|overedit|postedit|preedit|unedit|line edit|copy edit|edit out|editable|edition|editor|editorial|editosome|subedit|re-edit|self-edit|edit in}} ==={{section|ref}}=== * {{R:FVDP|db=ev}} ==={{section|ana}}=== * {{anagrams|en|a=deit|-tide|DIET|Diet|diet|dite|diët|tide|tied}} =={{langname|id}}== ==={{section|etym}}=== {{bor+|id|en|edit}}. ==={{section|pron}}=== * {{id-pr|é.dit}} ==={{section|v}}=== {{head|id|verb|dạng nguyên|edit|mệnh lệnh|edit|thông tục|edit|thể chủ động|mengedit|thể bị động thường|diedit|thể bị động tính đối lập|teredit}} # [[chỉnh sửa|Chỉnh sửa]]; [[sửa đổi]]. #: {{syn|id|sunting}} ===={{section|drv}}==== {{col|id |editan|mengedit|mengeditkan|pengedit|pengeditan |diedit|dieditkan }} ===={{section|rel}}==== {{col|id |edisi |editor |editorial }} ==={{section|further}}=== * {{R:KBBI Daring}} =={{langname|la}}== ==={{section|etym}} 1=== ===={{section|pron}} 1==== * {{la-IPA}} ====={{section|v}}===== {{head|la|vf}} # {{infl of|la|edō<t:ăn>||ind//sub|pres|act|ở|3|s}} ===={{section|pron}} 2==== * {{la-IPA|ēdit}} ===={{section|v}}==== {{head|la|vf|head=ēdit}} # {{infl of|la|edō<t:ăn>||ind|perf|act|ở|3|s}} ==={{section|etym}} 2=== ===={{section|pron}}==== * {{la-IPA|ēdit}} ===={{section|v}}==== {{head|la|vf|head=ēdit}} # {{infl of|la|ēdō||ind|pres|act|ở|3|s}} =={{langname|ms}}== ==={{section|etym}}=== {{bor+|ms|en|edit}}. ==={{section|pron}}=== * {{IPA|ms|[ɛ.dit]}} * {{rhymes|ms|dit|it|s2=2}} * {{hyph|ms|e|dit}} ==={{section|v}}=== {{head|ms|Động từ|chính tả Jawi|ايديت|thể chủ động trang trọng|mengedit|thể bị động ở ngôi thứ ba|diedit}} # [[chỉnh sửa|Chỉnh sửa]]; [[sửa đổi]]. #: {{syn|ms|sunting}} ===={{section|rel}}==== {{col4|ms | edisi | editor | editorial }} ==={{section|further}}=== * {{R:PRPM}} =={{langname|tl}}== ==={{section|etym}}=== {{ety|tl|:bor|en:edit|text=+|tree=1}} ==={{section|pron}}=== {{tl-pr}} ==={{section|n}}=== {{tl-noun|b=+}} # [[chỉnh sửa|Chỉnh sửa]]; [[sửa đổi]]. #: {{syn|tl|edita|ayos|wasto|pagbabago|modipikasyon}} ===={{section|drv}}==== {{col3|tl|iedit|mag-edit|tagaedit|pag-eedit|magpaedit|maedit|makaedit}} ===={{section|rel}}==== {{col3|tl|edisyon|editoryal|editor}} ==={{section|further}}=== * {{R:KWF Diksiyonaryo}} * {{R:Pambansang Diksiyonaryo}} {{C|tl|Máy tính|Internet}} sm54nl7890hhl18vtsu0lzf56y01ufh catechism 0 5059 2568682 2380403 2026-10-05T15:59:45Z Hiyuune 50834 2568682 wikitext text/x-wiki =={{langname|en}}== {{wp|en:}} ==={{section|pron}}=== * {{IPA|en|/ˈkætɪˌkɪzəm/}} * {{audio|en|LL-Q1860 (eng)-Wodencafe-catechism.wav|a=US}} ==={{section|n}}=== {{en-noun}} # [[sách|Sách]] [[giáo lý]] [[vấn đáp]]. # [[cách|Cách]] [[dạy]] [[bằng]] [[vấn đáp]]. # [[bản|Bản]] [[câu hỏi]]. ===={{section|drv}}==== {{col|en|catechismal}} ===={{section|rel}}==== {{col3|en |catechesis |catechetical |catechist |catechistic |catechize |catechumen}} ==={{section|ref}}=== * {{R:FVDP|db=ev}} ===={{section|further}}==== * {{R:Webster 1913}} * {{R:Century}} ==={{section|ana}}=== * {{anagrams|en|a=accehimst|schematic}} =={{langname|ro}}== ==={{section|n}}=== {{ro-noun|n|catechisme}} # {{obsolete form of|ro|catehism}} ===={{section|decl}}==== {{ro-noun-n}} ==={{section|ref}}=== * {{R:MDA2}} hkxcxq94950ybev44x0gojuup2smeul entêtant 0 7883 2568691 2388863 2026-10-05T16:12:17Z Hiyuune 50834 2568691 wikitext text/x-wiki =={{langname|fr}}== ==={{section|pron}}=== * {{IPA|fr|/ɑ̃.te.tɑ̃/}} ==={{section|ptcp}}=== {{head|fr|Phân từ hiện tại}} # {{present participle of|fr|entêter}} ==={{section|further}}=== * {{R:fr:TLFi}} ==={{section|ana}}=== * {{l|fr|tentante}} ny9xnt7fzhcnu2e5y748a1qo1wjv7vv flatulence 0 15367 2568757 2519141 2026-10-06T05:59:37Z Hiyuune 50834 2568757 wikitext text/x-wiki =={{langname|en}}== {{wp|en:}} ==={{section|etym}}=== {{root|en|ine-pro|*bʰleh₁-}} Từ {{bor|en|fr|flatulence}}, cuối cùng từ {{der|en|la|flō}}. ==={{section|pron}}=== * {{IPA|en|/ˈflæt͡ʃələns/|/ˈflæt͡ʃʊləns/|/ˈflæt(j)ʊləns/}} ** {{audio|en|LL-Q1860_(eng)-Gt59514-flatulency.wav|a=Đông Bắc Hoa Kỳ|IPA=/ˈflæt͡ʃələns/}} ** {{audio|en|LL-Q1860 (eng)-Vealhurl-flatulence.wav|a=Southern England|IPA=/ˈflæt͡ʃʊləns/}} ** {{audio|en|LL-Q7976 (mis)-Msyds-flatulence.wav|a=GA|IPA=/ˈflætjʊləns/}} * {{hyph|en|flat|u|lence}} * {{rhymes|en|ætʃələns|ætʃʊləns|æt(j)ʊləns|s=3}} ==={{section|n}}=== {{en-noun|~}} # [[sự|Sự]] [[đầy hơi]]. #: {{syn|en|flatuency|qq1=hiếm}} #: {{cot|en|queef}} # [[tính|Tính]] [[tự cao]] [[tự đại]]. # [[tính|Tính]] [[huênh hoang]] [[rỗng tuếch]] (bài nói). ===={{section|drv}}==== {{col|en|antiflatulence|flatulence tax|flatulate|flatulist|flatulogenic|vaginal flatulence}} ===={{section|rel}}==== * Xem thêm [[Kho từ vựng:flatulence]] * {{l|en|afflatus}} ==={{section|ref}}=== * {{R:FVDP|db=ev}} =={{langname|fr}}== ==={{section|etym}}=== {{ety|fr|:af|flatulent|-ence}} Từ {{af|fr|flatulent|-ence}}. ==={{section|pron}}=== * {{fr-IPA}} * {{audio|fr|LL-Q150 (fra)-WikiLucas00-flatulence.wav|a=Lyon}} * {{audio|fr|LL-Q150 (fra)-LoquaxFR-flatulence.wav|a=Vosges}} ==={{section|n}}=== {{fr-noun|f}} # [[chứng|Chứng]] [[đầy hơi]]. ===={{section|see}}==== * {{l|fr|ballonnement}} * {{l|fr|pet}} ==={{section|ref}}=== * {{R:FVDP|db=fv}} ==={{section|further}}=== * {{R:fr:TLFi}} 6ud6ibiir6xp60mszdnnig3wwo1lvda foxy 0 15728 2568751 2471398 2026-10-06T05:50:09Z Hiyuune 50834 2568751 wikitext text/x-wiki {{also|Foxy}} =={{langname|en}}== ==={{section|etym}}=== Từ {{suf|en|fox|y|id2=tính từ}}. So sánh với {{cog|stq|fuksich}}, {{cog|fy|foksich}}, {{cog|nl|vossig}}, {{cog|nds-de|vossig}}, {{cog|de|fuchsig}}. ==={{section|pron}}=== * {{IPA|en|/ˈfɑksi/|a=GA}} * {{IPA|en|/ˈfɒksi/|a=RP}} * {{audio|en|LL-Q1860 (eng)-Vealhurl-foxy.wav|a=Southern England}} * {{rhymes|en|ɒksi|s=2}} * {{hyphenation|en|fox|y}} ==={{section|adj}}=== {{en-adj|er}} # [[như|Như]] [[cáo]]; [[xảo quyệt]], [[láu cá]]. # [[có|Có]] [[màu]] [[nâu]] [[đậm]]. # [[có|Có]] [[vết]] ố [[nâu]] (trang sách). # [[bị|Bị]] [[nấm]] [[đốm]] [[nâu]] (cây). # [[bị|Bị]] [[chua]] [[vì]] [[lên men]] (rượu). ===={{section|drv}}==== {{col|en|foxily |foxiness |foxy bolete |foxy boxing |unfoxy }} ==={{section|ref}}=== * {{R:FVDP|db=ev}} l5z70pmf1csd68kmh72jf10pckbcdqr polycrystalline 0 22562 2568753 2509234 2026-10-06T05:51:49Z Hiyuune 50834 2568753 wikitext text/x-wiki =={{langname|en}}== ==={{section|etym}}=== {{ety|en|:af|poly-|crystalline|text=+|tree=1}} ==={{section|adj}}=== {{wp|en:}} {{en-adj}} # [[thuộc|Thuộc]] về [[polycrystal]]. ===={{section|drv}}==== {{col|en|nanopolycrystalline |polycrystalline silicon}} ===={{section|rel}}==== * {{l|en|polycrystal}} ==={{section|ref}}=== * {{R:FVDP|db=ev}} 00rl9qjv7myan52sfd5a9fjmftd61rk măng tây 0 34105 2568777 1878316 2026-10-06T07:05:35Z Hiyuune 50834 2568777 wikitext text/x-wiki =={{langname|vi}}== [[Image:Szparagi.jpg|thumb|right|250px|{{pagename}}]] ==={{section|pron}}=== {{vi-pron}} * {{audio|vi|LL-Q9199 (vie)-Penn Zero MSSJ-măng tây.wav|a=Hanoi}} ==={{section|n}}=== {{vi-noun|cls=cây}} # [[Loài|Loài]] [[cây]] [[thuộc]] họ [[hành tỏi]], [[thân]] [[ngầm]], [[mầm non]] [[mềm]], dùng làm [[thức ăn]]. #: {{ux|vi|Người nông thôn không ăn '''măng tây''', nhưng trồng thứ cây này để bán cho các khách sạn.}} ===={{section|trans}}==== {{trans-top|cây {{pagename}}}} * {{langname|ar}}: {{t|ar|هِلْيُون|m}}, {{t|ar|هِلْيَوْن|m}} *: {{langname|arz}}: {{t|arz|اسبراجوس|m|tr=esbaragus}} *: {{langname|acw}}: {{t|acw|هِلْيون|m-p|tr=hilyōn}} * {{langname|sq}}: {{t+|sq|shpargull|m}} * {{langname|en}}: {{t+|en|asparagus}} * {{langname|ang}}: {{t|ang|eorþnafola|m}} * {{langname|hy}}: {{t+|hy|ծնեբեկ}} * {{langname|ast}}: {{t+|ast|espárragu|m}} * {{langname|az}}: {{t|az|qulançar}} * {{langname|eu}}: {{t|eu|esparrago}}, {{t|eu|zainzuri}} * {{langname|bg}}: {{t|be|спа́ржа|f}} * {{langname|bg}}: {{t+|bg|аспара́гус|m}} * {{langname|ca}}: {{t|ca|esparreguera|f}} * {{langname|dlm}}: {{t|dlm|spirač}} * {{langname|da}}: {{t+|da|asparges|c}} * {{langname|de}}: {{t+|de|Spargel|m}} * {{langname|et}}: {{t|et|harilik aspar}} * {{langname|fo}}: {{t|fo|aspargus|n}} * Tiếng Frisia: *: {{langname|stq}}: {{t|stq|Speerjes|m}}, {{t|stq|Spoargel|m}} *: {{langname|fy}}: {{t|fy|asperzje|c}}, {{t|fy|sperzje|c}} * {{langname|fur}}: {{t|fur|sparg}}, {{t|fur|sparc|m}} * {{langname|gd}}: {{t|gd|creamh-na-muice-fiadhaich|m}}, {{t|gd|aspàrag|f}}, {{t|gd|lus-mòr|m}} * {{langname|gag}}: {{t|gag|kuş konmaz}} * {{langname|gl}}: {{t+|gl|espárrago|m}}, {{t+|gl|esparragueira|f}} * {{langname|sdn}}: {{t|sdn|isparau}} * {{langname|ka}}: {{t|ka|სატაცური}} * {{langname|nl}}: {{t+|nl|asperge|f}} * {{langname|hu}}: {{t+|hu|spárga}} * {{langname|el}}: {{t+|el|σπαράγγι|n}}, {{t|el|ασπάραγος}} *: {{langname|grc}}: {{t|grc|ἀσφάραγος|m}}, {{t|grc|ἀσπάραγος|m}} * {{langname|is}}: {{t|is|spergill|m}} * {{langname|id}}: {{t+|id|akar parsi|lit=gốc Ba Tư}}, {{t|id|asparagus}}, {{t|id|sapersi}} * {{langname|ga}}: {{t|ga|lus súch|m}}, {{t|ga|lus súgach|m}}, {{t|ga|asparagas|m}}, {{t|ga|lus spreagtha|m}} * Tiếng Kurd: *: {{langname|kmr}}: {{t+|kmr|maroje}}, {{t+|kmr|kiling}}, {{t+|kmr|kilig}}, {{t+|kmr|çavmark}} *: {{langname|ckb}}: {{t|ckb|مارچێوە}}, {{t|ckb|چاومارە}} * {{langname|lo}}: {{t|lo|ໜໍ່ໄມ້ຟະລັ່ງ}} * {{langname|la}}: {{t|la|asparagus|m}}, {{t|la|corruda|f}} * {{langname|lv}}: {{t|lv|sparģelis|m}} * {{langname|lt}}: {{t|lt|smidras|m}} * {{langname|mk}}: {{t|mk|аспара́гус|m}}, {{t|mk|шпа́ргла|f}} * {{langname|ms}}: {{t|ms|akar parsi}}, {{t|ms|sapersi}}, {{t+|ms|asparagus}} * {{langname|mi}}: {{t|mi|apareka}}, {{t|mi|parakati}} * {{langname|my}}: {{t|my|ကညွတ်ပင်}} * {{langname|no}}: {{t+|no|asparges}} * {{langname|nv}}: {{t|nv|chʼałdą́ą́ʼ}} * {{langname|ru}}: {{t+|ru|спа́ржа|f}} * {{langname|ja}}: {{t+|ja|アスパラガス|tr=asuparagasu}} * {{langname|nrf}}: {{t|nrf|aspèrge|f}} * {{langname|oc}}: {{t|oc|esparga}} * {{langname|fi}}: {{t+|fi|ruokaparsa}}, {{t+|fi|parsa}} * {{langname|fr}}: {{t+|fr|asperge|f}} * {{langname|eo}}: {{t+|eo|asparago}}, {{t|eo|asparagoj|p}} * {{langname|cs}}: {{t+|cs|chřest|m}} * {{langname|ko}}: {{t|ko|아스파라거스}} * {{langname|zh}}: *: {{langname|cmn}}: {{t+|cmn|蘆筍|tr=lúsǔn}} * {{langname|it}}: {{t+|it|asparago|m}} {{trans-bottom}} ==={{section|ref}}=== * {{R:FVDP}} {{C|vi|Rau}} 419v3qe6prhkr8pew513ppn00lw9zly truce 0 57641 2568669 2406012 2026-10-05T15:18:37Z Hiyuune 50834 2568669 wikitext text/x-wiki =={{langname|en}}== ==={{section|pron}}=== * {{IPA|en|/tɹuːs/|a=RP}} * {{IPA|en|/tɹus/|a=US}} ** {{audio|en|en-us-truce.ogg|a=US}} * {{IPA|en|/ˈtɹʉs/|a=Scotland,Bắc Ireland}} * {{rhymes|en|uːs|s=1}} ==={{section|n}}=== {{en-noun}} # Sự [[ngừng bắn]]; sự [[đình chiến]]. #: {{ux|en|To ask for a '''truce'''.|Yêu cầu ngừng bắn.}} #: {{ux|en|'''Truce''' breaker.|Người vi phạm lệnh ngừng bắn.}} # Sự [[tạm]] [[ngừng]], sự [[tạm]] [[nghỉ]], sự [[tạm]] [[đình]]. #: {{ux|en|Let there be a '''truce''' to that.|Hãy ngừng việc đó một thời gian.}} #: {{ux|en|'''Truce''' to jesting!|Thôi không đùa nữa!}} ==={{section|v}}=== {{en-verb}} # {{lb|en|intransitive}} Đạt được [[thỏa thuận]] [[đình chiến]]. ==={{section|drv}}=== {{col|en|trucebreaker|trucebreaking|truceless|trucemaker|trucemaking|trucer|trucial|untruced}} ==={{section|ref}}=== * {{R:FVDP|db=ev}} ==={{section|ana}}=== * {{anagrams|en|a=certu|Crute|Curet|cruet|curet|cuter|eruct|recut|uCret}} mwx91cm4jo6v2f1it7ug3lf5bnjfgf9 surtax 0 59794 2568690 2413203 2026-10-05T16:09:34Z Hiyuune 50834 2568690 wikitext text/x-wiki =={{langname|en}}== ==={{section|etym}}=== Từ {{uder|en|fr|surtaxe}}. ==={{section|pron}}=== * {{IPA|en|/ˈsɝː.tæks/|a=US}} ** {{audio|en|LL-Q1860 (eng)-Yangolin-surtax.wav|a=GA}} ==={{section|n}}=== {{en-noun}} # {{lb|en|legal}} [[thuế|Thuế]] [[phụ]]. # [[thuế|Thuế]] [[lợi tức]] [[luỹ tiến]]. ==={{section|v}}=== {{en-verb}} # {{lb|en|transitive}} [[đánh thuế|Đánh thuế]] [[phụ]]. ===={{section|drv}}==== {{col|en|surtaxable}} ===={{section|see}}==== * {{l|en|surcharge}} ==={{section|ref}}=== * {{R:FVDP|db=ev}} p1gb554f1ckkhpinyep5l8yf3h1478d дрейфующий 0 75311 2568676 1957730 2026-10-05T15:28:36Z Hiyuune 50834 + ru 2568676 wikitext text/x-wiki =={{langname|ru}}== ==={{section|pron}}=== * {{ru-IPA|дрейфу́ющий}} ==={{section|ptcp}}=== {{head|ru|Phân từ hiện tại chủ động|head=дрейфу́ющий}} # {{participle of|ru|дрейфова́ть||impfv|pres|act}} ===={{section|decl}}==== {{ru-decl-adj|дрейфу́ющий|-}} daa8urqqi7knpdzbfebcwl4ei7todf8 adumbrate 0 95878 2568685 2322220 2026-10-05T16:03:25Z Hiyuune 50834 /* Tiếng Latinh */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]) 2568685 wikitext text/x-wiki =={{langname|en}}== ==={{section|pron}}=== * {{IPA4|en|/ˈædʌmˌbɹeɪt/}} * {{audio|en|LL-Q1860 (eng)-Vealhurl-adumbrate.wav|a=Southern England}} ==={{section|v}}=== {{en-verb}} # {{lb|en|transitive}} [[phác hoạ|Phác hoạ]]. # [[cho biết|Cho biết]] [[lờ mờ]]. # Làm cho biết trước, [[báo trước]] bằng điềm. # [[che|Che]] [[tối]], làm cho [[mờ]] [[tối]], [[toả]] [[bóng]] xuống. ===={{section|drv}}==== {{col|en|adumbrant|adumbration|adumbrative}} ==={{section|ref}}=== * {{R:FVDP|db=ev}} =={{langname|la}}== ==={{section|pron}}=== * {{la-IPA|adumbrāte}} ==={{section|v}}=== {{head|la|Biến thể hình thái động từ|head=adumbrāte}} # {{inflection of|la|adumbrō||impr|pres|actv|ở|2|p}} 4gxc25im08482p2myt4sjuff0hshn1b 2568686 2568685 2026-10-05T16:03:37Z Hiyuune 50834 /* Tiếng Anh */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]) 2568686 wikitext text/x-wiki =={{langname|en}}== ==={{section|pron}}=== * {{IPA|en|/ˈædʌmˌbɹeɪt/}} * {{audio|en|LL-Q1860 (eng)-Vealhurl-adumbrate.wav|a=Southern England}} ==={{section|v}}=== {{en-verb}} # {{lb|en|transitive}} [[phác hoạ|Phác hoạ]]. # [[cho biết|Cho biết]] [[lờ mờ]]. # Làm cho biết trước, [[báo trước]] bằng điềm. # [[che|Che]] [[tối]], làm cho [[mờ]] [[tối]], [[toả]] [[bóng]] xuống. ===={{section|drv}}==== {{col|en|adumbrant|adumbration|adumbrative}} ==={{section|ref}}=== * {{R:FVDP|db=ev}} =={{langname|la}}== ==={{section|pron}}=== * {{la-IPA|adumbrāte}} ==={{section|v}}=== {{head|la|Biến thể hình thái động từ|head=adumbrāte}} # {{inflection of|la|adumbrō||impr|pres|actv|ở|2|p}} p7dg8q2iz8wf8sbvby3yktn6syvc9mo Thảo luận Wiktionary:Thảo luận 5 103987 2568704 2567685 2026-10-05T18:52:12Z MediaWiki message delivery 19980 Mục mới: /* Bản tin Kỹ thuật: Tuần 41-2026 */ 2568704 wikitext text/x-wiki <!-- Xin bắt đầu cuộc thảo luận mói ở CUỐI trang! Cám ơn. --> {{Lưu trữ}} == Upcoming Dark Mode user interface rollout for anonymous Wikimedia sites users == <div lang="en" dir="ltr"> {{int:Hello}} Wikimedians, Apologies if this message is not in your language. {{int:please-translate}}. The [[mw:Special:MyLanguage/Reading/Web|Reader Experience team]] will launch the Dark mode feature for anonymous users on all Wikimedia sites, including yours, on October 29, 2025. [[:en:Special:MyLanguage/Light-on-dark color scheme|Dark mode]] is an option that allows users to view pages in light-coloured text, and icons on a dark background. Once it is available for anonymous users, they can enable it when using various devices. More information on ways to enable it can be found on [[:en:Special:MyLanguage/Wikipedia:Dark mode#Options for anyone|this page]]. Given many pages are still not compatible with dark mode this will be an opt-in feature and not automatically apply to pages. Dark mode requires modifications to content pages and templates, and since our initial launch [https://diff.wikimedia.org/2024/07/17/dark-modes-bright-future-how-dark-mode-will-transform-wikipedias-accessibility/ in July 2024], we have been working with communities and helping them prepare for dark mode. Before the rollout, it is essential that template authors and technical contributors test dark mode and read [[mw:Special:MyLanguage/Reading/Web/Accessibility for reading/Updates/2024-04|this page]] to learn how to make pages Dark mode-ready and address any compatibility issues found in templates. We will fix most color compatibility issues only on the most-viewed pages on projects with over 5 million monthly page views. Technical contributors with an account should opt into dark mode currently using preferences or settings and test pages and seek help before the release to ensure everything complies before the enablement. If you have any questions or need help, please [[mw:Special:MyLanguage/Talk:Reading/Web/Accessibility for reading#|contact the Reader Experience team]] for support. Thank you! </div> <bdi lang="en" dir="ltr">[[User:UOzurumba (WMF)|UOzurumba (WMF)]]</bdi> 02:08, ngày 30 tháng 9 năm 2025 (UTC) <!-- Tin nhắn của Thành viên:UOzurumba (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=User:UOzurumba_(WMF)/sandbox_Dark_mode_deployment_mass_message_list_(October_2025)&oldid=29358561 --> == Bản tin Kỹ thuật: Tuần 41-2025 == <section begin="technews-2025-W41"/><div class="plainlinks"> '''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2025/41|Các bản dịch]] của bản tin này cũng có sẵn cho bạn. '''Nổi bật trong tuần''' * [[mw:Special:MyLanguage/Help:Edit check#paste|Kiểm tra Nội dung Dán (Paste Check)]] là một tính năng Kiểm tra Sửa đổi mới để giúp phòng tránh và chống lại các hành vi vi phạm bản quyền. Khi biên tập viên dán văn bản vào bài viết, Kiểm tra Nội dung Dán sẽ nhắc họ xác nhận nguồn gốc và giấy phép của nội dung được dán đó. Bắt đầu từ thứ 4, ngày 8 tháng 10, [[phab:T403680|22 wiki sẽ thử nghiệm tính năng Kiểm tra Nội dung Dán]]. Kiểm tra Nội dung Dán sẽ giúp các tình nguyện viên mới hiểu và tuân theo các quy định và hướng dẫn cần thiết để thực hiện những đóng góp mang tính xây dựng cho các dự án Wikipedia. '''Cập nhật cho biên tập viên''' * Các thiết bị di động sẽ hiển thị các bài viết trên trang di động trực tiếp trên tên miền chuẩn (như <code>en.wikipedia.org</code>), thay vì thông qua việc đổi hướng tới tên miền "m" (như <code>en.m.wikipedia.org</code>). Thay đổi này nhằm cải thiện hiệu năng. Nó sẽ được kích hoạt trên các trang Wikipedia trong tuần này. Liên kết URL di động và tùy chọn "Phiên bản máy tính" vẫn sẽ tiếp tục khả dụng. [[mw:Requests for comment/Mobile domain sunsetting/2025 Announcement|Tìm hiểu thêm]]. [https://phabricator.wikimedia.org/T214998] * [[mw:Special:MyLanguage/Help:CirrusSearch#creationdate and lasteditdate|Bộ lọc ngày]] mới, <code dir=ltr>creationdate:</code> và <code dir=ltr>lasteditdate:</code>, nay có sẵn trong bộ máy tìm kiếm của wiki. Những bộ lọc này cho phép người dùng lọc kết quả tìm kiếm theo bản sửa đổi đầu tiên hoặc cuối cùng của trang. Bộ lọc hỗ trợ các toán tử so sánh (v.d. <code dir=ltr>>2024</code>) và ngày dạng tương đối (v.d. <code dir=ltr>today-1d</code>), giúp việc tìm nội dung hoặc trang được cập nhật gần đây trong khoảng năm cụ thể trở nên dễ dàng hơn. [https://phabricator.wikimedia.org/T403593] * [[f:|Wikifunctions]] nay hỗ trợ văn bản giàu tính chất (rich text) trong lời gọi hàm nhúng trên 150 wiki đã kích hoạt nó. Để giới thiệu tính năng này, nhóm đã tạo [[f:Z26333|bảng biến cách tiếng Latin]] mà biên tập viên Wiktionary có thể sử dụng để tự động tạo ra các dạng danh từ, nhằm tạo ra những kết quả rõ ràng và được định dạng — xem một [[f:Wikifunctions:Embedded function calls/Wiktionary tables demonstration|ví dụ đầu ra]] cụ thể. Nếu bạn cần hỗ trợ hay có bất kỳ phản hồi nào, vui lòng [[f:Wikifunctions:Project chat|liên hệ nhóm Wikifunctions]]. [https://phabricator.wikimedia.org/T397402] * Một liên kết sửa đổi nay sẽ hiển thị trong hộp thể loại trên các trang bài viết đối với người dùng đã đăng nhập, khi nhấn vào sẽ khởi động trực tiếp hộp thoại thể loại bằng Trình Soạn thảo Trực quan (VisualEditor). [https://phabricator.wikimedia.org/T291691] * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:34}} {{PLURAL:34|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, tuần trước đã có vấn đề khi tải các tập tin pdf và hiện nó đã được giải quyết. [https://phabricator.wikimedia.org/T405957] '''Cập nhật cho những người đóng góp vào mảng kỹ thuật''' * Trường <code dir=ltr>rev_sha1</code> trong bảng cơ sở dữ liệu bản sửa đổi đang chuẩn bị được loại bỏ để thay thế bằng trường <code dir=ltr>content_sha1</code> trong bảng cơ sở dữ liệu nội dung. Xem [https://lists.wikimedia.org/hyperkitty/list/cloud@lists.wikimedia.org/thread/2D2M3SP4WHR6BXXKTZ2PBLZQYR3EGQVR/ thông báo này] để biết thêm thông tin. * [[mw:Special:MyLanguage/Reading/Web|Nhóm Trải nghiệm Người đọc]] sẽ triển khai giao diện người dùng [[w:en:Light-on-dark color scheme|Chế độ Tối]] trên tất cả các trang Wikimedia vào ngày 29 tháng 10 năm 2025. Tất cả thành viên vô danh trên các trang Wikimedia sẽ có tùy chọn kích hoạt bảng màu có văn bản màu sáng trên nền tối. Chế độ này được thiết kế để cung cấp trải nghiệm đọc thoải mái hơn, đặc biệt trong những trường hợp thiếu sáng. Tác giả bản mẫu và biên tập viên kỹ thuật được khuyến khích [[mw:Special:MyLanguage/Reading/Web/Accessibility for reading/Updates/2024-04|tìm hiểu cách chuẩn bị các trang để tương thích với Chế độ tối]] và giải quyết bất kỳ vấn đề tương thích nào xuất hiện trong các bản mẫu trên wiki của họ trước thời điểm kích hoạt. Vui lòng liên hệ nhóm Web nếu có bất kỳ câu hỏi hay cần sự trợ giúp nào trên [[mw:Talk:Reading/Web/Accessibility for reading#|trang thảo luận này]] trước ngày kích hoạt. [https://phabricator.wikimedia.org/T395628] * Bắt đầu từ thứ 2, ngày 6 tháng 10, các điểm cuối API theo đường dẫn <code>rest.php</code> sẽ được định tuyến lại qua Cổng API nội bộ mới. Mỗi wiki sẽ được cập nhật dựa trên các nhóm phát hành tiêu chuẩn, với tổng lưu lượng truy cập tăng dần theo thời gian. Thay đổi này dự kiến không gây ra bất kỳ sự gián đoạn gì. Nếu phát hiện thấy có bất kỳ vấn đề nào, vui lòng tạo tác vụ Phabricator gửi lên [[phab:tag/serviceops/|bảng của nhóm Vận hành Dịch vụ]]. [https://phabricator.wikimedia.org/T400130] * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.45/wmf.22|MediaWiki]] '''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2025/41|Biên dịch]]&nbsp;• [[m:Tech|Nhờ giúp đỡ]]&nbsp;• [[m:Talk:Tech/News|Phản hồi]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].'' </div><section end="technews-2025-W41"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 17:23, ngày 6 tháng 10 năm 2025 (UTC) <!-- Tin nhắn của Thành viên:Quiddity (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29400897 --> == <span lang="en" dir="ltr">Have your say: vote for the 2025 Board of Trustees</span> == <div lang="en" dir="ltr"> <section begin="announcement-content" /> Hello all, The voting period for the [[m:Special:MyLanguage/Wikimedia Foundation elections/2025|2025 Board of Trustees election]] is now open. Candidates are running for two (2) seats on the Board. To check your voter eligibility, please visit the [[m:Special:MyLanguage/Wikimedia Foundation elections/2025/Voter eligibility guidelines|voter eligibility page]]. Learn more about them by [[m:Special:MyLanguage/Wikimedia Foundation elections/2025/Candidates|reading their application statements and watch their candidacy videos]]. When you are ready, go to the [[m:Special:SecurePoll/vote/405|SecurePoll voting page to vote]]. '''The vote is open from October 8 at 00:00 UTC to October 22 at 23:59 UTC.''' Best regards, Abhishek Suryawanshi<br />Chair, Elections Committee<section end="announcement-content" /> </div> [[Thành viên:MediaWiki message delivery|MediaWiki message delivery]] ([[Thảo luận Thành viên:MediaWiki message delivery|thảo luận]]) 04:49, ngày 9 tháng 10 năm 2025 (UTC) <!-- Tin nhắn của Thành viên:RamzyM (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=29360896 --> == Bản tin Kỹ thuật: Tuần 42-2025 == <section begin="technews-2025-W42"/><div class="plainlinks"> '''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2025/42|Các bản dịch]] của bản tin này cũng có sẵn cho bạn. '''Nổi bật trong tuần''' * Tuần trước, chúng tôi đã tiến hành triển khai những cải tiến về các tính năng bảo mật tài khoản và xác thực hai yếu tố (2FA) trên tất cả các wiki. Những thay đổi đó bao gồm cải tiến giao diện người dùng cho trang [https://auth.wikimedia.org/metawiki/wiki/Special:AccountSecurity Đặc biệt:Bảo mật tài khoản], hỗ trợ nhiều phương thức xác thực 2FA thông qua các ứng dụng xác thực và khóa bảo mật di động (trước đây người dùng chỉ có thể kích hoạt một phương thức xác thực), và mô đun Mã Khôi phục mới giúp giảm thiểu tình trạng khóa tài khoản do mất ứng dụng và thiết bị xác thực hai yếu tố. Là một phần của dự án [[mw:Special:MyLanguage/Product Safety and Integrity/Account Security|Bảo mật Tài khoản]], quá trình này sẽ tiếp tục trong phần còn lại của năm 2025 để cải thiện nhiều hơn trải nghiệm người dùng, cùng việc thêm hỗ trợ cho mã khóa làm phương thức xác thực thứ hai thay thế. '''Cập nhật cho biên tập viên''' * Một phần khác của dự án Bảo mật tài khoản là cung cấp 2FA cho tất cả người dùng. Bên cạnh biên tập viên có quyền nâng cao, chẳng hạn như bảo quản viên và hành chính viên, 40% biên tập viên nay có quyền truy cập vào 2FA. Bạn có thể kiểm tra xem bạn có quyền truy cập đó không tại [https://auth.wikimedia.org/metawiki/wiki/Special:AccountSecurity Đặc biệt: Bảo mật tài khoản]. Hướng dẫn kích hoạt có trên trang được liên kết theo. Kế hoạch là tiếp tục tăng cường tính khả dụng nếu xác định rằng khả năng hỗ trợ người dùng có thể hỗ trợ việc sử dụng toàn cục của nó. [https://phabricator.wikimedia.org/T400579] * Tuần này, người dùng trên các wiki mà mặc định đã có sẵn tính năng [[mw:Special:MyLanguage/Talk pages project/Usability|Cải tiến Khả năng Sử dụng]] trên trang thảo luận (tất cả ''trừ'' 12 wiki được liệt kê trong tác vụ [[phab:T379264|T379264]]) sẽ có được khả năng gửi lời cảm ơn bình luận trực tiếp trên trang thảo luận mà nó xuất hiện. Trước thay đổi này, việc cảm ơn chỉ có thể được thực hiện bằng cách truy cập lịch sử sửa đổi của trang thảo luận. Bạn có thể [[diffblog:2025/10/13/revolutionizing-gratitude-a-new-era-of-thanking-comments/|tìm hiểu thêm về thay đổi này]]. [https://phabricator.wikimedia.org/T366095] * Người dùng chưa [[Special:Preferences#mw-prefsection-personal-email|xác thực địa chỉ email của mình]] sẽ sớm nhận thông báo hàng tháng nhắc họ làm điều này. Điều này là bởi vì người dùng đã xác thực email của họ có thể dễ dàng khôi phục tài khoản của mình hơn. Những lời nhắc này sẽ không được gửi nếu người dùng không hoạt động hoặc đã loại bỏ email chưa được xác thực khỏi tài khoản của mình. [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Email_confirmation][https://phabricator.wikimedia.org/T58074] * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:21}} {{PLURAL:21|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, đã có một bản sửa lỗi nhằm giải quyết một lỗi thỉnh thoảng xảy ra khi lưu các đoạn đã được dịch trong công cụ Dịch Nội dung, cùng với đó các thông báo lỗi có liên quan giờ dễ nhìn hơn. [https://phabricator.wikimedia.org/T376531] '''Cập nhật cho những người đóng góp vào mảng kỹ thuật''' * Nhóm Công cụ Không được Hỗ trợ đã chọn [[c:Special:MyLanguage/Commons:Video2commons|Video2Commons]] làm công cụ đầu tiên cho chu kỳ thí điểm của họ. Nhóm sẽ tìm hiểu cách để cải tiến và duy trì công cụ này trong những tháng tiếp theo. [[m:Special:MyLanguage/Product and Technology Advisory Council/Unsupported Tools Working Group|Tìm hiểu thêm trên Meta]]. * [[File:Octicons-sync.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.45/wmf.23|MediaWiki]] '''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2025/42|Biên dịch]]&nbsp;• [[m:Tech|Nhờ giúp đỡ]]&nbsp;• [[m:Talk:Tech/News|Phản hồi]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].'' </div><section end="technews-2025-W42"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 18:59, ngày 13 tháng 10 năm 2025 (UTC) <!-- Tin nhắn của Thành viên:Quiddity (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29434481 --> == <span lang="en" dir="ltr">Help us decide the name of the new Abstract Wikipedia project</span> == <div lang="en" dir="ltr"> <section begin="function1"/> {{int:Hello}}. Please help pick a name for the new Abstract Wikipedia wiki project. This project will be a wiki that will enable users to combine functions from [[:f:|Wikifunctions]] and data from Wikidata in order to generate natural language sentences in any supported languages. These sentences can then be used by any Wikipedia (or elsewhere). There will be two rounds of voting, each followed by legal review of candidates, with votes beginning on 20 October and 17 November 2025. Our goal is to have a final project name selected on mid-December 2025. If you would like to participate, then '''[[m:Special:MyLanguage/Abstract Wikipedia/Abstract Wikipedia naming contest|please learn more and vote now]]''' at meta-wiki. {{Int:Feedback-thanks-title}} <section end="function1"/> </div> -- [[User:Sannita (WMF)|User:Sannita (WMF)]] ([[User talk:Sannita (WMF)|talk]]) 11:44, ngày 20 tháng 10 năm 2025 (UTC) <!-- Tin nhắn của Thành viên:Sannita (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=29432175 --> == Bản tin Kỹ thuật: Tuần 43-2025 == <section begin="technews-2025-W43"/><div class="plainlinks"> '''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2025/43|Các bản dịch]] của bản tin này cũng có sẵn cho bạn. '''Cập nhật cho biên tập viên''' * Để tối ưu hóa cách dữ liệu người dùng được lưu trong cơ sở dữ liệu của chúng tôi, các tùy chọn được lưu của người dùng chưa đăng nhập trong vòng hơn 5 năm và có ít hơn 100 sửa đổi sẽ bị xóa. Khi những người dùng đó quay lại, tùy chọn mặc định sẽ được áp dụng. [https://phabricator.wikimedia.org/T406724] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:20}} {{PLURAL:20|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, đã có một liên kết hỏng từ thông điệp giao diện Đóng góp toàn cục đến trang Đóng góp toàn cục trên XTools mà hiện đã được giải quyết. [https://phabricator.wikimedia.org/T406415] '''Cập nhật cho những người đóng góp vào mảng kỹ thuật''' * Việc định tuyến lại toàn bộ lưu lượng đến các điểm cuối API theo cổng <code dir=ltr><nowiki>rest.php</nowiki></code> thông qua một cổng API chung hiện đã hoàn tất. Nếu phát hiện bất kỳ vấn đề nào, vui lòng gửi tác vụ phabricator lên [[phab:tag/serviceops/|bảng tác vụ của nhóm Vận hành Dịch vụ]]. * Các sửa đổi đối với chú thích hoặc từ hạn định Wikidata nay sẽ ít hiển thị thường xuyên hơn trên các mục Thay đổi gần đây và Danh sách theo dõi trên các wiki khác, nhằm giảm bớt các thông báo không cần thiết. Thay đổi này sẽ giảm tổng số lượng các khoản mục 'gây nhiễu'. Bản thân các trang Wikidata sẽ không có sự thay đổi nào. [https://phabricator.wikimedia.org/T401290] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.45/wmf.24|MediaWiki]] '''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2025/43|Biên dịch]]&nbsp;• [[m:Tech|Nhờ giúp đỡ]]&nbsp;• [[m:Talk:Tech/News|Phản hồi]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].'' </div><section end="technews-2025-W43"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 19:36, ngày 20 tháng 10 năm 2025 (UTC) <!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29478670 --> == Bản tin Kỹ thuật: Tuần 44-2025 == <section begin="technews-2025-W44"/><div class="plainlinks"> '''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2025/44|Các bản dịch]] của bản tin này cũng có sẵn cho bạn. '''Cập nhật cho biên tập viên''' * Ứng dụng Wikipedia dành cho iOS đã ra mắt thử nghiệm A/B/C nhằm cải tiến tính năng duyệt theo thẻ cho một số khu vực và ngôn ngữ nhất định. Thử nghiệm mang tên “Nhiều thẻ động hơn” này sẽ khám phá trải nghiệm trên thẻ mới cùng với việc bổ sung đề xuất bài viết ở mục “Bạn có biết” và “Vì bạn đã đọc”. Bạn có thể [[mw:Special:MyLanguage/Wikimedia Apps/Team/iOS/Tabbed Browsing (Tabs)/New Tab Experience and Recommendations Experiment|đọc thêm thông tin trên trang dự án này]]. * Thành viên tự xác nhận trên các wiki [[gitiles:operations/mediawiki-config/+/a2d2aaab9ace84280dd2f4c70a33bb69cd73850f/dblists/small.dblist|nhỏ]] và [[gitiles:operations/mediawiki-config/+/a2d2aaab9ace84280dd2f4c70a33bb69cd73850f/dblists/medium.dblist|vừa]] đã triển khai phần mở rộng CampaignEvents nay có thể sử dụng công cụ [[m:Special:MyLanguage/Event Center/Registration|Đăng ký Sự kiện]] mà không cần quyền Người tổ chức Sự kiện. Tính năng này cho phép người tổ chức kích hoạt việc đăng ký, quản lý người tham gia, và cho phép các thành viên đăng ký chỉ với một cú nhấp chuột thay vì phải ký vào trang sự kiện. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:31}} {{PLURAL:31|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, vấn đề về màu sắc nhấp nháy khi giữ hoặc nhấn phím mũi tên trong phần cài đặt chế độ tối của giao diện Vector 2022 nay đã được giải quyết. [https://phabricator.wikimedia.org/T402285] '''Cập nhật cho những người đóng góp vào mảng kỹ thuật''' * Phần mở rộng CampaignEvents sẽ được triển khai trên tất cả những wiki còn lại trong tuần từ ngày 17 tháng 11 năm 2025. Phần mở rộng này hiện bao gồm ba tính năng: Đăng ký Sự kiện, Danh sách Cộng tác, và Danh sách Mời. Trong đợt triển khai này, Danh sách Lời mời sẽ không được kích hoạt cho Wikifunctions và MediaWiki cho đến khi những cộng đồng này yêu cầu kích hoạt. [[m:Special:MyLanguage/CampaignEvents/Deployment status|Truy cập trang thông tin triển khai để biết thêm thông tin]]. * Trải nghiệm chỗ thử REST dựa trên SwaggerUI nay đã có mặt trên tất cả các dự án wiki. Chỗ thử này có thể truy cập được thông qua trang [[{{#special:RestSandbox}}]]. Vui lòng báo cáo bất kỳ vấn đề nào lên bảng tin của nhóm Giao diện MediaWiki, hoặc tham gia thảo luận trên trang [[mw:Special:MyLanguage/MediaWiki Interfaces Team/Feature Feedback/REST Sandbox|khởi động dự án]] này. [https://phabricator.wikimedia.org/project/board/6931/] * Những điểm cuối chuyển đổi với đường dẫn kết thúc bằng dấu gạch chéo trong REST API của MediaWiki hiện đang được đánh dấu là lỗi thời. Chúng vẫn sẽ tiếp tục hoạt động trong thời gian này, tuy nhiên dự kiến chúng sẽ bị loại bỏ vào cuối tháng 1 năm 2026. Toàn bộ người dùng API đang gọi chúng được khuyến khích chuyển sang bản đường dẫn không kết thúc bằng dấu gạch chéo. Cả hai biến thể điểm cuối này đều có thể tìm thấy và thử được sử dụng [https://test.wikipedia.org/w/index.php?api=mw-extra&title=Special%3ARestSandbox Chỗ thử REST]. Xem trang [[mw:API/Deprecation|Ngừng hỗ trợ với REST API MediaWiki]] để biết thêm thông tin chi tiết về các chính sách và thủ tục trong việc ngừng hỗ trợ API. * [[mw:API:REST API/Changelog|Nhật trình thay đổi chuyên biệt nay đã có sẵn cho REST API của MediaWiki]]. Nhật trình thay đổi này cung cấp tổng quan về những thay đổi này, giúp các nhà phát triển dễ dàng theo dõi những cải tiến và lần lặp lại của chúng. Mọi thông báo cũng sẽ tiếp tục được gửi thông qua các kênh truyền thông chính, bao gồm Bản tin Kỹ thuật và danh sách phân phối qua thư điện tử, nhưng nay có thể dễ dàng tham khảo hơn từ một vị trí trung tâm. Nếu bạn có bất kỳ phản hồi nào về định dạng, cấu trúc, hoặc nội dung về nhật trình thay đổi này, vui lòng [[mw:API talk:REST API/Changelog|tham gia thảo luận tại đây]]. * Bảo quản viên nay có thể xóa thể loại theo dõi mà trước đây được thêm bởi phần mở rộng JsonConfig, do nó không còn được sử dụng. Xem các thể loại được liên kết từ [[d:Q130635582#sitelinks-wikipedia|Q130635582]]. Việc vẫn còn trang được liệt kê trên thể loại này là bình thường vì nó chỉ là vấn đề về bộ nhớ đệm, và chúng sẽ tự động được xóa khi các trang đó được sửa đổi trong lần tiếp theo. [https://phabricator.wikimedia.org/T378352] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.45/wmf.25|MediaWiki]] '''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2025/44|Biên dịch]]&nbsp;• [[m:Tech|Nhờ giúp đỡ]]&nbsp;• [[m:Talk:Tech/News|Phản hồi]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].'' </div><section end="technews-2025-W44"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 19:31, ngày 27 tháng 10 năm 2025 (UTC) <!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29513638 --> == <span lang="en" dir="ltr">Seeking volunteers to join several of the movement’s committees</span> == <div lang="en" dir="ltr"> <section begin="announcement-content" /> Each year, typically from October through December, several of the movement’s committees seek new volunteers. Read more about the committees on their Meta-wiki pages: * [[m:Special:MyLanguage/Affiliations Committee|Affiliations Committee (AffCom)]] * [[m:Special:MyLanguage/Ombuds commission|Ombuds commission (OC)]] * [[m:Special:MyLanguage/Wikimedia Foundation/Legal/Community Resilience and Sustainability/Trust and Safety/Case Review Committee|Case Review Committee (CRC)]] Applications for the committees open on October 30, 2025. Applications for the Affiliations Committee, Ombuds commission and the Case Review Committee close on December 11, 2025. Learn how to apply by [[m:Special:MyLanguage/Wikimedia Foundation/Legal/Committee appointments|visiting the appointment page on Meta-wiki]]. Post to the talk page or email cst[[File:At sign.svg|16x16px|link=|(_AT_)]]wikimedia.org with any questions you may have. For the Committee Support team, <section end="announcement-content" /> </div> -[[m:User:MKaur (WMF)| MKaur (WMF)]] 14:14, ngày 30 tháng 10 năm 2025 (UTC) <!-- Tin nhắn của Thành viên:MKaur (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=29517125 --> == Bản tin Kỹ thuật: Tuần 45-2025 == <section begin="technews-2025-W45"/><div class="plainlinks"> '''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2025/45|Các bản dịch]] của bản tin này cũng có sẵn cho bạn. '''Cập nhật cho biên tập viên''' * Các bảo quản viên giờ đây sẽ thấy rằng [[{{#special:MergeHistory}}]] đã trở nên linh hoạt hơn đáng kể trong việc hợp nhất. Nó có thể hợp nhất các phần được lấy từ giữa lịch sử của trang nguồn (thay vì chỉ từ phần đầu), và chèn các phiên bản vào bất kỳ vị trí nào trong lịch sử của trang đích (thay vì chỉ ở phần đầu). [https://phabricator.wikimedia.org/T382958] * Đối với những người dùng đã kích hoạt "{{int:discussiontools-preference-autotopicsub}}" [[Special:Preferences#mw-prefsection-editing|trong tùy chọn của họ]], việc bắt đầu một chủ đề mới hoặc thêm một phản hồi vào một chủ đề hiện có giờ đây sẽ tự động đăng ký họ theo dõi các phản hồi mới trong chủ đề đó. Trước đây, điều này chỉ xảy ra nếu người dùng sử dụng tiện ích "{{int:Skin-action-addsection}}" hoặc "{{int:Discussiontools-replybutton}}" của DiscussionTools. Khi DiscussionTools mới được ra mắt, các tài khoản hiện có không được tự động bật tính năng theo dõi chủ đề, vì vậy thay đổi này chủ yếu sẽ ảnh hưởng đến các tài khoản mới hơn và những người dùng đã chủ động thay đổi tùy chọn của mình kể từ thời điểm đó. [https://phabricator.wikimedia.org/T290778] * Các mô đun Scribunto giờ đây có thể được dùng để [[mw:Special:MyLanguage/Extension:Scribunto/Lua reference manual#SVG library|tạo ảnh SVG]]. Tính năng này cho phép tạo biểu đồ, đồ họa và các hình minh họa khác một cách linh hoạt thông qua Lua, giúp giảm nhu cầu phải tạo chúng bên ngoài rồi tải lên dưới dạng tập tin. [https://phabricator.wikimedia.org/T405861] * Các trang web của Wikimedia giờ đây sẽ cung cấp cho tất cả người dùng ẩn danh tùy chọn bật chế độ tối, với giao diện chữ sáng trên nền tối. Cải tiến này nhằm mang lại trải nghiệm đọc dễ chịu hơn, đặc biệt là trong môi trường thiếu sáng. [https://phabricator.wikimedia.org/T395628] * Những người dùng có danh sách theo dõi lớn từ lâu đã gặp lỗi quá thời gian khi chỉnh sửa [[Special:EditWatchlist|Special:EditWatchlist]]. Trang này nay sẽ tải các mục theo từng phần nhỏ thay vì tải toàn bộ cùng lúc nhờ bản cập nhật phân trang, giúp mọi người có thể chỉnh sửa danh sách theo dõi mượt mà hơn. Trong quá trình cập nhật cơ sở dữ liệu, tính năng sắp xếp theo thời hạn đã bị loại bỏ vì chậm hơn hơn 100 lần so với sắp xếp theo tên trang. Một [https://meta.wikimedia.org/wiki/Community_Wishlist/W454 yêu cầu từ cộng đồng] đã được tạo để tìm các cách thay thế nhằm khôi phục tính năng sắp xếp theo thời hạn. Nếu bạn thấy tính năng này quan trọng, hãy ủng hộ yêu cầu đó! [https://phabricator.wikimedia.org/T41510] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:31}} {{PLURAL:31|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, việc khắc phục lỗi tô sáng vẫn còn hiển thị sau khi sử dụng tính năng tìm và thay thế của VisualEditor trong quá trình tìm kiếm. [https://phabricator.wikimedia.org/T407318] '''Cập nhật cho những người đóng góp vào mảng kỹ thuật''' * Từ năm 2019, [[m:Special:MyLanguage/Wikimedia URL Shortener|Trình rút gọn URL của Wikimedia]] tại https://w.wiki đã có sẵn cho tất cả các wiki của Wikimedia để tạo liên kết ngắn đến bài viết, liên kết cố định, bản so sánh, v.v. Tính năng này có trong thanh bên với tên "Lấy URL rút gọn". Hiện có 30 wiki vẫn đang sử dụng tiện ích mở rộng cũ "ShortUrl". Tiện ích cũ này sẽ sớm bị gỡ bỏ. Điều này có nghĩa là các URL dạng <code>/s/</code> sẽ không còn được hiển thị dưới tiêu đề bài viết thông qua thẻ HTML <code dir=ltr>class="title-shortlink"</code>. Tuy nhiên, các URL dạng <code>/s/</code> vẫn sẽ tiếp tục hoạt động. [https://phabricator.wikimedia.org/T107188] * Vào thứ Năm, ngày 30 tháng 10, các nhóm [[:mw:Special:MyLanguage/MediaWiki Interfaces Team|Giao diện MediaWiki]] và [[:mw:Special:MyLanguage/Wikimedia Site Reliability Engineering|Vận hành Dịch vụ SRE]] đã bắt đầu chuyển hướng lưu lượng của Action API thông qua một cổng API chung. Các wiki riêng lẻ sẽ được cập nhật theo từng nhóm phát hành tiêu chuẩn, với tổng lưu lượng được tăng dần theo thời gian. Thay đổi này được kỳ vọng sẽ không gây ra lỗi hoặc gián đoạn. Nếu bạn phát hiện bất kỳ sự cố nào, vui lòng gửi báo cáo trên bảng [https://phabricator.wikimedia.org/tag/serviceops/ của nhóm Vận hành Dịch vụ]. * Việc triển khai MediaWiki Train sẽ tạm dừng trong hai tuần cuối cùng của năm 2025: ngày 22 và 29 tháng 12. Các khung thời gian backport cũng sẽ tạm ngưng từ thứ Hai, ngày 22 tháng 12 năm 2025 đến thứ Năm, ngày 2 tháng 1 năm 2026. "Backport window" là khoảng thời gian được lên lịch để bổ sung các nội dung như bản vá lỗi và thay đổi cấu hình. Hiện vẫn còn bảy đợt triển khai MediaWiki Train nữa trong năm 2025. [https://lists.wikimedia.org/hyperkitty/list/wikitech-l@lists.wikimedia.org/thread/SMWTEAES4SDLDUSK4HMWNBSKNCXZAWYN/] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.45/wmf.26|MediaWiki]] '''Chuyên sâu''' * Năm 2025, Quỹ Wikimedia báo cáo rằng các hệ thống AI và công cụ tìm kiếm ngày càng sử dụng nội dung từ Wikipedia mà không dẫn người dùng quay lại trang, góp phần khiến lượng lượt xem từ người dùng thực giảm 8% so với năm 2024. Sau khi phát hiện các bot giả dạng người dùng thật, Wikimedia đã cập nhật dữ liệu truy cập để phản ánh sự thay đổi này. Bạn có thể đọc thêm về xu hướng người dùng hiện nay trên Wikipedia trong [[diffblog:2025/10/17/new-user-trends-on-wikipedia/|bài viết trên blog Diff]]. '''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2025/45|Biên dịch]]&nbsp;• [[m:Tech|Nhờ giúp đỡ]]&nbsp;• [[m:Talk:Tech/News|Phản hồi]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].'' </div><section end="technews-2025-W45"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 19:34, ngày 3 tháng 11 năm 2025 (UTC) <!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29552512 --> == Bản tin Kỹ thuật: Tuần 46-2025 == <section begin="technews-2025-W46"/><div class="plainlinks"> '''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2025/46|Các bản dịch]] của bản tin này cũng có sẵn cho bạn. '''Cập nhật cho biên tập viên''' [[File:Talk pages default look (April 2023).jpg|thumb|alt=Hình chụp những thay đổi về mặt trực quan được thực hiện trên trang thảo luận|Ví dụ về trang thảo luận với thiết kế mới, bằng tiếng Pháp.]] * Kể từ ngày 12 tháng 11, người dùng sẽ nhận thấy sự thay đổi về [[m:Special:MyLanguage/Talk pages project/Feature summary#Usability improvements|giao diện của các trang thảo luận]] trên [[Phab:T379264|một số trang Wikipedia]]. Hầu hết [[phab:T392121|toàn bộ các wiki]] đã có được thay đổi về mặt thiết kế này; những thay đổi này sẽ được thực hiện sau trên [[phab:T409297|Wikipedia tiếng Anh]]. Bạn có thể đọc thêm [[diffblog:2024/05/02/making-talk-pages-better-for-everyone/|trên ''Diff'']]. Người dùng có thể chọn không thực hiện thay đổi này [[Special:Preferences#mw-prefsection-editing|trong tùy chọn người dùng của mình]] ở tùy chọn "{{int:discussiontools-preference-visualenhancements}}". [https://phabricator.wikimedia.org/T379264] * MediaWiki nay có thể hiển thị [[mw:Special:MyLanguage/Help:Protection indicators|chỉ báo trên trang]] tự động khi một trang bị khóa. Tính năng này được tắt theo mặc định. Nó có thể được bật theo [[m:Special:MyLanguage/Requesting wiki configuration changes|yêu cầu của cộng đồng]]. [https://phabricator.wikimedia.org/T12347] * Việc sử dụng các nút "{{int:showpreview}}" hoặc "{{int:showdiff}}" trong trình soạn thảo mã nguồn nay sẽ đi kèm một số tham số URL nhất định như '[[mw:Special:MyLanguage/Manual:Parameters to index.php#useskin|useskin]]', '[[mw:Special:MyLanguage/Manual:Parameters to index.php#uselang|uselang]]' và '[[mw:Special:MyLanguage/Help:Section#Editing sections|section]]'. Bản cập nhật này đồng thời cũng sửa một vấn đề mà, nếu trình duyệt bị sập khi đang xem trước sửa đổi một đề mục duy nhất, việc lưu sửa đổi này có thể ghi đè toàn bộ trang chỉ bằng nội dung của đề mục đó. [https://phabricator.wikimedia.org/T62744][https://phabricator.wikimedia.org/T24029][https://phabricator.wikimedia.org/T155097] * Các wiki Wikivoyage có thể dùng [[mw:Special:MyLanguage/Help:Extension:Kartographer#Markers and counters|điểm đánh dấu bản đồ bằng màu trong nội dung văn bản của bài viết]]. Nội dung văn bản của những điểm đánh dấu đó nay sẽ được hiển thị bằng màu đen hoặc trắng tương phản, thay vì luôn luôn là màu trắng. Cộng đồng có thể loại bỏ các phương pháp giải quyết cục bộ cho vấn đề này. [https://phabricator.wikimedia.org/T369454] * Tab Hoạt động trên ứng dụng Wikipedia dành cho Android nay có sẵn cho tất cả người dùng. Tab mới này cung cấp thông tin chuyên sâu được cá nhân hóa về hoạt động đọc, sửa đổi, và quyên góp, đồng thời đơn giản hóa việc điều hướng và giúp cho việc sử dụng ứng dụng trở nên hấp dẫn hơn. [https://www.mediawiki.org/wiki/Wikimedia_Apps/Team/Android/Activity_Tab_Experiment] * Nhóm Phát triển Độc giả (Reader Growth) chuẩn bị khởi động thử nghiệm mang tên "Duyệt hình ảnh" để kiểm tra cách giúp người đọc dễ dàng duyệt và khám phá hình ảnh trên các bài viết Wikipedia hơn. Thử nghiệm này, một thử nghiệm A/B dành riêng cho thiết bị di động, sẽ bắt đầu được thực hiện vào tuần từ ngày 17 tháng 11 và sẽ kéo dài trong bốn tuần, ảnh hưởng đến 0,05% người dùng trên wiki tiếng Anh. Thử nghiệm này đã bắt đầu vào ngày 3 tháng 11 trên các wiki tiếng Ả Rập, tiếng Trung, tiếng Pháp, tiếng Indonesia và tiếng Việt, ảnh hưởng đến tối đa 10% người dùng trên những wiki này. [https://www.mediawiki.org/wiki/Readers/Reader_Growth/WE3.1.3_Image_Browsing] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:27}} {{PLURAL:27|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ như đã khắc phục việc không thể khóa tài khoản trên trang web dành cho di động. [https://phabricator.wikimedia.org/T256185] '''Cập nhật cho những người đóng góp vào mảng kỹ thuật''' * [[wikitech:Help talk:Toolforge/Toolforge standards committee#November 2025 committee nominations|Wikitech đang mở đề cử]] chọn thành viên mới của [[wikitech:Help:Toolforge/Toolforge standards committee|Ủy ban tiêu chuẩn của Toolforge]]. Ủy ban này giám sát [[wikitech:Help:Toolforge/Right to fork policy|Chính sách quyền sử dụng bản sao]] và [[wikitech:Help:Toolforge/Abandoned tool policy|Chính sách cho công cụ bị bỏ rơi]] của Toolforge cùng nhiều nhiệm vụ khác. Đề cử sẽ tiếp tục mở đến hết ngày 28 tháng 11 năm 2025. * [[w:JSON Web Token#Standard fields|Trường bên cung cấp JWT]] trong [[mw:Special:MyLanguage/OAuth/For Developers#OAuth 2|mã truy cập OAuth 2]] dành cho [[m:Special:MyLanguage/Help:Unified login|wiki SUL]] (đăng nhập trung ương) đã được thay đổi thành <code><nowiki>https://meta.wikimedia.org</nowiki></code>. Các mã truy cập cũ vẫn sẽ hoạt động. [https://phabricator.wikimedia.org/T399199] * [[w:JSON Web Token#Standard fields|Trường chủ đề JWT]] trong [[mw:Special:MyLanguage/OAuth/For Developers#OAuth 2|mã truy cập OAuth 2]] sẽ sớm thay đổi từ <code><user id></code> sang <code dir=ltr style="white-space:nowrap">mw:<identity type>:<user id></code>, trong đó <code><identity type></code> thường là <code dir=ltr>CentralAuth:</code><!-- not a typo --> (đối với [[m:Special:MyLanguage/Help:Unified login|wiki SUL]]) hoặc <code dir=ltr style="white-space:nowrap">local:<wiki id></code> (đối với các wiki khác). Điều này là nhằm tránh xung đột giữa các loại ID người dùng khác nhau, và để mã truy cập OAuth 2 và cookie <code>sessionJwt</code> trở nên giống nhau hơn. Các mã truy cập cũ vẫn sẽ hoạt động. [https://phabricator.wikimedia.org/T399199] * Các thông điệp cấm của MediaWiki ([[MediaWiki:Blockedtext|blockedtext]], [[MediaWiki:Blockedtext-partial|blockedtext-partial]], [[MediaWiki:Autoblockedtext|autoblockedtext]], [[MediaWiki:Systemblockedtext|systemblockedtext]], [[MediaWiki:Blockedtext-tempuser|blockedtext-tempuser]], [[MediaWiki:Autoblockedtext-tempuser|autoblockedtext-tempuser]]) nay hỗ trợ thêm các tham số bổ sung nhằm chỉ ra xem người dùng đó có bị cấm sửa đổi trang thảo luận của mình <code><nowiki>$9</nowiki></code> hoặc gửi thư điện tử cho người dùng khác <code><nowiki>$</nowiki><nowiki>10</nowiki></code> hay không. [https://phabricator.wikimedia.org/T285612] * Nhánh <code>REL1_45</code> cho lõi MediaWiki và từng phần mở rộng cùng giao diện trong git của Wikimedia đã được tạo. Đây là bước đầu tiên trong quá trình phát hành phiên bản MediaWiki 1.45.0, được lên kế hoạch triển khai vào cuối tháng 11 năm 2025. Nếu bạn đang thực hiện việc khắc phục lỗi nghiêm trọng hoặc thực hiện tính năng mới, bạn có thể cần phải lưu ý thay đổi này. [https://lists.wikimedia.org/hyperkitty/list/wikitech-l@lists.wikimedia.org/thread/ZUY7TY3Z6XPZWZVAZV63OPO5OW52Q6GE/] * Quy trình tạo bản dump CirrusSearch đã được cập nhật do hiệu suất bị chậm. Nếu bạn gặp bất kỳ sự cố nào khi chuyển sang bản dump thay thế, vui lòng liên hệ với Nhóm Nền tảng Tìm kiếm để được hỗ trợ. [https://phabricator.wikimedia.org/T366248][https://lists.wikimedia.org/hyperkitty/list/wikitech-l@lists.wikimedia.org/thread/3KQPOR6ACVN6OVLMLZPIBXQSWQKW4E3K/] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.46/wmf.2|MediaWiki]] '''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2025/46|Biên dịch]]&nbsp;• [[m:Tech|Nhờ giúp đỡ]]&nbsp;• [[m:Talk:Tech/News|Phản hồi]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].'' </div><section end="technews-2025-W46"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 20:38, ngày 10 tháng 11 năm 2025 (UTC) <!-- Tin nhắn của Thành viên:UOzurumba (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29606150 --> == Bản tin Kỹ thuật: Tuần 47-2025 == <section begin="technews-2025-W47"/><div class="plainlinks"> '''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2025/47|Các bản dịch]] của bản tin này cũng có sẵn cho bạn. '''Cập nhật cho biên tập viên''' * [[mw:Special:MyLanguage/Readers/Reader Experience|Nhóm Trải nghiệm Người đọc]] đang thử nghiệm tính năng [[mw:Special:MyLanguage/Readers/Reader Experience/WE3.3.4_Reading lists|danh sách đọc trên trang di động]], cho phép người đọc đã đăng nhập chưa thực hiện sửa đổi nào có thể lưu danh sách bài viết riêng tư để đọc sau. Thử nghiệm đang được thực hiện trên các Wikipedia tiếng Ả Rập, tiếng Trung, tiếng Pháp, tiếng Indonesia, và tiếng Việt kể từ tuần ngày 10 tháng 11, và sẽ bắt đầu trên Wikipedia tiếng Anh trong tuần ngày 17 tháng 11. * Người dùng không thể nhận được mã xác nhận qua thư điện tử khi đăng nhập nay có thể nhờ hỗ trợ bằng cách gửi biểu mẫu trên trang đặc biệt mới. Cập nhật này là một phần của sáng kiến [[mw:Special:MyLanguage/Product Safety and Integrity/Account Security|Bảo mật Tài khoản]]. Nếu tài khoản của bạn có địa chỉ thư điện tử, hãy đảm bảo rằng bạn vẫn có quyền truy cập vào nó. Trong quá trình đăng nhập từ thiết bị hoặc địa điểm mới mà không có 2FA, bạn có thể được yêu cầu nhập mã 6 ký tự được gửi từ thư điện tử để hoàn tất đăng nhập. [[mw:Special:MyLanguage/Product Safety and Integrity/Account Security#Why are you requiring me to enter a code from my email to log in? Can I opt out of this?|Tìm hiểu thêm]]. * Một wiki mới đã được tạo ra: {{int:project-localized-name-group-wikisource}} tiếng [[d:Q13324|Minangkabau]] ([[s:min:|<code>s:min:</code>]]) [https://phabricator.wikimedia.org/T408317] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:23}} {{PLURAL:23|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. '''Cập nhật cho những người đóng góp vào mảng kỹ thuật''' * Là một phần của dự án [[mw:Special:MyLanguage/Parsoid/Parser Unification|Hợp nhất Trình Phân tích Cú pháp]], Nhóm Chuyển đổi Nội dung đã triển khai Parsoid làm trình phân tích cú pháp mặc định cho nhiều trang Wikipedia có lưu lượng truy cập thấp và đang chuẩn bị tiếp tục bước tiếp theo để triển khai đến những trang có lưu lượng truy cập cao. Tin nhắn này là lời mời cho bạn tham gia vào Parsoid, như được miêu tả trong tài liệu [[mw:Special:MyLanguage/Help:Extension:ParserMigration|Extension:ParserMigration]], và tìm ra bất kỳ vấn đề nào mà bạn có thể gặp phải với quy trình làm việc của mình khi sử dụng bot, tiện ích hoặc đoạn mã người dùng. Hãy cho chúng tôi biết thông qua liên kết ''"Báo cáo lỗi hiển thị"'' trên thanh bên Công cụ hoặc tạo một tác vụ phab và gắn thẻ [[phab:project/view/5846|Nhóm Chuyển đổi Nội dung trên Phabricator]]. * Dự án Công cụ Không được Hỗ trợ: Một vài vấn đề với [[:c:Special:MyLanguage/Commons:Video2commons|Video2Commons]] đã được giải quyết, bao gồm lỗi tải lên liên quan đến tên tập tin, nhập video bị đen, và xử lý việc thử lại. Hỗ trợ cho AV1 cũng đã được thêm vào. Những công việc đang được tiến hành tập trung vào tính ổn định của backend, lỗi ffmpeg, nhập phụ đề, xử lý siêu dữ liệu, và tải lên danh sách phát. Để theo dõi các tác vụ cụ thể, hãy kiểm tra [[phab:tag/video2commons/|bảng tác vụ trên Phabricator]]. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.46/wmf.3|MediaWiki]] '''Các cuộc họp và sự kiện''' * Hãy lưu lịch ngay cho Hackathon Wikimedia tiếp theo sẽ diễn ra tại Milan, Ý từ ngày 1–3 tháng 5 năm 2026. Cổng đăng ký sẽ được mở vào tháng 1 năm 2026. [https://pretix.eu/wikimedia/Hackathon-2026/ Đơn đăng ký nhận học bổng hiện đang được mở], và sẽ đóng vào ngày 28 tháng 11 năm 2025. Nếu bạn có bất kỳ câu hỏi nào, vui lòng gửi thư đến <bdi lang="en" dir="ltr">hackathon@wikimedia.org</bdi>. '''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2025/47|Biên dịch]]&nbsp;• [[m:Tech|Nhờ giúp đỡ]]&nbsp;• [[m:Talk:Tech/News|Phản hồi]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].'' </div><section end="technews-2025-W47"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 17:26, ngày 17 tháng 11 năm 2025 (UTC) <!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29627455 --> == <span lang="en" dir="ltr">Reminder: Help us decide the name of the new Abstract Wikipedia project</span> == <div lang="en" dir="ltr"> <section begin="function2"/> {{int:Hello}}. Reminder: Please help to choose name for the new Abstract Wikipedia wiki project. The finalist vote starts today. The finalists for the name are: <span lang="en" dir="ltr" class="mw-content-ltr">Abstract Wikipedia, Multilingual Wikipedia, Wikiabstracts, Wikigenerator, Proto-Wiki</span>. If you would like to participate, then '''[[m:Special:MyLanguage/Abstract Wikipedia/Abstract Wikipedia naming contest|please learn more and vote now]]''' at meta-wiki. {{Int:Feedback-thanks-title}} <section end="function2"/> </div> -- [[User:Sannita (WMF)|User:Sannita (WMF)]] ([[User talk:Sannita (WMF)|talk]]) 14:23, ngày 20 tháng 11 năm 2025 (UTC) <!-- Tin nhắn của Thành viên:Sannita (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=29583860 --> == Bản tin Kỹ thuật: Tuần 48-2025 == <section begin="technews-2025-W48"/><div class="plainlinks"> '''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2025/48|Các bản dịch]] của bản tin này cũng có sẵn cho bạn. '''Cập nhật cho biên tập viên''' * Tuần trước, [[mw:Special:MyLanguage/Wikimedia Search Platform|Nhóm Tìm kiếm Wikimedia]] đã tạo lại chức năng của tiện ích "DWIM" (Do What I Mean - Làm những gì bạn muốn) trên máy chủ, cho Wikipedia tiếng Nga và tiếng Do Thái. Tính năng này bổ sung gợi ý đa bàn phím vào gợi ý trên hộp tìm kiếm tiêu chuẩn. Ví dụ, khi tìm kiếm ''<span lang="und" dir="ltr">cxfcnmt</span>'' trên Wikipedia tiếng Nga giờ đây sẽ bổ sung thêm gợi ý cho ''<span lang="ru" dir="ltr">счастье</span>'' ("sự hạnh phúc") mà người dùng có thể có ý định tìm tới. Họ dự kiến sẽ kích hoạt tính năng này trên các wiki khác bằng tiếng Nga và tiếng Do Thái trong tuần này. [https://phabricator.wikimedia.org/T408734] * Cuối tuần này, người dùng [[Special:Preferences#mw-prefsection-betafeatures|tính năng beta]] "{{int:codemirror-beta-feature-title}}" sẽ có thể sử dụng tính năng tô màu cú pháp trong [[mw:Special:MyLanguage/Help:DiscussionTools|Công cụ Thảo luận]]. Điều này yêu cầu phải thiết lập tùy chọn "{{int:discussiontools-preference-sourcemodetoolbar}}". [https://phabricator.wikimedia.org/T407918] * [[mw:Special:MyLanguage/Help:Extension:CampaignEvents|Phần mở rộng chiến dịch sự kiện]] – một bộ công cụ để phối hợp tổ chức sự kiện và các hoạt động cộng tác khác trên wiki nay đã được triển khai tới tất cả các wiki của Wikimedia. Một tính năng mới được gọi là [[m:Special:MyLanguage/CampaignEvents/Collaborative contributions|Đóng góp cộng tác]] cũng đã được thêm vào để giúp những người tổ chức và người tham gia thấy được tác động của những hoạt động đó. Hãy tham gia [[m:Special:MyLanguage/Event:Connection learning session 3|buổi học sắp tới]] để xem tính năng mới đó hoạt động thực tế như thế nào và chia sẻ phản hồi của bạn. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:24}} {{PLURAL:24|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, một lỗi khiến cho CodeReviewBot ngừng hoạt động hiện đã được giải quyết. [https://phabricator.wikimedia.org/T410417] '''Cập nhật cho những người đóng góp vào mảng kỹ thuật''' * Người dùng API của Wikimedia có thể tham gia nghiên cứu khả năng sử dụng để giúp xác thực thiết kế mới dành cho chỗ thử REST API của Wikimedia. Những người có hứng thú tham gia cần điền vào [https://wikimediafoundation.limesurvey.net/487662 biểu mẫu khảo sát tham gia] này. [https://lists.wikimedia.org/hyperkitty/list/wikitech-l@lists.wikimedia.org/thread/IREJRRWTZTGCYWQHDMSNJFTQAEPOOAE3/] * Nhóm Giao diện MediaWiki đang trong quá trình ngừng hỗ trợ các bảng định dạng (stylesheet) kiểu XSLT trong Action API. Hỗ trợ cho <code dir=ltr>format=xml'''&xlst={stylesheet}'''</code> sẽ bị loại bỏ khỏi các dự án Wikimedia vào cuối tháng 11 năm 2025. Ngoài ra, nó sẽ sớm mặc định bị vô hiệu hóa trong các phiên bản phát hành của MediaWiki: v1.43 (LTS), v1.44, và v1.45. Hỗ trợ cho các bảng định dạng kiểu XSLT sẽ bị loại bỏ hoàn toàn khỏi MediaWiki v1.46 (dự kiến phát hành vào khoảng thời gian từ tháng 4 đến tháng 5 năm 2026). [https://lists.wikimedia.org/hyperkitty/list/wikitech-l@lists.wikimedia.org/thread/5AX7UWAVVUNUSBOIRHMNOKWOZ5EZI3JX/] * Điểm cuối kế thừa của WDQS ([https://query-legacy-full.wikidata.org/ query-legacy-full.wikidata.org]) sẽ ngừng hoạt động vào cuối tháng 12 năm 2025, và sẽ chính thức bị vô hiệu hóa vào ngày 7 tháng 1 năm 2026. Sau ngày này, người dùng sẽ nhận thấy những yêu cầu đến query.wikidata.org mà yêu cầu toàn bộ biểu đồ bị lỗi hoặc trả về kết quả không hợp lệ nếu chúng không được viết lại để sử dụng liên kết SPARQL. Nhóm khuyên người dùng cần đảm bảo các công cụ và quy trình làm việc sử dụng các điểm cuối WDQS được hỗ trợ (<span dir=ltr><nowiki>https://query.wikidata.org/</nowiki></span> - Biểu đồ chính hoặc <span dir=ltr><nowiki>https://query-scholarly.wikidata.org/</nowiki></span> - Biểu đồ học thuật). Để được hỗ trợ chuyển đổi các trường hợp sử dụng (use case), vui lòng xem lại các trang [[d:Special:MyLanguage/Wikidata:Data_access|Truy cập Dữ liệu]] và [[d:Wikidata:Request_a_query|Yêu cầu Truy vấn]] để biết thêm thông tin và được hỗ trợ về các phương thức truy cập thay thế. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.46/wmf.4|MediaWiki]] '''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2025/48|Biên dịch]]&nbsp;• [[m:Tech|Nhờ giúp đỡ]]&nbsp;• [[m:Talk:Tech/News|Phản hồi]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].'' </div><section end="technews-2025-W48"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 15:56, ngày 24 tháng 11 năm 2025 (UTC) <!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29702226 --> == Bản tin Kỹ thuật: Tuần 49-2025 == <section begin="technews-2025-W49"/><div class="plainlinks"> '''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2025/49|Các bản dịch]] của bản tin này cũng có sẵn cho bạn. '''Cập nhật cho biên tập viên''' * Bảng Nhìn lại Một Năm Wikipedia 2025 sẽ có mặt vào ngày 2 tháng 12 dành cho người dùng ứng dụng Wikipedia trên iOS và Android, gồm thông tin chuyên sâu được cá nhân hóa, những điểm nổi bật để đọc được cập nhật, cùng thiết kế đã được làm mới. Tìm hiểu thêm trên [[mw:Special:MyLanguage/Wikimedia Apps/Team/Wikipedia Year in Review/Updates|trang dự án]] của tính năng nhìn lại này. * Nhóm Tăng trưởng đang nỗ lực cải thiện nội dung và cách trình bày của Email Xác minh được gửi tới người dùng mới để chúng trở nên thân thiện, hữu ích và có thêm nhiều thông tin hơn. Một số văn bản mới đã được soạn thảo cho thử nghiệm A/B và bạn có thể giúp đỡ bằng cách dịch chúng. Xem [[phab:T396155|Phabricator]]. * Tính năng [[mw:Special:MyLanguage/Help:Growth/Tools/Add a link|Thêm liên kết]] nay sẽ được triển khai tới Wikipedia tiếng Nhật, tiếng Urdu và tiếng Trung vào ngày 2 tháng 12. Thêm liên kết được dựa trên mô hình dự đoán nhằm gợi ý liên kết cần được thêm vào bài viết. Trong khi tính năng này đã có mặt trên hầu hết các trang Wikipedia, mô hình dự đoán đó không thể hỗ trợ một số ngôn ngữ nhất định. Một mô hình mới đã được phát triển để xử lý những ngôn ngữ này, và mô hình đó sẽ dần được triển khai sang các trang Wikipedia khác theo thời gian. Nếu bạn muốn được biết thêm thông tin, vui lòng liên hệ [[mw:user:Trizek (WMF)|Trizek (WMF)]]. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:34}} {{PLURAL:34|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, một vấn đề mà hộp tìm kiếm trên một số trang Commons không hiển thị kết quả nào do việc chuyển đổi từ SpecialSearch sang MediaSearch, hiện đã được giải quyết. [https://phabricator.wikimedia.org/T399476] * Hai wiki mới đã được tạo ra: ** {{int:project-localized-name-group-wikipedia}} tiếng [[d:Q36846|Toki Pona]] ([[w:tok:|<code>w:tok:</code>]]) [https://phabricator.wikimedia.org/T404457] ** {{int:project-localized-name-group-wikiquote}} tiếng [[d:Q33655|Pidgin Nigeria]] ([[q:pcm:|<code>q:pcm:</code>]]) [https://phabricator.wikimedia.org/T408318] '''Cập nhật cho những người đóng góp vào mảng kỹ thuật''' * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.46/wmf.5|MediaWiki]] '''Chuyên sâu''' * Quỹ Wikimedia đang trong giai đoạn đầu của việc khám phá các phương pháp tiếp cận cho '''Chỉ dẫn bài viết'''. Sáng kiến này nhằm mục đích xác định các phương pháp can thiệp có thể giúp các biên tập viên mới dễ dàng hiểu và áp dụng các quy tắc và chính sách hiện hành của Wikipedia khi tạo bài viết. Dự án đang trong giai đoạn khám phá và thiết kế thử nghiệm giai đoạn đầu. Tất cả các thành viên cộng đồng được khuyến khích [[mw:Special:MyLanguage/Article guidance|tìm hiểu thêm]] về dự án, và chia sẻ suy nghĩ của họ trên [[mw:Special:MyLanguage/Talk:Article guidance|trang thảo luận này]]. '''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2025/49|Biên dịch]]&nbsp;• [[m:Tech|Nhờ giúp đỡ]]&nbsp;• [[m:Talk:Tech/News|Phản hồi]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].'' </div><section end="technews-2025-W49"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 18:58, ngày 1 tháng 12 năm 2025 (UTC) <!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29732328 --> == Bản tin Kỹ thuật: Tuần 50-2025 == <section begin="technews-2025-W50"/><div class="plainlinks"> '''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2025/50|Các bản dịch]] của bản tin này cũng có sẵn cho bạn. '''Nổi bật trong tuần''' * Bất kỳ ai muốn bảo mật tài khoản người dùng của mình nay có thể sử dụng tính năng [[m:Special:MyLanguage/Help:Two-factor authentication|xác thực hai yếu tố]] (2FA). Tính năng này có sẵn cho tất cả người dùng của toàn bộ các dự án Wikimedia. Đây là một phần của sáng kiến [[mw:Special:MyLanguage/Product Safety and Integrity/Account Security|Bảo mật Tài khoản]]. Sau này, 2FA sẽ được yêu cầu đối với tất cả người dùng có thể thực hiện các hành động mang tính nhạy cảm về bảo mật hoặc quyền riêng tư. '''Cập nhật cho biên tập viên''' * Tiếp nối đợt triển khai lần trước, tính năng [[mw:Special:MyLanguage/Help:Growth/Tools/Add a link|Thêm liên kết]], một tính năng cho phép biên tập viên thêm liên kết được đề xuất trong quá trình sửa đổi, sẽ có mặt trên [[Phab:T410469|33 trang Wikipedia]] kể từ ngày 9 tháng 12. Việc mở rộng này có được nhờ mô hình dự đoán mới nay hỗ trợ tất cả các ngôn ngữ, kể cả những ngôn ngữ mà chưa được đề cập trước đây. Dù tính năng này đã có mặt trên hầu hết các trang Wikipedia được một thời gian, nhưng lần triển khai này sẽ giúp chúng tôi tiến gần hơn đến việc sử dụng mô hình được cải tiến này ở mọi nơi. Nếu bạn có bất kỳ câu hỏi nào hoặc muốn được biết thêm thông tin chi tiết vui lòng liên hệ với [[mw:user:Trizek (WMF)|Trizek (WMF)]]. * Tuần trước, [[mw:Special:MyLanguage/Wikimedia Search Platform|nhóm Nền tảng Tìm kiếm]] đã thêm gợi ý tìm kiếm [[w:vi:Chuyển tự|được chuyển tự]] khi bạn nhập tới các wiki bằng tiếng Georgia. Nếu chỉ có một vài gợi ý tìm kiếm thông thường, thì các truy vấn bằng chữ Latinh hoặc Kirin [[phab:T127003|nay sẽ được viết lại thành chữ Georgia]] để có thể tìm kiếm được nhiều kết quả trùng khớp hơn. Ví dụ, tìm kiếm <bdi lang="ka-Latn" dir="ltr">''bedniereba''</bdi> hoặc <bdi lang="ka-Cyrl" dir="ltr">''бедниереба''</bdi> nay sẽ gợi ý bài viết hiện có về <bdi lang="ka" dir="ltr">ბედნიერება</bdi> ("sự hạnh phúc"). Bạn có thể đề xuất những ngôn ngữ khác mà việc gợi ý được chuyển tự có thể hữu ích [[phab:T375215|trên Phabricator]] để dùng cho quá trình phát triển sau này. * Cuối tuần này, một thử nghiệm có kiểm soát sẽ bắt đầu dành cho các biên tập viên trên 100 trang Wikipedia lớn nhất khi đang thực hiện sửa đổi một đề mục bằng trình soạn thảo trực quan trên trang web di động. 50% số biên tập viên đó sẽ nhận thấy nút "Sửa đổi toàn bộ trang" mới cho phép họ mở rộng phiên sửa đổi của mình lên toàn bộ trang đó. Tính năng này nhằm mục đích giúp người dùng trên trang web di động sửa đổi bất kỳ đề mục nào trong bài viết một cách dễ dàng hơn, bất kể việc họ chạm vào biểu tượng sửa đề mục nào để bắt đầu sửa đổi. Thử nghiệm này sẽ kéo dài khoảng 4 tuần. Bạn có thể tìm hiểu [[phab:T409112|thêm thông tin]] về dự án này. * Cuối tuần này, [[mw:Special:MyLanguage/Readers/Reader Growth|nhóm Tăng trưởng Độc giả]] sẽ khởi động [[mw:Special:MyLanguage/Readers/Reader Growth/WE3.1.14 Expanded Mobile Sections|thử nghiệm trên trang web di động]] để mở rộng tất cả đề mục bài viết theo mặc định (hiện giờ chúng được mặc định thu gọn lại) và ghim tiêu đề của đề mục mà người dùng hiện đang đọc lên đầu trang. Thử nghiệm này sẽ ảnh hưởng tới 10% người dùng trên Wikipedia tiếng Ả Rập, tiếng Trung, tiếng Pháp, tiếng Indonesia và tiếng Việt. [https://phabricator.wikimedia.org/T409485] * [[mw:Special:MyLanguage/Wikimedia Apps/Team/Wikipedia Year in Review/2025 Year in Review|Tổng kết Một Năm Wikipedia 2025]], một tính năng trong ứng dụng Wikipedia dành cho thiết bị di động (iOS và Android) nhằm cung cấp cho người dùng bản tóm tắt được cá nhân hóa về mức độ tương tác của họ với Wikipedia xuyên suốt trong một năm, nay đã có mặt trên ứng dụng iOS và Android. Phiên bản này bao gồm những thông tin chuyên sâu được mở rộng và cá nhân hóa, cải thiện những điểm nổi bật trong quá trình đọc, thông điệp mới cho nhà quyên góp, cùng thiết kế được cập nhật. Hãy mở ứng dụng để xem chuyên mục Tổng kết Năm và khám phá hành trình đọc của bạn trong năm 2025 nhé. * Một lỗi phần mềm xảy ra gần đây khiến cho các sửa đổi được thực hiện bằng Trình Soạn thảo Trực quan thực hiện những thay đổi không mong muốn với mã nguồn wiki, trong đó có việc loại bỏ khoảng trắng và thay thế các dấu cách bằng dấu gạch dưới trong các liên kết wiki bên trong chú thích. Vấn đề này đã được giải quyết một phần vào tuần trước, và việc giải quyết vấn đề vẫn đang tiếp tục được thực hiện. Các biên tập viên sử dụng Trình Soạn thảo Trực quan trong các ngày từ 28 tháng 11 đến 2 tháng 12 nên kiểm tra lại sửa đổi của mình để tìm ra những thay đổi ngoài ý muốn. [https://phabricator.wikimedia.org/T411238] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:23}} {{PLURAL:23|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, vấn đề về việc xử lý không đúng các đường dẫn URL được sao chép từ thanh địa chỉ của người dùng Microsoft Edge đã được giải quyết. [https://phabricator.wikimedia.org/T341281] '''Cập nhật cho những người đóng góp vào mảng kỹ thuật''' * Bắt đầu từ tuần này, người dùng [[Special:Preferences#mw-prefsection-betafeatures|tính năng beta]] "{{int:codemirror-beta-feature-title}}" sẽ sử dụng [[mw:Special:MyLanguage/Help:Extension:CodeMirror|CodeMirror]] làm trình sửa đổi dành cho các kiểu nội dung Lua, JavaScript, CSS, JSON và Vue, thay vì [[mw:Special:MyLanguage/Extension:CodeEditor|CodeEditor]]. Với thay đổi này, [[mw:Special:MyLanguage/Help:Extension:CodeMirror#Linting|các linter]] sẽ được nâng cấp. Đây là một phần trong nỗ lực lớn hơn nhằm thay thế CodeEditor và mang tới trải nghiệm sửa đổi mã nguồn một cách nhất quán. [https://phabricator.wikimedia.org/T373711] * Các nhà phát triển được khuyến khích tham gia [https://wikimediafoundation.limesurvey.net/552643 Khảo sát Mức độ Hài lòng của Nhà phát triển năm 2025], hiện vẫn đang được mở đến hết ngày 5 tháng 1 năm 2026. Nếu bạn tham gia vào việc xây dựng phần mềm cho hệ sinh thái Wikimedia và muốn chia sẻ kinh nghiệm hoặc phản hồi của mình, thì chúng tôi sẽ rất trân trọng sự tham gia của bạn. [https://lists.wikimedia.org/hyperkitty/list/wikitech-l@lists.wikimedia.org/thread/W4WBKO6Q55UWWCCSFWQATKEXBEHP3QNR/] * Tuần này không có phiên bản MediaWiki mới nào. '''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2025/50|Biên dịch]]&nbsp;• [[m:Tech|Nhờ giúp đỡ]]&nbsp;• [[m:Talk:Tech/News|Phản hồi]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].'' </div><section end="technews-2025-W50"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 17:45, ngày 8 tháng 12 năm 2025 (UTC) <!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29738112 --> == Bản tin Kỹ thuật: Tuần 51-2025 == <section begin="technews-2025-W51"/><div class="plainlinks"> '''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2025/51|Các bản dịch]] của bản tin này cũng có sẵn cho bạn. '''Cập nhật cho biên tập viên''' * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:18}} {{PLURAL:18|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, một trong số đó là việc giải quyết vấn đề khi tài khoản tạm thời chèn liên kết URL ngoài, việc này kích hoạt yêu cầu hCaptcha trong nhiều trường hợp hơn so với dự định, và không hiển thị popup cần thiết trong lần thử xuất bản sửa đổi đầu tiên. [https://phabricator.wikimedia.org/T411927] '''Cập nhật cho những người đóng góp vào mảng kỹ thuật''' * <span class="mw-translate-fuzzy">Để cải thiện hiệu suất cho cơ sở dữ liệu và trang web, các liên kết ngoài tới các dự án Wikimedia sẽ không còn được lưu trữ trong cơ sở dữ liệu. Điều này có nghĩa là chúng sẽ không thể được tìm thấy trong [[{{#special:LinkSearch}}]], sẽ không được kiểm tra bởi Danh sách đen về spam hoặc Bộ lọc Sai phạm dưới dạng liên kết mới, và sẽ không có trong bảng <code dir=ltr>externallinks</code> trên các bản sao cơ sở dữ liệu. Trong tương lai nó có thể được mở rộng sang những trang web khác đáng tin cậy được liên kết nhiều trên cơ sở từng wiki, chẳng hạn như liên kết Creative Commons trên Wikimedia Commons.</span> [https://phabricator.wikimedia.org/T405005] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.46/wmf.7|MediaWiki]] '''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2025/51|Biên dịch]]&nbsp;• [[m:Tech|Nhờ giúp đỡ]]&nbsp;• [[m:Talk:Tech/News|Phản hồi]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].'' </div><section end="technews-2025-W51"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 19:03, ngày 15 tháng 12 năm 2025 (UTC) <!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29796010 --> == Bản tin Kỹ thuật: Tuần 52-2025 == <section begin="technews-2025-W52"/><div class="plainlinks"> '''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2025/52|Các bản dịch]] của bản tin này cũng có sẵn cho bạn. '''Cập nhật cho biên tập viên''' * Kể từ tháng 1, các bộ lọc sai phạm [[mw:Special:MyLanguage/Extension:AbuseFilter/Access flags|có thể được thiết lập]] để tự động loại bỏ chi tiết bộ lọc chẳng hạn như quy tắc và danh sách các sửa đổi và tác vụ thực hiện được ghi lại. Điều này sẽ giúp người giám sát sử dụng các bộ lọc sai phạm để ngăn chặn doxxing hoặc nội dung khác có thể bị loại bỏ. [https://phabricator.wikimedia.org/T290324] * Số tiếp theo của Bản tin Kỹ thuật sẽ được phát hành vào ngày 12 tháng 1 năm 2026 do trùng vào kỳ nghỉ cuối năm. Xin cảm ơn tất cả các biên dịch viên cùng những người đã gửi nội dung hoặc phản hồi trong năm nay. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:16}} {{PLURAL:16|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, sự cố xảy ra khiến cho ứng dụng bị sập khi chạm vào mục "Bước Đầu tiên" trong mục Nhìn lại Một năm trên ứng dụng Wikipedia dành cho Android nay đã được giải quyết, và tính năng này được mở như mong đợi. [https://phabricator.wikimedia.org/T411546] '''Cập nhật cho những người đóng góp vào mảng kỹ thuật''' * Những thành phần giao diện như khác biệt giữa các phiên bản và thể loại được tạo bởi MediaWiki từng có thuộc tính <code dir=ltr>data-mw="interface"</code> để phân biệt với nội dung wiki. Thuộc tính này đã được thay thế bằng <code dir=ltr>data-mw-interface=""</code>, nhằm tránh khả năng gây xung đột với những thuộc tính <code dir=ltr>data-mw</code> khác được tạo bởi Parsoid. [https://phabricator.wikimedia.org/T409187] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Không có phiên bản MediaWiki mới nào trong tuần này hoặc tuần tới. '''Các cuộc họp và sự kiện''' * [[mw:Wikimedia Hackathon Northwestern Europe 2026|Wikimedia Hackathon Tây Bắc Âu năm 2026]] sẽ diễn ra vào các ngày 13-14 tháng 3 năm 2026 tại Arnhem, Hà Lan. Đơn đăng ký vừa được mở vào giữa tháng 12 và sẽ đóng vào giữa tháng 1 hoặc có thể đóng sớm hơn nếu hết chỗ. Do sự kiện giới hạn khoảng 100 người tham gia, chúng tôi khuyến khích bạn đăng ký thật sớm. '''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2025/52|Biên dịch]]&nbsp;• [[m:Tech|Nhờ giúp đỡ]]&nbsp;• [[m:Talk:Tech/News|Phản hồi]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].'' </div><section end="technews-2025-W52"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 21:45, ngày 22 tháng 12 năm 2025 (UTC) <!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29831856 --> == Bản tin Kỹ thuật: Tuần 03-2026 == <section begin="technews-2026-W03"/><div class="plainlinks"> '''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/03|Các bản dịch]] của bản tin này cũng có sẵn cho bạn. '''Nổi bật trong tuần''' * Quỹ Wikimedia đã chia sẻ một số câu hỏi định hướng cho Kế hoạch Thường niên giai đoạn tháng 7 năm 2026–tháng 6 năm 2027 trên [[m:Special:MyLanguage/Wikimedia Foundation Annual Plan/2026-2027/Product & Technology OKRs|Meta]] và ''[[diffblog:2025/12/10/shaping-wikimedia-foundations-2026-2027-annual-goals-key-questions-for-the-wikimedia-movement/|Diff]]''. Những câu hỏi này tập trung vào những xu hướng toàn cầu, những thử nghiệm nhanh và hiệu quả hơn, hỗ trợ tốt hơn cho người mới, tăng cường năng lực cho biên tập viên và người dùng có quyền nâng cao, cải thiện sự cộng tác giữa các dự án, cũng như phát triển và duy trì lượng người đọc. Mọi phản hồi và ý kiến đóng góp đều được hoan nghênh trên [[m:Talk:Wikimedia Foundation Annual Plan/2026-2027|trang thảo luận]]. '''Cập nhật cho biên tập viên''' * Là một phần của công việc hiện do nhóm Công nghệ Cộng đồng thực hênj xoay quanh dự án [[m:Special:MyLanguage/Community Wishlist/W372|Nhiều danh sách theo dõi]] (Multiple watchlists), việc hiển thị của tính năng [[Special:EditWatchlist|Sửa đổi Danh sách theo dõi]] (EditWatchlist) sẽ được cập nhật làm bước đầu tiên hướng tới việc có được nhiều danh sách theo dõi. Ngoài ra, việc phân trang của trang [[Special:Search|Tìm kiếm]] cũng sẽ được cập nhật như là một phần của công việc liên quan đến mong muốn [[m:Special:MyLanguage/Community Wishlist/W186|Cải tiến phân trang / điều hướng trang]]. [https://phabricator.wikimedia.org/T411596] * [[m:Special:GlobalWatchlist|Danh sách theo dõi toàn cục]] là [[mw:Special:MyLanguage/Extension:GlobalWatchlist|phần mở rộng]] của MediaWiki cho phép bạn xem danh sách theo dõi của bạn từ các wiki khác nhau trên cùng một trang. Danh sách này gần đây đã được cập nhật để trông giống như [[Special:Watchlist|Danh sách theo dõi]] thông thường hơn, chẳng hạn như tiền xử lý các tài khoản tạm thời để che giấu địa chỉ IP (trong đó có việc chuyển hướng liên kết người dùng đến các trang đóng góp), in đậm tiêu đề trang, và mở các liên kết trong phần tóm lược sửa đổi và thẻ trong tab trình duyệt mới. [https://phabricator.wikimedia.org/T398361][https://phabricator.wikimedia.org/T298919][https://phabricator.wikimedia.org/T273526][https://phabricator.wikimedia.org/T286309] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:28}} {{PLURAL:28|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, vấn đề mà việc cấm tài khoản toàn cục không có tùy chọn cấm gửi thư điện tử, nay đã được giải quyết, và sẽ có thể sử dụng kể từ tuần ngày 13 tháng 1. [https://phabricator.wikimedia.org/T401293] '''Cập nhật cho những người đóng góp vào mảng kỹ thuật''' * [[mw:Special:MyLanguage/VisualEditor/Citation tool|Công cụ chú thích của Soạn thảo Trực quan]] và [[mw:Special:MyLanguage/Help:Reference Previews|Xem trước Chú thích]] nay hỗ trợ kiểu chú thích dạng "bản đồ". [https://phabricator.wikimedia.org/T411083] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.46/wmf.10|MediaWiki]]/[[mw:MediaWiki 1.46/wmf.11|MediaWiki]] '''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/03|Biên dịch]]&nbsp;• [[m:Tech|Nhờ giúp đỡ]]&nbsp;• [[m:Talk:Tech/News|Phản hồi]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].'' </div><section end="technews-2026-W03"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 19:33, ngày 12 tháng 1 năm 2026 (UTC) <!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29907192 --> == Thank You for Last Year – Join Wiki Loves Ramadan 2026 == Dear Wikimedia communities, We hope you are doing well, and we wish you a happy New Year. ''Last year, we captured light. This year, we’ll capture legacy.'' In 2025, communities around the world shared the glow of Ramadan nights and the warmth of collective iftars. In 2026, ''Wiki Loves Ramadan'' is expanding, bringing more stories, more cultures, and deeper global connections across Wikimedia projects. We invite you to explore the ''Wiki Loves Ramadan 2026'' [[m:Special:MyLanguage/Wiki Loves Ramadan 2026|Meta page]] to learn how you can participate and [[m:Special:MyLanguage/Wiki Loves Ramadan 2026/Participating communities|sign up]] your community. 📷 ''Photo campaign on '' [[c:Special:MyLanguage/Commons:Wiki Loves Ramadan 2026|Wikimedia Commons]] If you have questions about the project, please refer to the FAQs: * [[m:Special:MyLanguage/Wiki Loves Ramadan/FAQ/|Meta-Wiki]] * [[c:Special:MyLanguage/Commons:Wiki Loves Ramadan/FAQ|Wikimedia Commons]] ''Early registration for updates is now open via the '''[[m:Special:RegisterForEvent/2710|Event page]]''''' ''Stay connected and receive updates:'' * [https://t.me/WikiLovesRamadan Telegram channel] * [https://lists.wikimedia.org/postorius/lists/wikilovesramadan.lists.wikimedia.org/ Mailing list] We look forward to collaborating with you and your community. '''The Wiki Loves Ramadan 2026 Organizing Team''' 19:45, ngày 16 tháng 1 năm 2026 (UTC) <!-- Tin nhắn của Thành viên:ZI Jony@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Distribution_list/Non-Technical_Village_Pumps_distribution_list&oldid=29879549 --> == Bản tin Kỹ thuật: Tuần 04-2026 == <section begin="technews-2026-W04"/><div class="plainlinks"> '''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/04|Các bản dịch]] của bản tin này cũng có sẵn cho bạn. '''Cập nhật cho biên tập viên''' * Khay được hiển thị trên [[Special:Diff|Đặc biệt:Khác]] trong chế độ xem di động đã được thiết kế lại. Giờ đây nó mặc định được thu gọn, đồng thời tích hợp một liên kết để lùi lại sửa đổi đang được hiển thị trên màn hình, giúp các biên tập viên và người duyệt bài trên điện thoại di động dễ dàng thực hiện tác vụ mà vẫn giữ giao diện thật gọn gàng. [https://phabricator.wikimedia.org/T402297] * [[m:Special:GlobalWatchlist|Danh sách Theo dõi Toàn cục]] cho phép bạn xem các danh sách theo dõi từ nhiều wiki khác nhau trên cùng một trang. [[mw:Special:MyLanguage/Extension:GlobalWatchlist|Phần mở rộng]] này tiếp tục được cải thiện — nay nó có thể tự động xác định hướng văn bản (nhằm đảm bảo việc hiển thị chính xác các trang web mà có tên miền bất thường) và hiển thị chi tiết phần miêu tả cho các tác vụ được lưu trong nhật trình. Cuối tuần này, một liên kết thường trực mới cho các tác vụ tạo trang cùng các lớp CSS cho từng mục nhập sẽ được thêm vào. [https://phabricator.wikimedia.org/T412505][https://phabricator.wikimedia.org/T287929][https://phabricator.wikimedia.org/T262768][https://phabricator.wikimedia.org/T414135] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:32}} {{PLURAL:32|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, một vấn đề mà được ghi nhận trước đây trong giao diện Vector 2022 mà các liên kết anchor đích bị che khuất bởi tiêu đề cố định nay đã được giải quyết. [https://phabricator.wikimedia.org/T406114] '''Cập nhật cho những người đóng góp vào mảng kỹ thuật''' * Như đã đề cập trong [[m:Special:MyLanguage/Tech/News/2025/44|thông báo ngừng hỗ trợ vào tháng 10 năm 2025]], nhóm Giao diện MediaWiki sẽ bắt đầu loại bỏ toàn bộ điểm cuối chuyển đổi có dấu gạch chéo ở cuối khỏi API REST của MediaWiki vào tuần từ ngày 26 tháng 1. Những thay đổi này dự kiến sẽ được triển khai tới tất cả các wiki chậm nhất vào ngày 30 tháng 1. Tất cả người dùng API đang gọi những điểm cuối này được khuyên chuyển đổi sang những phiên bản không có dấu gạch chéo ở cuối. Cả hai loại biến thể điểm cuối này đều có thể được tìm thấy, so sánh và kiểm tra sử dụng [https://test.wikipedia.org/wiki/Special:RestSandbox Chỗ thử REST]. Nếu bạn có thắc mắc hay gặp bất kỳ sự cố nào, hãy gửi yêu cầu bằng cách tạo một tác vụ trong Phabricator gửi tới [https://phabricator.wikimedia.org/project/view/6931/ bảng tin #MW-Interfaces-Team]. * Tài liệu tham khảo trực quan cho [[mw:Special:MyLanguage/Wikimedia REST API|API REST của Wikimedia]] đã được chuyển. Những yêu cầu đến các tài liệu API trước đây được lưu trữ thông qua [[mw:Special:MyLanguage/RESTBase|RESTBase]] (v.d.: <code dir=ltr>https://en.wikipedia.org/api/rest_v1/</code>) nay được chuyển hướng tới [[w:en:Special:RestSandbox|Chỗ thử REST]]. * [[mw:Special:MyLanguage/Wikidata Platform|Nhóm Nền tảng Wikidata của WMF]] (WDP) đã phát hành [[d:Special:MyLanguage/Wikidata:Wikidata Platform team/Newsletter|bản tin tháng 1 năm 2026]]. Bản tin bao gồm những cập nhật về việc ngừng hoạt động điểm cuối biểu đồ đầy đủ (full-graph) cũ, thay đổi về chính sách User-Agent, thời gian làm việc hàng tháng của kế hoạch chuyển đổi sang Blazegraph, cùng những nỗ lực nhằm giảm thiểu những lỗi hồi quy gây ra bởi việc ngừng điểm cuối cũ. Xin nhắc lại rằng bạn có thể [[m:Special:MyLanguage/Global message delivery/Targets/WDP team updates|đăng ký nhận bản tin WDP đó]]! * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.46/wmf.12|MediaWiki]] '''Các cuộc họp và sự kiện''' * [[mw:Wikimedia Hackathon Northwestern Europe 2026|Cuộc thi Hackathon Wikimedia khu vực Tây Bắc Châu Âu năm 2026]] sẽ diễn ra vào ngày 13-14 tháng 3 năm 2026 tại Arnhem, Hà Lan. Cổng đăng ký đã được mở vào giữa tháng 12 và sẽ sớm đóng lại hoặc đóng ngay khi đã đủ số lượng người tham gia. Đây là cuộc thi hackathon kéo dài hai ngày, tập trung vào mảng kỹ thuật và quy tụ các thành viên Wikimedia từ khắp khu vực. Hy vọng sẽ gặp lại bạn tại đó! '''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/04|Biên dịch]]&nbsp;• [[m:Tech|Nhờ giúp đỡ]]&nbsp;• [[m:Talk:Tech/News|Phản hồi]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].'' </div><section end="technews-2026-W04"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 20:29, ngày 19 tháng 1 năm 2026 (UTC) <!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29943403 --> == Rà soát thường niên Bộ Quy tắc Ứng xử Chung và Hướng dẫn Thực thi == <section begin="announcement-content" /> Tôi viết thư này để thông báo với bạn rằng thời gian xem xét hàng năm đối với Bộ Quy tắc Ứng xử và Hướng dẫn Thực thi hiện đã bắt đầu. Bạn có thể đưa ra các đề xuất thay đổi đến hết ngày 9 tháng 2 năm 2026. Đây là bước đầu tiên trong nhiều bước cần thực hiện cho quá trình xem xét hàng năm. [[m:Special:MyLanguage/Universal Code of Conduct/Annual review/2026|Đọc thêm thông tin và tìm cuộc thảo luận để tham gia trên trang UCoC trên Meta]]. [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee|Ủy ban Điều phối Bộ Quy tắc Ứng xử Toàn cầu]] (U4C) là một nhóm toàn cầu chuyên trách việc thực hiện Bộ Quy tắc Ứng xử Toàn cầu một cách công bằng và nhất quán. Đánh giá thường niên này được lên kế hoạch và thực hiện bởi U4C. Để biết thêm thông tin và trách nhiệm của U4C, [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Charter|bạn có thể xem Hiến chương U4C]]. Vui lòng chia sẻ thông tin này với các thành viên khác trong cộng đồng của bạn ở bất cứ nơi nào phù hợp. -- Hợp tác với U4C, [[m:User:Keegan (WMF)|Keegan (WMF)]] ([[m:User talk:Keegan (WMF)|talk]])<section end="announcement-content" /> 21:02, ngày 19 tháng 1 năm 2026 (UTC) <!-- Tin nhắn của Thành viên:Keegan (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=29905753 --> == Bản tin Kỹ thuật: Tuần 05-2026 == <section begin="technews-2026-W05"/><div class="plainlinks"> '''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/05|Các bản dịch]] của bản tin này cũng có sẵn cho bạn. '''Cập nhật cho biên tập viên''' * Quỹ Wikimedia mời mọi người đóng góp ý kiến cho [[m:Special:MyLanguage/Product and Technology Advisory Council/Year1 Reflections and Proposed Way Forward 2026 Update|đề xuất kế hoạch tương lai]] của [[:m:Special:MyLanguage/Product and Technology Advisory Council|Hội đồng Cố vấn Sản phẩm và Công nghệ]] chậm nhất ngày 28 tháng 2. * Tất cả người dùng đã đăng ký tài khoản nay có thể sử dụng passkey (mã xác thực) cho việc [[m:Special:MyLanguage/Help:Two-factor authentication|xác thực hai yếu tố]] (2FA). Passkey là một cách đơn giản để đăng nhập mà không cần phải sử dụng thiết bị thứ hai. Chúng sẽ xác thực danh tính của người dùng sử dụng vân tay, nhận diện khuôn mặt, hoặc dùng mã PIN. Để thiết lập một passkey, đầu tiên hãy thiết lập phương thức xác thực 2FA thông thường. Hiện tại, để đăng nhập bằng passkey, người dùng cũng phải sử dụng cả mật khẩu. Vào cuối quý này, tính năng đăng nhập không cần mật khẩu sẽ cho phép người dùng đăng nhập chỉ bằng một cú nhấn chuột và passkey. Người dùng có quyền nâng cao cũng sẽ bắt buộc phải kích hoạt xác thực 2FA. Đây là một phần của dự án [[mw:Special:MyLanguage/Product Safety and Integrity/Account Security|Bảo mật Tài khoản]]. * Những người đóng góp chưa đăng ký tài khoản trên các IP hoặc dải IP bị cấm nay có thể tương tác trên wiki để chống lại quyết định cấm trên trang thảo luận thành viên, trừ khi tùy chọn "ngăn người dùng này sửa đổi trang thảo luận của họ" được bật. Điều này giúp giải quyết vấn đề rằng người dùng chưa đăng nhập không thể sử dụng quy trình bỏ cấm mặc định thông qua trang thảo luận thành viên. [https://phabricator.wikimedia.org/T398673] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:20}} {{PLURAL:20|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, phần miêu tả phương thức Xác thực hai yếu tố (2FA) trên trang quản lý đã được cập nhật. Giờ đây nó trở nên rõ ràng và dễ hiểu hơn, giúp người dùng dễ dàng sử dụng hơn. [https://phabricator.wikimedia.org/T332385] '''Cập nhật cho những người đóng góp vào mảng kỹ thuật''' * Một biến Bộ lọc Sai phạm mới, <code>account_type</code>, đã được thêm vào để cung cấp một cách đáng tin cậy trong việc xác định loại tài khoản được tạo trong các tác vụ <code>createaccount</code> và <code>autocreateaccount</code>. Là một phần của thay đổi này, biến <code>accountname</code> đã được đổi tên thành <code>account_name</code>, và <code>accountname</code> nay đã lỗi thời. Những người quản lý bộ lọc sai phạm nên cập nhật bất kỳ bộ lọc nào đang sử dụng biến kiểm tra loại tài khoản mã hóa cứng hoặc đã lỗi thời nào nếu có. [https://phabricator.wikimedia.org/T414049] * Các hình thu nhỏ được yêu cầu với kích thước không chuẩn và sử dụng các phương thức không chuẩn như yêu cầu trực tiếp đến <code dir=ltr><nowiki>upload.wikimedia.org/…</nowiki></code> sẽ ngừng hoạt động trong thời gian tới. Thay đổi này nhằm ngăn chặn việc các trình thu thập dữ liệu web và bot từ bên ngoài lạm dụng. Một số người dùng có đoạn mã CSS/JS tùy chỉnh, các bảo quản viên giao diện có thể sửa tiện ích và giao diện cục bộ, cùng người viết công cụ sẽ cần cập nhật đoạn mã của mình để sử dụng kích thước hình thu nhỏ tiêu chuẩn. [[phab:T414805|Thông tin chi tiết, các liên kết tìm kiếm, cùng ví dụ về cách giải quyết chúng có sẵn trong tác vụ này]]. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.46/wmf.13|MediaWiki]] '''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/05|Biên dịch]]&nbsp;• [[m:Tech|Nhờ giúp đỡ]]&nbsp;• [[m:Talk:Tech/News|Phản hồi]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].'' </div><section end="technews-2026-W05"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 21:17, ngày 26 tháng 1 năm 2026 (UTC) <!-- Tin nhắn của Thành viên:UOzurumba (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=29969530 --> == Bản tin Kỹ thuật: Tuần 06-2026 == <section begin="technews-2026-W06"/><div class="plainlinks"> '''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/06|Các bản dịch]] của bản tin này cũng có sẵn cho bạn. '''Cập nhật cho biên tập viên''' * Tính năng "{{int:pageinfo-toolboxlink}}", một tính năng cung cấp thông tin xác thực về một trang ([{{fullurl:{{FULLPAGENAME}}|action=info}} ví dụ]), nay có thêm cả phần mục lục được tạo tự động. Nếu có trang [[MediaWiki:Pageinfo-header]] được người dùng tạo cục bộ, giờ nó có thể được xóa đi. [https://phabricator.wikimedia.org/T363726] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:21}} {{PLURAL:21|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, Trình Soạn thảo Trực quan trước đây đã thêm chức năng in đậm hoặc nghiêng vào phần miêu tả liên kết, làm cho mã wiki trở nên phức tạp. Vấn đề này hiện đã được giải quyết. [https://phabricator.wikimedia.org/T409669] '''Cập nhật cho những người đóng góp vào mảng kỹ thuật''' * Không có bản dump XML nào được tạo ra vào ngày 20 tháng 1. Ngoài ra, kể từ giờ, các bản dump sẽ chỉ được tạo một lần mỗi tháng. [https://phabricator.wikimedia.org/T414389] * Nhóm Giao diện MediaWiki đã ngừng hỗ trợ tất cả điểm cuối chuyển đổi có dấu gạch chéo ở cuối khỏi [https://www.mediawiki.org/wiki/Special:MyLanguage/API:REST%20API API REST của MediaWiki]. Tất cả người dùng API hiện đang gọi những điểm cuối đó được khuyến khích chuyển sang các bản không có dấu gạch chéo ở cuối. Nếu bạn có thắc mắc hoặc gặp bất kỳ sự cố nào, vui lòng gửi tác vụ phabricator tới [https://phabricator.wikimedia.org/project/view/6931/ bảng tin của #MW-Interfaces-Team]. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.46/wmf.14|MediaWiki]] '''Nổi bật trong tuần''' * Xin nhắc tới người dùng rằng Quỹ Wikimedia đã chia sẻ một số câu hỏi định hướng cho Kế hoạch Hàng năm giai đoạn tháng 7 năm 2026–tháng 6 năm 2027 trên [[m:Special:MyLanguage/Wikimedia Foundation Annual Plan/2026-2027/Product & Technology OKRs|Meta]] và ''[[diffblog:2025/12/10/shaping-wikimedia-foundations-2026-2027-annual-goals-key-questions-for-the-wikimedia-movement/|Diff]]''. Những câu hỏi này tập trung vào những xu hướng toàn cầu, thử nghiệm nhanh hơn và hiệu quả hơn, hỗ trợ tốt hơn cho người mới, nâng cao năng lực cho biên tập viên và người dùng có quyền nâng cao, cải thiện việc cộng tác giữa các dự án, cũng như phát triển và giữ chân độc giả. Mọi phản hồi và ý kiến đóng góp đều được hoan nghênh trên [[m:Talk:Wikimedia Foundation Annual Plan/2026-2027|trang thảo luận]]. '''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/06|Biên dịch]]&nbsp;• [[m:Tech|Nhờ giúp đỡ]]&nbsp;• [[m:Talk:Tech/News|Phản hồi]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].'' </div><section end="technews-2026-W06"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 17:43, ngày 2 tháng 2 năm 2026 (UTC) <!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30000986 --> == Bản tin Kỹ thuật: Tuần 07-2026 == <section begin="technews-2026-W07"/><div class="plainlinks"> '''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/07|Các bản dịch]] của bản tin này cũng có sẵn cho bạn. '''Cập nhật cho biên tập viên''' * [[File:Maki-gift-15.svg|12px|link=|class=skin-invert|Mục Mong muốn cộng đồng]] <span lang="en" dir="ltr" class="mw-content-ltr">Logged-in contributors who manage large or complex watchlists can now organise and filter watched pages in ways that improve their workflows with the new [[mw:Special:MyLanguage/Help:Watchlist labels|Watchlist labels]] feature. By adding custom labels (for example: pages you created, pages being monitored for vandalism, or discussion pages) users can more quickly identify what needs attention, reduce cognitive load, and respond more efficiently. This improves watchlist usability, especially for highly active editors.</span> * <span lang="en" dir="ltr" class="mw-content-ltr">A new feature available on [[Special:Contributions|Special:Contributions]] shows [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts|temporary accounts]] that are likely operated by the same person, and so makes patrolling less time-consuming. Upon checking contributions of a temporary account, users with access to temporary account IP addresses can now see a view of contributions from the related temporary accounts. The feature looks up all the IPs associated with a given temporary account within the data retention period and shows all the contributions of all temporary accounts that have used these IPs. [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts#February 2026: Improvements to the patroller tooling|Learn more]].</span> [https://phabricator.wikimedia.org/T415674] * <span lang="en" dir="ltr" class="mw-content-ltr">When editors preview a wikitext edit, the reminder box that they are only seeing a preview (which is shown at the top), now has a grey/neutral background instead of a yellow/warning background. This makes it easier to distinguish preview notes from actual warnings (for example, edit conflicts or problematic redirect targets), which will now be shown in separate warning or error boxes.</span> [https://phabricator.wikimedia.org/T414742] * <span lang="en" dir="ltr" class="mw-content-ltr">The [[m:Special:GlobalWatchlist|Global Watchlist]] lets you view your watchlists from multiple wikis on one page. The [[mw:Special:MyLanguage/Extension:GlobalWatchlist|extension]] continues to improve — it now properly supports more than one Wikibase site, for example both [[d:|Wikidata]] and [[testwikidata:|testwikidata]]. In addition, issues regarding text direction have been fixed for users who prefer Wikidata or other Wikibase sites in right-to-left (RTL) languages.</span> [https://phabricator.wikimedia.org/T415440][https://phabricator.wikimedia.org/T415458] * <span lang="en" dir="ltr" class="mw-content-ltr">The automatic "magic links" for ISBN, RFC, and PMID numbers have been [[mw:Special:MyLanguage/Help:Magic links|deprecated in wikitext since 2021]] due to inflexibility and difficulties with localization. Several wikis have successfully replaced RFC and PMID magic links with equivalent external links, but a template was often required to replace the functionality of the ISBN magic link. There is now a new [[mw:Special:MyLanguage/Help:Magic words#isbn|built-in parser function]] <code dir=ltr><nowiki>{{#isbn}}</nowiki></code> available to replace the basic functionality of the ISBN magic link. This makes it easier for wikis who wish to migrate off of the deprecated magic link functionality to do so.</span> [https://phabricator.wikimedia.org/T145604] * <span lang="en" dir="ltr" class="mw-content-ltr">Two new wikis have been created:</span> ** <span lang="en" dir="ltr" class="mw-content-ltr">a {{int:project-localized-name-group-wikipedia}} in [[d:Q35401|Jju]]</span> ([[w:kaj:|<code>w:kaj:</code>]]) [https://phabricator.wikimedia.org/T413283] ** <span lang="en" dir="ltr" class="mw-content-ltr">a {{int:project-localized-name-group-wikipedia}} in [[d:Q1186896|Nawat]]</span> ([[w:ppl:|<code>w:ppl:</code>]]) [https://phabricator.wikimedia.org/T413273] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:23}} {{PLURAL:23|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. '''Cập nhật cho những người đóng góp vào mảng kỹ thuật''' * <span lang="en" dir="ltr" class="mw-content-ltr">A new global user group has been created: [[{{int:grouppage-local-bot}}|{{int:group-local-bot}}]]. It will be used internally by the software to allow community bots to bypass rate limits that are applied to abusive [[w:en:Web scraping|web scrapers]]. Accounts that are approved as bots on at least one Wikimedia wiki will be automatically added to this group. It will not change what user permissions the bot has.</span> [https://phabricator.wikimedia.org/T415588] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.46/wmf.15|MediaWiki]] '''Các cuộc họp và sự kiện''' * <span lang="en" dir="ltr" class="mw-content-ltr">The [[mw:Special:MyLanguage/MediaWiki Users and Developers Conference Spring 2026|MediaWiki Users and Developers Conference, Spring 2026]] will be held March 25–27 in Salt Lake City, USA. This event is organized by and for the third-party MediaWiki community. You can propose sessions and register to attend.</span> [https://lists.wikimedia.org/hyperkitty/list/wikitech-l@lists.wikimedia.org/thread/AZBWVI46SDEB65PGR5J6E4TYOQQEZXM7/] '''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/07|Biên dịch]]&nbsp;• [[m:Tech|Nhờ giúp đỡ]]&nbsp;• [[m:Talk:Tech/News|Phản hồi]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].'' </div><section end="technews-2026-W07"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:30, ngày 9 tháng 2 năm 2026 (UTC) <!-- Tin nhắn của Thành viên:Quiddity (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30026671 --> == Bản tin Kỹ thuật: Tuần 08-2026 == <section begin="technews-2026-W08"/><div class="plainlinks"> '''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/08|Các bản dịch]] của bản tin này cũng có sẵn cho bạn. '''Nổi bật trong tuần''' * [[mw:Special:MyLanguage/Wikimedia Site Reliability Engineering|Nhóm SRE]] sẽ tiến hành dọn dẹp phiên bản [[m:Special:MyLanguage/Etherpad|Etherpad]] của Wikimedia, một trình sửa đổi trên web dành cho việc sửa đổi tài liệu cộng tác theo thời gian thực. Tất cả pad sẽ bị xóa vĩnh viễn sau ngày 30 tháng 4 năm 2026 – trường hợp nếu còn dự án vẫn đang được tiến hành di chuyển vào thời điểm đó thì nhóm có thể xem xét lại thời gian đó tùy từng trường hợp. Vui lòng tạo bản sao lưu cục bộ cho bất kỳ nội dung nào mà bạn muốn giữ lại, vì dữ liệu đã bị xóa không thể khôi phục được nữa. Việc dọn dẹp này sẽ giúp giảm bớt kích thước cơ sở dữ liệu và giảm thiểu lãng phí (dấu ấn) cơ sở hạ tầng. Etherpad sẽ tiếp tục hỗ trợ cộng tác theo thời gian thực, nhưng không kỳ vọng vào khả năng lưu trữ lâu dài. Những đợt dọn dẹp khác có thể xảy ra trong tương lai mà không cần báo trước. [https://phabricator.wikimedia.org/T415237] '''Cập nhật cho biên tập viên''' * Nhóm Tìm kiếm Thông tin sẽ triển khai [[mw:Special:MyLanguage/Readers/Information Retrieval/Phase 1|thử nghiệm trên ứng dụng di động dùng Android]] nhằm kiểm tra khả năng tìm kiếm kết hợp, có thể xử lý cả các truy vấn tìm theo ngữ nghĩa và theo từ khóa. Việc cải thiện tìm kiếm trên nền tảng này sẽ giúp người đọc dễ dàng tìm thấy những gì mà họ đang tìm kiếm hơn ngay trên Wikipedia. Thử nghiệm này sẽ bắt đầu được triển khai trước tiên là trên Wikipedia tiếng Hy Lạp vào cuối tháng 2, sau đó là các wiki tiếng Anh, tiếng Pháp và tiếng Bồ Đào Nha vào tháng 3. [https://diff.wikimedia.org/2026/01/08/semantic-search-making-it-easier-to-find-the-information-readers-want/ Đọc thêm] trên blog Diff. [https://www.mediawiki.org/wiki/Readers/Information_Retrieval] * Nhóm Phát triển Độc giả sẽ tiến hành [[mw:Special:MyLanguage/Readers/Reader Growth/WE3.10.2 Mobile Table of Contents|một thử nghiệm]] cho người dùng web trên thiết bị di động nhằm thêm mục lục và tự động mở rộng tất cả các đề mục trong bài viết, nhằm tìm hiểu thêm về những vấn đề về điều hướng mà họ gặp phải. Thử nghiệm này sẽ có mặt trên các Wikipedia tiếng Ả Rập, tiếng Trung, tiếng Anh, tiếng Pháp, tiếng Indonesia và tiếng Việt. * Trước đây, các thông báo đầu trang ([[{{ns:8}}:Sitenotice]] và [[{{ns:8}}:Anonnotice]]) chỉ được hiển thị trên trang web dành cho máy tính để bàn. Giờ đây, chúng sẽ được hiển thị trên mọi nền tảng. Người dùng trên trang web di động nay sẽ thấy được những thông báo này và được thông báo. Các bảo quản viên trang web nên sẵn sàng kiểm tra và sửa các thông báo đầu trang trên các thiết bị di động để tránh xung đột với bài viết. Để từ chối, bảo quản viên giao diện có thể thêm <code dir="ltr">#siteNotice { display: none; }</code> vào [[{{ns:8}}:Minerva.css]]. [https://phabricator.wikimedia.org/T138572][https://phabricator.wikimedia.org/T416644] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:19}} {{PLURAL:19|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, một vấn đề trên [[Special:RecentChanges|Đặc biệt:Thay đổi gần đây]] đã được giải quyết. Trước đây, nhấn vào nút ẩn trên các bộ lọc đang được áp dụng khiến cho nút "xem những thay đổi mới từ…" biến mất, dù nó đáng lẽ phải được hiển thị. Nút này giờ đây sẽ hoạt động như mong đợi. [https://phabricator.wikimedia.org/T406339] '''Cập nhật cho những người đóng góp vào mảng kỹ thuật''' * Hiện đã có tài liệu mới giúp biên tập viên gỡ lỗi các tính năng tìm kiếm trên trang. Nó hỗ trợ việc khắc phục sự cố khi các trang xuất hiện trong kết quả tìm kiếm, khi thứ hạng có vẻ không như mong đợi và khi bạn cần kiểm tra nội dung nào đang được lập chỉ mục, giúp việc tìm hiểu và phân tích hành vi tìm kiếm trở nên dễ dàng hơn. [[mw:Help:CirrusSearch/Debug|Tìm hiểu thêm]]. [https://phabricator.wikimedia.org/T411169] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.46/wmf.16|MediaWiki]] '''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/08|Biên dịch]]&nbsp;• [[m:Tech|Nhờ giúp đỡ]]&nbsp;• [[m:Talk:Tech/News|Phản hồi]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].'' </div><section end="technews-2026-W08"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 19:17, ngày 16 tháng 2 năm 2026 (UTC) <!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30086330 --> == Bản tin Kỹ thuật: Tuần 09-2026 == <section begin="technews-2026-W09"/><div class="plainlinks"> '''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/09|Các bản dịch]] của bản tin này cũng có sẵn cho bạn. '''Nổi bật trong tuần''' * Tính năng [[mw:Special:MyLanguage/Edit check/Reference Check|Kiểm tra Nguồn Tham khảo]] đã được triển khai tới Wikipedia tiếng Anh, điều này có nghĩa là việc triển khai tính năng trên tất cả các trang Wikipedia đã hoàn thành. Tính năng này nhắc những người mới thêm nguồn tham khảo trước khi đăng nội dung mới, giúp giảm thiểu việc lùi sửa liên quan đến các vấn đề nguồn tham khảo phổ biến và cải thiện khả năng kiểm chứng được. Trong quá trình thử nghiệm A/B, tính năng này mang lại hiệu quả rất đáng kể: những người mới có hiển thị Kiểm tra Nguồn Tham khảo có khả năng thêm nguồn tham khảo cao hơn khoảng 2,2 lần trên trang web dành cho máy tính và cao hơn khoảng 17,5 lần trên trang web dành cho di động. [https://analytics.wikimedia.org/published/reports/editing/reference_check_ab_test_report_final_2025.html] '''Cập nhật cho biên tập viên''' * [[mw:Special:MyLanguage/Extension:InterwikiSorting|Phần mở rộng InterwikiSorting]], một phần mở rộng cho phép [[m:Special:MyLanguage/Interwiki sorting order|sắp xếp các liên kết liên wiki]], đã bị gỡ bỏ khỏi Wikipedia. Do đó, những biên tập viên đã bật tính năng sắp xếp liên kết liên wiki ở chế độ không rút gọn (định dạng danh sách đầy đủ) sẽ thấy được rằng các liên kết được sắp xếp lại. Các liên kết từ nay trở đi sẽ được liệt kê theo thứ tự bảng chữ cái dựa trên mã ngôn ngữ. [https://phabricator.wikimedia.org/T253764] * Cuối tuần này, người dùng sửa đổi một đề mục của trang bằng cách sử dụng trình soạn thảo trực quan trên thiết bị di động, sẽ nhìn thấy một nút mới có tên "Sửa đổi toàn bộ trang". Khi chạm vào nút đó, bạn sẽ có thể sửa đổi toàn bộ bài viết. Điều này sẽ giúp ích khi thay đổi bạn muốn thực hiện nằm ngoài đề mục mà bạn mở ban đầu. [https://phabricator.wikimedia.org/T387175][https://phabricator.wikimedia.org/T409112] * [[mw:Special:MyLanguage/Readers/Reader Experience|Nhóm Trải nghiệm Người đọc]] đang mời các biên tập viên đánh giá xem chế độ tối có nên tiếp tục được coi là ở giai đoạn "thử nghiệm" (beta) trên wiki của họ hay không, dựa trên kinh nghiệm của họ về mức độ hoạt động tốt hay không của chế độ này trên máy tính và thiết bị di động. Nếu tính năng này được đánh giá là hoàn thiện rồi, thì các biên tập viên có thể cập nhật các thông báo giao diện trong <code dir=ltr>MediaWiki:skin-theme-description</code> và <code dir=ltr>MediaWiki:Vector-night-mode-beta-tag</code> để cho biết rằng chế độ tối đã sẵn sàng và không còn được coi là trong giai đoạn thử nghiệm nữa. * [[mw:Wikimedia_Apps/Team/iOS/Activity_Tab|Tab Hoạt động]] được cải tiến mà hiển thị thông tin chuyên sâu về người dùng nay có sẵn cho tất cả người dùng ứng dụng Wikipedia trên (phiên bản 7.9.0 trở lên). Sau quá trình thử nghiệm A/B trước đây cho thấy tỷ lệ tạo tài khoản trong số những người dùng có quyền truy cập vào tính năng này cao hơn, tính năng này đã được triển khai cho 100% người dùng kèm vài cập nhật. Tab Hoạt động nay hiển thị các bài viết bạn đã sửa đổi trên dòng thời gian, cung cấp thông tin chi tiết về tác động của việc sửa đổi chẳng hạn như số lượng đóng góp và xu hướng xem bài viết, cùng những tùy chọn tùy chỉnh để cải thiện trải nghiệm dành cho người dùng trong ứng dụng. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:21}} {{PLURAL:21|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, một lỗi khiến cho [[mw:Special:MyLanguage/Extension:DiscussionTools|Công cụ Thảo luận (DiscussionTools)]] không thể hoạt động trên thiết bị di động, từ đó khôi phục đầy đủ tất cả chức năng. [https://phabricator.wikimedia.org/T415303] '''Cập nhật cho những người đóng góp vào mảng kỹ thuật''' * [[m:Special:GlobalWatchlist|Danh sách Theo dõi Toàn cục]] cho phép bạn xem các danh sách theo dõi từ nhiều wiki trên cùng một trang. [[mw:Special:MyLanguage/Extension:GlobalWatchlist|Phần mở rộng]] giúp thực hiện được điều này tiếp tục được cải tiến. Cải tiến mới nhất là việc bổ sung [[mw:Extension:GlobalWatchlist#hook|hook mới]], <code dir=ltr>ext.globalwatchlist.rebuild</code>, được kích hoạt sau mỗi lần xây dựng lại danh sách theo dõi. Điều này cho phép bạn chạy các tiện ích và đoạn mã người dùng cho trang Đặc biệt. [https://phabricator.wikimedia.org/T275159] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.46/wmf.17|MediaWiki]] '''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/09|Biên dịch]]&nbsp;• [[m:Tech|Nhờ giúp đỡ]]&nbsp;• [[m:Talk:Tech/News|Phản hồi]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].'' </div><section end="technews-2026-W09"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 19:03, ngày 23 tháng 2 năm 2026 (UTC) <!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30119102 --> == Bản tin Kỹ thuật: Tuần 10-2026 == <section begin="technews-2026-W10"/><div class="plainlinks"> '''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/10|Các bản dịch]] của bản tin này cũng có sẵn cho bạn. '''Nổi bật trong tuần''' * [[m:Special:MyLanguage/Wikipedia 25/Easter egg experiments|Chế độ Sinh nhật]] Wikipedia 25 nay đã có mặt trên các trang Wikipedia tiếng Betawi, tiếng Breton, tiếng Trung, tiếng Séc, tiếng Hà Lan, tiếng Anh, tiếng Pháp, tiếng Gorontalo, tiếng Indonesia, tiếng Ý, tiếng Luxembourg, tiếng Madura, tiếng Sicilia, tiếng Tây Ban Nha, tiếng Thái và tiếng Việt! Tính năng chiến dịch hữu hạn này kỷ niệm 25 năm thành lập Wikipedia cùng linh vật cho ngày sinh nhật, Quả cầu Nhỏ (Baby Globe). Khi được bật, Quả cầu Nhỏ được hiển thị trên [[m:Special:MyLanguage/Wikipedia 25/Easter egg experiments/article configuration|~2,500 bài viết]], chờ người đọc khám phá. Cộng đồng có thể chọn bật chế độ Sinh nhật bằng cách đạt đồng thuận từ cộng đồng của mình và yêu cầu một bảo quản viên bật tính năng đó cũng như tùy chỉnh nó thông qua [[m:Special:MyLanguage/Wikipedia 25/Easter egg experiments#Community Configuration Demo|cấu hình cộng đồng]] trên wiki cục bộ. '''Cập nhật cho biên tập viên''' * [[:m:Special:MyLanguage/WMDE Technical Wishes/Sub-referencing|Tham chiếu phụ (sub-referencing)]], một tính năng mới để tái sử dụng nguồn tham khảo với những chi tiết khác đã được triển khai tới Wikipedia tiếng Thụy Điển, Wikipedia tiếng Ba Lan và [[:phab:T418209|một vài trang wiki khác]]. Bạn có thể [[:m:Special:MyLanguage/WMDE Technical Wishes/Sub-referencing#test|thử tính năng này]] trên những dự án đó hoặc trên testwiki và [https://en.wikipedia.beta.wmcloud.org/wiki/Sub-referencing betawiki]. Kinh nghiệm từ wiki thí điểm đầu tiên Wikipedia tiếng Đức đã được [[:m:Special:MyLanguage/WMDE Technical Wishes/Sub-referencing/Learnings|công bố trong báo cáo]]. Hãy liên hệ với nhóm Wikimedia Deutschland nếu bạn [[:m:Talk:WMDE Technical Wishes/Sub-referencing#Pilot wikis|quan tâm đến việc trở thành một wiki thí điểm]]. * [[mw:Special:MyLanguage/Help:Edit check#Paste check|Kiểm tra Chép dán]] (Paste Check) sẽ có mặt trên mọi trang Wikipedia trong tuần này. Tính năng này nhắc những người mới dán các đoạn văn bản mà họ không chắc viết vào Trình Soạn thảo Trực quan cân nhắc xem làm như thế có nguy cơ vi phạm bản quyền hay không. Kiểm tra Chép dán [[mw:Special:MyLanguage/Edit check/Tags|gắn thẻ]] tất cả sửa đổi mà nó hiển thị để có thể xem xét tiếp. Các bảo quản viên cục bộ có thể thiết lập cấu hình cho các khía cạnh khác nhau của tính năng này thông qua [[{{#special:EditChecks}}]]. [[mw:Special:MyLanguage/Edit check/Paste Check#A/B Experiment|Nghiên cứu]] trên 22 wiki cho thấy Kiểm tra Chép dán giúp giảm 18% số lượng sửa đổi bị lùi lại wikis found that so với nhóm đối chứng. Các biên dịch viên có thể [https://translatewiki.net/w/i.php?title=Special%3ATranslate&group=ext-visualeditor-ve-mw-editcheck&filter=&optional=1&action=translate giúp biên dịch] tính năng này cùng những tính năng có liên quan. * [[mw:Special:MyLanguage/Readers/Reader Experience|Nhóm Trải nghiệm Người đọc]] sẽ chuẩn hóa menu người dùng ở góc trên bên phải cho tất cả người dùng di động nhằm giúp nó gần giống trải nghiệm trên máy tính hơn. Hiện tại menu người dùng này chỉ hiển thị cho những người đã bật Chế độ Điều khiển Di động Nâng cao (AMC). Thay đổi duy nhất là một vài nút trước đây ở menu bên trái sẽ chuyển sang góc trên bên phải cho người dùng không bật chế độ AMC. Thay đổi này dự kiến được triển khai vào ngày 9 tháng 3 và nhằm mục đích cải thiện giao diện người dùng. [https://phabricator.wikimedia.org/T413912] * Bắt đầu từ tuần ngày 2 tháng 3, các email được gửi khi thêm, xóa hoặc sửa địa chỉ email của tài khoản sẽ chuyển sang định dạng email HTML đẹp mắt và rõ ràng hơn nhiều so với định dạng email văn bản thuần túy trước đây. [https://phabricator.wikimedia.org/T410807] * Thông báo hiện chỉ giới hạn lưu 2.000 mục lịch sử cho mỗi người dùng, điều này kéo dài trở về năm 2013 khi tính năng này mới được phát hành. Giờ nó sẽ thay đổi thành việc lưu các Thông báo trong 5 năm trở lại đây, nhưng mở rộng lên tối đa 10.000 mục. Điều này sẽ giúp bảo vệ cơ sở hạ tầng và giúp ngăn việc những thông báo xuất hiện gần đây hơn biến mất quá sớm. [https://phabricator.wikimedia.org/T383948] * [[m:Special:GlobalWatchlist|Danh sách Theo dõi Toàn cục]] cho phép bạn xem các danh sách theo dõi của bạn từ nhiều wiki khác nhau trên cùng một trang tiếp tục được cải tiến. Lần cập nhật gần đây nhất cải thiện trải nghiệm sử dụng nhãn. [[mw:Special:MyLanguage/Extension:GlobalWatchlist|Phần mở rộng]] nay cho phép kích hoạt [[mw:Special:MyLanguage/Manual:Language#Fallback languages|hệ thống ngôn ngữ dự phòng]] cho các khoản mục Wikidata không có nhãn bằng ngôn ngữ được xem, đồng thời hiển thị những nhãn đó trong ngôn ngữ Wikidata yêu thích của người dùng nếu không cung cấp tham số URL <code dir=ltr>uselang=</code>. [https://phabricator.wikimedia.org/T373686][https://phabricator.wikimedia.org/T416111] * Nhóm Wikipedia dành cho Android đã bắt đầu cuộc thử nghiệm beta cho tính năng [[mw:Special:MyLanguage/Readers/Information Retrieval/Phase 1|tìm kiếm kết hợp]] (hybrid search) trên Wikipedia tiếng Hy Lạp. Khả năng tìm kiếm kết hợp có thể xử lý cả truy vấn ngữ nghĩa và từ khóa giúp người đọc dễ dàng tìm kiếm những gì họ muốn tìm kiếm ngay trên Wikipedia hơn. * Vì lý do bảo mật, thành viên của một vài nhóm người dùng nhất định [[m:Special:MyLanguage/Mandatory two-factor authentication for users with some extended rights|bắt buộc phải bật tính năng xác thực hai yếu tố]] (2FA). Hiện tại, 2FA bắt buộc phải được bật để sử dụng nhóm người dùng, nhưng không cần phải là để trở thành thành viên nhóm đó. Do mô hình này vẫn còn một vài lỗ hổng, tình hình này sẽ [[phab:T418580|dần dần thay đổi vào tháng 3]]. Các thành viên thuộc những nhóm người dùng đó sẽ không thể tắt phương thức 2FA cuối cùng có trên tài khoản của họ, và sẽ không thể thêm người dùng không dùng 2FA vào những nhóm này. Người dùng vẫn sẽ có thể thêm phương thức xác thực mới hoặc loại bỏ chúng, miễn là còn ít nhất một phương thức được bật. Trong khoảng nửa sau của tháng 3, những người dùng mà không có 2FA sẽ bị loại bỏ khỏi những nhóm này. Điều này áp dụng cho: Bảo quản viên Thông báo Trung ương, kiểm định viên, bảo quản viên giao diện, giám sát viên, nhân viên Wikidata, nhân viên Wikifunctions, bộ phận CNTT của Văn phòng WMF và bộ phận Tin cậy & An toàn của and WMF. Sẽ không có gì thay đổi với những người dùng khác. Xem tác vụ được liên kết để biết khung thời gian triển khai. [https://phabricator.wikimedia.org/T418580] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:27}} {{PLURAL:27|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, một vấn đề ngăn người dùng tạo một phiên bản trong [https://www.wikibase.cloud/ Wikibase.cloud] hiện đã được giải quyết. [https://phabricator.wikimedia.org/T416807] '''Cập nhật cho những người đóng góp vào mảng kỹ thuật''' * Để giúp đảm bảo việc [[mw:Special:MyLanguage/MediaWiki Product Insights/Responsible Reuse|sử dụng cơ sở hạ tầng một cách hợp lý]], trong tháng tới Quỹ Wikimedia sẽ triển khai giới hạn truy cập API toàn cục trên tất cả các API của chúng tôi. Vào đầu tháng 3, các giới hạn nghiêm ngặt hơn sẽ được áp dụng cho các yêu cầu không xác định từ bên ngoài Toolforge/WMCS và các yêu cầu API được thực hiện từ các trình duyệt web. Vào tháng 4, những giới hạn cao hơn sẽ được áp dụng cho lưu lượng truy cập được xác định. Những giới hạn này được cố ý đặt ở mức cao nhất có thể nhằm giảm thiểu tác động đến cộng đồng. Các bot chạy trong Toolforge/WMCS hoặc có quyền thành viên bot trên bất kỳ wiki nào sẽ không bị ảnh hưởng vào lúc này. Tuy vậy, mọi nhà phát triển được khuyến cáo làm theo những lời khuyên thực tiễn được cập nhật. Để biết thêm thông tin, hãy xem [[mw:Special:MyLanguage/Wikimedia APIs/Rate limits|API Wikimedia/Giới hạn truy cập]]. * Điểm cuối Truy vấn Dữ liệu được Liên kết (LDF) của Dịch vụ Truy vấn Wikidata sẽ ngừng hoạt động vào tháng 2. Điểm cuối này phục vụ lưu lượng truy cập hạn chế, lưu lượng này đã được chuyển đổi thành công sang các phương thức truy cập dữ liệu khác phù hợp hơn để hỗ trợ các trường hợp sử dụng (use case) hiện có. Phần cứng được sử dụng để hỗ trợ điểm cuối LDF sẽ được phân bổ lại để hỗ trợ những nỗ lực chuyển đổi hệ thống backend đang diễn ra. [https://phabricator.wikimedia.org/T415696] * Trình phân tích cú pháp Parsoid mới [[mw:Special:MyLanguage/Parsoid/Parser Unification/Updates|tiếp tục được triển khai đến nhiều wiki hơn]], nhằm cải thiện tính bền vững của nền tảng và giúp việc giới thiệu các tính năng đọc và sửa đổi mới trở nên dễ dàng hơn. Parsoid nay là trình phân tích cú pháp mặc định trên 488 trang wiki của WMF (268 trang Wikipedia), hiện chiếm hơn 10% tổng số lượt xem trang Wikipedia. * Quy trình và tiêu chí để [[Special:MyLanguage/Wikimedia Enterprise#Access|yêu cầu quyền truy cập đặc biệt]] vào nguồn cấp dữ liệu khối lượng lớn của API ''Wikimedia Enterprise'' (miễn phí cho các trường hợp sử dụng phù hợp với nhiệm vụ), [[m:Talk:Wikimedia Enterprise#Exceptional access criteria|hiện đã được công bố]]. Điều này nhằm cung cấp tài liệu đầy đủ và rõ ràng hơn cho người dùng. * [https://techblog.wikimedia.org/ Blog Kỹ thuật], một blog dành riêng cho cộng đồng kỹ thuật Wikimedia [https://techblog.wikimedia.org/2026/02/24/a-tech-blog-diff/ sẽ được chuyển] sang [[diffblog:|Diff]], blog tin tức và sự kiện cộng đồng. Việc chuyển đổi dự kiến sẽ được hoàn thành vào tháng 4 năm 2026, sau thời điểm này các bài viết mới sẽ được chấp nhận xuất bản. Người đọc sẽ có thể truy cập các bài đăng – cả bài cũ và mới – trên trang đích này tại https://diff.wikimedia.org/techblog. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.46/wmf.18|MediaWiki]] '''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/10|Biên dịch]]&nbsp;• [[m:Tech|Nhờ giúp đỡ]]&nbsp;• [[m:Talk:Tech/News|Phản hồi]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].'' </div><section end="technews-2026-W10"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 17:51, ngày 2 tháng 3 năm 2026 (UTC) <!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30137798 --> == Bản tin Kỹ thuật: Tuần 11-2026 == <section begin="technews-2026-W11"/><div class="plainlinks"> '''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/11|Các bản dịch]] của bản tin này cũng có sẵn cho bạn. '''Nổi bật trong tuần''' * [[m:Special:MyLanguage/Tech/Server switch|Tất cả các wiki sẽ chuyển sang chế độ chỉ đọc trong vòng vài phút]] vào thứ 4, ngày 25 tháng 3 năm 2026 lúc [https://zonestamp.toolforge.org/1774450800 15:00 UTC]. Điều này là nhằm phục vụ cho việc thử nghiệm chuyển đổi máy chủ cơ sở dữ liệu dự phòng, [[wikitech:Deployments/Yearly calendar|diễn ra hai lần trong một năm]]. Trong quá trình chuyển đổi này, toàn bộ lưu lượng trên các trang web của Wikimedia được chuyển từ trung tâm dữ liệu chính sang trung tâm dữ liệu dự phòng nhằm kiểm tra tính khả dụng và ngăn ngừa việc gián đoạn dịch vụ ngay cả trong những trường hợp khẩn cấp. * Tuần trước, tất cả các wiki đều bị giới hạn ở chế độ chỉ đọc trong vòng 2 giờ đồng hồ, cùng với đó các đoạn mã người dùng và tiện ích cũng không khả dụng trong thời gian được kéo dài. Điều này là do một sự cố bảo mật mà đã được khắc phục sau đó. Chúng tôi đang tiếp tục cố gắng để ngăn điều này tái diễn. Để cập nhật thông tin vui lòng xem [[m:Steward's noticeboard#Statement on Meta about today's user script security incident|bài đăng trên bảng tin của Nhân viên]] ([[m:Special:MyLanguage/Wikimedia Foundation/Product and Technology/Product Safety and Integrity/March 2026 User Script Incident|bản dịch]]). '''Cập nhật cho biên tập viên''' * Người dùng đang gặp phải nhiều lệnh cấm trên thiết bị di động nay sẽ thấy lý do cấm cho từng lần cấm riêng thay vì một thông báo chung chung. Điều này giúp họ hiểu tại sao mình bị cấm và cần thực hiện những bước nào để giải quyết vấn đề. Ví dụ, người dùng bị ảnh hưởng do sử dụng VPN phổ biến (chẳng hạn như [[Special:MyLanguage/Apple iCloud Private Relay|iCloud Private Relay]]) sẽ nhận được hướng dẫn rõ ràng hơn những việc cần làm để bắt đầu lại việc sửa đổi. [https://phabricator.wikimedia.org/T357118] * Cuối tuần này, [[mw:Special:MyLanguage/VisualEditor/Suggestion Mode|Chế độ Đề xuất]] sẽ được cung cấp dưới dạng tính năng beta trong trình soạn thảo trực quan trên tất cả các trang Wikipedia. Tính năng này chủ động đề xuất nhiều loại hành động mà người dùng có thể cân nhắc thực hiện để cải thiện các bài viết trên Wikipedia, đồng thời tìm hiểu về các hướng dẫn có liên quan. Tính năng này có thể được cấu hình cục bộ và cũng có thể được mở rộng cục bộ với bằng việc tùy chỉnh Đề xuất. Cài đặt hiện tại có thể xem được tại trang [[Special:EditChecks]] và có [[mw:Special:MyLanguage/Help:Suggestion mode#For administrators %E2%80%93 local customization|hướng dẫn cách bảo quản viên có thể tùy chỉnh]] các liên kết để chỉ tới những trang hướng dẫn cục bộ. Tính năng này được kết nối với tính năng [[mw:Special:MyLanguage/Help:Edit check|Kiểm tra sửa đổi]], một tính năng đưa ra đề xuất cải thiện trong khi người nào đó viết nội dung mới. Trong tương lai, nhóm Sửa đổi dự kiến đánh giá tác động của tính năng này đối với người dùng mới thông qua một thử nghiệm có kiểm soát. [https://phabricator.wikimedia.org/T404600] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:23}} {{PLURAL:23|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, một sự cố liên quan đến việc con trỏ bị lệch khi sử dụng tính năng tô sáng cú pháp của CodeMirror, một tính năng giúp mã wiki (wikitext) và mã code dễ đọc hơn, nay đã được giải quyết. Vấn đề này đặc biệt ảnh hưởng đến những người dùng đã định nghĩa quy tắc phông chữ trong stylesheet tùy chỉnh khi tạo chủ đề mới bằng Công cụ Thảo luận. [https://phabricator.wikimedia.org/T418793] '''Cập nhật cho những người đóng góp vào mảng kỹ thuật''' * Cập nhật về giới hạn truy vấn API: Để giúp đảm bảo việc [[mw:Special:MyLanguage/MediaWiki Product Insights/Responsible Reuse|sử dụng hợp lý cơ sở hạ tầng]], giới hạn truy vấn API toàn cục sẽ được áp dụng trong tuần này cho các yêu cầu không có User-Agent hợp lệ bắt nguồn từ bên ngoài Toolforge/WMCS cùng các yêu cầu chưa được xác thực được thực hiện từ trình duyệt web. Trong tháng 4 tới sẽ thiết lập giới hạn cao hơn cho lưu lượng truy cập được xác định. Các bot chạy trên Toolforge/WMCS hoặc có quyền thành viên bot trên bất kỳ wiki nào hiện sẽ không bị ảnh hưởng vì điều này. Tuy vậy, mọi nhà phát triển được khuyến cáo nên tuân theo những hướng dẫn thực tiễn tốt nhất được cập nhật. Để biết thêm thông tin, hãy xem [[mw:Special:MyLanguage/Wikimedia APIs/Rate limits|API Wikimedia/Giới hạn truy vấn]]. * API GraphQL mới đã được phát hành. API này được phát triển như một giải pháp thay thế linh hoạt cho một số tính năng nhất định của Dịch vụ Truy vấn Wikidata (WDQS), nhằm cải thiện trải nghiệm và khả năng thích ứng của nhà phát triển, đồng thời giúp truy cập dữ liệu hiệu quả. Hãy dùng thử và [[d:Wikidata:Wikibase GraphQL#Feedback and development|gửi phản hồi]] của mình. Bạn cũng có thể [https://greatquestion.co/wikimediadeutschland/GraphQLAPI/apply đăng ký tham gia các bài kiểm tra về khả năng sẵn dùng]. * Vào tháng 2 [[m:Special:MyLanguage/Product and Technology Advisory Council/Unsupported Tools Working Group|Nhóm Làm việc cho Công cụ Không được Hỗ trợ PTAC]] đã tiếp tục cải tiến [[commons:Special:MyLanguage/Commons:Video2commons#|Video2Commons]], trong đó sửa các lỗi liên quan đến lỗi xác thực, xử lý tệp lớn, khả năng hiển thị hàng đợi tác vụ và làm rõ hơn hành vi tải lên. Hiện một số lĩnh vực vẫn đang được tiến hành thực hiện, trong đó có những thay đổi liên quan đến việc tải lên từ phía máy chủ đã lỗi thời. Hãy đọc [[m:Special:MyLanguage/Product and Technology Advisory Council/Unsupported Tools Working Group#February 2026|phần cập nhật này]] để tìm hiểu thêm. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.46/wmf.19|MediaWiki]] '''Chuyên sâu''' * Nhóm Hướng dẫn Bài viết mời các biên tập viên Wikipedia có kinh nghiệm từ một số [[mw:Special:MyLanguage/Article guidance/Pilot wikis and collaborators#Collaborators|wiki thí điểm]] được chọn cùng những người đóng góp có quan tâm từ các trang Wikipedia khác điền vào bảng câu hỏi này, có sẵn bằng [https://docs.google.com/forms/d/e/1FAIpQLSfmLeVWnxmsCbPoI_UF2jyRcn73WRGWCVPHzerXb4Cz97X_Ag/viewform tiếng Anh], [https://docs.google.com/forms/d/e/1FAIpQLSd6rzr4XXQw8r4024fE3geTPFe13M_6w7Mitj-YJi0sOlWTAw/viewform?usp=header tiếng Ả Rập], [https://docs.google.com/forms/d/e/1FAIpQLSdok3-RfB18lcugYTUMGkpwmqG_8p760Wv4dCXitOXOszjUDw/viewform?usp=header tiếng Bengali], [https://docs.google.com/forms/d/e/1FAIpQLSfjTfYp4jEo0akA4B1e-Nfg3QZPCudUjhJzHzzDi6AHyAaMGA/viewform?usp=header tiếng Nhật], [https://docs.google.com/forms/d/e/1FAIpQLScteVoI29Aue4xc72dekk-6RYtvmMgQxzMI900UOawrFrSTWg/viewform?usp=header tiếng Bồ Đào Nha], [https://docs.google.com/forms/d/e/1FAIpQLSetdxnYwL3ub2vqA7awCg5hJZPMIYcDPaiTe12rY9h0GYnVlw/viewform?usp=header tiếng Ba Tư] và [https://docs.google.com/forms/d/e/1FAIpQLScNvfJF-Ot-4pzA4qAN771_0QDJ4Li19YcUsaTgSKW8Nc7U_Q/viewform?usp=header tiếng Thổ Nhĩ Kỳ]. Phản hồi của bạn sẽ giúp nhóm tùy chỉnh hướng dẫn cho các biên tập viên ít kinh nghiệm hơn và giúp họ tìm hiểu các chính sách và thực tiễn của cộng đồng khi tạo bài viết. Tìm hiểu thêm [[mw:Special:MyLanguage/Article guidance|trên trang dự án]]. '''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/11|Biên dịch]]&nbsp;• [[m:Tech|Nhờ giúp đỡ]]&nbsp;• [[m:Talk:Tech/News|Phản hồi]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].'' </div><section end="technews-2026-W11"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 18:53, ngày 9 tháng 3 năm 2026 (UTC) <!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30213008 --> == Bản tin Kỹ thuật: Tuần 12-2026 == <section begin="technews-2026-W12"/><div class="plainlinks"> '''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/12|Các bản dịch]] của bản tin này cũng có sẵn cho bạn. '''Cập nhật cho biên tập viên''' * Tính năng beta [[mw:Special:MyLanguage/Help:Extension:CodeMirror|{{int:codemirror-beta-feature-title}}]], còn được biết đến với tên [[mw:Special:MyLanguage/Extension:CodeMirror|CodeMirror 6]], được sử dụng để tô sáng cú pháp mã wiki kể từ tháng 11 năm 2024. Tính năng này sẽ chính thức kết thúc giai đoạn thử nghiệm beta vào tháng 5 năm 2026 nhằm đưa những cải tiến và [[mw:Special:MyLanguage/Help:Extension:CodeMirror#Features|tính năng]] mới cho tất cả biên tập viên sử dụng trình tô sáng cú pháp tiêu chuẩn. Nếu bạn có bất kỳ câu hỏi hoặc thắc mắc nào về việc kết thúc giai đoạn thử nghiệm beta cho tính năng này, [[mw:Special:MyLanguage/Help talk:Extension:CodeMirror|vui lòng chia sẻ với chúng tôi]]. [https://phabricator.wikimedia.org/T259059] * Một số thay đổi đối với quyền nhóm người dùng cục bộ được tiếp viên trên Meta-Wiki thực hiện và nhật trình về những thay đổi này chỉ được ghi lại trên đó. Giờ đây, thay đổi về quyền liên wiki sẽ được ghi lại trên cả Meta-Wiki và wiki của người dùng mục tiêu để giúp dễ dàng truy cập vào toàn bộ bản ghi thay đổi quyền người dùng trên wiki cục bộ hơn. Những mục nhật trình trước đây về những thay đổi này sẽ được cập nhật trong những tuần tiếp theo. [https://phabricator.wikimedia.org/T6055] * Trên các wiki sử dụng [[m:Special:MyLanguage/Flagged Revisions|Thay đổi Được gắn cờ (Flagged Revisions)]], số lượng thay đổi đang chờ được hiển thị trên [[{{#Special:PendingChanges}}]] trước đây tính cả những trang mà không còn ở trong trạng thái đang chờ xem xét, do chúng đã bị xóa khỏi hệ thống mà không được xem xét lại, v.d. do bị xóa, được di chuyển sang không gian tên khác, hoặc do thay đổi cấu hình wiki. Bộ đếm giờ sẽ được hiển thị chính xác. Trên một số wiki số lượng thay đổi được hiển thị sẽ nhỏ hơn nhiều so với trước đây. Bản thân danh sách các trang sẽ không có thay đổi gì. [https://phabricator.wikimedia.org/T413016] * Ngôn ngữ soạn thảo của Wikifunctions đã được viết lại, tạo ra một phiên bản mới của ngôn ngữ này. Thay đổi này nhằm mục đích tăng cường tính ổn định của dịch vụ bằng cách giảm mức tiêu thụ bộ nhớ của trình điều phối. Việc viết lại này cũng giúp cho phép giảm đáng kể độ trễ, đơn giản hóa mã nguồn và tạo ra các lớp trừu tượng tốt hơn, nhằm mở ra cơ hội bổ sung thêm các tính năng khác trong tương lai. Đọc thêm về [[f:Special:MyLanguage/Wikifunctions:Status updates/2026-03-11|các thay đổi này]]. * Người dùng nay có thể sắp xếp kết quả tìm kiếm theo thứ tự bảng chữ cái dựa trên tiêu đề trang. Lần cập nhật này cung cấp thêm một tùy chọn giúp cho việc tìm kiếm trang trở nên dễ dàng và nhanh chóng hơn. Trước đây, kết quả có thể được sắp xếp theo Ngày sửa đổi, Ngày tạo, hoặc Mức độ liên quan. Để sử dụng tùy chọn mới này, hãy mở 'Tìm kiếm nâng cao' trên trang kết quả tìm kiếm và chọn 'Thứ tự bảng chữ cái' trong mục 'Thứ tự sắp xếp'. [https://phabricator.wikimedia.org/T403775] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:28}} {{PLURAL:28|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, một lỗi khiến cho Trình tải lên tập tin (UploadWizard) trên Wikimedia Commons không thể nhập tập tin từ Flickr nay đã được giải quyết. [https://phabricator.wikimedia.org/T419263] '''Cập nhật cho những người đóng góp vào mảng kỹ thuật''' * Một trang đặc biệt mới, [[{{#special:LintTemplateErrors}}]], đã được tạo ra để liệt kê các trang nhúng được đánh dấu là chứa lỗi lint để giúp người dùng dễ dàng phát hiện chúng hơn. Danh sách được sắp xếp theo số lượng các trang được nhúng mà có lỗi. Ví dụ: [[{{#special:LintTemplateErrors}}/night-mode-unaware-background-color]]. [https://phabricator.wikimedia.org/T170874] * Người dùng tính năng beta [[mw:Special:MyLanguage/Help:Extension:CodeMirror|{{int:codemirror-beta-feature-title}}]] hiện đang sử dụng [[mw:Special:MyLanguage/Extension:CodeMirror|CodeMirror]] thay vì [[mw:Special:MyLanguage/Extension:CodeEditor|CodeEditor]] để tô sáng cú pháp khi sửa đổi các trang nội dung JavaScript, CSS, JSON, Vue và Lua, trong một khoảng thời gian. Cùng với việc kết thúc thử nghiệm beta cho CodeMirror 6, kế hoạch là thay thế CodeEditor để trở thành trình soạn thảo tiêu chuẩn cho những kiểu nội dung này vào tháng 5 năm 2026. [[mw:Special:MyLanguage/Help talk:Extension:CodeMirror|Mọi phản hồi hoặc ý kiến đóng góp đều được hoan nghênh]]. [https://phabricator.wikimedia.org/T419332] * Các mô đun JavaScript cho [[mw:Special:MyLanguage/Extension:CodeMirror|CodeMirror]] JavaScript sẽ sớm được nâng cấp lên CodeMirror 6. Trước thời điểm nâng cấp này, việc tải các mô đun <code dir=ltr>ext.CodeMirror</code> hoặc <code dir=ltr>ext.CodeMirror.lib</code> từ các tiện ích và đoạn mã người dùng đã bị loại bỏ vào tháng 7 năm 2025. Việc sử dụng hook <code dir=ltr>ext.CodeMirror.switch</code> cũng đã bị loại bỏ vào tháng 3 năm 2025. Những người đóng góp nay có thể làm cho các đoạn mã hoặc tiện ích của mình tương thích với CodeMirror 6. Xem [[mw:Special:MyLanguage/Extension:CodeMirror#Gadgets and user scripts|hướng dẫn chuyển đổi]] để biết thêm thông tin. [https://phabricator.wikimedia.org/T373720] * Nhóm Giao diện MediaWiki đang mở rộng phạm vi định nghĩa mô đun API REST để bao gồm cả [[mw:Special:MyLanguage/API:REST API/Extensions|các API mở rộng]]. Mô đun API REST là nhóm các điểm cuối có liên quan mà có thể được quản lý và đánh phiên bản độc lập. Hiện đã có các mô đun cho API [https://phabricator.wikimedia.org/T414470 GrowthExperiments] và [https://phabricator.wikimedia.org/T419053 Wikifunctions]. Khi chúng tôi chuyển đổi các API mở rộng sang cấu trúc này, tài liệu sẽ được chuyển ra khỏi phần đặc tả chính cho OpenAPI của MediaWiki cùng chế độ xem REST Sandbox, và thay vào đó sẽ có thể truy cập được thông qua tùy chọn dành riêng cho mô đun trong menu thả xuống trên [https://test.wikipedia.org/wiki/Special:RestSandbox REST Sandbox] (nghĩa là, [[{{#Special:RestSandbox}}]], có sẵn trên tất cả các dự án wiki). * Phần mở rộng [[mw:Special:MyLanguage/Extension:Scribunto|Scribunto]] cung cấp nhiều thông tin khác nhau về wiki nơi mô đun đang được sử dụng thông qua thư viện [[mw:Special:MyLanguage/Extension:Scribunto/Lua reference manual|mw.site]]. Kể từ tuần trước, thư viện này cũng cung cấp một [[mw:Special:MyLanguage/Extension:Scribunto/Lua reference manual#mw.site.wikiId|cách]] truy cập [[mw:Special:MyLanguage/Manual:Wiki ID|ID của wiki]] có thể được sử dụng để hỗ trợ bảo trì mô đun liên wiki. [https://phabricator.wikimedia.org/T146616] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.46/wmf.20|MediaWiki]] '''Chuyên sâu''' * [[m:Special:MyLanguage/Coolest Tool Award|Giải thưởng Công cụ Tuyệt vời nhất năm 2026]] nhằm tôn vinh những công cụ xuất sắc do cộng đồng tạo ra, nay đã mở nhận đề cử! Hãy đề cử công cụ yêu thích của bạn bằng cách sử dụng biểu mẫu [https://wikimediafoundation.limesurvey.net/435684?lang=en khảo sát đề cử] trước ngày 23 tháng 3 năm 2026. Để biết thêm thông tin về quyền riêng tư và xử lý dữ liệu, vui lòng xem [[foundation:Special:MyLanguage/Legal:Coolest_Tool_Award_2026_Survey_Privacy_Statement|tuyên bố về quyền riêng tư của khảo sát]]. '''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/12|Biên dịch]]&nbsp;• [[m:Tech|Nhờ giúp đỡ]]&nbsp;• [[m:Talk:Tech/News|Phản hồi]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].'' </div><section end="technews-2026-W12"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 19:35, ngày 16 tháng 3 năm 2026 (UTC) <!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30260505 --> == Bản tin Kỹ thuật: Tuần 13-2026 == <section begin="technews-2026-W13"/><div class="plainlinks"> '''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/13|Các bản dịch]] của bản tin này cũng có sẵn cho bạn. '''Nổi bật trong tuần''' * Người dùng các trang Wikimedia nay có thể đăng nhập mà không cần mật khẩu bằng cách sử dụng khóa truy cập (passkey). Đây là một phương thức bảo mật sử dụng vân tay, nhận diện khuôn mặt hoặc mã PIN. Với thay đổi này, tất cả người dùng chọn đăng nhập không cần mật khẩu sẽ có thể đăng nhập vào tài khoản của mình một cách dễ dàng, nhanh chóng và an toàn hơn trên mọi thiết bị. Tùy chọn đăng nhập mới bằng khóa truy cập hiện hiển thị dưới dạng gợi ý tự động điền trong trường tên người dùng. [[phab:T417120|Nút "Đăng nhập bằng khóa truy cập"]] bổ sung sẽ sớm được cung cấp cho những người dùng đã bật tùy chọn sử dụng khóa truy cập. Lần cập nhật này sẽ cải thiện bảo mật cũng như trải nghiệm người dùng. [[c:File:Passwordless_login_screencast.webm|Bản ghi lại màn hình]] này sẽ minh họa từng bước quy trình đăng nhập không cần mật khẩu. * [[m:Special:MyLanguage/Tech/Server switch|Tất cả các wiki sẽ chuyển sang chế độ chỉ đọc trong vòng vài phút]] vào thứ 4, ngày 25 tháng 3 năm 2026 lúc [https://zonestamp.toolforge.org/1774450800 15:00 UTC]. Điều này là nhằm phục vụ cho việc thử nghiệm chuyển đổi máy chủ cơ sở dữ liệu dự phòng, [[wikitech:Deployments/Yearly calendar|diễn ra hai lần trong một năm]]. Trong quá trình chuyển đổi này, toàn bộ lưu lượng trên các trang web của Wikimedia được chuyển từ trung tâm dữ liệu chính sang trung tâm dữ liệu dự phòng nhằm kiểm tra tính khả dụng và ngăn ngừa việc gián đoạn dịch vụ ngay cả trong những trường hợp khẩn cấp. '''Cập nhật cho biên tập viên''' * Người dùng các trang web của Wikimedia nay có thể xuất các thông báo cách đây hơn 5 năm của mình bằng cách sử dụng [[toolforge:echo-chamber|công cụ Toolforge mới]]. Điều này sẽ đảm bảo rằng người dùng có thể giữ lại được những thông báo quan trọng và tránh bị mất chúng do việc thay đổi theo kế hoạch nhằm xóa đi các thông báo cũ hơn 5 năm, như đã thông báo trước đó. [https://phabricator.wikimedia.org/T383948] * Các biên tập viên Wikipedia tiếng Indonesia, tiếng Thái, tiếng Thổ Nhĩ Kỳ, và tiếng Anh Đơn giản nay có thể truy cập vào Đặc biệt:Bảng điều khiển cá nhân. Đây là [[mw:Special:MyLanguage/Moderator Tools/Dashboard|phiên bản trải nghiệm sớm]] giúp các biên tập viên mới làm quen với quy trình tuần tra, giúp họ dễ dàng chuyển từ việc sửa đổi sang tham gia vào những công việc kiểm duyệt nâng cao hơn trên dự án của mình. [https://phabricator.wikimedia.org/T402647] * Trang [[vi:Special:Block|Đặc_biệt:Cấm]] nay có hai thay đổi nhỏ về mặt giao diện. Bảo quản viên nay có thể dễ dàng thực hiện lệnh cấm vô hạn thông qua nút chọn (nút radio) chuyên dụng trong mục thời hạn. Ngoài ra, việc chọn thời hạn là vô hạn sẽ cung cấp một bộ lý do phổ biến khác để lựa chọn, nó có thể được thay đổi tại: [[MediaWiki:Ipbreason-indef-dropdown]]. [https://phabricator.wikimedia.org/T401823] * Biên tập viên sử dụng thiết bị di động [[mw:Special:MyLanguage/Contributors/Account Creation Experiments#Logged-out|tại một số wiki]] nay có thể nhìn thấy cải tiến về cảnh báo sửa đổi khi chưa đăng nhập, điều này là nhờ cập nhật gần đây từ nhóm Phát triển. Những thay đổi được phát hành vào tuần trước này là một phần trong những nỗ lực và thử nghiệm đang được thực hiện nhằm nâng cao [[mw:Special:MyLanguage/Contributors/Account Creation Experiments|trải nghiệm trong việc tạo tài khoản trên thiết bị di động]] và từ đó giúp tăng cường sự tham gia của họ. [https://phabricator.wikimedia.org/T408484] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:36}} {{PLURAL:36|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, một lỗi khiến người dùng web trên thiết bị di động không thể nhìn thấy thông tin cấm khi có nhiều lệnh cấm đồng thời được áp dụng đã được giải quyết. Họ giờ có thể xem được tin nhắn cho tất cả các lệnh cấm hiện đang được áp dụng cho họ khi họ truy cập Wikipedia. '''Cập nhật cho những người đóng góp vào mảng kỹ thuật''' * Những image (ảnh) được dựng bằng Toolforge sẽ sớm được nâng cấp lên phiên bản buildpack mới, mang đến việc hỗ trợ các phiên bản ngôn ngữ mới hơn cùng những cải tiến và sửa lỗi khác tại thượng nguồn. Nếu bạn sử dụng Dịch vụ Dựng của Toolforge, hãy xem lại [https://lists.wikimedia.org/hyperkitty/list/cloud-announce@lists.wikimedia.org/thread/EMYTA32EV2V5SQ2JIEOD2CL66YFIZEKV/ email cloud-announce] gần đây và cập nhật cấu hình bản dựng của bạn nếu cần để đảm bảo các công cụ của bạn tương thích với phiên bản mới này. [https://wikitech.wikimedia.org/w/index.php?title=Help:Toolforge/Building_container_images&oldid=2392097#Buildpack_environment_upgrade_process][https://phabricator.wikimedia.org/T380127] * Wiki tài liệu [https://api.wikimedia.org/wiki/Main_Page Cổng API] sẽ ngừng hoạt động vào tháng 6 năm 2026. Các khóa API được tạo trên Cổng API sẽ tiếp tục hoạt động bình thường. Các điểm cuối của api.wikimedia.org sẽ dần bị loại bỏ bắt đầu từ tháng 7 năm 2026. Tài liệu trên Cổng API đang được chuyển sang [[mw:Wikimedia APIs|mediawiki.org]]. Tìm hiểu thêm trên [[wikitech:API Portal/Deprecation|trang dự án]]. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.46/wmf.21|MediaWiki]] '''Chuyên sâu''' * [[m:Special:MyLanguage/WMDE Technical Wishes|Nhóm Mong muốn – Kỹ thuật của WMDE]] đang xem xét cải tiến [[m:WMDE Technical Wishes/References/VisualEditor automatic reference names|tên chú thích được tạo tự động trong Trình Soạn thảo Trực quan (VisualEditor)]]. Vui lòng xem qua [[m:WMDE Technical Wishes/References/VisualEditor automatic reference names#Proposed solutions|những giải pháp được đề xuất]] và tham gia vào [[m:Talk:WMDE Technical Wishes/References/VisualEditor automatic reference names#Request for comment|thảo luận này]]. '''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/13|Biên dịch]]&nbsp;• [[m:Tech|Nhờ giúp đỡ]]&nbsp;• [[m:Talk:Tech/News|Phản hồi]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].'' </div><section end="technews-2026-W13"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 16:51, ngày 23 tháng 3 năm 2026 (UTC) <!-- Tin nhắn của Thành viên:UOzurumba (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30268305 --> == Bản tin Kỹ thuật: Tuần 14-2026 == <section begin="technews-2026-W14"/><div class="plainlinks"> '''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/14|Các bản dịch]] của bản tin này cũng có sẵn cho bạn. '''Nổi bật trong tuần''' * Phiên bản Beta của [[abstract:|Abstract Wikipedia]] một dự án Wikimedia mới không phụ thuộc ngôn ngữ, đã được khởi động vào tuần trước. Dự án cho phép các cộng đồng xây dựng các bài viết Wikipedia bằng ngôn ngữ mẹ đẻ của họ, và các thành viên khác có thể dễ dàng truy cập các bài viết đó bằng ngôn ngữ của riêng họ. Wiki này hoạt động dựa trên chỉ dẫn từ Wikifunctions và cũng dựa trên nội dung có cấu trúc từ Wikidata. [[:f:Special:MyLanguage/Wikifunctions:Status updates/2026-03-26|Đọc thêm]]. '''Cập nhật cho biên tập viên''' * Nhóm Phát triển đang tiến hành thử nghiệm A/B để đánh giá cho một thông điệp rõ ràng hơn, thân thiện hơn với người dùng nhằm khuyến khích việc tạo tài khoản trên wiki. Hiện tại, khi người dùng di động chưa đăng nhập bắt đầu sửa đổi, họ sẽ thấy một thông báo cảnh báo khó chịu, có thể khiến cho họ có cảm giác đột ngột và nản lòng. Điều này cũng làm cho việc sửa đổi bằng tài khoản tạm thời trở thành mặc định thay vì khuyến khích việc tạo tài khoản. Thử nghiệm đang được thực hiện trên mười trang Wikipedia, bao gồm tiếng Ả Rập, tiếng Pháp, tiếng Tây Ban Nha và tiếng Đức. [[mw:Special:MyLanguage/Contributors/Account Creation Experiments#2. Improve logged-out warning message (T415160)|Đọc thêm]]. * Nhóm Ứng dụng Wikimedia đang mời mọi người đóng góp ý kiến về [[mw:Special:MyLanguage/Wikimedia Apps/Team/Future of Editing on the Mobile Apps|việc sửa đổi trên ứng dụng Wikipedia dành cho thiết bị di động nên hoạt động như thế nào]]. Thảo luận tập trung vào việc cải thiện cách người dùng truy cập công cụ sửa đổi khi họ nhấn vào nút "Sửa đổi". Đây là một phần trong nỗ lực rộng lớn hơn nhằm chuyển đổi những người đọc mà có hứng thú với việc sửa đổi sang một con đường thân thiện hơn với người dùng để có thể bắt đầu đóng góp. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:45}} {{PLURAL:45|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, một sự cố khiến việc lấy chú thích từ kho lưu trữ báo chí lớn [https://www.newspapers.com Newspapers.com] không còn hoạt động, do bị chặn trong các yêu cầu của [[mw:Special:MyLanguage/Citoid|Citoid]], nay đã được khắc phục. [https://phabricator.wikimedia.org/T419903] '''Cập nhật cho những người đóng góp vào mảng kỹ thuật''' * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.46/wmf.22|MediaWiki]] '''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/14|Biên dịch]]&nbsp;• [[m:Tech|Nhờ giúp đỡ]]&nbsp;• [[m:Talk:Tech/News|Phản hồi]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].'' </div><section end="technews-2026-W14"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 19:25, ngày 30 tháng 3 năm 2026 (UTC) <!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30329462 --> == Action Required: Update templates/modules for electoral maps (Migrating from P1846 to P14226) == Hello everyone, This is a notice regarding an ongoing data migration on Wikidata that may affect your election-related templates and Lua modules (such as <code>Module:Itemgroup/list</code>). '''The Change:'''<br /> Currently, many templates pull electoral maps from Wikidata using the property [[:d:Property:P1846|P1846]], combined with the qualifier [[:d:Property:P180|P180]]: [[:d:Q19571328|Q19571328]]. We are migrating this data (across roughly 4,000 items) to a newly created, dedicated property: '''[[:d:Property:P14226|P14226]]'''. '''What You Need To Do:'''<br /> To ensure your templates and infoboxes do not break or lose their maps, please update your local code to fetch data from [[:d:Property:P14226|P14226]] instead of the old [[:d:Property:P1846|P1846]] + [[:d:Property:P180|P180]] structure. A [[m:Wikidata/Property Migration: P1846 to P14226/List|list of pages]] was generated using Wikimedia Global Search. '''Deadline:'''<br /> We are temporarily retaining the old data on [[:d:Property:P1846|P1846]] to allow for a smooth transition. However, to complete the data cleanup on Wikidata, the old [[:d:Property:P1846|P1846]] statements will be removed after '''May 1, 2026'''. Please update your modules and templates before this date to prevent any disruption to your wiki's election articles. Let us know if you have any questions or need assistance with the query logic. Thank you for your help! [[User:ZI Jony|ZI Jony]] using [[Thành viên:MediaWiki message delivery|MediaWiki message delivery]] ([[Thảo luận Thành viên:MediaWiki message delivery|thảo luận]]) 17:11, ngày 3 tháng 4 năm 2026 (UTC) <!-- Tin nhắn của Thành viên:ZI Jony@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Distribution_list/Non-Technical_Village_Pumps_distribution_list&oldid=29941252 --> == Bản tin Kỹ thuật: Tuần 15-2026 == <section begin="technews-2026-W15"/><div class="plainlinks"> '''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/15|Các bản dịch]] của bản tin này cũng có sẵn cho bạn. '''Cập nhật cho biên tập viên''' * [[mw:Special:MyLanguage/Help:Extension:CampaignEvents|Phần mở rộng CampaignEvents]] nay có thêm tính năng mới nhằm thiết lập mục tiêu nhóm, nhằm cho phép những người tổ chức thiết lập và theo dõi mục tiêu sự kiện chẳng hạn như số lượng bài viết được tạo và số lượng người tham gia đóng góp theo thời gian thực. Tương tự, những người tham gia có thể cùng nhau hướng tới các mục tiêu chung và chứng kiến ​​tác động tập thể của họ khi sự kiện diễn ra. Tính năng này hiện đã có trên tất cả các wiki của Wikimedia. Tìm hiểu thêm trong [[mw:Special:MyLanguage/Help:Extension:CampaignEvents/Registration/Collaborative contributions#Goal setting|trang tài liệu này]]. * [[File:Maki-gift-15.svg|12px|link=|class=skin-invert|Mục Mong muốn cộng đồng]] Tính năng [[mw:Special:MyLanguage/Help:Watchlist labels|gán nhãn danh sách theo dõi]] mới (được công bố trong [[m:Special:MyLanguage/Tech/News/2026/07|Bản tin Kỹ thuật 2026-07]]) nay có sẵn thông qua Trình Soạn thảo Trực quan, trình soạn thảo mã nguồn, và biểu tượng 'sao theo dõi' (hoặc liên kết theo dõi, đối với các giao diện không có biểu tượng hình sao). Trước đây việc gán nhãn như vậy chỉ có thể thực hiện được thông qua [[Special:EditWatchlist|EditWatchlist]]. Ở cả ba nơi đó, đây đều sẽ là trường mới ngay sau sau trường thời điểm hết hạn theo dõi. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:23}} {{PLURAL:23|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, một vấn đề mà trang thảo luận trên thiết bị di động dùng Parsoid không thể sử dụng được sau đề mục không có tiêu đề, nay đã được giải quyết. [https://phabricator.wikimedia.org/T419171] '''Cập nhật cho những người đóng góp vào mảng kỹ thuật''' * [[m:Special:MyLanguage/WMDE Technical Wishes/Sub-referencing|Tính năng chú thích phụ]], một tính năng cho phép biên tập viên thêm thông tin chi tiết vào nguồn tham khảo hiện có mà không cần nhân bản nó, sẽ được triển khai dần dần tới [[phab:T414094|nhiều trang wiki hơn]] vào cuối năm nay. Các wiki sử dụng tiện ích [[mw:Special:MyLanguage/Reference Tooltips|Chú thích nổi]] được khuyến khích cập nhật phiên bản của mình (thường là tại [[m:MediaWiki:Gadget-ReferenceTooltips.js|MediaWiki:Gadget-ReferenceTooltips.js]] như được hiển thị tại [https://en.wikipedia.org/w/index.php?diff=1344408362 đây]) để đảm bảo khả năng tương thích. Các tiện ích khác liên quan đến nguồn tham khảo khác cũng có thể bị ảnh hưởng. [https://phabricator.wikimedia.org/T416304] * Tất cả các phiên bản của Wikinews sẽ bị đóng và chuyển sang chế độ chỉ đọc vào ngày 4 tháng 5 năm 2026. Mọi nội dung vẫn sẽ có thể truy cập được, nhưng sẽ không thể thêm bất kỳ sửa đổi hoặc bài viết mới nào. Việc đóng này đã được Hội đồng Quản trị của Quỹ Wikimedia phê duyệt sau những cuộc thảo luận kéo dài. [[m:Wikimedia Foundation Board noticeboard#Board of Trustees Approves Closure of Wikinews|Đọc thêm]]. * [[:mw:Special:MyLanguage/API:Action API|API Tác vụ]] có một số kiểu định dạng đầu ra được yêu cầu. Một trong số chúng, <bdi lang="zxx" dir="ltr"><code><nowiki>format=php</nowiki></code></bdi>, sẽ sớm bị loại bỏ. Vui lòng đảm bảo rằng các tập lệnh hoặc bot của bạn sử dụng [[mw:Special:MyLanguage/API:Data formats#Output|kiểu định dạng JSON]]. Việc loại bỏ này sẽ chỉ ảnh hưởng đến một số lượng rất nhỏ các tập lệnh người dùng và bot. [https://phabricator.wikimedia.org/T118538] * Trang [[Special:NamespaceInfo|Đặc biệt:NamespaceInfo]] nay có chứa phần viết tắt không gian tên. Ví dụ "WP" cho không gian tên "Project" ("Wikipedia") trên Wikipedia tiếng Đức. [https://phabricator.wikimedia.org/T381455] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.46/wmf.23|MediaWiki]] '''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/15|Biên dịch]]&nbsp;• [[m:Tech|Nhờ giúp đỡ]]&nbsp;• [[m:Talk:Tech/News|Phản hồi]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].'' </div><section end="technews-2026-W15"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 16:19, ngày 6 tháng 4 năm 2026 (UTC) <!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30362761 --> == Bản tin Kỹ thuật: Tuần 16-2026 == <section begin="technews-2026-W16"/><div class="plainlinks"> '''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/16|Các bản dịch]] của bản tin này cũng có sẵn cho bạn. '''Nổi bật trong tuần''' * Các biên tập viên có kinh nghiệm được mời tham gia [https://b24e11a4f1.catalyst.wmcloud.org/wiki/Main_Page thử nghiệm] tính năng [[mw:Special:MyLanguage/Article guidance|Hướng dẫn bài viết]], được thiết kế để giúp các biên tập viên ít kinh nghiệm hơn tạo ra các bài viết Wikipedia có cấu trúc tốt và phù hợp với quy định. Hướng dẫn thử nghiệm [[mw:Special:MyLanguage/Article guidance/Test feature guide|có sẵn tại đây]]. Ngoài ra, sau khi xem xét [https://b24e11a4f1.catalyst.wmcloud.org/wiki/Category:Pages_using_article_guidance bản tóm tắt này], vui lòng cung cấp phản hồi trên [[mw:Talk:Article guidance|trang thảo luận của dự án]]. Dựa trên ý kiến đóng góp của bạn, tính năng này sẽ được tinh chỉnh và chuyển giao cho các trang Wikipedia thí điểm để biên dịch và điều chỉnh cho thích hợp. Hãy xem qua [[c:File:Article Guidance workflow demo - April 2026.webm|video]] giải thích về tính năng này. '''Cập nhật cho biên tập viên''' * Trên hầu hết các trang wiki, tất cả thành viên tự xác nhận nay có thể sử dụng trang [[Special:ChangeContentModel|Đặc biệt:ChangeContentModel]] để [[mw:Special:MyLanguage/Help:ChangeContentModel|tạo trang mới với kiểu nội dung tùy chỉnh]], chẳng hạn như danh sách gửi thông báo rộng rãi, giúp cho định dạng trang tùy chỉnh trở nên dễ tiếp cận hơn. Kiểm tra [[Special:ListGroupRights|Đặc biệt:Quyền nhóm người dùng]] để biết trạng thái trên wiki của bạn. [https://phabricator.wikimedia.org/T248294] * Nhóm Phát triển đã khởi động một [[mw:Special:MyLanguage/Contributors/Account_Creation_Experiments|thử nghiệm tạo tài khoản]] để đánh giá xem việc thêm nút tạo tài khoản vào phần đầu trang web trên thiết bị di động có làm tăng số lượng người đăng ký tài khoản mới và khuyến khích nhiều người dùng thiết bị di động đóng góp vào wiki hay không. Thử nghiệm hiện đang được thực hiện trên Wikipedia tiếng Hindi, tiếng Indonesia, tiếng Bengali, tiếng Thái và tiếng Do Thái, và nhắm mục tiêu vào 10% người dùng web trên di động chưa đăng nhập. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:30}} {{PLURAL:30|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, một sự cố có thể khiến Trình Soạn thảo Trực quan bị kẹt khi tải trên các thiết bị Windows đã tắt hiệu ứng hoạt ảnh, nay đã được giải quyết. [https://phabricator.wikimedia.org/T382856] '''Cập nhật cho những người đóng góp vào mảng kỹ thuật''' * Kể từ cuối tuần này, {{int:group-abusefilter}} đã bật tính năng beta [[mw:Special:MyLanguage/Help:Extension:CodeMirror|{{int:codemirror-beta-feature-title}}]] sẽ sử dụng [[mw:Special:MyLanguage/Extension:CodeMirror|CodeMirror]] thay vì [[mw:Special:MyLanguage/Extension:CodeEditor|CodeEditor]] làm trình soạn thảo tại [[Special:AbuseFilter|Đặc biệt:Bộ lọc sai phạm]]. Đây là một phần trong nỗ lực rộng lớn hơn nhằm mang lại trải nghiệm người dùng nhất quán hơn trên tất cả các trình soạn thảo. [https://phabricator.wikimedia.org/T399673][https://phabricator.wikimedia.org/T419332] * Các công cụ và bot truy cập vào [[mw:Special:MyLanguage/Notifications/API|API Thông báo]] (<bdi lang="zxx" dir="ltr"><code><nowiki>action=query&meta=notifications</nowiki></code></bdi>) sẽ cần phải cập nhật quyền OAuth hoặc BotPassword của mình để bao gồm cả quyền truy cập vào các thông báo riêng tư. [https://phabricator.wikimedia.org/T421991] * Do việc nâng cấp thư viện, việc liệt kê danh sách trên các trang thể loại có thể hiển thị không đúng theo thứ tự bắt đầu từ thứ Hai, ngày 20 tháng 4. Một kịch bản chuyển đổi sẽ được chạy để khắc phục điều này, và sẽ mất từ ​​vài giờ đến vài ngày tùy thuộc vào kích thước của wiki (tối đa một tuần đối với Wikipedia tiếng Anh). [https://phabricator.wikimedia.org/T422544] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.46/wmf.24|MediaWiki]] '''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/16|Biên dịch]]&nbsp;• [[m:Tech|Nhờ giúp đỡ]]&nbsp;• [[m:Talk:Tech/News|Phản hồi]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].'' </div><section end="technews-2026-W16"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 15:19, ngày 13 tháng 4 năm 2026 (UTC) <!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30380527 --> == Bản tin Kỹ thuật: Tuần 17-2026 == <section begin="technews-2026-W17"/><div class="plainlinks"> '''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/17|Các bản dịch]] của bản tin này cũng có sẵn cho bạn. '''Nổi bật trong tuần''' * Sau hai năm phát triển, [[mw:Special:MyLanguage/Help:Extension:CodeMirror|{{int:codemirror-beta-feature-title}}]], hay còn được biết đến với tên [[mw:Special:MyLanguage/Extension:CodeMirror|CodeMirror 6]], sẽ được chính thức đưa ra khỏi giai đoạn beta vào thứ 3, ngày 21 tháng 4. Nó mang lại khả năng đọc mã nguồn và mã wiki tốt hơn, giảm thiểu lỗi đánh máy cùng những [[mw:Special:MyLanguage/Help:Extension:CodeMirror|lợi ích]] khác cho tất cả người dùng sử dụng trình tô sáng cú pháp tiêu chuẩn. Xin gửi lời cảm ơn chân thành đến tình nguyện viên [https://phabricator.wikimedia.org/p/Bhsd/ Bhsd] vì đã phát triển nhiều tính năng mới, bao gồm [[mw:Special:MyLanguage/Help:Extension:CodeMirror#Code folding|gấp mã nguồn]], [[mw:Special:MyLanguage/Help:Extension:CodeMirror#Autocompletion|tự động điền]], và [[mw:Special:MyLanguage/Help:Extension:CodeMirror#Linting|kiểm tra lỗi]]. [https://phabricator.wikimedia.org/T259059] * Một bản cập nhật lớn dành cho ứng dụng Wikipedia trên iOS hiện đang được triển khai, nhằm thiết kế lại giao diện để phù hợp với thiết kế trực quan "Liquid Glass" mới nhất của Apple. [https://apps.apple.com/us/app/wikipedia/id324715238 Hãy tải phiên bản mới nhất] và khám phá bản cập nhật này. '''Cập nhật cho biên tập viên''' * [[mw:Special:MyLanguage/Readers/Reader Experience/WE3.3.4 Reading lists|Danh sách đọc]] là một tính năng cho phép người đọc lưu các bài viết vào danh sách để đọc sau. Tính năng này hiện đang trong giai đoạn thử nghiệm beta trên Wikipedia tiếng Ả Rập, tiếng Pháp, tiếng Indonesia, tiếng Việt và tiếng Trung, và được bật mặc định cho tất cả các tài khoản mới trên tất cả các trang Wikipedia. * Một thử nghiệm khám phá việc mở rộng [[mw:Special:MyLanguage/Readers/Reader Growth/Mobile page previews|tính năng Xem trước Trang cho trang web di động]] sẽ được triển khai trong tuần ngày 20 tháng 4 trên các trang Wikipedia tiếng Ả Rập, tiếng Anh, tiếng Pháp, tiếng Ý, tiếng Ba Lan và tiếng Việt. Tính năng Xem trước Trang là pop-up hiển thị hình thu nhỏ kèm liên kết mở toàn bộ bài viết từ liên kết xanh, từ đó cải thiện khả năng tìm kiếm nội dung. Tính năng này hiện đã có sẵn trên máy tính để bàn và trong ứng dụng. [[m:Special:MyLanguage/List of experiments in Product and Technology#Template|Đọc thêm về thử nghiệm này cùng những thử nghiệm khác]]. * Trên một số trang wiki, những biên tập viên đã đăng nhập nhưng chưa [[mw:Special:MyLanguage/Help:Email confirmation|xác nhận địa chỉ thư điện tử (email) của mình]] nay có thể nhìn thấy một biểu ngữ khuyến khích họ làm vậy. Việc xác nhận địa chỉ email cho phép người dùng khôi phục quyền truy cập vào tài khoản nếu họ bị mất quyền truy cập đó. [[mw:Special:MyLanguage/Product Safety and Integrity/Account Security#Encouraging users to confirm their email addresses|Tìm hiểu thêm]]. [https://phabricator.wikimedia.org/T421366] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:15}} {{PLURAL:15|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, một vấn đề mà việc sửa đổi các trang wiki rất lớn trong trình soạn thảo mã wiki 2017 gây ra hiện tượng tải chậm, bị trễ khi xem trước và cuộn, cũng như các vấn đề về hiệu suất khi chọn, cắt hay dán nội dung, nay đã được giải quyết. [https://phabricator.wikimedia.org/T184857] '''Cập nhật cho những người đóng góp vào mảng kỹ thuật''' * Là một phần của việc nâng cấp [[mw:Special:MyLanguage/Help:Extension:CodeMirror|CodeMirror]] từ tính năng beta lên làm tính năng chính thức, tất cả người dùng sẽ sử dụng [[mw:Special:MyLanguage/Extension:CodeMirror|CodeMirror]] thay vì [[mw:Special:MyLanguage/Extension:CodeEditor|CodeEditor]] làm trình tô sáng cú pháp khi sửa đổi các trang nội dung bằng JavaScript, CSS, JSON, Vue và Lua. [https://phabricator.wikimedia.org/T419332] * Dịch vụ <code>mirrors.wikimedia.org</code> dành cho người dùng Debian và Ubuntu sẽ kết thúc hỗ trợ và ngừng hoạt động vào ngày 15 tháng 5. Tài nguyên dịch vụ này sẽ được thay thế bằng những tùy chọn mới và tốt hơn. Một số người dùng có thể cần phải chuyển sang máy chủ khác, quá trình này sẽ mất khoảng một phút. [https://lists.wikimedia.org/hyperkitty/list/wikitech-l@lists.wikimedia.org/thread/LJYRIS4WB66HIRCAO4GIDTXCMDVZRBMA/ Bạn có thể đọc thêm]. [https://phabricator.wikimedia.org/T416707] * Bảng <bdi lang="zxx" dir="ltr"><code><nowiki>image</nowiki></code></bdi> và <bdi lang="zxx" dir="ltr"><code><nowiki>oldimage</nowiki></code></bdi> sẽ bị loại bỏ khỏi [[wikitech:Help:Wiki Replicas|wikireplicas]]. Nếu công cụ hoặc truy vấn của bạn truy cập trực tiếp vào <bdi lang="zxx" dir="ltr"><code><nowiki>image</nowiki></code></bdi> hoặc <bdi lang="zxx" dir="ltr"><code><nowiki>oldimage</nowiki></code></bdi>, vui lòng cập nhật chúng để sử dụng bảng <bdi lang="zxx" dir="ltr"><code><nowiki>file</nowiki></code></bdi> và <bdi lang="zxx" dir="ltr"><code><nowiki>filerevision</nowiki></code></bdi> trước ngày 28 tháng 5. [https://phabricator.wikimedia.org/T28741] * Sau việc triển khai những giới hạn tần suất truy cập API toàn cục gần đây đối với lưu lượng truy cập không xác định, Quỹ Wikimedia sẽ tiếp tục nỗ lực đảm bảo việc [[mw:Special:MyLanguage/MediaWiki Product Insights/Responsible Reuse|sử dụng hợp lý cơ sở hạ tầng]] bằng cách áp dụng giới hạn toàn cục đối với lưu lượng truy cập API xác định kể từ tuần cuối cùng của tháng 4. Những giới hạn này được cố ý đặt ở mức cao nhất có thể để giảm thiểu tác động đến cộng đồng. Các bot chạy trong Toolforge/WMCS hoặc có quyền thành viên bot trên bất kỳ wiki nào hiện sẽ không bị ảnh hưởng. Dù vậy, tất cả các nhà phát triển được khuyến cáo nên tuân theo những thực tiễn tốt nhất đã được cập nhật. Để biết thêm thông tin, hãy xem [[mw:Special:MyLanguage/Wikimedia APIs/Rate limits|API Wikimedia/Giới hạn tần suất]] và [[mw:Special:MyLanguage/Wikimedia APIs/Rate limits/FAQ|Câu hỏi Thường gặp]]. * [[mw:Special:MyLanguage/Attribution API|API Ghi công]] hiện có sẵn dưới dạng [[mw:Special:MyLanguage/Wikimedia APIs/Stability policy|tính năng beta]]. API này lấy thông tin nhằm ghi công các bài viết và tập tin phương tiện của Wikimedia bất kỳ chỗ nào mà chúng được sử dụng. Trang tài liệu tham khảo có sẵn thông qua trang đặc biệt Chỗ thử REST có mặt trên tất cả các trang wiki của Wikimedia (chẳng hạn như [https://en.wikipedia.org/w/index.php?api=attribution.v0-beta&title=Special%3ARestSandbox chỗ thử REST trên Wikipedia tiếng Anh]). Hãy chia sẻ phản hồi của bạn trên [[mw:Talk:Attribution API|trang thảo luận dự án]]. * Tuần này không có phiên bản MediaWiki mới nào. '''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/17|Biên dịch]]&nbsp;• [[m:Tech|Nhờ giúp đỡ]]&nbsp;• [[m:Talk:Tech/News|Phản hồi]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].'' </div><section end="technews-2026-W17"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 15:00, ngày 20 tháng 4 năm 2026 (UTC) <!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30432763 --> == Request for comment (global AI policy) == <bdi lang="en" dir="ltr" class="mw-content-ltr"> Apologies for writing in English. {{int:Please-translate}} A [[:m:Requests for comment/Artificial intelligence policy|request for comment]] is currently being held to decide on a global AI policy. {{int:Feedback-thanks-title}} [[Thành viên:MediaWiki message delivery|MediaWiki message delivery]] ([[Thảo luận Thành viên:MediaWiki message delivery|thảo luận]]) 00:58, ngày 26 tháng 4 năm 2026 (UTC) </bdi> <!-- Tin nhắn của Thành viên:Codename Noreste@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=30424282 --> == Bản tin Kỹ thuật: Tuần 18-2026 == <section begin="technews-2026-W18"/><div class="plainlinks"> '''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/18|Các bản dịch]] của bản tin này cũng có sẵn cho bạn. '''Cập nhật cho biên tập viên''' * Sẽ có một thay đổi về cách người dùng mới được tự động xác nhận nhằm cải thiện khả năng bảo vệ chống phá hoại. Hiện tại, người dùng đã mở tài khoản được vài ngày và thực hiện được một vài sửa đổi được tự động thêm vào nhóm [[{{int:grouppage-autoconfirmed/{{CONTENTLANGUAGE}}}}|{{int:group-autoconfirmed}}]]. Cấu hình này thường bị một số thành viên phá hoại lợi dụng bằng cách tạo tài khoản và chỉ bắt đầu sử dụng nó sau một khoảng thời gian. Để giảm thiểu điều này, trong tuần tới cấu hình này sẽ được cập nhật sao cho – nhằm mục đích được tự động xác nhận – tuổi của tài khoản sẽ được tính từ sửa đổi đầu tiên của họ, thay vì ngày tạo tài khoản. Giá trị số của ngưỡng tuổi vẫn sẽ được giữ nguyên. Thay đổi này sẽ chỉ được triển khai đến các wiki yêu cầu ít nhất một sửa đổi là một phần trong điều kiện để có thể được tự động xác nhận. [https://phabricator.wikimedia.org/T418484] * Tất cả người dùng Wikipedia đã tạo tài khoản mới và những người đã kích hoạt tùy chọn "tự động bật hầu hết các tính năng beta" trong tùy chọn của mình giờ đây có thể sử dụng tính năng beta [[mw:Special:MyLanguage/Readers/Reader Experience/WE3.3.4 Reading lists|danh sách đọc]] để lưu bài viết để đọc sau. Điều này giúp người dùng có thể sắp xếp mọi sở thích đọc ở một nơi để có thể dễ dàng truy cập. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:30}} {{PLURAL:30|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, một vấn đề khiến cho hình ảnh trong hộp thông tin có khoảng đệm quá lớn trên Firefox đã được giải quyết. [https://phabricator.wikimedia.org/T423676] '''Cập nhật cho những người đóng góp vào mảng kỹ thuật''' * Nhắc lại, trong tuần này giới hạn tần suất truy cập API toàn cục sẽ được áp dụng cho lưu lượng truy cập API đã được xác định. Điều này giúp đảm bảo việc [[mw:MediaWiki Product Insights/Responsible Reuse|sử dụng cơ sở hạ tầng một cách hợp lý]]. Các bot chạy trong Toolforge/WMCS hoặc có quyền người dùng bot trên bất kỳ wiki nào hiện tại sẽ không bị ảnh hưởng. Dù vậy, tất cả các nhà phát triển được khuyến cáo tuân theo cách sử dụng thực tiễn được cập nhật. Để biết thêm thông tin, bao gồm giới hạn tần suất truy cập thực tế, xem [[mw:Wikimedia APIs/Rate limits|API Wikimedia/Giới hạn tần suất truy cập]] và [[mw:Wikimedia APIs/Rate limits/FAQ|Câu hỏi Thường gặp]]. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.46/wmf.26|MediaWiki]] '''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/18|Biên dịch]]&nbsp;• [[m:Tech|Nhờ giúp đỡ]]&nbsp;• [[m:Talk:Tech/News|Phản hồi]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].'' </div><section end="technews-2026-W18"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 18:06, ngày 27 tháng 4 năm 2026 (UTC) <!-- Tin nhắn của Thành viên:UOzurumba (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30458046 --> == Bản tin Kỹ thuật: Tuần 19-2026 == <section begin="technews-2026-W19"/><div class="plainlinks"> '''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/19|Các bản dịch]] của bản tin này cũng có sẵn cho bạn. '''Nổi bật trong tuần''' * Nhóm [[mw:Special:MyLanguage/Article guidance|Chỉ dẫn bài viết]] mời các biên tập viên có kinh nghiệm từ [[mw:Special:MyLanguage/Article guidance/Pilot wikis and collaborators|các trang Wikipedia thí điểm]]—tiếng Ả Rập, tiếng Bengal, tiếng Nhật, tiếng Bồ Đào Nha, tiếng Ba Tư, tiếng Thổ Nhĩ Kỳ, tiếng Anh đơn giản, tiếng Tây Ban Nha và tiếng Pháp—hỗ trợ biên dịch và điều chỉnh [https://b24e11a4f1.catalyst.wmcloud.org/wiki/Category:Pages_using_article_guidance các mẫu dàn ý này]. Những dàn ý này sẽ giúp hướng dẫn các biên tập viên tạo ra các bài viết có cấu trúc tốt, rõ ràng và tuân theo quy định khi sử dụng [https://b24e11a4f1.catalyst.wmcloud.org/wiki/Special:NewArticle tính năng này] dự kiến ra mắt vào tháng 5 năm 2026. Hiện có [[mw:Special:MyLanguage/Article guidance#Adapting a sample outline in a Wikipedia|hướng dẫn đơn giản]] về cách dịch và điều chỉnh những dàn ý này. '''Cập nhật cho biên tập viên''' * [[:m:Special:MyLanguage/Product and Technology Advisory Council|Hội đồng Cố vấn Sản phẩm và Công nghệ]] đã công bố [[:m:Special:MyLanguage/Product and Technology Advisory Council/May 2026 draft PTAC recommendation for feedback|bản thảo đề xuất]] về một mô hình mà các chi nhánh có thể thực hiện theo khi đóng góp vào lĩnh vực kỹ thuật. Mời các thành viên cộng đồng để lại phản hồi về đề xuất này trước ngày 8 tháng 5 [[:m:Talk:Product and Technology Advisory Council/May 2026 draft PTAC recommendation for feedback|trên trang thảo luận]]. * Số lượng tùy chọn về kích thước hình thu nhỏ có sẵn trong MediaWiki sẽ được giảm xuống còn ba tùy chọn tiêu chuẩn—Nhỏ (180px), Trung bình (250px), và Lớn (400px), là một phần của nỗ lực không ngừng nhằm cải thiện hiệu suất và giảm tải cho các dịch vụ hình thu nhỏ. Do đó, các tùy chọn hiện có sẽ được ánh xạ về kích thước mới gần nhất (ví dụ, những lựa chọn kích thước nhỏ hơn như 120px hoặc 150px sẽ hiển thị dưới kích thước 180px, trong khi những lựa chọn lớn hơn như 300px hoặc 360px sẽ hiển thị dưới kích thước 400px). Giao diện tùy chọn sẽ sớm được cập nhật để áp dụng những thay đổi này và người dùng không muốn áp dụng hoặc để lại phản hồi có thể thực hiện điều đó. [https://phabricator.wikimedia.org/T424909] * Từ giờ trở đi, ngay cả khi một quyền tự động hết hạn, người dùng sẽ nhận được thông báo Echo tương tự như thông báo tiêu chuẩn về thay đổi quyền. Có một điểm khác biệt giữa thông báo này và [[m:Special:MyLanguage/Global reminder bot|Global reminder bot]] ở chỗ bot sẽ nhắc người dùng một tuần ''trước khi'' quyền đó hết hạn, để họ có thể gia hạn quyền. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:32}} {{PLURAL:32|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, một vấn đề khiến bộ chọn ngôn ngữ ULS trong [[m:Special:Translate|Đặc biệt:Dịch]] cuộn dọc khi không cần thiết, đã được giải quyết. Trước đây, khi người dùng mở menu thả xuống "Dịch sang tiếng Anh" và nhập một số từ nhất định, hộp thoại sẽ cuộn dọc xuống vài pixel ngay cả khi có đủ không gian để hiển thị tất cả kết quả. Menu thả xuống giờ không còn dịch chuyển một cách không cần thiết khi lọc ngôn ngữ nữa. [https://phabricator.wikimedia.org/T358864] * [[m:Special:GlobalWatchlist|Danh sách Theo dõi Toàn cục]], tính năng cho phép bạn xem các danh sách theo dõi của bạn từ nhiều trang wiki trên cùng một trang, tiếp tục được cải thiện. Ví dụ, danh sách theo dõi cho các trang Wikibase chẳng hạn như [[:d:|Wikidata]] nay hỗ trợ phần tử [[mw:Special:MyLanguage/Extension:EntitySchema|EntitySchema]] để có thể theo dõi tốt hơn. Chế độ Cập nhật Trực tiếp nay làm mới trang đặc biệt sau mỗi 60 giây để tuân theo [[mw:Special:MyLanguage/Wikimedia APIs/Rate limits|giới hạn tần suất truy vấn API toàn cục]] được cập nhật để cải thiện khả năng phản hồi theo thời gian thực. Ngoài ra, một lỗi về hướng khiến liên kết hiển thị là "thay đổi 3" thay vì "3 thay đổi" trong danh sách có hướng hỗn hợp đã được giải quyết. [https://phabricator.wikimedia.org/T415450][https://phabricator.wikimedia.org/T424422][https://phabricator.wikimedia.org/T418091] '''Cập nhật cho những người đóng góp vào mảng kỹ thuật''' * Giai đoạn thứ hai của [[mw:Special:MyLanguage/Wikimedia APIs/Rate limits|giới hạn tần suất truy vấn API toàn cục]] đã được triển khai để giảm [[diffblog:2026/03/26/quo-vadis-crawlers-progress-and-whats-next-on-safeguarding-our-infrastructure/|tác động của việc thu thập dữ liệu sử dụng AI]] và đảm bảo quyền truy cập hợp lý, bền vững vào các tài nguyên của Wikimedia, ưu tiên lưu lượng truy cập của con người và lưu lượng phù hợp với sứ mệnh. [[mw:Special:MyLanguage/Wikimedia APIs/Rate limits#Limits|Giới hạn]] được chuyển từ mỗi giờ sang mỗi phút, tạo ra những mô hình lưu lượng truy cập mượt mà hơn và tải API dễ đoán hơn. Người dùng cộng đồng dự kiến không bị ảnh hưởng, và không cần phải thực hiện bất kỳ hành động gì. Các dấu hiệu ban đầu cho thấy một số người yêu cầu dựa trên User-Agent đang điều chỉnh hành vi vi, và khoảng 64% lưu lượng truy vấn API tự động đã được xác định. Việc giám sát vẫn tiếp tục, và Wikimedia Enterprise vẫn sẵn sàng để hỗ trợ thương mại. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.46/wmf.27|MediaWiki]] '''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/19|Biên dịch]]&nbsp;• [[m:Tech|Nhờ giúp đỡ]]&nbsp;• [[m:Talk:Tech/News|Phản hồi]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].'' </div><section end="technews-2026-W19"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 20:43, ngày 4 tháng 5 năm 2026 (UTC) <!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30498077 --> == Bản tin Kỹ thuật: Tuần 20-2026 == <section begin="technews-2026-W20"/><div class="plainlinks"> '''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/20|Các bản dịch]] của bản tin này cũng có sẵn cho bạn. '''Nổi bật trong tuần''' * Cộng đồng Kỹ thuật đã xuất bản một [[m:Special:MyLanguage/Community Wishlist/How to write a good wish|bộ hướng dẫn mới]] giải thích cách những mong muốn trên Danh sách Mong muốn Cộng đồng được phân loại và xếp ưu tiên. Tài liệu này được tạo ra nhằm mục đích giúp những người đóng góp viết những đề xuất mang tính mạnh mẽ hơn bằng cách làm rõ những yếu tố ảnh hưởng đến việc quyết định ưu tiên. Ngoài yếu tố số phiếu, hướng dẫn này còn nêu bật những yếu tố khác cần xem xét chẳng hạn như tác động tiềm tàng đến cộng đồng khi quyết định nên ưu tiên mong muốn nào. '''Cập nhật cho biên tập viên''' * Nhóm Phát triển Người đọc đang khởi động một thử nghiệm để thử [[mw:Special:MyLanguage/Readers/Reader_Growth/Share_Card|tính năng Chia sẻ Thẻ]] mới cho phép người đọc tạo những thẻ mang tính hấp dẫn về mặt trực quan từ các bài viết hoặc các đề mục bài viết và chia sẻ chúng theo cách trực tuyến, mỗi thẻ liên kết ngược lại về bài viết gốc để giúp mở rộng lượng người đọc và khả năng tìm kiếm bài viết. Thử nghiệm A/B dành riêng cho thiết bị di động này sẽ được cung cấp cho một phần người đọc trên Wikipedia tiếng Ả Rập, tiếng Trung, tiếng Pháp, tiếng Việt và tiếng Anh để có thể hiểu rõ hơn về thói quen đọc và chia sẻ, và dự kiến bắt đầu từ tuần ngày 18 tháng 5 và kéo dài trong bốn tuần. * Ứng dụng Wikipedia trên Android và iOS gần đây đã phát hành [[mw:Special:MyLanguage/Wikimedia_Apps/Team/25th_Birthday_Reading_Challenge|thử thách đọc trong 25 ngày]] lên phiên bản Beta, là một phần của nỗ lực thúc đẩy người đọc tham gia bằng cách khuyến khích người dùng hoàn thành các mốc đọc. Để theo dõi chuỗi đọc của mình trong suốt quá trình thử thách, người dùng Ứng dụng có thể thêm tiện ích Em bé Globe vào màn hình chính của mình. Thử thách sẽ chính thức bắt đầu vào ngày 11 tháng 5. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:17}} {{PLURAL:17|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, một vấn đề khiến cho tùy chọn toàn cục bật tính năng nổi bật cú pháp trong mã wiki có thể bất ngờ tự tắt ngay sau khi được bật lên, nay đã được giải quyết. [https://phabricator.wikimedia.org/T425286] '''Cập nhật cho những người đóng góp vào mảng kỹ thuật''' * [[File:Octicons-tools.svg|12px|link=|alt=|Đề mục nâng cao]] Mô đun ResourceLoader <bdi lang="zxx" dir="ltr"><code><nowiki>mediawiki.ui.input</nowiki></code></bdi>, mô đun lỗi thời từ [[m:Special:MyLanguage/Tech/News/2023/39|tháng 9 năm 2023]], sẽ bị loại bỏ trong tuần này. Hiện có [[mw:Special:MyLanguage/Codex/Migrating_from_MediaWiki_UI|hướng dẫn về cách chuyển từ UI MediaWiki sang Codex]] cho bất kỳ công cụ nào sử dụng nó. [https://phabricator.wikimedia.org/T420125] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.47/wmf.2|MediaWiki]] '''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/20|Biên dịch]]&nbsp;• [[m:Tech|Nhờ giúp đỡ]]&nbsp;• [[m:Talk:Tech/News|Phản hồi]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].'' </div><section end="technews-2026-W20"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 19:20, ngày 11 tháng 5 năm 2026 (UTC) <!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30524429 --> == Bản tin Kỹ thuật: Tuần 21-2026 == <section begin="technews-2026-W21"/><div class="plainlinks"> '''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/21|Các bản dịch]] của bản tin này cũng có sẵn cho bạn. '''Nổi bật trong tuần''' * Nhóm Abstract Wikipedia đã xác định năm wiki thí điểm tiềm năng để đánh giá mức độ quan tâm của họ đối với việc áp dụng tóm tắt bài viết trên wiki của mình. Các wiki thí điểm là Wikipedia tiếng Malayalam, tiếng Bengali, tiếng Dagbani, tiếng Ả Rập và tiếng Indonesia. Thời gian nhận phản hồi sẽ kéo dài đến hết ngày 22 tháng 5. Nếu cộng đồng của bạn quan tâm đến việc trở thành wiki thí điểm, [[m:Talk:Abstract Wikipedia|hãy cho chúng tôi biết trên Meta]]. '''Cập nhật cho biên tập viên''' * Một thử nghiệm nhằm hiển thị [[mw:Special:MyLanguage/Readers/Reader Experience/Reading lists|Danh sách Đọc]] cho người đọc chưa đăng nhập trên trang web dành cho thiết bị di động sẽ được triển khai vào ngày 18 tháng 5 trên Wikipedia tiếng Đức, tiếng Tây Ban Nha, tiếng Ý, tiếng Bồ Đào Nha, tiếng Ba Lan, tiếng Hà Lan, tiếng Thổ Nhĩ Kỳ và tiếng Urdu Wikipedias, và sẽ kéo dài trong vòng một tháng. Nỗ lực này nhằm hỗ trợ những mục tiêu rộng hơn giúp người đọc lưu và sắp xếp các bài viết để đọc sau, đồng thời khuyến khích những thói quen có thể giúp dẫn đến việc đóng góp cho Wikipedia trong tương lai. * Để hỗ trợ cho nút đánh dấu trong tính năng beta Danh sách Đọc, menu "Công cụ > Tác vụ" đã được cập nhật để hiển thị các biểu tượng, bao gồm cả chỉ báo ngôi sao theo dõi giúp biên tập viên xác định những bài viết được theo dõi tạm thời. Các biểu tượng nay cũng khớp với các biểu tượng được sử dụng trên thiết bị di động, cải thiện tính nhất quán trên các nền tảng. Thay đổi này hiện chỉ giới hạn ở menu tác vụ và chủ yếu ảnh hưởng đến các biên tập viên có quyền thành viên nâng cao. [https://phabricator.wikimedia.org/T426008] * [[mw:Special:MyLanguage/VisualEditor/Suggestion Mode|Chế độ Đề xuất]] đã được phát hành dưới dạng [[w:en:A/B test|thử nghiệm A/B]] dành cho biên tập viên mới trên trang web dành cho di động tại [[phab:T421189|~15 trang Wikipedia]]. Thử nghiệm này sẽ đo lường tác động của Chế độ Đề xuất đến tỷ lệ những phiên sửa đổi trên trang web dành cho di động của người mới tạo ra những sửa đổi mang tính xây dựng (không bị lùi lại) trên bài viết. Thử nghiệm này cũng sẽ đánh giá tác động của tính năng này đến việc giữ chân người dùng, đồng thời theo dõi những thay đổi về tỷ lệ lùi sửa và cấm. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:27}} {{PLURAL:27|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, một vấn đề trong ứng dụng Wikipedia dành cho Android khi hình ảnh đôi lúc không thể tải được sau khi mở thông báo danh sách đọc đề xuất, nay đã được giải quyết. [https://phabricator.wikimedia.org/T418231] '''Cập nhật cho những người đóng góp vào mảng kỹ thuật''' * [[mw:Special:MyLanguage/Wikidata Platform|Nhóm Nền tảng Wikidata]] đã công bố [[d:Special:MyLanguage/Wikidata:SPARQL query service/WDQS backend update/Backend Replacement|đề xuất thay thế backend]] và [[wikitech:Wikidata Query Service/WDQS Architecture re-design|kiến trúc kỹ thuật]] kèm theo cho việc di chuyển Dịch vụ Truy vấn Wikidata (WDQS) khỏi Blazegraph. Chúng tôi hoan nghênh mọi phản hồi về đề xuất này cho đến hết ngày 25 tháng 5 năm 2026, đặc biệt là về những thiếu sót tiềm tàng và tác động đến những trường hợp sử dụng (use case) nâng cao. Các thành viên trong cộng đồng Wikidata và người dùng WDQS cũng được khuyến khích giúp xác định những công cụ và quy trình làm việc có tác động lớn cần được chú ý trên [[d:Wikidata:SPARQL query service/WDQS backend update/High-Impact Use Cases|trang này]]. Bạn có thể chia sẻ những phản hồi của mình trên [[d:Wikidata talk:SPARQL query service/WDQS backend update|trang thảo luận về Di chuyển]] hoặc trong [[d:Special:MyLanguage/Wikidata:Blazegraph Migration Office Hours|giờ làm việc tiếp theo]]. Xem [[d:Special:MyLanguage/Wikidata:Wikidata Platform team/Newsletter|bản tin của nhóm WDP]] để biết thêm chi tiết. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.47/wmf.3|MediaWiki]] '''Chuyên sâu''' * Trên Wikipedia tiếng Anh, tiếng Pháp, tiếng Nhật và một số trang Wikipedia khác, một [[diffblog:2025/09/02/better-detecting-bots-and-replacing-our-captcha/|thử nghiệm hCaptcha]], một dịch vụ phát hiện bot từ bên thứ ba, đã được thực hiện. Thử nghiệm này cho thấy hCaptcha phát hiện và ngăn chặn hiệu quả một số hoạt động tự động không thiện ý, bằng cách tự hoạt động lẫn bằng cách cung cấp tín hiệu cho [[w:en:Wikipedia:Village pump (technical)/Archive 225#Introducing SuggestedInvestigations|kiểm định viên và tiếp viên]] để kiểm tra. Vì kết quả thử nghiệm cho kết quả tích cực, hCaptcha sẽ được triển khai trên tất cả các wiki trong một vài tuần tới đây. [[mw:Special:MyLanguage/Product Safety and Integrity/Anti-abuse signals/hCaptcha|Xem trang dự án hCaptcha]] để biết thông tin kỹ thuật về việc triển khai và bảo vệ quyền riêng tư. [[diffblog:2026/05/04/better-detecting-bots-and-replacing-our-captcha-part-2/|Tìm hiểu thêm]]. * Bản cập nhật Công nghệ Cộng đồng số mới nhất hiện đã có sẵn, trong đó có những tiến bộ trong một số sáng kiến ​​​​thuộc Danh sách Mong muốn Cộng đồng, bao gồm việc mở rộng Danh sách Đọc từ ứng dụng di động lên trang web, hỗ trợ thêm ngôn ngữ mới cho "Ai đã viết nó" (Who Wrote That) và Bảng điều khiển Cá nhân, cải thiện khả năng hiển thị 3D và Biểu đồ, cũng như những công việc sắp tới về việc sắp xếp trang thảo luận, khả năng phát âm thanh và quy trình sửa đổi. Bản cập nhật cũng chia sẻ những ưu tiên hiện tại, xu hướng trạng thái danh sách mong muốn và cơ hội để cộng đồng phản hồi về các lĩnh vực trọng tâm trong tương lai cũng như Kế hoạch Hàng năm 2026–2027 của Quỹ Wikimedia. [[m:Special:MyLanguage/Community Wishlist/Updates#May 13, 2026: Latest updates from the Community Tech team|Đọc toàn bộ nội dung bản tin để biết thông tin chi tiết]]. '''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/21|Biên dịch]]&nbsp;• [[m:Tech|Nhờ giúp đỡ]]&nbsp;• [[m:Talk:Tech/News|Phản hồi]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].'' </div><section end="technews-2026-W21"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 20:21, ngày 18 tháng 5 năm 2026 (UTC) <!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30539262 --> == Bản tin Kỹ thuật: Tuần 22-2026 == <section begin="technews-2026-W22"/><div class="plainlinks"> '''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/22|Các bản dịch]] của bản tin này cũng có sẵn cho bạn. '''Nổi bật trong tuần''' * Sau [[mw:Special:MyLanguage/Contributors/Account Creation Experiments#LOWM|thử nghiệm tạo tài khoản thành công]], tin nhắn được cải tiến dành cho những sửa đổi của thành viên chưa đăng nhập sẽ được triển khai đến tất cả các wiki của Wikimedia vào tuần đầu tiên của tháng 6. Thay đổi này sẽ chỉ ảnh hưởng đến các thành viên chưa đăng nhập trên trang web di động khi mở một phiên sửa đổi. Việc cập nhật trải nghiệm này được thiết kế để làm rõ hơn việc khuyến khích tạo tài khoản mà vẫn cho phép người dùng sửa đổi bằng tài khoản tạm thời. Kết quả từ thử nghiệm cho thấy tỷ lệ tạo tài khoản tăng lên đáng kể, trong đó tỷ lệ này đối với người dùng nhìn thấy thông báo được cập nhật này đạt mức tăng khoảng 27%. Như dự đoán, khi càng nhiều người tạo tài khoản, số tài khoản tạm thời cũng giảm đi khoảng 16%. Thử nghiệm không cho thấy bất kỳ thay đổi nào đáng kể về tỷ lệ sửa đổi mang tính xây dựng hay bất cứ số liệu đóng góp nào khác được theo dõi. [https://phabricator.wikimedia.org/T424595] '''Cập nhật cho biên tập viên''' * Vì lý do bảo mật, thành viên của một số nhóm người dùng [[m:Special:MyLanguage/Mandatory two-factor authentication for users with some extended rights|bắt buộc phải bật xác thực hai yếu tố]] (2FA). Những thành viên thuộc những nhóm này sẽ không thể tắt đi yếu tố 2FA cuối cùng trên tài khoản của mình, và sẽ không thể thêm người dùng không có 2FA vào những nhóm này. Người dùng vẫn sẽ có thể thêm yếu tố xác thực mới hoặc loại bỏ chúng đi, miễn là có ít nhất một yếu tố được bật liên tục. Trong vòng vài tuần tới đây, người dùng không có 2FA sẽ bị loại bỏ khỏi những nhóm này. Đặc biệt, nó sẽ được áp dụng cho các hành chính viên. Xem tác vụ được liên kết để biết lịch triển khai. [https://phabricator.wikimedia.org/T423119][https://phabricator.wikimedia.org/T423120] * [[m:Special:MyLanguage/WMDE Technical Wishes|Nhóm Mong muốn Kỹ thuật của WMDE]] sẽ chạy một [[w:vi:Thử nghiệm A/B|thử nghiệm A/B]] trên [[:phab:T415904|10 wiki]], nhằm thử nghiệm [[m:WMDE Technical Wishes/References/Reference Previews|những khả năng cải tiến cho tính năng Xem trước Chú thích]]. Thử nghiệm sẽ kéo dài ~2 tuần vào cuối tháng 5 / đầu tháng 6 và sẽ ảnh hưởng tới 10% người đọc trên máy tính đối với các wiki tham gia. * Sau hai thử nghiệm thành công, nhóm Phát triển Người đọc sẽ cho ra mắt tính năng beta [[mw:Special:MyLanguage/Readers/Reader Growth/Image Browsing|Duyệt Hình ảnh]] trên tất cả các trang Wikipedia trên di động vào ngày 25 tháng 5. Điều này có nghĩa là bất kỳ ai đã bật mặc định tất cả các tính năng beta sẽ bắt đầu nhìn thấy tính năng này, và những người khác có thể đánh dấu hộp kiểm để bật tính năng này lên trong tùy chọn của họ. Tính năng beta này sẽ bao gồm một băng chuyền hiển thị tất cả hình ảnh của bài viết ở đầu bài viết, The beta feature will include a carousel of all an article's images at the top of the article, cùng khả năng điều khiển cho phép biên tập viên có thể [[mw:Readers/Reader_Growth/Image_Browsing#Phase_2.1_beta_feature|loại trừ hình ảnh khỏi băng chuyền của bài viết hoặc loại trừ hoàn toàn một bài viết khỏi tính năng này]]. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:30}} {{PLURAL:30|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, các tệp STL ba chiều bị hiển thị sai bởi phần mở rộng trình xem phương tiện 3D nay đã được giải quyết. [https://phabricator.wikimedia.org/T416723] '''Cập nhật cho những người đóng góp vào mảng kỹ thuật''' * Các class CSS <bdi lang="zxx" dir="ltr"><code><nowiki>tleft</nowiki></code></bdi> và <bdi lang="zxx" dir="ltr"><code><nowiki>tright</nowiki></code></bdi> cũ đã được thay thế bằng <bdi lang="zxx" dir="ltr"><code><nowiki>floatleft</nowiki></code></bdi> và <bdi lang="zxx" dir="ltr"><code><nowiki>floatright</nowiki></code></bdi> do hai class cũ đó không hoạt động một cách nhất quán trên tất cả các nền tảng MediaWiki, đặc biệt là giao diện web di động và ứng dụng di động. Những dự án dựa vào những lớp này được khuyến khích xem xét lại những chỗ sử dụng có liên quan và lên kế hoạch chuyển đổi. Xin lưu ý rằng <bdi lang="zxx" dir="ltr"><code><nowiki>floatleft</nowiki></code></bdi> và <bdi lang="zxx" dir="ltr"><code><nowiki>floatright</nowiki></code></bdi> cũng có thể bị loại bỏ trong tương lai, dù hiện chưa có kế hoạch thực hiện điều này. [[phab:T426452|Đọc thêm]]. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.47/wmf.4|MediaWiki]] '''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/22|Biên dịch]]&nbsp;• [[m:Tech|Nhờ giúp đỡ]]&nbsp;• [[m:Talk:Tech/News|Phản hồi]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].'' </div><section end="technews-2026-W22"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 21:52, ngày 25 tháng 5 năm 2026 (UTC) <!-- Tin nhắn của Thành viên:Quiddity (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30584502 --> == <span lang="en" dir="ltr">Vote now in the 2026 U4C election</span> == <div lang="en" dir="ltr"> <section begin="announcement-content" /> Eligible voters are asked to participate in the 2026 [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee|Universal Code of Conduct Coordinating Committee]] election. More information–including an eligibility check, voting process information, candidate information, and a link to the vote–are available on Meta at the [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee/Election/2026|2026 Election information page]]. The vote closes on 2 June 2026 at [https://zonestamp.toolforge.org/1780358400 00:00 UTC]. Please vote if your account is eligible. Results will be available by 14 June 2026. -- In cooperation with the U4C,<section end="announcement-content" /> </div> [[m:User:Keegan (WMF)|Keegan (WMF)]] ([[m:User talk:Keegan (WMF)|talk]]) 17:15, ngày 27 tháng 5 năm 2026 (UTC) <!-- Tin nhắn của Thành viên:Keegan (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=30513860 --> == Bản tin Kỹ thuật: Tuần 23-2026 == <section begin="technews-2026-W23"/><div class="plainlinks"> '''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/23|Các bản dịch]] của bản tin này cũng có sẵn cho bạn. '''Cập nhật cho biên tập viên''' * [[mw:Special:MyLanguage/Readers/Reader Experience|Nhóm Trải nghiệm Người đọc]] đang tiến hành một cuộc thử nghiệm nhằm giới thiệu tính năng [[mw:Special:MyLanguage/Readers/Reader Experience/Reading lists|danh sách đọc]], hiện vẫn đang trong quá trình phát triển, dành cho những người đọc chưa đăng nhập trên thiết bị di động để kiểm tra xem tính năng này có khuyến khích việc tạo tài khoản với tỷ lệ cao hơn so với nút sao theo dõi hay không. [[mw:Special:MyLanguage/Readers/Reader Experience/Reading lists#Experiment timeline|Thử nghiệm]] này đã được khởi động vào ngày 18 tháng 5 trên các wiki tiếng Đức, Tây Ban Nha, Ý, Bồ Đào Nha, Ba Lan, Hà Lan, Thổ Nhĩ Kỳ và Urdu, và sẽ kéo dài trong một tháng. * Nhóm Ứng dụng Wikimedia đã phát hành [[mw:Special:MyLanguage/Wikimedia Apps/Team/Explore Feed Refresh/Phase 1|Giai đoạn 1]] của giao diện Trang chủ được thiết kế lại cho ứng dụng Android bản Beta. Giao diện Trang chủ mới bao gồm tab "Cộng đồng" được làm mới và tab "Dành cho Bạn" được cá nhân hóa với những đề xuất đọc được cập nhật hàng ngày. Việc thiết kế lại này là một phần trong nỗ lực rộng lớn hơn nhằm cải thiện khả năng tìm kiếm nội dung và tạo ra trải nghiệm học tập hấp dẫn hơn trong các ứng dụng Wikipedia. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:18}} {{PLURAL:18|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, một vấn đề khiến các hình ảnh không thể tải được đối với một số đề xuất sửa đổi trên [[w:Special:Homepage|Đặc biệt:Trang nhà]], làm cho hình thu nhỏ bị kẹt ở trạng thái đang tải, nay đã được giải quyết. [https://phabricator.wikimedia.org/T424048] '''Cập nhật cho những người đóng góp vào mảng kỹ thuật''' * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.47/wmf.5|MediaWiki]] '''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/23|Biên dịch]]&nbsp;• [[m:Tech|Nhờ giúp đỡ]]&nbsp;• [[m:Talk:Tech/News|Phản hồi]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].'' </div><section end="technews-2026-W23"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 21:08, ngày 1 tháng 6 năm 2026 (UTC) <!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30613639 --> == Bản tin Kỹ thuật: Tuần 24-2026 == <section begin="technews-2026-W24"/><div class="plainlinks"> '''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/24|Các bản dịch]] của bản tin này cũng có sẵn cho bạn. '''Nổi bật trong tuần''' * Wikimedia Enterprise đã tăng giới hạn sử dụng miễn phí cho các dịch vụ API của mình. Giới hạn yêu cầu hàng tháng dành cho API Theo yêu cầu đã tăng từ 5.000 lên 50.000 yêu cầu, trong khi giới hạn đối với API Hình chụp nhanh đã tăng từ 15 lên 30 yêu cầu mỗi tháng. Ngoài ra, Nội dung Có cấu trúc của ảnh chụp nhanh hiện đã có sẵn cho các tài khoản miễn phí. Những thay đổi này sẽ mở rộng quyền truy cập vào dữ liệu Wikimedia Enterprise cho các nhà phát triển, nhà nghiên cứu và các tổ chức sử dụng nội dụng Wikimedia. [https://enterprise.wikimedia.com/blog/enhanced-free-api] '''Cập nhật cho biên tập viên''' * [[mw:Special:MyLanguage/Wikimedia_Apps/Team/Explore Feed Refresh/Phase 1|Bảng tin Khám phá được làm mới]], nay với tên gọi là Bảng tin Trang chủ, đang được triển khai tới 50% người dùng ứng dụng Wikipedia dành cho Android. Bảng tin Trang chủ giúp người đọc khám phá nội dung liên quan thông qua hai tab mới: ''Cộng đồng'' và ''Dành cho Bạn''. Tab Cộng đồng cung cấp một bảng tin cuộn được chứa những nội dung được chọn lọc cùng những cập nhật từ không gian rộng lớn hơn của cộng đồng và phong trào Wikimedia, trong khi tab ''Dành cho Bạn'' cung cấp trải nghiệm toàn màn hình, có thể vuốt được để hiển thị nội dung được điều chỉnh theo sở thích của người dùng. Việc thiết kế lại này là một phần trong nỗ lực lớn hơn nhằm cải thiện khả năng tìm kiếm và nâng cao trải nghiệm học trong ứng dụng Wikipedia. * Trò chơi giải đố hàng ngày [[mw:Special:MyLanguage/Wikimedia Apps/Team/iOS/"Which came first?" Game|Sự kiện nào diễn ra trước nhỉ?]] nay đã có sẵn trong phiên bản beta của ứng dụng Wikipedia dành cho iOS bằng tiếng Anh, tiếng Đức, tiếng Pháp, tiếng Bồ Đào Nha, tiếng Nga, tiếng Tây Ban Nha, tiếng Ả Rập, tiếng Trung và tiếng Thổ Nhĩ Kỳ. Trò chơi này sử dụng các sự kiện lịch sử từ nội dung trong mục "Ngày này năm xưa" của Wikipedia và thử thách người đọc đoán xem sự kiện nào trong hai sự kiện đã xảy ra trước. Trò chơi này đã được phát hành trên Android trước đây. Những cộng đồng quan tâm đến việc cung cấp trò chơi này bằng ngôn ngữ của mình có thể [[mw:Special:MyLanguage/Wikimedia_Apps/Team/Games#Game availability by language|đọc qua hướng dẫn và yêu cầu]]. * [[m:Special:MyLanguage/WMDE Technical Wishes/Sub-referencing|Chú thích phụ]], một tính năng MediaWiki mới cho phép biên tập viên tái sử dụng nguồn tham khảo với nhiều chi tiết khác nhau, sẽ bắt đầu được triển khai đến các wiki của Wikimedia sau giải đoạn thí điểm thành công. Việc triển khai sẽ bắt đầu vào ngày 8 tháng 6 đối với hầu hết các [[wikitech:Deployments/Train#Wednesday|wiki Nhóm 1]] và Wikipedia tiếng Pháp, trong khi các phiên bản ngôn ngữ khác của Wikipedia sẽ nhận được tính năng này trong những tháng tới. Các cộng đồng được khuyến khích chuẩn bị bằng cách kiểm tra [https://translatewiki.net/w/i.php?title=Special%3ATranslate&group=ext-cite&language=en&action_source=search&filter=%21translated&optional=1&action=translate các thông báo chưa được dịch của phần mở rộng Cite] bằng ngôn ngữ của họ và xem xét bất kỳ việc sử dụng [[mw:Special:MyLanguage/Reference Tooltips|Chú thích nổi]] nào, chúng có thể cần phải được [[:phab:T416304#11668731|cập nhật]] để hỗ trợ chức năng mới này. Những wiki sử dụng [[mw:Special:MyLanguage/Help:Reference Previews|Xem trước Chú thích]] không cần phải thực hiện bất kỳ hành động nào. Các cộng đồng cũng có thể mong muốn tạo [[Special:TrackingCategories|thể loại theo dõi]] ''cite-tracking-category-ref-details'' dưới dạng thể loại ẩn sử dụng <code><nowiki>__HIDDENCAT__</nowiki></code> (hoặc một bản mẫu chuyên dụng), và kết nối nó với khoản mục Wikidata [[d:Q129764848]] tương ứng. [https://phabricator.wikimedia.org/T425662] * [[mw:Special:MyLanguage/Readers/Reader Growth/Mobile page previews#Experimentation|Thử nghiệm Xem trước Trang]] trên giao diện web di động đã kết thúc. Nhóm đã quyết định không triển khai tính năng này sau khi kết quả cho thấy rằng không có tác động đáng kể nào về mặt thống kê lên tỷ lệ giữ chân người đọc, vì chỉ số thành công chính là việc cải thiện tỷ lệ giữ chân người đọc. Tính năng Xem trước Trang, vốn đã có sẵn trên máy tính để bàn và trong ứng dụng, hiển thị hình thu nhỏ, đoạn mở đầu và liên kết đến bài viết đầy đủ khi người đọc nhấn vào liên kết xanh. Thử nghiệm này đã thử trải nghiệm này trên giao diện web di động trên sáu trang Wikipedia. * [[mw:Special:MyLanguage/Codex/Design/Icons|Thư viện biểu tượng giao diện người dùng]] sẽ được [[phab:T399175|cập nhật vào cuối tuần này hoặc đầu tuần sau]]. Hầu hết trong số ~300 biểu tượng đã được điều chỉnh một chút và ~30 biểu tượng mới đã được thêm vào. Những thay đổi này cải thiện các biểu tượng để làm cho chúng thêm nhất quán và dễ hiểu hơn, đồng thời mang lại sự cân bằng trực quan hơn khi chúng được sử dụng theo nhóm. * Giao diện [[mw:Special:MyLanguage/Universal Language Selector|Bộ chọn Ngôn ngữ Toàn cục]] (ULS) trong MediaWiki, công cụ giúp người dùng chọn nội dung bằng các ngôn ngữ khác, đã được cập nhật. Phiên bản mới cải thiện tốc độ và khả năng truy cập, đồng thời giờ đây người dùng trên các dự án Wikimedia có thể ghim các ngôn ngữ để chuyển đổi ngôn ngữ một cách nhanh chóng hơn. Việc triển khai lên các trang web của Wikimedia sẽ diễn ra dần dần trong những tuần tới. Bạn có thể thử nghiệm tính năng này ngay bây giờ bằng cách chọn [[Special:Preferences#mw-prefsection-betafeatures|tính năng beta]] trong tùy chọn hồ sơ của mình và chia sẻ phản hồi của bạn trên [[mw:Special:MyLanguage/Universal Language Selector/New ULS|trang dự án]]. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:21}} {{PLURAL:21|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, một vấn đề khiến bảng điều khiển Phân tích Lượt xem Trang trên pageviews.wmcloud.org ngừng cập nhật dữ liệu đồ thị vào tháng 5 năm 2026, ảnh hưởng đến tất cả người dùng, đã được giải quyết. [https://phabricator.wikimedia.org/T427171] '''Cập nhật cho những người đóng góp vào mảng kỹ thuật''' * Chữ ký hàm cho <bdi lang="zxx" dir="ltr"><code><nowiki>mw.util.addPortletLink()</nowiki></code></bdi> đã được đơn giản hóa. Các nhà phát triển nay có thể truyền một đối tượng cấu hình thay vì một danh sách các tham số vị trí khi tạo liên kết portlet. Chữ ký hàm trước đây vẫn được hỗ trợ để đảm bảo khả năng tương thích ngược. Ví dụ, thay vì: <bdi lang="zxx" dir="ltr"><code><nowiki>mw.util.addPortletLink('p-cactions', '#', 'Stub', 'ca-stubtag', 'Add a stub tag to this page');</nowiki></code></bdi> sử dụng <bdi lang="zxx" dir="ltr"><code><nowiki>mw.util.addPortletLink('p-cactions', { href: '#', text: 'Stub', id: 'ca-stubtag', tooltip: 'Add a stub tag to this page' });</nowiki></code></bdi>. Những người bảo trì đoạn mã được khuyến khích xem chỗ nào hiện đang sử dụng <bdi lang="zxx" dir="ltr"><code><nowiki>addPortletLink()</nowiki></code></bdi> và cập nhật chúng nếu thích hợp. Thay đổi này sẽ có mặt trên tất cả các wiki từ ngày 11 tháng 6. Xin cảm ơn tình nguyện viên cộng đồng Gerges đã đóng góp cải tiến này. [https://phabricator.wikimedia.org/T427945] * '''Thảo luận về Danh sách Mong muốn của Cộng đồng''': Nhóm Sản phẩm & Công nghệ [[m:Special:MyLanguage/Community Wishlist/Updates#May 20, 2026: Community Tech becomes a program|đã đưa ra những thay đổi]] nhằm mục đích tăng số lượng và độ phức tạp của những mong muốn được đáp ứng, bao gồm cả việc giải thể nhóm Công nghệ Cộng đồng. Họ đang [[m:Special:MyLanguage/Community Wishlist/Updates|tham gia thảo luận]] về một [[m:Talk:Community Wishlist#Proposed direction for Wishlist|đề xuất hướng đi cho danh sách mong muốn]] từ các thành viên cộng đồng. Bao gồm những cách để cấu trúc việc bỏ phiếu hàng năm, theo dõi mong muốn một cách tốt hơn, loại bỏ các lĩnh vực trọng tâm, và [[m:Special:MyLanguage/Community Wishlist/Updates|điều chỉnh việc quản lý nhân sự]]. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.47/wmf.6|MediaWiki]] '''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/24|Biên dịch]]&nbsp;• [[m:Tech|Nhờ giúp đỡ]]&nbsp;• [[m:Talk:Tech/News|Phản hồi]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].'' </div><section end="technews-2026-W24"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 21:30, ngày 8 tháng 6 năm 2026 (UTC) <!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30650573 --> == Bản tin Kỹ thuật: Tuần 25-2026 == <section begin="technews-2026-W25"/><div class="plainlinks"> '''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/25|Các bản dịch]] của bản tin này cũng có sẵn cho bạn. '''Nổi bật trong tuần''' * [[mw:Special:MyLanguage/Readers/Reader Growth|Nhóm Tăng trưởng Độc giả]] đã cho ra mắt tính năng beta [[mw:Special:MyLanguage/Readers/Reader Growth/Image Browsing|Duyệt Hình ảnh]] trên phiên bản web của thiết bị di động tại tất cả các phiên bản Wikipedia. Tính năng này hiển thị ở đầu bài viết một băng chuyền hình ảnh gồm 3 hình ảnh trở lên. Biên tập viên có thể cấu hình cho tính năng này với những thao tác sau: để ẩn một hình ảnh cụ thể khỏi một trang, hãy sử dụng <code>class=notpageimage</code> để loại trừ nó khỏi bản xem trước, hay dùng <code>class=noviewer</code> để loại trừ nó khỏi MediaViewer. Băng chuyền Hình ảnh còn có thể được tắt hoàn toàn ở một trang, với magic word <code><nowiki>__NOMEDIAVIEWERCAROUSEL__</nowiki></code>. Để gửi phản hồi hoặc báo cáo lỗi, hãy truy cập [[mw:Talk:Readers/Reader Growth/Image Browsing|trang dự án]]. * [[mw:Special:MyLanguage/Help:Tables#class="wikitable"|Wikitables]] nay đã có thể được [[mw:Special:MyLanguage/Help:Sortable tables#Forcing the initial sort direction|sắp xếp theo thứ tự giảm dần]] ngay lần nhấp chuột đầu tiên bằng cách thêm <code dir=ltr>data-sort-order="desc"</code> cho ô tiêu đề. Trước đây, theo mặc định, lần nhấp chuột đầu tiên vào tiêu đề cột sẽ sắp xếp cột theo thứ tự tăng dần. Sự bổ sung này cho Wikitable mang lại khả năng kiểm soát và tính linh hoạt cao hơn, trong khi hành vi mặc định cho những lần nhấp chuột tiếp theo vẫn được giữ nguyên. [https://phabricator.wikimedia.org/T398416] '''Cập nhật cho biên tập viên''' * Tính năng [[mw:Special:MyLanguage/Article guidance|Hướng dẫn bài viết]] hiện đang được thử nghiệm đối với một số biên tập viên tạo các bài viết mới trên các trang Wikipedia tiếng Anh đơn giản, tiếng Pháp và tiếng Thổ Nhĩ Kỳ. Thử nghiệm cũng sẽ sẽ sớm bắt đầu trên Wikipedia tiếng Ả Rập và tiếng Bengali. [[w:simple:Special:NewArticle|Tính năng này]] cung cấp cho các biên tập viên hướng dẫn do cộng đồng biên soạn để giúp họ tạo ra những bài viết tuân thủ tiêu chuẩn cộng đồng. Các biên tập viên có kinh nghiệm có thể tiếp tục tạo hoặc điều chỉnh dàn ý cho những loại bài viết cụ thể thường được tạo bởi những người đóng góp ít kinh nghiệm hơn. Những dàn ý này hướng dẫn các biên tập viên ít kinh nghiệm hơn trong việc tạo những bài viết chất lượng cao. Hướng dẫn nhanh về các ký hiệu được sử dụng trong dàn ý có thể được tìm thấy trên [[mw:Special:MyLanguage/Article guidance/Test feature guide#Markups in outlines|trang này]]. [[w:simple:Wikipedia:Article Guidance|Ví dụ về dàn ý]] có thể được điều chỉnh và hướng dẫn cách điều chỉnh chúng nằm trên [[mw:Special:MyLanguage/Article guidance#Adapting a sample outline in a Wikipedia|phần này]] của trang dự án. * Wiki mong muốn thay thế nút "vô thời hạn" trong Đặc biệt:Cấm dành cho tài khoản tạm thời (ví dụ, wiki chỉ cấm tài khoản tạm thời đến khi tài khoản đó hết hạn) sẽ có thể thực hiện điều đó bằng cách tạo [[MediaWiki:ipb-indefinite-expiry-temporary-account]] với khoảng thời gian cấm mà họ muốn. [https://phabricator.wikimedia.org/T427125] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:41}} {{PLURAL:41|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. '''Cập nhật cho những người đóng góp vào mảng kỹ thuật''' * Đến cuối tháng 6, việc sử dụng một chuỗi user-agent hợp lệ là bắt buộc để tải xuống tự động các dump từ trang web dumps.wikimedia.org. Những yêu cầu tự động cung cấp user-agent trống hoặc chung chung sẽ bị chặn. Điều này [[phab:T400119|sẽ mở rộng việc thực thi]] [[foundation:Special:MyLanguage/Policy:Wikimedia Foundation User-Agent Policy|quy định về user-agent]] đã có từ lâu. Quyền truy cập tới Dịch vụ Đám mây của Wikimedia sẽ không thay đổi. * Quá trình triển khai [[mw:Wikimedia APIs/Rate limits|giới hạn truy cập API]] toàn cục đã hoàn tất, các giới hạn được áp dụng trên tất cả các API và ở tất cả các mức độ được ghi nhận cho tất cả các nhóm. Các bot chạy trong Toolforge/WMCS hoặc có quyền người dùng bot trên bất kỳ wiki nào vẫn được miễn trừ. Tất cả các bot nên tiếp tục theo những thực tiễn tốt nhất được ghi nhận để tránh bị vượt giới hạn truy cập. * [https://api.wikimedia.org/wiki/Main_Page Wiki Cổng API] sẽ ở chế độ chỉ đọc kể từ tuần này (15-18 tháng 6). Vào tuần tới (22-25 tháng 6), tất cả các URL của wiki Cổng API sẽ chuyển hướng đến [[mw:Wikimedia APIs|API Wikimedia trên mediawiki.org]]. Tìm hiểu thêm trên [[wikitech:API Portal/Deprecation|trang dự án]]. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.47/wmf.7|MediaWiki]] '''Các cuộc họp và sự kiện''' * Vào ngày 17 tháng 6 lúc 18:00 giờ UTC WMF sẽ tổ chức một cuộc gọi Discord tập trung vào việc đánh giá code. Chúng tôi đã lắng nghe thông qua [[mw:Special:MyLanguage/Developer Satisfaction Survey/2026|Khảo sát Sự hài lòng của Nhà phát triển]] rằng các tình nguyện viên đang gặp khó khăn trong việc đánh giá code và chúng tôi muốn thảo luận về những trải nghiệm này với mục tiêu tìm ra những giải pháp khả thi. Bạn có thể tham gia cuộc gọi [https://discord.gg/wikipedia?event=1514727511102062664 thông qua máy chủ Discord Cộng đồng Wikimedia]. * [[m:Special:MyLanguage/Conferencia Wikimedia de América Latina 2026|Hội nghị Wikimedia Mỹ La-tinh]] sẽ tổ chức cuộc thi hackathon khu vực quy tụ cộng đồng kỹ thuật của phong trào Wikimedia, gồm những nhà phát triển, quản trị viên hệ thống, nhà khoa học dữ liệu và các thành viên có quyền mở rộng. Những người đóng góp kỹ thuật quan tâm có thể [https://docs.google.com/forms/d/e/1FAIpQLSf4osJzTHBJjQbYJk7TMVEJjTEQv7IgtsUDfP-o-qTgeRQQxw/viewform đăng ký học bổng] tham gia cho đến nửa đêm ngày 21 tháng 6 (giờ Bolivia, UTC-4). * Hãy đăng ký tham gia Thử thách Nhóm của Wikimania để góp mặt tại sự kiện đặc biệt này. Thử thách nhóm sẽ diễn ra trực tuyến và trực tiếp từ ngày 21 đến 22 tháng 7, trước hội nghị Wikimania. Mọi người đều có thể tham gia, bất kể kỹ năng hay việc đăng ký Wikimania trước đó như thế nào. Các nhóm sẽ cùng nhau giải quyết 10 thử thách quan trọng trong việc hỗ trợ cộng đồng Wikimedia. Để biết thêm chi tiết, hãy truy cập [[wmania:Special:MyLanguage/2026:Team challenges|trang Thử thách Nhóm]] và [https://wikimedia.eventyay.com/wm/teamchallenges/ đăng ký tại đó]. Cổng đăng ký sẽ đóng vào ngày 20 tháng 6 lúc 23:00 UTC. '''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/25|Biên dịch]]&nbsp;• [[m:Tech|Nhờ giúp đỡ]]&nbsp;• [[m:Talk:Tech/News|Phản hồi]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].'' </div><section end="technews-2026-W25"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 16:48, ngày 15 tháng 6 năm 2026 (UTC) <!-- Tin nhắn của Thành viên:UOzurumba (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30689604 --> == Bản tin Kỹ thuật: Tuần 26-2026 == <section begin="technews-2026-W26"/><div class="plainlinks"> '''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/26|Các bản dịch]] của bản tin này cũng có sẵn cho bạn. '''Nổi bật trong tuần''' * [[mw:Special:MyLanguage/Growth/Feature summary|Các tính năng Phát triển (Growth)]] [[phab:T418115|nay đã có mặt trên Wikidata]]. Bản cập nhật này cho phép truy cập vào chức năng Cố vấn ([[mw:Special:MyLanguage/Help:Growth/Mentorship|nếu được cấu hình]]), mô đun Tác động, Bảng Trợ giúp và Trang chủ dành cho Người mới được đơn giản hóa (không có Đề xuất sửa đổi). Các bảo quản viên Wikidata vẫn đang cấu hình các tính năng thông qua Cấu hình Cộng đồng. '''Cập nhật cho biên tập viên''' * Trang đặc biệt [[{{#special:RangeCalculator}}]] đã được tạo. Trang này cho phép người dùng tìm một dải IP mà không cần phải dựa vào các công cụ bên ngoài. Cho đến hiện tại, công cụ này chỉ có sẵn cho các kiểm định viên. [https://phabricator.wikimedia.org/T268429] * [[m:Special:MyLanguage/WMDE Technical Wishes/Sub-referencing|Chú thích phụ]] là một tính năng mới của MediaWiki cho phép biên tập viên tái sử dụng các nguồn tham khảo với những chi tiết khác nhau. Tính năng này sẽ được triển khai đến hầu hết các phiên bản ngôn ngữ Wikipedia quy mô nhỏ và trung bình vào ngày 23 tháng 6. Trang [[m:Special:MyLanguage/WMDE Technical Wishes/Sub-referencing#deployment|Câu hỏi thường gặp]] liệt kê những hành động có thể thực hiện trên wiki của bạn để hỗ trợ việc triển khai này. Hãy kiểm tra [[:phab:T414094|kế hoạch triển khai]] để biết các bước triển khai tiếp theo. [https://phabricator.wikimedia.org/T428902] * Bắt đầu từ tuần sau, người dùng sẽ nhận được một thông báo khi họ bị cấm sửa đổi hoặc được bỏ cấm sửa đổi, hoặc khi lệnh cấm thay đổi. [https://phabricator.wikimedia.org/T100974] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:32}} {{PLURAL:32|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. '''Cập nhật cho những người đóng góp vào mảng kỹ thuật''' * Bắt đầu từ tuần tới, các bộ lọc sai phạm được đặt ở mức "yêu cầu xác minh CAPTCHA" sẽ bắt đầu ảnh hưởng đến cả những người dùng có quyền <code>skipcaptcha</code>, bao gồm hầu hết những người dùng có quyền tự động xác nhận. Các bot sẽ được miễn trừ. Thay đổi này sẽ chỉ ảnh hưởng đến những sửa đổi kích hoạt bộ lọc sai phạm. Quyền <code>skipcaptcha</code> vẫn sẽ tiếp tục giúp người dùng được miễn yêu cầu xác minh CAPTCHA trong quá trình sử dụng wiki thông thường. [https://phabricator.wikimedia.org/T402595] * Tài liệu tham khảo cho [[wikitech:Machine_Learning/LiftWing/API|API Lift Wing]] đã được chuyển từ Cổng API sang [https://wikitech.wikimedia.org/w/index.php?api=lift-wing&title=Special%3ARestSandbox Chỗ thử REST] mang tính tương tác. * Wiki Cổng API hiện đã đóng. Để xem tài liệu API, hãy xem [[mw:Special:MyLanguage/Wikimedia_APIs|API Wikimedia trên mediawiki.org]]. Tất cả các URL của wiki Cổng API (https://api.wikimedia.org/wiki/) sẽ đổi hướng tới trang mediawiki.org bắt đầu từ ngày 22 tháng 6. [https://phabricator.wikimedia.org/T427537] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.47/wmf.8|MediaWiki]] '''Các cuộc họp và sự kiện''' * Hãy tham gia cuộc gọi trực tuyến vào ngày 25 tháng 6 lúc 2:30 chiều giờ UTC để gặp gỡ các thực tập sinh hiện tại của Wikimedia cho [[mw:Google_Summer_of_Code/2026|Google Summer of Code]] và [[mw:Outreachy/Round_32|Outreachy]]. Các thực tập sinh sẽ giới thiệu tổng quan về các dự án của họ và demo ngắn gọn công việc mà họ đã thực hiện cho đến nay. Người tham dự được khuyến khích [[mw:event:Google_Summer_of_Code/Summer_2026_June_Internship_open_session|chia sẻ ý tưởng và kết nối trong cộng đồng của họ]]. '''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/26|Biên dịch]]&nbsp;• [[m:Tech|Nhờ giúp đỡ]]&nbsp;• [[m:Talk:Tech/News|Phản hồi]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].'' </div><section end="technews-2026-W26"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 13:05, ngày 23 tháng 6 năm 2026 (UTC) <!-- Tin nhắn của Thành viên:Trizek (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30722494 --> == RFC about AI-generated content in Wikimedia Commons == <bdi lang="en" dir="ltr">Apologies for writing in English, please help translate this message to your language. You are invited to participate in a [[c:Commons:Requests for comment/Policy update for AI content|request for comment on Wikimedia Commons about a policy update for AI content]]. This may affect files that are uploaded to Wikimedia Commons for use on this project. Thank you. [[m:User:Codename Noreste|Codename Noreste]] ([[m:User talk:Codename Noreste|thảo luận]])</bdi> 17:12, ngày 23 tháng 6 năm 2026 (UTC) <!-- Tin nhắn của Thành viên:Codename Noreste@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=30513860 --> == <span lang="en" dir="ltr">Deployment of Legal and Safety Contacts Link in the Footer of Your Wiki</span> == <div lang="en" dir="ltr"> <section begin="Message"/> '''Legal & Safety Contacts''' Hello community, the Wikimedia Foundation has provided a [[wmf:Special:MyLanguage/Legal:Wikimedia Foundation Legal and Safety Contact Information|single legal and safety contact page]], to be linked in the footer of your wiki, to ensure access to accurate legal information. This is a regulatory requirement. We have already rolled out links to English, German, Italian, Spanish and other wikis and we will deploy to your wiki soon. [[m:Special:MyLanguage/Wikimedia_Foundation_Legal_and_Safety_Contacts_FAQ|Please read more on the project page]] and leave any comments in this thread or on the [[m:Special:MyLanguage/Talk:Wikimedia Foundation Legal and Safety Contacts FAQ|talk page]]. <section end="Message"/> </div> -- [[User:Sannita (WMF)|User:Sannita (WMF)]] ([[User talk:Sannita (WMF)|talk]]) 13:31, ngày 25 tháng 6 năm 2026 (UTC) <!-- Tin nhắn của Thành viên:Sannita (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=User:Sannita_(WMF)/Mass_sending_test&oldid=30731267 --> == Bản tin Kỹ thuật: Tuần 27-2026 == <section begin="technews-2026-W27"/><div class="plainlinks"> '''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/27|Các bản dịch]] của bản tin này cũng có sẵn cho bạn. '''Cập nhật cho biên tập viên''' * Là một phần của [[mw:Special:MyLanguage/Contributors/Account Creation Experiments|Thử nghiệm Tạo Tài khoản]], nhóm Phát triển đã thử nghiệm việc thêm biểu tượng tài khoản người dùng vào tiêu đề trang web trên di động dành cho người dùng chưa đăng nhập, cung cấp quyền truy cập trực tiếp vào các tác vụ "Tạo tài khoản" và "Đăng nhập". Thử nghiệm đã tăng số tài khoản được tạo lên khoảng 20% mà không ảnh hưởng tiêu cực đến chất lượng sửa đổi hoặc tỷ lệ sửa đổi mang tính xây dựng. Tính năng này giờ sẽ được triển khai đến tất cả các trang wiki của Quỹ Wikimedia trên giao diện web di động trong tuần đầu tiên của tháng 7. [https://phabricator.wikimedia.org/T428220] * Sau một [[phab:T426248|thử nghiệm thành công]], người dùng đã đăng nhập nhưng chưa [[mw:Special:MyLanguage/Help:Email_confirmation|xác nhận địa chỉ email của mình]] khi tạo tài khoản sẽ nhìn thấy một biểu ngữ mới yêu cầu họ hoàn tất quy trình đó. Điều này giúp giảm nguy cơ người dùng bị mất quyền truy cập vào tài khoản của họ, và làm cho địa chỉ email của tài khoản nói chung trở nên đáng tin cậy hơn. Đây là một phần của dự án [[mw:Special:MyLanguage/Product Safety and Integrity/Account Security|Bảo mật Tài khoản]]. [https://phabricator.wikimedia.org/T428292] * Một bản cập nhật cho tính năng [[Special:Search|Tìm kiếm]] sẽ tinh chỉnh cách <bdi lang="zxx" dir="ltr"><code><nowiki>-prefix:</nowiki></code></bdi> hoạt động khi được sử dụng để loại trừ kết quả. Trước đây, việc sử dụng <bdi lang="zxx" dir="ltr"><code><nowiki>-prefix:</nowiki></code></bdi> với phủ định có thể vô tình mở rộng kết quả tìm kiếm bằng cách thêm các không gian tên nằm trong phạm vi tìm kiếm, dẫn đến hành vi gây khó hiểu đối với những người dùng mong đợi một bộ lọc loại trừ đơn giản. Với lần cập nhật này, <bdi lang="zxx" dir="ltr"><code><nowiki>-prefix:</nowiki></code></bdi> nay sẽ loại trừ chặt những tiêu đề trang trùng khớp như mong đợi và có thể hiển thị cảnh báo nếu không gian tên có liên quan không được chọn một cách rõ ràng. Mặc dù vậy, hành vi của <bdi lang="zxx" dir="ltr"><code><nowiki>prefix:</nowiki></code></bdi> khi không có phủ định vẫn sẽ không thay đổi. [https://phabricator.wikimedia.org/T427443] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:33}} {{PLURAL:33|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, một sự cố khiến người đánh giá sử dụng thanh công cụ Quản lý Trang (Page Curation) không tự động được đăng ký theo dõi các cuộc thảo luận mà họ bắt đầu bình luận trên trang nay đã được giải quyết. Người đánh giá giờ sẽ nhận được thông báo khi có người nào đó trả lời những cuộc thảo luận này. [https://phabricator.wikimedia.org/T329346] '''Cập nhật cho những người đóng góp vào mảng kỹ thuật''' * Kể từ ngày 29 tháng 6, các lượt tải xuống tự động từ trang dumps.wikimedia.org sẽ phải tuân theo [[Foundation:Special:MyLanguage/Policy:Wikimedia Foundation User-Agent Policy|quy định về user-agent]]. Các yêu cầu tự động mà cung cấp user-agent trống hoặc chung chung sẽ bị chặn. Việc truy cập vào các bản sao lưu (dump) thông qua Dịch vụ Đám mây Wikimedia sẽ không bị ảnh hưởng. Đây là thông báo tiếp theo sau thông báo được đưa ra trong [[m:Special:MyLanguage/Tech/News/2026/25|Bản tin Kỹ thuật số 25-2026]]. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.47/wmf.9|MediaWiki]] '''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/27|Biên dịch]]&nbsp;• [[m:Tech|Nhờ giúp đỡ]]&nbsp;• [[m:Talk:Tech/News|Phản hồi]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].'' </div><section end="technews-2026-W27"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 11:48, ngày 29 tháng 6 năm 2026 (UTC) <!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30744833 --> == <span lang="en" dir="ltr">Tech News: 2026-28</span> == <div lang="en" dir="ltr"> <section begin="technews-2026-W28"/><div class="plainlinks"> Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/28|Translations]] are available. '''Updates for editors''' * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:34}} community-submitted {{PLURAL:34|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, an issue where the search bar results on Wikidata, showed English results instead of using the correct language fallback for users of language variants, has now been fixed. Search suggestions will now follow the expected language fallback chain. [https://phabricator.wikimedia.org/T429769] '''Updates for technical contributors''' * In preparation for [[m:Special:MyLanguage/Event:Celebrate Women|Celebrate Women campaign]] planned for March 2027, the Wikimedia Foundation’s [[m:Special:MyLanguage/Wikimedia Foundation/Advancement/Community Growth/Content Enablement|Content Enablement team]] has launched a 22-question survey to better understand technical contributions by women+ (anyone who identifies as a woman) across Wikimedia projects. The survey takes approximately 15–20 minutes to complete and will remain open until 20 July 2026. The [[m:Special:MyLanguage/Celebrate Women/Technical contributions survey|questions]] are also available on-wiki for review in advance. * The [[mw:Special:MyLanguage/Extension:Score|Score extension]] now supports rendering music scores as SVG images in addition to PNG, addressing a long-standing [[:phab:T49578|feature request]] and resolving historical image quality issues. Both formats are now provided to clients, with PNG in the <bdi lang="zxx" dir="ltr"><code><nowiki>src</nowiki></code></bdi> attribute and SVG in the <bdi lang="zxx" dir="ltr"><code><nowiki>srcset</nowiki></code></bdi> attribute. * The new [[wikitech:Parsoid|Parsoid]] parser [[mw:Special:MyLanguage/Parsoid/Parser_Unification/Updates|continues to be deployed to additional wikis]], making it easier to introduce new reading and editing features. It was enabled on French Wikipedia, bringing total progress to covering 78.9% of Wikipedia page views. Rollout to English Wikipedia desktop will progress through this week. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.47/wmf.10|MediaWiki]] '''In depth''' * The Wikimedia Hackathon 2026 [[diffblog:2026/06/29/wikimedia-hackathon-2026-building-collaborating-and-shaping-the-future-together/|recap blog post]] is now live. It highlights the projects, sessions, and social activities from this year’s event, and shares initial plans for the 2027 Wikimedia Hackathon. '''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Contribute]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/28|Translate]]&nbsp;• [[m:Tech|Get help]]&nbsp;• [[m:Talk:Tech/News|Give feedback]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].'' </div><section end="technews-2026-W28"/> </div> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 13:57, ngày 6 tháng 7 năm 2026 (UTC) <!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30773578 --> == Bản tin Kỹ thuật: Tuần 29-2026 == <section begin="technews-2026-W29"/><div class="plainlinks"> '''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/29|Các bản dịch]] của bản tin này cũng có sẵn cho bạn. '''Cập nhật cho biên tập viên''' * Tính năng [[mw:Special:MyLanguage/Growth/Revise_Tone|Xem lại Giọng văn]] giúp người mới xác định những đoạn văn trong bài viết Wikipedia mà có thể chứa ngôn ngữ không bách khoa và khuyến khích họ xem xét lại giọng văn đó. Tính năng này đã được [[w:en:A/B_testing|thử nghiệm A/B]] trên các Wikipedia tiếng Ả Rập, tiếng Anh, tiếng Pháp và tiếng Bồ Đào Nha, tại đó tỷ lệ hoàn thành nhiệm vụ của người mới [[mw:Special:MyLanguage/Growth/Revise_Tone#Experiment_Results|tăng 38.7%]] so với nhiệm vụ Hiệu đính mặc định, mà không làm giảm chất lượng sửa đổi. Cuộc thử nghiệm đã kết thúc vào ngày 9 tháng 7 và tính năng này nay đã có sẵn cho tất cả mọi người trên các wiki này, đồng thời có thể cấu hình được thông qua Cấu hình Cộng đồng. [[phab:T426364|Kế hoạch]] dự kiến là sẽ phát hành Xem lại Giọng văn đến nhiều trang wiki hơn. * Cấu hình cộng đồng cho phép [[mw:Special:MyLanguage/Help:Growth/Mentorship#Automated mentor list cleanup|tự động loại bỏ cố vấn không hoạt động]] dựa trên các tiêu chí có thể cấu hình được sẽ được kích hoạt vào thứ 5, ngày 16, [[mw:Special:MyLanguage/Growth/Deployment|trên một số wiki]] để đảm bảo danh sách cố vấn được cập nhật. Cố vấn là những người đóng góp có kinh nghiệm, tự nguyện tham gia giúp đỡ người dùng mới trên wiki thông qua [[mw:Special:MyLanguage/Growth/Feature summary|Tính năng Phát triển (Growth)]]. Bảo quản viên nay có thể chuẩn bị các cài đặt thông qua [[w:Special:CommunityConfiguration/Mentorship|Đặc biệt:Cấu hình Cộng đồng/Cố vấn]]; những cài đặt này sẽ có hiệu lực kể từ thứ 5. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:38}} {{PLURAL:38|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, một sự cố khiến một số người dùng ứng dụng Wikipedia trên thiết bị Android bị đăng xuất ngay sau khi đăng nhập, khiến họ không thể duy trì trạng thái đăng nhập và sửa đổi trang, nay đã được giải quyết. [https://phabricator.wikimedia.org/T316916] '''Cập nhật cho những người đóng góp vào mảng kỹ thuật''' * Việc sửa đổi trang thông qua đoạn mã người dùng hoặc tiện ích khiến cho nhãn danh sách theo dõi mà người dùng gán cho trang đó bị đặt lại. Vấn đề này nay đã được giải quyết. [https://phabricator.wikimedia.org/T423778] * Để khắc phục lỗi Safari (xem [[phab:T425211]]), trên các wiki đã kích hoạt Parsoid, các liên kết wiki href nay sử dụng urls tuyệt đối thay vì url tương đối theo giao thức. Đầu ra API REST vẫn sẽ không thay đổi và sẽ tiếp tục sử dụng url tương đối theo giao thức. Các tiện ích, đoạn mã người dùng, bot và CSS có thể cần được điều chỉnh nếu chúng dựa vào sự hiện diện của url tương đối theo giao thức trong các liên kết wiki href. [https://phabricator.wikimedia.org/T431358] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.47/wmf.11|MediaWiki]] '''Chuyên sâu''' * Nhóm Nền tảng Thử nghiệm của Quỹ Wikimedia đã đăng bài viết trên blog phản ánh về năm đầu tiên thực hiện thử nghiệm có cấu trúc của họ. Bài viết nêu bật những thử nghiệm thành công như Kiểm tra Chép dán, Kiểm tra Nguồn tham khảo và Kiểm tra Giọng văn, những thử nghiệm đã cải thiện kết quả sửa đổi và được triển khai cho nhiều người dùng hơn, cũng như những thử nghiệm không dẫn đến việc thay đổi sản phẩm. [[diffblog:2026/07/07/moving-the-needle-how-we-test-new-ideas-across-wikimedia-projects|Đọc thêm]]. '''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/29|Biên dịch]]&nbsp;• [[m:Tech|Nhờ giúp đỡ]]&nbsp;• [[m:Talk:Tech/News|Phản hồi]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].'' </div><section end="technews-2026-W29"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 16:11, ngày 13 tháng 7 năm 2026 (UTC) <!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30804401 --> == Bản tin Kỹ thuật: Tuần 30-2026 == <section begin="technews-2026-W30"/><div class="plainlinks"> '''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/30|Các bản dịch]] của bản tin này cũng có sẵn cho bạn. '''Cập nhật cho biên tập viên''' * [[mw:Special:MyLanguage/Reader/Reader Experience|Nhóm Trải nghiệm Người đọc]] đã kết hợp phản hồi của cộng đồng xoay quanh vị trí của các nút sao theo dõi và nút danh sách theo dõi đối với [[mw:Special:MyLanguage/Readers/Reader Experience/WE3.3.4 Reading lists|tính năng beta Danh sách Đọc]], nhằm cho phép lưu lại các bài viết để đọc sau – một [[m:Special:MyLanguage/Community Wishlist/W102|mục danh sách mong muốn]] để đưa chức năng này lên web. Các biên tập viên được mời kích hoạt tính năng beta để thử nghiệm tính năng này và [[phab:T426453|chia sẻ suy nghĩ của mình]]. * [[mw:Special:MyLanguage/VisualEditor/Suggestion Mode|Chế độ Đề xuất]] cung cấp những đề xuất sửa đổi trong Trình Soạn thảo Trực quan để cải thiện các bài viết trên Wikipedia. [[Special:EditChecks|Mọi đề xuất]] đều [[mw:Special:MyLanguage/Help:Suggestion mode#For administrators – local customization|có thể được cộng đồng cấu hình]]. Tính năng [[mw:Special:MyLanguage/Edit check/TextMatch|Văn bản Khớp chính xác]] (TextMatch) là một cách giúp cho các tình nguyện viên có thể tạo đề xuất tùy chỉnh cục bộ. Tính năng này tìm kiếm các chuỗi văn bản trong bài viết, và nay cũng bao gồm việc hỗ trợ cho các biểu thức chính quy. Điều này mang lại cho các tình nguyện viên độ chính xác và tính linh hoạt cao hơn đối với những loại đề xuất mà họ có thể tạo ra cục bộ. Lưu ý: Đề xuất [[mw:Special:MyLanguage/Edit check/Configuration#:~:text=maximumEditcount|có thể được nhắm tới]] dựa trên số lần sửa đổi của người thực hiện sửa đổi cũng như các khía cạnh khác của trang. Bạn có thể [[mw:Special:MyLanguage/Help:Suggestion mode#Create custom local types of Suggestions|tìm ví dụ từ các cộng đồng khác]] để lấy cảm hứng, kể cả việc sử dụng Văn bản Khớp chính xác nhằm phát hiện: lỗi chính tả, lỗi ngữ pháp, có khả năng quảng cáo, lời sáo rỗng, cách sử dụng dấu gạch ngang hoặc dấu gạch nối không chính xác, từ khóa thời gian không cụ thể, tên lỗi thời, v.v. Bất kỳ [[mw:Special:MyLanguage/Talk:VisualEditor/Suggestion Mode|phản hồi]] nào đều được chúng tôi hoan nghênh. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:27}} {{PLURAL:27|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, sự cố về công cụ SVG Translate khiến cho nó có thể sử dụng phiên bản tập tin lỗi thời, khiến các bản dịch hiện có bị ghi đè khi các bản dịch mới được tải lên, nay đã được [[phab:T430577|giải quyết]]. Nhìn chung, trong quý cuối cùng từ tháng 4 đến tháng 6 năm 2026, Quỹ Wikimedia đã giải quyết khoảng 337 tác vụ cộng đồng. '''Cập nhật cho những người đóng góp vào mảng kỹ thuật''' * Trên các wiki có hỗ trợ Parsoid, Parsoid nay hiển thị tối đa 1.250 hình ảnh mỗi trang. Một danh mục theo dõi mới, "media-limit-reached", sẽ sớm được cung cấp để xác định các trang đã đạt đến giới hạn này, giúp dễ dàng tìm thấy nội dung có thể bị hạn chế đầu ra phương tiện trong quá trình hiển thị. Xem [[phab:T430854]] để biết thêm thông tin và cung cấp phản hồi. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.47/wmf.12|MediaWiki]] '''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/30|Biên dịch]]&nbsp;• [[m:Tech|Nhờ giúp đỡ]]&nbsp;• [[m:Talk:Tech/News|Phản hồi]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].'' </div><section end="technews-2026-W30"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 05:46, ngày 21 tháng 7 năm 2026 (UTC) <!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30836091 --> == Request for comment (the future of Abstract Wikipedia) == <bdi lang="en" dir="ltr" class="mw-content-ltr"> Apologies if this has not yet been translated into your wiki's language. {{int:Please-translate}} You are invited to voice your opinions in a [[:m:Requests for comment/The future of Abstract Wikipedia|request for comment about the future of Abstract Wikipedia]]. {{Int:Feedback-thanks-title}} [[:m:User:Kowal2701|Kowal2701]] ([[:m:User talk:Kowal2701|talk]]) 12:25, ngày 24 tháng 7 năm 2026 (UTC) </bdi> <!-- Tin nhắn của Thành viên:DreamRimmer@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=30513860 --> == Bản tin Kỹ thuật: Tuần 31-2026 == <section begin="technews-2026-W31"/><div class="plainlinks"> '''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/31|Các bản dịch]] của bản tin này cũng có sẵn cho bạn. '''Cập nhật cho biên tập viên''' * [[File:Maki-gift-15.svg|12px|link=|class=skin-invert|Wishlist item]] Công cụ [[mw:Special:MyLanguage/ContentTranslation|Dịch Nội dung]] nay hỗ trợ chế độ tối, nhằm đáp ứng [[m:Community Wishlist/W544|yêu cầu từ Mong muốn Cộng đồng]]. Điều này giúp công cụ tương thích với các tính năng hỗ trợ khả năng tiếp cận có sẵn trong các giao diện Vector 2022 và Minerva, giúp giảm việc gây mỏi mắt cho người dùng khi dịch nội dung. [https://phabricator.wikimedia.org/T367077] * Chế độ soạn thảo mã nguồn của Công cụ Thảo luận (DiscussionTools) và Trình soạn thảo mã nguồn 2017 nay sẽ cung cấp tính năng tự động điền cho các liên kết (<bdi lang="zxx" dir="ltr"><code><nowiki>[[</nowiki></code></bdi>), bản mẫu (<bdi lang="zxx" dir="ltr"><code><nowiki>{{</nowiki></code></bdi>), thẻ HTML và phân tích cú pháp (<bdi lang="zxx" dir="ltr"><code><nowiki><</nowiki></code></bdi>), cũng như các từ ma thuật (<bdi lang="zxx" dir="ltr"><code><nowiki>__</nowiki></code></bdi>), giúp việc chèn các liên kết, bản mẫu và mã đánh dấu wiki khác trong quá trình sửa đổi trở nên nhanh chóng và dễ dàng hơn. [https://phabricator.wikimedia.org/T432400] * [[mw:Special:MyLanguage/Readers/Reader Growth/Mobile page previews|Nhóm Phát triển Người đọc]] đã kết thúc việc thử nghiệm với tính năng xem trước trang trên thiết bị di động và sẽ không triển khai tính năng này nữa. Tính năng Xem trước Trang là một cửa sổ bật lên ở cuối trang xuất hiện khi người đọc nhấn vào liên kết xanh, hiển thị hình thu nhỏ, đoạn mở đầu và tùy chọn mở bài viết. Thử ngiệm cho thấy tỷ lệ giữ chân người dùng không thay đổi nhưng các chỉ số khác đều mang tính tiêu cực, điều này có nghĩa là người đọc trên trang web dành cho thiết bị di động thích truy cập trực tiếp vào các bài viết được liên kết hơn là sử dụng tính năng xem trước trang. * Nhóm Trải nghiệm Người đọc đã bước đầu ghi nhận những kết quả khả quan từ [[mw:Special:MyLanguage/Readers/Reader Experience/Reading lists|tính năng Danh sách Đọc]], trong đó 93% người dùng tham gia báo cáo rằng tính năng này hữu ích. Danh sách Đọc giúp người đọc hoạt động tích cực lưu lại các bài viết để đọc sau này và hỗ trợ mục tiêu học tập của họ trên các dự án Wikimedia. Nhóm dự định sẽ tiếp tục cải tiến trước khi mở rộng tính năng này cho nhiều người dùng hơn. * Sáng kiến ​​[[mw:Special:MyLanguage/Wikimedia Apps/Team/Explore Feed Refresh|Làm mới Nguồn cấp dữ liệu Khám phá]] đã được thử nghiệm với những người đọc mới và không thường xuyên sử dụng ứng dụng Wikipedia. Nguồn cấp dữ liệu được làm mới giúp người đọc khám phá những nội dung mới và phù hợp với mình. Với kết quả mức độ tương tác với nguồn cấp dữ liệu tăng 10,5%, nhóm Ứng dụng Wikimedia đã quyết định mở rộng việc thiết kế lại Nguồn cấp dữ liệu Trang chủ sang iOS, áp dụng những kinh nghiệm thu được từ phiên bản dành cho Android. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:23}} {{PLURAL:23|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, một sự cố khiến cho tên chủ đề trong tính năng Hướng dẫn Bài viết hiển thị sai cách viết hoa trên Wikipedia tiếng Pháp nay đã được giải quyết. Tên chủ đề nay sẽ tuân theo đúng quy tắc viết hoa của ngôn ngữ đó. [https://phabricator.wikimedia.org/T427201] '''Cập nhật cho những người đóng góp vào mảng kỹ thuật''' * Sau khi thực hiện một số [[mw:Special:MyLanguage/Contributors/Account Creation Experiments|Thử nghiệm Tạo Tài khoản]] để cải thiện tỷ lệ hoàn tất việc đăng ký, một phiên bản mới của trường tên người dùng trên trang [[Special:CreateAccount|Tạo Tài khoản]] đã được triển khai. Phiên bản này bao gồm [[:c:File:Create account - July 2026 updates.png|một cửa sổ bật lên nhằm tóm tắt quy định về tên người dùng]] để cung cấp hướng dẫn rõ ràng hơn trong quá trình tạo tài khoản. Là một phần của thay đổi này, các thông báo <bdi lang="zxx" dir="ltr"><code><nowiki>createacct-helpusername</nowiki></code></bdi> và <bdi lang="zxx" dir="ltr"><code><nowiki>createacct-username-help</nowiki></code></bdi> mà một số cộng đồng đã cấu hình sẽ không còn được sử dụng nữa. Nếu cộng đồng muốn tùy chỉnh hướng dẫn hiển thị trong cửa sổ bật lên mới, cộng đồng có thể sửa đổi các thông báo sau: <bdi lang="zxx" dir="ltr"><code><nowiki>createacct-username-policy-popover-bullet1</nowiki></code></bdi>, <bdi lang="zxx" dir="ltr"><code><nowiki>createacct-username-policy-popover-bullet2</nowiki></code></bdi> và <bdi lang="zxx" dir="ltr"><code><nowiki>createacct-username-policy-popover-bullet3</nowiki></code></bdi>. [https://phabricator.wikimedia.org/T430604] * Cuối tuần này, [[mw:Special:MyLanguage/Help:Extension:CodeMirror|trình làm nổi bật cú pháp CodeMirror]] sẽ cung cấp [[w:en:Theme (computing)|các chủ đề]]. Các chủ đề có thể được chọn từ menu thả xuống trong hộp thoại [[mw:Special:MyLanguage/Help:Extension:CodeMirror#CodeMirror preferences|tùy chọn CodeMirror]] hoàn chỉnh. Đối với mã wiki, các chủ đề có sẵn là mặc định, thân thiện với người mù màu (trước đây là tùy chọn dễ phân biệt cho người mù màu trong [[Special:Preferences#mw-prefsection-editing]]) và không làm nổi bật. Đối với các ngôn ngữ lập trình (ví dụ: CSS/JavaScript/JSON/Vue/Lua), hiện có sẵn một vài chủ đề. Các chủ đề tương tự này sau này cũng sẽ có sẵn cho mã wiki. [https://phabricator.wikimedia.org/T163533] * Kể từ giờ trở đi, các wiki có thể giới hạn sửa đổi trong không gian tên "Thành viên" chỉ cho chính thành viên đó và một số nhóm người dùng nhất định. [[mw:Special:MyLanguage/Manual:$wgRestrictUserPageEditing|Đọc tài liệu hướng dẫn cấu hình]] để tìm hiểu thêm. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.47/wmf.14|MediaWiki]] '''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/31|Biên dịch]]&nbsp;• [[m:Tech|Nhờ giúp đỡ]]&nbsp;• [[m:Talk:Tech/News|Phản hồi]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].'' </div><section end="technews-2026-W31"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 18:49, ngày 27 tháng 7 năm 2026 (UTC) <!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30856308 --> == Bản tin Kỹ thuật: Tuần 32-2026 == <section begin="technews-2026-W32"/><div class="plainlinks"> '''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/32|Các bản dịch]] của bản tin này cũng có sẵn cho bạn. '''Cập nhật cho biên tập viên''' * [[mw:Special:MyLanguage/Readers/Reader Experience|Nhóm Trải nghiệm Người đọc]] đã phát triển một [https://82db7c8d4b.catalyst.wmcloud.org/w/index.php?title=Regent%27s_Park&uselang=de bản vá demo] nhằm bọc thanh công cụ trang thành hai dòng nếu không có đủ không gian bề ngang cho tất cả các nút. Điều này nhằm mục đích giảm tình trạng quá tải trên thanh công cụ trong giao diện Vector 2022, có thể xảy ra trên một số trang ngôn ngữ Wikipedia trên một số độ rộng màn hình nhất định. [https://phabricator.wikimedia.org/T429518] * Nhóm Trải nghiệm Người đọc dự kiến sẽ phát hành [[mw:Special:MyLanguage/Readers/Reader Experience/Reading lists|Danh sách Đọc]], một [[m:Special:MyLanguage/Community Wishlist Survey 2021/Mobile and apps/Have Apps reading lists available on Destop/Mobile|mục trong Danh sách Mong muốn Cộng đồng]], hiện đang có sẵn để dùng thử dưới dạng tính năng beta, dưới dạng tính năng đầy đủ vào tháng 9. Trước thời điểm đó, chúng tôi cần các tình nguyện viên biên dịch giúp [https://translatewiki.net/w/i.php?title=Special%3ATranslate&group=ext-readinglists&filter=&action=translate dịch các chuỗi này] sang những ngôn ngữ khác. Tính năng này giúp hỗ trợ các mục tiêu đọc và học tập trên Wikipedia. * Vào tuần tới, mục lục trên các trang tập tin Wikimedia Commons sẽ được cải thiện bằng cách hợp nhất mục lục trang tập tin với mục lục của trang. Điều này sẽ giúp việc hiểu cấu trúc trang tập tin, điều hướng đến những đề mục cụ thể, và chia sẻ liên kết đến các đề mục riêng biệt trở nên dễ dàng hơn. [https://phabricator.wikimedia.org/T332644] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:24}} {{PLURAL:24|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, một lỗi khiến cho một số hình [[w:TIFF|TIFF]] không thể tải được sau khi nhấn vào hình thu nhỏ của nó, khiến cho hình bị hỏng được hiển thị thay vì hình có kích thước đầy đủ, nay đã được giải quyết. [https://phabricator.wikimedia.org/T429326] '''Cập nhật cho những người đóng góp vào mảng kỹ thuật''' * Bộ chọn biến và hàm trong Bộ lọc Sai phạm (AbuseFilter) đã được cập nhật để hỗ trợ tìm kiếm và tự động điền. Điều này sẽ giúp những người quản lý bộ lọc tìm kiếm biến hoặc hàm mong muốn nhanh hơn. [https://phabricator.wikimedia.org/T323698] * Các định dạng MJPEG và VP8 đã bị loại bỏ khỏi trình phát video. Thay vào đó, định dạng MP4 (MPEG-4 Phần 2) được thêm vào, nhằm cung cấp video chất lượng cao hơn cho các thiết bị iPhone đời cũ. Việc cập nhật lại tất cả các video hiện có sẽ có thể mất vài tuần. Định dạng mặc định cho các thiết bị hiện đại vẫn sẽ được giữ nguyên (VP9/WebM). [https://phabricator.wikimedia.org/T358266] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.47/wmf.15|MediaWiki]] '''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/32|Biên dịch]]&nbsp;• [[m:Tech|Nhờ giúp đỡ]]&nbsp;• [[m:Talk:Tech/News|Phản hồi]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].'' </div><section end="technews-2026-W32"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 19:46, ngày 3 tháng 8 năm 2026 (UTC) <!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30872536 --> == Bản tin Kỹ thuật: Tuần 33-2026 == <section begin="technews-2026-W33"/><div class="plainlinks"> '''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/33|Các bản dịch]] của bản tin này cũng có sẵn cho bạn. '''Cập nhật cho biên tập viên''' * [[File:Maki-gift-15.svg|12px|link=|class=skin-invert|Mục Mong muốn cộng đồng]] Công cụ mới Trình tạo Biểu đồ (ChartWizard) [[c:Special:ChartWizard/Data:Example.Pie.chart|nay đã có mặt trên Wikimedia Commons]] dành cho các thành viên có mong muốn tạo các biểu đồ từ dữ liệu của riêng mình. Trình hướng dẫn này giúp [[mw:Special:MyLanguage/Extension:Chart|phần mở rộng Chart]] trở nên thân thiện hơn với người mới bắt đầu bằng cách cho phép các biên tập viên tạo biểu đồ, chẳng hạn như biểu đồ cột và biểu đồ tròn, mà không cần phải sử dụng JSON. Các thành viên vẫn có thể chuyển sang trình soạn thảo mã JSON nếu họ muốn. Mọi ý kiến đóng góp về công cụ mới này đều được hoan nghênh trên [[m:Talk:Community Wishlist/W414|trang thảo luận của mong muốn này]]. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:19}} {{PLURAL:19|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, một vấn đề khiến cho tiện ích Hình ảnh của Ngày của ứng dụng Wikipedia dành cho iOS hiển thị cùng một hình ảnh mỗi ngày thay vì cập nhật hàng ngày, nay đã được giải quyết. [https://phabricator.wikimedia.org/T430692] '''Cập nhật cho những người đóng góp vào mảng kỹ thuật''' * Hình ảnh SVG cho [[mw:Special:MyLanguage/Extension:Math|công thức toán học]] sẽ sớm được tạo trong trình duyệt thay vì trên máy chủ. MathML vẫn sẽ tiếp tục được tạo trên máy chủ và hiển thị trong trình duyệt mà không cần JavaScript. Wikibooks sẽ áp dụng thay đổi này vào ngày 12 tháng 8, Wikisource vào ngày 19 tháng 8 và Wikipedia từ ngày 20-27 tháng 8. Bạn có thể thử thay đổi này bằng cách chọn "{{int:Mw-math-mathjax}}" trong phần tùy chọn của bạn. Thay đổi này là một phần trong lộ trình [[mw:Special:MyLanguage/RESTBase/deprecation|ngừng sử dụng RESTBase]] và [[phab:T431372|ngừng sử dụng Mathoid]]. [https://phabricator.wikimedia.org/T271001] * <span class="mw-translate-fuzzy">Các trang thể loại sẽ sớm hỗ trợ việc sắp xếp các mục theo thời gian chúng được thêm vào thể loại. Điều này sẽ giúp việc tìm kiếm các trang được xếp thể loại gần đây hoặc đã xếp từ lâu trở nên dễ dàng hơn. Tính năng này cũng sẽ cải thiện quy trình làm việc đối với các thể loại bảo trì chẳng hạn như danh sách trang chờ xóa và các tác vụ rà soát theo thời gian khác. Bạn có thể sử dụng tham số URL <bdi lang="zxx" dir="ltr"><code><nowiki>cldsort=timestamp</nowiki></code></bdi> trong chế độ xem thể loại để sắp xếp các mục này.</span> [https://phabricator.wikimedia.org/T433768] * Các [[mw:Special:MyLanguage/Extension:Gadgets|tiện ích]] và đoạn mã người dùng trên các wiki của Wikimedia nay có thể sử dụng [[phab:T395347|các tính năng theo chuẩn ES2018]] và [[phab:T419142|các tính năng theo chuẩn ES2019]] trong đoạn mã JavaScript. Trước đây, nền tảng chỉ cho phép sử dụng tối đa đến chuẩn ES2017. MediaWiki kiểm tra mã nguồn để bảo vệ chức năng khỏi các lỗi cú pháp và đảm bảo các đoạn mã đều hợp lệ trên tất cả [[mw:Special:MyLanguage/Compatibility#Browser_support_matrix|các trình duyệt được hỗ trợ]]. [https://phabricator.wikimedia.org/T419142] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.47/wmf.16|MediaWiki]] '''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/33|Biên dịch]]&nbsp;• [[m:Tech|Nhờ giúp đỡ]]&nbsp;• [[m:Talk:Tech/News|Phản hồi]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].'' </div><section end="technews-2026-W33"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 20:45, ngày 10 tháng 8 năm 2026 (UTC) <!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30901051 --> == Bản tin Kỹ thuật: Tuần 34-2026 == <section begin="technews-2026-W34"/><div class="plainlinks"> '''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/34|Các bản dịch]] của bản tin này cũng có sẵn cho bạn. '''Nổi bật trong tuần''' * [[mw:Special:MyLanguage/Help:Extension:CampaignEvents/Registration/Worklist|Tính năng Danh sách Công việc (Worklist)]] dành cho công cụ Đăng ký Sự kiện nay đã có mặt trên tất cả các dự án wiki của Wikimedia. Với Danh sách Công việc, ban tổ chức sự kiện có thể thêm trực tiếp các bài viết mà sẽ là trọng tâm của sự kiện vào trang sự kiện. Danh sách Công việc cũng hỗ trợ tính năng [[mw:Special:MyLanguage/Help:Extension:CampaignEvents/Registration/Worklist#How Event Pathways uses the worklist|Lộ trình Sự kiện (Event Pathways)]] giúp thông báo cho các biên tập viên khác về sự kiện sắp hoặc đang diễn ra khi họ sửa đổi một bài viết có trong Danh sách Công việc của sự kiện đó. Đây là phiên bản khả thi tối thiểu (MVP), và chúng tôi hoan nghênh mọi ý kiến đóng góp. Các ban tổ chức được khuyến khích thử tính năng này. Buổi [[m:Special:MyLanguage/Event:Worklist Setup Workshop: Get Your Event Ready|Hội thảo Thực hành Danh sách Công việc]] sẽ diễn ra vào ngày 18 tháng 6 lúc 16:00 UTC và ngày 19 tháng 6 lúc 11:00 UTC. '''Cập nhật cho biên tập viên''' * [[Special:ShortPages]] hiển thị các trang ngắn dựa trên kích thước của chúng, nhưng trong nhiều trường hợp danh sách này bị lấp đầy bởi các trang định hướng và đổi hướng mềm, khiến việc tìm kiếm chính các bài viết ngắn đó trở nên khó khăn hơn. Kể từ cuối tuần này, bạn sẽ có thể loại bỏ một bài viết khỏi trang đặc biệt này bằng cách thêm từ ma thuật <bdi lang="zxx" dir="ltr"><code><nowiki>__EXPECTSHORTPAGE__</nowiki></code></bdi>. [https://phabricator.wikimedia.org/T433203] * Một wiki mới đã được tạo ra: {{int:project-localized-name-group-wikipedia/vi}} tiếng [[d:Q3436680|Bole]] ([[w:bol:|<bdi lang="zxx" dir="ltr"><code><nowiki>w:bol:</nowiki></code></bdi>]]) [https://phabricator.wikimedia.org/T429921] * Kể từ tuần ngày 17 tháng 8, thanh công cụ trang sẽ tự động xuống thành hai hàng khi không còn đủ không gian theo chiều ngang để hiển thị tất cả các nút. Đây là một [[phab:T429518|bản vá đã được hợp nhất hoàn toàn từ nhóm Trải nghiệm Người đọc]] nhằm giảm bớt tình trạng chật không gian trên thanh công cụ của giao diện Vector 2022, một vấn đề mà có thể xảy ra trên một số phiên bản ngôn ngữ Wikipedia ở một số độ rộng màn hình nhất định. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:16}} {{PLURAL:16|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, việc tải các tập tin có dung lượng lớn lên Wikimedia Commons đã trở nên ổn định hơn và ít gặp lỗi hơn sau một số bản sửa lỗi liên quan đến lỗi tải lên "Không thể lấy khóa". [https://phabricator.wikimedia.org/T386640] '''Cập nhật cho những người đóng góp vào mảng kỹ thuật''' * Debian Bullseye sẽ kết thúc Hỗ trợ Dài hạn vào ngày 31 tháng 8 năm 2026. [[phab:T434103|Một số dự án Cloud VPS]] vẫn còn instance đang chạy Debian Bullseye. Bảo trì viên của những dự án này được khuyến khích chuyển sang Debian Bookworm hoặc Debian Trixie. Hiện đã có trang [[wikitech:Help:Cloud VPS instance operating system migration|hướng dẫn di chuyển]] nhằm giúp thực hiện quy trình này, đồng thời các thành viên cũng có thể muốn xem xem liệu khối lượng công việc của họ có phù hợp hơn với Toolforge hay không. Nếu bạn cần trợ giúp hoặc không thể hoàn tất quá trình chuyển đổi trước ngày 31 tháng 8, vui lòng liên hệ với quản trị viên Cloud VPS càng sớm càng tốt. [[listarchive:list/cloud-announce@lists.wikimedia.org/thread/RVIPQSYLKMSL5M46JP6NEJVGVE6I2RXQ/|Đọc thêm]]. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.47/wmf.16|MediaWiki]] '''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/34|Biên dịch]]&nbsp;• [[m:Tech|Nhờ giúp đỡ]]&nbsp;• [[m:Talk:Tech/News|Phản hồi]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].'' </div><section end="technews-2026-W34"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 21:03, ngày 17 tháng 8 năm 2026 (UTC) <!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30922806 --> == Bản tin Kỹ thuật: Tuần 35-2026 == <section begin="technews-2026-W35"/><div class="plainlinks"> '''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/35|Các bản dịch]] của bản tin này cũng có sẵn cho bạn. '''Cập nhật cho biên tập viên''' * Trang [[Special:CreateAccount|Đặc biệt:Tạo tài khoản]] đã được đơn giản hóa như là một phần của nỗ lực nhằm hiện đại hóa trải nghiệm tạo tài khoản. Khung hiển thị số liệu thống kê về dự án sẽ không còn xuất hiện bên cạnh biểu mẫu trên giao diện trang web máy tính và di động. Nhiều thử nghiệm tạo tài khoản cho thấy việc sử dụng biểu mẫu đơn giản hơn giúp người dùng mới hoàn tất quy trình đăng ký dễ dàng hơn. [https://phabricator.wikimedia.org/T433783] * Để cải thiện hiệu suất trang, các hình ảnh nay sẽ chỉ được tải khi người dùng xem chúng. Điều này có nghĩa là những hình ảnh nằm ở phần dưới của bài viết sẽ không được tải nếu người đọc không bao giờ cuộn trang xuống phần đó của bài viết, điều này có thể ảnh hưởng đến một vài số liệu liên quan đến hình ảnh. [https://phabricator.wikimedia.org/T148047] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:42}} {{PLURAL:42|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, một vấn đề khiến cho các hình thu nhỏ trên Abstract Wikipedia có thể không hiển thị được sau khi tập tin tương ứng được di chuyển trên Wikimedia Commons, nay đã được giải quyết. Các hình thu nhỏ nay sẽ được cập nhật chính xác khi tập tin được di chuyển. [https://phabricator.wikimedia.org/T433448] '''Cập nhật cho những người đóng góp vào mảng kỹ thuật''' * Thẻ Thông tin Thành viên là một tính năng giúp các tuần tra viên xem thông tin về các tài khoản người dùng. Trước đây, tính năng này chỉ xuất hiện ở những nơi chẳng hạn như lịch sử trang, nhật trình và thay đổi gần đây. Giờ đây, các thành viên cũng có thể [[mw:Special:MyLanguage/Help:Extension:CheckUser#User_Info_card_in_page_content|đặt thẻ này vào nội dung trang]], bằng cách sử dụng hàm phân tích cú pháp <bdi lang="zxx" dir="ltr"><code><nowiki>{{#uic:}}</nowiki></code></bdi>. Điều này đặc biệt hữu ích trong các bản mẫu như [[:en:Template:Userlinks|<bdi lang="zxx" dir="ltr"><code><nowiki>{{Userlinks}}</nowiki></code></bdi>]] (hoặc các biến thể chuyên biệt của chúng), vì nó sẽ giúp việc xem thông tin về thành viên trên nhiều trang bảng tin nhắn trở nên dễ dàng hơn. Thẻ này sẽ chỉ được hiển thị với những người dùng đã kích hoạt tính năng này trong phần [[Special:Preferences#mw-input-wpcheckuser-userinfocard-enable|tùy chọn]] của mình. [https://phabricator.wikimedia.org/T424466] * Do những rủi ro về bảo mật và quyền riêng tư của người dùng, chúng tôi đã vô hiệu hóa quyền truy cập vào các URL dẫn đến trang <bdi lang="zxx" dir="ltr"><code><nowiki>Special:MyPage</nowiki></code></bdi> khi sử dụng <bdi lang="zxx" dir="ltr"><code><nowiki>action=raw</nowiki></code></bdi>. Nếu điều này ảnh hưởng tới bạn, hãy cân nhắc xem bạn có thể sử dụng một phương thức nào đó thay thế hay không. Các URL dẫn đến trang <bdi lang="zxx" dir="ltr"><code><nowiki>Special:MyPage</nowiki></code></bdi> vẫn có thể truy cập và sử dụng được mà không cần sử dụng <bdi lang="zxx" dir="ltr"><code><nowiki>action=raw</nowiki></code></bdi>. Các URL cụ thể cho trang thành viên (v.d. <bdi lang="zxx" dir="ltr"><code><nowiki>User:Myusername</nowiki></code></bdi>) vẫn có thể được sử dụng với <bdi lang="zxx" dir="ltr"><code><nowiki>action=raw</nowiki></code></bdi>. [https://phabricator.wikimedia.org/T120386] * Nhờ một bản cập nhật, phần mềm tạo hình thu nhỏ đã được cải tiến. Nó bao gồm việc nâng cấp <bdi lang="zxx" dir="ltr"><code><nowiki>librsvg</nowiki></code></bdi> lên phiên bản 2.60 và <bdi lang="zxx" dir="ltr"><code><nowiki>ImageMagick</nowiki></code></bdi> lên 7, cũng như việc khắc phục một số lỗi tạo hình thu nhỏ đã tồn tại từ lâu chẳng hạn như lỗi hiển thị. [https://phabricator.wikimedia.org/T419815#12222841] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.47/wmf.17|MediaWiki]] '''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/35|Biên dịch]]&nbsp;• [[m:Tech|Nhờ giúp đỡ]]&nbsp;• [[m:Talk:Tech/News|Phản hồi]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].'' </div><section end="technews-2026-W35"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 20:45, ngày 24 tháng 8 năm 2026 (UTC) <!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30961208 --> == Bản tin Kỹ thuật: Tuần 36-2026 == <section begin="technews-2026-W36"/><div class="plainlinks"> '''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/36|Các bản dịch]] của bản tin này cũng có sẵn cho bạn. '''Nổi bật trong tuần''' * Một hình thức mới cho Danh sách Mong muốn Cộng đồng hiện đang được lấy ý kiến đóng góp. Bạn có thể [[m:Special:MyLanguage/Community Wishlist/Community Wishlist 2027|đọc các ý tưởng đề xuất trên Meta]]. Quy trình mới này nhằm nâng cao hiệu quả sàng lọc, bỏ phiếu và ưu tiên cho các mong muốn nhằm đảm bảo tính minh bạch và sự cân bằng giữa các nhóm dự án và phiên bản ngôn ngữ. Đợt tham vấn này sẽ kéo dài trong vòng hai tuần. '''Cập nhật cho biên tập viên''' * Bản phát hành mới nhất của ứng dụng Wikipedia dành cho Android bao gồm các cập nhật đối với tính năng Đã lưu (Saved), giúp trải nghiệm lưu bài viết trên ứng dụng trở nên đồng bộ hơn với phiên bản iOS và Web. Bản cập nhật này thiết kế lại tab Đã lưu với giao diện “Tất cả bài viết”, xóa bỏ danh sách đọc mặc định “Đã lưu”, đổi tên các danh sách đọc thành “Bộ sưu tập” (Collections) và hiện đại hóa trải nghiệm lưu bài viết. [https://phabricator.wikimedia.org/T420788] * Tính năng [[mw:Special:MyLanguage/Readers/Reader Experience/Reading lists|Danh sách Đọc]] đã được kích hoạt cho tất cả người dùng đã đăng nhập trên Wikipedia tiếng Bengali, tiếng Trung, tiếng Séc và tiếng Việt vào ngày 25 tháng 8, sau vài tháng hoạt động dưới dạng tính năng thử nghiệm (beta). Danh sách Đọc sẽ được triển khai đến tất cả người dùng đã đăng nhập trên Wikipedia tiếng Ả Rập, tiếng Pháp và tiếng Indonesia vào ngày 1 tháng 9, sau đó là Wikipedia tiếng Anh vào ngày 14 tháng 9, và trên tất cả các wiki Wikipedia còn lại vào ngày 28 tháng 9. * Vào cuối tháng này, một số độc giả chưa đăng nhập trên Wikipedia tiếng Bengali, tiếng Séc, tiếng Ba Tư, tiếng Anh và tiếng Ba Lan sử dụng giao diện Minerva trên thiết bị di động sẽ nhìn thấy một [[mw:Special:MyLanguage/Readers/Reader_Growth/Minimal_Minerva|thanh điều hướng được cập nhật]] trong [[:w:vi:Thử nghiệm A/B|thử nghiệm A/B]]. Thử nghiệm này sẽ so sánh thanh điều hướng hiện tại với phiên bản mới được thiết kế nhằm giúp người dùng tìm kiếm thông tin một cách nhanh chóng và dễ dàng hơn. Mục tiêu là xác định xem những thay đổi này có khuyến khích độc giả quay lại thường xuyên hơn hay không. Thử nghiệm này sẽ không làm thay đổi trải nghiệm của người dùng và/hoặc biên tập viên đã đăng nhập. * Các biên tập viên chuyên bảo trì các trang đổi hướng, bản mẫu và thể loại được sử dụng trên các trang đổi hướng nay có thêm các phương thức cải tiến để tìm kiếm và quản lý trang đổi hướng. Trước đây, các trang đổi hướng không thể tìm kiếm được. Hai từ khóa tìm kiếm mới, <bdi lang="zxx" dir="ltr"><code><nowiki>onlyredirects:</nowiki></code></bdi> và <bdi lang="zxx" dir="ltr"><code><nowiki>withredirects:</nowiki></code></bdi>, giờ đây cho phép tìm kiếm trực tiếp các trang đổi hướng và có thể kết hợp với các từ khóa hiện có như <bdi lang="zxx" dir="ltr"><code><nowiki>incategory:</nowiki></code></bdi>, <bdi lang="zxx" dir="ltr"><code><nowiki>intitle:</nowiki></code></bdi> và <bdi lang="zxx" dir="ltr"><code><nowiki>insource:</nowiki></code></bdi>. [https://phabricator.wikimedia.org/T204089] * Các công cụ tìm kiếm ISBN để tạo các nguồn trích dẫn gần đây đã không hoạt động do các vấn đề liên quan đến dịch vụ bên ngoài. Các nhà phát triển đang nỗ lực để tìm giải pháp khắc phục. [https://phabricator.wikimedia.org/T435179] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:30}} {{PLURAL:30|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, một vấn đề khiến cho việc tìm kiếm trang theo thể loại sử dụng <bdi lang="zxx" dir="ltr"><code><nowiki>deepcat</nowiki></code></bdi> có thể không trả về kết quả hoặc trả về kết quả không liên quan nay đã được giải quyết. [https://phabricator.wikimedia.org/T414859] '''Cập nhật cho những người đóng góp vào mảng kỹ thuật''' * Tên miền của URL cho hình thu nhỏ đang được thay đổi từ $1 sang thumb.wikimedia.org. Các URL cũ sẽ tiếp tục hoạt động trong tương lai gần, nhưng MediaWiki sẽ chuyển sang sử dụng tên miền mới. Các URL trỏ đến các loại tập tin đa phương tiện khác như tập tin gốc, video và tập tin chuyển mã vẫn sẽ được phục vụ từ upload.wikimedia.org. [https://phabricator.wikimedia.org/T427465] * [https://www.mediawiki.org/w/index.php?api=wmf-math%2Fv1&title=Special%3ARestSandbox API Toán học (Math API)] của Wikimedia hiện đã lỗi thời và không còn được hỗ trợ. Các điểm cuối (endpoints) này sẽ chính thức ngừng hoạt động hoàn toàn vào cuối tháng 9 năm 2026. Các nhà phát triển gọi các điểm cuối này nên chuyển sang các giải pháp hiển thị toán học thay thế, chẳng hạn như [https://developer.mozilla.org/en-US/docs/Web/MathML MathML] tích hợp sẵn hoặc [https://www.mathjax.org/ MathJax]. Các hệ thống MediaWiki được cài đặt bởi bên thứ ba sử dụng phần mở rộng Math để hiển thị công thức bắt buộc phải nâng cấp lên phiên bản v1.43 trở lên để tránh gián đoạn dịch vụ. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.47/wmf.18|MediaWiki]] '''Chuyên sâu''' * Đọc thêm về [[mw:Special:MyLanguage/Edit_check/TextMatch|TextMatch]] trong một bài viết trên Diff có tiêu đề: [[diffblog:2026/08/28/custom-edit-suggestions-for-every-wiki-how-communities-are-shaping-suggestion-mode-with-textmatch/|Đề xuất sửa đổi tùy chỉnh cho mọi wiki: Cộng đồng đang định hình Chế độ Gợi ý với TextMatch như thế nào]]. '''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/36|Biên dịch]]&nbsp;• [[m:Tech|Nhờ giúp đỡ]]&nbsp;• [[m:Talk:Tech/News|Phản hồi]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].'' </div><section end="technews-2026-W36"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 20:53, ngày 31 tháng 8 năm 2026 (UTC) <!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30990659 --> == Bản tin Kỹ thuật: Tuần 37-2026 == <section begin="technews-2026-W37"/><div class="plainlinks"> '''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/37|Các bản dịch]] của bản tin này cũng có sẵn cho bạn. '''Cập nhật cho biên tập viên''' * Tính năng [[mw:Special:MyLanguage/Help:Growth/Tools/Add_a_link|Thêm Liên kết]] đã được nâng cấp cho người dùng trên Wikipedia tiếng Anh với khả năng phát hiện tốt hơn các liên kết có sự khác biệt về cách viết hoa. Cải tiến này sẽ giúp giảm bớt những gợi ý mơ hồ gây ra do sự khác biệt về cách viết viết hoa trong tiêu đề bài viết, bao gồm cả những bài viết về các sản phẩm văn hóa. Hiện kế hoạch cải tiến giai đoạn 2 đã được lên lịch, kế hoạch cũng sẽ nhằm mục đích chuẩn bị phát hành tính năng này ở các ngôn ngữ khác. [https://phabricator.wikimedia.org/T435526#12240876] [https://phabricator.wikimedia.org/T434259] * Tính năng [[mw:Special:MyLanguage/Article_guidance|Chỉ dẫn bài viết]] sẽ được bật theo mặc định cho các biên tập viên mới trên Wikipedia tiếng Anh Đơn giản và Wikipedia tiếng Thổ Nhĩ Kỳ kể từ ngày 10 tháng 9 năm 2026 sau khi đã trải qua [[mw:Special:MyLanguage/Article_guidance/Updates#Summary_of_experiment_result|một cuộc thử nghiệm]]. Các biên tập viên mới có từ 0 đến 99 sửa đổi sẽ tự động nhìn thấy tính năng này khi họ nhấn vào liên kết đỏ hoặc sử dụng tùy chọn "[[tr:Vikipedi:Madde_sihirbazı|Madde oluşturto]]" (tạo bài viết) trên Wikipedia tiếng Thổ Nhĩ Kỳ để tạo bài viết mới. Thay đổi này nhằm mục đích giúp các biên tập viên mới tạo các bài viết có chất lượng cao hơn và đáp ứng các tiêu chuẩn của từng dự án Wikipedia. [[phab:maniphest/query/z3tcTjmLMxk5/#R|Các cải tiến bổ sung]] sẽ tiếp tục được thực hiện dựa trên kết quả thử nghiệm và phản hồi từ cộng đồng. * Công cụ [https://pageviews.wmcloud.org Phân tích Lượt xem Trang] nhằm cho phép người dùng so sánh lượt xem giữa nhiều trang, năm nay đã tròn 10 tuổi và được bổ sung thêm một số tính năng mới. Chúng bao gồm [[toolforge:wikinav|WikiNav]] nhằm cung cấp thông tin chuyên sâu vào cách độc giả Wikipedia khám phá nội dung, thống kê sửa đổi trong mục [https://pageviews.wmcloud.org/siteviews?range=latest-30&sites=en.wikipedia.org Siteviews], khả năng [https://pageviews.wmcloud.org/massviews?source=wikiproject&project=en.wikipedia.org tra cứu bài viết thuộc Dự án Wiki], cũng như hỗ trợ chế độ tối. [https://phabricator.wikimedia.org/T378549] * Một thanh điều hướng [[mw:Special:MyLanguage/Readers/Reader_Growth/Minimal_Minerva|Minerva được đơn giản hóa về mặt trực quan]] đang được thử nghiệm dành cho các độc giả chưa đăng nhập sử dụng giao diện web di động trên các dự án Wikipedia tiếng Bengal, tiếng Séc, tiếng Anh, tiếng Ba Tư và tiếng Ba Lan. Thử nghiệm này nhằm xác định xem việc đơn giản hóa thanh điều hướng có cải thiện việc giữ chân độc giả hay không. Thử nghiệm sẽ diễn ra từ ngày 31 tháng 8 đến ngày 28 tháng 9, và người dùng không cần phải thực hiện bất kỳ thao tác nào. * [[m:Special:MyLanguage/WMDE Technical Wishes|Nhóm Mong muốn Kỹ thuật của WMDE]] đang thực hiện việc cải tiến [[en:Wikipedia:VisualEditor/Named references|tên nguồn tham khảo được tạo tự động trong Trình Soạn thảo Trực quan]]. Các biên tập viên sẽ chỉ nhận thấy một thay đổi nhỏ kể từ tuần này. Khi thêm tên nguồn tham khảo tự động việc đánh số sẽ bắt đầu tại <bdi lang="zxx" dir="ltr"><code><nowiki>:1</nowiki></code></bdi> thay vì <bdi lang="zxx" dir="ltr"><code><nowiki>:0</nowiki></code></bdi>. Đọc thêm trên [[m:WMDE Technical Wishes/References/VisualEditor automatic reference names|trang dự án]]. [https://gerrit.wikimedia.org/r/c/VisualEditor/VisualEditor/+/1332704] * Tất cả các wiki sẽ [[m:Special:MyLanguage/Tech/Server switch|chuyển sang chế độ chỉ đọc trong vài phút]] vào ngày 23 tháng 9. Kế hoạch dự kiến diễn ra lúc 14:00 UTC. Thông tin thêm về kế hoạch này sẽ được xuất bản trong Bản tin Kỹ thuật và cũng sẽ được đăng lên trên từng wiki trong các tuần tiếp theo. [https://phabricator.wikimedia.org/T433363] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:25}} {{PLURAL:25|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, một vấn đề khiến cho [[mw:Special:MyLanguage/Parsoid|Parsoid]] có thể xử lý sai các thẻ nowiki được lồng nhau, khiến nội dung bị mất và hiển thị nội dung không mong muốn nay đã được giải quyết. [https://phabricator.wikimedia.org/T435116] '''Cập nhật cho những người đóng góp vào mảng kỹ thuật''' * Bảo quản viên giao diện có thể cấu hình các tiện ích từ [[MediaWiki:Gadgets-definition]]. Định dạng của định nghĩa tiện ích đã được cập nhật và không còn yêu cầu tùy chọn <bdi lang="zxx" dir="ltr"><code><nowiki>ResourceLoader</nowiki></code></bdi> nữa, vì các tiện ích luôn được tải thông qua <bdi lang="zxx" dir="ltr"><code><nowiki>ResourceLoader</nowiki></code></bdi>. Điều này giúp đơn giản hóa cấu hình tiện ích bằng cách loại bỏ một tùy chọn không còn cần thiết nữa, giúp việc định nghĩa tiện ích trở nên dễ dàng hơn cho các bảo quản viên. [https://phabricator.wikimedia.org/T298199] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.47/wmf.19|MediaWiki]] '''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/37|Biên dịch]]&nbsp;• [[m:Tech|Nhờ giúp đỡ]]&nbsp;• [[m:Talk:Tech/News|Phản hồi]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].'' </div><section end="technews-2026-W37"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 18:44, ngày 7 tháng 9 năm 2026 (UTC) <!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=31008437 --> == Bản tin Kỹ thuật: Tuần 38-2026 == <section begin="technews-2026-W38"/><div class="plainlinks"> '''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/38|Các bản dịch]] của bản tin này cũng có sẵn cho bạn. '''Nổi bật trong tuần''' * Nhóm Future Audiences đã mở một [[en:Special:MyLanguage/Wikipedia:Village pump (proposals)#New proposed experiment to let readers know about “Google preferred sources”|cuộc thảo luận trên Wikipedia tiếng Anh]] về một đề xuất thử nghiệm mới nhằm hiển thị thông báo tạm thời về tính năng mới [https://blog.google/products-and-platforms/products/search/original-high-quality-content-search/ Nguồn Ưu tiên của Google] dành cho độc giả Wikipedia truy cập từ Google. Thử nghiệm này nhằm kiểm tra xem liệu thông báo này có giúp thu hút khách truy cập quay lại Wikipedia thường xuyên hơn hay không. Tính năng Nguồn Ưu tiên cho phép người dùng chọn các trang web mà họ tin tưởng nhằm giúp Google có thể hiển thị nội dung từ các nguồn này một cách nổi bật hơn trong trải nghiệm trên Tìm kiếm và AI. Chúng tôi mong muốn triển khai thử nghiệm này trên các ngôn ngữ khác mà Google hỗ trợ và rất hoan nghênh sự hỗ trợ trong việc khởi xướng thảo luận trên các dự án wiki khác. Nếu bạn quan tâm, vui lòng liên hệ nhóm Future Audiences trên [[m:Special:MyLanguage/Future Audiences/Preferred sources|trang thảo luận]]. '''Cập nhật cho biên tập viên''' * Nền tảng trò chuyện Discord ra mắt cơ chế (framework) tự thiết lập mới nhằm cho phép các trang web có thể sử dụng để tùy chỉnh cách hiển thị những liên kết đó khi được chia sẻ trên Discord. Nhóm Future Audiences dự định sẽ bắt đầu sử dụng cơ chế này để cải thiện cách hiển thị các liên kết Wikipedia khi được chia sẻ trên Discord, nhằm ghi công sửa đổi của các tình nguyện viên một cách tốt hơn. Hình thức và cách thức hoạt động của liên kết sẽ không thay đổi trong giai đoạn đầu của dự án này vì chúng tôi muốn thu thập một số dữ liệu cơ sở trước để đánh giá tác động của những thay đổi này trong tương lai. Dù vậy, nếu các thành viên cộng đồng đang hoạt động trên Discord có phát hiện ra bất kỳ vấn đề nào, họ có thể liên hệ qua [[phab:tag/future-audiences/|Phabricator]] hoặc [[m:Special:MyLanguage/Future Audiences|Metawiki]]. * Nhóm Phát triển Độc giả sẽ tiến hành một thử nghiệm xem liệu [[mw:Special:MyLanguage/Readers/Reader_Growth/Compact Lead|việc rút gọn phần mở đầu của bài viết]] kèm theo nút "đọc thêm" có giúp cải thiện việc giữ chân người đọc hay không. Thử nghiệm này sẽ bắt đầu vào ngày 17 tháng 9 trên các phiên bản Wikipedia tiếng Ả Rập, tiếng Tây Ban Nha, tiếng Pháp, tiếng Indonesia, tiếng Ý, tiếng Nhật, tiếng Bồ Đào Nha, tiếng Việt và tiếng Trung và sẽ kéo dài trong bốn tuần. * Tất cả các wiki sẽ [[m:Special:MyLanguage/Tech/Server switch|chuyển sang chế độ chỉ đọc trong vòng vài phút]] vào ngày 23 tháng 9. Kế hoạch được lên lịch lúc 14:00 UTC. Thông tin chi tiết sẽ được đăng tải lên Bản tin Kỹ thuật và cũng sẽ được đăng lên từng wiki riêng lẻ trong tuần tới. [https://phabricator.wikimedia.org/T433363] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:28}} {{PLURAL:28|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, một vấn đề khiến [https://wikistats.wmcloud.org/ Wikistats] dành cho Wikipedia trả về lỗi HTTP 500 và không thể truy cập được, nay đã được giải quyết. [https://phabricator.wikimedia.org/T435959] '''Cập nhật cho những người đóng góp vào mảng kỹ thuật''' * Các nhà phát triển đang bảo trì công cụ truy vấn các bảng liên kết của Wikimedia Commons cần cập nhật mã nguồn của mình để kết nối với cụm cơ sở dữ liệu (database cluster) x4 mới. Các bảng liên kết đã được chuyển từ cụm s4 sang x4, và sẽ không còn nhận được cập nhật trên cụm s4 nữa. Các bảng trang và đổi hướng vẫn sẽ tiếp tục khả dụng trên cả hai cụm này. Một bản sao dữ liệu wiki (wiki replica) cho cụm x4 sẽ được thiết lập sau này. Thay đổi này được thực hiện do cụm s4 đã trở nên quá lớn gây ảnh hưởng đến hiệu quả vận hành của bảng liên kết. Bạn có thể [[wikitech:Special:MyLanguage/News/2026 Commons links tables database split|đọc thêm]]. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.47/wmf.20|MediaWiki]] '''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/38|Biên dịch]]&nbsp;• [[m:Tech|Nhờ giúp đỡ]]&nbsp;• [[m:Talk:Tech/News|Phản hồi]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].'' </div><section end="technews-2026-W38"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 15:31, ngày 14 tháng 9 năm 2026 (UTC) <!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=31039826 --> == Chuyển đổi máy chủ - Wiki của bạn sẽ sớm chuyển sang chế độ chỉ đọc trong một khoảng thời gian ngắn == <section begin="server-switch"/><div class="plainlinks"> [[:m:Special:MyLanguage/Tech/Server switch|Đọc thông báo này bằng ngôn ngữ khác]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-Tech%2FServer+switch&language=&action=page&filter= {{int:please-translate}}] [[foundation:|Quỹ Wikimedia]] sẽ chuyển đổi lưu lượng qua lại giữa các trung tâm dữ liệu. Điều này sẽ giúp đảm bảo rằng Wikipedia và các wiki khác của Wikimedia vẫn có thể duy trì trực tuyến ngay cả sau tình huống thiên tai. Mọi lưu lượng sẽ chuyển đổi vào ngày '''{{#time:j xg|2026-09-23|vi}}'''. Việc chuyển đổi này sẽ bắt đầu vào lúc '''[https://zonestamp.toolforge.org/{{#time:U|2026-09-23T14:00|en}} {{#time:H:i e|2026-09-23T14:00}}]'''. Dù vậy, vì một số hạn chế của phần mềm [[mw:Special:MyLanguage/Manual:What is MediaWiki?|MediaWiki]], mọi sửa đổi đều phải bị ngưng lại khi việc chuyển đổi được thực hiện. Chúng tôi chân thành xin lỗi vì sự gián đoạn này, và chúng tôi đang tìm cách giảm thiểu những tình huống như vậy trong tương lai. Một biểu ngữ sẽ được hiển thị trên tất cả các wiki 30 phút trước khi quá trình này diễn ra. Biểu ngữ sẽ tiếp tục được hiển thị cho tới khi kết thúc quá trình này. Bạn có thể đóng góp bằng cách [https://meta.wikimedia.org/w/index.php?title=Special%3ATranslate&group=Centralnotice-tgroup-read_only_banner&task=view&language=&filter=&action=translate biên dịch và hiệu đính] dòng biểu ngữ này. '''Bạn sẽ có thể đọc, nhưng không thể sửa đổi, tất cả wiki trong một khoảng thời gian ngắn.''' * Bạn sẽ không thể sửa đổi trong vòng tối đa một giờ vào {{#time:l j xg Y|2026-09-23|vi}}. * Nếu bạn cố gắng sửa đổi hay lưu trang trong khoảng thời gian này, bạn sẽ nhìn thấy một thông báo lỗi. Chúng tôi hy vọng sẽ không có sửa đổi nào bị mất trong khoảng thời gian đó, nhưng chúng tôi không thể đảm bảo được điều đó. Nếu bạn nhìn thấy thông báo lỗi, vui lòng chờ đợi cho đến khi mọi thứ trở lại bình thường. Sau đó bạn sẽ có thể lưu lại sửa đổi của mình. Tuy nhiên, chúng tôi khuyên bạn trước hết nên tạo một bản sao những thay đổi của bạn, nhằm mục đích đề phòng. ''Những ảnh hưởng khác'': * Tác vụ xử lý nền sẽ bị chậm hơn và một số có thể bị ngừng hẳn. Các liên kết đỏ có thể sẽ không được cập nhật nhanh chóng như thường lệ. Nếu bạn tạo một bài viết đã được liên kết ở một nơi khác, liên kết đó vẫn sẽ có màu đỏ lâu hơn bình thường. Một số đoạn mã tốn nhiều thời gian chạy sẽ phải dừng lại. * Chúng tôi hy vọng việc triển khai mã nguồn vẫn sẽ diễn ra như bất kỳ tuần nào khác. Tuy vậy, một vài trường hợp đóng băng mã nguồn có thể xảy ra nếu quá trình yêu cầu chúng sau đó. * [[mw:Special:MyLanguage/GitLab|GitLab]] sẽ không khả dụng trong khoảng 90 phút. Dự án này có thể bị hoãn lại nếu cần thiết. Bạn có thể [[wikitech:Switch_Datacenter|đọc lịch trình tại wikitech.wikimedia.org]]. Bất kỳ thay đổi nào đều sẽ được thông báo trong lịch trình này. '''Xin hãy chia sẻ thông tin này với cộng đồng của bạn.'''</div><section end="server-switch"/> [[m:user:Trizek (WMF)|Trizek (WMF)]] 12:58, ngày 15 tháng 9 năm 2026 (UTC) <!-- Tin nhắn của Thành viên:Trizek (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Distribution_list/Non-Technical_Village_Pumps_distribution_list&oldid=30513874 --> == Your feedback wanted: Remove ''(Language link added:) and similar'' edits from Special:RecentChanges == ''(Apologies for posting in English. You can help by translating it)'' Hello, I’m Danny from [[:en:w:Wikimedia_Deutschland|Wikimedia Deutschland’s]] [[m:Wikidata_For_Wikimedia_Projects|Wikidata For Wikimedia Projects]] team.<br/> We have been investigating and examining how Wikidata’s use in the [[Special:RecentChanges]] and [[Special:Watchlist]] pages can be made to be more useful, or less ‘noisy’ (fewer edits that have little value to the reader). We are currently exploring to make a change in the volume and the type of Wikidata edits that appear in these pages, and '''we need your feedback''' to help us ensure this is a positive change for the Wikis and won’t disrupt your workflows.<br/> Language links are also known as sitelinks or interlanguage links and describe when a Wikidata item is connected to a Wiki, adding it to the language dropdown tool for other connected Wikis. [[File:Types of Lang Link changes.png|x350px|frame|A variety of "Language Link" edits as seen in the Recent Changes feed]] The request for feedback is whether you support the removal of these language link edits from the Recent Changes and Watchlist feed, or would you oppose such a change and if so, why? Please share you thoughts on the dedicated '''[[m:Talk:Wikidata_For_Wikimedia_Projects/Clearer_Wikidata_Edit_Summaries/Hide_Language_Link_edits|metawiki Talk page]]'''. Further information about this change: [[m:Wikidata_For_Wikimedia_Projects/Clearer_Wikidata_Edit_Summaries/Hide_Language_Link_edits|m:Wikidata_For_Wikimedia_Projects/Hide_Language_Link_edits]] Thank you for any participation or feedback you give, -- [[m:User:Danny_Benjafield_(WMDE)|User:Danny Benjafield (WMDE)]] 12:48, ngày 25 tháng 9 năm 2026 (UTC) <!-- Tin nhắn của Thành viên:Danny Benjafield (WMDE)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=User:Danny_Benjafield_(WMDE)/MassMessage_test_list&oldid=31081007 --> == Bản tin Kỹ thuật: Tuần 39-2026 == <section begin="technews-2026-W39"/><div class="plainlinks"> '''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/39|Các bản dịch]] của bản tin này cũng có sẵn cho bạn. '''Nổi bật trong tuần''' * [[m:Special:MyLanguage/Tech/Server switch|Tất cả các wiki sẽ chuyển sang chế độ chỉ đọc]] trong vòng vài phút vào thứ 4, ngày 23 tháng 9 năm 2026 lúc [https://zonestamp.toolforge.org/1790172000 14:00 UTC]. Điều này là nhằm phục vụ cho việc thử nghiệm chuyển đổi máy chủ cơ sở dữ liệu dự phòng, [[wikitech:Special:MyLanguage/Deployments/Yearly calendar|diễn ra hai lần trong một năm]]. Trong quá trình chuyển đổi này, toàn bộ lưu lượng trên các trang web của Wikimedia được chuyển từ trung tâm dữ liệu chính sang trung tâm dữ liệu dự phòng nhằm kiểm tra tính khả dụng và ngăn ngừa việc gián đoạn dịch vụ ngay cả trong những trường hợp khẩn cấp. [https://phabricator.wikimedia.org/T433363] '''Cập nhật cho biên tập viên''' * Nhóm Tăng trưởng đã thử nghiệm một thông báo sau khi sửa đổi mới được thiết kế nhằm [[mw:Special:MyLanguage/Contributors/Account Creation Experiments#4. Encourage Temporary Accounts to Register|khuyến khích những người đang có Tài khoản Tạm thời đăng ký tài khoản vĩnh viễn]]. Thông báo mới này thay thế cho nhiều hộp thoại kèm thông báo chào mừng xuất hiện cùng lúc bằng một thông báo duy nhất nhằm nêu bật những lợi ích của việc tạo một tài khoản. Thử nghiệm này đã giúp tăng tỷ lệ tạo tài khoản vĩnh viễn từ 1.94% lên 3.66%, tương đương với mức tăng khoảng 87%. Thay đổi này giờ đây sẽ được triển khai đến tất cả các dự án wiki. [https://phabricator.wikimedia.org/T433551] * Đối với các biên tập viên Wikipedia sử dụng [[Special:Preferences#mw-prefsection-betafeatures|Tính năng Beta "Chế độ gợi ý"]], hiện có một [[Special:Preferences#mw-input-wpvisualeditor-editcheck-experimental|tùy chọn mới trong phần tùy chọn của người dùng]] nhằm hiển thị các gợi ý và kiểm tra sửa đổi mang tính "thử nghiệm". Những loại này được liệt kê tại [[Special:EditChecks#experimental-checks|Đặc biệt:EditChecks]], và nhằm mục đích để lập trình viên thử nghiệm sớm cũng như để thu thập phản hồi từ những người dùng có kinh nghiệm. Các bảo quản viên có thể thay đổi [[mw:Special:MyLanguage/Edit check/Configuration|chi tiết cấu hình]] cho từng gợi ý như thường lệ. Bảo quản viên cũng có thể [[mw:Special:MyLanguage/Help:Suggestion mode#Experimental Suggestions|sử dụng tính năng này]] để giúp thử nghiệm những ý tưởng của cộng đồng về những quy tắc kiểm tra và gợi ý do cộng đồng tạo. Những loại tính năng thử nghiệm này sẽ có giao diện trực quan khác biệt hơn vào cuối tuần này. [[mw:Talk:VisualEditor/Suggestion Mode|Mọi phản hồi đều được hoan nghênh]]. * [[m:CEE Technical Village Pump|Phòng Thảo luận Kỹ thuật CEE]] (CEE Technical Village Pump) đã được mở để đóng vai trò như một không gian thảo luận và hợp tác kỹ thuật của các cộng đồng Wikimedia tại khu vực Trung và Đông Âu. * Một công cụ mới, [[mw:Special:MyLanguage/Language Onboarding and Development/Starter kit|Bộ Công cụ Khởi đầu]] (Starter Kit), nay đã có sẵn dành cho các cộng đồng Wikipedia ngôn ngữ mới và quy mô nhỏ. Công cụ này tập hợp những nhiệm vụ có hướng dẫn, công cụ và tài nguyên nhằm giúp cộng đồng có thể bắt đầu, theo dõi tiến độ, cũng như hợp tác cùng với cộng đồng Wikimedia rộng lớn hơn. Bộ Công cụ Khởi đầu được vận hành trên nền tảng Wikimedia Toolforge và được thiết kế dành cho các dự án Wikipedia có ít hơn 50.000 bài viết. Tìm hiểu thêm cách Bộ Công cụ Khởi đầu hoạt động và cách cộng đồng đang sử dụng công cụ này trong [[diffblog:2026/09/18/introducing-starter-kit-for-new-and-small-language-wikipedias/|bài viết này trên blog Diff]]. * Nhóm Phát triển Người đọc sẽ mở một đợt tái thử nghiệm của [[mw:Special:MyLanguage/Readers/Reader Growth/Image Browsing|thử nghiệm băng chuyền hình ảnh]]. Đợt tái thử nghiệm này sẽ sử dụng ba phiên bản thiết kế mới, được cập nhật dựa trên phản hồi của cộng đồng. Nhóm sẽ đánh giá kết quả và cùng cộng đồng quyết định xem có tiếp tục triển khai tính năng này hay không. Thử nghiệm này sẽ bắt đầu vào tuần ngày 28 tháng 9 và sẽ được thực hiện trên Wikipedia tiếng Ả Rập, tiếng Bengal, tiếng Trung, tiếng Séc, tiếng Anh, tiếng Ba Tư, tiếng Pháp, tiếng Đức, tiếng Indonesia, tiếng Nhật, tiếng Ba Lan, tiếng Bồ Đào Nha, tiếng Tây Ban Nha, tiếng Thụy Điển và tiếng Việt. * Sau khi triển khai thành công trên Wikipedia tiếng Ả Rập, tiếng Bengal, tiếng Trung, tiếng Séc, tiếng Anh, tiếng Pháp, tiếng Indonesia và tiếng Việt, [[mw:Special:MyLanguage/Readers/Reader Experience/Reading lists|tính năng Danh sách Đọc]] do nhóm Trải nghiệm Người đọc phát triển sẽ có mặt cho tất cả người dùng đã đăng nhập trên tất cả các dự án Wikipedia kể từ ngày 28 tháng 9. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:28}} {{PLURAL:28|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, một vấn đề khiến cho đoạn mã trạng thái cố vấn liên tục cập nhật trạng thái của cố vấn ngay cả khi không có gì thay đổi, tạo ra những mục không cần thiết trên Thay đổi Gần đây, nay đã được giải quyết. [https://phabricator.wikimedia.org/T436659] '''Cập nhật cho những người đóng góp vào mảng kỹ thuật''' * API truy vấn danh sách <bdi lang="zxx" dir="ltr"><code><nowiki>abusefilters</nowiki></code></bdi>, vốn được sử dụng để lấy thông tin chi tiết về các bộ lọc sai phạm đang hoạt động hoặc đã tắt được thiết lập trên wiki, đã được cập nhật để hỗ trợ tham số cấu hình <bdi lang="zxx" dir="ltr"><code><nowiki>formatversion=2</nowiki></code></bdi>, điều này dẫn đến những thay đổi gây ra lỗi (breaking changes) đến phản hồi của API. Tất cả người dùng đang bảo trì các đoạn mã người dùng hoặc đoạn mã khác cần kiểm tra xem họ có đang sử dụng API truy vấn danh sách <bdi lang="zxx" dir="ltr"><code><nowiki>abusefilters</nowiki></code></bdi> hay không, đồng thời điều chỉnh để giải quyết những thay đổi gây ra lỗi này. [https://phabricator.wikimedia.org/T435828] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.47/wmf.21|MediaWiki]] '''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/39|Biên dịch]]&nbsp;• [[m:Tech|Nhờ giúp đỡ]]&nbsp;• [[m:Talk:Tech/News|Phản hồi]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].'' </div><section end="technews-2026-W39"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 11:56, ngày 27 tháng 9 năm 2026 (UTC) <!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=31085309 --> == Bản tin Kỹ thuật: Tuần 40-2026 == <section begin="technews-2026-W40"/><div class="plainlinks"> '''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/40|Các bản dịch]] của bản tin này cũng có sẵn cho bạn. '''Cập nhật cho biên tập viên''' * Người dùng sử dụng giao diện mặc định trên trang web dành cho máy tính và thiết bị di động (lần lượt là Vector 2022 và Minerva) nay sẽ được thông báo nếu gợi ý tìm kiếm được hiển thị khi họ nhập vào hộp Tìm kiếm đến từ các trang đổi hướng. Trước đây, người dùng có thể bị bối rối khi gợi ý kết quả tìm kiếm hàng đầu không khớp chính xác với những gì họ nhập vào. Thông báo trang đổi hướng mới này giúp làm rõ rằng những gợi ý này không phải ngẫu nhiên mà có liên quan đến nội dung tìm kiếm. Các trang được gợi ý có thể là các trang đổi hướng đến những bài viết đích phù hợp nhất với nội dung được tìm kiếm. [https://phabricator.wikimedia.org/T303013] * Người dùng Wikipedia chưa đăng nhập trên giao diện web di dộng sẽ bắt đầu nhìn thấy nút đánh dấu (bookmark) để lưu các bài viết vào [[mw:Special:MyLanguage/Readers/Reader Experience/Reading lists|danh sách đọc]] của họ thay vì nút Sao theo dõi (Watchstar) hiện tại. Khi được nhấn vào, nút đánh dấu sẽ yêu cầu người dùng đăng nhập hoặc tạo tài khoản để lưu bài viết và đọc lại sau. Một thử nghiệm trước đó cho thấy biểu tượng đánh dấu có khả năng khuyến khích người dùng chưa đăng nhập tạo tài khoản cao gấp bốn lần so với nút Sao theo dõi. Thay đổi này là một phần trong nỗ lực nhằm khuyến khích nhiều độc giả trở thành chủ tài khoản hơn và sử dụng các tính năng giúp họ lưu lại và quay lại để đọc nội dung. [https://phabricator.wikimedia.org/T438769] * Một thử nghiệm sẽ bắt đầu vào ngày 29 tháng 9 trên các phiên bản Wikipedia tiếng Tây Ban Nha, tiếng Ả Rập, tiếng Anh và tiếng Pháp nhằm đơn giản hóa trải nghiệm mà người dùng gặp ngay sau khi tạo tài khoản. Thử nghiệm này sẽ khám phá xem việc loại bỏ trở ngại từ Khảo sát Chào mừng người mới hiện tại có giúp người dùng mới dễ dàng hiểu được rằng cần phải làm những gì tiếp theo hơn hay không. Cuộc thử nghiệm này sẽ kéo dài đến hết tháng 10. [https://phabricator.wikimedia.org/T430058] * [[m:Special:MyLanguage/Product and Technology Advisory Council|Hội đồng Cố vấn về Sản phẩm và Công nghệ]] đã kêu gọi cộng đồng đề xuất các chủ đề mà hội đồng nên xem xét và thảo luận với Quỹ Wikimedia. Các biên tập viên và tình nguyện viên kỹ thuật được mời đóng góp chủ đề tại [[m:Talk:Product and Technology Advisory Council|trang thảo luận của hội đồng]]. * Cuối tuần này, các cộng đồng sẽ có thể cấu hình tính năng [[mw:Special:MyLanguage/Help:Edit check|Kiểm tra và Gợi ý Sửa đổi]] để chúng được [[mw:Special:MyLanguage/Edit check/Configuration#extraNamespaces|hiển thị trong các không gian tên bổ sung]], chẳng hạn như không gian tên <bdi lang="zxx" dir="ltr"><code><nowiki>Draft:</nowiki></code></bdi>. [[mw:Talk:VisualEditor/Suggestion Mode|Mọi ý kiến ​​đóng góp đều được hoan nghênh]]. * Một lỗi trong [[m:Special:GlobalWatchlist|Danh sách Theo dõi Toàn cục]] đang khiến cho trang không thể tải được đối với người dùng có những thay đổi chưa được xem trên Wikimedia Commons. Các lập trình viên đang tiến hành khắc phục lỗi này. Trong thời gian đó, những người dùng bị ảnh hưởng có thể làm theo các giải pháp thay thế được nêu trong mục trợ giúp [[mw:Special:MyLanguage/Extension:GlobalWatchlist#GlobalWatchlist temporarily broken for users with Wikimedia Commons|có liên quan]]. * Các từ ma thuật mới <bdi lang="zxx" dir="ltr"><code><nowiki>{{CATEGORYSORT:TIMESTAMP}}</nowiki></code></bdi> và <bdi lang="zxx" dir="ltr"><code><nowiki>{{CATEGORYSORT:RTIMESTAMP}}</nowiki></code></bdi> hiện đã có sẵn để sử dụng. Chúng có khả năng thay đổi cách sắp xếp mặc định của các thể loại dựa trên dấu thời gian xếp thể loại. [https://phabricator.wikimedia.org/T433768] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:20}} {{PLURAL:20|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, sự cố không thể truy cập được [https://wikistats.wmcloud.org/ Wikistats] cho các trang Wikipedia nay đã được giải quyết. [https://phabricator.wikimedia.org/T435959] '''Cập nhật cho những người đóng góp vào mảng kỹ thuật''' * Việc chuyển đổi trung tâm dữ liệu, vốn dự kiến được ​​diễn ra vào ngày 23 tháng 9, đã bị hoãn lại. [[diffblog:2025/03/12/hear-that-the-wikis-go-silent-twice-a-year/|Cuộc diễn tập Equinox]] đã bộc lộ các vấn đề về năng lực hệ thống, khiến việc chuyển đổi toàn bộ dịch vụ sang trung tâm dữ liệu khác không thể thực hiện được. Quy trình này đã được tạm dừng để ưu tiên điều tra vấn đề nêu trên, nhằm đảm bảo rằng chúng tôi vẫn có thể phục vụ người dùng một cách ổn định và tin cậy. Một cuộc diễn tập mới sẽ được lên kế hoạch sau. Trong thời gian này, mọi lưu lượng truy cập và hoạt động sửa đổi vẫn sẽ diễn ra như bình thường. * Vào ngày 23 tháng 9, một sự cố mất điện đã ảnh hưởng đến tất cả các dự án wiki trong một khoảng thời gian ngắn, gây ra vấn đề gián đoạn cho cả chế độ đọc và sửa đổi. Sự cố này cũng ảnh hưởng đến Gerrit. Điều này không liên quan gì đến việc hoãn chuyển đổi trung tâm dữ liệu. [https://www.wikimediastatus.net/incidents/9fm19t8qykk8] * [[mw:Special:MyLanguage/Help:Extension:Produnto|Produnto]] đã được triển khai trên mediawiki.org và [[phab:T421436|một số wiki sử dụng ngôn ngữ Ấn Độ]]. Chúng tôi mong nhận được phản hồi của bạn về sản phẩm thử nghiệm này. Produnto cho phép người dùng sử dụng các mô đun Lua được lưu trữ trên [[gitlab:repos/lua|GitLab của Wikimedia]]. Nó giúp đơn giản hóa việc chia sẻ mã nguồn Lua giữa các wiki. Thay vì phải sao chép từng mô đun Lua riêng lẻ từ wiki này sang wiki khác, người dùng có thể dễ dàng chia sẻ các gói mã nguồn trên tất cả các wiki. * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.47/wmf.22|MediaWiki]] '''Các cuộc họp và sự kiện''' * [[m:Event:Cross-wiki Code Collaboration Workshop|Hội thảo cộng tác mã nguồn giữa các wiki]] sẽ được tổ chức trực tuyến vào ngày 2 tháng 10 lúc 12:30 UTC, quy tụ những cộng tác viên kỹ thuật Nam Á nhằm tìm hiểu về Produnto và bắt đầu thử nghiệm nó trên các phiên bản Wikipedia tiếng Hindi, tiếng Punjabi, tiếng Odia, tiếng Telugu và tiếng Malayalam. Produnto là một trình quản lý gói để triển khai các mô đun Lua được lưu trữ trên GitLab đến các wiki của Wikimedia và gần đây đã được triển khai trên một số wiki thí điểm. '''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/40|Biên dịch]]&nbsp;• [[m:Tech|Nhờ giúp đỡ]]&nbsp;• [[m:Talk:Tech/News|Phản hồi]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].'' </div><section end="technews-2026-W40"/> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 10:49, ngày 28 tháng 9 năm 2026 (UTC) <!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=31092225 --> == Wikidata Sitelink changes in Recent Changes and Watchlist == ''(Apologies for cross-posting in English, translating it will help spread the message)'' Editors on group 1 wikis, including Wikiquote, Wikibooks, Wikiversity, Wikivoyage, and Wikisource, will no longer see notifications on [[Special:RecentChanges|Recent Changes]] and [[Special:Watchlist|Watchlist]] when a link to ''another'' language version of a page is added, removed, or changed in its Wikidata item. This change will begin on '''October 5 at 07:00 UTC''' as a two-week trial to reduce high-volume, low-value notifications and make higher-value changes easier to identify. Editors who rely on these notifications should be aware of the change and can share feedback or concerns on the [[m:Wikidata For Wikimedia Projects/Clearer Wikidata Edit Summaries/Hide Language Link edits|project]] or [[m:Talk:Wikidata_For_Wikimedia_Projects/Clearer_Wikidata_Edit_Summaries/Hide_Language_Link_edits|talk page]].<br/>Please reach out if you have any questions, thank you! -- [[User:Danny_Benjafield_(WMDE)|Danny Benjafield (WMDE)]] ([[User_talk:Danny_Benjafield_(WMDE)|talk]]) sent via [[Thành viên:MediaWiki message delivery|MediaWiki message delivery]] ([[Thảo luận Thành viên:MediaWiki message delivery|thảo luận]]) 12:43, ngày 1 tháng 10 năm 2026 (UTC) <!-- Tin nhắn của Thành viên:Danny Benjafield (WMDE)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=User:Danny_Benjafield_(WMDE)/MassMessage_test_list&oldid=31106967 --> == Bản tin Kỹ thuật: Tuần 41-2026 == <section begin="technews-2026-W41"/><div class="plainlinks"> '''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/41|Các bản dịch]] của bản tin này cũng có sẵn cho bạn. '''Nổi bật trong tuần''' * Quy trình cho [[m:Special:MyLanguage/Community Wishlist/Community Wishlist 2027#Updated Community Wishlist Process 2027/2028|Danh sách mong muốn của cộng đồng]] năm nay [[m:Special:MyLanguage/Community Wishlist/Community Wishlist 2027#Updated Community Wishlist Process 2027/2028|đã được công bố]], có tính đến phản hồi từ cộng đồng. Quy trình gửi mong muốn sẽ [[m:Special:MyLanguage/Community Wishlist/FAQ#What is the deadline for submitting wishes?|kết thúc vào ngày 8 tháng 11]]. Năm nay, [[m:Special:MyLanguage/Community Wishlist/Community Wishlist 2027/Working group|một nhóm công tác (mở cho tình nguyện viên tham gia)]] gồm các thành viên cộng đồng am hiểu về khía cạnh kỹ thuật của các wiki cùng với nhân viên của Wikimedia Foundation sẽ phụ trách [[m:Special:MyLanguage/Community Wishlist/FAQ#What is triage?|quá trình phân loại]]. Dự kiến quá trình phân loại sẽ hoàn tất vào cuối tháng 11. Việc bỏ phiếu cho các mong muốn sẽ bắt đầu vào tháng 1. '''Cập nhật cho biên tập viên''' * Các biên tập viên sử dụng [[mw:Special:MyLanguage/VisualEditor|trình soạn thảo trực quan]] nay sẽ nhìn thấy cảnh báo khi họ dán đoạn văn bản có khả năng đã được sao chép từ nội dung ban đầu được tạo bởi một trong năm chatbot AI tạo sinh bên ngoài vào Wikipedia. Tính năng này được gọi là [[mw:Special:MyLanguage/Edit check/LLM Paste Check|Kiểm tra Dán nội dung từ LLM]]. Đây là một dạng [[mw:Special:MyLanguage/Edit check|Kiểm tra Sửa đổi]] mà cộng đồng có thể tùy chỉnh được. Hệ thống kiểm tra này tìm kiếm các mã đánh dấu (marker) trong đoạn mã HTML được sao chép và không sử dụng phương pháp phát hiện hình mờ (watermark) trong nội dung. Các sửa đổi cũng sẽ [[mw:Special:MyLanguage/Edit check/LLM Paste Check#Edit tags|được gắn thẻ]] để các tuần tra viên có thể xem xét kỹ lưỡng hơn. Tính năng này giúp người mới đóng góp nội dung tuân thủ các chính sách của Wikipedia, đồng thời giúp các biên tập viên có kinh nghiệm dễ dàng nhận diện những sửa đổi có vấn đề. Các cộng đồng có quy định riêng về việc sử dụng LLM có thể [[mw:Special:MyLanguage/Edit check/LLM Paste Check#Configuration|điều chỉnh câu từ và quy định được liên kết]]. Nhóm phát triển [[listarchive:list/translators-l@lists.wikimedia.org/message/EVHKWJ4IERZELMPIWNH3XUVUSQV5KOO4/|chân thành xin lỗi]] vì đã triển khai tính năng này mà không dành thời gian chờ cho việc dịch thuật. * Các biên tập viên nay có thể dễ dàng [[mw:Special:MyLanguage/Wikimedia Apps/Team/Future of Editing on the Mobile Apps|truy cập trình soạn thảo trực quan bản web trực tiếp từ ứng dụng dành cho iOS và Android]]. Khi mở trình soạn thảo, người dùng sẽ được lựa chọn giữa chế độ soạn thảo trực quan và chế độ soạn thảo mã nguồn. Nếu họ chọn chế độ soạn thảo trực quan, họ sẽ được đưa tới cửa sổ giao diện web di động trong trình duyệt trên điện thoại của họ. Sau khi hoàn thành sửa đổi của mình, một biểu ngữ sẽ xuất hiện để cung cấp cho họ lựa chọn trở về ứng dụng. Điều này cho phép độc giả đóng góp nội dung một cách nhanh chóng trong khi đang đọc một cách thoải mái. * Người dùng ứng dụng Wikipedia dành cho Android và iOS nay sẽ nhìn thấy thông báo một lần mời tạo tài khoản sau khi họ đã sử dụng ứng dụng được hai tuần liên tiếp. Thông báo này giải thích những lợi ích của việc sở hữu một tài khoản. Điều này nhằm mục đích giúp nhiều đọc giả thông thường trở thành những người dùng đã đăng nhập quay lại ứng dụng thường xuyên hơn. [https://phabricator.wikimedia.org/T434847] * Các biên tập viên trên [[wmnoc:conf/dblists/group1.dblist|các wiki thuộc group1]], bao gồm Wikiquote, Wikibooks, Wikiversity, Wikivoyage, và Wikisource, sẽ không còn nhìn thấy thông báo trên [[mw:Special:MyLanguage/Help:Recent changes|Thay đổi Gần đây]] và [[mw:Special:MyLanguage/Help: Watching pages|Danh sách Theo dõi]] khi một liên kết đến phiên bản ngôn ngữ khác của một trang được thêm, xóa hoặc thay đổi trong khoản mục Wikidata của nó. Thay đổi này sẽ bắt đầu vào ngày 5 tháng 10 lúc 07:00 UTC dưới dạng thử nghiệm kéo dài hai tuần nhằm giảm bớt các thông báo xuất hiện với số lượng lớn nhưng ít giá trị và giúp những thay đổi quan trọng có thể được nhận diện một cách dễ dàng hơn. Các biên tập viên thường dựa vào những thông báo này có thể đọc thêm trên [[m:Wikidata For Wikimedia Projects/Clearer Wikidata Edit Summaries/Hide Language Link edits|trang dự án]] và chia sẻ ý kiến hoặc thắc mắc trên [[m:Talk:Wikidata_For_Wikimedia_Projects/Clearer_Wikidata_Edit_Summaries/Hide_Language_Link_edits|trang thảo luận]]. [https://phabricator.wikimedia.org/T439415] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:36}} {{PLURAL:36|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, một vấn đề khiến cho các cố vấn tự rút khỏi chương trình cố vấn vẫn có thể có những người được cố vấn gán vào họ và tiếp nhận các câu hỏi, nay đã được giải quyết. Những người được cố vấn sẽ được gán lại khi một cố vấn rời khỏi chương trình. [https://phabricator.wikimedia.org/T418194] '''Cập nhật cho những người đóng góp vào mảng kỹ thuật''' * Wikimedia Brasil đã xuất bản [[m:Special:MyLanguage/Wikimedia Brasil/Arcabouço de Boas Práticas de Desenvolvimento|Khung Thực tiễn Tốt nhất về Phát triển]] (ABPD). Đây là tài liệu hướng dẫn dành cho nhân viên, nhà thầu và tình nguyện viên tham gia xây dựng các công cụ và dự án kỹ thuật. Tài liệu này bao gồm các nội dung về vòng đời dự án, bảo mật, khả năng tiếp cận, bảo vệ dữ liệu cá nhân và sử dụng AI có trách nhiệm, đồng thời giải thích cách những hướng dẫn chung của phong trào được điều chỉnh sao cho phù hợp với bối cảnh cục bộ. Họ khuyến khích các tổ chức thành viên khác sử dụng lại và tùy chỉnh tài liệu này. Đọc thêm tại [[wmfblog:2026/09/26/wikimedia-brasils-development-best-practices-framework-technical-sustainability-as-an-organizational-responsibility|bài đăng trên Diff]]. * Một URL cơ sở chuẩn (canonical base) mới dành cho các API của Wikimedia sẽ sớm được giới thiệu. Đường dẫn chuẩn mới này theo mẫu dạng <bdi lang="zxx" dir="ltr"><code><nowiki>{projectName}/api/</nowiki></code></bdi> và sẽ đóng vai trò là đường dẫn thay thế cho các API REST hiện tại (ví dụ: <bdi lang="zxx" dir="ltr"><code><nowiki>{projectName}/w/rest.php/</nowiki></code></bdi>). Cả hai phiên bản đều có thể gọi được đối với tất cả các API hiện có, nhưng cấu trúc mới sẽ là lựa chọn ưu tiên cho các mô đun API được tạo mới. Thay đổi này sẽ không gây gián đoạn cho hầu hết người dùng. Những đường dẫn hiện tại vẫn sẽ có sẵn cho mọi yêu cầu đến điểm cuối (endpoint) hiện có. Tuy nhiên, một số điểm cuối có thể trả về các URL tuân theo mẫu mới trong phần nội dung phản hồi (response body). Các thay đổi sẽ có sẵn trên wiki thử nghiệm trước, và việc triển khai dự kiến sẽ được thực hiện trên toàn bộ các dự án wiki vào cuối tháng 10. [https://phabricator.wikimedia.org/T433535] * [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.47/wmf.23|MediaWiki]]. '''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]]&nbsp;• [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]]&nbsp;• [[m:Special:MyLanguage/Tech/News/2026/41|Biên dịch]]&nbsp;• [[m:Tech|Nhờ giúp đỡ]]&nbsp;• [[m:Talk:Tech/News|Phản hồi]]&nbsp;• [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].'' </div><section end="technews-2026-W41"/> 18:52, ngày 5 tháng 10 năm 2026 (UTC) <!-- Tin nhắn của Thành viên:Trizek (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=31098825 --> 2skrcgx05bjflhyups7b9p5ww3rgmw4 astounding 0 106720 2568693 2193180 2026-10-05T16:18:37Z Hiyuune 50834 2568693 wikitext text/x-wiki =={{langname|en}}== ==={{section|pron}}=== * {{IPA|en|/əˈstaʊndɪŋ/}} * {{audio|en|LL-Q1860 (eng)-Vealhurl-astounding.wav|a=Southern England}} * {{rhymes|en|aʊndɪŋ|s=3}} ==={{section|v}}=== {{head|en|Biến thể hình thái động từ}} # {{infl of|en|astound||ing-form}}. ==={{section|adj}} {{en-adj}} # Làm [[kinh ngạc]], làm [[kinh hoàng]], làm [[sững sờ]], làm [[sửng sốt]]. #: {{synonyms|en|amazing|extraordinary|fantastic|incredible|marvelous|miraculous|phenomenal|remarkable|unbelievable|Kho từ vựng:surprising}} ===={{section|drv}}==== {{col|en|unastounding|astoundingly|astoundingness}} ==={{section|ref}}=== * {{R:FVDP|db=ev}} pxquofjkql0rae89eypjgs1h6dho0vu 2568694 2568693 2026-10-05T16:18:47Z Hiyuune 50834 2568694 wikitext text/x-wiki =={{langname|en}}== ==={{section|pron}}=== * {{IPA|en|/əˈstaʊndɪŋ/}} * {{audio|en|LL-Q1860 (eng)-Vealhurl-astounding.wav|a=Southern England}} * {{rhymes|en|aʊndɪŋ|s=3}} ==={{section|v}}=== {{head|en|Biến thể hình thái động từ}} # {{infl of|en|astound||ing-form}}. ==={{section|adj}}=== {{en-adj}} # Làm [[kinh ngạc]], làm [[kinh hoàng]], làm [[sững sờ]], làm [[sửng sốt]]. #: {{synonyms|en|amazing|extraordinary|fantastic|incredible|marvelous|miraculous|phenomenal|remarkable|unbelievable|Kho từ vựng:surprising}} ===={{section|drv}}==== {{col|en|unastounding|astoundingly|astoundingness}} ==={{section|ref}}=== * {{R:FVDP|db=ev}} 14qtc0ijbjgl49ha8d9bgysnu5dn6vf hydroelectricity 0 109158 2568747 2478976 2026-10-06T05:34:18Z Kelly zhrm 58416 2568747 wikitext text/x-wiki =={{langname|en}}== {{wp|en:}} [[File:Uusi voimala 1.jpg|thumb|A [[hydroelectric]] power plant in Vaajakoski, [[w:Jyväskylä|Jyväskylä]], [[w:Central Finland|Central Finland]]]] ==={{ĐM|etym}}=== {{ety|en|:af|hydro-|electricity|text=+|tree=1}} ==={{ĐM|pron}}=== * {{audio|en|LL-Q1860 (eng)-Flame, not lame-hydroelectricity.wav|a=US}} ==={{ĐM|n}}=== {{en-noun|-}} # [[thủy điện|Thủy điện]]. ===={{ĐM|rel}}==== * {{l|en|hydroelectric}} ==={{ĐM|ref}}=== {{R:FVDP|db=ev}} {{C|en|Điện học}} a3kq5nsnhyiiouvd16fnwb1715nbvgk polycrystal 0 117280 2568754 1895089 2026-10-06T05:52:49Z Hiyuune 50834 2568754 wikitext text/x-wiki =={{langname|en}}== ==={{section|etym}}=== {{ety|en|:af|poly-|crystal|text=+|tree=1}} ==={{section|n}}=== {{en-noun}} # Đa [[tinh thể]]. ==={{section|ref}}=== * {{R:FVDP|db=ev}} t9f42eey0d9hsglck93xedtpio8v4q0 maddish 0 125065 2568779 1871304 2026-10-06T07:16:20Z Hiyuune 50834 2568779 wikitext text/x-wiki =={{langname|en}}== ==={{section|etym}}=== {{ety|en|:af|mad|-ish|text=+|tree=1}} ==={{section|pron}}=== * {{audio|en|LL-Q1860 (eng)-Vealhurl-maddish.wav|a=Southern England}} * {{rhymes|en|ædɪʃ|s=2}} ==={{section|adj}}=== {{head|en|Tính từ}} # [[dở hơi|Dở hơi]]; [[hâm]]. ==={{section|ref}}=== * {{R:FVDP|db=ev}} phtsqou3h2d94i9t1mc79q3jmuvs68o violative 0 158335 2568764 2153686 2026-10-06T06:12:51Z Hiyuune 50834 2568764 wikitext text/x-wiki =={{langname|en}}== ==={{section|etym}}=== {{suffix|en|violate|ive}}.<ref>{{R:OED Online|pos=adj|id=9633108402}}</ref> ==={{section|adj}}=== {{en-adj}} # {{lb|en|US}} [[vi phạm|Vi phạm]], [[thực hiện]] thì [[phá vỡ]]. #: {{syn|en|violatory}} ===={{section|drv}}==== {{col|en|nonviolative|violatively}} ==={{section|ref}}=== {{reflist}} * {{R:FVDP|db=ev}} o2rvol2fkwanbtzjk9vt5qrvoklnafm algebraic equation 0 177052 2568658 2450714 2026-10-05T14:04:36Z TheHighFighter2 42988 /* */ 2568658 wikitext text/x-wiki =={{langname|en}}== {{wp|en:}} ==={{ĐM|pron}}=== * {{audio|en|LL-Q1860 (eng)-Yangolin-algebraic equation.wav|a=GA}} ==={{ĐM|noun}}=== {{en-noun}} # {{lb|en|algebra}} [[phương trình|Phương trình]] [[đại số]]. ==={{ĐM|ref}}=== {{R:FVDP|db=ev}} tnxa6m7lbjb84dn0qgkr1e6bsje48ij desperasjon 0 188404 2568674 2433661 2026-10-05T15:24:55Z Hiyuune 50834 2568674 wikitext text/x-wiki =={{langname|nb}}== ==={{section|n}}=== {{head|nb|Danh từ}} # Sự [[thất vọng]], [[tuyệt vọng]], [[chán nản]], [[ngã lòng]]. fyrl02p5eftbodp49bq5bvtt2ewilu2 октябрята 0 210400 2568749 2535761 2026-10-06T05:45:14Z Hiyuune 50834 2568749 wikitext text/x-wiki =={{langname|ru}}== ==={{section|pron}}=== * {{ru-IPA|октября́та}} ==={{section|noun}}=== {{head|ru|Biến thể hình thái danh từ|head=октября́та|g=m-an-p}} # {{inflection of|ru|октябрёнок||nom|p}} 6ijoid7xtsanxya4vzadd7si05k5swk interrupting 0 217578 2568692 2176398 2026-10-05T16:14:01Z Hiyuune 50834 2568692 wikitext text/x-wiki =={{langname|en}}== ==={{section|pron}}=== * {{audio|en|en-us-interrupting.ogg|a=US}} ==={{section|v}}=== {{head|en|Biến thể hình thái động từ}} # {{infl of|en|interrupt||ing-form}}. ===={{section|drv}}==== {{col|en|interruptingly|uninterrupting}} mim7kt6vrm2w69t482a6dvcgid8kd1d agglomerates 0 217912 2568688 1791294 2026-10-05T16:05:05Z Hiyuune 50834 + en 2568688 wikitext text/x-wiki {{also|agglomérâtes}} =={{langname|en}}== ==={{section|v}}=== {{head|en|Biến thể hình thái động từ}} # {{infl of|en|agglomerate||s-verb-form}} 56jx8jsdimvi5fxrlw9i7el8vtfs56g clucks 0 221967 2568683 1813688 2026-10-05T16:01:44Z Hiyuune 50834 2568683 wikitext text/x-wiki {{also|Clucks}} =={{langname|en}}== ==={{section|pron}}=== * {{rhymes|en|ʌks|s=1}} * {{enPR|klŭks}}, {{IPA|en|/klʌks/}} ==={{section|v}}=== {{head|en|Biến thể hình thái động từ}} # {{infl of|en|cluck||s-verb-form}} hg3ydih9x6zm07a6ojrh4j9x84u3h6x petering 0 224393 2568667 2167162 2026-10-05T15:13:47Z Hiyuune 50834 2568667 wikitext text/x-wiki =={{langname|en}}== ==={{section|v}}=== {{head|en|Biến thể hình thái động từ}} # {{infl of|en|peter||ing-form}}. fbtomggk8asujjgc2xuewh2j4y471n2 adumbrated 0 228286 2568684 1790697 2026-10-05T16:02:55Z Hiyuune 50834 2568684 wikitext text/x-wiki =={{langname|en}}== ==={{ĐM|v}}=== {{head|en|Biến thể hình thái động từ}} # {{infl of|en|adumbrate||ed-form}} d3z1lv16v01uiapidptvybc5iy8vnpe advantages 0 229239 2568687 1790719 2026-10-05T16:04:23Z Hiyuune 50834 2568687 wikitext text/x-wiki =={{langname|en}}== ==={{section|pron}}=== * {{IPA|en|/ədˈvɑːn.tɪ.dʒɪz/|a=RP}} * {{IPA|en|/ədˈvæn.(t)ɪ.d͡ʒɪz/|a=GA}} * {{audio|en|en-us-advantages.ogg|a=US}} ==={{section|n}}=== {{head|en|Biến thể hình thái danh từ}} # {{plural of|en|advantage}} ==={{section|v}}=== {{head|en|Biến thể hình thái động từ}} # {{infl of|en|advantage||s-verb-form}} dja61h05luqvn98ils769prp3qo0t57 孱 0 233956 2568711 2021879 2026-10-05T23:22:38Z Hiyuune 50834 2568711 wikitext text/x-wiki {{character info}} =={{langname|mul}}== ==={{ĐM|han character}}=== {{Han char|rn=39|rad=子|as=09|sn=12|four=77247|canj=SNDD|ids=⿸尸孨}} ===={{ĐM|derived characters}}==== * {{lang|mul|sc=Hani|[[僝]], [[潺]], [[樼]], [[㻵]], [[轏]] ([[𰺞]]), [[驏]] ([[骣]])}} {{col-top|1|Các ký tự phái sinh}} * {{charlist|𠘈𱔯𪩖𢢁𢵔𦠳𥢨𲿷}}, {{charlist|𨬖𫔏𩻣𠟉}} {{col-bottom}} ===={{ĐM|ref}}==== {{Han ref|kx=0280.080|dkj=07000|dj=0549.070|hdz=21017.120|uh=5B71}} 3crl1ykgzfd56730qt697olj7qsixk0 Bản mẫu:Mục từ cần viết/Danh sách 10 245054 2568670 2567703 2026-10-05T15:18:56Z TheHighFighter2 42988 2568670 wikitext text/x-wiki [[actiniaria]]<br> [[inline]]<br> [[côngxoocxiom]]<br> [[repurpose]]<br> [[okroug]]<br> [[checkmark]]<br> [[hegemon]]<br> [[cross-functional]]<br> [[choropleth]]<br> [[nói này nói kia]]<br> [[dây chèo]]<br> [[thế giới ngầm]]<br> [[deep-lying]]<br> [[sweet on]]<br> [[segue]]<br> [[this day]]<br> [[that day]]<br> [[tradwife]]<br> [[mean-spiritedness]]<br> [[sư biểu]]<br> [[dolphin kick]]<br> [[person-dichotomy]]<br> [[thanh tẩy]]<br> [[lẩy thơ]]<br> [[hiền trí]]<br> [[interfamily]]<br> [[cwtch]]<br> [[viễn ấn]]<br> [[hương đăng]]<br> [[định suất]]<br> [[quê xệ]]<br> [[thâu canh]]<br> [[phân trại]]<br> [[phả độ]]<br> [[canh me]]<br> [[tác thể]]<br> [[phên dậu]]<br> [[biệt nhỡn]]<br> [[gái gú]]<br> 4l7ur6lxqsnbj5dvj68mj73xqdpkxup Mô đun:languages/data/2 828 256179 2568719 2567422 2026-10-06T01:08:04Z Hiyuune 50834 (By [[meta:Indic-TechCom/Tools|FindAndReplace]]) 2568719 Scribunto text/plain local m_langdata = require("Module:languages/data") -- Loaded on demand, as it may not be needed (depending on the data). local function u(...) u = require("Module:string utilities").char return u(...) end local c = m_langdata.chars local p = m_langdata.puaChars local s = m_langdata.shared -- Ideally, we want to move these into [[Module:languages/data]], but because (a) it's necessary to use require on that module, and (b) they're only used in this data module, it's less memory-efficient to do that at the moment. If it becomes possible to use mw.loadData, then these should be moved there. s["de-Latn-sortkey"] = { remove_diacritics = c.grave .. c.acute .. c.circ .. c.diaer .. c.ringabove, from = {"æ", "œ", "ß"}, to = {"ae", "oe", "ss"} } s["de-Latn-standardchars"] = "AaÄäBbCcDdEeFfGgHhIiJjKkLlMmNnOoÖöPpQqRrSsẞßTtUuÜüVvWwXxYyZz" s["ka-entryname"] = {remove_diacritics = c.circ} s["no-sortkey"] = { remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.macron .. c.dacute .. c.caron .. c.cedilla, remove_exceptions = {"å"}, from = {"æ", "ø", "å"}, to = {"z" .. p[1], "z" .. p[2], "z" .. p[3]} } s["no-standardchars"] = "AaBbDdEeFfGgHhIiJjKkLlMmNnOoPpRrSsTtUuVvYyÆæØøÅå" .. c.punc s["tg-entryname"] = {remove_diacritics = c.grave .. c.acute} s["tk-entryname"] = {remove_diacritics = c.macron} local m = {} m["aa"] = { "tiếng Afar", 27811, "cus-eas", "Latn, Ethi", "Tiếng Afar", "Afar", strip_diacritics = { Latn = {remove_diacritics = c.acute}, }, } m["ab"] = { "tiếng Abkhaz", 5111, "cau-abz", "Cyrl, Geor, Latn", "Tiếng Abkhaz", "Abkhaz", translit = { Cyrl = "ab-translit", -- Chuyển tự Geor đã có ở [[Module:scripts/data]] }, override_translit = true, display_text = { Cyrl = s["cau-Cyrl-displaytext"] }, strip_diacritics = { Cyrl = { remove_diacritics = c.acute, from = {"^а%-"}, to = {"а"}, }, Latn = s["cau-Latn-stripdiacritics"], }, sort_key = { Cyrl = { from = { "х'ә", -- 3 chars "гь", "гә", "ӷь", "ҕь", "ӷә", "ҕә", "дә", "ё", "жь", "жә", "ҙә", "ӡә", "ӡ'", "кь", "кә", "қь", "қә", "ҟь", "ҟә", "ҫә", "тә", "ҭә", "ф'", "хь", "хә", "х'", "ҳә", "ць", "цә", "ц'", "ҵә", "ҵ'", "шь", "шә", "џь", -- 2 chars "ӷ", "ҕ", "ҙ", "ӡ", "қ", "ҟ", "ԥ", "ҧ", "ҫ", "ҭ", "ҳ", "ҵ", "ҷ", "ҽ", "ҿ", "ҩ", "џ", "ә", -- 1 char "^а", }, to = { "х" .. p[4], "г" .. p[1], "г" .. p[2], "г" .. p[5], "г" .. p[6], "г" .. p[7], "г" .. p[8], "д" .. p[1], "е" .. p[1], "ж" .. p[1], "ж" .. p[2], "з" .. p[2], "з" .. p[4], "з" .. p[5], "к" .. p[1], "к" .. p[2], "к" .. p[4], "к" .. p[5], "к" .. p[7], "к" .. p[8], "с" .. p[2], "т" .. p[1], "т" .. p[3], "ф" .. p[1], "х" .. p[1], "х" .. p[2], "х" .. p[3], "х" .. p[6], "ц" .. p[1], "ц" .. p[2], "ц" .. p[3], "ц" .. p[5], "ц" .. p[6], "ш" .. p[1], "ш" .. p[2], "ы" .. p[3], "г" .. p[3], "г" .. p[4], "з" .. p[1], "з" .. p[3], "к" .. p[3], "к" .. p[6], "п" .. p[1], "п" .. p[2], "с" .. p[1], "т" .. p[2], "х" .. p[5], "ц" .. p[4], "ч" .. p[1], "ч" .. p[2], "ч" .. p[3], "ы" .. p[1], "ы" .. p[2], "ь" .. p[1], "", } }, }, } m["ae"] = { "tiếng Avesta", 29572, "ira-cen", "Avst, Gujr, Deva", "Tiếng Avesta", "Avesta", translit = { Avst = "Avst-translit" }, } m["af"] = { "tiếng Afrikaans", 14196, "gmw-frk", "Latn, Arab", "Tiếng Afrikaans", "Afrikaans", ancestors = "nl", sort_key = { Latn = { remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.diaer .. c.ringabove .. c.cedilla .. "'", from = {"['ʼ]n"}, to = {"n" .. p[1]} } }, } m["ak"] = { "tiếng Akan", 28026, "alv-ctn", "Latn", "Tiếng Akan", "Akan", } m["am"] = { "tiếng Amhara", 28244, "sem-eth", "Ethi", "Tiếng Amhara", "Amhara", translit = "Ethi-translit", } m["an"] = { "tiếng Aragon", 8765, "roa-ibe", "Latn", "Tiếng Aragon", "Aragon", ancestors = "roa-oan", } m["ar"] = { "tiếng Ả Rập", 13955, "sem-arb", "Arab, Hebr, Syrc, Brai, Nbat", "Tiếng Ả Rập", "Ả Rập", translit = { Arab = "ar-translit" }, strip_diacritics = { Arab = "ar-stripdiacritics", }, -- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]] } m["as"] = { "tiếng Assam", 29401, "inc-eas", "as-Beng", "Tiếng Assam", "Assam", ancestors = "inc-mas", translit = "as-translit", } m["av"] = { "tiếng Avar", 29561, "cau-ava", "Cyrl, Latn, Arab", "Tiếng Avar", "Avar", ancestors = "oav", translit = { Cyrl = "cau-nec-translit", Arab = "ar-translit", }, override_translit = true, display_text = {Cyrl = s["cau-Cyrl-displaytext"]}, entry_name = { Cyrl = s["cau-Cyrl-entryname"], Latn = s["cau-Latn-entryname"], }, sort_key = { Cyrl = { from = {"гъ", "гь", "гӏ", "ё", "кк", "къ", "кь", "кӏ", "лъ", "лӏ", "тӏ", "хх", "хъ", "хь", "хӏ", "цӏ", "чӏ"}, to = {"г" .. p[1], "г" .. p[2], "г" .. p[3], "е" .. p[1], "к" .. p[1], "к" .. p[2], "к" .. p[3], "к" .. p[4], "л" .. p[1], "л" .. p[2], "т" .. p[1], "х" .. p[1], "х" .. p[2], "х" .. p[3], "х" .. p[4], "ц" .. p[1], "ч" .. p[1]} }, }, } m["ay"] = { "tiếng Aymara", 4627, "sai-aym", "Latn", "Tiếng Aymara", "Aymara", } m["az"] = { "tiếng Azerbaijan", 9292, "trk-ogz", "Latn, Cyrl, fa-Arab", "Tiếng Azerbaijan", "Azerbaijan", ancestors = "trk-oat", dotted_dotless_i = true, entry_name = { Latn = { from = {"ʼ"}, to = {"'"}, }, ["fa-Arab"] = { module = "ar-entryname", ["from"] = { "ۆ", "ۇ", "وْ", "ڲ", "ؽ", }, ["to"] = { "و", "و", "و", "گ", "ی", }, }, }, display_text = { Latn = { from = {"'"}, to = {"ʼ"} } }, sort_key = { Latn = { from = { "i", -- Ensure "i" comes after "ı". "ç", "ə", "ğ", "x", "ı", "q", "ö", "ş", "ü", "w" }, to = { "i" .. p[1], "c" .. p[1], "e" .. p[1], "g" .. p[1], "h" .. p[1], "i", "k" .. p[1], "o" .. p[1], "s" .. p[1], "u" .. p[1], "z" .. p[1] } }, Cyrl = { from = {"ғ", "ә", "ы", "ј", "ҝ", "ө", "ү", "һ", "ҹ"}, to = {"г" .. p[1], "е" .. p[1], "и" .. p[1], "и" .. p[2], "к" .. p[1], "о" .. p[1], "у" .. p[1], "х" .. p[1], "ч" .. p[1]} }, }, } m["ba"] = { "tiếng Bashkir", 13389, "trk-kbu", "Cyrl", "Tiếng Bashkir", "Bashkir", translit = "ba-translit", override_translit = true, sort_key = { from = {"ғ", "ҙ", "ё", "ҡ", "ң", "ө", "ҫ", "ү", "һ", "ә"}, to = {"г" .. p[1], "д" .. p[1], "е" .. p[1], "к" .. p[1], "н" .. p[1], "о" .. p[1], "с" .. p[1], "у" .. p[1], "х" .. p[1], "э" .. p[1]} }, } m["be"] = { "tiếng Belarus", 9091, "zle", "Cyrl, Latn", "Tiếng Belarus", "Belarus", ancestors = "zle-obe", translit = {Cyrl = "be-translit"}, entry_name = { remove_diacritics = c.grave .. c.acute, remove_exceptions = {"Ć", "ć", "Ń", "ń", "Ś", "ś", "Ź", "ź"}, }, sort_key = { Cyrl = { from = {"ґ", "ё", "і", "ў"}, to = {"г" .. p[1], "е" .. p[1], "и" .. p[1], "у" .. p[1]} }, Latn = { from = {"ć", "č", "dz", "dź", "dž", "ch", "ł", "ń", "ś", "š", "ŭ", "ź", "ž"}, to = {"c" .. p[1], "c" .. p[2], "d" .. p[1], "d" .. p[2], "d" .. p[3], "h" .. p[1], "l" .. p[1], "n" .. p[1], "s" .. p[1], "s" .. p[2], "u" .. p[1], "z" .. p[1], "z" .. p[2]} }, }, standardChars = { Cyrl = "АаБбВвГгДдЕеЁёЖжЗзІіЙйКкЛлМмНнОоПпРрСсТтУуЎўФфХхЦцЧчШшЫыЬьЭэЮюЯя", Latn = "AaBbCcĆćČčDdEeFfGgHhIiJjKkLlŁłMmNnŃńOoPpRrSsŚśŠšTtUuŬŭVvYyZzŹźŽž", (c.punc:gsub("'", "")) -- Exclude apostrophe. }, } m["bg"] = { "tiếng Bulgari", 7918, "zls", "Cyrl", "Tiếng Bulgari", "Bulgari", ancestors = "cu-bgm", translit = "bg-translit", strip_diacritics = { remove_diacritics = c.grave .. c.acute, remove_exceptions = {"%f[^%z%s]ѝ%f[%z%s]"}, }, sort_key = { remove_diacritics = c.grave .. c.acute, remove_exceptions = {"%f[^%z%s]ѝ%f[%z%s]"}, }, standard_chars = "АаБбВвГгДдЕеЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЪъЬьЮюЯя" .. c.punc, } m["bh"] = { "tiếng Bihari", 135305, "inc-eas", "Deva", } m["bi"] = { "tiếng Bislama", 35452, "crp", "Latn", "Tiếng Bislama", "Bislama", ancestors = "en", } m["bm"] = { "tiếng Bambara", 33243, "dmn-emn", "Latn", "Tiếng Bambara", "Bambara", sort_key = { from = {"ɛ", "ɲ", "ŋ", "ɔ"}, to = {"e" .. p[1], "n" .. p[1], "n" .. p[2], "o" .. p[1]} }, } m["bn"] = { "tiếng Bengal", 9610, "inc-bas", "Beng, Newa", "Tiếng Bengal", "Bengal", ancestors = "inc-mbn,pra-mag", translit = {Beng = "bn-translit"}, } m["bo"] = { "tiếng Tây Tạng", 34271, "sit-tib", "Tibt", -- sometimes Deva? "Tiếng Tây Tạng", "Tây Tạng", ancestors = "xct", translit = "Tibt-translit", override_translit = true, display_text = s["Tibt-displaytext"], entry_name = s["Tibt-entryname"], sort_key = "Tibt-sortkey", } m["br"] = { "tiếng Breton", 12107, "cel-brs", "Latn", "Tiếng Breton", "Breton", ancestors = "xbm", sort_key = { from = {"ch", "c['ʼ’]h"}, to = {"c" .. p[1], "c" .. p[2]} }, } m["ca"] = { "tiếng Catalan", 7026, "roa-ocr", "Latn", "Tiếng Catalan", "Catalan", ancestors = "roa-oca", sort_key = { remove_diacritics = c.grave .. c.acute .. c.diaer .. c.cedilla, from = {"l·l"}, to = {"ll"} }, standardChars = "AaÀàBbCcÇçDdEeÉéÈèFfGgHhIiÍíÏïJjLlMmNnOoÓóÒòPpQqRrSsTtUuÚúÜüVvXxYyZz·" .. c.punc, } m["ce"] = { "tiếng Chechen", 33350, "cau-vay", "Cyrl, Latn, Arab", "Tiếng Chechen", "Chechen", translit = { Cyrl = "cau-nec-translit", Arab = "ar-translit", }, override_translit = true, display_text = {Cyrl = s["cau-Cyrl-displaytext"]}, entry_name = { Cyrl = s["cau-Cyrl-entryname"], Latn = s["cau-Latn-entryname"], }, sort_key = { Cyrl = { from = {"аь", "гӏ", "ё", "кх", "къ", "кӏ", "оь", "пӏ", "тӏ", "уь", "хь", "хӏ", "цӏ", "чӏ", "юь", "яь"}, to = {"а" .. p[1], "г" .. p[1], "е" .. p[1], "к" .. p[1], "к" .. p[2], "к" .. p[3], "о" .. p[1], "п" .. p[1], "т" .. p[1], "у" .. p[1], "х" .. p[1], "х" .. p[2], "ц" .. p[1], "ч" .. p[1], "ю" .. p[1], "я" .. p[1]} }, }, } m["ch"] = { "tiếng Chamorro", 33262, "poz", "Latn", "Tiếng Chamorro", "Chamorro", sort_key = { remove_diacritics = "'", from = {"å", "ch", "ñ", "ng"}, to = {"a" .. p[1], "c" .. p[1], "n" .. p[1], "n" .. p[2]} }, } m["co"] = { "tiếng Corse", 33111, "roa-itd", "Latn", "Tiếng Corse", "Corse", sort_key = { from = {"chj", "ghj", "sc", "sg"}, to = {"c" .. p[1], "g" .. p[1], "s" .. p[1], "s" .. p[2]} }, standardChars = "AaÀàBbCcDdEeÈèFfGgHhIiÌìÏïJjLlMmNnOoÒòPpQqRrSsTtUuÙùÜüVvZz" .. c.punc, } m["cr"] = { "tiếng Cree", 33390, "alg", "Cans, Latn", "Tiếng Cree", "Cree", translit = {Cans = "cr-translit"}, } m["cs"] = { "tiếng Séc", 9056, "zlw", "Latn", "Tiếng Séc", "Séc", ancestors = "cs-ear", sort_key = { from = {"á", "č", "ď", "é", "ě", "ch", "í", "ň", "ó", "ř", "š", "ť", "ú", "ů", "ý", "ž"}, to = {"a" .. p[1], "c" .. p[1], "d" .. p[1], "e" .. p[1], "e" .. p[2], "h" .. p[1], "i" .. p[1], "n" .. p[1], "o" .. p[1], "r" .. p[1], "s" .. p[1], "t" .. p[1], "u" .. p[1], "u" .. p[2], "y" .. p[1], "z" .. p[1]} }, standardChars = "AaÁáBbCcČčDdĎďEeÉéĚěFfGgHhIiÍíJjKkLlMmNnŇňOoÓóPpRrŘřSsŠšTtŤťUuÚúŮůVvYyÝýZzŽž" .. c.punc, } m["cu"] = { "tiếng Slav Giáo hội cổ", 35499, "zls", "Cyrs, Glag", "Tiếng Slav Giáo hội cổ", "Slav Giáo hội cổ", translit = {Cyrs = "Cyrs-translit", Glag = "Glag-translit"}, entry_name = {Cyrs = s["Cyrs-entryname"]}, sort_key = {Cyrs = s["Cyrs-sortkey"]}, } m["cv"] = { "tiếng Chuvash", 33348, "trk-ogr", "Cyrl", "Tiếng Chuvash", "Chuvash", ancestors = "cv-mid", translit = "cv-translit", override_translit = true, sort_key = { from = {"ӑ", "ё", "ӗ", "ҫ", "ӳ"}, to = {"а" .. p[1], "е" .. p[1], "е" .. p[2], "с" .. p[1], "у" .. p[1]} }, } m["cy"] = { "tiếng Wales", 9309, "cel-brw", "Latn", "Tiếng Wales", "Wales", ancestors = "wlm", sort_key = { remove_diacritics = c.grave .. c.acute .. c.circ .. c.diaer .. "'", from = {"ch", "dd", "ff", "ng", "ll", "ph", "rh", "th"}, to = {"c" .. p[1], "d" .. p[1], "f" .. p[1], "g" .. p[1], "l" .. p[1], "p" .. p[1], "r" .. p[1], "t" .. p[1]} }, standardChars = "ÂâAaBbCcDdEeÊêFfGgHhIiÎîLlMmNnOoÔôPpRrSsTtUuÛûWwŴŵYyŶŷ" .. c.punc, } m["da"] = { "tiếng Đan Mạch", 9035, "gmq-eas", "Latn", "Tiếng Đan Mạch", "Đan Mạch", ancestors = "gmq-oda", sort_key = { remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.macron .. c.dacute .. c.caron .. c.cedilla, remove_exceptions = {"å"}, from = {"æ", "ø", "å"}, to = {"z" .. p[1], "z" .. p[2], "z" .. p[3]} }, standardChars = "AaBbDdEeFfGgHhIiJjKkLlMmNnOoPpRrSsTtUuVvYyÆæØøÅå" .. c.punc, } m["de"] = { "tiếng Đức", 188, "gmw-hgm", "Latn, Latf", "Tiếng Đức", "Đức", ancestors = "gmh", sort_key = { remove_diacritics = c.grave .. c.acute .. c.circ .. c.diaer .. c.ringabove, from = {"æ", "œ", "ß"}, to = {"ae", "oe", "ss"} }, standardChars = "AaÄäBbCcDdEeFfGgHhIiJjKkLlMmNnOoÖöPpQqRrSsẞßTtUuÜüVvWwXxYyZz" .. c.punc, } m["dv"] = { "tiếng Dhivehi", 32656, "inc-ins", "Thaa, Diak", "Tiếng Dhivehi", "Dhivehi", translit = { Thaa = "dv-translit", Diak = "Diak-translit", }, override_translit = true, } m["dz"] = { "tiếng Dzongkha", 33081, "sit-tib", "Tibt", "Tiếng Dzongkha", "Dzongkha", ancestors = "xct", translit = "Tibt-translit", override_translit = true, display_text = s["Tibt-displaytext"], entry_name = s["Tibt-entryname"], sort_key = "Tibt-sortkey", } m["ee"] = { "tiếng Ewe", 30005, "alv-gbe", "Latn", "Tiếng Ewe", "Ewe", sort_key = { remove_diacritics = c.tilde, from = {"ɖ", "dz", "ɛ", "ƒ", "gb", "ɣ", "kp", "ny", "ŋ", "ɔ", "ts", "ʋ"}, to = {"d" .. p[1], "d" .. p[2], "e" .. p[1], "f" .. p[1], "g" .. p[1], "g" .. p[2], "k" .. p[1], "n" .. p[1], "n" .. p[2], "o" .. p[1], "t" .. p[1], "v" .. p[1]} }, } m["el"] = { "tiếng Hy Lạp", 9129, "grk", "Grek, Polyt, Brai", "Tiếng Hy Lạp", "Hy Lạp", ancestors = "el-kth", translit = { Grek = "el-translit", Polyt = "grc-translit", }, override_translit = true, entry_name = { Grek = {remove_diacritics = c.caron .. c.diaerbelow .. c.brevebelow}, Polyt = s["Polyt-entryname"], }, sort_key = { Grek = s["Grek-sortkey"], Polyt = s["Grek-sortkey"], }, standardChars = { Grek = "΅·ͺ΄ΑαΆάΒβΓγΔδΕεέΈΖζΗηΉήΘθΙιΊίΪϊΐΚκΛλΜμΝνΞξΟοΌόΠπΡρΣσςΤτΥυΎύΫϋΰΦφΧχΨψΩωΏώ", Brai = c.braille, c.punc }, } m["en"] = { "tiếng Anh", 1860, "gmw-ang", "Latn, Brai, Shaw, Dsrt", -- entries in Shaw or Dsrt might require prior discussion "Tiếng Anh", "Anh", wikimedia_codes = "en, simple", ancestors = "en-ear", sort_key = { Latn = { remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.macron .. c.diaer .. c.ringabove .. c.caron .. c.cedilla .. "'%-%s", from = {"æ", "œ"}, to = {"ae", "oe"} }, }, standardChars = { Latn = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz", Brai = c.braille, c.punc }, } m["eo"] = { "tiếng Quốc tế ngữ", 143, "art", "Latn", "Tiếng Quốc tế ngữ", "Quốc tế ngữ", sort_key = { remove_diacritics = c.grave .. c.acute, from = {"ĉ", "ĝ", "ĥ", "ĵ", "ŝ", "ŭ"}, to = {"c" .. p[1], "g" .. p[1], "h" .. p[1], "j" .. p[1], "s" .. p[1], "u" .. p[1]} }, standardChars = "AaBbCcĈĉDdEeFfGgĜĝHhĤĥIiJjĴĵKkLlMmNnOoPpRrSsŜŝTtUuŬŭVvZz" .. c.punc, } m["es"] = { "tiếng Tây Ban Nha", 1321, "roa-cas", "Latn, Brai", "Tiếng Tây Ban Nha", "Tây Ban Nha", ancestors = "osp", sort_key = { Latn = { remove_diacritics = c.acute .. c.diaer .. c.cedilla, from = {"ñ"}, to = {"n" .. p[1]} }, }, standardChars = { Latn = "AaÁáBbCcDdEeÉéFfGgHhIiÍíJjLlMmNnÑñOoÓóPpQqRrSsTtUuÚúÜüVvXxYyZz", Brai = c.braille, c.punc }, } m["et"] = { "tiếng Estonia", 9072, "urj-fin", "Latn", sort_key = { from = { "š", "ž", "õ", "ä", "ö", "ü", -- 2 chars "z" -- 1 char }, to = { "s" .. p[1], "s" .. p[3], "w" .. p[1], "w" .. p[2], "w" .. p[3], "w" .. p[4], "s" .. p[2] } }, standard_chars = "AaBbDdEeFfGgHhIiJjKkLlMmNnOoPpRrSsTtUuVvÕõÄäÖöÜü" .. c.punc, } m["eu"] = { "tiếng Basque", 8752, "euq", "Latn", sort_key = { from = {"ç", "ñ"}, to = {"c" .. p[1], "n" .. p[1]} }, standard_chars = "AaBbDdEeFfGgHhIiJjKkLlMmNnÑñOoPpRrSsTtUuXxZz" .. c.punc, } m["fa"] = { "tiếng Ba Tư", 9168, "ira-swi", "Arab, Hebr", ancestors = "fa-cls", strip_diacritics = { Arab = { -- character "ۂ" code U+06C2 to "ه" and "هٔ" (U+0647 + U+0654) to "ه"; hamzatu l-waṣli to a regular alif from = {"هٔ", "ٱ"}, -- character "ۂ" code U+06C2 to "ه"; hamzatu l-waṣli to a regular alif to = {"ه", "ا"}, remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.superalef, }, }, -- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]] } m["ff"] = { "tiếng Fula", 33454, "alv-fwo", "Latn, Adlm", "Tiếng Fula", "Fula", } m["fi"] = { "tiếng Phần Lan", 1412, "urj-fin", "Latn", display_text = { from = {"'"}, to = {"’"} }, strip_diacritics = { -- used to indicate gemination of the next consonant remove_diacritics = "ˣ", from = {"’"}, to = {"'"}, }, sort_key = { -- [[Appendix:Finnish alphabet#Collation]] + "aͤ" and "oͤ" as historical variants of "ä" and "ö". remove_diacritics = "'’:" .. c.diacritics, remove_exceptions = { "a[" .. c.ringabove .. c.diaer .. c.small_e .. "]", -- åäaͤ "o[" .. c.diaer .. c.tilde .. c.dacute .. c.small_e .. "]", -- öõőoͤ "u[" .. c.diaer .. c.dacute .. "]" -- üű }, from = {"æ", "[ðđ]", "ł", "ŋ", "œ", "ß", "þ", "u[" .. c.diaer .. c.dacute .. "]", "å", "aͤ", "o[" .. c.tilde .. c.dacute .. c.small_e .. "]", "ø", "(.)['%-]"}, to = {"ae", "d", "l", "n", "oe", "ss", "th", "y", "z" .. p[1], "ä", "ö", "ö", "%1"} }, standard_chars = "AaBbDdEeFfGgHhIiJjKkLlMmNnOoPpRrSsTtUuVvYyÄäÖö" .. c.punc, } m["fj"] = { "tiếng Fiji", 33295, "poz-pcc", "Latn", "Tiếng Fiji", "Fiji", } m["fo"] = { "tiếng Faroe", 25258, "gmq-ins", "Latn", "Tiếng Faroe", "Faroe", sort_key = { from = {"á", "ð", "í", "ó", "ú", "ý", "æ", "ø"}, to = {"a" .. p[1], "d" .. p[1], "i" .. p[1], "o" .. p[1], "u" .. p[1], "y" .. p[1], "z" .. p[1], "z" .. p[2]} }, standardChars = "AaÁáBbDdÐðEeFfGgHhIiÍíJjKkLlMmNnOoÓóPpRrSsTtUuÚúVvYyÝýÆæØø" .. c.punc, } m["fr"] = { "tiếng Pháp", 150, "roa-oil", "Latn, Brai", "Tiếng Pháp", "Pháp", display_text = { from = {"'"}, to = {"’"} }, entry_name = { from = {"’"}, to = {"'"}, }, ancestors = "frm", sort_key = {Latn = s["roa-oil-sortkey"]}, standardChars = { Latn = "AaÀàÂâBbCcÇçDdEeÉéÈèÊêËëFfGgHhIiÎîÏïJjLlMmNnOoÔôŒœPpQqRrSsTtUuÙùÛûÜüVvXxYyZz", Brai = c.braille, c.punc }, } m["fy"] = { "tiếng Tây Frisia", 27175, "gmw-fri", "Latn", "Tiếng Tây Frisia", "Tây Frisia", sort_key = { remove_diacritics = c.grave .. c.acute .. c.circ .. c.diaer, from = {"y"}, to = {"i"} }, standardChars = "AaâäàÆæBbCcDdEeéêëèFfGgHhIiïìYyỳJjKkLlMmNnOoôöòPpRrSsTtUuúûüùVvWwZz" .. c.punc, } m["ga"] = { "tiếng Ireland", 9142, "cel-gae", "Latn, Latg", "Tiếng Ireland", "Ireland", ancestors = "mga", sort_key = { remove_diacritics = c.acute, from = {"ḃ", "ċ", "ḋ", "ḟ", "ġ", "ṁ", "ṗ", "ṡ", "ṫ"}, to = {"bh", "ch", "dh", "fh", "gh", "mh", "ph", "sh", "th"} }, standardChars = "AaÁáBbCcDdEeÉéFfGgHhIiÍíLlMmNnOoÓóPpRrSsTtUuÚúVv" .. c.punc, } m["gd"] = { "tiếng Gael Scotland", 9314, "cel-gae", "Latn, Latg", "Tiếng Gael Scotland", "Gael Scotland", ancestors = "mga", sort_key = {remove_diacritics = c.grave .. c.acute}, standardChars = "AaÀàBbCcDdEeÈèFfGgHhIiÌìLlMmNnOoÒòPpRrSsTtUuÙù" .. c.punc, } m["gl"] = { "tiếng Galicia", 9307, "roa-ibe", "Latn", "Tiếng Galicia", "Galicia", ancestors = "roa-opt", sort_key = { remove_diacritics = c.acute, from = {"ñ"}, to = {"n" .. p[1]} }, standardChars = "AaÁáBbCcDdEeÉéFfGgHhIiÍíÏïLlMmNnÑñOoÓóPpQqRrSsTtUuÚúÜüVvXxZz" .. c.punc, } m["gn"] = { "tiếng Guaraní", 35876, "tup-gua", "Latn", "Tiếng Guaraní", "Guaraní", } m["gu"] = { "tiếng Gujarat", 5137, "inc-wes", "Arab, Gujr", "Tiếng Gujarat", "Gujarat", ancestors = "inc-mgu,pra-sau", translit = { Gujr = "gu-translit", }, entry_name = { remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.kasra .. c.shadda .. c.sukun .. "઼" }, } m["gv"] = { "tiếng Man", 12175, "cel-gae", "Latn", "Tiếng Man", "Man", ancestors = "mga", sort_key = {remove_diacritics = c.cedilla .. "-"}, standardChars = "AaBbCcÇçDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwYy" .. c.punc, } m["ha"] = { "tiếng Hausa", 56475, "cdc-wst", "Latn, Arab", "Tiếng Hausa", "Hausa", entry_name = {Latn = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.macron}}, sort_key = { Latn = { from = {"ɓ", "b'", "ɗ", "d'", "ƙ", "k'", "sh", "ƴ", "'y"}, to = {"b" .. p[1], "b" .. p[2], "d" .. p[1], "d" .. p[2], "k" .. p[1], "k" .. p[2], "s" .. p[1], "y" .. p[1], "y" .. p[2]} }, }, } m["he"] = { "tiếng Do Thái", 9288, "sem-can", "Hebr, Phnx, Brai", "Tiếng Do Thái", "Do Thái", ancestors = "he-med", entry_name = {Hebr = {remove_diacritics = u(0x0591) .. "-" .. u(0x05BD) .. u(0x05BF) .. "-" .. u(0x05C5) .. u(0x05C7) .. c.CGJ}}, } m["hi"] = { "tiếng Hindi", 1568, "inc-hnd", "Deva, Kthi, Newa", "Tiếng Hindi", "Hindi", ancestors = "inc-apa,pra-sau,inc-ohi", translit = {Deva = "hi-translit"}, standardChars = { Deva = "अआइईउऊएऐओऔकखगघङचछजझञटठडढणतथदधनपफबभमयरलवशषसहत्रज्ञक्षक़ख़ग़ज़झ़ड़ढ़फ़काखागाघाङाचाछाजाझाञाटाठाडाढाणाताथादाधानापाफाबाभामायारालावाशाषासाहात्राज्ञाक्षाक़ाख़ाग़ाज़ाझ़ाड़ाढ़ाफ़ाकिखिगिघिङिचिछिजिझिञिटिठिडिढिणितिथिदिधिनिपिफिबिभिमियिरिलिविशिषिसिहित्रिज्ञिक्षिक़िख़िग़िज़िझ़िड़िढ़िफ़िकीखीगीघीङीचीछीजीझीञीटीठीडीढीणीतीथीदीधीनीपीफीबीभीमीयीरीलीवीशीषीसीहीत्रीज्ञीक्षीक़ीख़ीग़ीज़ीझ़ीड़ीढ़ीफ़ीकुखुगुघुङुचुछुजुझुञुटुठुडुढुणुतुथुदुधुनुपुफुबुभुमुयुरुलुवुशुषुसुहुत्रुज्ञुक्षुक़ुख़ुग़ुज़ुझ़ुड़ुढ़ुफ़ुकूखूगूघूङूचूछूजूझूञूटूठूडूढूणूतूथूदूधूनूपूफूबूभूमूयूरूलूवूशूषूसूहूत्रूज्ञूक्षूक़ूख़ूग़ूज़ूझ़ूड़ूढ़ूफ़ूकेखेगेघेङेचेछेजेझेञेटेठेडेढेणेतेथेदेधेनेपेफेबेभेमेयेरेलेवेशेषेसेहेत्रेज्ञेक्षेक़ेख़ेग़ेज़ेझ़ेड़ेढ़ेफ़ेकैखैगैघैङैचैछैजैझैञैटैठैडैढैणैतैथैदैधैनैपैफैबैभैमैयैरैलैवैशैषैसैहैत्रैज्ञैक्षैक़ैख़ैग़ैज़ैझ़ैड़ैढ़ैफ़ैकोखोगोघोङोचोछोजोझोञोटोठोडोढोणोतोथोदोधोनोपोफोबोभोमोयोरोलोवोशोषोसोहोत्रोज्ञोक्षोक़ोख़ोग़ोज़ोझ़ोड़ोढ़ोफ़ोकौखौगौघौङौचौछौजौझौञौटौठौडौढौणौतौथौदौधौनौपौफौबौभौमौयौरौलौवौशौषौसौहौत्रौज्ञौक्षौक़ौख़ौग़ौज़ौझ़ौड़ौढ़ौफ़ौक्ख्ग्घ्ङ्च्छ्ज्झ्ञ्ट्ठ्ड्ढ्ण्त्थ्द्ध्न्प्फ्ब्भ्म्य्र्ल्व्श्ष्स्ह्त्र्ज्ञ्क्ष्क़्ख़्ग़्ज़्झ़्ड़्ढ़्फ़्।॥०१२३४५६७८९॰", c.punc }, } m["ho"] = { "tiếng Hiri Motu", 33617, "crp", "Latn", ancestors = "meu", } m["ht"] = { "tiếng Creole Haiti", 33491, "crp", "Latn", "Tiếng Creole Haiti", ancestors = "ht-sdm", sort_key = { from = { "oun", -- 3 chars "an", "ch", "è", "en", "ng", "ò", "on", "ou", "ui" -- 2 chars }, to = { "o" .. p[4], "a" .. p[1], "c" .. p[1], "e" .. p[1], "e" .. p[2], "n" .. p[1], "o" .. p[1], "o" .. p[2], "o" .. p[3], "u" .. p[1] } }, } m["hu"] = { "tiếng Hungary", 9067, "urj-ugr", "Latn, Hung", "Tiếng Hungary", "Hungary", ancestors = "ohu", sort_key = { Latn = { from = { "dzs", -- 3 chars "á", "cs", "dz", "é", "gy", "í", "ly", "ny", "ó", "ö", "ő", "sz", "ty", "ú", "ü", "ű", "zs", -- 2 chars }, to = { "d" .. p[2], "a" .. p[1], "c" .. p[1], "d" .. p[1], "e" .. p[1], "g" .. p[1], "i" .. p[1], "l" .. p[1], "n" .. p[1], "o" .. p[1], "o" .. p[2], "o" .. p[3], "s" .. p[1], "t" .. p[1], "u" .. p[1], "u" .. p[2], "u" .. p[3], "z" .. p[1], } }, }, standardChars = { Latn = "AaÁáBbCcDdEeÉéFfGgHhIiÍíJjKkLlMmNnOoÓóÖöŐőPpQqRrSsTtUuÚúÜüŰűVvWwXxYyZz", c.punc }, } m["hy"] = { "tiếng Armenia", 8785, "hyx", "Armn, Brai", "Tiếng Armenia", "Armenia", ancestors = "axm", translit = {Armn = "Armn-translit"}, override_translit = true, entry_name = { Armn = { remove_diacritics = "՛՜՞՟", from = {"եւ", "<sup>յ</sup>", "<sup>ի</sup>", "<sup>է</sup>", "յ̵"}, to = {"և", "յ", "ի", "է", "ֈ"} }, }, sort_key = { Armn = { from = { "ու", "եւ", -- 2 chars "և" -- 1 char }, to = { "ւ", "եվ", "եվ" } }, }, } m["hz"] = { "tiếng Herero", 33315, "bnt-swb", "Latn", "Tiếng Herero", "Herero", } m["ia"] = { "tiếng Bổ trợ Quốc tế", 35934, "art", "Latn", "Tiếng Bổ trợ Quốc tế", "Bổ trợ Quốc tế", } m["id"] = { "tiếng Indonesia", 9240, "poz-mly", "Latn", "Tiếng Indonesia", "Indonesia", ancestors = "ms", standardChars = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz" .. c.punc, } m["ie"] = { "tiếng Interlingue", 35850, "art", "Latn", type = "appendix-constructed", entry_name = {remove_diacritics = c.grave .. c.acute .. c.circ}, } m["ig"] = { "tiếng Igbo", 33578, "alv-igb", "Latn", entry_name = {remove_diacritics = c.grave .. c.acute .. c.macron}, sort_key = { from = {"gb", "gh", "gw", "ị", "kp", "kw", "ṅ", "nw", "ny", "ọ", "sh", "ụ"}, to = {"g" .. p[1], "g" .. p[2], "g" .. p[3], "i" .. p[1], "k" .. p[1], "k" .. p[2], "n" .. p[1], "n" .. p[2], "n" .. p[3], "o" .. p[1], "s" .. p[1], "u" .. p[1]} }, } m["ii"] = { "tiếng Lô Lô", 34235, "tbq-nlo", "Yiii", "Tiếng Lô Lô", "Lô Lô", translit = "ii-translit", } m["ik"] = { "tiếng Inupiaq", 27183, "esx-inu", "Latn", "Tiếng Inupiaq", "Inupiaq", sort_key = { from = { "ch", "ġ", "dj", "ḷ", "ł̣", "ñ", "ng", "r̂", "sr", "zr", -- 2 chars "ł", "ŋ", "ʼ" -- 1 char }, to = { "c" .. p[1], "g" .. p[1], "h" .. p[1], "l" .. p[1], "l" .. p[3], "n" .. p[1], "n" .. p[2], "r" .. p[1], "s" .. p[1], "z" .. p[1], "l" .. p[2], "n" .. p[2], "z" .. p[2] } }, } m["io"] = { "tiếng Ido", 35224, "art", "Latn", "Tiếng Ido", "Ido", } m["is"] = { "tiếng Iceland", 294, "gmq-ins", "Latn", "Tiếng Iceland", "Iceland", sort_key = { from = {"á", "ð", "é", "í", "ó", "ú", "ý", "þ", "æ", "ö"}, to = {"a" .. p[1], "d" .. p[1], "e" .. p[1], "i" .. p[1], "o" .. p[1], "u" .. p[1], "y" .. p[1], "z" .. p[1], "z" .. p[2], "z" .. p[3]} }, standardChars = "AaÁáBbDdÐðEeÉéFfGgHhIiÍíJjKkLlMmNnOoÓóPpRrSsTtUuÚúVvXxYyÝýÞþÆæÖö" .. c.punc, } m["it"] = { "tiếng Ý", 652, "roa-itd", "Latn", "Tiếng Ý", "Ý", ancestors = "roa-oit", sort_key = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.diaer .. c.ringabove}, standardChars = "AaÀàBbCcDdEeÈèÉéFfGgHhIiÌìLlMmNnOoÒòPpQqRrSsTtUuÙùVvZz" .. c.punc, } m["iu"] = { "tiếng Inuktitut", 29921, "esx-inu", "Cans, Latn", "Tiếng Inuktitut", "Inuktitut", translit = {Cans = "cr-translit"}, override_translit = true, } m["ja"] = { "tiếng Nhật", 5287, "jpx", "Jpan, Latn, Brai", "Tiếng Nhật", "Nhật", ancestors = "ja-ear", translit = s["jpx-translit"], link_tr = true, display_text = s["jpx-displaytext"], entry_name = s["jpx-entryname"], sort_key = s["jpx-sortkey"], } m["jv"] = { "tiếng Java", 33549, "poz", "Latn, Java", "Tiếng Java", "Java", ancestors = "kaw", translit = {Java = "jv-translit"}, link_tr = true, entry_name = {remove_diacritics = c.circ}, -- Modern jv don't use ê sort_key = { Latn = { from = {"å", "dh", "é", "è", "ng", "ny", "th"}, to = {"a" .. p[1], "d" .. p[1], "e" .. p[1], "e" .. p[2], "n" .. p[1], "n" .. p[2], "t" .. p[1]} }, }, } m["ka"] = { "tiếng Gruzia", 8108, "ccs-gzn", "Geor, Geok, Hebr", -- Hebr is used to write Judeo-Georgian "Tiếng Gruzia", "Gruzia", ancestors = "ka-mid", translit = { Geor = "Geor-translit", Geok = "Geok-translit", }, override_translit = true, entry_name = {remove_diacritics = c.circ}, } m["kg"] = { "tiếng Kongo", 33702, "bnt-kng", "Latn", } m["ki"] = { "tiếng Gikuyu", 33587, "bnt-kka", "Latn", "Tiếng Gikuyu", "Gikuyu", } m["kj"] = { "tiếng Kwanyama", 1405077, "bnt-ova", "Latn", "Tiếng Kwanyama", "Kwanyama", } m["kk"] = { "tiếng Kazakh", 9252, "trk-kno", "Cyrl, Latn, kk-Arab", "Tiếng Kazakh", "Kazakh", translit = "kk-translit", -- override_translit = true, sort_key = { Cyrl = { from = {"ә", "ғ", "ё", "қ", "ң", "ө", "ұ", "ү", "һ", "і"}, to = {"а" .. p[1], "г" .. p[1], "е" .. p[1], "к" .. p[1], "н" .. p[1], "о" .. p[1], "у" .. p[1], "у" .. p[2], "х" .. p[1], "ы" .. p[1]} }, }, standard_chars = { Cyrl = "АаӘәБбВвГгҒғДдЕеЁёЖжЗзИиЙйКкҚқЛлМмНнҢңОоӨөПпРрСсТтУуҰұҮүФфХхҺһЦцЧчШшЩщЪъЫыІіЬьЭэЮюЯя", c.punc }, } m["kl"] = { "tiếng Greenland", 25355, "esx-inu", "Latn", "Tiếng Greenland", "Greenland", sort_key = { from = {"æ", "ø", "å"}, to = {"z" .. p[1], "z" .. p[2], "z" .. p[3]} } } m["km"] = { "tiếng Khmer", 9205, "mkh-kmr", "Khmr", "Tiếng Khmer", "Khmer", ancestors = "xhm", translit = "km-translit", } m["kn"] = { "tiếng Kannada", 33673, "dra-kan", "Knda, Tutg", "Tiếng Kannada", "Kannada", ancestors = "dra-mkn", translit = "kn-translit", } m["ko"] = { "tiếng Triều Tiên", 9176, "qfa-kor", "Kore, Brai", "Tiếng Triều Tiên", "Triều Tiên", ancestors = "ko-ear", translit = {Kore = "ko-translit"}, entry_name = {Kore = s["Kore-entryname"]}, } m["kr"] = { "tiếng Kanuri", 36094, "ssa-sah", "Latn, Arab", "Tiếng Kanuri", "Kanuri", -- the sortkey and strip_diacritics are only for standard Kanuri; when dialectal entries get added, someone will have to work out how the dialects should be represented orthographically strip_diacritics = { Latn = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.breve} }, sort_key = { Latn = { from = {"ǝ", "ny", "ɍ", "sh"}, to = {"e" .. p[1], "n" .. p[1], "r" .. p[1], "s" .. p[1]} }, }, } m["ks"] = { "tiếng Kashmir", 33552, "inc-kas", "ks-Arab, Deva, Shrd, Latn", "Tiếng Kashmir", "Kashmir", translit = { ["ks-Arab"] = "ks-Arab-translit", Deva = "ks-Deva-translit", Shrd = "Shrd-translit", }, } -- "kv" IS TREATED AS "koi", "kpv", SEE WT:LT m["kw"] = { "tiếng Cornwall", 25289, "cel-brs", "Latn", "Tiếng Cornwall", "Cornwall", ancestors = "cnx", sort_key = { from = {"ch"}, to = {"c" .. p[1]} }, } m["ky"] = { "tiếng Kyrgyz", 9255, "trk-kkp", "Cyrl, Latn, Arab", "Tiếng Kyrgyz", "Kyrgyz", translit = {Cyrl = "ky-translit"}, override_translit = true, sort_key = { Cyrl = { from = {"ё", "ң", "ө", "ү"}, to = {"е" .. p[1], "н" .. p[1], "о" .. p[1], "у" .. p[1]} }, }, } m["la"] = { "tiếng Latinh", 397, "itc", "Latn, Ital", "Tiếng Latinh", "Latinh", ancestors = "itc-ola", entry_name = {Latn = {remove_diacritics = c.macron .. c.breve .. c.diaer .. c.dinvbreve}}, sort_key = { Latn = { from = {"æ", "œ"}, to = {"ae", "oe"} }, }, standardChars = { Latn = "AaBbCcDdEeFfGgHhIiLlMmNnOoPpQqRrSsTtUuVvXxZz", c.punc }, } m["lb"] = { "tiếng Luxembourg", 9051, "gmw-hgm", "Latn", "Tiếng Luxembourg", "Luxembourg", ancestors = "gmw-cfr", sort_key = { from = {"ä", "ë", "é"}, to = {"z" .. p[1], "z" .. p[2], "z" .. p[3]} }, } m["lg"] = { "tiếng Luganda", 33368, "bnt-nyg", "Latn", "Tiếng Luganda", "Luganda", entry_name = {remove_diacritics = c.acute .. c.circ}, sort_key = { from = {"ŋ"}, to = {"n" .. p[1]} }, } m["li"] = { "tiếng Limburg", 102172, "gmw-frk", "Latn", "Tiếng Limburg", "Limburg", ancestors = "dum", } m["ln"] = { "tiếng Lingala", 36217, "bnt-bmo", "Latn", "Tiếng Lingala", "Lingala", sort_key = { remove_diacritics = c.acute .. c.circ .. c.caron, from = {"ɛ", "gb", "mb", "mp", "nd", "ng", "nk", "ns", "nt", "ny", "nz", "ɔ"}, to = {"e" .. p[1], "g" .. p[1], "m" .. p[1], "m" .. p[2], "n" .. p[1], "n" .. p[2], "n" .. p[3], "n" .. p[4], "n" .. p[5], "n" .. p[6], "n" .. p[7], "o" .. p[1]} }, } m["lo"] = { "tiếng Lào", 9211, "tai-swe", "Laoo", "Tiếng Lào", "Lào", translit = "lo-translit", sort_key = "Laoo-sortkey", standardChars = "0-9ກຂຄງຈຊຍດຕຖທນບປຜຝພຟມຢຣລວສຫອຮຯ-ໝ" .. c.punc, } m["lt"] = { "tiếng Litva", 9083, "bat-eas", "Latn", "Tiếng Litva", "Litva", ancestors = "olt", display_text = "lt-common", strip_diacritics = "lt-common", sort_key = "lt-common", standard_chars = "AaĄąBbCcČčDdEeĘęĖėFfGgHhIiĮįYyJjKkLlMmNnOoPpRrSsŠšTtUuŲųŪūVvZzŽž" .. c.punc, } m["lu"] = { "tiếng Luba-Katanga", 36157, "bnt-lub", "Latn", } m["lv"] = { "tiếng Latvia", 9078, "bat-eas", "Latn", "Tiếng Latvia", "Latvia", strip_diacritics = { -- This attempts to convert vowels with tone marks to vowels either with or without macrons. Specifically, there should be no macrons if the vowel is part of a diphthong (including resonant diphthongs such pìrksts -> pirksts not #pīrksts). What we do is first convert the vowel + tone mark to a vowel + tilde in a decomposed fashion, then remove the tilde in diphthongs, then convert the remaining vowel + tilde sequences to macroned vowels, then delete any other tilde. We leave already-macroned vowels alone: Both e.g. ar and ār occur before consonants. FIXME: This still might not be sufficient. from = {"([Ee])" .. c.cedilla, "[" .. c.grave .. c.circ .. c.tilde .."]", "([aAeEiIoOuU])" .. c.tilde .."?([lrnmuiLRNMUI])" .. c.tilde .. "?([^aAeEiIoOuU])", "([aAeEiIoOuU])" .. c.tilde .."?([lrnmuiLRNMUI])" .. c.tilde .."?$", "([iI])" .. c.tilde .. "?([eE])" .. c.tilde .. "?", "([aAeEiIuU])" .. c.tilde, c.tilde}, to = {"%1", c.tilde, "%1%2%3", "%1%2", "%1%2", "%1" .. c.macron} }, sort_key = { from = {"ā", "č", "ē", "ģ", "ī", "ķ", "ļ", "ņ", "š", "ū", "ž"}, to = {"a" .. p[1], "c" .. p[1], "e" .. p[1], "g" .. p[1], "i" .. p[1], "k" .. p[1], "l" .. p[1], "n" .. p[1], "s" .. p[1], "u" .. p[1], "z" .. p[1]} }, standard_chars = "AaĀāBbCcČčDdEeĒēFfGgĢģHhIiĪīJjKkĶķLlĻļMmNnŅņOoPpRrSsŠšTtUuŪūVvZzŽž" .. c.punc, } m["mg"] = { "tiếng Malagasy", 7930, "poz-bre", "Latn, Arab", "Tiếng Malagasy", "Malagasy", } m["mh"] = { "tiếng Marshall", 36280, "poz-mic", "Latn", "Tiếng Marshall", "Marshall", sort_key = { from = {"ā", "ļ", "m̧", "ņ", "n̄", "o̧", "ō", "ū"}, to = {"a" .. p[1], "l" .. p[1], "m" .. p[1], "n" .. p[1], "n" .. p[2], "o" .. p[1], "o" .. p[2], "u" .. p[1]} }, } m["mi"] = { "tiếng Maori", 36451, "poz-pep", "Latn", "Tiếng Maori", "Maori", sort_key = { remove_diacritics = c.macron, from = {"ng", "wh"}, to = {"z" .. p[1], "z" .. p[2]} }, } m["mk"] = { "tiếng Macedonia", 9296, "zls", "Cyrl", ancestors = "cu", translit = "mk-translit", entry_name = { remove_diacritics = c.acute, remove_exceptions = {"Ѓ", "ѓ", "Ќ", "ќ"} }, sort_key = { remove_diacritics = c.grave, from = {"ѓ", "ѕ", "ј", "љ", "њ", "ќ", "џ"}, to = {"д" .. p[1], "з" .. p[1], "и" .. p[1], "л" .. p[1], "н" .. p[1], "т" .. p[1], "ч" .. p[1]} }, standardChars = "АаБбВвГгДдЃѓЕеЖжЗзЅѕИиЈјКкЛлЉљМмНнЊњОоПпРрСсТтЌќУуФфХхЦцЧчЏџШш" .. c.punc, } m["ml"] = { "tiếng Malayalam", 36236, "dra", "Mlym", "Tiếng Malayalam", "Malayalam", translit = "ml-translit", override_translit = true, } m["mn"] = { "tiếng Mông Cổ", 9246, "xgn-cen", "Cyrl, Mong, Latn, Brai", "Tiếng Mông Cổ", "Mông Cổ", ancestors = "cmg", translit = { Cyrl = "mn-translit", Mong = "Mong-translit", }, override_translit = true, display_text = {Mong = s["Mong-displaytext"]}, entry_name = { Cyrl = {remove_diacritics = c.grave .. c.acute}, Mong = s["Mong-entryname"], }, sort_key = { Cyrl = { remove_diacritics = c.grave, from = {"ё", "ө", "ү"}, to = {"е" .. p[1], "о" .. p[1], "у" .. p[1]} }, }, standardChars = { Cyrl = "АаБбВвГгДдЕеЁёЖжЗзИиЙйЛлМмНнОоӨөРрСсТтУуҮүХхЦцЧчШшЫыЬьЭэЮюЯя—", Brai = c.braille, c.punc }, } -- "mo" IS TREATED AS "ro", SEE WT:LT m["mr"] = { "tiếng Marathi", 1571, "inc-sou", "Deva, Modi", "Tiếng Marathi", "Marathi", ancestors = "omr", translit = { Deva = "mr-translit", Modi = "mr-Modi-translit", }, entry_name = { Deva = { from = {"च़", "ज़", "झ़"}, to = {"च", "ज", "झ"} }, }, } m["ms"] = { "tiếng Mã Lai", 9237, "poz-mly", "Latn, ms-Arab", "Tiếng Mã Lai", "Mã Lai", ancestors = "ms-cla", standardChars = { Latn = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz", c.punc }, } m["mt"] = { "tiếng Malta", 9166, "sem-arb", "Latn", "Tiếng Malta", "Malta", display_text = { from = {"'"}, to = {"’"} }, entry_name = { from = {"’"}, to = {"'"}, }, ancestors = "sqr", sort_key = { from = { "ċ", "ġ", "ż", -- Convert into PUA so that decomposed form does not get caught by the next step. "([cgz])", -- Ensure "c" comes after "ċ", "g" comes after "ġ" and "z" comes after "ż". "g" .. p[1] .. "ħ", -- "għ" after initial conversion of "g". p[3], p[4], "ħ", "ie", p[5] -- Convert "ċ", "ġ", "ħ", "ie", "ż" into final output. }, to = { p[3], p[4], p[5], "%1" .. p[1], "g" .. p[2], "c", "g", "h" .. p[1], "i" .. p[1], "z" } }, } m["my"] = { "tiếng Miến Điện", 9228, "tbq-brm", "Mymr", "Tiếng Miến Điện", "Miến Điện", ancestors = "obr", translit = "my-translit", override_translit = true, sort_key = { from = {"ျ", "ြ", "ွ", "ှ", "ဿ"}, to = {"္ယ", "္ရ", "္ဝ", "္ဟ", "သ္သ"} }, } m["na"] = { "tiếng Nauru", 13307, "poz-mic", "Latn", "Tiếng Nauru", "Nauru", } m["nb"] = { "tiếng Na Uy (Bokmål)", 25167, "gmq", "Latn", "Tiếng Na Uy (Bokmål)", "Na Uy (Bokmål)", wikimedia_codes = "no", ancestors = "gmq-mno, da", -- da as an (but not the) ancestor of nb was agreed on - do not change without discussion sort_key = s["no-sortkey"], standardChars = s["no-standardchars"], } m["nd"] = { "tiếng Bắc Ndebele", 35613, "bnt-ngu", "Latn", "Tiếng Bắc Ndebele", "Bắc Ndebele", entry_name = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.caron}, } m["ne"] = { "tiếng Nepal", 33823, "inc-pah", "Deva, Newa", "Tiếng Nepal", "Nepal", translit = {Deva = "ne-translit"}, } m["ng"] = { "tiếng Ndonga", 33900, "bnt-ova", "Latn", "Tiếng Ndonga", "Ndonga", } m["nl"] = { "tiếng Hà Lan", 7411, "gmw-frk", "Latn, Brai", "Tiếng Hà Lan", "Hà Lan", ancestors = "dum", sort_key = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.diaer .. c.ringabove .. c.cedilla .. "'"}, standardChars = { Latn = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz", Brai = c.braille, c.punc }, } m["nn"] = { "tiếng Na Uy (Nynorsk)", 25164, "gmq-wes", "Latn", "Tiếng Na Uy (Nynorsk)", "Na Uy (Nynorsk)", ancestors = "gmq-mno", entry_name = { remove_diacritics = c.grave .. c.acute, }, sort_key = s["no-sortkey"], standardChars = s["no-standardchars"], } m["no"] = { "tiếng Na Uy", 9043, "gmq-wes", "Latn", "Tiếng Na Uy", "Na Uy", ancestors = "gmq-mno", sort_key = s["no-sortkey"], standardChars = s["no-standardchars"], } m["nr"] = { "tiếng Nam Ndebele", 36785, "bnt-ngu", "Latn", "Tiếng Nam Ndebele", "Nam Ndebele", entry_name = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.caron}, } m["nv"] = { "tiếng Navajo", 13310, "apa", "Latn", "Tiếng Navajo", "Navajo", sort_key = { remove_diacritics = c.acute .. c.ogonek, from = { "chʼ", "tłʼ", "tsʼ", -- 3 chars "ch", "dl", "dz", "gh", "hw", "kʼ", "kw", "sh", "tł", "ts", "zh", -- 2 chars "ł", "ʼ" -- 1 char }, to = { "c" .. p[2], "t" .. p[2], "t" .. p[4], "c" .. p[1], "d" .. p[1], "d" .. p[2], "g" .. p[1], "h" .. p[1], "k" .. p[1], "k" .. p[2], "s" .. p[1], "t" .. p[1], "t" .. p[3], "z" .. p[1], "l" .. p[1], "z" .. p[2] } }, } m["ny"] = { "tiếng Chichewa", 33273, "bnt-nys", "Latn", entry_name = {remove_diacritics = c.acute .. c.circ}, sort_key = { from = {"ng'"}, to = {"ng"} }, } m["oc"] = { "tiếng Occitan", 14185, "roa-ocr", "Latn, Hebr", "Tiếng Occitan", "Occitan", ancestors = "pro", sort_key = { Latn = { remove_diacritics = c.grave .. c.acute .. c.diaer .. c.cedilla, from = {"([lns])·h"}, to = {"%1h"} }, }, } m["oj"] = { "tiếng Ojibwe", 33875, "alg", "Cans, Latn", "Tiếng Ojibwe", "Ojibwe", sort_key = { Latn = { from = {"aa", "ʼ", "ii", "oo", "sh", "zh"}, to = {"a" .. p[1], "h" .. p[1], "i" .. p[1], "o" .. p[1], "s" .. p[1], "z" .. p[1]} }, }, } m["om"] = { "tiếng Oromo", 33864, "cus-eas", "Latn, Ethi", "Tiếng Oromo", "Oromo", } m["or"] = { "tiếng Oriya", 33810, "inc-eas", "Orya", "Tiếng Oriya", "Oriya", ancestors = "inc-mor", translit = "or-translit", } m["os"] = { "tiếng Ossetia", 33968, "xsc", "Cyrl, Geor, Latn", "Tiếng Ossetia", "Ossetia", ancestors = "oos", translit = { Cyrl = "os-translit", Geor = "Geor-translit", }, override_translit = true, display_text = { Cyrl = { from = {"æ"}, to = {"ӕ"} }, Latn = { from = {"ӕ"}, to = {"æ"} }, }, entry_name = { Cyrl = { remove_diacritics = c.grave .. c.acute, from = {"æ"}, to = {"ӕ"} }, Latn = { from = {"ӕ"}, to = {"æ"} }, }, sort_key = { Cyrl = { from = {"ӕ", "гъ", "дж", "дз", "ё", "къ", "пъ", "тъ", "хъ", "цъ", "чъ"}, to = {"а" .. p[1], "г" .. p[1], "д" .. p[1], "д" .. p[2], "е" .. p[1], "к" .. p[1], "п" .. p[1], "т" .. p[1], "х" .. p[1], "ц" .. p[1], "ч" .. p[1]} }, }, } m["pa"] = { "tiếng Punjab", 58635, "inc-pan", "Guru, pa-Arab", "Tiếng Punjab", "Punjab", ancestors = "pra", translit = { Guru = "Guru-translit", ["pa-Arab"] = "pa-Aran-translit", }, entry_name = { ["pa-Arab"] = { remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.nunghunna, from = {"ݨ", "ࣇ"}, to = {"ن", "ل"} }, }, } m["pi"] = { "tiếng Pali", 36727, "inc", "Latn, Brah, Deva, Beng, Sinh, Mymr, Thai, Lana, Laoo, Khmr, Cakm", "Tiếng Pali", "Pali", ancestors = "sa", translit = { Brah = "Brah-translit", Deva = "sa-translit", Beng = "pi-translit", Sinh = "si-translit", Mymr = "pi-translit", Thai = "pi-translit", Lana = "pi-translit", Laoo = "pi-translit", Khmr = "pi-translit", Cakm = "Cakm-translit", }, entry_name = { Thai = { from = {"ึ", u(0xF700), u(0xF70F)}, -- FIXME: Not clear what's going on with the PUA characters here. to = {"ิํ", "ฐ", "ญ"} }, remove_diacritics = c.VS01 }, sort_key = { -- FIXME: This needs to be converted into the current standardized format. from = {"ā", "ī", "ū", "ḍ", "ḷ", "m[" .. c.dotabove .. c.dotbelow .. "]", "ṅ", "ñ", "ṇ", "ṭ", "([เโ])([ก-ฮ])", "([ເໂ])([ກ-ຮ])", "ᩔ", "ᩕ", "ᩖ", "ᩘ", "([ᨭ-ᨱ])ᩛ", "([ᨷ-ᨾ])ᩛ", "ᩤ", u(0xFE00), u(0x200D)}, to = {"a~", "i~", "u~", "d~", "l~", "m~", "n~", "n~~", "n~~~", "t~", "%2%1", "%2%1", "ᩈ᩠ᩈ", "᩠ᩁ", "᩠ᩃ", "ᨦ᩠", "%1᩠ᨮ", "%1᩠ᨻ", "ᩣ"} }, } m["pl"] = { "tiếng Ba Lan", 809, "zlw-lch", "Latn", "Tiếng Ba Lan", "Ba Lan", ancestors = "zlw-mpl", sort_key = { from = {"ą", "ć", "ę", "ł", "ń", "ó", "ś", "ź", "ż"}, to = {"a" .. p[1], "c" .. p[1], "e" .. p[1], "l" .. p[1], "n" .. p[1], "o" .. p[1], "s" .. p[1], "z" .. p[1], "z" .. p[2]} }, standardChars = "AaĄąBbCcĆćDdEeĘęFfGgHhIiJjKkLlŁłMmNnŃńOoÓóPpRrSsŚśTtUuWwYyZzŹźŻż" .. c.punc, } m["ps"] = { "tiếng Pashtun", 58680, "ira-pat", "ps-Arab", "Tiếng Pashtun", "Pashtun", entry_name = {remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.superalef}, } m["pt"] = { "tiếng Bồ Đào Nha", 5146, "roa-ibe", "Latn, Brai", "Tiếng Bồ Đào Nha", "Bồ Đào Nha", ancestors = "roa-opt", sort_key = {Latn = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.diaer .. c.cedilla}}, standardChars = { Latn = "AaÁáÂâÃãBbCcÇçDdEeÉéÊêFfGgHhIiÍíJjLlMmNnOoÓóÔôÕõPpQqRrSsTtUuÚúVvXxZz", Brai = c.braille, c.punc }, } m["qu"] = { "tiếng Quechua", 5218, "qwe", "Latn", "Tiếng Quechua", "Quechua", } m["rm"] = { "tiếng Romansh", 13199, "roa-rhe", "Latn", "Tiếng Romansh", "Romansh", sort_key = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.diaer .. c.small_e}, } m["ro"] = { "tiếng Rumani", 7913, "roa-eas", "Latn, Cyrl", "Tiếng Rumani", "Rumani", translit = {Cyrl = "ro-translit"}, sort_key = { Latn = { remove_diacritics = c.grave .. c.acute, from = {"ă", "â", "î", "ș", "ț"}, to = {"a" .. p[1], "a" .. p[2], "i" .. p[1], "s" .. p[1], "t" .. p[1]} }, Cyrl = { from = {"ӂ"}, to = {"ж" .. p[1]} }, }, standardChars = { Latn = "AaĂăÂâBbCcDdEeFfGgHhIiÎîJjLlMmNnOoPpRrSsȘșTtȚțUuVvXxZz", Cyrl = "АаБбВвГгДдЕеЖжӁӂЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЫыЬьЭэЮюЯя", c.punc }, } m["ru"] = { "tiếng Nga", 7737, "zle", "Cyrl, Brai", "Tiếng Nga", "Nga", ancestors = "zle-mru", translit = { Cyrl = "ru-translit" }, display_text = { Cyrl = { from = {"'"}, to = {"’"} }, }, strip_diacritics = { Cyrl = { remove_diacritics = c.grave .. c.acute .. c.diaer, remove_exceptions = {"Ё", "ё", "Ѣ̈", "ѣ̈", "Я̈", "я̈"}, from = {"’"}, to = {"'"}, }, }, sort_key = { Cyrl = { remove_diacritics = c.grave .. c.acute .. c.diaer, from = { "і", "ѣ", "ѳ", "ѵ" }, to = { "и" .. p[1], "ь" .. p[1], "я" .. p[2], "я" .. p[3] } }, }, standard_chars = { Cyrl = "АаБбВвГгДдЕеЁёЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЪъЫыЬьЭэЮюЯя—", Brai = c.braille, (c.punc:gsub("'", "")) -- Exclude apostrophe. }, } m["rw"] = { "Rwanda-Rundi", 3217514, "bnt-glb", "Latn", entry_name = {remove_diacritics = c.acute .. c.circ .. c.macron .. c.caron}, } m["sa"] = { "tiếng Phạn", 11059, "inc", "as-Beng, Bali, Beng, Bhks, Brah, Mymr, xwo-Mong, Deva, Gujr, Guru, Gran, Hani, Java, Kthi, Knda, Kawi, Khar, Khmr, Laoo, Mlym, mnc-Mong, Marc, Modi, Mong, Nand, Newa, Orya, Phag, Ranj, Saur, Shrd, Sidd, Sinh, Soyo, Lana, Takr, Taml, Tang, Telu, Thai, Tibt, Tutg, Tirh, Zanb", --and also Khom; script codes sorted by canonical name rather than code for [[MOD:sa-convert]] "Tiếng Phạn", "Phạn", translit = { Beng = "sa-Beng-translit", ["as-Beng"] = "sa-Beng-translit", -- Brah translit in [[Module:scripts/data]] Deva = "sa-translit", Gujr = "sa-Gujr-translit", Guru = "sa-Guru-translit", Java = "sa-Java-translit", Kthi = "sa-Kthi-translit", Khmr = "pi-translit", Knda = "sa-Knda-translit", Lana = "pi-translit", Laoo = "pi-translit", Mlym = "sa-Mlym-translit", Modi = "sa-Modi-translit", -- Mong, mnc-Mong, xwo-Mong translit in [[Module:scripts/data]] -- NOTE: Formerly used xal-translit for transliterating xwo-Mong but that only handles Cyrillic; it has -- code to transliterate xwo-Mong but it's broken so I've replaced it with the default xwo-translit. Mymr = "pi-translit", Orya = "sa-Orya-translit", -- Shrd translit in [[Module:scripts/data]] -- Sidd translit in [[Module:scripts/data]] Sinh = "si-translit", Taml = "sa-Taml-translit", Telu = "sa-Telu-translit", Thai = "pi-translit", -- Tibt translit in [[Module:scripts/data]] }, -- Mong display_text and strip_diacritics in [[Module:scripts/data]] -- Tibt display_text, strip_diacritics, sort_key in [[Module:scripts/data]] strip_diacritics = { Deva = s["sa-Deva-stripdiacritics"], Mymr = { remove_diacritics = c.VS01, }, Thai = { from = {"ึ", u(0xF700), u(0xF70F)}, -- FIXME: Not clear what's going on with the PUA characters here. to = {"ิํ", "ฐ", "ญ"} }, }, sort_key = { Deva = s["sa-Deva-stripdiacritics"], -- until we have a proper Sanskrit sorting algorithm. Lana = { -- Tai Tham from = {"ᩔ", "ᩕ", "ᩖ", "ᩘ", "([ᨭ-ᨱ])ᩛ", "([ᨷ-ᨾ])ᩛ", "ᩤ"}, to = {"ᩈ᩠ᩈ", "᩠ᩁ", "᩠ᩃ", "ᨦ᩠", "%1᩠ᨮ", "%1᩠ᨻ", "ᩣ"}, }, Laoo = "Laoo-sortkey", Latn = { from = {"ā", "ī", "ū", "ḍ", "ḷ", "ḹ", "m[" .. c.dotabove .. c.dotbelow .. "]", "ṅ", "ñ", "ṇ", "ṛ", "ṝ", "ś", "ṣ", "ṭ"}, to = {"a~", "i~", "u~", "d~", "l~", "l~~", "m~", "n~", "n~~", "n~~~", "r~", "r~~", "s~", "s~~", "t~"}, }, Mymr = { remove_diacritics = c.VS01, }, Thai = "Thai-sortkey", -- FIXME: The previous sort key which mixed all scripts removed ZWJ; I don't know which script(s) this was -- intended for and there are no other languages which remove it in the sort key AFAIK. If it needs to be -- removed, specify the script(s) it needs to be removed under or add handling for the "all" script that applies -- regardless of script. --all = { -- remove_diacritics = c.ZWJ, --}, }, } m["sc"] = { "tiếng Sardegna", 33976, "roa", "Latn", "Tiếng Sardegna", "Sardegna", } m["sd"] = { "tiếng Sindh", 33997, "inc-snd", "sd-Arab, Deva, Sind, Khoj", "Tiếng Sindh", "Sindh", ancestors = "pra", translit = { Sind = "Sind-translit", ["sd-Arab"] = "sd-Arab-translit" }, strip_diacritics = { ["sd-Arab"] = { remove_diacritics = c.kashida .. c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.superalef, from = {"ٱ"}, to = {"ا"} }, }, } m["se"] = { "tiếng Bắc Sami", 33947, "smi", "Latn", "Tiếng Bắc Sami", "Bắc Sami", display_text = { from = {"'"}, to = {"ˈ"} }, strip_diacritics = {remove_diacritics = c.macron .. c.dotbelow .. "'ˈ"}, sort_key = { from = {"á", "č", "đ", "ŋ", "š", "ŧ", "ž"}, to = {"a" .. p[1], "c" .. p[1], "d" .. p[1], "n" .. p[1], "s" .. p[1], "t" .. p[1], "z" .. p[1]} }, standard_chars = "AaÁáBbCcČčDdĐđEeFfGgHhIiJjKkLlMmNnŊŋOoPpRrSsŠšTtŦŧUuVvZzŽž" .. c.punc, } m["sg"] = { "tiếng Sango", 33954, "crp", "Latn", ancestors = "ngb", "Tiếng Sango", "Sango", } m["sh"] = { "tiếng Serbia-Croatia", 9301, "zls", "Latn, Cyrl, Glag, Arab", ietf_subtag = "hbs", -- ISO 639-3 code, since "sh" is deprecated from ISO 639-1 wikimedia_codes = "sh, bs, hr, sr", strip_diacritics = { Latn = { remove_diacritics = c.grave .. c.acute .. c.tilde .. c.macron .. c.dgrave .. c.invbreve, remove_exceptions = {"Ć", "ć", "Ś", "ś", "Ź", "ź"} }, Cyrl = { remove_diacritics = c.grave .. c.acute .. c.tilde .. c.macron .. c.dgrave .. c.invbreve, remove_exceptions = {"З́", "з́", "С́", "с́"} }, }, sort_key = { Latn = { remove_diacritics = c.grave .. c.acute .. c.tilde .. c.macron .. c.dgrave .. c.invbreve, remove_exceptions = {"ć", "ś", "ź"}, from = {"č", "ć", "dž", "đ", "lj", "nj", "š", "ś", "ž", "ź"}, to = {"c" .. p[1], "c" .. p[2], "d" .. p[1], "d" .. p[2], "l" .. p[1], "n" .. p[1], "s" .. p[1], "s" .. p[2], "z" .. p[1], "z" .. p[2]} }, Cyrl = { remove_diacritics = c.grave .. c.acute .. c.tilde .. c.macron .. c.dgrave .. c.invbreve, remove_exceptions = {"з́", "с́"}, from = {"ђ", "з́", "ј", "љ", "њ", "с́", "ћ", "џ"}, to = {"д" .. p[1], "з" .. p[1], "и" .. p[1], "л" .. p[1], "н" .. p[1], "с" .. p[1], "т" .. p[1], "ч" .. p[1]} }, }, standard_chars = { Latn = "AaBbCcČčĆćDdĐđEeFfGgHhIiJjKkLlMmNnOoPpRrSsŠšTtUuVvZzŽž", Cyrl = "АаБбВвГгДдЂђЕеЖжЗзИиЈјКкЛлЉљМмНнЊњОоПпРрСсТтЋћУуФфХхЦцЧчЏџШш", c.punc }, } m["si"] = { "tiếng Sinhala", 13267, "inc-ins", "Sinh", "Tiếng Sinhala", "Sinhala", translit = "si-translit", override_translit = true, } m["sk"] = { "tiếng Slovak", 9058, "zlw", "Latn", "Tiếng Slovak", "Slovak", ancestors = "zlw-osk,sla-pro", sort_key = {remove_diacritics = c.acute .. c.circ .. c.diaer}, standardChars = "AaÁáÄäBbCcČčDdĎďEeFfGgHhIiÍíJjKkLlĹ弾MmNnŇňOoÔôPpRrŔŕSsŠšTtŤťUuÚúVvYyÝýZzŽž" .. c.punc, } m["sl"] = { "tiếng Slovene", 9063, "zls", "Latn", "Tiếng Slovene", "Slovene", strip_diacritics = { remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.dgrave .. c.invbreve .. c.dotbelow, remove_exceptions = {"Ć", "ć", "Ǵ", "ǵ", "Ś", "ś", "Ź", "ź"}, from = {"Ə", "ə", "Ł", "ł"}, to = {"E", "e", "L", "l"}, }, sort_key = { remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.macron .. c.dotabove .. c.ringabove .. c.dgrave .. c.invbreve .. c.dotbelow .. c.ringbelow .. c.ogonek, remove_exceptions = {"ć", "ǵ", "ś", "ź"}, from = {"ä", "č", "ć", "đ", "ə", "ë", "ǧ", "ǵ", "ï", "ł", "ö", "š", "ś", "ü", "ž", "ź"}, to = {"a" .. p[1], "c" .. p[1], "c" .. p[2], "d" .. p[1], "e", "e" .. p[1], "g" .. p[1], "g" .. p[2], "i" .. p[1], "l", "o" .. p[1], "s" .. p[1], "s" .. p[2], "u" .. p[1], "z" .. p[1], "z" .. p[2]}, }, standard_chars = "AaBbCcČčDdEeFfGgHhIiJjKkLlMmNnOoPpRrSsŠšTtUuVvZzŽž" .. c.punc, } m["sm"] = { "tiếng Samoa", 34011, "poz-pnp", "Latn", "Tiếng Samoa", "Samoa", } m["sn"] = { "tiếng Shona", 34004, "bnt-sho", "Latn", "Tiếng Shona", "Shona", strip_diacritics = {remove_diacritics = c.acute}, } m["so"] = { "tiếng Somali", 13275, "cus-som", "Latn, Arab, Osma", "Tiếng Somali", "Somali", strip_diacritics = { Latn = {remove_diacritics = c.grave .. c.acute .. c.circ} }, } m["sq"] = { "tiếng Albani", 8748, "sqj", "Latn, Grek, ota-Arab, Elba, Todr, Vith", "Tiếng Albani", "Albani", translit = {Elba = "Elba-translit"}, entry_name = {Latn = { remove_diacritics = c.acute, from = {'^i (%w)', '^të (%w)'}, to = {'%1', '%1'}, }}, sort_key = {Latn = { remove_diacritics = c.acute .. c.circ .. c.tilde .. c.breve .. c.caron, from = {'ç', 'dh', 'ë', 'gj', 'll', 'nj', 'rr', 'sh', 'th', 'xh', 'zh'}, to = {'c'..p[1], 'd'..p[1], 'e'..p[1], 'g'..p[1], 'l'..p[1], 'n'..p[1], 'r'..p[1], 's'..p[1], 't'..p[1], 'x'..p[1], 'z'..p[1]}, }}, standardChars = "AaBbCcÇçDdEeËëFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvXxYyZz" .. c.punc, } m["ss"] = { "tiếng Swazi", 34014, "bnt-ngu", "Latn", "Tiếng Swazi", "Swazi", strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.caron}, } m["st"] = { "tiếng Sotho", 34340, "bnt-sts", "Latn", "Tiếng Sotho", "Sotho", strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.caron}, } m["su"] = { "tiếng Sunda", 34002, "poz-msa", "Latn, Sund", "Tiếng Sunda", "Sunda", ancestors = "osn", translit = {Sund = "su-translit"}, } m["sv"] = { "tiếng Thụy Điển", 9027, "gmq-eas", "Latn", "Tiếng Thụy Điển", "Thụy Điển", ancestors = "gmq-osw-lat", sort_key = { remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.macron .. c.dacute .. c.caron .. c.cedilla .. "':", remove_exceptions = {"å"}, from = {"ø", "æ", "œ", "ß", "å", "aͤ", "oͤ"}, to = {"o", "ae", "oe", "ss", "z" .. p[1], "ä", "ö"} }, standardChars = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpRrSsTtUuVvXxYyÅåÄäÖö" .. c.punc, } m["sw"] = { "tiếng Swahili", 7838, "bnt-swh", "Latn, Arab", "Tiếng Swahili", "Swahili", sort_key = { Latn = { from = {"ng'"}, to = {"ng" .. p[1]} }, }, } m["ta"] = { "tiếng Tamil", 5885, "dra-tam", "Taml", "Tiếng Tamil", "Tamil", ancestors = "ta-mid", translit = "ta-translit", override_translit = true, } m["te"] = { "tiếng Telugu", 8097, "dra-tel", "Telu", "Tiếng Telugu", "Telugu", translit = "te-translit", override_translit = true, } m["tg"] = { "tiếng Tajik", 9260, "ira-swi", "Cyrl, fa-Arab, Latn", "Tiếng Tajik", "Tajik", ancestors = "fa-cls", translit = { Cyrl = "tg-translit" }, override_translit = true, strip_diacritics = { Cyrl = s["tg-stripdiacritics"], Latn = s["tg-stripdiacritics"], }, sort_key = { Cyrl = { from = {"ғ", "ё", "ӣ", "қ", "ӯ", "ҳ", "ҷ"}, to = {"г" .. p[1], "е" .. p[1], "и" .. p[1], "к" .. p[1], "у" .. p[1], "х" .. p[1], "ч" .. p[1]} }, }, } m["th"] = { "tiếng Thái", 9217, "tai-swe", "Thai, Khomt, Brai", "Tiếng Thái", "Thái", translit = { Thai = "th-translit" }, sort_key = { Thai = "Thai-sortkey" }, } m["ti"] = { "tiếng Tigrinya", 34124, "sem-eth", "Ethi", "Tiếng Tigrinya", "Tigrinya", translit = "Ethi-translit", } m["tk"] = { "tiếng Turkmen", 9267, "trk-ogz", "Latn, Cyrl, Arab", "Tiếng Turkmen", "Turkmen", strip_diacritics = { Latn = s["tk-stripdiacritics"], Cyrl = s["tk-stripdiacritics"], }, sort_key = { Latn = { from = {"ç", "ä", "ž", "ň", "ö", "ş", "ü", "ý"}, to = {"c" .. p[1], "e" .. p[1], "j" .. p[1], "n" .. p[1], "o" .. p[1], "s" .. p[1], "u" .. p[1], "y" .. p[1]} }, Cyrl = { from = {"ё", "җ", "ң", "ө", "ү", "ә"}, to = {"е" .. p[1], "ж" .. p[1], "н" .. p[1], "о" .. p[1], "у" .. p[1], "э" .. p[1]} }, }, } m["tl"] = { "tiếng Tagalog", 34057, "phi", "Latn, Tglg", "Tiếng Tagalog", "Tagalog", translit = { Tglg = "tl-translit" }, override_translit = true, strip_diacritics = { Latn = {remove_diacritics = c.grave .. c.acute .. c.circ} }, standard_chars = { Latn = "AaBbKkDdEeGgHhIiLlMmNnOoPpRrSsTtUuWwYy", c.punc }, sort_key = { Latn = "tl-sortkey", }, } m["tn"] = { "tiếng Tswana", 34137, "bnt-sts", "Latn", "Tiếng Tswana", "Tswana", } m["to"] = { "tiếng Tonga", 34094, "poz-pol", "Latn", "Tiếng Tonga", "Tonga", strip_diacritics = {remove_diacritics = c.acute}, sort_key = {remove_diacritics = c.macron}, } m["tr"] = { "tiếng Thổ Nhĩ Kỳ", 256, "trk-ogz", "Latn", "Tiếng Thổ Nhĩ Kỳ", "Thổ Nhĩ Kỳ", ancestors = "ota", dotted_dotless_i = true, sort_key = { from = { -- Ignore circumflex, but account for capital Î wrongly becoming ı + circ due to dotted dotless I logic. "ı" .. c.circ, c.circ, "i", -- Ensure "i" comes after "ı". "ç", "ğ", "ı", "ö", "ş", "ü" }, to = { "i", "", "i" .. p[1], "c" .. p[1], "g" .. p[1], "i", "o" .. p[1], "s" .. p[1], "u" .. p[1] } }, standard_chars = "AaÂâBbCcÇçDdEeFfGgĞğHhIıİiÎîJjKkLlMmNnOoÖöPpRrSsŞşTtUuÛûÜüVvYyZz" .. c.punc, } m["ts"] = { "tiếng Tsonga", 34327, "bnt-tsr", "Latn", "Tiếng Tsonga", "Tsonga", } m["tt"] = { "tiếng Tatar", 25285, "trk-kbu", "Cyrl, Latn, tt-Arab", "Tiếng Tatar", "Tatar", translit = { Cyrl = "tt-translit", ["tt-Arab"] = "tt-translit" }, --override_translit = true, -- enable override until Module code can detect Russian loans such as [[аэропорт]] dotted_dotless_i = true, sort_key = { Cyrl = { from = {"ә", "ў", "ғ", "ё", "җ", "қ", "ң", "ө", "ү", "һ"}, to = {"а" .. p[1], "в" .. p[1], "г" .. p[1], "е" .. p[1], "ж" .. p[1], "к" .. p[1], "н" .. p[1], "о" .. p[1], "у" .. p[1], "х" .. p[1]} }, Latn = { from = { "i", -- Ensure "i" comes after "ı". "ä", "ə", "ç", "ğ", "ı", "ñ", "ŋ", "ö", "ɵ", "ş", "ü" }, to = { "i" .. p[1], "a" .. p[1], "a" .. p[2], "c" .. p[1], "g" .. p[1], "i", "n" .. p[1], "n" .. p[2], "o" .. p[1], "o" .. p[2], "s" .. p[1], "u" .. p[1] } }, }, } -- "tw" IS TREATED AS "ak", SEE WT:LT m["ty"] = { "tiếng Tahiti", 34128, "poz-pep", "Latn", "Tiếng Tahiti", "Tahiti", } m["ug"] = { "tiếng Duy Ngô Nhĩ", 13263, "trk-kar", "ug-Arab, Latn, Cyrl", "Tiếng Duy Ngô Nhĩ", "Duy Ngô Nhĩ", ancestors = "chg", translit = { ["ug-Arab"] = "ug-translit", Cyrl = "ug-translit", }, override_translit = true, } m["uk"] = { "tiếng Ukraina", 8798, "zle", "Cyrl", "Tiếng Ukraina", "Ukraina", ancestors = "zle-ouk", translit = "uk-translit", strip_diacritics = {remove_diacritics = c.grave .. c.acute}, sort_key = { remove_diacritics = c.grave .. c.acute, from = { "ї", -- 2 chars "ґ", "є", "і" -- 1 char }, to = { "и" .. p[2], "г" .. p[1], "е" .. p[1], "и" .. p[1] } }, standard_chars = "АаБбВвГгДдЕеЄєЖжЗзИиІіЇїЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЬьЮюЯя" .. c.punc:gsub("'", ""), -- Exclude apostrophe. } m["ur"] = { "tiếng Urdu", 1617, "inc-hnd", "ur-Arab", "Tiếng Urdu", "Urdu", translit = {["ur-Arab"] = "ur-translit"}, entry_name = { -- character "ۂ" code U+06C2 to "ه" and "هٔ"‎ (U+0647 + U+0654) to "ه"; hamzatu l-waṣli to a regular alif from = {"هٔ", "ۂ", "ٱ"}, to = {"ہ", "ہ", "ا"}, remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.nunghunna .. c.superalef }, -- put Judeo-Urdu (Hebrew-script Urdu) under the category header -- U+FB21 HEBREW LETTER WIDE ALEF so that it sorts after Arabic script titles sort_key = { from = {"^%f[" .. u(0x5D0) .. "-" .. u(0x5EA) .. "]"}, to = {u(0xFB21)}, }, } m["uz"] = { "tiếng Uzbek", 9264, "trk-kar", "Latn, Cyrl, fa-Arab", "Tiếng Uzbek", "Uzbek", ancestors = "chg", translit = { Cyrl = "uz-translit" }, sort_key = { Latn = { from = {"oʻ", "gʻ", "sh", "ch", "ng"}, to = {"z" .. p[1], "z" .. p[2], "z" .. p[3], "z" .. p[4], "z" .. p[5]} }, Cyrl = { from = {"ё", "ў", "қ", "ғ", "ҳ"}, to = {"е" .. p[1], "я" .. p[1], "я" .. p[2], "я" .. p[3], "я" .. p[4]} }, }, strip_diacritics = { ["fa-Arab"] = "ar-stripdiacritics", }, } m["ve"] = { "tiếng Venda", 32704, "bnt-bso", "Latn", "Tiếng Venda", "Venda", } m["vi"] = { "tiếng Việt", 9199, "mkh-vie", "Latn, Hani", "Tiếng Việt", "Việt", ancestors = "mkh-mvi", sort_key = { Latn = "vi-sortkey", Hani = "Hani-sortkey", }, } m["vo"] = { "tiếng Volapük", 36986, "art", "Latn", "Tiếng Volapük", "Volapük", } m["wa"] = { "tiếng Wallon", 34219, "roa-oil", "Latn", "Tiếng Wallon", "Wallon", sort_key = s["roa-oil-sortkey"], } m["wo"] = { "tiếng Wolof", 34257, "alv-fwo", "Latn, Arab, Gara", "Tiếng Wolof", "Wolof", } m["xh"] = { "tiếng Xhosa", 13218, "bnt-ngu", "Latn", "Tiếng Xhosa", "Xhosa", strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.caron}, } m["yi"] = { "tiếng Yiddish", 8641, "gmw-hgm", "Hebr", "Tiếng Yiddish", "Yiddish", ancestors = "gmh", translit = "yi-translit", sort_key = { from = {"א[ַָ]", "בּ", "ו[ֹּ]", "יִ", "ײַ", "פֿ"}, to = {"א", "ב", "ו", "י", "יי", "פ"} }, } m["yo"] = { "tiếng Yoruba", 34311, "alv-yor", "Latn, Arab", "Tiếng Yoruba", "Yoruba", strip_diacritics = { Latn = {remove_diacritics = c.grave .. c.acute .. c.macron} }, sort_key = { Latn = { from = {"ẹ", "ɛ", "gb", "ị", "kp", "ọ", "ɔ", "ṣ", "sh", "ụ"}, to = {"e" .. p[1], "e" .. p[1], "g" .. p[1], "i" .. p[1], "k" .. p[1], "o" .. p[1], "o" .. p[1], "s" .. p[1], "s" .. p[1], "u" .. p[1]} }, }, } m["za"] = { "tiếng Tráng", 13216, "tai", "Latn, Hani", "Tiếng Tráng", "Tráng", sort_key = { Latn = "za-sortkey", Hani = "Hani-sortkey", }, } m["zh"] = { "tiếng Trung Quốc", 7850, "zhx", "Hants, Latn, Bopo, Nshu, Brai", "Tiếng Trung Quốc", "Trung Quốc", ancestors = "ltc", generate_forms = "zh-generateforms", translit = { Hani = "zh-translit", Bopo = "zh-translit", }, sort_key = {Hani = "Hani-sortkey"}, } m["zu"] = { "tiếng Zulu", 10179, "bnt-ngu", "Latn", "Tiếng Zulu", "Zulu", strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.caron}, } return require("Module:languages").finalizeData(m, "language") ql9samxec8eqp1oi7jzbbyqym3au7of 煦 0 260703 2568726 2030745 2026-10-06T01:26:56Z Hiyuune 50834 2568726 wikitext text/x-wiki {{character info}} =={{langname|mul}}== ==={{ĐM|han}}=== {{Han char|rn=86|rad=火|as=09|sn=13|four=67332|canj=ARF,XARF|ids=⿱昫灬}} ===={{ĐM|derived characters}}==== * {{lang|mul|[[𬞜]]}} ===={{ĐM|ref}}==== * {{Han ref|kx=0677.350|dkj=19225|dj=1089.020|hdz=32220.170|uh=7166}} i5cqhhyf7ca27tmqk0dxw0xtwufeidr Mô đun:languages/data/3/t 828 260866 2568664 2568395 2026-10-05T14:35:45Z Lcsnes 40261 2568664 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["taa"] = { "tiếng Hạ Tanana", 28565, "ath-nor", "Latn", "Tiếng Hạ Tanana", "Hạ Tanana", } m["tab"] = { "tiếng Tabasaran", 34079, "cau-esm", "Cyrl, Latn, Arab", "Tiếng Tabasaran", "Tabasaran", translit = "tab-translit", override_translit = true, display_text = {Cyrl = s["cau-Cyrl-displaytext"]}, entry_name = { Cyrl = s["cau-Cyrl-entryname"], Latn = s["cau-Latn-entryname"], }, sort_key = "tab-sortkey", } m["tac"] = { "Lowland Tarahumara", 15616384, "azc-trc", "Latn", } m["tad"] = { "tiếng Tause", 2356440, "paa-wlp", "Latn", } m["tae"] = { "tiếng Tariana", 732726, "awd-nwk", "Latn", "Tiếng Tariana", "Tariana", } m["taf"] = { "tiếng Tapirapé", 7684673, "tup-gua", "Latn", "Tiếng Tapirapé", "Tapirapé", } m["tag"] = { "tiếng Tagoi", 36537, "nic-ras", "Latn", "Tiếng Tagoi", "Tagoi", } m["taj"] = { "tiếng Tamang Đông", 12953177, "sit-tam", "sit-tam-Tibt, Deva", display_text = {["sit-tam-Tibt"] = s["Tibt-displaytext"]}, entry_name = {["sit-tam-Tibt"] = s["Tibt-entryname"]}, "Tiếng Tamang Đông", "Tamang Đông", } m["tak"] = { "tiếng Tala", 3914494, "cdc-wst", "Latn", "Tiếng Tala", "Tala", } m["tal"] = { "tiếng Tal", 3440387, "cdc-wst", "Latn", "Tiếng Tal", "Tal", } m["tan"] = { "Tangale", 529921, "cdc-wst", "Latn", } m["tao"] = { "tiếng Yami", 715760, "phi", "Latn", "Tiếng Yami", "Yami", } m["tap"] = { "tiếng Taabwa", 7673650, "bnt-sbi", "Latn", "Tiếng Taabwa", "Taabwa", } m["tar"] = { "Central Tarahumara", 20090009, "azc-trc", "Latn", sort_key = {remove_diacritics = c.acute .. "ꞌ"}, } m["tas"] = { "tiếng Tây Bồi", 2233794, "crp", "Latn", ancestors = "fr", sort_key = s["roa-oil-sortkey"], "Tiếng Tây Bồi", "Tây Bồi", } m["tau"] = { "Upper Tanana", 28281, "ath-nor", "Latn", } m["tav"] = { "tiếng Tatuyo", 2524007, "sai-tuc", "Latn", "Tiếng Tatuyo", "Tatuyo", } m["taw"] = { "Tai", 7675861, "ngf-mad", "Latn", } m["tax"] = { "tiếng Tamki", 3449082, "cdc-est", "Latn", "Tiếng Tamki", "Tamki", } m["tay"] = { "tiếng Atayal", 715766, "map-ata", "Latn", "Tiếng Atayal", "Atayal", } m["taz"] = { "tiếng Tocho", 36680, "alv-tal", "Latn", "Tiếng Tocho", "Tocho", } m["tba"] = { "Aikanã", 3409307, "qfa-iso", } m["tbb"] = { "Tapeba", 12953908, } m["tbc"] = { "Takia", 3514336, "poz-oce", } m["tbd"] = { "tiếng Kaki Ae", 6349417, "poz-ocw", "Latn", "Tiếng Kaki Ae", "Kaki Ae", } m["tbe"] = { "tiếng Tanimbili", 3515188, "poz-oce", "Latn", "Tiếng Tanimbili", "Tanimbili", } m["tbf"] = { "tiếng Mandara", 3285424, "poz-ocw", "Latn", "Tiếng Mandara", "Mandara" } m["tbg"] = { "North Tairora", 20210398, "paa-kag", } m["tbh"] = { "Thurawal", 3537135, "aus-yuk", } m["tbi"] = { "Gaam", 35338, "sdv-eje", "Latn", } m["tbj"] = { "tiếng Tiang", 3528020, "poz-ocw", "Latn", "Tiếng Tiang", "Tiang", } m["tbk"] = { "tiếng Tagbanwa Calamian", 3915487, "phi-kal", "Latn", "Tiếng Tagbanwa Calamian", "Tagbanwa Calamian", } m["tbl"] = { "Tboli", 7690594, "phi", } m["tbm"] = { "Tagbu", 7675188, "nic-ser", } m["tbn"] = { "Barro Negro Tunebo", 12953943, "cba", } m["tbo"] = { "Tawala", 7689206, "poz-ocw", "Latn", } m["tbp"] = { "Taworta", 7689337, "paa-lkp", "Latn", } m["tbr"] = { "Tumtum", 3407029, "qfa-kad", } m["tbs"] = { "Tanguat", 7683166, "paa", "Latn", } m["tbt"] = { "Kitembo", 13123561, "bnt-shh", "Latn", } m["tbu"] = { "Tubar", 56730, "azc-trc", "Latn", } m["tbv"] = { "Tobo", 7811712, "ngf", } m["tbw"] = { "Tagbanwa", 3915475, "phi", "Latn", } m["tbx"] = { "Kapin", 6366665, "poz-ocw", "Latn", } m["tby"] = { "Tabaru", 11732670, "paa-nha", } m["tbz"] = { "tiếng Tammari", 35186, "nic-eov", "Latn", "Tiếng Tammari", "Tammari", } m["tca"] = { "Ticuna", 1815205, "sai-tyu", "Latn", } m["tcb"] = { "Tanacross", 28268, "ath-nor", "Latn", } m["tcc"] = { "Datooga", 35327, "sdv-nis", "Latn", } m["tcd"] = { "tiếng Tafi", 36545, "alv-ktg", "Latn", "Tiếng Tafi", "Tafi", } m["tce"] = { "Southern Tutchone", 31091048, "ath-nor", "Latn", } m["tcf"] = { "tiếng Tlapanec Malinaltepec", 25559732, "omq", "Latn", "Tiếng Tlapanec Malinaltepec", "Tlapanec Malinaltepec", } m["tcg"] = { "Tamagario", 7680531, "ngf", } m["tch"] = { "Turks and Caicos Creole English", 7855478, "crp", "Latn", ancestors = "en", } m["tci"] = { "Wára", 20825638, "paa-yam", } m["tck"] = { "Tchitchege", 36595, "bnt-tek", } m["tcl"] = { "Taman (Myanmar)", 15616518, "sit-jnp", "Latn", } m["tcm"] = { "Tanahmerah", 3514927, "ngf", } m["tco"] = { "tiếng Taungyo", 12953186, "tbq-brm", "Mymr", "Tiếng Taungyo", "Taungyo", ancestors = "obr", } m["tcp"] = { "Tawr Chin", 7689338, "tbq-kuk", } m["tcq"] = { "Kaiy", 6348709, "paa-lkp", } m["tcs"] = { "Torres Strait Creole", 36648, "crp", "Latn", ancestors = "en", } m["tct"] = { "T'en", 3442330, "qfa-kms", } m["tcu"] = { "Southeastern Tarahumara", 36807, "azc-trc", "Latn", } m["tcw"] = { "Tecpatlán Totonac", 7692795, "nai-ttn", "Latn", } m["tcx"] = { "tiếng Toda", 34042, "dra-tkt", "Taml", "Tiếng Toda", "Toda", } m["tcy"] = { "tiếng Tulu", 34251, "dra-tlk", "Tutg, Mlym, Knda", -- Tigalari is not available. Mlym is nearer than Knda but both lack ɛ/ɛː. "Tiếng Tulu", "Tulu", translit = { Mlym = "ml-translit", Knda = "kn-translit", }, } m["tcz"] = { "Thado Chin", 6583558, "tbq-kuk", } m["tda"] = { "tiếng Tagdal", 36570, "son", "Latn, Tfng", "Tiếng Tagdal", "Tagdal", translit = {Tfng = "Tfng-translit"}, } m["tdb"] = { "tiếng Panchpargania", 21946879, "inc-eas", "Deva, as-Beng, Orya, Chis", "Tiếng Panchpargania", "Panchpargania", ancestors = "bh", } m["tdc"] = { "tiếng Emberá-Tadó", 3052041, "sai-chc", "Latn", "Tiếng Emberá-Tadó", "Emberá-Tadó", } m["tdd"] = { "tiếng Thái Na", 36556, "tai-swe", "Tale", "Tiếng Thái Na", "Thái Na", translit = "Tale-translit", entry_name = {remove_diacritics = c.ZWNJ .. c.ZWJ}, } m["tde"] = { "Tiranige Diga Dogon", 5313387, "nic-dgw", } m["tdf"] = { "Talieng", 37525108, "mkh-ban", } m["tdg"] = { "tiếng Tamang Tây", 12953178, "sit-tam", "sit-tam-Tibt, Deva", display_text = {["sit-tam-Tibt"] = s["Tibt-displaytext"]}, entry_name = {["sit-tam-Tibt"] = s["Tibt-entryname"]}, "Tiếng Tamang Tây", "Tamang Tây", } m["tdh"] = { "Thulung", 56553, "sit-kiw", } m["tdi"] = { "Tomadino", 7818197, "poz-btk", "Latn", } m["tdj"] = { "tiếng Tajio", 7676870, "poz", "Latn", } m["tdk"] = { "Tambas", 3440392, "cdc-wst", } m["tdl"] = { "Sur", 3914453, "nic-tar", } m["tdm"] = { "Taruma", nil, } m["tdn"] = { "Tondano", 3531514, "phi", } m["tdo"] = { "Teme", 3913994, "alv-mye", } m["tdq"] = { "Tita", 3914899, "nic-bco", } m["tdr"] = { "tiếng Tơ Đrá", 7812881, "mkh-nbn", "Latn", "Tiếng Tơ Đrá", "Tơ Đrá" } m["tds"] = { "Doutai", 5302331, "paa-lkp", } m["tdt"] = { "Tetun Dili", 12643484, "crp", "Latn", ancestors = "tet", } m["tdu"] = { "Tempasuk Dusun", 3529155, "poz-san", } m["tdv"] = { "Toro", 3438367, "nic-alu", } m["tdy"] = { "tiếng Tadyawan", 7674700, "phi", "Latn", "Tiếng Tadyawan", "Tadyawan" } m["tea"] = { "tiếng Temiar", 3914693, "mkh-asl", "Latn", "Tiếng Temiar", "Temiar", } m["teb"] = { "Tetete", 7706087, "sai-tuc", "Latn", } m["tec"] = { "Terik", 3518379, "sdv-nma", } m["ted"] = { "Tepo Krumen", 11152243, "kro-grb", } m["tee"] = { "Huehuetla Tepehua", 56455, "nai-ttn", } m["tef"] = { "tiếng Teressa", 3518362, "aav-nic", "Deva, Latn", "Tiếng Teressa", "Teressa", } m["teg"] = { "Teke-Tege", 36478, "bnt-tek", } m["teh"] = { "Tehuelche", 33930, "sai-cho", "Latn", } m["tei"] = { "Torricelli", 3450788, "qfa-tor", } m["tek"] = { "Ibali Teke", 2802914, "bnt-tek", } m["tem"] = { "tiếng Temne", 36613, "alv-mel", "Latn", "Tiếng Temne", "Temne", } m["ten"] = { "Tama (Colombia)", 3832969, "sai-tuc", "Latn", } m["teo"] = { "Ateso", 29474, "sdv-ttu", "Latn", } m["tep"] = { "Tepecano", 3915525, "azc", "Latn", } m["teq"] = { "Temein", 7698064, "sdv", } m["ter"] = { "Tereno", 3314742, "awd", "Latn", } m["tes"] = { "tiếng Tengger", 12473479, "poz", "Latn", "Tiếng Tengger", "Tengger", } m["tet"] = { "tiếng Tetum", 34125, "poz-tim", "Latn", "Tiếng Tetum", "Tetum", } m["teu"] = { "Soo", 3437607, "ssa-klk", } m["tev"] = { "Teor", 12953198, "poz-cma", } m["tew"] = { "Tewa", 56492, "nai-kta", "Latn", } m["tex"] = { "Tennet", 56346, "sdv", } m["tey"] = { "Tulishi", 12911106, "qfa-kad", "Latn", } m["tez"] = { "tiếng Tetserret", 7706841, "ber", "Latn, Tfng", "Tiếng Tetserret", "Tetserret", translit = {Tfng = "Tfng-translit"}, } m["tfi"] = { "Tofin Gbe", 3530330, "alv-pph", } m["tfn"] = { "tiếng Dena'ina", 27785, "ath-nor", "Latn", } m["tfo"] = { "Tefaro", 7694618, "paa-egb", "Latn", } m["tfr"] = { "tiếng Teribe", 36533, "cba", "Latn", "Tiếng Teribe", "Teribe", } m["tft"] = { "tiếng Ternate", 3518492, "paa-nha", "Latn, Arab", "Tiếng Ternate", "Ternate", } m["tga"] = { "Sagalla", 12953082, "bnt-cht", } m["tgb"] = { "Tobilung", 12953913, "poz-san", } m["tgc"] = { "Tigak", 3528276, "poz-ocw", } m["tgd"] = { "Ciwogai", 3438799, "cdc-wst", } m["tge"] = { "tiếng Tamang Gorkha Đông", 12953175, "sit-tam", "sit-tam-Tibt, Deva", display_text = {["sit-tam-Tibt"] = s["Tibt-displaytext"]}, entry_name = {["sit-tam-Tibt"] = s["Tibt-entryname"]}, "Tiếng Tamang Gorkha Đông", "Tamang Gorkha Đông", } m["tgf"] = { "Chali", 3695197, "sit-ebo", "Tibt, Latn", 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["tgh"] = { "Tobagonian Creole English", 7811541, "crp", ancestors = "en", } m["tgi"] = { "Lawunuia", 3219937, "poz-ocw", } m["tgn"] = { "Tandaganon", nil, "phi", } m["tgo"] = { "Sudest", 7675351, "poz-ocw", } m["tgp"] = { "tiếng Tangoa", 2410276, "poz-vnc", "Latn", "Tiếng Tangoa", "Tangoa", } m["tgq"] = { "Tring", 7842360, "poz-swa", } m["tgr"] = { "Tareng", 25559541, "mkh", } m["tgs"] = { "Nume", 3346290, "poz-vnc", } m["tgt"] = { "Central Tagbanwa", 3915515, "phi", "Tagb", } m["tgu"] = { "Tanggu", 7682930, "paa", "Latn", } m["tgv"] = { "Tingui-Boto", 7808195, "sai-mje", "Latn", } m["tgw"] = { "Tagwana Senoufo", 36514, "alv-tdj", } m["tgx"] = { "Tagish", 28064, "ath-nor", "Latn", } m["tgy"] = { "Togoyo", 36825, "nic-ser", } m["thc"] = { "Tai Hang Tong", 7675753, "tai-nor", } m["thd"] = { "Kuuk Thaayorre", 6448718, "aus-pmn", "Latn", } m["the"] = { "Chitwania Tharu", 22083804, "inc-eas", } m["thf"] = { "Thangmi", 7710314, "sit-new", } m["thh"] = { "Northern Tarahumara", 15616395, "azc-trc", "Latn", } m["thi"] = { "Tai Long", 25559562, "tai-swe", } m["thk"] = { "Tharaka", 15407179, "bnt-kka", } m["thl"] = { "Dangaura Tharu", 22083815, "inc-eas", } m["thm"] = { "tiếng Thavưng", 34780, "mkh-vie", "Thai", --Laoo is feasible but no evidence yet. "Tiếng Thavưng", "Thavưng", sort_key = "Thai-sortkey", } m["thn"] = { "tiếng Thachanad", 7708880, "dra-mal", "Mlym", "Tiếng Thachanad", "Thachanad", translit ="ml-translit", } m["thp"] = { "tiếng Thompson", 1755054, "sal", "Latn", "Tiếng Thompson", "Thompson", } m["thq"] = { "Kochila Tharu", 22083826, "inc-eas", } m["thr"] = { "Rana Tharu", 12953920, "inc-eas", } m["ths"] = { "Thakali", 7709348, "sit-tam", } m["tht"] = { "tiếng Tahltan", 30125, "ath-nor", "Latn", "Tiếng Tahltan", "Tahltan", } m["thu"] = { "Thuri", 7799291, "sdv-lon", } m["thy"] = { "Tha", 3915849, "alv-bwj", } m["tic"] = { "Tira", 36677, "alv-hei", } m["tif"] = { "Tifal", 11732691, "ngf-okk", } m["tig"] = { "tiếng Tigre", 34129, "sem-eth", "Ethi, Arab", "Tiếng Tigre", "Tigre", translit = {Ethi = "Ethi-translit"}, } m["tih"] = { "Timugon Murut", 7807680, "poz-san", } m["tii"] = { "Tiene", 36469, "bnt-tek", } m["tij"] = { "Tilung", 7803037, "sit-kiw", } m["tik"] = { "Tikar", 36483, "nic-bdn", "Latn", } m["til"] = { "Tillamook", 2109432, "sal", } m["tim"] = { "Timbe", 7804599, "ngf", } m["tin"] = { "tiếng Tindi", 36860, "cau-and", "Cyrl", "Tiếng Tindi", "Tindi", display_text = {Cyrl = s["cau-Cyrl-displaytext"]}, entry_name = {Cyrl = s["cau-Cyrl-entryname"]}, } m["tio"] = { "Teop", 3518239, "poz-ocw", } m["tip"] = { "Trimuris", 7842270, "paa-tkw", } m["tiq"] = { "Tiéfo", 3914874, "alv-sav", } m["tis"] = { "Masadiit Itneg", 18748769, "phi", } m["tit"] = { "Tinigua", 3029805, } m["tiu"] = { "Adasen", 11214797, "phi", } m["tiv"] = { "Tiv", 34131, "nic-tvc", "Latn", } m["tiw"] = { "tiếng Tiwi", 1656014, "qfa-iso", "Latn", "Tiếng Tiwi", "Tiwi", } m["tix"] = { "Southern Tiwa", 7570552, "nai-kta", "Latn", } m["tiy"] = { "tiếng Tiruray", 7809425, "phi", "Latn", "Tiếng Tiruray", "Tiruray", } m["tiz"] = { "Tai Hongjin", 3915716, "tai-swe", } m["tja"] = { "Tajuasohn", 3915326, "kro-wkr", } m["tjg"] = { "Tunjung", 3542117, "poz", } m["tji"] = { "tiếng Thổ Gia Bắc", 12953229, "sit-tja", "Latn", "Tiếng Thổ Gia Bắc", "Thổ Gia Bắc", } m["tjl"] = { "tiếng Thái Lai", 7675773, "tai-swe", "Mymr", "Tiếng Thái Lai", "Thái Lai", } m["tjm"] = { "Timucua", 638300, "qfa-iso", } m["tjn"] = { "Tonjon", 3913372, "dmn-jje", } m["tjs"] = { "tiếng Thổ Gia Nam", 12633994, "sit-tja", "Latn", "Tiếng Thổ Gia Nam", "Thổ Gia Nam", } m["tju"] = { "Tjurruru", 3913834, "aus-nga", "Latn", } m["tjw"] = { "Chaap Wuurong", 5285187, "aus-pam", "Latn", } m["tka"] = { "Truká", 7847648, } m["tkb"] = { "Buksa", 20983638, "inc-eas", } m["tkd"] = { "Tukudede", 36863, "poz-tim", "Latn", } m["tke"] = { "Takwane", 11030092, "bnt-mak", ancestors = "vmw", } m["tkf"] = { "Tukumanféd", 42330115, "tup-gua", "Latn", } m["tkl"] = { "tiếng Tokelau", 34097, "poz-pnp", "Latn", "Tiếng Tokelau", "Tokelau", } m["tkm"] = { "Takelma", 56710, } m["tkn"] = { "tiếng Tokunoshima", 3530484, "jpx-nry", "Jpan", "Tiếng Tokunoshima", "Tokunoshima", translit = s["jpx-translit"], display_text = s["jpx-displaytext"], entry_name = s["jpx-entryname"], sort_key = s["jpx-sortkey"], } m["tkp"] = { "Tikopia", 36682, "poz-pnp", "Latn", } m["tkq"] = { "Tee", 3075144, "nic-ogo", "Latn", } m["tkr"] = { "tiếng Tsakhur", 36853, "cau-wsm", "Cyrl, Latn, Arab", "Tiếng Tsakhur", "Tsakhur", display_text = {Cyrl = s["cau-Cyrl-displaytext"]}, entry_name = { Cyrl = s["cau-Cyrl-entryname"], Latn = s["cau-Latn-entryname"], }, } m["tks"] = { "Ramandi", 25261947, "xme-ttc", ancestors = "xme-ttc-sou", } m["tkt"] = { "Kathoriya Tharu", 22083822, "inc-eas", } m["tku"] = { "Upper Necaxa Totonac", 56343, "nai-ttn", "Latn", } m["tkv"] = { "Mur Pano", nil, "poz-ocw", "Latn", } m["tkw"] = { "Teanu", 3516731, "poz-oce", "Latn", } m["tkx"] = { "Tangko", 7682993, "ngf-okk", } m["tkz"] = { "Takua", 7678544, "mkh", } m["tla"] = { "Southwestern Tepehuan", 3518245, "azc", "Latn", } m["tlb"] = { "Tobelo", 1142333, "paa-nha", } m["tlc"] = { "Misantla Totonac", 56460, "nai-ttn", "Latn", } m["tld"] = { "Talaud", 7678964, "phi", } m["tlf"] = { "Telefol", 7696150, "ngf-okk", } m["tlg"] = { "Tofanma", 4461493, "paa-pau", } m["tlh"] = { "tiếng Klingon", 10134, "art", "Latn", "Tiếng Klingon", "Klingon", type = "appendix-constructed", } m["tli"] = { "tiếng Tlingit", 27792, "xnd", "Latn, Cyrl", "Tiếng Tlingit", "Tlingit", } m["tlj"] = { "Talinga-Bwisi", 7679530, "bnt-haj", } m["tlk"] = { "Taloki", 3514563, "poz-btk", } m["tll"] = { "Tetela", 2613465, "bnt-tet", } m["tlm"] = { "Tolomako", 3130514, "poz-vnc", } m["tln"] = { "Talondo'", 7680293, "poz-ssw", } m["tlo"] = { "Talodi", 36525, "alv-tal", } m["tlp"] = { "Filomena Mata-Coahuitlán Totonac", 5449202, "nai-ttn", "Latn", } m["tlq"] = { "tiếng Tai Loi", 7675784, "mkh-pal", nil, "Tiếng Tai Loi", "Tai Loi" } m["tlr"] = { "Talise", 3514510, "poz-sls", } m["tls"] = { "Tambotalo", 7681065, "poz-vnc", } m["tlt"] = { "Teluti", 12953194, "poz-cma", } m["tlu"] = { "Tulehu", 7852006, "poz-cma", } m["tlv"] = { "Taliabu", 3514498, "poz-cma", "Latn", } m["tlx"] = { "Khehek", 3196124, "poz-aay", } m["tly"] = { "tiếng Talysh", 34318, "xme-ttc", "Latn, Cyrl, fa-Arab", "Tiếng Talysh", "Talysh", } m["tma"] = { "Tama (Chad)", 57001, "sdv-tmn", } m["tmb"] = { "Avava", 2157461, "poz-vnc", } m["tmc"] = { "Tumak", 3121045, "cdc-est", } m["tmd"] = { "Haruai", 12632146, "ngf-mad", } m["tme"] = { "Tremembé", 5246937, } m["tmf"] = { "Toba-Maskoy", 3033544, "sai-mas", "Latn", } m["tmg"] = { "Ternateño", 7232597, } m["tmh"] = { "tiếng Tuareg", 34065, "ber", "Latn, Tfng, Arab", "Tiếng Tuareg", "Tuareg", entry_name = {remove_diacritics = c.grave .. c.acute .. c.circ}, } m["tmi"] = { "Tutuba", 7857052, "poz-vnc", } m["tmj"] = { "Samarokena", 7408865, "paa-tkw", } m["tmk"] = { "Northwestern Tamang", 15616509, "sit-tam", "sit-tam-Tibt, Deva", display_text = {["sit-tam-Tibt"] = s["Tibt-displaytext"]}, entry_name = {["sit-tam-Tibt"] = s["Tibt-entryname"]}, } m["tml"] = { "Tamnim Citak", 12643315, "ngf", } m["tmm"] = { "Tai Thanh", 7675842, "tai-swe", } m["tmn"] = { "Taman (Indonesia)", 7680671, "poz", "Latn", } m["tmo"] = { "tiếng Temoq", 7698205, "mkh-asl", "Latn", "Tiếng Temoq", "Temoq" } m["tmq"] = { "Tumleo", 7852641, "poz-ocw", } m["tms"] = { "Tima", 36684, "nic-ktl", } m["tmt"] = { "Tasmate", 7687571, "poz-vnc", } m["tmu"] = { "Iau", 56867, "paa-lkp", } m["tmv"] = { "Motembo", 11013108, "bnt-bun", } m["tmy"] = { "Tami", 3514812, "poz-oce", } m["tmz"] = { "Tamanaku", 3441435, "sai-ven", "Latn", } m["tna"] = { "Tacana", 3182551, "sai-tac", "Latn", } m["tnb"] = { "Western Tunebo", 3181238, "cba", } m["tnc"] = { "Tanimuca-Retuarã", 36535, "sai-tuc", "Latn", } m["tnd"] = { "Angosturas Tunebo", 25559604, "cba", } m["tne"] = { "Tinoc Kallahan", 3192219, } m["tng"] = { "Tobanga", 3440501, "cdc-est", } m["tnh"] = { "Maiani", 6735243, "ngf-mad", "Latn", } m["tni"] = { "Tandia", 7682454, "poz-hce", "Latn", } m["tnk"] = { "Kwamera", 3200806, "poz-oce", } m["tnl"] = { "Lenakel", 3229429, "poz-oce", } m["tnm"] = { "Tabla", 7673105, "paa-sen", } m["tnn"] = { "North Tanna", 957945, "poz-oce", } m["tno"] = { "Toromono", 510544, "sai-tac", "Latn", } m["tnp"] = { "Whitesands", 3063761, "poz-oce", } m["tnq"] = { "tiếng Taíno", 5232952, "awd-taa", "Latn", "Tiếng Taíno", "Taíno", } m["tnr"] = { "Bedik", 35096, "alv-ten", } m["tns"] = { "Tenis", 7699870, "poz-ocw", } m["tnt"] = { "Tontemboan", 3531666, "phi", "Latn", } m["tnu"] = { "Tay Khang", 6362363, "tai", } m["tnv"] = { "tiếng Tanchangya", 7682361, "inc-eas", "Cakm, Beng", "Tiếng Tanchangya", "Tanchangya", ancestors = "inc-obn", } m["tnw"] = { "Tonsawang", 3531660, "phi", } m["tnx"] = { "Tanema", 2106984, "poz-oce", } m["tny"] = { "Tongwe", 7821200, "bnt", } m["tnz"] = { "tiếng Ten'edn", 3073453, "mkh-asl", "Latn", "Tiếng Ten'edn", "Ten'edn", } m["tob"] = { "Toba", 3113756, "sai-guc", "Latn", } m["toc"] = { "Coyutla Totonac", 15615591, "nai-ttn", "Latn", } m["tod"] = { "tiếng Toma", 11055484, "dmn-msw", "Latn, Loma", "Tiếng Toma", "Toma", } m["tof"] = { "Gizrra", 5565941, } m["tog"] = { "Tonga (Malawi)", 3847648, "bnt-nys", "Latn", } m["toh"] = { "Tonga (Mozambique)", 7820988, "bnt-bso", } m["toi"] = { "Tonga (Zambia)", 34101, "bnt-bot", } m["toj"] = { "Tojolabal", 36762, "myn", } m["tok"] = { "tiếng Toki Pona", 36846, "art", "Latn", "Tiếng Toki Pona", "Toki Pona", type = "appendix-constructed", } m["tol"] = { "Tolowa", 20827, "ath-pco", "Latn", } m["tom"] = { "Tombulu", 3531199, "phi", } m["too"] = { "Xicotepec de Juárez Totonac", 8044353, "nai-ttn", "Latn", } m["top"] = { "tiếng Totonac Papantla", 56329, "nai-ttn", "Latn", "Tiếng Totonac Papantla", "Totonac Papantla", } m["toq"] = { "Toposa", 3033588, "sdv-ttu", } m["tor"] = { "Togbo-Vara Banda", 11002922, "bad-cnt", } m["tos"] = { "tiếng Totonac cao nguyên", 13154149, "nai-ttn", "Latn", "Tiếng Totonac cao nguyên", "Totonac cao nguyên", } m["tou"] = { "tiếng Thổ", 22694631, "mkh-vie", nil, "Tiếng Thổ", "Thổ", } m["tov"] = { "Upper Taromi", 12953183, "xme-ttc", ancestors = "xme-ttc-cen", } m["tow"] = { "tiếng Jemez", 3912876, "nai-kta", "Latn", "Tiếng Jemez", "Jemez", } m["tox"] = { "tiếng Tobi", 34022, "poz-mic", nil, "Tiếng Tobi", "Tobi", } m["toy"] = { "Topoiyo", 7824977, "poz-kal", } m["toz"] = { "To", 7811216, "alv-mbm", } m["tpa"] = { "Taupota", 7688832, "poz-ocw", } m["tpc"] = { "tiếng Me'phaa Azoyú", 25559730, "omq", "Latn", } m["tpe"] = { "tiếng Tippera", 16115423, "tbq-bdg", "Latn, Beng", "Tiếng Tippera", "Tippera", } m["tpf"] = { "Tarpia", 12953185, "poz-ocw", } m["tpg"] = { "Kula", 6442714, "qfa-tap", } m["tpi"] = { "tiếng Tok Pisin", 34159, "crp", "Latn", "Tiếng Tok Pisin", "Tok Pisin", ancestors = "en", } m["tpj"] = { "Tapieté", 3121063, } m["tpk"] = { "Tupinikin", 33924, "tup-gua", } m["tpl"] = { "tiếng Me'phaa Tlacoapa", 16115511, "omq", } m["tpm"] = { "Tampulma", 36590, "nic-gnw", } m["tpn"] = { "tiếng Tupi", 31528147, "tup-gua", "Latn", "Tiếng Tupi", "Tupi", } m["tpo"] = { "tiếng Thái Hàng Tổng", 7675795, "tai-nor", "Latn", "Tiếng Thái Hàng Tổng", "Thái Hàng Tổng" } m["tpp"] = { "Pisaflores Tepehua", 56349, "nai-ttn", } m["tpq"] = { "Tukpa", 12953230, "sit-las", } m["tpr"] = { "Tuparí", 3542217, "tup", "Latn", } m["tpt"] = { "tiếng Tepehua Tlachichilco", 56330, "nai-ttn", nil, "Tiếng Tepehua Tlachichilco", "Tepehua Tlachichilco", } m["tpu"] = { "tiếng Tampuan", 3514882, "mkh-ban", "Khmr", "Tiếng Tampuan", "Tampuan", } m["tpv"] = { "Tanapag", 3397371, "poz-mic", } m["tpw"] = { "tiếng Tupi cổ", 56944, "tup-gua", "Latn", "Tiếng Tupi cổ", "Tupi cổ", } m["tpx"] = { "tiếng Me'phaa Acatepec", 31157882, "omq", "Latn", } m["tpy"] = { "Trumai", 12294279, "qfa-iso", } m["tpz"] = { "Tinputz", 3529205, "poz-ocw", } m["tqb"] = { "Tembé", 10322157, "tup-gua", "Latn", } m["tql"] = { "Lehali", 3229119, "poz-oce", } m["tqm"] = { "Turumsa", 7856508, "paa", } m["tqn"] = { "Tenino", 15699255, "nai-shp", "Latn", ancestors = "nai-spt", } m["tqo"] = { "Toaripi", 7811403, "ngf", } m["tqp"] = { "Tomoip", 3531388, "poz-ocw", } m["tqq"] = { "tiếng Tunni", 3514343, "cus-som", nil, "Tiếng Tunni", "Tunni", } m["tqr"] = { "Torona", 36679, "alv-tal", } m["tqt"] = { "Western Totonac", 7116691, "nai-ttn", "Latn", } m["tqu"] = { "Touo", 56750, } m["tqw"] = { "tiếng Tonkawa", 2454881, "qfa-iso", "Latn", "Tiếng Tonkawa", "Tonkawa", } m["tra"] = { "Tirahi", 3812406, "inc-koh", } m["trb"] = { "Terebu", 7701797, "poz-ocw", } m["trc"] = { "tiếng Triqui Copala", 12953935, "omq-tri", "Latn", } m["trd"] = { "Turi", 7854914, "mun", } m["tre"] = { "East Tarangan", 18609750, "poz", } m["trf"] = { "Trinidadian Creole English", 7842493, "crp", ancestors = "en", } m["trg"] = { "Lishán Didán", 56473, "sem-nna", } m["trh"] = { "Turaka", 12953237, "ngf", } m["tri"] = { "tiếng Trió", 56885, "sai-tar", "Latn", "Tiếng Trió", "Trió", } m["trj"] = { "Toram", 3441225, "cdc-est", } m["trl"] = { "Traveller Scottish", 3915671, "crp", "Latn", ancestors = "sco, rom", } m["trm"] = { "Tregami", 34081, "nur-sou", } m["trn"] = { "Trinitario", 3539279, "awd", } m["tro"] = { "Tarao", 3515603, "tbq-kuk", "Latn", } m["trp"] = { "tiếng Kok Borok", 35947, "tbq-bdg", "Beng, Latn", "Tiếng Kok Borok", "Kok Borok", } m["trq"] = { "tiếng Triqui San Martín Itunyoso", 12953934, "omq-tri", "Latn", "Tiếng Triqui San Martín Itunyoso", "Triqui San Martín Itunyoso", } m["trr"] = { "Taushiro", 1957508, } m["trs"] = { "tiếng Triqui Chicahuaxtla", 3539587, "omq-tri", "Latn", "Tiếng Triqui Chicahuaxtla", "Triqui Chicahuaxtla", } m["trt"] = { "Tunggare", 615071, "paa-egb", "Latn", } m["tru"] = { "tiếng Turoyo", 34040, "sem-cna", "Syrc, Latn", "Tiếng Turoyo", "Turoyo", entry_name = "Syrc-entryname", translit = "tru-translit", } m["trv"] = { "tiếng Truku", 716686, "map-ata", "Latn", "Tiếng Truku", "Truku", } m["trw"] = { "tiếng Torwali", 2665246, "inc-koh", "ur-Arab", "Tiếng Torwali", "Torwali", } m["trx"] = { "Tringgus", 7842365, "day", } m["try"] = { "Turung", 7856514, "tai-swe", "as-Beng", } m["trz"] = { "Torá", 7827518, "sai-cpc", } m["tsa"] = { "Tsaangi", 36675, "bnt-nze", } m["tsb"] = { "tiếng Tsamai", 2371358, "cus-eas", "Latn", "Tiếng Tsamai", "Tsamai", } m["tsc"] = { "Tswa", 2085051, "bnt-tsr", } m["tsd"] = { "tiếng Tsakonia", 220607, "grk", "Grek", "Tiếng Tsakonia", "Tsakonia", ancestors = "grc-dor", translit = "el-translit", entry_name = {remove_diacritics = c.caron .. c.diaerbelow .. c.brevebelow}, sort_key = s["Grek-sortkey"], } m["tse"] = { "Tunisian Sign Language", 7853191, "sgn", } m["tsf"] = { "Southwestern Tamang", 12953176, "sit-tam", } m["tsg"] = { "tiếng Tausug", 34142, "phi", "Latn, Arab", "Tiếng Tausug", "Tausug", } m["tsh"] = { "Tsuvan", 3502326, "cdc-cbm", } m["tsi"] = { "tiếng Tsimshian", 20085721, "nai-tsi", "Latn", "Tiếng Tsimshian", "Tsimshian", } m["tsj"] = { "tiếng Tshangla", 36840, "sit-tsk", "Tibt, Latn, Deva", "Tiếng Tshangla", "Tshangla", 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["tsl"] = { "Ts'ün-Lao", 3446675, "tai", } m["tsm"] = { "Turkish Sign Language", 36885, "sgn", } m["tsp"] = { "Northern Toussian", 11155635, "alv-sav", } m["tsq"] = { "Thai Sign Language", 7709156, "sgn", "Sgnw", } m["tsr"] = { "Akei", 2828964, "poz-vnc", } m["tss"] = { "Taiwan Sign Language", 34019, "sgn-jsl", } m["tsu"] = { "tiếng Tsou", 716681, "map-tsu", "Latn", "Tiếng Tsou", "Tsou", } m["tsv"] = { "Tsogo", 36674, "bnt-tso", } m["tsw"] = { "Tsishingini", 13123571, "nic-kam", } m["tsx"] = { "Mubami", 6930815, "ngf", } m["tsy"] = { "Tebul Sign Language", 7692090, "sgn", } m["tta"] = { "Tutelo", 2311602, "sio-ohv", } m["ttb"] = { "Gaa", 3438361, "nic-dak", } m["ttc"] = { "Tektiteko", 36686, "myn", } m["ttd"] = { "Tauade", 7688634, } m["tte"] = { "Bwanabwana", 5003667, "poz-ocw", "Latn", } m["ttf"] = { "Tuotomb", 7853459, "nic-mbw", "Latn", } m["ttg"] = { "Tutong", 3507990, "poz-swa", "Latn", } m["tth"] = { "tiếng Tà Ôi Thượng", 3512660, "mkh-kat", "Latn", "Tiếng Tà Ôi Thượng", "Tà Ôi Thượng" } m["tti"] = { "Tobati", 7811556, "poz-ocw", "Latn", } m["ttj"] = { "tiếng Tooro", 7824218, "bnt-nyg", "Latn", "Tiếng Tooro", "Tooro", } m["ttk"] = { "Totoro", 3532756, "sai-bar", "Latn", } m["ttl"] = { "Totela", 10962316, "bnt-bot", "Latn", } m["ttm"] = { "Northern Tutchone", 20822, "ath-nor", "Latn", } m["ttn"] = { "Towei", 7829606, "paa-pau", } m["tto"] = { "tiếng Tà Ôi Hạ", 25559539, "mkh-kat", "Laoo", "Tiếng Tà Ôi Hạ", "Tà Ôi Hạ", } m["ttp"] = { "Tombelala", 6799663, "poz-kal", } m["ttr"] = { "Tera", 56267, "cdc-cbm", } m["tts"] = { "tiếng Isan", 33417, "tai-swe", "Thai", "Tiếng Isan", "Isan", sort_key = "Thai-sortkey", } m["ttt"] = { "tiếng Tat", 56489, "ira-swi", "Cyrl, Latn, Armn, fa-Arab", "Tiếng Tat", "Tat", ancestors = "fa", } m["ttu"] = { "Torau", 3532208, "poz-ocw", } m["ttv"] = { "Titan", 3445811, "poz-aay", } m["ttw"] = { "Long Wat", 7856961, "poz-swa", } m["tty"] = { "Sikaritai", 7513600, "paa-lkp", } m["ttz"] = { "Tsum", 12953223, "sit-kyk", } m["tua"] = { "Wiarumus", 7998045, "qfa-tor", "Latn", } m["tub"] = { "Tübatulabal", 56704, "azc", "Latn", } m["tuc"] = { "Mutu", 3331003, "poz-ocw", "Latn", } m["tud"] = { "Tuxá", 7857217, } m["tue"] = { "Tuyuca", 2520538, "sai-tuc", "Latn", } m["tuf"] = { "Central Tunebo", 12953942, "cba", } m["tug"] = { "Tunia", 863721, "alv-bua", } m["tuh"] = { "Taulil", 3516141, "paa-bng", } m["tui"] = { "Tupuri", 36646, "alv-mbm", "Latn", } m["tuj"] = { "Tugutil", 12953228, "paa-nha" } m["tul"] = { "Tula", 3914907, "alv-wjk", } m["tum"] = { "tiếng Tumbuka", 34138, "bnt-nys", "Latn", "Tiếng Tumbuka", "Tumbuka", } m["tun"] = { "tiếng Tunica", 56619, "qfa-iso", "Latn", "Tiếng Tunica", "Tunica", } m["tuo"] = { "Tucano", 3541834, "sai-tuc", "Latn", } m["tuq"] = { "Tedaga", 36639, "ssa-sah", } m["tus"] = { "Tuscarora", 36944, "iro-nor", "Latn", } m["tuu"] = { "Tututni", 20627, "ath-pco", "Latn", } m["tuv"] = { "Turkana", 36958, "sdv-ttu", "Latn", } m["tux"] = { "Tuxináwa", 7857204, "sai-pan", "Latn", } m["tuy"] = { "Tugen", 3541935, "sdv-nma", } m["tuz"] = { "Turka", 36643, "nic-gur", "Latn", } m["tva"] = { "Vaghua", 3553248, "poz-ocw", "Latn", } m["tvd"] = { "Tsuvadi", 3914936, "nic-kam", } m["tve"] = { "Te'un", 7690709, "poz-cet", "Latn", } m["tvk"] = { "Southeast Ambrym", 252411, "poz-vnc", "Latn", } m["tvl"] = { "tiếng Tuvalu", 34055, "poz-pnp", "Latn", "Tiếng Tuvalu", "Tuvalu", } m["tvm"] = { "Tela-Masbuar", 7695666, "poz-tim", } m["tvn"] = { "tiếng Tavoy", 7689158, "tbq-brm", "Mymr", "Tiếng Tavoy", "Tavoy", ancestors = "obr", } m["tvo"] = { "Tidore", 3528199, "paa-nha", "Latn, Arab", } m["tvs"] = { "Taveta", 15632387, "bnt-par", } m["tvt"] = { "Tutsa Naga", 7856987, "sit-tno", } m["tvu"] = { "Tunen", 36632, "nic-mbw", } m["tvw"] = { "Sedoa", 7445362, "poz-kal", } m["tvx"] = { "tiếng Taivoan", 1975271, "map", "Latn", "Tiếng Taivoan", "Taivoan", } m["tvy"] = { "Timor Pidgin", 4904029, "crp", ancestors = "pt", } m["twa"] = { "Twana", 7857412, "sal", } m["twb"] = { "Western Tawbuid", 12953912, "phi", } m["twc"] = { "Teshenawa", 3436597, "phi", } m["twe"] = { "Teiwa", 3519302, "ngf", "Latn", } m["twf"] = { "tiếng Taos", 7684320, "nai-kta", "Latn", "Tiếng Taos", "Taos", } m["twg"] = { "Tereweng", 12953200, "qfa-tap", } m["twh"] = { "tiếng Thái Trắng", 7675751, "tai-swe", "Tavt", "Tiếng Thái Trắng", "Thái Trắng", --translit = "Tavt-translit", sort_key = { from = {"[꪿ꫀ꫁ꫂ]", "([ꪵꪶꪹꪻꪼ])([ꪀ-ꪯ])"}, to = {"", "%2%1"} }, } m["twm"] = { "Tawang Monpa", 36586, "sit-ebo", "Tibt", translit = "Tibt-translit", override_translit = true, display_text = s["Tibt-displaytext"], entry_name = s["Tibt-entryname"], sort_key = "Tibt-sortkey", } m["twn"] = { "Twendi", 7857682, "nic-mmb", } m["two"] = { "Tswapong", 3446241, "bnt-sts", } m["twp"] = { "Ere", 3056045, "poz-aay", "Latn", } m["twq"] = { "tiếng Tasawaq", 36564, "son", "Latn", "Tiếng Tasawaq", "Tasawaq", } m["twr"] = { "Southwestern Tarahumara", 12953909, "azc-trc", "Latn", } m["twt"] = { "Turiwára", 3542307, "tup-gua", "Latn", } m["twu"] = { "Termanu", 7702572, "poz-tim", } m["tww"] = { "Tuwari", 7857159, "paa-spk", } m["twy"] = { "Tawoyan", 3513542, "poz-bre", } m["txa"] = { "Tombonuo", 7818692, "poz-san", } m["txb"] = { "tiếng Tochari B", 3199353, "ine-toc", "Latn", "Tiếng Tochari B", "Tochari B", wikipedia_article = "Tocharian languages", -- wikidata id has no associated article standardChars = "AaÄäĀāCcEeIiKkLlMmṂṃNnṄṅÑñOoPpRrSsŚśṢṣTtUuWwYy" .. c.punc, } m["txc"] = { "Tsetsaut", 20829, "ath-nor", "Latn", } m["txe"] = { "Totoli", 7828387, "poz-tot", "Latn", } m["txg"] = { "tiếng Tangut", 2727930, "sit-qia", "Tang", "Tiếng Tangut", "Tangut", translit = "txg-translit", } m["txj"] = { "Tarjumo", nil, "ssa-sah", "Latn, Arab", } m["txh"] = { "tiếng Thracia", 36793, "ine", "Latn, Grek", "Tiếng Thracia", "Thracia", translit = "el-translit", } m["txi"] = { "Ikpeng", 9344891, "sai-pek", "Latn", } m["txm"] = { "Tomini", 7818911, "poz", } m["txn"] = { "West Tarangan", 3515594, "poz", } m["txo"] = { "tiếng Toto", 36709, "sit-dhi", "Beng, Toto", "Tiếng Toto", "Toto", } m["txq"] = { "Tii", 7801784, "poz-tim", } m["txr"] = { "Tartessian", 36795, } m["txs"] = { "Tonsea", 3531659, "phi", } m["txt"] = { "Citak", 3447279, "ngf", } m["txu"] = { "tiếng Kayapó", 3101212, "sai-nje", "Latn", "Tiếng Kayapó", "Kayapó", } m["txx"] = { "Tatana", 18643518, "poz-san", } m["tya"] = { "Tauya", 7688978, "ngf-mad", } m["tye"] = { "Kyenga", 3913304, "dmn-bbu", "Latn", } m["tyh"] = { "tiếng Ơ Đu", 3347428, "mkh-khm", nil, "Tiếng Ơ Đu", "Ơ Đu", } m["tyi"] = { "Teke-Tsaayi", 33123613, "bnt-nze", } m["tyj"] = { "tiếng Tay Dọ", 7675746, "tai-nor", "Thai, Latn, Tayo", -- Vietnamese alphabet "Tiếng Tay Dọ", "Tay Dọ", } m["tyl"] = { "Thu Lao", 12953921, "tai-cen", } m["tyn"] = { "Kombai", 6428241, "ngf", } m["typ"] = { "Kuku-Thaypan", 3915693, "aus-pmn", "Latn", } m["tyr"] = { "tiếng Thái Đỏ", 3915207, "tai-swe", "Tavt", "Tiếng Thái Đỏ", "Thái Đỏ", } m["tys"] = { "tiếng Tày Sa Pa", 3446668, "tai-sap", "Latn", "Tiếng Tày Sa Pa", "Tày Sa Pa", } m["tyt"] = { "Tày Tac", 7862029, "tai-swe", } m["tyu"] = { "Kua", 3832933, "khi-kal", } m["tyv"] = { "tiếng Tuva", 34119, "trk-ssb", "Cyrl", "Tiếng Tuva", "Tuva", translit = "tyv-translit", override_translit = true, sort_key = "tyv-sortkey", } m["tyx"] = { "Teke-Tyee", 36634, "bnt-nze", } m["tyz"] = { "tiếng Tày", -- This does not mean its umbrella "Tai" languages. 2511476, "tai-tay", "Latn, Hani", "Tiếng Tày", "Tày", sort_key = {Hani = "Hani-sortkey"}, } m["tza"] = { "Tanzanian Sign Language", 7684177, "sgn", } m["tzh"] = { "Tzeltal", 36808, "myn", "Latn", } m["tzj"] = { "Tz'utujil", 36941, "myn", "Latn", } m["tzl"] = { "tiếng Talossa", 1063911, "art", "Latn", "Tiếng Talossa", "Talossa", type = "appendix-constructed", sort_key = "tzl-sortkey", } m["tzm"] = { "tiếng Tamazight Trung Atlas", 49741, "ber", "Tfng, Arab, Latn", "Tiếng Tamazight Trung Atlas", "Tamazight Trung Atlas", translit = "Tfng-translit", } m["tzn"] = { "Tugun", 12953225, "poz-tim", } m["tzo"] = { "tiếng Tzotzil", 36809, "myn", "Latn", "Tiếng Tzotzil", "Tzotzil", } m["tzx"] = { "Tabriak", 56872, "paa-lsp", "Latn", } return require("Module:languages").finalizeData(m, "language") e37ss01sqjysx1h80y4s3yeogm15zj4 Mô đun:IPA 828 261255 2568774 2342970 2026-10-06T06:49:24Z TheHighFighter2 42988 2568774 Scribunto text/plain local export = {} local force_cat = false -- for testing local decorations_module = "Module:decorations" local pages_module = "Module:pages" local qualifier_module = "Module:qualifier" local string_utilities_module = "Module:string utilities" local syllables_module = "Module:syllables" local utilities_module = "Module:utilities" local m_data = mw.loadData("Module:IPA/data") local m_str_utils = require(string_utilities_module) local m_syllables -- [[Module:syllables]]; loaded below if needed local m_symbols = mw.loadData("Module:IPA/data/symbols") local concat = table.concat local decode_entities = m_str_utils.decode_entities local find = string.find local gcodepoint = m_str_utils.gcodepoint local gmatch = m_str_utils.gmatch local gsub = string.gsub local insert = table.insert local is_preview = require(pages_module).is_preview local len = m_str_utils.len local listToText = mw.text.listToText local match = string.match local pattern_escape = m_str_utils.pattern_escape local sub = string.sub local u = m_str_utils.char local ugsub = m_str_utils.gsub local umatch = m_str_utils.match local usub = m_str_utils.sub local function with_codepoints(s) if find(s, "%S%s") then local parts = {} for ch in gmatch(s, "%S") do parts[#parts + 1] = with_codepoints(ch) end return concat(parts, ", ") end local cps = {} for cp in gcodepoint(s) do cps[#cps + 1] = ("U+%04X"):format(cp) end return s .. " [" .. concat(cps, " ") .. "]" end local namespace = mw.title.getCurrentTitle().nsText local function is_content_page(lang, namespace) return namespace == "" or namespace == "Từ_tái_tạo" or lang and lang:hasType("appendix-constructed") and namespace == "Phụ_lục" end -- Etymology-only languages are not L2 entry languages; IPA should use the parent full language. local function assert_not_etymology_only_lang(lang) if lang and lang.hasType and lang:hasType("language", "etymology-only") then local parent_code = lang.getParentCode and lang:getParentCode() or nil error(("Cannot use IPA with the etymology-only language %q; use the parent full language %q instead."):format(lang:getCode(), parent_code)) end end local function track(page) require("Module:debug/track")("IPA/" .. page) return true end local function process_maybe_split_categories(split_output, categories, prontext, lang, errtext) if split_output ~= "raw" then if categories[1] then categories = require(utilities_module).format_categories(categories, lang, nil, nil, force_cat) else categories = "" end end if split_output then -- for use of IPA in links, etc. if errtext then return prontext, categories, errtext else return prontext, categories end else return prontext .. (errtext or "") .. categories end end --[==[ Format a line of one or more IPA pronunciations as {{tl|IPA}} would do it, i.e. with a preceding {"IPA:"} followed by the word {"key"} linking to an Appendix page describing the language's phonology, and with an added category ` ``lang`` terms with IPA pronunciation`. Other than the extra preceding text and category, this is identical to {format_IPA_multiple()}, and the considerations described there in the documentation apply here as well. There is a single parameter `data`, an object with the following fields: * `lang`: Object representing the language of the pronunciations, which is used when adding cleanup categories for pronunciations with invalid phonemes; for determining how many syllables the pronunciations have in them, in order to add a category such as [[:Category:Italian 2-syllable words]] (for certain languages only); for adding a category ` ``lang`` terms with IPA pronunciation`; and for determining the proper sort keys for categories. Unlike for {format_IPA_multiple()}, `lang` may not be {nil}. * `items`: List of pronunciations, in exactly the same format as for {format_IPA_multiple()}. * `err`: If not {nil}, a string containing an error message to use in place of the link to the language's phonology. * `separator`: The default separator to use when separating formatted items. Defaults to {", "}. Does not apply to the first item, where the default separator is always the empty string. Overridden by the per-item `separator` field in `items`. * `sort_key`: Explicit sort key used for categories. * `no_count`: Suppress adding a {#-syllable words} category such as [[:Category:Italian 2-syllable words]]. Note that only certain languages add such categories to begin with, because it depends on knowing how to count syllables in a given language, which depends on the phonology of the language. Also, this does not suppress the addition of cleanup or other categories. If you need them suppressed, use `split_output` to return the categories separately and ignore them. * `split_output`: If not given, the return value is a concatenation of the formatted pronunciation and formatted categories. Otherwise, two values are returned: the formatted pronunciation and the categories. If `split_output` is the value {"raw"}, the categories are returned in list form, where the list elements are a combination of category strings and category objects of the form suitable for passing to {format_categories()} in [[Module:utilities]]. If `split_output` is any other value besides {nil}, the categories are returned as a pre-formatted concatenated string. * `include_langname`: If specified, prefix the result with the language name, followed by a colon. * `q`: {nil} or a list of left qualifiers (as in {{tl|q}}) to display at the beginning, before the formatted pronunciations and preceding {"IPA:"}. * `qq`: {nil} or a list of right qualifiers to display after all formatted pronunciations. * `a`: {nil} or a list of left accent qualifiers (as in {{tl|a}}) to display at the beginning, before the formatted pronunciations and preceding {"IPA:"}. * `aa`: {nil} or a list of right accent qualifiers to display after all formatted pronunciations. ]==] function export.format_IPA_full(data) if type(data) ~= "table" or data.getCode then error("Must now supply a table of arguments to format_IPA_full(); first argument should be that table, not a language object") end local lang = data.lang local items = data.items local err = data.err local separator = data.separator local sort_key = data.sort_key local no_count = data.no_count local split_output = data.split_output local q = data.q local qq = data.qq local a = data.a local aa = data.aa local include_langname = data.include_langname if data.qualifiers then -- FIXME: added 2026-09-18; consider removing eventually. error("overall `.qualifiers` is no longer supported; change the code to use `.q` or `.qq`") end local hasKey = m_data.langs_with_infopages if not lang or not lang.getCode then error("Must specify language to format_IPA_full()") end assert_not_etymology_only_lang(lang) local langname = lang:getCanonicalName() local prefix_text if err then prefix_text = '<span class="error">' .. err .. '</span>' else if hasKey[lang:getCode()] then prefix_text = "Phụ lục:Cách phát âm " .. langname else prefix_text = "w:Âm vị học " .. langname end prefix_text = "[[" .. prefix_text .. "|ghi chú]]" end local prefix = "[[Wiktionary:IPA|IPA]]<sup>(" .. prefix_text .. ")</sup>:&#32;" local IPAs, categories = export.format_IPA_multiple(lang, items, separator, no_count, "raw") if is_content_page(lang, namespace) then insert(categories, { cat = "Mục từ có cách phát âm IPA " .. langname, sort_key = sort_key }) end local prontext = prefix .. IPAs if q and q[1] or qq and qq[1] or a and a[1] or aa and aa[1] then prontext = require(decorations_module).format_decorations { lang = lang, text = prontext, q = q, qq = qq, a = a, aa = aa, } end if include_langname then prontext = langname .. ": " .. prontext end return process_maybe_split_categories(split_output, categories, prontext, lang) end local function split_phonemic_phonetic(pron) local reconstructed, phonemic, phonetic = match(pron, "^(%*?)(/.-/)%s+(%[.-%])$") if reconstructed then return reconstructed .. phonemic, reconstructed .. phonetic else return pron, nil end end local function determine_repr(pron) local reconstructed -- Temporarily remove any initial asterisk before representation marks, -- which avoids having to account for it in the data, but set the -- `reconstructed` flag. if sub(pron, 1, 1) == "*" then reconstructed = true pron = sub(pron, 2) end -- Some representation types have aliases for convenience (e.g. "// //" is -- an alias for "⫽ ⫽"). and these need to be substituted in before checking -- for other data. local opening, n = match(pron, "^.[\128-\191]*") local subs_data = m_data.representation_subs[opening] if subs_data then pron, n = ugsub(pron, subs_data[1], subs_data[2]) -- If the substitution was made, `opening` needs to be changed to the -- new opening character. if n ~= 0 then opening = subs_data[3] end end -- Get the type data based on the opening character (if any), and set the -- representation type if the closing character matches. local type_data, repr, closing = m_data.representation_types[opening] if type_data then closing = type_data[2] if type_data and match(pron, pattern_escape(closing) .. "$", #opening + 1) then repr = type_data[1] end end -- Default to the empty string. if not repr then opening, closing = "", "" end -- Reattach the asterisk if reconstructed. if reconstructed then pron = "*" .. pron end return pron, repr, opening, closing, reconstructed end local function hasInvalidSeparators(transcription) -- Escape certain characters as well as pauses, which have the format "(...)" (with any number of dots), to avoid false-positives. transcription = transcription:gsub(".[\128-\191]*", m_symbols.separator_escapes) :gsub("%(%.+%)", "\3") :gsub("[()]+", "") return ( transcription:find("..", nil, true) or transcription:match("%.%f[%z \1\2\3,:;]") or transcription:match("\1%f[%z \2\3,:;]") or transcription:match("\2%f[%z \1\3,:;]") or transcription:match("\3[:;]") or transcription:match("%f[^%z \1\2\3,]%.") ) and true or false end --[==[ Format a line of one or more bare IPA pronunciations (i.e. without any preceding {"IPA:"} and without adding to a category ` ``lang`` terms with IPA pronunciation`). Individual pronunciations are formatted using {format_IPA()} and are combined with separators, decorations, pre-text, post-text, etc. to form a line of pronunciations. Parameters accepted are: * `lang` is an object representing the language of the pronunciations, which is used when adding cleanup categories for pronunciations with invalid phonemes; for determining how many syllables the pronunciations have in them, in order to add a category such as [[:Category:Italian 2-syllable words]] (for certain languages only); and for computing the proper sort keys for categories. `lang` may be {nil}. * `items` is a list of pronunciations, each of which is an object with the following properties: ** `pron`: the pronunciation, in the same format as is accepted by {format_IPA()}, i.e. it should be either phonemic (surrounded by {/.../}), phonetic (surrounded by {[...]}), orthographic (surrounded by {⟨...⟩}) or a rhyme (beginning with a hyphen); ** `pretext`: text to display directly before the formatted pronunciation, inside of any qualifiers or accent qualifiers; ** `posttext`: text to display directly after the formatted pronunciation, inside of any qualifiers or accent qualifiers; ** `q`: {nil} or a list of left qualifiers (as in {{tl|q}}) to display before the formatted pronunciation; ** `qq`: {nil} or a list of right qualifiers to display after the formatted pronunciation; ** `a`: {nil} or a list of left accent qualifiers (as in {{tl|a}}) to display before the formatted pronunciation; ** `aa`: {nil} or a list of right accent qualifiers to after before the formatted pronunciation; ** `refs`: {nil} or a list of references or reference specs to add after the pronunciation and any posttext and qualifiers; the value of a list item is either a string containing the reference text (typically a call to a citation template such as {{tl|cite-book}}, or a template wrapping such a call), or an object with fields `text` (the reference text), `name` (the name of the reference, as in {{cd|<nowiki><ref name="foo">...</ref></nowiki>}} or {{cd|<nowiki><ref name="foo" /></nowiki>}}) and/or `group` (the group of the reference, as in {{cd|<nowiki><ref name="foo" group="bar">...</ref></nowiki>}} or {{cd|<nowiki><ref name="foo" group="bar"/></nowiki>}}); this uses a parser function to format the reference appropriately and insert a footnote number that hyperlinks to the actual reference, located in the {{cd|<nowiki><references /></nowiki>}} section; ** `gloss`: {nil} or a gloss (definition) for this item, if different definitions have different pronunciations; ** `pos`: {nil} or a part of speech for this item, if different parts of speech have different pronunciations; ** `separator`: the separator text to insert directly before the formatted pronunciation and all decorations and pre-text; defaults to the outer `separator` parameter. * `separator`: The default separator to use when separating formatted items. Defaults to {", "}. Does not apply to the first item, where the default separator is always the empty string. Overridden by the per-item `separator` field in `items`. * `no_count`: Suppress adding a {#-syllable words} category such as [[:Category:Italian 2-syllable words]]. Note that only certain languages add such categories to begin with, because it depends on knowing how to count syllables in a given language, which depends on the phonology of the language. Also, this does not suppress the addition of cleanup categories. If you need them suppressed, use `split_output` to return the categories separately and ignore them. * `split_output`: If not given, the return value is a concatenation of the formatted pronunciation and formatted categories. Otherwise, two values are returned: the formatted pronunciation and the categories. If `split_output` is the value {"raw"}, the categories are returned in list form, where the list elements are a combination of category strings and category objects of the form suitable for passing to {format_categories()} in [[Module:utilities]]. If `split_output` is any other value besides {nil}, the categories are returned as a pre-formatted concatenated string. ]==] function export.format_IPA_multiple(lang, items, separator, no_count, split_output) local categories = {} separator = separator or ", " if not lang then track("format-multiple-nolang") else assert_not_etymology_only_lang(lang) end -- Format if not items[1] then if namespace == "Bản_mẫu" then insert(items, {pron = "/aɪ piː ˈeɪ/"}) else insert(categories, "Bản mẫu cách phát âm thiếu cách phát âm") end end local bits = {} for i, item in ipairs(items) do local bit -- If the pronunciation is entirely empty, allow this and don't do anything, so that e.g. the pretext and/or -- posttext can be specified to force something like ''unknown'' to appear in place of the pronunciation -- (as happens e.g. when ? is used as a respelling in [[Module:ca-IPA]]; see [[guèiser]] for an example). if item.pron == "" then bit = "" else local item_categories, errtext bit, item_categories, errtext = export.format_IPA(lang, item.pron, "raw") bit = bit .. errtext for _, cat in ipairs(item_categories) do insert(categories, cat) end end if item.pretext then bit = item.pretext .. bit end if item.posttext then bit = bit .. item.posttext end if item.qualifiers then -- FIXME: added 2026-09-18; consider removing eventually. error("`.qualifiers` is no longer supported; change the code to use `.q` or `.qq`") end local has_decorations = item.q and item.q[1] or item.qq and item.qq[1] or item.a and item.a[1] or item.aa and item.aa[1] or item.refs and item.refs[1] local has_gloss_or_pos = item.gloss or item.pos if has_decorations or has_gloss_or_pos then -- FIXME: Currently we tack the gloss and POS (in that order) onto the end of the regular left qualifiers. -- Should we do something different? local q = item.q if has_gloss_or_pos then q = mw.clone(item.q) or {} if item.gloss then local m_qualifier = require(qualifier_module) insert(q, m_qualifier.wrap_qualifier_css("“", "quote") .. item.gloss .. m_qualifier.wrap_qualifier_css("”", "quote")) end if item.pos then -- FIXME: Consider expanding aliases as found in [[Module:headword/data]] or similar. insert(q, item.pos) end end bit = require(decorations_module).format_decorations { lang = lang, text = bit, q = q, qq = item.qq, a = item.a, aa = item.aa, refs = item.refs, } end bit = (item.separator or (i == 1 and "" or separator)) .. bit insert(bits, bit) --[=[ [[Special:WhatLinksHere/Wiktionary:Tracking/IPA/syntax-error]] The length or gemination symbol should not appear after a syllable break or stress symbol. ]=] -- The nature of the following pattern match is such that we don't have to split a combined '/.../ [...]' spec -- into its parts in order to process. if match(item.pron, "[.\203][\136\140]?\203[\144\145]") then -- [.ˈˌ][ːˑ] track("syntax-error") end if lang then -- Add syllable count if the language's diphthongs are listed in [[Module:syllables]]. -- Don't do this if the term has spaces, a liaison mark (‿) or isn't in mainspace. if not no_count and namespace == "" then m_syllables = m_syllables or require(syllables_module) local langcode = lang:getCode() if m_data.langs_to_generate_syllable_count_categories[langcode] then local raw_phonemic, phonetic, use_it = split_phonemic_phonetic(item.pron) local phonemic, repr = determine_repr(raw_phonemic) if not phonetic then -- not a '/.../ [...]' combined pronunciation if m_data.langs_to_use_phonetic_or_phonemic_notation[langcode] then use_it = phonemic elseif m_data.langs_to_use_phonetic_notation[langcode] then use_it = repr == "phonetic" and phonemic or nil else use_it = repr == "phonemic" and phonemic or nil end elseif repr == "phonetic" then use_it = phonetic elseif repr == "phonemic" then use_it = phonemic end -- Note: two uses of find with plain patterns is much faster than umatch with [ ‿]. if use_it and not (find(use_it, " ") or find(use_it, "‿")) then local syllable_count = m_syllables.getVowels(use_it, lang) if syllable_count then insert(categories, "Từ " .. syllable_count .. " âm tiết " .. lang:getCanonicalName()) end end end end end end return process_maybe_split_categories(split_output, categories, concat(bits), lang) end --[=[ Format a single IPA pronunciation, which cannot be a combined spec (such as {/.../ [...]}). This has been extracted from {format_IPA()} to allow the latter to handle such combined specs. This works like {format_IPA()} but requires that pre-created {err} (for error messages) and {categories} lists be passed in, and adds any generated error messages and categories to those lists. A single value is returned, the pronunciation, which is usually the same as passed in, but may have HTML added surrounding invalid characters so they appear in red. ]=] local function format_one_IPA(lang, raw_pron, err, categories) -- Disallow wikilinks. if match(raw_pron, "%[%[.-%]%]") then error("IPA input must not contain wikilinks.") end raw_pron = decode_entities(raw_pron) -- Detect the type of transcription. local pron, repr, opening, closing, reconstructed = determine_repr(raw_pron) -- Strip any reconstruction asterisk and representation marks. pron = sub(pron, #opening + 1 + (reconstructed and 1 or 0), -#closing - 1) if not repr then insert(categories, "IPA pronunciations with invalid representation marks") -- insert(err, "invalid representation marks") -- Removed because it's annoying when previewing pronunciation pages. end if repr ~= "orthographic" and lang and lang:getCode() == "en" and hasInvalidSeparators(pron) then insert(categories, "English IPA pronunciations with invalid separators") end if pron == "" then insert(categories, "IPA pronunciations with no pronunciation present") end -- Check for obsolete and nonstandard symbols for _, symbol in ipairs(m_data.nonstandard) do local result for nonstandard in gmatch(pron, symbol) do if not result then result = {} end insert(result, nonstandard) insert(categories, {cat = "Cách phát âm IPA có ký tự không chuẩn hoặc lỗi thời", sort_key = nonstandard} ) end if result then insert(err, "ký tự không chuẩn hoặc lỗi thời (" .. concat(result) .. ")") break end end --[[ Check for invalid symbols after removing the following: 1. wikilinks (handled above) 2. paired HTML tags 3. bolding 4. italics 5. asterisk at beginning of transcription 6. comma followed by spacing characters 7. superscripts enclosed in superscript parentheses ]] local found_HTML local result = gsub(pron, "<(%a+)[^>]*>([^<]+)</%1>", function(tagName, content) found_HTML = true return content end) result = gsub(result, "'''([^']*)'''", "%1") result = gsub(result, "''([^']*)''", "%1") result = gsub(result, "^%*", "") result = ugsub(result, ",%s+", "") -- VS15 local vs15_class = "[" .. m_symbols.add_vs15 .. "]" if umatch(pron, vs15_class) then local vs15 = u(0xFE0E) if find(result, vs15) then result = gsub(result, vs15, "") pron = gsub(pron, vs15, "") end pron = ugsub(pron, vs15_class, "%0" .. vs15) end if result ~= "" then local content_page = is_content_page(lang, namespace) if lang then -- Get the per_lang_valid data, and convert any per-language valid sequences to spaces. local per_lang_valid = m_symbols.per_lang_valid[lang:getCode()] if per_lang_valid then if type(per_lang_valid) == "table" then for _, pattern in pairs(per_lang_valid) do result = ugsub(result, pattern, " ") end else -- Should be a string. result = ugsub(result, per_lang_valid, " ") end end end local suggestions = {} -- Check for any invalid sequences, excluding anything in the per-language lookup table. for k, v in pairs(m_symbols.invalid) do if find(result, k, nil, true) then insert(suggestions, with_codepoints(k) .. " bằng " .. with_codepoints(v)) end end if suggestions[1] then local replacements = "thay thế " .. listToText(suggestions) if content_page then error("IPA không hợp lệ: " .. replacements) end insert(err, replacements) end -- Convert any valid character sequences to spaces for _, pattern in pairs(m_symbols.valid) do result = ugsub(result, pattern, " ") end if not match(result, "^ *$") then local category = "Cách phát âm IPA có ký tự IPA không hợp lệ" if not content_page then category = category .. "/non_mainspace" end insert(categories, category) insert(err, "ký tự IPA không hợp lệ: " .. with_codepoints(result)) end end if found_HTML then insert(categories, "Cách phát âm IPA có thẻ đôi HTML") end if (repr == "phonemic" or repr == "rhyme") and lang and m_data.phonemes[lang:getCode()] then local valid_phonemes = m_data.phonemes[lang:getCode()] local rest = pron local phonemes = {} while #rest > 0 do local longestmatch, longestmatch_len = "", 0 local rest_init = sub(rest, 1, 1) if rest_init == "(" or rest_init == ")" then longestmatch = rest_init longestmatch_len = 1 else for _, phoneme in ipairs(valid_phonemes) do local phoneme_len = len(phoneme) if phoneme_len > longestmatch_len and usub(rest, 1, phoneme_len) == phoneme then longestmatch = phoneme longestmatch_len = len(longestmatch) end end end if longestmatch_len > 0 then insert(phonemes, longestmatch) rest = usub(rest, longestmatch_len + 1) else local phoneme = usub(rest, 1, 1) insert(phonemes, "<span style=\"color: var(--wikt-palette-red,red)\">" .. phoneme .. "</span>") rest = usub(rest, 2) insert(categories, "IPA pronunciations with invalid phonemes/" .. lang:getCode()) track("invalid phonemes/" .. phoneme) end end pron = concat(phonemes) end return (reconstructed and "*" or "") .. opening .. pron .. closing end --[==[ Format an IPA pronunciation. This wraps the pronunciation in appropriate CSS classes and adds cleanup categories and error messages as needed. The pronunciation `pron` should be either phonemic (surrounded by {/.../}), phonetic (surrounded by {[...]}), orthographic (surrounded by {⟨...⟩}), a rhyme (beginning with a hyphen) or a combined phonemic/phonetic spec (of the form {/.../ [...]}). `lang` indicates the language of the pronunciation and can be {nil}. If not {nil}, and the specified language has data in [[Module:IPA/data]] indicating the allowed phonemes, then the page will be added to a cleanup category and an error message displayed next to the outputted pronunciation. Note that {lang} also determines sort key processing in the added cleanup categories. If `split_output` is not given, the return value is a concatenation of the formatted pronunciation, error messages and formatted cleanup categories. Otherwise, three values are returned: the formatted pronunciation, the cleanup categories and the concatenated error messages. If `split_output` is the value {"raw"}, the cleanup categories are returned in list form, where the list elements are a combination of category strings and category objects of the form suitable for passing to {format_categories()} in [[Module:utilities]]. If `split_output` is any other value besides {nil}, the cleanup categories are returned as a pre-formatted concatenated string. ]==] function export.format_IPA(lang, pron, split_output) local err = {} local categories = {} -- `pron` shouldn't contain ref tags. if match(pron, "\127'\"`UNIQ%-%-ref%-[%dA-F]+%-QINU`\"'\127") then error("<ref> tags found inside pronunciation parameter.") end if not lang then track("format-nolang") else assert_not_etymology_only_lang(lang) end local phonemic, phonetic = split_phonemic_phonetic(pron) pron = format_one_IPA(lang, phonemic, err, categories) if phonetic then track("phonemic-phonetic") -- There's no benefit to supporting the "/.../ [...]" format within one parameter. phonetic = format_one_IPA(lang, phonetic, err, categories) pron = pron .. " " .. phonetic end if err[1] and is_preview() then err = '<span class="error" style="font-size: small;>&#32;' .. concat(err, ", ") .. "</span>" else err = "" end return process_maybe_split_categories(split_output, categories, '<span class="IPA nowrap">' .. pron .. "</span>", lang, err) end --[==[ Format a line of one or more enPR pronunciations as {{tl|enPR}} would do it, i.e. with a preceding {"enPR:"} (linked to [[Appendix:English pronunciation]]) followed by one or more formatted, comma-separated enPR pronunciations. The pronunciations are formatted by wrapping them in the `AHD` and `enPR` CSS classes and adding any decorations (qualifiers, accent qualifiers and references). In addition, the overall result is wrapped in any overall decorations. There is a single parameter `data`, an object with the following fields: * `items` is a list of enPR pronunciations, each of which is an object with the following properties: ** `pron`: the enPR pronunciation; ** `q`: {nil} or a list of left qualifiers (as in {{tl|q}}) to display before the formatted pronunciation; ** `qq`: {nil} or a list of right qualifiers to display after the formatted pronunciation; ** `a`: {nil} or a list of left accent qualifiers (as in {{tl|a}}) to display before the formatted pronunciation; ** `aa`: {nil} or a list of right accent qualifiers to after before the formatted pronunciation. * `q`: {nil} or a list of left qualifiers (as in {{tl|q}}) to display at the beginning, before the formatted pronunciations and preceding {"enPR:"}. * `qq`: {nil} or a list of right qualifiers to display after all formatted pronunciations. * `a`: {nil} or a list of left accent qualifiers (as in {{tl|a}}) to display at the beginning, before the formatted pronunciations and preceding {"enPR:"}. * `aa`: {nil} or a list of right accent qualifiers to display after all formatted pronunciations. ]==] function export.format_enPR_full(data) local prefix = "[[Phụ lục:Cách phát âm tiếng Anh|enPR]]: " local lang = require("Module:languages").getByCode("en") local parts = {} for _, item in ipairs(data.items) do local part = '<span class="AHD enPR">' .. item.pron .. "</span>" if item.qualifiers then -- FIXME: added 2026-09-18; consider removing eventually. error("`.qualifiers` is no longer supported; change the code to use `.q` or `.qq`") end if item.q and item.q[1] or item.qq and item.qq[1] or item.a and item.a[1] or item.aa and item.aa[1] then part = require(decorations_module).format_decorations { lang = lang, text = part, q = item.q, qq = item.qq, a = item.a, aa = item.aa, } end insert(parts, part) end local prontext = prefix .. concat(parts, ", ") if data.qualifiers then -- FIXME: added 2026-09-18; consider removing eventually. error("overall `.qualifiers` is no longer supported; change the code to use `.q` or `.qq`") end if data.q and data.q[1] or data.qq and data.qq[1] or data.a and data.a[1] or data.aa and data.aa[1] then prontext = require(decorations_module).format_decorations { lang = lang, text = prontext, q = data.q, qq = data.qq, a = data.a, aa = data.aa, } end return prontext end return export jsf1xf72q2su0aoaj49jregpwdtlm8t Mô đun:IPA/data 828 261256 2568776 2217162 2026-10-06T07:04:58Z TheHighFighter2 42988 2568776 Scribunto text/plain local list_to_set = require("Module:table").listToSet local data = {} --[=[ A list of representation types (e.g. /foo/ for phonemic and [bar] for phonetic), given as a table. The key is the opening character, the first value the representation type, and the second value the closing symbol.]=] data.representation_types = { ["/"] = {"phonemic", "/"}, ["["] = {"phonetic", "]"}, ["⫽"] = {"morphophonemic", "⫽"}, ["⟨"] = {"orthographic", "⟩"}, ["-"] = {"rhyme", ""}, } --[=[ A list of convenience inputs for certain representation types. The key is the opening character, and the table is a three-item array consisting of (1) an mw.ustring.gsub pattern which is anchored to the start and end of the string, with a single capture group that excludes the characters to be substituted, (2) a corresponding replacement pattern to be used with the pattern, and (3) the replacement opening character.]=] data.representation_subs = { ["<"] = {"^<(.*)>$", "⟨%1⟩", "⟨"}, ["/"] = {"^//(.*)//$", "⫽%1⫽", "⫽"}, } --[=[ This should list the language codes of all languages that have a pronunciation page in the appendix of the form ''Appendix:LANG pronunciation'', e.g. [[Appendix:Russian pronunciation]]. For these languages, the text "key" next to the generated pronunciation links to such pages; for other languages, it links to the "LANG phonology" page in Wikipedia (which may or may not exist). [[Module:IPA]] is responsible for this linking; see format_IPA_full().]=] data.langs_with_infopages = list_to_set{ "acw", "ady", "ang", "arc", "ba", "bg", "bo", "ca", "ceb", "cho", "cmn", "cs", "cv", "cy", "da", "de", "dsb", "dz", "egl", "egy", "el", "en", "enm", "eo", "es", "fa", "fi", "fo", "fr", "fy", "ga", "gd", "ghc", "gmh", "gmw-msc", "got", "he", "hi", "hrx", "hu", "hy", "id", "ii", "is", "it", "iu", "ja", "jbo", "ka", "kls", "ko", "kw", "la", "lb", "liv", "lt", "lv", "mdf", "mfe", "mic", "mk", "mns-nor", "ms", "mt", "mul", "my", "nan", "nci", "nl", "nn", "no", "nov", "nv", "pjt", "pl", "ps", "pt", "ro", "ru", "scn", "sco", "sga", "sh", "sl", "sq", "sv", "sw", "syc", "szl", "tg", "th", "tl", "tpw", "tr", "tyv", "ug", "uk", "vi", "vo", "wlm", "yi", "yrl", "yue", "zlw-mas" } --[=[ This should list the diphthongs of a language (in the form of Lua patterns), provided they do *NOT* contain semivowel symbols such as /j w ɰ ɥ/ or vowels with nonsyllabic diacritics such as /i̯ u̯/. For example, list /au/ or /aʊ/, but do not list /aw/ or /au̯/. The data in this table is used to count the number of syllables in a word. [[Module:syllables]] automatically knows how to correctly handle semivowel symbols and nonsyllabic diacritics. Any language listed here will automatically have categories of the form "LANG #-syllable words" generated. In addition, any language listed below under `langs_to_generate_syllable_count_categories` will also have such categories generated. NOTE: There are some additional languages that have these categories. For example: * Thai words have these categories added by [[Module:th-pron]].]=] data.diphthongs = { ["cs"] = { -- [[w:Czech phonology#Diphthongs]] "[aeo]u", }, ["de"] = { "a[ɪʊ]", "ɔ[ʏɪ]", }, ["en"] = { -- from [[Appendix:English pronunciation]] mostly, but /ʌɪ/ is from the OED "[aɑæeɛoɔʌ][ɪi]", "[ɑɒæo]e", "[əɐ]ʉ", "[aɒəoɔæ]ʊ", "æo", "[ɛeɪiɔʊʉ]ə", -- /iə/ is a diphthong in NZE, but a disyllabic sequence in GA. -- /ɪə/ is both a disyllabic sequence and a diphthong in old-fashioned RP. "[aʌ][ʊɪ]ə", -- May be a disyllabic sequence in some or all dialects? }, ["grc"] = { "[aeyo]i", "[ae]u", "[ɛɔa]ː[iu]", }, ["hrx"] = { "aɪ̯", "aʊ̯", "oɪ̯", "eʊ̯", }, ["is"] = { -- [[w:Icelandic phonology#Vowels]] "[aeɔœʏ]i", -- diphthongs as the module generates them "[ao]u", -- diphthongs as the module generates them "ø[iɪy]", -- additional forms that may occur; Wikipedia is oddly specific about the second element: ei and ai, but øɪ. }, ["it"] = { "[aeɛoɔu]i", "[aeɛioɔ]u", }, ["lb"] = { "[iu]ə", "[ɜoæɑ]ɪ", "[əæɑ]ʊ", }, ["lt"] = { "ɐɪ", "ɒʊ", "ɛɪ", "ɛʊ", "ʊɪ", "ɔɪ", "ɔʊ", -- Simple diphthongs (unstressed forms) "iɛ", "uɔ", -- Complex diphthongs "ɑˑɪ", "ɑˑʊ", "æˑɪ", "æˑʊ", "oˑɪ", -- Falling tone (acute) "ɐɪˑ", "ɒʊˑ", "ɛɪˑ", "ɛʊˑ", "ʊɪˑ", -- Rising tone (tilde) - lengthened second element -- Note: Mixed diphthongs (e.g., ɐlˑ, æˑn, ʊl, etc.) are omitted since they are inherently monosyllabic }, } --[=[ This should list any languages for which categories of the form "LANG #-syllable words", e.g. [[:Category:Russian 3-syllable words]], should be generated. Do not list languages here if they have an entry above under `data.diphthongs`; such languages are automatically added to this list.]=] local langs_to_generate_syllable_count_categories = list_to_set{ "ar", -- Arabic has diphthongs, but they are transcribed -- with semivowel symbols. "ary", -- Moroccan Arabic has diphthongs, but they are transcribed -- with semivowel symbols. "bg", -- Bulgarian has diphthongs with /j/ and marginally with /w/, -- but these are semivowels. "ca", -- Catalan has diphthongs, but they are generally transcribed using -- /w/ and /j/, so do not need to be listed (see [[w:Catalan language#Diphthongs and triphthongs]]. "eo", "es", -- Spanish has diphthongs, but they are transcribed with i̯ etc. "eu", -- Basque has dipthongs, but they are transcribed with i̯ and u̯. "fi", -- Finnish has diphthongs, but they are now automatically transcribed with -- the nonsyllabic diacritic "fr", -- French has diphthongs, but they are transcribed -- with semivowel symbols: [[w:French phonology#Glides and diphthongs]]. "hnn", "id", -- Indonesian has diphthongs, but they are transcribed with i̯ or /j/ etc. "ka", "kne", "kmr", "ku", "la", -- All diphthongs transcribed with e̯ or /j/ etc. "mk", "ms", -- Malay has diphthongs, but they are transcribed with i̯ or /j/ etc. "mt", -- Maltese has diphthongs, but they are transcribed -- with semivowel symbols. "pl", -- No diphthongs, properly speaking; sequences of a vowel and /w/ or /j/ though. "pt", -- Portuguese has diphthongs, but they are transcribed with i̯ or /j/ etc. "rsk", -- No diphthongs but there are sequences of vowel and /j/ or /w/. "ru", -- No diphthongs, properly speaking; sequences of a vowel and /j/ though. "sk", -- Slovak has rising diphthongs, /i̯e, i̯a, i̯u, u̯o/, which are probably always spelled with the nonsyllabic diacritic, so do not need to be listed. "sl", -- No diphthongs, properly speaking; sequences of a vowel, /j/ and /w/ though "sq", -- [[w:Albanian language#Vowels]] doesn't mention anything about diphthongs. "szy", -- All diphthongs are transcribed with /j/ or /w/ "tl", -- Tagalog has diphthongs, but they are transcribed with i̯ or /j/ etc "tsg", "ug", -- No diphthongs. } -- Also add languages listed under `data.diphthongs`. for langcode, _ in pairs(data.diphthongs) do langs_to_generate_syllable_count_categories[langcode] = true end data.langs_to_generate_syllable_count_categories = langs_to_generate_syllable_count_categories -- Languages to use the phonetic not phonemic notation to compute syllable counts. data.langs_to_use_phonetic_notation = list_to_set{ "bg", "es", "id", "la", "lt", "mk", "ms", "rsk", "ru", } -- Languages to use the phonetic or phonemic notation to compute syllable counts, whichever is available. data.langs_to_use_phonetic_or_phonemic_notation = list_to_set{ -- [[Module:is-IPA]] generates [...] but many manual pronuns use /.../. "is", } -- Non-standard or obsolete IPA symbols. data.nonstandard = { --[[ The following symbols consist of more than one character, so we can't put them in the line below. ]] "ɑ̢", "ɔ̗", "ɔ̖", "[?ƍσƺƪƞƛłščžǰǧǯẋⱻʚω∅ØȣᴀᴇⱻQKPT]" } -- See valid IPA characters at [[Module:IPA/data/symbols]]. data.phonemes = {} data.phonemes["dz"] = { "m", "n", "ŋ", "p", "t", "ʈ", "k", "pʰ", "tʰ", "ʈʰ", "kʰ", "t͡s", "t͡ɕ", "t͡sʰ", "t͡ɕʰ", "w", "s", "z", "ɬ", "l", "r", "ɕ", "ʑ", "j", "h", "ɑ", "e", "i", "o", "u", "ɑː", "eː", "ɛː", "iː", "oː", "øː", "uː", "yː", "ɑ˥", "e˥", "i˥", "o˥", "u˥", "ɑː˥", "eː˥", "ɛː˥", "iː˥", "oː˥", "øː˥", "uː˥", "yː˥", "m˥", "n˥", "ŋ˥", "p˥", "k˥", "k̚˥", "w˥", "l˥", "r˥", "ɕ˥", "j˥", ")˥", "ɑ˩", "e˩", "i˩", "o˩", "u˩", "ɑː˩", "eː˩", "ɛː˩", "iː˩", "oː˩", "øː˩", "uː˩", "yː˩", "m˩", "n˩", "ŋ˩", "p˩", "k˩", "k̚˩", "w˩", "l˩", "r˩", "ɕ˩", "j˩", ")˩", ".", ",", "-", } data.phonemes["eo"] = { "a", "b", "d", "d͡ʒ", "d͡z", "e", "f", "h", "i", "j", "k", "l", "m", "n", "o", "p", "r", "s", "t", "t͡s", "t͡ʃ", "u", "u̯", "v", "w", "x", "z", "ɡ", "ʃ", "ʒ", "ˈ", ".", " ", "-", "u̯", "i̯" } data.phonemes["hy"] = { "ɑ", "b", "ɡ", "d", "e", "z", "ə", "tʰ", "ʒ", "i", "l", "χ", "t͡s", "k", "h", "d͡z", "ʁ", "t͡ʃ", "m", "j", "n", "ʃ", "ɔ", "t͡ʃʰ", "p", "d͡ʒ", "r", "s", "v", "t", "ɾ", "t͡sʰ", "v", "pʰ", "kʰ", "o", "f", "ŋɡ", "ŋk", "ŋχ", "u", "œ", "ʏ", "ˈ", "ˌ", ".", " ", "ː", } data.phonemes["nl"] = { "m", "n", "ŋ", "p", "b", "t", "d", "k", "ɡ", "f", "v", "s", "z", "ʃ", "ʒ", "x", "ɣ", "ɦ", "ʋ", "l", "j", "r", "ɪ", "ʏ", "ɛ", "ə", "ɔ", "ɑ", "i", "iː", "y", "yː", "u", "uː", "eː", "øː", "oː", "ɛː", "œː", "ɔː", "aː", "ɛi̯", "œy̯", "ɔi̯", "ɑu̯", "ɑi̯", "iu̯", "yu̯", "ui̯", "eːu̯", "oːi̯", "aːi̯", "ˈ", "ˌ", ".", " ", "-", } data.phonemes["mt"] = { "m", "n", "p", "t", "k", "ʔ", "b", "d", "ɡ", "t͡s", "t͡ʃ", "d͡z", "d͡ʒ", "f", "s", "ʃ", "ħ", "v", "z", "ʒ", "ɣ", "l", "j", "w", "r", "ɪ", "ɛ", "ɔ", "a", "u", "ɛˤ", "ɔˤ", "aˤ", "əˤ", "ɛˤː", "ɔˤː", "aˤː", "əˤː", "ɪˤː", "iː", "ɪː", "ɛː", "ɔː", "aː", "uː", "ˈ", "ˌ", ".", " ", "‿", "-" } return data 1l5gqhh6kjp07cgmkg2dfudtmmreld7 Mô đun:IPA/data/symbols 828 261268 2568778 2170820 2026-10-06T07:08:19Z TheHighFighter2 42988 2568778 Scribunto text/plain local data = {} --[=[ Valid IPA symbols. Currently almost all values of "title" and "link" keys are just the comments that were used in [[Module:IPA]]. The "link" fields should be checked (those that start with an uppercase letter are checked). ]=] --[=[ local phones = {} -- Vowels. phones["i"] = { close = true, front = true, unrounded = true, vowel = true, } phones["e"] = { ["close-mid"] = true, front = true, unrounded = true, vowel = true, } phones["ɛ"] = { ["open-mid"] = true, front = true, unrounded = true, vowel = true, } phones["æ"] = { ["near-open"] = true, front = true, unrounded = true, vowel = true, } phones["a"] = { open = true, front = true, unrounded = true, vowel = true, } phones["y"] = { close = true, front = true, rounded = true, vowel = true, } phones["ø"] = { ["close-mid"] = true, front = true, rounded = true, vowel = true, } phones["œ"] = { ["open-mid"] = true, front = true, rounded = true, vowel = true, } phones["ɶ"] = { open = true, front = true, rounded = true, vowel = true, } phones["ɪ"] = { ["near-close"] = true, ["near-front"] = true, unrounded = true, vowel = true, } phones["ʏ"] = { ["near-close"] = true, ["near-front"] = true, rounded = true, vowel = true, } phones["ɨ"] = { close = true, central = true, unrounded = true, vowel = true, } phones["ᵻ"] = { ["near-close"] = true, central = true, unrounded = true, vowel = true, } phones["ɘ"] = { ["close-mid"] = true, central = true, unrounded = true, vowel = true, } phones["ɜ"] = { ["open-mid"] = true, central = true, unrounded = true, vowel = true, } phones["ɝ"] = { rhotic = true, ["open-mid"] = true, central = true, unrounded = true, vowel = true, } phones["ə"] = { mid = true, central = true, vowel = true, } phones["ɚ"] = { rhotic = true, mid = true, central = true, vowel = true, } phones["ɐ"] = { ["near-open"] = true, central = true, vowel = true, } phones["ʉ"] = { close = true, central = true, rounded = true, vowel = true, } phones["ᵿ"] = { ["near-close"] = true, central = true, rounded = true, vowel = true, } phones["ɵ"] = { ["close-mid"] = true, central = true, rounded = true, vowel = true, } phones["ɞ"] = { ["open-mid"] = true, central = true, rounded = true, vowel = true, } phones["ʊ"] = { ["near-close"] = true, ["near-back"] = true, rounded = true, vowel = true, } phones["ɯ"] = { close = true, back = true, unrounded = true, vowel = true, } phones["ɤ"] = { ["close-mid"] = true, back = true, unrounded = true, vowel = true, } phones["ʌ"] = { ["open-mid"] = true, back = true, unrounded = true, vowel = true, } phones["ɑ"] = { open = true, back = true, unrounded = true, vowel = true, } phones["u"] = { close = true, back = true, rounded = true, vowel = true, } phones["o"] = { ["close-mid"] = true, back = true, rounded = true, vowel = true, } phones["ɔ"] = { ["open-mid"] = true, back = true, rounded = true, vowel = true, } phones["ɒ"] = { open = true, back = true, rounded = true, vowel = true, } -- Nasals. phones["m"] = { voiced = true, bilabial = true, nasal = true, } phones["ɱ"] = { voiced = true, labiodental = true, nasal = true, } phones["n"] = { voiced = true, alveolar = true, nasal = true, } phones["ɳ"] = { voiced = true, retroflex = true, nasal = true, } phones["ɲ"] = { voiced = true, palatal = true, nasal = true, } phones["ŋ"] = { voiced = true, velar = true, nasal = true, } phones["𝼇"] = { voiced = true, velodorsal = true, nasal = true, } phones["ɴ"] = { voiced = true, uvular = true, nasal = true, } -- Plosives. phones["p"] = { voiceless = true, bilabial = true, plosive = true, } phones["b"] = { voiced = true, bilabial = true, plosive = true, } phones["t"] = { voiceless = true, alveolar = true, plosive = true, } phones["d"] = { voiced = true, alveolar = true, plosive = true, } phones["ʈ"] = { voiceless = true, retroflex = true, plosive = true, } phones["ɖ"] = { voiced = true, retroflex = true, plosive = true, } phones["c"] = { voiceless = true, palatal = true, plosive = true, } phones["ɟ"] = { voiced = true, palatal = true, plosive = true, } phones["k"] = { voiceless = true, velar = true, plosive = true, } phones["ɡ"] = { voiced = true, velar = true, plosive = true, } phones["𝼃"] = { voiceless = true, velodorsal = true, plosive = true, } phones["𝼁"] = { voiced = true, velodorsal = true, plosive = true, } phones["q"] = { voiceless = true, uvular = true, plosive = true, } phones["ɢ"] = { voiced = true, uvular = true, plosive = true, } phones["ꞯ"] = { voiceless = true, ["upper-pharyngeal"] = true, plosive = true, } phones["𝼂"] = { voiced = true, ["upper-pharyngeal"] = true, plosive = true, } phones["ʡ"] = { epiglottal = true, plosive = true, } phones["ʔ"] = { glottal = true, plosive = true, } -- Fricatives. phones["ɸ"] = { voiceless = true, bilabial = true, fricative = true, } phones["β"] = { voiced = true, bilabial = true, fricative = true, } phones["ʍ"] = { voiceless = true, ["labial-velar"] = true, fricative = true, } phones["f"] = { voiceless = true, labiodental = true, fricative = true, } phones["v"] = { voiced = true, labiodental = true, fricative = true, } phones["θ"] = { voiceless = true, dental = true, ["non-sibilant"] = true, fricative = true, } phones["ð"] = { voiced = true, dental = true, ["non-sibilant"] = true, fricative = true, } phones["s"] = { voiceless = true, alveolar = true, sibilant = true, fricative = true, } phones["z"] = { voiced = true, alveolar = true, sibilant = true, fricative = true, } phones["ɬ"] = { voiceless = true, alveolar = true, lateral = true, fricative = true, } phones["ɮ"] = { voiced = true, alveolar = true, lateral = true, fricative = true, } phones["ʃ"] = { voiceless = true, postalveolar = true, sibilant = true, fricative = true, } phones["ʒ"] = { voiced = true, postalveolar = true, sibilant = true, fricative = true, } phones["ʂ"] = { voiceless = true, retroflex = true, sibilant = true, fricative = true, } phones["ʐ"] = { voiced = true, retroflex = true, sibilant = true, fricative = true, } phones["ꞎ"] = { voiceless = true, retroflex = true, lateral = true, fricative = true, } phones["𝼅"] = { voiced = true, retroflex = true, lateral = true, fricative = true, } phones["ɕ"] = { voiceless = true, ["alveolo-palatal"] = true, sibilant = true, fricative = true, } phones["ʑ"] = { voiced = true, ["alveolo-palatal"] = true, sibilant = true, fricative = true, } phones["ç"] = { voiceless = true, palatal = true, fricative = true, } phones["ʝ"] = { voiced = true, palatal = true, fricative = true, } phones["𝼆"] = { voiceless = true, palatal = true, lateral = true, fricative = true, } phones["ɧ"] = { voiceless = true, ["palatal-velar"] = true, fricative = true, } phones["x"] = { voiceless = true, velar = true, fricative = true, } phones["ɣ"] = { voiced = true, velar = true, fricative = true, } phones["𝼄"] = { voiceless = true, velar = true, lateral = true, fricative = true, } phones["ʩ"] = { voiceless = true, velopharyngeal = true, fricative = true, } phones["χ"] = { voiceless = true, uvular = true, fricative = true, } phones["ʁ"] = { voiced = true, uvular = true, fricative = true, } phones["ħ"] = { voiceless = true, pharyngeal = true, fricative = true, } phones["ʕ"] = { voiced = true, pharyngeal = true, fricative = true, } phones["ʜ"] = { voiceless = true, epiglottal = true, fricative = true, } phones["ʢ"] = { voiced = true, epiglottal = true, fricative = true, } phones["h"] = { voiceless = true, glottal = true, fricative = true, } phones["ɦ"] = { voiced = true, glottal = true, fricative = true, } -- Approximants. phones["ʋ"] = { voiced = true, labiodental = true, approximant = true, } phones["ɥ"] = { voiced = true, ["labial–palatal"] = true, approximant = true, } phones["w"] = { voiced = true, ["labial–velar"] = true, approximant = true, } phones["ɹ"] = { voiced = true, alveolar = true, approximant = true, } phones["ꭨ"] = { ["velarized or pharyngealized"] = true, voiced = true, alveolar = true, approximant = true, } phones["l"] = { voiced = true, alveolar = true, lateral = true, approximant = true, } phones["ɫ"] = { ["velarized or pharyngealized"] = true, voiced = true, alveolar = true, lateral = true, approximant = true, } phones["ɻ"] = { voiced = true, retroflex = true, approximant = true, } phones["ɭ"] = { voiced = true, retroflex = true, lateral = true, approximant = true, } phones["j"] = { voiced = true, palatal = true, approximant = true, } phones["ʎ"] = { voiced = true, palatal = true, lateral = true, approximant = true, } phones["ɰ"] = { voiced = true, velar = true, approximant = true, } phones["ʟ"] = { voiced = true, velar = true, lateral = true, approximant = true, } -- Flaps. phones["ⱱ"] = { voiced = true, labiodental = true, flap = true, } phones["ɾ"] = { voiced = true, alveolar = true, flap = true, } phones["ɺ"] = { voiced = true, alveolar = true, lateral = true, flap = true, } phones["ɽ"] = { voiced = true, retroflex = true, flap = true, } phones["𝼈"] = { voiced = true, retroflex = true, lateral = true, flap = true, } -- Trills. phones["ʙ"] = { voiced = true, bilabial = true, trill = true, } phones["r"] = { voiced = true, alveolar = true, trill = true, } phones["𝼀"] = { voiceless = true, velopharyngeal = true, trill = true, } phones["ʀ"] = { voiced = true, uvular = true, trill = true, } phones["ᴙ"] = { voiced = true, pharyngeal = true, trill = true, } -- Clicks. phones["ʘ"] = { bilabial = true, click = true, } phones["ǀ"] = { dental = true, click = true, } phones["ǃ"] = { alveolar = true, click = true, } phones["𝼊"] = { retroflex = true, click = true, } phones["ǂ"] = { palatal = true, click = true, } phones["ʞ"] = { velar = true, click = true, } phones["ǁ"] = { lateral = true, click = true, } -- Implosives. phones["ɓ"] = { voiced = true, bilabial = true, implosive = true, } phones["ɗ"] = { voiced = true, alveolar = true, implosive = true, } phones["ᶑ"] = { voiced = true, retroflex = true, implosive = true, } phones["ʄ"] = { voiced = true, palatal = true, implosive = true, } phones["ɠ"] = { voiced = true, velar = true, implosive = true, } phones["ʛ"] = { voiced = true, uvular = true, implosive = true, } -- Percussives. phones["ʬ"] = { bilabial = true, percussive = true, } phones["ʭ"] = { bidental = true, percussive = true, } phones["¡"] = { sublaminal = true, ["lower-alveolar"] = true, percussive = true, } ]=] local u = require("Module:string/char") data[1] = { -- PULMONIC CONSONANTS -- nasal ["m"] = { title = "bilabial nasal", link = "w:Bilabial nasal", }, ["ɱ"] = { title = "labiodental nasal", link = "w:Labiodental nasal", }, ["n"] = { title = "alveolar nasal", link = "w:Alveolar nasal", }, ["ɳ"] = { title = "retroflex nasal", link = "w:Retroflex nasal", }, ["ɲ"] = { title = "palatal nasal", link = "w:Palatal nasal", }, ["ŋ"] = { title = "velar nasal", link = "w:Velar nasal", }, ["ɴ"] = { title = "uvular nasal", link = "w:Uvular nasal", }, -- plosive ["p"] = { title = "voiceless bilabial plosive", link = "w:Voiceless bilabial stop", }, ["b"] = { title = "voiced bilabial plosive", link = "w:Voiced bilabial stop", }, ["t"] = { title = "voiceless alveolar plosive", link = "w:Voiceless alveolar stop", }, ["d"] = { title = "voiced alveolar plosive", link = "w:Voiced alveolar stop", }, ["ʈ"] = { title = "voiceless retroflex plosive", link = "w:Voiceless retroflex stop", }, ["ɖ"] = { title = "voiced retroflex plosive", link = "w:Voiced retroflex stop", }, ["c"] = { title = "voiceless palatal plosive", link = "w:Voiceless palatal stop", }, ["ɟ"] = { title = "voiced palatal plosive", link = "w:Voiced palatal stop", }, ["k"] = { title = "voiceless velar plosive", link = "w:Voiceless velar stop", }, ["ɡ"] = { title = "voiced velar plosive", link = "w:Voiced velar stop", }, ["q"] = { title = "voiceless uvular plosive", link = "w:Voiceless uvular stop", }, ["ɢ"] = { title = "voiced uvular plosive", link = "w:Voiced uvular stop", }, ["ʡ"] = { title = "epiglottal plosive", link = "w:Epiglottal stop", }, ["ʔ"] = { title = "glottal stop", link = "w:Glottal stop", }, -- fricative ["ɸ"] = { title = "voiceless bilabial fricative", link = "w:Voiceless bilabial fricative", }, ["β"] = { title = "voiced bilabial fricative", link = "w:Voiced bilabial fricative", }, ["f"] = { title = "voiceless labiodental fricative", link = "w:Voiceless labiodental fricative", }, ["v"] = { title = "voiced labiodental fricative", link = "w:Voiced labiodental fricative", }, ["θ"] = { title = "voiceless dental fricative", link = "w:Voiceless dental fricative", }, ["ð"] = { title = "voiced dental fricative", link = "w:Voiced dental fricative", }, ["s"] = { title = "voiceless alveolar fricative", link = "w:Voiceless alveolar fricative", }, ["z"] = { title = "voiced alveolar fricative", link = "w:Voiced alveolar fricative", }, ["ʃ"] = { title = "voiceless postalveolar fricative", link = "w:Voiceless palato-alveolar sibilant", }, ["ʒ"] = { title = "voiced postalveolar fricative", link = "w:Voiced palato-alveolar sibilant", }, ["ʂ"] = { title = "voiceless retroflex fricative", link = "w:Voiceless retroflex sibilant", }, ["ʐ"] = { title = "voiced retroflex fricative", link = "w:Voiced retroflex sibilant", }, ["ɕ"] = { title = "voiceless alveolo-palatal fricative", link = "w:Voiceless alveolo-palatal sibilant", }, ["ʑ"] = { title = "voiced alveolo-palatal fricative", link = "w:Voiced alveolo-palatal sibilant", }, ["ç"] = { title = "voiceless palatal fricative", link = "w:Voiceless palatal fricative", }, ["ʝ"] = { title = "voiced palatal fricative", link = "w:Voiced palatal fricative", }, ["x"] = { title = "voiceless velar fricative", link = "w:Voiceless velar fricative", }, ["ɣ"] = { title = "voiced velar fricative", link = "w:Voiced velar fricative", }, ["χ"] = { title = "voiceless uvular fricative", link = "w:Voiceless uvular fricative", }, ["ʁ"] = { title = "voiced uvular fricative", link = "w:Voiced uvular fricative", }, ["ħ"] = { title = "voiceless pharyngeal fricative", link = "w:Voiceless pharyngeal fricative", }, ["ʕ"] = { title = "voiced pharyngeal fricative", link = "w:Voiced pharyngeal fricative", }, ["ʜ"] = { title = "voiceless epiglottal fricative", link = "w:Voiceless epiglottal fricative", }, ["ʢ"] = { title = "voiced epiglottal fricative", link = "w:Voiced epiglottal fricative", }, ["h"] = { title = "voiceless glottal fricative", link = "w:Voiceless glottal fricative", }, ["ɦ"] = { title = "voiced glottal fricative", link = "w:Voiced glottal fricative", }, -- approximant ["ʋ"] = { title = "labiodental approximant", link = "w:Labiodental approximant", }, ["ɹ"] = { title = "alveolar approximant", link = "w:Alveolar approximant", }, ["ɻ"] = { title = "retroflex approximant", link = "w:Retroflex approximant", }, ["j"] = { title = "palatal approximant", link = "w:Palatal approximant", }, ["ɰ"] = { title = "velar approximant", link = "w:Velar approximant", }, -- tap, flap ["ⱱ"] = { title = "labiodental tap", link = "w:Labiodental flap", }, ["ɾ"] = { title = "alveolar flap", link = "w:Alveolar flap", }, ["ɽ"] = { title = "retroflex flap", link = "w:Retroflex flap", }, -- trill ["ʙ"] = { title = "bilabial trill", link = "w:Bilabial trill", }, ["r"] = { title = "alveolar trill", link = "w:Alveolar trill", }, ["ʀ"] = { title = "uvular trill", link = "w:Uvular trill", }, ["ᴙ"] = { title = "epiglottal trill", link = "w:Epiglottal trill", }, -- lateral fricative ["ɬ"] = { title = "voiceless alveolar lateral fricative", link = "w:Voiceless alveolar lateral fricative", }, ["ɮ"] = { title = "voiced alveolar lateral fricative", link = "w:Voiced alveolar lateral fricative", }, -- no precomposed Unicode character --TOMOVE --["ɬ̢"] = {title = "voiceless retroflex lateral fricative", link = "w:voiceless retroflex lateral fricative"}, -- no precomposed Unicode character --TOMOVE:3 --["ʎ̝̊"] = {title = "voiceless palatal lateral fricative", link = "w:voiceless palatal lateral fricative"}, -- no precomposed Unicode character --TOMOVE:3 --["ʟ̝̊"] = {title = "voiceless velar lateral fricative", link = "w:voiceless velar lateral fricative"}, -- no precomposed Unicode character --TOMOVE --["ʟ̝"] = {title = "voiced velar lateral fricative", link = "w:voiced velar lateral fricative"}, -- lateral approximant ["l"] = { title = "alveolar lateral approximant", link = "w:Alveolar lateral approximant", }, ["ɭ"] = { title = "retroflex lateral approximant", link = "w:Retroflex lateral approximant", }, ["ʎ"] = { title = "palatal lateral approximant", link = "w:Palatal lateral approximant", }, ["ʟ"] = { title = "velar lateral approximant", link = "w:Velar lateral approximant", }, -- lateral flap ["ɺ"] = { title = "alveolar lateral flap", link = "w:Alveolar lateral flap", }, --["ɭ̆"] = {title = "retroflex lateral flap", link = "w:retroflex lateral flap"}, -- no precomposed Unicode character --TOMOVE --["ɺ˞"] = {title = "retroflex lateral flap", link = "w:retroflex lateral flap"}, -- no precomposed Unicode character --TOMOVE -- NON-PULMONIC CONSONANTS -- clicks ["ʘ"] = { title = "bilabial click", link = "w:Bilabial clicks", }, ["ǀ"] = { title = "dental click", link = "w:Dental clicks", }, ["ǃ"] = { title = "postalveolar click", link = "w:Alveolar clicks", }, ["𝼊"] = { title = "subapical retroflex", link = "w:Retroflex clicks", }, -- NOT IN X-SAMPA ["ǂ"] = { title = "palatal click", link = "w:Palatal clicks", }, ["ǁ"] = { title = "alveolar lateral click", link = "w:Lateral clicks", }, -- implosives ["ɓ"] = { title = "voiced bilabial implosive", link = "w:Voiced bilabial implosive", }, ["ɗ"] = { title = "voiced alveolar implosive", link = "w:Voiced alveolar implosive", }, -- NOT IN X-SAMPA ["ᶑ"] = { title = "retroflex implosive", link = "w:Voiced retroflex implosive", }, ["ʄ"] = { title = "voiced palatal implosive", link = "w:Voiced palatal implosive", }, ["ɠ"] = { title = "voiced velar implosive", link = "w:Voiced velar implosive", }, ["ʛ"] = { title = "voiced uvular implosive", link = "w:Voiced uvular implosive", }, -- ejectives ["ʼ"] = { title = "ejective", link = "w:Ejective consonant", }, -- CO-ARTICULATED CONSONANTS ["ʍ"] = { title = "voiceless labial-velar fricative", link = "w:Voiceless labio-velar approximant", }, ["w"] = { title = "labial-velar approximant", link = "w:Labio-velar approximant", }, ["ɥ"] = { title = "labial-palatal approximant", link = "w:Labialized palatal approximant", }, ["ɧ"] = { title = "voiceless palatal-velar fricative", link = "w:Sj-sound", }, -- should be handled in [[Module:IPA]] and not through this table -- BRACKETS --[[ -- ["//"] = { title = "morphophonemic", link = "w:morphophonemic", }, ["/"] = { title = "phonemic", link = "w:phonemic", }, ["["] = { title = "phonetic", link = "w:phonetic", }, ["["] = { title = "phonetic", link = "w:phonetic", }, ["〈"] = { title = "orthographic", link = "w:orthographic", }, ["〉"] = { title = "orthographic", link = "w:orthographic", }, ["⟨"] = { title = "orthographic", link = "w:orthographic", }, ["⟩"] = { title = "orthographic", link = "w:orthographic", }, ]] -- VOWELS -- close ["i"] = { title = "close front unrounded vowel", link = "w:Close front unrounded vowel", }, ["y"] = { title = "close front rounded vowel", link = "w:Close front rounded vowel", }, ["ɨ"] = { title = "close central unrounded vowel", link = "w:Close central unrounded vowel", }, ["ʉ"] = { title = "close central rounded vowel", link = "w:Close central rounded vowel", }, ["ɯ"] = { title = "close back unrounded vowel", link = "w:Close back unrounded vowel", }, ["u"] = { title = "close back rounded vowel", link = "w:Close back rounded vowel", }, -- near close ["ɪ"] = { title = "near-close near-front unrounded vowel", link = "w:Near-close near-front unrounded vowel", }, ["ʏ"] = { title = "near-close near-front rounded vowel", link = "w:Near-close near-front rounded vowel", }, ["ᵻ"] = { title = "near-close central unrounded vowel", link = "w:Near-close central unrounded vowel", }, -- (alternative) --TOMOVE --[[ ["ɪ̈"] = { title = "near-close central unrounded vowel", link = "w:near-close central unrounded vowel", }, ]] ["ᵿ"] = { title = "near-close central rounded vowel", link = "w:Near-close central rounded vowel", }, --[[ (alternative) TOMOVE ["ʊ̈"] = { title = "near-close central rounded vowel", link = "w:near-close central rounded vowel", }, ]] ["ʊ"] = { title = "near-close near-back rounded vowel", link = "w:Near-close near-back rounded vowel", }, --close mid ["e"] = { title = "close-mid front unrounded vowel", link = "w:Close-mid front unrounded vowel", }, ["ø"] = { title = "close-mid front rounded vowel", link = "w:Close-mid front rounded vowel", }, ["ɘ"] = { title = "close-mid central unrounded vowel", link = "w:Close-mid central unrounded vowel", }, ["ɵ"] = { title = "close-mid central rounded vowel", link = "w:Close-mid central rounded vowel", }, ["ɤ"] = { title = "close-mid back unrounded vowel", link = "w:Close-mid back unrounded vowel", }, ["o"] = { title = "close-mid back rounded vowel", link = "w:Close-mid back rounded vowel", }, -- mid ["ə"] = { title = "schwa", link = "w:Schwa", }, ["ɚ"] = { title = "schwa+r", link = "w:R-colored vowel", }, -- open mid ["ɛ"] = { title = "open-mid front unrounded vowel", link = "w:Open-mid front unrounded vowel", }, ["œ"] = { title = "open-mid front rounded vowel", link = "w:Open-mid front rounded vowel", }, ["ɜ"] = { title = "open-mid central unrounded vowel", link = "w:Open-mid central unrounded vowel", }, ["ɝ"] = { title = "open-mid central unrounded vowel+r", link = "w:R-colored vowel", }, ["ɞ"] = { title = "open-mid central rounded vowel", link = "w:Open-mid central rounded vowel", }, ["ʌ"] = { title = "open-mid back unrounded vowel", link = "w:Open-mid back unrounded vowel", }, ["ɔ"] = { title = "open-mid back rounded vowel", link = "w:Open-mid back rounded vowel", }, -- near open ["æ"] = { title = "near-open front unrounded vowel", link = "w:Near-open front unrounded vowel", }, ["ɐ"] = { title = "near-open central vowel", link = "w:Near-open central vowel", }, -- open ["a"] = { title = "open front unrounded vowel", link = "w:Open front unrounded vowel", }, ["ɶ"] = { title = "open front rounded vowel", link = "w:Open front rounded vowel", }, ["ɑ"] = { title = "open back unrounded vowel", link = "w:Open back unrounded vowel", }, ["ɒ"] = { title = "open back rounded vowel", link = "w:Open back rounded vowel", }, -- SUPRASEGMENTALS ["ˈ"] = {title = "primary stress", link = "w:Stress (linguistics)", XSAMPA = "\""}, --[[ ["???"] = { title = "extra stress: no Unicode char; double primary stress instead", link = "w:extra stress: no Unicode char; double primary stress instead", XSAMPA = "" }, --TOMOVE:3 ]] ["ˌ"] = { title = "secondary stress", link = "w:Secondary stress", }, ["ː"] = { title = "long", link = "w:Length (phonetics)", }, ["ˑ"] = { title = "half long", link = "w:Length (phonetics)", }, ["̆"] = { title = "extra-short", link = "w:Length (phonetics)", }, --[[ ["%."] = { title = "syllable break", link = "w:syllable break", }, ]] --TOMOVE ["‿"] = { title = "linking mark (absence of a break)", link = "w:Tie (typography)#International_Phonetic_Alphabet", }, [" "] = { title = "separator", link = "w:separator", }, -- TONE -- level tones ["˥"] = { title = "top", link = "w:Tone letter", }, ["˦"] = { title = "high", link = "w:Tone letter", }, ["˧"] = { title = "mid", link = "w:Tone letter", }, ["˨"] = { title = "low", link = "w:Tone letter", }, ["˩"] = { title = "bottom", link = "w:Tone letter", }, ["̋"] = { title = "extra high tone", link = "w:Tone letter", }, ["́"] = { title = "high tone", link = "w:Tone letter", }, ["̄"] = { title = "mid tone", link = "w:Tone letter", }, ["̀"] = { title = "low tone", link = "w:Tone letter", }, ["̏"] = { title = "extra low tone", link = "w:Tone letter", }, -- tone terracing ["ꜛ"] = { title = "upstep", link = "w:Upstep", }, ["ꜜ"] = { title = "downstep", link = "w:Downstep", }, -- contour tones ["̌"] = { title = "rising tone", link = "w:Tone (linguistics)", }, ["̂"] = { title = "falling tone", link = "w:Tone (linguistics)", }, ["᷄"] = { title = "high rising tone", link = "w:Tone (linguistics)", }, ["᷅"] = { title = "low rising tone", link = "w:Tone (linguistics)", }, ["᷇"] = { title = "high falling tone", link = "w:Tone (linguistics)", }, ["᷆"] = { title = "low falling tone", link = "w:Tone (linguistics)", }, ["᷈"] = { title = "rising falling tone (peaking)", link = "w:Tone (linguistics)", }, ["᷉"] = { title = "dipping", link = "w:Tone (linguistics)", }, -- [extrapolated from the chart -- please confirm] -- intonation ["|"] = { title = "minor (foot) group", link = "w:Prosodic unit", }, ["‖"] = { title = "major (intonation) group", link = "w:Prosodic unit", }, ["↗"] = { title = "global rise", link = "w:Intonation (linguistics)", }, ["↘"] = { title = "global fall", link = "w:Intonation (linguistics)", }, -- DIACRITICS -- syllabicity & releases ["̩"] = { title = "syllabi ", link = "w:Syllabic consonant", withdescender = "̍" }, -- (or "_=" ["̯"] = { title = "non-syllabic", link = "w:Semivowel", withdescender = "̑" }, ["ʰ"] = { title = "aspirated", link = "w:Aspirated consonant", }, ["ⁿ"] = { title = "nasal release", link = "w:Nasal release", }, ["ˡ"] = { title = "lateral release", link = "w:Lateral release (phonetics)", }, ["̚"] = { title = "no audible release", link = "w:No audible release", }, -- phonation ["̥"] = { title = "voiceless", link = "w:Voicelessness", withdescender = "̊" }, ["̬"] = { title = "voiced", link = "w:Voice (phonetics)", }, ["̤"] = { title = "breathy voice", link = "w:Breathy voice", }, ["̰"] = { title = "creaky voice", link = "w:Creaky voice", }, ["᷽"] = { title = "strident", link = "w:Strident vowel", }, -- primary articulation ["̪"] = { title = "dental", link = "w:Dental consonant", }, ["̺"] = { title = "apical", link = "w:Apical consonant", }, ["̻"] = { title = "laminal", link = "w:Laminal consonant", }, ["̟"] = { title = "advanced", link = "w:Relative articulation#Advanced_and_retracted", withdescender = "˖" }, ["̠"] = { title = "retracted", link = "w:Relative articulation#Retracted", withdescender = "˗" }, ["̼"] = { title = "linguolabial", link = "w:Linguolabial consonant", }, ["̈"] = { title = "centralized", link = "w:Relative articulation#Centralized_vowels", XSAMPA = "_\"" }, ["̽"] = { title = "mid-centralized", link = "Relative articulation#Mid-centralized_vowel", }, ["̞"] = { title = "lowered", link = "w:Relative articulation#Raised_and_lowered", withdescender = "˕" }, ["̝"] = { title = "raised", link = "w:Relative articulation#Raised_and_lowered", withdescender = "˔" }, ["͡"] = { title = "coarticulated", link = "w:Co-articulated consonant", }, ["͈"] = { title = "strong articulation", link = "w:Fortis and lenis", }, -- secondary articulation ["ʷ"] = { title = "labialized", link = "w:Labialization", }, ["ʲ"] = { title = "palatalized", link = "w:Palatalization (phonetics)", }, ["ˠ"] = { title = "velarized", link = "w:Velarization", }, ["ˤ"] = { title = "pharyngealized", link = "w:Pharyngealization", }, -- also see _e ["ɫ"] = { title = "velarized alveolar lateral approximant", link = "w:Alveolar lateral approximant", }, ["̴"] = { title = "velarized or pharyngealized; also see 5", link = "w:Velarization", }, ["̹"] = { title = "more rounded", link = "w:Roundedness", }, ["̜"] = { title = "less rounded", link = "w:Roundedness", }, ["̃"] = { title = "nasalization", link = "w:Nasalization", }, ["˞"] = { title = "rhotacization in vowels, retroflexion in consonants", link = "w:R-colored vowel", }, ["̘"] = { title = "advanced tongue root", link = "w:Advanced and retracted tongue root", }, ["̙"] = { title = "retracted tongue root", link = "w:Advanced and retracted tongue root", }, } data[2] = { -- TODO --["%("] = {}, --["%)"] = {}, ["ːː"] = { title = "extra long", link = "w:Length (phonetics)", }, ["r̥"] = {title = "voiceless alveolar trill", link = "w:Voiceless alveolar trill"}, ["ɬ’"] = {title = "alveolar lateral ejective fricative", link = "w:Alveolar lateral ejective fricative"}, } data[3] = { ["t͡s"] = {title = "voiceless alveolar sibilant affricate", link = "w:Voiceless alveolar affricate"}, ["d͡z"] = {title = "voiced alveolar sibilant affricate", link = "w:Voiced alveolar affricate"}, ["t͡ʃ"] = {title = "voiceless palato-alveolar affricate", link = "w:Voiceless palato-alveolar affricate", descender = true}, ["d͡ʒ"] = {title = "voiced palato-alveolar affricate", link = "w:Voiced palato-alveolar affricate"}, ["ʈ͡ʂ"] = {title = "voiceless retroflex affricate", link = "w:Voiceless retroflex affricate", descender = true}, ["ɖ͡ʐ"] = {title = "voiced retroflex affricate", link = "w:Voiced retroflex affricate, descender = true"}, ["t͡ɕ"] = {title = "voiceless alveolo-palatal affricate", link = "w:Voiceless alveolo-palatal affricate"}, ["d͡ʑ"] = {title = "voiced alveolo-palatal affricate", link = "w:Voiced alveolo-palatal affricate"}, ["c͡ç"] = {title = "voiceless palatal affricate", link = "w:Voiceless palatal affricate, descender = true"}, ["ɟ͡ʝ"] = {title = "voiced palatal affricate", link = "w:Voiced palatal affricate, descender = true"}, ["k͡x"] = {title = "voiceless velar affricate", link = "w:Voiceless velar affricate"}, ["ɡ͡ɣ"] = {title = "voiced velar affricate", link = "w:Voiced velar affricate, descender = true"}, } data[4] = { ["ǃ͡qʼ"] = {title = "alveolar linguo-glottalic stop", link = "w:Ejective-contour clicks, descender = true"}, ["ǁ͡χʼ"] = {title = "lateral linguo-glottalic affricate (homorganic)", link = "w:Ejective-contour clicks", descender = true}, } data[5] = { ["k͡ʟ̝̊"] = {title = "voiceless velar lateral affricate", link = "w:Voiceless velar lateral affricate"}, ["ᶢǀ͡qʼ"] = {title = "voiced dental linguo-glottalic stop", link = "w:Ejective-contour clicks"}, ["ǂ͡kxʼ"] = {title = "palatal linguo-glottalic affricate (heterorganic)", link = "w:Ejective-contour clicks"}, } data[6] = { ["k͡ʟ̝̊ʼ"] = {title = "velar lateral ejective affricate", link = "w:Velar lateral ejective affricate"}, ["ᶢʘ͡kxʼ"] = {title = "voiced labial linguo-glottalic affricate", link = "w:Ejective-contour clicks"}, } data.separator_escapes = { ["⁽"] = "(", ["⁾"] = ")", ["₍"] = "(", ["₎"] = ")", ["ˈ"] = "\1", ["ˌ"] = "\2", ["ː"] = ":", ["ˑ"] = ";", } -- acute and grave tone marks local diacritics = u( -- grave, acute, circumflex, tilde, macron, breve 0x300, 0x301, 0x302, 0x303, 0x304, 0x306, -- diaeresis, ring above, double acute, caron, vertical line above, double grave, left tack 0x308, 0x30A, 0x30B, 0x30C, 0x30D, 0x30F, 0x318, -- right tack, left angle, left half ring below, up tack below, down tack below, plus sign below 0x319, 0x31A, 0x31C, 0x31D, 0x31E, 0x31F, -- minus sign below, rhotic hook below, dot below, diaeresis below, ring below, vertical line below, bridge below 0x320, 0x322, 0x323, 0x324, 0x325, 0x329, 0x32A, -- caron below, inverted breve below 0x32C, 0x32F, -- tilde below, combining tilde overlay, right half ring below, inverted bridge below, square below, seagull below, x above 0x330, 0x334, 0x339, 0x33A, 0x33B, 0x33C, 0x33D, -- grave tone mark, acute tone mark, bridge above, equals sign below, double vertical line below 0x340, 0x341, 0x346, 0x347, 0x348, -- left angle below, not tilde above, homothetic above, almost equal above, left right arrow below 0x349, 0x34A, 0x34B, 0x34C, 0x34D, -- upwards arrow below, left arrowhead below, right arrowhead below 0x34E, 0x354, 0x355, -- double rightwards arrow below, combining Latin small letter a 0x362, 0x361, -- macron–acute, grave–macron, macron–grave, acute–macron, grave–acute–grave, acute–grave–acute 0x1DC4, 0x1DC5, 0x1DC6, 0x1DC7, 0x1DC8, 0x1DC9) data.diacritics = diacritics data.vowels = "iyɨʉɯuɪᵻʏʊᵿeøɘɵɤoəɚɛœɜɝɞʌɔæɐaɶɑɒäëïöüÿ" local tones = "˥˦˧˨˩꜒꜓꜔꜕꜖꜈꜉꜊꜋꜌꜍꜎꜏꜐꜑¹²³⁴⁵⁶⁷⁸⁹⁰" data.tones = tones local superscripts = u(0xA0) .. " ⁰¹²³⁴⁵⁶⁷⁸⁹ᵃ𐞃ᵄᵅᶛᵇ𐞄𐞅ᶜᶝᵈᶞ𐞋𐞌𐞍ᵉᵊᵋ𐞎ᶟᵌ𐞏𐞑ᶠᶢ𐞒𐞓𐞔ˠʰ𐞕𐞖ʱ𐞗ⁱᶦᶤʲᶨᶡ𐞘ᵏˡᶫꭞ𐞛ᶩ𐞞𐞠𐞡ᵐᶬⁿᶰᶮᶯᵑᵒ𐞢ꟹ𐞣ᵓᶱᵖᶲ𐞥ʳ𐞪ʴ𐞦𐞧ʵ𐞨𐞩ʶˢᶳᶴᵗ𐞯ᵘᶶᶣᵚᶭᶷᵛᶹ𐞰ᶺʷꭩˣʸ𐞲ᶻᶼᶽᶾˀˤ𐞳𐞴𐞶𐞷𐞸𐞹𐞵ᵝᶿᵡ˞⁻𐞁𐞂" data.superscripts = superscripts -- An array of patterns of valid character sequences. data.valid = { "⁽[" .. superscripts .. "]+⁾", "[ %(%)%%<>{|}%-→~⁓%.◌abcdefhijklmnopqrstuvwxyz¡àáâãāăēäæçèéêëĕěħìíîïĩīĭĺḿǹńňðòóôõöōŏőœøŕùúûüũūŭűýÿŷŋ" .. "ǀǁǂǃǎǐǒǔřǖǘǚǜǟǣǽǿȁȅȉȍȕȫȭȳɐɑɒɓɔɕɖɗɘəɚɛɜɝɞɟɠɡɢɣɤɥɦɧɨɪᵻɫɬɭɮɯɰɱɲɳɴɵɶɸɹɺ𝼈ɻɽɾʀʁʂʃʄʈʉʊᵿʋṽʌʍʎ𝼆ʏʐʑʒʔʕʘʞʙʛʜʝʟʡʢ𝼊ʬʭ" .. "ʼˈˌːˑˣ˔˕ˬ͗˭ˇ˖β͜θχᴙᶑ᷽ḁḛḭḯṍṏṳṵṹṻạẹẽịọụỳỵỹ‖․‥…‿↑↓↗↘ⱱꜛꜜꟸ𝆏𝆑˗ˋˊ–⸨⸩⁽⁾" .. diacritics .. tones .. superscripts .. "]+" } -- Character sequences which are valid only in a particular language. -- These can be either a single pattern (as a string), or an array of patterns (as a table). data.per_lang_valid = { ["egy"] = "V+", -- V for uncertain vowel ["okm"] = "[LHR!WT]+", -- irregular verb morphophonemes } -- Characters to add VARIATION SELECTOR-15 (U+FE0E) after. -- These are characters with emoji variants that are used by default by some clients. -- Adding VS15 after them instructs them to draw the characters as text instead. data.add_vs15 = "↗↘" data.invalid = { ["!"] = "ǃ", ["ꜝ"] = "ꜜ", ["ꜞ"] = "ꜛ", ["ꜟ"] = "ꜛ", ["'"] = "ˈ", ["’"] = "ʼ", [":"] = "ː", -- Confusable Latin letters ["B"] = "ʙ", ["g"] = "ɡ", ["G"] = "ɢ", ["Ɠ"] = "ʛ", ["H"] = "ʜ", ["ı"] = "ɪ", ["I"] = "ɪ", ["L"] = "ʟ", ["N"] = "ɴ", ["Œ"] = "ɶ", ["Q"] = "ꞯ", ["R"] = "ʀ", ["∫"] = "ʃ", ["⨎"] = "ǂ", -- due to confusion with obsolete 𝼋 below ["ß"] = "β", ["ẞ"] = "β", ["Y"] = "ʏ", ["Ə"] = "ə", ["ǝ"] = "ə", ["Ɂ"] = "ʔ", ["ɂ"] = "ʔ", ["ˁ"] = "ˤ", -- Confusable Greek letters ["α"] = "ɑ", ["γ"] = "ɣ", ["δ"] = "ð", ["ε"] = "ɛ", ["Η"] = "ʜ", ["η"] = "ŋ", ["ι"] = "ɪ", ["λ"] = "ʎ", ["υ"] = "ʋ", ["Ψ"] = "𝼊", ["ψ"] = "𝼊", ["Φ"] = "ɸ", ["ϕ"] = "ɸ", ["ꭓ"] = "χ", -- Actually Latin, since IPA uses the Greek letter(!) -- Confusable Cyrillic letters ["ӕ"] = "æ", ["Ә"] = "ə", ["ә"] = "ə", ["В"] = "ʙ", ["в"] = "ʙ", ["е"] = "e", ["З"] = "ɜ", ["з"] = "ɜ", ["Ѕ"] = "s", ["ѕ"] = "s", ["і"] = "i", ["ј"] = "j", ["Н"] = "ʜ", ["н"] = "ʜ", ["О"] = "o", ["о"] = "o", ["р"] = "p", ["с"] = "c", ["у"] = "y", ["Ү"] = "ʏ", ["ү"] = "ʏ", ["Ф"] = "ɸ", ["ф"] = "ɸ", ["х"] = "x", ["Һ"] = "h", ["һ"] = "h", ["Я"] = "ᴙ", ["я"] = "ᴙ", ["Ѱ"] = "𝼊", ["ѱ"] = "𝼊", ["Ѵ"] = "ⱱ", ["ѵ"] = "ⱱ", ["Ҁ"] = "ʕ", ["ҁ"] = "ʕ", -- Palatalization ["ᶀ"] = "bʲ", ["ꞔ"] = "cʲ", ["ᶁ"] = "dʲ", ["ȡ"] = "d̠ʲ", ["d̂"] = "d̠ʲ", ["ᶂ"] = "fʲ", ["ᶃ"] = "ɡʲ", ["ꞕ"] = "hʲ", ["ᶄ"] = "kʲ", ["ᶅ"] = "lʲ", ["ȴ"] = "l̠ʲ", ["l̂"] = "l̠ʲ", ["𝼓"] = "ɬʲ", ["ᶆ"] = "mʲ", ["ᶇ"] = "nʲ", ["ȵ"] = "n̠ʲ", ["n̂"] = "n̠ʲ", ["𝼔"] = "ŋʲ", ["ᶈ"] = "pʲ", ["ᶉ"] = "rʲ", ["𝼕"] = "ɹʲ", ["𝼖"] = "ɾʲ", ["ᶊ"] = "sʲ", ["𝼞"] = "ɕ", ["𐞺"] = "ᶝ", ["ᶋ"] = "ʃʲ", ["ʆ"] = "ʃʲ", ["ƫ"] = "tʲ", ["ȶ"] = "t̠ʲ", ["t̂"] = "t̠ʲ", ["ᶌ"] = "vʲ", ["ᶍ"] = "xʲ", ["ᶎ"] = "zʲ", ["𝼘"] = "ʒʲ", ["ʓ"] = "ʒʲ", -- Retroflex ["𝼝"] = "ʈ͡ʂ", ["𝼥"] = "ɖ", ["𝼦"] = "ɭ", ["𝼧"] = "ɳ", ["𝼨"] = "ɽ", ["𝼩"] = "ʂ", ["𝼪"] = "ʈ", -- Rhotic vowels ["ᶏ"] = "a˞", ["ᶐ"] = "ɑ˞", ["ᶒ"] = "e˞", ["ə˞"] = "ɚ", ["ᶕ"] = "ɚ", ["ᶓ"] = "ɛ˞", ["ɜ˞"] = "ɝ", ["ᶔ"] = "ɝ", ["ᶖ"] = "i˞", ["𝼚"] = "ɨ˞", ["𝼛"] = "o˞", ["ᶗ"] = "ɔ˞", ["ᶙ"] = "u˞", -- Syllabic approximants ["ɿ"] = "ɹ̩", ["ʅ"] = "ɻ̩", ["ʮ"] = "ɹ̩ʷ", ["ʯ"] = "ɻ̩ʷ", -- Clicks ["ʗ"] = "ǃ", ["𝼋"] = "ǂ", ["ʇ"] = "ǀ", ["ʖ"] = "ǁ", ["‼"] = "𝼊", -- Voiceless implosives ["ƈ"] = "ʄ̊", ["ƙ"] = "ɠ̊", ["ƥ"] = "ɓ̥", ["ʠ"] = "ʛ̥", ["ƭ"] = "ɗ̥", ["𝼉"] = "ᶑ̥", -- Monographs ["ꜰ"] = "ɸ", ["ɩ"] = "ɪ", ["ɼ"] = "r̝", ["ᴜ"] = "ʊ", ["ɷ"] = "ʊ", ["𐞤"] = "ᶷ", ["ƛ"] = "t͡ɬ", ["ƻ"] = "d͡z", ["ƾ"] = "t͡s", -- Digraphs ["ȸ"] = "b̪", ["ʣ"] = "d͡z", ["ʥ"] = "d͡ʑ", ["ꭦ"] = "ɖ͡ʐ", ["ʤ"] = "d͡ʒ", ["𝼒"] = "d͡ʒʲ", ["𝼙"] = "d͡ᶚ", ["ʪ"] = "ɬ͡s", ["ʫ"] = "ɮ͡z", ["ȹ"] = "p̪", ["ʦ"] = "t͡s", ["ʨ"] = "t͡ɕ", ["ꭧ"] = "ʈ͡ʂ", ["ʧ"] = "t͡ʃ", ["𝼗"] = "t͡ʃʲ", ["𝼜"] = "t͡ᶘ", -- Deprecated or confusable diacritics ["̫"] = "ʷ", ["͂"] = "̃", ["᫇"] = "ʷ", ["⸋"] = "̚", ["̱"] = "̠", -- COMBINING MACRON BELOW (U+0331) -> COMBINING MINUS SIGN BELOW (U+0320) -- Precomposed characters with deprecated or confusable diacritics; the left is a precomposed -- version of a lowercase letter with COMBINING MACRON BELOW and the right is the equivalent -- using COMBINING MINUS SIGN BELOW ["ḇ"] = "b̠", ["ḏ"] = "d̠", ["ẖ"] = "h̠", ["ḵ"] = "k̠", ["ḻ"] = "l̠", ["ṉ"] = "n̠", ["ṟ"] = "r̠", ["ṯ"] = "t̠", ["ẕ"] = "z̠", } return data mjopki8sklky9m3kv63kzgka1usuiki Mô đun:headword 828 261391 2568723 2567715 2026-10-06T01:11:52Z Hiyuune 50834 2568723 Scribunto text/plain local export = {} -- Named constants for all modules used, to make it easier to swap out sandbox versions. local debug_track_module = "Module:debug/track" local decorations_module = "Module:decorations" local gender_and_number_module = "Module:gender and number" local headword_data_module = "Module:headword/data" local headword_page_module = "Module:headword/page" local links_module = "Module:links" local load_module = "Module:load" local pages_module = "Module:pages" local palindromes_module = "Module:palindromes" local scripts_module = "Module:scripts" local scripts_data_module = "Module:scripts/data" local script_utilities_module = "Module:script utilities" local script_utilities_data_module = "Module:script utilities/data" local string_utilities_module = "Module:string utilities" local table_module = "Module:table" local utilities_module = "Module:utilities" local ucfirst = require("Module:string utilities").ucfirst local concat = table.concat local dump = mw.dumpObject local insert = table.insert local ipairs = ipairs local max = math.max local new_title = mw.title.new local pairs = pairs local require = require local toNFC = mw.ustring.toNFC local toNFD = mw.ustring.toNFD local type = type local ufind = mw.ustring.find local ugmatch = mw.ustring.gmatch local ugsub = mw.ustring.gsub local umatch = mw.ustring.match --[==[ Loaders for functions in other modules, which overwrite themselves with the target function when called. This ensures modules are only loaded when needed, retains the speed/convenience of locally-declared pre-loaded functions, and has no overhead after the first call, since the target functions are called directly in any subsequent calls.]==] local function debug_track(...) debug_track = require(debug_track_module) return debug_track(...) end local function contains(...) contains = require(table_module).contains return contains(...) end local function encode_entities(...) encode_entities = require(string_utilities_module).encode_entities return encode_entities(...) end local function extend(...) extend = require(table_module).extend return extend(...) end local function find_best_script_without_lang(...) find_best_script_without_lang = require(scripts_module).findBestScriptWithoutLang return find_best_script_without_lang(...) end local function format_categories(...) format_categories = require(utilities_module).format_categories return format_categories(...) end local function format_genders(...) format_genders = require(gender_and_number_module).format_genders return format_genders(...) end local function format_decorations(...) format_decorations = require(decorations_module).format_decorations return format_decorations(...) end local function full_link(...) full_link = require(links_module).full_link return full_link(...) end local function get_current_L2(...) get_current_L2 = require(pages_module).get_current_L2 return get_current_L2(...) end local function get_link_page(...) get_link_page = require(links_module).get_link_page return get_link_page(...) end local function get_script(...) get_script = require(scripts_module).getByCode return get_script(...) end local function is_palindrome(...) is_palindrome = require(palindromes_module).is_palindrome return is_palindrome(...) end local function language_link(...) language_link = require(links_module).language_link return language_link(...) end local function load_data(...) load_data = require(load_module).load_data return load_data(...) end local function pattern_escape(...) pattern_escape = require(string_utilities_module).pattern_escape return pattern_escape(...) end local function process_page(...) process_page = require(headword_page_module).process_page return process_page(...) end local function remove_links(...) remove_links = require(links_module).remove_links return remove_links(...) end local function shallow_copy(...) shallow_copy = require(table_module).shallowCopy return shallow_copy(...) end local function tag_text(...) tag_text = require(script_utilities_module).tag_text return tag_text(...) end local function tag_transcription(...) tag_transcription = require(script_utilities_module).tag_transcription return tag_transcription(...) end local function tag_translit(...) tag_translit = require(script_utilities_module).tag_translit return tag_translit(...) end local function trim(...) trim = require(string_utilities_module).trim return trim(...) end local function ulen(...) ulen = require(string_utilities_module).len return ulen(...) end --[==[ Loaders for objects, which load data (or some other object) into some variable, which can then be accessed as "foo or get_foo()", where the function get_foo sets the object to "foo" and then returns it. This ensures they are only loaded when needed, and avoids the need to check for the existence of the object each time, since once "foo" has been set, "get_foo" will not be called again.]==] local m_data local function get_data() m_data = load_data(headword_data_module) return m_data end local script_data local function get_script_data() script_data = load_data(scripts_data_module) return script_data end local script_utilities_data local function get_script_utilities_data() script_utilities_data = load_data(script_utilities_data_module) return script_utilities_data end -- If set to true, categories always appear, even in non-mainspace pages local test_force_categories = false -- Add a tracking category to track entries with certain (unusually undesirable) properties. `track_id` is an identifier -- for the particular property being tracked and goes into the tracking page. Specifically, this adds a link in the -- page text to [[Wiktionary:Tracking/headword/TRACK_ID]], meaning you can find all entries with the `track_id` property -- by visiting [[Special:WhatLinksHere/Wiktionary:Tracking/headword/TRACK_ID]]. -- -- If `lang` (a language object) is given, an additional tracking page [[Wiktionary:Tracking/headword/TRACK_ID/CODE]] is -- linked to where CODE is the language code of `lang`, and you can find all entries in the combination of `track_id` -- and `lang` by visiting [[Special:WhatLinksHere/Wiktionary:Tracking/headword/TRACK_ID/CODE]]. This makes it possible to -- isolate only the entries with a specific tracking property that are in a given language. Note that if `lang` -- references at etymology-only language, both that language's code and its full parent's code are tracked. local function track(track_id, lang) local tracking_page = "headword/" .. track_id if lang and lang:hasType("etymology-only") then debug_track{tracking_page, tracking_page .. "/" .. lang:getCode(), tracking_page .. "/" .. lang:getFullCode()} elseif lang then debug_track{tracking_page, tracking_page .. "/" .. lang:getCode()} else debug_track(tracking_page) end return true end local function text_in_script(text, script_code) local sc = get_script(script_code) if not sc then error("Internal error: Bad script code " .. script_code) end local characters = sc.characters local out if characters then text = ugsub(text, "%W", "") out = ufind(text, "[" .. characters .. "]") end if out then return true else return false end end local spacingPunctuation = "[%s%p]+" --[[ List of punctuation or spacing characters that are found inside of words. Used to exclude characters from the regex above. ]] local wordPunc = "-#%%&@־׳״'.·*’་•:᠊" local notWordPunc = "[^" .. wordPunc .. "]+" --[=[ Format a term (either a head term or an inflection term) along with any decorations (left or right qualifiers, labels, references or customized separator). `part` is the object specifying the term (and `lang` the language of the term), which should optionally contain: * left qualifiers in `q`, an array of strings; * right qualifiers in `qq`, an array of strings; * left labels in `l`, an array of strings; * right labels in `ll`, an array of strings; * references in `refs`, an array either of strings (formatted reference text) or objects containing fields `text` (formatted reference text) and optionally `name` and/or `group`; * a separator in `separator`, defaulting to " <i>or</i> " if this is not the first term (j > 1), otherwise "". `formatted` is the formatted version of the term itself, and `j` is the index of the term. ]=] local function format_term_with_decorations(lang, part, formatted, j) local function part_non_empty(field) local list = part[field] if not list then return nil end if type(list) ~= "table" then error(("Internal error: Wrong type for `part.%s`=%s, should be \"table\""):format(field, dump(list))) end return list[1] end if part_non_empty("q") or part_non_empty("qq") or part_non_empty("l") or part_non_empty("ll") or part_non_empty("refs") then formatted = format_decorations { lang = lang, text = formatted, q = part.q, qq = part.qq, l = part.l, ll = part.ll, refs = part.refs, } end local separator = part.separator or j > 1 and " <i>hoặc</i> " -- use "" to request no separator if separator then formatted = separator .. formatted end return formatted end --[==[Return true if the given head is multiword according to the algorithm used in full_headword().]==] function export.head_is_multiword(head) for possibleWordBreak in ugmatch(head, spacingPunctuation) do if umatch(possibleWordBreak, notWordPunc) then return true end end return false end do local function workaround_to_exclude_chars(s) return (ugsub(s, notWordPunc, "\2%1\1")) end --[==[ Add appropriate links to `head`, correctly handling multiword terms. This is intended for multiword terms but can be used for any term if you want links added to single-word terms as well. If you want to only add links to multiword terms, first check that the term is multiword using `head_is_multiword`. If `default` is specified, this will escape colons so that they don't get interpreted as interwiki links. This should generally only be used when `head` is an actual pagename or is taken from a {{para|pagename}} parameter, not when taken from a {{para|head}} parameter. ]==] function export.add_multiword_links(head, default) head = "\1" .. ugsub(head, spacingPunctuation, workaround_to_exclude_chars) .. "\2" if default then head = head :gsub("(\1[^\2]*)\\([:#][^\2]*\2)", "%1\\\\%2") :gsub("(\1[^\2]*)([:#][^\2]*\2)", "%1\\%2") end --Escape any remaining square brackets to stop them breaking links (e.g. "[citation needed]"). head = encode_entities(head, "[]", true, true) --[=[ use this when workaround is no longer needed: head = "[[" .. ugsub(head, WORDBREAKCHARS, "]]%1[[") .. "]]" Remove any empty links, which could have been created above at the beginning or end of the string. ]=] return (head :gsub("\1\2", "") :gsub("[\1\2]", {["\1"] = "[[", ["\2"] = "]]"})) end end local function non_categorizable(full_raw_pagename) return full_raw_pagename:find("^Appendix:Gestures/") or -- Unsupported titles with descriptive names. (full_raw_pagename:find("^Unsupported titles/") and not full_raw_pagename:find("`")) end local function tag_text_and_add_decorations(data, head, formatted, j) -- Add language and script wrapper. formatted = tag_text(formatted, data.lang, head.sc, "head", nil, j == 1 and data.id or nil) -- Add decorations (qualifiers, labels, references and separator). return format_term_with_decorations(data.lang, head, formatted, j) end -- Format a headword with transliterations. local function format_headword(data) -- Are there non-empty transliterations? local has_translits = false local has_manual_translits = false ------ Format the headwords. ------ local head_parts = {} local unique_head_parts = {} local has_multiple_heads = not not data.heads[2] for j, head in ipairs(data.heads) do if head.tr or head.ts then has_translits = true end if head.tr and head.tr_manual or head.ts then has_manual_translits = true end local formatted -- Apply processing to the headword, for formatting links and such. if head.term:find("[[", nil, true) and head.sc:getCode() ~= "Image" then formatted = language_link{term = head.term, lang = data.lang} else formatted = data.lang:makeDisplayText(head.term, head.sc, true) end local head_part = tag_text_and_add_decorations(data, head, formatted, j) insert(head_parts, head_part) -- If multiple heads, try to determine whether all heads display the same. To do this we need to effectively -- rerun the text tagging and addition of decorations, using 1 for all indices. if has_multiple_heads then local unique_head_part if j == 1 then unique_head_part = head_part else unique_head_part = tag_text_and_add_decorations(data, head, formatted, 1) end unique_head_parts[unique_head_part] = true end end local set_size = 0 if has_multiple_heads then for _ in pairs(unique_head_parts) do set_size = set_size + 1 end end if set_size == 1 then head_parts = head_parts[1] else head_parts = concat(head_parts) end if has_manual_translits then -- [[Special:WhatLinksHere/Wiktionary:Tracking/headword/manual-tr]] -- [[Special:WhatLinksHere/Wiktionary:Tracking/headword/manual-tr/LANGCODE]] track("manual-tr", data.lang) end ------ Format the transliterations and transcriptions. ------ local translits_formatted if has_translits then local translit_parts = {} for _, head in ipairs(data.heads) do if head.tr or head.ts then local this_parts = {} if head.tr then insert(this_parts, tag_translit(head.tr, data.lang:getCode(), "head", nil, head.tr_manual)) if head.ts then insert(this_parts, " ") end end if head.ts then insert(this_parts, "/" .. tag_transcription(head.ts, data.lang:getCode(), "head") .. "/") end insert(translit_parts, concat(this_parts)) end end translits_formatted = " (" .. concat(translit_parts, " <i>or</i> ") .. ")" local function format_transliteration_page_link(langname) local transliteration_pagename = "Chuyển tự " .. langname local transliteration_page = new_title(transliteration_pagename, "Wiktionary") if transliteration_page and transliteration_page:getContent() then return ("[[Wiktionary:Chuyển tự %s|•]]"):format(transliteration_pagename) end return nil end local translit_page_link = format_transliteration_page_link(data.lang:getCanonicalName()) -- If data.lang is an etymology-only language and we didn't find a translation page for it, fall back to the -- full parent. if not translit_page_link and data.lang:hasType("etymology-only") then translit_page_link = format_transliteration_page_link(data.lang:getFullName()) end if translit_page_link then translits_formatted = " " .. translit_page_link .. translits_formatted end else translits_formatted = "" end ------ Paste heads and transliterations/transcriptions. ------ local lemma_gloss if data.gloss then lemma_gloss = ' <span class="ib-content qualifier-content">' .. data.gloss .. '</span>' else lemma_gloss = "" end return head_parts .. translits_formatted .. lemma_gloss end local function format_headword_genders(data, is_varform_only) local retval = "" if data.genders and data.genders[1] then if data.gloss then retval = "," end local pos_for_cat if not data.nogendercat and not is_varform_only then local no_gender_cat = (m_data or get_data()).no_gender_cat if not (no_gender_cat[data.lang:getCode()] or no_gender_cat[data.lang:getFullCode()]) then pos_for_cat = (m_data or get_data()).pos_for_gender_number_cat[data.pos_category:gsub("^reconstructed ", "")] end end local text, cats = format_genders(data.genders, data.lang, pos_for_cat) if cats then extend(data.categories, cats) end retval = retval .. "&nbsp;" .. text end return retval end -- Forward reference local format_inflections local function format_inflection_parts(data, parts) for j, part in ipairs(parts) do if type(part) ~= "table" then part = {term = part} end local partaccel = part.accel local face = part.face or "bold" if face ~= "bold" and face ~= "plain" and face ~= "hypothetical" then error("The face `" .. face .. "` " .. ( (script_utilities_data or get_script_utilities_data()).faces[face] and "should not be used for non-headword terms on the headword line." or "is invalid." )) end -- Here the final part 'or data.nolinkinfl' allows to have 'nolinkinfl=true' -- right into the 'data' table to disable inflection links of the entire headword -- when inflected forms aren't entry-worthy, e.g.: in Vulgar Latin local nolinkinfl = part.face == "hypothetical" or (part.nolink and track("nolink") or part.nolinkinfl) or ( data.nolink and track("nolink") or data.nolinkinfl) local formatted if part.label then -- FIXME: There should be a better way of italicizing a label. As is, this isn't customizable. formatted = "<i>" .. part.label .. "</i>" else -- Convert the term into a full link. Don't show a transliteration here unless enable_auto_translit is -- requested, either at the `parts` level (i.e. per inflection) or at the `data.inflections` level (i.e. -- specified for all inflections). This is controllable in {{head}} using autotrinfl=1 for all inflections, -- or fNautotr=1 for an individual inflection (remember that a single inflection may be associated with -- multiple terms). The reason for doing this is to avoid clutter in headword lines by default in languages -- where the script is relatively straightforward to read by learners (e.g. Greek, Russian), but allow it -- to be enabled in languages with more complex scripts (e.g. Arabic). -- -- FIXME: With nested inflections, should we also respect `enable_auto_translit` at the top level of the -- nested inflections structure? local tr = part.tr or not (parts.enable_auto_translit or data.inflections.enable_auto_translit) and "-" or nil local postprocess_annotations if part.inflections then postprocess_annotations = function(infldata) insert(infldata.annotations, {text = format_inflections(data, part.inflections)}) end end formatted = full_link( { term = not nolinkinfl and part.term or nil, alt = part.alt or (nolinkinfl and part.term or nil), lang = part.lang or data.lang, sc = part.sc or parts.sc or nil, gloss = part.gloss, pos = part.pos, lit = part.lit, id = part.id, genders = part.genders, tr = tr, ts = part.ts, accel = partaccel or parts.accel, postprocess_annotations = postprocess_annotations, }, face ) end parts[j] = format_term_with_decorations(part.lang or data.lang, part, formatted, j) end local parts_output if parts[1] then parts_output = (parts.label and " " or "") .. concat(parts) elseif parts.request then parts_output = " <small>[vui lòng chỉ định]</small>" insert(data.categories, "Yêu cầu biến tố mục từ " .. data.lang:getFullName()) else parts_output = "" end local parts_label = parts.label and ("<i>" .. parts.label .. "</i>") or "" return format_term_with_decorations(data.lang, parts, parts_label .. parts_output, 1) end -- Format the inflections following the headword or nested after a given inflection. Declared local above. function format_inflections(data, inflections) if inflections and inflections[1] then -- Format each inflection individually. for key, infl in ipairs(inflections) do inflections[key] = format_inflection_parts(data, infl) end return concat(inflections, ", ") else return "" end end -- Format the top-level inflections following the headword. Currently this just adds parens around the -- formatted comma-separated inflections in `data.inflections`. local function format_top_level_inflections(data) local result = format_inflections(data, data.inflections) if result ~= "" then return " (" .. result .. ")" else return result end end -- Forward reference local check_red_link_inflections -- Check a single inflection (which consists of a label and zero or more terms, each possibly with nested inflections) -- for red links. If so, insert a red-link category based on `plpos` (the plural part of speech to insert in the -- category), stop further processing, and return true. If no red links found, return false. local function check_red_link_inflection_parts(data, parts, plpos) for _, part in ipairs(parts) do if type(part) ~= "table" then part = {term = part} end local term = part.term if term and not term:find("%[%[") then local stripped_physical_term = get_link_page(term, data.lang, part.sc or parts.sc or nil) if stripped_physical_term then local title = mw.title.new(stripped_physical_term) if title and not title:getContent() then insert(data.categories, plpos .. " có liên kết đỏ trong dòng tên mục từ " .. data.lang:getFullName()) return true end end end if part.inflections then if check_red_link_inflections(data, part.inflections, plpos) then return true end end end return false end -- Check a set of inflections (each of which describes a single inflection of the term, such as feminine or plural, and -- consists of a label and zero or more terms, each possibly with nested inflections) for red links. If so, insert a -- red-link category based on `plpos` (the plural part of speech to insert in the category), stop further processing, -- and return true. If no red links found, return false. function check_red_link_inflections(data, inflections, plpos) if inflections and inflections[1] then -- Check each inflection individually. for key, infl in ipairs(inflections) do if check_red_link_inflection_parts(data, infl, plpos) then return true end end end return false end -- Check the top-level inflections in `data.inflections`, along with any nested inflections, for red links. If so, -- insert a red-link category based on `plpos` (the plural part of speech to insert in the category), stop further -- processing, and return true. If no red links found, return false. local function check_red_link_inflections_top_level(data, plpos) return check_red_link_inflections(data, data.inflections, plpos) end --[==[ Returns the plural form of `pos`, a raw part of speech input, which could be singular or plural. Irregular plural POS are taken into account (e.g. "kanji" pluralizes to "kanji"). ]==] function export.pluralize_pos(pos) -- Make the plural form of the part of speech return (m_data or get_data()).irregular_plurals[pos] or pos:sub(-1) == "" and pos or pos end --[==[ Return "lemma" if the given POS is a lemma, "non-lemma form" if a non-lemma form, or nil if unknown. The POS passed in must be in its plural form ("nouns", "prefixes", etc.). If you have a POS in its singular form, call {export.pluralize_pos()} above to pluralize it in a smart fashion that knows when to add "-s" and when to add "-es", and also takes into account any irregular plurals. If `best_guess` is given and the POS is in neither the lemma nor non-lemma list, guess based on whether it ends in " forms"; otherwise, return nil. ]==] function export.pos_lemma_or_nonlemma(plpos, best_guess) local m_headword_data = m_data or get_data() local isLemma = m_headword_data.lemmas -- Is it a lemma category? if isLemma[plpos] then return "Mục từ" end local plpos_no_recon = plpos:gsub("^reconstructed ", "") if isLemma[plpos_no_recon] then return "Mục từ" end -- Is it a nonlemma category? local isNonLemma = m_headword_data.nonlemmas if isNonLemma[plpos] or isNonLemma[plpos_no_recon] then return "Mục từ biến thể hình thái" end local plpos_no_mut = plpos:gsub("^mutated ", "") if isLemma[plpos_no_mut] or isNonLemma[plpos_no_mut] then return "Mục từ biến thể hình thái" elseif best_guess then return plpos:find(" forms$") and "Mục từ biến thể hình thái" or "Mục từ" else return nil end end --[==[ Canonicalize a part of speech as specified in 2= in {{tl|head}}. This checks for POS aliases and non-lemma form aliases ending in 'f', and then pluralizes if the POS term does not have an invariable plural. ]==] function export.canonicalize_pos(pos) -- FIXME: Temporary code to throw an error for alias 'pre' (= preposition) that will go away. if pos == "pre" then -- Don't throw error on 'pref' as it's an alias for "prefix". error("POS 'pre' for 'preposition' no longer allowed as it's too ambiguous; use 'prep'") end -- Likewise for pro = pronoun. if pos == "pro" or pos == "prof" then error("POS 'pro' for 'pronoun' no longer allowed as it's too ambiguous; use 'pron'") end local m_headword_data = m_data or get_data() if m_headword_data.pos_aliases[pos] then pos = m_headword_data.pos_aliases[pos] elseif pos:sub(-1) == "f" then pos = pos:sub(1, -2) pos = "Biến thể hình thái " .. (m_headword_data.pos_aliases[pos] or pos) end return pos end -- Find and return the maximum index in the array `data[element]` (which may have gaps in it), and initialize it to a -- zero-length array if unspecified. Check to make sure all keys are numeric (other than "maxindex", which is set by -- [[Module:parameters]] for list parameters), all values are strings, and unless `allow_blank_string` is given, -- no blank (zero-length) strings are present. local function init_and_find_maximum_index(data, element, allow_blank_string) local maxind = 0 if not data[element] then data[element] = {} end local typ = type(data[element]) if typ ~= "table" then error(("Internal error: In full_headword(), `data.%s` must be an array but is a %s"):format(element, typ)) end for k, v in pairs(data[element]) do if k ~= "maxindex" then if type(k) ~= "number" then error(("Internal error: Unrecognized non-numeric key '%s' in `data.%s`"):format(k, element)) end if k > maxind then maxind = k end if v then if type(v) ~= "string" then error(("Internal error: For key '%s' in `data.%s`, value should be a string but is a %s"):format(k, element, type(v))) end if not allow_blank_string and v == "" then error(("Internal error: For key '%s' in `data.%s`, blank string not allowed; use 'false' for the default"):format(k, element)) end end end end return maxind end --[==[ -- Add the page to various maintenance categories for the language and the -- whole page. These are placed in the headword somewhat arbitrarily, but -- mainly because headword templates are mandatory for entries (meaning that -- in theory it provides full coverage). -- -- This is provided as an external entry point so that modules which transclude -- information from other entries (such as {{tl|ja-see}}) can take advantage -- of this feature as well, because they are used in place of a conventional -- headword template.]==] do -- Handle any manual sortkeys that have been specified in raw categories -- by tracking if they are the same or different from the automatically- -- generated sortkey, so that we can track them in maintenance -- categories. local function handle_raw_sortkeys(tbl, sortkey, page, lang, lang_cats) sortkey = sortkey or lang:makeSortKey(page.pagename) -- If there are raw categories with no sortkey, then they will be -- sorted based on the default MediaWiki sortkey, so we check against -- that. if tbl == true then if page.raw_defaultsort ~= sortkey then insert(lang_cats, "Mục từ có mã sắp xếp thủ công không thừa " .. lang:getFullName()) end return end local redundant, different for k in pairs(tbl) do if k == sortkey then redundant = true else different = true end end if redundant then insert(lang_cats, "Mục từ có mã sắp xếp thừa " .. lang:getFullName()) end if different then insert(lang_cats, "Mục từ có mã sắp xếp thủ công không thừa " .. lang:getFullName()) end return sortkey end function export.maintenance_cats(page, lang, lang_cats, page_cats) extend(page_cats, page.cats) lang = lang:getFull() -- since we are just generating categories local canonical = lang:getCanonicalName() local tbl = page.wikitext_topic_cat[lang:getCode()] local sortkey = nil if tbl then sortkey = handle_raw_sortkeys(tbl, sortkey, page, lang, lang_cats) insert(lang_cats, canonical .. " entries with topic categories using raw markup") end tbl = page.wikitext_langname_cat[canonical] if tbl then handle_raw_sortkeys(tbl, sortkey, page, lang, lang_cats) insert(lang_cats, canonical .. " entries with language name categories using raw markup") end local current_L2 = get_current_L2() if current_L2 then local trimmed_L2 = trim(current_L2) local expected_L2 = ucfirst(canonical) if trimmed_L2 ~= expected_L2 then insert(lang_cats, "Mục từ có đề mục ngôn ngữ không đúng " .. canonical) -- [[Special:WhatLinksHere/Wiktionary:Tracking/headword/incorrect language header]] -- [[Special:WhatLinksHere/Wiktionary:Tracking/headword/incorrect language header/LANGCODE]] track("incorrect language header", lang) end end end end --[==[This is the primary external entry point. {{lua|full_headword(data)}} This is used by {{temp|head}} and various language-specific headword templates (e.g. {{temp|ru-adj}} for Russian adjectives, {{temp|de-noun}} for German nouns, etc.) to display an entire headword line. See [[#Further explanations for full_headword()]] ]==] function export.full_headword(data) -- Prevent data from being destructively modified. data = shallow_copy(data) ------------ 1. Basic checks for old-style (multi-arg) calling convention. ------------ if data.getCanonicalName then error("Internal error: In full_headword(), the first argument `data` needs to be a Lua object (table) of properties, not a language object") end if not data.lang or type(data.lang) ~= "table" or not data.lang.getCode then error("Internal error: In full_headword(), the first argument `data` needs to be a Lua object (table) and `data.lang` must be a language object") end if data.id and type(data.id) ~= "string" then error("Internal error: The id in the data table should be a string.") end ------------ 2. Initialize pagename etc. ------------ local langcode = data.lang:getCode() local full_langcode = data.lang:getFullCode() local langname = data.lang:getCanonicalName() local full_langname = data.lang:getFullName() local raw_pagename = data.pagename local page local m_headword_data = m_data or get_data() if raw_pagename and raw_pagename ~= m_headword_data.pagename then -- for testing, doc pages, etc. -- data.pagename is often set on documentation and test pages through the pagename= parameter of various -- templates, to emulate running on that page. Having a large number of such test templates on a single -- page often leads to timeouts, because we fetch and parse the contents of each page in turn. However, -- we don't really need to do that and can function fine without fetching and parsing the contents of a -- given page, so turn off content fetching/parsing (and also setting the DEFAULTSORT key through a parser -- function, which is *slooooow*) in certain namespaces where test and documentation templates are likely to -- be found and where actual content does not live (User, Template, Module). local actual_namespace = m_headword_data.page.namespace local no_fetch_content = actual_namespace == "User" or actual_namespace == "Template" or actual_namespace == "Module" page = process_page(raw_pagename, no_fetch_content) else page = m_headword_data.page end local namespace = page.namespace if data.altform then -- Temporary tracking for use of old altform= track("altform", data.lang) end local noposcat = data.noposcat local is_varform_only = data.var and data.var ~= "both" local is_varform_both = data.var == "both" ------------ 3. Initialize `data.heads` table; if old-style, convert to new-style. ------------ if type(data.heads) == "table" and type(data.heads[1]) == "table" then -- new-style if data.translits or data.transcriptions then error("Internal error: In full_headword(), if `data.heads` is new-style (array of head objects), `data.translits` and `data.transcriptions` cannot be given") end else -- convert old-style `heads`, `translits` and `transcriptions` to new-style local maxind = max( init_and_find_maximum_index(data, "heads"), init_and_find_maximum_index(data, "translits", true), init_and_find_maximum_index(data, "transcriptions", true) ) for i = 1, maxind do data.heads[i] = { term = data.heads[i], tr = data.translits[i], ts = data.transcriptions[i], } end end -- Make sure there's at least one head. if not data.heads[1] then data.heads[1] = {} end ------------ 4. Initialize and validate `data.categories` and `data.whole_page_categories`, and determine `pos_category` if not given, and add basic categories. ------------ init_and_find_maximum_index(data, "categories") init_and_find_maximum_index(data, "whole_page_categories") local pos_category_already_present = false if data.categories[1] then local escaped_langname = pattern_escape(full_langname) local matches_lang_pattern = "^" .. escaped_langname .. " " for _, cat in ipairs(data.categories) do -- Does the category begin with the language name? If not, tag it with a tracking category. if not cat:find(matches_lang_pattern) then -- [[Special:WhatLinksHere/Wiktionary:Tracking/headword/no lang category]] -- [[Special:WhatLinksHere/Wiktionary:Tracking/headword/no lang category/LANGCODE]] track("no lang category", data.lang) end end -- If `pos_category` not given, try to infer it from the first specified category. If this doesn't work, we -- throw an error below. if not data.pos_category and data.categories[1]:find(matches_lang_pattern) then data.pos_category = data.categories[1]:gsub(matches_lang_pattern, "") -- Optimization to avoid inserting category already present. pos_category_already_present = true end end if not data.pos_category then error("Internal error: `data.pos_category` not specified and could not be inferred from the categories given in " .. "`data.categories`. Either specify the plural part of speech in `data.pos_category` " .. "(e.g. \"proper nouns\") or ensure that the first category in `data.categories` is formed from the " .. "language's canonical name plus the plural part of speech (e.g. \"Norwegian Bokmål proper nouns\")." ) end -- Insert a category at the beginning for the part of speech unless it's already present or `data.noposcat` given. if not (pos_category_already_present or noposcat or is_varform_only) then local pos_category = data.pos_category .. " " .. full_langname -- FIXME: [[User:Theknightwho]] Why is this special case here? Please add an explanatory comment. if pos_category ~= "Ký tự Chữ Hán đa ngữ" then insert(data.categories, 1, pos_category) end end -- Try to determine whether the part of speech refers to a lemma or a non-lemma form; if we can figure this out, -- add an appropriate category. local postype = export.pos_lemma_or_nonlemma(data.pos_category) if not postype then -- We don't know what this category is, so tag it with a tracking category. -- [[Special:WhatLinksHere/Wiktionary:Tracking/headword/unrecognized pos]] -- [[Special:WhatLinksHere/Wiktionary:Tracking/headword/unrecognized pos/LANGCODE]] track("unrecognized pos", data.lang) -- [[Special:WhatLinksHere/Wiktionary:Tracking/headword/unrecognized pos/POS]] -- [[Special:WhatLinksHere/Wiktionary:Tracking/headword/unrecognized pos/POS/LANGCODE]] track("unrecognized pos/pos/" .. data.pos_category, data.lang) elseif not (noposcat or is_varform_only or data.nolemmacat) then insert(data.categories, 1, postype .. " " .. full_langname) end -- Categorize variant forms into 'variant lemmas' or 'variant non-lemma forms'. Originally proposed in -- [[Wiktionary:Beer parlour/2024/June#Decluttering the altform mess]] as 'alternative forms'; renamed in -- [[Wiktionary:Beer parlour/2026/July#Renaming the "alternative forms" categories]]. if (is_varform_only or is_varform_both) then insert(data.categories, 1, "Mục từ biến thể thay thế " .. full_langname) end ------------ 5. Create a default headword, and add links to multiword page names. ------------ -- Determine if this is an "anti-asterisk" term, i.e. an attested term in a language that must normally be -- reconstructed. local is_anti_asterisk = data.heads[1].term and data.heads[1].term:find("^!!") local lang_reconstructed = data.lang:hasType("reconstructed") if is_anti_asterisk then if not lang_reconstructed then error("Anti-asterisk feature (head= beginning with !!) can only be used with reconstructed languages") end if namespace == "Reconstruction" then error("Anti-asterisk feature (head= beginning with !!) should be used in mainspace, not in Reconstruction space") end lang_reconstructed = false end -- Determine if term is reconstructed local is_reconstructed = namespace == "Từ_tái_tạo" or lang_reconstructed -- Create a default headword based on the pagename, which is determined in -- advance by the data module so that it only needs to be done once. local default_head = page.pagename -- Add links to multi-word page names when appropriate if not (is_reconstructed or data.nolinkhead) then local no_links = m_headword_data.no_multiword_links if not (no_links[langcode] or no_links[full_langcode]) and export.head_is_multiword(default_head) then default_head = export.add_multiword_links(default_head, true) end end if is_reconstructed then default_head = "*" .. default_head end ------------ 6. Check the namespace against the language type. ------------ if namespace == "Từ_tái_tạo" then if lang_reconstructed then error("Entries in " .. langname .. " must be placed in the Reconstruction: namespace") elseif data.lang:hasType("appendix-constructed") then error("Entries in " .. langname .. " must be placed in the Appendix: namespace") end elseif namespace == "Citations" or namespace == "Thesaurus" then error("Headword templates should not be used in the " .. namespace .. ": namespace.") end ------------ 7. Fill in missing values in `data.heads`. ------------ -- True if any script among the headword scripts has spaces in it. local any_script_has_spaces = false -- True if any term has a redundant head= param. local has_redundant_head_param = false for _, head in ipairs(data.heads) do ------ 7a. If missing head, replace with default head. if not head.term then head.term = default_head elseif head.term == default_head then has_redundant_head_param = true elseif is_anti_asterisk and head.term == "!!" then -- If explicit head=!! is given, it's an anti-asterisk term and we fill in the default head. head.term = "!!" .. default_head elseif head.term:find("^[!?]$") then -- If explicit head= just consists of ! or ?, add it to the end of the default head. head.term = default_head .. head.term end head.term_no_initial_bang_bang = is_anti_asterisk and head.term:sub(3) or head.term if is_reconstructed then local head_term = head.term if head_term:find("%[%[") then head_term = remove_links(head_term) end if head_term:sub(1, 1) ~= "*" then error("The headword '" .. head_term .. "' must begin with '*' to indicate that it is reconstructed.") end end ------ 7b. Try to detect the script(s) if not provided. If a per-head script is provided, that takes precedence, ------ otherwise fall back to the overall script if given. If neither given, autodetect the script. local auto_sc = data.lang:findBestScript(head.term) if ( auto_sc:getCode() == "None" and find_best_script_without_lang(head.term):getCode() ~= "None" ) then insert(data.categories, "Mục từ có chữ viết không chuẩn " .. full_langname) end if not (head.sc or data.sc) then -- No script code given, so use autodetected script. head.sc = auto_sc else if not head.sc then -- Overall script code given. head.sc = data.sc end -- Track uses of sc parameter. if head.sc:getCode() == auto_sc:getCode() then track("redundant script code", data.lang) if not data.no_script_code_cat then insert(data.categories, "Mục từ có mã chữ viết thừa " .. full_langname) end else track("non-redundant manual script code", data.lang) if not data.no_script_code_cat then insert(data.categories, "Mục từ có mã chữ viết thủ công không thừa " .. full_langname) end end end -- If using a discouraged character sequence, add to maintenance category. if head.sc:hasNormalizationFixes() == true then local composed_head = toNFC(head.term) if head.sc:fixDiscouragedSequences(composed_head) ~= composed_head then insert(data.whole_page_categories, "Trang có sử dụng chuỗi ký tự không được khuyến khích") end end any_script_has_spaces = any_script_has_spaces or head.sc:hasSpaces() ------ 7c. Create automatic transliterations for any non-Latin headwords without manual translit given ------ (provided automatic translit is available, e.g. not in Persian or Hebrew). -- Make transliterations head.tr_manual = nil -- Try to generate a transliteration if necessary if head.tr == "-" then head.tr = nil else local notranslit = m_headword_data.notranslit if not (notranslit[langcode] or notranslit[full_langcode]) and head.sc:isTransliterated() then head.tr_manual = not not head.tr local text = head.term_no_initial_bang_bang if not data.lang:link_tr(head.sc) then text = remove_links(text) end local automated_tr = data.lang:transliterate(text, head.sc) if automated_tr then local manual_tr = head.tr if manual_tr then if remove_links(manual_tr) == remove_links(automated_tr) then insert(data.categories, "Mục từ có chuyển tự thừa " .. full_langname) else insert(data.categories, "Mục từ có chuyển tự thủ công không thừa " .. full_langname) end end if not manual_tr then head.tr = automated_tr end end -- There is still no transliteration? -- Add the entry to a cleanup category. if not head.tr then head.tr = "<small>cần chuyển tự</small>" -- FIXME: No current support for 'Request for transliteration of Classical Persian terms' or similar. -- Consider adding this support in [[Module:category tree/poscatboiler/data/entry maintenance]]. insert(data.categories, "Yêu cầu chuyển tự mục từ " .. full_langname) else -- Otherwise, trim it. head.tr = trim(head.tr) end end end -- Link to the transliteration entry for languages that require this. if head.tr and data.lang:link_tr(head.sc) then head.tr = full_link{ term = head.tr, lang = data.lang, sc = get_script("Latn"), tr = "-" } end end ------------ 8. Maybe tag the title with the appropriate script code, using the `display_title` mechanism. ------------ -- Assumes that the scripts in "toBeTagged" will never occur in the Reconstruction namespace. -- (FIXME: Don't make assumptions like this, and if you need to do so, throw an error if the assumption is violated.) -- Avoid tagging ASCII as Hani even when it is tagged as Hani in the headword, as in [[check]]. The check for ASCII -- might need to be expanded to a check for any Latin characters and whitespace or punctuation. local display_title -- Where there are multiple headwords, use the script for the first. This assumes the first headword is similar to -- the pagename, and that headwords that are in different scripts from the pagename aren't first. This seems to be -- about the best we can do (alternatively we could potentially do script detection on the pagename). local dt_script = data.heads[1].sc local dt_script_code = dt_script:getCode() local page_non_ascii = namespace == "" and not page.pagename:find("^[%z\1-\127]+$") local unsupported_pagename, unsupported = page.full_raw_pagename:gsub("^Tiêu đề không được hỗ trợ/", "") if unsupported == 1 and page.unsupported_titles[unsupported_pagename] then display_title = 'Tiêu đề không được hỗ trợ/<span class="' .. dt_script_code .. '">' .. page.unsupported_titles[unsupported_pagename] .. '</span>' elseif page_non_ascii and m_headword_data.toBeTagged[dt_script_code] or (dt_script_code == "Jpan" and (text_in_script(page.pagename, "Hira") or text_in_script(page.pagename, "Kana"))) or (dt_script_code == "Kore" and text_in_script(page.pagename, "Hang")) then display_title = '<span class="' .. dt_script_code .. '">' .. page.full_raw_pagename .. '</span>' -- Keep Han entries region-neutral in the display title. elseif page_non_ascii and (dt_script_code == "Hant" or dt_script_code == "Hans") then display_title = '<span class="Hani">' .. page.full_raw_pagename .. '</span>' elseif namespace == "Từ tái tạo" then local matched display_title, matched = ugsub( page.full_raw_pagename, "^(Từ tái tạo:[^/]+/)(.+)$", function(before, term) return before .. tag_text(term, data.lang, dt_script) end ) if matched == 0 then display_title = nil end end -- FIXME: Generalize this. -- If the current language uses Aran (Nastaliq), e.g. Urdu, and there's more than one language on the page, don't -- set the display title because we don't want Nastaliq for terms that also exist in other languages that don't -- display in Nastaliq (e.g. Arabic or Persian). Because the word "Urdu" occurs near the end of the alphabet, Urdu -- fonts tend to override the fonts of other languages. FIXME: This is checking for more than one language on the -- page but instead needs to check if there are any languages using scripts other than Aran. if dt_script_code == "Aran" and page.L2_list.n > 1 then display_title = nil end if display_title then mw.getCurrentFrame():callParserFunction( "DISPLAYTITLE", display_title ) end ------------ 9. Insert additional categories. ------------ if data.force_cat_output then -- [[Special:WhatLinksHere/Wiktionary:Tracking/headword/force cat output]] track("force cat output") end if has_redundant_head_param then if not data.no_redundant_head_cat then -- This is not the right way to go about this; too many exceptions and problems due to language-specific headword -- handling customization. If we want this, it should be opt-in by a given language passing in the default headword. -- insert(data.categories, "Mục từ có tham số head thừa " .. full_langname) end end if namespace == "Từ tái tạo" and not lang_reconstructed then insert(data.categories, "Mục từ tái tạo " .. full_langname) end -- If the first head is multiword (after removing links), maybe insert into "LANG multiword terms". if not data.nomultiwordcat and not is_varform_only and any_script_has_spaces and postype == "Mục từ" then local no_multiword_cat = m_headword_data.no_multiword_cat if not (no_multiword_cat[langcode] or no_multiword_cat[full_langcode]) then -- Check for spaces or hyphens, but exclude prefixes and suffixes. -- Use the pagename, not the head= value, because the latter may have extra -- junk in it, e.g. superscripted text that throws off the algorithm. local no_hyphen = m_headword_data.hyphen_not_multiword_sep -- Exclude hyphens if the data module states that they should for this language. local checkpattern = (no_hyphen[langcode] or no_hyphen[full_langcode]) and ".[%s፡]." or ".[%s%-፡]." local is_multiword = umatch(page.pagename, checkpattern) if is_multiword and not non_categorizable(page.full_raw_pagename) then insert(data.categories, "Mục từ có chứa nhiều từ " .. full_langname) elseif not is_multiword then local long_word_threshold = m_headword_data.long_word_thresholds[langcode] or m_headword_data.long_word_thresholds[full_langcode] if long_word_threshold and ulen(page.pagename) >= long_word_threshold then insert(data.categories, "Từ dài " .. full_langname) end end end end -- Determine whether to insert a category 'LANGNAME POS in SCRIPT'. If there are multiple heads, we may need to check -- each head, as the heads may (theoretically) have different scripts. local default_sccat = m_headword_data.default_sccat if data.sccat or not is_varform_only and (default_sccat[langcode] or langcode ~= full_langcode and default_sccat[full_langcode]) then local function needs_sccat(sccat_entry, sc) if sccat_entry == true or not sccat_entry then return sccat_entry end if type(sccat_entry) == "table" then local in_list = contains(sccat_entry, sc:getCode()) if sccat_entry[1] == "not" then in_list = not in_list end return in_list end return nil end for _, head in ipairs(data.heads) do -- First check the `sccat` specified at the {{head}} level. local this_needs_sccat = needs_sccat(data.sccat, head.sc) -- If that wasn't given, check the default sccat at the language level for the lang code. if this_needs_sccat == nil and not is_varform_only then this_needs_sccat = needs_sccat(default_sccat[langcode], head.sc) end -- If that wasn't found and the lang code is an etym code, check the default sccat at the parent language level. if this_needs_sccat == nil and not is_varform_only and langcode ~= full_langcode then this_needs_sccat = needs_sccat(default_sccat[full_langcode], head.sc) end if this_needs_sccat then insert(data.categories, data.pos_category .. " dùng " .. head.sc:getDisplayForm(data.lang) .. " " .. full_langname) end end end -- Reconstructed terms often use weird combinations of scripts and realistically aren't spelled so much as notated. if namespace ~= "Từ tái tạo" and not is_varform_only then -- Map from languages to a string containing the characters to ignore when considering whether a term has -- multiple written scripts in it. Typically these are Greek or Cyrillic letters used for their phonetic -- values. local characters_to_ignore = { ["aaq"] = "αάὰ", -- Penobscot (Algonquian) ["acy"] = "δθ", -- Cypriot Arabic ["aez"] = "β", -- Aeka (Trans-New Guinea) ["anc"] = "γ", -- Ngas (Chadic/Afroasiatic) ["aou"] = "χ", -- A'ou (Kra-Dai) ["art-blk"] = "ч", -- Bolak (conlang) ["awg"] = "β", -- Anguthimri (Pama-Nyungan) ["az"] = "ь", -- Azerbaijani (Turkic; Yañalif Latin spelling, c. 1928 - 1938) ["ba"] = "ь", -- Bashkir (Turkic; Yañalif Latin spelling, c. 1928 - 1938) ["bhp"] = "β", -- Bima (Austronesian) ["bjz"] = "β", -- Baruga (Trans-New Guinea) ["byk"] = "θ", -- Biao (Kra-Dai) ["cdy"] = "θ", -- Chadong (Kra-Dai) ["chp"] = "θ", -- Chipewyan (Athabaskan) ["cjh"] = "χ", -- Upper Chehalis (Salishan) ["clm"] = "χ", -- Klallam (Salishan) ["col"] = "χ", -- Colombia-Wenatchi (Salishan) ["coo"] = "χθ", -- Comox (Salishan) ["crx"] = "θ", -- Carrier (Athabaskan) ["ets"] = "θ", -- Yekhee (Edoid/Niger-Congo) ["ett"] = "χ", -- Etruscan (isolate; in romanizations) ["fla"] = "χ", -- Montana Salish (Salishan) ["grt"] = "་", -- Garo (South Asian Sino-Tibetan) ["gmw-gts"] = "χ", -- Gottscheerish (Bavarian variant spoken in Slovenia) ["hur"] = "χθ", -- Halkomelem (Salishan) ["itc-psa"] = "f", -- Pre-Samnite (Italic; normally written in Greek) ["izh"] = "ь", -- Ingrian (Finnic) ["kic"] = "θ", -- Kickapoo (Algonquian) ["kk"] = "ь", -- Kazakh (Turkic; Yañalif Latin spelling, c. 1928 - 1938) ["ky"] = "ь", -- Kyrgyz (Turkic; Yañalif Latin spelling, c. 1928 - 1938) ["lil"] = "χ", -- Lillooet (Salishan) ["lsi"] = "ꓹ", -- Lashi (Lolo-Burmese/Sino-Tibetan; represents a glottal stop) ["mhz"] = "β", -- Mor (Austronesian) ["mqn"] = "β", -- Moronene (Austronesian) ["neg"]= "ӡā", -- Negidal (Tungusic; normally in Cyrillic) ["oka"] = "χ", -- Okanagan (Salishan) ["ole"] = "θ", -- Olekha (Sino-Tibetan) ["oui"] = "γβ", -- Old Uyghur (Turkic; FIXME: others? E.g. Greek delta (δ)?) ["pox"] = "χ", -- Polabian (West Slavic) ["rif"] = "ε", -- Tarifit (Berber) ["rom"] = "Θθ", -- Romani (Indic: International Standard; two different thetas???) ["rpn"] = "β", -- Repanbitip (Austronesian) ["sah"] = "ь", -- Yakut (Turkic; 1929 - 1939 Latin spelling) ["sit-jap"] = "χ", -- Japhug (Sino-Tibetan) ["sjw"] = "θ", -- Shawnee (Algonquian) ["squ"] = "χ", -- Squamish (Salishan) ["str"] = "χθ", -- Saanich (Salishan) ["teh"] = "χ", -- Tehuelche (Chonan; spoken in Argentina) ["tep"] = "η", -- Tepecano (Uto-Aztecan) ["thp"] = "χ", -- Thompson (Salishan) ["tk"] = "ь", -- Turkmen (Turkic; Yañalif Latin spelling, c. 1928 - 1938) ["tt"] = "ь", -- Kazakh (Turkic; Yañalif Latin spelling, c. 1928 - 1938) ["twa"] = "χ", -- Twana (Salishan) ["wbl"] = "ы", -- Wakhi (Iranian) ["xbc"] = "ϸ", -- Bactrian (Iranian; represents š; normally written in Greek) ["yha"] = "θ", -- Baha (Kra-Dai) ["za"] = "зч", -- Zhuang (Tai/Kra-Dai); 1957-1982 alphabet used two Cyrillic letters (as well as some others like -- ƃ, ƅ, ƨ, ɯ and ɵ that look like Cyrillic or Greek but are actually Latin) ["zlw-slv"] = "χђћ", -- Slovincian (West Slavic; FIXME: χ is Greek, the other two are Cyrillic, but I'm not sure -- the currect characters are being chosen in the entry names) ["zng"] = "θ", -- Mang (Mon-Khmer) ["ztp"] = "θ", -- Loxicha Zapotec (Zapotecan) } -- Determine how many real scripts are found in the pagename, where we exclude symbols and such. We exclude -- scripts whose `character_category` is false as well as Zmth (mathematical notation symbols), which has a -- category of "Mathematical notation symbols". When counting scripts, we need to elide language-specific -- variants because e.g. Beng and as-Beng have slightly different characters but we don't want to consider them -- two different scripts (e.g. [[এৰ]] has two characters which are detected respectively as Beng and as-Beng). local seen_scripts = {} local num_seen_scripts = 0 local num_loops = 0 local canon_pagename = page.pagename local ch_to_ignore = characters_to_ignore[full_langcode] if ch_to_ignore then canon_pagename = ugsub(canon_pagename, "[" .. ch_to_ignore .. "]", "") end while true do if canon_pagename == "" or num_seen_scripts >= 2 or num_loops >= 10 then break end -- Make sure we don't get into a loop checking the same script over and over again; happens with e.g. [[ᠪᡳ]] num_loops = num_loops + 1 local pagename_script = find_best_script_without_lang(canon_pagename, "None only as last resort") local script_chars = pagename_script.characters if not script_chars then -- we are stuck; this happens with None break end local script_code = pagename_script:getCode() local replaced canon_pagename, replaced = ugsub(canon_pagename, "[" .. script_chars .. "]", "") if ( replaced and script_code ~= "Zmth" and (script_data or get_script_data())[script_code] and script_data[script_code].character_category ~= false ) then script_code = script_code:gsub("^.-%-", "") if not seen_scripts[script_code] then seen_scripts[script_code] = true num_seen_scripts = num_seen_scripts + 1 end end end if num_seen_scripts > 1 then insert(data.categories, "Mục từ được viết bằng nhiều chữ viết " .. full_langname) end end -- Categorise for unusual characters. Takes into account combining characters, so that we can categorise for characters with diacritics that aren't encoded as atomic characters (e.g. U̠). These can be in two formats: single combining characters (i.e. character + diacritic(s)) or double combining characters (i.e. character + diacritic(s) + character). Each can have any number of diacritics. local standard = data.lang:getStandardCharacters() if not is_varform_only and standard and not non_categorizable(page.full_raw_pagename) then local function char_category(char) local specials = { ["#"] = "number sign", ["("] = "parentheses", [")"] = "parentheses", ["<"] = "angle brackets", [">"] = "angle brackets", ["["] = "square brackets", ["]"] = "square brackets", ["_"] = "underscore", ["{"] = "braces", ["|"] = "vertical line", ["}"] = "braces", ["ß"] = "ẞ", ["\205\133"] = "", -- this is UTF-8 for U+0345 ( ͅ) ["\239\191\189"] = "replacement character", } char = toNFD(char) :gsub(".[\128-\191]*", function(m) local new_m = specials[m] new_m = new_m or m:uupper() return new_m end) return toNFC(char) end if full_langcode ~= "hi" and full_langcode ~= "lo" then local standard_chars_scripts = {} for _, head in ipairs(data.heads) do standard_chars_scripts[head.sc:getCode()] = true end -- Iterate over the scripts, in case there is more than one (as they can have different sets of standard characters). for code in pairs(standard_chars_scripts) do local sc_standard = data.lang:getStandardCharacters(code) if sc_standard then if page.pagename_len > 1 then local explode_standard = {} local function explode(char) explode_standard[char] = true return "" end local sc_standard_exploded = ugsub(sc_standard, page.comb_chars.combined_double, explode) -- The following is correct; it relies on side-effecing the explode_standard[] table. ugsub(sc_standard_exploded, page.comb_chars.combined_single, explode):gsub(".[\128-\191]*", explode) local num_cat_inserted for char in pairs(page.explode_pagename) do if not explode_standard[char] then if char:find("[0-9]") then if not num_cat_inserted then insert(data.categories, "Từ đánh vần với số " .. full_langname) num_cat_inserted = true end elseif ufind(char, page.emoji_pattern) then insert(data.categories, "Từ đánh vần với emoji " .. full_langname) else local upper = char_category(char) if not explode_standard[upper] then char = upper end insert(data.categories, "Từ đánh vần với " .. char .. " " .. full_langname) end end end end -- If a diacritic doesn't appear in any of the standard characters, also categorise for it generally. sc_standard = toNFD(sc_standard) for diacritic in ugmatch(page.decompose_pagename, page.comb_chars.diacritics_single) do if not umatch(sc_standard, diacritic) then insert(data.categories, "Từ đánh vần với ◌" .. diacritic .. " " .. full_langname) end end for diacritic in ugmatch(page.decompose_pagename, page.comb_chars.diacritics_double) do if not umatch(sc_standard, diacritic) then insert(data.categories, "Từ đánh vần với ◌" .. diacritic .. "◌ " .. full_langname) end end end end -- Ancient Greek, Hindi and Lao handled the old way for now, as their standard chars still need to be converted to the new format (because there are a lot of them). elseif ulen(page.pagename) ~= 1 then for character in ugmatch(page.pagename, "([^" .. standard .. "])") do local upper = char_category(character) if not umatch(upper, "[" .. standard .. "]") then character = upper end insert(data.categories, "Từ đánh vần với " .. character .. " " .. full_langname) end end end if not is_varform_only and data.heads[1].sc:isSystem("alphabet") then local pagename, i = page.pagename:ulower(), 2 while umatch(pagename, "(%a)" .. ("%1"):rep(i)) do i = i + 1 insert(data.categories, full_langname .. " terms with " .. i .. " consecutive instances of the same letter") end end -- Categorise for palindromes if not is_varform_only and not data.nopalindromecat and namespace ~= "Từ tái tạo" and ulen(page.pagename) > 2 -- FIXME: Use of first script here seems hacky. What is the clean way of doing this in the presence of -- multiple scripts? and is_palindrome(page.pagename, data.lang, data.heads[1].sc) then insert(data.categories, "Mục từ viết xuôi ngược đều giống nhau " .. full_langname) end if namespace == "" and not lang_reconstructed then for _, head in ipairs(data.heads) do if page.full_raw_pagename ~= get_link_page(remove_links(head.term), data.lang, head.sc) then -- [[Special:WhatLinksHere/Wiktionary:Tracking/headword/pagename spelling mismatch]] -- [[Special:WhatLinksHere/Wiktionary:Tracking/headword/pagename spelling mismatch/LANGCODE]] track("pagename spelling mismatch", data.lang) break end end end -- Add red link category if called for and we're not a "large" page, where such checks are disabled. if data.checkredlinks and not m_headword_data.large_pages[m_headword_data.pagename] then local plposcat = type(data.checkredlinks) == "string" and data.checkredlinks or data.pos_category check_red_link_inflections_top_level(data, plposcat) end -- Add to various maintenance categories. export.maintenance_cats(page, data.lang, data.categories, data.whole_page_categories) ------------ 10. Format and return headwords, genders, inflections and categories. ------------ -- Format and return all the gathered information. This may add more categories (e.g. gender/number categories), -- so make sure we do it before evaluating `data.categories`. local text = '<span class="headword-line">' .. format_headword(data) .. format_headword_genders(data, is_varform_only) .. format_top_level_inflections(data) .. '</span>' -- Language-specific categories. local cats = format_categories( data.categories, data.lang, data.sort_key, page.encoded_pagename, data.force_cat_output or test_force_categories, data.heads[1].sc ) -- Language-agnostic categories. local whole_page_cats = format_categories( data.whole_page_categories, nil, "-" ) return text .. cats .. whole_page_cats end return export ffxkrjffso55arhun1wa016su8xvpqo 2568742 2568723 2026-10-06T02:08:05Z Hiyuune 50834 2568742 Scribunto text/plain local export = {} -- Named constants for all modules used, to make it easier to swap out sandbox versions. local debug_track_module = "Module:debug/track" local decorations_module = "Module:decorations" local gender_and_number_module = "Module:gender and number" local headword_data_module = "Module:headword/data" local headword_page_module = "Module:headword/page" local links_module = "Module:links" local load_module = "Module:load" local pages_module = "Module:pages" local palindromes_module = "Module:palindromes" local scripts_module = "Module:scripts" local scripts_data_module = "Module:scripts/data" local script_utilities_module = "Module:script utilities" local script_utilities_data_module = "Module:script utilities/data" local string_utilities_module = "Module:string utilities" local table_module = "Module:table" local utilities_module = "Module:utilities" local ucfirst = require("Module:string utilities").ucfirst local lcfirst = require("Module:string utilities").lcfirst local concat = table.concat local dump = mw.dumpObject local insert = table.insert local ipairs = ipairs local max = math.max local new_title = mw.title.new local pairs = pairs local require = require local toNFC = mw.ustring.toNFC local toNFD = mw.ustring.toNFD local type = type local ufind = mw.ustring.find local ugmatch = mw.ustring.gmatch local ugsub = mw.ustring.gsub local umatch = mw.ustring.match --[==[ Loaders for functions in other modules, which overwrite themselves with the target function when called. This ensures modules are only loaded when needed, retains the speed/convenience of locally-declared pre-loaded functions, and has no overhead after the first call, since the target functions are called directly in any subsequent calls.]==] local function debug_track(...) debug_track = require(debug_track_module) return debug_track(...) end local function contains(...) contains = require(table_module).contains return contains(...) end local function encode_entities(...) encode_entities = require(string_utilities_module).encode_entities return encode_entities(...) end local function extend(...) extend = require(table_module).extend return extend(...) end local function find_best_script_without_lang(...) find_best_script_without_lang = require(scripts_module).findBestScriptWithoutLang return find_best_script_without_lang(...) end local function format_categories(...) format_categories = require(utilities_module).format_categories return format_categories(...) end local function format_genders(...) format_genders = require(gender_and_number_module).format_genders return format_genders(...) end local function format_decorations(...) format_decorations = require(decorations_module).format_decorations return format_decorations(...) end local function full_link(...) full_link = require(links_module).full_link return full_link(...) end local function get_current_L2(...) get_current_L2 = require(pages_module).get_current_L2 return get_current_L2(...) end local function get_link_page(...) get_link_page = require(links_module).get_link_page return get_link_page(...) end local function get_script(...) get_script = require(scripts_module).getByCode return get_script(...) end local function is_palindrome(...) is_palindrome = require(palindromes_module).is_palindrome return is_palindrome(...) end local function language_link(...) language_link = require(links_module).language_link return language_link(...) end local function load_data(...) load_data = require(load_module).load_data return load_data(...) end local function pattern_escape(...) pattern_escape = require(string_utilities_module).pattern_escape return pattern_escape(...) end local function process_page(...) process_page = require(headword_page_module).process_page return process_page(...) end local function remove_links(...) remove_links = require(links_module).remove_links return remove_links(...) end local function shallow_copy(...) shallow_copy = require(table_module).shallowCopy return shallow_copy(...) end local function tag_text(...) tag_text = require(script_utilities_module).tag_text return tag_text(...) end local function tag_transcription(...) tag_transcription = require(script_utilities_module).tag_transcription return tag_transcription(...) end local function tag_translit(...) tag_translit = require(script_utilities_module).tag_translit return tag_translit(...) end local function trim(...) trim = require(string_utilities_module).trim return trim(...) end local function ulen(...) ulen = require(string_utilities_module).len return ulen(...) end --[==[ Loaders for objects, which load data (or some other object) into some variable, which can then be accessed as "foo or get_foo()", where the function get_foo sets the object to "foo" and then returns it. This ensures they are only loaded when needed, and avoids the need to check for the existence of the object each time, since once "foo" has been set, "get_foo" will not be called again.]==] local m_data local function get_data() m_data = load_data(headword_data_module) return m_data end local script_data local function get_script_data() script_data = load_data(scripts_data_module) return script_data end local script_utilities_data local function get_script_utilities_data() script_utilities_data = load_data(script_utilities_data_module) return script_utilities_data end -- If set to true, categories always appear, even in non-mainspace pages local test_force_categories = false -- Add a tracking category to track entries with certain (unusually undesirable) properties. `track_id` is an identifier -- for the particular property being tracked and goes into the tracking page. Specifically, this adds a link in the -- page text to [[Wiktionary:Tracking/headword/TRACK_ID]], meaning you can find all entries with the `track_id` property -- by visiting [[Special:WhatLinksHere/Wiktionary:Tracking/headword/TRACK_ID]]. -- -- If `lang` (a language object) is given, an additional tracking page [[Wiktionary:Tracking/headword/TRACK_ID/CODE]] is -- linked to where CODE is the language code of `lang`, and you can find all entries in the combination of `track_id` -- and `lang` by visiting [[Special:WhatLinksHere/Wiktionary:Tracking/headword/TRACK_ID/CODE]]. This makes it possible to -- isolate only the entries with a specific tracking property that are in a given language. Note that if `lang` -- references at etymology-only language, both that language's code and its full parent's code are tracked. local function track(track_id, lang) local tracking_page = "headword/" .. track_id if lang and lang:hasType("etymology-only") then debug_track{tracking_page, tracking_page .. "/" .. lang:getCode(), tracking_page .. "/" .. lang:getFullCode()} elseif lang then debug_track{tracking_page, tracking_page .. "/" .. lang:getCode()} else debug_track(tracking_page) end return true end local function text_in_script(text, script_code) local sc = get_script(script_code) if not sc then error("Internal error: Bad script code " .. script_code) end local characters = sc.characters local out if characters then text = ugsub(text, "%W", "") out = ufind(text, "[" .. characters .. "]") end if out then return true else return false end end local spacingPunctuation = "[%s%p]+" --[[ List of punctuation or spacing characters that are found inside of words. Used to exclude characters from the regex above. ]] local wordPunc = "-#%%&@־׳״'.·*’་•:᠊" local notWordPunc = "[^" .. wordPunc .. "]+" --[=[ Format a term (either a head term or an inflection term) along with any decorations (left or right qualifiers, labels, references or customized separator). `part` is the object specifying the term (and `lang` the language of the term), which should optionally contain: * left qualifiers in `q`, an array of strings; * right qualifiers in `qq`, an array of strings; * left labels in `l`, an array of strings; * right labels in `ll`, an array of strings; * references in `refs`, an array either of strings (formatted reference text) or objects containing fields `text` (formatted reference text) and optionally `name` and/or `group`; * a separator in `separator`, defaulting to " <i>or</i> " if this is not the first term (j > 1), otherwise "". `formatted` is the formatted version of the term itself, and `j` is the index of the term. ]=] local function format_term_with_decorations(lang, part, formatted, j) local function part_non_empty(field) local list = part[field] if not list then return nil end if type(list) ~= "table" then error(("Internal error: Wrong type for `part.%s`=%s, should be \"table\""):format(field, dump(list))) end return list[1] end if part_non_empty("q") or part_non_empty("qq") or part_non_empty("l") or part_non_empty("ll") or part_non_empty("refs") then formatted = format_decorations { lang = lang, text = formatted, q = part.q, qq = part.qq, l = part.l, ll = part.ll, refs = part.refs, } end local separator = part.separator or j > 1 and " <i>hoặc</i> " -- use "" to request no separator if separator then formatted = separator .. formatted end return formatted end --[==[Return true if the given head is multiword according to the algorithm used in full_headword().]==] function export.head_is_multiword(head) for possibleWordBreak in ugmatch(head, spacingPunctuation) do if umatch(possibleWordBreak, notWordPunc) then return true end end return false end do local function workaround_to_exclude_chars(s) return (ugsub(s, notWordPunc, "\2%1\1")) end --[==[ Add appropriate links to `head`, correctly handling multiword terms. This is intended for multiword terms but can be used for any term if you want links added to single-word terms as well. If you want to only add links to multiword terms, first check that the term is multiword using `head_is_multiword`. If `default` is specified, this will escape colons so that they don't get interpreted as interwiki links. This should generally only be used when `head` is an actual pagename or is taken from a {{para|pagename}} parameter, not when taken from a {{para|head}} parameter. ]==] function export.add_multiword_links(head, default) head = "\1" .. ugsub(head, spacingPunctuation, workaround_to_exclude_chars) .. "\2" if default then head = head :gsub("(\1[^\2]*)\\([:#][^\2]*\2)", "%1\\\\%2") :gsub("(\1[^\2]*)([:#][^\2]*\2)", "%1\\%2") end --Escape any remaining square brackets to stop them breaking links (e.g. "[citation needed]"). head = encode_entities(head, "[]", true, true) --[=[ use this when workaround is no longer needed: head = "[[" .. ugsub(head, WORDBREAKCHARS, "]]%1[[") .. "]]" Remove any empty links, which could have been created above at the beginning or end of the string. ]=] return (head :gsub("\1\2", "") :gsub("[\1\2]", {["\1"] = "[[", ["\2"] = "]]"})) end end local function non_categorizable(full_raw_pagename) return full_raw_pagename:find("^Appendix:Gestures/") or -- Unsupported titles with descriptive names. (full_raw_pagename:find("^Unsupported titles/") and not full_raw_pagename:find("`")) end local function tag_text_and_add_decorations(data, head, formatted, j) -- Add language and script wrapper. formatted = tag_text(formatted, data.lang, head.sc, "head", nil, j == 1 and data.id or nil) -- Add decorations (qualifiers, labels, references and separator). return format_term_with_decorations(data.lang, head, formatted, j) end -- Format a headword with transliterations. local function format_headword(data) -- Are there non-empty transliterations? local has_translits = false local has_manual_translits = false ------ Format the headwords. ------ local head_parts = {} local unique_head_parts = {} local has_multiple_heads = not not data.heads[2] for j, head in ipairs(data.heads) do if head.tr or head.ts then has_translits = true end if head.tr and head.tr_manual or head.ts then has_manual_translits = true end local formatted -- Apply processing to the headword, for formatting links and such. if head.term:find("[[", nil, true) and head.sc:getCode() ~= "Image" then formatted = language_link{term = head.term, lang = data.lang} else formatted = data.lang:makeDisplayText(head.term, head.sc, true) end local head_part = tag_text_and_add_decorations(data, head, formatted, j) insert(head_parts, head_part) -- If multiple heads, try to determine whether all heads display the same. To do this we need to effectively -- rerun the text tagging and addition of decorations, using 1 for all indices. if has_multiple_heads then local unique_head_part if j == 1 then unique_head_part = head_part else unique_head_part = tag_text_and_add_decorations(data, head, formatted, 1) end unique_head_parts[unique_head_part] = true end end local set_size = 0 if has_multiple_heads then for _ in pairs(unique_head_parts) do set_size = set_size + 1 end end if set_size == 1 then head_parts = head_parts[1] else head_parts = concat(head_parts) end if has_manual_translits then -- [[Special:WhatLinksHere/Wiktionary:Tracking/headword/manual-tr]] -- [[Special:WhatLinksHere/Wiktionary:Tracking/headword/manual-tr/LANGCODE]] track("manual-tr", data.lang) end ------ Format the transliterations and transcriptions. ------ local translits_formatted if has_translits then local translit_parts = {} for _, head in ipairs(data.heads) do if head.tr or head.ts then local this_parts = {} if head.tr then insert(this_parts, tag_translit(head.tr, data.lang:getCode(), "head", nil, head.tr_manual)) if head.ts then insert(this_parts, " ") end end if head.ts then insert(this_parts, "/" .. tag_transcription(head.ts, data.lang:getCode(), "head") .. "/") end insert(translit_parts, concat(this_parts)) end end translits_formatted = " (" .. concat(translit_parts, " <i>or</i> ") .. ")" local function format_transliteration_page_link(langname) local transliteration_pagename = "Chuyển tự " .. langname local transliteration_page = new_title(transliteration_pagename, "Wiktionary") if transliteration_page and transliteration_page:getContent() then return ("[[Wiktionary:Chuyển tự %s|•]]"):format(transliteration_pagename) end return nil end local translit_page_link = format_transliteration_page_link(data.lang:getCanonicalName()) -- If data.lang is an etymology-only language and we didn't find a translation page for it, fall back to the -- full parent. if not translit_page_link and data.lang:hasType("etymology-only") then translit_page_link = format_transliteration_page_link(data.lang:getFullName()) end if translit_page_link then translits_formatted = " " .. translit_page_link .. translits_formatted end else translits_formatted = "" end ------ Paste heads and transliterations/transcriptions. ------ local lemma_gloss if data.gloss then lemma_gloss = ' <span class="ib-content qualifier-content">' .. data.gloss .. '</span>' else lemma_gloss = "" end return head_parts .. translits_formatted .. lemma_gloss end local function format_headword_genders(data, is_varform_only) local retval = "" if data.genders and data.genders[1] then if data.gloss then retval = "," end local pos_for_cat if not data.nogendercat and not is_varform_only then local no_gender_cat = (m_data or get_data()).no_gender_cat if not (no_gender_cat[data.lang:getCode()] or no_gender_cat[data.lang:getFullCode()]) then pos_for_cat = (m_data or get_data()).pos_for_gender_number_cat[data.pos_category:gsub("^reconstructed ", "")] end end local text, cats = format_genders(data.genders, data.lang, pos_for_cat) if cats then extend(data.categories, cats) end retval = retval .. "&nbsp;" .. text end return retval end -- Forward reference local format_inflections local function format_inflection_parts(data, parts) for j, part in ipairs(parts) do if type(part) ~= "table" then part = {term = part} end local partaccel = part.accel local face = part.face or "bold" if face ~= "bold" and face ~= "plain" and face ~= "hypothetical" then error("The face `" .. face .. "` " .. ( (script_utilities_data or get_script_utilities_data()).faces[face] and "should not be used for non-headword terms on the headword line." or "is invalid." )) end -- Here the final part 'or data.nolinkinfl' allows to have 'nolinkinfl=true' -- right into the 'data' table to disable inflection links of the entire headword -- when inflected forms aren't entry-worthy, e.g.: in Vulgar Latin local nolinkinfl = part.face == "hypothetical" or (part.nolink and track("nolink") or part.nolinkinfl) or ( data.nolink and track("nolink") or data.nolinkinfl) local formatted if part.label then -- FIXME: There should be a better way of italicizing a label. As is, this isn't customizable. formatted = "<i>" .. part.label .. "</i>" else -- Convert the term into a full link. Don't show a transliteration here unless enable_auto_translit is -- requested, either at the `parts` level (i.e. per inflection) or at the `data.inflections` level (i.e. -- specified for all inflections). This is controllable in {{head}} using autotrinfl=1 for all inflections, -- or fNautotr=1 for an individual inflection (remember that a single inflection may be associated with -- multiple terms). The reason for doing this is to avoid clutter in headword lines by default in languages -- where the script is relatively straightforward to read by learners (e.g. Greek, Russian), but allow it -- to be enabled in languages with more complex scripts (e.g. Arabic). -- -- FIXME: With nested inflections, should we also respect `enable_auto_translit` at the top level of the -- nested inflections structure? local tr = part.tr or not (parts.enable_auto_translit or data.inflections.enable_auto_translit) and "-" or nil local postprocess_annotations if part.inflections then postprocess_annotations = function(infldata) insert(infldata.annotations, {text = format_inflections(data, part.inflections)}) end end formatted = full_link( { term = not nolinkinfl and part.term or nil, alt = part.alt or (nolinkinfl and part.term or nil), lang = part.lang or data.lang, sc = part.sc or parts.sc or nil, gloss = part.gloss, pos = part.pos, lit = part.lit, id = part.id, genders = part.genders, tr = tr, ts = part.ts, accel = partaccel or parts.accel, postprocess_annotations = postprocess_annotations, }, face ) end parts[j] = format_term_with_decorations(part.lang or data.lang, part, formatted, j) end local parts_output if parts[1] then parts_output = (parts.label and " " or "") .. concat(parts) elseif parts.request then parts_output = " <small>[vui lòng chỉ định]</small>" insert(data.categories, "Yêu cầu biến tố mục từ " .. data.lang:getFullName()) else parts_output = "" end local parts_label = parts.label and ("<i>" .. parts.label .. "</i>") or "" return format_term_with_decorations(data.lang, parts, parts_label .. parts_output, 1) end -- Format the inflections following the headword or nested after a given inflection. Declared local above. function format_inflections(data, inflections) if inflections and inflections[1] then -- Format each inflection individually. for key, infl in ipairs(inflections) do inflections[key] = format_inflection_parts(data, infl) end return concat(inflections, ", ") else return "" end end -- Format the top-level inflections following the headword. Currently this just adds parens around the -- formatted comma-separated inflections in `data.inflections`. local function format_top_level_inflections(data) local result = format_inflections(data, data.inflections) if result ~= "" then return " (" .. result .. ")" else return result end end -- Forward reference local check_red_link_inflections -- Check a single inflection (which consists of a label and zero or more terms, each possibly with nested inflections) -- for red links. If so, insert a red-link category based on `plpos` (the plural part of speech to insert in the -- category), stop further processing, and return true. If no red links found, return false. local function check_red_link_inflection_parts(data, parts, plpos) for _, part in ipairs(parts) do if type(part) ~= "table" then part = {term = part} end local term = part.term if term and not term:find("%[%[") then local stripped_physical_term = get_link_page(term, data.lang, part.sc or parts.sc or nil) if stripped_physical_term then local title = mw.title.new(stripped_physical_term) if title and not title:getContent() then insert(data.categories, plpos .. " có liên kết đỏ trong dòng tên mục từ " .. data.lang:getFullName()) return true end end end if part.inflections then if check_red_link_inflections(data, part.inflections, plpos) then return true end end end return false end -- Check a set of inflections (each of which describes a single inflection of the term, such as feminine or plural, and -- consists of a label and zero or more terms, each possibly with nested inflections) for red links. If so, insert a -- red-link category based on `plpos` (the plural part of speech to insert in the category), stop further processing, -- and return true. If no red links found, return false. function check_red_link_inflections(data, inflections, plpos) if inflections and inflections[1] then -- Check each inflection individually. for key, infl in ipairs(inflections) do if check_red_link_inflection_parts(data, infl, plpos) then return true end end end return false end -- Check the top-level inflections in `data.inflections`, along with any nested inflections, for red links. If so, -- insert a red-link category based on `plpos` (the plural part of speech to insert in the category), stop further -- processing, and return true. If no red links found, return false. local function check_red_link_inflections_top_level(data, plpos) return check_red_link_inflections(data, data.inflections, plpos) end --[==[ Returns the plural form of `pos`, a raw part of speech input, which could be singular or plural. Irregular plural POS are taken into account (e.g. "kanji" pluralizes to "kanji"). ]==] function export.pluralize_pos(pos) -- Make the plural form of the part of speech return (m_data or get_data()).irregular_plurals[pos] or pos:sub(-1) == "" and pos or pos end --[==[ Return "lemma" if the given POS is a lemma, "non-lemma form" if a non-lemma form, or nil if unknown. The POS passed in must be in its plural form ("nouns", "prefixes", etc.). If you have a POS in its singular form, call {export.pluralize_pos()} above to pluralize it in a smart fashion that knows when to add "-s" and when to add "-es", and also takes into account any irregular plurals. If `best_guess` is given and the POS is in neither the lemma nor non-lemma list, guess based on whether it ends in " forms"; otherwise, return nil. ]==] function export.pos_lemma_or_nonlemma(plpos, best_guess) local m_headword_data = m_data or get_data() local isLemma = m_headword_data.lemmas -- Is it a lemma category? if isLemma[plpos] then return "Mục từ" end local plpos_no_recon = plpos:gsub("^reconstructed ", "") if isLemma[plpos_no_recon] then return "Mục từ" end -- Is it a nonlemma category? local isNonLemma = m_headword_data.nonlemmas if isNonLemma[plpos] or isNonLemma[plpos_no_recon] then return "Mục từ biến thể hình thái" end local plpos_no_mut = plpos:gsub("^mutated ", "") if isLemma[plpos_no_mut] or isNonLemma[plpos_no_mut] then return "Mục từ biến thể hình thái" elseif best_guess then return plpos:find(" forms$") and "Mục từ biến thể hình thái" or "Mục từ" else return nil end end --[==[ Canonicalize a part of speech as specified in 2= in {{tl|head}}. This checks for POS aliases and non-lemma form aliases ending in 'f', and then pluralizes if the POS term does not have an invariable plural. ]==] function export.canonicalize_pos(pos) -- FIXME: Temporary code to throw an error for alias 'pre' (= preposition) that will go away. if pos == "pre" then -- Don't throw error on 'pref' as it's an alias for "prefix". error("POS 'pre' for 'preposition' no longer allowed as it's too ambiguous; use 'prep'") end -- Likewise for pro = pronoun. if pos == "pro" or pos == "prof" then error("POS 'pro' for 'pronoun' no longer allowed as it's too ambiguous; use 'pron'") end local m_headword_data = m_data or get_data() if m_headword_data.pos_aliases[pos] then pos = m_headword_data.pos_aliases[pos] elseif pos:sub(-1) == "f" then pos = pos:sub(1, -2) pos = "Biến thể hình thái " .. lcfirst((m_headword_data.pos_aliases[pos] or pos)) end return pos end -- Find and return the maximum index in the array `data[element]` (which may have gaps in it), and initialize it to a -- zero-length array if unspecified. Check to make sure all keys are numeric (other than "maxindex", which is set by -- [[Module:parameters]] for list parameters), all values are strings, and unless `allow_blank_string` is given, -- no blank (zero-length) strings are present. local function init_and_find_maximum_index(data, element, allow_blank_string) local maxind = 0 if not data[element] then data[element] = {} end local typ = type(data[element]) if typ ~= "table" then error(("Internal error: In full_headword(), `data.%s` must be an array but is a %s"):format(element, typ)) end for k, v in pairs(data[element]) do if k ~= "maxindex" then if type(k) ~= "number" then error(("Internal error: Unrecognized non-numeric key '%s' in `data.%s`"):format(k, element)) end if k > maxind then maxind = k end if v then if type(v) ~= "string" then error(("Internal error: For key '%s' in `data.%s`, value should be a string but is a %s"):format(k, element, type(v))) end if not allow_blank_string and v == "" then error(("Internal error: For key '%s' in `data.%s`, blank string not allowed; use 'false' for the default"):format(k, element)) end end end end return maxind end --[==[ -- Add the page to various maintenance categories for the language and the -- whole page. These are placed in the headword somewhat arbitrarily, but -- mainly because headword templates are mandatory for entries (meaning that -- in theory it provides full coverage). -- -- This is provided as an external entry point so that modules which transclude -- information from other entries (such as {{tl|ja-see}}) can take advantage -- of this feature as well, because they are used in place of a conventional -- headword template.]==] do -- Handle any manual sortkeys that have been specified in raw categories -- by tracking if they are the same or different from the automatically- -- generated sortkey, so that we can track them in maintenance -- categories. local function handle_raw_sortkeys(tbl, sortkey, page, lang, lang_cats) sortkey = sortkey or lang:makeSortKey(page.pagename) -- If there are raw categories with no sortkey, then they will be -- sorted based on the default MediaWiki sortkey, so we check against -- that. if tbl == true then if page.raw_defaultsort ~= sortkey then insert(lang_cats, "Mục từ có mã sắp xếp thủ công không thừa " .. lang:getFullName()) end return end local redundant, different for k in pairs(tbl) do if k == sortkey then redundant = true else different = true end end if redundant then insert(lang_cats, "Mục từ có mã sắp xếp thừa " .. lang:getFullName()) end if different then insert(lang_cats, "Mục từ có mã sắp xếp thủ công không thừa " .. lang:getFullName()) end return sortkey end function export.maintenance_cats(page, lang, lang_cats, page_cats) extend(page_cats, page.cats) lang = lang:getFull() -- since we are just generating categories local canonical = lang:getCanonicalName() local tbl = page.wikitext_topic_cat[lang:getCode()] local sortkey = nil if tbl then sortkey = handle_raw_sortkeys(tbl, sortkey, page, lang, lang_cats) insert(lang_cats, canonical .. " entries with topic categories using raw markup") end tbl = page.wikitext_langname_cat[canonical] if tbl then handle_raw_sortkeys(tbl, sortkey, page, lang, lang_cats) insert(lang_cats, canonical .. " entries with language name categories using raw markup") end local current_L2 = get_current_L2() if current_L2 then local trimmed_L2 = trim(current_L2) local expected_L2 = ucfirst(canonical) if trimmed_L2 ~= expected_L2 then insert(lang_cats, "Mục từ có đề mục ngôn ngữ không đúng " .. canonical) -- [[Special:WhatLinksHere/Wiktionary:Tracking/headword/incorrect language header]] -- [[Special:WhatLinksHere/Wiktionary:Tracking/headword/incorrect language header/LANGCODE]] track("incorrect language header", lang) end end end end --[==[This is the primary external entry point. {{lua|full_headword(data)}} This is used by {{temp|head}} and various language-specific headword templates (e.g. {{temp|ru-adj}} for Russian adjectives, {{temp|de-noun}} for German nouns, etc.) to display an entire headword line. See [[#Further explanations for full_headword()]] ]==] function export.full_headword(data) -- Prevent data from being destructively modified. data = shallow_copy(data) ------------ 1. Basic checks for old-style (multi-arg) calling convention. ------------ if data.getCanonicalName then error("Internal error: In full_headword(), the first argument `data` needs to be a Lua object (table) of properties, not a language object") end if not data.lang or type(data.lang) ~= "table" or not data.lang.getCode then error("Internal error: In full_headword(), the first argument `data` needs to be a Lua object (table) and `data.lang` must be a language object") end if data.id and type(data.id) ~= "string" then error("Internal error: The id in the data table should be a string.") end ------------ 2. Initialize pagename etc. ------------ local langcode = data.lang:getCode() local full_langcode = data.lang:getFullCode() local langname = data.lang:getCanonicalName() local full_langname = data.lang:getFullName() local raw_pagename = data.pagename local page local m_headword_data = m_data or get_data() if raw_pagename and raw_pagename ~= m_headword_data.pagename then -- for testing, doc pages, etc. -- data.pagename is often set on documentation and test pages through the pagename= parameter of various -- templates, to emulate running on that page. Having a large number of such test templates on a single -- page often leads to timeouts, because we fetch and parse the contents of each page in turn. However, -- we don't really need to do that and can function fine without fetching and parsing the contents of a -- given page, so turn off content fetching/parsing (and also setting the DEFAULTSORT key through a parser -- function, which is *slooooow*) in certain namespaces where test and documentation templates are likely to -- be found and where actual content does not live (User, Template, Module). local actual_namespace = m_headword_data.page.namespace local no_fetch_content = actual_namespace == "User" or actual_namespace == "Template" or actual_namespace == "Module" page = process_page(raw_pagename, no_fetch_content) else page = m_headword_data.page end local namespace = page.namespace if data.altform then -- Temporary tracking for use of old altform= track("altform", data.lang) end local noposcat = data.noposcat local is_varform_only = data.var and data.var ~= "both" local is_varform_both = data.var == "both" ------------ 3. Initialize `data.heads` table; if old-style, convert to new-style. ------------ if type(data.heads) == "table" and type(data.heads[1]) == "table" then -- new-style if data.translits or data.transcriptions then error("Internal error: In full_headword(), if `data.heads` is new-style (array of head objects), `data.translits` and `data.transcriptions` cannot be given") end else -- convert old-style `heads`, `translits` and `transcriptions` to new-style local maxind = max( init_and_find_maximum_index(data, "heads"), init_and_find_maximum_index(data, "translits", true), init_and_find_maximum_index(data, "transcriptions", true) ) for i = 1, maxind do data.heads[i] = { term = data.heads[i], tr = data.translits[i], ts = data.transcriptions[i], } end end -- Make sure there's at least one head. if not data.heads[1] then data.heads[1] = {} end ------------ 4. Initialize and validate `data.categories` and `data.whole_page_categories`, and determine `pos_category` if not given, and add basic categories. ------------ init_and_find_maximum_index(data, "categories") init_and_find_maximum_index(data, "whole_page_categories") local pos_category_already_present = false if data.categories[1] then local escaped_langname = pattern_escape(full_langname) local matches_lang_pattern = "^" .. escaped_langname .. " " for _, cat in ipairs(data.categories) do -- Does the category begin with the language name? If not, tag it with a tracking category. if not cat:find(matches_lang_pattern) then -- [[Special:WhatLinksHere/Wiktionary:Tracking/headword/no lang category]] -- [[Special:WhatLinksHere/Wiktionary:Tracking/headword/no lang category/LANGCODE]] track("no lang category", data.lang) end end -- If `pos_category` not given, try to infer it from the first specified category. If this doesn't work, we -- throw an error below. if not data.pos_category and data.categories[1]:find(matches_lang_pattern) then data.pos_category = data.categories[1]:gsub(matches_lang_pattern, "") -- Optimization to avoid inserting category already present. pos_category_already_present = true end end if not data.pos_category then error("Internal error: `data.pos_category` not specified and could not be inferred from the categories given in " .. "`data.categories`. Either specify the plural part of speech in `data.pos_category` " .. "(e.g. \"proper nouns\") or ensure that the first category in `data.categories` is formed from the " .. "language's canonical name plus the plural part of speech (e.g. \"Norwegian Bokmål proper nouns\")." ) end -- Insert a category at the beginning for the part of speech unless it's already present or `data.noposcat` given. if not (pos_category_already_present or noposcat or is_varform_only) then local pos_category = data.pos_category .. " " .. full_langname -- FIXME: [[User:Theknightwho]] Why is this special case here? Please add an explanatory comment. if pos_category ~= "Ký tự Chữ Hán đa ngữ" then insert(data.categories, 1, pos_category) end end -- Try to determine whether the part of speech refers to a lemma or a non-lemma form; if we can figure this out, -- add an appropriate category. local postype = export.pos_lemma_or_nonlemma(data.pos_category) if not postype then -- We don't know what this category is, so tag it with a tracking category. -- [[Special:WhatLinksHere/Wiktionary:Tracking/headword/unrecognized pos]] -- [[Special:WhatLinksHere/Wiktionary:Tracking/headword/unrecognized pos/LANGCODE]] track("unrecognized pos", data.lang) -- [[Special:WhatLinksHere/Wiktionary:Tracking/headword/unrecognized pos/POS]] -- [[Special:WhatLinksHere/Wiktionary:Tracking/headword/unrecognized pos/POS/LANGCODE]] track("unrecognized pos/pos/" .. data.pos_category, data.lang) elseif not (noposcat or is_varform_only or data.nolemmacat) then insert(data.categories, 1, postype .. " " .. full_langname) end -- Categorize variant forms into 'variant lemmas' or 'variant non-lemma forms'. Originally proposed in -- [[Wiktionary:Beer parlour/2024/June#Decluttering the altform mess]] as 'alternative forms'; renamed in -- [[Wiktionary:Beer parlour/2026/July#Renaming the "alternative forms" categories]]. if (is_varform_only or is_varform_both) then insert(data.categories, 1, "Mục từ biến thể thay thế " .. full_langname) end ------------ 5. Create a default headword, and add links to multiword page names. ------------ -- Determine if this is an "anti-asterisk" term, i.e. an attested term in a language that must normally be -- reconstructed. local is_anti_asterisk = data.heads[1].term and data.heads[1].term:find("^!!") local lang_reconstructed = data.lang:hasType("reconstructed") if is_anti_asterisk then if not lang_reconstructed then error("Anti-asterisk feature (head= beginning with !!) can only be used with reconstructed languages") end if namespace == "Reconstruction" then error("Anti-asterisk feature (head= beginning with !!) should be used in mainspace, not in Reconstruction space") end lang_reconstructed = false end -- Determine if term is reconstructed local is_reconstructed = namespace == "Từ_tái_tạo" or lang_reconstructed -- Create a default headword based on the pagename, which is determined in -- advance by the data module so that it only needs to be done once. local default_head = page.pagename -- Add links to multi-word page names when appropriate if not (is_reconstructed or data.nolinkhead) then local no_links = m_headword_data.no_multiword_links if not (no_links[langcode] or no_links[full_langcode]) and export.head_is_multiword(default_head) then default_head = export.add_multiword_links(default_head, true) end end if is_reconstructed then default_head = "*" .. default_head end ------------ 6. Check the namespace against the language type. ------------ if namespace == "Từ_tái_tạo" then if lang_reconstructed then error("Entries in " .. langname .. " must be placed in the Reconstruction: namespace") elseif data.lang:hasType("appendix-constructed") then error("Entries in " .. langname .. " must be placed in the Appendix: namespace") end elseif namespace == "Citations" or namespace == "Thesaurus" then error("Headword templates should not be used in the " .. namespace .. ": namespace.") end ------------ 7. Fill in missing values in `data.heads`. ------------ -- True if any script among the headword scripts has spaces in it. local any_script_has_spaces = false -- True if any term has a redundant head= param. local has_redundant_head_param = false for _, head in ipairs(data.heads) do ------ 7a. If missing head, replace with default head. if not head.term then head.term = default_head elseif head.term == default_head then has_redundant_head_param = true elseif is_anti_asterisk and head.term == "!!" then -- If explicit head=!! is given, it's an anti-asterisk term and we fill in the default head. head.term = "!!" .. default_head elseif head.term:find("^[!?]$") then -- If explicit head= just consists of ! or ?, add it to the end of the default head. head.term = default_head .. head.term end head.term_no_initial_bang_bang = is_anti_asterisk and head.term:sub(3) or head.term if is_reconstructed then local head_term = head.term if head_term:find("%[%[") then head_term = remove_links(head_term) end if head_term:sub(1, 1) ~= "*" then error("The headword '" .. head_term .. "' must begin with '*' to indicate that it is reconstructed.") end end ------ 7b. Try to detect the script(s) if not provided. If a per-head script is provided, that takes precedence, ------ otherwise fall back to the overall script if given. If neither given, autodetect the script. local auto_sc = data.lang:findBestScript(head.term) if ( auto_sc:getCode() == "None" and find_best_script_without_lang(head.term):getCode() ~= "None" ) then insert(data.categories, "Mục từ có chữ viết không chuẩn " .. full_langname) end if not (head.sc or data.sc) then -- No script code given, so use autodetected script. head.sc = auto_sc else if not head.sc then -- Overall script code given. head.sc = data.sc end -- Track uses of sc parameter. if head.sc:getCode() == auto_sc:getCode() then track("redundant script code", data.lang) if not data.no_script_code_cat then insert(data.categories, "Mục từ có mã chữ viết thừa " .. full_langname) end else track("non-redundant manual script code", data.lang) if not data.no_script_code_cat then insert(data.categories, "Mục từ có mã chữ viết thủ công không thừa " .. full_langname) end end end -- If using a discouraged character sequence, add to maintenance category. if head.sc:hasNormalizationFixes() == true then local composed_head = toNFC(head.term) if head.sc:fixDiscouragedSequences(composed_head) ~= composed_head then insert(data.whole_page_categories, "Trang có sử dụng chuỗi ký tự không được khuyến khích") end end any_script_has_spaces = any_script_has_spaces or head.sc:hasSpaces() ------ 7c. Create automatic transliterations for any non-Latin headwords without manual translit given ------ (provided automatic translit is available, e.g. not in Persian or Hebrew). -- Make transliterations head.tr_manual = nil -- Try to generate a transliteration if necessary if head.tr == "-" then head.tr = nil else local notranslit = m_headword_data.notranslit if not (notranslit[langcode] or notranslit[full_langcode]) and head.sc:isTransliterated() then head.tr_manual = not not head.tr local text = head.term_no_initial_bang_bang if not data.lang:link_tr(head.sc) then text = remove_links(text) end local automated_tr = data.lang:transliterate(text, head.sc) if automated_tr then local manual_tr = head.tr if manual_tr then if remove_links(manual_tr) == remove_links(automated_tr) then insert(data.categories, "Mục từ có chuyển tự thừa " .. full_langname) else insert(data.categories, "Mục từ có chuyển tự thủ công không thừa " .. full_langname) end end if not manual_tr then head.tr = automated_tr end end -- There is still no transliteration? -- Add the entry to a cleanup category. if not head.tr then head.tr = "<small>cần chuyển tự</small>" -- FIXME: No current support for 'Request for transliteration of Classical Persian terms' or similar. -- Consider adding this support in [[Module:category tree/poscatboiler/data/entry maintenance]]. insert(data.categories, "Yêu cầu chuyển tự mục từ " .. full_langname) else -- Otherwise, trim it. head.tr = trim(head.tr) end end end -- Link to the transliteration entry for languages that require this. if head.tr and data.lang:link_tr(head.sc) then head.tr = full_link{ term = head.tr, lang = data.lang, sc = get_script("Latn"), tr = "-" } end end ------------ 8. Maybe tag the title with the appropriate script code, using the `display_title` mechanism. ------------ -- Assumes that the scripts in "toBeTagged" will never occur in the Reconstruction namespace. -- (FIXME: Don't make assumptions like this, and if you need to do so, throw an error if the assumption is violated.) -- Avoid tagging ASCII as Hani even when it is tagged as Hani in the headword, as in [[check]]. The check for ASCII -- might need to be expanded to a check for any Latin characters and whitespace or punctuation. local display_title -- Where there are multiple headwords, use the script for the first. This assumes the first headword is similar to -- the pagename, and that headwords that are in different scripts from the pagename aren't first. This seems to be -- about the best we can do (alternatively we could potentially do script detection on the pagename). local dt_script = data.heads[1].sc local dt_script_code = dt_script:getCode() local page_non_ascii = namespace == "" and not page.pagename:find("^[%z\1-\127]+$") local unsupported_pagename, unsupported = page.full_raw_pagename:gsub("^Tiêu đề không được hỗ trợ/", "") if unsupported == 1 and page.unsupported_titles[unsupported_pagename] then display_title = 'Tiêu đề không được hỗ trợ/<span class="' .. dt_script_code .. '">' .. page.unsupported_titles[unsupported_pagename] .. '</span>' elseif page_non_ascii and m_headword_data.toBeTagged[dt_script_code] or (dt_script_code == "Jpan" and (text_in_script(page.pagename, "Hira") or text_in_script(page.pagename, "Kana"))) or (dt_script_code == "Kore" and text_in_script(page.pagename, "Hang")) then display_title = '<span class="' .. dt_script_code .. '">' .. page.full_raw_pagename .. '</span>' -- Keep Han entries region-neutral in the display title. elseif page_non_ascii and (dt_script_code == "Hant" or dt_script_code == "Hans") then display_title = '<span class="Hani">' .. page.full_raw_pagename .. '</span>' elseif namespace == "Từ tái tạo" then local matched display_title, matched = ugsub( page.full_raw_pagename, "^(Từ tái tạo:[^/]+/)(.+)$", function(before, term) return before .. tag_text(term, data.lang, dt_script) end ) if matched == 0 then display_title = nil end end -- FIXME: Generalize this. -- If the current language uses Aran (Nastaliq), e.g. Urdu, and there's more than one language on the page, don't -- set the display title because we don't want Nastaliq for terms that also exist in other languages that don't -- display in Nastaliq (e.g. Arabic or Persian). Because the word "Urdu" occurs near the end of the alphabet, Urdu -- fonts tend to override the fonts of other languages. FIXME: This is checking for more than one language on the -- page but instead needs to check if there are any languages using scripts other than Aran. if dt_script_code == "Aran" and page.L2_list.n > 1 then display_title = nil end if display_title then mw.getCurrentFrame():callParserFunction( "DISPLAYTITLE", display_title ) end ------------ 9. Insert additional categories. ------------ if data.force_cat_output then -- [[Special:WhatLinksHere/Wiktionary:Tracking/headword/force cat output]] track("force cat output") end if has_redundant_head_param then if not data.no_redundant_head_cat then -- This is not the right way to go about this; too many exceptions and problems due to language-specific headword -- handling customization. If we want this, it should be opt-in by a given language passing in the default headword. -- insert(data.categories, "Mục từ có tham số head thừa " .. full_langname) end end if namespace == "Từ tái tạo" and not lang_reconstructed then insert(data.categories, "Mục từ tái tạo " .. full_langname) end -- If the first head is multiword (after removing links), maybe insert into "LANG multiword terms". if not data.nomultiwordcat and not is_varform_only and any_script_has_spaces and postype == "Mục từ" then local no_multiword_cat = m_headword_data.no_multiword_cat if not (no_multiword_cat[langcode] or no_multiword_cat[full_langcode]) then -- Check for spaces or hyphens, but exclude prefixes and suffixes. -- Use the pagename, not the head= value, because the latter may have extra -- junk in it, e.g. superscripted text that throws off the algorithm. local no_hyphen = m_headword_data.hyphen_not_multiword_sep -- Exclude hyphens if the data module states that they should for this language. local checkpattern = (no_hyphen[langcode] or no_hyphen[full_langcode]) and ".[%s፡]." or ".[%s%-፡]." local is_multiword = umatch(page.pagename, checkpattern) if is_multiword and not non_categorizable(page.full_raw_pagename) then insert(data.categories, "Mục từ có chứa nhiều từ " .. full_langname) elseif not is_multiword then local long_word_threshold = m_headword_data.long_word_thresholds[langcode] or m_headword_data.long_word_thresholds[full_langcode] if long_word_threshold and ulen(page.pagename) >= long_word_threshold then insert(data.categories, "Từ dài " .. full_langname) end end end end -- Determine whether to insert a category 'LANGNAME POS in SCRIPT'. If there are multiple heads, we may need to check -- each head, as the heads may (theoretically) have different scripts. local default_sccat = m_headword_data.default_sccat if data.sccat or not is_varform_only and (default_sccat[langcode] or langcode ~= full_langcode and default_sccat[full_langcode]) then local function needs_sccat(sccat_entry, sc) if sccat_entry == true or not sccat_entry then return sccat_entry end if type(sccat_entry) == "table" then local in_list = contains(sccat_entry, sc:getCode()) if sccat_entry[1] == "not" then in_list = not in_list end return in_list end return nil end for _, head in ipairs(data.heads) do -- First check the `sccat` specified at the {{head}} level. local this_needs_sccat = needs_sccat(data.sccat, head.sc) -- If that wasn't given, check the default sccat at the language level for the lang code. if this_needs_sccat == nil and not is_varform_only then this_needs_sccat = needs_sccat(default_sccat[langcode], head.sc) end -- If that wasn't found and the lang code is an etym code, check the default sccat at the parent language level. if this_needs_sccat == nil and not is_varform_only and langcode ~= full_langcode then this_needs_sccat = needs_sccat(default_sccat[full_langcode], head.sc) end if this_needs_sccat then insert(data.categories, data.pos_category .. " dùng " .. head.sc:getDisplayForm(data.lang) .. " " .. full_langname) end end end -- Reconstructed terms often use weird combinations of scripts and realistically aren't spelled so much as notated. if namespace ~= "Từ tái tạo" and not is_varform_only then -- Map from languages to a string containing the characters to ignore when considering whether a term has -- multiple written scripts in it. Typically these are Greek or Cyrillic letters used for their phonetic -- values. local characters_to_ignore = { ["aaq"] = "αάὰ", -- Penobscot (Algonquian) ["acy"] = "δθ", -- Cypriot Arabic ["aez"] = "β", -- Aeka (Trans-New Guinea) ["anc"] = "γ", -- Ngas (Chadic/Afroasiatic) ["aou"] = "χ", -- A'ou (Kra-Dai) ["art-blk"] = "ч", -- Bolak (conlang) ["awg"] = "β", -- Anguthimri (Pama-Nyungan) ["az"] = "ь", -- Azerbaijani (Turkic; Yañalif Latin spelling, c. 1928 - 1938) ["ba"] = "ь", -- Bashkir (Turkic; Yañalif Latin spelling, c. 1928 - 1938) ["bhp"] = "β", -- Bima (Austronesian) ["bjz"] = "β", -- Baruga (Trans-New Guinea) ["byk"] = "θ", -- Biao (Kra-Dai) ["cdy"] = "θ", -- Chadong (Kra-Dai) ["chp"] = "θ", -- Chipewyan (Athabaskan) ["cjh"] = "χ", -- Upper Chehalis (Salishan) ["clm"] = "χ", -- Klallam (Salishan) ["col"] = "χ", -- Colombia-Wenatchi (Salishan) ["coo"] = "χθ", -- Comox (Salishan) ["crx"] = "θ", -- Carrier (Athabaskan) ["ets"] = "θ", -- Yekhee (Edoid/Niger-Congo) ["ett"] = "χ", -- Etruscan (isolate; in romanizations) ["fla"] = "χ", -- Montana Salish (Salishan) ["grt"] = "་", -- Garo (South Asian Sino-Tibetan) ["gmw-gts"] = "χ", -- Gottscheerish (Bavarian variant spoken in Slovenia) ["hur"] = "χθ", -- Halkomelem (Salishan) ["itc-psa"] = "f", -- Pre-Samnite (Italic; normally written in Greek) ["izh"] = "ь", -- Ingrian (Finnic) ["kic"] = "θ", -- Kickapoo (Algonquian) ["kk"] = "ь", -- Kazakh (Turkic; Yañalif Latin spelling, c. 1928 - 1938) ["ky"] = "ь", -- Kyrgyz (Turkic; Yañalif Latin spelling, c. 1928 - 1938) ["lil"] = "χ", -- Lillooet (Salishan) ["lsi"] = "ꓹ", -- Lashi (Lolo-Burmese/Sino-Tibetan; represents a glottal stop) ["mhz"] = "β", -- Mor (Austronesian) ["mqn"] = "β", -- Moronene (Austronesian) ["neg"]= "ӡā", -- Negidal (Tungusic; normally in Cyrillic) ["oka"] = "χ", -- Okanagan (Salishan) ["ole"] = "θ", -- Olekha (Sino-Tibetan) ["oui"] = "γβ", -- Old Uyghur (Turkic; FIXME: others? E.g. Greek delta (δ)?) ["pox"] = "χ", -- Polabian (West Slavic) ["rif"] = "ε", -- Tarifit (Berber) ["rom"] = "Θθ", -- Romani (Indic: International Standard; two different thetas???) ["rpn"] = "β", -- Repanbitip (Austronesian) ["sah"] = "ь", -- Yakut (Turkic; 1929 - 1939 Latin spelling) ["sit-jap"] = "χ", -- Japhug (Sino-Tibetan) ["sjw"] = "θ", -- Shawnee (Algonquian) ["squ"] = "χ", -- Squamish (Salishan) ["str"] = "χθ", -- Saanich (Salishan) ["teh"] = "χ", -- Tehuelche (Chonan; spoken in Argentina) ["tep"] = "η", -- Tepecano (Uto-Aztecan) ["thp"] = "χ", -- Thompson (Salishan) ["tk"] = "ь", -- Turkmen (Turkic; Yañalif Latin spelling, c. 1928 - 1938) ["tt"] = "ь", -- Kazakh (Turkic; Yañalif Latin spelling, c. 1928 - 1938) ["twa"] = "χ", -- Twana (Salishan) ["wbl"] = "ы", -- Wakhi (Iranian) ["xbc"] = "ϸ", -- Bactrian (Iranian; represents š; normally written in Greek) ["yha"] = "θ", -- Baha (Kra-Dai) ["za"] = "зч", -- Zhuang (Tai/Kra-Dai); 1957-1982 alphabet used two Cyrillic letters (as well as some others like -- ƃ, ƅ, ƨ, ɯ and ɵ that look like Cyrillic or Greek but are actually Latin) ["zlw-slv"] = "χђћ", -- Slovincian (West Slavic; FIXME: χ is Greek, the other two are Cyrillic, but I'm not sure -- the currect characters are being chosen in the entry names) ["zng"] = "θ", -- Mang (Mon-Khmer) ["ztp"] = "θ", -- Loxicha Zapotec (Zapotecan) } -- Determine how many real scripts are found in the pagename, where we exclude symbols and such. We exclude -- scripts whose `character_category` is false as well as Zmth (mathematical notation symbols), which has a -- category of "Mathematical notation symbols". When counting scripts, we need to elide language-specific -- variants because e.g. Beng and as-Beng have slightly different characters but we don't want to consider them -- two different scripts (e.g. [[এৰ]] has two characters which are detected respectively as Beng and as-Beng). local seen_scripts = {} local num_seen_scripts = 0 local num_loops = 0 local canon_pagename = page.pagename local ch_to_ignore = characters_to_ignore[full_langcode] if ch_to_ignore then canon_pagename = ugsub(canon_pagename, "[" .. ch_to_ignore .. "]", "") end while true do if canon_pagename == "" or num_seen_scripts >= 2 or num_loops >= 10 then break end -- Make sure we don't get into a loop checking the same script over and over again; happens with e.g. [[ᠪᡳ]] num_loops = num_loops + 1 local pagename_script = find_best_script_without_lang(canon_pagename, "None only as last resort") local script_chars = pagename_script.characters if not script_chars then -- we are stuck; this happens with None break end local script_code = pagename_script:getCode() local replaced canon_pagename, replaced = ugsub(canon_pagename, "[" .. script_chars .. "]", "") if ( replaced and script_code ~= "Zmth" and (script_data or get_script_data())[script_code] and script_data[script_code].character_category ~= false ) then script_code = script_code:gsub("^.-%-", "") if not seen_scripts[script_code] then seen_scripts[script_code] = true num_seen_scripts = num_seen_scripts + 1 end end end if num_seen_scripts > 1 then insert(data.categories, "Mục từ được viết bằng nhiều chữ viết " .. full_langname) end end -- Categorise for unusual characters. Takes into account combining characters, so that we can categorise for characters with diacritics that aren't encoded as atomic characters (e.g. U̠). These can be in two formats: single combining characters (i.e. character + diacritic(s)) or double combining characters (i.e. character + diacritic(s) + character). Each can have any number of diacritics. local standard = data.lang:getStandardCharacters() if not is_varform_only and standard and not non_categorizable(page.full_raw_pagename) then local function char_category(char) local specials = { ["#"] = "number sign", ["("] = "parentheses", [")"] = "parentheses", ["<"] = "angle brackets", [">"] = "angle brackets", ["["] = "square brackets", ["]"] = "square brackets", ["_"] = "underscore", ["{"] = "braces", ["|"] = "vertical line", ["}"] = "braces", ["ß"] = "ẞ", ["\205\133"] = "", -- this is UTF-8 for U+0345 ( ͅ) ["\239\191\189"] = "replacement character", } char = toNFD(char) :gsub(".[\128-\191]*", function(m) local new_m = specials[m] new_m = new_m or m:uupper() return new_m end) return toNFC(char) end if full_langcode ~= "hi" and full_langcode ~= "lo" then local standard_chars_scripts = {} for _, head in ipairs(data.heads) do standard_chars_scripts[head.sc:getCode()] = true end -- Iterate over the scripts, in case there is more than one (as they can have different sets of standard characters). for code in pairs(standard_chars_scripts) do local sc_standard = data.lang:getStandardCharacters(code) if sc_standard then if page.pagename_len > 1 then local explode_standard = {} local function explode(char) explode_standard[char] = true return "" end local sc_standard_exploded = ugsub(sc_standard, page.comb_chars.combined_double, explode) -- The following is correct; it relies on side-effecing the explode_standard[] table. ugsub(sc_standard_exploded, page.comb_chars.combined_single, explode):gsub(".[\128-\191]*", explode) local num_cat_inserted for char in pairs(page.explode_pagename) do if not explode_standard[char] then if char:find("[0-9]") then if not num_cat_inserted then insert(data.categories, "Từ đánh vần với số " .. full_langname) num_cat_inserted = true end elseif ufind(char, page.emoji_pattern) then insert(data.categories, "Từ đánh vần với emoji " .. full_langname) else local upper = char_category(char) if not explode_standard[upper] then char = upper end insert(data.categories, "Từ đánh vần với " .. char .. " " .. full_langname) end end end end -- If a diacritic doesn't appear in any of the standard characters, also categorise for it generally. sc_standard = toNFD(sc_standard) for diacritic in ugmatch(page.decompose_pagename, page.comb_chars.diacritics_single) do if not umatch(sc_standard, diacritic) then insert(data.categories, "Từ đánh vần với ◌" .. diacritic .. " " .. full_langname) end end for diacritic in ugmatch(page.decompose_pagename, page.comb_chars.diacritics_double) do if not umatch(sc_standard, diacritic) then insert(data.categories, "Từ đánh vần với ◌" .. diacritic .. "◌ " .. full_langname) end end end end -- Ancient Greek, Hindi and Lao handled the old way for now, as their standard chars still need to be converted to the new format (because there are a lot of them). elseif ulen(page.pagename) ~= 1 then for character in ugmatch(page.pagename, "([^" .. standard .. "])") do local upper = char_category(character) if not umatch(upper, "[" .. standard .. "]") then character = upper end insert(data.categories, "Từ đánh vần với " .. character .. " " .. full_langname) end end end if not is_varform_only and data.heads[1].sc:isSystem("alphabet") then local pagename, i = page.pagename:ulower(), 2 while umatch(pagename, "(%a)" .. ("%1"):rep(i)) do i = i + 1 insert(data.categories, full_langname .. " terms with " .. i .. " consecutive instances of the same letter") end end -- Categorise for palindromes if not is_varform_only and not data.nopalindromecat and namespace ~= "Từ tái tạo" and ulen(page.pagename) > 2 -- FIXME: Use of first script here seems hacky. What is the clean way of doing this in the presence of -- multiple scripts? and is_palindrome(page.pagename, data.lang, data.heads[1].sc) then insert(data.categories, "Mục từ viết xuôi ngược đều giống nhau " .. full_langname) end if namespace == "" and not lang_reconstructed then for _, head in ipairs(data.heads) do if page.full_raw_pagename ~= get_link_page(remove_links(head.term), data.lang, head.sc) then -- [[Special:WhatLinksHere/Wiktionary:Tracking/headword/pagename spelling mismatch]] -- [[Special:WhatLinksHere/Wiktionary:Tracking/headword/pagename spelling mismatch/LANGCODE]] track("pagename spelling mismatch", data.lang) break end end end -- Add red link category if called for and we're not a "large" page, where such checks are disabled. if data.checkredlinks and not m_headword_data.large_pages[m_headword_data.pagename] then local plposcat = type(data.checkredlinks) == "string" and data.checkredlinks or data.pos_category check_red_link_inflections_top_level(data, plposcat) end -- Add to various maintenance categories. export.maintenance_cats(page, data.lang, data.categories, data.whole_page_categories) ------------ 10. Format and return headwords, genders, inflections and categories. ------------ -- Format and return all the gathered information. This may add more categories (e.g. gender/number categories), -- so make sure we do it before evaluating `data.categories`. local text = '<span class="headword-line">' .. format_headword(data) .. format_headword_genders(data, is_varform_only) .. format_top_level_inflections(data) .. '</span>' -- Language-specific categories. local cats = format_categories( data.categories, data.lang, data.sort_key, page.encoded_pagename, data.force_cat_output or test_force_categories, data.heads[1].sc ) -- Language-agnostic categories. local whole_page_cats = format_categories( data.whole_page_categories, nil, "-" ) return text .. cats .. whole_page_cats end return export e09a0m3qbvj438zp6l05nse5q4oxtz9 Бангладеш 0 266399 2568680 2058794 2026-10-05T15:40:56Z Hiyuune 50834 2568680 wikitext text/x-wiki {{also|Бангладэш}} =={{langname|ba}}== ==={{section|pr-noun}}=== {{ba-proper noun}} [[File:Bangladesh map.png|thumb|right|Bản đồ của Bangladesh]] # {{tcl|ba|Bangladesh|id=Q902}} =={{langname|bg}}== {{wp|bg:}} ==={{section|pron}}=== * {{bg-IPA|Бангладе́ш}} * {{bg-IPA|Ба́нгладеш}} * {{audio|bg|LL-Q7918 (bul)-Kiril kovachev-Бангладеш.wav|text=Бангладе́ш}} ==={{section|pr-noun}}=== {{bg-proper noun|Бангладе́ш|head2=Ба́нгладеш|m|adj=бангладе́шки|adj2=ба́нгладешки}} # {{tcl|bg|Bangladesh|id=Q902}} ===={{section|infl}}==== {{bg-ndecl|((Бангладе́ш</n:sg>,Ба́нгладеш</n:sg>))}} ==={{section|ref}}=== * {{R:bg:RBE2}} * {{R:bg:PONS}} * {{R:bg:SlovoredAccent}} =={{langname|ky}}== {{wp|ky:}} ==={{section|pr-noun}}=== {{ky-proper noun}} # {{tcl|ky|Bangladesh|id=Q902}} ===={{section|decl}}==== {{ky-decl-noun-sg}} =={{langname|mk}}== ==={{section|pron}}=== * {{mk-IPA}} ==={{section|pr-noun}}=== {{mk-proper noun|m|adj=бангладешки}} # {{tcl|mk|Bangladesh|id=Q902}} ===={{section|drv}}==== * {{l|mk|Бангладешанец|g=m}}, {{l|mk|Бангладешанка|g=f}} =={{langname|mn}}== {{mn-variant|ᠪᠠᠩᠯᠠᠳᠧᠱ|Бангладеш}} {{wp|mn:}} ==={{section|etym}}=== Vay mượn từ {{bor|mn|ru|Бангладе́ш|tr=Bangladɛ́š}}, từ {{der|mn|en|Bangladesh}}, từ {{der|mn|bn|বাংলাদেশ}}. ==={{section|pron}}=== {{mn-IPA}} ==={{section|pr-noun}}=== {{mn-proper noun}} # {{tcl|mn|Bangladesh|id=Q902}} ===={{section|decl}}==== {{rfinfl|mn|danh từ riêng}} =={{langname|ru}}== {{wp|ru:}} ==={{section|pr-noun}}=== * {{alt|ru|Бангладе́шъ|tr=Bangladɛ́š||ru-PRO}} ==={{section|pron}}=== * {{ru-IPA|phon=Бангладэ́ш}} * {{ru-IPA|Бангладе́ш}} {{q|không phổ biến}} * {{audio|ru|Ru-Бангладеш.ogg|IPA=[bənɡɫɐˈdʲeʂ]}} ==={{section|pr-noun}}=== {{ru-proper noun|Бангладе́ш<tr:Bangladɛ́š>|f-in|-|adj=бангладе́шский}} # {{tcl|ru|Bangladesh|id=Q902}} ===={{section|rel}}==== * {{l|ru|бангладе́шец|tr=bangladɛ́šec}}, {{l|ru|бангладе́шка|tr=bangladɛ́ška}} * {{l|ru|бангладе́шский|tr=bangladɛ́šskij}} ==={{section|see}}=== {{list:quốc gia của châu Á/ru}} =={{langname|sh}}== {{wp|sh:,sr:}} ==={{section|pron}}=== * {{sh-IPA|Bȁngladeš}} * {{hyph|sh|Бан|гла|деш}} ==={{section|pr-noun}}=== {{sh-propn|Ба̏нгладеш|m-in}} # {{tcl|sh|Bangladesh|id=Q902}} ===={{section|decl}}==== {{sh-decl-noun-unc |Бангладеш |Бангладеша |Бангладешу |Бангладеш |Бангладешу |Бангладешу |Бангладешем }} =={{langname|tg}}== ==={{section|etym}}=== {{bor+|tg|ru|Бангладе́ш}}, từ {{der|tg|bn|বাংলাদেশ}}. So sánh với {{cog|prs|بَنْگْلَه‌دیش}}, từ {{cog|ur|بَن٘گْلَہ دیش}}. ==={{section|pron}}=== {{tg-IPA}} ==={{section|decl}}=== {{tg-noun}} # {{tcl|tg|Bangladesh|id=Q902}} #: {{syn|tg|Банглодеш|qq1=từ tiếng Ba Tư Iran}} =={{langname|uk}}== {{wp|uk:}} ==={{section|alt}}=== * {{l|uk|Банґладе́ш}} ==={{section|pron}}=== * {{uk-IPA|Бангладе́ш}} * {{audio|uk|LL-Q8798 (ukr)-Tohaomg-Бангладеш.wav}} ==={{section|pr-noun}}=== {{uk-proper noun|Бангладе́ш|f-in|-|adj=бангладе́шський,бангладе́ський}} # {{tcl|uk|Bangladesh|id=Q902|place_official=uk:Наро́дна Респу́бліка Бангладе́ш}} ==={{section|see}}=== {{list:quốc gia của châu Á/uk}} ==={{section|ref}}=== * {{R:uk:Horokh}} ppqnim77t2pmma387l92874qnj3pfkj maloob 0 267513 2568748 2496062 2026-10-06T05:43:11Z Hiyuune 50834 2568748 wikitext text/x-wiki =={{langname|bej}}== {{cardinalbox|bej|1|2|3|gaal|mhay}} ==={{section|pron}}=== * {{bej-IPA}} ==={{section|num}}=== {{head|bej|Số từ|g=m|giống cái|maloot}} # [[hai|Hai]]. ==={{section|ref}}=== * {{R:bej:Reinisch|365}} g5nfhynbdmkh8fwhlmdzyqakyjuql90 Mô đun:headword utilities 828 270803 2568724 2568110 2026-10-06T01:24:03Z Hiyuune 50834 2568724 Scribunto text/plain local export = {} --[==[ FIXME: 1. Implement ? = unknown or uncertain. There should be no label by default but it should be configurable. The default category should be "{plpos} with unknown or uncertain plurals" for nouns/proper nouns. It should be an error to specify values along with this. 2. Implement ! = unattested. The default label should be "{label} not attested". The default category should be "{plpos} with unattested plurals" for nouns/proper nouns. It should be an error to specify values along with this. 3. Implement +- = sometimes has a value, e.g. "countable and uncountable" for plurals. 4. Implement ~ standing for the pagename in heads and inflections. [DONE] 5. Implement abbr= for abbreviations. [DONE] 6. Extract from insert_inflection the logic to handle the special mode signals, determine the actual label and category and the actual values without inserting them. 7. Support no_label for booleans. 8. Document the various types of parts of speech and implement pos_category per part of speech definition. [DONE] 9. Implement apply_link_modifiers() for head=~... 10. Correctly handle var=both. [DONE] 11. Implement checkredlinks and port simplify_pos to [[Module:headword]]. 12. Fix longstanding accelerator bug: if embeddded links in inflection, don't make it green. ]==] local require_when_needed = require("Module:utilities/require when needed") local affix_module = "Module:affix" local debug_track_module = "Module:debug/track" local decorations_module = "Module:decorations" local en_utilities_module = "Module:en-utilities" local fun_is_callable_module = "Module:fun/isCallable" local headword_module = "Module:headword" local headword_data_module = "Module:headword/data" local languages_module = "Module:languages" local links_module = "Module:links" local parameters_module = "Module:parameters" local parse_interface_module = "Module:parse interface" local parse_utilities_module = "Module:parse utilities" local string_pattern_escape_module = "Module:string/patternEscape" local string_replacement_escape_module = "Module:string/replacementEscape" local string_utilities_module = "Module:string utilities" local table_module = "Module:table" local yesno_module = "Module:yesno" local dump = mw.dumpObject local unpack = unpack or table.unpack -- Lua 5.2 compatibility local insert = table.insert local concat = table.concat local remove = table.remove local sort = table.sort local deep_equals = require_when_needed(table_module, "deepEquals") local extend = require_when_needed(table_module, "extend") local insert_if_not = require_when_needed(table_module, "insertIfNot") local list_to_set = require_when_needed(table_module, "listToSet") local serial_comma_join = require_when_needed(table_module, "serialCommaJoin") local shallow_copy = require_when_needed(table_module, "shallowCopy") local split = require_when_needed(string_utilities_module, "split") local ugsub = require_when_needed(string_utilities_module, "gsub") local umatch = require_when_needed(string_utilities_module, "match") local pattern_escape = require_when_needed(string_pattern_escape_module) local replacement_escape = require_when_needed(string_replacement_escape_module) local escape_wikicode = require_when_needed(parse_utilities_module, "escape_wikicode") local parse_inline_modifiers = require_when_needed(parse_utilities_module, "parse_inline_modifiers") local term_contains_top_level_html = require_when_needed(parse_utilities_module, "term_contains_top_level_html") local get_lang_by_code = require_when_needed(languages_module, "getByCode") local is_callable = require_when_needed(fun_is_callable_module) local format_decorations = require_when_needed(decorations_module, "format_decorations") local function split_on_comma(val) if val:find(",") then return require(parse_interface_module).split_on_comma(val) else return {val} end end local function ine(val) if val == "" then return nil else return val end end --[==[ intro: This module contains utilities for constructing language-specific headword modules. [fill in] ===About parts of speech=== There are several versions of the part of speech (POS) of a given term: * The ''primary categorizing POS'' is the basic part of speech to which a term belongs. The primary POS determines whether the term is a lemma or non-lemma form, and in its plural form, it is used to categorize the terms (unless it is a variant term), along with caetegorizing into a ''lemmas'' or ''non-lemma forms'' category. (Variant terms, typically marked by {{para|var|1}}, are categorized into ''variant lemmas'' or ''variant non-lemma forms'' and are not categorized into a primary POS category.) * The ''raw {{tl|head}} POS'' is parameter {{para|2}} to {{tl|head}}. This is used to determine the primary categorizing POS by a process of canonicalization, because this parameter may contain abbreviations (e.g. ''a'' or ''adj'' for an adjective) and may be (and usually is) given in its singular form. * The ''template-indicated POS'' is the part of speech indicated by a headword template such as {{tl|nl-noun}} or {{tl|mn-head}}. It is either inherent to the template (in a case like {{tl|nl-noun}}), in which case it is specified by the template code and should always be in canonical, plural form; or it is specified by the user in the template call (in a case like {{tl|mn-head}} or other generic POS template, usually ending in `-head`), in which case it may be given in raw form, like for the raw {{tl|head}} POS, and is canonicalized using the same code that canonicalizes raw {{tl|head}} parts of speech. The template-indicate POS may not be a valid primary categorizing POS. For example, Dutch has a template-indicated POS ''diminutiva tantum nouns'', specified through the template {{tl|nl-dim-tant}}, but there is no such primary categorizing POS (that POS would be `nouns`). Similarly, Arabic has a template-indicated POS ''collective nouns'', whose primary categorizing POS is also `nouns`. As a result, the template-indicated POS may need to be converted to a primary categorizing POS through a ''normalization'' process (which uses a `pos_category` field attached to the `pos_functions` structure for the template-indicated POS). Note that the template-indicated POS comes in several variants: *# It may be ''head-raw'', meaning that it uses the literal string `head` in place of the user-specified POS in a generic POS template like {{tl|mn-head}}; it may be ''non-head'', meaning that it uses the actual user-specified POS in such a case; or it may be ''head-augmented'', meaning that in the case of a generic POS template it is of the form e.g. `head.nouns`, contanining both the literal `head` and the user-specified POS. *# It may be ''suffix-raw'', meaning that it uses the primary categorizing POS `suffixes` in place of the template-indicated POS when the term is a suffix, or it may be ''non-suffix'', meaning that it uses the template-indicated POS in such a case. The headword for a suffix uses the template corresponding to whatever POS the suffix forms, e.g. {{nl-noun}} for Dutch noun-forming suffixes. *# The ''indexing POS'' is the variant of the template-indicated POS that is used to index into the `pos_functions` table. Normally it is head-raw and non-suffix, but it will be head-augmented if the corresponding head-augmented entry exists in `pos_functions`. *# The ''unnormalized categorizing POS'' is the variant of the template-indicated POS that is potentially usable as the primary categorizing POS (see above). It is non-head and suffix-raw, i.e. it uses the actual template-specified or user-specified form of the template-indicated POS except when the term is a suffix, in which case it has the value `suffixes`. In most circumstances this can be used directly as the primary categorizing POS, but in some cases this POS is not a valid primary categorizing POS and needs to be normalized to get the actual primary categorizing POS, as mentioned above under the description for the template-indicated POS. * Finally, there is a ''simplified categorizing POS''. This collapses variations of primary categorizing parts of speech together for use in red-link and similar categories. For example, the POS `proper nouns` is collapsed into `nouns`, and all types of participles are collapsed into `participles`. There are two variants of the simplification process, ''lemma-status-preserving'' and ''non-lemma-status-preserving''. The latter is the default and is simpler, in that e.g. it means any part of speech ending in `nouns` to `nouns`, even if this causes non-lemma forms to become lemmas, as with `diminutive nouns` and `verbal nouns` (which are non-lemma forms) and likewise with `comparative adjectives` and `superlative adjectives` (which are again non-lemma forms). The former, ''lemma-status-preserving'', keeps lemmas as lemmas and (more important) non-lemmas as non-lemmas by converting e.g. `diminutive nouns` and `verbal nouns` to `noun forms` rather than `nouns`. The reason two variants exist in that they have different use cases. The default, non-lemma-status-preserving, type is used for tracking categories such as red-link and request categories, where completeness is more important than clutter. The lemma-status-preserving variant is used for informative categories such as ` ``lang`` masculine nouns`, which should only have lemmas in them to avoid clutter. (For the same reason, variant terms specified using {{para|var|1}} aren't normally categorized into informative categories but are placed in tracking categories.) ===About properties and data objects=== [fill in] ]==] --[=[ Add decorations to a term. `termobj` is the object describing the term, which should optionally contain: * left qualifiers in `q`, an array of strings; * right qualifiers in `qq`, an array of strings; * left labels in `l`, an array of strings; * right labels in `ll`, an array of strings; * references in `refs`, an array either of strings (formatted reference text) or objects containing fields `text` (formatted reference text) and optionally `name` and/or `group`; `text` is the text of the term itself, and `lang` is the language object. ]=] local function add_decorations(text, termobj, lang) local function field_non_empty(field) local list = termobj[field] if not list then return nil end if type(list) ~= "table" then error(("Internal error: Wrong type for `termobj.%s`=%s, should be \"table\""):format( field, mw.dumpObject(list))) end return list[1] end if field_non_empty("q") or field_non_empty("qq") or field_non_empty("l") or field_non_empty("ll") or field_non_empty("refs") then text = format_decorations { lang = lang, text = text, q = termobj.q, qq = termobj.qq, l = termobj.l, ll = termobj.ll, refs = termobj.refs, } end return text end local param_mods = { alt = {}, -- always allow so e.g. - can be specified as a suffix form id = {}, -- disabled when `is_head = true` q = {type = "qualifier"}, qq = {type = "qualifier"}, l = {type = "labels"}, ll = {type = "labels"}, -- [[Module:headword]] expects part references in `.refs`. ref = {item_dest = "refs", type = "references", store = "insert-flattened"}, } local optional_param_mods = { g = {item_dest = "genders", type = "genders"}, lang = {type = "language"}, sc = {type = "script"}, t = {item_dest = "gloss"}, gloss = {}, pos = {}, lit = {}, tr = {}, ts = {}, face = {}, nolinkinfl = {type = "boolean"}, } local optional_headword_param_mods = { sc = {type = "script"}, tr = {}, ts = {}, } --[==[ Parse a single inflection or headword form or list of such forms. In either case, inline modifiers may be attached. `data` is an object with the following fields: * `val`: The raw value to parse. Required. * `paramname`: The name of the parameter from which the value was taken; used in error messages. Required. * `is_head`: We are parsing a headword parameter (a value which goes into the `heads` field of `data`). This changes the allowed modifiers, disabling the `id` modifier and only allowing a subset of optional modifiers. * `frob`: An optional function of one value to apply to the form after inline modifiers have been removed (i.e. to apply to the `.term` field of the returned object). * `include_mods`: List of extra inline modifiers to include, besides the default ones (see below). Each list item is either a string specifying a recognized extra inline modifier (see `optional_param_mods` in the code), or a two-item list of modifier name and modifier spec, where the spec should follow the syntax for modifier specs in `parse_inline_modifiers` in [[Module:parse utilities]]. * `exclude_mods`: List of default inline modifiers to not include. * `splitchar`: If specified, the value in `val` can be a list of forms to parse, separated by the value of `splitchar` (which is a Lua pattern, as in `parse_inline_modifiers` in [[Module:parse utilities]]). Most commonly, `splitchar` is a single comma and the values are comma-separated (in this case, splitting will not happen if a space follows the comma). * `parse_lang_prefix`: If specified, allow a language prefix to precede a form, and if found, store into the `.lang` field of the returned object. * `preserve_splitchar`, `delimiter_key`, `escape_fun`, `unescape_fun`, `pre_normalize_modifiers`: As in `parse_inline_modifiers` in [[Module:parse utilities]]. Returns an object suitable for storing as one element of one of the lists in `headdata.inflections`, where `headdata` is the structure passed to [[Module:headword]]. If `splitchar` is specified, howeve, the return value is a list of such objects. The following default inline modifiers are currently recognized: * `q`: Left qualifier. * `qq`: Right qualifier. * `l`: Comma-separated list of left labels. No space should follow the comma. * `ll`: Comma-separated list of right labels. No space should follow the comma. * `ref`: Reference or references. See {{tl|IPA}} for the syntax. * `id`: Sense ID, in case there are multiple senses. See {{tl|l}}. The following are the recognized additional inline modifiers: * `g`: Comma-separated list of genders. * `alt`: Display text. * `lang`: Language code of language of the form, if different from the language of the headword. * `sc`: Script code of script of the form. Almost never needed. * `t`: Gloss for the form. * `gloss`: Gloss for the form (alias for `t`). * `pos`: Part of speech of the form. * `lit`: Literal meaning of the form. * `tr`: Manual transliteration of the form. * `ts`: Transcription of the form, for languages where the transliteration differs markedly from the pronunciation. * `face`: Face to display the form in, e.g. {"hypothetical"} for a hypothetical form (unlinkable and displayed in italics). * `nolinkinfl`: Make the form unlinkable. ]==] function export.parse_term_with_modifiers(data) local paramname, val, frob = data.paramname, data.val, data.frob local function generate_obj(term, parse_err) if frob then term = frob(term, parse_err) end if data.parse_lang_prefix and term:find(":") then return require(parse_utilities_module).generate_obj_maybe_parsing_lang_prefix { term = term, paramname = paramname, parse_lang_prefix = true, parse_err = parse_err, } else return {term = term} end end -- Check for inline modifier, e.g. מרים<tr:Miryem>. But exclude top-level HTML entry with <span ...>, -- <sup> or similar in it. if (val:find("<", nil, true) or data.splitchar) and not term_contains_top_level_html(val) and -- don't parse inline modifiers if is_head and the value begins with a ~ (link modifier syntax) (not data.is_head or not val:find("^~")) then local param_mods = param_mods if data.is_head then param_mods = shallow_copy(param_mods) param_mods.id = nil end if data.include_mods or data.exclude_mods then if not data.is_head then -- already copied when data.is_head param_mods = shallow_copy(param_mods) end if data.include_mods then local optional_mods = data.is_head and optional_headword_param_mods or optional_param_mods for _, mod in ipairs(data.include_mods) do if type(mod) == "table" then if #mod ~= 2 then error(("Internal error: Modifier spec %s in `include_mods` should be of length 2"):format( dump(mod))) end local modkey, modvalue = unpack(mod) param_mods[modkey] = modvalue elseif not optional_mods[mod] then error(("Internal error: Unrecognized modifier spec %s in `include_mods`"):format( dump(mod))) else param_mods[mod] = optional_mods[mod] end end end if data.exclude_mods then for _, mod in ipairs(data.exclude_mods) do if not param_mods[mod] then error(("Internal error: Modifier spec %s in `exclude_mods` not found among existing modifiers" ):format(dump(mod))) else param_mods[mod] = nil end end end end return parse_inline_modifiers(val, { paramname = paramname, param_mods = param_mods, generate_obj = generate_obj, splitchar = data.splitchar, preserve_splitchar = data.preserve_splitchar, delimiter_key = data.delimiter_key, escape_fun = data.escape_fun, unescape_fun = data.unescape_fun, pre_normalize_modifiers = data.pre_normalize_modifiers, }) else local retval = generate_obj(val) if data.splitchar then retval = {retval} end return retval end end --[==[ Parse a list of inflection forms that may have inline modifiers attached. `data` is an object with the following fields: * `forms`: The list of raw values to parse. Required. * `paramname`: The name of the first parameter from which the value was taken; used in error messages. If this is a two-element list, the first element is the first parameter and the second element is the prefix of the remaining parameters. Parameter names that are numbers are handled correctly, as are those with \1 in it marking where the parameter index goes. Required. * `qualifiers`: If specified, a possibly gappy list of left qualifiers to add to the parsed terms (for compatibility purposes). * `splitchar`: As in `parse_term_with_modifiers()`. The resulting per-term lists will be flattened. * `frob`, `include_mods`, `exclude_mods`, `is_head`, `preserve_splitchar`, `parse_lang_prefix`, `delimiter_key`, `escape_fun`, `unescape_fun`, `pre_normalize_modifiers`: As in `parse_term_with_modifiers()`. Returns a list of objects, suitable for storing as one of the lists in `headdata.inflections` (once a label is added), where `headdata` is the structure passed to [[Module:headword]]. ]==] function export.parse_term_list_with_modifiers(data) local paramname, forms = data.paramname, data.forms local qualifiers = data.qualifiers local first, restpref if type(paramname) == "table" then first = paramname[1] restpref = paramname[2] else first = paramname restpref = paramname end local terms = {} data = shallow_copy(data) for i, val in ipairs(forms) do data.paramname = i == 1 and first or type(restpref) == "number" and restpref + i - 1 or restpref:find("\1", nil, true) and restpref:gsub("\1", tostring(i)) or restpref .. i data.val = val local parsed = export.parse_term_with_modifiers(data) if qualifiers and qualifiers[i] then if data.splitchar then for _, term in ipairs(parsed) do term.q = {qualifiers[i]} end else parsed.q = {qualifiers[i]} end end if data.splitchar then extend(terms, parsed) else terms[i] = parsed end end return terms end --[==[ Construct a link to [[Appendix:Glossary]] for `entry`. If `text` is specified, it is the display text; otherwise, `entry` is used. ]==] function export.glossary_link(entry, text) text = text or entry return "[[Phụ lục:Từ điển thuật ngữ#" .. entry .. "|" .. text .. "]]" end function export.replace_glossary_links_in_label(label) if label:find("<<", nil, true) then label = label:gsub("<<(.-)|(.-)>>", export.glossary_link):gsub("<<(.-)>>", export.glossary_link) end return label end -- If a part of speech ends with one of these, either pluralized or followed by ' forms', chop off whatever precedes. -- Also, if a part of speech is of the form `BASIC_POS FOO forms` e.g. `noun construct forms`, remove the `FOO` -- portion. Note that "phrase" is *NOT* listed here because 'prepositional phrase' and 'postpositional phrase' are not -- types of 'phrase' per the definition of these parts of speech in Wiktionary. local basic_poses = { "Tính từ", "Phó từ", "Từ rút gọn", "Danh từ riêng", "Danh từ", "Phân từ", "Đại từ", "Ký hiệu", "Động từ", } --[==[ Canonicalize and then simplify a part of speech by removing adjectival qualifiers. This converts e.g. `proper noun(s)` -> `nouns`, `comparative adjective(s)` -> `adjectives`, `past participle form(s)` -> `participle forms` and `pronoun possessive form(s)` -> `pronoun forms`. (The one exception is with phrases. In Wiktionary, ''phrase'' really means a clause or similar constituent or occasionally non-constituent, so `prepositional phrases` are not types of `phrases`.) Its purpose is for use in categorization, since generally the simplified part of speech is used in categories other than the one for the part of speech itself. (For example, proper nouns are normally categorized under ` ``lang`` nouns with ...` rather than ` ``lang`` proper nouns with ...`.) The returned part of speech is in plural form. ]==] local function optimized_pattern_escape(pos) if pos:find("-", nil, true) then return pattern_escape(pos) else return pos end end --[==[ Convert a qualified part of speech (e.g. ''proper nouns'', ''past participles'') to its unqualified equivalent (e.g. ''nouns'' or ''participles''). If `preserve_proper_nouns` is given, ''proper nouns'' is left as-is rather than being converted to ''nouns''. If `preserve_lemma_status` is given, the function attempts to return a POS that has the same lemma status (lemma or non-lemma form) as the original POS; thus, ''comparative adjectives'' becomes ''adjective forms'' and ''diminutive nouns'' becomes ''noun forms'' because both are non-lemma forms. If `preserve_lemma_status` is not given, the function simply chops off the qualifiers, converting e.g. ''comparative adjectives'' to ''adjectives'' even though this changes the lemma status of the POS. ]==] function export.simplify_pos(pos, preserve_lemma_status, preserve_proper_nouns) -- This allows for both singular and plural parts of speech in 'pos'. local plpos = require(headword_module).canonicalize_pos(pos) for _, basic_pos in ipairs(basic_poses) do if basic_pos ~= "Danh từ riêng" or preserve_proper_nouns then if plpos == "Biến thể hình thái " .. basic_pos then -- So 'proper noun forms' doesn't get converted to 'noun forms' in the next round return plpos end local basic_pos_pattern = optimized_pattern_escape(basic_pos) if plpos:find(("^Biến thể hình thái %s .*.$"):format(basic_pos_pattern)) then return "Biến thể hình thái " .. basic_pos end if plpos:find(("^.* %s forms$"):format(basic_pos_pattern)) then return basic_pos .. " forms" end local pl_basic_pos = require(headword_module).pluralize_pos(basic_pos) if plpos == pl_basic_pos then -- So 'proper nouns' doesn't get converted to 'nouns' in the next round return plpos end local pl_basic_pos_pattern = optimized_pattern_escape(pl_basic_pos) if plpos:find(("^.* %s$"):format(pl_basic_pos_pattern)) then if preserve_lemma_status then local lemma_status = require(headword_module).pos_lemma_or_nonlemma(plpos) if lemma_status == "non-lemma form" then return "Biến thể hình thái " .. basic_pos end end return pl_basic_pos end end end return plpos end --[==[ Insert a fixed inflection (a label not associated with any inflection values) into an `inflections` field. The `inflections` field will be initialized if needed. `data` is an object with the following fields: * `headdata`: The headword structure passed to [[Module:headword]]. Required. * `inflobj`: The object whose `inflections` field the terms are inserted into. Defaults to `headdata`. Only needs to be set for nested inflections, which are specified for an inflection object rather than the headword data structure as a whole. * `label`: The label that the inflections are given; any parts of the label surrounded in `<<...>>` are linked to the glossary. (If the contents of `<<...>>` contain a `|` in them, they are a two-part link.) Required. * `originating_term`: The term object from which this label is derived. If specified, decorations will be taken from this object. ]==] function export.insert_fixed_inflection(data) local headdata, origterm, label = data.headdata, data.originating_term, data.label local inflobj = data.inflobj or headdata inflobj.inflections = inflobj.inflections or {} if not origterm then insert(inflobj.inflections, { label = export.replace_glossary_links_in_label(label) }) else if origterm.id then error(("It doesn't make sense to pass in an ID '%s' for label '%s' in conjunction with a term value '%s'" ):format(origterm.id, label, origterm.term)) end origterm = shallow_copy(origterm) -- Preserve decorations origterm.term = nil origterm.label = export.replace_glossary_links_in_label(label) insert(inflobj.inflections, origterm) end end --[==[ Insert previously-parsed terms into an `inflections` field. The `inflections` field will be initialized if needed. `data` is an object with the following fields: * `headdata`: The headword structure passed to [[Module:headword]]. Required. * `inflobj`: The object whose `inflections` field the terms are inserted into. Defaults to `headdata`. Only needs to be set for nested inflections, which are specified for an inflection object rather than the headword data structure as a whole. * `terms`: The list of parsed terms. If {nil} or omitted, nothing happens unless `request` is set. * `label`: The label that the inflections are given; any parts of the label surrounded in `<<...>>` are linked to the glossary. (If the contents of `<<...>>` contain a `|` in them, they are a two-part link.) Required. * `fixed_adj_label`: If specified, an adjective used to construct the defaults for the fixed labels specified by `no_label`, `usually_no_label` and `sometimes_label`. Examples are "comparable" for a comparative and "countable" for a plural. * `no_label`: If the term is {"-"} and there are no other terms, insert a fixed label with this value. If `fixed_adj_label` is given, defaults to {"not "} plus the adjective, else {"no "} plus the label. * `usually_no_label`: If the term is {"-"} and there are other terms, insert a fixed label with this value. Defaults to {"usually "} plus the value of `no_label`. * `sometimes_label`: If the term is {"+-"}, insert a fixed label with this value. If `fixed_adj_label` is given, defaults to {"sometimes "} plus the adjective, else {"sometimes with a(n) "} plus the label. * `cats`: List of categories to insert when terms are given that are not {"-"}. Each category is a string naming a full category to insert (including the appropriate language name prefixed). * `no_cats`: List of categories to insert when a term is given as {"-"}. * `usually_no_cats`: List of categories to insert when a term is given as {"-"} and additional terms are specified as well (representing, e.g. for the inflection {"plural"}, a term which usually has no plural but does under some circumstances). If omitted, both the categories in `cats` and `no_cats` are inserted. * `sometimes_cats`: List of categories to insert when a term is given as {"+-"} (indicating that the inflection sometimes exists and sometimes does not, normally depending on the precise sense involved). If omitted, both the categories in `cats` and `no_cats` are inserted (same default as for `usually_no_cats`). * `accel`: If specified, a full accelerator object to add to the inflections. * `request`: If specified and no terms are given, insert a label with a request for inflections to be given. * `enable_auto_translit`: If specified and terms are given, display automatic transliteration of the terms. The return value indicates whether the inflection exists and how many terms are in it. It is an object with the following fields: * `exists`: {"yes"} if one or more terms were specified; {"no"} if the value was given as {"-"}; {"usually no"} if the first value was given as {"-"} but additional terms were supplied; otherwise {nil}, indicating that the status is unspecified. * `numterms`: Number of terms in the inflection. Will be 0 unless `exists` has the value {"yes"} or {"usually no"}. * `terms`: The terms that were inserted. If there are no terms, this is an empty list. * `request`: True if no terms were specified but a term request was inserted into the inflection (because `data.request` was specified). Otherwise {nil}. ]==] function export.insert_inflection(data) local headdata, terms, label = data.headdata, data.terms, data.label local inflobj = data.inflobj or headdata local retval = {} local accel = data.accel if data.accel_form then if accel then error("Internal error: can't specify both data.accel and data.accel_form") end if headdata.heads then local lemmas = {} local lemma_translits = {} for i, headobj in ipairs(headdata.heads) do lemmas[i] = headobj.term if lemmas[i] == "+" then error("Internal error: If you use data.accel_form, you should have resolved all occurrences of + in heads appropriately") end lemma_translits[i] = headobj.tr end accel = { lemma = lemmas, lemma_translit = lemma_translits, form = data.accel_form, } else accel = { form = data.accel_form, } end end local function insert_cats(cats) for _, cat in ipairs(cats) do insert(headdata.categories, cat) end end if terms and terms[1] then terms = shallow_copy(terms) if terms[1].term == "-" then if terms[2] then export.insert_fixed_inflection { headdata = headdata, inflobj = inflobj, originating_term = terms[1], label = data.usually_no_label or "thường không " .. label, } remove(terms, 1) retval.numterms = #terms retval.exists = "thường không" if data.usually_no_cats then insert_cats(data.usually_no_cats) else if data.no_cats then insert_cats(data.no_cats) end if data.cats then insert_cats(data.cats) end end else export.insert_fixed_inflection { headdata = headdata, inflobj = inflobj, originating_term = terms[1], label = data.no_label or "không " .. label, } retval.numterms = 0 retval.terms = {} retval.exists = "không" if data.no_cats then insert_cats(data.no_cats) end return retval end else retval.numterms = #terms retval.exists = "có" if data.cats then insert_cats(data.cats) end end if data.check_missing then error("Internal error: check_missing support removed; use checkredlinks=true in [[Module:headword]]") end terms.label = export.replace_glossary_links_in_label(label) if accel then terms.accel = accel end terms.enable_auto_translit = data.enable_auto_translit inflobj.inflections = inflobj.inflections or {} insert(inflobj.inflections, terms) retval.terms = terms elseif data.request then inflobj.inflections = inflobj.inflections or {} insert(inflobj.inflections, { label = export.replace_glossary_links_in_label(label), request = true, }) retval.numterms = 0 retval.terms = {} -- retval.exists = nil retval.request = true else retval.numterms = 0 retval.terms = {} -- retval.exists = nil end return retval end --[==[ Parse raw arguments from `forms` for inline modifiers, and insert the resulting terms (which should not require significant additional processing) into `headdata.inflections`. `data` is an object with the following fields: * `forms`: The list of raw values to parse. If {nil} or omitted, nothing happens. * `headdata`: The headword structure passed to [[Module:headword]]. Required. * `paramname`: As in `parse_term_list_with_modifiers()`. Required. * `label`: As in `insert_inflection()`. Required. * `qualifiers`, `frob`, `include_mods`, `exclude_mods`, `is_head`, `splitchar`, `preserve_splitchar`, `delimiter_key`, `escape_fun`, `unescape_fun`, `pre_normalize_modifiers`: As in `parse_term_list_with_modifiers()`. * `accel`: As in `insert_inflection()`. Return value is as in `insert_inflection()`. ]==] function export.parse_and_insert_inflection(data) local forms = data.forms if forms and forms[1] then data = shallow_copy(data) data.forms = forms data.terms = export.parse_term_list_with_modifiers(data) return export.insert_inflection(data) end return { numterms = 0 } end --[==[ Canonicalize a single term or term-like object or a list of either into a list of term-like objects. `abterms` is the term or list to canonicalize, and `field` is the name of the field holding the term (defaulting to {"term"}). This does the minimal work necessary, meaning that the return value may partly or completely share memory with the value passed in. As a special case, if `abterms` is {nil}, {nil} is returned. If `origin` or `originating_term` are specified, add fields `origin` and/or `originating_term` containing the specified value(s) to each resulting term-like object (in this case, the object will be copied a necessary to avoid side-effecting the passed-in objects). `origin` is intended to be a string indicating where the term originated from (e.g. {"default"} if a default value, {"resolve_special"} if originating from a shortcut value such as {"+"}) and `originating_term` is the shortcut term itself, if any. (There is generally no such term for default values.) ]==] function export.canonicalize_termobj_list(abterms, field, origin, originating_term) if abterms == nil then return nil end field = field or "term" if type(abterms) == "string" then return {{[field] = abterms, origin = origin, originating_term = originating_term}} elseif not abterms[1] then if origin ~= nil or originating_term ~= nil then abterms = shallow_copy(abterms) abterms.origin = origin abterms.originating_term = originating_term end return {abterms} else -- Check if already in full list term and return directly if so (unless `origin_val` is given, in which case we -- need to shallow-copy both the list and each term in it). local must_convert = false for _, term in ipairs(abterms) do if type(term) == "string" then must_convert = true break end end if not must_convert then if origin ~= nil or originating_term ~= nil then abterms = shallow_copy(abterms) for i, abterm in ipairs(abterms) do abterms[i] = shallow_copy(abterm) abterms[i].origin = origin abterms[i].originating_term = originating_term end end return abterms end end local retval = {} for _, term in ipairs(abterms) do if type(term) == "string" then insert(retval, {[field] = term, origin = origin, originating_term = originating_term}) else if origin ~= nil or originating_term ~= nil then term = shallow_copy(term) term.origin = origin term.originating_term = originating_term end insert(retval, term) end end return retval end --[==[ Combine two sets of decorations. If either is {nil}, just return the other, and if both are {nil}, return {nil}. ]==] function export.combine_decorations(decs1, decs2) if not decs1 and not decs2 then return nil end if not decs1 then return decs2 end if not decs2 then return decs1 end local combined = shallow_copy(decs1) for _, dec in ipairs(decs2) do insert_if_not(combined, dec) end return combined end function export.combine_qualifiers_or_labels(...) -- FIXME: Đã thêm vào ngày 25 tháng 9 năm 2026. error("Vui lòng dùng combine_decorations") end --[==[ Combine the decorations (qualifiers, labels, references) and ID's of two term objects. `destobj` is the "destination term object" into which the combined properties are written, and `srcobj` is the "source object" into which the properties are merged. `destobj` is side-effected (but the lists inside of `destobj` are not); if this is undesirable, make sure to shallow-copy `destobj` first. If both objects have values for a given decoration, the values of `destobj` come first. If both objects have a value for `id`, the values must match or an error is thrown; otherwise, the resulting value of `id` comes from whichever one is defined. '''NOTE:''' This may not be the correct behavior when deduplicating a list of term objects. See `insert_termobj_combining_duplicates` for a different approach. ]==] function export.combine_termobj_decorations(destobj, srcobj) destobj.q = export.combine_decorations(destobj.q, srcobj.q) destobj.qq = export.combine_decorations(destobj.qq, srcobj.qq) destobj.l = export.combine_decorations(destobj.l, srcobj.l) destobj.ll = export.combine_decorations(destobj.ll, srcobj.ll) destobj.refs = export.combine_decorations(destobj.refs, srcobj.refs) if destobj.id and srcobj.id and destobj.id ~= srcobj.id then -- FIXME: We probably want to pass in an error function error(("Can't specify two different ID's %s and %s when combining objects"):format(srcobj.id, destobj.id)) end destobj.id = destobj.id or srcobj.id return destobj end function export.combine_termobj_qualifiers_labels(...) -- FIXME: Đã thêm vào ngày 25 tháng 9 năm 2026. error("Vui lòng dùng combine_termobj_decorations") end function export.termobj_has_decorations(obj) return obj.q and obj.q[1] or obj.qq and obj.qq[1] or obj.l and obj.l[1] or obj.ll and obj.ll[1] or obj.refs and obj.refs[1] end function export.termobj_has_qualifiers_or_labels(...) -- FIXME: Đã thêm vào ngày 25 tháng 9 năm 2026. error("Vui lòng dùng termobj_has_decorations") end local function one_decoration_equal(prop1, prop2) local prop1_is_nil = not prop1 or not prop1[1] local prop2_is_nil = not prop2 or not prop2[1] if prop1_is_nil and prop2_is_nil then return true end if prop1_is_nil or prop2_is_nil then return false end return deep_equals(prop1, prop2) end function export.termobj_decorations_equal(obj1, obj2) return one_decoration_equal(obj1.q, obj2.q) and one_decoration_equal(obj1.qq, obj2.qq) and one_decoration_equal(obj1.l, obj2.l) and one_decoration_equal(obj1.ll, obj2.ll) and one_decoration_equal(obj1.refs, obj2.refs) and obj1.id == obj2.id end function export.termobj_ancillary_properties_equal(...) -- FIXME: Đã thêm vào ngày 25 tháng 9 năm 2026. error("Vui lòng dùng termobj_decorations_equal") end function export.convert_termobj_to_formobj(termobj) local formobj = { form = termobj.term, translit = termobj.tr, } local footnotes local function mods_to_footnote(mod_prefix, mod_vals) if mod_vals and mod_vals[1] then footnotes = footnotes or {} for _, val in ipairs(mod_vals) do insert(footnotes, "[" .. mod_prefix .. ":" .. val .. "]") end end end mods_to_footnote("q", termobj.q) mods_to_footnote("qq", termobj.qq) mods_to_footnote("l", termobj.l) mods_to_footnote("ll", termobj.ll) mods_to_footnote("ref", termobj.refs) mods_to_footnote("id", termobj.id and {termobj.id} or nil) formobj.footnotes = footnotes return formobj end local recognized_multi_mods = { q = "q", qq = "qq", l = "l", ll = "ll", ref = "refs", } local recognized_single_mods = { id = "id", } function export.add_footnote_to_termobj(termobj, footnote) local stripped_footnote = footnote:match("^%[(.*)%]$") if not stripped_footnote then error("Internal error: Footnote should be surrounded by brackets at this stage: " .. footnote) end local prefix, rest = stripped_footnote:match("^([a-z]+):(.+)$") local field, is_multi if prefix then if recognized_multi_mods[prefix] then field = recognized_multi_mods[prefix] is_multi = true elseif recognized_single_mods[prefix] then field = recognized_single_mods[prefix] is_multi = false end end if not field then rest = stripped_footnote field = "l" is_multi = true end if is_multi then if not termobj[field] then termobj[field] = {} end insert(termobj[field], rest) else if termobj[field] and termobj[field] ~= rest then error(("Không thể đặt hai giá trị của '%s': '%s' và '%s'"):format(field, termobj[field], rest)) end termobj[field] = rest end end function export.convert_formobj_to_termobj(formobj) local termobj = { term = formobj.form, tr = formobj.translit, } if formobj.footnotes then for _, footnote in ipairs(formobj.footnotes) do export.add_footnote_to_termobj(termobj, footnote) end end return termobj end local function extract_termobj_field_modifiers(fieldval) return fieldval:match("^([*+]?)(.*)$") end function export.remove_termobj_field_modifiers(termobj) local function remove_field_modifiers(field) if termobj[field] and termobj[field][1] then local any_field_modifiers = false for _, val in ipairs(termobj[field]) do local field_mods, _ = extract_termobj_field_modifiers(val) if field_mods ~= "" then any_field_modifiers = true break end end local new_field = {} if any_field_modifiers then for _, val in ipairs(termobj[field]) do local _, field_without_mods = extract_termobj_field_modifiers(val) insert_if_not(new_field, field_without_mods) end termobj[field] = new_field end end end remove_field_modifiers("q") remove_field_modifiers("qq") remove_field_modifiers("l") remove_field_modifiers("ll") remove_field_modifiers("refs") end function export.insert_termobj_combining_duplicates(destobjs, termobj) for _, destobj in ipairs(destobjs) do if destobj.term == termobj.term and destobj.tr == termobj.tr then -- Form already present; maybe combine footnotes. local function combine_field_values(field) if termobj[field] and termobj[field][1] then -- Check to see if there are existing values with *; if so, remove them. if destobj[field] and destobj[field][1] then local any_values_with_asterisk = false for _, val in ipairs(destobj[field]) do local field_mods, _ = extract_termobj_field_modifiers(val) if field_mods:find("%*") then any_values_with_asterisk = true break end end if any_values_with_asterisk then local filtered_values = {} for _, val in ipairs(destobj[field]) do local field_mods, _ = extract_termobj_field_modifiers(val) if not field_mods:find("%*") then insert(filtered_values, val) end end if filtered_values[1] then destobj[field] = filtered_values else destobj[field] = nil end end end local any_footnotes_with_plus = false for _, val in ipairs(termobj[field]) do local field_mods, _ = extract_termobj_field_modifiers(val) if field_mods:find("%+") then any_footnotes_with_plus = true break end end if any_footnotes_with_plus then if not destobj[field] then destobj[field] = {} else destobj[field] = shallow_copy(destobj[field]) end for _, val in ipairs(termobj[field]) do local already_seen = false local field_mods, field_without_mods = extract_termobj_field_modifiers(val) if field_mods:find("%+") then for _, existing_val in ipairs(destobj[field]) do local _, existing_field_without_mods = extract_termobj_field_modifiers(existing_val) if existing_field_without_mods == field_without_mods then already_seen = true break end end if not already_seen then insert(destobj[field], val) end end end end end end combine_field_values("q") combine_field_values("qq") combine_field_values("l") combine_field_values("ll") combine_field_values("refs") if destobj.id and termobj.id and destobj.id ~= termobj.id then -- FIXME: We probably want to pass in an error function error(("Can't specify two different ID's %s and %s when combining objects"):format(termobj.id, destobj.id)) end destobj.id = destobj.id or termobj.id return end end insert(destobjs, termobj) end export.allowed_special_indicators = { ["first"] = true, ["first-second"] = true, ["first-last"] = true, ["second"] = true, ["last"] = true, ["each"] = true, ["+"] = true, -- requests the default behavior with preposition handling } --[==[ Check for special indicators (values such as {"+first"} or {"+first-last"} that are used in a `pl`, `f`, etc. argument and indicate how to inflect a multiword term). If `form` is such an indicator, the return value is `form` minus the initial `+` sign; otherwise, if form begins with a `+` sign, an error is thrown; otherwise the return value is nil. ]==] function export.get_special_indicator(form, noerror) if form:find("^%+") then form = form:gsub("^%+", "") if not export.allowed_special_indicators[form] then if noerror then return nil end local indicators = {} for indic, _ in pairs(export.allowed_special_indicators) do insert(indicators, "+" .. indic) end sort(indicators) error("Special inflection indicator beginning with '+' can only be " .. mw.text.listToText(indicators) .. ": +" .. form) end return form end return nil end local function add_endings(bases, endings) local retval = {} if type(bases) ~= "table" then bases = {bases} end if type(endings) ~= "table" then endings = {endings} end for _, base in ipairs(bases) do for _, ending in ipairs(endings) do insert(retval, base .. ending) end end return retval end --[==[ Inflect a possibly multiword or hyphenated term `form` using the function `inflect`, which is a function of one argument that is called on a single word to inflect and should return either the inflected word or a list of inflected words. `special` indicates how to inflect the multiword term and should be e.g. {"first"} to inflect only the first word, {"first-last"} to inflect the first and last words, {"each"} to inflect each word, etc. See `allowed_special_indicators` above for the possibilities. If `special` is `+`, or is omitted and the term is multiword (i.e. containing a space character), and `prepositions` is supplied, the function checks for multiword or hyphenated terms containing the prepositions in `prepositions`, e.g. Italian [[senso di marcia]] or [[medaglia d'oro]] or Portuguese [[tartaruga-do-mar]]. If such a term is found, only the first word is inflected. Otherwise, the default is {"first-last"}. `prepositions` is a list of Lua patterns matching prepositions. The patterns will automatically have the separator character (space or hyphen) added to the left side but not the right side, so they should contain a space character (which will automatically be converted to the appropriate separator) on the right side unless the preposition is joined on the right side with an apostrophe. Examples of preposition patterns for Italian are {"di "}, {"sull'"} and {"d?all[oae] "} (which matches {"dallo "}, {"dalle "}, {"alla "}, etc.). The return value is always either a list of inflected multiword or hyphenated terms, or nil if `special` is omitted and `form` is not multiword. (If `special` is specified and `form` is not multiword or hyphenated, an error results.) ]==] function export.handle_multiword(form, special, inflect, prepositions, sep) sep = sep or form:find(" ") and " " or "%-" local raw_sep = sep == " " and " " or "-" -- Used to add regex version of separator in the replacement portion of ugsub() or :gsub() local sep_replacement = sep == " " and " " or "%%-" -- Given a Lua pattern, replace space with the appropriate separator. local function hack_re(re) if sep == " " then return re end return (re:gsub(" ", sep_replacement)) end if special == "first" then local first, rest = form:match(hack_re("^(.-)( .*)$")) if not first then error("Special indicator 'first' can only be used with a multiword term: " .. form) end return add_endings(inflect(first), rest) elseif special == "second" then local first, second, rest = form:match(hack_re("^([^ ]+ )([^ ]+)( .*)$")) if not first then error("Special indicator 'second' can only be used with a term with three or more words: " .. form) end return add_endings(add_endings({first}, inflect(second)), rest) elseif special == "first-second" then local first, space, second, rest = form:match(hack_re("^([^ ]+)( )([^ ]+)( .*)$")) if not first then error("Special indicator 'first-second' can only be used with a term with three or more words: " .. form) end return add_endings(add_endings(add_endings(inflect(first), space), inflect(second)), rest) elseif special == "each" then local terms = split(form, sep) if #terms < 2 then error("Special indicator 'each' can only be used with a multiword term: " .. form) end for i, term in ipairs(terms) do terms[i] = inflect(term) if i > 1 then terms[i] = add_endings(raw_sep, terms[i]) end end local result = "" for _, term in ipairs(terms) do result = add_endings(result, term) end return result elseif special == "first-last" then local first, middle, last = form:match(hack_re("^(.-)( .* )(.-)$")) if not first then first, middle, last = form:match(hack_re("^(.-)( )(.*)$")) end if not first then error("Special indicator 'first-last' can only be used with a multiword term: " .. form) end return add_endings(add_endings(inflect(first), middle), inflect(last)) elseif special == "last" then local rest, last = form:match(hack_re("^(.* )(.-)$")) if not rest then error("Special indicator 'last' can only be used with a multiword term: " .. form) end return add_endings(rest, inflect(last)) elseif special and special ~= "+" then error("Unrecognized special=" .. special) end -- Only do default behavior if special indicator '+' explicitly given or separator is space; otherwise we will -- break existing behavior with hyphenated words. if (special == "+" or sep == " ") and form:find(sep) then if prepositions then -- check for prepositions in the middle of the word; do it this way so we can handle -- more than one word before the preposition (and usually inflect each word) for _, prep in ipairs(prepositions) do local first, space_prep_rest = umatch(form, hack_re("^(.-)( " .. prep .. ".*)$")) if first then return add_endings(inflect(first), space_prep_rest) end end end -- multiword or hyphenated expressions default to first-last; we need to pass in the separator to avoid -- problems with multiword terms containing hyphens in the individual words return export.handle_multiword(form, "first-last", inflect, prepositions, sep) end return nil end local function link_hyphen_split_component(word, data) if data.link_hyphen_split_component then return data.link_hyphen_split_component(word) else return "[[" .. word .. "]]" end end -- Default function to split a word on apostrophes. Don't split apostrophes at the beginning or end of a word (e.g. -- [['ndrangheta]] or [[po']]). Handle multiple apostrophes correctly, e.g. [[l'altr'ieri]] -> [[l']][altr']][[ieri]]. function export.default_split_apostrophe(word, data) local apostrophe_parts = split(word, "'", true, true) local linked_apostrophe_parts = {} local apostrophes_at_beginning = "" local i = 1 -- Apostrophes at beginning get attached to the first word after (which will always exist but may -- be blank if the word consists only of apostrophes). while i < #apostrophe_parts do -- <, not <=, in case the word consists only of apostrophes local apostrophe_part = apostrophe_parts[i] i = i + 1 if apostrophe_part == "" then apostrophes_at_beginning = apostrophes_at_beginning .. "'" else break end end apostrophe_parts[i] = apostrophes_at_beginning .. apostrophe_parts[i] -- Now, do the remaining parts. A blank part indicates more than one apostrophe in a row; we join -- all of them to the preceding word. while i <= #apostrophe_parts do local apostrophe_part = apostrophe_parts[i] if apostrophe_part == "" then linked_apostrophe_parts[#linked_apostrophe_parts] = linked_apostrophe_parts[#linked_apostrophe_parts] .. "'" elseif i == #apostrophe_parts then insert(linked_apostrophe_parts, apostrophe_part) else insert(linked_apostrophe_parts, apostrophe_part .. "'") end i = i + 1 end for j, tolink in ipairs(linked_apostrophe_parts) do linked_apostrophe_parts[j] = link_hyphen_split_component(tolink, data) end return concat(linked_apostrophe_parts) end --[=[ Auto-add links to a word that should not have spaces but may have hyphens and/or apostrophes. We split off final punctuation, then split on hyphens if `data.split_hyphen` is given, and also split on apostrophes if `data.split_apostrophe` is given. We only split on hyphens if they are in the middle of the word, not at the beginning or end (hyphens at the beginning or end indicate suffixes or prefixes, respectively). `include_hyphen_prefixes`, if given, is a set of prefixes (not including the final hyphen) where we should include the final hyphen in the prefix. Hence, e.g. if "anti" is in the set, a Portuguese word like [[anti-herói]] "anti-hero" will be split [[anti-]][[herói]] (whereas a word like [[código-fonte]] "source code" will be split as [[código]]-[[fonte]]). If `data.split_apostrophe` is specified, we split on apostrophes unless `data.no_split_apostrophe_words` is given and the word is in the specified set, such as French [[c'est]] and [[quelqu'un]]. If `data.split_apostrophe` is true, the default algorithm applies, which splits on all apostrophes except those at the beginning and end of a word (as in Italian [['ndrangheta]] or [[po']]), and includes the apostrophe in the link to its left (so we auto-split French [[l'eau]] as [[l']][[eau]] and [[l'altr'ieri]] as [[l']][altr']][[ieri]]). If `data.split_apostrophe` is specified but not `true`, it should be a function of one argument that does custom apostrophe-splitting. The argument is the word to split, and the return value should be the split and linked word. ]=] local function add_single_word_links(space_word, data, term_has_spaces) local space_word_no_punct, punct local punct_pattern = data.punctuation if punct_pattern and is_callable(punct_pattern) then space_word_no_punct, punct = punct_pattern(space_word) else if punct_pattern == nil then punct_pattern = "[,;:?!]" end space_word_no_punct, punct = umatch(space_word, "^(.*)(" .. punct_pattern .. ")$") end space_word_no_punct = space_word_no_punct or space_word punct = punct or "" local words if space_word_no_punct:sub(1, 1) == "-" or space_word_no_punct:sub(-1) == "-" then -- don't split prefixes and suffixes words = {space_word_no_punct} else local splitter if term_has_spaces then splitter = data.split_hyphen_when_space else splitter = data.split_hyphen_when_no_space end if is_callable(splitter) then words = splitter(space_word_no_punct) if type(words) == "string" then return words .. punct end end end if not words then local split_hyphen if term_has_spaces then split_hyphen = data.split_hyphen_when_space else split_hyphen = data.split_hyphen_when_no_space if split_hyphen == nil then -- default to true; use `false` to avoid this split_hyphen = true end end if split_hyphen then words = split(space_word_no_punct, "-", true, true) else words = {space_word_no_punct} end end local linked_words = {} for j, word in ipairs(words) do if j < #words and data.include_hyphen_prefixes and data.include_hyphen_prefixes[word] then word = "[[" .. word .. "-]]" elseif j > 1 and data.include_hyphen_suffixes and data.include_hyphen_suffixes[word] then word = "[[-" .. word .. "]]" else -- Don't split on apostrophes if the word is in `no_split_apostrophe_words`. if (not data.no_split_apostrophe_words or not data.no_split_apostrophe_words[word]) and data.split_apostrophe and word:find("'", nil, true) then if data.split_apostrophe == true then word = export.default_split_apostrophe(word, data) else -- custom apostrophe splitter/linker word = data.split_apostrophe(word) end elseif word ~= "" then -- avoid -[[]]- (e.g. f--k) word = link_hyphen_split_component(word, data) end if j < #words then word = word .. "-" end end insert(linked_words, word) end return concat(linked_words) .. punct end --[=[ Auto-add links to a multiword term. `data` contains fields customizing how to do this. By default we proceed as follows: (1) If the term already has embedded links in it, they are left unchanged. (2) Otherwise, if there are spaces present, we split on spaces and link each word separately. (3) If a given space-separated component ends in punctuation (defaulting to [,;:?!]), it is separated off, the remainder of the algorithm run, and the punctuation pasted back on. (4) If there are hyphens in a given space-separated component, we may link each hyphenated term separately depending on the settings in `data`. Normally the hyphens are not included in the linked terms, but this can be overridden for specific prefixes and/or suffixes. By default, if there are spaces in the multiword term, we do not link hyphenated components (because of cases like "boire du petit-lait" where "petit-lait" should be linked as a whole), but do so otherwise (e.g. for "avant-avant-hier"); this can overridden for cases like "croyez-le ou non". Cases where only some of the hyphens should be split can always be handled by explicitly specifying the head (e.g. "Nord-Pas-de-Calais" given as head=[[Nord]]-[[Pas-de-Calais]]). (5) If there are apostrophes in a given component, we may link each apostrophe-separated term separately depending on the settings in `data`, including the apostrophe in the link to its left (so we split "de l'eau" as "[[de]] [[l']][[eau]]"). The settings in `data` are as follows: `split_hyphen_when_no_space`: Whether to split on hyphens when the term has no spaces. Defaults to true if set to `nil`. This can be a function of one argument, to implement a custom splitting algorithm for hyphen-separated terms. If this returns [FIXME: FINISH ME ...] If `data.split_apostrophe` is specified, we split on apostrophes unless `data.no_split_apostrophe_words` is given and the word is in the specified set, such as French [[c'est]] and [[quelqu'un]]. If `data.split_apostrophe` is true, the default algorithm applies, which splits on all apostrophes except those at the beginning and end of a word (as in Italian [['ndrangheta]] or [[po']]), and includes the apostrophe in the link to its left (so we auto-split French [[l'eau]] as [[l']][[eau]] and [[l'altr'ieri]] as [[l']][altr']][[ieri]]). If `data.split_apostrophe` is specified but not `true`, it should be a function of one argument that does custom apostrophe-splitting. The argument is the word to split, and the return value should be the split and linked word. We don't always split on hyphens because of cases like "boire du petit-lait" where "petit-lait" should be linked as a whole, but provide the option to do it for cases like "croyez-le ou non". If there's no space, however, then it makes sense to split on hyphens by `no_split_apostrophe_words` and `include_hyphen_prefixes` allow for special-case handling of particular words and are as described in the comment above add_single_word_links(). ]=] function export.add_links_to_multiword_term(term, data) if term:match("[%[%]]") then return term end local words = split(term, " ", true, true) local term_has_spaces = #words > 1 local linked_words = {} for _, word in ipairs(words) do insert(linked_words, add_single_word_links(word, data, term_has_spaces)) end local retval = concat(linked_words, " ") -- If we ended up with a single link consisting of the entire term, -- remove the link. return retval:match("^%[%[([^%[%]]*)%]%]$") or retval end local function canonicalize_begin_end_spec(spec) local from, to = spec:match("^(.-):(.*)$") if not from then from = spec to = "" end return from, to end --[==[ Given a `linked_term` that is the output of add_links_to_multiword_term(), apply modifications as given in `modifier_spec` to change the link destination of subterms (normally single-word non-lemma forms; sometimes collections of adjacent words). This is usually used to link non-lemma forms to their corresponding lemma, but can also be used to replace a span of adjacent separately-linked words to a single multiword lemma. The format of `modifier_spec` is one or more semicolon-separated subterm specs, where each such spec is of the form SUBTERM:DEST, where SUBTERM is one or more words in the `linked_term` but without brackets in them, and DEST is the corresponding link destination to link the subterm to. Any occurrence of ~ in DEST is replaced with SUBTERM. Alternatively, a single modifier spec can be of the form BEGIN[FROM:TO], which is equivalent to writing BEGINFROM:BEGINTO (see example below). For example, given the source phrase [[il bue che dice cornuto all'asino]] "the pot calling the kettle black" (literally "the ox that calls the donkey horned/cuckolded"), the result of calling add_links_to_multiword_term() is [[il]] [[bue]] [[che]] [[dice]] [[cornuto]] [[all']][[asino]]. With a modifier_spec of 'dice:dire', the result is [[il]] [[bue]] [[che]] [[dire|dice]] [[cornuto]] [[all']][[asino]]. Here, based on the modifier spec, the non-lemma form [[dice]] is replaced with the two-part link [[dire|dice]]. Another example: given the source phrase [[chi semina vento raccoglie tempesta]] "sow the wind, reap the whirlwind" (literally (he) who sows wind gathers [the] tempest"). The result of calling add_links_to_multiword_term() is [[chi]] [[semina]] [[vento]] [[raccoglie]] [[tempesta]], and with a modifier_spec of 'semina:~re; raccoglie:~re', the result is [[chi]] [[seminare|semina]] [[vento]] [[raccogliere|raccoglie]] [[tempesta]]. Here we use the ~ notation to stand for the non-lemma form in the destination link. A more complex example is [[se non hai altri moccoli puoi andare a letto al buio]], which becomes [[se]] [[non]] [[hai]] [[altri]] [[moccoli]] [[puoi]] [[andare]] [[a]] [[letto]] [[al]] [[buio]] after calling add_links_to_multiword_term(). With the following modifier_spec: 'hai:avere; altr[i:o]; moccol[i:o]; puoi: potere; andare a letto:~; al buio:~', the result of applying the spec is [[se]] [[non]] [[avere|hai]] [[altro|altri]] [[moccolo|moccoli]] [[potere|puoi]] [[andare a letto]] [[al buio]]. Here, we rely on the alternative notation mentioned above for e.g. 'altr[i:o]', which is equivalent to 'altri:altro', and link multiword subterms using e.g. 'andare a letto:~'. (The code knows how to handle multiword subexpressions properly, and if the link text and destination are the same, only a single-part link is formed.) ]==] function export.apply_link_modifiers(linked_term, modifier_spec, lang) local split_modspecs = split(modifier_spec, "%s*;%s*") for j, modspec in ipairs(split_modspecs) do local id if modspec:find("<") then local rest rest, id = modspec:match("^(.*)<id:(.-)>$") if rest then modspec = rest end end local subterm, dest, otherlang local begin_spec, rest, end_spec = modspec:match("^%[(.-)%]([^:]*)%[(.-)%]$") if begin_spec then local begin_from, begin_to = canonicalize_begin_end_spec(begin_spec) local end_from, end_to = canonicalize_begin_end_spec(end_spec) subterm = begin_from .. rest .. end_from dest = begin_to .. rest .. end_to end if not subterm then rest, end_spec = modspec:match("^([^:]*)%[(.-)%]$") if rest then local end_from, end_to = canonicalize_begin_end_spec(end_spec) subterm = rest .. end_from dest = rest .. end_to end end if not subterm then begin_spec, rest = modspec:match("^%[(.-)%]([^:]*)$") if begin_spec then local begin_from, begin_to = canonicalize_begin_end_spec(begin_spec) subterm = begin_from .. rest dest = begin_to .. rest end end if not subterm then subterm, dest = modspec:match("^(.-)%s*:%s*(.*)$") if subterm and subterm ~= "^" and subterm ~= "$" then local langdest -- Parse off an initial language code (e.g. 'en:Higgs', 'la:minūtia' or 'grc:σκατός'). Also handle -- Wikipedia prefixes ('w:Abatemarco' or 'w:it:Colle Val d'Elsa'). otherlang, langdest = dest:match("^([A-Za-z0-9._-]+):([^ ].*)$") if otherlang == "w" then local foreign_wikipedia, foreign_term = langdest:match("^([A-Za-z0-9._-]+):([^ ].*)$") if foreign_wikipedia then otherlang = otherlang .. ":" .. foreign_wikipedia langdest = foreign_term end dest = ("%s:%s"):format(otherlang, langdest) otherlang = nil elseif otherlang then otherlang = get_lang_by_code(otherlang, true, "allow etym") dest = langdest end end end if not subterm then if modspec == "?" or modspec == "!" then subterm = "$" dest = modspec elseif modspec == "..." or modspec == "...?" then subterm = "$" dest = " " .. modspec elseif modspec:find("^[A-Z]$") then -- X, Y, etc. by themselves are unlinked, to help with snowclones subterm = modspec dest = "_" else subterm = modspec dest = "~" end end if subterm == "^" then linked_term = dest:gsub("_", " ") .. linked_term elseif subterm == "$" then linked_term = linked_term .. dest:gsub("_", " ") else if subterm:find("[", nil, true) then error(("Subterm '%s' in modifier spec '%s' cannot have brackets in it"):format( escape_wikicode(subterm), escape_wikicode(modspec))) end local escaped_subterm = pattern_escape(subterm) local subterm_re = "%[%[" .. escaped_subterm:gsub("(%%?[ ',%-])", "%%]*%1%%[*") .. "%]%]" local expanded_dest if dest:find("~", nil, true) then expanded_dest = dest:gsub("~", replacement_escape(subterm)) else expanded_dest = dest end if otherlang then expanded_dest = expanded_dest .. "#" .. otherlang:getCanonicalName() end local subterm_replacement if expanded_dest == "_" then subterm_replacement = subterm if id then error("Can't supply <id:...> with an unlinked subterm") end if otherlang then error("Can't supply prefixed language with an unlinked subterm") end elseif id or otherlang then if id and expanded_dest:find("[", nil, true) then error("Can't supply <id:...> with destination with embedded brackets") end subterm_replacement = require(links_module).language_link { lang = otherlang or lang, term = expanded_dest, alt = subterm, id = id, } elseif expanded_dest:find("[", nil, true) then -- Use the destination directly if it has brackets in it (e.g. to put brackets around parts of a word). subterm_replacement = expanded_dest elseif expanded_dest == subterm then subterm_replacement = "[[" .. subterm .. "]]" else subterm_replacement = "[[" .. expanded_dest .. "|" .. subterm .. "]]" end local escaped_subterm_replacement = replacement_escape(subterm_replacement) local replaced_linked_term = ugsub(linked_term, subterm_re, escaped_subterm_replacement) if replaced_linked_term == linked_term then mw.log(("Attempted to replace %s with %s in %s"):format(subterm_re, escaped_subterm_replacement, linked_term)) error(("Subterm '%s' could not be located in %slinked expression %s, or replacement same as subterm"):format( subterm, j > 1 and "intermediate " or "", escape_wikicode(linked_term))) else linked_term = replaced_linked_term end end end return linked_term end local inflection_to_cats_and_label = { plural = { filter_plpos = function(plpos) -- plurals also occur with determiners, adjectives etc. and we don't want to generate categories like -- 'countable determiners', 'countable adjectives', etc. Note that the passed-in `plpos` has `proper nouns` -- converted to `nouns`. return plpos == "Danh từ" end, cats = {"{plpos} không đếm được"}, no_cats = {"{plpos} không đếm được"}, no_label = "<<không đếm được>>", sometimes_label = "<<đếm được>> và <<không đếm được>>", }, comparative = { cats = {"{plpos} so sánh được"}, no_cats = {"{plpos} không so sánh được"}, fixed_adj_label = "so sánh được", }, ["female equivalent"] = { cats = {"{plpos} with other-gender equivalents"}, }, ["male equivalent"] = { cats = {"{plpos} with other-gender equivalents"}, }, } --[=[ Validate the items in `items` against the list or set of valid items in `valid_items`. If `field` is given, fetch the item to check from that-named field of each object in `items`; otherwise use the items in `items` directly. If an error occurs, `item_type` specifies the type of item to mention in the error message, which will also list the allowed items (either taken directly from `valid_items` if a list, or from the sorted keys if a set). ]=] local function validate_items(data) local items, field, valid_items, item_type = data.items, data.field, data.valid_items, data.item_type local valid_set if valid_items[1] then valid_set = list_to_set(valid_items) else valid_set = valid_items end for _, item in ipairs(items) do if field then item = item[field] end if not valid_set[item] then local valid_list if valid_items[1] then valid_list = valid_items else valid_list = {} for valid_item, _ in pairs(valid_items) do insert(valid_list, valid_item) end table.sort(valid_list) end error(("Invalid %s: %s; expected one of %s"):format(item_type, item, mw.text.listToText(valid_list))) end end end function export.has_plural_gender(genders) local saw_p, saw_non_p for _, val in ipairs(genders) do local g = val.spec if g:find("p$") then saw_p = true elseif g ~= "?" then saw_non_p = true end end return saw_p, saw_non_p end function export.is_plurale_tantum(genders) local saw_p, saw_non_p = export.has_plural_gender(genders) return saw_p and not saw_non_p end local Headdata = {} function Headdata:get_simplified_plpos() return export.simplify_pos(self.pos_category) end --[==[ Canonicalize a category. The category string will have the full language name (i.e. the name of the L2 language under which an entry is inserted, which may a parent language if the language in question is an etymology-only language) prepended to it, and any occurrences of `{plpos}` in the string replaced with the actual plural part of speech (with some canonicalization; specifically, `proper nouns` is converted to `nouns` when replacing `{plpos}`). To specify a full category and not have the language name prepended to it, precede it with {"Category:"}, which will be removed. ]==] function Headdata:canonicalize_category(category) if category:find("{plpos}") then local plpos = self:get_simplified_plpos() category = category:gsub("{plpos}", plpos) end if category:find("^Category:") then return (category:gsub("^Category:", "")) else return self.langfullname .. " " .. category end end --[==[ Canonicalize a list of categories according to the process described in `Headdata:canonicalize_category`. This simply loops over each category in `categories` and calls `Headdata:canonicalize_category` on each one. ]==] function Headdata:canonicalize_categories(categories) if not categories then return categories end local canon_cats = {} for _, cat in ipairs(categories) do insert(canon_cats, self:canonicalize_category(cat)) end return canon_cats end --[==[ Insert a category into the `categories` list in the headword `data` structure. `category` is normally a string naming the category, which will have the full language name prepended to it and any occurrences of `{plpos}` in the string replaced with the actual plural part of speech (with some canonicalization; specifically, `proper nouns` is converted to `nouns` when replacing `{plpos}`). To specify a full category and not have the language name prepended to it, precede it with {"Category:"}. ]==] function Headdata:insert_category(category) insert(self.categories, self:canonicalize_category(category)) end --[==[ Validate the genders in `genders` (a list of gender spec objects, as produced by {type = "genders"} in [[Module:parameters]] and accepted by [[Module:gender and number]]), checking that all specified genders are in the list given in `valid_genders`. Optional `props` controls how the validation happens. In particular, unless `props.no_augment` is given, then for any gender beginning with `m`, if a corresponding gender beginning with `f` occurs, analogous genders beginning with `mf`, `mfbysense` and `mfequiv` are also allowed. For example, if `m-d` (masculine dual) and `f-d` (feminine dual) both occur, genders `mf-d`, `mfbysense-d` and `mfequiv-d` are also allowed. If a disallowed gender is given, an error occurs, giving the disallowed gender along with the list of all allowed genders. ]==] function Headdata:validate_genders(genders, valid_genders, props) if not genders then return end props = props or {} local gender_type, no_augment = props.gender_type, props.no_augment gender_type = gender_type or "headword" local valid_gender_set = list_to_set(valid_genders) local augmented_gender_set if no_augment then augmented_gender_set = valid_gender_set else augmented_gender_set = {} for g, _ in pairs(valid_gender_set) do augmented_gender_set[g] = true if g:find("^m") and not g:find("^mf") and valid_gender_set[g:gsub("^m", "f")] then augmented_gender_set[g:gsub("^m", "mf")] = true augmented_gender_set[g:gsub("^m", "mfbysense")] = true augmented_gender_set[g:gsub("^m", "mfequiv")] = true end end end validate_items { items = genders, field = "spec", valid_items = augmented_gender_set, item_type = ("%s gender"):format(gender_type), } end --[==[ Parse an inflection specified in `field`, the name of a parameter holding an inflection. If the parameter is numeric, the field should be given as a number (as with the `params` structure passed to [[Module:parameters]]), not a string containing the representation of a number. The field can specify multiple comma-separated terms, and each term can have associated inline modifiers that will be parsed (unless there is top-level HTML in the parameter, i.e. HTML not contained inside an inline modifier, e.g. as may be generated by using {{tl|l}} or similar template inside a parameter). This is a wrapper around the top-level `parse_term_with_modifiers()` function. `props` is an optional structure containing additional properties, including all additional properties documented for the top-level `parse_term_with_modifiers()` function. If the parameter in `field` is unspecified, the return value of this function will be an empty list, not {nil}, so it is always safe to iterate over the return value. By default, the allowed modifiers are the same as for `parse_term_with_modifiers()`, except that (normally) the `<tr:...>` modifier will be allowed if `include_tr` was specified in the original call to `process_headword()`; likewise for the `<ts:...>` modifier if `include_ts` was specified and the `<sc:...>` modifier if `include_sc` was specified. If If you pass in your own `include_mods` list of additional allowed modifiers, it will (normally) automatically be augmented with {"tr"}, {"ts"} and/or {"sc"} if `include_tr`, `include_ts` and/or `include_sc` was specified when calling `process_headword()`. To disable automatic augmentation of these modifiers (whether or not you specify an `include_mods` property), specify {no_augment_include_mods = true} in `props`. ]==] function Headdata:parse_inflection(field, props) local val = self.process_props.args[field] if not val then return {} end props = props and shallow_copy(props) or {} local include_mods = props.include_mods local calldata = self.process_props.calldata if not props.no_augment_include_mods and (calldata.include_tr or calldata.include_ts or calldata.include_sc) then include_mods = include_mods and shallow_copy(include_mods) or {} if calldata.include_tr then insert_if_not(include_mods, "tr") end if calldata.include_ts then insert_if_not(include_mods, "ts") end if calldata.include_sc then insert_if_not(include_mods, "sc") end end props.val = val props.paramname = field props.splitchar = props.splitchar or "," props.include_mods = include_mods local orig_frob = props.frob local function convert_tilde_to_pagename(term) if orig_frob then term = orig_frob(term) end if not term:find("~", nil, true) then return term end term = term:gsub("\\~", "\1"):gsub("~", replacement_escape(self.pagename)):gsub("\1", "~") return term end props.frob = convert_tilde_to_pagename return export.parse_term_with_modifiers(props) or {} end --[==[ Insert previously-parsed terms into the `inflections` of the headword `data` structure. This is a wrapper around the top-level `insert_inflection()` function. `terms` is the list of parsed terms. (If {nil}, nothing happens unless `request` is set in `props`.) `label` is the the label that the inflections are given; any parts of the label surrounded in `<<...>>` are linked to the glossary. (If the contents of `<<...>>` contain a `|` in them, they are a two-part link.) `props` is an optional structure containing additional properties, including all additional properties documented for the top-level `insert_inflection()` function. Unless `no_auto_cats` is given in `props`, certain labels automatically trigger the insertion of additional categories in specific circumstances. This is controlled by the `inflection_to_cats_and_label` structure in [[Module:headword utilities]]. For example, if the part of speech is {"nouns"} or {"proper nouns"} and the label (after removing any links and `<<...>>` glossary specs) is {"plural"}, an additional category <code><var>lang</var> countable nouns</code> will be added if a plural value is given (i.e. the value is not {"-"}). If the value is {"-"} (which indicates that there is no plural and triggers the insertion of the fixed inflection label {"no plural"}), <code><var>lang</var> uncountable nouns</code> will be inserted instead, and if both {"-"} and a value are given (which triggers the insertion of the {"usually no plural"} fixed inflection label), both categories are added. Similar categories are inserted when a comparative is given (with a label {"comparative"}), and if the label is {"female equivalent"} or {"male equivalent"} and the value is not {"-"}, a category such as <code><var>lang</var> nouns with other-gender equivalents</code> is inserted. ]==] function Headdata:insert_inflection(terms, label, props) props = props and shallow_copy(props) or {} if not props.no_auto_cats then local bare_label = props.label_for_cats_and_modes if not bare_label then bare_label = label if bare_label:find("[[", nil, true) then bare_label = require(links_module).remove_links(bare_label) end if bare_label:find("<<", nil, true) then bare_label = bare_label:gsub("<<.-|(.-)>>", "%1"):gsub("<<(.-)>>", "%1") end end local cats = inflection_to_cats_and_label[bare_label] if cats then if not cats.filter_plpos or cats.filter_plpos(self:get_simplified_plpos()) then if props.cats == nil then props.cats = self:canonicalize_categories(cats.cats) end if props.usually_no_cats == nil then props.usually_no_cats = self:canonicalize_categories(cats.usually_no_cats) end if props.no_cats == nil then props.no_cats = self:canonicalize_categories(cats.no_cats) end end end end props.headdata = self props.terms = terms props.label = label return export.insert_inflection(props) end --[==[ Insert a "fixed" inflection (a label without associated values) into the `inflections` table of the headword `data` structure, labeled according to `label` (which can have glossary links in it specified using `<<...>>`, exactly as for `:insert_inflection()`). An example label (from {{tl|mn-noun}} in [[Module:mn-headword]]) is {"hidden-g declension"}, specifying that the noun belongs to the hidden-''g'' declension. This is a direct wrapper around the top-level function `insert_fixed_inflection()`; see that function for more details on optional `props`. ]==] function Headdata:insert_fixed_inflection(label, props) props = props and shallow_copy(props) or {} props.headdata = self props.label = label export.insert_fixed_inflection(props) end --[==[ Parse the inflection(s) specified in `field` and insert them into the `inflections` table of the headword `data` structure, labeled according to `label`. This is equivalent to calling {terms = data:parse_inflection(field, props)} followed by {return data:insert_inflection(terms, label, props)} and behaves the same as the combination of those two functions. See their documentation for more details. ]==] function Headdata:parse_and_insert_inflection(field, label, props) local terms = self:parse_inflection(field, props) return self:insert_inflection(terms, label, props) end --[==[ Generate an inflection that may be specified explicitly or defaulted (which involves looping over the specified or defaulted heads and determining the script of each one, since the formation of the default depends on the script). `data` is the data object passed into the POS handler. `terms` is the list of terms to process. Those where the term itself is not `+` will be returned unchanged, while those where the term is `+` will be handled by generating the appropriate inflections from the headwords using `make_inflection` (which is passed three arguments, `head`, `tr` and `sccode`, i.e. the script code of `head`) and should return two values, term and translit, either of which can be nil. A nil head will be ignored, and otherwise the decorations specified on the `+` term will be combined with the decorations specified on the head. The return value is a list of inflections where no requests for the default inflection remain. ]==] function Headdata:resolve_special(terms, handle_special, props) props = props or {} local infls = {} local is_special = props.is_special or function(_data, infl) return infl.term == "+" end for _, termobj in ipairs(terms) do if not is_special(self, termobj) then insert(infls, termobj) else for _, headobj in ipairs(self.heads) do local head = headobj.term or self.pagename local head_no_links if props.with_links then head = head:find("%[") and head or require(headword_module).add_multiword_links(head, not headobj.term) head_no_links = require(links_module).remove_links(head) else head = require(links_module).remove_links(head) head_no_links = head end local newterms = handle_special { headdata = self, head = head, head_no_links = head_no_links, tr = headobj.tr, infl = termobj, sc = self.lang:findBestScript(head_no_links), } if newterms then newterms = export.canonicalize_termobj_list(newterms, "term", "resolve_special", termobj) for _, newterm in ipairs(newterms) do if not props.no_combine_handle_special_retval_with_origin then export.combine_termobj_decorations(newterm, termobj) end if not props.no_combine_handle_special_retval_with_head then export.combine_termobj_decorations(newterm, headobj) end insert(infls, newterm) end end end end end return infls end --[==[ Add the current page to a tracking page named `Wiktionary:Tracking/``lang``-headword/``page```, where ``lang`` is the language code of the current language. For example, if the current language is `mak` and `page` is {"redundant-lon"}, the current page will get added to the tracking page `Wiktionary:Tracking/mak-headword/redundant-lon`. All pages added to that tracking page can be seen by going to [[Special:WhatLinksHere/Wiktionary:Tracking/mak-headword/redundant-lon]]. This is typically used to track issues occurring in user-specified parameters that do not rise to the level of errors (e.g. redundant parameters, deprecated usages or other dispreferred values). ]==] function Headdata:track(page) return require(debug_track_module)(self.langcode .. "-headword/" .. page) end local boolean_param = {type = "boolean"} --[==[ Process an arbitrary headword in an arbitrary language, handling generic and language-specific arguments and calling `full_headword()` in [[Module:headword]]. This is intended for use in implementing headword modules (e.g. [[Module:uz-headword]] for Uzbek, [[Module:mn-headword]] for Uzbek, [[Module:gsw-headword]] for Alemannic German, etc.) and provides a general implementation of such modules. On input, `data` is an object with the following fields: * `lang`: The language object of the language being handled. '''Required.''' Use the special value {false} to indicate that the language is specified by the user in {{para|1}}. * `frame`: The frame object passed into the `show()` function of your module, which implements headword-handling for all parts of speech in the module, including a generic POS-handling template (e.g. {{tl|uz-head}} or {{tl|mn-head}}), which allows arbitrary parts of speech to be handled. '''Required.''' * `pos_functions`: A table listing, for each part of speech requiring special handling, the extra parameters (if any) that the part of speech accepts, along with how to handle them. See the examples below. '''Required.''' * `validate_lang`: If {lang = true} is specified, this is a function of one argument (a language object, based on the language specified in {{para|1}}) that should throw an error if the language object is disallowed. If omitted, all languages are allowed. * `numbered_head`: If true, explicit headwords are specified in a numbered param instead of in {{para|head}}. The param used is usually {{para|1}}, but is {{para|2}} for generic POS templates such as {{tl|mn-head}} or for POS-specific templates when {lang = true} is specified (e.g. {{tl|arb-noun}}), and is {{para|3}} for generic POS templates when {lang = true} is spcified (e.g. {{tl|arb-head}}). * `include_tr`: If true, allow explicit transliterations to be specified. The transliteration(s) for the headword(s) themselves is/are specified in {{para|tr}} or through the {{cd|<tr:...>}} inline modifier on headwords, and transliterations of inflections are specified through the {{cd|<tr:...>}} inline modifier. This should generally be given when a headword for the language may be in a script other than Latin. * `include_ts`: If true, allow explicit transcriptions to be specified. The transcription(s) for the headword(s) themselves is/are specified in {{para|ts}} or through the {{cd|<ts:...>}} inline modifier on headwords, and transcriptions of inflections are specified through the {{cd|<ts:...>}} inline modifier. This should generally only be given for certain languages where the spelling is radically different from the pronunciation (e.g. in cuneiform languages such as Hittite and Akkadian, and potentially in Tibetan), and represents a pronunciation-based rendering (usually not direct IPA). * `include_sc`: If true, allow an explicit script code to be specified. The overall script code for the headword(s) themselves can be specified using {{para|sc}}, and per-headword or per-inflection script codes are specified using the {{cd|<sc:...>}} inline modifier. This should generally be given when a language supports multiple scripts. * `infls`: An inflections structure specifying extra generic parameters that apply to all parts of speech and how to handle them. The format is the same as for the `infls` structure in `pos_functions`. * `augment_params`: A callback function to add extra generic parameters, or modify existing generic parameters in the `params` structure; but in general, extra generic parameters should be added through the `infls` structure instead. This callback should not be used to add part-of-speech-specific parameters; those are handled through the appropriate setting in `pos_functions`. It is passed two single arguments, the `headdata` object and the `params` table to be augmented. See below for extra fields stored in the `process_props` structure of the `headdata` object. This function is called after initializing the `params` table and processing the overall `infls` structure, but just before adding part-of-speech-specific parameters (from `pos_functions`) to `params`. Thus, it can override any generic parameters but may itself be overridden by a part-of-speech-specific parameter. * `augment_headdata`: A callback function to modify the `headdata` object passed to `full_headword()` in [[Module:headword]]. This should not be used to for part-of-speech-specific parameter handling; this is handled through the appropriate setting in `pos_functions`. It is passed a single argument, the `headdata` object, as for `augment_params`; but the `process_props` structure and other fields will be more filled out, as this callback is called later. This can be used, for example, to override the value of a generic setting in `headdata` (e.g. [[Module:uz-headword]] uses this to mark non-Latin terms as variant forms by setting `headdata.var`, being careful not to override a value already set by the user). This function is called after initializing the `headdata` table with all information taken from generic parameters and processing generic parameters specified in the overall `infls` structure, and just before processing the appropriate part-of-speech-specific `infls` structure in `pos_functions` (which in turn is followed by any handler function in `pos_functions`). Thus, it can override any value set during generic parameter processing but may itself be overridden by a part-of-speech-specific parameter or handler. * `force_cat`: If true, add the headword to the appropriate categories even on non-mainspace pages. This can be used for testing category handling in sample template calls on userspace test pages or template documentation pages. It should not be set in production code. * `enable_auto_translit`: If true, turn on automatic transliteration of inflections at a global level (i.e. applying to all inflections). This has no effect on headwords, which are automatically transliterated by default if in a non-Latin script and automatic transliteration is available for the language. You can also set this value for particular inflections in the `insert_inflection()` function. The `headdata` headword data structure has an extra field in it called `process_props` that is specific to the `process_headword()` function, containing various extra properies. As the operation of `process_headword()` proceeds, this object gets filled out with more fields. For example, once parameter parsing happens, the resulting values are available in the `args` field of `process_props`. The following fields are found in `process_props` (note that `pos_category`, the canonicalized plural part of speech of the headword being processed, is *not* present here; it's directly on `headdata`): * `namespace`: The name of the current namespace; an empty string for the mainspace. This references the namespace of the actual page and isn't affected by the {{para|pagename}} parameter. * `indexing_pos`: The canonicalized part of speech of the headword used to index into `pos_functions`. This is the same as `poscat` for specific part-of-speech templates such as {{tl|uz-noun}}, but has the value {"head"} for generic part-of-speech templates such as {{tl|uz-head}}. (Note that `poscat` is directly available on `headdata`.) * `generic_pos_template`: True if a generic POS templates like {{tl|uz-head}} or {{tl|mn-head}} was used. (This is signaled by omitting the invocation parameter {{para|1}} to `process_headword`.) * `lang_in_1`: True if the language code is to be fetched from {{para|1}}. * `pos_param`: The parameter holding the part of speech, if a generic POS tempalte like {{tl|mn-head}} is being processed (i.e. `generic_pos_template` is set). In such a case, it will have the value of {1} or {2}, depending on whether the language code is being fetched from {{para|1}} (see `lang_in_1`). Otherwise it will be {nil}. * `head_param`: The parameter holding the explicit headword. If `numbered_head` was specified (as for Mongolian headword templates), this has the value {1}, {2} or {3} depending on whether the language code is being fetched from {{para|1}} (see `lang_in_1`) and whether a generic POS template like {{tl|mn-head}} is being processed (see `generic_pos_template`). Otherwise, it has the value {"head"}. Also see the `lang` and `numbered_head` properties in the `data` structure sent to `process_headword()`. * `is_suffix`: True if the current term is a suffix. This is set when processing the `suffix`, `nosuffix` and `clitic` parameters; it is always {false} beforehand (i.e. during `augment_params` and processing of the general `infls` structure). * `insert_specs`: This is a table mapping parameter names to the return value of `Headdata:insert_inflection()`, filled out as parameter values are processed. This lets a given parameter processing function in `infls` gain access to the result of calling `insert_inflection()` on previous parameters (which indicates the number of items inserted as well as whether `-` was specified). The `pos_functions` table contains an entry for each part of speech needing special handling, where the key is the canonical plural part of speech (e.g. {"adverbs"} or {"proper nouns"}). The value associated with each key is a table normally containing a field `infls`, listing the extra part-of-speech-specific inflection and other parameters along with how to handle them. The specs in `infls` are used in three ways: # to augment the `params` object passed to the `process()` function in [[Module:parameters]], specifying how to parse the appropriate inflectional parameters; # to specify how to process any inflectional parameters given and insert them into the `headdata` object passed to `full_headword()` in [[Module:headword]]; # to generate appropriate documentation for the parameters and other changes made by the headword template (e.g. inserting categories). Alternatively, you can separately control the augmentation of the `params` object and the procesing of the resulting arguments. This is done by specifying two fields in place of `infls`, named `params` and `func`. `params` is a table containing extra parameters to add to the overall `params` object passed to the `process()` function in [[Module:parameters]]. `func` is a function of two arguments, normally called `data` (the headword data structure `headdata`) and `args` (the processed arguments table). However, this alternative method is not normally recommended because it leads to duplication between the `params and `func` fields and the documentation, which must be manually specified. A simple example, as used to handle pronouns for Turoyo, is { local valid_genders = {"m", "f", "m-p", "f-p", "p", "?"} pos_functions["pronouns"] = { infls = { {2, type = "genders", validate = valid_genders}, {"f", label = "feminine"}, {"pl", label = "plural"}, }, } } The equivalent using `params` and `func` is { local valid_genders = {"m", "f", "m-p", "f-p", "p", "?"} pos_functions["pronouns"] = { params = { [2] = {type = "genders"}, f = true, pl = true, }, func = function(data, args) data:validate_genders(args[2], valid_genders) data.genders = args[2] data:parse_and_insert_inflection("f", "feminine") data:parse_and_insert_inflection("pl", "plural") end } } Note how the version with separate `params and `func` is longer and splits information on the parameters between the two fields. The `params` structure sets extra user-specifiable parameters {{para|2}} for genders (since the headword is in {{para|1}}) as well a {{para|f}} and {{para|pl}}, and the `func` handler processes those parameters. Note how this is done by calling methods on the headword `data` structure. Each such parameter can have multiple comma-separated values, and each value can have inline modifiers attached to it to specify further properties of the value. The `infls` version ends up making the same method calls, but does it for you instead of you having to do it yourself. These methods are implemented through a metatable set on the headword `data` structure, which is removed before calling `full_headword()` in [[Module:headword]]. The methods access extra information related to headword processing (such as the `args` table) that is stored in the `process_props` field of the headword `data` strucuture. This field is also removed prior to calling `full_headword()`. The methods available on the headword `data` structure are as follows. Each one also has its own documentation. * {parse_inflection(field, props)}: Parse value(s) specified in `field` (a user-specified parameter in the `args` table) and return a list of term objects. Optional `props` specifies additional properties controlling the parsing. * {insert_inflection(terms, label, props)}: Insert the terms in `terms` (a list of term objects as returned by `parse_inflection()`) into the `inflections` list in the headword `data` structure, giving the inflection the label as specified in `label`. Optional `props` specifies additional properties controlling the parsing. * {parse_and_insert_inflection(field, label, props)}: A combination of `parse_inflection()` and `insert_inflection()`, if no further processing of the parsed values needs to be done before insertion. * {insert_fixed_inflection(label, props)}: Insert a "fixed" inflection (a label without associated values) into the `inflections` table. An example (from {{tl|mn-noun}} in [[Module:mn-headword]]) is {"hidden-g declension"}, specifying that the noun belongs to the hidden-''g'' declension. * {resolve_special(terms, handle_special, props)}: Resolve "special" indicators as specified by the user in an inflection parameter. A typical example is {"+"}, requesting a default value. `terms` is the list of parsed term objects and `handle_special` is a handler function to process special indicators and convert them to their actual values. * {validate_genders(genders, valid_genders, props)}: Validate that the user-specified genders in `genders` all belong to the list given in `valid_genders`, throwing an error if not. * {insert_category(category)}: Insert a category into the `categories` list in the headword `data` structure. `category` is normally a string naming the category, which will have the language prepended to it and any occurrences of `{plpos}` in the string replaced with the actual plural part of speech. ]==] function export.process_headword(data) local lang, frame, pos_functions, validate_lang, numbered_head, include_tr, include_ts, include_sc, force_cat, enable_auto_translit, checkredlinks, infls, augment_params, augment_headdata = data.lang, data.frame, data.pos_functions, data.validate_lang, data.numbered_head, data.include_tr, data.include_ts, data.include_sc, data.force_cat, data.enable_auto_translit, data.checkredlinks, data.infls, data.augment_params, data.augment_headdata local iparams = { [1] = true, def = true, } local iargs = require(parameters_module).process(frame.args, iparams) local parargs = frame:getParent().args local langcode if not lang then error("Internal error: `data.lang` must be specified; either a language object or `true` for a user-specified language") end local lang_in_1 if lang == true then lang_in_1 = true langcode = ine(parargs[1]) if langcode then langcode = mw.text.trim(langcode) lang = require(languages_module).getByCode(langcode, 1, true) if validate_lang then validate_lang(lang) end else error("Language code (see [[WT:Language codes]]) must be specified in 1=") end else langcode = lang:getCode() if validate_lang then error("Internal error: `data.validate_lang` must not be specified if a language code is given in `data.lang`") end end local template_indicated_pos = iargs[1] local generic_pos_template = not template_indicated_pos local pos_param if generic_pos_template then pos_param = lang_in_1 and 2 or 1 template_indicated_pos = ine(parargs[pos_param]) or mw.title.getCurrentTitle().fullText == ("Bản_mẫu:%s-head"):format(langcode) and "interjection" or error(("Part of speech must be specified in %s="):format(pos_param)) template_indicated_pos = require(headword_module).canonicalize_pos(template_indicated_pos) end local head_param = numbered_head and (generic_pos_template and lang_in_1 and 3 or (generic_pos_template or lang_in_1) and 2 or 1) or "head" local indexing_pos if generic_pos_template then indexing_pos = "head." .. template_indicated_pos if not pos_functions[indexing_pos] then indexing_pos = "head" end else indexing_pos = template_indicated_pos end local namespace = mw.loadData(headword_data_module).page.namespace -- Partly initialize headdata now for use in generic infls callbacks. Will be further initialized later after -- processing parameters. local headdata = { lang = lang, langcode = langcode, langfullcode = lang:getFullCode(), langname = lang:getCanonicalName(), langfullname = lang:getFullName(), process_props = { namespace = namespace, calldata = data, -- preserve template-indicated POS in case we normalize it or change it to "suffix" template_indicated_pos = template_indicated_pos, indexing_pos = indexing_pos, generic_pos_template = generic_pos_template, lang_in_1 = lang_in_1, pos_param = pos_param, head_param = head_param, is_suffix = false, insert_specs = {}, }, -- We may change this below to "suffix" or normalize it. pos_category = template_indicated_pos, categories = {}, inflections = {enable_auto_translit = enable_auto_translit}, force_cat_output = force_cat, no_redundant_head_cat = true, } setmetatable(headdata, {__index = Headdata}) local function resolve_prop(prop, ...) if type(prop) == "function" then prop = prop(headdata, ...) end return prop end local params = { [head_param] = {template_default = iargs.def}, head2 = {replaced_by = false, instead = ("use comma-separated |%s="):format(head_param)}, id = true, sort = true, cat = true, nolink = boolean_param, nolinkhead = {type = "boolean", alias_of = "nolink"}, suffix = boolean_param, nosuffix = boolean_param, clitic = true, addlpos = true, var = {type = "boolean or string", set = {"both"}}, abbr = true, json = boolean_param, pagename = true, -- for testing } if include_sc then params.sc = {type = "script"} end if include_tr then params.tr = true params.tr2 = {replaced_by = false, instead = "use comma-separated |tr= or <tr:...> inline modifier on head"} end if include_ts then params.ts = true params.ts2 = {replaced_by = false, instead = "use comma-separated |ts= or <ts:...> inline modifier on head"} end if lang_in_1 then params[1] = {required = true} -- required but ignored as already processed above end if generic_pos_template then params[pos_param] = {required = true} -- required but ignored as already processed above end local function augment_params_from_infls(infls) infls = resolve_prop(infls) for _, infl in ipairs(infls) do local function interr(txt) error(("Internal error: %s (coming from infls spec %s)"):format(txt, dump(infl))) end local param = infl[1] if param then param = resolve_prop(param) if type(param) ~= "string" and type(param) ~= "number" then interr(("Parameter name %s must be a string or number"):format(dump(param))) end -- We handle defaults as well as validation ourselves. local typ = resolve_prop(infl.type) or "string" if typ ~= "genders" and typ ~= "boolean" and typ ~= "string" then -- FIXME: Handle more types. interr(('Unrecognized type %s; can only currently handle "genders", "boolean" and "string" (the default)'):format( dump(typ))) end params[param] = {type = typ, required = resolve_prop(infl.required), template_default = resolve_prop(infl.template_default)} if typ ~= "boolean" then local allow_and_ignore_list_params = resolve_prop(infl.allow_and_ignore_list_params) local ignore_param if type(allow_and_ignore_list_params) == "string" then ignore_param = allow_and_ignore_list_params elseif type(param) == "string" then ignore_param = param end if ignore_param then local old_list_param = allow_and_ignore_list_params and true or {replaced_by = false, instead = ("use comma-separated |%s="):format(param)} params[ignore_param .. "2"] = old_list_param params[ignore_param .. "3"] = old_list_param params[ignore_param .. "4"] = old_list_param end end end end end if infls then augment_params_from_infls(infls) end if augment_params then augment_params(headdata, params) end if pos_functions[indexing_pos] then local pos_infls = pos_functions[indexing_pos].infls if pos_infls then augment_params_from_infls(pos_infls) end local pos_params = pos_functions[indexing_pos].params if pos_params then for key, val in pairs(pos_params) do params[key] = val end end end local args = require("Module:parameters").process(parargs, params) local pagename = args.pagename or mw.loadData(headword_data_module).pagename local sc = args.sc or lang:findBestScript(pagename) headdata.pagename = pagename headdata.process_props.args = args headdata.sc = sc headdata.id = args.id headdata.sort = args.sort -- No redundant script cat unless the user explicitly gave sc= headdata.no_script_code_cat = not args.sc headdata.var = args.var local extra_term_mods = {} if include_tr then insert(extra_term_mods, "tr") end if include_ts then insert(extra_term_mods, "ts") end if include_sc then insert(extra_term_mods, "sc") end if not extra_term_mods[1] then extra_term_mods = nil end local trs = args.tr and split_on_comma(args.tr) or {} local num_trs = #trs local tss = args.ts and split_on_comma(args.ts) or {} local num_tss = #tss local heads = args[head_param] and export.parse_term_with_modifiers { val = args[head_param], paramname = head_param, splitchar = ",", is_head = true, include_mods = extra_term_mods, } or {} local num_heads = #heads if num_heads > 0 and num_trs > 0 and num_heads ~= num_trs then error(("%s head%s specified explicitly but %s translit%s; they must match; use '+' to stand for the default head (the pagename) or default automatic translit and '-' to stand for no translit"):format( num_heads, num_heads > 1 and "s" or "", num_trs, num_trs > 1 and "s" or "")) end if num_heads > 0 and num_tss > 0 and num_heads ~= num_tss then error(("%s head%s specified explicitly but %s transcription%s; they must match; use '+' to stand for the default head (the pagename) and '-' to stand for no transcription"):format( num_heads, num_heads > 1 and "s" or "", num_tss, num_tss > 1 and "s" or "")) end if num_trs > 0 and num_tss > 0 and num_trs ~= num_tss then error(("%s translit%s specified explicitly but %s transcription%s; they must match; use '+' to stand for default automatic translit and '-' to stand for no translit or transcription"):format( num_trs, num_trs > 1 and "s" or "", num_tss, num_tss > 1 and "s" or "")) end -- Be careful here not to overwrite user_specified_heads if it's empty so we can later check user_specified_heads -- to see if the user provided any heads. local max_tr_ts = math.max(num_trs, num_tss) if num_heads == 0 and max_tr_ts > 0 then heads = {} for i = 1, max_tr_ts do heads[i] = {term = "+"} end end if not heads[1] then heads = {{term = "+"}} end for i, headobj in ipairs(heads) do if headobj.tr and trs[i] then if headobj.tr ~= trs[i] then error(("Saw two different translits '%s' and '%s' for head #%s"):format( headobj.tr, trs[i], i)) end else headobj.tr = headobj.tr or trs[i] end if headobj.tr == "+" then headobj.tr = nil end if headobj.ts and tss[i] then if headobj.ts ~= tss[i] then error(("Saw two different transcriptions '%s' and '%s' for head #%s"):format( headobj.ts, tss[i], i)) end else headobj.ts = headobj.ts or tss[i] end if headobj.ts == "-" then headobj.ts = nil end if headobj.term == "+" then headobj.term = args.nolink and pagename or nil if headobj.term and namespace == "Reconstruction" then headobj.term = "*" .. headobj.term end end end headdata.heads = heads local pos_category = headdata.pos_category -- Do this as late as possible in case the caller wants to conditionalize the primary categorizing POS on -- arguments or even the presence or absence of explicit heads. if pos_functions[indexing_pos] then pos_category = resolve_prop(pos_functions[indexing_pos].pos_category) or pos_category end headdata.process_props.normalized_template_indicated_pos = pos_category headdata.pos_category = pos_category local function pagename_is_suffix() if sc:getCode() == "Latn" then -- shortcut Latin terms to avoid unnecessarily loading [[Module:affix]] return pagename:find("^%-") and not pagename:find("%-$") else local affix_type, _, _, _ = require(affix_module).parse_term_for_affixes(pagename, lang, sc) return affix_type == "Hậu tố" end end local clitic_label if args.clitic then clitic_label = require(yesno_module)(args.clitic, args.clitic) end if clitic_label == true then clitic_label = "clitic" end if clitic_label then headdata:insert_category("clitics") headdata:insert_fixed_inflection(clitic_label) elseif args.suffix or ( not args.nosuffix and pagename_is_suffix() and pos_category ~= "Hậu tố" and pos_category ~= "Biến thể hình thái hậu tố" ) then headdata.process_props.is_suffix = true local function handle_suffix_pos(pos, is_first) -- Use the actual POS for the label we insert, but simplify the POS for the category. We need to separately check -- each of them to see if they end in 'forms' because e.g. 'comparative adjectives' gets simplified to -- 'adjective forms'. local form_type = pos:match("^Biến thể hình thái (.*)$") if form_type then headdata:insert_fixed_inflection("Dạng hậu tố " .. form_type) else local singular_pos = require(en_utilities_module).singularize(pos) headdata:insert_category(("%s-forming suffixes"):format(singular_pos)) headdata:insert_fixed_inflection(singular_pos .. "-forming suffix") end local simplified_pos = export.simplify_pos(pos, "preserve_lemma_status", "preserve_proper_nouns") local simplified_form_type = simplified_pos:match("^(.*) forms$") if simplified_form_type then headdata:insert_category(("%s suffix forms"):format(simplified_form_type)) else local singular_simplified_pos = require(en_utilities_module).singularize(simplified_pos) headdata:insert_category(("%s-forming suffixes"):format(singular_simplified_pos)) end local postype = require(headword_module).pos_lemma_or_nonlemma(pos) if not postype then postype = require(headword_module).pos_lemma_or_nonlemma(simplified_pos) end if not postype then error(("Unrecognized canonicalized part of speech '%s' in addlpos=, cannot determine whether lemma or non-lemma form"):format( pos )) end local this_pos_category = postype == "Mục từ" and "Hậu tố" or "Biến thể hình thái hậu tố" if is_first then headdata.pos_category = this_pos_category elseif headdata.pos_category ~= this_pos_category then local singular_normalized_this_pos_category = require(en_utilities_module).singularize(this_pos_category) local singular_normalized_overall_pos_category = require(en_utilities_module).singularize(headdata.pos_category) error(("Cannot mix suffixes and suffix forms using addlpos=; '%s' is of a %s while overall POS " .. "'%s' is a %s; use separate POS headers for the two"):format(pos, singular_normalized_this_pos_category, pos_category, singular_normalized_overall_pos_category)) end end handle_suffix_pos(pos_category, true) if args.addlpos then for _, addlpos in ipairs(split(args.addlpos, "%s*,%s*")) do addlpos = require(headword_module).canonicalize_pos(addlpos) handle_suffix_pos(addlpos, false) end end end if args.cat then for _, cat in ipairs(split_on_comma(args.cat)) do headdata:insert_category(cat) end end local function augment_headdata_from_infls(infls) infls = resolve_prop(infls) for _, infl in ipairs(infls) do local function interr(txt) error(("Internal error: %s (coming from infls spec %s)"):format(txt, dump(infl))) end local function process_labelobjs(labelobjs, originating_term, handle_labelobj) if labelobjs == nil then return end if type(labelobjs) ~= "string" and type(labelobjs) ~= "table" then interr(("Wrong type '%s' for label object(s) %s, expected string or table"):format( type(labelobjs), dump(labelobjs) )) end if type(labelobjs) == "string" or type(labelobjs) == "table" and not labelobjs[1] then labelobjs = {labelobjs} end for _, labelobj in ipairs(labelobjs) do local label, termobj if type(labelobj) == "string" then label = labelobj termobj = originating_term elseif type(labelobj) ~= "table" then interr(("Wrong type '%s' for label object %s, expected string or table"):format( type(labelobj), dump(labelobj) )) label = labelobj.term if type(label) ~= "string" then interr(("Wrong type '%s' for label %s from label object %s, expected string"):format( type(label), dump(label), dump(labelobj) )) end termobj = labelobj end handle_labelobj(label, termobj) end end local param = infl[1] if param then local vals -- Fetch the param and make sure it's a string or number. param = resolve_prop(param) if type(param) ~= "string" and type(param) ~= "number" then interr(("Parameter name %s must be a string or number"):format(dump(param))) end -- Fetch the type and validate. local typ = resolve_prop(infl.type) if typ == nil then typ = "string" end if typ ~= "genders" and typ ~= "boolean" and typ ~= "string" then -- FIXME: Handle more types. interr(('Unrecognized type %s; can only currently handle "genders", "boolean" and "string" (the default)'):format( dump(typ))) end -- Fetch the value(s). if typ == "genders" or typ == "boolean" then vals = args[param] elseif typ == "string" then local parse_inflection_props = resolve_prop(infl.parse_inflection_props) local include_mods = resolve_prop(infl.include_mods) local no_augment_include_mods = resolve_prop(infl.no_augment_include_mods) if include_mods ~= nil or no_augment_include_mods ~= nil then if parse_inflection_props == nil then parse_inflection_props = {} else parse_inflection_props = shallow_copy(parse_inflection_props) end if include_mods ~= nil then parse_inflection_props.include_mods = include_mods end if no_augment_include_mods ~= nil then parse_inflection_props.no_augment_include_mods = no_augment_include_mods end end vals = headdata:parse_inflection(param, parse_inflection_props) -- Convert an empty list to nil for consistent checking below. if not vals[1] then vals = nil end else interr(("Unrecognized type '%s"):format(typ)) end -- If value(s) nil, fetch the default. if vals == nil and infl.default ~= nil then local default = resolve_prop(infl.default) if typ == "genders" then vals = export.canonicalize_termobj_list(default, "spec", "default") elseif typ == "boolean" then vals = default elseif typ == "string" then vals = export.canonicalize_termobj_list(default, "term", "default") else interr(("Unrecognized type '%s"):format(typ)) end end -- Resolve "special" values (special signals a string values, such as requesting the default with "+"). if vals ~= nil and infl.resolve_special then if typ ~= "string" then interr(("Cannot specify resolve_special= for type %s"):format(dump(typ))) end local resolve_special_props = resolve_prop(infl.resolve_special_props, vals) if infl.is_special ~= nil then if resolve_special_props == nil then resolve_special_props = {} else resolve_special_props = shallow_copy(resolve_special_props) end resolve_special_props.is_special = infl.is_special end vals = headdata:resolve_special(vals, infl.resolve_special, resolve_special_props) end -- Validate the value(s). if vals ~= nil and infl.validate ~= nil then if typ == "boolean" then interr('Cannot specify validate= when type is "boolean"') elseif type(infl.validate) == "function" then infl.validate(headdata, vals) elseif typ == "genders" then headdata:validate_genders(vals, infl.validate) elseif typ == "string" then validate_items { items = vals, field = "term", valid_items = infl.validate, item_type = ("values in |%s="):format(param), } else interr(("Unrecognized type '%s"):format(typ)) end end -- Run the process_after_parse handler, if it exists. if vals ~= nil and infl.process_after_parse ~= nil then local intentionally_nil vals, intentionally_nil = infl.process_after_parse(headdata, vals) if vals == nil and not intentionally_nil then interr("If you return nil from process_after_parse, you must return a second non-nil return " .. "value to indicate that the nil return value was intentional") end end -- "Implement" the values, if non-falsy (i.e. we don't want to fire on boolean false or empty list). -- If a fixed label is specified, insert it. Then, depending on the type, attach the values to a label -- as an inflection, set the `genders` field, or do nothing if boolean (throwing an error if there was -- no fixed label). local insert_request = resolve_prop(infl.request, vals) if vals == true or type(vals) == "table" and vals[1] or insert_request then if infl.fixed_label and infl.all_fixed_label then interr("Cannot specify both fixed_label= and all_fixed_label=; specify one or the other") end local function check_fixed_label_references_val(label) if type(label) == "table" and label[1] then for _, lab in ipairs(label) do if check_fixed_label_references_val(lab) then return true end end return false end if type(label) == "table" then if not label.term then interr(("Fixed label structure %s does not have a value for `.term`"):format(dump(label))) end label = label.term end if type(label) ~= "string" then interr(("Wrong type for fixed label %s, should be string"):format(type(label))) end return not not label:find("{val}") end local fixed_label = infl.fixed_label local all_fixed_label = infl.all_fixed_label -- If the value being processed is boolean, there's only one value so treat a fixed_label as an -- all_fixed_label and output only once; likewise if the caller specified a fixed_label without -- {val} in it. if fixed_label and (typ == "boolean" or type(fixed_label) ~= "function" and not check_fixed_label_references_val(fixed_label)) then all_fixed_label = fixed_label fixed_label = nil end local inserted_fixed_label if fixed_label then if typ == "boolean" then interr("Boolean fixed_label values should have been converted to all_fixed_label") end for _, valobj in ipairs(vals) do local labelobjs = resolve_prop(fixed_label, valobj) process_labelobjs(labelobjs, valobj, function(label, termobj) if label:find("{val}") then if typ ~= "string" then interr(('Cannot specify {val} in fixed_label %s when type is "%s"'):format(dump(label), typ)) end label = label:gsub("{val}", replacement_escape(valobj.term)) end headdata:insert_fixed_inflection(label, { originating_term = termobj }) inserted_fixed_label = true end) end elseif all_fixed_label then local labelobjs = resolve_prop(all_fixed_label, vals) process_labelobjs(labelobjs, nil, function(label, termobj) if label:find("{vals}") then if typ ~= "string" then interr(('Cannot specify {vals} in all_fixed_label %s when type is "%s"'):format(dump(label), typ)) end local formatted_labels = {} for _, valobj in ipairs(vals) do insert(formatted_labels, add_decorations(valobj.term, valobj, lang)) end label = label:gsub("{vals}", replacement_escape(serial_comma_join(formatted_labels))) end headdata:insert_fixed_inflection(label, termobj) inserted_fixed_label = true end) end local inserted_vals if infl.label ~= nil then if typ ~= "string" then interr(("label=%s can only be specified for type 'string', not '%s'"):format( dump(infl.label), typ )) end local label = resolve_prop(infl.label, vals) if label ~= nil then local insert_inflection_props = resolve_prop(infl.insert_inflection_props, vals) local function copy_to_insert_inflection_props(field, val) local fieldval = val or resolve_prop(infl[field], vals) if fieldval ~= nil then if insert_inflection_props == nil then insert_inflection_props = {} else insert_inflection_props = shallow_copy(insert_inflection_props) end insert_inflection_props[field] = fieldval end end copy_to_insert_inflection_props("label_for_cats_and_modes") copy_to_insert_inflection_props("no_auto_cats") copy_to_insert_inflection_props("accel") copy_to_insert_inflection_props("accel_form") if insert_request then copy_to_insert_inflection_props("request", insert_request) end local insert_spec = headdata:insert_inflection(vals, label, insert_inflection_props) headdata.process_props.insert_specs[param] = insert_spec inserted_vals = true end end if typ == "genders" then headdata.genders = vals end local inserted_cat if infl.cat then local allcats = {} for _, valobj in ipairs(vals) do local cats = resolve_prop(infl.cat, valobj) if type(cats) == "string" then cats = {cats} end if cats ~= nil then for _, cat in ipairs(cats) do if cat:find("{val}") then cat = cat:gsub("{val}", replacement_escape(valobj.term)) end insert_if_not(allcats, cat) end end end for _, cat in ipairs(allcats) do headdata:insert_category(cat) inserted_cat = true end end if typ == "boolean" then if not inserted_fixed_label and not inserted_cat then interr(("User set boolean setting for %s= but no fixed label added and no category " .. "inserted; if you took action in process_after_parse(), make sure to return " .. "`nil, true`"):format(param)) end elseif typ == "string" then if not inserted_vals and not inserted_fixed_label and not inserted_cat then interr(("User set value(s) %s for %s= but no inflection inserted and no fixed label " .. "or category added; if you took action in process_after_parse(), make sure to " .. "return `nil, true`"):format(dump(vals), param)) end end end else -- no param specified if infl.label or infl.all_fixed_label then interr("Cannot have label= or all_fixed_label= without specifying a param") end if infl.fixed_label then local labelobjs = resolve_prop(infl.fixed_label) process_labelobjs(labelobjs, nil, function(label, termobj) if label:find("{val}") then interr("Cannot specify {val} in a fixed_label= value without specifying a param") end headdata:insert_fixed_inflection(label, { originating_term = termobj }) end) end if infl.cat then local cats = resolve_prop(infl.cat) if type(cats) == "string" then cats = {cats} end if cats ~= nil then for _, cat in ipairs(cats) do if cat:find("{val}") then interr("Cannot specify {val} in a cat= value without specifying a param") end headdata:insert_category(cat) end end end end end end if infls then augment_headdata_from_infls(infls) end if augment_headdata then augment_headdata(headdata, args) end if pos_functions[indexing_pos] then local pos_infls = pos_functions[indexing_pos].infls if pos_infls then augment_headdata_from_infls(pos_infls) end local func = pos_functions[indexing_pos].func if func then func(headdata, args) end end headdata:parse_and_insert_inflection("abbr", "abbreviation") setmetatable(headdata, nil) headdata.process_props = nil if args.json then return require("Module:JSON").toJSON(headdata) end return require(headword_module).full_headword(headdata) end return export 4eibyb3bf4xi6vt3t2kb2jkrxz02mrd Mô đun:languages/data/3/s 828 271066 2568720 2568471 2026-10-06T01:08:04Z Hiyuune 50834 (By [[meta:Indic-TechCom/Tools|FindAndReplace]]) 2568720 Scribunto text/plain local m_langdata = require("Module:languages/data") -- Loaded on demand, as it may not be needed (depending on the data). local function u(...) u = require("Module:string utilities").char return u(...) end local c = m_langdata.chars local p = m_langdata.puaChars local s = m_langdata.shared local m = {} m["saa"] = { "tiếng Saba", 3914885, "cdc-est", "Latn", "Tiếng Saba", "Saba", } m["sab"] = { "Buglere", 3368506, "cba", "Latn", } m["sac"] = { "tiếng Fox", 12714767, "alg-sfk", "Latn", "Tiếng Fox", "Fox", } m["sad"] = { "Sandawe", 34016, "qfa-iso", "Latn", } m["sae"] = { "Sabanê", 3460478, "sai-nmk", "Latn", } m["saf"] = { "Safaliba", 36432, "nic-mre", "Latn", } m["sah"] = { "tiếng Yakut", 34299, "trk-nsb", "Cyrl", "Tiếng Yakut", "Yakut", translit = "sah-translit", override_translit = true, } m["saj"] = { "Sahu", 7399757, "paa-nha", "Latn", } m["sak"] = { "Sake", 36425, "bnt-kel", "Latn", } m["sam"] = { "Samaritan Aramaic", 56612, "sem-arw", "Samr", entry_name = {remove_diacritics = u(0x0816) .. "-" .. u(0x082D)}, translit = "Samr-translit", } m["sao"] = { "Sause", 4409155, "paa-tkw", "Latn", } m["saq"] = { "Samburu", 56536, "sdv-lma", } m["sar"] = { "Saraveca", 3450556, "awd", } m["sas"] = { "tiếng Sasak", 1294047, "poz-mcm", "Latn", "Tiếng Sasak", "Sasak", } m["sat"] = { "tiếng Santal", 33965, "mun", "Olck, Deva, Beng, Orya", "Tiếng Santal", "Santal", translit = "Olck-translit", override_translit = true, } m["sau"] = { "Saleman", 7404262, "poz-cet", } m["sav"] = { "Saafi-Saafi", 36308, "alv-cng", "Arab, Latn", } m["saw"] = { "Sawi", 677064, "ngf", "Latn", } m["sax"] = { "Sa", 3460352, "poz-vnc", "Latn", } m["say"] = { "Saya", 3914431, "cdc-wst", "Latn", } m["saz"] = { "tiếng Saurashtra", 13292, "inc-wes", "Saur, Latn, Taml, Deva", "Tiếng Saurashtra", "Saurashtra", translit = { Saur = "saz-translit", Taml = "ta-translit", }, ancestors = "inc-ogu", } m["sba"] = { "tiếng Ngambay", 2372207, "csu-sar", "Latn", "Tiếng Ngambay", "Ngambay", } m["sbb"] = { "Simbo", 3484101, "poz-ocw", } m["sbc"] = { "Gele'", 3194847, "poz-oce", } m["sbd"] = { "tiếng Samo Nam", 33122730, "dmn-sam", "Latn", "Tiếng Samo Nam", "Samo Nam", } m["sbe"] = { "Saliba (New Guinea)", 3469737, "poz-ocw", } m["sbf"] = { "tiếng Shabo", 36342, "ssa", "Latn", "Tiếng Shabo", "Shabo", } m["sbg"] = { "Seget", 7446237, } m["sbh"] = { "Sori-Harengan", 36515, "poz-aay", "Latn", } m["sbi"] = { "Seti", 7456682, "qfa-tor", "Latn", } m["sbj"] = { "Surbakhal", 759995, } m["sbk"] = { "Safwa", 4121160, "bnt-mby", "Latn", } m["sbl"] = { "tiếng Sambal Botolan", 4095195, "phi", "Latn", "Tiếng Sambal Botolan", "Sambal Botolan", } m["sbm"] = { "Sagala", 11732610, "bnt-ruv", "Latn", } m["sbn"] = { "Sindhi Bhil", 25559289, "inc-snd", "Arab, Deva, Sind, Guru", ancestors = "sd", } m["sbo"] = { "tiếng Sabüm", 7396535, "mkh-asl", nil, "Tiếng Sabüm", "Sabüm", } m["sbp"] = { "Sangu (Tanzania)", 7418149, "bnt-bki", "Latn", } m["sbq"] = { "Sileibi", 7514337, "ngf-mad", } m["sbr"] = { "Sembakung Murut", 7449148, "poz-san", } m["sbs"] = { "Subiya", 6442073, "bnt-bot", "Latn", } m["sbt"] = { "Kimki", 6410160, "paa-pau", } m["sbu"] = { "Stod Bhoti", 15622700, "sit-las", } m["sbv"] = { "Sabine", nil, "itc-sbl", "Latn", } m["sbw"] = { "Simba", 36430, "bnt-tso", "Latn", } m["sbx"] = { "Seberuang", 12473470, "poz-mly", } m["sby"] = { "Soli", 7557754, "bnt-bot", "Latn", } m["sbz"] = { "Sara Kaba", 25559318, "csu-kab", "Latn", } m["scb"] = { "tiếng Chứt", 2967709, "mkh-vie", "Latn", "Tiếng Chứt", "Chứt", } m["sce"] = { "tiếng Đông Hương", 32947, "xgn-shr", "Arab, Latn", "Tiếng Đông Hương", "Đông Hương", } m["scf"] = { "San Miguel Creole French", 12953094, "crp", "Latn", ancestors = "gcf", sort_key = s["roa-oil-sortkey"], } m["scg"] = { "Sanggau", 12473466, "day", } m["sch"] = { "Sakachep", 37054, "tbq-kuk", } m["sci"] = { "Sri Lankan Creole Malay", 1089151, "crp", "Latn", ancestors = "ms", } m["sck"] = { "tiếng Sadri", 765922, "inc-bih", "Deva, Kthi, Beng, Orya", translit = { Deva = "hi-translit", Kthi = "bho-Kthi-translit", }, "Tiếng Sadri", "Sadri", } m["scl"] = { "tiếng Shina", 1353320, "inc-shn", "ur-Arab, Deva", "Tiếng Shina", "Shina", } m["scn"] = { "tiếng Sicily", 33973, "roa-itd", "Latn", "Tiếng Sicily", "Sicily", } m["sco"] = { "tiếng Scots", 14549, "gmw-ang", "Latn", "Tiếng Scots", "Scots", ancestors = "sco-smi", } m["scp"] = { "tiếng Yolmo", 22662107, "sit-kyk", "Deva", "Tiếng Yolmo", "Yolmo", } m["scq"] = { "Sa'och", 6583617, "mkh-pea", } m["scs"] = { "tiếng Bắc Slavey", 20628, "den", "Latn, Cans", "Tiếng Bắc Slavey", "Bắc Slavey", } m["scu"] = { "Shumcho", 22077739, "sit-kin", } m["scv"] = { "Sheni", 11015820, "nic-jer", "Latn", ancestors = "zir", } m["scw"] = { "Sha", 3438816, "cdc-wst", "Latn", } m["scx"] = { "tiếng Sicel", 36667, "itc", "Polyt", "Tiếng Sicel", "Sicel", translit = "grc-translit", display_text = s["Polyt-displaytext"], entry_name = s["Polyt-entryname"], sort_key = s["Polyt-sortkey"], } m["sda"] = { "Toraja-Sa'dan", 36673, "poz-ssw", } m["sdb"] = { "tiếng Shabak", 3289596, "ira-zgr", "Arab", "Tiếng Shabak", "Shabak", ancestors = "hac", } m["sdc"] = { "tiếng Sassari", 845441, "roa-itd", "Latn", } m["sde"] = { "Surubu", 3913336, "nic-kau", "Latn", } m["sdf"] = { "Sarli", 7424256, "ira-zgr", ancestors = "hac", } m["sdg"] = { "tiếng Savi", 3474654, "inc-shn", "ur-Arab", "Tiếng Savi", "Savi", } m["sdh"] = { "tiếng Xwarin", 1496597, "ku", "ku-Arab", translit = "sdh-translit", strip_diacritics = {remove_diacritics = c.kasra .. c.sukun}, } m["sdj"] = { "Suundi", 7650407, "bnt-kng", "Latn", } m["sdk"] = { "Sos Kundi", 7563811, "paa-spk", "Latn", } m["sdl"] = { "Saudi Arabian Sign Language", 3504160, "sgn", } m["sdm"] = { "Semandang", 7449012, "day", } m["sdn"] = { "tiếng Gallura", 612220, "roa-itd", "Latn", "Tiếng Gallura", "Gallura", ancestors = "co", } m["sdo"] = { "Bukar-Sadung Bidayuh", 2927799, "day", } m["sdp"] = { "Sherdukpen", 7494785, "sit-khb", } m["sdr"] = { "Oraon Sadri", 12953860, "inc-eas", ancestors = "bh", } m["sds"] = { "tiếng Berber Tunisia", 5329732, "ber", "Latn", "Tiếng Berber Tunisia", "Berber Tunisia", } m["sdu"] = { "Sarudu", 7424700, "poz-cet", } m["sdx"] = { "Sibu Melanau", 18642842, "poz-bnn", } m["sea"] = { "tiếng Semai", 3135426, "mkh-asl", "Latn", "Tiếng Semai", "Semai", } -- seb is a duplicate code of spp m["sec"] = { "tiếng Sechelt", 7442898, "sal", "Latn", "Tiếng Sechelt", "Sechelt", } m["sed"] = { "tiếng Xơ Đăng", 56448, "mkh-nbn", "Latn", "Tiếng Xơ Đăng", "Xơ Đăng", } m["see"] = { "tiếng Seneca", 1185133, "iro-nor", "Latn", "Tiếng Seneca", "Seneca", } m["sef"] = { "Cebaara Senoufo", 10975121, "alv-snr", } m["seg"] = { "Segeju", 17584599, "bnt-mij", "Latn", } m["seh"] = { "tiếng Sena", 2964008, "bnt-sna", "Latn", "Tiếng Sena", "Sena", } m["sei"] = { "tiếng Seri", 36583, "qfa-iso", "Latn", "Tiếng Seri", "Seri", } m["sej"] = { "Sene", 7450252, } m["sek"] = { "Sekani", 28562, "ath-nor", "Latn", } m["sel"] = { "tiếng Selkup", 34008, "syd", "Cyrl", "Tiếng Selkup", "Selkup", } m["sen"] = { "Nanerigé Sénoufo", 36002, "alv-sma", } m["seo"] = { "Suarmin", 7630513, "paa", } m["sep"] = { "Sìcìté Sénoufo", 56787, "alv-sma", } m["seq"] = { "Senara Sénoufo", 35210, "alv-snr", } m["ser"] = { "Serrano", 3479942, "azc-tak", "Latn", } m["ses"] = { "tiếng Senni Koyraboro", 35655, "son", "Latn, Arab", "Tiếng Senni Koyraboro", "Senni Koyraboro", } m["set"] = { "Sentani", 3441672, "paa-sen", "Latn", } m["seu"] = { "Serui-Laut", 7455503, "poz-hce", "Latn", } m["sev"] = { "tiếng Senoufo Nyarafolo", 36306, "alv-snr", "Latn", "Tiếng Senoufo Nyarafolo", "Senoufo Nyarafolo", } m["sew"] = { "Sewa Bay", 7458126, "poz-ocw", } m["sey"] = { "Secoya", 3477218, "sai-tuc", "Latn", } m["sez"] = { "Senthang Chin", 7451223, "tbq-kuk", } m["sfb"] = { "French Belgian Sign Language", 3217332, "sgn", } m["sfe"] = { "Eastern Subanun", Q63311321, "phi", "Latn", } m["sfm"] = { "Small Flowery Miao", 7542773, "hmn", } m["sfs"] = { "South African Sign Language", 3322093, "sgn", } m["sfw"] = { "Sehwi", 36593, "alv-ctn", "Latn", } m["sga"] = { "tiếng Ireland cổ", 35308, "cel-gae", "Latn", "Tiếng Ireland cổ", "Ireland cổ", entry_name = {remove_diacritics = c.dotabove .. c.diaer .. "·"}, sort_key = "sga-sortkey", standardChars = "AaÁáBbCcDdEeÉéFfGgHhIiÍíLlMmNnOoÓóPpRrSsTtUuÚú0123456789" .. c.punc, } m["sgb"] = { "Mag-Anchi Ayta", 4356243, "phi", } m["sgc"] = { "Kipsigis", 56339, "sdv-nma", } m["sgd"] = { "Surigaonon", 34140, "phi", "Latn", } m["sge"] = { "Segai", 7446180, } m["sgg"] = { "Swiss-German Sign Language", 35150, "sgn", } m["sgh"] = { "tiếng Shughnan", 34053, "ira-shy", "Latn, Cyrl, Arab", "Tiếng Shughnan", "Shughnan", ancestors = "ira-shr-pro", translit = "sgh-translit", override_translit = true, } m["sgi"] = { "Suga", 36475, "nic-mmb", "Latn", } m["sgk"] = { "Sangkong", 2945610, "tbq-bis", } m["sgm"] = { "Singa", 7522797, "bnt-lok", "Latn", } m["sgp"] = { "Singpho", 7524158, "sit-jnp", } m["sgr"] = { "tiếng Sangisar", 3394363, "ira-kms", "Arab", "Tiếng Sangisar", "Sangisar", } m["sgs"] = { "tiếng Samogitia", 213434, "bat-eas", "Latn", "Tiếng Samogitia", "Samogitia", wikimedia_codes = "bat-smg", ancestors = "olt", display_text = "lt-common", strip_diacritics = "lt-common", sort_key = "lt-common", } m["sgt"] = { "tiếng Brokpa", 56603, "sit-tib", "Tibt", "Tiếng Brokpa", "Brokpa", override_translit = true, -- Tibt translit, display_text, strip_diacritics, sort_key in [[Module:scripts/data]] } m["sgu"] = { "Salas", 7403694, "poz-cma", } m["sgw"] = { "tiếng Sebat Bet Gurage", 2707343, "sem-eth", "Ethi", "Tiếng Sebat Bet Gurage", "Sebat Bet Gurage", } m["sgx"] = { "Sierra Leone Sign Language", 7511448, "sgn", } m["sgy"] = { "Sanglechi", 3472220, "ira-sgi", } m["sgz"] = { "Sursurunga", 36511, "poz-ocw", "Latn", } m["sha"] = { "Shall-Zwall", 3915355, "nic-beo", } m["shb"] = { "Ninam", 3436586, } m["shc"] = { "Sonde", 7560881, "bnt-pen", "Latn", } m["shd"] = { "tiếng Kundal Shahi", 6444265, "inc-shn", "Arab", "Tiếng Kundal Shahi", "Kundal Shahi", } m["she"] = { "Sheko", 3183355, "omv-diz", } m["shg"] = { "Shua", 3501092, "khi-kal", "Latn", } m["shh"] = { "Shoshone", 33811, "azc-num", "Latn", } m["shi"] = { "tiếng Tashelhit", 34152, "ber", "Latn, Arab, Tfng, Hebr", "Tiếng Tashelhit", "Tashelhit", translit = "Tfng-translit", -- put Judeo-Berber (Hebrew-script Tashelhit) under the category header -- U+FB21 HEBREW LETTER WIDE ALEF so that it sorts after Tifinagh script titles sort_key = { from = {"^%f[" .. u(0x5D0) .. "-" .. u(0x5EA) .. "]"}, to = {u(0xFB21)}, }, ancestors = "shi-med", } m["shj"] = { "Shatt", 56344, "sdv-daj", } m["shk"] = { "Shilluk", 36486, "sdv-lon", "Latn", } m["shl"] = { "Shendu", 22074616, "tbq-kuk", } m["shm"] = { "Shahrudi", 7462280, "xme-ttc", ancestors = "xme-ttc-cen", } m["shn"] = { "tiếng Shan", 56482, "tai-swe", "Mymr", "Tiếng Shan", "Shan", translit = "shn-translit", sort_key = { from = {"[ၢႃ]", "ဵ", "ႅ", "ႇ", "ႈ", "း", "ႉ", "ႊ"}, to = {"ာ", "ေ", "ႄ", "႒", "႓", "႔", "႕", "႖"} }, } m["sho"] = { "Shanga", 3913931, "dmn-bbu", "Latn", } m["shp"] = { "Shipibo-Conibo", 2671988, "sai-pan", "Latn", } m["shq"] = { "Sala", 10961665, "bnt-bot", "Latn", } m["shr"] = { "Shi", 3481999, "bnt-shh", "Latn", } m["shs"] = { "tiếng Shuswap", 3482685, "sal", "Latn", "Tiếng Shuswap", "Shuswap", } m["sht"] = { "Shasta", 56396, "nai-shs", "Latn", } m["shu"] = { "tiếng Ả Rập Tchad", 56497, "sem-arb", "Arab", "Tiếng Ả Rập Tchad", "Ả Rập Tchad", entry_name = { remove_diacritics = c.kashida .. c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.superalef, from = {u(0x0671)}, to = {u(0x0627)} }, } m["shv"] = { "Shehri", 33445, "sem-sar", "Arab, Latn", } m["shw"] = { "Shwai", 36527, "alv-hei", } m["shx"] = { "tiếng Xa", 2605689, "hmn", } m["shy"] = { "tiếng Tachawit", 33274, "ber", "Tfng, Arab, Latn", "Tiếng Tachawit", "Tachawit", translit = "Tfng-translit", } m["shz"] = { "Syenara Senoufo", 36316, "alv-snr", } m["sia"] = { "tiếng Sami Akkala", 35241, "smi", "Cyrl, Latn", "Tiếng Sami Akkala", "Sami Akkala", translit = "sia-translit", display_text = { from = {"'"}, to = {"ˈ"} }, entry_name = {remove_diacritics = "'ˈ"}, } m["sib"] = { "Sebop", 7442799, "poz-swa", "Latn", } m["sid"] = { "tiếng Sidamo", 33786, "cus-hec", "Latn, Ethi", "Tiếng Sidamo", "Sidamo", } m["sie"] = { "Simaa", 7517329, "bnt-kav", "Latn", } m["sif"] = { "Siamou", 36252, } m["sig"] = { "Paasaal", 36426, "nic-sis", "Latn", } m["sih"] = { "Zire", 8072753, "poz-cln", } m["sii"] = { "tiếng Shompen", 1039346, "aav", "Latn", "Tiếng Shompen", "Shompen" } m["sij"] = { "Numbami", 3346277, "poz-ocw", } m["sik"] = { "Sikiana", 3443734, "sai-prk", "Latn", } m["sil"] = { "Tumulung Sisaala", 25383006, "nic-sis", "Latn", } m["sim"] = { "Seim", 7446815, "paa-spk", } m["sip"] = { "tiếng Sikkim", 35285, "sit-tib", "Tibt", "Tiếng Sikkim", "Sikkim", ancestors = "xct", translit = "Tibt-translit", override_translit = true, display_text = s["Tibt-displaytext"], entry_name = s["Tibt-entryname"], sort_key = "Tibt-sortkey", } m["siq"] = { "Sonia", 7561770, } m["sir"] = { "Siri", 3438729, "cdc-wst", "Latn", } m["sis"] = { "Siuslaw", 2315424, } m["siu"] = { "Sinagen", 7521655, "qfa-tor", "Latn", } m["siv"] = { "Sumariup", 7636966, "paa-spk", "Latn", } m["siw"] = { "Siwai", 7532519, "paa-sbo", } m["six"] = { "Sumau", 7637021, "ngf-mad", "Latn", } m["siy"] = { "Sivandi", 13269, "xme", ancestors = "xme-mid", } m["siz"] = { "tiếng Siwi", 36814, "ber", "Tfng, Arab, Latn", "Tiếng Siwi", "Siwi", } m["sja"] = { "Epena", 3055682, "sai-chc", } m["sjb"] = { "Sajau Basap", 4684353, "poz-bnn", } m["sjd"] = { "tiếng Sami Kildin", 33656, "smi", "Cyrl", "Tiếng Sami Kildin", "Sami Kildin", translit = "sjd-translit", display_text = { from = {"'"}, to = {"ˈ"} }, entry_name = {remove_diacritics = "'ˈ"}, } m["sje"] = { "Pite Sami", 56314, "smi", "Latn", display_text = { from = {"'"}, to = {"ˈ"} }, entry_name = {remove_diacritics = c.macron .. "'ˈ"}, sort_key = "sje-sortkey", } m["sjg"] = { "Assangori", 3502255, "sdv-tmn", } m["sjk"] = { "Kemi Sami", 35871, "smi", "Latn", display_text = { from = {"'"}, to = {"ˈ"} }, entry_name = {remove_diacritics = "'ˈ"}, } m["sjl"] = { "Miji", 6845470, "sit-hrs", } m["sjm"] = { "Mapun", 3287253, "poz-sbj", } m["sjn"] = { "Sindarin", 56437, "art", "Latn, Teng", type = "appendix-constructed", } m["sjo"] = { "tiếng Tích Bá", 13223, "tuw-jrc", "sjo-Mong, Cyrl", "Tiếng Tích Bá", "Tích Bá", ancestors = "mnc", } m["sjp"] = { "tiếng Surjapur", 7645351, "inc-krn", "Deva, as-Beng, Kthi", "Tiếng Surjapur", "Surjapur", } m["sjr"] = { "Siar-Lak", 3482907, "poz-ocw", } m["sjs"] = { "tiếng Senhaja de Srair", 56744, "ber", "Latn, Tfng, Arab", "Tiếng Senhaja de Srair", "Senhaja de Srair", strip_diacritics = { Arab = "ar-stripdiacritics", }, translit = { Tfng = "Tfng-translit", } } m["sjt"] = { "tiếng Sami Ter", 36656, "smi", "Latn, Cyrl", "Tiếng Sami Ter", "Sami Ter", display_text = { from = {"'"}, to = {"ˈ"} }, entry_name = {remove_diacritics = "'ˈ"}, } m["sju"] = { "tiếng Sami Ume", 56415, "smi", "Latn", "Tiếng Sami Ume", "Sami Ume", entry_name = {remove_diacritics = c.macron .. "'ˈ"}, display_text = { from = {"'"}, to = {"ˈ"} }, sort_key = "sju-sortkey", } m["sjw"] = { "Shawnee", 2669206, "alg", "Latn", } m["ska"] = { "Skagit", 25559652, "sal", "Latn", } m["skb"] = { "tiếng Saek", 36437, "tai-nor", "Thai", "Tiếng Saek", "Saek", sort_key = "Thai-sortkey", } m["skc"] = { "Ma Manda", 6720783, "ngf-fin", } m["skd"] = { "Southern Sierra Miwok", 3492334, "nai-utn", "Latn", } m["ske"] = { "Ske", 7534244, "poz-vnc", "Latn", } m["skf"] = { "Mekéns", 3304806, "tup", "Latn", } m["skh"] = { "Sikule", 3121081, "poz-nws", } m["ski"] = { "Sika", 33960, "poz-cet", "Latn", } m["skj"] = { -- compare 'ths' "Seke", 30226846, "sit-tam", } m["skk"] = { "Sok", 12953887, "mkh-ban", } m["skm"] = { "Sakam", 6448517, "ngf-fin", } m["skn"] = { "Kolibugan Subanon", 18755617, "phi", "Latn", } m["sko"] = { "Seko Tengah", 15613270, "poz", } m["skp"] = { "Sekapan", 7447132, "poz-bnn", } m["skq"] = { "Sininkere", 3914896, "dmn-man", "Latn", } m["skr"] = { "tiếng Saraiki", 33902, "inc-pan", "pa-Arab, Mult, Deva", "Tiếng Saraiki", "Saraiki", ancestors = "lah", entry_name = {remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun}, translit = { ["pa-Arab"] = "pa-Aran-translit", Mult = "Mult-translit", }, } m["sks"] = { "tiếng Maia", 12952760, "ngf-kau", "Latn", } m["skt"] = { "Sakata", 36691, "bnt-bnm", "Latn", } m["sku"] = { "Sakao", 3298421, "poz-vnc", "Latn", } m["skv"] = { "Skou", 3915200, "paa-msk", "Latn", } m["skw"] = { "tiếng Skepi", 2522153, "crp", "Latn", "Tiếng Skepi", "Skepi", ancestors = "nl", } m["skx"] = { "Seko Padang", 15613282, "poz-ssw", } m["sky"] = { "Sikaiana", 7439242, "poz-pnp", "Latn", } m["skz"] = { "Sekar", 7447136, "poz-cet", } m["slc"] = { "Saliba (Colombia)", 3441097, } m["sld"] = { "tiếng Sissala", 11020264, "nic-sis", "Latn", "Tiếng Sissala", "Sissala", } m["sle"] = { "tiếng Sholaga", 7500203, "dra-kan", "Knda", "Tiếng Sholaga", "Sholaga", translit = "kn-translit" } m["slf"] = { "Swiss-Italian Sign Language", 12953479, "sgn", } m["slg"] = { "Selungai Murut", 7448844, "poz-san", } m["slh"] = { "Southern Puget Sound Salish", 12642471, "sal", "Latn", } -- "sli" "Silesian German" IS SUBSUMED INTO "gmw-ecg" "East Central German" m["slj"] = { "Salumá", 7406296, "sai-prk", "Latn", } m["sll"] = { "Salt-Yui", 7405785, } m["slm"] = { "Pangutaran Sama", 3362086, "poz-sbj", } m["sln"] = { "Salinan", 1568938, } m["slp"] = { "Lamaholot", 6480777, "poz-cet", "Latn", } m["slq"] = { "Salchuq", 56752, "trk", } m["slr"] = { "tiếng Salar", 33963, "trk-ogz", "Arab, Latn", "Tiếng Salar", "Salar", } m["sls"] = { "Singapore Sign Language", 7512563, "sgn", } m["slt"] = { "Sila", 7514021, "tbq-sil", } m["slu"] = { "Selaru", 7447500, "poz-cet", } m["slw"] = { "Sialum", 7506694, "ngf", } m["slx"] = { "Salampasu", 7403607, "bnt-lun", "Latn", } m["sly"] = { "Selayar", 7447520, "poz-ssw", } m["slz"] = { "Ma'ya", 2291492, "poz-hce", } m["sma"] = { "tiếng Nam Sami", 13293, "smi", "Latn", "Tiếng Nam Sami", "Nam Sami", display_text = { from = {"'"}, to = {"ˈ"} }, entry_name = {remove_diacritics = "'ˈ"}, sort_key = "sma-sortkey", } m["smb"] = { "Simbari", 7517427, "ngf", } m["smc"] = { "Som", 7559081, "ngf-fin", "Latn", } m["smd"] = { "Sama", 6407456, "bnt-kmb", "Latn", } m["smf"] = { "Auwe", 3502072, "paa-brd", ancestors = "dnd", } m["smg"] = { "Simbali", 56692, "paa-bng", } m["smh"] = { "tiếng Thát Mai", 7409269, "tbq-axi", nil, "Tiếng Thát Mai", "Thát Mai", } m["smj"] = { "Lule Sami", 56322, "smi", "Latn", display_text = { from = {"'"}, to = {"ˈ"} }, entry_name = {remove_diacritics = c.macron .. "'ˈ"}, sort_key = "smj-sortkey", } m["smk"] = { "tiếng Bolinao", 2669235, "phi", "Latn, Tglg", } m["sml"] = { "tiếng Sama Trung", 3470593, "poz-sbj", "Latn", "Tiếng Sama Trung", "Sama Trung", } m["smm"] = { "Musasa", 6940122, "inc-eas", ancestors = "bh", } m["smn"] = { "tiếng Sami Inari", 33462, "smi", "Latn", "Tiếng Sami Inari", "Sami Inari", display_text = { from = {"'"}, to = {"ˈ"} }, entry_name = {remove_diacritics = c.dotbelow .. "'ˈ"}, sort_key = "smn-sortkey", } m["smp"] = { "Samaritan Hebrew", 56502, "sem-can", "Samr", entry_name = {remove_diacritics = u(0x0816) .. "-" .. u(0x082D)}, } m["smq"] = { "tiếng Samo", 7409884, "ngf-est", "Latn", "Tiếng Samo", "Samo", } m["smr"] = { "Simeulue", 2992833, "poz-nws", "Latn", } m["sms"] = { "tiếng Sami Skolt", 13271, "smi", "Latn", "Tiếng Sami Skolt", "Sami Skolt", display_text = { from = {"'"}, to = {"ˈ"} }, entry_name = {remove_diacritics = c.dotbelow .. "'ˈ"}, sort_key = "sms-sortkey", } m["smt"] = { "Simte", 7521268, "tbq-kuk", } m["smu"] = { "Somray", 6583612, "mkh-pea", } m["smv"] = { "Samvedi", 6345632, "inc-sou", } m["smw"] = { "tiếng Sumbawa", 3182585, "poz-bss", "Latn", } m["smx"] = { "Samba", 11120157, "bnt-pen", "Latn", } m["smy"] = { "Semnani", 14531212, "xme", } m["smz"] = { "Simeku", 7517534, "paa-sbo", } m["snb"] = { "Sebuyau", 7442836, "poz-mly", } m["snc"] = { "tiếng Sinaugoro", 4170719, "poz-ocw", "Latn", "Tiếng Sinaugoro", "Sinaugoro", } m["sne"] = { "tiếng Bidayuh Bau", 2891938, "day", "Latn", "Tiếng Bidayuh Bau", "Bidayuh Bau", } m["snf"] = { "tiếng Noon", 36304, "alv-cng", "Latn", "Tiếng Noon", "Noon", } m["sng"] = { "Sanga (Congo)", 3438316, "bnt-lub", "Latn", } m["sni"] = { "Sensi", 7451029, "sai-pan", "Latn", } m["snj"] = { "Riverain Sango", 25559751, "crp", "Latn", ancestors = "ngb", } m["snk"] = { "tiếng Soninke", 36660, "dmn-snb", "Latn, Arab", "Tiếng Soninke", "Soninke", } m["snl"] = { "Sangil", 3472206, "phi", } m["snm"] = { "Southern Ma'di", 15637273, "csu-mma", } m["snn"] = { "Siona", 3485116, "sai-tuc", "Latn", } m["sno"] = { "Snohomish", 25559662, "sal", "Latn", } m["snp"] = { "Siane", 7506812, "paa-kag", "Latn", } m["snq"] = { "Sangu (Gabon)", 36609, "bnt-sir", "Latn", } m["snr"] = { "Sihan", 7513400, "ngf-mad", } m["sns"] = { "Nahavaq", 2160435, "poz-vnc", } m["snu"] = { "Senggi", 7929052, "paa-brd" } m["snv"] = { "Sa'ban", 3474891, "poz-swa", "Latn", } m["snw"] = { "Selee", 36272, "alv-ntg", "Latn", } m["snx"] = { "Sam", 7408387, } m["sny"] = { "Saniyo-Hiyewe", 7418302, "paa-spk", "Latn", } m["snz"] = { "Kou", 7525035, -- also 4803639 "ngf-mad", "Latn", } m["soa"] = { "tiếng Thái Tống", 7709159, "tai-swe", "Tavt, Thai", "Tiếng Thái Tống", "Thái Tống", --translit = "Tavt-translit", sort_key = { from = {"([ꪵꪶꪹꪻꪼ])([ꪀ-ꪯ])", "([เแโใไ])([ก-ฮ])"}, to = {"%2%1", "%2%1"} }, } m["sob"] = { "Sobei", 3121035, "poz-ocw", } m["soc"] = { "Soko", 7555138, "bnt-ske", "Latn", } m["sod"] = { "Songoora", 7561296, "bnt-lgb", "Latn", } m["soe"] = { "Songomeno", 5713543, "bnt-bsh", "Latn", } m["sog"] = { "tiếng Sogdia", 205979, "ira-sgc", "Sogd, Mani, Syrc, Sogo", "Tiếng Sogdia", "Sogdia", translit = { Sogd = "Sogd-translit", Mani = "Mani-translit", Sogo = "Sogo-translit", }, } m["soh"] = { "Aka (Sudan)", 3450949, "sdv-eje", "Latn", } m["soi"] = { "Sonha", 12953890, "inc-eas", } m["sok"] = { "Sokoro", 3441303, "cdc-est", "Latn", } m["sol"] = { "Solos", 3489591, "poz-ocw", } m["soo"] = { "Nsong", 12953148, "bnt-bdz", "Latn", } m["sop"] = { "Songe", 3130911, "bnt-lbn", "Latn", } m["soq"] = { "Kanasi", 11732656, } m["sor"] = { "Somrai", 3123566, "cdc-est", "Latn", } m["sos"] = { "Seenku", 36274, "dmn-smg", } m["sou"] = { "tiếng Nam Thái", 56508, "tai-swe", "Thai", "Tiếng Nam Thái", "Nam Thái", sort_key = "Thai-sortkey", } m["sov"] = { "tiếng Sonsorol", 13281, "poz-mic", "Latn", "Tiếng Sonsorol", "Sonsorol", } m["sow"] = { "Sowanda", 7571845, "paa-brd" } m["sox"] = { "Swo", 36604, "bnt-mka", "Latn", } m["soy"] = { "Miyobe", 35913, "alv-sav", "Latn", } m["soz"] = { "Temi", 13278, "bnt-kka", "Latn", } m["spb"] = { "Sepa (Indonesia)", 18603687, "poz-cma", "Latn", } m["spc"] = { "Sapé", 2888158, nil, "Latn", } m["spd"] = { "Saep", 7398312, "ngf-mad", } m["spe"] = { "Sepa (New Guinea)", 7451725, "poz-ocw", "Latn", } m["spg"] = { "Sian", 7506806, "poz-bnn", } m["spi"] = { "Saponi", 3915418, "paa", } m["spk"] = { "Sengo", 7450584, "paa-spk", "Latn", } m["spl"] = { "Selepet", 7447917, "ngf", } m["spm"] = { "Sepen", 4701931, "paa", "Latn", } m["spn"] = { "Sanapaná", 3033556, "sai-mas", "Latn", } m["spo"] = { "Spokane", 3493704, "sal", } m["spp"] = { "Supyire", 56284, "alv-sma", "Latn", } m["spr"] = { "Saparua", 7420921, "poz-cma", } m["sps"] = { "tiếng Saposa", 3473187, "poz-ocw", nil, "Tiếng Saposa", "Saposa", } m["spt"] = { "Spiti Bhoti", 22080879, "sit-las", } m["spu"] = { "Sapuan", 7421168, "mkh-ban", } m["spv"] = { "tiếng Sambalpur", 6433240, "inc-eas", "Orya", "Tiếng Sambalpur", "Sambalpur", translit = "or-translit", ancestors = "or", } m["spx"] = { "tiếng Piceni Nam", 36688, "itc-sbl", "Ital, Latn", "Tiếng Piceni Nam", "Piceni Nam", translit = "Ital-translit", } m["spy"] = { "Sabaot", 7395896, "sdv-kln", } m["sqa"] = { "Shama-Sambuga", 3914392, "nic-kmk", "Latn", } m["sqh"] = { "Shau", 3913925, "nic-jer", "Latn", } m["sqk"] = { "Albanian Sign Language", 4709168, "sgn", } m["sqm"] = { "Suma", 11008431, "alv-gbw", } m["sqn"] = { "Susquehannock", 3505736, "iro-nor", } m["sqo"] = { "Sorkhei", 3491964, "ira-kms", } m["sqq"] = { "Sou", 16979751, "mkh-ban", } m["sqr"] = { "Siculo-Arabic", 1069489, "sem-arb", } m["sqs"] = { "Sri Lankan Sign Language", 3915466, "sgn", } m["sqt"] = { "tiếng Socotra", 13283, "sem-sar", "Arab, Latn", "Tiếng Socotra", "Socotra", } m["squ"] = { "tiếng Squamish", 2484579, "sal", "Latn", "Tiếng Squamish", "Squamish", } m["sra"] = { "Saruga", 7424699, "ngf-mad", "Latn", } m["srb"] = { "tiếng Sora", 13284, "mun", "Sora, Orya, Telu", "Tiếng Sora", "Sora", } m["sre"] = { "Sara", 33957, "day", } m["srf"] = { "Nafi", 6958174, "poz-ocw", } m["srg"] = { "Sulod", 7636489, "phi", } m["srh"] = { "tiếng Sarikol", 33873, "ira-shr", "Latn, Arab, Cyrl", "Tiếng Sarikol", "Sarikol", } m["sri"] = { "Siriano", 3485264, "sai-tuc", "Latn", } m["srk"] = { "Serudung Murut", 7455497, "poz-san", } m["srl"] = { "Isirawa", 4203802, "paa-tkw", } m["srm"] = { "tiếng Saramacca", 33779, "crp", "Latn", "Tiếng Saramacca", "Saramacca", ancestors = "en, pt", } m["srn"] = { "tiếng Sranan Tongo", 33989, "crp", "Latn", "Tiếng Sranan Tongo", "Sranan Tongo", } m["srq"] = { "Sirionó", 3027953, "tup-gua", "Latn", } m["srr"] = { "tiếng Serer", 36284, "alv-fwo", "Latn, Arab", "Tiếng Serer", "Serer", } m["srs"] = { "tiếng Tsuut'ina", 20825, "ath-nor", "Latn", "Tiếng Tsuut'ina", "Tsuut'ina", } m["srt"] = { "Sauri", 7427547, "paa-egb", } m["sru"] = { "Suruí", 7646993, "tup", "Latn", } m["srv"] = { "Waray Sorsogon", 18755610, "phi", } m["srw"] = { "Serua", 14916905, "poz-cet", } m["srx"] = { "tiếng Sirmaur", 7530505, "him", "Deva", "Tiếng Sirmaur", "Sirmaur", } m["sry"] = { "Sera", 7452602, "poz-ocw", "Latn", } m["srz"] = { "Shahmirzadi", 12953126, "ira-msh", "fa-Arab", } m["ssb"] = { "Southern Sama", 3470594, "poz-sbj", "Latn", } m["ssc"] = { "Suba-Simbiti", 7630687, "bnt-lok", "Latn", } m["ssd"] = { "Siroi", 10771067, "ngf-mad", "Latn", } m["sse"] = { "Balangingi", 2880535, "poz-sbj", "Latn", } m["ssf"] = { "Thao", 676492, "map", "Latn", } m["ssg"] = { "Seimat", 3182581, "poz-aay", } m["ssh"] = { "Shihhi Arabic", 56571, "sem-arb", "Arab", entry_name = { remove_diacritics = c.kashida .. c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.superalef, from = {u(0x0671)}, to = {u(0x0627)} }, } m["ssi"] = { "Sansi", 3309366, "inc-nwe", } m["ssj"] = { "Sausi", 7427605, "ngf-mad", "Latn", } m["ssk"] = { "Sunam", 11002210, "sit-kin", } m["ssl"] = { "Western Sisaala", 11154776, "nic-sis", "Latn", } m["ssm"] = { "tiếng Semnam", 7449713, "mkh-asl", "Latn", "Tiếng Semnam", "Semnam", } m["ssn"] = { "tiếng Waata", 7449713, "cus-eas", nil, "Tiếng Waata", "Waata", } m["sso"] = { "tiếng Sissano", 7530937, "poz-ocw", "Latn", "Tiếng Sissano", "Sissano", } m["ssp"] = { "Spanish Sign Language", 3100814, "sgn", } m["ssq"] = { "So'a", 7572120, "poz-cet", "Latn", } m["ssr"] = { "Swiss-French Sign Language", 12953483, "sgn", } m["sss"] = { "tiếng Sô", 3082037, "mkh-kat", "Thai", "Tiếng Sô", "Sô", } m["sst"] = { "Sinasina", 7521813, "ngf", "Latn", } m["ssu"] = { "Susuami", 7649752, "ngf", "Latn", } m["ssv"] = { "Shark Bay", 7489783, "poz-vnc", } m["ssx"] = { "Samberigi", 7409020, "paa-eng", "Latn", } m["ssy"] = { "tiếng Saho", 36353, "cus-eas", "Latn, Ethi, Arab", "Tiếng Saho", "Saho", } m["ssz"] = { "Sengseng", 7450601, "poz-ocw", "Latn", } m["stb"] = { "Northern Subanen", 12953892, "phi", "Latn", } m["std"] = { "Sentinelese", 568377, } m["ste"] = { "Liana-Seti", 6539924, "poz-cma", } m["stf"] = { "Seta", 7456326, "qfa-tor", "Latn", } m["stg"] = { "Trieng", 22694648, "mkh-ban", } m["sth"] = { "Shelta", 36705, "crp", "Latn", ancestors = "en", } m["sti"] = { "tiếng Xtiêng", 15771431, "mkh-ban", "Khmr, Latn", "Tiếng Xtiêng", "Xtiêng", } m["stj"] = { "Matya Samo", 10974879, "dmn-sam", "Latn", } m["stk"] = { "Arammba", 3502094, "ngf", } m["stm"] = { "Setaman", 7456333, "ngf-okk", "Latn", } m["stn"] = { "Owa", 1324132, "poz-sls", "Latn", } m["sto"] = { "Stoney", 3033570, "sio-dkt", } m["stp"] = { "tiếng Tepehuan Đông Nam", 12953917, "azc", "Latn", "Tiếng Tepehuan Đông Nam", "Tepehuan Đông Nam", } m["stq"] = { "tiếng Frisia Saterland", 27154, "gmw-fri", "Latn", "Tiếng Frisia Saterland", "Frisia Saterland", } m["str"] = { "tiếng Saanich", 36444, "sal", "Latn", "Tiếng Saanich", "Saanich", } m["sts"] = { "Shumashti", 33777, "inc-kun", } m["stt"] = { "tiếng Xtiêng Bù Đeh", 12953891, "mkh-ban", "Latn", "Tiếng Xtiêng Bù Đeh", "Xtiêng Bù Đeh", } m["stu"] = { "tiếng Samtao", 25559550, "mkh-pal", "Latn, Mymr", "Tiếng Samtao", "Samtao" } m["stv"] = { "tiếng Siltʼe", nil, "sem-eth", "Ethi", "Tiếng Siltʼe", "Siltʼe", } m["stw"] = { "Satawalese", 28477, "poz-mic", } m["sty"] = { "tiếng Tatar Siberia", 4418344, "trk-kno", "Cyrl", "Tiếng Tatar Siberia", "Tatar Siberia", translit = "sty-translit" } m["sua"] = { "Sulka", 7636341, "qfa-iso", } m["sub"] = { "Suku", 12953160, "bnt-yak", "Latn", } m["suc"] = { "Western Subanon", 16113894, "phi", "Latn", } m["sue"] = { "Suena", 7634386, "ngf", "Latn", } m["sug"] = { "Suganga", 7634706, "ngf-okk", "Latn", } m["sui"] = { "Suki", 2089984, "ngf", "Latn", } m["suk"] = { "Sukuma", 2638144, "bnt-tkm", "Latn", } m["suq"] = { "tiếng Suri", 5364172, "sdv", "Latn, Ethi", "Tiếng Suri", "Suri", } m["sur"] = { "Mwaghavul", 3440486, "cdc-wst", "Latn", } m["sus"] = { "tiếng Susu", 33990, "dmn-sya", "Latn, Arab", "Tiếng Susu", "Susu", } m["sut"] = { "Subtiaba", 3915405, "omq", "Latn", } m["suv"] = { "tiếng Puroik", 56408, "sit-khb", "Latn, Beng", "Tiếng Puroik", "Puroik", } m["suw"] = { "Sumbwa", 7637055, "bnt-glb", "Latn", } m["sux"] = { "tiếng Sumer", 36790, "qfa-iso", "Xsux, Latn", "Tiếng Sumer", "Sumer", } m["suy"] = { "Suyá", 3505859, "sai-nje", "Latn", } m["suz"] = { "Sunwar", 56549, "sit-kiw", "Deva, Sunu" } m["sva"] = { "tiếng Svan", 34067, "ccs", "Geor, Cyrl", "Tiếng Svan", "Svan", translit = "sva-translit", override_translit = true, } m["svb"] = { "Ulau-Suain", 7878769, "poz-ocw", "Latn", } m["svc"] = { "Vincentian Creole English", 3501785, "crp", "Latn", ancestors = "en", } m["sve"] = { "Serili", 7454834, "poz-tim", } m["svk"] = { "Slovakian Sign Language", 7541557, "sgn", } m["svm"] = { "Slavomolisano", 36254, "zls", "Latn", ancestors = "sh", } m["svs"] = { "tiếng Savosavo", 3130296, "qfa-dis", "Latn", } m["svx"] = { "Skalvian", 3486125, "bat-wes", "Latn", } m["swb"] = { "tiếng Comoros Maore", 34075, "bnt-com", "Latn, Arab", "Tiếng Comoros Maore", "Comoros Maore", sort_key = "bnt-com-sortkey", } m["swf"] = { "Sere", 7453056, "nic-ser", "Latn", } m["swg"] = { "Swabian", 327274, "gmw-hgm", "Latn", ancestors = "gsw", } m["swi"] = { "tiếng Thủy", 3112388, "qfa-kms", "Latn, Shui, Hani", "Tiếng Thủy", "Thủy", sort_key = {Hani = "Hani-sortkey"}, } m["swj"] = { "Sira", 36599, "bnt-sir", "Latn", } m["swl"] = { "Swedish Sign Language", 36558, "sgn", } m["swm"] = { "Samosa", 7410037, "ngf-mad", "Latn", } m["swn"] = { "tiếng Sokna", 2988323, "ber", nil, "Tiếng Sokna", "Sokna", } m["swo"] = { "Shanenawa", nil, "sai-pan", "Latn", } m["swp"] = { "Suau", 3502368, "poz-ocw", } m["swq"] = { "Sharwa", 56791, "cdc-cbm", "Latn", } m["swr"] = { "Saweru", 3474649, } m["sws"] = { "Seluwasan", 7448845, "poz-cet", } m["swt"] = { "Sawila", 7428639, } m["swu"] = { "Suwawa", 7650588, "phi", } m["sww"] = { "Sowa", 7571843, "poz-vnc", } m["swx"] = { "Suruahá", 3114402, "auf", } m["swy"] = { "Sarua", 56261, "cdc-est", "Latn", } m["sxb"] = { "Suba", 33916, "bnt-lok", "Latn", } m["sxc"] = { "Sicanian", 36335, } m["sxe"] = { "Sighu", 36431, "bnt-kel", "Latn", } m["sxg"] = { "Shixing", 56337, "sit-nax", "Latn", } m["sxk"] = { "Southern Kalapuya", 3192122, "nai-klp", } m["sxl"] = { "Selonian", 36491, "bat-eas", "Latn", } m["sxm"] = { "Samre", 6583615, "mkh-pea", } m["sxn"] = { "tiếng Sangir", 25714758, "phi", "Latn", "Tiếng Sangir", "Sangir", } m["sxo"] = { "Sorothaptic", 2762254, } m["sxr"] = { "tiếng Saaroa", 716599, "map-tsu", "Latn", "Tiếng Saaroa", "Saaroa", } m["sxs"] = { "Sasaru", 3913384, "alv-yek", "Latn", } -- "sxu" "Upper Saxon" IS SUBSUMED INTO "gmw-ecg" "East Central German" m["sxw"] = { "tiếng Gbe Saxwe", 7428892, "alv-pph", nil, "Tiếng Gbe Saxwe", "Gbe Saxwe", } m["sya"] = { "Siang", 3482903, } m["syb"] = { "Central Subanen", 12953893, "phi", "Latn", } m["syc"] = { "tiếng Syriac cổ điển", 33538, "sem-are", "Syrc", "Tiếng Syriac cổ điển", "Syriac cổ điển", entry_name = {remove_diacritics = c.macron .. c.diaer .. c.macronbelow .. u(0x0730) .. "-" .. u(0x0748)}, } m["syi"] = { "Seki", 36547, "bnt-kel", "Latn", } m["syk"] = { "Sukur", 56292, "cdc-cbm", "Latn", } m["syl"] = { "tiếng Sylhet", 2044560, "inc-eas", "Sylo, Beng", "Tiếng Sylhet", "Sylhet", ancestors = "inc-obn", translit = "syl-translit", } m["sym"] = { "Maya Samo", 10950421, "dmn-sam", "Latn", } m["syn"] = { "tiếng Senaya", 33914, "sem-nna", "Syrc", "Tiếng Senaya", "Senaya", } m["syo"] = { "Suoy", 7641864, "mkh-pea", } m["sys"] = { "Sinyar", 56840, "csu", "Latn", } m["syw"] = { "Kagate", 12952538, "sit-kyk", "Deva", } m["syx"] = { "Osamayi", 7408415, "bnt-kel", "Latn", } m["syy"] = { "Al-Sayyid Bedouin Sign Language", 2915457, "sgn", } m["sza"] = { "tiếng Semelai", 3111827, "mkh-asl", "Latn", "Tiếng Semelai", "Semelai", } m["szb"] = { "tiếng Ngalum", 11732516, "ngf-okk", "Latn", "Tiếng Ngalum", "Ngalum", } m["szc"] = { "tiếng Semaq Beri", 7449119, "mkh-asl", "Latn", "Tiếng Semaq Beri", "Semaq Beri", } m["szd"] = { "Seru", 7455488, "poz-bnn", "Latn", } m["sze"] = { "tiếng Seze", 373683, "omv-mao", "Latn", "Tiếng Seze", "Seze", } m["szg"] = { "Sengele", 7450555, "bnt-mon", "Latn", } m["szl"] = { "tiếng Silesia", 30319, "zlw-lch", "Latn", "Tiếng Silesia", "Silesia", ancestors = "zlw-opl", } m["szn"] = { "Sula", 3503403, "poz-cma", "Latn", } m["szp"] = { "Suabo", 7630429, "ngf-sbh", "Latn", } m["szv"] = { "Isubu", 35431, "bnt-saw", "Latn", } m["szw"] = { "Sawai", 3447258, "poz-hce", "Latn", } m["szy"] = { "tiếng Sakizaya", 718269, "map", "Latn", "Tiếng Sakizaya", "Sakizaya", } return require("Module:languages").finalizeData(m, "language") s6oxren7ix5q7bvm84cejhtuzac2fxj Mô đun:IPA/templates 828 271344 2568775 2217163 2026-10-06T06:56:56Z TheHighFighter2 42988 2568775 Scribunto text/plain local export = {} local m_IPA = require("Module:IPA") local parameter_utilities_module = "Module:parameter utilities" local function track(template, page) require("Module:debug/track")(template .. "/" .. page) return true end -- Used for [[Template:IPA]]. function export.IPA(frame) local parent_args = frame:getParent().args -- Track uses of n so they can be converted to ref. -- Track uses of qual so they can be converted to q. for k, v in pairs(parent_args) do if type(k) == "string" and k:find("^qual%d*$") then track("IPA", "q") end end local include_langname = frame.args.include_langname local compat = parent_args.lang local offset = compat and 0 or 1 local lang_arg = compat and "lang" or 1 local params = { [lang_arg] = {required = true, type = "language", default = "en"}, [1 + offset] = {list = true, disallow_holes = true}, -- Deprecated; don't use in new code. ["qual"] = {list = true, separate_no_index = true, alias_of = "q"}, ["nocount"] = {type = "boolean"}, ["nocat"] = {type = "boolean"}, ["sort"] = {}, } local m_param_utils = require(parameter_utilities_module) local param_mods = m_param_utils.construct_param_mods { {group = {"ref", "a", "q"}}, {group = "link", include = {"t", "gloss", "pos"}}, } local items, args = m_param_utils.parse_list_with_inline_modifiers_and_separate_params { params = params, param_mods = param_mods, raw_args = parent_args, termarg = 1 + offset, term_dest = "pron", track_module = "IPA", } local lang = args[lang_arg] for _, item in ipairs(items) do require("Module:IPA/tracking").run_tracking(item.pron, lang) end -- Tracking for direct (manual) uses of {{IPA}} instead of lang-specific automatic templates such as {{is-IPA}}. -- [[Category:LANG terms with IPA pronunciation]] tracks terms with IPA pronunciation added in any manner, -- but doesn't distinguish manual {{IPA}} calls from calls to the automatic template. track("IPA", "manual") track("IPA", "manual/" .. lang:getCode()) local data = { lang = lang, items = items, no_count = args.nocount, nocat = args.nocat, sort_key = args.sort, include_langname = include_langname, q = args.q.default, qq = args.qq.default, a = args.a.default, aa = args.aa.default, } return m_IPA.format_IPA_full(data) end -- Used for [[Template:IPAchar]]. function export.IPAchar(frame) local parent_args = frame.getParent and frame:getParent().args or frame -- Track uses of n so they can be converted to ref. -- Track uses of qual so they can be converted to q. for k, v in pairs(parent_args) do if type(k) == "string" and k:find("^n%d*$") then track("IPAchar", "n") end if type(k) == "string" and k:find("^qual%d*$") then track("IPAchar", "q") end end local params = { [1] = {list = true, disallow_holes = true}, -- FIXME, remove this. ["lang"] = {}, -- This parameter is not used and does nothing, but is allowed for futureproofing. } local m_param_utils = require(parameter_utilities_module) local param_mods = m_param_utils.construct_param_mods { -- It doesn't really make sense to have separate overall a=/aa=/q=/qq= for {{IPAchar}}, which doesn't format a -- whole line but just individual pronunciations. Instead they are associated with the first item. {group = {"ref", "a", "q"}, separate_no_index = false}, -- Deprecated; don't use in new code. {param = "qual", alias_of = "q"}, } local items, args = m_param_utils.parse_list_with_inline_modifiers_and_separate_params { params = params, param_mods = param_mods, raw_args = parent_args, termarg = 1, term_dest = "pron", track_module = "IPAchar", } -- [[Special:WhatLinksHere/Wiktionary:Tracking/IPAchar/lang]] if args.lang then track("IPAchar", "lang") end -- Format return m_IPA.format_IPA_multiple(nil, items) end function export.XSAMPA(frame) local params = { [1] = { required = true }, } local args = require("Module:parameters").process(frame:getParent().args, params) return m_IPA.XSAMPA_to_IPA(args[1] or "[Eg'zA:mp5=]") end -- Used by [[Template:X2IPA]] function export.X2IPAtemplate(frame) local parent_args = frame.getParent and frame:getParent().args or frame local compat = parent_args["lang"] local offset = compat and 0 or 1 local params = { [compat and "lang" or 1] = {required = true, default = "und"}, [1 + offset] = {list = true, allow_holes = true}, ["ref"] = {list = true, allow_holes = true}, ["a"] = {list = true, allow_holes = true, separate_no_index = true}, ["aa"] = {list = true, allow_holes = true, separate_no_index = true}, ["q"] = {list = true, allow_holes = true, separate_no_index = true}, ["qq"] = {list = true, allow_holes = true, separate_no_index = true}, ["qual"] = {list = true, allow_holes = true}, ["nocount"] = {type = "boolean"}, ["sort"] = {}, } local args = require("Module:parameters").process(parent_args, params) local m_XSAMPA = require("Module:IPA/X-SAMPA") local pronunciations, refs, a, aa, q, qq, qual, lang = args[1 + offset], args.ref, args.a, args.aa, args.q, args.qq, args.qual, args[compat and "lang" or 1] local output = {} table.insert(output, "{{IPA") table.insert(output, "|" .. lang) if a.default then table.insert(output, "|a=" .. a.default) end if q.default then table.insert(output, "|q=" .. q.default) end for i = 1, math.max(pronunciations.maxindex, refs.maxindex, a.maxindex, aa.maxindex, q.maxindex, qq.maxindex, qual.maxindex) do if pronunciations[i] then table.insert(output, "|" .. m_XSAMPA.XSAMPA_to_IPA(pronunciations[i])) end if a[i] then table.insert(output, "|a" .. i .. "=" .. a[i]) end if aa[i] then table.insert(output, "|aa" .. i .. "=" .. aa[i]) end if q[i] then table.insert(output, "|q" .. i .. "=" .. q[i]) end if qq[i] then table.insert(output, "|qq" .. i .. "=" .. qq[i]) end if refs[i] then table.insert(output, "|ref" .. i .. "=" .. refs[i]) end if qual[i] then table.insert(output, "|qual" .. i .. "=" .. qual[i]) end end if aa.default then table.insert(output, "|aa=" .. aa.default) end if qq.default then table.insert(output, "|qq=" .. qq.default) end if args.nocount then table.insert(output, "|nocount=1") end if args.sort then table.insert(output, "|sort=" .. args.sort) end table.insert(output, "}}") return table.concat(output) end -- Used by [[Template:X2IPAchar]] function export.X2IPAchar(frame) local params = { [1] = { list = true, allow_holes = true }, ["ref"] = {list = true, allow_holes = true}, ["q"] = {list = true, allow_holes = true, require_index = true}, ["qq"] = {list = true, allow_holes = true, require_index = true}, ["qual"] = { list = true, allow_holes = true }, -- FIXME, remove this. ["lang"] = {}, } local args = require("Module:parameters").process(frame:getParent().args, params) -- [[Special:WhatLinksHere/Wiktionary:Tracking/X2IPAchar/lang]] if args.lang then track("X2IPAchar", "lang") end local m_XSAMPA = require("Module:IPA/X-SAMPA") local pronunciations, refs, q, qq, qual, lang = args[1], args.ref, args.q, args.qq, args.qual, args.lang local output = {} table.insert(output, "{{IPAchar") for i = 1, math.max(pronunciations.maxindex, refs.maxindex, q.maxindex, qq.maxindex, qual.maxindex) do if pronunciations[i] then table.insert(output, "|" .. m_XSAMPA.XSAMPA_to_IPA(pronunciations[i])) end if q[i] then table.insert(output, "|q" .. i .. "=" .. q[i]) end if qq[i] then table.insert(output, "|qq" .. i .. "=" .. qq[i]) end if qual[i] then table.insert(output, "|qual" .. i .. "=" .. qual[i]) end if refs[i] then table.insert(output, "|ref" .. i .. "=" .. refs[i]) end end if lang then table.insert(output, "|lang=" .. lang) end table.insert(output, "}}") return table.concat(output) end -- Used by [[Template:x2rhymes]] function export.X2rhymes(frame) local parent_args = frame.getParent and frame:getParent().args or frame local compat = parent_args["lang"] local offset = compat and 0 or 1 local params = { [compat and "lang" or 1] = {required = true, default = "und"}, [1 + offset] = {required = true, list = true, allow_holes = true}, } local args = require("Module:parameters").process(parent_args, params) local m_XSAMPA = require("Module:IPA/X-SAMPA") local pronunciations, lang = args[1 + offset], args[compat and "lang" or 1] local output = {} table.insert(output, "{{rhymes") table.insert(output, "|" .. lang) for i = 1, pronunciations.maxindex do if pronunciations[i] then table.insert(output, "|" .. m_XSAMPA.XSAMPA_to_IPA(pronunciations[i])) end end table.insert(output, "}}") return table.concat(output) end -- Used for [[Template:enPR]]. function export.enPR(frame) local parent_args = frame:getParent().args local params = { [1] = {list = true, disallow_holes = true}, } local m_param_utils = require(parameter_utilities_module) local param_mods = m_param_utils.construct_param_mods { {group = {"q", "a", "ref"}}, } local items, args = m_param_utils.parse_list_with_inline_modifiers_and_separate_params { params = params, param_mods = param_mods, raw_args = parent_args, termarg = 1, term_dest = "pron", track_module = "enPR", } local data = { items = items, q = args.q.default, qq = args.qq.default, a = args.a.default, aa = args.aa.default, } return m_IPA.format_enPR_full(data) end return export 4d032bpwth3egruuulwhrdv60ldftme Mô đun:languages/data/3/p 828 271928 2568717 2565738 2026-10-06T01:08:03Z Hiyuune 50834 (By [[meta:Indic-TechCom/Tools|FindAndReplace]]) 2568717 Scribunto text/plain local m_langdata = require("Module:languages/data") -- Loaded on demand, as it may not be needed (depending on the data). local function u(...) u = require("Module:string utilities").char return u(...) end local c = m_langdata.chars local p = m_langdata.puaChars local s = m_langdata.shared local m = {} m["pab"] = { "tiếng Pareci", 3504312, "awd", "Latn", "Tiếng Pareci", "Pareci", } m["pac"] = { "tiếng Pa Kô", 3441136, "mkh-kat", "Latn", "Tiếng Pa Kô", "Pa Kô", } m["pad"] = { "Paumarí", 389827, "auf", "Latn", } m["pae"] = { "Pagibete", 7124357, "bnt-bta", "Latn", } m["paf"] = { "Paranawát", 12953806, "tup-gua", "Latn", } m["pag"] = { "tiếng Pangasinan", 33879, "phi", "Latn, Tglg", "Tiếng Pangasinan", "Pangasinan", entry_name = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.diaer}, } m["pah"] = { "tiếng Tenharim", 10266010, "tup-gua", "Latn", "Tiếng Tenharim", "Tenharim", } m["pai"] = { "Pe", 3914871, "nic-tar", "Latn", } m["pak"] = { "Parakanã", 12953804, "tup-gua", "Latn", } m["pal"] = { "tiếng Ba Tư trung đại", 32063, "ira-swi", "Latn, Phli, pal-Avst, Mani, Phlp, Phlv", -- Latn for translit; Phlv not in Unicode "Tiếng Ba Tư trung đại", "Ba Tư trung đại", translit = { Phli = "Phli-translit", ["pal-Avst"] = "Avst-translit", Mani = "Mani-translit", }, ancestors = "peo", } m["pam"] = { "tiếng Kapampangan", 36121, "phi", "Latn", --also Kulitan, which lacks a code "Tiếng Kapampangan", "Kapampangan", entry_name = {Latn = {remove_diacritics = c.grave .. c.acute .. c.circ}}, standardChars = { Latn = "AaBbDdEeGgHhIiKkLlMmNnOoPpRrSsTtUuWwYy", c.punc }, sort_key = { Latn = "tl-sortkey" }, } m["pao"] = { "tiếng Bắc Paiute", 3360656, "azc-num", "Latn", "Tiếng Bắc Paiute", "Bắc Paiute", } m["pap"] = { "tiếng Papiamento", 33856, "crp", "Latn", "Tiếng Papiamento", "Papiamento", ancestors = "pt", } m["paq"] = { "tiếng Parya", 1135134, "inc-cen", "Cyrl", "Tiếng Parya", "Parya", } m["par"] = { "Panamint", 33926, "azc-num", "Latn", } m["pas"] = { "Papasena", 7132508, "paa-lkp", "Latn", } m["pat"] = { "Papitalai", 6528659, "poz-aay", "Latn", } m["pau"] = { "tiếng Palau", 33776, "poz", "Latn, Kana", "Tiếng Palau", "Palau", sort_key = {Kana = "Kana-sortkey"}, } m["pav"] = { "Wari'", 3027909, "sai-cpc", "Latn", } m["paw"] = { "tiếng Pawnee", 56751, "cdd", "Latn", "Tiếng Pawnee", "Pawnee", } m["pax"] = { "Pankararé", 25559779, nil, "Latn", } m["pay"] = { "Pech", 4898889, "cba", "Latn", } m["paz"] = { "Pankararú", 7131310, nil, "Latn", } m["pbb"] = { "Páez", 33677, nil, "Latn", } m["pbc"] = { "Patamona", 3915921, "sai-pem", "Latn", } m["pbe"] = { "Mezontla Popoloca", 42365630, "omq-pop", "Latn", } m["pbf"] = { "Coyotepec Popoloca", 5180100, "omq-pop", "Latn", } m["pbg"] = { "tiếng Paraujano", 3501747, "awd-taa", "Latn", "Tiếng Paraujano", "Paraujano", } m["pbh"] = { "Panare", 56610, "sai-ven", "Latn", } m["pbi"] = { "Podoko", 3515096, "cdc-cbm", "Latn", } m["pbl"] = { "Mak (Nigeria)", 3915349, "alv-bwj", "Latn", } m["pbm"] = { "Puebla Mazatec", nil, "omq-maz", "Latn", } m["pbn"] = { "Kpasam", 3914902, "alv-mye", "Latn", } m["pbo"] = { "Papel", 36314, "alv-pap", "Latn", } m["pbp"] = { "Badyara", 35095, "alv-ten", "Latn", } m["pbr"] = { "Pangwa", 3847550, "bnt-bki", "Latn", } m["pbs"] = { "Central Pame", 3361763, "omq", "Latn", } m["pbv"] = { "tiếng Pnar", 3501850, "aav-pkl", "Latn", "Tiếng Pnar", "Pnar", } m["pby"] = { "Pyu", 2567925, "paa-asa", "Latn", } m["pca"] = { "Santa Inés Ahuatempan Popoloca", 42365276, "omq-pop", "Latn", } m["pcb"] = { "tiếng Pear", 6583669, "mkh-pea", "Khmr", "Tiếng Pear", "Pear" } m["pcc"] = { "tiếng Bố Y", 35100, "tai-nor", "Latn, Hani", "Tiếng Bố Y", "Bố Y", sort_key = {Hani = "Hani-sortkey"}, } m["pcd"] = { "tiếng Picard", 34024, "roa-oil", "Latn", "Tiếng Picard", "Picard", sort_key = s["roa-oil-sortkey"], } m["pce"] = { "tiếng Palaung Ruching", 12953798, "mkh-pal", "Mymr", "Tiếng Palaung Ruching", "Palaung Ruching", } m["pcf"] = { "tiếng Paliyan", 7127643, "dra-tam", "Mlym", "Tiếng Paliyan", "Paliyan", translit = {Mlym = "ml-translit"}, } m["pcg"] = { "tiếng Paniya", 7131211, "dra-mal", "Mlym, Knda", "Tiếng Paniya", "Paniya", translit = { Mlym = "ml-translit", Knda = "kn-translit", }, } m["pch"] = { "Pardhan", 7133207, "dra-gon", } m["pci"] = { "tiếng Duruwa", 56753, "dra-pgd", "Deva, Orya", "Tiếng Duruwa", "Duruwa", } m["pcj"] = { "tiếng Parenga", 3111396, "mun", "Orya", "Tiếng Parenga", "Parenga", } m["pck"] = { "tiếng Paite", 12952337, "tbq-kuk", nil, "Tiếng Paite", "Paite", } m["pcl"] = { "Pardhi", 7136554, "inc-bhi", } m["pcm"] = { "Nigerian Pidgin", 33655, "crp", "Latn", ancestors = "en", entry_name = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.caron .. c.macronbelow}, sort_key = { remove_diacritics = c.tilde, from = {"ẹ", "gb", "kp", "ọ", "sh", "zh"}, to = {"e" .. p[1], "g" .. p[1], "k" .. p[1], "o" .. p[1], "s" .. p[1], "z" .. p[1]} }, } m["pcn"] = { "Piti", 3913375, "nic-kne", "Latn", } m["pcp"] = { "Pacahuara", 2591165, "sai-pan", "Latn", } m["pcw"] = { "Pyapun", 3438807, nil, "Latn", } m["pda"] = { "Anam", 3501930, "ngf-mad", "Latn", } m["pdc"] = { "tiếng Đức Pennsylvania", 22711, "gmw-hgm", "Latn", "Tiếng Đức Pennsylvania", "Đức Pennsylvania", ancestors = "gmw-rfr", } m["pdi"] = { "Pa Di", 3359940, nil, "Latn", } m["pdn"] = { "Fedan", 7206699, "poz-ocw", "Latn", } m["pdo"] = { "Padoe", 3360370, "poz-btk", "Latn", } m["pdt"] = { "tiếng Hạ Đức Mennonite", 1751432, "gmw-lgm", "Latn", "Tiếng Hạ Đức Mennonite", "Hạ Đức Mennonite", ancestors = "nds-de", } m["pdu"] = { "tiếng Kayan", 7123283, "kar", "Latn, Mymr", "Tiếng Kayan", "Kayan", } m["pea"] = { "tiếng Indonesia Peranakan", 653415, nil, "Latn", "Tiếng Indonesia Peranakan", "Indonesia Peranakan", } m["peb"] = { "Eastern Pomo", 3396032, "nai-pom", "Latn", } m["ped"] = { "Mala (New Guinea)", 11732569, "ngf-mad", "Latn", } m["pee"] = { "Taje", 12953902, nil, "Latn", } m["pef"] = { "Northeastern Pomo", 3396018, "nai-pom", "Latn", } m["peg"] = { "tiếng Pengo", 56758, "dra-kki", "Orya", translit = "kxv-translit", "Tiếng Pengo", "Pengo", } m["peh"] = { "tiếng Bảo An", 32983, "xgn-shr", "Latn", "Tiếng Bảo An", "Bảo An", } m["pei"] = { "Chichimeca-Jonaz", 3915427, "omq-otp", "Latn", } m["pej"] = { "Northern Pomo", 3396021, "nai-pom", "Latn", } m["pek"] = { "Penchal", 3374631, "poz-aay", "Latn", } m["pel"] = { "Pekal", 3241781, nil, "Latn", } m["pem"] = { "Phende", 7162372, "bnt-pen", "Latn", } m["peo"] = { "tiếng Ba Tư cổ", 35225, "ira-swi", "Xpeo, Latn", "Tiếng Ba Tư cổ", "Ba Tư cổ", translit = "peo-translit", } m["pep"] = { "Kunja", 6444807, nil, "Latn", } m["peq"] = { "Southern Pomo", 3396023, "nai-pom", "Latn", } -- "pes" IS TREATED AS "fa" (or as etymology-only), SEE WT:LT m["pev"] = { "Pémono", 3439012, "sai-map", "Latn", } m["pex"] = { "Petats", 3376353, "poz-ocw", "Latn", } m["pey"] = { "tiếng Petjo", 940486, nil, "Latn", "Tiếng Petjo", "Petjo", } m["pez"] = { "Eastern Penan", 18638342, "poz-swa", "Latn", } m["pfa"] = { "Pááfang", 3063517, "poz-mic", "Latn", } m["pfe"] = { "Peere", 36377, "alv-dur", "Latn", } m["pga"] = { "tiếng Ả Rập Juba", 1262143, "crp", "Latn", "Tiếng Ả Rập Juba", "Ả Rập Juba", ancestors = "apd", } m["pgd"] = { "tiếng Càn-đà-la", nil, "inc-mid", "Deva, Khar", "Tiếng Càn-đà-la", "Càn-đà-la", ancestors = "inc-ash", translit = "Khar-translit", } m["pgg"] = { "tiếng Pangwala", 13600429, "him", "Deva, Takr", "Tiếng Pangwala", "Pangwala", translit = "hi-translit", } m["pgi"] = { "Pagi", 7124354, "paa-brd", "Latn", } m["pgk"] = { "Rerep", 586907, "poz-vnc", "Latn", } m["pgl"] = { "tiếng Ireland nguyên thủy", 3320030, "cel-gae", "Ogam, Latn", translit = "pgl-translit", } m["pgn"] = { "tiếng Paeligni", 65455883, "itc-sbl", "Latn, Ital", "Tiếng Paeligni", "Paeligni", translit = {Ital = "Ital-translit"}, } m["pgs"] = { "Pangseng", 3914027, "alv-mum", "Latn", } m["pgu"] = { "tiếng Pagu", 7124462, "paa-nha", "Latn", "Tiếng Pagu", "Pagu", } m["pgz"] = { "Papua New Guinean Sign Language", 25044405, "sgn", } m["pha"] = { "tiếng Pà Thẻn", 2625410, "hmn", "Latn", "Tiếng Pà Thẻn", "Pà Thẻn" } m["phd"] = { "Phudagi", 7188289, } m["phg"] = { "tiếng Cơ Tu Phương", 7188376, "mkh-kat", "Latn", "Tiếng Cơ Tu Phương", "Cơ Tu Phương", } m["phh"] = { "Phukha", 7188298, "tbq-phw", } m["phk"] = { "tiếng Phake", 7675798, "tai-swe", "Mymr", "Tiếng Phake", "Phake", translit = "aio-phk-translit", entry_name = {remove_diacritics = c.VS01}, } m["phl"] = { "tiếng Phalura", 2449549, "inc-shn", "Latn, ur-Arab", "Tiếng Phalura", "Phalura", } m["phm"] = { "Phimbi", 11007144, "bnt-sna", "Latn", } m["phn"] = { "tiếng Phoenicia", 36734, "sem-can", "Phnx", "Tiếng Phoenicia", "Phoenicia", translit = "Phnx-translit", } m["pho"] = { "tiếng Phunoi", 7188361, "tbq-bis", "Laoo", "Tiếng Phunoi", "Phunoi", } m["phq"] = { "Phana'", 7180427, "tbq-sil", } m["phr"] = { "tiếng Pothohar", 33739, "inc-pan", "pa-Arab, Guru", "Tiếng Pothohar", "Pothohar", ancestors = "lah", translit = { Guru = "Guru-translit", ["pa-Arab"] = "pa-Aran-translit", }, entry_name = { ["pa-Arab"] = { remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.nunghunna, from = {"ݨ", "ࣇ"}, to = {"ن", "ل"} }, } } m["pht"] = { "tiếng Phu Thái", 3626597, "tai-swe", "Thai", "Tiếng Phu Thái", "Phu Thái", } m["phu"] = { "tiếng Phuan", 3915665, nil, "Thai", "Tiếng Phuan", "Phuan", } m["phv"] = { "Pahlavani", 7124567, } m["phw"] = { "Phangduwali", 12953036, "sit-kie", ancestors = "ybh", } m["pia"] = { "Pima Bajo", 3388544, "azc", "Latn", } m["pib"] = { "Yine", 3135432, "awd", "Latn", } m["pic"] = { "Pinji", 36296, "bnt-tso", "Latn", } m["pid"] = { "Piaroa", 3382207, nil, "Latn", } m["pie"] = { "Piro", 7198055, "nai-kta", "Latn", } m["pif"] = { "Pingelapese", 36421, "poz-mic", "Latn", } m["pig"] = { "Pisabo", 966883, "sai-pan", "Latn", } m["pih"] = { "Pitcairn-Norfolk", 36554, "crp", "Latn", ancestors = "en", } m["pii"] = { "Pini", 10631925, } m["pij"] = { "Pijao", 7193519, } m["pil"] = { "tiếng Yom", 36893, "nic-yon", "Latn", "Tiếng Yom", "Yom", } m["pim"] = { "Powhatan", 2270532, "alg-eas", "Latn", } m["pin"] = { "Piame", 7190042, } m["pio"] = { "Piapoco", 3382208, "awd-nwk", "Latn", } m["pip"] = { "Pero", 2411063, "cdc-wst", } m["pir"] = { "Piratapuyo", 3389119, "sai-tuc", "Latn", } m["pis"] = { "Pijin", 36699, "crp", "Latn", ancestors = "en", } m["pit"] = { "Pitta-Pitta", 6433116, "aus-kar", "Latn", } m["piu"] = { "Pintupi-Luritja", 2591175, "aus-pam", } m["piv"] = { "Pileni", 2976736, "poz-pnp", "Latn", } m["piw"] = { "Pimbwe", 3894132, "bnt-mwi", } m["pix"] = { "Piu", 7199578, } m["piy"] = { "Piya-Kwonci", 3440492, } m["piz"] = { "Pije", 3388339, "poz-cln", "Latn", } m["pjt"] = { "tiếng Pitjantjatjara", 2982063, "aus-pam", "pjt-Latn", "Tiếng Pitjantjatjara", "Pitjantjatjara", } m["pkb"] = { "Kipfokomo", 7208693, "bnt-sab", "Latn", } m["pkc"] = { "tiếng Bách Tế", 4841264, "qfa-kor", "Hani, Kana", "Tiếng Bách Tế", "Bách Tế", sort_key = { Hani = "Hani-sortkey", Kana = "Kana-sortkey" }, } m["pkg"] = { "Pak-Tong", 3360711, } m["pkh"] = { "Pankhu", 7130962, "tbq-kuk", } m["pkn"] = { "Pakanha", 954916, "aus-pmn", } m["pko"] = { "Pökoot", 36323, "sdv-kln", } m["pkp"] = { "Pukapukan", 36447, "poz-pnp", "Latn", } m["pkr"] = { "tiếng Kurumba Attapady", 16835180, "dra-imd", "Mlym", "Tiếng Kurumba Attapady", "Kurumba Attapady", translit = "ml-translit", } m["pks"] = { "Pakistan Sign Language", 22964057, "sgn", } m["pkt"] = { "tiếng Mã Liềng", 6583562, "mkh-vie", nil, "Tiếng Mã Liềng", "Mã Liềng", } m["pku"] = { "tiếng Paku", 2932604, "poz-bre", "Latn", "Tiếng Paku", "Paku" } m["pla"] = { "Miani", 12952844, nil, "Latn", } m["plb"] = { "Polonombauk", 7225957, "poz-vnc", "Latn", } m["plc"] = { "Central Palawano", 12953795, "phi", "Latn", } m["ple"] = { "Palu'e", 2196866, "poz-cet", "Latn", } m["plg"] = { "tiếng Pilagá", 2748259, "sai-guc", "Latn", "Tiếng Pilagá", "Pilagá", } m["plh"] = { "Paulohi", 7155331, "poz-cma", } m["plj"] = { "tiếng Polci", 3914383, "Ngôn ngữ không xếp loại", "Latn", "Tiếng Polci", "Polci", } m["plk"] = { "tiếng Shina Kohistan", 12953882, "inc-shn", "ur-Arab", "Tiếng Shina Kohistan", "Shina Kohistan", } m["pll"] = { "tiếng Palaung Shwe", 27941664, "mkh-pal", "Mymr", "Tiếng Palaung Shwe", "Palaung Shwe", } m["pln"] = { "tiếng Palenquero", 36665, "crp", "Latn", "Tiếng Palenquero", "Palenquero", ancestors = "es", } m["plo"] = { "Oluta Popoluca", 5908687, "nai-miz", "Latn", } m["plq"] = { "tiếng Pala", 36582, "ine-ana", "Xsux", "Tiếng Pala", "Pala", } m["plr"] = { "Palaka Senoufo", 36346, "alv-snf", "Latn", } m["pls"] = { "San Marcos Tlalcoyalco Popoloca", 12641692, "omq-pop", "Latn", } m["plu"] = { "Palikur", 3073448, "awd", "Latn", } m["plv"] = { "Southwest Palawano", 15614922, "phi", "Latn", } m["plw"] = { "tiếng Palawano Brooke's Point", 12953796, "phi", "Latn", "Tiếng Palawano Brooke's Point", "Palawano Brooke's Point", } m["ply"] = { "tiếng Bố Lưu", 3361723, "mkh-pkn", "Latn", "Tiếng Bố Lưu", "Bố Lưu", } m["plz"] = { "Paluan", 7128795, nil, "Latn", } m["pma"] = { "Paama", 3130286, "poz-vnc", "Latn", } m["pmb"] = { "Pambia", 36267, "znd", "Latn", } m["pmd"] = { "Pallanganmiddang", 7127734, "aus-pam", "Latn", } m["pme"] = { "Pwaamei", 3411152, "poz-cln", "Latn", } m["pmf"] = { "Pamona", 3513320, "poz-kal", "Latn", } m["pmi"] = { "Northern Pumi", 3403245, "sit-qia", } m["pmj"] = { "Southern Pumi", 3403246, "sit-qia", } m["pmk"] = { "Pamlico", nil, "alg-eas", "Latn", } m["pml"] = { "Sabir", 636479, "crp", "Latn", ancestors = "lij, pro, vec", } m["pmm"] = { "Pol", 36408, "bnt-kak", "Latn", } m["pmn"] = { "Pam", 7129017, "alv-mbm", } m["pmo"] = { "Pom", 7227178, "poz-hce", "Latn", } m["pmq"] = { "Northern Pame", 3361762, "omq", "Latn", } m["pmr"] = { "Paynamar", 3450824, } m["pms"] = { "tiếng Piemonte", 15085, "roa-git", "Latn", "Tiếng Piemonte", "Piemonte", } m["pmt"] = { "tiếng Tuamotu", 36763, "poz-pep", "Latn", "Tiếng Tuamotu", "Tuamotu", } m["pmu"] = { "Mirpur Panjabi", 6874480, } m["pmw"] = { "Plains Miwok", 3391031, "nai-you", "Latn", } m["pmx"] = { "Poumei Naga", 12952910, "tbq-anp", } m["pmy"] = { "Papuan Malay", 12473446, nil, "Latn", } m["pmz"] = { "Southern Pame", 3361765, "omq", "Latn", } m["pna"] = { "Punan Bah-Biau", 4842201, } m["pnb"] = { "Western Panjabi", 58635, "inc-pan", "pa-Arab", ancestors = "pa", } m["pnc"] = { "Pannei", 7131391, } m["pnd"] = { "Mpinda", 63308194, "bnt-kmb", } m["pne"] = { "Western Penan", 12953808, "poz-swa", "Latn", } m["png"] = { "Pongu", 36282, "nic-shi", } m["pnh"] = { "Penrhyn", 3130301, "poz-pep", "Latn", } m["pni"] = { "Aoheng", 4778608, "poz", } m["pnj"] = { "Pinjarup", 33103591, } m["pnk"] = { "tiếng Pauna", 2064378, "awd", "Latn", "Tiếng Pauna", "Pauna", } m["pnl"] = { "Paleni", 7127118, "alv-wan", "Latn", } m["pnm"] = { "Punan Batu", 7259892, } m["pnn"] = { "Pinai-Hagahai", 5638511, } m["pno"] = { "Panobo", 3141869, "sai-pan", "Latn", } m["pnp"] = { "tiếng Pancana", 7130204, "poz-mun", "Latn", "Tiếng Pancana", "Pancana" } m["pnq"] = { "Pana (West Africa)", 7129739, "nic-gnn", "Latn", } m["pnr"] = { "Panim", 11732562, "ngf-mad", } m["pns"] = { "tiếng Ponosakan", 7227956, "phi", "Latn", "Tiếng Ponosakan", "Ponosakan", } m["pnt"] = { "tiếng Hy Lạp Pontos", 36748, "grk", "Grek, Latn, Cyrl", "Tiếng Hy Lạp Pontos", "Hy Lạp Pontos", ancestors = "gkm", translit = {Grek = "el-translit"}, entry_name = {remove_diacritics = c.caron .. c.diaerbelow .. c.brevebelow}, sort_key = s["Grek-sortkey"], } m["pnu"] = { "Jiongnai Bunu", 56325, "hmn", } m["pnv"] = { "Pinigura", 10631927, "aus-psw", "Latn", } m["pnw"] = { "Panyjima", 3913830, "aus-nga", "Latn", } m["pnx"] = { "tiếng Phong-Kniang", 3914627, "mkh", nil, "Tiếng Phong-Kniang", "Phong-Kniang", } m["pny"] = { "tiếng Pinyin", 36250, "nic-nge", "Latn", "Tiếng Pinyin", "Pinyin", } m["pnz"] = { "Pana (Central Africa)", 36241, "alv-mbm", "Latn", } m["poc"] = { "Poqomam", 36416, "myn", "Latn", } m["poe"] = { "San Juan Atzingo Popoloca", 12953819, "omq-pop", "Latn", } m["pof"] = { "Poke", 7208577, "bnt-ske", } m["pog"] = { "Potiguára", 56722, "tup-gua", "Latn", } m["poh"] = { "Poqomchi'", 36414, "myn", "Latn", } m["poi"] = { "tiếng Popoluca cao nguyên", 7511556, "nai-miz", "Latn", "Tiếng Popoluca cao nguyên", "Popoluca cao nguyên", } m["pok"] = { "Pokangá", 25559704, "sai-tuc", "Latn", } m["pom"] = { "Southeastern Pomo", 3396025, "nai-pom", "Latn", } m["pon"] = { "tiếng Pohnpei", 28422, "poz-mic", "Latn", "Tiếng Pohnpei", "Pohnpei", } m["poo"] = { "Central Pomo", 3396020, "nai-pom", "Latn", } m["pop"] = { "Pwapwa", 3411153, "poz-cln", "Latn", } m["poq"] = { "Texistepec Popoluca", 5908707, "nai-miz", "Latn", } m["pos"] = { "Sayula Popoluca", 5908722, "nai-miz", "Latn", } m["pot"] = { "tiếng Potawatomi", 56749, "alg", "Latn", "Tiếng Potawatomi", "Potawatomi", } m["pov"] = { "tiếng Creole Guinea-Bissau", 33339, "crp", "Latn", "Tiếng Creole Guinea-Bissau", "Creole Guinea-Bissau", ancestors = "pt", } m["pow"] = { "San Felipe Otlaltepec Popoloca", 25559598, "omq-pop", "Latn", } m["pox"] = { "tiếng Polabia", 36741, "zlw-lch", "Latn", "Tiếng Polabia", "Polabia", } m["poy"] = { "Pogolo", 2429648, "bnt-kil", } m["ppa"] = { "Pao", 7132069, } m["ppe"] = { "Papi", 7132809, } m["ppi"] = { "Paipai", 56726, "nai-yuc", "Latn", } m["ppk"] = { "Uma", 7881036, "poz-kal", "Latn", } m["ppl"] = { "tiếng Pipil", 1186896, "azc-nah", "Latn", "Tiếng Pipil", "Pipil", entry_name = {remove_diacritics = c.acute .. c.macron}, } m["ppm"] = { "tiếng Papuma", 7133239, "poz-hce", "Latn", } m["ppn"] = { "Papapana", 3362757, "poz-ocw", "Latn", } m["ppo"] = { "tiếng Folopa", 5464843, "paa", "Latn", "Tiếng Folopa", "Folopa", } m["ppq"] = { "Pei", 7160903, } m["pps"] = { "San Luís Temalacayuca Popoloca", 25559602, "omq-pop", "Latn", } m["ppt"] = { "Pa", 3504757, "ngf", "Latn", } m["ppu"] = { "Papora", 2094884, "map", "Latn", } m["pqa"] = { "Pa'a", 3441315, "cdc-wst", } m["pqm"] = { "tiếng Malecite-Passamaquoddy", 3183144, "alg-eas", "Latn", "Tiếng Malecite-Passamaquoddy", "Malecite-Passamaquoddy", } m["pra"] = { "tiếng Prakrit", 192170, "inc-mid", "Brah, Deva, Gujr, Knda", "Tiếng Prakrit", "Prakrit", ancestors = "inc-ash", translit = { -- Brah translit in [[Module:scripts/data]] Deva = "pra-Deva-translit", Gujr = "sa-Gujr-translit", Knda = "pra-Knda-translit", }, strip_diacritics = { -- FIXME: separate by script from = {"ऎ", "ऒ", u(0x0946), u(0x094A), "य़", "ಯ಼", u(0x11071), u(0x11072), u(0x11073), u(0x11074)}, to = {"ए", "ओ", u(0x0947), u(0x094B), "य", "ಯ", "𑀏", "𑀑", u(0x11042), u(0x11044)} } , } m["prc"] = { "tiếng Parachi", 2640637, "ira-orp", "Arab", "Tiếng Parachi", "Parachi", } -- "prd" IS NOT INCLUDED, SEE WT:LT m["pre"] = { "Principense", 36520, "crp", "Latn", ancestors = "pt", } m["prf"] = { "Paranan", 7135433, "phi", } m["prg"] = { "tiếng Phổ cổ", 35501, "bat-wes", "Latn", "Tiếng Phổ cổ", "Phổ cổ", } m["prh"] = { "Porohanon", 6583710, "phi", } m["pri"] = { "Paicî", 732131, "poz-cln", "Latn", } m["prk"] = { "tiếng Parauk", 3363719, "mkh-pal", nil, "Tiếng Parauk", "Parauk", } m["prl"] = { "Peruvian Sign Language", 3915508, "sgn", } m["prm"] = { "Kibiri", 56745, "paa", } m["prn"] = { "tiếng Prasun", 32689, "nur-nor", nil, "Tiếng Prasun", "Prasun", } m["pro"] = { "tiếng Occitan cổ", 2779185, "roa-ocr", "Latn", "Tiếng Occitan cổ", "Occitan cổ", sort_key = {remove_diacritics = c.cedilla}, } -- "prp" IS NOT INCLUDED, SEE WT:LT m["prq"] = { "Ashéninka Perené", 3450601, "awd", "Latn", } m["prr"] = { "Puri", 7261687, } -- "prs" IS TREATED AS "fa" (or as etymology-only), SEE WT:LT m["prt"] = { "tiếng Phai", 7180184, "mkh-khm", "Thai", "Tiếng Phai", "Phai", } m["pru"] = { "Puragi", 7260800, "ngf-sbh", } m["prw"] = { "Parawen", 7136291, "ngf-mad", } m["prx"] = { "Purik", 567905, "sit-lab", } m["prz"] = { "Providencia Sign Language", 3322084, "sgn", } m["psa"] = { "Asue Awyu", 11266334, } m["psc"] = { "Persian Sign Language", 7170221, "sgn", } m["psd"] = { "Plains Indian Sign Language", 2380124, "sgn", } m["pse"] = { "Central Malay", 3367751, "poz-mly", } m["psg"] = { "Penang Sign Language", 4924925, "sgn", } m["psh"] = { "Southwest Pashayi", 16112270, "inc-pas", "fa-Arab", } m["psi"] = { "Southeast Pashayi", 23713536, "inc-pas", "fa-Arab", } m["psl"] = { "Puerto Rican Sign Language", 7258608, "sgn-fsl", } m["psm"] = { "Pauserna", 2912846, "tup-gua", "Latn", } m["psn"] = { "Panasuan", 7130113, "poz", } m["pso"] = { "Polish Sign Language", 3915194, "sgn-gsl", } m["psp"] = { "Philippine Sign Language", 3551357, "sgn-fsl", } m["psq"] = { "Pasi", 7142091, } m["psr"] = { "Portuguese Sign Language", 3915472, "sgn", } m["pss"] = { "Kaulong", 3194294, "poz-ocw", } m["psu"] = { "tiếng Prakrit Saurasen", 2452885, "inc-psu", "Brah, Deva", "Tiếng Prakrit Saurasen", "Prakrit Saurasen", translit = "Brah-translit", ancestors = "inc-pra", } m["psw"] = { "Port Sandwich", 3398324, "poz-vnc", "Latn", } m["psy"] = { "Piscataway", 3504233, "alg-eas", } m["pta"] = { "Pai Tavytera", 7124619, "tup-gua", "Latn", } m["pth"] = { "Pataxó Hã-Ha-Hãe", 7144304, } m["pti"] = { "Pintiini", 10632026, "aus-pam", } m["ptn"] = { "Patani", 7144242, "poz-hce", "Latn", } m["pto"] = { "Zo'é", 8073148, "tup-gua", "Latn", } m["ptp"] = { "Patep", 3368679, "poz-ocw", "Latn", } m["ptq"] = { "Pattapu", 60785085, "dra-tam", } m["ptr"] = { "Piamatsina", 7190040, "poz-vnc", "Latn", } m["ptt"] = { "Enrekang", 12953520, } m["ptu"] = { "Bambam", 4853321, "poz-ssw", } m["ptv"] = { "Port Vato", 3398323, nil, "Latn", } m["ptw"] = { "Pentlatch", 2069475, "sal", "Latn", } m["pty"] = { "Pathiya", 7144790, "dra-mal", } m["pua"] = { "Purepecha", 16114351, "qfa-iso", "Latn", sort_key = {remove_diacritics = c.acute}, } m["pub"] = { "Purum", 6400562, "tbq-kuk", "Latn", } m["puc"] = { "Punan Merap", 7259895, } m["pud"] = { "Punan Aput", 4782333, } m["pue"] = { "Puelche", 33660, } m["puf"] = { "Punan Merah", 7259894, } m["pug"] = { "Phuie", 36375, "nic-gnw", } m["pui"] = { "tiếng Puinave", 3027918, nil, "Latn", "Tiếng Puinave", "Puinave", } m["puj"] = { "Punan Tubu", 7259896, "poz-swa", } m["pum"] = { "Puma", 33736, "sit-kic", } m["puo"] = { "tiếng Xinh Mun", 6440803, "mkh-khm", nil, "Tiếng Xinh Mun", "Xinh Mun" } m["pup"] = { "Pulabu", 7259163, "ngf-mad", } m["puq"] = { "Puquina", 1207739, } m["pur"] = { "Puruborá", 7261619, "tup", } m["put"] = { "Putoh", 12953832, "poz-swa", "Latn", } m["puu"] = { "tiếng Punu", 36401, "bnt-sir", "Latn", "Punu", "Tiếng Punu", } m["puw"] = { "Puluwat", 36397, "poz-mic", "Latn", } m["pux"] = { "Puare", 3507983, } m["puy"] = { "Purisimeño", 2967638, "nai-chu", "Latn", } m["pwa"] = { "Pawaia", 7156099, "paa", "Latn", } m["pwb"] = { "Panawa", 47385077, "nic-jer", "Latn", ancestors = "jer", } m["pwg"] = { "Gapapaiwa", 3095245, "poz-ocw", "Latn", } m["pwi"] = { "Patwin", 3370188, "nai-wtq", "Latn", } m["pwm"] = { "tiếng Molbog", 6895718, "poz-san", "Latn", "Tiếng Molbog", "Molbog" } m["pwn"] = { "tiếng Paiwan", 715755, "map", "Latn", "Tiếng Paiwan", "Paiwan", } m["pwo"] = { "tiếng Pwo Tây", 7988202, "kar", "Mymr", "Tiếng Pwo Tây", "Pwo Tây", } m["pwr"] = { "Powari", 12640277, "inc-hie", "Deva", } m["pww"] = { "tiếng Pwo Bắc", 7058885, "kar", "Thai", "Tiếng Pwo Bắc", "Pwo Bắc", } m["pxm"] = { "Quetzaltepec Mixe", 6842374, "nai-miz", "Latn", } m["pye"] = { "Pye Krumen", 11157382, "kro-grb", } m["pym"] = { "Fyam", 3914025, "nic-ple", "Latn", } m["pyn"] = { "Poyanáwa", 3401023, "sai-pan", } m["pys"] = { "Paraguayan Sign Language", 7134698, "sgn", } m["pyu"] = { "tiếng Puyuma", 716690, "map", "Latn", "Tiếng Puyuma", "Puyuma", } m["pyx"] = { "Tircul", 36259, "sit", } m["pyy"] = { "Pyen", 7262966, "tbq-bis", } m["pzh"] = { "tiếng Pazeh", 36435, "map", "Latn", "Tiếng Pazeh", "Pazeh", } m["pzn"] = { "Para Naga", 7133667, "sit-aao", } return require("Module:languages").finalizeData(m, "language") 9p94ks8jssa77lpxho73j75urido6vp Mô đun:translit-redirect/data 828 273990 2568718 2082932 2026-10-06T01:08:03Z Hiyuune 50834 (By [[meta:Indic-TechCom/Tools|FindAndReplace]]) 2568718 Scribunto text/plain result = { ["ang"] = { ["Latn"] = { }, ["Runr"] = { ["module"] = "Runr-translit", } }, ["arc"] = { ["Armi"] = { ["module"] = "Armi-translit", }, ["Hebr"] = { }, ["Palm"] = { ["module"] = "Palm-translit", }, ["Syrc"] = { }, }, ["byn"] = { ["Latn"] = { }, ["Ethi"] = { ["module"] = "Ethi-translit", }, }, ["cr"] = { ["Latn"] = { }, ["Cans"] = { ["module"] = "cr-translit", }, }, ["dv"] = { ["Thaa"] = { ["module"] = "dv-translit", }, ["Diak"] = { ["module"] = "Diak-translit", } }, ["grc"] = { ["polytonic"] = { ["module"] = "grc-translit", }, ["Cprt"] = { ["module"] = "Cprt-translit", }, ["noError"] = true, }, ["khb"] = { ["Talu"] = { ["module"] = "Talu-translit", }, ["Lana"] = { -- ["module"] = "Lana-translit", }, }, ["iu"] = { ["Cans"] = { ["module"] = "iu-translit", }, ["Latn"] = { }, }, ["kyu"] = { ["Kali"] = { ["module"] = "Kali-translit", }, ["Mymr"] = { }, ["Latn"] = { }, }, ["lzz"] = { ["Geor"] = { ["module"] = "lzz-translit", }, ["Latn"] = { }, }, ["mai"] = { ["Deva"] = { ["module"] = "mai-translit", }, ["Tirh"] = { ["module"] = "mai-Tirh-translit", }, ["Kthi"] = { ["module"] = "bho-Kthi-translit", }, }, ["mni"] = { ["Mtei"] = { ["module"] = "Mtei-translit", }, ["Beng"] = { -- ["module"] = "Beng-translit", }, }, ["new"] = { ["Deva"] = { ["module"] = "new-translit", }, ["Newa"] = { ["module"] = "new-Newa-translit", }, }, ["non"] = { ["Latn"] = { }, ["Runr"] = { ["module"] = "Runr-translit", }, }, ["oge"] = { ["Geor"] = { ["module"] = "Geor-translit", }, ["Geok"] = { ["module"] = "Geok-translit", }, }, ["pa"] = { ["debug_mode"] = true, ["Guru"] = { ["module"] = "Guru-translit", }, ["pa-Arab"] = { ["module"] = "pa-Aran-translit", }, }, ["pal"] = { ["Latn"] = { }, ["Phli"] = { ["module"] = "Phli-translit", }, ["Avst"] = { ["module"] = "Avst-translit", }, ["pal-Avst"] = { ["module"] = "Avst-translit", }, ["Mani"] = { ["module"] = "Mani-translit", }, ["Phlv"] = { ["module"] = "Phlv-translit", }, ["Phlp"] = { -- ["module"] = "Phlp-translit", }, }, ["pi"] = { ["Brah"] = { ["module"] = "Brah-translit", }, ["Deva"] = { ["module"] = "sa-translit", }, ["Sinh"] = { ["module"] = "si-translit", }, ["Beng"] = { ["module"] = "pi-translit", }, ["Mymr"] = { ["module"] = "pi-translit", }, ["Thai"] = { ["module"] = "pi-translit", }, ["Lana"] = { ["module"] = "pi-translit", }, ["Laoo"] = { ["module"] = "pi-translit", }, ["Khmr"] = { ["module"] = "pi-translit", }, ["Cakm"] = { ["module"] = "Cakm-translit", }, }, ["rhg"] = { ["Rohg"] = { ["module"] = "Rohg-translit", }, ["Arab"] = { }, ["Mymr"] = { }, ["Latn"] = { }, ["Beng"] = { }, }, ["qwm"] = { ["Latn"] = { }, ["Arab"] = { }, ["Armn"] = { ["module"] = "Armn-translit", }, }, ["rmi"] = { ["Latn"] = { }, ["Armn"] = { ["module"] = "Armn-translit", }, }, ["sa"] = { ["Deva"] = { ["module"] = "sa-translit", }, ["Brah"] = { ["module"] = "Brah-translit", }, ["Gujr"] = { ["module"] = "sa-Gujr-translit", }, ["as-Beng"] = { ["module"] = "sa-Beng-translit", }, ["Beng"] = { ["module"] = "sa-Beng-translit", }, ["Knda"] = { ["module"] = "sa-Knda-translit", }, ["Modi"] = { ["module"] = "sa-Modi-translit", }, ["Orya"] = { ["module"] = "sa-Orya-translit", }, ["Java"] = { ["module"] = "sa-Java-translit", }, ["Khmr"] = { ["module"] = "pi-translit", }, ["Sinh"] = { ["module"] = "si-translit", }, ["Mymr"] = { ["module"] = "pi-translit", }, ["Thai"] = { ["module"] = "pi-translit", }, ["Lana"] = { ["module"] = "pi-translit", }, ["Laoo"] = { ["module"] = "pi-translit", }, ["noError"] = true, }, ["skr"] = { ["pa-Arab"] = { ["module"] = "pa-Aran-translit", }, ["Mult"] = { ["module"] = "Mult-translit", }, ["Deva"] = { -- ["module"] = "skr-Deva-translit", }, }, ["tcy"] = { ["Mlym"] = { ["module"] = "ml-translit", }, ["Knda"] = { ["module"] = "kn-translit", }, }, ["udi"] = { ["Latn"] = { }, ["Armn"] = { ["module"] = "Armn-translit", }, ["Geor"] = { ["module"] = "Geor-translit", }, ["Cyrl"] = { ["module"] = "udi-translit", }, }, ["xpr"] = { ["Mani"] = { ["module"] = "Mani-translit", }, ["Latn"] = { }, ["Prti"] = { ["module"] = "Prti-translit", }, ["Phlv"] = { }, ["None"] = { }, }, ["sog"] = { ["Sogd"] = { ["module"] = "Sogd-translit", }, ["Mani"] = { ["module"] = "Mani-translit", }, ["Sogo"] = { ["module"] = "Sogo-translit", }, ["Syrc"] = { }, }, ["inc-ash"] = { ["Brah"] = { ["module"] = "Brah-translit", }, ["Khar"] = { ["module"] = "Khar-translit", }, }, ["inc-opa"] = { ["Guru"] = { ["module"] = "inc-opa-Guru-translit", }, ["pa-Arab"] = { ["module"] = "pa-Aran-translit", }, }, ["inc-pra"] = { ["Brah"] = { ["module"] = "Brah-translit", }, ["Deva"] = { ["module"] = "inc-pra-Deva-translit", }, ["Knda"] = { ["module"] = "inc-pra-Knda-translit", }, }, ["kok"] = { ["Deva"] = { -- ["module"] = "kok-translit", }, ["Knda"] = { ["module"] = "kn-translit", }, ["Mlym"] = { ["module"] = "ml-translit", }, ["Arab"] = { -- ["module"] = "kok-Arab-translit", }, }, ["kfr"] = { ["Gujr"] = { ["module"] = "gu-translit", }, ["sd-Arab"] = { -- ["module"] = "sd-Arab-translit", }, ["Sind"] = { ["module"] = "Sind-translit", }, ["Khoj"] = { -- ["module"] = "Khoj-translit", }, }, ["mwr"] = { ["Deva"] = { ["module"] = "hi-translit", -- for now }, ["Mahj"] = { ["module"] = "Mahj-translit", }, }, ["omr"] = { ["Deva"] = { ["module"] = "sa-translit", }, ["Modi"] = { ["module"] = "Modi-translit", }, }, ["bho"] = { ["Deva"] = { ["module"] = "bho-translit", }, ["Kthi"] = { ["module"] = "bho-Kthi-translit", }, }, ["doi"] = { ["Deva"] = { ["module"] = "hi-translit", }, ["Dogr"] = { ["module"] = "Dogr-translit", }, }, ["wbl"] = { ["Arab"] = { -- ["module"] = "Arab-translit", }, ["Cyrl"] = { ["module"] = "tg-translit", }, ["Latn"] = { }, }, ["ks"] = { ["ks-Arab"] = { ["module"] = "ks-Arab-translit", }, ["Deva"] = { ["module"] = "ks-Deva-translit", }, ["Shrd"] = { ["module"] = "Shrd-translit", }, ["Latn"] = { }, }, ["sd"] = { ["sd-Arab"] = { -- ["module"] = "sd-Arab-translit", }, ["Deva"] = { -- ["module"] = "sd-Deva-translit", }, ["Sind"] = { ["module"] = "Sind-translit", }, ["Khoj"] = { -- ["module"] = "Khoj-translit", }, }, ["mr"] = { ["Deva"] = { ["module"] = "mr-translit", }, ["Modi"] = { ["module"] = "mr-Modi-translit", }, }, ["vah"] = { ["Deva"] = { ["module"] = "mr-translit", }, ["Modi"] = { ["module"] = "mr-Modi-translit", }, }, ["xco"] = { ["Chrs"] = { ["module"] = "Chrs-translit", }, }, ["xpu"] = { ["Phnx"] = { ["module"] = "Phnx-translit", }, ["Grek"] = { }, ["Latn"] = { }, }, ["phn"] = { ["Phnx"] = { ["module"] = "Phnx-translit", }, }, ["xsr"] = { ["Deva"] = { ["module"] = "xsr-deva-translit", }, ["Tibt"] = { ["module"] = "xsr-translit", }, }, } result["kmr"] = result["ku"] return result szbeq7d4u9hxj44pohiuw3gjpwgxvv7 Mô đun:languages/data/exceptional 828 279282 2568721 2567287 2026-10-06T01:08:04Z Hiyuune 50834 (By [[meta:Indic-TechCom/Tools|FindAndReplace]]) 2568721 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"] = { "Proto-Central New South Wales", 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"] = { "Proto-Iwaidjan", 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"] = { "Proto-Bongo-Bagirmi", nil, "csu-bba", "Latn", type = "reconstructed", } m["csu-maa-pro"] = { "Proto-Mangbetu", nil, "csu-maa", "Latn", type = "reconstructed", } m["csu-pro"] = { "Proto-Central Sudanic", 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") njin15e6wa15j3invk4cjjvh3llp0wb muuná 0 286852 2568689 2113877 2026-10-05T16:06:25Z Hiyuune 50834 2568689 wikitext text/x-wiki =={{langname|irk}}== ==={{section|n}}=== {{head|irk|Danh từ}} # [[trái tim]]. ==={{section|ref}}=== * Mous, Maarten; Qorro, Martha; Kießling, Roland (2002) Iraqw-English Dictionary (Kuschitische Sprachstudien), volume 18, Köln, Germany: Rüdiger Köppe Verlag. iwlt6x0jtgd0px3impquh90pas5ny75 Mô đun:number list/data/skr 828 287128 2568713 2114751 2026-10-06T01:05:13Z Hiyuune 50834 2568713 Scribunto text/plain local export = {numbers = {}} export.numeral_config = { zero_codepoint = 0x6F0, -- ٠, ARABIC-INDIC DIGIT ZERO Indic_separator = ",", } local numbers = export.numbers numbers[0] = { cardinal = "صِفر", ordinal = "صِفرواں", } numbers[1] = { cardinal = {"ہِک"}, ordinal = {"پَہلا"}, } numbers[2] = { cardinal = {"ݙُو"}, ordinal = {"ݙُوجھا"}, } numbers[3] = { cardinal = {"تَرائے"}, ordinal = {"تَرِیجھا"}, } numbers[4] = { cardinal = {"چار"}, ordinal = {"چوتھا"}, } numbers[5] = { cardinal = {"پَنج"}, ordinal = {"پَنڄْوَاں"}, } numbers[6] = { cardinal = {"چھیں"}, ordinal = {"چھینوَاں"}, } numbers[7] = { cardinal = {"سَت"}, ordinal = {"سَتْوَاں"}, } numbers[8] = { cardinal = {"اَٹھ"}, ordinal = {"اَٹْھوَاں"}, } numbers[9] = { cardinal = {"نَوں"}, ordinal = {"ناواں"}, } numbers[10] = { cardinal = {"ݙَہ", "ݙاہ"}, ordinal = {"ݙَہْوَاں", "ݙاہْواں"}, } numbers[11] = { cardinal = {"یارھاں"}, ordinal = {"یارْھوَاں"}, } numbers[12] = { cardinal = {"ٻارھاں"}, ordinal = {"ٻارْھوَاں"}, } numbers[13] = { cardinal = {"تیرھاں"}, ordinal = {"تیرْھوَاں"}, } numbers[14] = { cardinal = {"چوݙاں"}, ordinal = {"چوݙْواں"}, } numbers[15] = { cardinal = {"پَندْھراں"}, ordinal = {"پَندھرْوَاں"}, } numbers[16] = { cardinal = {"سولھاں"}, ordinal = {"سولْھوَاں"}, } numbers[17] = { cardinal = {"سَتارھاں"}, ordinal = {"سَتارْھوَاں"}, } numbers[18] = { cardinal = {"اٹھارھاں"}, ordinal = {"اٹھارْھوَاں"}, } numbers[19] = { cardinal = {"اُنْوِیہہ", "اُنّی"}, ordinal = {"اُنْوِیْوَھاں", "اُنِیوَاں"}, } numbers[20] = { cardinal = {"وِیْہہ"}, ordinal = {"وِیْہْوَاں", "وِیْوَھاں"}, } numbers[21] = { cardinal = {"اِکّی", "اِکْوِیہہ"}, ordinal = {"اِکِیواں"}, } numbers[22] = { cardinal = {"ٻاوی", "ٻاوِیہہ"}, ordinal = {"ٻَوِیواں"}, } numbers[23] = { cardinal = {"تریوی", "تریوِیہہ"}, } numbers[24] = { cardinal = {"چَوّی", "چَوِیہہ"}, } numbers[25] = { cardinal = {"پَنْجی", "پَنجْوِیہہ"}, } numbers[26] = { cardinal = {"چَھٻّی", "چھوِّیہہ"}, } numbers[27] = { cardinal = {"سَتاوی", "سَتاوِیہہ"}, } numbers[28] = { cardinal = {"اٹھاوی", "اٹھاوِیہہ"}, } numbers[29] = { cardinal = {"اُنَتّی", "اُنَترِیہہ"}, } numbers[30] = { cardinal = {"ترِیہہ"}, } numbers[31] = { cardinal = {"اِکَتّی", "اِکَترِیہہ"}, } numbers[32] = { cardinal = {"ٻَتّی", "ٻَترِیہہ"}, } numbers[33] = { cardinal = {"تینتی", "تینترِیہہ"}, } numbers[34] = { cardinal = {"چونتی", "چونتَرِیہہ"}, } numbers[35] = { cardinal = {"پَینتی", "پَینترِیہہ"}, } numbers[36] = { cardinal = {"چَھتّی", "چَھترِیہہ"}, } numbers[37] = { cardinal = {"سَینتی", "سَتَترِیہہ"}, } numbers[38] = { cardinal = {"اٹَھتّی", "اٹَھترِیہہ"}, } numbers[39] = { cardinal = {"اُنتالی", "اُنتالِیہہ"}, } numbers[40] = { cardinal = {"چالِیہہ"}, } numbers[41] = { cardinal = {"اِکْتالی"}, } numbers[42] = { cardinal = {"ٻِتالی"}, } numbers[43] = { cardinal = {"تِرتالی"}, } numbers[44] = { cardinal = {"چُتالی"}, } numbers[45] = { cardinal = {"پِنتالی", "پَینْتالی"}, } numbers[46] = { cardinal = {"چِھتالی"}, } numbers[47] = { cardinal = {"سَنتالی"}, } numbers[48] = { cardinal = {"اَٹھتالی"}, } numbers[49] = { cardinal = {"اُنَنجھا", "اُنوَنجھا"}, } numbers[50] = { cardinal = {"پَنجھا"}, } numbers[51] = { cardinal = {"اِکوَنجھا"}, } numbers[52] = { cardinal = {"ٻَوَنجھا"}, } numbers[53] = { cardinal = {"تِروَنجھا"}, } numbers[54] = { cardinal = {"چُرَنجھا", "چُروَنجھا"}, } numbers[55] = { cardinal = {"پَچوَنجھا"}, } numbers[56] = { cardinal = {"چِھوَنجھا"}, } numbers[57] = { cardinal = {"سَتوَنجھا"}, } numbers[58] = { cardinal = {"اَٹھوَنجھا"}, } numbers[59] = { cardinal = {"اُنَیٹھ"}, } numbers[60] = { cardinal = {"سَٹھ"}, } numbers[61] = { cardinal = {"اِکَیٹھ"}, } numbers[62] = { cardinal = {"ٻِئَیٹھ", "ٻَیٹھ"}, } numbers[63] = { cardinal = {"تِرئَیٹھ", "تریٹھ"}, } numbers[64] = { cardinal = {"چونٹھ", "چُئِٹھ"}, } numbers[65] = { cardinal = {"پَینٹھ", "پَنجَیٹھ"}, } numbers[66] = { cardinal = {"چِھئَیٹھ"}, } numbers[67] = { cardinal = {"سَتَیٹھ"}, } numbers[68] = { cardinal = {"اٹَھیٹھ"}, } numbers[69] = { cardinal = {"اُنہَتَّر"}, } numbers[70] = { cardinal = {"سَتَّر", "سَتِّر"}, } numbers[71] = { cardinal = {"اِکہَتَّر"}, } numbers[72] = { cardinal = {"ٻَہَتَّر"}, } numbers[73] = { cardinal = {"تِہَتَّر"}, } numbers[74] = { cardinal = {"چُہَتَّر"}, } numbers[75] = { cardinal = {"پَنجَھتَّر"}, } numbers[76] = { cardinal = {"چِھہَتَّر"}, } numbers[77] = { cardinal = {"سَتَتَّر"}, } numbers[78] = { cardinal = {"اَٹَھتَّر"}, } numbers[79] = { cardinal = {"اُناسی"}, } numbers[80] = { cardinal = {"اَسّی"}, } numbers[81] = { cardinal = {"اِکانسی", "اِکاسی"}, } numbers[82] = { cardinal = {"ٻِیانسی", "ٻیاسی"}, } numbers[83] = { cardinal = {"تِریانسی", "تِرانسی"}, } numbers[84] = { cardinal = {"چُرانسی", "چُراسی"}, } numbers[85] = { cardinal = {"پنڄانسی", "پنڄاسی", "پنجانسی", "پنجاسی"}, } numbers[86] = { cardinal = {"چھیانسی", "چھیاسی"}, } numbers[87] = { cardinal = {"سَتانسی", "سَتاسی"}, } numbers[88] = { cardinal = {"اَٹھانسی", "اَٹھاسی"}, } numbers[89] = { cardinal = {"اُنانوے"}, } numbers[90] = { cardinal = {"نوّے"}, } numbers[91] = { cardinal = {"اِکانوے"}, } numbers[92] = { cardinal = {"ٻِیانوے"}, } numbers[93] = { cardinal = {"تِرانوے", "تِریانوے"}, } numbers[94] = { cardinal = {"چُرانوے"}, } numbers[95] = { cardinal = {"پَچانوے"}, } numbers[96] = { cardinal = {"چھیانوے"}, } numbers[97] = { cardinal = {"سَتانوے"}, } numbers[98] = { cardinal = {"اَٹھانوے"}, } numbers[99] = { cardinal = {"نِڑانْوے"}, } numbers[100] = { cardinal = {"سو"}, } numbers[1000] = { cardinal = {"ہَزار"}, } numbers[100000] = { cardinal = {"لَکھ"}, } numbers[10000000] = { cardinal = {"کَروڑ"}, } numbers[1000000000] = { cardinal = {"اَرَب"}, } numbers[1000000000000] = { cardinal = {"کَھرَب"}, } return export 9wd7qrk15kcoo4087bbiugsbsmv899b Mô đun:pa-Aran-translit 828 287133 2568714 2114761 2026-10-06T01:06:36Z Hiyuune 50834 Hiyuune đã đổi [[Mô đun:pa-Arab-translit]] thành [[Mô đun:pa-Aran-translit]] 2114761 Scribunto text/plain local U = mw.ustring.char local gsub = mw.ustring.gsub local export = {} local zabar = U(0x64E) local zer = U(0x650) local pesh = U(0x64F) local tashdid = U(0x651) -- also called shadda local jazm = "ْ" local he = "ہ" local ain = 'ع' local alif = 'ا' local ye = 'ی' local ye2 = 'ئ' local ye3 = "ے" local vao = "و" local aspirate = 'ھ' local nasal = 'ں' local consonants = "بٻبپتثجڄڄچحخدݙذرزژسشصضطظعغفقکڳگلࣇمنںݨوہھٹڈڑ" local consonantS = "بٻبپتثجڃڄچحخدݙذرزژسشصضطظعغفقکگڳلࣇمنݨہھٹڈڑ" local consonantS2 = "یٻببپتثجڃڄچحخدݙذرزژسشصضطظعغفقکڳگلࣇمنݨوہھٹڈڑ" local vowels = "اآیئےۓوؤ" local hes = "ہح" local diacritics = "َُِّْٰ" local ZZP = "َُِ" local mapping = { ["آ"] = 'ā', ["ا"] = 'a', ["ب"] = 'b', ["ٻ"] = 'ḇ', ["پ"] = 'p', ["ت"] = 't', ["ٹ"] = 'ṭ', ["ث"] = 's̱', ["ج"] = 'j', ["ڄ"] = 'ǰ', ["چ"] = 'c', ["ح"] = 'ḥ', ["خ"] = 'x', ["د"] = 'd', ["ڈ"] = 'ḍ', ["ݙ"] = 'ḏ', ["ذ"] = 'ẕ', ["ر"] = 'r', ['ڑ'] = "ṛ", ["ز"] = 'z', ["ژ"] = 'ž', ["س"] = 's', ["ش"] = 'ś', ["ص"] = 'ṣ', ["ض"] = 'ẓ', ["ط"] = 't̤', ["ظ"] = 'z̤', ["ع"] = 'ʻ', ["غ"] = 'ġ', ["ف"] = 'f', ["ق"] = 'q', ["ک"] = 'k', ["گ"] = 'g', ["ڳ"] = 'g̈', ["ݨ"] = 'ṇ', ["ࣇ"] = 'ḷ', ["ل"] = 'l', ["م"] = 'm', ["ن"] = 'n', ["و"] = 'v', ["ہ"] = 'h', ["ی"] = 'y', ["۔"] = ".", ["ں"] = 'ṉ', ["ھ"] = "h", ["ؤ"] = "'o", -- diacritics [zabar] = "a", [zer] = "i", [pesh] = "u", [jazm] = "", -- also sukun - no vowel [U(0x200C)] = "-", -- ZWNJ (zero-width non-joiner) -- ligatures ["ﻻ"] = "lā", ["ﷲ"] = "allāh", -- kashida ["ـ"] = "-", -- kashida, no sound -- numerals ["۱"] = "1", ["۲"] = "2", ["۳"] = "3", ["۴"] = "4", ["۵"] = "5", ["۶"] = "6", ["۷"] = "7", ["۸"] = "8", ["۹"] = "9", ["۰"] = "0", -- punctuation (leave on separate lines) ["؟"] = "?", -- question mark ["،"] = ",", -- comma ["؛"] = ";", -- semicolon ["«"] = '“', -- quotation mark ["»"] = '”', -- quotation mark ["٪"] = "%", -- percent ["؉"] = "‰", -- per mille ["٫"] = ".", -- decimals ["٬"] = ",", -- thousand ["ۓ"] = "-ye", ["ۀ"] = "h-e" -- he ye (in izafat) } function export.tr(text, lang, sc) -- EXCEPTIONS - leave as they are, unless they have been sorted out elsewhere text = gsub(text, '([' .. consonants .. jazm .. '])' .. ye .. '([' .. consonants .. '])' , "%1e%2") text = gsub(text, zabar .. aspirate .. "(ی)" , "hai") text = gsub(text, zabar .. aspirate .. "(و)" , "hau") text = gsub(text, "ئے", "'e") text = gsub(text, "َے", "ai") text = gsub(text, "ے", "e") text = gsub(text, "ہہ", "h") text = gsub(text, "اے", "ae") text = gsub(text, "ن٘", "ṉ") text = gsub(text, "اللہ", "allāh") text = gsub(text, "ؤ" .. pesh, "ū") text = gsub(text, "" .. alif .. ye2 .. "([" .. consonants .. "])", "ā'i%1") text = mw.ustring.gsub(text, "ِیو", "iyo") --text = mw.ustring.gsub(text, "ُھوِیں", "vīṉ") text = gsub(text, "([" .. pesh .. aspirate .. "])" .. "وِیں", "%1vīṉ") -- do-chashme-he zabar, zer, pesh / no need to mess about --- works for short vowels text = gsub(text, "([" .. ZZP .. "])" .. aspirate, "h%1") text = gsub(text, pesh .. aspirate .. vao .. jazm .. "", "ū") text = gsub(text, zabar .. aspirate .. vao .. jazm .. "", "ai") text = gsub(text, '([' .. consonants .. '])' .. aspirate .. ye .. jazm .. "", "%1he") -- Tashdeed text = gsub(text, '([' .. consonantS2 .. '])' .. tashdid, "%1%1") text = gsub(text, '([' .. consonantS2 .. '])' .. tashdid .. '([' .. ZZP .. '])', "%1%1%2") text = gsub(text, '([' .. ZZP .. '])' .. ye .. '([' .. ZZP .. '])' .. tashdid, "%1yy%2") text = gsub(text, '([' .. ZZP .. '])' .. vao .. '([' .. ZZP .. '])' .. tashdid, "%1vv%2") -- For some reason the tashdeed gets pushed after the other diacritics, so this line is necessary for tashdeed to work with other diacritics text = gsub(text, '([' .. consonants .. '])' .. '([' .. ZZP .. '])' .. tashdid, "%1%1%2") -- tanween diacritic / no need to mess about text = gsub(text, '([' .. consonants .. '])' .. 'ً' .. alif, "%1an") text = gsub(text, alif .. 'ً', "an") text = gsub(text, '([' .. consonants .. '])' .. 'ً', "%1an") -- khari zabar -- / no need to mess about text = gsub(text, '([' .. vowels .. '])' .. 'ٰ', "á") text = gsub(text, '([' .. consonants .. '])' .. 'ٰ' .. '([' .. vowels .. '])', "%1á") -- ‘ain text = gsub(text, alif .. ain , "ā‘") text = gsub(text, ain .. alif .. '([' .. consonants .. '])', "ʻā%1") text = gsub(text, '([' .. consonants .. '])' .. ain .. he, "%1ʻa") text = gsub(text, '([' .. consonants .. '])' .. '([' .. zer .. pesh .. ']?)' .. ain, "%1%2ʻ") text = gsub(text, ain .. zabar .. vao .. '([' .. consonants .. '])', "‘au%1") text = gsub(text, ain .. zabar .. ye .. '([' .. consonants .. '])', "‘ai%1") text = gsub(text, ain .. zer .. '([' .. consonants .. '])', "ʻi%1") text = gsub(text, ain .. pesh .. '([' .. consonants .. '])', "ʻu%1") text = gsub(text, ain .. zer .. ye .. '([' .. consonants .. '])', "ʻī%1") text = gsub(text, ain .. pesh .. vao .. '([' .. consonantS .. '])', "ʻū%1") -- Vao text = gsub(text, vao .. '([' .. ZZP .. '])', "v%1") text = gsub(text, 'ُو', "ū") text = gsub(text, '([' .. consonants .. '])' .. zabar .. vao .. alif, "%1avā") -- medial/final consonants --- (e) -- works text = gsub(text, '([' .. consonants .. '])' .. ye .. jazm .. '([' .. consonants .. '])', "%1e%2") text = gsub(text, '([' .. consonants .. '])' .. ye3, "%1e") text = gsub(text, '([' .. consonants .. '])' .. zabar .. ye3, "%1ai") --- izafat text = gsub(text, '([' .. consonants .. '])' .. zer .. " ", "%1-e ") --- he text = gsub(text, zabar .. he .. zer .. ye, "ahī") text = gsub(text, zabar .. he .. alif, "ahā") text = gsub(text, zabar .. he .. '([' .. consonants .. vowels .. '])', "ah%1") --- alif text = gsub(text, '([' .. consonants .. '])' .. alif, "%1ā") text = gsub(text, '([' .. consonants .. '])' .. tashdid .. alif, "%1%1ā") --- vao text = gsub(text, '([' .. consonants .. '])' .. vao, "%1o") text = gsub(text, '([' .. consonants .. '])' .. tashdid .. vao, "%1%1o") text = gsub(text, '([' .. consonants .. '])' .. tashdid .. zer .. ye .. jazm .. alif, "%1%1īyā") text = gsub(text, zer .. ye .. jazm .. alif, "īyā") text = gsub(text, zer .. ye .. alif, "iyā") -- Initial alif text = gsub(text, alif .. '([' .. consonantS .. '])', "a%1") text = gsub(text, alif .. zabar .. '([' .. consonantS .. '])', "a%1") text = gsub(text, "" .. alif .. '([' .. consonantS .. '])', "ā%1") text = gsub(text, alif .. zabar .. vao .. jazm .. "", "au") text = gsub(text, alif .. vao .. jazm .. "", "o") text = gsub(text, alif .. zabar .. ye .. jazm .. "", "ai") text = gsub(text, alif .. ye .. jazm .. "", "e") text = gsub(text, alif .. pesh .. '([' .. consonantS .. '])', "u%1") text = gsub(text, alif .. zer .. '([' .. consonants .. '])', "i%1") text = gsub(text, pesh .. vao .. jazm .. "", "ū") text = gsub(text, zer .. ye.. jazm .. "", "ī") -- diacritics text = gsub(text, "([" .. consonants .. "])" .. zabar .. vao, "%1au") text = gsub(text, "([" .. consonants .. "])" .. zabar .. ye, "%1ai") text = gsub(text, "([" .. consonants .. "])" .. zabar .. ye3, "%1ai") text = gsub(text, "([" .. consonants .. "])" .. ye, "%1ī") text = gsub(text, "([" .. consonants .. "])" .. zer .. ye, "%1ī") text = gsub(text, jazm .. alif, "ā") text = gsub(text, "ۂ", "a-e") text = mw.ustring.gsub(text, '.', mapping) -- Changed these to 'iy(*)', because they will be used for with ی, which are normally written as 'iy' text = mw.ustring.gsub(text, 'īā', "iyā") text = mw.ustring.gsub(text, 'īa', "iya") text = mw.ustring.gsub(text, 'aa', "ā") -- text = mw.ustring.gsub(text, "" .. "ا" .. "", "ā") text = mw.ustring.gsub(text, 'ئy', "'ī") text = mw.ustring.gsub(text, "" .. 'ئے', "'ye") text = mw.ustring.gsub(text, "īے", "iye") text = mw.ustring.gsub(text, "ئiy", "'ī") text = mw.ustring.gsub(text, "ٰh", "áh") return text end return export detbayhhrv8x5yukf9xdd0hhhsrtp51 2568722 2568714 2026-10-06T01:09:20Z Hiyuune 50834 2568722 Scribunto text/plain local m_str_utils = require("Module:string utilities") local U = m_str_utils.char local gsub = m_str_utils.gsub local export = {} local zabar = U(0x64E) local zer = U(0x650) local pesh = U(0x64F) local tashdid = U(0x651) -- also called shadda local jazm = "ْ" local he = "ہ" local ain = 'ع' local alif = 'ا' local ye = 'ی' local ye2 = 'ئ' local ye3 = "ے" local vao = "و" local aspirate = 'ھ' local nasal = 'ں' local consonants = "بٻبپتثجڄڄچحخدݙذرزژسشصضطظعغفقکڳگلࣇمنںݨوہھٹڈڑ" local consonantS = "بٻبپتثجڃڄچحخدݙذرزژسشصضطظعغفقکگڳلࣇمنݨہھٹڈڑ" local consonantS2 = "یٻببپتثجڃڄچحخدݙذرزژسشصضطظعغفقکڳگلࣇمنݨوہھٹڈڑ" local vowels = "اآیئےۓوؤ" local hes = "ہح" local diacritics = "َُِّْٰ" local ZZP = "َُِ" local mapping = { ["آ"] = 'ā', ["ب"] = 'b', ["ٻ"] = 'ḇ', ["پ"] = 'p', ["ت"] = 't', ["ٹ"] = 'ṭ', ["ث"] = 's̱', ["ج"] = 'j', ["ڄ"] = 'ǰ', ["چ"] = 'c', ["ح"] = 'ḥ', ["خ"] = 'x', ["د"] = 'd', ["ڈ"] = 'ḍ', ["ݙ"] = 'ḏ', ["ذ"] = 'ẕ', ["ر"] = 'r', ['ڑ'] = "ṛ", ["ز"] = 'z', ["ژ"] = 'ž', ["س"] = 's', ["ش"] = 'ś', ["ص"] = 'ṣ', ["ض"] = 'ẓ', ["ط"] = 't̤', ["ظ"] = 'z̤', ["ع"] = 'ʻ', ["غ"] = 'ġ', ["ف"] = 'f', ["ق"] = 'q', ["ک"] = 'k', ["گ"] = 'g', ["ڳ"] = 'g̈', ["ݨ"] = 'ṇ', ["ࣇ"] = 'ḷ', ["ل"] = 'l', ["م"] = 'm', ["ن"] = 'n', ["و"] = 'v', ["ہ"] = 'h', ["ی"] = 'y', ["۔"] = ".", ["ں"] = 'ṉ', ["ھ"] = "h", ["ؤ"] = "'o", -- diacritics [zabar] = "a", [zer] = "i", [pesh] = "u", [jazm] = "", -- also sukun - no vowel [U(0x200C)] = "-", -- ZWNJ (zero-width non-joiner) -- ligatures ["ﻻ"] = "lā", ["ﷲ"] = "allāh", -- kashida ["ـ"] = "-", -- kashida, no sound -- numerals ["۱"] = "1", ["۲"] = "2", ["۳"] = "3", ["۴"] = "4", ["۵"] = "5", ["۶"] = "6", ["۷"] = "7", ["۸"] = "8", ["۹"] = "9", ["۰"] = "0", -- punctuation (leave on separate lines) ["؟"] = "?", -- question mark ["،"] = ",", -- comma ["؛"] = ";", -- semicolon ["«"] = '“', -- quotation mark ["»"] = '”', -- quotation mark ["٪"] = "%", -- percent ["؉"] = "‰", -- per mille ["٫"] = ".", -- decimals ["٬"] = ",", -- thousand ["ۓ"] = "-ye", ["ۀ"] = "h-e" -- he ye (in izafat) } function export.tr(text, lang, sc) -- EXCEPTIONS - leave as they are, unless they have been sorted out elsewhere text = gsub(text, '([' .. consonants .. '])' .. ye .. vao .. nasal, "%1eyoṉ") -- needs to be fixed text = gsub(text, '([' .. consonants .. '])' .. ye .. vao, "%1eyo") -- needs to be fixed text = gsub(text, '([' .. consonants .. '])' .. ye .. '([' .. consonants .. '])' , "%1e%2") -- needs to be fixed text = gsub(text, '([' .. consonants .. '])' .. ye .. alif, "%1eyā") -- needs to be fixed text = gsub(text, zabar .. aspirate .. "(ی)" , "hai") -- needs to be fixed text = gsub(text, zabar .. aspirate .. "(و)" , "hau") -- needs to be fixed text = gsub(text, "ئے", "'e") text = gsub(text, "َے", "ai") text = gsub(text, "ے", "e") text = gsub(text, "ہہ", "h") text = gsub(text, "اے", "e") text = gsub(text, "اَے", "ai") text = gsub(text, "ن٘", "ṉ") text = gsub(text, "اللہ", "allāh") text = gsub(text, "ؤ" .. pesh, "ū") -- needs to be fixed --text = gsub(text, "ُھوِیں", "vīṉ") text = gsub(text, "([" .. pesh .. aspirate .. "])" .. "وِیں", "%1vīṉ") -- diacritics text = gsub(text, "([" .. consonants .. "])" .. zer .. ye .. alif, "%1īyā") text = gsub(text, pesh .. vao .. jazm .. "", "ū") text = gsub(text, "([" .. consonants .. "])" .. zabar .. vao, "%1au") text = gsub(text, "([" .. consonants .. "])" .. zabar .. ye, "%1ai") text = gsub(text, "([" .. alif .. consonants .. "])" .. zabar .. ye3, "%1ai") text = gsub(text, "([" .. consonants .. "])" .. zer .. ye, "%1ī") text = gsub(text, jazm .. alif, "ā") text = gsub(text, ye2 .. zer .. ye, "'ī") text = gsub(text, "" .. alif .. ye2 .. "([" .. consonants .. "])", "ā'i%1") -- needs to be fixed -- Initial alif text = gsub(text, alif .. zer, "ī") text = gsub(text, alif .. zabar .. '([' .. consonantS .. '])', "a%1") text = gsub(text, alif .. zabar .. vao .. jazm .. "", "au") text = gsub(text, alif .. vao .. jazm .. "", "o") text = gsub(text, alif .. zabar .. ye .. jazm .. "", "ai") text = gsub(text, alif .. ye .. jazm .. "", "e") text = gsub(text, alif .. pesh .. vao, "ū") text = gsub(text, alif .. pesh .. vao .. jazm .. "", "ū") text = gsub(text, alif .. pesh, "u") -- do-chashme-he zabar, zer, pesh / no need to mess about --- works for short vowels text = gsub(text, "([" .. ZZP .. "])" .. aspirate, "h%1") text = gsub(text, pesh .. aspirate .. vao .. jazm .. "", "ū") text = gsub(text, zabar .. aspirate .. vao .. jazm .. "", "ai") text = gsub(text, '([' .. consonants .. '])' .. aspirate .. ye .. jazm .. "", "%1he") -- Tashdeed text = gsub(text, '([' .. consonantS2 .. '])' .. tashdid, "%1%1") text = gsub(text, '([' .. consonantS2 .. '])' .. tashdid .. '([' .. ZZP .. '])', "%1%1%2") text = gsub(text, '([' .. ZZP .. '])' .. ye .. '([' .. ZZP .. '])' .. tashdid, "%1yy%2") text = gsub(text, '([' .. ZZP .. '])' .. vao .. '([' .. ZZP .. '])' .. tashdid, "%1vv%2") -- For some reason the tashdeed gets pushed after the other diacritics, so this line is necessary for tashdeed to work with other diacritics text = gsub(text, '([' .. consonants .. '])' .. '([' .. ZZP .. '])' .. tashdid, "%1%1%2") -- tanween diacritic / no need to mess about text = gsub(text, '([' .. consonants .. '])' .. 'ً' .. alif, "%1an") text = gsub(text, alif .. 'ً', "an") text = gsub(text, '([' .. consonants .. '])' .. 'ً', "%1an") -- khari zabar -- / no need to mess about text = gsub(text, '([' .. vowels .. '])' .. 'ٰ', "á") text = gsub(text, '([' .. consonants .. '])' .. 'ٰ' .. '([' .. vowels .. '])', "%1á") -- ‘ain text = gsub(text, alif .. ain , "ā‘") text = gsub(text, ain .. alif .. '([' .. consonants .. '])', "ʻā%1") text = gsub(text, '([' .. consonants .. '])' .. ain .. he, "%1ʻa") text = gsub(text, '([' .. consonants .. '])' .. '([' .. zer .. pesh .. ']?)' .. ain, "%1%2ʻ") text = gsub(text, ain .. zabar .. vao .. '([' .. consonants .. '])', "‘au%1") text = gsub(text, ain .. zabar .. ye .. '([' .. consonants .. '])', "‘ai%1") text = gsub(text, ain .. zer .. '([' .. consonants .. '])', "ʻi%1") text = gsub(text, ain .. pesh .. '([' .. consonants .. '])', "ʻu%1") text = gsub(text, ain .. zer .. ye .. '([' .. consonants .. '])', "ʻī%1") text = gsub(text, ain .. pesh .. vao .. '([' .. consonantS .. '])', "ʻū%1") --- alif text = gsub(text, '([' .. consonants .. '])' .. zabar .. alif, "%1ā") text = gsub(text, '([' .. consonants .. '])' .. alif, "%1ā") text = gsub(text, '([' .. consonants .. '])' .. tashdid .. alif, "%1%1ā") -- Vao text = gsub(text, vao .. '([' .. ZZP .. '])', "v%1") text = gsub(text, 'ُو', "ū") text = gsub(text, '([' .. consonants .. '])' .. zabar .. vao .. alif, "%1avā") -- medial/final consonants --- (e) -- works text = gsub(text, '([' .. consonants .. '])' .. ye .. jazm .. '([' .. consonants .. '])', "%1e%2") text = gsub(text, '([' .. consonants .. '])' .. ye3, "%1e") text = gsub(text, '([' .. consonants .. '])' .. zabar .. ye3, "%1ai") --- izafat text = gsub(text, '([' .. consonants .. '])' .. zer .. " ", "%1-e ") --- he text = gsub(text, zabar .. he .. zer .. ye, "ahī") text = gsub(text, zabar .. he .. alif, "ahā") text = gsub(text, zabar .. he .. '([' .. consonants .. vowels .. '])', "ah%1") --- vao text = gsub(text, '([' .. consonants .. '])' .. vao, "%1o") text = gsub(text, '([' .. consonants .. '])' .. tashdid .. vao, "%1%1o") text = gsub(text, '([' .. consonants .. '])' .. tashdid .. zer .. ye .. jazm .. alif, "%1%1īyā") text = gsub(text, zer .. ye .. jazm .. alif, "īyā") text = gsub(text, zer .. ye .. alif, "iyā") --- ye text = gsub(text, ye .. zabar .. alif, "yā") text = gsub(text, '([' .. consonants .. zer .. '])' .. ye, "%1ī") text = gsub(text, "ۂ", "a-e") text = gsub(text, '.', mapping) -- Changed these to 'iy(*)', because they will be used for with ی, which are normally written as 'iy' text = gsub(text, 'īā', "iyā") text = gsub(text, 'īa', "iya") text = gsub(text, 'aa', "ā") -- text = gsub(text, 'ئy', "'ī") text = gsub(text, "" .. 'ئے', "'ye") text = gsub(text, "īے", "iye") text = gsub(text, "iīe", "iye") text = gsub(text, "īe", "iye") text = gsub(text, "iīv", "iyo") text = gsub(text, "ئiy", "'ī") return text end return export g2qwa29pqqhy4aulplbxklfaag3a1la Bản mẫu:rgn-IPA 10 287486 2568760 2139622 2026-10-06T06:05:21Z TheHighFighter2 42988 /* */ 2568760 wikitext text/x-wiki {{#invoke:checkparams|error|r}}<!-- Validate template parameters -->{{#if:{{{rf|}}} {{{r|}}}{{{f|}}}{{{fa|}}}{{{im|}}}{{{ma|}}}{{{lv|}}} {{{vu|}}}{{{za|}}}{{{pv|}}} {{{lu|}}}{{{rul|}}}{{{cb|}}}| *{{rgn-IPA/row |Trung Romagnol|RF|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}|{{{5 |}}}|{{{6|}}}|{{{7|}}}|{{{8|}}}|{{{9|}}}|{{{10 |}}}|{{{11|}}}|{{{12|}}}|{{{13|}}}|{{{14|}}}|{{{15 |}}}|{{{16|}}}|{{{17|}}}|{{{18|}}}|{{{19|}}}|{{{20 |}}}|{{{21|}}}|{{{22|}}}|{{{23|}}}|{{{24|}}}|{{{25 |}}}}}<!-- -->{{#if:{{{r|}}}| **{{rgn-IPA/row |[[w:Ravenna|Ravenna]]|R|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}|{{{5 |}}}|{{{6|}}}|{{{7|}}}|{{{8|}}}|{{{9|}}}|{{{10 |}}}|{{{11|}}}|{{{12|}}}|{{{13|}}}|{{{14|}}}|{{{15 |}}}|{{{16|}}}|{{{17|}}}|{{{18|}}}|{{{19|}}}|{{{20 |}}}|{{{21|}}}|{{{22|}}}|{{{23|}}}|{{{24|}}}|{{{25 |}}}}}|}}<!-- -->{{#if:{{{f|}}}| **{{rgn-IPA/row |[[w:Forlì|Forlì]]|F|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}|{{{5 |}}}|{{{6|}}}|{{{7|}}}|{{{8|}}}|{{{9|}}}|{{{10 |}}}|{{{11|}}}|{{{12|}}}|{{{13|}}}|{{{14|}}}|{{{15 |}}}|{{{16|}}}|{{{17|}}}|{{{18|}}}|{{{19|}}}|{{{20 |}}}|{{{21|}}}|{{{22|}}}|{{{23|}}}|{{{24|}}}|{{{25 |}}}}}|}}<!-- -->{{#if:{{{fa|}}}| **{{rgn-IPA/row |[[w:Faenza|Faenza]]|Faenza|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}|{{{5 |}}}|{{{6|}}}|{{{7|}}}|{{{8|}}}|{{{9|}}}|{{{10 |}}}|{{{11|}}}|{{{12|}}}|{{{13|}}}|{{{14|}}}|{{{15 |}}}|{{{16|}}}|{{{17|}}}|{{{18|}}}|{{{19|}}}|{{{20 |}}}|{{{21|}}}|{{{22|}}}|{{{23|}}}|{{{24|}}}|{{{25 |}}}}}|}}<!-- -->{{#if:{{{im|}}}| **{{rgn-IPA/row |[[w:Imola|Imola]]|Imola|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}|{{{5 |}}}|{{{6|}}}|{{{7|}}}|{{{8|}}}|{{{9|}}}|{{{10 |}}}|{{{11|}}}|{{{12|}}}|{{{13|}}}|{{{14|}}}|{{{15 |}}}|{{{16|}}}|{{{17|}}}|{{{18|}}}|{{{19|}}}|{{{20 |}}}|{{{21|}}}|{{{22|}}}|{{{23|}}}|{{{24|}}}|{{{25 |}}}}}|}}<!-- -->{{#if:{{{ma|}}}| **{{rgn-IPA/row |[[w:Massa Lombarda|Massa Lombarda]]|Massa Lombarda|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}|{{{5 |}}}|{{{6|}}}|{{{7|}}}|{{{8|}}}|{{{9|}}}|{{{10 |}}}|{{{11|}}}|{{{12|}}}|{{{13|}}}|{{{14|}}}|{{{15 |}}}|{{{16|}}}|{{{17|}}}|{{{18|}}}|{{{19|}}}|{{{20 |}}}|{{{21|}}}|{{{22|}}}|{{{23|}}}|{{{24|}}}|{{{25 |}}}}}|}}<!-- -->{{#if:{{{lv|}}}| **{{rgn-IPA/row |Lavezzola|Lavezzola|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}|{{{5 |}}}|{{{6|}}}|{{{7|}}}|{{{8|}}}|{{{9|}}}|{{{10 |}}}|{{{11|}}}|{{{12|}}}|{{{13|}}}|{{{14|}}}|{{{15 |}}}|{{{16|}}}|{{{17|}}}|{{{18|}}}|{{{19|}}}|{{{20 |}}}|{{{21|}}}|{{{22|}}}|{{{23|}}}|{{{24|}}}|{{{25 |}}}}}|}}<!-- -->{{#if:{{{vu|}}} {{{za|}}}{{{pv|}}}| **{{a|rgn|[[w:it:Ville Unite|Ville Unite]]}}: {{#if:{{{za|}}}| ***{{rgn-IPA/row |San Zaccaria|San Zaccaria|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}|{{{5 |}}}|{{{6|}}}|{{{7|}}}|{{{8|}}}|{{{9|}}}|{{{10 |}}}|{{{11|}}}|{{{12|}}}|{{{13|}}}|{{{14|}}}|{{{15 |}}}|{{{16|}}}|{{{17|}}}|{{{18|}}}|{{{19|}}}|{{{20 |}}}|{{{21|}}}|{{{22|}}}|{{{23|}}}|{{{24|}}}|{{{25 |}}}}}|}}<!-- -->{{#if:{{{pv|}}}| ***{{rgn-IPA/row |San Pietro in Vincoli|San Pietro in Vincoli|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}|{{{5 |}}}|{{{6|}}}|{{{7|}}}|{{{8|}}}|{{{9|}}}|{{{10 |}}}|{{{11|}}}|{{{12|}}}|{{{13|}}}|{{{14|}}}|{{{15 |}}}|{{{16|}}}|{{{17|}}}|{{{18|}}}|{{{19|}}}|{{{20 |}}}|{{{21|}}}|{{{22|}}}|{{{23|}}}|{{{24|}}}|{{{25 |}}}}}|}}<!-- -->{{#if:{{{lu|}}}| **{{rgn-IPA/row |[[w:Lugo, Emilia-Romagna|Lughese]]|Urban Lugo|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}|{{{5 |}}}|{{{6|}}}|{{{7|}}}|{{{8|}}}|{{{9|}}}|{{{10 |}}}|{{{11|}}}|{{{12|}}}|{{{13|}}}|{{{14|}}}|{{{15 |}}}|{{{16|}}}|{{{17|}}}|{{{18|}}}|{{{19|}}}|{{{20 |}}}|{{{21|}}}|{{{22|}}}|{{{23|}}}|{{{24|}}}|{{{25 |}}}}}|}}<!-- -->{{#if:{{{rul|}}}| **{{rgn-IPA/row |[[w:Lugo, Emilia-Romagna|Rural Lughese]]|Lugo|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}|{{{5 |}}}|{{{6|}}}|{{{7|}}}|{{{8|}}}|{{{9|}}}|{{{10 |}}}|{{{11|}}}|{{{12|}}}|{{{13|}}}|{{{14|}}}|{{{15 |}}}|{{{16|}}}|{{{17|}}}|{{{18|}}}|{{{19|}}}|{{{20 |}}}|{{{21|}}}|{{{22|}}}|{{{23|}}}|{{{24|}}}|{{{25 |}}}}}|}}<!-- -->{{#if:{{{cb|}}}| **{{rgn-IPA/row |[[w:Castel Bolognese|Castel Bolognese]]|CB|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}|{{{5 |}}}|{{{6|}}}|{{{7|}}}|{{{8|}}}|{{{9|}}}|{{{10 |}}}|{{{11|}}}|{{{12|}}}|{{{13|}}}|{{{14|}}}|{{{15 |}}}|{{{16|}}}|{{{17|}}}|{{{18|}}}|{{{19|}}}|{{{20 |}}}|{{{21|}}}|{{{22|}}}|{{{23|}}}|{{{24|}}}|{{{25 |}}}}}|}}|}}|}}<!-- -->{{#if:{{{se|}}} {{{rm|}}}{{{ru|}}}{{{sa|}}}{{{ce|}}}{{{sr|}}} {{{br|}}}{{{sm|}}}{{{sv|}}}| *{{a|rgn|Southeastern Romagnol}} {{#if:{{{rm|}}}| **{{rgn-IPA/row |[[w:Rimini|Rimini]]|Rimini|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}|{{{5 |}}}|{{{6|}}}|{{{7|}}}|{{{8|}}}|{{{9|}}}|{{{10 |}}}|{{{11|}}}|{{{12|}}}|{{{13|}}}|{{{14|}}}|{{{15 |}}}|{{{16|}}}|{{{17|}}}|{{{18|}}}|{{{19|}}}|{{{20 |}}}|{{{21|}}}|{{{22|}}}|{{{23|}}}|{{{24|}}}|{{{25 |}}}}}|}}<!-- -->{{#if:{{{ru|}}}| **{{rgn-IPA/row |Rural Riminese|Rustic Riminese|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}|{{{5 |}}}|{{{6|}}}|{{{7|}}}|{{{8|}}}|{{{9|}}}|{{{10 |}}}|{{{11|}}}|{{{12|}}}|{{{13|}}}|{{{14|}}}|{{{15 |}}}|{{{16|}}}|{{{17|}}}|{{{18|}}}|{{{19|}}}|{{{20 |}}}|{{{21|}}}|{{{22|}}}|{{{23|}}}|{{{24|}}}|{{{25 |}}}}}|}}<!-- -->{{#if:{{{sa|}}}| **{{rgn-IPA/row |[[w:Santarcangelo|Santarcangelo]]|Santarcangelo|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}|{{{5 |}}}|{{{6|}}}|{{{7|}}}|{{{8|}}}|{{{9|}}}|{{{10 |}}}|{{{11|}}}|{{{12|}}}|{{{13|}}}|{{{14|}}}|{{{15 |}}}|{{{16|}}}|{{{17|}}}|{{{18|}}}|{{{19|}}}|{{{20 |}}}|{{{21|}}}|{{{22|}}}|{{{23|}}}|{{{24|}}}|{{{25 |}}}}}|}}<!-- -->{{#if:{{{ce|}}}| **{{rgn-IPA/row |[[w:Cesena|Cesena]]|Cesena|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}|{{{5 |}}}|{{{6|}}}|{{{7|}}}|{{{8|}}}|{{{9|}}}|{{{10 |}}}|{{{11|}}}|{{{12|}}}|{{{13|}}}|{{{14|}}}|{{{15 |}}}|{{{16|}}}|{{{17|}}}|{{{18|}}}|{{{19|}}}|{{{20 |}}}|{{{21|}}}|{{{22|}}}|{{{23|}}}|{{{24|}}}|{{{25 |}}}}}|}}<!-- -->{{#if:{{{sr|}}}| **{{rgn-IPA/row |[[w:Sarsina|Sarsina]]|Sarsina|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}|{{{5 |}}}|{{{6|}}}|{{{7|}}}|{{{8|}}}|{{{9|}}}|{{{10 |}}}|{{{11|}}}|{{{12|}}}|{{{13|}}}|{{{14|}}}|{{{15 |}}}|{{{16|}}}|{{{17|}}}|{{{18|}}}|{{{19|}}}|{{{20 |}}}|{{{21|}}}|{{{22|}}}|{{{23|}}}|{{{24|}}}|{{{25 |}}}}}|}}<!-- -->{{#if:{{{br|}}} {{{sm|}}}{{{sv|}}}| **{{a|rgn|Borderline Romagnol}} {{#if:{{{sm|}}}| ***{{rgn-IPA/row |[[w:San Marino|San Marino]]|SW Sammarinese|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}|{{{5 |}}}|{{{6|}}}|{{{7|}}}|{{{8|}}}|{{{9|}}}|{{{10 |}}}|{{{11|}}}|{{{12|}}}|{{{13|}}}|{{{14|}}}|{{{15 |}}}|{{{16|}}}|{{{17|}}}|{{{18|}}}|{{{19|}}}|{{{20 |}}}|{{{21|}}}|{{{22|}}}|{{{23|}}}|{{{24|}}}|{{{25 |}}}}}|}}<!-- -->{{#if:{{{sv|}}}| ***{{rgn-IPA/row |[[w:Serravalle|Serravalle]]|Serravalle|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}|{{{5 |}}}|{{{6|}}}|{{{7|}}}|{{{8|}}}|{{{9|}}}|{{{10 |}}}|{{{11|}}}|{{{12|}}}|{{{13|}}}|{{{14|}}}|{{{15 |}}}|{{{16|}}}|{{{17|}}}|{{{18|}}}|{{{19|}}}|{{{20 |}}}|{{{21|}}}|{{{22|}}}|{{{23|}}}|{{{24|}}}|{{{25 |}}}}}|}}|}}|}}<noinclude> {{documentation}} </noinclude> h4zwdtsx0u5dw0le3ay6w2q6vt5hy3f Bản mẫu:rgn-IPA/row 10 287487 2568761 2115586 2026-10-06T06:08:22Z TheHighFighter2 42988 /* */ 2568761 wikitext text/x-wiki {{rgn-IPA/row/ipa|{{{1}}}|{{ #if:{{{3|}}}|{{rgn-IPA-{{{2}}}|{{{3}}}|p=|n={{{4|}}}}}{{ #if:{{{4|}}}|{{rgn-IPA-{{{2}}}|{{{4}}}|p={{{3}}}|n={{{5|}}}}}{{ #if:{{{5|}}}|{{rgn-IPA-{{{2}}}|{{{5}}}|p={{{4}}}|n={{{6|}}}}}{{ #if:{{{6|}}}|{{rgn-IPA-{{{2}}}|{{{6}}}|p={{{5}}}|n={{{7|}}}}}{{ #if:{{{7|}}}|{{rgn-IPA-{{{2}}}|{{{7}}}|p={{{6}}}|n={{{8|}}}}}{{ #if:{{{8|}}}|{{rgn-IPA-{{{2}}}|{{{8}}}|p={{{7}}}|n={{{9|}}}}}{{ #if:{{{9|}}}|{{rgn-IPA-{{{2}}}|{{{9}}}|p={{{8}}}|n={{{10|}}}}}{{ #if:{{{10|}}}|{{rgn-IPA-{{{2}}}|{{{10}}}|p={{{9}}}|n={{{11|}}}}}{{ #if:{{{11|}}}|{{rgn-IPA-{{{2}}}|{{{11}}}|p={{{10}}}|n={{{12|}}}}}{{ #if:{{{12|}}}|{{rgn-IPA-{{{2}}}|{{{12}}}|p={{{11}}}|n={{{13|}}}}}{{ #if:{{{13|}}}|{{rgn-IPA-{{{2}}}|{{{13}}}|p={{{12}}}|n={{{14|}}}}}{{ #if:{{{14|}}}|{{rgn-IPA-{{{2}}}|{{{14}}}|p={{{13}}}|n={{{15|}}}}}{{ #if:{{{15|}}}|{{rgn-IPA-{{{2}}}|{{{15}}}|p={{{14}}}|n={{{16|}}}}}{{ #if:{{{16|}}}|{{rgn-IPA-{{{2}}}|{{{16}}}|p={{{15}}}|n={{{17|}}}}} }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}<noinclude> [[Thể loại:Bản mẫu tiếng Romagnol]] </noinclude> 6jwh00z5dumopfy3yuaalah41mb6tk6 Bản mẫu:rgn-IPA/row/ipa 10 287488 2568763 2115587 2026-10-06T06:10:02Z TheHighFighter2 42988 /* */ 2568763 wikitext text/x-wiki {{IPA|rgn|a={{{1}}}|[<includeonly>{{{2}}}</includeonly>]}}<noinclude>[[Thể loại:Bản mẫu tiếng Romagnol]]</noinclude> k4w503krzlvb8ihh85p5j4yjcgc8yzw Mô đun:labels/data/lang/ga 828 289054 2568737 2119756 2026-10-06T01:42:12Z Hiyuune 50834 2568737 Scribunto text/plain local labels = {} labels["Achill"] = { aliases = {"Acaill", "Oileán Acla"}, Wikipedia = "Gaeltacht Iorrais agus Acaill", plain_categories = "Mayo", } labels["Antrim"] = { Wikipedia = "Ulster Irish", plain_categories = true, } labels["Aran"] = { Wikipedia = "Aran Islands", plain_categories = "Galway", } labels["Ceantar na nOileán"] = { Wikipedia = true, plain_categories = "Cois Fharraige", } labels["Cois Fharraige"] = { aliases = {"Cois Fhairrge", "CF"}, Wikipedia = "Gaeltacht Cois Fharraige", plain_categories = true, } labels["Connacht"] = { Wikipedia = "ga:Gaeilge Chonnacht", plain_categories = "Tiếng Ireland Connacht", } labels["Connemara"] = { aliases = {"Conamara"}, Wikipedia = true, plain_categories = "Galway", } labels["Cork"] = { aliases = {"West Cork", "West Muskerry"}, Wikipedia = "Gaeltacht#Cork Gaeltacht", plain_categories = true, } labels["Donegal"] = { aliases = {"West Ulster"}, Wikipedia = "Ulster Irish#East Ulster and West Ulster", plain_categories = "Ulster", } labels["East Ulster"] = { Wikipedia = "Ulster Irish#East Ulster and West Ulster", plain_categories = "Ulster", } labels["Erris"] = { aliases = {"Iorrais", "Iorras"}, Wikipedia = "Gaeltacht Iorrais agus Acaill", plain_categories = "Mayo", } labels["Galway"] = { Wikipedia = "Gaeltacht#Galway Gaeltacht", plain_categories = true, } labels["Glenties"] = { aliases= {"Na Gleannta"}, Wikipedia = true, plain_categories = "Ulster", } labels["Gweedore"] = { aliases= {"Gaoth Dobhair"}, Wikipedia = true, plain_categories = "Ulster", } labels["Kerry"] = { aliases = {"West Kerry"}, Wikipedia = "Kerry Gaeltacht", plain_categories = true, } labels["Mayo"] = { Wikipedia = "Gaeltacht Iorrais agus Acaill", plain_categories = true, } labels["Munster"] = { Wikipedia = "Munster Irish", plain_categories = true, } labels["Rosguill"] = { aliases= {"Ros Goill"}, Wikipedia = true, plain_categories = "Ulster", } labels["Rosmuc"] = { aliases = {"Ros Muc"}, Wikipedia = "Conamara Theas", plain_categories = "Connemara", } labels["Teelin"] = { aliases= {"Teileann"}, Wikipedia = true, plain_categories = "Ulster", } labels["Tory Island"] = { aliases= {"Toraigh", "Tory"}, Wikipedia = true, plain_categories = "Ulster", } labels["Tourmakeady"] = { aliases = {"Toormakeady", "Tuar Mhic Éadaigh"}, Wikipedia = "Gaeltacht Iorrais agus Acaill", plain_categories = "Mayo", } labels["Ulster"] = { Wikipedia = "Ulster Irish", plain_categories = true, } labels["Waterford"] = { aliases = {"Ring"}, Wikipedia = "Gaeltacht na nDéise", plain_categories = true, } labels["superseded"] = { Wikipedia = "wikt:Appendix:Glossary#superseded", } return require("Module:labels").finalize_data(labels) g2i7m7wsmwpzejhmpbv53taoyye6a91 aengj 0 299974 2568750 2322764 2026-10-06T05:46:33Z Hiyuune 50834 /* Tiếng Tráng Nông */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]) 2568750 wikitext text/x-wiki =={{langname|zhn}}== ==={{section|pron}}=== * {{IPA|zhn|/ʔaŋ²²/|a=Giả Thố,Quảng Nam}} ==={{section|v}}=== {{head|zhn|Động từ}} # [[chất|Chất]] thành [[đống]]. g7ytmjks9qmwtdpoa6s5zfsxzufbnbr Mô đun:pron utilities 828 307197 2568789 2335723 2026-10-06T11:54:19Z TheHighFighter2 42988 2568789 Scribunto text/plain local export = {} local dump = mw.dumpObject local decorations_module = "Module:decorations" local IPA_module = "Module:IPA" local parameter_utilities_module = "Module:parameter utilities" local table_module = "Module:table" local utilities_module = "Module:utilities" local force_cats = nil -- for debugging --[==[ intro: This module provides utilities to simplify and standardize the creation of pronunciation modules, particularly when it comes to argument parsing. Using this module, it should only be necessary to provide the function that actually converts respelling to IPA. ]==] local function combine_decorations(dec1, dec2) if type(dec1) == "string" then dec1 = {dec1} end if type(dec2) == "string" then dec2 = {dec2} end if not dec1 then return dec2 end if not dec2 then return dec1 end local decs = mw.clone(dec1) for _, dec in ipairs(dec2) do table.insert(decs, dec) end return decs end --[==[ Function to parse arguments and format one or more pronunciations. Meant to be called from a module. `data` is a table containing the following fields:<ul> <li> `lang` ('''required'''): Language object for the respellings. <li> `raw_args` ('''required'''): Unparsed arguments, generally taken from {frame:getParent().args}. <li> `respelling_to_IPA` ('''required'''): Function to generate one or more pronunciations given respelling. On input, the function is passed a single object `data` with the following fields:<ul> <li> `respelling`: The respelling. <li> `orig_respelling`: The original respelling; may be {nil} or `+` (which is substituted with the pagename). <li> `item`: The item parsed from the argument containing the respelling, along with inline modifiers and separate parameters. <li> `args`: The parsed `args` table generated from `raw_args`. <li> `pagename`: The pagename, either taken from `args.pagename` or from the actual pagename.</ul> The function should return either a string (the respelling); a table with the respelling in the `pron` field and optional left and right regular and/or accent qualifiers in (respectively) `q`, `qq`, `a` and `aa`; a list of respelling strings; or a list of respelling+qualifier tables. If regular or accent qualifiers are returned, they will be combined with any user-specified qualifiers (which go first). <li> `track_module` ('''recommended'''): Name of the invoking module, for debug-tracking purposes. <li> `include_bullet`: If specified, a bullet (`*`) will be added before the generated pronunciation. When this is given, extra parameters {{para|bullets}} (to override the number of added bullets) and {{para|pre}} (to specify text to insert between the bullets and the generated pronunciation) will be available. '''Use of this field is not recommended; it is provided for compatibility only.''' <li> `augment_params`: If specified, a key-value table of arguments to add to the `params` table, prior to parsing the raw arguments using `process` in [[Module:parameters]]. See [[Module:fr-pron]] for an example of specifying this field. <li> `augment_param_mod_spec`: If specified, a list of specs of the form accepted by `construct_param_mods()` in [[Module:parameter utilities]] to add to the default specs (which specify the following inline modifiers and separate parameters: {{para|q}} and {{cd|<q:...>}}; {{para|qq}} and {{cd|<qq:...>}}; {{para|a}} and {{cd|<a:...>}}; {{para|aa}} and {{cd|<aa:...>}}; and {{para|ref}} and {{cd|<ref:...>}}. See [[Module:fr-pron]] for an example of specifying this field. </ul> ]==] function export.format_prons(data) local params = { [1] = {list = true, allow_holes = true, default = "+", template_default = data.template_default}, ["pagename"] = {}, ["notext"] = {}, } if data.include_bullet then params["pre"] = {} params["bullets"] = {type = "number", default = 1} end if data.augment_params then for k, v in pairs(data.augment_params) do params[k] = v end end local m_param_utils = require(parameter_utilities_module) local construct_param_mod_spec = { {group = {"q", "a", "ref"}}, {group = "link", include = {"t", "gloss", "pos"}}, } if data.augment_param_mod_spec then for _, spec in ipairs(data.augment_param_mod_spec) do table.insert(construct_param_mod_spec, spec) end end local param_mods = m_param_utils.construct_param_mods(construct_param_mod_spec) local items, args = m_param_utils.parse_list_with_inline_modifiers_and_separate_params { params = params, param_mods = param_mods, raw_args = data.raw_args, termarg = 1, term_dest = "pron", track_module = data.track_module, } local pagename = args.pagename or mw.loadData("Module:headword/data").pagename local saw_multiple_prons = false local categories = {} for i, item in ipairs(items) do local respelling = item.pron or "+" if respelling == "+" then respelling = pagename end local pron, this_categories = data.respelling_to_IPA { orig_respelling = item.pron, respelling = respelling, item = item, args = args, pagename = pagename, } if this_categories then require(table_module).extend(categories, this_categories) end if type(pron) == "table" and not pron.pron then -- assume a list if pron[1] and not pron[2] then -- a single-element list pron = pron[1] else saw_multiple_prons = true end end item.pron = pron end if saw_multiple_prons then -- we need to flatten out the pronuns local pron_items = {} for _, item in ipairs(items) do local prons = item.pron if type(prons) ~= "table" then prons = {prons} end if prons.pron then -- a single item with decorations, not a list prons = {prons} end for i, pron in ipairs(prons) do if type(pron) ~= "table" then -- a string; convert to item table with decorations pron = {pron = pron} end if not pron.pron then error(("Internal error: Pronunciation table doesn't have a pronunciation in '.pron': %s"):format( dump(pron))) end pron.separator = i == 1 and item.separator or " ~ " if i == 1 then pron.q = combine_decorations(item.q, pron.q) pron.a = combine_decorations(item.a, pron.a) pron.pos = item.pos pron.gloss = item.gloss end if i == #prons then pron.refs = item.refs pron.qq = combine_decorations(item.qq, pron.qq) pron.aa = combine_decorations(item.aa, pron.aa) end if not pron_items then pron_items = {pron} else table.insert(pron_items, pron) end end end items = pron_items else for _, item in ipairs(items) do if type(item.pron) == "table" then if not item.pron.pron then error(("Internal error: Pronunciation table doesn't have a pronunciation in '.pron': %s"):format( dump(item.pron))) end item.q = combine_decorations(item.q, item.pron.q) item.a = combine_decorations(item.a, item.pron.a) item.qq = combine_decorations(item.qq, item.pron.qq) item.aa = combine_decorations(item.aa, item.pron.aa) item.pron = item.pron.pron end end end local prontext local q = args.q.default local qq = args.qq.default local a = args.a.default local aa = args.aa.default if args.notext then prontext = require(IPA_module).format_IPA_multiple(data.lang, items) if q and q[1] or qq and qq[1] or a and a[1] or aa and aa[1] then prontext = require(decorations_module).format_decorations { lang = data.lang, text = prontext, q = q, qq = qq, a = a, aa = aa, } end else prontext = require(IPA_module).format_IPA_full { lang = data.lang, items = items, q = q, qq = qq, a = a, aa = aa, } end if args.pre then prontext = args.pre .. " " .. prontext end if args.bullets and args.bullets ~= 0 then prontext = ("*"):rep(args.bullets) .. " " .. prontext end local cattext = "" if categories[1] then cattext = require(utilities_module).format_categories(categories, data.lang, nil, nil, force_cats) end return prontext .. cattext end return export eerizdu9koy6loeqbhhkzwckldpiyhq Bangladesh 0 308083 2568677 2241171 2026-10-05T15:29:26Z Hiyuune 50834 /* Tiếng Anh */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]) 2568677 wikitext text/x-wiki {{also|Bangla Desh}} =={{langname|en}}== {{wikipedia|en:}} ==={{ĐM|alt}}=== * {{alter|en|Bangla Desh||dated}} ==={{ĐM|etym}}=== Từ {{borrowed|en|bn|বাংলাদেশ}}, từ {{mention|bn|বাংলা|t=[[Bengali]]}} + {{mention|bn|দেশ|t=quốc gia}}. ==={{ĐM|pron}}=== * {{IPA|en|/ˌbæŋ.ɡlə.ˈdɛʃ/|/ˌbɑːŋ.ɡlə.ˈdɛʃ/}} * {{audio|en|En-us-Bangladesh.ogg|a=US}} * {{rhymes|en|ɛʃ|s=3}} ==={{ĐM|pr-noun}}=== {{en-proper noun}} # {{senseid|vi|Q902}}{{place|en|quốc gia|r/Nam Á|official=Cộng hòa Nhân dân Bangladesh|capital=Dhaka}}. ==={{ĐM|see}}=== * {{l|en|Dhaka}} * [[Phụ lục:Các quốc gia và vùng lãnh thổ trên thế giới|Các quốc gia và vùng lãnh thổ trên thế giới]] * {{list:countries of Asia/en}} 9sahq9yw47nlm99dz56a90c2x18nskf Mô đun:Mymr-sortkey 828 310034 2568772 2174778 2026-10-06T06:40:04Z Hiyuune 50834 2568772 Scribunto text/plain local export = {} local gsub = mw.ustring.gsub local u = mw.ustring.char local find = mw.ustring.find local sub = mw.ustring.sub local glyphTable = { ["ံ"] = u(0xE000), ["း"] = u(0xE001), ["့"] = u(0xE002), ["၊"] = u(0xE010), ["။"] = u(0xE011), ["၌"] = u(0xE012), ["၍"] = u(0xE013), ["၎"] = u(0xE014), ["၏"] = u(0xE015), ["႞"] = u(0xE016), ["႟"] = u(0xE017), ["꩷"] = u(0xE018), ["꩸"] = u(0xE019), ["꩹"] = u(0xE01A), ["ꧦ"] = u(0xE01B), ["ꩰ"] = u(0xE01C), ["၀"] = u(0xE020), ["႐"] = u(0xE021), ["꧰"] = u(0xE022), ["၁"] = u(0xE023), ["႑"] = u(0xE024), ["꧱"] = u(0xE025), ["၂"] = u(0xE026), ["႒"] = u(0xE027), ["꧲"] = u(0xE028), ["၃"] = u(0xE029), ["႓"] = u(0xE02A), ["꧳"] = u(0xE02B), ["၄"] = u(0xE02C), ["႔"] = u(0xE02D), ["꧴"] = u(0xE02E), ["၅"] = u(0xE02F), ["႕"] = u(0xE030), ["꧵"] = u(0xE031), ["၆"] = u(0xE032), ["႖"] = u(0xE033), ["꧶"] = u(0xE034), ["၇"] = u(0xE035), ["႗"] = u(0xE036), ["꧷"] = u(0xE037), ["၈"] = u(0xE038), ["႘"] = u(0xE039), ["꧸"] = u(0xE03A), ["၉"] = u(0xE03B), ["႙"] = u(0xE03C), ["꧹"] = u(0xE03D), ["က"] = u(0xE040), ["ၵ"] = u(0xE041), ["ခ"] = u(0xE042), ["ၶ"] = u(0xE043), ["ဂ"] = u(0xE044), ["ၷ"] = u(0xE045), ["ꩠ"] = u(0xE046), ["ꧩ"] = u(0xE047), ["ဃ"] = u(0xE048), ["ꧠ"] = u(0xE049), ["ꧪ"] = u(0xE04A), ["င"] = u(0xE04B), ["ၚ"] = u(0xE04C), ["စ"] = u(0xE050), ["ၸ"] = u(0xE051), ["ꩡ"] = u(0xE052), ["ဆ"] = u(0xE053), ["ꧡ"] = u(0xE054), ["ꩢ"] = u(0xE055), ["ꩾ"] = u(0xE056), ["ဇ"] = u(0xE057), ["ꩣ"] = u(0xE058), ["ꧫ"] = u(0xE059), ["ၹ"] = u(0xE05A), ["ꩲ"] = u(0xE05B), ["ဈ"] = u(0xE05C), ["ၛ"] = u(0xE05D), ["ꧢ"] = u(0xE05E), ["ꩤ"] = u(0xE05F), ["ꧬ"] = u(0xE060), ["ၡ"] = u(0xE061), ["ꩿ"] = u(0xE062), ["ဉ"] = u(0xE063), ["ၺ"] = u(0xE064), ["ꩥ"] = u(0xE065), ["ꧧ"] = u(0xE066), ["ည"] = u(0xE067), ["ဋ"] = u(0xE070), ["ꩦ"] = u(0xE071), ["ဌ"] = u(0xE072), ["ꩧ"] = u(0xE073), ["ဍ"] = u(0xE074), ["ꩨ"] = u(0xE075), ["ꧭ"] = u(0xE076), ["ဎ"] = u(0xE077), ["ꩩ"] = u(0xE078), ["ꧮ"] = u(0xE079), ["ဏ"] = u(0xE07A), ["ၮ"] = u(0xE07B), ["ꧣ"] = u(0xE07C), ["ꧯ"] = u(0xE07D), ["တ"] = u(0xE080), ["ထ"] = u(0xE081), ["ဒ"] = u(0xE082), ["ၻ"] = u(0xE083), ["ꧻ"] = u(0xE084), ["ဓ"] = u(0xE085), ["ꩪ"] = u(0xE086), ["ꧼ"] = u(0xE087), ["န"] = u(0xE088), ["ၼ"] = u(0xE089), ["ꩫ"] = u(0xE08A), ["ၞ"] = u(0xE08B), ["ပ"] = u(0xE090), ["ဖ"] = u(0xE091), ["ၽ"] = u(0xE092), ["ၾ"] = u(0xE093), ["ꩯ"] = u(0xE094), ["ႎ"] = u(0xE095), ["ꧨ"] = u(0xE096), ["ဗ"] = u(0xE097), ["ၿ"] = u(0xE098), ["ꧽ"] = u(0xE099), ["ဘ"] = u(0xE09A), ["ꧤ"] = u(0xE09B), ["ꧾ"] = u(0xE09C), ["မ"] = u(0xE09D), ["ၟ"] = u(0xE09E), ["ယ"] = u(0xE0A0), ["ျ"] = u(0xE0A1), ["ရ"] = u(0xE0A2), ["ꩳ"] = u(0xE0A3), ["ꩺ"] = u(0xE0A4), ["ြ"] = u(0xE0A5), ["လ"] = u(0xE0A6), ["ၠ"] = u(0xE0A7), ["ဝ"] = u(0xE0A8), ["ွ"] = u(0xE0A9), ["ႂ"] = u(0xE0AA), ["ႀ"] = u(0xE0B0), ["ၐ"] = u(0xE0B1), ["ၑ"] = u(0xE0B2), ["ၥ"] = u(0xE0B3), ["သ"] = u(0xE0B4), ["ꩬ"] = u(0xE0B5), ["ဟ"] = u(0xE0B6), ["ႁ"] = u(0xE0B7), ["ꩭ"] = u(0xE0B8), ["ှ"] = u(0xE0B9), ["ꩮ"] = u(0xE0BA), ["ꩱ"] = u(0xE0BB), ["ဠ"] = u(0xE0BC), ["ꧺ"] = u(0xE0BD), ["ၜ"] = u(0xE0BE), ["ၝ"] = u(0xE0BF), ["ၯ"] = u(0xE0C0), ["ၰ"] = u(0xE0C1), ["ၦ"] = u(0xE0C2), ["အ"] = u(0xE0D0), ["ဢ"] = u(0xE0D1), ["ဣ"] = u(0xE0D2), ["ဤ"] = u(0xE0D3), ["ဥ"] = u(0xE0D4), ["ဦ"] = u(0xE0D5), ["ၒ"] = u(0xE0D6), ["ၓ"] = u(0xE0D7), ["ၔ"] = u(0xE0D8), ["ၕ"] = u(0xE0D9), ["ဧ"] = u(0xE0DA), ["ဨ"] = u(0xE0DB), ["ဩ"] = u(0xE0DC), ["ဪ"] = u(0xE0DD), ["ာ"] = u(0xE0E0), ["ါ"] = u(0xE0E1), ["ႃ"] = u(0xE0E2), ["ၲ"] = u(0xE0E3), ["ႜ"] = u(0xE0E4), ["ိ"] = u(0xE0E5), ["ၱ"] = u(0xE0E6), ["ီ"] = u(0xE0E7), ["ဳ"] = u(0xE0E8), ["ု"] = u(0xE0E9), ["ၳ"] = u(0xE0EA), ["ၴ"] = u(0xE0EB), ["ူ"] = u(0xE0EC), ["ၖ"] = u(0xE0F0), ["ၗ"] = u(0xE0F1), ["ၘ"] = u(0xE0F2), ["ၙ"] = u(0xE0F3), ["ေ"] = u(0xE0F4), ["ႄ"] = u(0xE0F5), ["ဵ"] = u(0xE0F6), ["ႅ"] = u(0xE0F7), ["ဲ"] = u(0xE0F8), ["ႝ"] = u(0xE0F9), ["ႆ"] = u(0xE0FA), ["ဴ"] = u(0xE0FB), ["ၢ"] = u(0xE0FC), ["ၧ"] = u(0xE0FD), ["ၨ"] = u(0xE0FE), ["ꧥ"] = u(0xE100), ["္"] = u(0xE101), ["်"] = u(0xE102), ["ၣ"] = u(0xE103), ["ၤ"] = u(0xE104), ["ၩ"] = u(0xE105), ["ၪ"] = u(0xE106), ["ၫ"] = u(0xE107), ["ၬ"] = u(0xE108), ["ၭ"] = u(0xE109), ["ႇ"] = u(0xE10A), ["ႋ"] = u(0xE10B), ["ႈ"] = u(0xE10C), ["ႌ"] = u(0xE10D), ["ႍ"] = u(0xE10E), ["ႉ"] = u(0xE10F), ["ႊ"] = u(0xE110), ["ႏ"] = u(0xE111), ["ႚ"] = u(0xE112), ["ႛ"] = u(0xE113), ["ꩻ"] = u(0xE114), ["ꩼ"] = u(0xE115), ["ꩽ"] = u(0xE116), ["ꩴ"] = u(0xE117), ["ꩵ"] = u(0xE118), ["ꩶ"] = u(0xE119), } function export.makeSortKey(text, lang, sc) text = gsub(text, "ဥ".."ီ", "ဦ") text = gsub(text, "ဿ", "သ္သ") local langcode = lang:getFullCode() if langcode == "shn" or langcode == "tjl" or langcode == "kht" then text = gsub(text, "ၢ", u(0xE0E3)) -- vowel aa with final end text = gsub(text, ".", glyphTable) return text end function export.showSorting(frame) local terms = {} for _, term in ipairs(frame.args) do table.insert(terms, term) end local makeSortKey = require("Module:memoize")(export.makeSortKey) local function comp(term1, term2) return makeSortKey(term1) < makeSortKey(term2) end table.sort(terms, comp) for i, term in pairs(terms) do terms[i] = "\n* " .. term .. " (<code>" .. makeSortKey(term) .. "</code>)" end return table.concat(terms) end return export lm4l22hriand8fmjgbzqtu81hahh5gn Mô đun:category tree/rhymes 828 342484 2568743 2286452 2026-10-06T02:11:34Z Hiyuune 50834 2568743 Scribunto text/plain local labels = {} local raw_categories = {} local handlers = {} local raw_handlers = {} local ucfirst = require("Module:string utilities").ucfirst ----------------------------------------------------------------------------- -- -- -- LABELS -- -- -- ----------------------------------------------------------------------------- labels["Vần"] = { description = "List of indexes of {{{langname}}} words by their rhymes.", umbrella_parents = "Tất cả", parents = {{name = "{{{langcat}}}", raw = true}}, } labels["refractory rhymes"] = { description = "Lists of {{{langname}}} words that don't rhyme with other words.", umbrella_parents = "Rhymes subcategories by language", parents = {"Vần"}, } ----------------------------------------------------------------------------- -- -- -- RAW CATEGORIES -- -- -- ----------------------------------------------------------------------------- raw_categories["Thể loại con vần theo ngôn ngữ"] = { description = "Umbrella categories covering topics related to rhymes.", additional = "{{{umbrella_meta_msg}}}", parents = { "Siêu thể loại chung", {name = "Vần", is_label = true, sort = " "}, }, } raw_categories["Vần"] = { description = "Umbrella categories covering rhymes by language.", additional = "{{{umbrella_meta_msg}}}", parents = { "Siêu thể loại chung", {name = "Vần", is_label = true, sort = " "}, }, } ----------------------------------------------------------------------------- -- -- -- HANDLERS -- -- -- ----------------------------------------------------------------------------- table.insert(handlers, function(data) local rhyme_beginning = data.label:match("^Vần/(.-)%-$") if rhyme_beginning then return { description = ("{{{langname}}} rhyme indexes beginning with {{IPAchar|/%s/}}."):format(rhyme_beginning), additional = "The entries in this category are not dictionary entries, but rather indexes of {{{langname}}} terms that rhyme in specific ways.", parents = { {name = "Vần", sort = rhyme_beginning}, }, breadcrumb = {name = ("{{IPAchar|/%s-/}}"):format(rhyme_beginning), nocap = true}, umbrella = false, } end end) ----------------------------------------------------------------------------- -- -- -- RAW HANDLERS -- -- -- ----------------------------------------------------------------------------- table.insert(raw_handlers, function(data) local function rhymeTopCategory(lang) return { lang = lang:getCode(), description = "Liệt kê các mục từ " .. lang:makeCategoryLink() .. " theo vần.", additional = "Đây là một siêu thể loại chung. Nó không chứa bất kỳ mục từ từ điển nào, và có thể chứa các thể loại con của trang đó.", parents = { "{{{langcat}}}", {name = "Vần", sort = langname}, }, breadcrumb = "Vần", toctemplateprefix = "rhymetop" } end local function linkRhymeIfExists(lang, rhyme) -- {{change new|Though this could be ported to Wiktionary}} if mw.title.new('Vần:' .. ucfirst(lang:getCanonicalName()) .. "/" .. rhyme).exists then return "'''[[Vần:" .. ucfirst(lang:getCanonicalName()) .. "/" .. rhyme ..'|<span class="IPA">-' .. rhyme .. "</span>]]'''" end return '<span class="IPA">-' .. rhyme .. '</span>' end local function rhymeCategory(lang, rhyme) return { lang = lang:getCode(), description = "Liệt kê các mục từ " .. lang:makeCategoryLink() .. ' có vần ' .. linkRhymeIfExists(lang, rhyme) .. '.', parents = { {name = "Vần:" .. ucfirst(lang:getCanonicalName()), sort = rhyme}, }, breadcrumb = '<span class="IPA">-' .. rhyme .. '</span>', } end local function rhymeSyllableCountCategory(lang, rhyme, syllableCount) return { lang = lang:getCode(), description = "Liệt kê các mục từ " .. lang:makeCategoryLink() .. " có " .. syllableCount .. ' âm tiết với vần ' .. linkRhymeIfExists(lang, rhyme) .. '.', parents = { {name = "Vần:" .. ucfirst(lang:getCanonicalName()) .. "/" .. rhyme, sort = syllableCount}, }, breadcrumb = tostring(syllableCount) .. " âm tiết", } end local langname = data.category:match("^Vần:([^/]+)") if langname then local lang = require("Module:languages").getByCanonicalName(langname) if lang then local tokens = mw.text.split(data.category, "/") if #tokens > 1 then local rhyme = tokens[2] if #tokens == 3 then -- rhyme + syllable count category local syllables = nil if tokens[3] == "1 âm tiết" then syllables = 1 else local syllablesregex = tokens[3]:match("(%d+) âm tiết") if syllablesregex then syllables = tonumber(syllablesregex) if syllables < 2 then syllables = nil end end end if syllables then return rhymeSyllableCountCategory(lang, rhyme, syllables) end elseif #tokens == 2 then -- rhyme category return rhymeCategory(lang, rhyme) end else -- rhyme language top category return rhymeTopCategory(lang) end end end end) return {LABELS = labels, RAW_CATEGORIES = raw_categories, HANDLERS = handlers, RAW_HANDLERS = raw_handlers} 44ilbnslqq9dc0iuldfj9ddr1531hak Mô đun:nn-noun-uncountable 828 352103 2568744 2251522 2026-10-06T02:51:03Z Hiyuune 50834 2568744 Scribunto text/plain local export = {} local lang = require("Module:languages").getByCode("nn") function export.main(frame) local word = mw.title.getCurrentTitle().text local g1, g2, g3 = frame.args[1], frame.args[2], frame.args[3] local args = frame:getParent().args local length = word:len() local root if args['root'] and args['root'] ~= '' then root = args['root'] elseif word:find('e$') then root = word:sub(1, length-1) else root = word end if args['root2'] and args['root2'] ~= '' then root2 = args['root2'] end local data = {lang = lang, pos_category = "Danh từ", categories = "Danh từ " .. {lang:getCanonicalName() .. " không đếm được"}, inflections = {}} if g3 and g3 ~= '' then data.genders = {g1, g2, g3} elseif g2 and g2 ~= '' then data.genders = {g1, g2} else data.genders = {g1} end suffix = {["m"] = 'en', ["f"] = 'a', ["n"] = 'et', ["?"] = '?'} local all_forms = { root .. suffix[g1] } if g2 and g2 ~= '' then table.insert(all_forms, root .. suffix[g2]) end if g3 and g3 ~= '' then table.insert(all_forms, root .. suffix[g3]) end if root2 and root2 ~= '' then table.insert(all_forms, root2 .. suffix[g1]) end all_forms.label = 'xác định số ít' table.insert(data.inflections, all_forms) table.insert(data.inflections, { label = '[[Phụ lục:Từ điển thuật ngữ#Không đếm được|không đếm được]]' }) return require("Module:headword").full_headword(data) end return export s4w2ve69uy1tclt51ibryk0ctw2ixz6 Mô đun:sd-Arab-translit 828 407097 2568716 2449372 2026-10-06T01:08:02Z Hiyuune 50834 (By [[meta:Indic-TechCom/Tools|FindAndReplace]]) 2568716 Scribunto text/plain --- Taken from [[Module:pa-Aran-translit]] local m_str_utils = require("Module:string utilities") local U = m_str_utils.char local gsub = m_str_utils.gsub local export = {} local zabar = U(0x64E) local zer = U(0x650) local pesh = U(0x64F) local tashdid = U(0x651) -- also called shadda local jazm = "ْ" local hamza = 'ء' local alif = 'ا' local vav = 'و' local ye = 'ي' local he = 'ه' local nun = 'ن' local aspirates = '[ڙمنڻجگلn]' local diacritics = '[' .. zabar .. zer .. pesh .. jazm .. ']' local diacritics_or_alif = '[' .. zabar .. zer .. pesh .. jazm .. alif .. ']' local diacritics_or_matres = '[' .. zabar .. zer .. pesh .. jazm .. alif .. vav .. ye .. ']' local not_diacritics = '[^' .. zabar .. zer .. pesh .. jazm .. ']' local mapping = { ["آ"] = 'ā', ["ب"] = 'b', ["ٻ"] = 'ḇ', ["ڀ"] = 'bh', ["ت"] = 't', ["ٿ"] = 'th', ["ٽ"] = 'ṭ', ["ٺ"] = 'ṭh', ["ث"] = 's̱', ["پ"] = 'p', ["ج"] = 'j', ["ڄ"] = 'j̄', ["ڃ"] = "ñ", ["چ"] = 'c', ["ڇ"] = 'ch', ["ح"] = 'ḥ', ["خ"] = 'x', ["د"] = 'd', ["ڌ"] = 'dh', ["ڏ"] = 'ḏ', ["ڊ"] = 'ḍ', ["ڍ"] = 'ḍh', ["ذ"] = 'ẕ', ["ر"] = 'r', ['ڙ'] = "ṛ", ["ز"] = 'z', ["ژ"] = 'ž', ["س"] = 's', ["ش"] = 'ś', ["ص"] = 'ṣ', ["ض"] = 'ẓ', ["ط"] = 't̤', ["ظ"] = 'z̤', ["ع"] = 'ʻ', ["غ"] = 'ġ', ["ف"] = 'f', ["ڦ"] = 'ph', ["ق"] = 'q', ["ڪ"] = 'k', ["ک"] = 'kh', ["گ"] = 'g', ["ڳ"] = 'g̠', ["ڱ"] = 'ṅ', ["ل"] = 'l', ["م"] = 'm', ["ن"] = 'n', ["ڻ"] = 'ṇ', ["و"] = 'v', ["ہ"] = 'h', ["ي"] = 'y', ["۔"] = ".", ["ں"] = 'ṉ', ["ݪ"] = 'ḷ', ["۾"] = 'mẽ', ["۽"] = 'a͠i', ["ھ"] = "h", ["ه"] = "h", ["ؤ"] = "'o", -- diacritics [zabar] = "a", [zer] = "i", [pesh] = "u", [jazm] = "", -- also sukun - no vowel [U(0x200C)] = "-", -- ZWNJ (zero-width non-joiner) -- ligatures ["ﻻ"] = "lā", ["ﷲ"] = "allāh", -- kashida ["ـ"] = "-", -- kashida, no sound -- hamza [hamza] = "", -- nothing ["ئ"] = "", -- numerals ["۱"] = "1", ["۲"] = "2", ["۳"] = "3", ["۴"] = "4", ["۵"] = "5", ["۶"] = "6", ["۷"] = "7", ["۸"] = "8", ["۹"] = "9", ["۰"] = "0", -- punctuation (leave on separate lines) ["؟"] = "?", -- question mark ["،"] = ",", -- comma ["؛"] = ";", -- semicolon ["«"] = '“', -- quotation mark ["»"] = '”', -- quotation mark ["٪"] = "%", -- percent ["؉"] = "‰", -- per mille ["٫"] = ".", -- decimals ["٬"] = ",", -- thousand ["ۓ"] = "-ye", ["ۀ"] = "h-e" -- he ye (in izafat) } function export.tr(text, lang, sc) -- nun with diacritics / matres is consonant, else nasalisation text = gsub(text, nun .. '(' .. diacritics_or_matres .. ')', 'n%1') text = gsub(text, nun, '̃') -- handle initial او (= o) so alif doesn't later become ā text = gsub(text, alif .. vav, 'o') -- alif text = gsub(text, alif .. zabar, 'a') text = gsub(text, alif .. zer, 'i') text = gsub(text, alif .. pesh, 'u') text = gsub(text, zabar .. alif, 'ā') -- aspirates should have diacritics moved after text = gsub(text, he .. '(' .. diacritics_or_alif .. ')', 'h%1') text = gsub(text, he .. he .. '(' .. not_diacritics .. ')', he .. '%1') text = gsub(text, he .. he .. '$', he) text = gsub(text, '(' .. aspirates .. ')(' .. diacritics .. ')' .. he, '%1' .. he .. '%2') -- vav + ye: DO VOWEL RULES FIRST (fixes لَوْنگُ) text = gsub(text, zabar .. vav, 'au') text = gsub(text, pesh .. vav, 'ū') text = gsub(text, zabar .. ye, 'ai') text = gsub(text, zer .. ye, 'ī') -- extra consonant heuristics demanded by your tests text = gsub(text, vav .. ye, 'v' .. ye) -- وي... -> ve... text = gsub(text, ye .. vav .. '$', ye .. 'v') -- ...يو -> ...ev -- now mark consonantal vav/ye when they have their own marks text = gsub(text, vav .. '(' .. diacritics_or_alif .. ')', 'v%1') text = gsub(text, ye .. '(' .. diacritics_or_alif .. ')', 'y%1') -- default case text = gsub(text, vav, 'o') text = gsub(text, ye, 'e') -- all rules text = gsub(text, '.', mapping) -- remaining alif text = gsub(text, alif, 'ā') return text end return export gipu8vgocjg2j2fzm6aw0xictz4lgdk teine 0 418461 2568725 2568046 2026-10-06T01:25:49Z Hiyuune 50834 2568725 wikitext text/x-wiki =={{langname|et}}== {{number box|et}} ==={{section|etym}}=== Từ {{inh|et|urj-fin-pro|*toinën}}. ==={{section|pron}}=== * {{et-IPA}} * {{rhymes|et|eine|s=2}} * {{hyph|et|tei|ne}} ==={{section|adj}}=== {{head|et|Tính từ}} # {{cln|et|Số thứ tự}} [[thứ|Thứ]] [[hai]]. ===={{section|decl}}==== {{et-decl-oluline|tei|ne}} ==={{section|pronoun}}=== {{head|et|Đại từ}} # {{lb|et|bất định}} [[khác|Khác]], [[người khác]]. ===={{section|decl}}==== {{et-decl-oluline|tei|ne}} ===={{section|drv}}==== * {{l|et|teiseks}} ==={{section|ref}}=== * {{R:et:EÕS}} {{C|et|Hai}} =={{langname|gd}}== ==={{section|etym}}=== Từ {{inh|gd|sga|teine}},<ref>{{R:DIL|40385|head=1 teine}}</ref> từ {{inh|gd|cel-pro|*teɸnets||lửa}} (so sánh tiếng Breton và Cornwall {{m|br|tan}}, tiếng Wales {{m|cy|tân}}). ==={{section|pron}}=== * {{IPA|gd|/ˈtʲʰãnə/|/ˈtʃʰãnə/|ref={{R:gd:Oftedal}}|ref2={{R:gd:Borgstrom1940}}<<name:B1940>>|a=phần lớn ở,_,Lewis}} * {{IPA|gd|/ˈtʲʰɛnə/|/ˈtʃʰɛnə/|ref2=<<name:B1940>>|a=Bernera,Harris,North Uist}} * {{IPA|gd|/ˈtʃʰɛɲə/|/ˈtʃʰeɲə/|ref2=<<name:B1940>> !!! {{R:Mac Gill-Fhinnein:1966}}|;|[ˈtʃʰeˀɲə]|ref3={{R:gd:Jones:2009|page=9}}|a=Benbecula,South Uist,Eriskay,South Argyll|a3=Islay}} * {{IPA|gd|/ˈtʃʰĩɲʌ/|ref=<<name:B1940>> !!! {{R:gd:Borgstrom1937}}|a=Barra}} * {{IPA|gd|/ˈtʃʰĩɲə/|a=Raasay,Mull}} * {{IPA|gd|/ˈtʃʰeɲə/|/ˈtʃʰĩnə/|ref2={{R:gd:Borgstrom1941|page=60}}|a=Skye}} * {{IPA|gd|/ˈtʃʰĩnə/|/ˈtʲʰĩnə/|ref={{R:gd:OMaolalaigh:2008}}|ref2={{R:gd:Borgstrom1941|page=72}}|a=Tiree,Wester Ross}} ==={{section|n}}=== {{gd-noun|m|~|-tean|dat=~,-idh}} # [[lửa|Lửa]], [[ngọn lửa]]. # [[đám cháy|Đám cháy]] [[lớn]]. # Cây [[kim]] [[tước]]. # Tên gọi [[t]] trong bảng chữ cái Gael cổ. ===={{section|drv}}==== {{col3|gd|beinn-theine<t:núi lửa> |cliath-theine |teàrnadair-o-theine |teine-sionnachain |is fheàrr teine beag a gharas na teine mòr a loisgeas }} ==={{section|mut}}=== {{gd-mut-cons|t|eine}} ==={{section|ref}}=== {{reflist|size=smaller}} ==={{section|further}}=== * {{R:Dwelly}} * {{R:DIL|40385|head=1 teine}} {{topics|gd|Lửa}} =={{langname|ga}}== ==={{section|n}}=== {{ga-noun|f|~,~adh|-te}} # {{obsolete spelling of|ga|tine|t=lửa}} ===={{section|decl}}==== Bảng biến tố của danh từ biến cách loại 4: {{ga-decl-f4|t|eine|einte}} Bảng biến tố của danh từ biến cách loại 5: {{ga-decl-f5|t|eine|eineadh|einte|dat=einidh|datoc=a}} ==={{section|mut}}=== {{ga-mut}} =={{langname|sga}}== ==={{section|alt}}=== * {{l|sga|tene}} ==={{section|etym}}=== {{root|sga|ine-pro|*tep-}} {{dercat|sga|ine-pro}} Từ {{inh|sga|cel-pro|*teɸnets||lửa}} (so sánh với {{cog|kw|-}} và {{cog|br|tan}}, {{cog|cy|tân}}). ==={{section|pron}}=== * {{sga-IPA}} ==={{section|n}}=== {{sga-noun|m|teined|teinid}} # [[lửa|Lửa]]. ===={{section|infl}}==== {{sga-decl-t&d|t|g=m |teinid|teined|teint|dat_sg2=tein}} ===={{section|syn}}==== * {{l|sga|áed}} * {{l|sga|daig}} * {{l|sga|grís}} * {{l|sga|lasar}} * {{l|sga|loscud}} * {{l|sga|smál}} ===={{section|drv}}==== * {{l|sga|tenlach}} ** {{desctree|mga|tellach}} ===={{section|desc}}==== * {{desc|ga|tine}} * {{desc|gv|çhenney}} * {{desc|gd|teine}} * {{desc|non|dini|bor=1}} ==={{section|mut}}=== {{sga-mutation}} ==={{section|ref}}=== * {{R:DIL|40385|head=1 teine}} {{topics|sga|Lửa}} =={{langname|lt}}== ==={{section|n}}=== {{head|lt|Biến thể hình thái danh từ|head=teinè|g=m}} # {{infl of|lt|tei̇̀nas||loc|s}} ==={{section|n}}=== {{head|lt|Biến thể hình thái danh từ|head=tei̇̀ne|g=m}} # {{infl of|lt|tei̇̀nas||voc|s}} =={{langname|ro}}== ==={{section|pron}}=== * {{IPA|ro|/teˈi.ne/}} * {{rhymes|ro|ine|s=3}} * {{hyph|ro|te|i|ne}} ==={{section|n}}=== {{head|ro|Biến thể hình thái danh từ|g=f}} # {{infl of|ro|teină||gen//dat|indef}} =={{langname|sm}}== ==={{section|n}}=== {{head|sm|Danh từ}} # [[gái|Gái]]. ==={{section|ref}}=== * {{R:sm:Milner 1993|page=260}} =={{langname|tkl}}== ==={{section|etym}}=== Từ {{inh|tkl|poz-pol-pro|*taqahine}}. Các từ cùng gốc bao gồm {{cog|to|taʻahine}} và {{cog|sm|teine}}. ==={{section|pron}}=== * {{tkl-IPA|te'ine}} * {{hyph|tkl|te|i|ne}} ==={{section|n}}=== {{head|tkl|Danh từ}} # [[gái|Gái]]. ==={{section|ref}}=== * {{R:tkl:TD|page=380}} =={{langname|it}}== ==={{section|pron}}=== {{it-pr|[ì]}} ==={{section|n}}=== {{head|it|Biến thể hình thái danh từ|g=f}} # {{plural of|it|teina}} ==={{section|ana}}=== * {{anagrams|it|a=eeint|etnei|etnie|tenie|tiene}} t7kcd25e1h0k9ozzcssf3kiyljlg4gi mona 0 418832 2568657 2568445 2026-10-05T13:08:54Z TheHighFighter2 42988 /* Tiếng Pali */ 2568657 wikitext text/x-wiki {{also|Phụ lục:Biến thể của "mona"}} {{minitoc}} =={{langname|en}}== [[File:GREN-grandetang-mona-affe.jpg|thumb|a '''mona''' monkey, ''Cercopithecus mona'']] ==={{ĐM|etym}}=== Từ {{bor|en|es|mona||khỉ}}. ==={{ĐM|pron}}=== * {{IPA|en|/ˈmoʊnə/}} * {{audio|en|LL-Q1860 (eng)-Vealhurl-mona.wav|a=Southern England}} ==={{ĐM|noun}}=== {{en-noun}} # {{taxlink|Cercopithecus mona|loài}}, một loài khỉ phân bố tại Tây Phi. ==={{ĐM|anagram}}=== * {{anagrams|en|a=amno|Amon|Mano|NOMA|Noam|Oman|Onam|mano|maon|moan|noma}} {{C|en|Họ Khỉ Cựu thế giới}} =={{langname|ang}}== [[File:Full Moon Luc Viatour.jpg|thumb|225px|Full mōna of eorðan ġesewen]] [[File:Lunar-eclipse-09-11-2003.jpeg|thumb|225px|Sē mōna on fulre mōnan āsprungennesse]] ==={{ĐM|alter}}=== * {{alter|ang|mōne<g:f>}} ==={{ĐM|etym}}=== {{ety|ang|:inh|gmw-pro:*mānō}} Từ {{inh|ang|gmw-pro|*mānō}}, từ {{inh|ang|gem-pro|*mēnô}}, từ {{der|ang|ine-pro|*mḗh₁n̥s}}, có thể là một dạng thêm hậu tố bắt nguồn từ căn tố {{m|ine-pro|*meh₁-||đo}}. ==={{ĐM|pron}}=== * {{ang-IPA|mōna}} ==={{ĐM|noun}}=== {{ang-noun|mōna|m}} # [[mặt trăng|Mặt trăng]]. #* {{c.|994}}, [[w:en:Ælfric of Eynsham|Ælfric]], ''[https://books.google.co.id/books?id=iqCU4ZV4pjoC&pg=PA19 Về các mùa trong năm]'': #*: {{quote|ang|Sē '''mōna''' næfþ nān lēoht būtan of þǣre sunnan lēoman, and hē is ealra tungla niðemest.|'''Mặt trăng''' không phát ra ánh sáng mà nhận từ mặt trời, và nó là thiên thể thấp nhất trong tất cả.}} #* [https://archive.org/details/anglosaxonchroni01thor/page/76/mode/1up Biên niên sử Anglo-Saxon]: #*: {{quote|ang|''<small>An. DCCXXXIIII</small> Hēr wæs sē '''mōna''' swylċe hē wǣre mid blōde begoten, ⁊ forðferdan Tātwine ⁊ Beda''|<small>Năm 734</small> Vào năm này, '''mặt trăng''' tựa như bị bao phủ bởi máu, và Tatwine cùng Beda đã qua đời.}} #: {{ux|ang|Lōca nū hū beorhte sē '''mōna''' tō niht sċīnþ!|Nhìn kìa, '''mặt trăng''' tối nay tỏa sáng rực rỡ làm sao!}} #: {{ux|ang|On þæs '''mōnan''' lēohte læġ lȳtel ǣġ on lēafe.|Dưới ánh '''trăng''', quả trứng nhỏ nằm trên chiếc lá.}} ===={{ĐM|decl}}==== {{ang-decl-noun-n-m|mōn}} ===={{ĐM|der}}==== {{col4|ang |full mōna |mōnan āsprungennes |mōnanǣfen |mōnandæġ |mōnanniht |mōnlīċ |mōnsēoc |nīewe mōna }} ===={{ĐM|desc}}==== * {{desc|enm|mone|moone|mon|moyn|monæ|mona}} ** {{desctree|en|moon}} ** {{desc|sco|muin|alts=1}} ** {{desc|yol|mona|moone}} ** {{desc|en-geo|muin|meun}} {{topics|ang|Mặt Trăng}} =={{langname|enm}}== ==={{ĐM|noun}}=== {{head|enm|noun|var=1}} # {{lb|enm|Early ME}} {{alt form|enm|mone|t=mặt trăng|id=mặt trăng}}. =={{langname|bmb}}== ==={{ĐM|etym}}=== {{bor+|bmb|ln|mona}}. ==={{ĐM|verb}}=== -{{head|bmb|v}} # [[nhìn thấy|Nhìn thấy]], [[xem]]. =={{langname|bdd}}== ==={{ĐM|etym}}=== Từ {{inh|bdd|poz-oce-pro|*moñak}}, từ {{inh|bdd|poz-pro|*məñak}}. ==={{ĐM|noun}}=== {{head|bdd|noun}} # Món [[pudding]] luộc trong nồi đất. ===={{ĐM|rel}}==== * {{l|bdd|mamonana|gloss=mỡ}} =={{langname|ofs}}== [[Image:FullMoon2010.jpg|thumb|upright|Thî môna.]] ==={{ĐM|etym}}=== Từ {{inh|ofs|gmw-pro|*mānō}}, từ {{inh|ofs|gem-pro|*mēnô}}, từ {{inh|ofs|ine-pro|*mḗh₁n̥s||trăng, tháng}}. Các từ cùng gốc bao gồm {{cog|ang|mōna}}, {{cog|goh|mâno}}, {{cog|non|máni}} và {{cog|got|𐌼𐌴𐌽𐌰}}. ==={{ĐM|pron}}=== * {{IPA|ofs|/ˈmɔːna/}} ==={{ĐM|noun}}=== {{ofs-noun|head=môna|m}} # [[mặt trăng|Mặt trăng]]. ===={{ĐM|desc}}==== * {{desc|frr|-}} *: Föhr-Amrum: {{l|frr|muun}} *: Mooring: {{l|frr|moune}} *: Sylt: {{l|frr|Muun}} * {{desc|stq|Moune}} * {{desc|fy|moanne}} ===={{ĐM|ref}}==== * {{R:ofs:Bremmer:2009}} {{topics|ofs|Thiên văn học|Nguồn ánh sáng}} =={{langname|huu}}== {{huu-class|mona|-}} ==={{ĐM|etym}}=== Các từ cùng gốc bao gồm {{cog|hto|mona}} và {{cog|hux|mona}}. ==={{ĐM|pron}}=== * {{huu-IPA}} * {{hyph|huu|mo|na}} ==={{ĐM|noun}}=== {{head|huu|noun}} # [[trời|Trời]]. ===={{ĐM|decl}}==== {{huu-decl-noun|monaɨaɨ}} ==={{ĐM|ref}}=== * {{R:huu:Burtch:1983|page=179}} * {{R:huu:Wojtylak:2017|page=127}} {{C|huu|Tự nhiên}} =={{langname|ga}}== ==={{ĐM|n}}=== {{ga-noun|m|~|~í}} # [[tiền đúc|Tiền đúc]]; [[tiền bạc]]. ===={{ĐM|decl}}==== {{ga-decl-m4|m|ona|onaí}} ==={{ĐM|mut}}=== {{ga-mut}} ==={{ĐM|further}}=== * {{R:ga:Ó Dónaill}} * {{R:ga:EID}} * {{R:ga:NEID}} =={{langname|ktu}}== ==={{ĐM|verb}}=== {{head|ktu|verb}} # [[nhìn thấy|Nhìn thấy]], [[xem]]. =={{langname|kg}}== ==={{ĐM|etym}}=== {{inh+|kg|bnt-pro|*-bóna}}. ==={{ĐM|verb}}=== {{head|kg|verb}} # [[nhìn thấy|Nhìn thấy]], [[xem]]. =={{langname|ln}}== ==={{ĐM|etym}}=== {{bor+|ln|kg|mona}}. ==={{ĐM|verb}}=== {{ln-verb}} # [[nhìn thấy|Nhìn thấy]], [[xem]]. =={{langname|lua}}== ==={{ĐM|verb}}=== {{head|lua|verb}} # [[nhìn thấy|Nhìn thấy]], [[xem]]. =={{langname|pi}}== ==={{ĐM|alt}}=== {{pi-alt}} ==={{ĐM|n}}=== {{pi-noun|n}} # Tính [[khôn ngoan]], [[trí tuệ]]. # Sự [[bình tĩnh]]. # Sự [[lặng thinh]], sự [[nín lặng]]. =={{langname|eo}}== ==={{ĐM|etym}}=== {{ety|eo|:af|mono|-a|text=+|tree=1}} ==={{ĐM|pron}}=== {{eo-pr|a=LL-Q143 (epo)-Lepticed7-mona.wav}} ==={{ĐM|adj}}=== {{eo-head}} # {{lb|eo|money}} Thuộc về [[tiền tệ]], liên quan đến [[tiền nong]]. ==={{ĐM|further}}=== * {{R:eo:PIV 2020}} * {{R:eo:ReVo}} =={{langname|st}}== ==={{ĐM|adv}}=== {{head|st|adverb}} # [[đây|Đây]]; {{n-g|phó từ chỉ xuất cận tính.}} =={{langname|ty}}== ==={{ĐM|etym}}=== Từ {{inh|ty|poz-pol-pro|*mona}}, từ {{inh|ty|poz-oce-pro|*moñak}}, từ {{inh|ty|poz-pro|*məñak}}. ==={{ĐM|adj}}=== {{head|ty|adjective}} # [[ngọt|Ngọt]]. ===={{ĐM|rel}}==== * {{l|ty|momona}} * {{l|ty|monamona}} ==={{ĐM|ref}}=== * {{R:ty:LTC}} * {{R:TahitianAcademy}} =={{langname|tdj}}== ==={{ĐM|adv}}=== {{head|tdj|adverb}} # [[không|Không]]. =={{langname|es}}== ==={{ĐM|pron}}=== {{es-pr|+<audio:LL-Q1321 (spa)-AdrianAbdulBaha-mona.wav<a:Colombia>>}} ==={{ĐM|etym}} 1=== {{ety|es|:clipping<unc>|es:maimona|tree=1|text=:ar}} So sánh với {{cog|en|monkey}}. ===={{ĐM|noun}}==== {{es-noun|f|m=+}} # {{female equivalent of|es|mono}}: [[khỉ]] cái. # Người hay [[bắt chước]]. # {{lb|es|Mexico|Chile}} [[búp bê|Búp bê]], [[con rối]]. # {{lb|es|Colombia}} Người phụ nữ [[tóc]] [[vàng hoe]]. ====={{ĐM|der}}===== {{col|es|a freír monas|aunque la mona se vista de seda, mona se queda|como la mona|pintar la mona|mona china}} ====={{ĐM|desc}}===== * {{desc|en|mona|bor=1}} * {{desc|it|mona|bor=1}} ===={{ĐM|noun}}==== {{es-noun|f}} # Sự [[say rượu]], sự [[quá chén]]. #: {{syn|es|Kho từ vựng:borrachera}} ====={{ĐM|der}}===== {{col|es |amonarse |dormir la mona}} ===={{ĐM|adj}}==== {{head|es|Biến thể hình thái tính từ|g=f-s}} # {{adj form of|es|mono||f|s}}. ==={{ĐM|etym}} 2=== ===={{ĐM|noun}}==== {{es-noun|f}} # Món [[bánh]] có dạng hình vòng tròn, giống với {{l|es|roscón}}. ====={{ĐM|der}}===== {{col|es|mona de Pascua}} ==={{ĐM|further}}=== * {{R:es:DRAE}} {{c|es|Động vật giống cái|Bộ Linh trưởng}} =={{langname|vo}}== ==={{ĐM|noun}}=== {{head|vo|Biến thể hình thái danh từ}} # {{inflection of|vo|mon||gen|s}}. =={{langname|it}}== ==={{ĐM|etym}} 1=== Từ {{der|it|es|mono}}, có nguồn gốc từ tiếng Ả Rập. ===={{ĐM|pron}}==== {{it-pr|mòna}} ===={{ĐM|noun}}==== {{it-noun|f}} # {{lb|it|obsolete}} [[khỉ|Khỉ]]. ==={{ĐM|etym}} 2=== {{unc|it}}. ===={{ĐM|pron}}==== {{it-pr|móna}} ===={{ĐM|noun}}==== {{it-noun|f}} # {{lb|it|regional|chiefly|Triveneto|vulgar|figurative}} [[lồn|Lồn]]. ===={{ĐM|noun}}==== {{it-noun|m|#}} # {{lb|it|regional|chiefly|Triveneto|vulgar|pejorative}} Kẻ [[ngốc]], kẻ [[ngớ ngẩn]], người bị [[lừa bịp]]. ==={{ĐM|anagram}}=== * {{anagrams|it|a=amno|Maon|Oman|mano|noma}} {{c|it|Khỉ}} =={{langname|yol}}== ==={{ĐM|etym}}=== Từ {{inh|yol|enm|mone}}, từ {{inh|yol|ang|mōna||mặt trăng}}, từ {{inh|yol|gmw-pro|*mānō}}. ==={{ĐM|pron}}=== * {{IPA|yol|/ˈmoːnə/}} ==={{ĐM|noun}}=== {{head|yol|noun}} # [[mặt trăng|Mặt trăng]]. #* {{quote-text|yol|year=1788|title=VOCABULARY of the LANGUAGE of the Barony of FORTH and BARGIE.|passage=halluf-'''mona''',|translation=nửa vầng '''trăng'''.}} ===={{ĐM|der}}==== * {{l|yol|halluf-mona}} ==={{ĐM|ref}}=== * {{R:Vallancey 1788|page=31}} simzradrw81hkef85ckstjzv42sucob comhchoirigh 0 418911 2568729 2567985 2026-10-06T01:29:53Z Hiyuune 50834 2568729 wikitext text/x-wiki =={{langname|ga}}== ==={{section|v}}=== {{ga-verb|pres=-íonn|fut=-eoidh|vn=-iú|pp=-ithe}} # {{lb|ga|transitive}} [[buộc tội|Buộc tội]] lẫn nhau; [[đấu tố]] lẫn nhau; [[tố cáo]] lẫn nhau. ===={{section|forms}}==== {{ga-conj-2|c|omhchoir|q=slender|stem=omhchoirigh}} ==={{section|mut}}=== {{ga-mut}} ==={{section|further}}=== * {{R:ga:Ó Dónaill}} * {{R:ga:NEID}} * {{R:ga:FNG}} * {{R:ga:tearma.ie}} mkx5kjfs46abeds05ad5uu3nctwju0w maimón 0 419264 2568652 2026-10-05T12:33:55Z TheHighFighter2 42988 Trang mới: “{{also|maimon}} =={{langname|es}}== ==={{ĐM|pron}}=== {{es-pr}} ==={{ĐM|etym}} 1=== {{ety|es|id=khỉ|:bor|ar:مَيْمُون<t:khỉ đầu chó, khỉ mặt chó>|tree=1|text=+}} ===={{ĐM|noun}}==== {{es-noun|m|f=+}} # [[khỉ|Khỉ]] có đuôi cầm nắm được. #: {{syn|es|mico}} ====={{ĐM|der}}===== {{col|es|bollo maimón}} ==={{ĐM|etym}} 2=== Theo tên gọi của người Moor, xuất phát từ {{der|es|ar|ميمون}}. ===={{ĐM|noun}}==== {{es-n…” 2568652 wikitext text/x-wiki {{also|maimon}} =={{langname|es}}== ==={{ĐM|pron}}=== {{es-pr}} ==={{ĐM|etym}} 1=== {{ety|es|id=khỉ|:bor|ar:مَيْمُون<t:khỉ đầu chó, khỉ mặt chó>|tree=1|text=+}} ===={{ĐM|noun}}==== {{es-noun|m|f=+}} # [[khỉ|Khỉ]] có đuôi cầm nắm được. #: {{syn|es|mico}} ====={{ĐM|der}}===== {{col|es|bollo maimón}} ==={{ĐM|etym}} 2=== Theo tên gọi của người Moor, xuất phát từ {{der|es|ar|ميمون}}. ===={{ĐM|noun}}==== {{es-noun|m}} # Món súp [[tỏi]] tại [[Granada]], Tây Ban Nha. ==={{ĐM|further}}=== * {{R:es:DRAE}} ni61zye34hianb2n93hcgo4sd0fqj5i maimona 0 419265 2568653 2026-10-05T12:36:58Z TheHighFighter2 42988 Trang mới: “=={{langname|es}}== {{etymon|es|:from<text:giống cái tương đương của>|maimón}} ==={{ĐM|pron}}=== {{es-pr}} ==={{ĐM|noun}}=== {{es-noun|f}} # {{female equivalent of|es|maimón}}.” 2568653 wikitext text/x-wiki =={{langname|es}}== {{etymon|es|:from<text:giống cái tương đương của>|maimón}} ==={{ĐM|pron}}=== {{es-pr}} ==={{ĐM|noun}}=== {{es-noun|f}} # {{female equivalent of|es|maimón}}. s339a4fy5mspyrmcx5aun5gzye55lcn halluf-mona 0 419266 2568654 2026-10-05T12:46:20Z TheHighFighter2 42988 Trang mới: “=={{langname|yol}}== ==={{ĐM|etym}}=== Từ {{compound|yol|halluf|mona}}. ==={{ĐM|noun}}=== {{head|yol|noun}} # [[trăng|Trăng]] [[bán nguyệt]]. ===={{ĐM|der}}==== * {{l|yol|halluf mond}} ===={{ĐM|rel}}==== * {{l|yol|redaughe-moone}} ==={{ĐM|ref}}=== * {{R:Vallancey 1788|page=31}}” 2568654 wikitext text/x-wiki =={{langname|yol}}== ==={{ĐM|etym}}=== Từ {{compound|yol|halluf|mona}}. ==={{ĐM|noun}}=== {{head|yol|noun}} # [[trăng|Trăng]] [[bán nguyệt]]. ===={{ĐM|der}}==== * {{l|yol|halluf mond}} ===={{ĐM|rel}}==== * {{l|yol|redaughe-moone}} ==={{ĐM|ref}}=== * {{R:Vallancey 1788|page=31}} k2r54ozoorby4r2t9j615ata0ov2d01 halluf mond 0 419267 2568655 2026-10-05T12:51:41Z TheHighFighter2 42988 Trang mới: “=={{langname|yol}}== ==={{ĐM|etym}}=== Từ {{compound|yol|halluf|mond}}. ==={{ĐM|adj}}=== {{head|yol|adjective}} # Có hình [[bán nguyệt]]. ==={{ĐM|ref}}=== * {{R:Poole 1867|page=44}}” 2568655 wikitext text/x-wiki =={{langname|yol}}== ==={{ĐM|etym}}=== Từ {{compound|yol|halluf|mond}}. ==={{ĐM|adj}}=== {{head|yol|adjective}} # Có hình [[bán nguyệt]]. ==={{ĐM|ref}}=== * {{R:Poole 1867|page=44}} 4p25gzz10k46lq162vwgivqf85gah8l Thể loại:Tính từ tiếng Yola 14 419268 2568656 2026-10-05T12:53:39Z TheHighFighter2 42988 Trang mới: “{{auto cat}}” 2568656 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx firefox 0 419269 2568659 2026-10-05T14:07:09Z Waitforbabyglobe 61372 Trang mới: “=={{langname|en}}== {{wp|lang=en}} ==={{ĐM|n}}=== {{en-noun}} # [[gấu trúc|Gấu trúc]] [[đỏ]]. #: {{synonyms|en|bear cat|cat bear|panda|lesser panda}} ===={{ĐM|rel}}==== {{col2 |en|giant panda |panda bear }} ==={{ĐM|see}}=== * {{l|en|red panda}} * {{l|en|wah}}” 2568659 wikitext text/x-wiki =={{langname|en}}== {{wp|lang=en}} ==={{ĐM|n}}=== {{en-noun}} # [[gấu trúc|Gấu trúc]] [[đỏ]]. #: {{synonyms|en|bear cat|cat bear|panda|lesser panda}} ===={{ĐM|rel}}==== {{col2 |en|giant panda |panda bear }} ==={{ĐM|see}}=== * {{l|en|red panda}} * {{l|en|wah}} b23nus0sufrdz48mlircnuk5f495jmo 2568681 2568659 2026-10-05T15:58:47Z TheHighFighter2 42988 /* Tiếng Anh */ 2568681 wikitext text/x-wiki {{also|Firefox}} =={{langname|en}}== ==={{ĐM|pron}}=== * {{audio|en|LL-Q1860 (eng)-Flame, not lame-Firefox.wav|a=US}} * {{IPA|en|/ˈfaɪəfɒks/|a=RP}} * {{IPA|en|/ˈfaɪɚfɑks/|a=GA}} ==={{ĐM|etym}} 1=== {{calque|en|cmn|-}} {{zh-l|火狐|lit=cáo lửa}}. ===={{ĐM|n}}==== {{en-noun}} # [[gấu trúc đỏ|Gấu trúc đỏ]]. #: {{synonyms|en|red panda|wah|bear cat|cat bear|panda|lesser panda}} ==={{ĐM|etym}} 2=== {{wp|en:+ (mythology)}} {{calque|en|fi|tulikettu}} hoặc {{m|fi|tulirepo}}. ===={{ĐM|n}}==== {{en-noun}} # Con [[cáo]] có bộ [[lông]] [[rực lửa]] hoặc [[phát sáng]], [[phản chiếu]] tạo nên [[cực quang]] trong văn hóa dân gian Phần Lan. ==={{ĐM|ana}}=== * {{anagrams|en|a=effiorx|forefix|fox fire|fox-fire|foxfire}} {{C|en|Bộ Ăn thịt|Nhân vật từ văn hóa dân gian|Thần thoại Finn|Sinh vật thần thoại}} t6wnjk9xe1nx77clblf6aatvsq5k91c đặt câu 0 419270 2568660 2026-10-05T14:15:49Z Waitforbabyglobe 61372 ([[Mediawiki:Gadget-start.js|Trang mới]]) +vi:verb:# [[sắp xếp|Sắp xếp]] [[từ ngữ]] theo [[đúng]] [[ngữ pháp]] để [[tạo thành]] [[câu]] có [[nghĩa]] [[hoàn chỉnh]], thường là [[bài tập]] dùng từ hoặc [[cấu trúc]] cho [[sẵn]]. 2568660 wikitext text/x-wiki =={{langname|vi}}== ==={{ĐM|pron}}=== {{vi-pron}} ==={{ĐM|verb}}=== {{vi-verb}} # [[sắp xếp|Sắp xếp]] [[từ ngữ]] theo [[đúng]] [[ngữ pháp]] để [[tạo thành]] [[câu]] có [[nghĩa]] [[hoàn chỉnh]], thường là [[bài tập]] dùng từ hoặc [[cấu trúc]] cho [[sẵn]]. #: {{ux|vi|Học sinh phải '''đặt câu''' với từ “yêu thương”.}} #: {{ux|vi|Cô giáo yêu cầu cả lớp '''đặt câu''' theo mẫu “Nếu... thì...”.}} ===={{ĐM|syn}}==== * {{l|vi|tạo câu}} * {{l|vi|dựng câu}} 770pkcnobj6orad1rfrro6judd910e4 2568661 2568660 2026-10-05T14:20:39Z Waitforbabyglobe 61372 2568661 wikitext text/x-wiki =={{langname|vi}}== ==={{section|etym}}=== {{com|vi|đặt|câu}} ==={{ĐM|pron}}=== {{vi-pron}} ==={{ĐM|verb}}=== {{vi-verb}} # [[sắp xếp|Sắp xếp]] [[từ ngữ]] theo [[đúng]] [[ngữ pháp]] để [[tạo thành]] [[câu]] có [[nghĩa]] [[hoàn chỉnh]], thường là [[bài tập]] dùng từ hoặc [[cấu trúc]] cho [[sẵn]]. #: {{ux|vi|Học sinh phải '''đặt câu''' với từ “yêu thương”.}} #: {{ux|vi|Cô giáo yêu cầu cả lớp '''đặt câu''' theo mẫu “Nếu... thì...”.}} ===={{ĐM|syn}}==== * {{l|vi|tạo câu}} * {{l|vi|dựng câu}} 1984akptu6umntt3p9rw3zzsl1jdsjc 2568668 2568661 2026-10-05T15:17:04Z TheHighFighter2 42988 /* Tiếng Việt */ "tạo câu" và "dựng câu" có thể không phù hợp để tạo thành mục từ riêng 2568668 wikitext text/x-wiki =={{langname|vi}}== ==={{section|etym}}=== Từ {{com|vi|đặt|câu}}. ==={{ĐM|pron}}=== {{vi-pron}} ==={{ĐM|verb}}=== {{vi-verb}} # [[sắp xếp|Sắp xếp]] [[từ ngữ]] theo [[đúng]] [[ngữ pháp]] để tạo thành [[câu]] có [[nghĩa]] [[hoàn chỉnh]], thường là [[bài tập]] dùng từ hoặc [[cấu trúc]] cho [[sẵn]]. #: {{ux|vi|Học sinh phải '''đặt câu''' với từ “yêu thương”.}} #: {{ux|vi|Cô giáo yêu cầu cả lớp '''đặt câu''' theo mẫu “Nếu... thì...”.}} 8yg2vxblo681fhlmim81hi9eygeuydp delulu 0 419271 2568662 2026-10-05T14:33:46Z Waitforbabyglobe 61372 ([[Mediawiki:Gadget-start.js|Trang mới]]) +en:adj:# [[tin|Tin]] vào những [[điều]] không có [[thật]] hoặc không [[đúng]] [[sự thật]], thường là do [[bạn]] [[tự]] [[chọn]] tin [[như vậy]]. 2568662 wikitext text/x-wiki =={{langname|en}}== {{-pron-}} * [[Wiktionary:IPA|IPA]]: {{IPA-old|/dɪˈluː.luː/}} ==={{ĐM|adj}}=== {{eng-adj-2}} # [[tin|Tin]] vào những [[điều]] không có [[thật]] hoặc không [[đúng]] [[sự thật]], thường là do [[bạn]] [[tự]] [[chọn]] tin [[như vậy]]. #: You're at a [[concert]] right [[at the back]], and you think an [[idol]] made [[eye contact]] with you... People may call you '''delulu'''. ===={{ĐM|syn}}==== * {{l|en|delusional}} {{-trans-}} {{trans-top|ảo tưởng}} *{{vi-adj}}: [[ảo tưởng]] {{g|m}} 7ft0p0ns64ub01gllqndxmzsnflpf57 2568666 2568662 2026-10-05T15:00:24Z TheHighFighter2 42988 2568666 wikitext text/x-wiki =={{langname|en}}== {{wp|en:}} ==={{ĐM|pron}}=== * {{IPA|en|/dɪˈluː.luː/}} * {{audio|en|LL-Q1860 (eng)-Flame, not lame-delulu.wav|a=US}} * {{rhymes|en|uːlu|s=3}} ==={{ĐM|adj}}=== {{en-adj}} # {{lb|en|Internet slang}} [[ảo tưởng|Ảo tưởng]], [[hoang tưởng]]. #: {{ux|en|You're at a concert right at the back, and you think an idol made eye contact with you... People may call you '''delulu'''.|Đi đu concert ở tận hàng cuối, mà cứ nghĩ idol vừa va phải ánh mắt của mình... Mọi người sẽ bảo bạn bị '''ảo tưởng''' đấy.}} ===={{ĐM|syn}}==== * {{l|en|delusional}} sz1xgs12d1qn67utf4m87o6o2vg0tpt tinkeyfha 0 419272 2568663 2026-10-05T14:35:13Z TheHighFighter2 42988 Trang mới: “=={{langname|cag}}== ==={{ĐM|etym}}=== Từ {{af|cag|tin-<pos:sở hữu bất định>|k-<pos:khả ly>|<alt:eyfha><t:người trùng tên với ai đó>}}. ==={{ĐM|pron}}=== * {{IPA|cag|/tinkejɸa/}} ==={{ĐM|noun}}=== {{head|cag|noun}} # Người [[trùng]] [[tên]]. ===={{ĐM|der}}==== * {{l|cag|tinkeyfhache}} ==={{ĐM|ref}}=== * {{cite-book |url=https://muse.jhu.edu/book/81981 |title=Nivaclé Grammar |year=2020 |publisher=University of Utah Press |isbn=978-1-…” 2568663 wikitext text/x-wiki =={{langname|cag}}== ==={{ĐM|etym}}=== Từ {{af|cag|tin-<pos:sở hữu bất định>|k-<pos:khả ly>|<alt:eyfha><t:người trùng tên với ai đó>}}. ==={{ĐM|pron}}=== * {{IPA|cag|/tinkejɸa/}} ==={{ĐM|noun}}=== {{head|cag|noun}} # Người [[trùng]] [[tên]]. ===={{ĐM|der}}==== * {{l|cag|tinkeyfhache}} ==={{ĐM|ref}}=== * {{cite-book |url=https://muse.jhu.edu/book/81981 |title=Nivaclé Grammar |year=2020 |publisher=University of Utah Press |isbn=978-1-60781-776-5 |doi=10.1353/book81981|last=Campbell|first=Lyle|last2=Díaz|first2=Luis|last3=Ángel|first3=Fernando}} 0zop2s8catc1pt16y69njnd43xqs35c ຕ 0 419273 2568665 2026-10-05T14:37:39Z Lcsnes 40261 Trang mới: “{{also|ຕູ້|ຕໍ່|ຕໍ້|ຕີ}} {{minitoc}} ==Chữ Lào== {{character info}} ==={{ĐM|translit}}=== *{{Latn}}: '''[[t#Chữ_Latinh|t]]''' ==={{ĐM|desction}}=== {{mul-letter}} #Chữ Lào ''ta''. =={{langname|alk}}== ==={{ĐM|pron}}=== *{{IPA4|alk|[t]}} ==={{ĐM|letter}}=== {{head|alk|Chữ cái|tr=t}} #Chữ Lào biểu thị phụ âm '''{{IPAchar|/t/}}''' trong tiếng Alak. =={{langname|brb}}== {| class="floatright wikitable" style="text-align:center;…” 2568665 wikitext text/x-wiki {{also|ຕູ້|ຕໍ່|ຕໍ້|ຕີ}} {{minitoc}} ==Chữ Lào== {{character info}} ==={{ĐM|translit}}=== *{{Latn}}: '''[[t#Chữ_Latinh|t]]''' ==={{ĐM|desction}}=== {{mul-letter}} #Chữ Lào ''ta''. =={{langname|alk}}== ==={{ĐM|pron}}=== *{{IPA4|alk|[t]}} ==={{ĐM|letter}}=== {{head|alk|Chữ cái|tr=t}} #Chữ Lào biểu thị phụ âm '''{{IPAchar|/t/}}''' trong tiếng Alak. =={{langname|brb}}== {| class="floatright wikitable" style="text-align:center;" |- ! Khmer | [[ទ#Tiếng_Brâu|ទ]] |- ! Lào | {{pn}} |- |} ==={{ĐM|pron}}=== *{{IPA4|brb|[t]}} ==={{ĐM|letter}}=== {{head|brb|Chữ cái|tr=t}} #Chữ Lào biểu thị phụ âm '''{{IPAchar|/t/}}''' trong tiếng Brâu. #:{{quote|brb|'''ຕ'''າມຮິດຄອງຂອງເບົາແມປະໂຣຫິດ ໜໍເດົາຖຶກເລືອກອຳມຶ໋ນ'''ຕັ'''ງພະວິຫານຂອງອົງພະຜູ້ເປັນເຈົ້າ ແລະບູ໋ເຄືອງຮະອອ່ມຖວາຍ'''ຕຶ'''ງແທນບຸຊາ.|Khi đã bắt thăm theo lệ các thầy cả lập ra rồi, thì người được gọi vào nơi thánh của Chúa để dâng hương. ([[s:Lu-ca/1#1:9|Lu-ca 1:9]])}} ==={{ĐM|ref}}=== *{{Chú thích web|brb|author=Beyond Translation|entryurl=https://www.bible.com/bible/4347/LUK.1.BRB|entry=ລູກາ 1|work=ພຣະຄຳ ພສັກສັດ ລູະແວ|year=2026}} *{{Chú thích web|author=Lillian Leung|work=Brao – English Dictionary|entryurl=https://www.webonary.org/brao/en/browse/browse-vernacular/?key=brb-Khmr-KH&letter=%E1%9E%91|entry=ទ|year=2023|publisher=SIL International}} =={{langname|bru}}== {| class="floatright wikitable" style="text-align:center;" |- ! Latinh | [[T#Tiếng_Brâu|T]] [[t#Tiếng_Bru|t]] |- ! Lào | {{pn}} |- ! Thái | [[ต#Tiếng_Bru|ต]] |- |} ==={{ĐM|pron}}=== *{{IPA4|bru|[t]}} ==={{ĐM|letter}}=== {{head|bru|Chữ cái|tr=t}} #Chữ Lào biểu thị phụ âm '''{{IPAchar|/t/}}''' trong tiếng Bru. #:{{ux|bru|'''ຕ'''າອານ|tr='''t'''a-an|[[mạ]] [[non]]|inline=1}} ==={{ĐM|ref}}=== *{{Chú thích web|author=Carolyn P. & John D. Miller|work=Bru Dictionary|entryurl=https://www.webonary.org/bru/browse/browse-vernacular/?letter=t&key=bru-Latn-VN|entry=t|year=2017|publisher=SIL International}} =={{langname|brv}}== ==={{ĐM|pron}}=== *{{IPA4|brv|[t]}} ==={{ĐM|letter}}=== {{head|brv|Chữ cái|tr=t}} #Chữ Lào biểu thị phụ âm '''{{IPAchar|/t/}}''' trong tiếng Bru Tây. #:{{ux|brv|ເປໂ'''ຕ'''|tr=pe'''t'''ro|[[s:I Phi-e-rơ|Phi-e-rơ]]|inline=1}} ==={{ĐM|ref}}=== *{{Chú thích web|brv|author=Bru Bible PUBLISHER|entryurl=https://www.bible.com/bible/3528/1PE.1.BRU%20BIBLE|entry=1 เปโตร 1|work=บรูดงหลวง|year=2024}} =={{langname|kuf}}== ==={{ĐM|pron}}=== *{{IPA4|kuf|[t]}} ==={{ĐM|letter}}=== {{head|kuf|Chữ cái|tr=t}} #Phụ âm thứ 10 trong bảng chữ cái Lào tiếng Cơ Tu Tây. #:{{ux|kuf|'''ຕ'''າຮາ|tr='''t'''aha|[[con cả]]|inline=1}} ==={{ĐM|see}}=== *{{letters|lang=kuf|sc=Laoo|qual=Bảng chữ Lào tiếng Cơ Tu Tây|ກ|ຂ|ຄ|ງ|ຈ|ສ|ຊ|ຍ|ດ|ຕ|ຕ|ຖ|ທ|ນ|ບ|ປ|ຜ|ພ|ຝ|ມ|ຍ|ຣ|ລ|ວ|ອ|ຮ|ຽ}} =={{langname|jeh}}== ==={{ĐM|pron}}=== *{{IPA4|jeh|[t]}} ==={{ĐM|letter}}=== {{head|jeh|Chữ cái|tr=t}} #Chữ Lào biểu thị phụ âm '''{{IPAchar|/t/}}''' trong tiếng Giẻ. #:{{quote|jeh|ພະເຢໂອວາວ໊າໂລກມໍ໊ໄຢ ອັນໂດ໊ກອນອັນໂກ໊ເນົາ ອັນຫງາ'''ຕ'''າມຢີ໊ມັງອັນ(ກອນຄຼໍ) ແດ໊ຈິ໊ດ ອັນເຢງຊີວິດອະມະ'''ຕ'''ະ(ແທນ)|Vì Đức Chúa Trời yêu-thương thế-gian, đến nỗi đã ban Con một của Ngài, hầu cho hễ ai tin Con ấy không bị hư-mất mà được sự sống đời đời. ([[s:Giăng/3#3:16|Giăng 3:16]])}} =={{langname|lbo}}== ==={{ĐM|pron}}=== *{{IPA4|lbo|[t]}} ==={{ĐM|letter}}=== {{head|lbo|Chữ cái|tr=t}} #Chữ Lào biểu thị phụ âm '''{{IPAchar|/t/}}''' trong tiếng Jru'. #:{{ux|lbo|[[ຕວໍຍ໌ຄ#Tiếng_Jru'|'''ຕ'''ວໍຍ໌ຄ]]|tr='''t'''vɔyykh|[[nông]]|inline=1}} =={{langname|ncq}}== {| class="floatright wikitable" style="text-align:center;" |- ! Lào | {{pn}} |- ! Thái | [[ต#Tiếng_Katang_Bắc|ต]] |- |} ==={{ĐM|pron}}=== *{{IPA4|ncq|[t]}} ==={{ĐM|letter}}=== {{head|ncq|Chữ cái|tr=t}} #Chữ Lào biểu thị phụ âm '''{{IPAchar|/t/}}''' trong tiếng Katang Bắc. #:{{ux|ncq|'''ຕີ'''ໂ'''ຕ'''|tr='''tīt'''o|[[s:Tít|Tít]]|inline=1}} ==={{ĐM|ref}}=== *{{Chú thích web|ncq|author=Wycliffe Bible Translators, Inc.|entryurl=https://www.bible.com/bible/2075/TIT.1.%E0%BA%81%E0%BA%B2%E0%BA%95%E0%BA%B2%E0%BA%87|entry=ຕີໂຕ 1|work=ປັຣນາຍ ເຢືາງ ເຈົາຣາຊີ ປັຣຄັນ ຕາໄມ ປັຣນາຍ ກາຕາງ (ພາສາກາຕາງ)ປັຣນາຍ ເຢືາງ ເຈົາຣາຊີ ປັຣຄັນ ຕາໄມ ປັຣນາຍ ກາຕາງ (ພາສາກາຕາງ)|year=2023}} =={{langname|kjg}}== ==={{ĐM|pron}}=== *{{IPA4|kjg|/t/}} ==={{ĐM|letter}}=== {{head|kjg|Chữ cái|tr=t}} #Chữ cái thứ 14 trong bảng chữ cái Lào tiếng Khơ Mú. #:{{ux|kjg|[[ຕຣາກ#Tiếng_Khơ_Mú|'''ຕ'''ຣາກ]]|tr='''t'''raak|[[trâu]]|inline=1}} ==={{ĐM|see}}=== *{{list helper 2|title=Chữ Lào tiếng Khơ Mú|list={{l-self|kjg|ໞ}}, {{l-self|kjg|ກ}}, {{l-self|kjg|ຄ}}, {{l-self|kjg|ງ}}, {{l-self|kjg|ຫງ}}, {{l-self|kjg|ງ່}}, {{l-self|kjg|ຽ}}, {{l-self|kjg|ຈ}}, {{l-self|kjg|ຊ}}, {{l-self|kjg|ສ}}, {{l-self|kjg|ຍ}}/{{l-self|kjg|ໟ}}, {{l-self|kjg|ຫຍ}}, {{l-self|kjg|ດ}}, {{l-self|kjg|ຕ}}, {{l-self|kjg|ທ}}, {{l-self|kjg|ນ}}, {{l-self|kjg|ຫນ}}, {{l-self|kjg|ນ່}}, {{l-self|kjg|ບ}}, {{l-self|kjg|ປ}}, {{l-self|kjg|ພ}}, {{l-self|kjg|ຟ}}, {{l-self|kjg|ມ}}, {{l-self|kjg|ຫມ}}, {{l-self|kjg|ມ່}}, {{l-self|kjg|ຢ}}, {{l-self|kjg|ຫຢ}}, {{l-self|kjg|ຢ່}}, {{l-self|kjg|ຮ}}, {{l-self|kjg|ຫຮ}}, {{l-self|kjg|ລ}}, {{l-self|kjg|ຫລ}}, {{l-self|kjg|ວ}}, {{l-self|kjg|ຫວ}}, {{l-self|kjg|ວ່}}, {{l-self|kjg|ຫ}}, {{l-self|kjg|ອ}}}} =={{langname|kdt}}== {| class="floatright wikitable" style="text-align:center;" |- ! Thái | [[ต#Tiếng_Kuy|ต]] |- ! Khmer | [[ទ#Tiếng_Kuy|ទ]] |- ! Lào | {{pn}} |- |} ==={{ĐM|pron}}=== *{{IPA4|kdt|[t]}} ==={{ĐM|letter}}=== {{head|kdt|Chữ cái|tr=t}} #Chữ cái thứ 9 trong bảng chữ cái Lào tiếng Kuy. #:{{ux|kdt|'''ຕ'''ະຜັດ|tr={{l|kdt|'''ต'''ะผัด}}|[[sáu]]|inline=1}} ==={{ĐM|see}}=== *{{letters|lang=kdt|sc=Laoo|qual=Bảng chữ Lào tiếng Kuy|ກ|ຂ|ງ|ຈ|ສ|ຊ|ຍ|ດ|ຕ|ຖ|ນ|ບ|ປ|ຜ|ຝ|ມ|ຢ|ຣ|ລ|ວ|ອ|ຫ}} =={{langname|lbn}}== ==={{ĐM|pron}}=== *{{IPA4|lbn|/t/}} ==={{ĐM|letter}}=== {{head|lbn|Chữ cái|tr=t}} #Chữ Lào biểu thị phụ âm '''{{IPAchar|/t/}}''' trong tiếng Lamet. =={{langname|lo}}== ==={{ĐM|pron}}=== *{{IPA4|lo|/t/}} ==={{ĐM|letter}}=== {{head|lo|Chữ cái|tr=t}} #Phụ âm thứ 10 trong bảng chữ cái Lào. #:{{ux|lo|[[ຕາ#Tiếng_Lào|'''ຕ'''າ]]|[[mắt]]|inline=1}} ==={{ĐM|see}}=== *{{letters|lang=lo|sc=Laoo|qual=Bảng chữ cái Lào|ກ|ຂ|ຄ|ງ|ຈ|ສ|ຊ|ຍ|ດ|ຕ|ຖ|ທ|ນ|ບ|ປ|ຜ|ຝ|ພ|ຟ|ມ|ຢ|ຣ|ລ|ວ|ຫ|ອ|ຮ}} ==={{ĐM|ref}}=== *{{Chú thích sách|author=Bs. Trần Kim Lân|title=Từ điển Lào - Việt|year=2009|publisher=Nhà xuất bản Tổng hợp Thành phố Hồ Chí Minh|page=460}} =={{langname|ngt}}== ==={{ĐM|pron}}=== *{{IPA4|ngt|[t]}} ==={{ĐM|letter}}=== {{head|ngt|Chữ cái}} #Chữ cái thứ 8 trong bảng chữ cái Lào tiếng Ngeq. #:{{quote|ngt|ເຢີ່ເຊກາຣີຢາເບ່ນ'''ຕ'''າມຸ່ຮເທວະດາໃກເຢີ່ ອໍລາຊາ'''ຕົ່'''ຮລອມຫແ'''ຕ'''ຢັຮອໍຢຸທຳມາດ.|Xa-cha-ri thấy, thì bối-rối sợ-hãi. ([[s:Lu-ca/1#1:12|Lu-ca 1:12]])}} ==={{ĐM|see}}=== *{{letters|lang=ngt|sc=Laoo|qual=Bảng chữ Lào tiếng Ngeq|ກ|ຄ|ງ|ຈ|ຊ|ຍ|ດ|ຕ|ທ|ນ|ບ|ປ|ມ|ຢ|ຣ|ລ|ວ|ອ|ຮ}} ==={{ĐM|ref}}=== *{{Chú thích web|ngt|author=Beyond Translation|entryurl=https://www.bible.com/bible/4299/LUK.1.NGT|entry=ລູກາ 1|work=ປຶມປັຣນຽລອາຕຽງຫແຕ ກຣຽງ|year=2026}} =={{langname|nyl}}== {| class="floatright wikitable" style="text-align:center;" |- ! Thái | [[ต#Tiếng_Nyeu|ต]] |- ! Khmer | [[ទ#Tiếng_Nyeu|ទ]] |- ! Lào | {{pn}} |- |} ==={{ĐM|pron}}=== *{{IPA4|nyl|[t]}} ==={{ĐM|letter}}=== {{head|nyl|Chữ cái|tr=t}} #Chữ cái thứ 9 trong bảng chữ cái Lào tiếng Nyeu. #:{{ux|nyl|ຍອນ ຈູດ ອຶນສິຈ ຜາຮ໌ ຮັບ ຫວົວ ຫລຶງ ເຊາະ ອູດ ແອ ກແບຮ໌ ໝານ '''ຕັ'''ນ ອຶງແກງ ໜາວ ຈາ ອເ'''ຕ'''ຣ ຫນະ ເດຍະຄີນ|tr=yon chūt ʉn-sich phā hāp hua lʉng sao ū'''t''' ae kbae mān '''t'''an ʉng-kaeng nao ca a-tre hana dia-khīn|Đầu Tin-lành của Đức Chúa Jêsus - Christ, là Con Đức Chúa Trời. ([[s:Mác/1#1:1|Mác 1:1]])}} ==={{ĐM|see}}=== *{{letters|lang=nyl|sc=Laoo|qual=Bảng chữ Lào tiếng Nyeu|ກ|ຂ|ງ|ຈ|ສ|ຊ|ຍ|ດ|ຕ|ຖ|ນ|ບ|ປ|ຜ|ຝ|ມ|ຢ|ຣ|ລ|ວ|ອ|ຫ}} ==={{ĐM|ref}}=== *{{Chú thích web|nyl|author=Son Light Foundation|entryurl=https://www.bible.com/bible/4616/MRK.1.MRKNYL|entry=มาระโก-Mark 1|work=หนังสือมาระโกในภาษา - Mark in Nyeu Kuy Language|year=2025}} =={{langname|pi}}== ==={{ĐM|alt sc}}=== {{pi-alt|Latn=ta|Laoo=ຕ|Laoo2=ຕະ}} {{pi-alt|Latn=sa|Laoo=ສ|Laoo2=ສະ}} ==={{ĐM|pron}}=== *{{IPA4|pi|[tɐ]}} ==={{ĐM|letter}}=== {{head|pi|Chữ cái}} #Chữ Lào biểu thị phụ âm '''{{IPAchar|/t/}}''' trong tiếng Pali. #:{{ux|pi|'''ຕຕ຺'''ວສ຺ສ|[[vậy thì]]|inline=1}} ===={{ĐM|see}}==== *{{letters|lang=pi|sc=Laoo|qual=Chữ Lào tiếng Pali|ກ|ຂ|ຄ|ຆ|ງ|ຈ|ຉ|ຊ|ຌ|ຎ|ຏ|ຐ|ຑ|ຒ|ຓ|ດ|ຖ|ທ|ຘ|ນ|ບ|ຜ|ພ|ຠ|ມ|ຍ|ຣ|ລ|ວ|ສ|ຫ|ຬ|ອ}} ==={{ĐM|adj}}=== {{pi-adj}} #{{lb|pi|demonstrative}} {{pi-sc|Laoo|ta}} ("đó") ===={{ĐM|usage}}==== Dạng cách {{m|pi|ຕທ຺}} chỉ dùng trước nguyên âm như dạng kết hợp tiền tố. Trước nguyên âm, dấu virama và chữ o (ອ) bị lược bỏ. ===={{ĐM|decl}}==== {{pi-decl-noun|g=m |novoc=true |noms_mod=replace|noms=ໂສ|noms2=ສ |nomp_mod=replace|nomp=ເຕ |dats_mod=replace|dats=ຕສ຺ສ |abls_mod=replace|abls=ຕສ຺ມາ|abls2=ຕມ຺ຫາ|abls3=ຕໂຕ |locs_mod=replace|locs=ຕສ຺ມິໍ|locs2=ຕມ຺ຫິ |datp_mod=replace|datp=ເຕສໍ|datp2=ເຕສານໍ |genp_mod=replace|genp=ເຕສໍ|genp2=ເຕສານໍ }} {{pi-decl-noun|ຕາ|g=f|impl=yes|y=yung |novoc=true |noms_mod=replace|noms=ສາ |dats2=ຕສ຺ສາ|dats3=ຕິສ຺ສາ|dats4=ຕິສ຺ສາຍ |gens2=ຕສ຺ສາ|gens3=ຕິສ຺ສາ|gens4=ຕິສ຺ສາຍ |locs=ຕິສສໍ |nomp_mod=replace|nomp=ຕາ |accp_mod=replace|accp=ຕາ |datp_mod=replace|datp=ຕາສໍ|datp2=ຕາສານໍ |genp_mod=replace|genp=ຕາສໍ|genp2=ຕາສານໍ }} {{pi-decl-noun|g=n |novoc=true |noms=ຕທ຺|accs=ຕທ຺ |dats_mod=replace|dats=ຕສ຺ສ |abls_mod=replace|abls=ຕສ຺ມາ|abls2=ຕມ຺ຫາ|abls3=ຕໂຕ |locs_mod=replace|locs=ຕສ຺ມິໍ|locs2=ຕມ຺ຫິ |datp_mod=replace|datp=ເຕສໍ|datp2=ເຕສານໍ |genp_mod=replace|genp=ເຕສໍ|genp2=ເຕສານໍ }} ==={{ĐM|pronoun}}=== {{pi-pronoun|m}} #{{pi-sc|Laoo|ta}} ("nó, hắn") ===={{ĐM|decl}}==== Như phần giống đực của tính từ. ==={{ĐM|pronoun}}=== {{pi-pronoun|n}} #{{pi-sc|Laoo|ta}} ("nó") ===={{ĐM|decl}}==== Như phần giống trung của tính từ. =={{langname|sa}}== ==={{ĐM|alt sc}}=== {{sa-alt}} ==={{ĐM|pron}}=== {{san-IPA|त}} ==={{ĐM|letter}}=== {{head|sa|Chữ cái}} #Chữ Lào biểu thị phụ âm '''{{IPAchar|/t/}}''' trong tiếng Phạn. #:{{ux|sa|'''ຕາ'''ມຣ|tr={{l|sa|'''ता'''म्र}}|[[màu]] [[đồng]] [[đỏ]]|inline=1}} =={{langname|phu}}== ==={{ĐM|pron}}=== *{{IPA4|phu|/t/}} ==={{ĐM|letter}}=== {{head|phu|Chữ cái|tr=t}} #Chữ Lào biểu thị phụ âm '''{{IPAchar|/t/}}''' trong tiếng Phuan. =={{langname|pho}}== ==={{ĐM|pron}}=== *{{IPA4|pho|/t/}} ==={{ĐM|letter}}=== {{head|pho|Chữ cái|tr=t}} #Chữ Lào biểu thị phụ âm '''{{IPAchar|/t/}}''' trong tiếng Phunoi. #:{{quote|pho|'''ຕ'''າມທີ່ຂຽນເນ່ຊີ້ຫີ້ກົດລະບຽບອົງພຣະຜູ້ເປັນເຈົ້າເງ່ເລ່, “ອັ່ງຢາກະພາຢາຜູ້ກົກຊາງທຸກຄົນເງ່ເລ່ລ່າເນ່ຖວາຍເນ່ຫ່າລ່າ'''ຕ໋'''ະອົງພຣະຜູ້ເປັນເຈົ້ານະ.|như đã chép trong luật-pháp Chúa rằng: Hễ con trai đầu lòng, phải dâng cho Chúa, ([[s:Lu-ca/2#2:23|Lu-ca 2:23]])}} ==={{ĐM|ref}}=== *{{Chú thích web|pho|author=Beyond Translation|entryurl=https://www.bible.com/bible/4301/LUK.2.PHOXG|entry=ລູກາ 2|work=ພຣະຄຳພີສັກສິດ ລາວແຊງ|year=2026}} =={{langname|sss}}== {| class="floatright wikitable" style="text-align:center;" |- ! Thái | [[ต#Tiếng_Sô|ต]] |- ! Lào | {{pn}} |- |} ==={{ĐM|pron}}=== *{{IPA4|sss|[t]}} ==={{ĐM|letter}}=== {{head|sss|Chữ cái|tr=t}} #Chữ Lào biểu thị phụ âm '''{{IPAchar|/t/}}''' trong tiếng Sô. #:{{ux|sss|'''ຕ'''ຣີ່ຍາ|tr={{l|sss|'''ต'''รี่ยา}}|[[chú ý]]|inline=1}} ==={{ĐM|ref}}=== *{{Chú thích sách|title=[https://www.sil.org/system/files/reapdata/12/57/63/125763908745234132077506545408739357015/Trilingual_Picture_Dictionary.pdf Trilingual Picture Dictionary So - English - Thai (พจนานุกรมรูปภาพ สามภาษา -- โส้ -- อังกฤษ -- ไทย)]|year=2007|publisher=Payap University and SIL International, Applied Linguistics Training Program|location=Chiang Mai}} =={{langname|tto}}== ==={{ĐM|pron}}=== *{{IPA4|tto|[t]}} ==={{ĐM|letter}}=== {{head|tto|Chữ cái|tr=t}} #Chữ cái thứ 8 trong bảng chữ cái Lào tiếng Tà Ôi Hạ. #:{{ux|tto|'''ຕ'''າໂອ້ຍອ໌‎|tr='''T'''aa’Ooi’|Tà Ôi|inline=1}} ==={{ĐM|see}}=== *{{letters|lang=tto|sc=Laoo|qual=Bảng chữ Lào tiếng Tà Ôi|ກ|ຄ|ງ|ຈ|ຊ|ຍ|ດ|ຕ|ທ|ນ|ບ|ປ|ມ|ຢ|ຣ|ລ|ວ|ອ|ຮ}} =={{langname|ium}}== {| class="floatright wikitable" style="text-align:center;" |- ! Latinh | {{l|ium|Z}} {{l|ium|z}} |- ! Thái | {{l|ium|ต}} |- ! Lào | {{pn}} |- |} ==={{ĐM|pron}}=== *{{IPA4|ium|[z]}} ==={{ĐM|letter}}=== {{head|ium|Chữ cái|tr=z}} #Chữ Lào biểu thị phụ âm '''{{IPAchar|/z/}}''' trong tiếng Ưu Miền. #:{{ux|ium|ກ໊ອງ ເສີຍ '''ຕ'''ສັ່ງ|tr=Gorngv Seix '''Z'''aangc|[[s:Truyền đạo|Truyền đạo]]|inline=1}} ==={{ĐM|ref}}=== *{{Chú thích web|ium|author=Thailand Bible Society|entryurl=https://www.bible.com/bible/246/ECC.1.IUMILAO|entry=ກ໊ອງ ເສີຍ ຕສັ່ງ 1|work=ฉบับอักษรลาว|year=2007}} *{{Chú thích web|ium|author=Thailand Bible Society|entryurl=https://www.bible.com/bible/233/ECC.1.IUMINR|entry=Gorngv Seix Zaangc 1|work=Iu-Mien New|year=2007}} [[Thể loại:Khối ký tự Lao|95]] 4yqhbjchmqvwnfslmeady59ubv1lncd truces 0 419274 2568671 2026-10-05T15:20:15Z Hiyuune 50834 + en, la 2568671 wikitext text/x-wiki =={{langname|en}}== ==={{section|n}}=== {{head|en|Biến thể hình thái danh từ}} # {{plural of|en|truce}} ==={{section|v}}=== {{head|en|Biến thể hình thái động từ}} # {{infl of|en|truce||s-verb-form}} ==={{section|ana}}=== * {{anagrams|en|a=cerstu|Crutes|Curets|Custer|cruets|cruset|curest|curets|eructs|rectus|recuts}} =={{langname|la}}== ==={{section|adj}}=== {{head|la|Biến thể hình thái tính từ|head=trucēs}} # {{inflection of|la|trux||nom//acc//voc|m//f|p}} p73xtfsp5qbv0fva6q5bmk1d527l8os trucing 0 419275 2568672 2026-10-05T15:21:36Z Hiyuune 50834 + en 2568672 wikitext text/x-wiki =={{langname|en}}== ==={{section|v}}=== {{head|en|Biến thể hình thái động từ}} # {{infl of|en|truce||ing-form}} cbp4ut3yl85meqzda1k33h6x5yvpta8 truced 0 419276 2568673 2026-10-05T15:22:44Z Hiyuune 50834 + en 2568673 wikitext text/x-wiki =={{langname|en}}== ==={{section|v}}=== {{head|en|Biến thể hình thái động từ}} # {{infl of|en|truce||ed-form}} kq4sf5bsfh6mnomqlrl8lz4kt6fi0py desperas 0 419277 2568675 2026-10-05T15:26:05Z Hiyuune 50834 + la, es 2568675 wikitext text/x-wiki =={{langname|la}}== ==={{section|v}}=== {{head|la|Biến thể hình thái động từ|head=dēspērās}} # {{inflection of|la|dēspērō||indc|pres|actv|ở|2|s}} =={{langname|es}}== ==={{section|v}}=== {{head|es|Biến thể hình thái động từ}} # {{es-verb form of|desperar}} 9m0mkqn22y921amikl2xieyuq9vxh0w Bản mẫu:mk-proper noun 10 419278 2568678 2026-10-05T15:33:52Z Hiyuune 50834 Trang mới: “{{#invoke:mk-headword|show|Danh từ riêng}}<noinclude>{{documentation}}</noinclude>” 2568678 wikitext text/x-wiki {{#invoke:mk-headword|show|Danh từ riêng}}<noinclude>{{documentation}}</noinclude> 85gtqlpdb6si97mb6sbffsi2rb8h5po Bản mẫu:ba-proper noun 10 419279 2568679 2026-10-05T15:35:00Z Hiyuune 50834 Trang mới: “{{#invoke:checkparams|warn}}<!-- Validate template parameters -->{{head|ba|Danh từ riêng}}<noinclude> {{documentation}} </noinclude>” 2568679 wikitext text/x-wiki {{#invoke:checkparams|warn}}<!-- Validate template parameters -->{{head|ba|Danh từ riêng}}<noinclude> {{documentation}} </noinclude> 3uy7haokxaqgrsostabedz45wfnat72 Thể loại:Danh từ riêng tiếng Toki Pona 14 419280 2568695 2026-10-05T16:20:38Z Hiyuune 50834 Trang mới: “{{auto cat}}” 2568695 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Thể loại:Danh từ tiếng Toki Pona 14 419281 2568696 2026-10-05T16:21:09Z Hiyuune 50834 Trang mới: “{{auto cat}}” 2568696 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Thể loại:Tiếng Toki Pona 14 419282 2568697 2026-10-05T16:22:40Z Hiyuune 50834 Trang mới: “{{auto cat}}” 2568697 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Phụ lục:Tiếng Toki Pona/ma Ajasan 100 419283 2568698 2026-10-05T16:56:35Z Hiyuune 50834 Trang mới: “=={{langname|tok}}== {{wp|tok:}} ==={{section|etym}}=== {{ety|tok|:der|hy:Հայաստան|text=1|tree=1}} ==={{section|pron}}=== {{head|tok|Danh từ riêng}} # {{place|tok|quốc gia|r/Tây Á|t1=Armenia}}. ===={{section|syn}}==== {{col|tok |ma Aja }}” 2568698 wikitext text/x-wiki =={{langname|tok}}== {{wp|tok:}} ==={{section|etym}}=== {{ety|tok|:der|hy:Հայաստան|text=1|tree=1}} ==={{section|pron}}=== {{head|tok|Danh từ riêng}} # {{place|tok|quốc gia|r/Tây Á|t1=Armenia}}. ===={{section|syn}}==== {{col|tok |ma Aja }} 8jeawvei78g5d2mmi7lkafihh4hh9gb 2568699 2568698 2026-10-05T16:56:52Z Hiyuune 50834 /* Cách phát âm */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]) 2568699 wikitext text/x-wiki =={{langname|tok}}== {{wp|tok:}} ==={{section|etym}}=== {{ety|tok|:der|hy:Հայաստան|text=1|tree=1}} ==={{section|pr-noun}}=== {{head|tok|Danh từ riêng}} # {{place|tok|quốc gia|r/Tây Á|t1=Armenia}}. ===={{section|syn}}==== {{col|tok |ma Aja }} opimq5gmfqq8xmlujfiacex5ap65jd9 𰌦 0 419284 2568700 2026-10-05T16:58:32Z Hiyuune 50834 Trang mới: “{{character info}} =={{langname|mul}}== ==={{ĐM|han}}=== {{Han char|rn=39|rad=子|as=6|sn=9|four=|canj=|ids=⿰子亚}} ===={{ĐM|further}}==== {{Han ref|uh=30326}} =={{langname|zh}}== {{zh-see|孲}}” 2568700 wikitext text/x-wiki {{character info}} =={{langname|mul}}== ==={{ĐM|han}}=== {{Han char|rn=39|rad=子|as=6|sn=9|four=|canj=|ids=⿰子亚}} ===={{ĐM|further}}==== {{Han ref|uh=30326}} =={{langname|zh}}== {{zh-see|孲}} kmjjf00ruabatxx11p615u2d9hwcdz7 啞 0 419285 2568701 2026-10-05T16:59:35Z Hiyuune 50834 Trang mới: “{{also|唖|哑}} {{character info}} =={{langname|mul}}== {{Han simplified forms|啞|唖|哑|ex=y}} ==={{ĐM|han}}=== {{Han char|rn=30|rad=口|as=08|sn=11|four=61017|canj=RMLM|ids=⿰口亞}} ==={{ĐM|ref}}=== * {{Han ref|kx=0196.150|dkj=03835|dj=0417.240|hdz=10636.070|uh=555E}} =={{langname|ja}}== {{ja-kanji forms|唖|啞|ex=y}} ==={{ĐM|kanji}}=== {{ja-kanji|grade=9|rs=口08|shin=唖}} # {{ja-kyujitai spelling of|唖}} ===={{ĐM|reading}}==== {{ja-readings |goon=…” 2568701 wikitext text/x-wiki {{also|唖|哑}} {{character info}} =={{langname|mul}}== {{Han simplified forms|啞|唖|哑|ex=y}} ==={{ĐM|han}}=== {{Han char|rn=30|rad=口|as=08|sn=11|four=61017|canj=RMLM|ids=⿰口亞}} ==={{ĐM|ref}}=== * {{Han ref|kx=0196.150|dkj=03835|dj=0417.240|hdz=10636.070|uh=555E}} =={{langname|ja}}== {{ja-kanji forms|唖|啞|ex=y}} ==={{ĐM|kanji}}=== {{ja-kanji|grade=9|rs=口08|shin=唖}} # {{ja-kyujitai spelling of|唖}} ===={{ĐM|reading}}==== {{ja-readings |goon=え, やく |kanon=あ, あく |kun=おし- }} ==={{ĐM|dfn}}=== {{ja-gv|唖}} pd7cf08qnubmqvs9lun8g7eq8fmk1a0 𠮩 0 419286 2568702 2026-10-05T17:04:10Z Hiyuune 50834 Trang mới: “{{character info}} =={{langname|mul}}== ==={{ĐM|han}}=== {{Han char|rn=30|rad=口|as=2|sn=5|four=|canj=RNN|ids=⿰口了}} ===={{ĐM|ref}}==== {{Han ref|kx=174.091|uh=20BA9}} =={{langname|vi}}== ==={{ĐM|glyph origin}}=== {{Han compound|lang=vi|ls=psc|口|了|t1=[[miệng]]|c1=s|c2=p|tr2={{vi-l|liễu}}}}. ==={{ĐM|han}}=== {{vi-readings |rs=口02 |nom=líu-tdcndg;tdcntd;gdhn;takeuchi;btcn;genibrel;taberd, léo-tdcndg;gdhn;takeuchi;btcn;genibrel;taberd;bonet, lịu-…” 2568702 wikitext text/x-wiki {{character info}} =={{langname|mul}}== ==={{ĐM|han}}=== {{Han char|rn=30|rad=口|as=2|sn=5|four=|canj=RNN|ids=⿰口了}} ===={{ĐM|ref}}==== {{Han ref|kx=174.091|uh=20BA9}} =={{langname|vi}}== ==={{ĐM|glyph origin}}=== {{Han compound|lang=vi|ls=psc|口|了|t1=[[miệng]]|c1=s|c2=p|tr2={{vi-l|liễu}}}}. ==={{ĐM|han}}=== {{vi-readings |rs=口02 |nom=líu-tdcndg;tdcntd;gdhn;takeuchi;btcn;genibrel;taberd, léo-tdcndg;gdhn;takeuchi;btcn;genibrel;taberd;bonet, lịu-tdcndg;takeuchi;btcn;genibrel;taberd, lếu-tdcndg;takeuchi;btcn, trếu-takeuchi;genibrel;taberd, lẻo-tdcndg;tdcntd, nếu-tdcndg;gdhn, réo-gdhn;btcn, làu-tdcndg, lểu-tdcndg, ríu-gdhn }} # {{vi-Nom form of|làu}} # {{vi-Nom form of|léo}} # {{vi-Nom form of|lẻo}} # {{vi-Nom form of|lếu|{{ng|dùng trong {{m|vi|lếu láo}}}}}} # {{vi-Nom form of|líu|{{ng|dùng trong {{m|vi|líu lo}}}}}} # {{vi-Nom form of|nếu}} ===={{ĐM|com}}==== {{col3|vi |{{vi-l|窖𠮩|khéo léo}} |{{vi-l|凌𠮩|lăng líu}} |{{vi-l|𠮩咾|lếu láo}} |{{vi-l|𠮩𠰷|líu lo}} }} ==={{ĐM|ref}}=== {{reflist}} =={{langname|za}}== ==={{ĐM|num}}=== {{za-head|numeral}} # {{za-sawndip form of|ndeu}} =={{langname|zh}}== {{zh-forms}} ==={{ĐM|etym}} 1=== {{zh-pron |c=aa1 |cat=intj }} ===={{ĐM|dfn}}==== {{head|zh|hanzi}} # {{lb|zh|Cantonese}} {{alt form|zh|吖|tr=-}} ==={{ĐM|etym}} 2=== {{zh-pron |c=liu1 |cat= }} ===={{ĐM|dfn}}==== {{head|zh|hanzi}} # {{lb|zh|Cantonese}} {{zh-only|𠮩𠹌|không [[phổ biến]]; [[hiếm]]}} ==={{ĐM|etym}} 3=== {{zh-see|嘹|ss}} bvcpxc8swtdlpz8amq2akvm9ckgyjxs aa4 0 419287 2568703 2026-10-05T17:04:43Z Hiyuune 50834 Trang mới: “=={{langname|yue}}== ==={{ĐM|pron}}=== {{Jyutping-IPA|aa4}} ==={{ĐM|rom}}=== {{yue-jyut}} # {{yue-jyutping of|啊}} # {{yue-jyutping of|笌}} # {{yue-jyutping of|釾}}” 2568703 wikitext text/x-wiki =={{langname|yue}}== ==={{ĐM|pron}}=== {{Jyutping-IPA|aa4}} ==={{ĐM|rom}}=== {{yue-jyut}} # {{yue-jyutping of|啊}} # {{yue-jyutping of|笌}} # {{yue-jyutping of|釾}} gf18ml6nk5mm7a5p0kypi3fhsmj87d9 aa5 0 419288 2568705 2026-10-05T23:16:16Z Hiyuune 50834 Trang mới: “=={{langname|yue}}== ==={{ĐM|pron}}=== {{Jyutping-IPA|aa5}} ==={{ĐM|rom}}=== {{yue-jyut}} # {{yue-jyutping of|咓}} # {{yue-jyutping of|𤴓}}” 2568705 wikitext text/x-wiki =={{langname|yue}}== ==={{ĐM|pron}}=== {{Jyutping-IPA|aa5}} ==={{ĐM|rom}}=== {{yue-jyut}} # {{yue-jyutping of|咓}} # {{yue-jyutping of|𤴓}} 3qwam4sh7gx1jrchv4wc3ekzbhg9w9o 咓 0 419289 2568706 2026-10-05T23:16:55Z Hiyuune 50834 Trang mới: “{{character info}} =={{langname|mul}}== ==={{ĐM|han}}=== {{Han char|rn=30|rad=口|as=05|sn=8|four=|canj=RMVN|ids=⿰口瓦}} ===={{ĐM|ref}}==== * {{Han ref|kx=0185.211|dkj=03511|hdz=10588.060|uh=5493}}” 2568706 wikitext text/x-wiki {{character info}} =={{langname|mul}}== ==={{ĐM|han}}=== {{Han char|rn=30|rad=口|as=05|sn=8|four=|canj=RMVN|ids=⿰口瓦}} ===={{ĐM|ref}}==== * {{Han ref|kx=0185.211|dkj=03511|hdz=10588.060|uh=5493}} oic1t0jidqiyrwwf5c1ncsk75mzti3p 𮧒 0 419290 2568707 2026-10-05T23:18:39Z Hiyuune 50834 Trang mới: “{{character info}} =={{langname|mul}}== ==={{section|han}}=== {{Han char|rn=176|rad=面|as=12|sn=|four=|canj=|ids=⿱⿰𠤕𤴓面}} ===={{section|further}}==== * {{Han ref|kx=|dkj=|dj=|hdz=|uh=2E9D2}} =={{langname|zh}}== {{zh-see|一|v}}” 2568707 wikitext text/x-wiki {{character info}} =={{langname|mul}}== ==={{section|han}}=== {{Han char|rn=176|rad=面|as=12|sn=|four=|canj=|ids=⿱⿰𠤕𤴓面}} ===={{section|further}}==== * {{Han ref|kx=|dkj=|dj=|hdz=|uh=2E9D2}} =={{langname|zh}}== {{zh-see|一|v}} psag2o6jcwatx1pe2xeftnbi9amqpfr clyferfete 0 419291 2568708 2026-10-05T23:19:26Z Hiyuune 50834 + ang 2568708 wikitext text/x-wiki =={{langname|ang}}== ==={{ĐM|adj}}=== {{ang-adj|clyferfēte}} # {{alt sp|ang|cliferfēte}} ==={{ĐM|ref}}=== * {{R:ang:BT|clyfer-féte|ref=6392}} jp4nmtwnmjylkoy0ia1xwe1e3v7krpg 哑 0 419292 2568709 2026-10-05T23:20:47Z Hiyuune 50834 Trang mới: “{{also|啞}} {{character info}} =={{langname|mul}}== {{Han simplified forms|啞|唖|哑|ex=y}} ==={{section|han}}=== {{Han char|rn=30|rad=口|as=06|sn=9|four=|canj=RMTC|ids=⿰口亚}} ===={{section|ref}}==== * {{Han ref|kx=0189.271|hdz=10613.010|uh=54D1}} =={{langname|zh}}== {{zh-see|啞}}” 2568709 wikitext text/x-wiki {{also|啞}} {{character info}} =={{langname|mul}}== {{Han simplified forms|啞|唖|哑|ex=y}} ==={{section|han}}=== {{Han char|rn=30|rad=口|as=06|sn=9|four=|canj=RMTC|ids=⿰口亚}} ===={{section|ref}}==== * {{Han ref|kx=0189.271|hdz=10613.010|uh=54D1}} =={{langname|zh}}== {{zh-see|啞}} 6txtcyjhwjgkgcdfs3bou735iwj9bnv 孲 0 419293 2568710 2026-10-05T23:21:29Z Hiyuune 50834 Trang mới: “{{character info}} =={{langname|mul}}== ==={{ĐM|han}}=== {{Han char|rn=39|rad=子|as=08|sn=11|four=11417|canj=NDMLM|ids=⿰子亞}} ===={{ĐM|ref}}==== * {{Han ref|kx=0280.110|dkj=06996|dj=0549.040|hdz=21016.110|uh=5B72}}” 2568710 wikitext text/x-wiki {{character info}} =={{langname|mul}}== ==={{ĐM|han}}=== {{Han char|rn=39|rad=子|as=08|sn=11|four=11417|canj=NDMLM|ids=⿰子亞}} ===={{ĐM|ref}}==== * {{Han ref|kx=0280.110|dkj=06996|dj=0549.040|hdz=21016.110|uh=5B72}} 3n38pb94gbef628m8nyh1g60hr0u49p 𰺞 0 419294 2568712 2026-10-05T23:23:12Z Hiyuune 50834 Trang mới: “{{character info}} =={{langname|mul}}== ==={{ĐM|han}}=== {{Han char|rn=159|rad=车|as=12|sn=16|four=|canj=|ids=⿰车孱}} ===={{ĐM|ref}}==== {{Han ref|uh=30E9E}} {{-}} =={{langname|zh}}== {{zh-see|轏}}” 2568712 wikitext text/x-wiki {{character info}} =={{langname|mul}}== ==={{ĐM|han}}=== {{Han char|rn=159|rad=车|as=12|sn=16|four=|canj=|ids=⿰车孱}} ===={{ĐM|ref}}==== {{Han ref|uh=30E9E}} {{-}} =={{langname|zh}}== {{zh-see|轏}} hj4wvmkxy8ajtrrnylsly1lyq5kjgay Mô đun:pa-Arab-translit 828 419295 2568715 2026-10-06T01:06:36Z Hiyuune 50834 Hiyuune đã đổi [[Mô đun:pa-Arab-translit]] thành [[Mô đun:pa-Aran-translit]] 2568715 Scribunto text/plain return require [[Mô đun:pa-Aran-translit]] bkrjspo1yydfsm1l2moam8keqxxysek knowlegynge 0 419296 2568727 2026-10-06T01:28:05Z Hiyuune 50834 Trang mới: “=={{langname|enm}}== ==={{section|n}}=== {{head|enm|Danh từ|var=1}} # {{lb|enm|late}} {{alt form|enm|knowelechynge|pos=danh động từ|id=danh động từ}}” 2568727 wikitext text/x-wiki =={{langname|enm}}== ==={{section|n}}=== {{head|enm|Danh từ|var=1}} # {{lb|enm|late}} {{alt form|enm|knowelechynge|pos=danh động từ|id=danh động từ}} t1b6m6jbdbscqu92xfcluoxz1948q0u Thể loại:Biến thể tiếng Anh trung đại 14 419297 2568728 2026-10-06T01:28:47Z Hiyuune 50834 Trang mới: “{{auto cat}}” 2568728 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Thể loại:Ngoại động từ tiếng Ireland 14 419298 2568730 2026-10-06T01:30:20Z Hiyuune 50834 Trang mới: “{{auto cat}}” 2568730 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx galaigh 0 419299 2568731 2026-10-06T01:32:22Z Hiyuune 50834 Trang mới: “=={{langname|ga}}== ==={{section|v}}=== {{ga-verb|pres=-aíonn|fut=-óidh|vn=-ú|pp=-aithe}} {{lb|ga|ambitransitive}} # Làm cho [[bay hơi]]. # [[bốc hơi|Bốc hơi]], lên hơi. ===={{section|forms}}==== {{ga-conj-2|g|al|q=broad|stem=alaigh}} ==={{section|mut}}=== {{ga-mut}} ==={{section|further}}=== * {{R:ga:Ó Dónaill}} * {{R:ga:tearma.ie}} * {{R:ga:NEID}}” 2568731 wikitext text/x-wiki =={{langname|ga}}== ==={{section|v}}=== {{ga-verb|pres=-aíonn|fut=-óidh|vn=-ú|pp=-aithe}} {{lb|ga|ambitransitive}} # Làm cho [[bay hơi]]. # [[bốc hơi|Bốc hơi]], lên hơi. ===={{section|forms}}==== {{ga-conj-2|g|al|q=broad|stem=alaigh}} ==={{section|mut}}=== {{ga-mut}} ==={{section|further}}=== * {{R:ga:Ó Dónaill}} * {{R:ga:tearma.ie}} * {{R:ga:NEID}} nwjtt7dwi8nawko9hyrr3re049ygec6 Thể loại:Nội động từ tiếng Ireland 14 419300 2568732 2026-10-06T01:32:44Z Hiyuune 50834 Trang mới: “{{auto cat}}” 2568732 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx caolaigh 0 419301 2568733 2026-10-06T01:34:58Z Hiyuune 50834 Trang mới: “=={{langname|ga}}== ==={{section|etym}}=== {{rfe|ga}} ==={{section|v}}=== {{ga-verb|pres=-aíonn|fut=-óidh|vn=-ú|pp=-aithe}} # {{lb|ga|ergative}} Làm [[mỏng]] đi, làm [[mảnh]] đi, làm [[gầy]] đi. # {{lb|ga|ergative|phonology|phonetics}} Làm [[vòm hóa]]. ===={{section|forms}}==== {{ga-conj-2|c|aol|stem=caolaigh|q=broad}} ==={{section|further}}=== * {{R:ga:Corpas|s}} * {{R:ga:Ó Dónaill}} * {{R:ga:NEID}}” 2568733 wikitext text/x-wiki =={{langname|ga}}== ==={{section|etym}}=== {{rfe|ga}} ==={{section|v}}=== {{ga-verb|pres=-aíonn|fut=-óidh|vn=-ú|pp=-aithe}} # {{lb|ga|ergative}} Làm [[mỏng]] đi, làm [[mảnh]] đi, làm [[gầy]] đi. # {{lb|ga|ergative|phonology|phonetics}} Làm [[vòm hóa]]. ===={{section|forms}}==== {{ga-conj-2|c|aol|stem=caolaigh|q=broad}} ==={{section|further}}=== * {{R:ga:Corpas|s}} * {{R:ga:Ó Dónaill}} * {{R:ga:NEID}} 45g0urkobpsfy8dp2hppo349e21jizv Thể loại:Động từ khiển cách tiếng Ireland 14 419302 2568734 2026-10-06T01:35:14Z Hiyuune 50834 Trang mới: “{{auto cat}}” 2568734 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Thể loại:Phụ lục tiếng Ireland 14 419303 2568735 2026-10-06T01:36:33Z Hiyuune 50834 Trang mới: “{{auto cat}}” 2568735 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Thể loại:Tiếng Ireland Connacht 14 419304 2568736 2026-10-06T01:38:43Z Hiyuune 50834 Trang mới: “{{auto cat|lect=1|lang=ga|Connacht}}” 2568736 wikitext text/x-wiki {{auto cat|lect=1|lang=ga|Connacht}} eyt8dviaawno42i0rv4o14hs3bs6bty thuilleadh 0 419305 2568738 2026-10-06T01:46:10Z Hiyuune 50834 Trang mới: “=={{langname|gd}}== ==={{section|pron}}=== * {{IPA|gd|/ˈhɯʎəɣ/}} ==={{section|n}}=== {{head|gd|Biến đổi âm danh từ}} # {{lenition of|gd|tuilleadh}} =={{langname|ga}}== ==={{section|pron}}=== {{hrow}} * Danh từ: ** {{IPA|ga|a=Munster|/ˈhɪlʲə/}} ** {{IPA|ga|a=Galway|/ˈhil̠ʲə/}} ** {{IPA|ga|a=Mayo,Ulster|/ˈhil̠ʲuː/}} * Biến thể hình thái động từ: ** {{IPA|ga|a=Munster|/ˈhɪlʲəx/}} ** {{IPA|ga|a=Galway|/ˈhil̠ʲətʲ/|q1=trước…” 2568738 wikitext text/x-wiki =={{langname|gd}}== ==={{section|pron}}=== * {{IPA|gd|/ˈhɯʎəɣ/}} ==={{section|n}}=== {{head|gd|Biến đổi âm danh từ}} # {{lenition of|gd|tuilleadh}} =={{langname|ga}}== ==={{section|pron}}=== {{hrow}} * Danh từ: ** {{IPA|ga|a=Munster|/ˈhɪlʲə/}} ** {{IPA|ga|a=Galway|/ˈhil̠ʲə/}} ** {{IPA|ga|a=Mayo,Ulster|/ˈhil̠ʲuː/}} * Biến thể hình thái động từ: ** {{IPA|ga|a=Munster|/ˈhɪlʲəx/}} ** {{IPA|ga|a=Galway|/ˈhil̠ʲətʲ/|q1=trước {{m|ga|sé}}, {{m|ga|sí}}, {{m|ga|sibh}}, {{m|ga|siad}}|q2=khác|/ˈhil̠ʲəx/}} ** {{IPA|ga|a=Mayo,Ulster|/ˈhil̠ʲətʲ/|q1=trước {{m|ga|sé}}, {{m|ga|sí}}, {{m|ga|sibh}}, {{m|ga|siad}}|q2=khác|/ˈhil̠ʲuː/}} ==={{section|n}}=== {{head|ga|Biến đổi âm danh từ}} # {{ga-lenition of|tuilleadh}} ==={{section|v}}=== {{head|ga|Biến thể hình thái động từ}} # {{inflection of|ga|tuill||anal|hab|độc lập|past}} gnf2hybs839d7iegq4omnpnvt9lnmrc adpetitus 0 419306 2568739 2026-10-06T01:53:07Z Hiyuune 50834 Trang mới: “=={{langname|la}}== ==={{section|pron}}=== * {{la-IPA|adpetītus}} ==={{section|n}}=== {{la-noun|adpetītus<4>}} # {{alt of|la|appetītus}} ===={{section|decl}}==== {{la-ndecl|adpetītus<4>}} ===={{section|rel}}==== {{col|la |appetēns,adpetēns |appetenter,adpetenter |appetentia,adpetentia |appetibilis,adpetibilis |appetissō |appetītio,adpetītio |appetītīvus |appetītor |appetītrīx }} ==={{section|ptcp}}=== {{la-part|adpetītus}} # {{alt of|la|appetītus}}…” 2568739 wikitext text/x-wiki =={{langname|la}}== ==={{section|pron}}=== * {{la-IPA|adpetītus}} ==={{section|n}}=== {{la-noun|adpetītus<4>}} # {{alt of|la|appetītus}} ===={{section|decl}}==== {{la-ndecl|adpetītus<4>}} ===={{section|rel}}==== {{col|la |appetēns,adpetēns |appetenter,adpetenter |appetentia,adpetentia |appetibilis,adpetibilis |appetissō |appetītio,adpetītio |appetītīvus |appetītor |appetītrīx }} ==={{section|ptcp}}=== {{la-part|adpetītus}} # {{alt of|la|appetītus}} ===={{section|decl}}==== {{la-adecl|adpetītus}} ==={{section|ref}}=== * {{R:la:L&S}} * {{R:la:Elementary Lewis}} * {{R:la:Gaffiot}} o3yhqreuj3ttus5e9y8pvwyke1bfimi adpetituum 0 419307 2568740 2026-10-06T01:53:34Z Hiyuune 50834 Trang mới: “=={{langname|la}}== ==={{section|n}}=== {{head|la|noun form|head=adpetītuum}} # {{inflection of|la|adpetītus||gen|p}}” 2568740 wikitext text/x-wiki =={{langname|la}}== ==={{section|n}}=== {{head|la|noun form|head=adpetītuum}} # {{inflection of|la|adpetītus||gen|p}} mvw0y9bzap8ompyke9yorbrk8179pui 2568741 2568740 2026-10-06T02:00:21Z Hiyuune 50834 /* Tiếng Latinh */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]) 2568741 wikitext text/x-wiki =={{langname|la}}== ==={{section|n}}=== {{head|la|nf|head=adpetītuum}} # {{inflection of|la|adpetītus||gen|p}} sec01klrm4mlb0xf7e6urztfp9sbf3m Schengenraum 0 419308 2568745 2026-10-06T05:20:09Z Kelly zhrm 58416 Trang mới: “=={{langname|de}}== ==={{ĐM|alt}}=== * {{l|de|Schengen-Raum}} ==={{ĐM|pron}}=== * {{IPA4|de|/ˈʃɛŋənˌʁaʊ̯m/}} * {{audio|de|De-Schengenraum.ogg|a=Berlin}} ==={{ĐM|pr-noun}}=== {{de-proper noun|m,(e)s}} # {{w|Khối Schengen}}. ===={{ĐM|decl}}==== {{de-ndecl|m,(e)s.sg}} ==={{ĐM|further}}=== * {{R:de:DWDS}} * {{R:de:Duden}} * {{pedia|lang=de}} {{C|de|Chính trị châu Âu}}” 2568745 wikitext text/x-wiki =={{langname|de}}== ==={{ĐM|alt}}=== * {{l|de|Schengen-Raum}} ==={{ĐM|pron}}=== * {{IPA4|de|/ˈʃɛŋənˌʁaʊ̯m/}} * {{audio|de|De-Schengenraum.ogg|a=Berlin}} ==={{ĐM|pr-noun}}=== {{de-proper noun|m,(e)s}} # {{w|Khối Schengen}}. ===={{ĐM|decl}}==== {{de-ndecl|m,(e)s.sg}} ==={{ĐM|further}}=== * {{R:de:DWDS}} * {{R:de:Duden}} * {{pedia|lang=de}} {{C|de|Chính trị châu Âu}} d0hrjxsr6i2v5vn9dw7ufop2tl2485c 2568759 2568745 2026-10-06T06:02:48Z Hiyuune 50834 /* Tiếng Đức */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]) 2568759 wikitext text/x-wiki =={{langname|de}}== ==={{ĐM|alt}}=== * {{l|de|Schengen-Raum}} ==={{ĐM|pron}}=== * {{IPA|de|/ˈʃɛŋənˌʁaʊ̯m/}} * {{audio|de|De-Schengenraum.ogg|a=Berlin}} ==={{ĐM|pr-noun}}=== {{de-proper noun|m,(e)s}} # {{w|Khối Schengen}}. ===={{ĐM|decl}}==== {{de-ndecl|m,(e)s.sg}} ==={{ĐM|further}}=== * {{R:de:DWDS}} * {{R:de:Duden}} * {{pedia|lang=de}} {{C|de|Chính trị châu Âu}} hxiz107dpf09zkqf7maq0415ff9zedq Tal 0 419309 2568746 2026-10-06T05:28:51Z Kelly zhrm 58416 Trang mới: “==={{đm|n}}==={{also|Phụ lục:Biến thể của "tal"}} =={{langname|en}}== {{wp|+ (name)}} ==={{ĐM|etym}}=== {{bor+|en|he|טַל|tr=tal|t=sương}}. ==={{ĐM|pr-noun}}=== {{en-proper noun|s}} # {{given name|en|nam|from=tiếng Do Thái}}. # {{surname|en|from=tiếng Do Thái}}. ==={{ĐM|further}}=== * {{R:en:DAFN}} ==={{ĐM|ana}}=== * {{anagrams|en|a=alt|ALT|alt.|LAT|LTA|alt|Alt.|ATL|TLA|Lat.|Atl.|lat.|lat|Alt|alt-}} =={{langname|de}}== ==={{ĐM|alt}}=== * {…” 2568746 wikitext text/x-wiki ==={{đm|n}}==={{also|Phụ lục:Biến thể của "tal"}} =={{langname|en}}== {{wp|+ (name)}} ==={{ĐM|etym}}=== {{bor+|en|he|טַל|tr=tal|t=sương}}. ==={{ĐM|pr-noun}}=== {{en-proper noun|s}} # {{given name|en|nam|from=tiếng Do Thái}}. # {{surname|en|from=tiếng Do Thái}}. ==={{ĐM|further}}=== * {{R:en:DAFN}} ==={{ĐM|ana}}=== * {{anagrams|en|a=alt|ALT|alt.|LAT|LTA|alt|Alt.|ATL|TLA|Lat.|Atl.|lat.|lat|Alt|alt-}} =={{langname|de}}== ==={{ĐM|alt}}=== * {{alt|de|Thal||obsolete}} * {{alt|de|Tahl||dialectal}} ==={{ĐM|etym}}=== {{etymon|de|:inh|gmh:tal<ety:inh<goh:tal>>}} {{inh+|de|gmh|tal}}, từ {{inh|de|goh|tal}}. Cùng gốc với {{cog|da|dal}}, {{cog|nl|dal}}, {{cog|en|dale}}, {{cog|sv|dal}}. ==={{ĐM|pron}}=== * {{IPA4|de|/taːl/|[tʰäːl]}} * {{audio|de|De-Tal.ogg|a=Berlin}} * {{rhymes|de|aːl|s=1}} ==={{ĐM|n}}=== {{de-noun|n,(e)s,^er}} # [[thung lũng|Thung lũng]]. ===={{ĐM|decl}}==== {{de-ndecl|n,(e)s,^er}} ===={{ĐM|rel}}==== {{col|de |Bachtal |Bergtal |Flusstal |Gebirgstal |Haupttal |Konjunkturtal |Kurvental |Leistungstal |Moseltal |Nebental |Obertal |Seitental |Untertal |Urstromtal |Talbahn |Talbecken |Talhang |Talnebel |Talsee |Talsenke |Talsohle |Talsperre |Talwiese }} ==={{ĐM|further}}=== * {{R:de:DWDS}} * {{R:de:Duden}} * {{R:de:Grimm}} {{C|de|Địa mạo}} c1zk53ywxxmbc4n4uihgxj5ks97fmk9 2568752 2568746 2026-10-06T05:51:47Z TheHighFighter2 42988 2568752 wikitext text/x-wiki {{also|Phụ lục:Biến thể của "tal"}} =={{langname|en}}== {{wp|en:+ (name)}} ==={{ĐM|etym}}=== {{bor+|en|he|טַל|tr=tal|t=sương}}. ==={{ĐM|pr-noun}}=== {{en-proper noun|s}} # {{given name|en|nam|from=tiếng Do Thái}}. # {{surname|en|from=tiếng Do Thái}}. ==={{ĐM|further}}=== * {{R:en:DAFN}} ==={{ĐM|ana}}=== * {{anagrams|en|a=alt|ALT|alt.|LAT|LTA|alt|Alt.|ATL|TLA|Lat.|Atl.|lat.|lat|Alt|alt-}} =={{langname|de}}== ==={{ĐM|alt}}=== * {{alt|de|Thal||obsolete}} * {{alt|de|Tahl||dialectal}} ==={{ĐM|etym}}=== {{etymon|de|:inh|gmh:tal<ety:inh<goh:tal>>}} {{inh+|de|gmh|tal}}, từ {{inh|de|goh|tal}}. Cùng gốc với {{cog|da|dal}}, {{cog|nl|dal}}, {{cog|en|dale}}, {{cog|sv|dal}}. ==={{ĐM|pron}}=== * {{IPA4|de|/taːl/|[tʰäːl]}} * {{audio|de|De-Tal.ogg|a=Berlin}} * {{rhymes|de|aːl|s=1}} ==={{ĐM|n}}=== {{de-noun|n,(e)s,^er}} # [[thung lũng|Thung lũng]]. ===={{ĐM|decl}}==== {{de-ndecl|n,(e)s,^er}} ===={{ĐM|rel}}==== {{col|de |Bachtal |Bergtal |Flusstal |Gebirgstal |Haupttal |Konjunkturtal |Kurvental |Leistungstal |Moseltal |Nebental |Obertal |Seitental |Untertal |Urstromtal |Talbahn |Talbecken |Talhang |Talnebel |Talsee |Talsenke |Talsohle |Talsperre |Talwiese }} ==={{ĐM|further}}=== * {{R:de:DWDS}} * {{R:de:Duden}} * {{R:de:Grimm}} {{C|de|Địa mạo}} cs4tk5lje6jms20kmxawrwwbveskxxz policristallo 0 419310 2568755 2026-10-06T05:53:27Z Hiyuune 50834 + it 2568755 wikitext text/x-wiki =={{langname|it}}== ==={{section|etym}}=== {{ety|it|:af|poli-|cristallo}} Từ {{prefix|it|poli|cristallo}}. ==={{section|n}}=== {{it-noun|m}} # Đa [[tinh thể]]. iazs09131qjmwyn1avpzf4rs4t29e5t policristalli 0 419311 2568756 2026-10-06T05:53:57Z Hiyuune 50834 + it 2568756 wikitext text/x-wiki =={{langname|it}}== ==={{section|n}}=== {{head|it|Biến thể hình thái danh từ}} # {{plural of|it|policristallo}} rv0tasjlf550nisu4x7q46yfvuzfusp liôn 0 419312 2568758 2026-10-06T06:00:54Z TheHighFighter2 42988 Trang mới: “{{also|lion|Lion|lìon|líon}} =={{langname|rgn}}== ==={{ĐM|pron}}=== {{rgn-IPA|rf=1|vu=1|za=1|l|i|'|ô|n}} ==={{ĐM|noun}}=== {{rgn-noun|m|~}} # [[sư tử|Sư tử]].” 2568758 wikitext text/x-wiki {{also|lion|Lion|lìon|líon}} =={{langname|rgn}}== ==={{ĐM|pron}}=== {{rgn-IPA|rf=1|vu=1|za=1|l|i|'|ô|n}} ==={{ĐM|noun}}=== {{rgn-noun|m|~}} # [[sư tử|Sư tử]]. 2ubczlcuh9n3ke1j42sr5w2o713zbkl motschkern 0 419313 2568762 2026-10-06T06:08:24Z Hiyuune 50834 Trang mới: “=={{langname|de}}== ==={{section|etym}}=== Từ {{af|de|lang1=cs|močka|-ern}} thông qua {{der|de|bar|måtschkern}}. ==={{section|pron}}=== * {{IPA|de|/ˈmɔt͡ʃkɐn/}} * {{hyph|de|motsch|kern}} ==={{section|v}}=== {{de-verb}} # {{lb|de|Austria}} {{alternative form of|de|matschkern}} ==={{section|further}}=== * {{R:de:UniLeipzig}}” 2568762 wikitext text/x-wiki =={{langname|de}}== ==={{section|etym}}=== Từ {{af|de|lang1=cs|močka|-ern}} thông qua {{der|de|bar|måtschkern}}. ==={{section|pron}}=== * {{IPA|de|/ˈmɔt͡ʃkɐn/}} * {{hyph|de|motsch|kern}} ==={{section|v}}=== {{de-verb}} # {{lb|de|Austria}} {{alternative form of|de|matschkern}} ==={{section|further}}=== * {{R:de:UniLeipzig}} 7gi4wid8ye2f8ju5movxsehc7nlb85l บรรณาธิการ 0 419314 2568768 2026-10-06T06:31:20Z Hiyuune 50834 Trang mới: “=={{langname|th}}== ==={{ĐM|alt}}=== {{col3|th|บ.ก.}} ==={{ĐM|etym}}=== {{com|th|paṇṇa|अधिकार|lang1=pi|lang2=sa}}. So sánh với {{cog|km|បណ្ណាធិការ}}, {{cog|lo|ບັນນາທິການ}}. ==={{ĐM|pron}}=== {{th-pron|บัน-นา-ทิ-กาน}} ==={{ĐM|noun}}=== {{th-noun|คน}} # [[biên tập viên]].” 2568768 wikitext text/x-wiki =={{langname|th}}== ==={{ĐM|alt}}=== {{col3|th|บ.ก.}} ==={{ĐM|etym}}=== {{com|th|paṇṇa|अधिकार|lang1=pi|lang2=sa}}. So sánh với {{cog|km|បណ្ណាធិការ}}, {{cog|lo|ບັນນາທິການ}}. ==={{ĐM|pron}}=== {{th-pron|บัน-นา-ทิ-กาน}} ==={{ĐM|noun}}=== {{th-noun|คน}} # [[biên tập viên]]. n0f9pvidpirm4rnnuh3qxg7t5mh0pz9 2568769 2568768 2026-10-06T06:31:35Z Hiyuune 50834 /* Từ nguyên */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]) 2568769 wikitext text/x-wiki =={{langname|th}}== ==={{ĐM|alt}}=== {{col3|th|บ.ก.}} ==={{ĐM|etym}}=== Từ {{com|th|paṇṇa|अधिकार|lang1=pi|lang2=sa}}. So sánh với {{cog|km|បណ្ណាធិការ}}, {{cog|lo|ບັນນາທິການ}}. ==={{ĐM|pron}}=== {{th-pron|บัน-นา-ทิ-กาน}} ==={{ĐM|noun}}=== {{th-noun|คน}} # [[biên tập viên]]. sjuaqaklop2x5vt2n9k4spkah222p04 Thể loại:Từ dẫn xuất từ tiếng Pali tiếng Thái 14 419315 2568770 2026-10-06T06:31:54Z Hiyuune 50834 Trang mới: “{{auto cat}}” 2568770 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Thể loại:Từ nguyên tiếng Thái 14 419316 2568771 2026-10-06T06:32:44Z Hiyuune 50834 Trang mới: “{{auto cat}}” 2568771 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Mô đun:Ethi-sortkey 828 419317 2568773 2026-10-06T06:41:08Z Hiyuune 50834 Trang mới: “local export = {} local m_str_utils = require("Module:string utilities") local codepoint = m_str_utils.codepoint local rsplit = m_str_utils.split local rsub = m_str_utils.gsub local u = m_str_utils.char local floor = math.floor local toSet = require("Module:table").listToSet -- apply rsub() repeatedly until no change local function rsub_repeatedly(term, foo, bar) while true do local new_term = rsub(term, foo, bar) if new_term ==…” 2568773 Scribunto text/plain local export = {} local m_str_utils = require("Module:string utilities") local codepoint = m_str_utils.codepoint local rsplit = m_str_utils.split local rsub = m_str_utils.gsub local u = m_str_utils.char local floor = math.floor local toSet = require("Module:table").listToSet -- apply rsub() repeatedly until no change 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 digits = "123456789ABCDEFGHIJK" --The digits correspond to ä, u, i, a, e, ə, o, ʷä, ʷi, ʷa, ʷe, ʷə, ʸä, ʸu, ʸi, ʸa, ʸe, ʸə, ʸo, ɔ local spaces = "፠፡።፣፤፥፦፧፨" --to be converted into spaces local zero = u(0x135D) .. u(0x135E) .. u(0x135F) .. "᎐᎑᎒᎓᎔᎕᎖᎗᎘᎙" -- to be removed altogether --Rows taken by a single consonant local use_16_intervals = { {0x1240, 0x125F}, {0x1280, 0x128F}, } --Consonants in two consecutive rows local subst_8_intervals = { {0x12B0, 0x12B7}, {0x12C0, 0x12C7}, {0x1310, 0x1317}, } --Consonants in which the 8th order isn't Cʷa, but Cɔ. Where is this used? local oa_in_8 = toSet({0x1200, 0x1240, 0x1280, 0x12A8, 0x12C8, 0x12E8, 0x1308, 0x1340}) local y1 = 13 --Order of ʸä local w1 = 8 --Order of ʷä -- local manual_order = { --Supplement [0x1380] = {0x1218, 8}, [0x1381] = {0x1218, 9}, [0x1382] = {0x1218, 11}, [0x1383] = {0x1218, 12}, [0x1384] = {0x1260, 8}, [0x1385] = {0x1260, 9}, [0x1386] = {0x1260, 11}, [0x1387] = {0x1260, 12}, [0x1388] = {0x1348, 8}, [0x1389] = {0x1348, 9}, [0x138A] = {0x1348, 11}, [0x138B] = {0x1348, 12}, [0x138C] = {0x1350, 8}, [0x138D] = {0x1350, 9}, [0x138E] = {0x1350, 11}, [0x138F] = {0x1350, 12}, --Extended [0x2D80] = {0x1208, 20}, [0x2D81] = {0x1218, 20}, [0x2D82] = {0x1228, 20}, [0x2D83] = {0x1230, 20}, [0x2D84] = {0x1238, 20}, [0x2D85] = {0x1260, 20}, [0x2D86] = {0x1270, 20}, [0x2D87] = {0x1278, 20}, [0x2D88] = {0x1290, 20}, [0x2D89] = {0x1298, 20}, [0x2D8A] = {0x12A0, 20}, [0x2D8B] = {0x12D8, 20}, [0x2D8C] = {0x12F0, 20}, [0x2D8D] = {0x12F8, 20}, [0x2D8E] = {0x1300, 20}, [0x2D8F] = {0x1320, 20}, [0x2D90] = {0x1328, 20}, [0x2D91] = {0x1330, 20}, [0x2D92] = {0x1350, 20}, --Extended-B --𞟭, 𞟮 [0x1E7ED] = {0x1218, w1 + 1}, [0x1E7EE] = {0x1218, w1 + 3}, --𞟰, 𞟱, 𞟲 [0x1E7F0] = {0x1240, w1 + 1}, [0x1E7F1] = {0x1240, w1 + 3}, [0x1E7F2] = {0x1240, w1 + 4}, --𞟳, 𞟴 [0x1E7F3] = {0x1260, w1 + 1}, [0x1E7F4] = {0x1260, w1 + 3}, --𞟵, 𞟶, 𞟷 [0x1E7F5] = {0x12A8, w1 + 1}, [0x1E7F6] = {0x12A8, w1 + 3}, [0x1E7F7] = {0x12A8, w1 + 4}, --𞟸, 𞟹, 𞟺 [0x1E7F8] = {0x1308, w1 + 1}, [0x1E7F9] = {0x1308, w1 + 3}, [0x1E7FA] = {0x1308, w1 + 4}, --𞟻, 𞟼 [0x1E7FB] = {0x1348, w1 + 1}, [0x1E7FC] = {0x1348, w1 + 3}, --𞟽, 𞟾 [0x1E7FD] = {0x1350, w1 + 1}, [0x1E7FE] = {0x1350, w1 + 3}, --Other (ፘ, ፙ, ፚ) [0x1358] = {0x1228, y1}, [0x1359] = {0x1218, y1}, [0x135A] = {0x1348, y1} } ---Start, end, base, offset local order_tables = { --Extended {0x2DA0, 0x2DA6, 0x2DA0, - 0x2DA0 + 1}, {0x2DA8, 0x2DAE, 0x2DA8, - 0x2DA8 + 1}, {0x2DB0, 0x2DB6, 0x2DB0, - 0x2DB0 + 1}, {0x2DB8, 0x2DBE, 0x2DB8, - 0x2DB8 + 1}, {0x2DC0, 0x2DC6, 0x2DC0, - 0x2DC0 + 1}, {0x2DC8, 0x2DCE, 0x2DC8, - 0x2DC8 + 1}, {0x2DD0, 0x2DD6, 0x2DD0, - 0x2DD0 + 1}, {0x2DD8, 0x2DDE, 0x2DD8, - 0x2DD8 + 1}, --Extended-A {0xAB01, 0xAB06, 0xAB01, - 0xAB01 + 2}, {0xAB09, 0xAB0E, 0xAB09, - 0xAB09 + 2}, {0xAB11, 0xAB16, 0xAB11, - 0xAB11 + 2}, {0xAB20, 0xAB26, 0xAB20, - 0xAB20 + 1}, {0xAB28, 0xAB2E, 0xAB28, - 0xAB28 + 1}, --Extended-B {0x1E7E0, 0x1E7E7, 0x1210, - 0x1E7E0 + y1}, {0x1E7E8, 0x1E7EB, 0x1210, - 0x1E7E8 + w1} } --Convert ints to strings, but make 10->A, 11->B... local function order_letter(o) if o < 10 then return tostring(o) end return u(55 + o) --"A" is at codepoint 65 end --Find the codepoint of the base letter (c+ä) of a given character local function get_base_order(c) local base_cp, order --In some cases it's easier to get the basic letter and the order manually local result = manual_order[c] if result then return result[1], result[2] end --In some cases, related letters can be handled together for _, t in ipairs(order_tables) do if t[1] <= c and c <= t[2] then return t[3], c + t[4] end end --Single consonant takes a whole row for _, pair in ipairs(use_16_intervals) do if pair[1] <= c and c <= pair[2] then base_cp = floor(c/16)*16 order = c - base_cp + 1 if order == 8 then --OA syllables order = 20 elseif order == 9 then --move one slot to the left order = 8 elseif order > 10 then --move two slots to the left (there's no order==10) order = order - 2 end return base_cp, order end end --Single consonant in two rows (we only need to handle the second part) for _, pair in ipairs(subst_8_intervals) do if pair[1] <= c and c <= pair[2] then base_cp = floor(c/8)*8 - 8 order = c - base_cp if order == 1 then --move one slot to the left order = 8 else --move two slots to the left order = order - 2 end return base_cp, order end end --Single consonant in half a row base_cp = floor(c/8)*8 order = c - base_cp + 1 --If it's Cɔ, 20 if order == 8 and oa_in_8[base_cp] then order = 20 --If it's Cʷa, move to order 10 (make room for ʷä and ʷi if they exist) elseif order == 8 then order = 10 end return base_cp, order end --Process each individual character local function generate_sortkey(letter) local cp = codepoint(letter) --Ethiopic & Ethiopic Supplement, Ethiopic Extended, Ethiopic Extended-A, Ethiopic Extended-B if not ((0x1200 <= cp and cp <= 0x1399) or (0x2D80 <= cp and cp <= 0x2DDE) or (0xAB01 <= cp and cp <= 0xAB2E) or (0x1E7E0 <= cp and cp <= 0x1E7FE)) then return letter --If the character isn't in any of the Ethiopic blocks, don't do anything end --If it's a number, don't change anything if 0x1369 <= cp and cp <= 0x137C then return letter end local base_cp, order = get_base_order(cp) return u(base_cp) .. order_letter(order) end function export.makeSortKey(text, lang, sc) --Remove punctuation and dicritics (unlikely, but just in case) text = rsub_repeatedly(text, "[" .. spaces .."]", " ") text = rsub_repeatedly(text, " ", " ") text = rsub_repeatedly(text, "[" .. zero .."]", "") --Character by character local result = {} for _, l in ipairs(rsplit(text, "")) do table.insert(result, generate_sortkey(l)) end result = table.concat(result, "") --Move vowel signs to the end result = rsub_repeatedly(result, "([" .. digits .. "])([^" .. digits .. "])", "%2%1") --Add a space before the digits (otherwise ቤተ will get sorted before ቤተ፡ክርስቲያን) result = rsub(result, "([^" .. digits .. "])([" .. digits .. "])", "%1 %2") return result end return export eviyoqs73ps2iad7wp6onmgoteq7uca jebi 0 419318 2568780 2026-10-06T08:48:16Z Hiyuune 50834 + so 2568780 wikitext text/x-wiki =={{langname|so}}== ==={{section|v}}=== {{head|so|Động từ|nguyên mẫu|jebin}} # {{infl of|so|jab||tr}} k411juyfau5n0wjqo5yb6crg7t4nr2t aa6 0 419319 2568781 2026-10-06T09:35:09Z Hiyuune 50834 Trang mới: “=={{langname|yue}}== ==={{section|pron}}=== {{Jyutping-IPA|aa6}} ==={{section|rom}}=== {{yue-jyut}} # {{yue-jyutping of|呀}} # {{yue-jyutping of|𠯢}} # {{yue-jyutping of|𠻺}} # {{yue-jyutping of|那}}” 2568781 wikitext text/x-wiki =={{langname|yue}}== ==={{section|pron}}=== {{Jyutping-IPA|aa6}} ==={{section|rom}}=== {{yue-jyut}} # {{yue-jyutping of|呀}} # {{yue-jyutping of|𠯢}} # {{yue-jyutping of|𠻺}} # {{yue-jyutping of|那}} 48vfkc2q5ox737n7igv4a4jn7appqit absorboitumaton 0 419320 2568782 2026-10-06T09:36:17Z Hiyuune 50834 Trang mới: “=={{langname|fi}}== ==={{section|ptcp}}=== {{head|fi|Phân từ phủ định}} # {{infl of|fi|absorboitua||part|neg}} ===={{section|decl}}==== {{fi-decl-onneton|pos=adj|absorboituma|a}}” 2568782 wikitext text/x-wiki =={{langname|fi}}== ==={{section|ptcp}}=== {{head|fi|Phân từ phủ định}} # {{infl of|fi|absorboitua||part|neg}} ===={{section|decl}}==== {{fi-decl-onneton|pos=adj|absorboituma|a}} 4127ypthta6rzv8uikj8ogfkafvj8xa absorboitua 0 419321 2568783 2026-10-06T09:46:04Z Hiyuune 50834 Trang mới: “=={{langname|fi}}== ==={{section|etym}} 1=== {{affix|fi|absorboida|-tua}} ===={{section|pron}}==== {{fi-pronunciation|*}} ===={{section|v}}==== {{fi-verb|cat=automative}} # {{lb|fi|intransitive|physics}} [[hấp thụ|Hấp thụ]]. ====={{section|usage}}===== * {{m|fi||absorboitua}} dùng trong nghĩa chính vật lý học, còn từ đồng nghĩa {{m|fi|imeytyä}} dùng các nghĩa khác phổ biến hơn. ====={{section|forms}}===== {{fi-conj-sanoa|absorboi|t|d…” 2568783 wikitext text/x-wiki =={{langname|fi}}== ==={{section|etym}} 1=== {{affix|fi|absorboida|-tua}} ===={{section|pron}}==== {{fi-pronunciation|*}} ===={{section|v}}==== {{fi-verb|cat=automative}} # {{lb|fi|intransitive|physics}} [[hấp thụ|Hấp thụ]]. ====={{section|usage}}===== * {{m|fi||absorboitua}} dùng trong nghĩa chính vật lý học, còn từ đồng nghĩa {{m|fi|imeytyä}} dùng các nghĩa khác phổ biến hơn. ====={{section|forms}}===== {{fi-conj-sanoa|absorboi|t|d|u|a}} ====={{section|syn}}===== * {{sense|hấp thụ}} {{l|fi|imeytyä}} ====={{section|drv}}===== {{col|fi |absorboituminen }} ====={{section|rel}}===== * {{l|fi|absorptio}} ===={{section|further}}==== * {{R:fi:KTSK|accessdate=2023-07-02}} ==={{section|etym}} 2=== ===={{section|pron}}==== {{fi-pronunciation}} ===={{section|v}}==== {{head|fi|Biến thể hình thái động từ}} # {{infl of|fi|absorboitu||par|s}} boobxj1scqri8vsq9y2e6i30z2ac5d9 2568784 2568783 2026-10-06T09:47:04Z Hiyuune 50834 /* Ghi chú sử dụng */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]) 2568784 wikitext text/x-wiki =={{langname|fi}}== ==={{section|etym}} 1=== {{affix|fi|absorboida|-tua}} ===={{section|pron}}==== {{fi-pronunciation|*}} ===={{section|v}}==== {{fi-verb|cat=automative}} # {{lb|fi|intransitive|physics}} [[hấp thụ|Hấp thụ]]. ====={{section|usage}}===== * {{m|fi||absorboitua}} dùng trong nghĩa chính vật lý học, còn từ đồng nghĩa {{m|fi|imeytyä}} dùng với ngữ cảnh khác phổ biến hơn. ====={{section|forms}}===== {{fi-conj-sanoa|absorboi|t|d|u|a}} ====={{section|syn}}===== * {{sense|hấp thụ}} {{l|fi|imeytyä}} ====={{section|drv}}===== {{col|fi |absorboituminen }} ====={{section|rel}}===== * {{l|fi|absorptio}} ===={{section|further}}==== * {{R:fi:KTSK|accessdate=2023-07-02}} ==={{section|etym}} 2=== ===={{section|pron}}==== {{fi-pronunciation}} ===={{section|v}}==== {{head|fi|Biến thể hình thái động từ}} # {{infl of|fi|absorboitu||par|s}} 86zhwkgrleh142jpsgx4riuq3ezuvby absorboitunut 0 419322 2568785 2026-10-06T09:48:42Z Hiyuune 50834 Trang mới: “=={{langname|fi}}== ==={{section|v}}=== {{head|fi|vf}} # {{verb form of|fi|absorboitua||past|ind|conn}} ==={{section|ptcp}}=== {{head|fi|Phân từ quá khứ chủ động}} # {{infl of|fi|absorboitua||part|past|act}} ===={{section|decl}}==== {{fi-decl-kuollut|pos=adj|absorboitun|a}}” 2568785 wikitext text/x-wiki =={{langname|fi}}== ==={{section|v}}=== {{head|fi|vf}} # {{verb form of|fi|absorboitua||past|ind|conn}} ==={{section|ptcp}}=== {{head|fi|Phân từ quá khứ chủ động}} # {{infl of|fi|absorboitua||part|past|act}} ===={{section|decl}}==== {{fi-decl-kuollut|pos=adj|absorboitun|a}} tfyfpcyub7kk07zau9qg4od2ph3krwf 2568786 2568785 2026-10-06T09:49:56Z Hiyuune 50834 /* Động từ */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]) 2568786 wikitext text/x-wiki =={{langname|fi}}== ==={{section|v}}=== {{head|fi|vf}} # {{verb form of|fi|absorboitua||ind|past|với|conn}} ==={{section|ptcp}}=== {{head|fi|Phân từ quá khứ chủ động}} # {{infl of|fi|absorboitua||part|past|act}} ===={{section|decl}}==== {{fi-decl-kuollut|pos=adj|absorboitun|a}} 5nrkbvwbnbln4g24aw8cmqcm89e2kie absorboiduttu 0 419323 2568787 2026-10-06T09:51:02Z Hiyuune 50834 Trang mới: “=={{langname|fi}}== ==={{section|v}}=== {{head|fi|vf}} # {{verb form of|fi|absorboitua||ind|past|pass|với|conn}} ==={{section|ptcp}}=== {{head|fi|Phân từ quá khứ bị động}} # {{infl of|fi|absorboitua||part|past|pass}} ===={{section|decl}}==== {{fi-decl-valo|pos=adj|absorboidu|tt|t|u|a}}” 2568787 wikitext text/x-wiki =={{langname|fi}}== ==={{section|v}}=== {{head|fi|vf}} # {{verb form of|fi|absorboitua||ind|past|pass|với|conn}} ==={{section|ptcp}}=== {{head|fi|Phân từ quá khứ bị động}} # {{infl of|fi|absorboitua||part|past|pass}} ===={{section|decl}}==== {{fi-decl-valo|pos=adj|absorboidu|tt|t|u|a}} 1taqc0ssqg9ibmda4jqmwvmlptufh0c absorboidun 0 419324 2568788 2026-10-06T09:54:16Z Hiyuune 50834 Trang mới: “=={{langname|fi}}== ==={{section|v}}=== {{head|fi|vf}} # {{verb form of|fi|absorboitua||ind|pres|ở|1|s}} ==={{section|v}}=== {{head|fi|partf}} # {{infl of|fi|absorboitu||gen|s}}” 2568788 wikitext text/x-wiki =={{langname|fi}}== ==={{section|v}}=== {{head|fi|vf}} # {{verb form of|fi|absorboitua||ind|pres|ở|1|s}} ==={{section|v}}=== {{head|fi|partf}} # {{infl of|fi|absorboitu||gen|s}} gno8j3xopl81tzy2mdjsf0mte9nfwp4