Wiksiyonaryo tlwiktionary https://tl.wiktionary.org/wiki/Wiksiyonaryo:Unang_Pahina MediaWiki 1.46.0-wmf.24 case-sensitive Midya Natatangi Usapan Tagagamit Usapang tagagamit Wiksiyonaryo Usapang Wiksiyonaryo Talaksan Usapang talaksan MediaWiki Usapang MediaWiki Padron Usapang padron Tulong Usapang tulong Kategorya Usapang kategorya TimedText TimedText talk Module Module talk Event Event talk roba 0 5279 176650 176592 2026-04-25T16:25:18Z Hiyuune 5522 176650 wikitext text/x-wiki {{also|robá|robà|robā|robă|robą|róba|róbà|rōba}} =={{=ast=}}== ===Verb=== {{head|ast|verb form}} # {{inflection of|ast|robar||3|s|pres|indc}} # {{inflection of|ast|robar||2|s|impr}} 5pl4sz27c52dzxqulqj920ppuvces2c 176651 176650 2026-04-25T16:26:16Z Hiyuune 5522 /* Asturyano */ 176651 wikitext text/x-wiki {{also|robá|robà|robā|robă|robą|róba|róbà|rōba}} =={{=ast=}}== ===Pandiwa=== {{head|ast|verb form}} # {{inflection of|ast|robar||3|s|pres|indc}} # {{inflection of|ast|robar||2|s|impr}} 18uo6oyu7aasmk8w2ng732x3vq7ewi5 176652 176651 2026-04-25T16:28:05Z Hiyuune 5522 176652 wikitext text/x-wiki {{also|robá|robà|robā|robă|robą|róba|róbà|rōba}} =={{=ast=}}== ===Pandiwa=== {{head|ast|verb form}} # {{inflection of|ast|robar||3|s|pres|indc}} # {{inflection of|ast|robar||2|s|impr}} =={{=fr=}}== ===Pagbigkas=== * {{fr-IPA|pos=v}} * {{homophones|fr|robas|robât}} ===Pandiwa=== {{head|fr|verb form}} # {{inflection of|fr|rober||3|s|phis}} gmr1olef4l13gth9lpzl6fofsk1q44p 176653 176652 2026-04-25T16:29:59Z Hiyuune 5522 /* Franses */ 176653 wikitext text/x-wiki {{also|robá|robà|robā|robă|robą|róba|róbà|rōba}} =={{=ast=}}== ===Pandiwa=== {{head|ast|verb form}} # {{inflection of|ast|robar||3|s|pres|indc}} # {{inflection of|ast|robar||2|s|impr}} =={{=fr=}}== ===Pagbigkas=== * {{fr-IPA|pos=v}} * {{homophones|fr|robas|robât}} ===Pandiwa=== {{head|fr|verb form}} # {{inflection of|fr|rober||3|s|phis}} =={{=ja=}}== ===Romanisasyon=== {{ja-romaji}} # {{ja-romanization of|ろば}} # {{ja-romanization of|ロバ}} meno2z7y628xadhmfn1u3m826llh1cb 176654 176653 2026-04-25T16:33:11Z Hiyuune 5522 176654 wikitext text/x-wiki {{also|robá|robà|robā|robă|robą|róba|róbà|rōba}} =={{=ast=}}== ===Pandiwa=== {{head|ast|verb form}} # {{inflection of|ast|robar||3|s|pres|indc}} # {{inflection of|ast|robar||2|s|impr}} =={{=es=}}== ===Pandiwa=== {{head|es|verb form}} # {{es-verb form of|robar}} =={{=fr=}}== ===Pagbigkas=== * {{fr-IPA|pos=v}} * {{homophones|fr|robas|robât}} ===Pandiwa=== {{head|fr|verb form}} # {{inflection of|fr|rober||3|s|phis}} =={{=ja=}}== ===Romanisasyon=== {{ja-romaji}} # {{ja-romanization of|ろば}} # {{ja-romanization of|ロバ}} =={{=lv=}}== ===Pangngalan=== {{head|lv|noun form|g=m}} # {{infl of|lv|robs||gen|s}} kylhqr55twjwsfx9k1nhbp0ivlu5c3m Module:languages/data/3/t/extra 828 33115 176663 174772 2026-04-26T11:56:51Z Yivan000 4078 enwikt parity 176663 Scribunto text/plain local m = {} m["taa"] = { aliases = {"Tanana"}, -- Middle Tanana is a distinct language } m["tab"] = { aliases = {"Tabassaran"}, } m["tac"] = { } m["tad"] = { varieties = {"Deirate", "Nuclear Tause", "Weirate"}, } m["tae"] = { } m["taf"] = { } m["tag"] = { } m["taj"] = { } m["tak"] = { } m["tal"] = { } m["tan"] = { } m["tao"] = { aliases = {"Tao"}, } m["tap"] = { } m["tar"] = { } m["tas"] = { aliases = {"Tay Boi Pidgin French", "Vietnamese Pidgin French"}, } m["tau"] = { aliases = {"Tabesna", "Nabesna"}, } m["tav"] = { } m["taw"] = { } m["tax"] = { } m["tay"] = { } m["taz"] = { } m["tba"] = { } m["tbc"] = { } m["tbd"] = { } m["tbe"] = { } m["tbf"] = { } m["tbg"] = { varieties = {"Aantantara", "Arau-Varosia", "Arokaara", "Saiqora"}, } m["tbh"] = { } m["tbi"] = { aliases = {"Ingessana", "Gaahmg"}, -- Ingessana is the ethnic group } m["tbj"] = { } m["tbk"] = { } m["tbl"] = { aliases = {"Tagabili"}, } m["tbm"] = { } m["tbn"] = { } m["tbo"] = { } m["tbp"] = { aliases = {"Diebroud", "Dabra"}, } m["tbr"] = { } m["tbs"] = { } m["tbt"] = { aliases = {"Tembo"}, } m["tbu"] = { aliases = {"Tubare"}, } m["tbv"] = { } m["tbw"] = { } m["tbx"] = { } m["tby"] = { varieties = {"Adu", "Nyeku"}, } m["tbz"] = { } m["tca"] = { aliases = {"Tikuna"}, } m["tcb"] = { } m["tcc"] = { } m["tcd"] = { } m["tce"] = { } m["tcf"] = { } m["tcg"] = { } m["tch"] = { } m["tci"] = { aliases = {"Anta-Komnzo-Wára-Wérè-Kémä"}, -- oof, Glottolog's name varieties = {"Anta", "Kémä", "Kómnjo", "Wára", "Wèré"}, } m["tck"] = { } m["tcl"] = { aliases = {"Taman", "Taman (Burma)"}, } m["tcm"] = { pseudo_families = "paa", } m["tco"] = { } m["tcp"] = { aliases = {"Tawr"}, } m["tcq"] = { } m["tcs"] = { aliases = {"Big Thap", "Blaikman", "Brokan", "Broken", "Broken English", "Cape York Creole", "Lockhart Creole", "Papuan Pidgin English", "Torres Strait Brokan", "Torres Strait Broken", "Torres Strait Pidgin", "Yumplatok"}, } m["tct"] = { } m["tcu"] = { } m["tcw"] = { } m["tcx"] = { } m["tcy"] = { } m["tcz"] = { aliases = {"Thado"}, } m["tda"] = { } m["tdb"] = { } m["tdc"] = { } m["tdd"] = { aliases = {"Tai Nuea", "Dehong Dai", "Tai Dehong", "Tai Le", "Chinese Shan", "Chinese Tai"}, } m["tde"] = { } m["tdf"] = { other_names = {"Taliang", "Tariang", "Kasseng"}, } m["tdg"] = { } m["tdh"] = { } m["tdi"] = { } m["tdj"] = { } m["tdk"] = { } m["tdl"] = { other_names = {"Tapshin"}, } m["tdm"] = { other_names = {"Taruamá"}, } m["tdn"] = { } m["tdo"] = { } m["tdq"] = { } m["tdr"] = { } m["tds"] = { other_names = {"Taori"}, } m["tdt"] = { other_names = {"Tetum Dili", "Tetun Prasa", "Tétum Praça", "Tetun-Dili", "Tetun-Prasa"}, } m["tdu"] = { } m["tdv"] = { } m["tdy"] = { } m["tea"] = { } m["teb"] = { } m["tec"] = { } m["ted"] = { } m["tee"] = { } m["tef"] = { } m["teg"] = { } m["teh"] = { other_names = {"Patagón", "Chon", "Chon Patagón", "Chon Patagon", "Aoniken", "Aonikenk", "Inaquen", "Aonek'o 'ajen"}, } m["tei"] = { aliases = {"Aro-Mukweym-Orok"}, -- Glottolog's name varieties = {"Aro", "Mukweym", {"Orok", "Orok (Torricelli)"}}, } m["tek"] = { } m["tem"] = { other_names = {"Timne", "Themne", "KaThemne"}, } m["ten"] = { other_names = {"Tama"}, } m["teo"] = { } m["tep"] = { } m["teq"] = { } m["ter"] = { } m["tes"] = { } m["tet"] = { other_names = {"Tetun"}, } m["teu"] = { } m["tev"] = { } m["tew"] = { other_names = {"Tano", "Santa Clara Tewa", "San Ildefonso Tewa", "Tesuque Tewa", "Nambe Tewa", "Ohkay Owingeh", "Pojoaque"}, } m["tex"] = { } m["tey"] = { } m["tez"] = { other_names = {"Tin Sert"}, } m["tfi"] = { } m["tfn"] = { other_names = {"Tanaina"}, } m["tfo"] = { } m["tfr"] = { } m["tft"] = { } m["tga"] = { } m["tgb"] = { } m["tgc"] = { } m["tgd"] = { } m["tge"] = { } m["tgf"] = { other_names = {"Chalikha", "Chalipkha", "Tshali", "Tshalingpa"}, } m["tgh"] = { } m["tgi"] = { } m["tgn"] = { } m["tgo"] = { } m["tgp"] = { } m["tgq"] = { } m["tgr"] = { } m["tgs"] = { } m["tgt"] = { } m["tgu"] = { } m["tgv"] = { } m["tgw"] = { } m["tgx"] = { } m["tgy"] = { } m["thc"] = { } m["thd"] = { other_names = {"Thaayorre", "Thayore"}, } m["the"] = { } m["thf"] = { } m["thh"] = { } m["thi"] = { } m["thk"] = { } m["thl"] = { } m["thm"] = { aliases = {"Aheu", "So (Thavung)"}, } m["thn"] = { } m["thp"] = { } m["thq"] = { } m["thr"] = { } m["ths"] = { } m["tht"] = { } m["thu"] = { } m["thy"] = { } m["tic"] = { } m["tif"] = { varieties = {"Asbalmin", "Nuclear Tifal"}, } m["tig"] = { } m["tih"] = { } m["tii"] = { } m["tij"] = { } m["tik"] = { } m["til"] = { } m["tim"] = { varieties = {"Central Timbe", "North Timbe", "South Timbe"}, } m["tin"] = { } m["tio"] = { } m["tip"] = { } m["tiq"] = { } m["tis"] = { } m["tit"] = { } m["tiu"] = { } m["tiv"] = { other_names = {"Tivi"}, } m["tiw"] = { } m["tix"] = { other_names = {"Isleta", "Isleta Tiwa", "Isleta Pueblo", "Sandia", "Sandia Tiwa", "Sandia Pueblo"}, } m["tiy"] = { aliases = {"Teduray"}, } m["tiz"] = { } m["tja"] = { } m["tjg"] = { } m["tji"] = { } m["tjl"] = { aliases = {"Red Tai (Myanmar)", "Red Shan", "Shan Bamar", "Shan Kalee", "Shan Ni", "Tai Laeng", "Tai Lai", "Tai Leng", "Tai Nai", "Tai Naing"}, } m["tjm"] = { } m["tjn"] = { } m["tjs"] = { } m["tju"] = { } m["tjw"] = { other_names = {"Djabwurrung", "Djab Wurrung", "Tjapwurrung"}, } m["tka"] = { } m["tkb"] = { } m["tkd"] = { } m["tke"] = { } m["tkf"] = { } m["tkl"] = { } m["tkm"] = { } m["tkn"] = { aliases = {"Toku-no-Shima", "Toku-No-Shima"}, } m["tkp"] = { } m["tkq"] = { } m["tkr"] = { other_names = {"Caxur", "Tsaxur"}, } m["tks"] = { other_names = {"Takestani"}, } m["tkt"] = { } m["tku"] = { } m["tkv"] = { other_names = {"Pano"}, } m["tkw"] = { } m["tkx"] = { } m["tkz"] = { } m["tla"] = { } m["tlb"] = { varieties = {"Boëng", "Dodinga", "Nuclear Tobelo"}, } m["tlc"] = { other_names = {"Yecuatla Totonac"}, } m["tld"] = { } m["tlf"] = { varieties = {"Feramin", "Nuclear Telefol"}, } m["tlg"] = { } m["tlh"] = { } m["tli"] = { } m["tlj"] = { } m["tlk"] = { } m["tll"] = { varieties = {"Indanga"}, } m["tlm"] = { } m["tln"] = { } m["tlo"] = { } m["tlp"] = { } m["tlq"] = { } m["tlr"] = { } m["tls"] = { } m["tlt"] = { other_names = {"Sou Nama"}, } m["tlu"] = { } m["tlv"] = { other_names = {"Soboyo"}, } m["tlx"] = { } m["tly"] = { aliases = {"Talyshi", "Talishi", "Taleshi", "Tolashi"}, } m["tma"] = { aliases = {"Tama"}, } m["tmb"] = { } m["tmc"] = { } m["tmd"] = { varieties = {"Central Waibuk", "North Waibuk", "South Waibuk"}, } m["tme"] = { } m["tmf"] = { } m["tmg"] = { } m["tmh"] = { aliases = {"Tamashek", "Tamahaq", "Tamajaq", "Tamasheq"}, } m["tmi"] = { } m["tmj"] = { } m["tml"] = { } m["tmm"] = { } m["tmn"] = { other_names = {"Taman"}, } m["tmo"] = { } m["tmq"] = { } m["tms"] = { } m["tmt"] = { } m["tmu"] = { varieties = {{"Foi", "Foi (Iau)"}, "Nuclear Iau", "Turu"}, } m["tmv"] = { other_names = {"Tembo"}, } m["tmy"] = { } m["tmz"] = { } m["tna"] = { } m["tnb"] = { } m["tnc"] = { } m["tnd"] = { } m["tne"] = { } m["tng"] = { } m["tnh"] = { } m["tni"] = { } m["tnk"] = { } m["tnl"] = { } m["tnm"] = { varieties = {"Tepera", "Yewena-Yongsu", "Yokari"}, } m["tnn"] = { } m["tno"] = { } m["tnp"] = { } m["tnq"] = { aliases = {"Taino"}, } m["tnr"] = { } m["tns"] = { } m["tnt"] = { } m["tnu"] = { } m["tnv"] = { aliases = {"Tangchangya", "Tonchongya", "Tongchongya"}, } m["tnw"] = { } m["tnx"] = { } m["tny"] = { } m["tnz"] = { other_names = {"Tonga"}, } m["tob"] = { other_names = {"Chaco Sur", "Namqom", "Qom", "Toba Qom"}, } m["toc"] = { } m["tod"] = { } m["tof"] = { varieties = {"Waidoro", "Western Gizra"}, } m["tog"] = { other_names = {"Kitonga", "Chitonga", "Siska", "Sisya", "Tonga", "Western Nyasa"}, } m["toh"] = { other_names = {"Gitonga", "Tonga"}, } m["toi"] = { other_names = {"Tonga", "Chitonga", "Plateau Tonga", "Zambezi"}, } m["toj"] = { } m["tok"] = { } m["tol"] = { other_names = {"Smith River", "Smith River Tolowa"}, } m["tom"] = { } m["too"] = { } m["top"] = { } m["toq"] = { } m["tor"] = { } m["tos"] = { } m["tou"] = { } m["tov"] = { } m["tow"] = { other_names = {"Towa"}, } m["tox"] = { } m["toy"] = { } m["toz"] = { } m["tpa"] = { } m["tpc"] = { } m["tpe"] = { } m["tpf"] = { } m["tpg"] = { aliases = {"Kula (Indonesia)"}, -- Glottolog's name varieties = {"Arumaka", "Iramang", "Kulatela", "Kula Watena", "Larena", "Nuclear Kula", "Sumang", "Watena"}, } m["tpi"] = { aliases = {"Melanesian Pidgin English", "Neo-Melanesian", "New Guinea Pidgin"}, } m["tpj"] = { } m["tpk"] = { other_names = {"Coastal Tupi", "Tupiniquim"}, } m["tpl"] = { } m["tpm"] = { } m["tpn"] = { } m["tpo"] = { } m["tpp"] = { } m["tpq"] = { } m["tpr"] = { } m["tpt"] = { } m["tpu"] = { } m["tpv"] = { } m["tpw"] = { aliases = {"Classical Tupi"}, } m["tpx"] = { } m["tpy"] = { } m["tpz"] = { } m["tqb"] = { } m["tql"] = { } m["tqm"] = { } m["tqn"] = { } m["tqo"] = { varieties = {"Kaipi", "Nuclear Toaripi", "Sepoe"}, } m["tqp"] = { } m["tqq"] = { } m["tqr"] = { } m["tqt"] = { } m["tqu"] = { } m["tqw"] = { } m["tra"] = { } m["trb"] = { } m["trc"] = { } m["trd"] = { } m["tre"] = { } m["trf"] = { } m["trg"] = { } m["trh"] = { } m["tri"] = { other_names = {"Trio", "Tiriyó", "Tarano"}, } m["trj"] = { } m["trl"] = { } m["trm"] = { } m["trn"] = { other_names = {"Trinitario Moxos", "Moxo", "Moxos", "Mojo", "Moxa"}, } m["tro"] = { other_names = {"Tarao Naga", "Taraotrong", "Tarau"}, } m["trp"] = { } m["trq"] = { } m["trr"] = { } m["trs"] = { } m["trt"] = { } m["tru"] = { } m["trv"] = { other_names = {"Seediq"}, } m["trw"] = { } m["trx"] = { other_names = {"Tringus", "Tringgus-Sembaan Bidayuh"}, } m["try"] = { aliases = {"Tai Turung"}, } m["trz"] = { } m["tsa"] = { } m["tsb"] = { } m["tsc"] = { } m["tsd"] = { } m["tse"] = { } m["tsg"] = { aliases = {"Sūg"}, } m["tsh"] = { } m["tsi"] = { } m["tsj"] = { other_names = {"Sharchop"}, } m["tsl"] = { } m["tsm"] = { } m["tsp"] = { } m["tsq"] = { } m["tsr"] = { } m["tss"] = { } m["tsu"] = { } m["tsv"] = { } m["tsw"] = { } m["tsx"] = { } m["tsy"] = { } m["tta"] = { } m["ttb"] = { } m["ttc"] = { } m["ttd"] = { pseudo_families = "paa", } m["tte"] = { other_names = {"Tubetube"}, } m["ttf"] = { } m["ttg"] = { } m["tth"] = { } m["tti"] = { } m["ttj"] = { aliases = {"Rutooro"}, } m["ttk"] = { aliases = {"Totoró"}, } m["ttl"] = { } m["ttm"] = { } m["ttn"] = { } m["tto"] = { } m["ttp"] = { } m["ttr"] = { } m["tts"] = { aliases = {"Isanese", "Isaan", "Issan", "Northeastern Thai"}, } m["ttt"] = { other_names = {"Caucasian Tat", "Muslim Tat", "Armeno-Tat"}, } m["ttu"] = { } m["ttv"] = { } m["ttw"] = { other_names = {"Tutoh"}, } m["tty"] = { } m["ttz"] = { } m["tua"] = { } m["tub"] = { } m["tuc"] = { } m["tud"] = { } m["tue"] = { } m["tuf"] = { } m["tug"] = { } m["tuh"] = { } m["tui"] = { } m["tuj"] = { varieties = {"Kusuri", "Teluk Lili"}, } m["tul"] = { } m["tum"] = { } m["tun"] = { } m["tuo"] = { } m["tuq"] = { other_names = {"Teda"}, } m["tus"] = { } m["tuu"] = { } m["tuv"] = { } m["tux"] = { } m["tuy"] = { } m["tuz"] = { } m["tva"] = { } m["tvd"] = { } m["tve"] = { } m["tvk"] = { } m["tvl"] = { } m["tvm"] = { } m["tvn"] = { } m["tvo"] = { } m["tvs"] = { } m["tvt"] = { } m["tvu"] = { other_names = {"Tunen-Aling'a"}, } m["tvw"] = { } m["tvx"] = { } m["tvy"] = { other_names = {"Bidau Creole Portuguese"}, } m["twa"] = { } m["twb"] = { } m["twc"] = { } m["twe"] = { aliases = {"Tewa"}, varieties = {"Deing", "Lebang", "Madar"}, } m["twf"] = { aliases = {"Northern Tiwa"}, } m["twg"] = { } m["twh"] = { aliases = {"Tai Khao", "White Tai"}, } m["twm"] = { } m["twn"] = { } m["two"] = { } m["twp"] = { } m["twq"] = { } m["twr"] = { } m["twt"] = { } m["twu"] = { } m["tww"] = { } m["twy"] = { other_names = {"Taboyan"}, } m["txa"] = { } m["txb"] = { other_names = {"West Tocharian", "Kuchean"}, } m["txc"] = { } m["txe"] = { } m["txg"] = { } m["txj"] = { } m["txh"] = { } m["txi"] = { } m["txm"] = { } m["txn"] = { } m["txo"] = { } m["txq"] = { } m["txr"] = { } m["txs"] = { } m["txt"] = { varieties = {"Bubis", "Esaun", "Komasma", "Pirabanak", "Senggo", "Tiau", "Vakam"}, } m["txu"] = { } m["txx"] = { } m["tya"] = { } m["tye"] = { } m["tyh"] = { } m["tyi"] = { } m["tyj"] = { aliases = {"Tai Yo", "Tai Mène", "Tai Maen", "Tai Quy Chau"}, } m["tyl"] = { } m["tyn"] = { varieties = {"Central Kombai", "Tayan"}, } m["typ"] = { other_names = {"Gugu Thaypan", "Thaypan", "Kuku Thaypan", "Agu Alaya", "Awu Alaya", "Alaya", "Gugu-Rarmul", "Koko-Rarmul", "Rarmul"}, } m["tyr"] = { aliases = {"Red Tai (Vietnam)"}, } m["tys"] = { aliases = {"Sa Pa", "Tày Sa Pa", "Tai Sapa"}, } m["tyt"] = { } m["tyu"] = { } m["tyv"] = { aliases = {"Tyvan"}, } m["tyx"] = { } m["tyz"] = { aliases = {"Tay", "Tho", "Bao Yen", "Cao Bang"}, -- Both Bao Lac and Trung Khanh are located in Cao Bang. varieties = {"Central Tày", "Eastern Tày", "Northern Tày", "Southern Tày", "Tày Bao Lac", "Tày Trung Khanh"}, } m["tza"] = { } m["tzh"] = { } m["tzj"] = { aliases = {"Tzutujil"}, } m["tzl"] = { } m["tzm"] = { } m["tzn"] = { } m["tzo"] = { } m["tzx"] = { other_names = {"Karawari"}, } return m ekeg7nuvbc7lorc44voec43cbc8p7yf Module:languages/data/3/s/extra 828 33117 176664 174771 2026-04-26T11:57:50Z Yivan000 4078 enwikt parity 176664 Scribunto text/plain local m = {} m["saa"] = { } m["sab"] = { aliases = {"Bugle", "Murire", "Muoy"}, varieties = {"Sabanero", {"Bokotá", "Bogota"}}, } m["sac"] = { varieties = {{"Sac", "Sauk"}, "Kickapoo", {"Mesquakie", "Meskwaki"}}, } m["sad"] = { } m["sae"] = { } m["saf"] = { } m["sah"] = { aliases = {"Sakha"}, } m["saj"] = { varieties = {"Pa'disua", "Tala'i"}, } m["sak"] = { aliases = {"Shake"}, } m["sam"] = { aliases = {"Samaritan"}, } m["sao"] = { } m["saq"] = { } m["sar"] = { aliases = {"Sarabeca", "Saraveka", "Sarave"}, } m["sas"] = { } m["sat"] = { } m["sau"] = { } m["sav"] = { } m["saw"] = { } m["sax"] = { aliases = {"Saa"}, } m["say"] = { } m["saz"] = { } m["sba"] = { } m["sbb"] = { } m["sbc"] = { aliases = {"Kele (New Guinea)", "Kele (Papua New Guinea)", "Kele"}, } m["sbd"] = { } m["sbe"] = { aliases = {"Saliba"}, } m["sbf"] = { aliases = {"Mikeyir", "Mekeyir", "Mekeyer"}, } m["sbg"] = { } m["sbh"] = { -- I'm guessing these are varieties, since they represent the names of the two islands on which the language -- (Sori-Harengan) is spoken. varieties = {"Sori", "Harengan"}, } m["sbi"] = { } m["sbj"] = { } m["sbk"] = { } m["sbl"] = { } m["sbm"] = { } m["sbn"] = { } m["sbo"] = { } m["sbp"] = { } m["sbq"] = { aliases = {"Sileibi"}, } m["sbr"] = { } m["sbs"] = { } m["sbt"] = { pseudo_families = "paa", } m["sbu"] = { } m["sbv"] = { } m["sbw"] = { } m["sbx"] = { } m["sby"] = { } m["sbz"] = { } m["scb"] = { } m["sce"] = { aliases = {"Santa"}, } m["scf"] = { } m["scg"] = { } m["sch"] = { -- Alias vs. variety here is a guess; Wikipedia says "Sakachep also known as Khelma" and says the ethnicity is -- "The Khelma, also known as the Sakachep" but Ethnologue also says "dialects are Khelma, Thangachep, and Sakachep" -- which may be bogus. aliases = {"Khelma"}, } m["sci"] = { } m["sck"] = { } m["scl"] = { -- These represent different valleys where the language is spoken, hence likely distinct dialects. varieties = {"Gilgiti", "Astori", "Chilasi"}, } m["scn"] = { } m["sco"] = { aliases = {"Lowland Scots"}, } m["scp"] = { aliases = {"Hyolmo", "Yohlmo", "Helambu Sherpa"}, -- Wikipedia says Syuba/Kagate (code skw) may be close enough to be a dialect. Langtang is mutually intelligible -- with Yolmo but often considered a separate language; yet we don't have a code for it so I'm putting it as a -- variety. varieties = {"Melamchi Valley Yolmo", "Langtang", "Lamjung Yolmo", "Ilam Yolmo"}, } m["scq"] = { aliases = {"Chung"}, } m["scs"] = { } m["scu"] = { } m["scv"] = { } m["scw"] = { } m["scx"] = { aliases = {"Siculian"}, } m["scz"] = { aliases = {"Shaetlan", "Shetlandic"}, } m["sda"] = { } m["sdb"] = { aliases = {"Shabaki"}, } m["sdc"] = { } m["sde"] = { } m["sdf"] = { aliases = {"Sarliya"}, } m["sdg"] = { } m["sdh"] = { -- Kermanshahi can refer either to Southern Kurdish as a whole or to the prestige dialect. We distinct the latter -- as Kermanshani with an n following ''Habib Borjian, “KERMANSHAH vii. Languages and Dialects,” Encyclopædia -- Iranica, Vol. 16, Fasc. 3, New York, 2017, pp. 327-331.'' but this may not make a lot of sense. aliases = {"Kermanshahi", "Kermanshahi Kurdish"}, -- We classify Laki as a separate language but it is often considered a dialect of Southern Kurdish. varieties = {{"Kermanshani", "Kermanshani Kurdish"}, {"Kolya'i", "Kolyā'i"}, "Zangana", "Kalhori", {"Sanjābi", "Sanjabi"}, {"Feyli", "Fayli", "Ilāmi", "Ilami"}}, } m["sdj"] = { } m["sdk"] = { } m["sdl"] = { } m["sdm"] = { } m["sdn"] = { } m["sdo"] = { aliases = {"Bukar-Sadong"}, } m["sdp"] = { } m["sdr"] = { } m["sds"] = { } m["sdu"] = { } m["sdx"] = { } m["sea"] = { } -- seb is a duplicate code of spp m["sec"] = { } m["sed"] = { } m["see"] = { } m["sef"] = { } m["seg"] = { } m["seh"] = { varieties = {{"Malawi Sena", "Malawian Sena"}, {"Nuclear Sena", "Mozambican Sena"}}, -- includes [swk] for Malawian Sena, but [bwg] for Barwe is distinct } m["sei"] = { } m["sej"] = { } m["sek"] = { aliases = {"Tsek'ene"}, varieties = {{"Kwadacha", "Kwadacha Sekani", "Kwadacha Tsek'ene"}}, } m["sen"] = { } m["seo"] = { aliases = {"Asabano", -- Glottolog's name "Suarmin", -- old ISO name "Asabo", -- used in Foley (2005) and Foley (2018); may be a typo "Duranmin", -- in e.g. Laycock and Z'graggen (1975), Conrad (1988) }, pseudo_families = "paa", } m["sep"] = { } m["seq"] = { } m["ser"] = { -- Wikipedia treats Kitanemuk as a separate language but it says it may have been a dialect (it is extinct). varieties = {"Kitanemuk"}, } m["ses"] = { aliases = {"Koyraboro Senni Songhay", "Koyraboro Senni Songhai", "Koroboro Senni"}, -- other_names = {"Eastern Songhay"}, -- this is a geographic grouping of Songhay languages including Koyraboro Senni } m["set"] = { varieties = {"Central Sentani", "East Sentani", "West Sentani"}, } m["seu"] = { } m["sev"] = { } m["sew"] = { } m["sey"] = { } m["sez"] = { aliases = {"Senthang"}, } m["sfb"] = { } m["sfe"] = { } m["sfm"] = { } m["sfs"] = { } m["sfw"] = { } m["sga"] = { } m["sgb"] = { } m["sgc"] = { } m["sgd"] = { } m["sge"] = { } m["sgg"] = { aliases = {"Swiss German Sign Language"}, } m["sgh"] = { } m["sgi"] = { } m["sgk"] = { } m["sgm"] = { } m["sgp"] = { } m["sgr"] = { aliases = {"Sangsari"}, } m["sgs"] = { } m["sgt"] = { aliases = {"Brokpa"}, } m["sgu"] = { } m["sgw"] = { } m["sgx"] = { } m["sgy"] = { -- FIXME: Sanglich is the name of the language as used in Tajikistan, while Sanglechi is the name as used in -- Afghanistan. Hence they could be different dialects, but provisionally I'm classifying them as aliases. aliases = {"Sanglich"}, -- "Warduji" may not exist at all } m["sgz"] = { } m["sha"] = { } m["shb"] = { aliases = {"Yanam", "Yanam-Ninam", "Xiriana", "Xiriâna", "Shiriana", "Xirixana", "Shirishana"}, } m["shc"] = { } m["shd"] = { } m["she"] = { } m["shg"] = { aliases = {"Shwa", "Shwakhwe"}, } m["shh"] = { aliases = {"Shoshoni"}, varieties = {{"Gosiute", "Goshute"}, {"Eastern Shoshone", "Eastern Shoshoni"}, {"Western Shoshone", "Western Shoshoni"}, {"Northern Shoshone", "Northern Shoshoni"}}, } m["shi"] = { aliases = {"Tachelhit", "Chleuh", "Shilha", "Tashlhiyt", "Tashelhit Berber", "Tachelhit Berber", "Tashlhiyt Berber", "Soussian"}, } m["shj"] = { } m["shk"] = { } m["shl"] = { } m["shm"] = { } m["shn"] = { aliases = {"Kwam Tai", "Kam Tai", "Tai Yai"}, } m["sho"] = { } m["shp"] = { } m["shq"] = { } m["shr"] = { } m["shs"] = { } m["sht"] = { } m["shu"] = { } m["shv"] = { aliases = {"Jibbali"}, } m["shw"] = { } m["shx"] = { aliases = {"Ho Ne", "Ho Nte"}, } m["shy"] = { aliases = {"Shawiya Berber", "Chaouïa", "Tacawit"}, } m["shz"] = { } m["sia"] = { } m["sib"] = { } m["sid"] = { aliases = {"Sidaama"}, } m["sie"] = { } m["sif"] = { } m["sig"] = { } m["sih"] = { aliases = {"Sishee", "Zire"}, } m["sii"] = { } m["sij"] = { } m["sik"] = { } m["sil"] = { } m["sim"] = { aliases = {"Mende", "Seim", -- our old name }, } m["sip"] = { aliases = {"Bhutia", "Dranjongke", "Dranjoke", "Denjongka", "Denzongpeke", "Denzongke"}, } m["siq"] = { } m["sir"] = { } m["sis"] = { } m["siu"] = { aliases = {"Galu"}, -- Glottolog's name } m["siv"] = { } m["siw"] = { varieties = {"Baitsi"}, } m["six"] = { aliases = {"Garia", "Kari"}, } m["siy"] = { } m["siz"] = { aliases = {"Siwa", "Siwan", "Siwa Berber"}, } m["sja"] = { } m["sjb"] = { } m["sjc"] = { aliases = {"Shao-Jiang Min", "Shaojiang Chinese", "Shao-Jiang Chinese"}, } m["sjd"] = { } m["sje"] = { } m["sjg"] = { } m["sjk"] = { } m["sjl"] = { -- Per Wikipedia, these are two languages. There is also a yet more divergent variety Bangru (Northern Miji). varieties = { {"Western Miji", "Dmay", "Dhammai", "Dhəmmai", "Sajalang", "Sajolang"}, {"Eastern Miji", "Namrai", "Nəmrai"}, } } m["sjm"] = { } m["sjn"] = { } m["sjo"] = { aliases = {"Sibo", "Sibe", "Xibo"}, } m["sjp"] = { } m["sjr"] = { } m["sjs"] = { -- from Wikipedia aliases = {"Senhaja De Srair", "Sanhaja de Srair", "Senhajiyya", "Chelha", "Chelha n Senhaja", "Chelha n Isenhajen", "Tamazight n Senhaja", "Tasenhaji"}, } m["sjt"] = { } m["sju"] = { } m["sjw"] = { } -- [ska] Skagit is treated as part of [lut] Lushootseed m["skb"] = { } m["skc"] = { aliases = {"Sauk"}, } m["skd"] = { } m["ske"] = { aliases = {"Seke"}, } m["skf"] = { aliases = {"Mekens", "Mekem", "Amniapé"}, -- Glottolog refers to the third variety as Siokweriat corresponding to Koarategayat etc. varieties = {{"Sakirabiá", "Sakïrabiát", "Sakiráp", "Sakurabiat"}, {"Koaratira", "Guaratira", "Kanoé"}, {"Koarategayat", "Guaratégaya", "Guarategaja", "Warategáya"}}, } m["skh"] = { } m["ski"] = { other_names = {"Sikanese"}, } m["skj"] = { -- compare 'ths' } m["skk"] = { } m["skm"] = { other_names = {"Kutong"}, } m["skn"] = { } m["sko"] = { } m["skp"] = { } m["skq"] = { } m["skr"] = { other_names = {"Siraiki", "Seraiki"}, } m["sks"] = { aliases = {"Maya"}, other_names = {"Banar", "Suaro", "Turutap", "Yakiba"}, varieties = {"Pila", "Saki"}, } m["skt"] = { other_names = {"Kisakata", "Lesa", "Odual", "Saka", "Bai", "Kibai", "Bay", "Kibay", "Djia", "Dia", "Dja", "Kidjia", "Wadia", "Tuku", "Ketu", "Batow"}, } m["sku"] = { } m["skv"] = { } m["skw"] = { other_names = {"Skepi Dutch", "Skepi Dutch Creole", "Essequibo Dutch"}, } m["skx"] = { } m["sky"] = { aliases = {"Sikayana"}, } m["skz"] = { } m["slc"] = { other_names = {"Saliba", "Sáliba", "Saliva", "Sáliva"}, } m["sld"] = { aliases = {"Sissala"}, } m["sle"] = { } m["slf"] = { other_names = {"Swiss Italian Sign Language"}, } m["slg"] = { } -- [slh] Southern Puget Sound Salish is treated as part of [lut] Lushootseed -- "sli" "Silesian German" IS SUBSUMED INTO "gmw-ecg" "East Central German" m["slj"] = { } m["sll"] = { varieties = {"Keri", {"Salt", "Salt (Salt-Yui)"}}, } m["slm"] = { aliases = {"Siyama"}, } m["sln"] = { } m["slp"] = { other_names = {"Solor", "Solorese"}, } m["slr"] = { } m["sls"] = { } m["slt"] = { } m["slu"] = { } m["slw"] = { } m["slx"] = { } m["sly"] = { } m["slz"] = { } m["sma"] = { } m["smb"] = { } m["smc"] = { } m["smd"] = { } m["smf"] = { } m["smg"] = { } m["smh"] = { } m["smj"] = { } m["smk"] = { other_names = {"Binubolinao"}, } m["sml"] = { } m["smm"] = { } m["smn"] = { } m["smp"] = { other_names = {"Samaritan"}, } m["smq"] = { } m["smr"] = { other_names = {"Simalur", "Devayan", "Defayan", "Simolol", "Simulul", "Simeuloë"}, } m["sms"] = { } m["smt"] = { } m["smu"] = { } m["smv"] = { } m["smw"] = { } m["smx"] = { } m["smy"] = { } m["smz"] = { varieties = {"Koopei", "Mainoki"}, } m["snb"] = { } m["snc"] = { } m["sne"] = { } m["snf"] = { } m["sng"] = { other_names = {"Sanga", "Luba-Sanga", "Sanga (Democratic Republic of Congo)", "Sanga (Democratic Republic of the Congo)"}, } m["sni"] = { } m["snj"] = { } m["snk"] = { } m["snl"] = { } m["snm"] = { } m["snn"] = { } -- [sno] Snohomish is treated as part of [lut] Lushootseed m["snp"] = { varieties = {"Alango", "Fowe", "Kemanimowe", "Keto", "Kolepa", "Komoigaleka", "Komongu", "Laiya", "Lambau", "Olumba", {"Ona", "Ona (Papua New Guinea)"}, "Wando", "Yamofowe", "Yandime"}, } m["snq"] = { other_names = {"Chango"}, } m["snr"] = { aliases = {"Sihan (Gum)"}, -- per Glottolog } m["sns"] = { } m["snu"] = { } m["snv"] = { } m["snw"] = { } m["snx"] = { } m["sny"] = { varieties = {"Hiyowe", "Saniyo"}, } m["snz"] = { aliases = {"Kow", "Sinsauru"}, -- Sinsauru is an alias per Wikipedia varieties = {"Asas", "Saipa"}, } m["soa"] = { aliases = {"Lao Song", "Song"}, } m["sob"] = { } m["soc"] = { other_names = {"So"}, } m["sod"] = { } m["soe"] = { } m["sog"] = { } m["soh"] = { other_names = {"Aka", "Sillok"}, } m["soi"] = { other_names = {"Sonaha", "Sonahaa", "Sunah", "Sunha"}, } m["sok"] = { } m["sol"] = { } m["soo"] = { other_names = {"Songo", "Tsong"}, } m["sop"] = { } m["soq"] = { } m["sor"] = { } m["sos"] = { other_names = {"Seeku", "Sembla", "Sambla"}, } m["sou"] = { aliases = {"Dambro", "Pak Tai"}, } m["sov"] = { } m["sow"] = { } m["sox"] = { other_names = {"So", "Sso", "Shwo", "Fo"}, } m["soy"] = { } m["soz"] = { } m["spb"] = { other_names = {"Sepa"}, } m["spc"] = { other_names = {"Kaliana", "Kariana", "Kaliána", "Sapä́", "Sape"}, } m["spd"] = { } m["spe"] = { other_names = {"Sepa", "Sepa (Papua New Guinea)"}, } m["spg"] = { } m["spi"] = { } m["spk"] = { } m["spl"] = { varieties = {"North Selepet", "South Selepet"}, } m["spm"] = { } m["spn"] = { } m["spo"] = { other_names = {"Montana Salish", "Salish", "Séliš", "Kalispel-Pend d'oreille", "Kalispel"}, } m["spp"] = { other_names = {"Suppire", "Supyire Senoufo", "Supyire Senufo", "Shempire Senoufo", "Shempire"}, } m["spr"] = { } m["sps"] = { } m["spt"] = { } m["spu"] = { } m["spv"] = { other_names = {"Kosali", "Koshali"}, } m["spx"] = { other_names = {"Old Sabellic", "Old Sabellian", "Middle Adriatic", "Central Adriatic"}, } m["spy"] = { } m["sqa"] = { } m["sqh"] = { } m["sqk"] = { } m["sqm"] = { } m["sqn"] = { } m["sqo"] = { } m["sqq"] = { } m["sqr"] = { } m["sqs"] = { } m["sqt"] = { aliases = {"Socotri"}, } m["squ"] = { } m["sra"] = { } m["srb"] = { } m["sre"] = { } m["srf"] = { } m["srg"] = { } m["srh"] = { } m["sri"] = { } m["srk"] = { aliases = {"Serudung"}, } m["srl"] = { varieties = {"Eastern Isirawa", "Western Isirawa"}, } m["srm"] = { } m["srn"] = { } m["srq"] = { } m["srr"] = { } m["srs"] = { aliases = {"Sarcee", "Sarsi", "Tsuu T'ina", "Tsu T'ina"}, } m["srt"] = { } m["sru"] = { other_names = {"Paíter", "Suruí-Paíter", "Suruí de Rondônia", "Suruí do Jiparaná"}, } m["srv"] = { } m["srw"] = { } m["srx"] = { } m["sry"] = { } m["srz"] = { } m["ssb"] = { } m["ssc"] = { } m["ssd"] = { } m["sse"] = { } m["ssf"] = { other_names = {"Sao"}, } m["ssg"] = { } m["ssh"] = { } m["ssi"] = { other_names = {"Bhilki"}, } m["ssj"] = { } m["ssk"] = { } m["ssl"] = { } m["ssm"] = { } m["sso"] = { } m["ssp"] = { } m["ssq"] = { } m["ssr"] = { other_names = {"Swiss French Sign Language"}, } m["sss"] = { } m["sst"] = { varieties = {"Dinga", "Gunangi", {"Kebai", "Kebai (Sinasina)"}, {"Kere", "Kere (Sinasina)"}, "Kondo", "Nimai", "Tabare"}, } m["ssu"] = { } m["ssv"] = { } m["ssx"] = { } m["ssy"] = { } m["ssz"] = { } m["stb"] = { } m["std"] = { } m["ste"] = { } m["stf"] = { } m["stg"] = { } m["sth"] = { other_names = {"Cant"}, } m["sti"] = { } m["stj"] = { } m["stk"] = { } m["stm"] = { } m["stn"] = { } m["sto"] = { } m["stp"] = { } m["stq"] = { other_names = {"East Frisian", "Eastern Frisian"}, -- Saterland F is a dialect of East F; see [[WT:T:ASTQ]] } m["str"] = { } m["sts"] = { } m["stt"] = { } m["stu"] = { } m["stv"] = { } m["stw"] = { } m["sty"] = { } m["sua"] = { } m["sub"] = { } m["suc"] = { } m["sue"] = { } m["sug"] = { } m["sui"] = { } m["suk"] = { } m["suo"] = { aliases = {"Bouni-Bobe", -- Glottolog "Sumo"}, -- alternative name in Wikipedia varieties = {"Bobe", "Bouni"}, -- per Glottolog } m["suq"] = { } m["sur"] = { other_names = {"Sura", "Mupun"}, } m["sus"] = { } m["sut"] = { } m["suv"] = { } m["suw"] = { } m["sux"] = { } m["suy"] = { } m["suz"] = { } m["sva"] = { } m["svb"] = { } m["svc"] = { } m["sve"] = { } m["svk"] = { } m["svm"] = { aliases = {"Slavo-molisano", "Molise Slavic", "Molise Croatian"}, } m["svs"] = { pseudo_families = "paa", } m["svx"] = { } m["swb"] = { } m["swf"] = { } m["swg"] = { } m["swi"] = { aliases = {"Ai Sui", "Shui", "Sui Li", "Suipo"}, } m["swj"] = { } m["swl"] = { } m["swm"] = { } m["swn"] = { other_names = {"Sawknah", "Fezzan", "Fogaha"}, } m["swo"] = { } m["swp"] = { } m["swq"] = { } m["swr"] = { } m["sws"] = { } m["swt"] = { varieties = {"Lalamana", "Lona", "Nuclear Sawila", "Salimana", "Sileba"}, } m["swu"] = { } m["sww"] = { } m["swx"] = { other_names = {"Zuruahá", "Suruaha", "Suruwaha", "Zuruaha", "Índios do Coxodoá"}, } m["swy"] = { } m["sxb"] = { } m["sxc"] = { } m["sxe"] = { } m["sxg"] = { other_names = {"Shuhi", "Xumi"}, } m["sxk"] = { } m["sxl"] = { other_names = {"Selian"}, } m["sxm"] = { } m["sxn"] = { } m["sxo"] = { } m["sxr"] = { } m["sxs"] = { } -- "sxu" "Upper Saxon" IS SUBSUMED INTO "gmw-ecg" "East Central German" m["sxw"] = { } m["sya"] = { } m["syb"] = { } m["syc"] = { } m["syi"] = { } m["syk"] = { } m["syl"] = { aliases = {"Sylhetti", "Sileti", "Siloti", "Syloti", "Syloty"} } m["sym"] = { } m["syn"] = { } m["syo"] = { } m["sys"] = { } m["syw"] = { aliases = {"Syuba"}, } m["syx"] = { other_names = {"Shamay", "Samayi", "Samay", "Shamayi"}, } m["syy"] = { } m["sza"] = { } m["szb"] = { varieties = {"Apmisibil", "Nuclear Ngalum", "Sibil"}, } m["szc"] = { } m["szd"] = { } m["sze"] = { } m["szg"] = { } m["szl"] = { aliases = {"Upper Silesian", "Silesian Polish", "Upper Silesian Polish"}, } m["szn"] = { } m["szp"] = { other_names = {"Inanwatan"}, } m["szv"] = { other_names = {"Isu", "Isu (Fako Division)", "Isuwu", "Suwu", "Subu"}, } m["szw"] = { other_names = {"Weda", "Weda-Sawai", "Kobe", "Faya-Mafa", "Messa-Dote"}, } m["szy"] = { } return m sb9mr4edjax9m9vqnxuuvf9p7zpvlqm Padron:vi-IPA 10 33748 176659 165484 2026-04-26T05:45:42Z Yivan000 4078 176659 wikitext text/x-wiki <includeonly>{{#invoke:vi-pron|ipa}}{{cln|vi|salitang may pagbigkas na IPA}}<!--TLCHANGE terms with IPA pronunciation --></includeonly><noinclude>{{dokumentasyon ng padron}}</noinclude> 7c8s53sibf1i33blvv10gcpvogq9fn0 Module:vi-pron 828 33749 176658 164610 2026-04-26T05:42:19Z Yivan000 4078 enwikt parity 176658 Scribunto text/plain local export = {} local m_str_utils = require("Module:string utilities") local IPA_module = "Module:IPA" local parse_utilities_module = "Module:parse utilities" local lang = require("Module:languages").getByCode("vi") local ugcodepoint = m_str_utils.gcodepoint local rsubn = m_str_utils.gsub local rsplit = m_str_utils.split local ulen = m_str_utils.len local ulower = m_str_utils.lower local rmatch = m_str_utils.match local usub = m_str_utils.sub local toNFC = mw.ustring.toNFC local toNFD = mw.ustring.toNFD local u = m_str_utils.char local function rsub(str, from, to) return (rsubn(str, from, to)) end local function track(page) require("Module:debug/track")("vi-pron/" .. page) return true end local function split_on_comma(term) if not term then return nil end if term:find(",%s") then return require(parse_utilities_module).split_on_comma(term) elseif term:find(",") then return rsplit(term, ",") else return {term} end end --àằầèềìòồờùừỳ áắấéếíóốớúứý ảẳẩẻểỉỏổởủửỷ ãẵẫẽễĩõỗỡũữỹ ạặậẹệịọộợụựỵ local tone_diacritics = { [u(0x0300)] = 2, -- grave accent = ◌̀ [u(0x0301)] = 3, -- acute accent = ◌́ [u(0x0309)] = 4, -- hook above = ◌̉ [u(0x0303)] = 5, -- tilde = ◌̃ [u(0x0323)] = 6, -- dot under = ◌̣ } local tone_contour = { ["hn"] = { [1] = "˧˧", [2] = "˨˩", ["3a"] = "˧˦", [3] = "˧˦", [4] = "˧˩", [5] = "˦ˀ˥", [6] = "˧˨ʔ" }, ["hue"] = { [1] = "˧˧", [2] = "˦˩", ["3a"] = "˦˧˥", [3] = "˨˩˦", [4] = "˧˨", [5] = "˧˨", [6] = "˨˩ʔ" }, ["hcmc"] = { [1] = "˧˧", [2] = "˨˩", ["3a"] = "˦˥", [3] = "˦˥", [4] = "˨˩˦", [5] = "˨˩˦", [6] = "˨˩˨" }, } local initial_ipa = { ["b"] = { "ʔɓ", "ʔɓ", "ʔɓ" }, ["c"] = { "k", "k", "k" }, ["ch"] = { "t͡ɕ", "t͡ɕ", "c" }, ["d"] = { "z", "j", "j" }, ["đ"] = { "ʔɗ", "ʔɗ", "ʔɗ" }, ["g"] = { "ɣ", "ɣ", "ɣ" }, ["gh"] = { "ɣ", "ɣ", "ɣ" }, ["gi"] = { "z", "j", "j" }, ["gy"] = { "z", "j", "j" }, ["h"] = { "h", "h", "h" }, ["k"] = { "k", "k", "k" }, ["kh"] = { "x", "kʰ", "kʰ" }, ["l"] = { "l", "l", "l" }, ["m"] = { "m", "m", "m" }, ["n"] = { "n", "n", "n" }, ["ng"] = { "ŋ", "ŋ", "ŋ" }, ["ngh"] = { "ŋ", "ŋ", "ŋ" }, ["nh"] = { "ɲ", "ɲ", "ɲ" }, ["p"] = { "p", "p", "p" }, -- foreign ["ph"] = { "f", "f", "f" }, ["q"] = { "k", "k", "k" }, ["qu"] = { "kw", "kw", "w" }, ["r"] = { "z", "ʐ", "ɹ" }, ["ŕ"] = { "ɹ", "ɹ", "ɹ" }, ["s"] = { "s", "ʂ", "ʂ" }, ["t"] = { "t", "t", "t" }, ["th"] = { "tʰ", "tʰ", "tʰ" }, ["tr"] = { "t͡ɕ", "ʈ", "ʈ" }, ["v"] = { "v", "v", "v" }, ["x"] = { "s", "s", "s" }, ["z"] = { "z", "z", "z" }, [""] = { "ʔ", "ʔ", "ʔ" }, ["-"] = { "", "", "" }, } local mvi_initial_ipa = { ["ꞗ"] = "β", ["Ꞗ"] = "β", ["b"] = "ɓ", ["c"] = "k", ["ch"] = "c", ["d"] = "ð", ["đ"] = "ɗ", ["g"] = "ɣ", ["gh"] = "ɣ", ["gi"] = "ʝ", ["h"] = "h", ["k"] = "k", ["kh"] = "kʰ", ["l"] = "l", ["m"] = "m", ["n"] = "n", ["ng"] = "ŋ", ["ngh"] = "ŋ", ["nh"] = "ɲ", ["p"] = "p", ["ph"] = "pʰ", ["r"] = "ɹ", ["s"] = "ʂ", ["t"] = "t", ["th"] = "tʰ", ["tr"] = "ʈ", ["v"] = "w", ["x"] = "ɕ", } local final_ipa = { ["a"] = { "aː", "aː", "aː" }, ["ac"] = { "aːk̚", "aːk̚", "aːk̚" }, ["ach"] = { "ajk̟̚", "at̚", "at̚" }, ["ai"] = { "aːj", "aːj", "aːj" }, ["am"] = { "aːm", "aːm", "aːm" }, ["an"] = { "aːn", "aːŋ", "aːŋ" }, ["ań"] = { "aːn", "aːn", "aːn" }, ["ang"] = { "aːŋ", "aːŋ", "aːŋ" }, ["anh"] = { "ajŋ̟", "ɛɲ", "an" }, ["ao"] = { "aːw", "aːw", "aːw" }, ["ao᷄"] = { "awŋ͡m", "", "" }, ["ap"] = { "aːp̚", "aːp̚", "aːp̚" }, ["at"] = { "aːt̚", "aːk̚", "aːk̚" }, ["au"] = { "aw", "aw", "a(ː)w" }, ["ay"] = { "aj", "aj", "a(ː)j" }, ["ăc"] = { "ak̚", "ak̚", "ak̚" }, ["ăm"] = { "am", "am", "am" }, ["ăn"] = { "an", "aŋ", "aŋ" }, ["ăng"] = { "aŋ", "aŋ", "aŋ" }, ["ăp"] = { "ap̚", "ap̚", "ap̚" }, ["ăt"] = { "at̚", "ak̚", "ak̚" }, ["â"] = { "ə", "ə", "ə" }, ["âc"] = { "ək̚", "ək̚", "ək̚" }, ["âm"] = { "əm", "əm", "əm" }, ["ân"] = { "ən", "əŋ", "əŋ" }, ["âng"] = { "əŋ", "əŋ", "əŋ" }, ["âp"] = { "əp̚", "əp̚", "əp̚" }, ["ât"] = { "ət̚", "ək̚", "ək̚" }, ["âu"] = { "əw", "əw", "əw" }, ["ây"] = { "əj", "əj", "əj" }, ["e"] = { "ɛ", "ɛ", "ɛ" }, ["ec"] = { "ɛk̚", "ɛk̚", "ɛk̚" }, ["em"] = { "ɛm", "ɛm", "ɛm" }, ["en"] = { "ɛn", "ɛŋ", "ɛŋ" }, ["eń"] = { "ɛn", "ɛn", "ɛn" }, ["eng"] = { "ɛŋ", "ɛŋ", "ɛŋ" }, ["eo"] = { "ɛw", "ɛw", "ɛw" }, ["ep"] = { "ɛp̚", "ɛp̚", "ɛp̚" }, ["et"] = { "ɛt̚", "ɛt̚", "ɛk̚" }, ["ê"] = { "e", "ej", "ej" }, ["êc"] = { "ek̚", "ek̚", "ek̚" }, ["êch"] = { "əjk̟̚", "et̚", "əːt̚" }, ["êm"] = { "em", "em", "em" }, ["ên"] = { "en", "en", "əːn" }, ["êng"] = { "eŋ", "eŋ", "eŋ" }, ["ênh"] = { "əjŋ̟", "en", "əːn" }, ["êp"] = { "ep̚", "ep̚", "ep̚" }, ["êt"] = { "et̚", "et̚", "əːt̚" }, ["êu"] = { "ew", "ew", "ew" }, ["i"] = { "i", "ɪj", "ɪj" }, ["ia"] = { "iə", "iə", "iə" }, ["ic"] = { "ïk̟̚", "ïk̟̚", "ïk̟̚" }, ["ich"] = { "ïk̟̚", "ɨt̚", "ɨt̚" }, ["iêc"] = { "iək̚", "iək̚", "iək̚" }, ["iêm"] = { "iəm", "iəm", "im" }, ["iên"] = { "iən", "iəŋ", "iəŋ" }, ["iêng"] = { "iəŋ", "iəŋ", "iəŋ" }, ["iêp"] = { "iəp̚", "iəp̚", "ip̚" }, ["iêt"] = { "iət̚", "iək̚", "iək̚" }, ["iêu"] = { "iəw", "iw", "iw" }, ["im"] = { "im", "im", "im" }, ["in"] = { "in", "in", "ɨn" }, ["inh"] = { "ïŋ", "ɨn", "ɨn" }, ["ip"] = { "ip̚", "ip̚", "ip̚" }, ["it"] = { "it̚", "it̚", "ɨt̚" }, ["iu"] = { "iw", "iw", "iw" }, ["o"] = { "ɔ", "ɔ", "ɔ" }, ["oa"] = { "waː", "waː", "waː" }, ["oac"] = { "waːk̚", "waːk̚", "waːk̚" }, ["oach"] = { "wajk̟̚", "wat̚", "wat̚" }, ["oai"] = { "waːj", "waːj", "waːj" }, ["oam"] = { "waːm", "waːm", "waːm" }, ["oan"] = { "waːn", "waːŋ", "waːŋ" }, ["oang"] = { "waːŋ", "waːŋ", "waːŋ" }, ["oanh"] = { "wajŋ̟", "wɛɲ", "wan" }, ["oao"] = { "waːw", "waːw", "waːw" }, ["oap"] = { "waːp̚", "waːp̚", "waːp̚" }, ["oat"] = { "waːt̚", "waːk̚", "waːk̚" }, ["oay"] = { "waj", "waj", "waj" }, ["oă"] = { "wa", "wa", "wa" }, ["oăc"] = { "wak̚", "wak̚", "wak̚" }, ["oăm"] = { "wam", "wam", "wam" }, ["oăn"] = { "wan", "waŋ", "waŋ" }, ["oăng"] = { "waŋ", "waŋ", "waŋ" }, ["oăt"] = { "wat̚", "wak̚", "wak̚" }, ["oc"] = { "awk͡p̚", "awk͡p̚", "awk͡p̚" }, ["oe"] = { "wɛ", "wɛ", "wɛ" }, ["oem"] = { "wɛm", "wɛm", "wɛm" }, ["oen"] = { "wɛn", "wɛŋ", "wɛŋ" }, ["oeo"] = { "wɛw", "wɛw", "wɛw" }, ["oet"] = { "wɛt̚", "wɛk̚", "wɛk̚" }, ["oi"] = { "ɔj", "ɔj", "ɔj" }, ["om"] = { "ɔm", "ɔm", "ɔm" }, ["on"] = { "ɔn", "ɔŋ", "ɔŋ" }, ["ong"] = { "awŋ͡m", "awŋ͡m", "awŋ͡m" }, ["ooc"] = { "ɔk̚", "ɔk̚", "ɔk̚" }, ["oong"] = { "ɔŋ", "ɔŋ͡m", "ɔŋ" }, ["op"] = { "ɔp̚", "ɔp̚", "ɔp̚" }, ["ot"] = { "ɔt̚", "ɔk̚", "ɔk̚" }, ["ô"] = { "o", "ow", "ow" }, ["ôc"] = { "əwk͡p̚", "əwk͡p̚", "əwk͡p̚" }, ["ôi"] = { "oj", "oj", "oj" }, ["ôm"] = { "om", "om", "om" }, ["ôn"] = { "on", "oŋ", "oŋ" }, ["ôń"] = { "on", "on", "on" }, ["ông"] = { "əwŋ͡m", "əwŋ͡m", "əwŋ͡m" }, ["ôôc"] = { "ok̚", "ok̚", "ok̚" }, ["ôông"] = { "oŋ", "oŋ", "oŋ" }, ["ôp"] = { "op̚", "op̚", "op̚" }, ["ôt"] = { "ot̚", "ok̚", "ok̚" }, ["ơ"] = { "əː", "əː", "əː" }, ["ơi"] = { "əːj", "əːj", "əːj" }, ["ơm"] = { "əːm", "əːm", "əːm" }, ["ơn"] = { "əːn", "əːŋ", "əːŋ" }, ["ơng"] = { "əːŋ", "əːŋ", "əːŋ" }, ["ơp"] = { "əːp̚", "əːp̚", "əːp̚" }, ["ơt"] = { "əːt̚", "əːk̚", "əːk̚" }, ["u"] = { "u", "ʊw", "ʊw" }, ["ua"] = { "uə", "uə", "uə" }, ["uac"] = { "waːk̚", "waːk̚", "waːk̚" }, ["uach"] = { "wajk̟̚", "wat̚", "wat̚" }, ["uai"] = { "waːj", "waːj", "waːj" }, ["uan"] = { "waːn", "waːŋ", "waːŋ" }, ["uang"] = { "waːŋ", "waːŋ", "waːŋ" }, ["uanh"] = { "wajŋ̟", "wɛɲ", "wan" }, ["uao"] = { "waːw", "waːw", "waːw" }, ["uap"] = { "waːp̚", "waːp̚", "waːp̚" }, ["uat"] = { "waːt̚", "waːk̚", "waːk̚" }, ["uau"] = { "waw", "waw", "wa(ː)w" }, ["uay"] = { "waj", "waj", "waj" }, ["uă"] = { "wa", "wa", "wa" }, ["uăc"] = { "wak̚", "wak̚", "wak̚" }, ["uăm"] = { "wam", "wam", "wam" }, ["uăn"] = { "wan", "waŋ", "waŋ" }, ["uăng"] = { "waŋ", "waŋ", "waŋ" }, ["uăp"] = { "wap̚", "wap̚", "wap̚" }, ["uăt"] = { "wat̚", "wak̚", "wak̚" }, ["uâ"] = { "wə", "wə", "wə" }, ["uâc"] = { "wək̚", "wək̚", "wək̚" }, ["uân"] = { "wən", "wəŋ", "wəŋ" }, ["uâng"] = { "wəŋ", "wəŋ", "wəŋ" }, ["uât"] = { "wət̚", "wək̚", "wək̚" }, ["uây"] = { "wəj", "wəj", "wəj" }, ["uc"] = { "ʊwk͡p̚", "ʊwk͡p̚", "ʊwk͡p̚" }, ["ue"] = { "wɛ", "wɛ", "wɛ" }, ["uen"] = { "wɛn", "wɛŋ", "wɛŋ" }, ["ueo"] = { "wɛw", "wɛw", "wɛw" }, ["uep"] = { "wɛp̚", "wɛp̚", "wɛp̚" }, ["uet"] = { "wɛt̚", "wɛt̚", "wɛt̚" }, ["uê"] = { "we", "wej", "wej" }, ["uêch"] = { "wəjk̟̚", "wet̚", "wəːt̚" }, ["uên"] = { "wen", "wen", "wəːn" }, ["uênh"] = { "wəjŋ̟", "wen", "wəːn" }, ["uêt"] = { "wet̚", "wet̚", "wəːt̚" }, ["uêu"] = { "weu", "weu", "wew" }, ["ui"] = { "uj", "uj", "uj" }, ["uin"] = { "win", "win", "wɨn" }, ["uit"] = { "wit̚", "wit̚", "wit̚" }, ["um"] = { "um", "um", "ʊm" }, ["un"] = { "un", "un", "ʊwŋ͡m" }, ["ung"] = { "ʊwŋ͡m", "ʊwŋ͡m", "ʊwŋ͡m" }, ["unh"] = { "ujŋ̟", "un", "uwn" }, ["uo"] = { "wɔ", "wɔ", "wɔ" }, ["uô"] = { "uə", "uə", "uə" }, ["uôc"] = { "uək̚", "uək̚", "uək̚" }, ["uôi"] = { "uəj", "uj", "uj" }, ["uôm"] = { "uəm", "uəm", "uəm" }, ["uôn"] = { "uən", "uəŋ", "uəŋ" }, ["uông"] = { "uəŋ", "uəŋ", "uəŋ" }, ["uôt"] = { "uət̚", "uək̚", "uək̚" }, ["uơ"] = { "wəː", "wəː", "wəː" }, ["uơi"] = { "wəːj", "wəːj", "wəːj" }, ["uơn"] = { "wəːn", "wəːŋ", "wəːŋ" }, ["uơt"] = { "wəːt̚", "wəːk̚", "wəːk̚" }, ["up"] = { "up̚", "up̚", "ʊp̚" }, ["ut"] = { "ut̚", "ʊk̚", "ʊk͡p̚" }, ["uy"] = { "wi", "wɪj", "wɪj" }, ["uya"] = { "wiə", "wiə", "wiə" }, ["uych"] = { "wïk̟̚", "wɨk̟̚", "wɨt̚" }, ["uyn"] = { "win", "win", "wɨn" }, ["uich"] = { "wïk̟̚", "wɨk̟̚", "wɨt̚" }, ["uyê"] = { "wiə", "wiə", "wiə" }, ["uyên"] = { "wiən", "wiəŋ", "wiəŋ" }, ["uyênh"] = { "wiəŋ̟", "wiən", "wən" }, ["uyêt"] = { "wiət̚", "wiək̚", "wiək̚" }, ["uynh"] = { "wïŋ̟", "wɨn", "wɨn" }, ["uyp"] = { "wip̚", "wip̚", "wip̚" }, ["uyt"] = { "wit̚", "wɨt̚", "wɨt̚" }, ["uyu"] = { "wiw", "wiw", "wiw" }, ["ư"] = { "ɨ", "ɨ", "ɨ" }, ["ưa"] = { "ɨə", "ɨə", "ɨə" }, ["ưc"] = { "ɨk̚", "ɨk̚", "ɨk̚" }, ["ưi"] = { "ɨj", "ɨj", "ɨj" }, ["ưm"] = { "ɨm", "ɨm", "ɨm" }, ["ưn"] = { "ɨn", "ɨŋ", "ɨŋ" }, ["ưng"] = { "ɨŋ", "ɨŋ", "ɨŋ" }, ["ươc"] = { "ɨək̚", "ɨək̚", "ɨək̚" }, ["ươi"] = { "ɨəj", "ɨj", "ɨj" }, ["ươm"] = { "ɨəm", "ɨəm", "ɨəm" }, ["ươn"] = { "ɨən", "ɨəŋ", "ɨəŋ" }, ["ương"] = { "ɨəŋ", "ɨəŋ", "ɨəŋ" }, ["ươp"] = { "ɨəp̚", "ɨəp̚", "ɨəp̚" }, ["ươt"] = { "ɨət̚", "ɨək̚", "ɨək̚" }, ["ươu"] = { "iəw", "ɨəw", "ɨəw" }, ["ưt"] = { "ɨt̚", "ɨk̚", "ɨk̚" }, ["ưu"] = { "iw", "ɨw", "ɨw" }, ["y"] = { "i", "ɪj", "ɪj" }, ["yêc"] = { "iək̚", "iək̚", "iək̚" }, ["yêm"] = { "iəm", "iəm", "iəm" }, ["yên"] = { "iən", "iəŋ", "iəŋ" }, ["yêng"] = { "iəŋ", "iəŋ", "iəŋ" }, ["yêp"] = { "iəp̚", "iəp̚", "iəp̚" }, ["yêt"] = { "iət̚", "iək̚", "iək̚" }, ["yêu"] = { "iəw", "iw", "iw" }, } local varieties = { ["hn"] = { "Hà Nội", 1 }, ["hue"] = { "Huế", 2 }, ["hcmc"] = { "Hồ Chí Minh City", 3 }, } local hcmc_opt_w = { ["ch"] = true, ["d"] = true, ["l"] = true, ["s"] = true, ["t"] = true, ["th"] = true, ["tr"] = true, ["x"] = true, } local variations = { ["hn"] = { { "^ɹ", "z" }, { " ɹ", " z" } }, ["hue"] = { { "z", "j" }, { "ʂ", "s" }, { "awŋ͡m", "ɔŋ" } }, ["hcmc"] = { { "ʂ", "s" }, { "v", "j" }, { "z", "j" } }, } function export.ipa(frame) local respellings = {} local variety_respellings = {} local output = {} for variety, _ in pairs(varieties) do output[variety] = {} end local output_text = {} local iparams = { ["mvi"] = {type = "boolean"}, } local iargs = require("Module:parameters").process(frame.args, iparams) local params = { [1] = {list = true}, ["hn"] = {}, ["hue"] = {}, ["hcmc"] = {}, ["pagename"] = {}, -- for testing or documentation } local args = require("Module:parameters").process(frame:getParent().args, params) local pagename = args.pagename or mw.loadData("Module:headword/data").pagename local function canonicalize_respelling(respelling) if respelling:find("^raw:") then return {raw = (respelling:gsub("^raw:", ""))} else if respelling == "+" then respelling = pagename end return {respelling = rsub(rsub(ulower(respelling), "%-", " "), ",", "")} end end local mvi = iargs.mvi local raw_respellings = args[1] if not raw_respellings[1] then raw_respellings = {"+"} end for _, raw_respelling in ipairs(raw_respellings) do table.insert(respellings, canonicalize_respelling(raw_respelling)) end for variety, _ in pairs(varieties) do if args[variety] == "-" or (mvi and (variety == "hue" or variety == "hcmc")) then variety_respellings[variety] = false elseif args[variety] then local variety_raw_respellings = split_on_comma(args[variety]) variety_respellings[variety] = {} for _, raw_respelling in ipairs(variety_raw_respellings) do table.insert(variety_respellings[variety], canonicalize_respelling(raw_respelling)) end end end for variety, location in pairs(varieties) do if variety_respellings[variety] == false then -- skip variety output[variety] = false else local var_respellings = variety_respellings[variety] or respellings for i, spec in ipairs(var_respellings) do local pronunciation = {} if spec.raw then table.insert(output[variety], spec.raw) else for syllable in mw.text.gsplit(spec.respelling, " ", true) do local ipa = {} local initial, final, tone = nil, nil, nil tone = 1 syllable = toNFD(syllable) syllable = rsub(syllable, "([nr]́)", toNFC) for diac_pattern, tone_num in pairs(tone_diacritics) do if rmatch(syllable, diac_pattern) then tone = tone_num break end end syllable = toNFC(rsub(syllable, "[̣̀́̉̃]", "")) if syllable == "gi" or syllable == "gin" then syllable = rsub(syllable, "gi", "gii") end initial = rmatch(syllable, "^g[ꞗꞖbcdđgklmnpqrŕstvx]+") or rmatch(syllable, "^(g[hiy])[^cmnpt]") or rmatch(syllable, "^g") or rmatch(syllable, "^[ꞗꞖbcdđghklmnpqrŕstvxz]+") or "" initial = (rmatch(syllable, "^giê.") and syllable ~= "giên") and "d" or initial initial = rmatch(syllable, "qu$") and "qu" or initial final = usub(syllable, ulen(initial) + 1, -1) local ipa, seq, detoned = {}, location[2], "" if mvi then if mvi_initial_ipa[initial] then table.insert(ipa, mvi_initial_ipa[initial]) else local initial_cluster = "" for cc in ugcodepoint(initial) do local ch = u(cc) initial_cluster = initial_cluster .. mvi_initial_ipa[ch] end table.insert(ipa, initial_cluster) end elseif initial_ipa[initial] then table.insert(ipa, initial_ipa[initial][seq]) else local initial_cluster = "" initial = rsub(initial, "r$", "ŕ") for cc in ugcodepoint(initial) do local ch = u(cc) initial_cluster = initial_cluster .. initial_ipa[ch][seq] end initial_cluster = rsub(initial_cluster, "([cgknpt]h)", function(digraph) return initial_ipa[digraph][seq] end) table.insert(ipa, initial_cluster) end if final_ipa[final] then detoned = rsub(final_ipa[final][seq], "^([wu].+)", function(nucleus) if initial .. final == "qua" then nucleus = final_ipa["oa"][seq] elseif initial .. final == "qui" then nucleus = final_ipa["uy"][seq] end if variety == "hcmc" then if initial == "q" then nucleus = rsub(nucleus, "^u", "w") end if hcmc_opt_w[initial] then nucleus = rsub(nucleus, "^w", "⁽ʷ⁾") end end return nucleus end) table.insert(ipa, detoned) else error(("Unrecognised final: \"%s\""):format(final)) end if tone == 3 and rmatch(final, "[chmngpt]") then tone = "3a" end table.insert(ipa, tone_contour[variety][tone]) table.insert(pronunciation, table.concat(ipa, "")) end table.insert(output[variety], "[" .. table.concat(pronunciation, " ") .. "]") end end end end for variety, location in pairs(varieties) do if mvi and variety == "hn" then location[1] = "Đông Kinh" end if output[variety] ~= false then local ipa_items = {} for i, out in ipairs(output[variety]) do if variety == "hcmc" then -- FIXME: Move this up to the pronunciation-computing loop. out = rsub(out, "[hk]w", "w") out = rsub(out, "ʔw", "(ʔ)w") end table.insert(ipa_items, {pron = out, separator = i == 1 and "" or ", "}) local alternative = out for _, variation in ipairs(variations[variety]) do alternative = rsub(alternative, variation[1], variation[2]) end if alternative ~= out then table.insert(ipa_items, {pron = alternative, separator = " ~ "}) end end table.insert(output_text, location[2], "\n* " .. require("Module:IPA").format_IPA_full { lang = lang, a = {location[1]}, items = ipa_items, separator = "", }) else table.insert(output_text, location[2], "") end end local saw_raw = false local actual_respellings = {} for _, spec in ipairs(respellings) do if spec.raw then saw_raw = true break else table.insert(actual_respellings, spec.respelling) end end if not saw_raw and table.concat(actual_respellings, "") ~= ulower(pagename) then table.insert(output_text, #output_text + 1, "\n* ''Phonetic spelling'': " .. rsub(table.concat(actual_respellings, ", "), "ŕ", "R")) end return rsub(table.concat(output_text, ""), "^\n(.)", "%1") end return export s01zv55zjrvuck5su6b7cj1s5n8dsoh Wiksiyonaryo:Usaping Wikimedia 4 34256 176655 175916 2026-04-26T00:58:57Z MediaWiki message delivery 1908 /* Request for comment (global AI policy) */ bagong seksyon 176655 wikitext text/x-wiki __NOEDITSECTION__ Maligayang pagdating sa talakayang '''Usaping Wikimedia''' ng Wiktionary sa Tagalog. Dito matatagpuan ang mga paksang nakatuon sa mga balita at usaping teknikal ng <span class="plainlinks">[https://wikimediafoundation.org/ Wikimedia]</span>. Maaaring ang linalaman nito ay nasa Tagalog, Ingles, o iba pang mga wika. {{Wiktionary:Puntahan ng Pamayanan}} ---- == Final proposed modifications to the Universal Code of Conduct Enforcement Guidelines and U4C Charter now posted == <div lang="en" dir="ltr" class="mw-content-ltr"> The proposed modifications to the [[foundation:Special:MyLanguage/Policy:Universal_Code_of_Conduct/Enforcement_guidelines|Universal Code of Conduct Enforcement Guidelines]] and the U4C Charter [[m:Universal_Code_of_Conduct/Annual_review/2025/Proposed_Changes|are now on Meta-wiki for community notice]] in advance of the voting period. This final draft was developed from the previous two rounds of community review. Community members will be able to vote on these modifications starting on 17 April 2025. The vote will close on 1 May 2025, and results will be announced no later than 12 May 2025. The U4C election period, starting with a call for candidates, will open immediately following the announcement of the review results. More information will be posted on [[m:Special:MyLanguage//Universal_Code_of_Conduct/Coordinating_Committee/Election|the wiki page for the election]] soon. Please be advised that this process will require more messages to be sent here over the next two months. The [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee|Universal Code of Conduct Coordinating Committee (U4C)]] is a global group dedicated to providing an equitable and consistent implementation of the UCoC. This annual review was planned and implemented by the U4C. For more information and the responsibilities of the U4C, you may [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee/Charter|review the U4C Charter]]. Please share this message with members of your community so they can participate as well. -- In cooperation with the U4C, [[m:User:Keegan (WMF)|Keegan (WMF)]] ([[m:User_talk:Keegan (WMF)|talk]]) 02:05, 4 Abril 2025 (UTC) </div> <!-- Message sent by User:Keegan (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=28469465 --> == Vote now on the revised UCoC Enforcement Guidelines and U4C Charter == <div lang="en" dir="ltr" class="mw-content-ltr"> The voting period for the revisions to the Universal Code of Conduct Enforcement Guidelines ("UCoC EG") and the UCoC's Coordinating Committee Charter is open now through the end of 1 May (UTC) ([https://zonestamp.toolforge.org/1746162000 find in your time zone]). [[m:Special:MyLanguage/Universal_Code_of_Conduct/Annual_review/2025/Voter_information|Read the information on how to participate and read over the proposal before voting]] on the UCoC page on Meta-wiki. The [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee|Universal Code of Conduct Coordinating Committee (U4C)]] is a global group dedicated to providing an equitable and consistent implementation of the UCoC. This annual review of the EG and Charter was planned and implemented by the U4C. Further information will be provided in the coming months about the review of the UCoC itself. For more information and the responsibilities of the U4C, you may [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee/Charter|review the U4C Charter]]. Please share this message with members of your community so they can participate as well. In cooperation with the U4C -- [[m:User:Keegan (WMF)|Keegan (WMF)]] ([[m:User_talk:Keegan (WMF)|talk]]) 00:35, 17 Abril 2025 (UTC) </div> <!-- Message sent by User:Keegan (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=28469465 --> == <span lang="en" dir="ltr">Vote on proposed modifications to the UCoC Enforcement Guidelines and U4C Charter</span> == <div lang="en" dir="ltr"> <section begin="announcement-content" /> The voting period for the revisions to the Universal Code of Conduct Enforcement Guidelines and U4C Charter closes on 1 May 2025 at 23:59 UTC ([https://zonestamp.toolforge.org/1746162000 find in your time zone]). [[m:Special:MyLanguage/Universal Code of Conduct/Annual review/2025/Voter information|Read the information on how to participate and read over the proposal before voting]] on the UCoC page on Meta-wiki. The [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee|Universal Code of Conduct Coordinating Committee (U4C)]] is a global group dedicated to providing an equitable and consistent implementation of the UCoC. This annual review was planned and implemented by the U4C. For more information and the responsibilities of the U4C, you may [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Charter|review the U4C Charter]]. Please share this message with members of your community in your language, as appropriate, so they can participate as well. In cooperation with the U4C -- <section end="announcement-content" /> </div> <div lang="en" dir="ltr" class="mw-content-ltr"> [[m:User:Keegan (WMF)|Keegan (WMF)]] ([[m:User talk:Keegan (WMF)|talk]]) 03:42, 29 Abril 2025 (UTC)</div> <!-- Message sent by User:Keegan (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=28618011 --> == We will be enabling the new Charts extension on your wiki soon! == ''(Apologies for posting in English)'' Hi all! We have good news to share regarding the ongoing problem with graphs and charts affecting all wikis that use them. As you probably know, the [[:mw:Special:MyLanguage/Extension:Graph|old Graph extension]] was disabled in 2023 [[listarchive:list/wikitech-l@lists.wikimedia.org/thread/EWL4AGBEZEDMNNFTM4FRD4MHOU3CVESO/|due to security reasons]]. We’ve worked in these two years to find a solution that could replace the old extension, and provide a safer and better solution to users who wanted to showcase graphs and charts in their articles. We therefore developed the [[:mw:Special:MyLanguage/Extension:Chart|Charts extension]], which will be replacing the old Graph extension and potentially also the [[:mw:Extension:EasyTimeline|EasyTimeline extension]]. After successfully deploying the extension on Italian, Swedish, and Hebrew Wikipedia, as well as on MediaWiki.org, as part of a pilot phase, we are now happy to announce that we are moving forward with the next phase of deployment, which will also include your wiki. The deployment will happen in batches, and will start from '''May 6'''. Please, consult [[:mw:Special:MyLanguage/Extension:Chart/Project#Deployment Timeline|our page on MediaWiki.org]] to discover when the new Charts extension will be deployed on your wiki. You can also [[:mw:Special:MyLanguage/Extension:Chart|consult the documentation]] about the extension on MediaWiki.org. If you have questions, need clarifications, or just want to express your opinion about it, please refer to the [[:mw:Special:MyLanguage/Extension_talk:Chart/Project|project’s talk page on Mediawiki.org]], or ping me directly under this thread. If you encounter issues using Charts once it gets enabled on your wiki, please report it on the [[:mw:Extension_talk:Chart/Project|talk page]] or at [[phab:tag/charts|Phabricator]]. Thank you in advance! -- [[User:Sannita (WMF)|User:Sannita (WMF)]] ([[User talk:Sannita (WMF)|talk]]) 15:07, 6 Mayo 2025 (UTC) <!-- Message sent by User:Sannita (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:Sannita_(WMF)/Mass_sending_test&oldid=28663781 --> == <span lang="en" dir="ltr">Call for Candidates for the Universal Code of Conduct Coordinating Committee (U4C)</span> == <div lang="en" dir="ltr"> <section begin="announcement-content" /> The results of voting on the Universal Code of Conduct Enforcement Guidelines and Universal Code of Conduct Coordinating Committee (U4C) Charter is [[m:Special:MyLanguage/Universal Code of Conduct/Annual review/2025#Results|available on Meta-wiki]]. You may now [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Election/2025/Candidates|submit your candidacy to serve on the U4C]] through 29 May 2025 at 12:00 UTC. Information about [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Election/2025|eligibility, process, and the timeline are on Meta-wiki]]. Voting on candidates will open on 1 June 2025 and run for two weeks, closing on 15 June 2025 at 12:00 UTC. If you have any questions, you can ask on [[m:Talk:Universal Code of Conduct/Coordinating Committee/Election/2025|the discussion page for the election]]. -- in cooperation with the U4C, </div><section end="announcement-content" /> </div> <bdi lang="en" dir="ltr">[[m:User:Keegan (WMF)|Keegan (WMF)]] ([[m:User_talk:Keegan (WMF)|usapan]])</bdi> 22:08, 15 Mayo 2025 (UTC) <!-- Message sent by User:Keegan (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=28618011 --> == RfC ongoing regarding Abstract Wikipedia (and your project) == <div lang="en" dir="ltr" class="mw-content-ltr"> ''(Apologies for posting in English, if this is not your first language)'' Hello all! We opened a discussion on Meta about a very delicate issue for the development of [[:m:Special:MyLanguage/Abstract Wikipedia|Abstract Wikipedia]]: where to store the abstract content that will be developed through functions from Wikifunctions and data from Wikidata. Since some of the hypothesis involve your project, we wanted to hear your thoughts too. We want to make the decision process clear: we do not yet know which option we want to use, which is why we are consulting here. We will take the arguments from the Wikimedia communities into account, and we want to consult with the different communities and hear arguments that will help us with the decision. The decision will be made and communicated after the consultation period by the Foundation. You can read the various hypothesis and have your say at [[:m:Abstract Wikipedia/Location of Abstract Content|Abstract Wikipedia/Location of Abstract Content]]. Thank you in advance! -- [[User:Sannita (WMF)|Sannita (WMF)]] ([[User talk:Sannita (WMF)|<span class="signature-talk">{{int:Talkpagelinktext}}</span>]]) 15:27, 22 Mayo 2025 (UTC) </div> <!-- Message sent by User:Sannita (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:Sannita_(WMF)/Mass_sending_test&oldid=28768453 --> == <span lang="en" dir="ltr">Wikimedia Foundation Board of Trustees 2025 Selection & Call for Questions</span> == <div lang="en" dir="ltr"> <section begin="announcement-content" /> :''[[m:Special:MyLanguage/Wikimedia Foundation elections/2025/Announcement/Selection announcement|{{int:interlanguage-link-mul}}]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Wikimedia Foundation elections/2025/Announcement/Selection announcement}}&language=&action=page&filter= {{int:please-translate}}]'' Dear all, This year, the term of 2 (two) Community- and Affiliate-selected Trustees on the Wikimedia Foundation Board of Trustees will come to an end [1]. The Board invites the whole movement to participate in this year’s selection process and vote to fill those seats. The Elections Committee will oversee this process with support from Foundation staff [2]. The Governance Committee, composed of trustees who are not candidates in the 2025 community-and-affiliate-selected trustee selection process (Raju Narisetti, Shani Evenstein Sigalov, Lorenzo Losa, Kathy Collins, Victoria Doronina and Esra’a Al Shafei) [3], is tasked with providing Board oversight for the 2025 trustee selection process and for keeping the Board informed. More details on the roles of the Elections Committee, Board, and staff are here [4]. Here are the key planned dates: * May 22 – June 5: Announcement (this communication) and call for questions period [6] * June 17 – July 1, 2025: Call for candidates * July 2025: If needed, affiliates vote to shortlist candidates if more than 10 apply [5] * August 2025: Campaign period * August – September 2025: Two-week community voting period * October – November 2025: Background check of selected candidates * Board’s Meeting in December 2025: New trustees seated Learn more about the 2025 selection process - including the detailed timeline, the candidacy process, the campaign rules, and the voter eligibility criteria - on this Meta-wiki page [[m:Special:MyLanguage/Wikimedia_Foundation_elections/2025|[link]]]. '''Call for Questions''' In each selection process, the community has the opportunity to submit questions for the Board of Trustees candidates to answer. The Election Committee selects questions from the list developed by the community for the candidates to answer. Candidates must answer all the required questions in the application in order to be eligible; otherwise their application will be disqualified. This year, the Election Committee will select 5 questions for the candidates to answer. The selected questions may be a combination of what’s been submitted from the community, if they’re alike or related. [[m:Special:MyLanguage/Wikimedia_Foundation_elections/2025/Questions_for_candidates|[link]]] '''Election Volunteers''' Another way to be involved with the 2025 selection process is to be an Election Volunteer. Election Volunteers are a bridge between the Elections Committee and their respective community. They help ensure their community is represented and mobilize them to vote. Learn more about the program and how to join on this Meta-wiki page [[m:Wikimedia_Foundation_elections/2025/Election_volunteers|[link].]] Thank you! [1] https://meta.wikimedia.org/wiki/Wikimedia_Foundation_elections/2022/Results [2] https://foundation.wikimedia.org/wiki/Committee:Elections_Committee_Charter [3] https://foundation.wikimedia.org/wiki/Resolution:Committee_Membership,_December_2024 [4] https://meta.wikimedia.org/wiki/Wikimedia_Foundation_elections_committee/Roles [5] https://meta.wikimedia.org/wiki/Wikimedia_Foundation_elections/2025/FAQ [6] https://meta.wikimedia.org/wiki/Wikimedia_Foundation_elections/2025/Questions_for_candidates Best regards, Victoria Doronina Board Liaison to the Elections Committee Governance Committee<section end="announcement-content" /> </div> [[Tagagamit:MediaWiki message delivery|MediaWiki message delivery]] ([[Usapang tagagamit:MediaWiki message delivery|kausapin]]) 03:08, 28 Mayo 2025 (UTC) <!-- Message sent by User:RamzyM (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=28618011 --> == Vote now in the 2025 U4C Election == <div lang="en" dir="ltr" class="mw-content-ltr"> Apologies for writing in English. {{Int:Please-translate}} Eligible voters are asked to participate in the 2025 [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee|Universal Code of Conduct Coordinating Committee]] election. More information–including an eligibility check, voting process information, candidate information, and a link to the vote–are available on Meta at the [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee/Election/2025|2025 Election information page]]. The vote closes on 17 June 2025 at [https://zonestamp.toolforge.org/1750161600 12:00 UTC]. Please vote if your account is eligible. Results will be available by 1 July 2025. -- In cooperation with the U4C, [[m:User:Keegan (WMF)|Keegan (WMF)]] ([[m:User talk:Keegan (WMF)|talk]]) 23:01, 13 Hunyo 2025 (UTC) </div> <!-- Message sent by User:Keegan (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=28848819 --> == <span lang="en" dir="ltr">Wikimedia Foundation Board of Trustees 2025 - Call for Candidates</span> == <div lang="en" dir="ltr"> <section begin="announcement-content" /> :''<div class="plainlinks">[[m:Special:MyLanguage/Wikimedia Foundation elections/2025/Announcement/Call for candidates|{{int:interlanguage-link-mul}}]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Wikimedia Foundation elections/2025/Announcement/Call for candidates}}&language=&action=page&filter= {{int:please-translate}}]</div> Hello all, The [[m:Special:MyLanguage/Wikimedia Foundation elections/2025|call for candidates for the 2025 Wikimedia Foundation Board of Trustees selection is now open]] from June 17, 2025 – July 2, 2025 at 11:59 UTC [1]. The Board of Trustees oversees the Wikimedia Foundation's work, and each Trustee serves a three-year term [2]. This is a volunteer position. This year, the Wikimedia community will vote in late August through September 2025 to fill two (2) seats on the Foundation Board. Could you – or someone you know – be a good fit to join the Wikimedia Foundation's Board of Trustees? [3] Learn more about what it takes to stand for these leadership positions and how to submit your candidacy on [[m:Special:MyLanguage/Wikimedia Foundation elections/2025/Candidate application|this Meta-wiki page]] or encourage someone else to run in this year's election. Best regards, Abhishek Suryawanshi<br /> Chair of the Elections Committee On behalf of the Elections Committee and Governance Committee [1] https://meta.wikimedia.org/wiki/Special:MyLanguage/Wikimedia_Foundation_elections/2025/Call_for_candidates [2] https://foundation.wikimedia.org/wiki/Legal:Bylaws#(B)_Term. [3] https://meta.wikimedia.org/wiki/Special:MyLanguage/Wikimedia_Foundation_elections/2025/Resources_for_candidates<section end="announcement-content" /> </div> [[Tagagamit:MediaWiki message delivery|MediaWiki message delivery]] ([[Usapang tagagamit:MediaWiki message delivery|kausapin]]) 17:45, 17 Hunyo 2025 (UTC) <!-- Message sent by User:RamzyM (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=28866958 --> == <span lang="en" dir="ltr">Sister Projects Task Force reviews Wikispore and Wikinews</span> == <div lang="en" dir="ltr"> <section begin="message"/> Dear Wikimedia Community, The [[m:Wikimedia Foundation Community Affairs Committee|Community Affairs Committee (CAC)]] of the Wikimedia Foundation Board of Trustees assigned [[m:Wikimedia Foundation Community Affairs Committee/Sister Projects Task Force|the Sister Projects Task Force (SPTF)]] to update and implement a procedure for assessing the lifecycle of Sister Projects – wiki [[m:Wikimedia projects|projects supported by Wikimedia Foundation (WMF)]]. A vision of relevant, accessible, and impactful free knowledge has always guided the Wikimedia Movement. As the ecosystem of Wikimedia projects continues to evolve, it is crucial that we periodically review existing projects to ensure they still align with our goals and community capacity. Despite their noble intent, some projects may no longer effectively serve their original purpose. '''Reviewing such projects is not about giving up – it's about responsible stewardship of shared resources'''. Volunteer time, staff support, infrastructure, and community attention are finite, and the non-technical costs tend to grow significantly as our ecosystem has entered a different age of the internet than the one we were founded in. Supporting inactive projects or projects that didn't meet our ambitions can unintentionally divert these resources from areas with more potential impact. Moreover, maintaining projects that no longer reflect the quality and reliability of the Wikimedia name stands for, involves a reputational risk. An abandoned or less reliable project affects trust in the Wikimedia movement. Lastly, '''failing to sunset or reimagine projects that are no longer working can make it much harder to start new ones'''. When the community feels bound to every past decision – no matter how outdated – we risk stagnation. A healthy ecosystem must allow for evolution, adaptation, and, when necessary, letting go. If we create the expectation that every project must exist indefinitely, we limit our ability to experiment and innovate. Because of this, SPTF reviewed two requests concerning the lifecycle of the Sister Projects to work through and demonstrate the review process. We chose Wikispore as a case study for a possible new Sister Project opening and Wikinews as a case study for a review of an existing project. Preliminary findings were discussed with the CAC, and a community consultation on both proposals was recommended. === Wikispore === The [[m:Wikispore|application to consider Wikispore]] was submitted in 2019. SPTF decided to review this request in more depth because rather than being concentrated on a specific topic, as most of the proposals for the new Sister Projects are, Wikispore has the potential to nurture multiple start-up Sister Projects. After careful consideration, the SPTF has decided '''not to recommend''' Wikispore as a Wikimedia Sister Project. Considering the current activity level, the current arrangement allows '''better flexibility''' and experimentation while WMF provides core infrastructural support. We acknowledge the initiative's potential and seek community input on what would constitute a sufficient level of activity and engagement to reconsider its status in the future. As part of the process, we shared the decision with the Wikispore community and invited one of its leaders, Pharos, to an SPTF meeting. Currently, we especially invite feedback on measurable criteria indicating the project's readiness, such as contributor numbers, content volume, and sustained community support. This would clarify the criteria sufficient for opening a new Sister Project, including possible future Wikispore re-application. However, the numbers will always be a guide because any number can be gamed. === Wikinews === We chose to review Wikinews among existing Sister Projects because it is the one for which we have observed the highest level of concern in multiple ways. Since the SPTF was convened in 2023, its members have asked for the community's opinions during conferences and community calls about Sister Projects that did not fulfil their promise in the Wikimedia movement.[https://commons.wikimedia.org/wiki/File:WCNA_2024._Sister_Projects_-_opening%3F_closing%3F_merging%3F_splitting%3F.pdf <nowiki>[1]</nowiki>][https://meta.wikimedia.org/wiki/Wikimedia_Foundation_Community_Affairs_Committee/Sister_Projects_Task_Force#Wikimania_2023_session_%22Sister_Projects:_past,_present_and_the_glorious_future%22 <nowiki>[2]</nowiki>][https://meta.wikimedia.org/wiki/WikiConvention_francophone/2024/Programme/Quelle_proc%C3%A9dure_pour_ouvrir_ou_fermer_un_projet_%3F <nowiki>[3]</nowiki>] Wikinews was the leading candidate for an evaluation because people from multiple language communities proposed it. Additionally, by most measures, it is the least active Sister Project, with the greatest drop in activity over the years. While the Language Committee routinely opens and closes language versions of the Sister Projects in small languages, there has never been a valid proposal to close Wikipedia in major languages or any project in English. This is not true for Wikinews, where there was a proposal to close English Wikinews, which gained some traction but did not result in any action[https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_English_Wikinews <nowiki>[4]</nowiki>][https://meta.wikimedia.org/wiki/WikiConvention_francophone/2024/Programme/Quelle_proc%C3%A9dure_pour_ouvrir_ou_fermer_un_projet_%3F <nowiki>[5]</nowiki>, see section 5] as well as a draft proposal to close all languages of Wikinews[https://meta.wikimedia.org/wiki/Talk:Proposals_for_closing_projects/Archive_2#Close_Wikinews_completely,_all_languages? <nowiki>[6]</nowiki>]. [[:c:File:Sister Projects Taskforce Wikinews review 2024.pdf|Initial metrics]] compiled by WMF staff also support the community's concerns about Wikinews. Based on this report, SPTF recommends a community reevaluation of Wikinews. We conclude that its current structure and activity levels are the lowest among the existing sister projects. SPTF also recommends pausing the opening of new language editions while the consultation runs. SPTF brings this analysis to a discussion and welcomes discussions of alternative outcomes, including potential restructuring efforts or integration with other Wikimedia initiatives. '''Options''' mentioned so far (which might be applied to just low-activity languages or all languages) include but are not limited to: *Restructure how Wikinews works and is linked to other current events efforts on the projects, *Merge the content of Wikinews into the relevant language Wikipedias, possibly in a new namespace, *Merge content into compatibly licensed external projects, *Archive Wikinews projects. Your insights and perspectives are invaluable in shaping the future of these projects. We encourage all interested community members to share their thoughts on the relevant discussion pages or through other designated feedback channels. === Feedback and next steps === We'd be grateful if you want to take part in a conversation on the future of these projects and the review process. We are setting up two different project pages: [[m:Public consultation about Wikispore|Public consultation about Wikispore]] and [[m:Public consultation about Wikinews|Public consultation about Wikinews]]. Please participate between 27 June 2025 and 27 July 2025, after which we will summarize the discussion to move forward. You can write in your own language. I will also host a community conversation 16th July Wednesday 11.00 UTC and 17th July Thursday 17.00 UTC (call links to follow shortly) and will be around at Wikimania for more discussions. <section end="message"/> </div> -- [[User:Victoria|Victoria]] on behalf of the Sister Project Task Force, 20:58, 27 Hunyo 2025 (UTC) <!-- Message sent by User:Johan (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:Johan_(WMF)/Sister_project_MassMassage_on_behalf_of_Victoria/Target_list&oldid=28911188 --> == <span lang="en" dir="ltr">Temporary accounts will be rolled out soon</span> == <div lang="en" dir="ltr"> <section begin="body"/> Hello, we are the Wikimedia Foundation [[mw:Special:MyLanguage/Product Safety and Integrity|Product Safety and Integrity]] team. We would like to announce that '''we plan to enable [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts|temporary accounts]] for this wiki in the week of September 1'''. Temporary accounts are successfully live on 30 wikis, including many large ones like German, Japanese, and French. The change they bring is especially relevant to logged-out editors, who this feature is designed to protect. But it is also relevant to community members like mentors, patrollers, and admins – anyone who reverts edits, blocks users, or otherwise interacts with logged-out editors as part of keeping the wikis safe and accurate. '''Why we are building temporary accounts''' Our wikis should be safer to edit by default for logged-out editors. Temporary accounts allow people to continue editing the wikis without creating an account, while avoiding publicly tying their edits to their IP address. We believe this is in the best interest of our logged-out editors, who make valuable contributions to the wikis and who may later create accounts and grow our community of editors, admins, and other roles. Even though the wikis do warn logged-out editors that their IP address will be associated with their edit, many people may not understand what an IP address is, or that it could be used to connect them to other information about them in ways they might not expect. Additionally, our moderation software and tools rely too heavily on network origin (IP addresses) to identify users and patterns of activity, especially as IP addresses themselves are becoming less stable as identifiers. Temporary accounts allow for more precise interactions with logged-out editors, including more precise blocks, and can help limit how often we unintentionally end up blocking good-faith users who use the same IP addresses as bad-faith users. '''How temporary accounts work''' [[File:Temporary account banner and empty talk page.png|thumb]] Any time a logged-out user publishes an edit on this wiki, a cookie will be set in this user's browser, and a temporary account tied with this cookie will be automatically created. This account's name will follow the pattern: <code dir=ltr>~2025-12345-67</code> (a tilde, current year, a number). On pages like Recent Changes or page history, this name will be displayed. The cookie will expire 90 days after its creation. As long as it exists, all edits made from this device will be attributed to this temporary account. It will be the same account even if the IP address changes, unless the user clears their cookies or uses a different device or web browser. A record of the IP address used at the time of each edit will be stored for 90 days after the edit. However, only some logged-in users will be able to see it. '''What does this mean for different groups of users?''' '''For logged-out editors''' * This increases privacy: currently, if you do not use a registered account to edit, then everybody can see the IP address for the edits you made, even after 90 days. That will no longer be possible on this wiki. * If you use a temporary account to edit from different locations in the last 90 days (for example at home and at a coffee shop), the edit history and the IP addresses for all those locations will now be recorded together, for the same temporary account. Users who [[foundation:Special:MyLanguage/Policy:Access_to_temporary_account_IP_addresses|meet the relevant requirements]] will be able to view this data. If this creates any personal security concerns for you, please contact talktohumanrights at wikimedia.org for advice. '''For community members interacting with logged-out editors''' * A temporary account is uniquely linked to a device. In comparison, an IP address can be shared with different devices and people (for example, different people at school or at work might have the same IP address). * Compared to the current situation, it will be safer to assume that a temporary user's talk page belongs to only one person, and messages left there will be read by them. As you can see in the screenshot, temporary account users will receive notifications. It will also be possible to thank them for their edits, ping them in discussions, and invite them to get more involved in the community. '''For users who use IP address data to moderate and maintain the wiki''' * '''For patrollers''' who track persistent abusers, investigate violations of policies, etc.: Users who [[foundation:Special:MyLanguage/Policy:Access_to_temporary_account_IP_addresses|meet the requirements]] will be able to reveal temporary users' IP addresses and all contributions made by temporary accounts from a specific IP address or range ([[Special:IPContributions]]). They will also have access to useful information about the IP addresses thanks to the [[mw:Special:MyLanguage/Trust and Safety Product/IP Info|IP Info]] feature. Many other pieces of software have been built or adjusted to work with temporary accounts, including AbuseFilter, global blocks, Global User Contributions, and more. (For information for volunteer developers on how to update the code of your tools – see the last part of the message.) * '''For admins blocking logged-out editors''': ** It will be possible to block many abusers by just blocking their temporary accounts. A blocked person won't be able to create new temporary accounts quickly if the admin selects the [[mw:Special:MyLanguage/Autoblock|autoblock]] option. ** It will still be possible to block an IP address or IP range. * Temporary accounts will not be retroactively applied to contributions made before the deployment. On Special:Contributions, you will be able to see existing IP user contributions, but not new contributions made by temporary accounts on that IP address. Instead, you should use Special:IPContributions for this. '''Our requests for you, and next steps''' * If you know of any tools, bots, gadgets etc. using data about IP addresses or being available for logged-out users, you may want to test if they work on [[testwiki:Main_Page|testwiki]] or [[test2wiki:Main_Page|test2wiki]]. If you are a volunteer developer, [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts/For developers|read our documentation for developers]], and in particular, the section on [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts/For developers#How should I update my code?|how your code might need to be updated]]. * If you want to test the temporary account experience, for example just to check what it feels like, go to testwiki or test2wiki and edit without logging in. * Tell us if you know of any difficulties that need to be addressed. We will try to help, and if we are not able, we will consider the available options. * Look at our [[m:Meta:Babel#Temporary_Accounts:_access_to_IP_addresses_and_next_steps|previous message]] about requirements for users without extended rights who may need access to IP addresses. To learn more about the project, check out [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts/FAQ|our FAQ]] – you will find many useful answers there. You may also [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts/Updates|look at the updates]] (we have just posted one) and [[mw:Newsletter:Product Safety and Integrity|subscribe to our new newsletter]]. If you'd like to talk to me (Szymon) off-wiki, you will find me on Discord and Telegram. Thank you!<section end="body" /> </div> <bdi lang="en" dir="ltr">[[m:user:NKohli (WMF)|NKohli (WMF)]], [[m:user:SGrabarczuk (WMF)|SGrabarczuk (WMF)]]</bdi> 21:37, 26 Agosto 2025 (UTC) (This message was sent to [[:Wiktionary:Usaping WikiMedia]] and is being posted here due to a redirect.) <!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:Quiddity_(WMF)/sandbox6&oldid=29181713 --> == <span lang="en" dir="ltr">Wikifunctions will be deployed on your wiki on 2025-09-17</span> == <div lang="en" dir="ltr"> <section begin="Message"/> :''[[m:Special:MyLanguage/Abstract Wikipedia/Wikifunctions deployment|{{int:interlanguage-link-mul}}]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Abstract Wikipedia/Wikifunctions deployment}}&language=&action=page&filter= {{int:please-translate}}]'' Hi all, we want to let you know that [[:f:|Wikifunctions]] is coming to your project soon! When enabled, you will be able to call functions from your project, and integrate them in your articles. A function is something that takes one or more inputs and transforms them into a desired output. Think of adding up two numbers, or converting miles into metres, or calculating how much time has passed since an event, or declining a word into a case. This is usually done with templates that are complicated to create or to import. With Wikifunctions, you will be able to do this with just a couple of clicks! Please check out [[:f:Special:MyLanguage/Wikifunctions:Introduction|these tutorials]] for more details. You’re also invited to [[:f:Special:CreateObject|create functions]] that you find useful, or [[:f:Wikifunctions:Suggest a function|ask for help from the Wikifunctions community]]. We would like to invite you to contribute to Wikifunctions, by translating the existing functions labels into your language, so that more users in your community can more easily reuse them on the project. You can also translate the messages for the Wikifunctions interface on TranslateWiki ([https://translatewiki.net/w/i.php?title=Special%3ATranslate&group=ext-wikilambda-ve&filter=%21translated&action=translate here for VisualEditor messages], and [https://translatewiki.net/w/i.php?title=Special%3ATranslate&group=ext-wikilambda-user&filter=%21translated&action=translate here for the Wikifunctions interface proper]). Of course, we are happy to help in case there are questions or difficulties, and we are ready to listen to your feedback. Please ping me directly in case of necessity or reach out to me [[User talk:Sannita (WMF)|on my talk page]]. -- [[User:Sannita (WMF)|Sannita (WMF)]] ([[User talk:Sannita (WMF)|talk]]) 19:02, 10 Setyembre 2025 (UTC) <section end="Message"/> </div> (This message was sent to [[:Wiksiyonaryo:Usaping WikiMedia]] and is being posted here due to a redirect.) <!-- Message sent by User:Sannita (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:Sannita_(WMF)/Mass_sending_test&oldid=29237323 --> == Pagpapalit ng serbidor - May parating na panahon na maaari mo lamang basahin ang iyong wiki na hindi tatagal nang masyado == <section begin="server-switch"/><div class="plainlinks"> [[:m:Special:MyLanguage/Tech/Server switch|Basahin ang mensaheng ito sa ibang wika]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-Tech%2FServer+switch&language=&action=page&filter= {{int:please-translate}}] Ililipat ng [[foundation:|Pundasyong Wikimedia]] ang trapikong dumadaloy sa pagitan ng mga sentro ng datos (''data centers'') nito. Sisiguraduhin nito na mananatiling ''online'' ang Wikipedia at ang mga iba pang wiki ng Wikimedia kahit kung lumipas ang isang sakuna. Ililipat ang lahat ng trapiko sa '''{{#time:j xg|2025-09-24|tl}}'''. Magsisimula ang pagpapalit sa '''[https://zonestamp.toolforge.org/{{#time:U|2025-09-24T15:00|en}} {{#time:H:i e|2025-09-24T15:00}}]'''. Sa kasamaang palad, dahil sa limitasyon sa [[mw:Special:MyLanguage/Manual:What is MediaWiki?|MediaWiki]], kailangan munang ihinto ang lahat ng pagbabago habang ginagawa ang paglilipat. Humihingi po kami ng paumanhin para sa pagkagambalang ito, at sinisikap naming mabawasan ito sa mga susunod na panahon. May ipapakitang bandera sa lahat ng mga wiki 30 minuto bago magsimula ang operasyong ito. <span lang="en" dir="ltr" class="mw-content-ltr">This banner will remain visible until the end of the operation.</span> <span lang="en" dir="ltr" class="mw-content-ltr">You can contribute to the [https://meta.wikimedia.org/w/index.php?title=Special%3ATranslate&group=Centralnotice-tgroup-read_only_banner&task=view&language=&filter=&action=translate translation or proofreading] of this banner text.</span> '''Makababasa ka, nguni hindi makakapagbago, ng lahat ng mga wiki sa loob lamang ng maikling panahon.''' *Hindi ka makakapagbago ng hanggang sa isang oras sa {{#time:l j xg Y|2025-09-24|tl}}. *Kung susubukin mong magbago o maglagak sa mga oras na ito, makakikita ka ng mensahe ng kamalian. Inaasahan namin na walang mawawala na pagbabago sa mga minutong ito, ngunit hindi namin ito maipapangako. Kung nakikita mo ang mensahe ng kamalian, mangyaring maghintay hanggang bumalik sa normal na ang lahat. Pagkatapos niyon ay maaari mo nang mai-save ang iyong edit. Pero, amin namin kayong pinapayuhan na gumawa muna ng kopya ng iyong mga pagbabago, upang makasigurado. ''Mga ibang epekto'': *Babagal ang mga ''background job'' at maaaring tanggalin ang ilan. Maaaring hindi maisasapanahon ang mga pulang kawing ng kasimbilis ng normal. Kung maglilikha ka ng artikulo na nakakawing na sa ibang lugar, mas matagal na mananatiling pula ang kawing. Kailangang pahintuin ang mga ilang pangmatagalang iskrip. * Inaasahan namin na ang mga ''code deployment'' ay mangyayari katulad ng sa anumang ibang mga linggo. Pero, may mga ''case-by-case code freezes'' na mangyayari sa tamang panahon kung kakailanganin nila ito pagkatapos. * Hindi magagamit ang [[mw:Special:MyLanguage/GitLab|GitLab]] ng mga nasa 90 minutos. Maaaring ipagpaliban ang proyektong ito kung kinakailangan. Maaari mong [[wikitech:Switch_Datacenter|basahin ang iskedyul sa wikitech.wikimedia.org]]. Ihahayag ang anumang pagbabago sa iskedyul. '''Mangyaring ibahagi ang impormasyon sa iyong pamayanan.'''</div><section end="server-switch"/> <span dir=ltr>[[m:User:Trizek (WMF)|Trizek (WMF)]] ([[m:User talk:Trizek (WMF)|{{int:talk}}]])</span> 15:41, 18 Setyembre 2025 (UTC) (This message was sent to [[:Wiksiyonaryo:Usaping WikiMedia]] and is being posted here due to a redirect.) <!-- Message sent by User:Trizek (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Non-Technical_Village_Pumps_distribution_list&oldid=29170715 --> == <span lang="en" dir="ltr">Have your say: vote for the 2025 Board of Trustees</span> == <div lang="en" dir="ltr"> <section begin="announcement-content" /> Hello all, The voting period for the [[m:Special:MyLanguage/Wikimedia Foundation elections/2025|2025 Board of Trustees election]] is now open. Candidates are running for two (2) seats on the Board. To check your voter eligibility, please visit the [[m:Special:MyLanguage/Wikimedia Foundation elections/2025/Voter eligibility guidelines|voter eligibility page]]. Learn more about them by [[m:Special:MyLanguage/Wikimedia Foundation elections/2025/Candidates|reading their application statements and watch their candidacy videos]]. When you are ready, go to the [[m:Special:SecurePoll/vote/405|SecurePoll voting page to vote]]. '''The vote is open from October 8 at 00:00 UTC to October 22 at 23:59 UTC.''' Best regards, Abhishek Suryawanshi<br />Chair, Elections Committee<section end="announcement-content" /> </div> [[Tagagamit:MediaWiki message delivery|MediaWiki message delivery]] ([[Usapang tagagamit:MediaWiki message delivery|kausapin]]) 04:49, 9 Oktubre 2025 (UTC) <!-- Message sent by User:RamzyM (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=29360896 --> == <span lang="en" dir="ltr">Help us decide the name of the new Abstract Wikipedia project</span> == <div lang="en" dir="ltr"> <section begin="function1"/> {{int:Hello}}. Please help pick a name for the new Abstract Wikipedia wiki project. This project will be a wiki that will enable users to combine functions from [[:f:|Wikifunctions]] and data from Wikidata in order to generate natural language sentences in any supported languages. These sentences can then be used by any Wikipedia (or elsewhere). There will be two rounds of voting, each followed by legal review of candidates, with votes beginning on 20 October and 17 November 2025. Our goal is to have a final project name selected on mid-December 2025. If you would like to participate, then '''[[m:Special:MyLanguage/Abstract Wikipedia/Abstract Wikipedia naming contest|please learn more and vote now]]''' at meta-wiki. {{Int:Feedback-thanks-title}} <section end="function1"/> </div> -- [[User:Sannita (WMF)|User:Sannita (WMF)]] ([[User talk:Sannita (WMF)|talk]]) 11:44, 20 Oktubre 2025 (UTC) <!-- Message sent by User:Sannita (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=29432175 --> == <span lang="en" dir="ltr">Seeking volunteers to join several of the movement’s committees</span> == <div lang="en" dir="ltr"> <section begin="announcement-content" /> Each year, typically from October through December, several of the movement’s committees seek new volunteers. Read more about the committees on their Meta-wiki pages: * [[m:Special:MyLanguage/Affiliations Committee|Affiliations Committee (AffCom)]] * [[m:Special:MyLanguage/Ombuds commission|Ombuds commission (OC)]] * [[m:Special:MyLanguage/Wikimedia Foundation/Legal/Community Resilience and Sustainability/Trust and Safety/Case Review Committee|Case Review Committee (CRC)]] Applications for the committees open on October 30, 2025. Applications for the Affiliations Committee, Ombuds commission and the Case Review Committee close on December 11, 2025. Learn how to apply by [[m:Special:MyLanguage/Wikimedia Foundation/Legal/Committee appointments|visiting the appointment page on Meta-wiki]]. Post to the talk page or email cst[[File:At sign.svg|16x16px|link=|(_AT_)]]wikimedia.org with any questions you may have. For the Committee Support team, <section end="announcement-content" /> </div> -[[m:User:MKaur (WMF)| MKaur (WMF)]] 14:14, 30 Oktubre 2025 (UTC) <!-- Message sent by User:MKaur (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=29517125 --> == <span lang="en" dir="ltr">Reminder: Help us decide the name of the new Abstract Wikipedia project</span> == <div lang="en" dir="ltr"> <section begin="function2"/> {{int:Hello}}. Reminder: Please help to choose name for the new Abstract Wikipedia wiki project. The finalist vote starts today. The finalists for the name are: <span lang="en" dir="ltr" class="mw-content-ltr">Abstract Wikipedia, Multilingual Wikipedia, Wikiabstracts, Wikigenerator, Proto-Wiki</span>. If you would like to participate, then '''[[m:Special:MyLanguage/Abstract Wikipedia/Abstract Wikipedia naming contest|please learn more and vote now]]''' at meta-wiki. {{Int:Feedback-thanks-title}} <section end="function2"/> </div> -- [[User:Sannita (WMF)|User:Sannita (WMF)]] ([[User talk:Sannita (WMF)|talk]]) 14:23, 20 Nobyembre 2025 (UTC) <!-- Message sent by User:Sannita (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=29583860 --> == Thank You for Last Year – Join Wiki Loves Ramadan 2026 == Dear Wikimedia communities, We hope you are doing well, and we wish you a happy New Year. ''Last year, we captured light. This year, we’ll capture legacy.'' In 2025, communities around the world shared the glow of Ramadan nights and the warmth of collective iftars. In 2026, ''Wiki Loves Ramadan'' is expanding, bringing more stories, more cultures, and deeper global connections across Wikimedia projects. We invite you to explore the ''Wiki Loves Ramadan 2026'' [[m:Special:MyLanguage/Wiki Loves Ramadan 2026|Meta page]] to learn how you can participate and [[m:Special:MyLanguage/Wiki Loves Ramadan 2026/Participating communities|sign up]] your community. 📷 ''Photo campaign on '' [[c:Special:MyLanguage/Commons:Wiki Loves Ramadan 2026|Wikimedia Commons]] If you have questions about the project, please refer to the FAQs: * [[m:Special:MyLanguage/Wiki Loves Ramadan/FAQ/|Meta-Wiki]] * [[c:Special:MyLanguage/Commons:Wiki Loves Ramadan/FAQ|Wikimedia Commons]] ''Early registration for updates is now open via the '''[[m:Special:RegisterForEvent/2710|Event page]]''''' ''Stay connected and receive updates:'' * [https://t.me/WikiLovesRamadan Telegram channel] * [https://lists.wikimedia.org/postorius/lists/wikilovesramadan.lists.wikimedia.org/ Mailing list] We look forward to collaborating with you and your community. '''The Wiki Loves Ramadan 2026 Organizing Team''' 19:45, 16 Enero 2026 (UTC) (This message was sent to [[:Wiksiyonaryo:Usaping WikiMedia]] and is being posted here due to a redirect.) <!-- Message sent by User:ZI Jony@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Non-Technical_Village_Pumps_distribution_list&oldid=29879549 --> == <span lang="en" dir="ltr">Annual review of the Universal Code of Conduct and Enforcement Guidelines</span> == <div lang="en" dir="ltr"> <section begin="announcement-content" /> I am writing to you to let you know the annual review period for the Universal Code of Conduct and Enforcement Guidelines is open now. You can make suggestions for changes through 9 February 2026. This is the first step of several to be taken for the annual review. [[m:Special:MyLanguage/Universal Code of Conduct/Annual review/2026|Read more information and find a conversation to join on the UCoC page on Meta]]. The [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee|Universal Code of Conduct Coordinating Committee]] (U4C) is a global group dedicated to providing an equitable and consistent implementation of the UCoC. This annual review was planned and implemented by the U4C. For more information and the responsibilities of the U4C, [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Charter|you may review the U4C Charter]]. Please share this information with other members in your community wherever else might be appropriate. -- In cooperation with the U4C, [[m:User:Keegan (WMF)|Keegan (WMF)]] ([[m:User talk:Keegan (WMF)|talk]])<section end="announcement-content" /> </div> 21:02, 19 Enero 2026 (UTC) <!-- Message sent by User:Keegan (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=29905753 --> == Action Required: Update templates/modules for electoral maps (Migrating from P1846 to P14226) == Hello everyone, This is a notice regarding an ongoing data migration on Wikidata that may affect your election-related templates and Lua modules (such as <code>Module:Itemgroup/list</code>). '''The Change:'''<br /> Currently, many templates pull electoral maps from Wikidata using the property [[:d:Property:P1846|P1846]], combined with the qualifier [[:d:Property:P180|P180]]: [[:d:Q19571328|Q19571328]]. We are migrating this data (across roughly 4,000 items) to a newly created, dedicated property: '''[[:d:Property:P14226|P14226]]'''. '''What You Need To Do:'''<br /> To ensure your templates and infoboxes do not break or lose their maps, please update your local code to fetch data from [[:d:Property:P14226|P14226]] instead of the old [[:d:Property:P1846|P1846]] + [[:d:Property:P180|P180]] structure. A [[m:Wikidata/Property Migration: P1846 to P14226/List|list of pages]] was generated using Wikimedia Global Search. '''Deadline:'''<br /> We are temporarily retaining the old data on [[:d:Property:P1846|P1846]] to allow for a smooth transition. However, to complete the data cleanup on Wikidata, the old [[:d:Property:P1846|P1846]] statements will be removed after '''May 1, 2026'''. Please update your modules and templates before this date to prevent any disruption to your wiki's election articles. Let us know if you have any questions or need assistance with the query logic. Thank you for your help! [[User:ZI Jony|ZI Jony]] using [[Tagagamit:MediaWiki message delivery|MediaWiki message delivery]] ([[Usapang tagagamit:MediaWiki message delivery|kausapin]]) 17:11, 3 Abril 2026 (UTC) (This message was sent to [[:Wiksiyonaryo:Usaping WikiMedia]] and is being posted here due to a redirect.) <!-- Message sent by User:ZI Jony@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Non-Technical_Village_Pumps_distribution_list&oldid=29941252 --> == Request for comment (global AI policy) == <bdi lang="en" dir="ltr" class="mw-content-ltr"> Apologies for writing in English. {{int:Please-translate}} A [[:m:Requests for comment/Artificial intelligence policy|request for comment]] is currently being held to decide on a global AI policy. {{int:Feedback-thanks-title}} [[Tagagamit:MediaWiki message delivery|MediaWiki message delivery]] ([[Usapang tagagamit:MediaWiki message delivery|kausapin]]) 00:58, 26 Abril 2026 (UTC) </bdi> <!-- Message sent by User:Codename Noreste@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=30424282 --> jxwx8zx07wy0gx3o220i9o1aufri7kq Module:ja-see 828 34350 176656 170043 2026-04-26T05:33:02Z Yivan000 4078 176656 Scribunto text/plain -- Prevent substitution. if mw.isSubsting() then return require("Module:unsubst") end local m_ja = require("Module:ja") local m_sc = require("Module:scripts") local m_str_utils = require("Module:string utilities") local concat = table.concat local format_cat = require("Module:utilities").format_categories local insert = table.insert local load_data = mw.loadData local maintenance_cats = require("Module:headword").maintenance_cats local new_title = mw.title.new local split = m_str_utils.split local ugmatch = mw.ustring.gmatch local ugsub = mw.ustring.gsub local ulen = m_str_utils.len local umatch = m_str_utils.match local usub = m_str_utils.sub local export = {} local kana_to_romaji = require("Module:Hrkt-translit").tr local headword_data = load_data("Module:headword/data") local pagename = headword_data.pagename local lang = require('Module:languages').getByCode("ja") local Hira = m_sc.getByCode("Hira") local Kana = m_sc.getByCode("Kana") local Hrkt = m_sc.getByCode("Hrkt") local langname = lang:getCanonicalName() local data = load_data("Module:ja/data") local d_kyu = load_data("Module:ja/data/kyu") local range = load_data("Module:ja/data/range") local function gmatch_array(s, pattern) local output = {} for e in ugmatch(s, pattern) do insert(output, e) end return output end local function map(arr, f) local output = {} for _, e in ipairs(arr) do local fe = f(e) if fe ~= nil then insert(output, fe) end end return output end local function filter(arr, f) local output = {} for _, e in ipairs(arr) do if f(e) then insert(output, e) end end return output end local function contains(arr, item) for _, e in ipairs(arr) do if e == item then return true end end return false end -- f should be str->str in the following functions local function memoize(f) local output = {} return function(s) if not output[s] then output[s] = f(s) end return output[s] end end local getContent_memo = memoize(function(title) return new_title(title):getContent() or '' end) local function group(arr, f) local r = {} for _, e in ipairs(arr) do local fe = f(e) if r[#r] and r[#r].key == fe then insert(r[#r], e) else insert(r, { e, key = fe }) end end return r end local function ja(text) return '<span lang="ja" class="Jpan">' .. text .. '</span>' end local function link(lemma, display) return ja("[[" .. lemma .. "#" .. langname .. "|" .. (display or lemma) .. "]]") end local function link_bracket(lemma, display) return ja("【[[" .. lemma .. "#" .. langname .. "|" .. (display or lemma) .. "]]】") end local result --[[ returns an array of definitions, each having the format { def = <definition>, kanji_spellings = <array of alternative kanji spellings listed in {{ja-kanjitab|alt=...}}, can be overrided with {{ja-def|...}}>, kana_spellings = <array of alternative kana spellings listed in the headword template>, historical_kana_spellings = <array of historical kana spellings listed in the headword template>, header = <name of PoS header>, headword_line = <wikicode of headword line>, } ]] local function get_definitions_from_wikicode(wikicode, title) local current_kanji_spellings = {} local current_kanji_spellings_with_labels = {} local current_kana_spellings = {} local current_historical_kana_spellings = {} local current_head_level = '==' local current_header = langname local current_headword_line local status -- nil, 'under_headword', 'under_kanji', 'in_ja_readings' wikicode = wikicode:gsub('\n*<br */?>\n*({{ja%-altread)', '%1') -- in the local function `function format_definition` below, -- insertion of `|hira=` affects `{{tlb}}` -- (`{{tlb|ja|followed by a verb phrase|hira=によって}}`) -- and then that bad wikitext is preprocessed -- (`The parameter "hira" is not used by this template`). -- we are not doing anything with `{{tlb}}` anyway, -- so remove it wikicode = wikicode:gsub(' *{{tlb.-}}', '') local output = {} --TLCHANGE for line in (wikicode:match("==" .. langname .. "==\n(.*)") or ""):gmatch"[^\n]+" do -- since we use {{=ja=}} format, we do that instead for line in (wikicode:match("=={{=ja=}}==\n(.*)") or ""):gmatch"[^\n]+" do if status == 'under_headword' then if line:match'^#+[^#:*]' then insert(output, { def = line :gsub('<ref>.-<.ref>', '') :gsub('<ref .->.-<.ref>', '') :gsub('<ref.-/>', '') :gsub('{{attention|ja.-}}', '') :gsub('{{senseid|ja.-}}', ''), kanji_spellings = line:match'{{ja%-def|' and split(line:match'{{ja%-def|([^}]+)', '|') or line:match'<!%-%- kana only %-%->' and {} or current_kanji_spellings, kanji_spellings_with_labels = current_kanji_spellings_with_labels, kana_spellings = current_kana_spellings, historical_kana_spellings = current_historical_kana_spellings, header = current_header, headword_line = current_headword_line, }) end elseif status == 'under_kanji' then if line:match'^#+[^#:*]' then insert(output, { def = '#' .. line :gsub('<ref>.-<.ref>', '') :gsub('<ref .->.-<.ref>', '') :gsub('<ref.-/>', '') :gsub('{{attention|ja.-}}', ''), kanji_spellings = {}, kanji_spellings_with_labels = {}, kana_spellings = {}, historical_kana_spellings = {}, header = current_header, headword_line = current_headword_line, }) elseif line:match'^{{ja%-readings%f[|}%z]' then output[#output].kanji_readings = {} status = 'in_ja_readings' end elseif status == 'in_ja_readings' then for rs in line:gmatch'|[a-z]+=([^|}]+)' do for r in rs:gmatch'(..-)%f[,%z],?' do r = r:gsub('%-', ''):match('..-%f[<%z]'):match'^%s*(.-)%s*$' if not contains(output[#output].kanji_readings, r) then insert(output[#output].kanji_readings, r:gsub('%-', ''):match'^%s*(.-)%s*$') end end end if line:match'}}' then status = 'under_kanji' end end -- the following branches are ordered by frequency; read backwards if line:match'^{{ja%-noun[|}]' or line:match'^{{ja%-adj[|}]' or line:match'^{{ja%-pos[|}]' or line:match'^{{ja%-phrase[|}]' or line:match'^{{ja%-verb[|}]' or line:match'^{{ja%-verb form[|}]' or line:match'^{{ja%-verb%-suru[|}]' or line:match'{{ja%-altread[|}]' then local escaped_line = line:gsub('%[%[([^%[%]|]-)|([^%[%]|]-)%]%]', '[[%1`%2]]'):gsub('|hhira=', '|hist='):gsub('|hkata=', '|hist=') escaped_line = escaped_line:gsub('|hira=', '|') -- ja-altread escaped_line = escaped_line:gsub('|kata=', '|') -- ja-altread current_kana_spellings = map(gmatch_array(escaped_line, '|([・、' .. range.kana .. '\'%^%-%. %%]+)'), m_ja.remove_ruby_markup) current_historical_kana_spellings = map(gmatch_array(escaped_line, '|hist=([' .. range.kana .. '\'%^%-%. %%]+)'), m_ja.remove_ruby_markup) current_headword_line = line status = 'under_headword' elseif line:match'^{{ja%-kanji[|}]' then current_kana_spellings = {} current_historical_kana_spellings = {} current_headword_line = line insert(output, { def = '#' .. data.grades[m_ja.kanji_grade(title)], kanji_spellings = {}, kanji_spellings_with_labels = {}, kana_spellings = {}, historical_kana_spellings = {}, header = current_header, headword_line = line, }) status = 'under_kanji' elseif line:match'^===+[^=]+===+$' then local head_level_new, header_new = line:match'^(===+)([^=]+)===+$' if not status or head_level_new:len() <= current_head_level:len() then current_head_level, current_header = head_level_new, header_new status = nil end elseif line:match("^{{ja%-kanjitab[|}]") then local alt_argument = line:match("|alt=([^|}]+)") current_kanji_spellings = alt_argument and split(alt_argument:gsub(':[^,]*', ''), ',') or {} current_kanji_spellings_with_labels = alt_argument and split(alt_argument, ',') or {} elseif line:match'^==[^=]+==$' then break end end return output end -- ditto, except that each definition also contains the title of the page it is from local function get_definitions_from_entry(title) local wikicode = getContent_memo(title) local defs = get_definitions_from_wikicode(wikicode, title) map(defs, function(def) def.title = title insert(({ Hira = true, Kana = true, ['Hira+Kana'] = true })[m_ja.script(title)] and def.kana_spellings or def.kanji_spellings, title) end) return defs end local function format_table_content(defs, frame, title, no_cat) local function ruby(kanji, kana) -- this function ought to be in [[Module:ja]] local kanji_segments = ugsub(kanji, "([" .. range.kanji .. range.ideograph .. range.latin .. range.numbers .. "]+)", "`%1`") -- returns possible matches between kanji and kana -- for example, match_k('`物`の`哀`れ', 'もののあわれ') returns { '[物](も)の[哀](のあわ)れ', '[物](もの)の[哀](あわ)れ' } local function match_k(kanji_segments, kana) if kanji_segments:find('`') then local kana_portion, kanji_portion, rest = umatch(kanji_segments, '(.-)`(.-)`(.*)') kana = umatch(kana, '^' .. kana_portion .. '(.*)') if not kana then return {} end local candidates = {} for i = 1, ulen(kana) do for _, candidate in ipairs(match_k(rest, usub(kana, i + 1))) do insert(candidates, kana_portion .. '[' .. kanji_portion .. '](' .. usub(kana, 1, i) .. ')' .. candidate) end end return candidates else return (kanji_segments == kana) and { kana } or {} end end local matches = match_k(kanji_segments, kana) local output = #matches == 1 and matches[1] or ('[' .. kanji .. '](' .. kana .. ')') return output:gsub("%[([^%[%]]+)%]%(([^%(%)]+)%)", "<ruby><rb>%1</rb><rt>%2</rt></ruby>") end local function format_headword(defs) local def_title = defs[1].title local kana = defs[1].kana_spellings[1] local headword = link_bracket(def_title, kana and pagename ~= kana and ruby(def_title, kana) or def_title) local kanji_grade = ulen(def_title) == 1 and m_ja.kanji_grade(def_title) return "<span style=\"font-size:x-large\">" .. headword .. "</span>" .. (kanji_grade and "<span class=\"explain\" title=\"" .. data.grades[kanji_grade] .. "\" style=\"vertical-align: top;\">" .. data.grade_labels[kanji_grade] .. "</span>" or "" ) end local preprocess_memo = memoize(function (s) return frame:preprocess(s) end) local function format_definitions(defs) local headword_line_categories = {} local alt_forms, alt_forms_rep = {}, { [title] = true, [defs[1].title] = true } local kanji_readings local function format_definition(def) local cat_prefixes = { ["CAT"] = true, ["CATEGORY"] = true } local def_text = def.def:match'{{rfdef[|}]' and "''This term needs a translation to English.''" or preprocess_memo(def.def :gsub('^#+ *', '') --TODO: strip unwanted templates and parser functions (e.g. {{c}}). Will use wiki parser once ready, as this can get very complex. ) :gsub("(%[%[[ _]*(%a-)[ _]*:.-%]%])", function(link, cat_prefix) if cat_prefixes[cat_prefix:upper()] then return "" end return link end) local def_prefix = def.def:match'^#+':gsub('#', ':') local def_pos_label = ' <span style="padding-right:.6em;color:var(--wikt-palette-darkgrey, #54595d);font-size:80%">[' .. def.header:ulower() .. ']</span> ' if not no_cat and def.kana_spellings[1] then local cat_hira, cat_kata = {}, {} require'Module:Jpan-headword'.cat{ lang = lang, pagename = title, categories = cat_hira, katakana_category = cat_kata, pos = def.header:gsub('^.', string.ulower) } insert(headword_line_categories, format_cat( cat_hira, lang, lang:makeSortKey(def.kana_spellings[1]) )) insert(headword_line_categories, format_cat( cat_kata, lang, lang:makeSortKey(def.kana_spellings[1], Kana) )) end if def.kana_spellings[1] then alt_forms_rep[def.kana_spellings[1]] = true end for _, s in ipairs(def.kanji_spellings) do if not alt_forms_rep[s] then alt_forms_rep[s] = true insert(alt_forms, s) end end for _, s in ipairs(def.kana_spellings) do if not alt_forms_rep[s] then alt_forms_rep[s] = true insert(alt_forms, s) end end kanji_readings = def.kanji_readings or kanji_readings return def_prefix .. def_pos_label .. def_text end local formatted_defs = concat(map(defs, format_definition), '\n') if #alt_forms == 1 and alt_forms[1] == title then alt_forms = {} end return concat(headword_line_categories) .. '\n' .. formatted_defs .. (#alt_forms > 0 and '\n: <div style="background-color:var(--wikt-palette-cream, #f8f8f0)"><span style="color:var(--wikt-palette-darkgrey, #54595d);font-size:80%">' .. (#alt_forms == 1 and 'Alternative spelling' or 'Alternative spellings') .. '</span><br><span style="margin-left:.8em">' .. concat(map(alt_forms, link), ', ') .. '</span></div>' or '') .. (kanji_readings and '\n: <div style="background-color:var(--wikt-palette-cream, #f8f8f0)"><span style="color:var(--wikt-palette-darkgrey, #54595d);font-size:80%">Kanji reading:</span><br><span style="margin-left:.8em">' .. concat(map(kanji_readings, link), ', ') .. '</span></div>' or '') end local is_first_row = true local function format_row(defs) local output = '|-\n| style="white-space:nowrap;width:15%;vertical-align:top;' .. (is_first_row and '' or 'border-top:1px solid lightgray;') .. '" | ' .. format_headword(defs) .. '\n| style="' .. (is_first_row and '' or 'border-top:1px solid lightgray;') .. '" |\n' .. format_definitions(defs) .. '\n' is_first_row = false return output end local def_groups = group(defs, function(def) return def.title .. ',' .. (def.kana_spellings[1] or '') end) local rows = map(def_groups, format_row) return '{| style="width: 100%"\n' .. concat(rows) .. '|}' end local function translit(title) local sc = m_ja.script(title) if sc == "Hira" or sc == "Kana" or sc == "Hira+Kana" then return kana_to_romaji(title, "ja") end end local function translit_kana(title) return kana_to_romaji(title, "ja") end local redirect_type = { -- auto-detected types { name = 'romaji', article = 'the', sc = "Latn", display = function(title) return title end, detect = function(title, defs) if m_ja.script(title) ~= 'Romaji' then return {} end local rom = title:ulower():gsub('[- ]', '') return filter(defs, function(def) for _, k in ipairs(def.kana_spellings) do if rom == kana_to_romaji(k, "ja") then insert(result, format_cat({langname .. " romanizations"}, lang)) return true end end return false end) end, no_cat = true, }, { name = 'hiragana spelling', article = 'the', translit = translit_kana, detect = function(title, defs) if m_ja.script(title) ~= 'Hira' then return {} end local rom = kana_to_romaji(title, "ja"):ulower():gsub('[- ]', '') return filter(defs, function(def) if not contains(def.kana_spellings, title) and contains(def.historical_kana_spellings, title) then return false end for _, k in ipairs(def.kana_spellings) do if rom == kana_to_romaji(k, "ja") then return true end end return false end) end, }, { name = 'katakana spelling', article = 'the', translit = translit_kana, detect = function(title, defs) if m_ja.script(title) ~= 'Kana' then return {} end local rom = kana_to_romaji(title, "ja"):ulower():gsub('[- ]', '') return filter(defs, function(def) if not contains(def.kana_spellings, title) and contains(def.historical_kana_spellings, title) then return false end for _, k in ipairs(def.kana_spellings) do if rom == kana_to_romaji(k, "ja") then return true end end return false end) end, }, { name = 'historical kana spelling', article = 'a', translit = function(title) return kana_to_romaji(title, "ja", nil, {hist = true}) end, detect = function(title, defs) return filter(defs, function(def) if not contains(def.kana_spellings, title) and contains(def.historical_kana_spellings, title) then local sc = m_ja.script(title) if sc == 'Hira' then insert(result, format_cat( {langname .. " historical hiragana"}, lang, lang:makeSortKey(def.historical_kana_spellings[1], Hira) )) elseif sc == 'Kana' then insert(result, format_cat( {langname .. " historical katakana"}, lang, lang:makeSortKey(def.historical_kana_spellings[1], Kana) )) elseif sc == 'Hira+Kana' then insert(result, format_cat( {langname .. " terms spelled with mixed historical kana"}, lang, lang:makeSortKey(def.historical_kana_spellings[1], Hrkt) )) end return true end end) end, }, { name = 'kyūjitai', article = 'the', detect = function(title, defs) local shin = title:gsub('.[\128-\191]*', function(c) if c == '辨' or c == '辯' or c == '瓣' then return '弁' end return d_kyu[1]:match('(%S*)' .. c .. '%s') or c end) if shin == title then return {} end return ulen(title) == 1 and filter(defs, function(def) return def.header == "Kanji" end) or filter(defs, function(def) if shin == def.title then if def.kana_spellings[1] then insert(result, format_cat({langname .. " kyūjitai spellings"}, lang, lang:makeSortKey(def.kana_spellings[1]))) end return true end end) end, display = function(title) return ja(title:gsub('.[\128-\191]*', function(c) return d_kyu[1]:match(c .. '(&#x%x+;)%s') or c end)) end, no_cat = true, }, { name = 'kyūjitai of an alternative spelling', article = 'the', detect = function(title, defs, key) local shin = title:gsub('.[\128-\191]*', function(c) if c == '辨' or c == '辯' or c == '瓣' then return '弁' end return d_kyu[1]:match('(%S*)' .. c .. '%s') or c end) if shin == title then return {} end return filter(defs, function(def) if shin ~= def.title and contains(def.kanji_spellings, shin) and (not key or contains(def.kana_spellings, key)) then if def.kana_spellings[1] then insert(result, format_cat({langname .. " kyūjitai spellings"}, lang, lang:makeSortKey(def.kana_spellings[1]))) end return true end end) end, display = function(title) return ja(title:gsub('.[\128-\191]*', function(c) return d_kyu[1]:match(c .. '(&#x%x+;)%s') or c end)) end, display_labels = function(title) local shin = title:gsub('.[\128-\191]*', function(c) if c == '辨' or c == '辯' or c == '瓣' then return '弁' end return d_kyu[1]:match('(%S*)' .. c .. '%s') or c end) return '(' .. link(shin) .. ')' end, no_cat = true, }, { name = 'alternative spelling', article = 'an', detect = function(title, defs, key) return filter(defs, function(def) return contains(def.kanji_spellings, title) and (not key or contains(def.kana_spellings, key)) or contains(def.kana_spellings, title) end) end, display_labels = function(title, defs) for _, def in ipairs(defs) do for _, kl in ipairs(def.kanji_spellings_with_labels) do local ks, lb = kl:match'^(.-):(.+)$' if ks == title then return require("Module:labels").show_labels { labels = split(lb, ' '), lang = lang } end end end return '' end, is_fallback = true, }, -- manual input only types ['vk'] = { name = 'variant kanji form', article = 'a', detect = function(title, defs) return ulen(title) == 1 and filter(defs, function(def) return def.header == "Kanji" end) or defs end, }, ['iter'] = { name = 'form with iteration marks', article = 'a', detect = function(_, defs) return defs end, }, ['niter'] = { name = 'form without iteration marks', article = 'a', detect = function(_, defs) return defs end, }, ['eshin'] = { name = 'extended shinjitai', article = 'an', detect = function(title, defs) return ulen(title) == 1 and filter(defs, function(def) return def.header == "Kanji" end) or defs end, }, names = { ['rom'] = 1, ['hira'] = 2, ['kata'] = 3, ['hkana'] = 4, ['kyu'] = 5, ['kyualt'] = 6, ['alt'] = 7, ['vk'] = 'vk', ['iter'] = 'iter', ['niter'] = 'niter', ['eshin'] = 'eshin', }, } function export.show(frame) local title = pagename local args = require("Module:parameters").process(frame:getParent().args, { [1] = { list = true }, ['term'] = { list = true, allow_holes = true, separate_no_index = true }, ['type'] = { list = true, allow_holes = true, separate_no_index = true }, ['key'] = { list = true, allow_holes = true }, }) result = { '{| class="wikitable ja-see" style="min-width:70%"\n|-\n| <b>', 'Para sa pagbigkas at ibig-sabihin ng ', ja(title), ' – tingnan ang ', --TLCHANGE #args[1] > 1 and 'mga ' or '', 'entradang ito.', '</b>', } local bad_redirects = {} local name_count = 0 local name_previous, rt_previous local function make_footnote(term) insert(result, '\n|-\n| (Ang salitang ito, ') --TLCHANGE '\n|-\n| (This term, ' insert(result, require("Module:links").full_link({ lang = lang, sc = rt_previous.sc and require("Module:scripts").getByCode(rt_previous.sc) or nil, alt = (rt_previous.display or ja)(title), tr = (rt_previous.translit or translit)(term or title) or nil }, "term")) insert(result, ', ay ') --TLCHANGE ', is ' insert(result, name_previous) insert(result, ' ng ') --TLCHANGE ' of the above term' --TLCHANGE add "mga" pluraliation if name_count > 1 then insert(result, 'mga') end insert(result, ' salitang nasa itaas') --TLCHANGE remove this if name_count > 1 then insert(result, 's') end insert(result, '.)') end local function add_to_result(name, rt, defs, term) if rt.display_labels then name = name .. ' ' .. rt.display_labels(title, defs) end if name_previous and name_previous ~= name then make_footnote(term) name_count = 1 else name_count = name_count + 1 end name_previous = name rt_previous = rt insert(result, '\n|-\n| style="background-color:var(--wikt-palette-white,#ffffff);color:inherit" |\n') insert(result, format_table_content(defs, frame, title, rt.no_cat)) end for i_lemma, lemma in ipairs(args[1]) do local defs = get_definitions_from_entry(lemma) --mw.logObject(defs) --use this to inspect "defs" local label_term = args.term[i_lemma] or args.term.default local label_lemma = args.type[i_lemma] or args.type.default if label_lemma then local ll1, ll2 = label_lemma:match'^(.-)(%S*)$' local rt = redirect_type[redirect_type.names[ll2]] if rt then defs = rt.detect(title, defs) if #defs > 0 then -- This code deals with the redirect type description's articles like "the hiragana", "a rare hiragana", "an unusual hiragana" when there is a manual input |type=.... add_to_result((label_lemma:match'^an? ' or label_lemma:match'^the ') and ll1 .. rt.name or rt.article .. ' ' .. ll1 .. rt.name, rt, defs, label_term) else insert(bad_redirects, lemma) end else add_to_result(label_lemma, {}, defs, label_term) end else local success = false for _, rt in ipairs(redirect_type) do if not (success and rt.is_fallback) then local defs_try = rt.detect(title, defs, args.key[i_lemma]) if #defs_try > 0 then success = true add_to_result(rt.article .. ' ' .. rt.name, rt, defs_try, label_term) end end end if not success then insert(bad_redirects, lemma) end end end if name_previous then make_footnote(args.term.default) if new_title(langname .. ' kanji read as ' .. title, 14).exists then insert(result, '<br><span style="font-size:85%;">For a list of all kanji read as ') insert(result, ja(title)) insert(result, ', see ') insert(result, '[[:Category:' .. langname .. ' kanji read as ') insert(result, title) insert(result, ']].)</span>') end insert(result, '\n|}') else -- failure to find any definitions result[6] = ': ' .. concat(map(args[1], function(title) return '<span style="font-size:120%">' .. link(title) .. '</span>' end), ', ') .. '\n|}' end if #bad_redirects > 0 then insert(result, '\n<small class="attentionseeking">(Itong ' .. (#bad_redirects == 1 and 'mga ' or '') .. 'entrada ay hindi pa nagagawan ng pahina: ') --TLCHANGE insert(result, concat(map(bad_redirects, link), ", ")) insert(result, '.)</small>') insert(result, format_cat({langname .. " redlinks/ja-see"}, lang)) end -- Standard maintenance categories usually done by [[Module:headword]]. local lang_cats, page_cats = {}, {} maintenance_cats(headword_data.page, lang, lang_cats, page_cats) insert(result, format_cat(lang_cats, lang)) insert(result, format_cat(page_cats, nil, "-")) return concat(result) end function export.show_kango(frame) -- to be removed return export.show(frame, 'kango') end function export.show_gv(frame) -- to be removed return export.show(frame, 'glyphvar') end return export hanf92omf0nsvng8aw8uiiijbsulxhr 176657 176656 2026-04-26T05:35:59Z Yivan000 4078 176657 Scribunto text/plain -- Prevent substitution. if mw.isSubsting() then return require("Module:unsubst") end local m_ja = require("Module:ja") local m_sc = require("Module:scripts") local m_str_utils = require("Module:string utilities") local concat = table.concat local format_cat = require("Module:utilities").format_categories local insert = table.insert local load_data = mw.loadData local maintenance_cats = require("Module:headword").maintenance_cats local new_title = mw.title.new local split = m_str_utils.split local ugmatch = mw.ustring.gmatch local ugsub = mw.ustring.gsub local ulen = m_str_utils.len local umatch = m_str_utils.match local usub = m_str_utils.sub local export = {} local kana_to_romaji = require("Module:Hrkt-translit").tr local headword_data = load_data("Module:headword/data") local pagename = headword_data.pagename local lang = require('Module:languages').getByCode("ja") local Hira = m_sc.getByCode("Hira") local Kana = m_sc.getByCode("Kana") local Hrkt = m_sc.getByCode("Hrkt") local langname = lang:getCanonicalName() local data = load_data("Module:ja/data") local d_kyu = load_data("Module:ja/data/kyu") local range = load_data("Module:ja/data/range") local function gmatch_array(s, pattern) local output = {} for e in ugmatch(s, pattern) do insert(output, e) end return output end local function map(arr, f) local output = {} for _, e in ipairs(arr) do local fe = f(e) if fe ~= nil then insert(output, fe) end end return output end local function filter(arr, f) local output = {} for _, e in ipairs(arr) do if f(e) then insert(output, e) end end return output end local function contains(arr, item) for _, e in ipairs(arr) do if e == item then return true end end return false end -- f should be str->str in the following functions local function memoize(f) local output = {} return function(s) if not output[s] then output[s] = f(s) end return output[s] end end local getContent_memo = memoize(function(title) return new_title(title):getContent() or '' end) local function group(arr, f) local r = {} for _, e in ipairs(arr) do local fe = f(e) if r[#r] and r[#r].key == fe then insert(r[#r], e) else insert(r, { e, key = fe }) end end return r end local function ja(text) return '<span lang="ja" class="Jpan">' .. text .. '</span>' end local function link(lemma, display) return ja("[[" .. lemma .. "#" .. langname .. "|" .. (display or lemma) .. "]]") end local function link_bracket(lemma, display) return ja("【[[" .. lemma .. "#" .. langname .. "|" .. (display or lemma) .. "]]】") end local result --[[ returns an array of definitions, each having the format { def = <definition>, kanji_spellings = <array of alternative kanji spellings listed in {{ja-kanjitab|alt=...}}, can be overrided with {{ja-def|...}}>, kana_spellings = <array of alternative kana spellings listed in the headword template>, historical_kana_spellings = <array of historical kana spellings listed in the headword template>, header = <name of PoS header>, headword_line = <wikicode of headword line>, } ]] local function get_definitions_from_wikicode(wikicode, title) local current_kanji_spellings = {} local current_kanji_spellings_with_labels = {} local current_kana_spellings = {} local current_historical_kana_spellings = {} local current_head_level = '==' local current_header = langname local current_headword_line local status -- nil, 'under_headword', 'under_kanji', 'in_ja_readings' wikicode = wikicode:gsub('\n*<br */?>\n*({{ja%-altread)', '%1') -- in the local function `function format_definition` below, -- insertion of `|hira=` affects `{{tlb}}` -- (`{{tlb|ja|followed by a verb phrase|hira=によって}}`) -- and then that bad wikitext is preprocessed -- (`The parameter "hira" is not used by this template`). -- we are not doing anything with `{{tlb}}` anyway, -- so remove it wikicode = wikicode:gsub(' *{{tlb.-}}', '') local output = {} --TLCHANGE for line in (wikicode:match("==" .. langname .. "==\n(.*)") or ""):gmatch"[^\n]+" do -- since we use {{=ja=}} format, we do that instead for line in (wikicode:match("=={{=ja=}}==\n(.*)") or ""):gmatch"[^\n]+" do if status == 'under_headword' then if line:match'^#+[^#:*]' then insert(output, { def = line :gsub('<ref>.-<.ref>', '') :gsub('<ref .->.-<.ref>', '') :gsub('<ref.-/>', '') :gsub('{{attention|ja.-}}', '') :gsub('{{senseid|ja.-}}', ''), kanji_spellings = line:match'{{ja%-def|' and split(line:match'{{ja%-def|([^}]+)', '|') or line:match'<!%-%- kana only %-%->' and {} or current_kanji_spellings, kanji_spellings_with_labels = current_kanji_spellings_with_labels, kana_spellings = current_kana_spellings, historical_kana_spellings = current_historical_kana_spellings, header = current_header, headword_line = current_headword_line, }) end elseif status == 'under_kanji' then if line:match'^#+[^#:*]' then insert(output, { def = '#' .. line :gsub('<ref>.-<.ref>', '') :gsub('<ref .->.-<.ref>', '') :gsub('<ref.-/>', '') :gsub('{{attention|ja.-}}', ''), kanji_spellings = {}, kanji_spellings_with_labels = {}, kana_spellings = {}, historical_kana_spellings = {}, header = current_header, headword_line = current_headword_line, }) elseif line:match'^{{ja%-readings%f[|}%z]' then output[#output].kanji_readings = {} status = 'in_ja_readings' end elseif status == 'in_ja_readings' then for rs in line:gmatch'|[a-z]+=([^|}]+)' do for r in rs:gmatch'(..-)%f[,%z],?' do r = r:gsub('%-', ''):match('..-%f[<%z]'):match'^%s*(.-)%s*$' if not contains(output[#output].kanji_readings, r) then insert(output[#output].kanji_readings, r:gsub('%-', ''):match'^%s*(.-)%s*$') end end end if line:match'}}' then status = 'under_kanji' end end -- the following branches are ordered by frequency; read backwards if line:match'^{{ja%-noun[|}]' or line:match'^{{ja%-adj[|}]' or line:match'^{{ja%-pos[|}]' or line:match'^{{ja%-phrase[|}]' or line:match'^{{ja%-verb[|}]' or line:match'^{{ja%-verb form[|}]' or line:match'^{{ja%-verb%-suru[|}]' or line:match'{{ja%-altread[|}]' then local escaped_line = line:gsub('%[%[([^%[%]|]-)|([^%[%]|]-)%]%]', '[[%1`%2]]'):gsub('|hhira=', '|hist='):gsub('|hkata=', '|hist=') escaped_line = escaped_line:gsub('|hira=', '|') -- ja-altread escaped_line = escaped_line:gsub('|kata=', '|') -- ja-altread current_kana_spellings = map(gmatch_array(escaped_line, '|([・、' .. range.kana .. '\'%^%-%. %%]+)'), m_ja.remove_ruby_markup) current_historical_kana_spellings = map(gmatch_array(escaped_line, '|hist=([' .. range.kana .. '\'%^%-%. %%]+)'), m_ja.remove_ruby_markup) current_headword_line = line status = 'under_headword' elseif line:match'^{{ja%-kanji[|}]' then current_kana_spellings = {} current_historical_kana_spellings = {} current_headword_line = line insert(output, { def = '#' .. data.grades[m_ja.kanji_grade(title)], kanji_spellings = {}, kanji_spellings_with_labels = {}, kana_spellings = {}, historical_kana_spellings = {}, header = current_header, headword_line = line, }) status = 'under_kanji' elseif line:match'^===+[^=]+===+$' then local head_level_new, header_new = line:match'^(===+)([^=]+)===+$' if not status or head_level_new:len() <= current_head_level:len() then current_head_level, current_header = head_level_new, header_new status = nil end elseif line:match("^{{ja%-kanjitab[|}]") then local alt_argument = line:match("|alt=([^|}]+)") current_kanji_spellings = alt_argument and split(alt_argument:gsub(':[^,]*', ''), ',') or {} current_kanji_spellings_with_labels = alt_argument and split(alt_argument, ',') or {} elseif line:match'^==[^=]+==$' then break end end return output end -- ditto, except that each definition also contains the title of the page it is from local function get_definitions_from_entry(title) local wikicode = getContent_memo(title) local defs = get_definitions_from_wikicode(wikicode, title) map(defs, function(def) def.title = title insert(({ Hira = true, Kana = true, ['Hira+Kana'] = true })[m_ja.script(title)] and def.kana_spellings or def.kanji_spellings, title) end) return defs end local function format_table_content(defs, frame, title, no_cat) local function ruby(kanji, kana) -- this function ought to be in [[Module:ja]] local kanji_segments = ugsub(kanji, "([" .. range.kanji .. range.ideograph .. range.latin .. range.numbers .. "]+)", "`%1`") -- returns possible matches between kanji and kana -- for example, match_k('`物`の`哀`れ', 'もののあわれ') returns { '[物](も)の[哀](のあわ)れ', '[物](もの)の[哀](あわ)れ' } local function match_k(kanji_segments, kana) if kanji_segments:find('`') then local kana_portion, kanji_portion, rest = umatch(kanji_segments, '(.-)`(.-)`(.*)') kana = umatch(kana, '^' .. kana_portion .. '(.*)') if not kana then return {} end local candidates = {} for i = 1, ulen(kana) do for _, candidate in ipairs(match_k(rest, usub(kana, i + 1))) do insert(candidates, kana_portion .. '[' .. kanji_portion .. '](' .. usub(kana, 1, i) .. ')' .. candidate) end end return candidates else return (kanji_segments == kana) and { kana } or {} end end local matches = match_k(kanji_segments, kana) local output = #matches == 1 and matches[1] or ('[' .. kanji .. '](' .. kana .. ')') return output:gsub("%[([^%[%]]+)%]%(([^%(%)]+)%)", "<ruby><rb>%1</rb><rt>%2</rt></ruby>") end local function format_headword(defs) local def_title = defs[1].title local kana = defs[1].kana_spellings[1] local headword = link_bracket(def_title, kana and pagename ~= kana and ruby(def_title, kana) or def_title) local kanji_grade = ulen(def_title) == 1 and m_ja.kanji_grade(def_title) return "<span style=\"font-size:x-large\">" .. headword .. "</span>" .. (kanji_grade and "<span class=\"explain\" title=\"" .. data.grades[kanji_grade] .. "\" style=\"vertical-align: top;\">" .. data.grade_labels[kanji_grade] .. "</span>" or "" ) end local preprocess_memo = memoize(function (s) return frame:preprocess(s) end) local function format_definitions(defs) local headword_line_categories = {} local alt_forms, alt_forms_rep = {}, { [title] = true, [defs[1].title] = true } local kanji_readings local function format_definition(def) local cat_prefixes = { ["CAT"] = true, ["CATEGORY"] = true } local def_text = def.def:match'{{rfdef[|}]' and "''This term needs a translation to English.''" or preprocess_memo(def.def :gsub('^#+ *', '') --TODO: strip unwanted templates and parser functions (e.g. {{c}}). Will use wiki parser once ready, as this can get very complex. ) :gsub("(%[%[[ _]*(%a-)[ _]*:.-%]%])", function(link, cat_prefix) if cat_prefixes[cat_prefix:upper()] then return "" end return link end) local def_prefix = def.def:match'^#+':gsub('#', ':') local def_pos_label = ' <span style="padding-right:.6em;color:var(--wikt-palette-darkgrey, #54595d);font-size:80%">[' .. def.header:ulower() .. ']</span> ' if not no_cat and def.kana_spellings[1] then local cat_hira, cat_kata = {}, {} require'Module:Jpan-headword'.cat{ lang = lang, pagename = title, categories = cat_hira, katakana_category = cat_kata, pos = def.header:gsub('^.', string.ulower) } insert(headword_line_categories, format_cat( cat_hira, lang, lang:makeSortKey(def.kana_spellings[1]) )) insert(headword_line_categories, format_cat( cat_kata, lang, lang:makeSortKey(def.kana_spellings[1], Kana) )) end if def.kana_spellings[1] then alt_forms_rep[def.kana_spellings[1]] = true end for _, s in ipairs(def.kanji_spellings) do if not alt_forms_rep[s] then alt_forms_rep[s] = true insert(alt_forms, s) end end for _, s in ipairs(def.kana_spellings) do if not alt_forms_rep[s] then alt_forms_rep[s] = true insert(alt_forms, s) end end kanji_readings = def.kanji_readings or kanji_readings return def_prefix .. def_pos_label .. def_text end local formatted_defs = concat(map(defs, format_definition), '\n') if #alt_forms == 1 and alt_forms[1] == title then alt_forms = {} end return concat(headword_line_categories) .. '\n' .. formatted_defs .. (#alt_forms > 0 and '\n: <div style="background-color:var(--wikt-palette-cream, #f8f8f0)"><span style="color:var(--wikt-palette-darkgrey, #54595d);font-size:80%">' .. (#alt_forms == 1 and 'Alternative spelling' or 'Alternative spellings') .. '</span><br><span style="margin-left:.8em">' .. concat(map(alt_forms, link), ', ') .. '</span></div>' or '') .. (kanji_readings and '\n: <div style="background-color:var(--wikt-palette-cream, #f8f8f0)"><span style="color:var(--wikt-palette-darkgrey, #54595d);font-size:80%">Kanji reading:</span><br><span style="margin-left:.8em">' .. concat(map(kanji_readings, link), ', ') .. '</span></div>' or '') end local is_first_row = true local function format_row(defs) local output = '|-\n| style="white-space:nowrap;width:15%;vertical-align:top;' .. (is_first_row and '' or 'border-top:1px solid lightgray;') .. '" | ' .. format_headword(defs) .. '\n| style="' .. (is_first_row and '' or 'border-top:1px solid lightgray;') .. '" |\n' .. format_definitions(defs) .. '\n' is_first_row = false return output end local def_groups = group(defs, function(def) return def.title .. ',' .. (def.kana_spellings[1] or '') end) local rows = map(def_groups, format_row) return '{| style="width: 100%"\n' .. concat(rows) .. '|}' end local function translit(title) local sc = m_ja.script(title) if sc == "Hira" or sc == "Kana" or sc == "Hira+Kana" then return kana_to_romaji(title, "ja") end end local function translit_kana(title) return kana_to_romaji(title, "ja") end local redirect_type = { -- auto-detected types { name = 'romaji', article = 'the', sc = "Latn", display = function(title) return title end, detect = function(title, defs) if m_ja.script(title) ~= 'Romaji' then return {} end local rom = title:ulower():gsub('[- ]', '') return filter(defs, function(def) for _, k in ipairs(def.kana_spellings) do if rom == kana_to_romaji(k, "ja") then insert(result, format_cat({langname .. " romanizations"}, lang)) return true end end return false end) end, no_cat = true, }, { name = 'pagbaybay na hiragana',--TLCHANGE 'hiragana spelling', article = 'ang', --TLCHANGE 'the', translit = translit_kana, detect = function(title, defs) if m_ja.script(title) ~= 'Hira' then return {} end local rom = kana_to_romaji(title, "ja"):ulower():gsub('[- ]', '') return filter(defs, function(def) if not contains(def.kana_spellings, title) and contains(def.historical_kana_spellings, title) then return false end for _, k in ipairs(def.kana_spellings) do if rom == kana_to_romaji(k, "ja") then return true end end return false end) end, }, { name = 'pagbaybay na katakana',--TLCHANGE 'katakana spelling', article = 'ang', --TLCHANGE 'the', translit = translit_kana, detect = function(title, defs) if m_ja.script(title) ~= 'Kana' then return {} end local rom = kana_to_romaji(title, "ja"):ulower():gsub('[- ]', '') return filter(defs, function(def) if not contains(def.kana_spellings, title) and contains(def.historical_kana_spellings, title) then return false end for _, k in ipairs(def.kana_spellings) do if rom == kana_to_romaji(k, "ja") then return true end end return false end) end, }, { name = 'historical kana spelling', article = 'a', translit = function(title) return kana_to_romaji(title, "ja", nil, {hist = true}) end, detect = function(title, defs) return filter(defs, function(def) if not contains(def.kana_spellings, title) and contains(def.historical_kana_spellings, title) then local sc = m_ja.script(title) if sc == 'Hira' then insert(result, format_cat( {langname .. " historical hiragana"}, lang, lang:makeSortKey(def.historical_kana_spellings[1], Hira) )) elseif sc == 'Kana' then insert(result, format_cat( {langname .. " historical katakana"}, lang, lang:makeSortKey(def.historical_kana_spellings[1], Kana) )) elseif sc == 'Hira+Kana' then insert(result, format_cat( {langname .. " terms spelled with mixed historical kana"}, lang, lang:makeSortKey(def.historical_kana_spellings[1], Hrkt) )) end return true end end) end, }, { name = 'kyūjitai', article = 'the', detect = function(title, defs) local shin = title:gsub('.[\128-\191]*', function(c) if c == '辨' or c == '辯' or c == '瓣' then return '弁' end return d_kyu[1]:match('(%S*)' .. c .. '%s') or c end) if shin == title then return {} end return ulen(title) == 1 and filter(defs, function(def) return def.header == "Kanji" end) or filter(defs, function(def) if shin == def.title then if def.kana_spellings[1] then insert(result, format_cat({langname .. " kyūjitai spellings"}, lang, lang:makeSortKey(def.kana_spellings[1]))) end return true end end) end, display = function(title) return ja(title:gsub('.[\128-\191]*', function(c) return d_kyu[1]:match(c .. '(&#x%x+;)%s') or c end)) end, no_cat = true, }, { name = 'kyūjitai of an alternative spelling', article = 'the', detect = function(title, defs, key) local shin = title:gsub('.[\128-\191]*', function(c) if c == '辨' or c == '辯' or c == '瓣' then return '弁' end return d_kyu[1]:match('(%S*)' .. c .. '%s') or c end) if shin == title then return {} end return filter(defs, function(def) if shin ~= def.title and contains(def.kanji_spellings, shin) and (not key or contains(def.kana_spellings, key)) then if def.kana_spellings[1] then insert(result, format_cat({langname .. " kyūjitai spellings"}, lang, lang:makeSortKey(def.kana_spellings[1]))) end return true end end) end, display = function(title) return ja(title:gsub('.[\128-\191]*', function(c) return d_kyu[1]:match(c .. '(&#x%x+;)%s') or c end)) end, display_labels = function(title) local shin = title:gsub('.[\128-\191]*', function(c) if c == '辨' or c == '辯' or c == '瓣' then return '弁' end return d_kyu[1]:match('(%S*)' .. c .. '%s') or c end) return '(' .. link(shin) .. ')' end, no_cat = true, }, { name = 'alternative spelling', article = 'an', detect = function(title, defs, key) return filter(defs, function(def) return contains(def.kanji_spellings, title) and (not key or contains(def.kana_spellings, key)) or contains(def.kana_spellings, title) end) end, display_labels = function(title, defs) for _, def in ipairs(defs) do for _, kl in ipairs(def.kanji_spellings_with_labels) do local ks, lb = kl:match'^(.-):(.+)$' if ks == title then return require("Module:labels").show_labels { labels = split(lb, ' '), lang = lang } end end end return '' end, is_fallback = true, }, -- manual input only types ['vk'] = { name = 'variant kanji form', article = 'a', detect = function(title, defs) return ulen(title) == 1 and filter(defs, function(def) return def.header == "Kanji" end) or defs end, }, ['iter'] = { name = 'form with iteration marks', article = 'a', detect = function(_, defs) return defs end, }, ['niter'] = { name = 'form without iteration marks', article = 'a', detect = function(_, defs) return defs end, }, ['eshin'] = { name = 'extended shinjitai', article = 'an', detect = function(title, defs) return ulen(title) == 1 and filter(defs, function(def) return def.header == "Kanji" end) or defs end, }, names = { ['rom'] = 1, ['hira'] = 2, ['kata'] = 3, ['hkana'] = 4, ['kyu'] = 5, ['kyualt'] = 6, ['alt'] = 7, ['vk'] = 'vk', ['iter'] = 'iter', ['niter'] = 'niter', ['eshin'] = 'eshin', }, } function export.show(frame) local title = pagename local args = require("Module:parameters").process(frame:getParent().args, { [1] = { list = true }, ['term'] = { list = true, allow_holes = true, separate_no_index = true }, ['type'] = { list = true, allow_holes = true, separate_no_index = true }, ['key'] = { list = true, allow_holes = true }, }) result = { '{| class="wikitable ja-see" style="min-width:70%"\n|-\n| <b>', 'Para sa pagbigkas at ibig-sabihin ng ', ja(title), ' – tingnan ang ', --TLCHANGE #args[1] > 1 and 'mga ' or '', 'entradang ito.', '</b>', } local bad_redirects = {} local name_count = 0 local name_previous, rt_previous local function make_footnote(term) insert(result, '\n|-\n| (Ang salitang ito, ') --TLCHANGE '\n|-\n| (This term, ' insert(result, require("Module:links").full_link({ lang = lang, sc = rt_previous.sc and require("Module:scripts").getByCode(rt_previous.sc) or nil, alt = (rt_previous.display or ja)(title), tr = (rt_previous.translit or translit)(term or title) or nil }, "term")) insert(result, ', ay ') --TLCHANGE ', is ' insert(result, name_previous) insert(result, ' ng ') --TLCHANGE ' of the above term' --TLCHANGE add "mga" pluraliation if name_count > 1 then insert(result, 'mga') end insert(result, ' salitang nasa itaas') --TLCHANGE remove this if name_count > 1 then insert(result, 's') end insert(result, '.)') end local function add_to_result(name, rt, defs, term) if rt.display_labels then name = name .. ' ' .. rt.display_labels(title, defs) end if name_previous and name_previous ~= name then make_footnote(term) name_count = 1 else name_count = name_count + 1 end name_previous = name rt_previous = rt insert(result, '\n|-\n| style="background-color:var(--wikt-palette-white,#ffffff);color:inherit" |\n') insert(result, format_table_content(defs, frame, title, rt.no_cat)) end for i_lemma, lemma in ipairs(args[1]) do local defs = get_definitions_from_entry(lemma) --mw.logObject(defs) --use this to inspect "defs" local label_term = args.term[i_lemma] or args.term.default local label_lemma = args.type[i_lemma] or args.type.default if label_lemma then local ll1, ll2 = label_lemma:match'^(.-)(%S*)$' local rt = redirect_type[redirect_type.names[ll2]] if rt then defs = rt.detect(title, defs) if #defs > 0 then -- This code deals with the redirect type description's articles like "the hiragana", "a rare hiragana", "an unusual hiragana" when there is a manual input |type=.... add_to_result((label_lemma:match'^an? ' or label_lemma:match'^the ') and ll1 .. rt.name or rt.article .. ' ' .. ll1 .. rt.name, rt, defs, label_term) else insert(bad_redirects, lemma) end else add_to_result(label_lemma, {}, defs, label_term) end else local success = false for _, rt in ipairs(redirect_type) do if not (success and rt.is_fallback) then local defs_try = rt.detect(title, defs, args.key[i_lemma]) if #defs_try > 0 then success = true add_to_result(rt.article .. ' ' .. rt.name, rt, defs_try, label_term) end end end if not success then insert(bad_redirects, lemma) end end end if name_previous then make_footnote(args.term.default) if new_title(langname .. ' kanji read as ' .. title, 14).exists then insert(result, '<br><span style="font-size:85%;">For a list of all kanji read as ') insert(result, ja(title)) insert(result, ', see ') insert(result, '[[:Category:' .. langname .. ' kanji read as ') insert(result, title) insert(result, ']].)</span>') end insert(result, '\n|}') else -- failure to find any definitions result[6] = ': ' .. concat(map(args[1], function(title) return '<span style="font-size:120%">' .. link(title) .. '</span>' end), ', ') .. '\n|}' end if #bad_redirects > 0 then insert(result, '\n<small class="attentionseeking">(Itong ' .. (#bad_redirects == 1 and 'mga ' or '') .. 'entrada ay hindi pa nagagawan ng pahina: ') --TLCHANGE insert(result, concat(map(bad_redirects, link), ", ")) insert(result, '.)</small>') insert(result, format_cat({langname .. " redlinks/ja-see"}, lang)) end -- Standard maintenance categories usually done by [[Module:headword]]. local lang_cats, page_cats = {}, {} maintenance_cats(headword_data.page, lang, lang_cats, page_cats) insert(result, format_cat(lang_cats, lang)) insert(result, format_cat(page_cats, nil, "-")) return concat(result) end function export.show_kango(frame) -- to be removed return export.show(frame, 'kango') end function export.show_gv(frame) -- to be removed return export.show(frame, 'glyphvar') end return export 3eb28zbob2g9xt9x1zxe48p4vr2xui8 稲見 0 36778 176648 171764 2026-04-25T16:20:38Z Hiyuune 5522 /* Hapones */ 176648 wikitext text/x-wiki =={{=ja=}}== {{ja-kanjitab|いな|み|yomi=k}} ===Pagbigkas=== {{ja-pron|いなみ|acc=1}} ===Pangngalang pantangi=== {{ja-pos|proper|いなみ}} # {{surname|ja}} 7n6vl33y41blvh6p4r51769fo3yx9t9 いなみ 0 38076 176649 2026-04-25T16:22:13Z Hiyuune 5522 Nilikha ang pahina na may '=={{=ja=}}== {{ja-see|稲見}}' 176649 wikitext text/x-wiki =={{=ja=}}== {{ja-see|稲見}} l1ny1gdeu4xakhzdp1x3aw036n42p72 Kategorya:Viyetnamita na salitang may pagbigkas na awdiyo 14 38077 176660 2026-04-26T05:46:42Z Yivan000 4078 Nilikha ang pahina na may '{{auto cat}}' 176660 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Padron:Hani-categoryTOC 10 38078 176661 2026-04-26T05:48:00Z Yivan000 4078 Nilikha ang pahina na may '<div style="text-align:center"> [[Appendix:Chinese Cangjie|Cangjie]] - [[Appendix:Chinese four corner|Four Corner]] - [[Appendix:Chinese Pinyin|Pinyin]] - [[Appendix:Chinese radical|Radicals]] - [[Appendix:Chinese total strokes|Total Strokes]] - [[Appendix:Chinese Wubi Hua|Wubi Hua]] - [[Appendix:Chinese Wubi Xing|Wubi Xing]] - [[Appendix:Chinese Zhuyin|Zhuyin]] </div> {| class="plainlinks" |- style="vertical-align: top;" | style="white-space: nowrap;" | {{0}}1 s...' 176661 wikitext text/x-wiki <div style="text-align:center"> [[Appendix:Chinese Cangjie|Cangjie]] - [[Appendix:Chinese four corner|Four Corner]] - [[Appendix:Chinese Pinyin|Pinyin]] - [[Appendix:Chinese radical|Radicals]] - [[Appendix:Chinese total strokes|Total Strokes]] - [[Appendix:Chinese Wubi Hua|Wubi Hua]] - [[Appendix:Chinese Wubi Xing|Wubi Xing]] - [[Appendix:Chinese Zhuyin|Zhuyin]] </div> {| class="plainlinks" |- style="vertical-align: top;" | style="white-space: nowrap;" | {{0}}1 stroke | style="padding: 0 0.5em;" | &ndash; | class="{{{2|Hani}}}" lang="{{{1|mul}}}" | [{{fullurl:{{FULLPAGENAMEE}}|from=一}} 一] [{{fullurl:{{FULLPAGENAMEE}}|from=丨}} 丨] [{{fullurl:{{FULLPAGENAMEE}}|from=丶}} 丶] [{{fullurl:{{FULLPAGENAMEE}}|from=丿}} 丿] [{{fullurl:{{FULLPAGENAMEE}}|from=乙}} 乙] [{{fullurl:{{FULLPAGENAMEE}}|from=亅}} 亅] |- style="vertical-align: top;" | style="white-space: nowrap;" | {{0}}2 strokes | style="padding: 0 0.5em;" | &ndash; | class="{{{2|Hani}}}" lang="{{{1|mul}}}" | [{{fullurl:{{FULLPAGENAMEE}}|from=二}} 二] [{{fullurl:{{FULLPAGENAMEE}}|from=亠}} 亠] [{{fullurl:{{FULLPAGENAMEE}}|from=人}} 人] [{{fullurl:{{FULLPAGENAMEE}}|from=儿}} 儿] [{{fullurl:{{FULLPAGENAMEE}}|from=入}} 入] [{{fullurl:{{FULLPAGENAMEE}}|from=八}} 八] [{{fullurl:{{FULLPAGENAMEE}}|from=冂}} 冂] [{{fullurl:{{FULLPAGENAMEE}}|from=冖}} 冖] [{{fullurl:{{FULLPAGENAMEE}}|from=冫}} 冫] [{{fullurl:{{FULLPAGENAMEE}}|from=几}} 几] [{{fullurl:{{FULLPAGENAMEE}}|from=凵}} 凵] [{{fullurl:{{FULLPAGENAMEE}}|from=刀}} 刀] [{{fullurl:{{FULLPAGENAMEE}}|from=力}} 力] [{{fullurl:{{FULLPAGENAMEE}}|from=勹}} 勹] [{{fullurl:{{FULLPAGENAMEE}}|from=匕}} 匕] [{{fullurl:{{FULLPAGENAMEE}}|from=匚}} 匚] [{{fullurl:{{FULLPAGENAMEE}}|from=匸}} 匸] [{{fullurl:{{FULLPAGENAMEE}}|from=十}} 十] [{{fullurl:{{FULLPAGENAMEE}}|from=卜}} 卜] [{{fullurl:{{FULLPAGENAMEE}}|from=卩}} 卩] [{{fullurl:{{FULLPAGENAMEE}}|from=厂}} 厂] [{{fullurl:{{FULLPAGENAMEE}}|from=厶}} 厶] [{{fullurl:{{FULLPAGENAMEE}}|from=又}} 又] |- style="vertical-align: top;" | style="white-space: nowrap;" | {{0}}3 strokes | style="padding: 0 0.5em;" | &ndash; | class="{{{2|Hani}}}" lang="{{{1|mul}}}" | [{{fullurl:{{FULLPAGENAMEE}}|from=口}} 口] [{{fullurl:{{FULLPAGENAMEE}}|from=囗}} 囗] [{{fullurl:{{FULLPAGENAMEE}}|from=土}} 土] [{{fullurl:{{FULLPAGENAMEE}}|from=士}} 士] [{{fullurl:{{FULLPAGENAMEE}}|from=夂}} 夂] [{{fullurl:{{FULLPAGENAMEE}}|from=夊}} 夊] [{{fullurl:{{FULLPAGENAMEE}}|from=夕}} 夕] [{{fullurl:{{FULLPAGENAMEE}}|from=大}} 大] [{{fullurl:{{FULLPAGENAMEE}}|from=女}} 女] [{{fullurl:{{FULLPAGENAMEE}}|from=子}} 子] [{{fullurl:{{FULLPAGENAMEE}}|from=宀}} 宀] [{{fullurl:{{FULLPAGENAMEE}}|from=寸}} 寸] [{{fullurl:{{FULLPAGENAMEE}}|from=小}} 小] [{{fullurl:{{FULLPAGENAMEE}}|from=尢}} 尢] [{{fullurl:{{FULLPAGENAMEE}}|from=尸}} 尸] [{{fullurl:{{FULLPAGENAMEE}}|from=屮}} 屮] [{{fullurl:{{FULLPAGENAMEE}}|from=山}} 山] [{{fullurl:{{FULLPAGENAMEE}}|from=巛}} 巛] [{{fullurl:{{FULLPAGENAMEE}}|from=工}} 工] [{{fullurl:{{FULLPAGENAMEE}}|from=己}} 己] [{{fullurl:{{FULLPAGENAMEE}}|from=巾}} 巾] [{{fullurl:{{FULLPAGENAMEE}}|from=干}} 干] [{{fullurl:{{FULLPAGENAMEE}}|from=幺}} 幺] [{{fullurl:{{FULLPAGENAMEE}}|from=广}} 广] [{{fullurl:{{FULLPAGENAMEE}}|from=廴}} 廴] [{{fullurl:{{FULLPAGENAMEE}}|from=廾}} 廾] [{{fullurl:{{FULLPAGENAMEE}}|from=弋}} 弋] [{{fullurl:{{FULLPAGENAMEE}}|from=弓}} 弓] [{{fullurl:{{FULLPAGENAMEE}}|from=彐}} 彐] [{{fullurl:{{FULLPAGENAMEE}}|from=彡}} 彡] [{{fullurl:{{FULLPAGENAMEE}}|from=彳}} 彳] |- style="vertical-align: top;" | style="white-space: nowrap;" | {{0}}4 strokes | style="padding: 0 0.5em;" | &ndash; | class="{{{2|Hani}}}" lang="{{{1|mul}}}" | [{{fullurl:{{FULLPAGENAMEE}}|from=心}} 心] [{{fullurl:{{FULLPAGENAMEE}}|from=戈}} 戈] [{{fullurl:{{FULLPAGENAMEE}}|from=戶}} 戶] [{{fullurl:{{FULLPAGENAMEE}}|from=手}} 手] [{{fullurl:{{FULLPAGENAMEE}}|from=支}} 支] [{{fullurl:{{FULLPAGENAMEE}}|from=攴}} 攴] [{{fullurl:{{FULLPAGENAMEE}}|from=文}} 文] [{{fullurl:{{FULLPAGENAMEE}}|from=斗}} 斗] [{{fullurl:{{FULLPAGENAMEE}}|from=斤}} 斤] [{{fullurl:{{FULLPAGENAMEE}}|from=方}} 方] [{{fullurl:{{FULLPAGENAMEE}}|from=无}} 无] [{{fullurl:{{FULLPAGENAMEE}}|from=日}} 日] [{{fullurl:{{FULLPAGENAMEE}}|from=曰}} 曰] [{{fullurl:{{FULLPAGENAMEE}}|from=月}} 月] [{{fullurl:{{FULLPAGENAMEE}}|from=木}} 木] [{{fullurl:{{FULLPAGENAMEE}}|from=欠}} 欠] [{{fullurl:{{FULLPAGENAMEE}}|from=止}} 止] [{{fullurl:{{FULLPAGENAMEE}}|from=歹}} 歹] [{{fullurl:{{FULLPAGENAMEE}}|from=殳}} 殳] [{{fullurl:{{FULLPAGENAMEE}}|from=毋}} 毋] [{{fullurl:{{FULLPAGENAMEE}}|from=比}} 比] [{{fullurl:{{FULLPAGENAMEE}}|from=毛}} 毛] [{{fullurl:{{FULLPAGENAMEE}}|from=氏}} 氏] [{{fullurl:{{FULLPAGENAMEE}}|from=气}} 气] [{{fullurl:{{FULLPAGENAMEE}}|from=水}} 水] [{{fullurl:{{FULLPAGENAMEE}}|from=火}} 火] [{{fullurl:{{FULLPAGENAMEE}}|from=爪}} 爪] [{{fullurl:{{FULLPAGENAMEE}}|from=父}} 父] [{{fullurl:{{FULLPAGENAMEE}}|from=爻}} 爻] [{{fullurl:{{FULLPAGENAMEE}}|from=爿}} 爿] [{{fullurl:{{FULLPAGENAMEE}}|from=片}} 片] [{{fullurl:{{FULLPAGENAMEE}}|from=牙}} 牙] [{{fullurl:{{FULLPAGENAMEE}}|from=牛}} 牛] [{{fullurl:{{FULLPAGENAMEE}}|from=犬}} 犬] |- style="vertical-align: top;" | style="white-space: nowrap;" | {{0}}5 strokes | style="padding: 0 0.5em;" | &ndash; | class="{{{2|Hani}}}" lang="{{{1|mul}}}" | [{{fullurl:{{FULLPAGENAMEE}}|from=玄}} 玄] [{{fullurl:{{FULLPAGENAMEE}}|from=玉}} 玉] [{{fullurl:{{FULLPAGENAMEE}}|from=瓜}} 瓜] [{{fullurl:{{FULLPAGENAMEE}}|from=瓦}} 瓦] [{{fullurl:{{FULLPAGENAMEE}}|from=甘}} 甘] [{{fullurl:{{FULLPAGENAMEE}}|from=生}} 生] [{{fullurl:{{FULLPAGENAMEE}}|from=用}} 用] [{{fullurl:{{FULLPAGENAMEE}}|from=田}} 田] [{{fullurl:{{FULLPAGENAMEE}}|from=疋}} 疋] [{{fullurl:{{FULLPAGENAMEE}}|from=疒}} 疒] [{{fullurl:{{FULLPAGENAMEE}}|from=癶}} 癶] [{{fullurl:{{FULLPAGENAMEE}}|from=白}} 白] [{{fullurl:{{FULLPAGENAMEE}}|from=皮}} 皮] [{{fullurl:{{FULLPAGENAMEE}}|from=皿}} 皿] [{{fullurl:{{FULLPAGENAMEE}}|from=目}} 目] [{{fullurl:{{FULLPAGENAMEE}}|from=矛}} 矛] [{{fullurl:{{FULLPAGENAMEE}}|from=矢}} 矢] [{{fullurl:{{FULLPAGENAMEE}}|from=石}} 石] [{{fullurl:{{FULLPAGENAMEE}}|from=示}} 示] [{{fullurl:{{FULLPAGENAMEE}}|from=禸}} 禸] [{{fullurl:{{FULLPAGENAMEE}}|from=禾}} 禾] [{{fullurl:{{FULLPAGENAMEE}}|from=穴}} 穴] [{{fullurl:{{FULLPAGENAMEE}}|from=立}} 立] |- style="vertical-align: top;" | style="white-space: nowrap;" | {{0}}6 strokes | style="padding: 0 0.5em;" | &ndash; | class="{{{2|Hani}}}" lang="{{{1|mul}}}" | [{{fullurl:{{FULLPAGENAMEE}}|from=竹}} 竹] [{{fullurl:{{FULLPAGENAMEE}}|from=米}} 米] [{{fullurl:{{FULLPAGENAMEE}}|from=糸}} 糸] [{{fullurl:{{FULLPAGENAMEE}}|from=缶}} 缶] [{{fullurl:{{FULLPAGENAMEE}}|from=网}} 网] [{{fullurl:{{FULLPAGENAMEE}}|from=羊}} 羊] [{{fullurl:{{FULLPAGENAMEE}}|from=羽}} 羽] [{{fullurl:{{FULLPAGENAMEE}}|from=老}} 老] [{{fullurl:{{FULLPAGENAMEE}}|from=而}} 而] [{{fullurl:{{FULLPAGENAMEE}}|from=耒}} 耒] [{{fullurl:{{FULLPAGENAMEE}}|from=耳}} 耳] [{{fullurl:{{FULLPAGENAMEE}}|from=聿}} 聿] [{{fullurl:{{FULLPAGENAMEE}}|from=肉}} 肉] [{{fullurl:{{FULLPAGENAMEE}}|from=臣}} 臣] [{{fullurl:{{FULLPAGENAMEE}}|from=自}} 自] [{{fullurl:{{FULLPAGENAMEE}}|from=至}} 至] [{{fullurl:{{FULLPAGENAMEE}}|from=臼}} 臼] [{{fullurl:{{FULLPAGENAMEE}}|from=舌}} 舌] [{{fullurl:{{FULLPAGENAMEE}}|from=舛}} 舛] [{{fullurl:{{FULLPAGENAMEE}}|from=舟}} 舟] [{{fullurl:{{FULLPAGENAMEE}}|from=艮}} 艮] [{{fullurl:{{FULLPAGENAMEE}}|from=色}} 色] [{{fullurl:{{FULLPAGENAMEE}}|from=艸}} 艸] [{{fullurl:{{FULLPAGENAMEE}}|from=虍}} 虍] [{{fullurl:{{FULLPAGENAMEE}}|from=虫}} 虫] [{{fullurl:{{FULLPAGENAMEE}}|from=血}} 血] [{{fullurl:{{FULLPAGENAMEE}}|from=行}} 行] [{{fullurl:{{FULLPAGENAMEE}}|from=衣}} 衣] [{{fullurl:{{FULLPAGENAMEE}}|from=西}} 西] |- style="vertical-align: top;" | style="white-space: nowrap;" | {{0}}7 strokes | style="padding: 0 0.5em;" | &ndash; | class="{{{2|Hani}}}" lang="{{{1|mul}}}" | [{{fullurl:{{FULLPAGENAMEE}}|from=見}} 見] [{{fullurl:{{FULLPAGENAMEE}}|from=角}} 角] [{{fullurl:{{FULLPAGENAMEE}}|from=言}} 言] [{{fullurl:{{FULLPAGENAMEE}}|from=谷}} 谷] [{{fullurl:{{FULLPAGENAMEE}}|from=豆}} 豆] [{{fullurl:{{FULLPAGENAMEE}}|from=豕}} 豕] [{{fullurl:{{FULLPAGENAMEE}}|from=豸}} 豸] [{{fullurl:{{FULLPAGENAMEE}}|from=貝}} 貝] [{{fullurl:{{FULLPAGENAMEE}}|from=赤}} 赤] [{{fullurl:{{FULLPAGENAMEE}}|from=走}} 走] [{{fullurl:{{FULLPAGENAMEE}}|from=足}} 足] [{{fullurl:{{FULLPAGENAMEE}}|from=身}} 身] [{{fullurl:{{FULLPAGENAMEE}}|from=車}} 車] [{{fullurl:{{FULLPAGENAMEE}}|from=辛}} 辛] [{{fullurl:{{FULLPAGENAMEE}}|from=辰}} 辰] [{{fullurl:{{FULLPAGENAMEE}}|from=辵}} 辵] [{{fullurl:{{FULLPAGENAMEE}}|from=邑}} 邑] [{{fullurl:{{FULLPAGENAMEE}}|from=酉}} 酉] [{{fullurl:{{FULLPAGENAMEE}}|from=釆}} 釆] [{{fullurl:{{FULLPAGENAMEE}}|from=里}} 里] |- style="vertical-align: top;" | style="white-space: nowrap;" | {{0}}8 strokes | style="padding: 0 0.5em;" | &ndash; | class="{{{2|Hani}}}" lang="{{{1|mul}}}" | [{{fullurl:{{FULLPAGENAMEE}}|from=金}} 金] [{{fullurl:{{FULLPAGENAMEE}}|from=長}} 長] [{{fullurl:{{FULLPAGENAMEE}}|from=門}} 門] [{{fullurl:{{FULLPAGENAMEE}}|from=阜}} 阜] [{{fullurl:{{FULLPAGENAMEE}}|from=隶}} 隶] [{{fullurl:{{FULLPAGENAMEE}}|from=隹}} 隹] [{{fullurl:{{FULLPAGENAMEE}}|from=雨}} 雨] [{{fullurl:{{FULLPAGENAMEE}}|from=靑}} 靑] [{{fullurl:{{FULLPAGENAMEE}}|from=非}} 非] |- style="vertical-align: top;" | style="white-space: nowrap;" | {{0}}9 strokes | style="padding: 0 0.5em;" | &ndash; | class="{{{2|Hani}}}" lang="{{{1|mul}}}" | [{{fullurl:{{FULLPAGENAMEE}}|from=面}} 面] [{{fullurl:{{FULLPAGENAMEE}}|from=革}} 革] [{{fullurl:{{FULLPAGENAMEE}}|from=韋}} 韋] [{{fullurl:{{FULLPAGENAMEE}}|from=韭}} 韭] [{{fullurl:{{FULLPAGENAMEE}}|from=音}} 音] [{{fullurl:{{FULLPAGENAMEE}}|from=頁}} 頁] [{{fullurl:{{FULLPAGENAMEE}}|from=風}} 風] [{{fullurl:{{FULLPAGENAMEE}}|from=飛}} 飛] [{{fullurl:{{FULLPAGENAMEE}}|from=食}} 食] [{{fullurl:{{FULLPAGENAMEE}}|from=首}} 首] [{{fullurl:{{FULLPAGENAMEE}}|from=香}} 香] |- style="vertical-align: top;" | style="white-space: nowrap;" | 10 strokes | style="padding: 0 0.5em;" | &ndash; | class="{{{2|Hani}}}" lang="{{{1|mul}}}" | [{{fullurl:{{FULLPAGENAMEE}}|from=馬}} 馬] [{{fullurl:{{FULLPAGENAMEE}}|from=骨}} 骨] [{{fullurl:{{FULLPAGENAMEE}}|from=高}} 高] [{{fullurl:{{FULLPAGENAMEE}}|from=髟}} 髟] [{{fullurl:{{FULLPAGENAMEE}}|from=鬥}} 鬥] [{{fullurl:{{FULLPAGENAMEE}}|from=鬯}} 鬯] [{{fullurl:{{FULLPAGENAMEE}}|from=鬲}} 鬲] [{{fullurl:{{FULLPAGENAMEE}}|from=鬼}} 鬼] |- style="vertical-align: top;" | style="white-space: nowrap;" | 11 strokes | style="padding: 0 0.5em;" | &ndash; | class="{{{2|Hani}}}" lang="{{{1|mul}}}" | [{{fullurl:{{FULLPAGENAMEE}}|from=魚}} 魚] [{{fullurl:{{FULLPAGENAMEE}}|from=鳥}} 鳥] [{{fullurl:{{FULLPAGENAMEE}}|from=鹵}} 鹵] [{{fullurl:{{FULLPAGENAMEE}}|from=鹿}} 鹿] [{{fullurl:{{FULLPAGENAMEE}}|from=麥}} 麥] [{{fullurl:{{FULLPAGENAMEE}}|from=麻}} 麻] |- style="vertical-align: top;" | style="white-space: nowrap;" | 12 strokes | style="padding: 0 0.5em;" | &ndash; | class="{{{2|Hani}}}" lang="{{{1|mul}}}" | [{{fullurl:{{FULLPAGENAMEE}}|from=黃}} 黃] [{{fullurl:{{FULLPAGENAMEE}}|from=黍}} 黍] [{{fullurl:{{FULLPAGENAMEE}}|from=黑}} 黑] [{{fullurl:{{FULLPAGENAMEE}}|from=黹}} 黹] |- style="vertical-align: top;" | style="white-space: nowrap;" | 13 strokes | style="padding: 0 0.5em;" | &ndash; | class="{{{2|Hani}}}" lang="{{{1|mul}}}" | [{{fullurl:{{FULLPAGENAMEE}}|from=黽}} 黽] [{{fullurl:{{FULLPAGENAMEE}}|from=鼎}} 鼎] [{{fullurl:{{FULLPAGENAMEE}}|from=鼓}} 鼓] [{{fullurl:{{FULLPAGENAMEE}}|from=鼠}} 鼠] |- style="vertical-align: top;" | style="white-space: nowrap;" | 14 strokes | style="padding: 0 0.5em;" | &ndash; | class="{{{2|Hani}}}" lang="{{{1|mul}}}" | [{{fullurl:{{FULLPAGENAMEE}}|from=鼻}} 鼻] [{{fullurl:{{FULLPAGENAMEE}}|from=齊}} 齊] |- style="vertical-align: top;" | style="white-space: nowrap;" | 15 strokes | style="padding: 0 0.5em;" | &ndash; | class="{{{2|Hani}}}" lang="{{{1|mul}}}" | [{{fullurl:{{FULLPAGENAMEE}}|from=齒}} 齒] |- style="vertical-align: top;" | style="white-space: nowrap;" | 16 strokes | style="padding: 0 0.5em;" | &ndash; | class="{{{2|Hani}}}" lang="{{{1|mul}}}" | [{{fullurl:{{FULLPAGENAMEE}}|from=龍}} 龍] [{{fullurl:{{FULLPAGENAMEE}}|from=龜}} 龜] |- style="vertical-align: top;" | style="white-space: nowrap;" | 17 strokes | style="padding: 0 0.5em;" | &ndash; | class="{{{2|Hani}}}" lang="{{{1|mul}}}" | [{{fullurl:{{FULLPAGENAMEE}}|from=龠}} 龠] |}<!-- --><noinclude>{{tcat}}</noinclude> tranreyt185ml83ml1pamrkxu4rhnki 伊波 0 38079 176662 2026-04-26T09:31:48Z Hiyuune 5522 Nilikha ang pahina na may '=={{=ja=}}== {{ja-kanjitab|い|なみ|yomi=ok}}{{ja-kanjitab|い|は|yomi=o}} ===Pangngalang pantangi=== {{ja-pos|proper|いなみ|いは}} # {{surname|ja|sort=いなみ}}' 176662 wikitext text/x-wiki =={{=ja=}}== {{ja-kanjitab|い|なみ|yomi=ok}}{{ja-kanjitab|い|は|yomi=o}} ===Pangngalang pantangi=== {{ja-pos|proper|いなみ|いは}} # {{surname|ja|sort=いなみ}} bf59drii9h8nomplkuhh43ejn6hhu34 Module:sdh-translit 828 38080 176665 2026-04-26T11:58:21Z Yivan000 4078 Nilikha ang pahina na may '-- Authors: JavaScript ئاسۆ; Lua Ghybu, Calak local export = {} local gsub = mw.ustring.gsub local U = require("Module:string/char") local mapping = { ["ا"] = "a", ["ب"] = "b", ["چ"] = "ç", ["ج"] = "c", ["د"] = "d", ["ە"] = "e", ["ێ"] = "ê", ["ف"] = "f", ["گ"] = "g", ["ھ"] = "h", ["ه"] = "h", ["ح"] = "ḧ", ["ژ"] = "j", ["ک"] = "k", ["ڵ"] = "ll", ["ل"] = "l", ["م"] = "m", ["ن"] = "n", ["ۆ"] = "o", ["پ"] = "p", ["ق"] = "q", ["ر"]...' 176665 Scribunto text/plain -- Authors: JavaScript ئاسۆ; Lua Ghybu, Calak local export = {} local gsub = mw.ustring.gsub local U = require("Module:string/char") local mapping = { ["ا"] = "a", ["ب"] = "b", ["چ"] = "ç", ["ج"] = "c", ["د"] = "d", ["ە"] = "e", ["ێ"] = "ê", ["ف"] = "f", ["گ"] = "g", ["ھ"] = "h", ["ه"] = "h", ["ح"] = "ḧ", ["ژ"] = "j", ["ک"] = "k", ["ڵ"] = "ll", ["ل"] = "l", ["م"] = "m", ["ن"] = "n", ["ۆ"] = "o", ["پ"] = "p", ["ق"] = "q", ["ر"] = "r", ["ڕ"] = "r", ["س"] = "s", ["ش"] = "ş", ["ت"] = "t", ["ۊ"] = "ü", ["ڤ"] = "v", ["خ"] = "x", ["غ"] = "ẍ", ["ز"] = "z", ["ئ"] = "", ["ع"] = "'", [U(0x200C)] = "", -- ZWNJ (zero-width non-joiner) ["ـ"] = "", -- kashida, no sound -- numerals ["١"] = "1", ["٢"] = "2", ["٣"] = "3", ["٤"] = "4", ["٥"] = "5", ["٦"] = "6", ["٧"] = "7", ["٨"] = "8", ["٩"] = "9", ["٠"] = "0", -- persian variants to numerals ["۱"] = "1", ["۲"] = "2", ["۳"] = "3", ["۴"] = "4", ["۵"] = "5", ["۶"] = "6", ["۷"] = "7", ["۸"] = "8", ["۹"] = "9", ["۰"] = "0", } -- punctuation (leave on separate lines) local punctuation = { ["؟"] = "?", -- question mark ["،"] = ",", -- comma ["؛"] = ";", -- semicolon ["«"] = '“', -- quotation mark ["»"] = '”', -- quotation mark ["٪"] = "%", -- percent ["؉"] = "‰", -- per mille ["٫"] = ".", -- decimals ["٬"] = ",", -- thousand } -- translit local function tr_word(word) word = gsub(word, '.', punctuation) --Remove punctuation at the end of the word. local ponct if mw.ustring.find(word, '[%.%!،؛»«٪؉٫٬%p]$') then ponct = mw.ustring.sub(word, -1) word = gsub(word, '[%.%!،؛»«٪؉٫٬%p]$', '') else word = word ponct = '' end word = gsub(word, 'ه‌', "ە") --correct unicode for letter ە -- U+0647 (Arabic letter heh) + U+200C (zero-width non-joiner) → U+06D5 (Arabic letter ae) -- diacritics word = gsub(word, 'ْ', "i") -- U+0652, Arabic sukun word = gsub(word, 'ِ', "i") -- U+0650, Arabic kasra --managing 'و' and 'ی' word = gsub(word, 'و([iاێۆۊە])', "w%1") --و + vowel => w (e.g. wan) word = gsub(word, 'ی([iاێۆۊە])', "y%1") --ی + vowel => y (e.g. yas) word = gsub(word, '([iاێۆۊە])و', "%1w") --vowel + و => w (e.g. kew) word = gsub(word, '([iاێۆۊە])ی', "%1y") --vowel + ی => y (e.g. bey) word = gsub(word, '([iاێۆە])ۊ', "%1ẅ") --vowel + و => ẅ (e.g. taẅ) word = gsub(word, '([iاۆۊە])ێ', "%1ÿ") --vowel + ێ => ÿ (e.g. şeÿtan) word = gsub(word, '^و$', "û") --non-letter + 'و' + non-letter => û (=and) word = gsub(word, '([^ء-يٱ-ەiwẅyÿ])و', "%1w") --non-letter + 'و' => w (e.g. wetar) word = gsub(word, '^و', "w") --first 'و' => w (e.g. wetar) word = gsub(word, 'یو', "îw") --'ی' + 'و' => îw (e.g. mîwe) word = gsub(word, '([^و])یی', "%1îy") --'ی' + 'ی' => îy (e.g. kanîy) word = gsub(word, 'وی', "uy") --'و' + 'ی' => uy (e.g. buyn) word = gsub(word, 'وو', "û") --'و' + 'و' => û (e.g. nû) word = gsub(word, 'ی', "î") word = gsub(word, 'و', "u") word = gsub(word, 'uu', "û") --'و' + 'و' => û (e.g. nû) word = gsub(word, '([ء-يٱ-ەiîuûwẅyÿ])ڕ', "%1rr") --when 'ڕ' not at the beginning of a word => rr word = gsub(word, '([ء-يٱ-ەiîuûwẅyÿ])ئ', "%1'") --when 'ئ' not at the beginning of a word => ' word = gsub(word, '.', mapping) --insert i where applicable word = gsub(word, 'll', "Ľ") -- temporary conversion to avoid seeing ll as 2 letters word = gsub(word, 'rr', "Ŕ") -- temporary conversion to avoid seeing rr as 2 letters word = gsub(word, '([bcçdfghḧjklĽmnpqrŔsştvwẅxẍz])([fjlĽmnrŔsşvwẅxẍyÿz])([fjlĽmnrŔsşvwẅxẍyÿz])([^aeêiîouûüy])', "%1%2i%3%4") --e.g. grft -> grift word = gsub(word, '([aeêiîouûü])([bcçdfghḧjklĽmnpqrŔsştvwẅxẍz])([bcçdfghḧjklĽmnpqrŔsştvwẅxẍz])([bcçdfghḧjklĽmnpqrŔsştvwẅxẍz])$', "%1%2%3i%4") --e.g. cejnt -> cejnit word = gsub(word, '([fjlĽrŔsşwyz])([fjlĽmnrŔsşvwẅxẍyÿz])([bcçdfghḧjklĽmnpqrŔsştvwẅxẍz])', "%1i%2%3") --e.g. wrd -> wird word = gsub(word, '([bcçdghḧkmnpqtvxẍ])([fjlĽmnrŔsşvwẅxẍyÿz])([^aeêiîouûü])', "%1i%2%3") --e.g. prd -> pird word = gsub(word, '([bcçdghḧkmnpqtvxẍ])([fjlĽmnrŔsşvwẅxẍyÿz])$', "%1i%2") --like above word = gsub(word, '([^aeêiîouûü])([bcçdghḧkmnpqtvxẍ])([fjlĽmnrŔsşvwẅxẍyÿz])([^aeêiîouûü])', "%1%2i%3%4") --repeat the latter expression, in case skipped word = gsub(word, '([^aeêiîouûü])([bcçdghḧkmnpqtvxẍ])([fjlĽmnrŔsşvwẅxẍyÿz])$', "%1%2i%3") --repeat the latter expression, in case skipped word = gsub(word, '^([bcçdfghḧjklĽmnpqrŔsştvwẅxẍz])([bcçdfghḧjklĽmnpqrŔsştvwẅxẍz])([^aeêiîouûü])', "%1i%2%3") --e.g. ktk -> kitk word = gsub(word, '^([bcçdfghḧjklĽmnpqrŔsştvwẅxẍz])([bcçdfghḧjklĽmnpqrŔsştvwẅxẍz])$', "%1i%2") --e.g. ktk -> kitk word = gsub(word, '([^aeêiîouüy])([bcçdfghḧjklĽmnpqrŔsştvwẅxẍz])([bcçdfghḧjklĽmnpqrŔsştvwẅxẍz])([^aeêiîouûü])', "%1%2i%3%4") --e.g. ktk -> kitk word = gsub(word, '([^aeêiîouüy])([bcçdfghḧjklĽmnpqrŔsştvwẅxẍz])([bcçdfghḧjklĽmnpqrŔsştvwẅxẍz])$', "%1%2i%3") --e.g. ktk -> kitk word = gsub(word, '([^a-zçşêîûüĽŔ])([bcçdfghḧjklĽmnpqrŔsştvwẅxẍz])$', "%1%2i") --e.g. j -> ji word = gsub(word, '^([bcçdfghḧjklĽmnpqrŔsştvwẅxẍz])$', "%1i") --e.g. j -> ji --word = gsub(word, '([^a-zêîûçş0-9\'’])([bcçdfghḧjklĽmnpqrŔsştvwẅxẍz])([bcçdfghḧjklĽmnpqrŔsştvxẍz])', "%1%2i%3") --e.g. bra -> bira --word = gsub(word, '^([bcçdfghḧjklĽmnpqrŔsştvwẅxẍz])([bcçdfghḧjklĽmnpqrŔsştvxẍz])', "%1i%2") --e.g. bra -> bira --word = gsub(word, '([bcçdfghḧjklmnpqrsştvwẅxẍz][bcçdfghḧjklĽmnpqrŔsştvwẅxẍz])([bcçdfghḧjklĽmnpqrŔsştvwẅxẍz])', "%1i%2") --e.g. aşkra -> aşkira --word = gsub(word, 'si([tp][aeêiîouû])', "s%1") -- sp, st cluster word = gsub(word, 'Ľ', "ll") --revert the temporary conversion word = gsub(word, 'Ŕ', "rr") --revert the temporary conversion -- Add the punctuation who had previously deleted. word = word .. ponct return word end function export.tr(text, lang, sc) local textTab = {} -- Create a word table separated by a space (%s). for _, word in ipairs(mw.text.split(text, '%s+')) do table.insert(textTab, word) end -- Tablo of translit. for key, word in ipairs(textTab) do textTab[key] = tr_word(word) end return table.concat(textTab, ' ') end return export nyl8y43xba2k7f8nukjuhd2vo5fwsf8